rt-5.0.10/0000775000201500020150000000000015203533270010700 5ustar puckpuckrt-5.0.10/devel/0000775000201500020150000000000015203533270011777 5ustar puckpuckrt-5.0.10/devel/third-party/0000775000201500020150000000000015203533373014252 5ustar puckpuckrt-5.0.10/devel/third-party/jquery-ui-1.13.2.custom/0000775000201500020150000000000015203371200020222 5ustar puckpuckrt-5.0.10/devel/third-party/jquery-ui-1.13.2.custom/jquery-ui.js0000664000201500020150000070060015203371200022515 0ustar puckpuck/*! jQuery UI - v1.13.2 - 2022-08-16 * http://jqueryui.com * Includes: widget.js, position.js, data.js, keycode.js, scroll-parent.js, unique-id.js, widgets/sortable.js, widgets/autocomplete.js, widgets/datepicker.js, widgets/menu.js, widgets/mouse.js, widgets/slider.js * Copyright jQuery Foundation and other contributors; Licensed MIT */ ( function( factory ) { "use strict"; if ( typeof define === "function" && define.amd ) { // AMD. Register as an anonymous module. define( [ "jquery" ], factory ); } else { // Browser globals factory( jQuery ); } } )( function( $ ) { "use strict"; $.ui = $.ui || {}; var version = $.ui.version = "1.13.2"; /*! * jQuery UI Widget 1.13.2 * http://jqueryui.com * * Copyright jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license */ //>>label: Widget //>>group: Core //>>description: Provides a factory for creating stateful widgets with a common API. //>>docs: http://api.jqueryui.com/jQuery.widget/ //>>demos: http://jqueryui.com/widget/ var widgetUuid = 0; var widgetHasOwnProperty = Array.prototype.hasOwnProperty; var widgetSlice = Array.prototype.slice; $.cleanData = ( function( orig ) { return function( elems ) { var events, elem, i; for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) { // Only trigger remove when necessary to save time events = $._data( elem, "events" ); if ( events && events.remove ) { $( elem ).triggerHandler( "remove" ); } } orig( elems ); }; } )( $.cleanData ); $.widget = function( name, base, prototype ) { var existingConstructor, constructor, basePrototype; // ProxiedPrototype allows the provided prototype to remain unmodified // so that it can be used as a mixin for multiple widgets (#8876) var proxiedPrototype = {}; var namespace = name.split( "." )[ 0 ]; name = name.split( "." )[ 1 ]; var fullName = namespace + "-" + name; if ( !prototype ) { prototype = base; base = $.Widget; } if ( Array.isArray( prototype ) ) { prototype = $.extend.apply( null, [ {} ].concat( prototype ) ); } // Create selector for plugin $.expr.pseudos[ 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 || !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 ( typeof value !== "function" ) { proxiedPrototype[ prop ] = value; return; } proxiedPrototype[ prop ] = ( function() { function _super() { return base.prototype[ prop ].apply( this, arguments ); } function _superApply( args ) { return base.prototype[ prop ].apply( this, args ); } return function() { var __super = this._super; var __superApply = this._superApply; var 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 = widgetSlice.call( arguments, 1 ); var inputIndex = 0; var inputLength = input.length; var key; var value; for ( ; inputIndex < inputLength; inputIndex++ ) { for ( key in input[ inputIndex ] ) { value = input[ inputIndex ][ key ]; if ( widgetHasOwnProperty.call( input[ inputIndex ], 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"; var args = widgetSlice.call( arguments, 1 ); var returnValue = this; if ( isMethodCall ) { // If this is an empty collection, we need to have the instance method // return undefined instead of the jQuery instance if ( !this.length && options === "instance" ) { returnValue = undefined; } else { this.each( function() { var methodValue; var 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 ( typeof instance[ options ] !== "function" || 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: { classes: {}, disabled: false, // Callbacks create: null }, _createWidget: function( options, element ) { element = $( element || this.defaultElement || this )[ 0 ]; this.element = $( element ); this.uuid = widgetUuid++; this.eventNamespace = "." + this.widgetName + this.uuid; this.bindings = $(); this.hoverable = $(); this.focusable = $(); this.classesElementLookup = {}; 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(); if ( this.options.disabled ) { this._setOptionDisabled( this.options.disabled ); } this._trigger( "create", null, this._getCreateEventData() ); this._init(); }, _getCreateOptions: function() { return {}; }, _getCreateEventData: $.noop, _create: $.noop, _init: $.noop, destroy: function() { var that = this; this._destroy(); $.each( this.classesElementLookup, function( key, value ) { that._removeClass( value, key ); } ); // We can probably remove the unbind calls in 2.0 // all event bindings should go through this._on() this.element .off( this.eventNamespace ) .removeData( this.widgetFullName ); this.widget() .off( this.eventNamespace ) .removeAttr( "aria-disabled" ); // Clean up events and states this.bindings.off( this.eventNamespace ); }, _destroy: $.noop, widget: function() { return this.element; }, option: function( key, value ) { var options = key; var parts; var curOption; var 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 ) { if ( key === "classes" ) { this._setOptionClasses( value ); } this.options[ key ] = value; if ( key === "disabled" ) { this._setOptionDisabled( value ); } return this; }, _setOptionClasses: function( value ) { var classKey, elements, currentElements; for ( classKey in value ) { currentElements = this.classesElementLookup[ classKey ]; if ( value[ classKey ] === this.options.classes[ classKey ] || !currentElements || !currentElements.length ) { continue; } // We are doing this to create a new jQuery object because the _removeClass() call // on the next line is going to destroy the reference to the current elements being // tracked. We need to save a copy of this collection so that we can add the new classes // below. elements = $( currentElements.get() ); this._removeClass( currentElements, classKey ); // We don't use _addClass() here, because that uses this.options.classes // for generating the string of classes. We want to use the value passed in from // _setOption(), this is the new value of the classes option which was passed to // _setOption(). We pass this value directly to _classes(). elements.addClass( this._classes( { element: elements, keys: classKey, classes: value, add: true } ) ); } }, _setOptionDisabled: function( value ) { this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value ); // If the widget is becoming disabled, then nothing is interactive if ( value ) { this._removeClass( this.hoverable, null, "ui-state-hover" ); this._removeClass( this.focusable, null, "ui-state-focus" ); } }, enable: function() { return this._setOptions( { disabled: false } ); }, disable: function() { return this._setOptions( { disabled: true } ); }, _classes: function( options ) { var full = []; var that = this; options = $.extend( { element: this.element, classes: this.options.classes || {} }, options ); function bindRemoveEvent() { var nodesToBind = []; options.element.each( function( _, element ) { var isTracked = $.map( that.classesElementLookup, function( elements ) { return elements; } ) .some( function( elements ) { return elements.is( element ); } ); if ( !isTracked ) { nodesToBind.push( element ); } } ); that._on( $( nodesToBind ), { remove: "_untrackClassesElement" } ); } function processClassString( classes, checkOption ) { var current, i; for ( i = 0; i < classes.length; i++ ) { current = that.classesElementLookup[ classes[ i ] ] || $(); if ( options.add ) { bindRemoveEvent(); current = $( $.uniqueSort( current.get().concat( options.element.get() ) ) ); } else { current = $( current.not( options.element ).get() ); } that.classesElementLookup[ classes[ i ] ] = current; full.push( classes[ i ] ); if ( checkOption && options.classes[ classes[ i ] ] ) { full.push( options.classes[ classes[ i ] ] ); } } } if ( options.keys ) { processClassString( options.keys.match( /\S+/g ) || [], true ); } if ( options.extra ) { processClassString( options.extra.match( /\S+/g ) || [] ); } return full.join( " " ); }, _untrackClassesElement: function( event ) { var that = this; $.each( that.classesElementLookup, function( key, value ) { if ( $.inArray( event.target, value ) !== -1 ) { that.classesElementLookup[ key ] = $( value.not( event.target ).get() ); } } ); this._off( $( event.target ) ); }, _removeClass: function( element, keys, extra ) { return this._toggleClass( element, keys, extra, false ); }, _addClass: function( element, keys, extra ) { return this._toggleClass( element, keys, extra, true ); }, _toggleClass: function( element, keys, extra, add ) { add = ( typeof add === "boolean" ) ? add : extra; var shift = ( typeof element === "string" || element === null ), options = { extra: shift ? keys : extra, keys: shift ? element : keys, element: shift ? this.element : element, add: add }; options.element.toggleClass( this._classes( options ), add ); return this; }, _on: function( suppressDisabledCheck, element, handlers ) { var delegateElement; var 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*(.*)$/ ); var eventName = match[ 1 ] + instance.eventNamespace; var selector = match[ 2 ]; if ( selector ) { delegateElement.on( eventName, selector, handlerProxy ); } else { element.on( eventName, handlerProxy ); } } ); }, _off: function( element, eventName ) { eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace; element.off( 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 ) { this._addClass( $( event.currentTarget ), null, "ui-state-hover" ); }, mouseleave: function( event ) { this._removeClass( $( event.currentTarget ), null, "ui-state-hover" ); } } ); }, _focusable: function( element ) { this.focusable = this.focusable.add( element ); this._on( element, { focusin: function( event ) { this._addClass( $( event.currentTarget ), null, "ui-state-focus" ); }, focusout: function( event ) { this._removeClass( $( event.currentTarget ), null, "ui-state-focus" ); } } ); }, _trigger: function( type, event, data ) { var prop, orig; var 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 !( typeof callback === "function" && 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; var effectName = !options ? method : options === true || typeof options === "number" ? defaultEffect : options.effect || defaultEffect; options = options || {}; if ( typeof options === "number" ) { options = { duration: options }; } else if ( options === true ) { 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 Position 1.13.2 * http://jqueryui.com * * Copyright jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/position/ */ //>>label: Position //>>group: Core //>>description: Positions elements relative to other elements. //>>docs: http://api.jqueryui.com/position/ //>>demos: http://jqueryui.com/position/ ( function() { var cachedScrollbarWidth, max = Math.max, abs = Math.abs, 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 isWindow( obj ) { return obj != null && obj === obj.window; } 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 ), isElemWindow = isWindow( withinElement[ 0 ] ), isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9, hasOffset = !isElemWindow && !isDocument; return { element: withinElement, isWindow: isElemWindow, isDocument: isDocument, offset: hasOffset ? $( element ).offset() : { left: 0, top: 0 }, scrollLeft: withinElement.scrollLeft(), scrollTop: withinElement.scrollTop(), width: withinElement.outerWidth(), 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, // Make sure string options are treated as CSS selectors target = typeof options.of === "string" ? $( document ).find( options.of ) : $( 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 ]; 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 ); } } }; } )(); var position = $.ui.position; /*! * jQuery UI :data 1.13.2 * http://jqueryui.com * * Copyright jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license */ //>>label: :data Selector //>>group: Core //>>description: Selects elements which have data stored under the specified key. //>>docs: http://api.jqueryui.com/data-selector/ var data = $.extend( $.expr.pseudos, { 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 ] ); } } ); /*! * jQuery UI Keycode 1.13.2 * http://jqueryui.com * * Copyright jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license */ //>>label: Keycode //>>group: Core //>>description: Provide keycodes as keynames //>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/ var keycode = $.ui.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 }; /*! * jQuery UI Scroll Parent 1.13.2 * http://jqueryui.com * * Copyright jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license */ //>>label: scrollParent //>>group: Core //>>description: Get the closest ancestor element that is scrollable. //>>docs: http://api.jqueryui.com/scrollParent/ var scrollParent = $.fn.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; }; /*! * jQuery UI Unique ID 1.13.2 * http://jqueryui.com * * Copyright jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license */ //>>label: uniqueId //>>group: Core //>>description: Functions to generate and remove uniqueId's //>>docs: http://api.jqueryui.com/uniqueId/ var uniqueId = $.fn.extend( { 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" ); } } ); } } ); // This file is deprecated var ie = $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ); /*! * jQuery UI Mouse 1.13.2 * http://jqueryui.com * * Copyright jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license */ //>>label: Mouse //>>group: Widgets //>>description: Abstracts mouse-based interactions to assist in creating certain widgets. //>>docs: http://api.jqueryui.com/mouse/ var mouseHandled = false; $( document ).on( "mouseup", function() { mouseHandled = false; } ); var widgetsMouse = $.widget( "ui.mouse", { version: "1.13.2", options: { cancel: "input, textarea, button, select, option", distance: 1, delay: 0 }, _mouseInit: function() { var that = this; this.element .on( "mousedown." + this.widgetName, function( event ) { return that._mouseDown( event ); } ) .on( "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.off( "." + this.widgetName ); if ( this._mouseMoveDelegate ) { this.document .off( "mousemove." + this.widgetName, this._mouseMoveDelegate ) .off( "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) if ( 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 .on( "mousemove." + this.widgetName, this._mouseMoveDelegate ) .on( "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 ) { // Support: Safari <=8 - 9 // Safari sets which to 0 if you press any of the following keys // during a drag (#14461) if ( event.originalEvent.altKey || event.originalEvent.ctrlKey || event.originalEvent.metaKey || event.originalEvent.shiftKey ) { this.ignoreMissingWhich = true; } else if ( !this.ignoreMissingWhich ) { 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 ); if ( this._mouseStarted ) { this._mouseDrag( event ); } else { this._mouseUp( event ); } } return !this._mouseStarted; }, _mouseUp: function( event ) { this.document .off( "mousemove." + this.widgetName, this._mouseMoveDelegate ) .off( "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 ); } if ( this._mouseDelayTimer ) { clearTimeout( this._mouseDelayTimer ); delete this._mouseDelayTimer; } this.ignoreMissingWhich = false; mouseHandled = false; event.preventDefault(); }, _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 Sortable 1.13.2 * http://jqueryui.com * * Copyright jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license */ //>>label: Sortable //>>group: Interactions //>>description: Enables items in a list to be sorted using the mouse. //>>docs: http://api.jqueryui.com/sortable/ //>>demos: http://jqueryui.com/sortable/ //>>css.structure: ../../themes/base/sortable.css var widgetsSortable = $.widget( "ui.sortable", $.ui.mouse, { version: "1.13.2", widgetEventPrefix: "sort", ready: false, options: { appendTo: "parent", axis: false, connectWith: false, containment: false, cursor: "auto", cursorAt: false, dropOnEmpty: true, forcePlaceholderSize: false, forceHelperSize: false, grid: false, handle: false, helper: "original", items: "> *", opacity: false, placeholder: false, revert: false, scroll: true, scrollSensitivity: 20, scrollSpeed: 20, scope: "default", tolerance: "intersect", zIndex: 1000, // Callbacks activate: null, beforeStop: null, change: null, deactivate: null, out: null, over: null, receive: null, remove: null, sort: null, start: null, stop: null, update: null }, _isOverAxis: function( x, reference, size ) { return ( x >= reference ) && ( x < ( reference + size ) ); }, _isFloating: function( item ) { return ( /left|right/ ).test( item.css( "float" ) ) || ( /inline|table-cell/ ).test( item.css( "display" ) ); }, _create: function() { this.containerCache = {}; this._addClass( "ui-sortable" ); //Get the items this.refresh(); //Let's determine the parent's offset this.offset = this.element.offset(); //Initialize mouse events for interaction this._mouseInit(); this._setHandleClassName(); //We're ready to go this.ready = true; }, _setOption: function( key, value ) { this._super( key, value ); if ( key === "handle" ) { this._setHandleClassName(); } }, _setHandleClassName: function() { var that = this; this._removeClass( this.element.find( ".ui-sortable-handle" ), "ui-sortable-handle" ); $.each( this.items, function() { that._addClass( this.instance.options.handle ? this.item.find( this.instance.options.handle ) : this.item, "ui-sortable-handle" ); } ); }, _destroy: function() { this._mouseDestroy(); for ( var i = this.items.length - 1; i >= 0; i-- ) { this.items[ i ].item.removeData( this.widgetName + "-item" ); } return this; }, _mouseCapture: function( event, overrideHandle ) { var currentItem = null, validHandle = false, that = this; if ( this.reverting ) { return false; } if ( this.options.disabled || this.options.type === "static" ) { return false; } //We have to refresh the items data once first this._refreshItems( event ); //Find out if the clicked node (or one of its parents) is a actual item in this.items $( event.target ).parents().each( function() { if ( $.data( this, that.widgetName + "-item" ) === that ) { currentItem = $( this ); return false; } } ); if ( $.data( event.target, that.widgetName + "-item" ) === that ) { currentItem = $( event.target ); } if ( !currentItem ) { return false; } if ( this.options.handle && !overrideHandle ) { $( this.options.handle, currentItem ).find( "*" ).addBack().each( function() { if ( this === event.target ) { validHandle = true; } } ); if ( !validHandle ) { return false; } } this.currentItem = currentItem; this._removeCurrentsFromItems(); return true; }, _mouseStart: function( event, overrideHandle, noActivation ) { var i, body, o = this.options; this.currentContainer = this; //We only need to call refreshPositions, because the refreshItems call has been moved to // mouseCapture this.refreshPositions(); //Prepare the dragged items parent this.appendTo = $( o.appendTo !== "parent" ? o.appendTo : this.currentItem.parent() ); //Create and append the visible helper this.helper = this._createHelper( event ); //Cache the helper size this._cacheHelperProportions(); /* * - Position generation - * This block generates everything position related - it's the core of draggables. */ //Cache the margins of the original element this._cacheMargins(); //The element's absolute position on the page minus margins this.offset = this.currentItem.offset(); this.offset = { top: this.offset.top - this.margins.top, left: this.offset.left - this.margins.left }; $.extend( this.offset, { click: { //Where the click happened, relative to the element left: event.pageX - this.offset.left, top: event.pageY - this.offset.top }, // This is a relative to absolute position minus the actual position calculation - // only used for relative positioned helper relative: this._getRelativeOffset() } ); // After we get the helper offset, but before we get the parent offset we can // change the helper's position to absolute // TODO: Still need to figure out a way to make relative sorting possible this.helper.css( "position", "absolute" ); this.cssPosition = this.helper.css( "position" ); //Adjust the mouse offset relative to the helper if "cursorAt" is supplied if ( o.cursorAt ) { this._adjustOffsetFromHelper( o.cursorAt ); } //Cache the former DOM position this.domPosition = { prev: this.currentItem.prev()[ 0 ], parent: this.currentItem.parent()[ 0 ] }; // If the helper is not the original, hide the original so it's not playing any role during // the drag, won't cause anything bad this way if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) { this.currentItem.hide(); } //Create the placeholder this._createPlaceholder(); //Get the next scrolling parent this.scrollParent = this.placeholder.scrollParent(); $.extend( this.offset, { parent: this._getParentOffset() } ); //Set a containment if given in the options if ( o.containment ) { this._setContainment(); } if ( o.cursor && o.cursor !== "auto" ) { // cursor option body = this.document.find( "body" ); // Support: IE this.storedCursor = body.css( "cursor" ); body.css( "cursor", o.cursor ); this.storedStylesheet = $( "" ).appendTo( body ); } // We need to make sure to grab the zIndex before setting the // opacity, because setting the opacity to anything lower than 1 // causes the zIndex to change from "auto" to 0. if ( o.zIndex ) { // zIndex option if ( this.helper.css( "zIndex" ) ) { this._storedZIndex = this.helper.css( "zIndex" ); } this.helper.css( "zIndex", o.zIndex ); } if ( o.opacity ) { // opacity option if ( this.helper.css( "opacity" ) ) { this._storedOpacity = this.helper.css( "opacity" ); } this.helper.css( "opacity", o.opacity ); } //Prepare scrolling if ( this.scrollParent[ 0 ] !== this.document[ 0 ] && this.scrollParent[ 0 ].tagName !== "HTML" ) { this.overflowOffset = this.scrollParent.offset(); } //Call callbacks this._trigger( "start", event, this._uiHash() ); //Recache the helper size if ( !this._preserveHelperProportions ) { this._cacheHelperProportions(); } //Post "activate" events to possible containers if ( !noActivation ) { for ( i = this.containers.length - 1; i >= 0; i-- ) { this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) ); } } //Prepare possible droppables if ( $.ui.ddmanager ) { $.ui.ddmanager.current = this; } if ( $.ui.ddmanager && !o.dropBehaviour ) { $.ui.ddmanager.prepareOffsets( this, event ); } this.dragging = true; this._addClass( this.helper, "ui-sortable-helper" ); //Move the helper, if needed if ( !this.helper.parent().is( this.appendTo ) ) { this.helper.detach().appendTo( this.appendTo ); //Update position this.offset.parent = this._getParentOffset(); } //Generate the original position this.position = this.originalPosition = this._generatePosition( event ); this.originalPageX = event.pageX; this.originalPageY = event.pageY; this.lastPositionAbs = this.positionAbs = this._convertPositionTo( "absolute" ); this._mouseDrag( event ); return true; }, _scroll: function( event ) { var o = this.options, scrolled = false; if ( this.scrollParent[ 0 ] !== this.document[ 0 ] && this.scrollParent[ 0 ].tagName !== "HTML" ) { if ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) - event.pageY < o.scrollSensitivity ) { this.scrollParent[ 0 ].scrollTop = scrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed; } else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) { this.scrollParent[ 0 ].scrollTop = scrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed; } if ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) - event.pageX < o.scrollSensitivity ) { this.scrollParent[ 0 ].scrollLeft = scrolled = this.scrollParent[ 0 ].scrollLeft + o.scrollSpeed; } else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) { this.scrollParent[ 0 ].scrollLeft = scrolled = this.scrollParent[ 0 ].scrollLeft - o.scrollSpeed; } } else { if ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) { scrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed ); } else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) < o.scrollSensitivity ) { scrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed ); } if ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) { scrolled = this.document.scrollLeft( this.document.scrollLeft() - o.scrollSpeed ); } else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) < o.scrollSensitivity ) { scrolled = this.document.scrollLeft( this.document.scrollLeft() + o.scrollSpeed ); } } return scrolled; }, _mouseDrag: function( event ) { var i, item, itemElement, intersection, o = this.options; //Compute the helpers position this.position = this._generatePosition( event ); this.positionAbs = this._convertPositionTo( "absolute" ); //Set the helper position if ( !this.options.axis || this.options.axis !== "y" ) { this.helper[ 0 ].style.left = this.position.left + "px"; } if ( !this.options.axis || this.options.axis !== "x" ) { this.helper[ 0 ].style.top = this.position.top + "px"; } //Do scrolling if ( o.scroll ) { if ( this._scroll( event ) !== false ) { //Update item positions used in position checks this._refreshItemPositions( true ); if ( $.ui.ddmanager && !o.dropBehaviour ) { $.ui.ddmanager.prepareOffsets( this, event ); } } } this.dragDirection = { vertical: this._getDragVerticalDirection(), horizontal: this._getDragHorizontalDirection() }; //Rearrange for ( i = this.items.length - 1; i >= 0; i-- ) { //Cache variables and intersection, continue if no intersection item = this.items[ i ]; itemElement = item.item[ 0 ]; intersection = this._intersectsWithPointer( item ); if ( !intersection ) { continue; } // Only put the placeholder inside the current Container, skip all // items from other containers. This works because when moving // an item from one container to another the // currentContainer is switched before the placeholder is moved. // // Without this, moving items in "sub-sortables" can cause // the placeholder to jitter between the outer and inner container. if ( item.instance !== this.currentContainer ) { continue; } // Cannot intersect with itself // no useless actions that have been done before // no action if the item moved is the parent of the item checked if ( itemElement !== this.currentItem[ 0 ] && this.placeholder[ intersection === 1 ? "next" : "prev" ]()[ 0 ] !== itemElement && !$.contains( this.placeholder[ 0 ], itemElement ) && ( this.options.type === "semi-dynamic" ? !$.contains( this.element[ 0 ], itemElement ) : true ) ) { this.direction = intersection === 1 ? "down" : "up"; if ( this.options.tolerance === "pointer" || this._intersectsWithSides( item ) ) { this._rearrange( event, item ); } else { break; } this._trigger( "change", event, this._uiHash() ); break; } } //Post events to containers this._contactContainers( event ); //Interconnect with droppables if ( $.ui.ddmanager ) { $.ui.ddmanager.drag( this, event ); } //Call callbacks this._trigger( "sort", event, this._uiHash() ); this.lastPositionAbs = this.positionAbs; return false; }, _mouseStop: function( event, noPropagation ) { if ( !event ) { return; } //If we are using droppables, inform the manager about the drop if ( $.ui.ddmanager && !this.options.dropBehaviour ) { $.ui.ddmanager.drop( this, event ); } if ( this.options.revert ) { var that = this, cur = this.placeholder.offset(), axis = this.options.axis, animation = {}; if ( !axis || axis === "x" ) { animation.left = cur.left - this.offset.parent.left - this.margins.left + ( this.offsetParent[ 0 ] === this.document[ 0 ].body ? 0 : this.offsetParent[ 0 ].scrollLeft ); } if ( !axis || axis === "y" ) { animation.top = cur.top - this.offset.parent.top - this.margins.top + ( this.offsetParent[ 0 ] === this.document[ 0 ].body ? 0 : this.offsetParent[ 0 ].scrollTop ); } this.reverting = true; $( this.helper ).animate( animation, parseInt( this.options.revert, 10 ) || 500, function() { that._clear( event ); } ); } else { this._clear( event, noPropagation ); } return false; }, cancel: function() { if ( this.dragging ) { this._mouseUp( new $.Event( "mouseup", { target: null } ) ); if ( this.options.helper === "original" ) { this.currentItem.css( this._storedCSS ); this._removeClass( this.currentItem, "ui-sortable-helper" ); } else { this.currentItem.show(); } //Post deactivating events to containers for ( var i = this.containers.length - 1; i >= 0; i-- ) { this.containers[ i ]._trigger( "deactivate", null, this._uiHash( this ) ); if ( this.containers[ i ].containerCache.over ) { this.containers[ i ]._trigger( "out", null, this._uiHash( this ) ); this.containers[ i ].containerCache.over = 0; } } } if ( this.placeholder ) { //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, // it unbinds ALL events from the original node! if ( this.placeholder[ 0 ].parentNode ) { this.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] ); } if ( this.options.helper !== "original" && this.helper && this.helper[ 0 ].parentNode ) { this.helper.remove(); } $.extend( this, { helper: null, dragging: false, reverting: false, _noFinalSort: null } ); if ( this.domPosition.prev ) { $( this.domPosition.prev ).after( this.currentItem ); } else { $( this.domPosition.parent ).prepend( this.currentItem ); } } return this; }, serialize: function( o ) { var items = this._getItemsAsjQuery( o && o.connected ), str = []; o = o || {}; $( items ).each( function() { var res = ( $( o.item || this ).attr( o.attribute || "id" ) || "" ) .match( o.expression || ( /(.+)[\-=_](.+)/ ) ); if ( res ) { str.push( ( o.key || res[ 1 ] + "[]" ) + "=" + ( o.key && o.expression ? res[ 1 ] : res[ 2 ] ) ); } } ); if ( !str.length && o.key ) { str.push( o.key + "=" ); } return str.join( "&" ); }, toArray: function( o ) { var items = this._getItemsAsjQuery( o && o.connected ), ret = []; o = o || {}; items.each( function() { ret.push( $( o.item || this ).attr( o.attribute || "id" ) || "" ); } ); return ret; }, /* Be careful with the following core functions */ _intersectsWith: function( item ) { var x1 = this.positionAbs.left, x2 = x1 + this.helperProportions.width, y1 = this.positionAbs.top, y2 = y1 + this.helperProportions.height, l = item.left, r = l + item.width, t = item.top, b = t + item.height, dyClick = this.offset.click.top, dxClick = this.offset.click.left, isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ), isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ), isOverElement = isOverElementHeight && isOverElementWidth; if ( this.options.tolerance === "pointer" || this.options.forcePointerForContainers || ( this.options.tolerance !== "pointer" && this.helperProportions[ this.floating ? "width" : "height" ] > item[ this.floating ? "width" : "height" ] ) ) { return isOverElement; } else { return ( l < x1 + ( this.helperProportions.width / 2 ) && // Right Half x2 - ( this.helperProportions.width / 2 ) < r && // Left Half t < y1 + ( this.helperProportions.height / 2 ) && // Bottom Half y2 - ( this.helperProportions.height / 2 ) < b ); // Top Half } }, _intersectsWithPointer: function( item ) { var verticalDirection, horizontalDirection, isOverElementHeight = ( this.options.axis === "x" ) || this._isOverAxis( this.positionAbs.top + this.offset.click.top, item.top, item.height ), isOverElementWidth = ( this.options.axis === "y" ) || this._isOverAxis( this.positionAbs.left + this.offset.click.left, item.left, item.width ), isOverElement = isOverElementHeight && isOverElementWidth; if ( !isOverElement ) { return false; } verticalDirection = this.dragDirection.vertical; horizontalDirection = this.dragDirection.horizontal; return this.floating ? ( ( horizontalDirection === "right" || verticalDirection === "down" ) ? 2 : 1 ) : ( verticalDirection && ( verticalDirection === "down" ? 2 : 1 ) ); }, _intersectsWithSides: function( item ) { var isOverBottomHalf = this._isOverAxis( this.positionAbs.top + this.offset.click.top, item.top + ( item.height / 2 ), item.height ), isOverRightHalf = this._isOverAxis( this.positionAbs.left + this.offset.click.left, item.left + ( item.width / 2 ), item.width ), verticalDirection = this.dragDirection.vertical, horizontalDirection = this.dragDirection.horizontal; if ( this.floating && horizontalDirection ) { return ( ( horizontalDirection === "right" && isOverRightHalf ) || ( horizontalDirection === "left" && !isOverRightHalf ) ); } else { return verticalDirection && ( ( verticalDirection === "down" && isOverBottomHalf ) || ( verticalDirection === "up" && !isOverBottomHalf ) ); } }, _getDragVerticalDirection: function() { var delta = this.positionAbs.top - this.lastPositionAbs.top; return delta !== 0 && ( delta > 0 ? "down" : "up" ); }, _getDragHorizontalDirection: function() { var delta = this.positionAbs.left - this.lastPositionAbs.left; return delta !== 0 && ( delta > 0 ? "right" : "left" ); }, refresh: function( event ) { this._refreshItems( event ); this._setHandleClassName(); this.refreshPositions(); return this; }, _connectWith: function() { var options = this.options; return options.connectWith.constructor === String ? [ options.connectWith ] : options.connectWith; }, _getItemsAsjQuery: function( connected ) { var i, j, cur, inst, items = [], queries = [], connectWith = this._connectWith(); if ( connectWith && connected ) { for ( i = connectWith.length - 1; i >= 0; i-- ) { cur = $( connectWith[ i ], this.document[ 0 ] ); for ( j = cur.length - 1; j >= 0; j-- ) { inst = $.data( cur[ j ], this.widgetFullName ); if ( inst && inst !== this && !inst.options.disabled ) { queries.push( [ typeof inst.options.items === "function" ? inst.options.items.call( inst.element ) : $( inst.options.items, inst.element ) .not( ".ui-sortable-helper" ) .not( ".ui-sortable-placeholder" ), inst ] ); } } } } queries.push( [ typeof this.options.items === "function" ? this.options.items .call( this.element, null, { options: this.options, item: this.currentItem } ) : $( this.options.items, this.element ) .not( ".ui-sortable-helper" ) .not( ".ui-sortable-placeholder" ), this ] ); function addItems() { items.push( this ); } for ( i = queries.length - 1; i >= 0; i-- ) { queries[ i ][ 0 ].each( addItems ); } return $( items ); }, _removeCurrentsFromItems: function() { var list = this.currentItem.find( ":data(" + this.widgetName + "-item)" ); this.items = $.grep( this.items, function( item ) { for ( var j = 0; j < list.length; j++ ) { if ( list[ j ] === item.item[ 0 ] ) { return false; } } return true; } ); }, _refreshItems: function( event ) { this.items = []; this.containers = [ this ]; var i, j, cur, inst, targetData, _queries, item, queriesLength, items = this.items, queries = [ [ typeof this.options.items === "function" ? this.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) : $( this.options.items, this.element ), this ] ], connectWith = this._connectWith(); //Shouldn't be run the first time through due to massive slow-down if ( connectWith && this.ready ) { for ( i = connectWith.length - 1; i >= 0; i-- ) { cur = $( connectWith[ i ], this.document[ 0 ] ); for ( j = cur.length - 1; j >= 0; j-- ) { inst = $.data( cur[ j ], this.widgetFullName ); if ( inst && inst !== this && !inst.options.disabled ) { queries.push( [ typeof inst.options.items === "function" ? inst.options.items .call( inst.element[ 0 ], event, { item: this.currentItem } ) : $( inst.options.items, inst.element ), inst ] ); this.containers.push( inst ); } } } } for ( i = queries.length - 1; i >= 0; i-- ) { targetData = queries[ i ][ 1 ]; _queries = queries[ i ][ 0 ]; for ( j = 0, queriesLength = _queries.length; j < queriesLength; j++ ) { item = $( _queries[ j ] ); // Data for target checking (mouse manager) item.data( this.widgetName + "-item", targetData ); items.push( { item: item, instance: targetData, width: 0, height: 0, left: 0, top: 0 } ); } } }, _refreshItemPositions: function( fast ) { var i, item, t, p; for ( i = this.items.length - 1; i >= 0; i-- ) { item = this.items[ i ]; //We ignore calculating positions of all connected containers when we're not over them if ( this.currentContainer && item.instance !== this.currentContainer && item.item[ 0 ] !== this.currentItem[ 0 ] ) { continue; } t = this.options.toleranceElement ? $( this.options.toleranceElement, item.item ) : item.item; if ( !fast ) { item.width = t.outerWidth(); item.height = t.outerHeight(); } p = t.offset(); item.left = p.left; item.top = p.top; } }, refreshPositions: function( fast ) { // Determine whether items are being displayed horizontally this.floating = this.items.length ? this.options.axis === "x" || this._isFloating( this.items[ 0 ].item ) : false; // This has to be redone because due to the item being moved out/into the offsetParent, // the offsetParent's position will change if ( this.offsetParent && this.helper ) { this.offset.parent = this._getParentOffset(); } this._refreshItemPositions( fast ); var i, p; if ( this.options.custom && this.options.custom.refreshContainers ) { this.options.custom.refreshContainers.call( this ); } else { for ( i = this.containers.length - 1; i >= 0; i-- ) { p = this.containers[ i ].element.offset(); this.containers[ i ].containerCache.left = p.left; this.containers[ i ].containerCache.top = p.top; this.containers[ i ].containerCache.width = this.containers[ i ].element.outerWidth(); this.containers[ i ].containerCache.height = this.containers[ i ].element.outerHeight(); } } return this; }, _createPlaceholder: function( that ) { that = that || this; var className, nodeName, o = that.options; if ( !o.placeholder || o.placeholder.constructor === String ) { className = o.placeholder; nodeName = that.currentItem[ 0 ].nodeName.toLowerCase(); o.placeholder = { element: function() { var element = $( "<" + nodeName + ">", that.document[ 0 ] ); that._addClass( element, "ui-sortable-placeholder", className || that.currentItem[ 0 ].className ) ._removeClass( element, "ui-sortable-helper" ); if ( nodeName === "tbody" ) { that._createTrPlaceholder( that.currentItem.find( "tr" ).eq( 0 ), $( "", that.document[ 0 ] ).appendTo( element ) ); } else if ( nodeName === "tr" ) { that._createTrPlaceholder( that.currentItem, element ); } else if ( nodeName === "img" ) { element.attr( "src", that.currentItem.attr( "src" ) ); } if ( !className ) { element.css( "visibility", "hidden" ); } return element; }, update: function( container, p ) { // 1. If a className is set as 'placeholder option, we don't force sizes - // the class is responsible for that // 2. The option 'forcePlaceholderSize can be enabled to force it even if a // class name is specified if ( className && !o.forcePlaceholderSize ) { return; } // If the element doesn't have a actual height or width by itself (without // styles coming from a stylesheet), it receives the inline height and width // from the dragged item. Or, if it's a tbody or tr, it's going to have a height // anyway since we're populating them with s above, but they're unlikely to // be the correct height on their own if the row heights are dynamic, so we'll // always assign the height of the dragged item given forcePlaceholderSize // is true. if ( !p.height() || ( o.forcePlaceholderSize && ( nodeName === "tbody" || nodeName === "tr" ) ) ) { p.height( that.currentItem.innerHeight() - parseInt( that.currentItem.css( "paddingTop" ) || 0, 10 ) - parseInt( that.currentItem.css( "paddingBottom" ) || 0, 10 ) ); } if ( !p.width() ) { p.width( that.currentItem.innerWidth() - parseInt( that.currentItem.css( "paddingLeft" ) || 0, 10 ) - parseInt( that.currentItem.css( "paddingRight" ) || 0, 10 ) ); } } }; } //Create the placeholder that.placeholder = $( o.placeholder.element.call( that.element, that.currentItem ) ); //Append it after the actual current item that.currentItem.after( that.placeholder ); //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317) o.placeholder.update( that, that.placeholder ); }, _createTrPlaceholder: function( sourceTr, targetTr ) { var that = this; sourceTr.children().each( function() { $( " ", that.document[ 0 ] ) .attr( "colspan", $( this ).attr( "colspan" ) || 1 ) .appendTo( targetTr ); } ); }, _contactContainers: function( event ) { var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom, floating, axis, innermostContainer = null, innermostIndex = null; // Get innermost container that intersects with item for ( i = this.containers.length - 1; i >= 0; i-- ) { // Never consider a container that's located within the item itself if ( $.contains( this.currentItem[ 0 ], this.containers[ i ].element[ 0 ] ) ) { continue; } if ( this._intersectsWith( this.containers[ i ].containerCache ) ) { // If we've already found a container and it's more "inner" than this, then continue if ( innermostContainer && $.contains( this.containers[ i ].element[ 0 ], innermostContainer.element[ 0 ] ) ) { continue; } innermostContainer = this.containers[ i ]; innermostIndex = i; } else { // container doesn't intersect. trigger "out" event if necessary if ( this.containers[ i ].containerCache.over ) { this.containers[ i ]._trigger( "out", event, this._uiHash( this ) ); this.containers[ i ].containerCache.over = 0; } } } // If no intersecting containers found, return if ( !innermostContainer ) { return; } // Move the item into the container if it's not there already if ( this.containers.length === 1 ) { if ( !this.containers[ innermostIndex ].containerCache.over ) { this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash( this ) ); this.containers[ innermostIndex ].containerCache.over = 1; } } else { // When entering a new container, we will find the item with the least distance and // append our item near it dist = 10000; itemWithLeastDistance = null; floating = innermostContainer.floating || this._isFloating( this.currentItem ); posProperty = floating ? "left" : "top"; sizeProperty = floating ? "width" : "height"; axis = floating ? "pageX" : "pageY"; for ( j = this.items.length - 1; j >= 0; j-- ) { if ( !$.contains( this.containers[ innermostIndex ].element[ 0 ], this.items[ j ].item[ 0 ] ) ) { continue; } if ( this.items[ j ].item[ 0 ] === this.currentItem[ 0 ] ) { continue; } cur = this.items[ j ].item.offset()[ posProperty ]; nearBottom = false; if ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) { nearBottom = true; } if ( Math.abs( event[ axis ] - cur ) < dist ) { dist = Math.abs( event[ axis ] - cur ); itemWithLeastDistance = this.items[ j ]; this.direction = nearBottom ? "up" : "down"; } } //Check if dropOnEmpty is enabled if ( !itemWithLeastDistance && !this.options.dropOnEmpty ) { return; } if ( this.currentContainer === this.containers[ innermostIndex ] ) { if ( !this.currentContainer.containerCache.over ) { this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash() ); this.currentContainer.containerCache.over = 1; } return; } if ( itemWithLeastDistance ) { this._rearrange( event, itemWithLeastDistance, null, true ); } else { this._rearrange( event, null, this.containers[ innermostIndex ].element, true ); } this._trigger( "change", event, this._uiHash() ); this.containers[ innermostIndex ]._trigger( "change", event, this._uiHash( this ) ); this.currentContainer = this.containers[ innermostIndex ]; //Update the placeholder this.options.placeholder.update( this.currentContainer, this.placeholder ); //Update scrollParent this.scrollParent = this.placeholder.scrollParent(); //Update overflowOffset if ( this.scrollParent[ 0 ] !== this.document[ 0 ] && this.scrollParent[ 0 ].tagName !== "HTML" ) { this.overflowOffset = this.scrollParent.offset(); } this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash( this ) ); this.containers[ innermostIndex ].containerCache.over = 1; } }, _createHelper: function( event ) { var o = this.options, helper = typeof o.helper === "function" ? $( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) : ( o.helper === "clone" ? this.currentItem.clone() : this.currentItem ); //Add the helper to the DOM if that didn't happen already if ( !helper.parents( "body" ).length ) { this.appendTo[ 0 ].appendChild( helper[ 0 ] ); } if ( helper[ 0 ] === this.currentItem[ 0 ] ) { this._storedCSS = { width: this.currentItem[ 0 ].style.width, height: this.currentItem[ 0 ].style.height, position: this.currentItem.css( "position" ), top: this.currentItem.css( "top" ), left: this.currentItem.css( "left" ) }; } if ( !helper[ 0 ].style.width || o.forceHelperSize ) { helper.width( this.currentItem.width() ); } if ( !helper[ 0 ].style.height || o.forceHelperSize ) { helper.height( this.currentItem.height() ); } return helper; }, _adjustOffsetFromHelper: function( obj ) { if ( typeof obj === "string" ) { obj = obj.split( " " ); } if ( Array.isArray( obj ) ) { obj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 }; } if ( "left" in obj ) { this.offset.click.left = obj.left + this.margins.left; } if ( "right" in obj ) { this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; } if ( "top" in obj ) { this.offset.click.top = obj.top + this.margins.top; } if ( "bottom" in obj ) { this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; } }, _getParentOffset: function() { //Get the offsetParent and cache its position this.offsetParent = this.helper.offsetParent(); var po = this.offsetParent.offset(); // This is a special case where we need to modify a offset calculated on start, since the // following happened: // 1. The position of the helper is absolute, so it's position is calculated based on the // next positioned parent // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't // the document, which means that the scroll is included in the initial calculation of the // offset of the parent, and never recalculated upon drag if ( this.cssPosition === "absolute" && this.scrollParent[ 0 ] !== this.document[ 0 ] && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) { po.left += this.scrollParent.scrollLeft(); po.top += this.scrollParent.scrollTop(); } // This needs to be actually done for all browsers, since pageX/pageY includes this // information with an ugly IE fix if ( this.offsetParent[ 0 ] === this.document[ 0 ].body || ( this.offsetParent[ 0 ].tagName && this.offsetParent[ 0 ].tagName.toLowerCase() === "html" && $.ui.ie ) ) { po = { top: 0, left: 0 }; } return { top: po.top + ( parseInt( this.offsetParent.css( "borderTopWidth" ), 10 ) || 0 ), left: po.left + ( parseInt( this.offsetParent.css( "borderLeftWidth" ), 10 ) || 0 ) }; }, _getRelativeOffset: function() { if ( this.cssPosition === "relative" ) { var p = this.currentItem.position(); return { top: p.top - ( parseInt( this.helper.css( "top" ), 10 ) || 0 ) + this.scrollParent.scrollTop(), left: p.left - ( parseInt( this.helper.css( "left" ), 10 ) || 0 ) + this.scrollParent.scrollLeft() }; } else { return { top: 0, left: 0 }; } }, _cacheMargins: function() { this.margins = { left: ( parseInt( this.currentItem.css( "marginLeft" ), 10 ) || 0 ), top: ( parseInt( this.currentItem.css( "marginTop" ), 10 ) || 0 ) }; }, _cacheHelperProportions: function() { this.helperProportions = { width: this.helper.outerWidth(), height: this.helper.outerHeight() }; }, _setContainment: function() { var ce, co, over, o = this.options; if ( o.containment === "parent" ) { o.containment = this.helper[ 0 ].parentNode; } if ( o.containment === "document" || o.containment === "window" ) { this.containment = [ 0 - this.offset.relative.left - this.offset.parent.left, 0 - this.offset.relative.top - this.offset.parent.top, o.containment === "document" ? this.document.width() : this.window.width() - this.helperProportions.width - this.margins.left, ( o.containment === "document" ? ( this.document.height() || document.body.parentNode.scrollHeight ) : this.window.height() || this.document[ 0 ].body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top ]; } if ( !( /^(document|window|parent)$/ ).test( o.containment ) ) { ce = $( o.containment )[ 0 ]; co = $( o.containment ).offset(); over = ( $( ce ).css( "overflow" ) !== "hidden" ); this.containment = [ co.left + ( parseInt( $( ce ).css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( $( ce ).css( "paddingLeft" ), 10 ) || 0 ) - this.margins.left, co.top + ( parseInt( $( ce ).css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( $( ce ).css( "paddingTop" ), 10 ) || 0 ) - this.margins.top, co.left + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - ( parseInt( $( ce ).css( "borderLeftWidth" ), 10 ) || 0 ) - ( parseInt( $( ce ).css( "paddingRight" ), 10 ) || 0 ) - this.helperProportions.width - this.margins.left, co.top + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - ( parseInt( $( ce ).css( "borderTopWidth" ), 10 ) || 0 ) - ( parseInt( $( ce ).css( "paddingBottom" ), 10 ) || 0 ) - this.helperProportions.height - this.margins.top ]; } }, _convertPositionTo: function( d, pos ) { if ( !pos ) { pos = this.position; } var mod = d === "absolute" ? 1 : -1, scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent, scrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName ); return { top: ( // The absolute mouse position pos.top + // Only for relative positioned nodes: Relative offset from element to offset parent this.offset.relative.top * mod + // The offsetParent's offset without borders (offset + border) this.offset.parent.top * mod - ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod ) ), left: ( // The absolute mouse position pos.left + // Only for relative positioned nodes: Relative offset from element to offset parent this.offset.relative.left * mod + // The offsetParent's offset without borders (offset + border) this.offset.parent.left * mod - ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod ) ) }; }, _generatePosition: function( event ) { var top, left, o = this.options, pageX = event.pageX, pageY = event.pageY, scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent, scrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName ); // This is another very weird special case that only happens for relative elements: // 1. If the css position is relative // 2. and the scroll parent is the document or similar to the offset parent // we have to refresh the relative offset during the scroll so there are no jumps if ( this.cssPosition === "relative" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] && this.scrollParent[ 0 ] !== this.offsetParent[ 0 ] ) ) { this.offset.relative = this._getRelativeOffset(); } /* * - Position constraining - * Constrain the position to a mix of grid, containment. */ if ( this.originalPosition ) { //If we are not dragging yet, we won't check for options if ( this.containment ) { if ( event.pageX - this.offset.click.left < this.containment[ 0 ] ) { pageX = this.containment[ 0 ] + this.offset.click.left; } if ( event.pageY - this.offset.click.top < this.containment[ 1 ] ) { pageY = this.containment[ 1 ] + this.offset.click.top; } if ( event.pageX - this.offset.click.left > this.containment[ 2 ] ) { pageX = this.containment[ 2 ] + this.offset.click.left; } if ( event.pageY - this.offset.click.top > this.containment[ 3 ] ) { pageY = this.containment[ 3 ] + this.offset.click.top; } } if ( o.grid ) { top = this.originalPageY + Math.round( ( pageY - this.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ]; pageY = this.containment ? ( ( top - this.offset.click.top >= this.containment[ 1 ] && top - this.offset.click.top <= this.containment[ 3 ] ) ? top : ( ( top - this.offset.click.top >= this.containment[ 1 ] ) ? top - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top; left = this.originalPageX + Math.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ]; pageX = this.containment ? ( ( left - this.offset.click.left >= this.containment[ 0 ] && left - this.offset.click.left <= this.containment[ 2 ] ) ? left : ( ( left - this.offset.click.left >= this.containment[ 0 ] ) ? left - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left; } } return { top: ( // The absolute mouse position pageY - // Click offset (relative to the element) this.offset.click.top - // Only for relative positioned nodes: Relative offset from element to offset parent this.offset.relative.top - // The offsetParent's offset without borders (offset + border) this.offset.parent.top + ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) ) ), left: ( // The absolute mouse position pageX - // Click offset (relative to the element) this.offset.click.left - // Only for relative positioned nodes: Relative offset from element to offset parent this.offset.relative.left - // The offsetParent's offset without borders (offset + border) this.offset.parent.left + ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) ) ) }; }, _rearrange: function( event, i, a, hardRefresh ) { if ( a ) { a[ 0 ].appendChild( this.placeholder[ 0 ] ); } else { i.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ], ( this.direction === "down" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) ); } //Various things done here to improve the performance: // 1. we create a setTimeout, that calls refreshPositions // 2. on the instance, we have a counter variable, that get's higher after every append // 3. on the local scope, we copy the counter variable, and check in the timeout, // if it's still the same // 4. this lets only the last addition to the timeout stack through this.counter = this.counter ? ++this.counter : 1; var counter = this.counter; this._delay( function() { if ( counter === this.counter ) { //Precompute after each DOM insertion, NOT on mousemove this.refreshPositions( !hardRefresh ); } } ); }, _clear: function( event, noPropagation ) { this.reverting = false; // We delay all events that have to be triggered to after the point where the placeholder // has been removed and everything else normalized again var i, delayedTriggers = []; // We first have to update the dom position of the actual currentItem // Note: don't do it if the current item is already removed (by a user), or it gets // reappended (see #4088) if ( !this._noFinalSort && this.currentItem.parent().length ) { this.placeholder.before( this.currentItem ); } this._noFinalSort = null; if ( this.helper[ 0 ] === this.currentItem[ 0 ] ) { for ( i in this._storedCSS ) { if ( this._storedCSS[ i ] === "auto" || this._storedCSS[ i ] === "static" ) { this._storedCSS[ i ] = ""; } } this.currentItem.css( this._storedCSS ); this._removeClass( this.currentItem, "ui-sortable-helper" ); } else { this.currentItem.show(); } if ( this.fromOutside && !noPropagation ) { delayedTriggers.push( function( event ) { this._trigger( "receive", event, this._uiHash( this.fromOutside ) ); } ); } if ( ( this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not( ".ui-sortable-helper" )[ 0 ] || this.domPosition.parent !== this.currentItem.parent()[ 0 ] ) && !noPropagation ) { // Trigger update callback if the DOM position has changed delayedTriggers.push( function( event ) { this._trigger( "update", event, this._uiHash() ); } ); } // Check if the items Container has Changed and trigger appropriate // events. if ( this !== this.currentContainer ) { if ( !noPropagation ) { delayedTriggers.push( function( event ) { this._trigger( "remove", event, this._uiHash() ); } ); delayedTriggers.push( ( function( c ) { return function( event ) { c._trigger( "receive", event, this._uiHash( this ) ); }; } ).call( this, this.currentContainer ) ); delayedTriggers.push( ( function( c ) { return function( event ) { c._trigger( "update", event, this._uiHash( this ) ); }; } ).call( this, this.currentContainer ) ); } } //Post events to containers function delayEvent( type, instance, container ) { return function( event ) { container._trigger( type, event, instance._uiHash( instance ) ); }; } for ( i = this.containers.length - 1; i >= 0; i-- ) { if ( !noPropagation ) { delayedTriggers.push( delayEvent( "deactivate", this, this.containers[ i ] ) ); } if ( this.containers[ i ].containerCache.over ) { delayedTriggers.push( delayEvent( "out", this, this.containers[ i ] ) ); this.containers[ i ].containerCache.over = 0; } } //Do what was originally in plugins if ( this.storedCursor ) { this.document.find( "body" ).css( "cursor", this.storedCursor ); this.storedStylesheet.remove(); } if ( this._storedOpacity ) { this.helper.css( "opacity", this._storedOpacity ); } if ( this._storedZIndex ) { this.helper.css( "zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex ); } this.dragging = false; if ( !noPropagation ) { this._trigger( "beforeStop", event, this._uiHash() ); } //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, // it unbinds ALL events from the original node! this.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] ); if ( !this.cancelHelperRemoval ) { if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) { this.helper.remove(); } this.helper = null; } if ( !noPropagation ) { for ( i = 0; i < delayedTriggers.length; i++ ) { // Trigger all delayed events delayedTriggers[ i ].call( this, event ); } this._trigger( "stop", event, this._uiHash() ); } this.fromOutside = false; return !this.cancelHelperRemoval; }, _trigger: function() { if ( $.Widget.prototype._trigger.apply( this, arguments ) === false ) { this.cancel(); } }, _uiHash: function( _inst ) { var inst = _inst || this; return { helper: inst.helper, placeholder: inst.placeholder || $( [] ), position: inst.position, originalPosition: inst.originalPosition, offset: inst.positionAbs, item: inst.currentItem, sender: _inst ? _inst.element : null }; } } ); var safeActiveElement = $.ui.safeActiveElement = function( document ) { var activeElement; // Support: IE 9 only // IE9 throws an "Unspecified error" accessing document.activeElement from an ' ); 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, recreateEditable = false, isIE11 = CKEDITOR.env.ie && CKEDITOR.env.version === 11, isMutationObserverSupported = !!window.MutationObserver, mutationObserver; 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(); } if ( isMutationObserverSupported ) { mutationObserver.disconnect(); } } ); editor.on( 'destroy', function() { if ( mutationObserver ) { mutationObserver.disconnect(); } } ); 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(); if ( editor.isDestroyed() || editor.isDetached() ) { return; } editor.editable( new framedWysiwyg( editor, iframe.getFrameDocument().getBody() ) ); editor.setData( editor.getData( 1 ), callback ); // Skip IE's below version 11. They don't support MutationObserver (#4462). if ( !isMutationObserverSupported ) { return; } if ( isIE11 ) { editor.on( 'mode', attachIframeReloader, { iframe: iframe, editor: editor, callback: callback } ); } editor.on( 'mode', function() { editor.status = 'ready'; } ); observeEditor(); } function attachIframeReloader( evt ) { evt && evt.removeListener(); iframe.on( 'load', function() { if ( recreateEditable ) { recreateEditable = false; recreate(); } } ); } function observeEditor() { mutationObserver = new MutationObserver( function( mutationsList ) { for ( var index = 0; index < mutationsList.length; index++ ) { verifyIfAddsNodesWithEditor( mutationsList[ index ] ); } } ); mutationObserver.observe( editor.config.observableParent, { childList: true, subtree: true } ); } function verifyIfAddsNodesWithEditor( mutation ) { if ( mutation.type !== 'childList' || mutation.addedNodes.length === 0 ) { return; } for ( var index = 0; index < mutation.addedNodes.length; index++ ) { checkIfAffectsEditor( mutation.addedNodes[ index ] ); } } function checkIfAffectsEditor( node ) { if ( !node.contains || !node.contains( editor.container.$ ) ) { return; } if ( !isIE11 ) { recreate(); return; } recreateEditable = true; } function recreate() { var cacheData = editor.getData( false ), newEditable; // Remove current editable, but preserve iframe. editor.editable().preserveIframe = true; editor.editable( null ); newEditable = new framedWysiwyg( editor, iframe.getFrameDocument().getBody() ); editor.editable( newEditable ); editor.status = 'recreating'; editor.setData( cacheData, { callback: callback, internal: false, noSnapshot: false } ); } } ); } } ); /** * 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.0 * @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; if ( !editor || editor.isDetached() ) { return; } var 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. (https://dev.ckeditor.com/ticket/141 / https://dev.ckeditor.com/ticket/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(); var editable = this; // Without it IE8 has problem with removing selection in nested editable. (https://dev.ckeditor.com/ticket/13785) if ( CKEDITOR.env.ie && !CKEDITOR.env.edge ) { doc.getDocumentElement().addClass( doc.$.compatMode ); } // Prevent IE/Edge from leaving a new paragraph/div after deleting all contents in body (https://dev.ckeditor.com/ticket/6966, https://dev.ckeditor.com/ticket/13142). if ( CKEDITOR.env.ie && !CKEDITOR.env.edge && editor.enterMode != CKEDITOR.ENTER_P ) { removeSuperfluousElement( 'p' ); } // Starting from Edge 15 additional `div` is not added to the editor. else if ( CKEDITOR.env.edge && CKEDITOR.env.version < 15 && editor.enterMode != CKEDITOR.ENTER_DIV ) { removeSuperfluousElement( 'div' ); } // Fix problem with cursor not appearing in Webkit and IE11+ when clicking below the body (https://dev.ckeditor.com/ticket/10945, https://dev.ckeditor.com/ticket/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. (https://dev.ckeditor.com/ticket/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. (https://dev.ckeditor.com/ticket/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. (https://dev.ckeditor.com/ticket/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. (https://dev.ckeditor.com/ticket/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. (https://dev.ckeditor.com/ticket/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 (https://dev.ckeditor.com/ticket/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 (https://dev.ckeditor.com/ticket/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 ); function removeSuperfluousElement( tagName ) { var lockRetain = false; // Superfluous elements appear after keydown // and before keyup, so the procedure is as follows: // 1. On first keydown mark all elements with // a specified tag name as non-superfluous. editable.attachListener( editable, 'keydown', function() { var body = doc.getBody(), retained = body.getElementsByTag( tagName ); if ( !lockRetain ) { for ( var i = 0; i < retained.count(); i++ ) { retained.getItem( i ).setCustomData( 'retain', true ); } lockRetain = true; } }, null, null, 1 ); // 2. On keyup remove all elements that were not marked // as non-superfluous (which means they must have had appeared in the meantime). // Also we should preserve all temporary elements inserted by editor – otherwise we'd likely // leak fake selection's content into editable due to removing hidden selection container (https://dev.ckeditor.com/ticket/14831). editable.attachListener( editable, 'keyup', function() { var elements = doc.getElementsByTag( tagName ); if ( lockRetain ) { if ( elements.count() == 1 && !elements.getItem( 0 ).getCustomData( 'retain' ) && CKEDITOR.tools.isEmpty( elements.getItem( 0 ).getAttributes() ) ) { elements.getItem( 0 ).remove( 1 ); } lockRetain = false; } } ); } } 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.(https://dev.ckeditor.com/ticket/4397) CKEDITOR.tools.setTimeout( onDomReady, 0, this, win ); }, this ); // In case of lack of the title attribute, use non-breaking space. // It needs to be as a raw character because HTML entity can cause issues in IE. this._.docTitle = this.getWindow().getFrame().getAttribute( 'title' ) || '\xa0'; }, base: CKEDITOR.editable, proto: { preserveIframe: false, 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. (https://dev.ckeditor.com/ticket/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( /' } ] } ], buttons: [ CKEDITOR.dialog.cancelButton ] }; } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/0000755000201500020150000000000015203533226024306 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/zh.js0000664000201500020150000001137715203533226025300 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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 以使用分é åˆ—表。焦點在分é åˆ—è¡¨ä¸Šæ™‚ï¼Œåˆ†åˆ¥ä½¿ç”¨å³æ–¹å‘éµåŠå·¦æ–¹å‘éµç§»å‹•到下一個åŠä¸Šä¸€å€‹åˆ†é ã€‚按下 ESC 以放棄變更且關閉å°è©±æ–¹å¡Šã€‚離開å°è©±æ–¹å¡Šæ™‚,焦點將會移回至編輯å€åŸŸã€‚' }, { 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}ã€' }, { name: '以純文字貼上', legend: '按 ${pastetext}', legendEdge: '按 ${pastetext},å†ä¾†æ˜¯ ${paste}' } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Esc', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: 'å‘左箭號', upArrow: 'å‘上éµè™Ÿ', rightArrow: 'å‘å³éµè™Ÿ', downArrow: 'å‘下éµè™Ÿ', insert: 'æ’å…¥', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/nb.js0000664000201500020150000001154015203533226025246 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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}' }, { name: 'Lim inn som ren tekst', legend: 'Trykk ${pastetext}', legendEdge: 'Trykk ${pastetext}, etterfulgt av ${past}' } ] } ], tab: 'Tabulator', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: 'Venstre piltast', upArrow: 'Opp-piltast', rightArrow: 'Høyre piltast', downArrow: 'Ned-piltast', insert: 'Insert', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/eo.js0000664000201500020150000001226315203533226025255 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'En dialogo, premu la TABAN klavon por navigi al la sekva dialogelemento, premu la MAJUSKLIGAN+TABAN klavon por iri al la antaÅ­a dialogelemento, premu la ENEN klavon por sendi la dialogon, premu la ESKAPAN klavon por nuligi la dialogon. Kiam dialogo havas multajn langetojn, eblas atingi la langetliston aÅ­ per ALT+F10 aÅ­ per la TABA klavo kiel parton de la dialoga taba ordo. En langetlisto, moviÄu al la sekva kaj antaÅ­a langeto per la klavoj SAGO DEKSTREN KAJ MALDEKSTREN respektive.' }, { 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}' }, { name: 'Algluu kiel platan tekston', legend: 'Presu ${pastetext}', legendEdge: 'Presu ${pastetext}, sekvatan de ${paste}' } ] } ], tab: 'Tabo', pause: 'PaÅ­zo', capslock: 'Majuskla baskulo', escape: 'Eskapa klavo', pageUp: 'AntaÅ­a PaÄo', pageDown: 'Sekva PaÄo', leftArrow: 'Sago Maldekstren', upArrow: 'Sago Supren', rightArrow: 'Sago Dekstren', downArrow: 'Sago Suben', insert: 'Enmeti', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/es.js0000664000201500020150000001232615203533226025261 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'Dentro del diálogo, presione TAB para navegar a los siguientes elementos de diálogo, presione SHIFT+TAB para moverse a los anteriores elementos de diálogo, presione ENTER para enviar el diálogo, presiona ESC para cancelar el diálogo. Cuando el diálogo tiene multiples pestañas, la lista de pestañas puede ser abarcada con ALT + F10 or con TAB como parte del orden de pestañas del diálogo. ECon la pestaña enfocada, puede moverse a la siguiente o anterior pestaña con las FLECHAS IZQUIRDA y DERECHA respectivamente.' }, { 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}' }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tabulador', pause: 'Pausa', capslock: 'Bloq. Mayús.', escape: 'Escape', pageUp: 'Regresar Página', pageDown: 'Avanzar Página', leftArrow: 'Flecha Izquierda', upArrow: 'Flecha Arriba', rightArrow: 'Flecha Derecha', downArrow: 'Flecha Abajo', insert: 'Insertar', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ro.js0000664000201500020150000001170615203533226025273 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'ro', { title: 'InstrucÈ›iuni Accesibilitate', contents: 'Cuprins. Pentru a închide acest dialog, apăsaÈ›i tasta ESC.', legend: [ { name: 'General', items: [ { name: 'Editor bară de instrumente.', legend: 'Apasă ${toolbarFocus} pentru a naviga pe de instrumente. Pentru deplasarea la următorul sau anteriorul grup de instrumente se folosesc tastele TAB È™i SHIFT+TAB. Pentru deplasare pe urmatorul sau anteriorul instrument se folosesc tastele SÄ‚GEATÄ‚ DREAPTA sau SÄ‚GEATÄ‚ STÂNGA. Tasta SPAÈšIU sau ENTER activează instrumentul.' }, { name: 'Dialog editor', legend: 'ÃŽn interiorul unui dialog, se apasă TAB pentru navigarea la următorul element de dialog, SHIFT+TAB pentru deplasarea la anteriorul element de dialog, ENTER pentru validare dialog, ESC pentru anulare dialog. Când un dialog are secÈ›iuni multiple, lista secÈ›iunilor este accesibilă cu ALT+F10 sau cu TAB ca parte a ordonării secÈ›ionării dialogului. Cu lista secÈ›iunii activată, deplasarea înainte înapoi se face cu tastele SÄ‚GEATÄ‚ DREAPTA È™i respectiv STÂNGA.' }, { name: 'Editor meniu contextual', legend: 'Apasă ${contextMenu} sau TASTA MENIU pentru a deschide meniul contextual. Se trece la următoarea opÈ›iune din meniu cu TAB sau SÄ‚GEATÄ‚ JOS. La opÈ›iunea anterioară cu SHIFT+TAB sau SÄ‚GEATÄ‚ SUS. Se apasă SPAÈšIU sau ENTER pentru a selecta opÈ›iunea. Deschide sub-meniul opÈ›iunii curente cu SPAÈšIU sau ENTER sau SÄ‚GEATÄ‚ DREAPTA. Se revine la elementul din meniul părinte cu ESC sau SÄ‚GEATÄ‚ STÂNGA. ÃŽnchide meniul de context cu ESC.' }, { name: 'Caseta listă a editorului', 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: 'Bara căii editorului de elemente', legend: 'Apasă ${elementsPathFocus} pentru navigare pe elementele barei. Mergi la următorul buton cu TAB sau SÄ‚GEATÄ‚ JOS. Treci la butonul anterior din listă cu SHIFT+TAB sau SÄ‚GEATÄ‚ SUS. Apasă SPAÈšIU sau ENTER pentru a selecta butonul în editor.' } ] }, { name: 'Comenzi', items: [ { name: 'Revino anterior (Undo)', legend: 'Apasă ${undo}' }, { name: 'Comanda precedentă', legend: 'Apasă ${redo}' }, { name: 'ÃŽngroÈ™at (Bold)', legend: 'Apasă ${bold}' }, { name: 'ÃŽnclinat (Italic)', legend: 'Apasă ${italic}' }, { name: 'Subliniere (Underline)', legend: 'Apasă ${underline}' }, { name: 'Legatură (Link)', legend: 'Apasă ${link}' }, { name: 'Desfășurare Bară instrumente', legend: 'Apasă ${toolbarCollapse}' }, { name: 'Accesare spaÈ›iu focus anterior', legend: 'Apasă ${accessPreviousSpace} pentru a accesa cel mai apropiat spaÈ›iu focus indisponibil înaintea cursorului, de exemplu: 2 elemente adiacente HR. Repetă combinaÈ›ia de taste pentru a accesa spaÈ›iile îndepărtate de focus.' }, { name: 'Accesare spaÈ›iu focus următor', legend: 'Apasă ${accessNextSpace} pentru a accesa cel mai apropiat spaÈ›iu focus indisponibil după cursor, de exemplu: 2 elemente adiacente HR. Repetă combinaÈ›ia de taste pentru a accesa spaÈ›iile îndepărtate de focus.' }, { name: 'Ajutor Accesibilitate', legend: 'Apasă ${a11yHelp}' }, { name: 'Adaugă ca Text simplu (Plain Text)', legend: 'Apasă ${pastetext}', legendEdge: 'Apasă ${pastetext}, urmat de ${paste}' } ] } ], tab: 'TAB', pause: 'Pauză', capslock: 'Majuscule', escape: 'Esc - renunță', pageUp: 'Pagină sus', pageDown: 'Săgeată jos', leftArrow: 'Săgeată stânga', upArrow: 'Săgeată sus', rightArrow: 'Săgeată dreapta', downArrow: 'Săgeată jos', insert: 'Inserează', leftWindowKey: 'Windows stânga', rightWindowKey: 'Windows dreapta', selectKey: 'Tasta SelecÈ›ie', numpad0: '0 Numeric', numpad1: '1 Numeric', numpad2: '2 Numeric', numpad3: '3 Numeric', numpad4: '4 Numeric', numpad5: '5 Numeric', numpad6: '6 Numeric', numpad7: '7 Numeric', numpad8: '8 Numeric', numpad9: '9 Numeric', multiply: 'ÃŽnmulÈ›ire', add: 'Adunare', subtract: 'Scădere', decimalPoint: 'Punct zecimal', divide: 'ÃŽmpărÈ›ire', 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: 'NumLock', scrollLock: 'Scroll Lock', semiColon: 'Punct È™i virgulă', equalSign: 'Egal', comma: 'Virgulă', dash: 'Linie', period: 'Punct', forwardSlash: 'Slash', graveAccent: 'Accent grav', openBracket: 'Paranteză dreaptă stânga', backSlash: 'Backslash', closeBracket: 'Paranteză dreaptă dreapta', singleQuote: 'Ghilimea simplă' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/hr.js0000664000201500020150000001126115203533226025260 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'Unutar dijaloga, pritisnite TAB kako bi navigirali do sljedećeg elementa dijaloga, pritisnite SHIFT+TAB kako bi se pomaknuli do prethodnog elementa, pritisnite ENTER kako bi poslali dijalog, pritisnite ESC za gaÅ¡enje dijaloga. Kada dijalog ima viÅ¡e kartica, listi kartica se može pristupiti pomoću ALT+F10 ili sa TAB. Kada je fokusirana lista kartica, pomaknite se naprijed ili nazad pomoću strelica LIJEVO ili DESNO.' }, { 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: 'Naredba za pristupi prethodnom prostoru fokusa', 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: 'Naredba za pristup sljedećem prostoru fokusa', 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}' }, { name: 'Zalijepi kao Äisti tekst', legend: 'Pritisnite ${pastetext}', legendEdge: 'Pritisnite ${pastetext}, zatim ${paste}' } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: 'Lijev strelica', upArrow: 'Strelica gore', rightArrow: 'Desna strelica', downArrow: 'Strelica dolje', insert: 'Insert', leftWindowKey: 'Lijeva Windows tipka', rightWindowKey: 'Desna Windows tipka', selectKey: 'Tipka 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: 'umpad 8', numpad9: 'Numpad 9', multiply: 'Množenje', add: 'Zbrajanje', subtract: 'Oduzimanje', decimalPoint: 'Decimalna toÄka', divide: 'Dijeljenje', 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: 'ToÄka zarez', equalSign: 'Jednako', comma: 'Zarez', dash: 'Crtica', period: 'ToÄka', forwardSlash: 'Kosa crta', graveAccent: 'Akcent', openBracket: 'Otvorena uglata zagrada', backSlash: 'Obrnuta kosa crta', closeBracket: 'Zatvorena uglata zagrada', singleQuote: 'Jednostruki navodnik' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/it.js0000664000201500020150000001317715203533226025273 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'Premi ${toolbarFocus} per accedere alla barra degli strumenti. Passa al gruppo di barre degli strumenti successivo o precedente con TAB o MAIUSC+TAB. Passa al pulsante della barra degli strumenti successivo o precedente con FRECCIA DESTRA o FRECCIA SINISTRA. Premi SPAZIO o INVIO per attivare il pulsante della barra degli strumenti. Lo stato attivo verrà riportato all\'area di modifica dopo l\'attivazione del pulsante della barra degli strumenti.' }, { name: 'Finestra Editor', legend: 'All\'interno di una finestra di dialogo, premi TAB per passare all\'elemento della finestra di dialogo successivo, premi MAIUSC+TAB per passare all\'elemento della finestra di dialogo precedente, premi INVIO per inviare la finestra di dialogo, premi ESC per annullare la finestra di dialogo. Quando una finestra di dialogo ha più schede, l\'elenco delle schede può essere raggiunto con ALT+F10 o con TAB come parte dell\'ordine di tabulazione della finestra di dialogo. Mentre l\'elenco delle schede è attivo, passa alla scheda successiva o precedente rispettivamente con FRECCIA DESTRA o SINISTRA. Premi ESC per annullare le modifiche e chiudere la finestra di dialogo. Lo stato attivo verrà spostato nuovamente all\'area di modifica dopo aver lasciato la finestra di dialogo.' }, { 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}' }, { name: 'Incolla come testo semplice', legend: 'Premi ${pastetext}', legendEdge: 'Premi ${pastetext}, seguito da ${paste}' } ] } ], tab: 'Tab', pause: 'Pausa', capslock: 'Bloc Maiusc', escape: 'Esc', pageUp: 'Pagina sù', pageDown: 'Pagina giù', leftArrow: 'Freccia sinistra', upArrow: 'Freccia su', rightArrow: 'Freccia destra', downArrow: 'Freccia giù', insert: 'Ins', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/de-ch.js0000664000201500020150000001213615203533226025631 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'de-ch', { 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 zu aktivieren.' }, { name: 'Editordialog', legend: 'Drücken Sie innerhalb eines Dialogs TAB, um zum nächsten Element zu springen. Drücken Sie SHIFT+TAB, um zum vorigen Element zu springen, drücke ENTER um das Formular im Dialog abzusenden, drücken Sie ESC, um den Dialog zu schliessen. Hat der Dialog mehrere Tabs, dann können Sie durch ALT+F10 die Tab-Liste aufrufen or mittels TAB als Teil der Dialog-Tab-Reihenfolge. Ist die Tab-Liste fokussiert, kann mithilfe der Pfeiltasten (LINKS und RECHTS) zwischen den Tabs gewechselt werden.' }, { name: 'Editor-Kontextmenü', legend: 'Drücken 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 Pfeil-runter-Taste den nächsten Menüeintrag wählen. Mit der SHIFT+TAB Tastenkombination oder der Pfeil-hoch-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 Pfeil-rechts-Taste. Zum vorherigen Element gelangen Sie mit der SHIFT+TAB oder der Pfeil-links-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 zum letzten Fokus-Bereich', legend: 'Drücken Sie ${accessPreviousSpace}, um zum nächsten unerreichbaren Fokus-Bereich vor der aktuellen Position zu gelangen. Zum Beispiel: zwei benachbarte HR-Elemente. Wiederholen Sie die Tastenkombination, um weitere Fokus-Bereichen zu erreichen. ' }, { name: 'Zugang zum nächsten Fokus-Bereich', legend: 'Drücken Sie $ { accessNextSpace }, um den nächsten unerreichbaren Fokusbereich vor der aktuellen Position zu gelangen. Zum Beispiel: zwei benachbarten HR Elemente. Wiederholen Sie die Tastenkombination, um weitere Fokus-Bereiche zu erreichen. ' }, { name: 'Eingabehilfen', legend: 'Drücken Sie ${a11yHelp}' }, { name: 'Als Klartext einfügen', legend: 'Drücken Sie ${pastetext}', legendEdge: 'Drücken Sie ${pastetext} und anschliessend ${paste}' } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Feststell', escape: 'Escape', pageUp: 'Bild auf', pageDown: 'Bild ab', leftArrow: 'Linke Pfeiltaste', upArrow: 'Obere Pfeiltaste', rightArrow: 'Rechte Pfeiltaste', downArrow: 'Untere Pfeiltaste', insert: 'Einfügen', 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: 'Accent grave', openBracket: 'Öffnende eckige Klammer', backSlash: 'Rückwärtsgewandter Schrägstrich', closeBracket: 'Schliessende eckige Klammer', singleQuote: 'Einfaches Anführungszeichen' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/sk.js0000664000201500020150000001223115203533226025262 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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Äením ${toolbarFocus} prejdete na panel nástrojov. Medzi ÄalÅ¡ou a predchádzajúcou skupinou sa pohybujete s TAB a SHIFT+TAB. Medzi Äalším a predchádzajúcim tlaÄidlom na panelu nástrojov sa pohybujete s Å ÃPKA VPRAVO a Å ÃPKA VĽAVO. StlaÄte medzerník alebo ENTER pre aktiváciu tlaÄidla liÅ¡ty nástrojov. Po aktivácii tlaÄidla sa fókus presunie späť do editaÄnej oblasti.' }, { name: 'Editorový dialóg', legend: 'V dialógovom okne stlaÄte TAB pre presun na Äalší prvok, SHIFT+TAB pre presun na predchádzajúci prvok, ENTER pre odoslanie, ESC pre zruÅ¡enie. KeÄ má dialógové okno viacero kariet, zoznam kariet dosiahnete buÄ stlaÄením ALT+F10 alebo s TAB v prísluÅ¡nom poradí kariet. So zameraným zoznamom kariet sa pohybujte k ÄalÅ¡ej alebo predchádzajúcej karte cez PRAVÚ a ĽAVÚ Å ÃPKU.' }, { 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}' }, { name: 'VložiÅ¥ ako Äistý text', legend: 'StlaÄte ${pastetext}', legendEdge: 'StlaÄte ${pastetext} a potom ${paste}' } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Stránka hore', pageDown: 'Stránka dole', leftArrow: 'Šípka naľavo', upArrow: 'Šípka hore', rightArrow: 'Šípka napravo', downArrow: 'Šípka dole', insert: 'Insert', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/az.js0000664000201500020150000001134415203533226025263 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'az', { title: 'ÆlillÉ™rÉ™ dÉ™stÉ™k üzrÉ™ tÉ™limat', contents: 'KömÉ™k. PÉ™ncÉ™rÉ™ni baÄŸlamaq üçün ESC basın.', legend: [ { name: 'Æsas', items: [ { name: 'DüzÉ™liÅŸ edÉ™nin alÉ™tlÉ™r çubuÄŸu', legend: 'PanelÉ™ keçmÉ™k üçün ${toolbarFocus} basın. NövbÉ™ti panelÉ™ TAB, É™vvÉ™lki panelÉ™ isÉ™ SHIFT+TAB düymÉ™si vasitÉ™si ilÉ™ keçə bilÉ™rsiz. PaneldÉ™ki düymÉ™lÉ™r arasında sol vÉ™ saÄŸ ox düymÉ™si ilÉ™ keçid edÉ™ bilÉ™rsiz. SeçilmiÅŸ düymÉ™si SPACE vÉ™ ya ENTER ilÉ™ iÅŸlÉ™dÉ™ bilÉ™rsiniz.' }, { name: 'Redaktorun pÉ™ncÉ™rÉ™si', legend: 'PÉ™ncÉ™rÉ™ içindÉ™ növbÉ™ti element seçmÉ™k üçün TAB düymÉ™ni basın, É™vvÉ™lki isÉ™ - SHIFT+TAB. TÉ™sdiq edilmÉ™si üçün ENTER, imtina edilmÉ™si isÉ™ ESC diymÉ™lÉ™ri istifadÉ™ edin. PÉ™ncÉ™rÉ™dÉ™ bir neçə vÉ™rÉ™q olanda olnarın siyahı ALT+F10 ilÉ™ aça bilÉ™rsiz. VÉ™rÉ™qlÉ™rin siyahı fokus altında olanda ox düymÉ™lÉ™r vasitÉ™si ilÉ™ onların arasında keçid edÉ™ bilÉ™rsiz.' }, { name: 'Redaktorun seçimlÉ™rin menyusu', legend: 'SeçimlÉ™ri redaktÉ™ etmÉ™k üçün ${contextMenu} ya da APPLICATION KEY basın. NövbÉ™ti seçimÉ™ keçmÉ™k üçün TAB ya AÅžAÄžI OX düymÉ™sini basın, É™vvÉ™lki isÉ™ - SHIFT+TAB ya YUXARI OX. Seçimi arımaq SPACE ya ENTER düymÉ™lÉ™ri istifadÉ™ edin. Alt menyunu açmaq üçün SPACE, ENTER ya SAÄžA OX basın. ESC ya SOLA OX ilÉ™ geriyÉ™ qayıda bilÉ™rsiz. Bütün menyunu ESC ilÉ™ baÄŸlıyın.' }, { name: 'DüzÉ™liÅŸ edÉ™nin siyahı qutusu', legend: 'Siyahı qutusu içindÉ™ növbÉ™ti bÉ™nd seçmÉ™k üçün TAB ya AÅžAÄžI OX, É™vvÉ™lki isÉ™ SHIFT+TAB ya YUXARI OX basın. Seçimi arımaq SPACE ya ENTER düymÉ™lÉ™ri istifadÉ™ edin. Siyahı qutusu ESC ilÉ™ baÄŸlıyın.' }, { name: 'Redaktor elementin cığır paneli', legend: 'Elementin cığır paneli seçmÉ™k üçün ${elementsPathFocus} basın. NövbÉ™ti element seçmÉ™k üçün TAB ya SAÄžA OX, É™vvÉ™lki isÉ™ SHIFT+TAB ya SOLA OX istifadÉ™ edin. Elementi arımaq SPACE ya ENTER düymÉ™lÉ™ri mövcuddur.' } ] }, { name: 'ÆmrlÉ™r', items: [ { name: 'Æmri geri qaytar', legend: '${undo} basın' }, { name: 'Geri É™mri', legend: '${redo} basın' }, { name: 'Qalın É™mri', legend: '${bold} basın' }, { name: 'Kursiv É™mri', legend: '${italic} basın' }, { name: 'Altdan xÉ™tt É™mri', legend: '${underline} basın' }, { name: 'Link É™mri', legend: '${link} basın' }, { name: 'Paneli gizlÉ™t É™mri', legend: '${toolbarCollapse} basın' }, { name: 'ÆvvÉ™lki fokus sahÉ™si seç É™mrı', legend: 'Kursordan É™vvÉ™l É™n yaxın É™lçatmaz yerÉ™ dÉ™ymÉ™k üçün ${accessPreviousSpace} basın, misal üçün: iki dal-badal HR teg. Uzaq yerlÉ™rÉ™ dÉ™ymÉ™k üçün bir neçə dÉ™fÉ™ basın.' }, { name: 'NövbÉ™ti fokus sahÉ™si seç É™mrı', legend: 'Kursordan sonra É™n yaxın É™lçatmaz yerÉ™ dÉ™ymÉ™k üçün ${accessNextSpace} basın, misal üçün: iki dal-badal HR teg. Uzaq yerlÉ™rÉ™ dÉ™ymÉ™k üçün bir neçə dÉ™fÉ™ basın.' }, { name: 'HÉ™rtÉ™rÉ™fli KömÉ™k', legend: '${a11yHelp} basın' }, { name: 'Yalnız mÉ™tni É™lavÉ™ et', legend: '${pastetext} basın', legendEdge: 'ÖncÉ™ ${pastetext}, sonra ${paste} basın' } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: 'Sola ox iÅŸarÉ™si', upArrow: 'Yuxarı ox iÅŸarÉ™si', rightArrow: 'SaÄŸa ox iÅŸarÉ™si', downArrow: 'AÅŸağı ox iÅŸarÉ™si', insert: 'Insert', leftWindowKey: 'Soldaki Windows düymÉ™si', rightWindowKey: 'SaÄŸdaki Windows düymÉ™si', selectKey: 'DüymÉ™ni seçin', 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: 'Vurma', add: 'ÆlavÉ™ et', subtract: 'Çıxma', decimalPoint: 'Onluq kÉ™sri tam É™dÉ™ddÉ™n ayıran nöqtÉ™', divide: 'BölüşdürmÉ™', 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: 'NöqtÉ™li verqül', equalSign: 'BarÉ™bÉ™rlik iÅŸarÉ™si', comma: 'Vergül', dash: 'Defis', period: 'NöqtÉ™', forwardSlash: 'Çəp xÉ™tt', graveAccent: 'VurÄŸu iÅŸarÉ™si', openBracket: 'Açılan mötÉ™rizÉ™', backSlash: 'TÉ™rs çəpÉ™ki xÉ™tt', closeBracket: 'BaÄŸlanan mötÉ™rizÉ™', singleQuote: 'TÉ™k dırnaq' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/pt.js0000664000201500020150000001224015203533226025270 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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 na barra de ferramentas. Para navegar entre o grupo da barra de ferramentas anterior e seguinte use TAB e SHIFT+TAB. Para navegar entre o botão da barra de ferramentas seguinte e anterior use a SETA DIREITA ou SETA ESQUERDA. Carregue em ESPAÇO ou ENTER para ativar o botão da barra de ferramentas.' }, { name: 'Janela do editor', legend: 'Dentro de uma janela de diálogo, use TAB para navegar para o campo seguinte; use SHIFT + TAB para mover para o campo anterior, use ENTER para submeter a janela, use ESC para cancelar a janela. Para as janelas que tenham vários separadores, use ALT + F10 para navegar na lista de separadores. Na lista pode mover entre o separador seguinte ou anterior com SETA DIREITA e SETA ESQUERDA, respetivamente' }, { 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. Vá para o item do menu contentor com ESC ou SETA ESQUERDA. Feche o menu de contexto com ESC.' }, { name: 'Editor de caixa em lista', legend: 'Dentro de uma lista, para navegar para o item seguinte da lista use TAB ou SETA PARA BAIXO. Para o item anterior da lista use SHIFT+TAB ou SETA PARA BAIXO. Carregue em ESPAÇO ou ENTER para selecionar a opção lista. Carregue em ESC para fechar a caixa da lista.' }, { name: 'Editor da barra de caminho dos elementos', legend: 'Clique em ${elementsPathFocus} para navegar na barra de caminho dos elementos. Para o botão do elemento seguinte use TAB ou SETA DIREITA. para o botão anterior use SHIFT+TAB ou SETA ESQUERDA. Carregue em 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: 'Clique ${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: 'Aceder ao comando espaço de foco 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}' }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Separador', pause: 'Pausa', capslock: 'Maiúsculas', escape: 'Esc', pageUp: 'Subir página', pageDown: 'Descer página', leftArrow: 'Seta esquerda', upArrow: 'Seta para cima', rightArrow: 'Seta direita', downArrow: 'Seta para baixo', insert: 'Inserir', leftWindowKey: 'Tecla esquerda Windows', rightWindowKey: 'Tecla direita Windows', selectKey: 'Selecionar tecla', 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: 'Ponto decimal', divide: 'Separar', 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: 'Ponto e vírgula', equalSign: 'Sinald e igual', comma: 'Vírgula', dash: 'Cardinal', period: 'Ponto', forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Acento grave', openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Plica' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/si.js0000664000201500020150000001617015203533226025266 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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 }' }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ko.js0000664000201500020150000001376715203533226025275 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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} 누르시오' }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: '탭 키', pause: 'ì¼ì‹œì •ì§€ 키', capslock: '캡스 ë¡ í‚¤', escape: 'ì´ìŠ¤ì¼€ì´í”„ 키', pageUp: '페ì´ì§€ ì—… 키', pageDown: '페ì´ì§€ 다운 키', leftArrow: '왼쪽 화살표 키', upArrow: '위쪽 화살표 키', rightArrow: '오른쪽 화살표 키', downArrow: '아래쪽 화살표 키', insert: 'ì¸ì„œíЏ 키', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/mk.js0000664000201500020150000001276615203533226025271 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. The focus will be moved back to the editing area upon activating 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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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: '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: ' 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 }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', pause: 'Пауза', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Up', leftArrow: 'Стрелка лево', upArrow: 'Стрелка горе', rightArrow: 'Стрелка деÑно', downArrow: 'Стрелка доле', insert: 'Insert', 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: '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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/cy.js0000664000201500020150000001242515203533226025265 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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}' }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/uk.js0000664000201500020150000001640515203533226025273 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'uk', { 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: '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}' }, { name: 'Ð’Ñтавити Ñк звичайний текÑÑ‚', legend: 'ÐатиÑніть ${pastetext}', legendEdge: 'ÐатиÑніть ${pastetext}, а потім ${paste}' } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Esc', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: 'Ліва Ñтрілка', upArrow: 'Стрілка вгору', rightArrow: 'Права Ñтрілка', downArrow: 'Стрілка вниз', insert: 'Ð’Ñтавити', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/zh-cn.js0000664000201500020150000001105615203533226025670 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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}' }, { name: '粘贴为纯文本', legend: '按 ${pastetext}', legendEdge: '按 ${pastetext},然åŽå†æŒ‰ ${paste}' } ] } ], tab: 'Tab é”®', pause: 'æš‚åœé”®', capslock: '大写é”定键', escape: 'Esc é”®', pageUp: '上翻页键', pageDown: '下翻页键', leftArrow: 'å‘左箭头键', upArrow: 'å‘上箭头键', rightArrow: 'å‘å³ç®­å¤´é”®', downArrow: 'å‘下箭头键', insert: 'æ’入键', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/sv.js0000664000201500020150000001141115203533226025274 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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}' }, { name: 'Klistra in som vanlig text', legend: 'Tryck ${pastetext}', legendEdge: 'Tryck ${pastetext}, följt av ${paste}' } ] } ], tab: 'Tab', pause: 'Paus', capslock: 'Caps lock', escape: 'Escape', pageUp: 'Sida Up', pageDown: 'Sida Ned', leftArrow: 'Vänsterpil', upArrow: 'Uppil', rightArrow: 'Högerpil', downArrow: 'NedÃ¥tpil', insert: 'Infoga', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/lt.js0000664000201500020150000001310615203533226025266 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. The focus will be moved back to the editing area upon activating 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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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 }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/fr-ca.js0000664000201500020150000001372515203533226025646 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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}' }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/et.js0000664000201500020150000001147215203533226025263 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'et', { title: 'Hõlbustuste kasutamise juhised', contents: 'Abi sisu. Selle dialoogi sulgemiseks vajuta ESC klahvi.', legend: [ { name: 'Üldine', items: [ { name: 'Redaktori tööriistariba', legend: 'Tööriistaribale navigeerimiseks vajuta ${toolbarFocus}. Järgmisele või eelmisele tööriistagrupile liikumiseks vajuta TAB või SHIFT+TAB. Järgmisele või eelmisele tööriistaribale liikumiseks vajuta PAREMALE NOOLT või VASAKULE NOOLT. Vajuta TÜHIKUT või ENTERIT, et tööriistariba nupp aktiveerida.' }, { name: 'Redaktori dialoog', legend: 'Dialoogi sees vajuta TAB, et liikuda järgmisele dialoogi elemendile, SHIFT+TAB, et liikuda tagasi, vajuta ENTER dialoogi kinnitamiseks, ESC dialoogi sulgemiseks. Kui dialoogil on mitu kaarti/sakki, pääseb kaartide nimekirjale ligi ALT+F10 klahvidega või TABi kasutades. Kui kaartide nimekiri on fookuses, saab järgmisele ja eelmisele kaardile vastavalt PAREMALE ja VASAKULE NOOLTEGA.' }, { name: 'Redaktori kontekstimenüü', legend: 'Vajuta ${contextMenu} või RAKENDUSE KLAHVI, et avada kontekstimenüü. Siis saad liikuda järgmisele reale TAB klahvi või ALLA NOOLEGA. Eelmisele valikule saab liikuda SHIFT+TAB klahvidega või ÜLES NOOLEGA. Kirje valimiseks vajuta TÜHIK või ENTER. Alamenüü saab valida kui alammenüü kirje on aktiivne ja valida kas TÜHIK, ENTER või PAREMALE NOOL. Ülemisse menüüsse tagasi saab ESC klahvi või VASAKULE NOOLEGA. Menüü saab sulgeda ESC klahviga.' }, { name: 'Redaktori loetelu kast', legend: 'Loetelu kasti sees saab järgmisele reale liikuda TAB klahvi või ALLANOOLEGA. Eelmisele reale saab liikuda SHIFT+TAB klahvide või ÜLESNOOLEGA. Kirje valimiseks vajuta TÜHIKUT või ENTERIT. Loetelu kasti sulgemiseks vajuta ESC klahvi.' }, { name: 'Redaktori elementide järjestuse riba', legend: 'Vajuta ${elementsPathFocus} et liikuda asukoha ribal asuvatele elementidele. Järgmise elemendi nupule saab liikuda TAB klahviga või PAREMALE NOOLEGA. Eelmisele nupule saab liikuda SHIFT+TAB klahvi või VASAKULE NOOLEGA. Vajuta TÜHIK või ENTER, et valida redaktoris vastav element.' } ] }, { name: 'Käsud', items: [ { name: 'Tühistamise käsk', legend: 'Vajuta ${undo}' }, { name: 'Uuesti tegemise käsk', legend: 'Vajuta ${redo}' }, { name: 'Rasvase käsk', legend: 'Vajuta ${bold}' }, { name: 'Kursiivi käsk', legend: 'Vajuta ${italic}' }, { name: 'Allajoonimise käsk', legend: 'Vajuta ${underline}' }, { name: 'Lingi käsk', legend: 'Vajuta ${link}' }, { name: 'Tööriistariba peitmise käsk', legend: 'Vajuta ${toolbarCollapse}' }, { name: 'Ligipääs eelmisele fookuskohale', legend: 'Vajuta ${accessPreviousSpace}, et pääseda ligi lähimale liigipääsematule fookuskohale enne kursorit, näiteks: kahe järjestikuse HR elemendi vahele. Vajuta kombinatsiooni uuesti, et pääseda ligi kaugematele kohtadele.' }, { name: 'Ligipääs järgmisele fookuskohale', legend: 'Vajuta ${accessNextSpace}, et pääseda ligi lähimale liigipääsematule fookuskohale pärast kursorit, näiteks: kahe järjestikuse HR elemendi vahele. Vajuta kombinatsiooni uuesti, et pääseda ligi kaugematele kohtadele.' }, { name: 'Hõlbustuste abi', legend: 'Vajuta ${a11yHelp}' }, { name: 'Asetamine tavalise tekstina', legend: 'Vajuta ${pastetext}', legendEdge: 'Vajuta ${pastetext}, siis ${paste}' } ] } ], tab: 'Tabulaator', pause: 'Paus', capslock: 'Tõstulukk', escape: 'Paoklahv', pageUp: 'Leht üles', pageDown: 'Leht alla', leftArrow: 'Nool vasakule', upArrow: 'Nool üles', rightArrow: 'Nool paremale', downArrow: 'Nool alla', insert: 'Sisetamine', leftWindowKey: 'Vasak Windowsi klahv', rightWindowKey: 'Parem Windowsi klahv', selectKey: 'Vali klahv', numpad0: 'Numbriala 0', numpad1: 'Numbriala 1', numpad2: 'Numbriala 2', numpad3: 'Numbriala 3', numpad4: 'Numbriala 4', numpad5: 'Numbriala 5', numpad6: 'Numbriala 6', numpad7: 'Numbriala 7', numpad8: 'Numbriala 8', numpad9: 'Numbriala 9', multiply: 'Korrutus', add: 'Pluss', subtract: 'Miinus', decimalPoint: 'Koma', divide: 'Jagamine', 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: 'Numbrilukk', scrollLock: 'Kerimislukk', semiColon: 'Semikoolon', equalSign: 'Võrdusmärk', comma: 'Koma', dash: 'Sidekriips', period: 'Punkt', forwardSlash: 'Kaldkriips', graveAccent: 'Rõhumärk', openBracket: 'Algussulg', backSlash: 'Kurakaldkriips', closeBracket: 'Lõpusulg', singleQuote: 'Ülakoma' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/pl.js0000664000201500020150000001303615203533226025264 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'Przejdź do poprzedniego miejsca, w którym można ustawić focus', legend: 'NaciÅ›nij ${accessPreviousSpace}, aby przejść do najbliższego niedostÄ™pnego miejsca przed kursorem, w którym można ustawić focus. PrzykÅ‚ad: dwa przylegajÄ…ce elementy HR. Powtórz ten skrót klawiaturowy, by dotrzeć do kolejnych takich miejsc.' }, { name: 'Przejdź do nastÄ™pnego miejsca, w którym można ustawić focus', legend: 'NaciÅ›nij ${accessNextSpace}, aby przejść do najbliższego niedostÄ™pnego miejsca po kursorze, w którym można ustawić focus. PrzykÅ‚ad: dwa przylegajÄ…ce elementy HR. Powtórz ten skrót klawiaturowy, by dotrzeć do kolejnych takich miejsc.' }, { name: 'Pomoc dotyczÄ…ca dostÄ™pnoÅ›ci', legend: 'NaciÅ›nij ${a11yHelp}' }, { name: 'Wklej jako tekst', legend: 'NaciÅ›nij ${pastetext}', legendEdge: 'NaciÅ›nij ${pastetext}, a nastÄ™pnie ${paste}' } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: 'StrzaÅ‚ka w lewo', upArrow: 'StrzaÅ‚ka w górÄ™', rightArrow: 'StrzaÅ‚ka w prawo', downArrow: 'StrzaÅ‚ka w dół', insert: 'Insert', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/bg.js0000664000201500020150000001344615203533226025246 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'bg', { 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. The focus will be moved back to the editing area upon activating 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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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: 'Лента Ñ Ð¿ÑŠÑ‚ на елемент на редактора', 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: ' 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 }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/fa.js0000664000201500020150000001500015203533226025230 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'fa', { title: 'دستورالعمل‌های دسترسی', contents: 'راهنمای Ùهرست مطالب. برای بستن این کادر محاوره‌ای ESC را ÙØ´Ø§Ø± دهید.', legend: [ { name: 'عمومی', items: [ { name: 'نوار ابزار ویرایشگر', legend: 'برای باز کردن نوار ابزار، {toolbarFocus}$ را Ø¨ÙØ´Ø§Ø±ÛŒØ¯. با کلید Tab Ùˆ Shift+Tab به مجموعه نوار ابزار بعدی Ùˆ یا قبلی بروید. با کلید های جهت نمای راست Ùˆ Ú†Ù¾ روی دکمه های نوار ابزار حرکت کنید. برای ÙØ¹Ø§Ù„ کردن دکمه مورد نظر کلید Enter Ùˆ یا Space را Ø¨ÙØ´Ø§Ø±ÛŒØ¯. با ÙØ¹Ø§Ù„ کردن دکمه مورد نظر، تمرکز به محیط ویرایش باز خواهد گشت.' }, { 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 Ùˆ یا 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}' }, { name: 'چسباندن به عنوان متن ساده', legend: 'ÙØ´Ø±Ø¯Ù† ${pastetext}', legendEdge: 'ÙØ´Ø±Ø¯Ù† ${pastetext}ØŒ همراه با ${paste}' } ] } ], tab: 'برگه', pause: 'توقÙ', capslock: 'Caps Lock', escape: 'گریز', pageUp: 'ØµÙØ­Ù‡ به بالا', pageDown: 'ØµÙØ­Ù‡ به پایین', leftArrow: 'پیکان Ú†Ù¾', upArrow: 'پیکان بالا', rightArrow: 'پیکان راست', downArrow: 'پیکان پایین', insert: 'ورود', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ku.js0000664000201500020150000001462215203533226025272 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'ku', { 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} یان دوگمەی لیسته‌(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}' }, { name: 'لکاندنی ÙˆÛ•Ùƒ دەقی ڕوون', legend: 'کلیکی ${pastetext}', legendEdge: 'کلیکی ${pastetext}ØŒ شوێنکەوتکراوە بە ${paste}' } ] } ], tab: 'تاب', pause: 'پشوو', capslock: 'Ù‚Ùڵدانی پیتی گەورە', escape: 'چوونە دەرەوە', pageUp: 'Ù¾Û•Ú•Û• بەرەوسەر', pageDown: 'Ù¾Û•Ú•Û• بەرەوخوار', leftArrow: 'تیری دەستی Ú†Û•Ù¾', upArrow: 'تیری بەرەوسەر', rightArrow: 'تیری دەستی ڕاست', downArrow: 'تیری بەرەوخوار', insert: 'خستنە ناو', leftWindowKey: 'پەنجەرەی Ú†Û•Ù¾', rightWindowKey: 'پەنجەرەی ڕاست', selectKey: 'هەڵبژێرە', 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: 'Ù‚Ùڵدانی ژمارە', scrollLock: 'Ù‚Ùڵدانی Ù‡ÛŽÚµÛŒ هاتووچۆپێکردن', semiColon: ';', equalSign: '=', comma: ',', dash: '-', period: '.', forwardSlash: '/', graveAccent: '`', openBracket: '[', backSlash: '\\\\', closeBracket: '}', singleQuote: '\'' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/el.js0000664000201500020150000001770515203533226025260 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'el', { 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} ή 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}' }, { name: 'Επικολλήστε ως απλό κείμενο.', legend: 'Πιέστε $(pastetext)', legendEdge: 'Πιέστε $(pastetext), ακολουθοÏμενο με (paste)_' } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: 'ΑÏιστεÏÏŒ Βέλος', upArrow: 'Πάνω Βέλος', rightArrow: 'Δεξί Βέλος', downArrow: 'Κάτω Βέλος', insert: 'Insert ', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/fi.js0000664000201500020150000001277215203533226025255 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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}' }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ru.js0000664000201500020150000001575615203533226025312 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'ru', { 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} или клавишу 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}' }, { name: 'Ð’Ñтавить только текÑÑ‚', legend: 'Ðажмите ${pastetext}', legendEdge: 'Ðажмите ${pastetext} и затем ${paste}' } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Esc', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: 'Стрелка влево', upArrow: 'Стрелка вверх', rightArrow: 'Стрелка вправо', downArrow: 'Стрелка вниз', insert: 'Insert', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/gl.js0000664000201500020150000001230515203533226025251 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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 ata a barra de ferramentas. Movase ao grupo de barras de ferramentas seguinte e anterior con TAB e MAYÚS+TAB. Movase ao botón da barra de ferramentas seguinte e anterior coa frecha cara á dereita ou á esquerda. Prema ESPAZO ou INTRO para activar o botón da barra de ferramentas. O foco moverase de novo á área de edición ao activar o botón da barra de ferramentas.' }, { name: 'Editor de diálogo', legend: 'Dentro do diálogo, prema TAB para navegar cara os seguintes elementos de diálogo, prema MAIÚS+TAB para moverse cara os anteriores elementos de diálogo, prema INTRO para enviar o diálogo, prema ESC para cancelar o diálogo. Cando o diálogo ten múltiples lapelas, a lista de lapelas pode cinguirse con ALT+F10 ou con TAB como parte da orde de lapelas do diálogo. Coa lapela en foco, pode moverse cara a seguinte ou a anterior lapela coas FRECHAS ESQUERDA e DEREICHA respectivamente. Prema ESC para descartar os cambios e pechar o diálogo. O foco moverase de novo á área de edición ao saír do diálogo.' }, { 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}' }, { name: 'Pegar como texto simple', legend: 'Prema ${pastetext}', legendEdge: 'Prema ${pastetext}, seguido de ${paste}' } ] } ], tab: 'Tabulador', pause: 'Pausa', capslock: 'Bloq. Maiús', escape: 'Escape', pageUp: 'Páxina arriba', pageDown: 'Páxina abaixo', leftArrow: 'Frecha esquerda', upArrow: 'Frecha arriba', rightArrow: 'Frecha dereita', downArrow: 'Frecha abaixo', insert: 'Inserir', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/sr-latn.js0000664000201500020150000001242615203533226026233 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'sr-latn', { title: 'Uputstva za pomoć', contents: 'Sadržaji za pomoć. Da bi ste zatvorili diјalog pritisnite ESC.', legend: [ { name: 'OpÅ¡te', items: [ { name: 'Alatke za ureÄ‘ivanje', legend: 'Pritisnite ${toolbarFocus} da biste preÅ¡li na traku sa alatkama. PreÄ‘ite na sledecÌu i prethodnu grupu traka sa alatkama pomocÌu TAB i SHIFT+TAB. PreÄ‘ite na sledecÌe i prethodno dugme na traci sa alatkama pomocÌu STRELICE NADESNO ili STRELICA NALEVO. Pritisnite SPACE ili ENTER da biste aktivirali dugme na traci sa alatkama. Nakon aktiviranja dugmeta na traci sa alatkama, fokus cÌe biti pomeren nazad u oblast za ureÄ‘ivanje.' }, { name: 'UreÄ‘ivaÄ dijaloga', legend: 'Unutar dijaloga pritisnite TAB da preÄ‘jete na sledecÌi element dijaloga, pritisnite SHIFT+TAB da preÄ‘jete na prethodni element dijaloga, pritisnite ENTER da poÅ¡aljete dijalog, pritisnite ESC da otkažete dijalog. Kada dijalog ima viÅ¡e kartica, do liste kartica se može docÌi ili sa ALT+F10 ili sa TAB kao deo redosleda tabulatora dijaloga. Sa fokusiranom listom kartica, preÄ‘jite na sledecÌu i prethodnu karticu pomocÌu STRELICE NADESNO, odnosno NALEVO. Pritisnite ESC da odbacite promene i zatvorite dijalog. Fokus cÌe se vratiti na oblast za ureÄ‘ivanje nakon napuÅ¡tanja dijaloga.' }, { name: 'UreÄ‘ivaÄ lokalnog menija', legend: 'Pritisnite ${contextMenu} ili APPLICATION TASTER za otvaranje lokalnog menija. Zatim sa TAB ili STRELICA DOLE možete preći na sledeću taÄku menija. Prethodnu opciju možete postići sa SHIFT+TAB ili STRELICA GORE. Pritisnite SPACE ili ENTER za odabir taÄke menija. Pritisnite SPACE ili ENTER da bi ste otvorili podmeni trenutne stavke menija. Za povratak u glavni meni pritisnite ESC ili STRELICA DESNO. Zatvorite lokalni meni pomoću tastera ESC.' }, { name: 'UreÄ‘jivaÄ liste', legend: 'Do sledećеg elementa liste možete doći sa TAB ili STERLICA DOLE. Za odabir prethodnog elementa pritisnite SHIFT+TAB ili STREKICA DOLE. Za odabir elementa pritisnite SPACE ili ENTER. Sa pritiskom ESC zatvarate listu. ' }, { name: 'UredjivaÄ trake puta elemenata', legend: 'Pritisnite $ {elementsPathFocus} da bi ste oznaÄili traku puta elenementa. Do sledećеg elementa možete doći sa TAB ili STRELICA DESNO. Do prethodnоg dolazite sa SHIFT+TAB ili STRELICA DESNO. Sa SPACE ili ENTER možete odbrati element u uredjivaÄu.' } ] }, { name: 'Komanda', items: [ { name: 'Otkaži komandu', legend: 'Pritisni ${undo}' }, { name: 'Prepoznavanje komande', legend: 'Pritisni ${redo}' }, { name: 'Podebljana komanda', legend: 'Pritisni ${bold}' }, { name: 'Kurziv komanda', legend: 'Pritisni ${italic}' }, { name: 'Precrtana komanda', legend: 'Pritisni ${underline}' }, { name: 'Link komanda', legend: 'Pritisni ${link}' }, { name: 'Zatvori traku uredjivaÄa komanda ', legend: 'Pritisni ${toolbarCollapse}' }, { name: 'Pristup prethodnom fokus mestu komanda ', legend: 'Pritisni ${accessNextSpace} da bi pristupio najbližem nedostupnom fokus mestu pre znaka hiányjel, na primer: dva susedna HR elementa.Ponovi kombinaciju tastera da pronadjeÅ¡ fokus mesto koje se nalazi dalje.' }, { name: 'Pristup sledećem fokus mestu komanda ', legend: 'Pritisni ${accessNextSpace} da bi pristupio najbližem nedostupnom fokus mestu posle znaka hiányjel, na primer: dva susedna HR elementa.Ponovi kombinaciju tastera da pronadjeÅ¡ fokus mesto koje se nalazi dalje.' }, { name: 'Pomoć pristupaÄnosti', legend: 'Pritisni ${a11yHelp}' }, { name: 'Nalepi kao obiÄan tekst', legend: 'Pritisnite: ${pastetext}', legendEdge: 'Pritisnite ${pastetext}-t, zatim ${paste}-t' } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: 'Strelica levo', upArrow: 'strelica gore', rightArrow: 'strelica desno', downArrow: 'strelica dole', insert: 'Insert', leftWindowKey: 'levi Windows-taster', rightWindowKey: 'desni Windows-taster', selectKey: 'Odabir tastera', numpad0: 'Tasteri sa brojevima 0', numpad1: 'Tasteri sa brojevima 1', numpad2: 'Tasteri sa brojevima 2', numpad3: 'Tasteri sa brojevima 3', numpad4: 'Tasteri sa brojevima 4', numpad5: 'Tasteri sa brojevima 5', numpad6: 'Tasteri sa brojevima 6', numpad7: 'Tasteri sa brojevima 7', numpad8: 'Tasteri sa brojevima 8', numpad9: 'Tasteri sa brojevima 9', multiply: 'Množenje', add: 'Sabiranje', subtract: 'Oduzimanje', decimalPoint: 'Decimalna taÄka', divide: 'Deljenjje', 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: 'TaÄka zarez', equalSign: 'Znak jednakosti', comma: 'Zarez', dash: 'Crtica', period: 'TaÄka', forwardSlash: 'Kosa crta', graveAccent: 'Obrnuti znak akcenta', openBracket: 'Otvorena ÄoÅ¡kasta zagrada', backSlash: 'Obrnuta kosa crta', closeBracket: 'Zatvorena ćoÅ¡kasta zagrada', singleQuote: 'Simpli znak navoda' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/oc.js0000664000201500020150000001305215203533226025250 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'oc', { title: 'Instruccions d\'accessibilitat', contents: 'Contengut de l\'ajuda. Per tampar aquesta fenèstra, quichatz sus la tòca Escap.', legend: [ { name: 'General', items: [ { name: 'Barra d\'aisinas de l\'editor', legend: 'Quichar sus ${toolbarFocus} per accedir a la barra d\'aisinas. Se desplaçar cap al groupe seguent o precedent de la barra d\'aisinas amb las tòcas Tab e Maj+Tab. Se desplaçar cap al boton seguent o precedent de la barra d\'aisinas amb las tòcas Sageta dreita e Sageta esquèrra. Quichar sus la barra d\'espaci o la tòca Entrada per activer lo boton de barra d\'aisinas.' }, { name: 'Fenèstra de l\'editor', legend: 'Dins una bóstia de dialòg, quichar sus Tab per passar a l\'element seguent, quichar sus Maj+Tab per passar a l\'element precedent, quichar sus Entrada per validar, quichar sus Escap per anullar. Quand una bóstia de dialòg possedís des onglets, la lista pòt èsser atenta amb Alt+F10 o amb Tab. Dins la lista dels onglets, se desplaçar cap al seguent e lo precedent amb las tòcas Sageta dreita e Sageta esquèrra respectivament.' }, { name: 'Menú contextual de l\'editor', legend: 'Quichar sus ${contextMenu} o sus la tòca Menú per dobrir lo menú contextual. Se desplaçar ensuite cap a l\'opcion seguenta del menú amb las tòcas Tab o Sageta bas. Se desplaçar cap a l\'opcion precedenta amb las tòcas Maj+Tab o Sageta naut. Quichar sus la barra d\'espaci o la tòca Entrada per seleccionar l\'opcion del menu. Quichar sus la barra d\'espaci, la tòca Entrada o Sageta dreita per dobrir lo sosmenú de l\'opcion seleccionada. Tornar a l\'element de menú parent amb la tòca Escap o Sageta esquèrra. Tampar lo menú contextual amb Escap.' }, { name: 'Zòna de lista de l\'editor', legend: 'Dins una lista en menú desenrotlant, se desplaçar cap a l\'element seguent de la lista amb las tòcas Tab o Sageta bas. Se desplaçar cap a l\'element precedent de la lista amb las tòcas Maj+Tab o Sageta naut. Quichar sus la barra d\'espaci o sus Entrada per seleccionar l\'opcion dins la lista. Quichar sus Escap per tampar lo menú desenrotlant.' }, { name: 'Barra del camin d\'elements de l\'editor', legend: 'Quichar sus ${elementsPathFocus} per naviguer cap a la barra del fial d\'Ariana dels elements. Se desplaçar cap al boton de l\'element seguent amb las tòcas Tab o Sageta dreita. Se desplaçar cap al boton precedent amb las tòcas Maj+Tab o Sageta esquèrra. Quichar sus la barra d\'espaci o sus Entrada per seleccionar l\'element dins l\'editor.' } ] }, { name: 'Comandas', items: [ { name: 'Anullar la comanda', legend: 'Quichar sus ${undo}' }, { name: 'Comanda restablir', legend: 'Quichar sus ${redo}' }, { name: ' Comanda gras', legend: 'Quichar sus ${bold}' }, { name: ' Comanda italica', legend: 'Quichar sus ${italic}' }, { name: ' Comanda solinhat', legend: 'Quichar sus ${underline}' }, { name: ' Comanda ligam', legend: 'Quichar sus ${link}' }, { name: 'Comanda enrotlar la barra d\'aisinas', legend: 'Quichar sus ${toolbarCollapse}' }, { name: 'Comanda d\'accès a l\'element seleccionable precedent', legend: 'Quichar sus ${accessNextSpace} per accedir a l\'element seleccionable inategnible lo mai pròche abans lo cursor, per exemple : doas linhas orizontalas adjacentas. Repetir la combinason de tòcas per aténher los elements seleccionables precedents.' }, { name: 'Comanda d\'accès a l\'element seleccionable seguent', legend: 'Quichar sus ${accessNextSpace} per accedir a l\'element seleccionable inatenhible lo mai pròche aprèp lo cursor, per exemple : doas linhas orizontalas adjacentas. Repetir la combinason de tòcas per aténher los elements seleccionables seguents.' }, { name: ' Ajuda sus l\'accessibilitat', legend: 'Quichar sus ${a11yHelp}' }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tabulacion', pause: 'Pausa', capslock: 'Verr. Maj.', escape: 'Escap', pageUp: 'Pagina superiora', pageDown: 'Pagina seguenta', leftArrow: 'Sageta esquèrra', upArrow: 'Sageta naut', rightArrow: 'Sageta dreita', downArrow: 'Sageta bassa', insert: 'Inser', leftWindowKey: 'Tòca Windows esquèrra', rightWindowKey: 'Tòca Windows dreita', selectKey: 'Tòca Seleccionar', numpad0: '0 del pavat numeric', numpad1: '1 del pavat numeric', numpad2: '2 del pavat numeric', numpad3: '3 del pavat numeric', numpad4: '4 del pavat numeric', numpad5: '5 del pavat numeric', numpad6: '6 del pavat numeric', numpad7: '7 del pavat numeric', numpad8: 'Pavat numeric 8', numpad9: '9 del pavat numeric', multiply: 'Multiplicar', add: 'Plus', subtract: 'Mens', decimalPoint: 'Punt decimal', divide: 'Devesir', 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: 'Verr. Num.', scrollLock: 'Arrèst desfil.', semiColon: 'Punt-virgula', equalSign: 'Signe egal', comma: 'Virgula', dash: 'Jonhent', period: 'Punt', forwardSlash: 'Barra oblica', graveAccent: 'Accent grèu', openBracket: 'Parentèsi dobèrta', backSlash: 'Barra oblica invèrsa', closeBracket: 'Parentèsi tampanta', singleQuote: 'Apostròfa' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/sq.js0000664000201500020150000001247615203533226025303 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'Shtyp ${toolbarFocus} për të shfletuar kokështrirjen. Kalo tek grupi paraprak ose pasues i shiritit përmes kombinacionit TAB dhe SHIFT+TAB, në tastierë. Kalo tek pulla paraprake ose pasuese e kokështrirjes përmes SHIGJETË DJATHTAS ose SHIGJETËS MAJTAS, në tastierë. Shtyp HAPËSIRË ose ENTER Move to the next and previous toolbar button with RIGHT ARROW për të aktivizuar pullën e kokështrirjes.' }, { name: 'Dialogu i Redaktuesit', legend: 'Në brendi të dialogut, shtyp TAB për të kaluar tek elementi tjetër i dialogut, shtyp SHIFT+TAB për të kaluar tek elementi paraprak i dialogut, shtyp ENTER për të shtuar dialogun, shtyp ESC për të anuluar dialogun. Kur një dialog ka më shumë fletë, lista e fletëve mund të hapet përmes ALT+F10 ose përmes TAB si pjesë e radhitjes së fletëve të dialogut. Me listën e fokusuar të fletëve,kalo tek fleta paraprake dhe pasuese përmes SHIGJETËS MAJSA ose DJATHTAS.' }, { name: 'Menyja Kontestuese e Redaktorit', legend: 'Shtyp ${contextMenu} ose APPLICATION KEY për të hapur menynë kontekstuale. Pastaj kalo tek mundësia tjetër e menysë përmes TAB ose SHIGJETËS POSHTË. Kalo tek mundësia paraprake përmes SHIFT+TAB ose SHIGJETA SIPËR. Shtyp SPACE ose ENTER për të përzgjedhur mundësinë e menysë. Hape nënmenynë e mundësisë aktuale përmes tastës HAPËSIRË ose ENTER ose SHIGJETËS DJATHTAS. Kalo prapa tek artikulli i menysë prind përmes ESC ose SHIGJETËS MAJTAS. Mbylle menynë kontekstuale përmes ESC.' }, { name: 'Kutiza e Listës së Redaktuesit', legend: 'Brenda kutisë së listës, kalo tek artikulli pasues i listës përmes TAB ose SHIGJETËS POSHTË. Kalo tek artikulli paraprak i listës përmes SHIFT+TAB ose SHIGJETËS SIPËR. Shtyp tastën HAPËSIRË ose ENTER për të përzgjedhur mundësitë e listës. Shtyp ESC për të mbyllur kutinë e listës.' }, { name: 'Shiriti i Rrugës së Elementeve të Redaktorit', legend: 'Shtyp ${elementsPathFocus} për të lëvizur tek shiriti i elementeve. Kalo tek pulla pasuese e elementit përmes TAB ose SHIGJETËS DJATHTAS. Kalo tek pulla paraprake përmes SHIFT+TAB ose SHIGJETËS MAJTAS. Shtyp tastën HAPËSIRË ose ENTER për të përzgjedhur elementin tek redaktuesi.' } ] }, { 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: 'Komanda e Mbjedhjes së Kokështrirjes', legend: 'Shtyp ${toolbarCollapse}' }, { name: 'Qasu komandës paraprake të hapësirës së fokusimit', legend: 'Shtyp ${accessPreviousSpace} për t\'iu qasur hapësirës më të afërt të paarritshme të fokusimit para simbolit ^, për shembull: dy elemente të afërt HR. Përsërit kombinacionin e tasteve për të arritur hapësirë të largët fokusimi.' }, { name: 'Qasu komandës pasuese të hapësirës së fokusimit', legend: 'Shtyp ${accessNextSpace} për t\'iu qasur hapësirës më të afërt të paarritshme të fokusimit pas shenjës ^, për shembull: dy elemente të afërt HR. Përsërit kombinacionin e tasteve për të arritur hapësirën e largët të fokusimit.' }, { name: 'Ndihmë Qasjeje', legend: 'Shtyp ${a11yHelp}' }, { name: 'Hidhe si tekst të thjeshtë', legend: 'Shtyp ${pastetext}', legendEdge: 'Shtyp ${pastetext}, pasuar nga ${paste}' } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Faqja sipër', pageDown: 'Faqja poshtë', leftArrow: 'Shigjeta majtas', upArrow: 'Shigjeta sipër', rightArrow: 'Shigjeta djathtas', downArrow: 'Shigjeta poshtë', insert: 'Insert', leftWindowKey: 'Pulla Majtas e Windows-it', rightWindowKey: 'Pulla Djathtas e Windows-it', selectKey: 'Pulla Përzgjedhëse', 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: 'Shumëzo', add: 'Shto', subtract: 'Zbrit', decimalPoint: 'Pika Decimale', divide: 'Pjesëto', 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: 'Pikëpresje', equalSign: 'Shenja e Barazimit', comma: 'Presje', dash: 'minus', period: 'Pikë', forwardSlash: 'Vija e pjerrët përpara', graveAccent: 'Shenja e theksit', openBracket: 'Hape kllapën', backSlash: 'Vija e pjerrët prapa', closeBracket: 'Mbylle kllapën', singleQuote: 'Thonjëz e vetme' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/pt-br.js0000664000201500020150000001211415203533226025671 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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}' }, { name: 'Colar como texto sem formatação', legend: 'Pressione ${pastetext}', legendEdge: 'Pressione ${pastetext}, seguido de ${paste}' } ] } ], tab: 'Tecla Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: 'Seta à Esquerda', upArrow: 'Seta à Cima', rightArrow: 'Seta à Direita', downArrow: 'Seta à Baixo', insert: 'Insert', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/fo.js0000664000201500020150000001240015203533226025247 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. The focus will be moved back to the editing area upon activating 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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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 }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/af.js0000664000201500020150000001165215203533226025241 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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 }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', // MISSING pause: 'Pouse', capslock: 'Hoofletterslot', escape: 'Ontsnap', pageUp: 'Blaaiop', pageDown: 'Blaaiaf', leftArrow: 'Linkspyl', upArrow: 'Oppyl', rightArrow: 'Regterpyl', downArrow: 'Afpyl', insert: 'Toevoeg', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/hi.js0000664000201500020150000001311315203533226025245 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. The focus will be moved back to the editing area upon activating 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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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 }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/km.js0000664000201500020150000001355415203533226025265 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. The focus will be moved back to the editing area upon activating 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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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}' }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', // MISSING pause: 'ផ្អាក', capslock: 'Caps Lock', // MISSING escape: 'ចាកចáŸáž‰', pageUp: 'ទំពáŸážšâ€‹áž›áž¾', pageDown: 'ទំពáŸážšâ€‹áž€áŸ’រោម', leftArrow: 'ព្រួញ​ឆ្វáŸáž„', upArrow: 'ព្រួញ​លើ', rightArrow: 'ព្រួញ​ស្ដាំ', downArrow: 'ព្រួញ​ក្រោម', insert: 'បញ្ចូល', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/nl.js0000664000201500020150000001165315203533226025265 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'In een dialoogvenster, druk op TAB om te navigeren naar het volgende veld. Druk op SHIFT+TAB om naar het vorige veld te navigeren. Druk op ENTER om het dialoogvenster te verzenden. Druk op ESC om het dialoogvenster te sluiten. Bij dialoogvensters met meerdere tabbladen kan de tabset bereikt worden met ALT+F10 of met TAB als onderdeel van de tabvolgorde in het dialoogvenster. Als de tabset focus heeft, kun je schakalen naar het volgende en vorige tabblad met respectievelijk PIJL RECHTS en PIJL LINKS.' }, { 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}' }, { name: 'Plakken als platte tekst', legend: 'Druk op ${pastetext}', legendEdge: 'Druk op ${pastetext}, gevolgd door ${paste}' } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: 'Pijl naar links', upArrow: 'Pijl omhoog', rightArrow: 'Pijl naar rechts', downArrow: 'Pijl naar beneden', insert: 'Invoegen', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/es-mx.js0000664000201500020150000001246415203533226025706 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'es-mx', { title: 'Instrucciones de accesibilidad', contents: 'Contenidos de ayuda. Para cerrar este cuadro de diálogo presione ESC.', legend: [ { name: 'General', items: [ { name: 'Barra de herramientas del editor', legend: 'Presione ${toolbarFocus} para navegar a la barra de herramientas. Desplácese al grupo de barras de herramientas siguiente y anterior con SHIFT + TAB. Desplácese al botón siguiente y anterior de la barra de herramientas con FLECHA DERECHA o FLECHA IZQUIERDA. Presione SPACE o ENTER para activar el botón de la barra de herramientas.' }, { name: 'Editor de diálogo', legend: 'Dentro de un cuadro de diálogo, pulse TAB para desplazarse hasta el siguiente elemento de diálogo, pulse MAYÚS + TAB para desplazarse al elemento de diálogo anterior, pulse ENTER para enviar el diálogo, pulse ESC para cancelar el diálogo. Cuando un cuadro de diálogo tiene varias pestañas, se puede acceder a la lista de pestañas con ALT + F10 o con TAB como parte del orden de tabulación del diálogo. Con la lista de tabuladores enfocada, mueva a la pestaña siguiente y anterior con las flechas DERECHA y IZQUIERDA, respectivamente.' }, { name: 'Menú contextual del editor', legend: 'Presione ${contextMenu} o CLAVE DE APLICACIÓN para abrir el menú contextual. A continuación, vaya a la siguiente opción del menú con TAB o DOWN ARROW. Desplácese a la opción anterior con SHIFT + TAB o FLECHA ARRIBA. Presione SPACE o ENTER para seleccionar la opción del menú. Abra el submenú de la opción actual con ESPACIO o ENTER o FLECHA DERECHA. Vuelva al elemento de menú principal con ESC o FLECHA IZQUIERDA. Cerrar el menú contextual con ESC.' }, { name: 'Editor de cuadro de lista', legend: 'Dentro de un cuadro de lista, mueva al siguiente elemento de lista con TAB O FLECHA ABAJO. Mueva al elemento anterior de la lista con MAYÚS + TAB o FLECHA ARRIBA. Presione SPACE o ENTER para seleccionar la opción de lista. Presione ESC para cerrar el cuadro de lista.' }, { name: 'Barra de ruta del elemento del editor', legend: 'Presione ${elementsPathFocus} para navegar a la barra de ruta de elementos. Desplácese al siguiente botón de elemento con TAB o FLECHA DERECHA. Desplácese al botón anterior con SHIFT + TAB o FLECHA IZQUIERDA. Presione SPACE 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 cursiva', legend: 'Presiona {italic}' }, { name: 'Comando subrayado', legend: 'Presiona ${underline}' }, { name: 'Comando enlace', legend: 'Presiona ${link}' }, { name: 'Comando colapsar barra de herramientas', legend: 'Presiona ${toolbarCollapse}' }, { name: 'Acceda al comando de espacio de enfoque anterior', legend: 'Presione ${accessPreviousSpace} para acceder al espacio de enfoque inaccesible más cercano antes del cursor, por ejemplo: dos elementos HR adyacentes. Repita la combinación de teclas para alcanzar los espacios de enfoque distantes.' }, { name: 'Acceder al siguiente comando de espacio de enfoque', legend: 'Pulse ${accessNextSpace} para acceder al espacio de enfoque más cercano inaccesible después del cursor, por ejemplo: dos elementos HR adyacentes. Repita la combinación de teclas para alcanzar los espacios de enfoque distantes.' }, { name: 'Ayuda de accesibilidad', legend: 'Presiona ${a11yHelp}' }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tabulador', pause: 'Pausa', capslock: 'Mayúsculas', escape: 'Escape', pageUp: 'Página arriba', pageDown: 'Página abajo', leftArrow: 'Flecha izquierda', upArrow: 'Flecha arriba', rightArrow: 'Flecha derecha', downArrow: 'Flecha abajo', insert: 'Insertar', leftWindowKey: 'Tecla izquierda de Windows', rightWindowKey: 'Tecla derecha de Windows', selectKey: 'Tecla de selección', numpad0: 'Teclado numérico 0', numpad1: 'Teclado numérico 1', numpad2: 'Teclado numérico 2', numpad3: 'Teclado numérico 3', numpad4: 'Teclado numérico 4', numpad5: 'Teclado numérico 5', numpad6: 'Teclado numérico 6', numpad7: 'Teclado numérico 7', numpad8: 'Teclado numérico 8', numpad9: 'Teclado 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: 'Números', scrollLock: 'Bloqueo de desplazamiento', semiColon: 'punto y coma', equalSign: 'Signo igual', comma: 'Coma', dash: 'Guión', period: 'Espacio', forwardSlash: 'Diagonal', graveAccent: 'Acento grave', openBracket: 'Abrir paréntesis', backSlash: 'Diagonal invertida', closeBracket: 'Cerrar paréntesis', singleQuote: 'Comillas simple' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/mn.js0000664000201500020150000001310415203533226025257 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. The focus will be moved back to the editing area upon activating 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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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 }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/da.js0000664000201500020150000001121715203533226025234 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. NÃ¥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: 'Redaktør kontekstmenu', legend: 'Tryk ${contextMenu} eller APPLICATION KEY for at Ã¥bne kontekstmenuen. Flyt derefter til næste menuvalg med TAB eller PIL NED. Flyt til forrige valg med SHIFT+TAB eller PIL OP. Tryk MELLEMRUM eller RETUR for at vælge menu-muligheder. Ã…ben under-menu af aktuelle valg med MELLEMRUM eller RETUR eller HØJRE PIL. GÃ¥ tilbage til overliggende menu-emne med ESC eller VENSTRE PIL. Luk kontekstmenu med ESC.' }, { name: 'Redaktør listeboks', legend: 'Flyt til næste emne med TAB eller PIL NED inde i en listeboks. Flyt til forrige listeemne med SHIFT+TAB eller PIL OP. Tryk MELLEMRUM eller RETUR for at vælge liste-muligheder. Tryk ESC for at lukke liste-boksen.' }, { name: 'Redaktør elementsti-bar', legend: 'Tryk ${elementsPathFocus} for at navigere til elementernes sti-bar. Flyt til næste element-knap med TAB eller HØJRE PIL. Flyt til forrige knap med SHIFT+TAB eller VENSTRE PIL. Klik MELLEMRUM eller RETUR for at vælge element i editoren.' } ] }, { 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: 'Klap værktøjslinje sammen kommando ', legend: 'Klik ${toolbarCollapse}' }, { name: 'Adgang til forrige fokusomrÃ¥de kommando', legend: 'Klik pÃ¥ ${accessPreviousSpace} for at fÃ¥ adgang til det nærmeste utilgængelige fokusmellemrum før indskudstegnet, for eksempel: To nærliggende HR-elementer. Gentag nøglekombinationen for at nÃ¥ fjentliggende fokusmellemrum.' }, { name: 'GÃ¥ til næste fokusmellemrum kommando', legend: 'Klik pÃ¥ ${accessNextSpace} for at fÃ¥ adgang til det nærmeste utilgængelige fokusmellemrum efter indskudstegnet, for eksempel: To nærliggende HR-elementer. Gentag nøglekombinationen for at nÃ¥ fjentliggende fokusmellemrum.' }, { name: 'Tilgængelighedshjælp', legend: 'Kilk ${a11yHelp}' }, { name: 'Indsæt som ren tekst', legend: 'Klik ${pastetext}', legendEdge: 'Klik ${pastetext}, efterfult af ${paste}' } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: 'Venstre pil', upArrow: 'Pil op', rightArrow: 'Højre pil', downArrow: 'Pil ned', insert: 'Insert', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/he.js0000664000201500020150000001322215203533226025242 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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}' }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: '×—×¥ שמ×לה', upArrow: '×—×¥ למעלה', rightArrow: '×—×¥ ימינה', downArrow: '×—×¥ למטה', insert: 'הכנס', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ca.js0000664000201500020150000001235415203533226025236 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'Dins d\'un quadre de diàleg, premi la tecla TAB per desplaçar-se fins al següent element del quadre de diàleg, premi la tecla Shift + TAB per desplaçar-se a l\'anterior element del quadre de diàleg, premi la tecla ENTER per confirmar el quadre de diàleg, premi la tecla ESC per cancel·lar el quadre de diàleg. Quan un quadre de diàleg té diverses pestanyes, la llista de pestanyes pot ser assolit ja sigui amb ALT + F10 o TAB, com a part de l\'ordre de tabulació del quadre de diàleg. Amb la llista de pestanyes seleccionada, pot anar a la fitxa següent i anterior amb la tecla FLETXA DRETA i ESQUERRA, respectivament.' }, { 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}' }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tabulació', pause: 'Pausa', capslock: 'Bloqueig de majúscules', escape: 'Escape', pageUp: 'Pàgina Amunt', pageDown: 'Pàgina Avall', leftArrow: 'Fletxa Esquerra', upArrow: 'Fletxa Amunt', rightArrow: 'Fletxa Dreta', downArrow: 'Fletxa Avall', insert: 'Inserir', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/gu.js0000664000201500020150000001322615203533226025265 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. The focus will be moved back to the editing area upon activating 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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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 }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/_translationstatus.txt0000664000201500020150000000153615203533226031017 0ustar puckpuckCopyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/th.js0000664000201500020150000001343515203533226025267 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. The focus will be moved back to the editing area upon activating 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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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 }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/de.js0000664000201500020150000001204615203533226025241 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'Drücke innerhalb eines Dialogs TAB, um zum nächsten Element zu springen. Drücke SHIFT+TAB, um zum vorigen Element zu springen, drücke ENTER um das Formular im Dialog abzusenden, drücke ESC, um den Dialog zu schließen. Hat der Dialog mehrere Tabs, dann kannst du durch ALT+F10 die Tab-Liste aufrufen or mittels TAB als Teil der Dialog-Tab-Reihenfolge. Ist die Tab-Liste fokussiert, dann mithilfe der Pfeiltasten (LINKS und RECHTS) zwischen den Tabs gewechselt werden.' }, { 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}' }, { name: 'Einfügen als unformatierter Text. ', legend: 'Drücke ${pastetext}', legendEdge: 'Drücke ${pastetext} und anschließend ${paste}' } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Feststell', escape: 'Escape', pageUp: 'Bild auf', pageDown: 'Bild ab', leftArrow: 'Linke Pfeiltaste', upArrow: 'Obere Pfeiltaste', rightArrow: 'Rechte Pfeiltaste', downArrow: 'Untere Pfeiltaste', insert: 'Einfügen', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/tt.js0000664000201500020150000001220415203533226025274 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. The focus will be moved back to the editing area upon activating 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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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} баÑыгыз' }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', pause: 'Тыныш', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: 'Сул Ñкка ук', upArrow: 'Ó¨Ñкә таба ук', rightArrow: 'Уң Ñкка ук', downArrow: 'ÐÑка таба ук', insert: 'Ó¨Ñтәү', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/vi.js0000664000201500020150000001347415203533226025275 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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}' }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Phím Tab', pause: 'Phím Pause', capslock: 'Phím Caps Lock', escape: 'Phím Escape', pageUp: 'Phím Page Up', pageDown: 'Phím Page Down', leftArrow: 'Phím Left Arrow', upArrow: 'Phím Up Arrow', rightArrow: 'Phím Right Arrow', downArrow: 'Phím Down Arrow', insert: 'Chèn', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/cs.js0000664000201500020150000001250115203533226025252 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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ů. K pÅ™echodu na další nebo pÅ™edchozí skupinu použijte TAB nebo SHIFT+TAB. Pro pÅ™echod na další nebo pÅ™edchozí tlaÄítko panelu nástrojů použijte Å IPKA VPRAVO nebo Å IPKA VLEVO. Stisknutím mezerníku nebo klávesy ENTER tlaÄítko aktivujete. Po aktivaci tlaÄítka se fokus pÅ™esune zpÄ›t do editaÄní oblasti.' }, { 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}' }, { name: 'Vložit jako Äistý text', legend: 'StisknÄ›te ${pastetext}', legendEdge: 'StisknÄ›te ${pastetext} a pak ${paste}' } ] } ], tab: 'Tabulátor', pause: 'Pauza', capslock: 'Caps lock', escape: 'Escape', pageUp: 'Stránka nahoru', pageDown: 'Stránka dolů', leftArrow: 'Å ipka vlevo', upArrow: 'Å ipka nahoru', rightArrow: 'Å ipka vpravo', downArrow: 'Å ipka dolů', insert: 'Vložit', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/tr.js0000664000201500020150000001173515203533226025302 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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' }, { name: 'Düz Metin Olarak Yapıştır', legend: '${pastetext} basın', legendEdge: 'Önce ${pastetext} ardından${paste} basın' } ] } ], tab: 'Sekme tuÅŸu', pause: 'Durdurma tuÅŸu', capslock: 'Büyük harf tuÅŸu', escape: 'Vazgeç tuÅŸu', pageUp: 'Sayfa Yukarı', pageDown: 'Sayfa AÅŸağı', leftArrow: 'Sol ok', upArrow: 'Yukarı ok', rightArrow: 'SaÄŸ ok', downArrow: 'AÅŸağı ok', insert: 'Araya gir', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ja.js0000664000201500020150000001316615203533226025247 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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} をクリック' }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: '左矢å°', upArrow: '上矢å°', rightArrow: 'å³çŸ¢å°', downArrow: '下矢å°', insert: 'Insert', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/sl.js0000664000201500020150000001174715203533226025276 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'sl', { title: 'Navodila za dostopnost', contents: 'Vsebina pomoÄi. ÄŒe želite zapreti pogovorno okno, pritisnite ESC.', legend: [ { name: 'SploÅ¡no', items: [ { name: 'Orodna vrstica urejevalnika', 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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // MISSING }, { name: 'Kontekstni meni urejevalnika', 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}' }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: 'PuÅ¡Äica levo', upArrow: 'PuÅ¡Äica gor', rightArrow: 'PuÅ¡Äica desno', downArrow: 'PuÅ¡Äica dol', insert: 'Insert', leftWindowKey: 'Leva tipka Windows', rightWindowKey: 'Desna tipka Windows', 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: 'Zaklepaj', singleQuote: 'OpuÅ¡Äaj' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/lv.js0000664000201500020150000001352415203533226025274 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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: 'Saites 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}' }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/en-au.js0000664000201500020150000001117015203533226025653 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'en-au', { 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. The focus will be moved back to the editing area upon activating 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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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.' }, { 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}' }, { name: ' Paste as plain text', legend: 'Press ${pastetext}', legendEdge: 'Press ${pastetext}, followed by ${paste}' } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: 'Left Arrow', upArrow: 'Up Arrow', rightArrow: 'Right Arrow', downArrow: 'Down Arrow', insert: 'Insert', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/en.js0000664000201500020150000001144415203533226025254 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. ' + 'The focus will be moved back to the editing area upon activating 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. ' + 'Press ESC to discard changes and close the dialog. ' + 'The focus will be moved back to the editing area upon leaving the dialog.' }, { 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}' }, { name: ' Paste as plain text', legend: 'Press ${pastetext}', legendEdge: 'Press ${pastetext}, followed by ${paste}' } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: 'Left Arrow', upArrow: 'Up Arrow', rightArrow: 'Right Arrow', downArrow: 'Down Arrow', insert: 'Insert', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/no.js0000664000201500020150000001227515203533226025271 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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}' }, { name: 'Lim inn som ren tekst', legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // 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: 'Semikolon', equalSign: 'Likhetstegn', comma: 'Komma', dash: 'Bindestrek', period: 'Punktum', forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Open Bracket', // MISSING backSlash: 'Backslash', // MISSING closeBracket: 'Close Bracket', // MISSING singleQuote: 'Enkelt anførselstegn' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/fr.js0000664000201500020150000001333315203533226025260 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'fr', { title: 'Instructions d\'accessibilité', contents: 'Contenu de l\'aide. Pour fermer cette fenêtre, appuyez sur la touche Échap.', 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 le groupe suivant ou précédent de la barre d\'outils avec les touches Tab et Maj+Tab. Se déplacer vers le bouton 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: 'Fenêtre de l\'éditeur', legend: 'Dans une boîte de dialogue, appuyer sur Tab pour passer à l\'élément suivant, appuyer sur Maj+Tab pour passer à l\'élément précédent, appuyer sur Entrée pour valider, appuyer sur Échap pour annuler. Quand une boîte de dialogue possède des onglets, la liste peut être atteinte avec Alt+F10 ou avec Tab. Dans la liste des onglets, se déplacer vers le suivant et le précédent avec les touches Flèche droite et Flèche gauche respectivement.' }, { name: 'Menu contextuel de l\'éditeur', legend: 'Appuyer sur ${contextMenu} ou sur la touche Menu pour ouvrir le menu contextuel. Se déplacer ensuite 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. Appuyer sur la barre d\'espace, la touche Entrée ou Flèche droite pour ouvrir le sous-menu de l\'option sélectionnée. Revenir à l\'élément de menu parent avec la touche Échap ou Flèche gauche. Fermer le menu contextuel avec Échap.' }, { name: 'Zone de liste de l\'éditeur', legend: 'Dans une 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 du chemin d\'éléments de l\'éditeur', legend: 'Appuyer sur ${elementsPathFocus} pour naviguer vers la barre du fil d\'Ariane des éléments. Se déplacer vers le bouton de l\'élément suivant avec les touches Tab ou Flèche droite. Se déplacer vers le bouton 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: 'Commande restaurer', 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: 'Commande d\'accès à l\'élément sélectionnable précédent', legend: 'Appuyer sur ${accessNextSpace} pour accéder à l\'élément sélectionnable inatteignable le plus proche avant le curseur, par exemple : deux lignes horizontales adjacentes. Répéter la combinaison de touches pour atteindre les éléments sélectionnables précédents.' }, { name: 'Commande d\'accès à l\'élément sélectionnable suivant', legend: 'Appuyer sur ${accessNextSpace} pour accéder à l\'élément sélectionnable inatteignable le plus proche après le curseur, par exemple : deux lignes horizontales adjacentes. Répéter la combinaison de touches pour atteindre les éléments sélectionnables suivants.' }, { name: ' Aide sur l\'accessibilité', legend: 'Appuyer sur ${a11yHelp}' }, { name: 'Coller comme texte sans mise en forme', legend: 'Appuyer sur ${pastetext}', legendEdge: 'Enfoncez ${pastetext}, suivi par ${paste}' } ] } ], tab: 'Tabulation', pause: 'Pause', capslock: 'Verr. Maj.', escape: 'Échap', pageUp: 'Page supérieure', pageDown: 'Page suivante', leftArrow: 'Flèche gauche', upArrow: 'Flèche haut', rightArrow: 'Flèche droite', downArrow: 'Flèche basse', insert: 'Inser', leftWindowKey: 'Touche Windows gauche', rightWindowKey: 'Touche Windows droite', selectKey: 'Touche Sélectionner', numpad0: '0 du pavé numérique', numpad1: '1 du pavé numérique', numpad2: '2 du pavé numérique', numpad3: '3 du pavé numérique', numpad4: '4 du pavé numérique', numpad5: '5 du pavé numérique', numpad6: '6 du pavé numérique', numpad7: '7 du pavé numérique', numpad8: 'Pavé numérique 8', numpad9: '9 du pavé numérique', multiply: 'Multiplier', add: 'Plus', subtract: 'Moins', 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: 'Verr. Num.', scrollLock: 'Arrêt défil.', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/id.js0000664000201500020150000001250515203533226025245 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'id', { title: 'Instruksi Accessibility', contents: 'Bantuan. Tekan ESC untuk menutup dialog ini.', legend: [ { name: 'Umum', items: [ { name: 'Toolbar Editor', legend: 'Tekan ${toolbarFocus} untuk berpindah ke toolbar. Untuk berpindah ke group toolbar selanjutnya dan sebelumnya gunakan TAB dan SHIFT+TAB. Untuk berpindah ke tombol toolbar selanjutnya dan sebelumnya gunakan RIGHT ARROW atau LEFT ARROW. Tekan SPASI atau ENTER untuk mengaktifkan tombol toolbar.' }, { name: 'Dialog Editor', legend: 'Pada jendela dialog, tekan TAB untuk berpindah pada elemen dialog selanjutnya, tekan SHIFT+TAB untuk berpindah pada elemen dialog sebelumnya, tekan ENTER untuk submit dialog, tekan ESC untuk membatalkan dialog. Pada dialog dengan multi tab, daftar tab dapat diakses dengan ALT+F10 ataupun dengan tombol TAB sesuai urutan tab pada dialog. Jika daftar tab aktif terpilih, untuk berpindah tab dapat menggunakan RIGHT dan LEFT ARROW.' }, { name: 'Context Menu Editor', 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: 'List Box Editor', 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 }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'Escape', // MISSING pageUp: 'Page Up', // MISSING pageDown: 'Page Down', // MISSING leftArrow: 'Left Arrow', // MISSING upArrow: 'Up Arrow', // MISSING rightArrow: 'Right Arrow', // MISSING downArrow: 'Down Arrow', // MISSING insert: 'Insert', // 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ug.js0000664000201500020150000001644515203533226025273 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'ug', { title: 'قوشۇمچە چۈشەندۈرۈش', contents: 'ياردەم مەزمۇنى. بۇ سۆزلەشكۈنى ياپماقچى بولسىڭىز ESC نى Ø¨ÛØ³Ù‰Ú­.', legend: [ { name: 'ئادەتتىكى', items: [ { name: 'قورال بالداق تەھرىر', legend: '${toolbarFocus} Ø¨ÛØ³Ù‰Ù„سا قورال بالداققا ÙŠÛØªÛ•كلەيدۇ، TAB ياكى SHIFT+TAB ئارقىلىق قورال بالداق گۇرۇپپىسى تاللىنىدۇ، ئوڭ سول يا ئوقتا توپچا تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تاللانغان توپچىنى قوللىنىدۇ.' }, { name: 'تەھرىرلىگۈچ سۆزلەشكۈسى', legend: 'سۆزلەشكۈدە TAB كۇنۇپكىسىدا ÙƒÛيىنكى سۆز بۆلىكىگە يۆتكىلىدۇ، SHIFT+TAB بىرىكمە كۇنۇپكىسىدا ئالدىنقى سۆز بۆلىكىگە يۆتكىلىدۇ، ENTER كۇنۇپكىسىدا سۆزلەشكۈنى تاپشۇرىدۇ، ESC كۇنۇپكىسى سۆزلەشكۈدىن ۋاز ÙƒÛچىدۇ. ÙƒÛ†Ù¾ بەتكۈچلۈك سۆزلەشكۈگە نىسبەتەن، ALT+F10 دا بەتكۈچ تىزىمىغا يۆتكەيدۇ. ئاندىن TAB كۇنۇپكىسى ياكى ئوڭ يا ئوق كۇنۇپكىسى ÙƒÛيىنكى بەتكۈچكە يۆتكەيدۇ؛SHIFT+ TAB كۇنۇپكىسى ياكى سول يا ئوق كۇنۇپكىسى ئالدىنقى بەتكۈچكە يۆتكەيدۇ. بوشلۇق كۇنۇپكىسى ياكى ENTER كۇنۇپكىسى بەتكۈچنى تاللايدۇ.' }, { 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} نى Ø¨ÛØ³Ù‰Ú­' }, { name: 'ساپ تÛكىست چاپلاش', legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: 'سول يا ئوق', upArrow: 'ئۈستى يا ئوق', rightArrow: 'ئوڭ يا ئوق', downArrow: 'ئاستى يا ئوق', insert: 'قىستۇر', 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: 'سان Ù‚Û‡Ù„Û‡Ù¾ كۇنۇپكىسى', scrollLock: 'سۈرگۈچ Ù‚Û‡Ù„Û‡Ù¾ كۇنۇپكىسى', semiColon: 'Ú†Ûكىتلىك Ù¾Û•Ø´', equalSign: 'تەڭلىك بەلگىسى', comma: 'Ù¾Û•Ø´', dash: 'سىزىقچە', period: 'Ú†Ûكىت', forwardSlash: 'سولغا يانتۇ سىزىق', graveAccent: 'ئۇرغۇ بەلگىسى', openBracket: 'ئÛچىلغان تىرناق', backSlash: 'ئوڭغا يانتۇ سىزىق', closeBracket: 'ÙŠÛپىلغان تىرناق', singleQuote: 'يالاڭ Ù¾Û•Ø´' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ar.js0000664000201500020150000001252315203533226025253 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. The focus will be moved back to the editing area upon activating 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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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: 'Press ${undo}' // MISSING }, { name: ' Redo command', // MISSING legend: 'Press ${redo}' // MISSING }, { name: 'نص غامق', legend: 'Press ${bold}' // MISSING }, { name: 'نص مائل', legend: 'Press ${italic}' // MISSING }, { name: 'نص تحته خط', 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 }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', // MISSING pause: 'Pause', // MISSING capslock: 'Caps Lock', // MISSING escape: 'هروب', pageUp: 'اعلى Ø§Ù„ØµÙØ­Ø©', pageDown: 'اسÙÙ„ Ø§Ù„ØµÙØ­Ø©', leftArrow: 'السهم الايسر', upArrow: 'السهم العلوي', rightArrow: 'السهم الأيمن', downArrow: 'السهم السÙلي', insert: 'Insert', // 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: 'مضروب', add: 'Ø¥Ø¶Ø§ÙØ©', subtract: 'طرح', decimalPoint: 'Decimal Point', // MISSING 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: 'Scroll Lock', // MISSING semiColon: 'Ø§Ù„ÙØ§ØµÙ„Ø© المنقوطة', equalSign: 'علامة "يساوي"', comma: 'ÙØ§ØµÙ„Ø©', dash: 'شرطة', period: 'نقطة', forwardSlash: 'Forward Slash', // MISSING graveAccent: 'Grave Accent', // MISSING openBracket: 'Ø§ÙØªØ­ القوس', backSlash: 'Backslash', // MISSING closeBracket: 'اغلق القوس', singleQuote: 'Single Quote' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/sr.js0000664000201500020150000001752015203533226025277 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'sr', { title: 'УпутÑтва за помоћ', contents: 'Садржаји за помоћ. Да би Ñте затворили дијалог притиÑните ЕСЦ', legend: [ { name: 'Опште', items: [ { name: 'Ðлатке за преуређиванје', legend: 'ПритиÑните ${тоолбарФоцуÑ} да биÑте прешли на траку Ñа алаткама. Пређите на Ñледећу и претходну групу трака Ñа алаткама помоћу ТÐБ и СХИФТ+ТÐБ. Пређите на Ñледеће и претходно дугме на траци Ñа алаткама помоћу СТРЕЛИЦЕ ÐÐДЕСÐО или СТРЕЛИЦРÐÐЛЕВО. ПритиÑните СПÐЦЕ или ЕÐТЕР да биÑте активирали дугме на траци Ñа алаткама. Ðакон активирања дугмета на траци Ñа алаткама, Ñ„Ð¾ÐºÑƒÑ Ñ›Ðµ бити померен назад у облаÑÑ‚ за уређивање.' }, { name: 'Уређивач дијалога', legend: 'Унутар дијалога притиÑните ТÐБ да пређете на Ñледећи елемент дијалога, притиÑните СХИФТ+ТÐБ да пређете на претходни елемент дијалога, притиÑните ЕÐТЕР да пошаљете дијалог, притиÑните ЕСЦ да откажете дијалог. Када дијалог има више картица, до лиÑте картица Ñе може доћи или Ñа ÐЛТ+Ф10 или Ñа ТÐБ као део редоÑледа табулатора дијалога. Са фокуÑираном лиÑтом картица, пређите на Ñледећу и претходну картицу помоћу СТРЕЛИЦЕ ÐÐДЕСÐО, одноÑно ÐÐЛЕВО. ПритиÑните ЕСЦ да одбаците промене и затворите дијалог. Ð¤Ð¾ÐºÑƒÑ Ñ›Ðµ Ñе вратити на облаÑÑ‚ за уређивање након напуштања дијалога.' }, { name: 'Уређивач локалног менија.', legend: 'ПритиÑните ${contextMenu} или APPLICATION ТÐСТЕР за отварање локалног менија. Затим Ñа ТÐБ или СТРЕЛИЦРДОЛЕ можете прећи на Ñледећу зачку менија. Претходну опцију можете поÑтићи Ñа ШХИФТ+ТÐБ или СТРЕЛИЦРГОРЕ. ПритиÑните СПÐЦЕ или ЕÐТЕР за одабир тачке менија. ПритиÑните СПÐЦЕ или ЕÐТЕР да би Ñе отворио подмени тренутне Ñтавке менија. За повратак у главни мени притиÑмите ЕСЦ или СТРЕЛИЦРДЕСÐО. Затворите локални мени помоћу таÑтера ЕСЦ.' }, { name: 'Уређивач лиÑте', legend: 'До Ñледећег елемента лиÑте можете дочи Ñа ТÐБ или СТРЕЛИЦРДОЛЕ. За одабир петходног елемента притиÑните СХИФТ+TAБ или СТРЕЛИЦРДОЛЕ. За одабир елемента притиÑните СПÐЦЕ или ЕÐТЕР. Са притиÑко ЕСЦ затварате лиÑту. ' }, { name: 'Уређивач траке пута елемената', legend: 'ПритиÑни ${elementsPathFocus} да би означили траку пута елемената. До Ñледећег елемента можете доћи Ñа TAБ или СТРЕЛИЦРДЕСÐО. До претходног долазите Ñа СХИФТ+TAБ или СТРЕЛИЦРДЕСÐО. Са СПÐЦЕ или ЕÐТЕР можете одабрати елемент у уређивачу.' } ] }, { 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} да би приÑтупио најближем недоÑтупном Ñ„Ð¾ÐºÑƒÑ Ð¼ÐµÑту пре знака hiányjel, на пример: дав ÑуÑаедна ХР елемента. Понови комбинацију таÑтера да пронађеш Ñ„Ð¾ÐºÑƒÑ Ð¼ÐµÑто које Ñе налази даље.' }, { name: 'ПриÑтуп Ñледећем Ñ„Ð¾ÐºÑƒÑ Ð¼ÐµÑту команда ', legend: 'ПритиÑни ${accessNextSpace} да би приÑтупио најближем недоÑтупном Ñ„Ð¾ÐºÑƒÑ Ð¼ÐµÑту поÑле знака hiányjel, на пример: дав ÑуÑаедна ХР елемента. Понови комбинацију таÑтера да пронађеш Ñ„Ð¾ÐºÑƒÑ Ð¼ÐµÑто које Ñе налази даље.' }, { name: 'Помоћ приÑтупачнÑти', legend: 'ПритиÑни ${a11yHelp}' }, { name: ' Ðалепи као обичан текÑÑ‚', legend: 'ПритиÑните: ${pastetext}', legendEdge: 'ПритиÑните ${pastetext}, затим ${paste}' } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: 'Стрелица лево', upArrow: 'Стрелица горе', rightArrow: 'Стрелица деÑно', downArrow: 'Стрелица доле', insert: 'Insert', 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: 'Ф1', f2: 'Ф2', f3: 'Ф3', f4: 'Ф4', f5: 'Ф5', f6: 'Ф6', f7: 'Ф7', f8: 'Ф8', f9: 'Ф9', f10: 'Ф10', f11: 'Ф11', f12: 'Ф12', numLock: 'Num Lock', scrollLock: 'Scroll Lock', semiColon: 'Тачка зарез', equalSign: 'Знак једнакоÑти', comma: 'Зарез', dash: 'Цртица', period: 'Тачка', forwardSlash: 'КоÑа црта', graveAccent: 'Обрнути знак акцента', openBracket: 'Отворена ћошкаÑта заграда', backSlash: 'обрнута коÑа црта', closeBracket: 'Затворена ћошкаÑта заграда', singleQuote: 'Симпли знак навода' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/eu.js0000664000201500020150000001167415203533226025270 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'a11yhelp', 'eu', { title: 'Erabilerraztasunaren argibideak', contents: 'Laguntzaren edukiak. Elkarrizketa-koadro hau ixteko sakatu ESC.', legend: [ { name: 'Orokorra', items: [ { name: 'Editorearen tresna-barra', legend: 'Sakatu ${toolbarFocus} tresna-barrara nabigatzeko. Tresna-barrako aurreko eta hurrengo taldera joateko erabili TAB eta MAIUS+TAB. Tresna-barrako aurreko eta hurrengo botoira joateko erabili ESKUIN-GEZIA eta EZKER-GEZIA. Sakatu ZURIUNEA edo SARTU tresna-barrako botoia aktibatzeko.' }, { name: 'Editorearen elkarrizketa-koadroa', legend: 'Elkarrizketa-koadro baten barruan sakatu TAB hurrengo elementura nabigatzeko, sakatu MAIUS+TAB aurreko elementura joateko, sakatu SARTU elkarrizketa-koadroa bidaltzeko eta sakatu ESC uzteko. Elkarrizketa-koadro batek hainbat fitxa dituenean, ALT+F10 erabiliz irits daiteke fitxen zerrendara, edo TAB erabiliz. Fokoa fitxen zerrendak duenean, aurreko eta hurrengo fitxetara joateko erabili EZKER-GEZIA eta ESKUIN-GEZIA.' }, { name: 'Editorearen testuinguru-menua', legend: 'Sakatu ${contextMenu} edo APLIKAZIO TEKLA testuinguru-menua irekitzeko. Menuko hurrengo aukerara joateko erabili TAB edo BEHERA GEZIA. Aurreko aukerara nabigatzeko erabili MAIUS+TAB edo GORA GEZIA. Sakatu ZURIUNEA edo SARTU menuko aukera hautatzeko. Ireki uneko aukeraren azpi-menua ZURIUNEA edo SARTU edo ESKUIN-GEZIA erabiliz. Menuko aukera gurasora itzultzeko erabili ESC edo EZKER-GEZIA. Testuinguru-menua ixteko sakatu ESC.' }, { name: 'Editorearen zerrenda-koadroa', legend: 'Zerrenda-koadro baten barruan, zerrendako hurrengo elementura joateko erabili TAB edo BEHERA GEZIA. Zerrendako aurreko elementura nabigatzeko MAIUS+TAB edo GORA GEZIA. Sakatu ZURIUNEA edo SARTU zerrendako aukera hautatzeko. Sakatu ESC zerrenda-koadroa ixteko.' }, { name: 'Editorearen elementuaren bide-barra', legend: 'Sakatu ${elementsPathFocus} elementuaren bide-barrara nabigatzeko. Hurrengo elementuaren botoira joateko erabili TAB edo ESKUIN-GEZIA. Aurreko botoira joateko aldiz erabili MAIUS+TAB edo EZKER-GEZIA. Elementua editorean hautatzeko sakatu ZURIUNEA edo SARTU.' } ] }, { name: 'Komandoak', items: [ { name: 'Desegin komandoa', legend: 'Sakatu ${undo}' }, { name: 'Berregin komandoa', legend: 'Sakatu ${redo}' }, { name: 'Lodia komandoa', legend: 'Sakatu ${bold}' }, { name: 'Etzana komandoa', legend: 'Sakatu ${italic}' }, { name: 'Azpimarratu komandoa', legend: 'Sakatu ${underline}' }, { name: 'Esteka komandoa', legend: 'Sakatu ${link}' }, { name: 'Tolestu tresna-barra komandoa', legend: 'Sakatu ${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: 'Erabilerraztasunaren laguntza', legend: 'Sakatu ${a11yHelp}' }, { name: 'Itsatsi testu arrunt bezala', legend: 'Sakatu ${pastetext}', legendEdge: 'Sakatu ${pastetext} eta jarraian ${paste}' } ] } ], tab: 'Tabuladorea', pause: 'Pausatu', capslock: 'Blok Maius', escape: 'Ihes', pageUp: 'Orria gora', pageDown: 'Orria behera', leftArrow: 'Ezker-gezia', upArrow: 'Gora gezia', rightArrow: 'Eskuin-gezia', downArrow: 'Behera gezia', insert: 'Txertatu', leftWindowKey: 'Ezkerreko Windows tekla', rightWindowKey: 'Eskuineko Windows tekla', selectKey: 'Hautatu tekla', numpad0: 'Zenbakizko teklatua 0', numpad1: 'Zenbakizko teklatua 1', numpad2: 'Zenbakizko teklatua 2', numpad3: 'Zenbakizko teklatua 3', numpad4: 'Zenbakizko teklatua 4', numpad5: 'Zenbakizko teklatua 5', numpad6: 'Zenbakizko teklatua 6', numpad7: 'Zenbakizko teklatua 7', numpad8: 'Zenbakizko teklatua 8', numpad9: 'Zenbakizko teklatua 9', multiply: 'Biderkatu', add: 'Gehitu', subtract: 'Kendu', decimalPoint: 'Koma hamartarra', divide: 'Zatitu', 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: 'Blok Zenb', scrollLock: 'Blok Korr', semiColon: 'Puntu eta koma', equalSign: 'Berdin zeinua', comma: 'Koma', dash: 'Marratxoa', period: 'Puntua', forwardSlash: 'Barra', graveAccent: 'Azentu kamutsa', openBracket: 'Parentesia ireki', backSlash: 'Alderantzizko barra', closeBracket: 'Itxi parentesia', singleQuote: 'Komatxo bakuna' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/en-gb.js0000664000201500020150000001136115203533226025640 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. The focus will be moved back to the editing area upon activating 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. Press ESC to discard changes and close the dialog. The focus will be moved back to the editing area upon leaving the dialog.' // 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}' }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: 'Left Arrow', upArrow: 'Up Arrow', rightArrow: 'Right Arrow', downArrow: 'Down Arrow', insert: 'Insert', 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-5.0.10/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/hu.js0000664000201500020150000001222515203533226025264 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'Párbeszédablakban nyomjon TAB-ot a következÅ‘ párbeszédmezÅ‘höz ugráshoz, nyomjon SHIFT + TAB-ot az elÅ‘zÅ‘ mezÅ‘höz ugráshoz, nyomjon ENTER-t a párbeszédablak elfogadásához, nyomjon ESC-et a párbeszédablak elvetéséhez. Azokhoz a párbeszédablakokhoz, amik több fület tartalmaznak, nyomjon ALT + F10-et vagy TAB-ot hogy a fülekre ugorjon. Ezután a TAB-al vagy a JOBB NYÃLLAL a következÅ‘ fülre ugorhat.' }, { 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}' }, { name: 'Beillesztés egyszerű szövegként', legend: 'Nyomja meg: ${pastetext}', legendEdge: 'Nyomjon ${pastetext}-t, majd ${paste}-t' } ] } ], tab: 'Tab', pause: 'Pause', capslock: 'Caps Lock', escape: 'Escape', pageUp: 'Page Up', pageDown: 'Page Down', leftArrow: 'balra nyíl', upArrow: 'felfelé nyíl', rightArrow: 'jobbra nyíl', downArrow: 'lefelé nyíl', insert: 'Insert', 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-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/0000755000201500020150000000000015203533226022467 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/plugin.js0000775000201500020150000002052115203533226024330 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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 https://dev.ckeditor.com/ticket/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,az,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,es-mx,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,oc,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', { isToggle: true, label: editor.lang.blockquote.toolbar, command: 'blockquote', toolbar: 'blocks,10' } ); } } ); } )(); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/0000755000201500020150000000000015203533226023410 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/zh.js0000664000201500020150000000035715203533226024376 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'zh', { toolbar: '引用段è½' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/nb.js0000664000201500020150000000035515203533226024352 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'nb', { toolbar: 'Blokksitat' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/eo.js0000664000201500020150000000035215203533226024353 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'eo', { toolbar: 'Citaĵo' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/es.js0000664000201500020150000000034715203533226024363 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'es', { toolbar: 'Cita' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/ro.js0000664000201500020150000000035015203533226024366 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'ro', { toolbar: 'Citat' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/hr.js0000664000201500020150000000035015203533226024357 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'hr', { toolbar: 'Citat' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/it.js0000664000201500020150000000035415203533226024366 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'it', { toolbar: 'Citazione' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/de-ch.js0000664000201500020150000000036015203533226024727 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'de-ch', { toolbar: 'Zitatblock' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/sk.js0000664000201500020150000000035315203533226024366 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'sk', { toolbar: 'Citácia' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/az.js0000664000201500020150000000035615203533226024366 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'az', { toolbar: 'Sitat bloku' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/pt.js0000664000201500020150000000036515203533226024377 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'pt', { toolbar: 'Bloco de citação' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/si.js0000664000201500020150000000040215203533226024357 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'si', { toolbar: 'උද්ධෘත කොටස' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/ko.js0000664000201500020150000000036015203533226024360 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'ko', { toolbar: 'ì¸ìš© 단ë½' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/mk.js0000664000201500020150000000037215203533226024361 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'mk', { toolbar: 'Одвоен цитат' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/cy.js0000664000201500020150000000036015203533226024362 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'cy', { toolbar: 'Dyfyniad bloc' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/uk.js0000664000201500020150000000035715203533226024374 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'uk', { toolbar: 'Цитата' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/zh-cn.js0000664000201500020150000000035715203533226024774 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'zh-cn', { toolbar: 'å—引用' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/sv.js0000664000201500020150000000035515203533226024403 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'sv', { toolbar: 'Blockcitat' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/lt.js0000664000201500020150000000035115203533226024366 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'lt', { toolbar: 'Citata' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/is.js0000664000201500020150000000035615203533226024367 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'is', { toolbar: 'Inndráttur' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/fr-ca.js0000664000201500020150000000035615203533226024744 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'fr-ca', { toolbar: 'Citation' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/et.js0000664000201500020150000000035715203533226024365 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'et', { toolbar: 'Blokktsitaat' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/bs.js0000664000201500020150000000037115203533226024355 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'bs', { toolbar: 'Block Quote' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/pl.js0000664000201500020150000000035015203533226024361 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'pl', { toolbar: 'Cytat' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/bg.js0000664000201500020150000000037315203533226024343 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'bg', { toolbar: 'Блок за цитат' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/fa.js0000664000201500020150000000037115203533226024337 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'fa', { toolbar: 'بلوک نقل قول' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/ku.js0000664000201500020150000000042715203533226024372 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'ku', { toolbar: 'بەربەستکردنی ووتەی وەرگیراو' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/bn.js0000664000201500020150000000037115203533226024350 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'bn', { toolbar: 'Block Quote' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/el.js0000664000201500020150000000040415203533226024346 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'el', { toolbar: 'ΠεÏιοχή ΠαÏάθεσης' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/fi.js0000664000201500020150000000035215203533226024346 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'fi', { toolbar: 'Lainaus' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/ru.js0000664000201500020150000000035715203533226024403 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'ru', { toolbar: 'Цитата' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/gl.js0000664000201500020150000000034715203533226024356 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'gl', { toolbar: 'Cita' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/sr-latn.js0000664000201500020150000000036215203533226025331 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'sr-latn', { toolbar: 'Blok citat' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/oc.js0000664000201500020150000000035315203533226024352 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'oc', { toolbar: 'Citacion' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/sq.js0000664000201500020150000000035515203533226024376 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'sq', { toolbar: 'Thonjëzat' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/pt-br.js0000664000201500020150000000035715203533226025001 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'pt-br', { toolbar: 'Citação' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/fo.js0000664000201500020150000000035515203533226024357 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'fo', { toolbar: 'Blockquote' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/af.js0000664000201500020150000000035515203533226024341 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'af', { toolbar: 'Sitaatblok' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/hi.js0000664000201500020150000000037415203533226024354 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'hi', { toolbar: 'बà¥à¤²à¥‰à¤•-कोट' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/km.js0000664000201500020150000000043115203533226024355 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'km', { toolbar: 'ប្លក់​ពាក្យ​សម្រង់' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/nl.js0000664000201500020150000000035515203533226024364 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'nl', { toolbar: 'Citaatblok' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/ka.js0000664000201500020150000000036515203533226024347 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'ka', { toolbar: 'ციტáƒáƒ¢áƒ' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/es-mx.js0000664000201500020150000000036415203533226025004 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'es-mx', { toolbar: 'Entrecomillado' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/mn.js0000664000201500020150000000037015203533226024362 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'mn', { toolbar: 'ИшлÑл Ñ…ÑÑÑг' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/da.js0000664000201500020150000000035415203533226024336 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'da', { toolbar: 'Blokcitat' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/he.js0000664000201500020150000000036615203533226024351 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'he', { toolbar: 'בלוק ציטוט' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/ca.js0000664000201500020150000000035715203533226024340 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'ca', { toolbar: 'Bloc de cita' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/gu.js0000664000201500020150000000043715203533226024367 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'gu', { toolbar: 'બà«àª²à«‰àª•-કોટ, અવતરણચિહà«àª¨à«‹' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/ms.js0000664000201500020150000000037115203533226024370 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'ms', { toolbar: 'Block Quote' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/th.js0000664000201500020150000000035615203533226024367 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'th', { toolbar: 'Block Quote' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/de.js0000664000201500020150000000035515203533226024343 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'de', { toolbar: 'Zitatblock' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/en-ca.js0000664000201500020150000000036115203533226024733 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'en-ca', { toolbar: 'Block Quote' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/tt.js0000664000201500020150000000037215203533226024401 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'tt', { toolbar: 'Өземтә блогы' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/vi.js0000664000201500020150000000036615203533226024373 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'vi', { toolbar: 'Khối trích dẫn' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/cs.js0000664000201500020150000000035115203533226024354 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'cs', { toolbar: 'Citace' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/tr.js0000664000201500020150000000036015203533226024374 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'tr', { toolbar: 'Blok OluÅŸtur' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/ja.js0000664000201500020150000000037015203533226024342 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'ja', { toolbar: 'ブロック引用文' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/sl.js0000664000201500020150000000035015203533226024364 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'sl', { toolbar: 'Citat' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/lv.js0000664000201500020150000000036015203533226024370 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'lv', { toolbar: 'Bloka citÄts' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/en-au.js0000664000201500020150000000036115203533226024755 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'en-au', { toolbar: 'Block Quote' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/en.js0000664000201500020150000000035615203533226024356 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'en', { toolbar: 'Block Quote' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/no.js0000664000201500020150000000035515203533226024367 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'no', { toolbar: 'Blokksitat' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/fr.js0000664000201500020150000000035315203533226024360 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'fr', { toolbar: 'Citation' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/id.js0000664000201500020150000000035715203533226024351 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'id', { toolbar: 'Kutipan Blok' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/ug.js0000664000201500020150000000037015203533226024363 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'ug', { toolbar: 'بۆلەك نەقىل' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/ar.js0000664000201500020150000000035715203533226024357 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'ar', { toolbar: 'اقتباس' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/sr.js0000664000201500020150000000036615203533226024401 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'sr', { toolbar: 'Блок цитат' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/eu.js0000664000201500020150000000036115203533226024361 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'eu', { toolbar: 'Aipamen blokea' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/en-gb.js0000664000201500020150000000036115203533226024740 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'en-gb', { toolbar: 'Block Quote' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/lang/hu.js0000664000201500020150000000036015203533226024363 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'blockquote', 'hu', { toolbar: 'Idézet blokk' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/icons/0000755000201500020150000000000015153141500023574 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/icons/hidpi/0000755000201500020150000000000015153141500024671 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/icons/hidpi/blockquote.png0000664000201500020150000000255315153141500027556 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎoIDATXÃíWMh$Eþ^U÷ô`†IÂl‚—dr2—œ<… BrQ”xZðèÁ£«.ºbú¢W5  l@H@AÍU‚G/ù!`˜HâÌÎdª§«ž‡LÕVWzf÷æÅMWW×{ï{¿UüOÿ1ÑÒÒRn‚™Ý›ˆ®yo!ˆD„ÍÍMÀÊÊ ²,ƒÖZkcr²,¯å—Rº‡–——s ÀŽ™Ù=”??€/ÃèIÜäƒ … !œR»&T^dœ}GE † IcÌ@ËC#B¯ˆ"TBˆhff!¸ßétž 3£×ëÀ!Ä9ÐB|Òívs@~Ú‰©©©äøø¸¢´è¥”Ïk­ óÂW.„¨cΊÀöã?ÍÌÇ–Ïy Ë2uCFß3Zë_¤¯ÐšÍ&´Ögƒ<Õ_wtvvö°Äqü CÌŒ½½½‡EngfŒŽŽþd•c\9Ú·×jµ?ì:Z\\´‚ aû!ð”’-§€½Žc'CDQä*À222‚4M“°UgYös¨\Zc*• „ãa *¥ìX”J¥föî-_¹Ⳣ̎ã8WƾË1·üÐZ¿éW‹¨ÕjN±Ö:·¡0ó‹>r­õ»aöÛ¤ìõzȲÌe?3£R©@k]÷eYöe@£Ñp¥áÿˆ¢èã  =‡4h§l·Û?øßÕju¦T*å7º¼¼¼Ö@z½â8þÀzFJ¹jŒùͷؾ­µ¡ "ªc^±À¤”7[­Ö¡¯\JyÕˆ|·¥iŠ$I^Ùmc>ò…!BÌüì®1æ~Ñ% …&IòžÖúFém÷ŠÜn­ð;¤¥R©ô£·o¼ `#äwÛq0ÿšÖzˆP.—Ÿ¦|}}I’\;øš™—‰Õjõ)fÞ(Rl½&,³”ò3OD·1¤”úChffããã!ˆÌü½¬”¢V«uYÄkloo?òÀôôô§t%åž­Û°2,íììêõ:ÆÆÆ$ ö÷÷Ñét^êËxP.—s2TneDöçÁÁAº933vwwÝüÜÜœ8??¥T.'¬!~s#¢œŒ(´0<YnivvÖ݈àââišº¾boAÆwk eDEŠ®Ý…ÀÖÖÖµPLNNB)¥”ë‚Ífiš:T«UÔëu¬­­†óÚÝЧ"¥>H¥Úí6qrr‚óóst»]wG\]]Å0úôǓĻDð%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/blockquote/icons/blockquote.png0000664000201500020150000000131415153141500026453 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ð»IDAT8Ëm“ÁŠA†¿*z&&9„ä’Á“ìEOâ!H’§VôäIð$>Â>€ ^| 7—Ü]¼xÏÉe0D—I†™tyØôì$LACwõ_Uÿ]%óù3@DPUTç"BY–xïOpë‚ÀÌÌ 3ãp8Ôþ°ÎÍ;È{_ûšÙ›„"‚gžç¯sÓ¢(03¼÷upY–8瞈ÈËåryO2NQÕ 3»ifÉó\z½EQÇñ_3ë‡û8Ž_”ey­ÇoÎß—¦é‡%ŽãËf0@Y–ß\P³E ÇýÃ6­öû}­Á§s€ªþ ûÅbñ>$ &"t»Ýšàª>SÕ/$É×ðߓɄív+ÀGUÝ!¿d6›Õ¬ãñ¸·Z­þ‰UUIE'}q,ýHÍ칈,µÙUëõú`0 Cp³ôÑh”©ˆü‘%pßI’<žŠÈÕf³ùÓl"€ªªÈ²ìVDðÞ_r‡½Ýn÷KU_ïÚ~Å9÷ý®% Q­óÞdYö¶ßï÷½÷Ÿ›*‡EÑ#3»’N§srw"bó½Ð6H'ÓØÜv>·@ò÷&ã³Ö)u%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/0000755000201500020150000000000015203533231022656 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/plugin.js0000664000201500020150000001624515203533231024524 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ ( function() { 'use strict'; CKEDITOR.plugins.add( 'stylescombo', { requires: 'richcombo', // jscs:disable maximumLineLength lang: 'af,ar,az,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,es-mx,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,oc,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 ) || ( typeof styleDefinition.type == 'string' && !CKEDITOR.style.customHandlers[ styleDefinition.type ] ) ) { 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 (https://dev.ckeditor.com/ticket/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 (https://dev.ckeditor.com/ticket/9029). stylesList.sort( function( styleA, styleB ) { return styleA._.weight - styleB._.weight; } ); } ); // (#3649) editor.on( 'stylesRemove', function( evt ) { var type = evt.data && evt.data.type, allowAll = type === undefined; for ( var styleName in styles ) { var style = styles[ styleName ]; if ( allowAll || style.type === type ) { editor.removeStyle( style ); } } } ); 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(); // When more then one style from the same group is active ( which is not ok ), // remove all other styles from this group and apply selected style. if ( style.group && style.removeStylesFromSameGroup( editor ) ) { editor.applyStyle( style ); } else { 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(), // When editor is focused but is returned `null` as selected element, then return editable (#646). // In case when selection dosen't cover whole element, we try to return element where selection starts (#862). element = selection.getSelectedElement() || selection.getStartElement() || editor.editable(), 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 = []; } } ); } } ); } )(); /** * Removes styles from the current editor selection. * * Note that you can pass the `type` option to limit removing styles to the given type. * * ```js * editor.fire( 'stylesRemove', { type: CKEDITOR.STYLE_BLOCK } ); * ``` * * @since 4.15.1 * @event stylesRemove * @member CKEDITOR.editor * @param {CKEDITOR.editor} editor This editor instance. * @param data * @param {Number} [data.type] Style type, see {@link CKEDITOR#STYLE_INLINE INLINE}/{@link CKEDITOR#STYLE_BLOCK BLOCK}/{@link CKEDITOR#STYLE_OBJECT OBJECT} style options. */ rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/0000755000201500020150000000000015203533231023577 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/zh.js0000664000201500020150000000054215203533231024561 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'zh', { label: '樣å¼', panelTitle: 'æ ¼å¼åŒ–樣å¼', panelTitle1: 'å€å¡Šæ¨£å¼', panelTitle2: '內嵌樣å¼', panelTitle3: '物件樣å¼' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/nb.js0000664000201500020150000000053415203533231024540 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'nb', { label: 'Stil', panelTitle: 'Stilformater', panelTitle1: 'Blokkstiler', panelTitle2: 'Inlinestiler', panelTitle3: 'Objektstiler' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/eo.js0000664000201500020150000000056415203533231024547 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/es.js0000664000201500020150000000057515203533231024555 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ro.js0000664000201500020150000000055615203533231024565 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'ro', { label: 'Stil', panelTitle: 'Formatare stilurilor', panelTitle1: 'Bloc stiluri', panelTitle2: 'Stiluri înÈ™iruite', panelTitle3: 'Stiluri obiect' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/hr.js0000664000201500020150000000055215203533231024552 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'hr', { label: 'Stil', panelTitle: 'Stilovi formatiranja', panelTitle1: 'Block stilovi', panelTitle2: 'Inline stilovi', panelTitle3: 'Object stilovi' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/it.js0000664000201500020150000000056415203533231024560 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/de-ch.js0000664000201500020150000000054515203533231025123 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'de-ch', { label: 'Stil', panelTitle: 'Formatierungsstile', panelTitle1: 'Blockstile', panelTitle2: 'Inline Stilart', panelTitle3: 'Objektstile' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/sk.js0000664000201500020150000000056215203533231024557 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'sk', { label: 'Å týly', panelTitle: 'Formátovanie Å¡týlov', panelTitle1: 'Å týly bloku', panelTitle2: 'Znakové Å¡týly', panelTitle3: 'Å týly objektu' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/az.js0000664000201500020150000000060515203533231024552 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'az', { label: 'Üslub', panelTitle: 'Format üslubları', panelTitle1: 'Blokların üslubları', panelTitle2: 'SözlÉ™rin üslubları', panelTitle3: 'ObyektlÉ™rin üslubları' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/pt.js0000664000201500020150000000057515203533231024571 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'pt', { label: 'Estilos', panelTitle: 'Estilos de formatação', panelTitle1: 'Estilos de bloco', panelTitle2: 'Estilos nas etiquetas', panelTitle3: 'Estilos em objeto' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/si.js0000664000201500020150000000063615203533231024557 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'si', { label: 'විලà·à·ƒà¶º', panelTitle: 'Formatting Styles', // MISSING panelTitle1: 'Block Styles', // MISSING panelTitle2: 'Inline Styles', // MISSING panelTitle3: 'Object Styles' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ko.js0000664000201500020150000000057415203533231024556 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'ko', { label: '스타ì¼', panelTitle: 'ì „ì²´ 구성 스타ì¼', panelTitle1: 'ë¸”ë¡ ìŠ¤íƒ€ì¼', panelTitle2: 'ì¸ë¼ì¸ 스타ì¼', panelTitle3: 'ê°ì²´ 스타ì¼' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/mk.js0000664000201500020150000000062215203533231024546 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/cy.js0000664000201500020150000000057315203533231024557 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'cy', { label: 'Arddulliau', panelTitle: 'Arddulliau Fformatio', panelTitle1: 'Arddulliau Bloc', panelTitle2: 'Arddulliau Mewnol', panelTitle3: 'Arddulliau Gwrthrych' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/uk.js0000664000201500020150000000064115203533231024557 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'uk', { label: 'Стиль', panelTitle: 'Стилі форматуваннÑ', panelTitle1: 'Блочні Ñтилі', panelTitle2: 'РÑдкові Ñтилі', panelTitle3: 'Об\'єктні Ñтилі' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/zh-cn.js0000664000201500020150000000055615203533231025164 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'zh-cn', { label: 'æ ·å¼', panelTitle: 'æ ·å¼', panelTitle1: 'å—级元素样å¼', panelTitle2: '内è”元素样å¼', panelTitle3: '对象元素样å¼' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/sv.js0000664000201500020150000000055115203533231024570 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'sv', { label: 'Stilar', panelTitle: 'Formateringsstilar', panelTitle1: 'Blockstilar', panelTitle2: 'Inbäddade stilar', panelTitle3: 'Objektstilar' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/lt.js0000664000201500020150000000056215203533231024561 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'lt', { label: 'Stilius', panelTitle: 'Stilių formatavimas', panelTitle1: 'Blokų stiliai', panelTitle2: 'Vidiniai stiliai', panelTitle3: 'Objektų stiliai' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/is.js0000664000201500020150000000063015203533231024551 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/fr-ca.js0000664000201500020150000000056315203533231025133 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/et.js0000664000201500020150000000055215203533231024551 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'et', { label: 'Stiil', panelTitle: 'Vormindusstiilid', panelTitle1: 'Blokkstiilid', panelTitle2: 'Reasisesed stiilid', panelTitle3: 'Objektistiilid' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/bs.js0000664000201500020150000000062015203533231024541 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/pl.js0000664000201500020150000000055015203533231024552 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'pl', { label: 'Styl', panelTitle: 'Style formatujÄ…ce', panelTitle1: 'Style blokowe', panelTitle2: 'Style liniowe', panelTitle3: 'Style obiektowe' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/bg.js0000664000201500020150000000067215203533231024534 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'bg', { label: 'Стилове', panelTitle: 'Стилове за форматиране', panelTitle1: 'Блокови Ñтилове', panelTitle2: 'Поредови Ñтилове', panelTitle3: 'Обектни Ñтилове' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/fa.js0000664000201500020150000000061715203533231024531 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'fa', { label: 'سبک', panelTitle: 'سبکهای قالببندی', panelTitle1: 'سبکهای بلوک', panelTitle2: 'سبکهای درونخطی', panelTitle3: 'سبکهای شیء' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ku.js0000664000201500020150000000063115203533231024556 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'ku', { label: 'شێواز', panelTitle: 'شێوازی ڕازاندنەوە', panelTitle1: 'شێوازی خشت', panelTitle2: 'شێوازی ناوهێڵ', panelTitle3: 'شێوازی بەرکار' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/bn.js0000664000201500020150000000062515203533231024541 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'bn', { label: 'ধরন', panelTitle: 'Formatting Styles', // MISSING panelTitle1: 'Block Styles', // MISSING panelTitle2: 'Inline Styles', // MISSING panelTitle3: 'Object Styles' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/el.js0000664000201500020150000000065015203533231024540 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'el', { label: 'ΜοÏφές', panelTitle: 'Στυλ ΜοÏφοποίησης', panelTitle1: 'Στυλ Τμημάτων', panelTitle2: 'Στυλ Εν ΣειÏά', panelTitle3: 'Στυλ Αντικειμένων' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/fi.js0000664000201500020150000000056415203533231024542 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'fi', { label: 'Tyyli', panelTitle: 'Muotoilujen tyylit', panelTitle1: 'Lohkojen tyylit', panelTitle2: 'Rivinsisäiset tyylit', panelTitle3: 'Objektien tyylit' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ru.js0000664000201500020150000000064315203533231024570 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'ru', { label: 'Стили', panelTitle: 'Стили форматированиÑ', panelTitle1: 'Стили блока', panelTitle2: 'Стили Ñлемента', panelTitle3: 'Стили объекта' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/gl.js0000664000201500020150000000057015203533231024543 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/sr-latn.js0000664000201500020150000000055715203533231025526 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'sr-latn', { label: 'Stil', panelTitle: 'Stilovi formatiranja', panelTitle1: 'Blok stilovi', panelTitle2: 'Inline stilovi', panelTitle3: 'Stilovi objekta' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/oc.js0000664000201500020150000000056715203533231024550 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'oc', { label: 'Estils', panelTitle: 'Estils de mesa en pagina', panelTitle1: 'Estils de blòt', panelTitle2: 'Estils en linha', panelTitle3: 'Estils d\'objècte' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/sq.js0000664000201500020150000000056515203533231024570 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'sq', { label: 'Stilet', panelTitle: 'Formatimi i Stileve', panelTitle1: 'Stilet e Bllokut', panelTitle2: 'Stilet e Brendshme', panelTitle3: 'Stilet e Objektit' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/pt-br.js0000664000201500020150000000060215203533231025161 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/fo.js0000664000201500020150000000056015203533231024544 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/af.js0000664000201500020150000000053215203533231024525 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'af', { label: 'Styl', panelTitle: 'Vormaat style', panelTitle1: 'Blok style', panelTitle2: 'Inlyn style', panelTitle3: 'Objek style' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/hi.js0000664000201500020150000000063615203533231024544 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'hi', { label: 'सà¥à¤Ÿà¤¾à¤‡à¤²', panelTitle: 'Formatting Styles', // MISSING panelTitle1: 'Block Styles', // MISSING panelTitle2: 'Inline Styles', // MISSING panelTitle3: 'Object Styles' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/km.js0000664000201500020150000000074615203533231024555 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'km', { label: 'រចនាបáž', panelTitle: 'ទ្រង់ទ្រាយ​រចនាបáž', panelTitle1: 'រចនាបážâ€‹áž”្លក់', panelTitle2: 'រចនាបážâ€‹áž€áŸ’នុង​ជួរ', panelTitle3: 'រចនាបážâ€‹ážœážáŸ’ážáž»' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/nl.js0000664000201500020150000000054315203533231024552 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'nl', { label: 'Stijl', panelTitle: 'Opmaakstijlen', panelTitle1: 'Blok stijlen', panelTitle2: 'Inline stijlen', panelTitle3: 'Object stijlen' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ka.js0000664000201500020150000000077415203533231024542 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'ka', { label: 'სტილები', panelTitle: 'ფáƒáƒ áƒ›áƒáƒ¢áƒ˜áƒ áƒ”ბის სტილები', panelTitle1: 'áƒáƒ áƒ˜áƒ¡ სტილები', panelTitle2: 'თáƒáƒœáƒ“áƒáƒ áƒ—ული სტილები', panelTitle3: 'áƒáƒ‘იექტის სტილები' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/es-mx.js0000664000201500020150000000057315203533231025175 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'es-mx', { label: 'Estilos', panelTitle: 'Estilos de formatos', panelTitle1: 'Estilos de bloques', panelTitle2: 'Estilos de líneas', panelTitle3: 'Estilo de objetos' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/mn.js0000664000201500020150000000064115203533231024552 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'mn', { label: 'Загвар', panelTitle: 'Загвар Ñ…ÑлбÑржүүлÑÑ…', panelTitle1: 'Block Styles', // MISSING panelTitle2: 'Inline Styles', // MISSING panelTitle3: 'Object Styles' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/da.js0000664000201500020150000000057215203533231024527 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'da', { label: 'Typografi', panelTitle: 'Formatering pÃ¥ stylesheet', panelTitle1: 'Blok typografi', panelTitle2: 'Inline typografi', panelTitle3: 'Objekt typografi' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/he.js0000664000201500020150000000062515203533231024536 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'he', { label: 'סגנון', panelTitle: 'סגנונות פורמט', panelTitle1: 'סגנונות בלוק', panelTitle2: 'סגנונות רצף', panelTitle3: 'סגנונות ×ובייקט' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ca.js0000664000201500020150000000055615203533231024530 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'ca', { label: 'Estil', panelTitle: 'Estils de format', panelTitle1: 'Estils de bloc', panelTitle2: 'Estils incrustats', panelTitle3: 'Estils d\'objecte' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/gu.js0000664000201500020150000000064315203533231024555 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'gu', { label: 'શૈલી/રીત', panelTitle: 'ફોરà«àª®à«‡àªŸ ', panelTitle1: 'બà«àª²à«‹àª• ', panelTitle2: 'ઈનલાઈન ', panelTitle3: 'ઓબà«àªœà«‡àª•à«àªŸ પદà«àª§àª¤àª¿' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ms.js0000664000201500020150000000062115203533231024555 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/th.js0000664000201500020150000000063615203533231024557 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'th', { label: 'ลัà¸à¸©à¸“ะ', panelTitle: 'Formatting Styles', // MISSING panelTitle1: 'Block Styles', // MISSING panelTitle2: 'Inline Styles', // MISSING panelTitle3: 'Object Styles' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/de.js0000664000201500020150000000054215203533231024530 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'de', { label: 'Stil', panelTitle: 'Formatierungsstile', panelTitle1: 'Blockstile', panelTitle2: 'Inline Stilart', panelTitle3: 'Objektstile' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/en-ca.js0000664000201500020150000000056415203533231025127 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'en-ca', { label: 'Styles', panelTitle: 'Formatting Styles', // MISSING panelTitle1: 'Block Styles', panelTitle2: 'Inline Styles', panelTitle3: 'Object Styles' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/tt.js0000664000201500020150000000067515203533231024576 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'tt', { label: 'Стильләр', panelTitle: 'Форматлау Ñтильләре', panelTitle1: 'Блоклар Ñтильләре', panelTitle2: 'Эчке Ñтильләр', panelTitle3: 'Объектлар Ñтильләре' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/vi.js0000664000201500020150000000060015203533231024551 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/cs.js0000664000201500020150000000055615203533231024552 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'cs', { label: 'Styl', panelTitle: 'Formátovací styly', panelTitle1: 'Blokové styly', panelTitle2: 'Řádkové styly', panelTitle3: 'Objektové styly' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/tr.js0000664000201500020150000000055515203533231024571 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'tr', { label: 'Biçem', panelTitle: 'Stilleri Düzenliyor', panelTitle1: 'Blok Stilleri', panelTitle2: 'Inline Stilleri', panelTitle3: 'Nesne Stilleri' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ja.js0000664000201500020150000000062215203533231024531 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'ja', { label: 'スタイル', panelTitle: 'スタイル', panelTitle1: 'ブロックスタイル', panelTitle2: 'インラインスタイル', panelTitle3: 'オブジェクトスタイル' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/sl.js0000664000201500020150000000055115203533231024556 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'sl', { label: 'Slog', panelTitle: 'Oblikovalni Stili', panelTitle1: 'Slogi odstavkov', panelTitle2: 'Slogi besedila', panelTitle3: 'Slogi objektov' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/lv.js0000664000201500020150000000055215203533231024562 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'lv', { label: 'Stils', panelTitle: 'Formatēšanas stili', panelTitle1: 'Bloka stili', panelTitle2: 'iekļautie stili', panelTitle3: 'Objekta stili' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/en-au.js0000664000201500020150000000055115203533231025145 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'en-au', { label: 'Styles', panelTitle: 'Formatting Styles', panelTitle1: 'Block Styles', panelTitle2: 'Inline Styles', panelTitle3: 'Object Styles' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/en.js0000664000201500020150000000054615203533231024546 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'en', { label: 'Styles', panelTitle: 'Formatting Styles', panelTitle1: 'Block Styles', panelTitle2: 'Inline Styles', panelTitle3: 'Object Styles' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/no.js0000664000201500020150000000053415203533231024555 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'no', { label: 'Stil', panelTitle: 'Stilformater', panelTitle1: 'Blokkstiler', panelTitle2: 'Inlinestiler', panelTitle3: 'Objektstiler' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/fr.js0000664000201500020150000000056215203533231024551 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'fr', { label: 'Styles', panelTitle: 'Styles de mise en forme', panelTitle1: 'Styles de bloc', panelTitle2: 'Styles en ligne', panelTitle3: 'Styles d\'objet' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/id.js0000664000201500020150000000062015203533231024531 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ug.js0000664000201500020150000000075615203533231024562 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'ug', { label: 'ئۇسلۇب', panelTitle: 'ئۇسلۇب', panelTitle1: 'بۆلەك دەرىجىسىدىكى ئÛÙ„ÛÙ…Ûنت ئۇسلۇبى', panelTitle2: 'ئىچكى باغلانما ئÛÙ„ÛÙ…Ûنت ئۇسلۇبى', panelTitle3: 'Ù†Û•Ú­ (Object) ئÛÙ„ÛÙ…Ûنت ئۇسلۇبى' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ar.js0000664000201500020150000000061715203533231024545 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'ar', { label: 'أنماط', panelTitle: 'أنماط التنسيق', panelTitle1: 'أنماط الÙقرة', panelTitle2: 'أنماط مضمنة', panelTitle3: 'أنماط الكائن' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/sr.js0000664000201500020150000000064515203533231024570 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'sr', { label: 'Стил', panelTitle: 'Стилови форматирања', panelTitle1: 'Блок Ñтилови', panelTitle2: 'Инлине Ñтилови', panelTitle3: 'Стилови објекта' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/eu.js0000664000201500020150000000055715203533231024557 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'eu', { label: 'Estiloak', panelTitle: 'Formatu estiloak', panelTitle1: 'Bloke estiloak', panelTitle2: 'Lineako estiloak', panelTitle3: 'Objektu estiloak' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/en-gb.js0000664000201500020150000000055115203533231025130 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'en-gb', { label: 'Styles', panelTitle: 'Formatting Styles', panelTitle1: 'Block Styles', panelTitle2: 'Inline Styles', panelTitle3: 'Object Styles' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/stylescombo/lang/hu.js0000664000201500020150000000056615203533231024562 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/indent/0000755000201500020150000000000015203533227021601 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/plugin.js0000775000201500020150000003730015203533227023445 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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,az,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,es-mx,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,oc,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-5.0.10/devel/third-party/ckeditor-src/plugins/indent/dev/0000755000201500020150000000000015203533227022357 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/dev/indent.html0000664000201500020150000001325615203533227024537 0ustar puckpuck Indent DEV sample

Indent DEV sample

List & Block

Indent classes

List only

Block only

CKEDITOR.ENTER_BR

rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/0000755000201500020150000000000015203533227022522 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/zh.js0000664000201500020150000000040415203533227023501 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'zh', { indent: '增加縮排', outdent: '減少縮排' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/nb.js0000664000201500020150000000040615203533227023461 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'nb', { indent: 'Øk innrykk', outdent: 'Reduser innrykk' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/eo.js0000664000201500020150000000044115203533227023464 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'eo', { indent: 'Pligrandigi KrommarÄenon', outdent: 'Malpligrandigi KrommarÄenon' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/es.js0000664000201500020150000000041715203533227023473 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'es', { indent: 'Aumentar Sangría', outdent: 'Disminuir Sangría' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/ro.js0000664000201500020150000000041615203533227023503 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'ro', { indent: 'CreÅŸte indentarea', outdent: 'Scade indentarea' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/hr.js0000664000201500020150000000041115203533227023467 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'hr', { indent: 'Pomakni udesno', outdent: 'Pomakni ulijevo' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/it.js0000664000201500020150000000041115203533227023472 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'it', { indent: 'Aumenta rientro', outdent: 'Riduci rientro' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/de-ch.js0000664000201500020150000000042415203533227024042 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'de-ch', { indent: 'Einzug vergrössern', outdent: 'Einzug verkleinern' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/sk.js0000664000201500020150000000042415203533227023477 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'sk', { indent: 'ZväÄÅ¡iÅ¥ odsadenie', outdent: 'ZmenÅ¡iÅ¥ odsadenie' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/az.js0000664000201500020150000000042115203533227023471 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'az', { indent: 'Sol boÅŸluqu artır', outdent: 'Sol boÅŸluqu azalt' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/pt.js0000664000201500020150000000041415203533227023504 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'pt', { indent: 'Aumentar avanço', outdent: 'Diminuir avanço' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/si.js0000664000201500020150000000052315203533227023475 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'si', { indent: 'à¶…à¶­à¶» පරතරය à·€à·à¶©à·’කරන්න', outdent: 'à¶…à¶­à¶» පරතරය අඩුකරන්න' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/ko.js0000664000201500020150000000040415203533227023471 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'ko', { indent: '들여쓰기', outdent: '내어쓰기' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/mk.js0000664000201500020150000000044015203533227023467 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'mk', { indent: 'Increase Indent', // MISSING outdent: 'Decrease Indent' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/cy.js0000664000201500020150000000042415203533227023475 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'cy', { indent: 'Cynyddu\'r Mewnoliad', outdent: 'Lleihau\'r Mewnoliad' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/uk.js0000664000201500020150000000045415203533227023504 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'uk', { indent: 'Збільшити відÑтуп', outdent: 'Зменшити відÑтуп' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/zh-cn.js0000664000201500020150000000041515203533227024101 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'zh-cn', { indent: '增加缩进é‡', outdent: 'å‡å°‘缩进é‡' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/sv.js0000664000201500020150000000040415203533227023510 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'sv', { indent: 'Öka indrag', outdent: 'Minska indrag' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/lt.js0000664000201500020150000000042315203533227023500 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'lt', { indent: 'Padidinti įtraukÄ…', outdent: 'Sumažinti įtraukÄ…' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/is.js0000664000201500020150000000041215203533227023472 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'is', { indent: 'Minnka inndrátt', outdent: 'Auka inndrátt' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/fr-ca.js0000664000201500020150000000042615203533227024054 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'fr-ca', { indent: 'Augmenter le retrait', outdent: 'Diminuer le retrait' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/et.js0000664000201500020150000000042215203533227023470 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'et', { indent: 'Taande suurendamine', outdent: 'Taande vähendamine' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/bs.js0000664000201500020150000000040415203533227023464 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'bs', { indent: 'Poveæaj uvod', outdent: 'Smanji uvod' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/pl.js0000664000201500020150000000041615203533227023476 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'pl', { indent: 'ZwiÄ™ksz wciÄ™cie', outdent: 'Zmniejsz wciÄ™cie' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/bg.js0000664000201500020150000000047615203533227023461 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'bg', { indent: 'Увеличаване на отÑтъпа', outdent: 'ÐамалÑване на отÑтъпа' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/fa.js0000664000201500020150000000043615203533227023453 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'fa', { indent: 'Ø§ÙØ²Ø§ÛŒØ´ ØªÙˆØ±ÙØªÚ¯ÛŒ', outdent: 'کاهش ØªÙˆØ±ÙØªÚ¯ÛŒ' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/ku.js0000664000201500020150000000045615203533227023506 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'ku', { indent: 'زیادکردنی بۆشایی', outdent: 'کەمکردنەوەی بۆشایی' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/bn.js0000664000201500020150000000046315203533227023464 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'bn', { indent: 'ইনডেনà§à¦Ÿ বাড়াই', outdent: 'ইনডেনà§à¦Ÿ কমাও' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/el.js0000664000201500020150000000043615203533227023465 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'el', { indent: 'ΑÏξηση Εσοχής', outdent: 'Μείωση Εσοχής' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/fi.js0000664000201500020150000000042515203533227023461 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'fi', { indent: 'Suurenna sisennystä', outdent: 'Pienennä sisennystä' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/ru.js0000664000201500020150000000045215203533227023511 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'ru', { indent: 'Увеличить отÑтуп', outdent: 'Уменьшить отÑтуп' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/gl.js0000664000201500020150000000042115203533227023461 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'gl', { indent: 'Aumentar a sangría', outdent: 'Reducir a sangría' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/sr-latn.js0000664000201500020150000000041615203533227024443 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'sr-latn', { indent: 'Uvećaj marginu', outdent: 'Smanji marginu' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/oc.js0000664000201500020150000000042015203533227023457 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'oc', { indent: 'Aumentar l\'alinèa', outdent: 'Dmesir l\'alinèa' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/sq.js0000664000201500020150000000041115203533227023501 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'sq', { indent: 'Rrite Identin', outdent: 'Zvogëlo Identin' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/pt-br.js0000664000201500020150000000041315203533227024104 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'pt-br', { indent: 'Aumentar Recuo', outdent: 'Diminuir Recuo' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/fo.js0000664000201500020150000000043415203533227023467 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'fo', { indent: 'Økja reglubrotarinntriv', outdent: 'Minka reglubrotarinntriv' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/af.js0000664000201500020150000000041615203533227023451 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'af', { indent: 'Vergroot inspring', outdent: 'Verklein inspring' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/hi.js0000664000201500020150000000050315203533227023460 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'hi', { indent: 'इनà¥à¤¡à¥…नà¥à¤Ÿ बà¥à¤¾à¤¯à¥‡à¤‚', outdent: 'इनà¥à¤¡à¥…नà¥à¤Ÿ कम करें' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/km.js0000664000201500020150000000053315203533227023472 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'km', { indent: 'បន្ážáŸ‚មការចូលបន្ទាážáŸ‹', outdent: 'បន្ážáž™áž€áž¶ážšáž…ូលបន្ទាážáŸ‹' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/nl.js0000664000201500020150000000042715203533227023476 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'nl', { indent: 'Inspringing vergroten', outdent: 'Inspringing verkleinen' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/ka.js0000664000201500020150000000047115203533227023457 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'ka', { indent: 'მეტáƒáƒ“ შეწევáƒ', outdent: 'ნáƒáƒ™áƒšáƒ”ბáƒáƒ“ შეწევáƒ' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/es-mx.js0000664000201500020150000000042715203533227024116 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'es-mx', { indent: 'Incrementar sangría', outdent: 'Decrementar sangría' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/mn.js0000664000201500020150000000044415203533227023476 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'mn', { indent: 'Догол мөр хаÑах', outdent: 'Догол мөр нÑмÑÑ…' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/da.js0000664000201500020150000000042115203533227023443 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'da', { indent: 'Forøg indrykning', outdent: 'Formindsk indrykning' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/he.js0000664000201500020150000000042215203533227023454 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'he', { indent: 'הגדלת ×”×–×—×”', outdent: 'הקטנת ×”×–×—×”' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/ca.js0000664000201500020150000000041715203533227023447 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'ca', { indent: 'Augmenta el sagnat', outdent: 'Redueix el sagnat' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/gu.js0000664000201500020150000000066515203533227023504 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'gu', { indent: 'ઇનà«àª¡à«‡àª¨à«àªŸ, લીટીના આરંભમાં જગà«àª¯àª¾ વધારવી', outdent: 'ઇનà«àª¡à«‡àª¨à«àªŸ લીટીના આરંભમાં જગà«àª¯àª¾ ઘટાડવી' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/ms.js0000664000201500020150000000041215203533227023476 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'ms', { indent: 'Tambahkan Inden', outdent: 'Kurangkan Inden' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/th.js0000664000201500020150000000050315203533227023473 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'th', { indent: 'เพิ่มระยะย่อหน้า', outdent: 'ลดระยะย่อหน้า' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/de.js0000664000201500020150000000042115203533227023447 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'de', { indent: 'Einzug vergrößern', outdent: 'Einzug verkleinern' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/en-ca.js0000664000201500020150000000041515203533227024045 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'en-ca', { indent: 'Increase Indent', outdent: 'Decrease Indent' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/tt.js0000664000201500020150000000045615203533227023516 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'tt', { indent: 'ОтÑтупны арттыру', outdent: 'ОтÑтупны кечерәйтү' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/vi.js0000664000201500020150000000041515203533227023500 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'vi', { indent: 'Dịch vào trong', outdent: 'Dịch ra ngoài' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/cs.js0000664000201500020150000000042115203533227023464 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'cs', { indent: 'ZvÄ›tÅ¡it odsazení', outdent: 'ZmenÅ¡it odsazení' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/tr.js0000664000201500020150000000040415203533227023505 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'tr', { indent: 'Sekme Arttır', outdent: 'Sekme Azalt' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/ja.js0000664000201500020150000000042015203533227023450 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'ja', { indent: 'インデント', outdent: 'インデント解除' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/sl.js0000664000201500020150000000041115203533227023474 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'sl', { indent: 'PoveÄaj zamik', outdent: 'ZmanjÅ¡aj zamik' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/lv.js0000664000201500020150000000042115203533227023500 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'lv', { indent: 'PalielinÄt atkÄpi', outdent: 'SamazinÄt atkÄpi' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/en-au.js0000664000201500020150000000041515203533227024067 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'en-au', { indent: 'Increase Indent', outdent: 'Decrease Indent' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/en.js0000664000201500020150000000041215203533227023461 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'en', { indent: 'Increase Indent', outdent: 'Decrease Indent' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/no.js0000664000201500020150000000040615203533227023476 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'no', { indent: 'Øk innrykk', outdent: 'Reduser innrykk' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/fr.js0000664000201500020150000000042315203533227023470 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'fr', { indent: 'Augmenter le retrait', outdent: 'Diminuer le retrait' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/id.js0000664000201500020150000000041115203533227023452 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'id', { indent: 'Tingkatkan Lekuk', outdent: 'Kurangi Lekuk' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/ug.js0000664000201500020150000000040415203533227023473 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'ug', { indent: 'تارايت', outdent: 'كەڭەيت' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/ar.js0000664000201500020150000000047415203533227023471 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'ar', { indent: 'زيادة Ø§Ù„Ù…Ø³Ø§ÙØ© البادئة', outdent: 'إنقاص Ø§Ù„Ù…Ø³Ø§ÙØ© البادئة' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/sr.js0000664000201500020150000000045115203533227023506 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'sr', { indent: 'Увећај леву маргину', outdent: 'Смањи маргину' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/eu.js0000664000201500020150000000040615203533227023473 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'eu', { indent: 'Handitu koska', outdent: 'Txikitu koska' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/en-gb.js0000664000201500020150000000041515203533227024052 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'en-gb', { indent: 'Increase Indent', outdent: 'Decrease Indent' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/lang/hu.js0000664000201500020150000000042715203533227023501 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'hu', { indent: 'Behúzás növelése', outdent: 'Behúzás csökkentése' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/icons/0000755000201500020150000000000015153141500022705 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/icons/hidpi/0000755000201500020150000000000015153141500024002 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/icons/hidpi/indent.png0000664000201500020150000000175115153141500025777 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎíIDATXíWMnÔ0þž¥ª £V] Svˆ#t‡Äª?ꊮ(G€+°ç pº›nzĶ7@ìf©#U0ý¯ý±¿ÈIŒ3ôIVìØïù{ÿ‰ ‘jk’ˆÀSñxœ*&ùd)¨>ô¤–ñdôâ¾D'ûûûõ ‘Ú³)\D>“ü2›Íd0T笵I ª¸ù?Àp8|MιäËCê ´€I\]]]“„޾иH5nî90ÆØe/¯Ð|Ö Hžàd2Ñý1IžŸŸW,$!"œsÇ"BIãìì $Û]`Œ©iåœë´T–e57„¼á;oooׄÚûÃïDD¶¶¶à5= ›››*ˆ^˜ñç0Ï*!):Ÿ‹–Ú€¨ByL«.6÷—-<ÛÏ÷ööÌó7´DsðÞøóê›cï½µÔjŸµV²,{$/o ŽD{­(Å,Ðä AÄøÔü"Ò„Ãç@z‰1Æ…1à(ô}3ò<T+:³ :`ÌËétú'Ïó···¡IÙÆ{׿R`´å°µöÜßß-ŠâúââBÍg|¼„1\TÓ·‹Åò;¦é¢:P³€'‰ ’¿½+>ÝÝÝ­®¯¯« ÊÐ: 9æ~¬¬¬¬<÷‘1“Ñh4 ù­( 4GûF¨m£…Çc <ÃÛ²,ÿê:¬$‘e™óU½€$›1uss±0 B û1¦ö\më ÎîînëÅ«ÀOçÜ›‡‡‡EQ”)¼º¶…1‹ôÌp8Œú;EV§ Dä$èx‘1æþT-„$ʲ¬ê@[-ñBjãòò²@› ÈZ Áh4Šî§Ö•®^ðNDS y¨ ­œÞÚâ:ë@³7¬­­õ·@HÖZmÇٲ߃K¹@)˲g~ºÚVŒž@ãÃõ»ˆ`:þ PûR2ô… Œ1œžž&È“O. ð÷¼ýx;8.¿ ã¼%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/icons/hidpi/indent-rtl.png0000664000201500020150000000136515153141500026577 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎùIDATXÃÝWKn1 µC¥h€Ø´—@À¡ºì@B\‚ âíÐt1y]0AžŒÏ©R-E’Ø~~vœÀT)Ûív4ÇÌ£¹ÝnWdÏÕx´ü&ëòf³Qhy5ÖÀÌ'ï5Ž÷ûý”Ã\ÄÞ¦2ð4UQ‚¨ËŸ¡dà3€\d˜û{]Èõ`€jlÀ3œ¸¶*]:'"òÞöhslµØQK@,÷`ñ”ÜY×À”è›n$i¿{òÞÇ,˜NÃÜz½¾H5 )³Ùlç8})[Nn@ÞûðÍt«‹ÁèsÌR§ëº‘ÓëõJDô•KŸÚdõ[Z€‹ÅsÓ4ðÞ¿äö» ÔŸß¢!κVtŸ—Ë¥•˜Rú.—£ [ZMh{e ¸t`í.èç>–Ëe㜼çX­¡€©6RŒÏ矶m™ˆ¾sl¦Q.',›Oè~ù|N^5°²nœ÷žÂÈ{é@c ãXOcIe PÜ+²æ îrÚ=ÑuÝ€ò€¡Ãá`§ ¦;^ݦ¨ï ”Œ(\qŠsôÀ8²[þ°¢) GÌz7Ô°¡¾4ª­5eg~Û ÔHI?(@mAe)0õ3“sî4•‰ê³³Z­ŠÇ:)5lþ; ¢²©›°%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/icons/hidpi/outdent.png0000664000201500020150000000136215153141500026176 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎöIDATXÃÕVËnÂ@ /q@ÜÛßi¾— ýþ@NìöÐ8uïf“‚P-Ed_öx<ñB(´Óé4™‹1Næ.—K©K€[´û öXô¯1â—ãñø;I4ú5Åİi ¨‡1°–_L²ñ(úÿÄÀÓÄ£¨ó0ÖÌÈáÂg €ˆ†‡Ç]ׂ…FAµHcŒ€'@å:›?ŸÏ!àv»iˆôHª½_š[7Ís`çB“Œä;™L‰2ÇÖ „`*\+?¨9ªú Y |i:  ^ãó:Aé×ñ?MÓ fRå}@0FøÑ ÓϧD–ˆõVUõ±ÛíbN49v,•Ëä,“ð«mÛ7á<Å€NÑvHš0°Ô¤`™Þ¥}@xßn·µ8@‰'E)õ2§Ü»ô3a mÛϦi(§¹ÚKqÎÕ¼¶ßïYÑÅ%à¡¢Cƒ"«‘yÞ`e§ë)ÁZάº[~dÇõι¼h5‹v±g–5«®ª*l6Üïwt]g9NZйÒà#Ô‡ÃAà†DÜÔ­ù–Tëfp£ddþ’ÍÝŽÌ€dK )@rÝËIÈPíÄ›º9IÑ5#@¢®¹ –´aéu+^Ú¬RöòÅEêº.Úw½^x9ßáÕf­á%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/icons/hidpi/outdent-rtl.png0000664000201500020150000000134215153141500026773 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎæIDATXÃÝWíi1 ÕsŽ6#´K´K’±ºU!Kd‰v„´¿þèùmùë(*8ÈÉ’üô$ùÈ ‡L ÓÇ®xnÀoËÿ@rµ/öû½Īka®$_G6>N1µ [“|YËÀ´ÖQƒŸÊŸ7¡f`I €le†ÀD°Ÿ}©×C\’f°ˆÑæ$—À¥N×›‹ˆxï3K·ø‡)H¥g*fÎk°ìu+‰î&lͺ*AoH!Yn¹–æ£êœQ¬KVc1¬M=F¸è}³ÙD ôï# ±÷>ü†üÔ5z ttð¹ßïÅfU¥y¯HJÙ×z¡æã½Þn·mç‚A­æRé”âJ!)ÛíöSDÞ­9oeš²êo_(¯=†ÝóSk\„C!Ö‰ˆÐ9'ιGïýWT‚ÚFÖSÔè’Л§ d> "  ¢0ÊÏÖHNéÌZF­Seô2}ª›Re„4 Pʸ¾¢zX5Oué=ßÍy(9éìC· pŽ$ndt>ŸstX²wÎE Ò{Ãȱxô¹†¾Ö΃1ŒÞr[·ž.kÿçÜu-ÃúÝn×ðr¹Œ1ð›2Âæ7:#©5_eò%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/icons/indent.png0000664000201500020150000000075115153141500024701 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ðØIDAT8Ë•RIƒ0 ôX—óŽþÁ{á#í7rÌÜCjœ€Š%Kx›É ï{Ò úff@9g‘Cɘnйu]›µ À Ê<Ï$"ÍáSÝ<Žã-ù6îÝÛ¶•¸ò#9€/q°ùÖö1€Šy—Ë´/Ëò{¡ð3¥dsÐÞuÝΉSv½÷’s†sŽl][Œl7x¥”ôpuAñBóÞû¿9pö}Klˆ<…ƒ–”+´. ¥ P這osp8š¦3m|Ð…À0 —ošÎxÜK…ñL%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/icons/indent-rtl.png0000664000201500020150000000066615153141500025505 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ð¥IDAT8ËÍ’Á Ã0 n¢ yÿÚò)ØOܤªâøY‚™¦)Jj­`›’8‹# Ì€Fõ…ë°íSIËàÕ÷Þ‚cJŠ ç—‚‰‰e؉’Ø~Md“‘´Øf3K€¢qëº<"aoÁû‘¤Öú²]V]b& nÀ3àæ=¨µÜ£ÉK((SÁöìÁé*ç>ZëÂuh38½|Qe`áB2%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/icons/outdent.png0000664000201500020150000000063515153141500025103 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ðŒIDAT8Ë¥“Q !Dè»{uÿ›t÷§6W¦DVˆ(Êy‰Þ»ØPUÉDñþ%pâЊJa戀5n–Ãz¬ËûzJXDDÆ‘apãëAkM'2•›‹DéFðž)“àjÔ$°c?aUÁ×Þ™WÁ(åþy+S<ЯœéȨ™Â¦x”@2 éßµÿ%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/indent/icons/outdent-rtl.png0000664000201500020150000000070215153141500025675 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ð±IDAT8Ë“Ë Ã Dç!Ÿè!¹ÿ’8zrñƘ¶<B e磅u]%I¶4B]'IéNÑì~Ñ5l{(i™¼ºÑû°àvm7»€Ÿ‚?‰Ô; ”Ò" u¤@um¤šq IÌ‚“ô.¥œBt¥n8lÙVÎÙ¶ ´«UP«>¥€gHzåœO"ušs¶ƒðùØÖ¶mÏç j†£\ÿÈ™¤k~{ø“Moá¢ßpÑ%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/autocomplete/0000775000201500020150000000000015203533226023022 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/autocomplete/plugin.js0000664000201500020150000015163715203533226024673 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ 'use strict'; ( function() { CKEDITOR.plugins.add( 'autocomplete', { requires: 'textwatcher', onLoad: function() { CKEDITOR.document.appendStyleSheet( this.path + 'skins/default.css' ); }, isSupportedEnvironment: function() { return !CKEDITOR.env.ie || CKEDITOR.env.version > 8; } } ); /** * The main class implementing a generic [Autocomplete](https://ckeditor.com/cke4/addon/autocomplete) feature in the editor. * It acts as a controller that works with the {@link CKEDITOR.plugins.autocomplete.model model} and * {@link CKEDITOR.plugins.autocomplete.view view} classes. * * It is possible to maintain multiple autocomplete instances for a single editor at a time. * In order to create an autocomplete instance use its {@link #constructor constructor}. * * @class CKEDITOR.plugins.autocomplete * @since 4.10.0 * @constructor Creates a new instance of autocomplete and attaches it to the editor. * * In order to initialize the autocomplete feature it is enough to instantiate this class with * two required callbacks: * * * {@link CKEDITOR.plugins.autocomplete.configDefinition#textTestCallback config.textTestCallback} – A function being called by * the {@link CKEDITOR.plugins.textWatcher text watcher} plugin, as new text is being inserted. * Its purpose is to determine whether a given range should be matched or not. * See {@link CKEDITOR.plugins.textWatcher#constructor} for more details. * There is also {@link CKEDITOR.plugins.textMatch#match} which is a handy helper for that purpose. * * {@link CKEDITOR.plugins.autocomplete.configDefinition#dataCallback config.dataCallback} – A function that should return * (through its callback) suggestion data for the current query string. * * # Creating an autocomplete instance * * Depending on your use case, put this code in the {@link CKEDITOR.pluginDefinition#init} callback of your * plugin or, for example, in the {@link CKEDITOR.editor#instanceReady} event listener. Ensure that you loaded the * {@link CKEDITOR.plugins.textMatch Text Match} plugin. * * ```javascript * var itemsArray = [ { id: 1, name: '@Andrew' }, { id: 2, name: '@Kate' } ]; * * // Called when the user types in the editor or moves the caret. * // The range represents the caret position. * function textTestCallback( range ) { * // You do not want to autocomplete a non-empty selection. * if ( !range.collapsed ) { * return null; * } * * // Use the text match plugin which does the tricky job of doing * // a text search in the DOM. The matchCallback function should return * // a matching fragment of the text. * return CKEDITOR.plugins.textMatch.match( range, matchCallback ); * } * * // Returns the position of the matching text. * // It matches with a word starting from the '@' character * // up to the caret position. * function matchCallback( text, offset ) { * // Get the text before the caret. * var left = text.slice( 0, offset ), * // Will look for an '@' character followed by word characters. * match = left.match( /@\w*$/ ); * * if ( !match ) { * return null; * } * * return { start: match.index, end: offset }; * } * * // Returns (through its callback) the suggestions for the current query. * function dataCallback( matchInfo, callback ) { * // Simple search. * // Filter the entire items array so only the items that start * // with the query remain. * var suggestions = itemsArray.filter( function( item ) { * return item.name.toLowerCase().indexOf( matchInfo.query.toLowerCase() ) == 0; * } ); * * // Note: The callback function can also be executed asynchronously * // so dataCallback can do XHR requests or use any other asynchronous API. * callback( suggestions ); * } * * // Finally, instantiate the autocomplete class. * new CKEDITOR.plugins.autocomplete( editor, { * textTestCallback: textTestCallback, * dataCallback: dataCallback * } ); * ``` * * # Changing the behavior of the autocomplete class by subclassing it * * This plugin will expose a `CKEDITOR.plugins.customAutocomplete` class which uses * a custom view that positions the panel relative to the {@link CKEDITOR.editor#container}. * * ```javascript * CKEDITOR.plugins.add( 'customautocomplete', { * requires: 'autocomplete', * * onLoad: function() { * var View = CKEDITOR.plugins.autocomplete.view, * Autocomplete = CKEDITOR.plugins.autocomplete; * * function CustomView( editor ) { * // Call the parent class constructor. * View.call( this, editor ); * } * // Inherit the view methods. * CustomView.prototype = CKEDITOR.tools.prototypedCopy( View.prototype ); * * // Change the positioning of the panel, so it is stretched * // to 100% of the editor container width and is positioned * // relative to the editor container. * CustomView.prototype.updatePosition = function( range ) { * var caretRect = this.getViewPosition( range ), * container = this.editor.container; * * this.setPosition( { * // Position the panel relative to the editor container. * left: container.$.offsetLeft, * top: caretRect.top, * bottom: caretRect.bottom * } ); * // Stretch the panel to 100% of the editor container width. * this.element.setStyle( 'width', container.getSize( 'width' ) + 'px' ); * }; * * function CustomAutocomplete( editor, configDefinition ) { * // Call the parent class constructor. * Autocomplete.call( this, editor, configDefinition ); * } * // Inherit the autocomplete methods. * CustomAutocomplete.prototype = CKEDITOR.tools.prototypedCopy( Autocomplete.prototype ); * * CustomAutocomplete.prototype.getView = function() { * return new CustomView( this.editor ); * } * * // Expose the custom autocomplete so it can be used later. * CKEDITOR.plugins.customAutocomplete = CustomAutocomplete; * } * } ); * ``` * @param {CKEDITOR.editor} editor The editor to watch. * @param {CKEDITOR.plugins.autocomplete.configDefinition} config Configuration object for this autocomplete instance. */ function Autocomplete( editor, config ) { var configKeystrokes = editor.config.autocomplete_commitKeystrokes || CKEDITOR.config.autocomplete_commitKeystrokes; /** * The editor instance that autocomplete is attached to. * * @readonly * @property {CKEDITOR.editor} */ this.editor = editor; /** * Indicates throttle threshold expressed in milliseconds, reducing text checks frequency. * * @property {Number} [throttle=20] */ this.throttle = config.throttle !== undefined ? config.throttle : 20; /** * Indicates if a following space should be added after inserted match into an editor. * * @since 4.20.0 * @readonly * @property {Boolean} [followingSpace] */ this.followingSpace = config.followingSpace; /** * The autocomplete view instance. * * @readonly * @property {CKEDITOR.plugins.autocomplete.view} */ this.view = this.getView(); /** * The autocomplete model instance. * * @readonly * @property {CKEDITOR.plugins.autocomplete.model} */ this.model = this.getModel( config.dataCallback ); this.model.itemsLimit = config.itemsLimit; /** * The autocomplete text watcher instance. * * @readonly * @property {CKEDITOR.plugins.textWatcher} */ this.textWatcher = this.getTextWatcher( config.textTestCallback ); /** * The autocomplete keystrokes used to finish autocompletion with the selected view item. * The property is using the {@link CKEDITOR.config#autocomplete_commitKeystrokes} configuration option as default keystrokes. * You can change this property to set individual keystrokes for the plugin instance. * * @property {Number[]} * @readonly */ this.commitKeystrokes = CKEDITOR.tools.array.isArray( configKeystrokes ) ? configKeystrokes.slice() : [ configKeystrokes ]; /** * Listeners registered by this autocomplete instance. * * @private */ this._listeners = []; /** * Template of markup to be inserted as the autocomplete item gets committed. * * You can use {@link CKEDITOR.plugins.autocomplete.model.item item} properties to customize the template. * * ```javascript * var outputTemplate = `#{ticket} ({name})`; * ``` * * @readonly * @property {CKEDITOR.template} [outputTemplate=null] */ this.outputTemplate = config.outputTemplate !== undefined ? new CKEDITOR.template( config.outputTemplate ) : null; if ( config.itemTemplate ) { this.view.itemTemplate = new CKEDITOR.template( config.itemTemplate ); } // Attach autocomplete when editor instance is ready (#2114). if ( this.editor.status === 'ready' ) { this.attach(); } else { this.editor.on( 'instanceReady', function() { this.attach(); }, this ); } editor.on( 'destroy', function() { this.destroy(); }, this ); } Autocomplete.prototype = { /** * Attaches the autocomplete to the {@link #editor}. * * * The view is appended to the DOM and the listeners are attached. * * The {@link #textWatcher text watcher} is attached to the editor. * * The listeners on the {@link #model} and {@link #view} events are added. */ attach: function() { var editor = this.editor, win = CKEDITOR.document.getWindow(), editable = editor.editable(), editorScrollableElement = editable.isInline() ? editable : editable.getDocument(); // iOS classic editor listens on frame parent element for editor `scroll` event (#1910). if ( CKEDITOR.env.iOS && !editable.isInline() ) { editorScrollableElement = iOSViewportElement( editor ); } this.view.append(); this.view.attach(); this.textWatcher.attach(); this._listeners.push( this.textWatcher.on( 'matched', this.onTextMatched, this ) ); this._listeners.push( this.textWatcher.on( 'unmatched', this.onTextUnmatched, this ) ); this._listeners.push( this.model.on( 'change-data', this.modelChangeListener, this ) ); this._listeners.push( this.model.on( 'change-selectedItemId', this.onSelectedItemId, this ) ); this._listeners.push( this.view.on( 'change-selectedItemId', this.onSelectedItemId, this ) ); this._listeners.push( this.view.on( 'click-item', this.onItemClick, this ) ); // (#4617) this._listeners.push( this.model.on( 'change-isActive', this.updateAriaAttributesOnEditable, this ) ); // Update view position on viewport change. // Note: CKEditor's event system has a limitation that one function // cannot be used as listener for the same event more than once. Hence, wrapper functions. this._listeners.push( win.on( 'scroll', function() { this.viewRepositionListener(); }, this ) ); this._listeners.push( editorScrollableElement.on( 'scroll', function() { this.viewRepositionListener(); }, this ) ); // Don't let browser to focus dropdown element (#2107). this._listeners.push( this.view.element.on( 'mousedown', function( e ) { e.data.preventDefault(); }, null, null, 9999 ) ); // Register keybindings and add ARIA attributes to the editable right away // if editor is already initialized. if ( editable ) { this.registerPanelNavigation(); this.addAriaAttributesToEditable(); } // Note: CKEditor's event system has a limitation that one function // cannot be used as listener for the same event more than once. Hence, wrapper function. // (#4107) editor.on( 'contentDom', function() { this.registerPanelNavigation(); this.addAriaAttributesToEditable(); }, this ); }, registerPanelNavigation: function() { var editable = this.editor.editable(); // Priority 5 to get before the enterkey. // Note: CKEditor's event system has a limitation that one function (in this case this.onKeyDown) // cannot be used as listener for the same event more than once. Hence, wrapper function. this._listeners.push( editable.attachListener( editable, 'keydown', function( evt ) { this.onKeyDown( evt ); }, this, null, 5 ) ); }, /** * @since 4.16.1 */ addAriaAttributesToEditable: function() { var editable = this.editor.editable(), autocompleteId = this.view.element.getAttribute( 'id' ); if ( !editable.isInline() ) { return; } editable.setAttribute( 'aria-controls', autocompleteId ); editable.setAttribute( 'aria-activedescendant', '' ); editable.setAttribute( 'aria-autocomplete', 'list' ); editable.setAttribute( 'aria-expanded', 'false' ); }, /** * @since 4.16.1 */ updateAriaAttributesOnEditable: function( evt ) { var editable = this.editor.editable(), isActive = evt.data; if ( !editable || !editable.isInline() ) { return; } editable.setAttribute( 'aria-expanded', isActive ? 'true' : 'false' ); if ( !isActive ) { editable.setAttribute( 'aria-activedescendant', '' ); } }, /** * @since 4.16.1 */ updateAriaActiveDescendantAttributeOnEditable: function( id ) { var editable = this.editor.editable(); if ( !editable.isInline() ) { return; } editable.setAttribute( 'aria-activedescendant', id ); }, /** * @since 4.16.1 */ removeAriaAttributesFromEditable: function() { var editable = this.editor.editable(); if ( !editable || !editable.isInline() ) { return; } editable.removeAttributes( [ 'aria-controls', 'aria-expanded', 'aria-activedescendant' ] ); editable.setAttribute( 'aria-autocomplete', 'none' ); }, /** * Closes the view and sets its {@link CKEDITOR.plugins.autocomplete.model#isActive state} to inactive. */ close: function() { this.model.setActive( false ); this.view.close(); }, /** * Commits the currently chosen or given item. HTML is generated for this item using the * {@link #getHtmlToInsert} method and then it is inserted into the editor. The item is inserted * into the {@link CKEDITOR.plugins.autocomplete.model#range query's range}, so the query text is * replaced by the inserted HTML. * * @param {Number/String} [itemId] If given, then the specified item will be inserted into the editor * instead of the currently chosen one. */ commit: function( itemId ) { if ( !this.model.isActive ) { return; } this.close(); if ( itemId == null ) { itemId = this.model.selectedItemId; // If non item is selected abort commit. if ( itemId == null ) { return; } } var item = this.model.getItemById( itemId ), editor = this.editor, html = this.getHtmlToInsert( item ); // Insert space after accepting match (#2008). html += this.followingSpace ? ' ' : ''; editor.fire( 'saveSnapshot' ); editor.getSelection().selectRanges( [ this.model.range ] ); editor.insertHtml( html, 'text' ); if ( this.followingSpace ) { removeLeadingSpace( editor ); } editor.fire( 'saveSnapshot' ); }, /** * Destroys the autocomplete instance. * View element and event listeners will be removed from the DOM. */ destroy: function() { CKEDITOR.tools.array.forEach( this._listeners, function( obj ) { obj.removeListener(); } ); this._listeners = []; this.view.element && this.view.element.remove(); this.removeAriaAttributesFromEditable(); }, /** * Returns HTML that should be inserted into the editor when the item is committed. * * See also the {@link #commit} method. * * @param {CKEDITOR.plugins.autocomplete.model.item} item * @returns {String} The HTML to insert. */ getHtmlToInsert: function( item ) { var encodedItem = encodeItem( item ); return this.outputTemplate ? this.outputTemplate.output( encodedItem ) : encodedItem.name; }, /** * Creates and returns the model instance. This method is used when * initializing the autocomplete and can be overwritten in order to * return an instance of a different class than the default model. * * @param {Function} dataCallback See {@link CKEDITOR.plugins.autocomplete.configDefinition#dataCallback configDefinition.dataCallback}. * @returns {CKEDITOR.plugins.autocomplete.model} The model instance. */ getModel: function( dataCallback ) { var that = this; return new Model( function( matchInfo, callback ) { return dataCallback.call( this, CKEDITOR.tools.extend( { // Make sure autocomplete instance is available in the callback (#2108). autocomplete: that }, matchInfo ), callback ); } ); }, /** * Creates and returns the text watcher instance. This method is used while * initializing the autocomplete and can be overwritten in order to * return an instance of a different class than the default text watcher. * * @param {Function} textTestCallback See the {@link CKEDITOR.plugins.autocomplete} arguments. * @returns {CKEDITOR.plugins.textWatcher} The text watcher instance. */ getTextWatcher: function( textTestCallback ) { return new CKEDITOR.plugins.textWatcher( this.editor, textTestCallback, this.throttle ); }, /** * Creates and returns the view instance. This method is used while * initializing the autocomplete and can be overwritten in order to * return an instance of a different class than the default view. * * @returns {CKEDITOR.plugins.autocomplete.view} The view instance. */ getView: function() { return new View( this.editor ); }, /** * Opens the panel if {@link CKEDITOR.plugins.autocomplete.model#hasData there is any data available}. */ open: function() { if ( this.model.hasData() ) { this.model.setActive( true ); this.view.open(); this.model.selectFirst(); this.view.updatePosition( this.model.range ); } }, // LISTENERS ------------------ /** * The function that should be called when the view has to be repositioned, e.g on scroll. * * @private */ viewRepositionListener: function() { if ( this.model.isActive ) { this.view.updatePosition( this.model.range ); } }, /** * The function that should be called once the model data has changed. * * @param {CKEDITOR.eventInfo} evt * @private */ modelChangeListener: function( evt ) { if ( this.model.hasData() ) { this.view.updateItems( evt.data ); this.open(); } else { this.close(); } }, /** * The function that should be called once a view item was clicked. * * @param {CKEDITOR.eventInfo} evt * @private */ onItemClick: function( evt ) { this.commit( evt.data ); }, /** * The function that should be called on every `keydown` event occurred within the {@link CKEDITOR.editable editable} element. * * @param {CKEDITOR.dom.event} evt * @private */ onKeyDown: function( evt ) { if ( !this.model.isActive ) { return; } var keyCode = evt.data.getKey(), handled = false; // Esc key. if ( keyCode == 27 ) { this.close(); this.textWatcher.unmatch(); handled = true; // Down Arrow. } else if ( keyCode == 40 ) { this.model.selectNext(); handled = true; // Up Arrow. } else if ( keyCode == 38 ) { this.model.selectPrevious(); handled = true; // Completion keys. } else if ( CKEDITOR.tools.indexOf( this.commitKeystrokes, keyCode ) != -1 ) { this.commit(); this.textWatcher.unmatch(); handled = true; } if ( handled ) { evt.cancel(); evt.data.preventDefault(); this.textWatcher.consumeNext(); } }, /** * The function that should be called once an item was selected. * * @param {CKEDITOR.eventInfo} evt * @private */ onSelectedItemId: function( evt ) { var itemId = evt.data, selectedItem = this.view.getItemById( itemId ); this.model.setItem( itemId ); this.view.selectItem( itemId ); this.updateAriaActiveDescendantAttributeOnEditable( selectedItem.getAttribute( 'id' ) ); }, /** * The function that should be called once a text was matched by the {@link CKEDITOR.plugins.textWatcher text watcher} * component. * * @param {CKEDITOR.eventInfo} evt * @private */ onTextMatched: function( evt ) { this.model.setActive( false ); this.model.setQuery( evt.data.text, evt.data.range ); }, /** * The function that should be called once a text was unmatched by the {@link CKEDITOR.plugins.textWatcher text watcher} * component. * * @param {CKEDITOR.eventInfo} evt * @private */ onTextUnmatched: function() { // Remove query and request ID to avoid opening view for invalid callback (#1984). this.model.query = null; this.model.lastRequestId = null; this.close(); } }; /** * Class representing the autocomplete view. * * In order to use a different view, implement a new view class and override * the {@link CKEDITOR.plugins.autocomplete#getView} method. * * ```javascript * myAutocomplete.prototype.getView = function() { * return new myView( this.editor ); * }; * ``` * * You can also modify this autocomplete instance on the fly. * * ```javascript * myAutocomplete.prototype.getView = function() { * // Call the original getView method. * var view = CKEDITOR.plugins.autocomplete.prototype.getView.call( this ); * * // Override one property. * view.itemTemplate = new CKEDITOR.template( '
  • ... {name}
  • ' ); * * return view; * }; * ``` * * **Note:** This class is marked as private, which means that its API might be subject to change in order to * provide further enhancements. * * @class CKEDITOR.plugins.autocomplete.view * @since 4.10.0 * @private * @mixins CKEDITOR.event * @constructor Creates the autocomplete view instance. * @param {CKEDITOR.editor} editor The editor instance. */ function View( editor ) { /** * The panel's item template used to render matches in the dropdown. * * You can use {@link CKEDITOR.plugins.autocomplete.model#data data item} properties to customize the template. * * A minimal template must be wrapped with a HTML `li` element containing the `data-id="{id}"` attribute. * * ```javascript * var itemTemplate = '
  • {name}{name}
  • '; * ``` * * @readonly * @property {CKEDITOR.template} */ this.itemTemplate = new CKEDITOR.template( '
  • {name}
  • ' ); /** * The editor instance. * * @readonly * @property {CKEDITOR.editor} */ this.editor = editor; /** * The ID of the selected item. * * @readonly * @property {Number/String} selectedItemId */ /** * The document to which the view is attached. It is set by the {@link #append} method. * * @readonly * @property {CKEDITOR.dom.document} document */ /** * The view's main element. It is set by the {@link #append} method. * * @readonly * @property {CKEDITOR.dom.element} element */ /** * Event fired when an item in the panel is clicked. * * @event click-item * @param {String} The clicked item {@link CKEDITOR.plugins.autocomplete.model.item#id}. Note: the ID * is stringified due to the way how it is stored in the DOM. */ /** * Event fired when the {@link #selectedItemId} property changes. * * @event change-selectedItemId * @param {Number/String} data The new value. */ } View.prototype = { /** * Appends the {@link #element main element} to the DOM. */ append: function() { this.document = CKEDITOR.document; this.element = this.createElement(); this.document.getBody().append( this.element ); }, /** * Removes existing items and appends given items to the {@link #element}. * * @param {CKEDITOR.dom.documentFragment} itemsFragment The document fragment with item elements. */ appendItems: function( itemsFragment ) { this.element.setHtml( '' ); this.element.append( itemsFragment ); }, /** * Attaches the view's listeners to the DOM elements. */ attach: function() { this.element.on( 'click', function( evt ) { var target = evt.data.getTarget(), itemElement = target.getAscendant( this.isItemElement, true ); if ( itemElement ) { this.fire( 'click-item', itemElement.data( 'id' ) ); } }, this ); this.element.on( 'mouseover', function( evt ) { var target = evt.data.getTarget(); if ( this.element.contains( target ) ) { // Find node containing data-id attribute inside target node tree (#2187). target = target.getAscendant( function( element ) { return element.hasAttribute( 'data-id' ); }, true ); if ( !target ) { return; } var itemId = target.data( 'id' ); this.fire( 'change-selectedItemId', itemId ); } }, this ); }, /** * Closes the panel. */ close: function() { this.element.removeClass( 'cke_autocomplete_opened' ); }, /** * Creates and returns the view's main element. * * @private * @returns {CKEDITOR.dom.element} */ createElement: function() { var el = new CKEDITOR.dom.element( 'ul', this.document ), id = CKEDITOR.tools.getNextId(); // Id is needed to correctly bind autocomplete with the editable (#4617). el.setAttribute( 'id', id ); el.addClass( 'cke_autocomplete_panel' ); // Below float panels and context menu, but above maximized editor (-5). el.setStyle( 'z-index', this.editor.config.baseFloatZIndex - 3 ); // Add also appropriate role (#4617). el.setAttribute( 'role', 'listbox' ); return el; }, /** * Creates the item element based on the {@link #itemTemplate}. * * @param {CKEDITOR.plugins.autocomplete.model.item} item The item for which an element will be created. * @returns {CKEDITOR.dom.element} */ createItem: function( item ) { var encodedItem = encodeItem( item ), itemElement = CKEDITOR.dom.element.createFromHtml( this.itemTemplate.output( encodedItem ), this.document ), id = CKEDITOR.tools.getNextId(); // Add attributes needed for a11y support (#4617). itemElement.setAttribute( 'id', id ); itemElement.setAttribute( 'role', 'option' ); return itemElement; }, /** * Returns the view position based on a given `range`. * * Indicates the start position of the autocomplete dropdown. * The value returned by this function is passed to the {@link #setPosition} method * by the {@link #updatePosition} method. * * @param {CKEDITOR.dom.range} range The range of the text match. * @returns {Object} Represents the position of the caret. The value is relative to the panel's offset parent. * @returns {Number} rect.left * @returns {Number} rect.top * @returns {Number} rect.bottom */ getViewPosition: function( range ) { // Use the last rect so the view will be // correctly positioned with a word split into few lines. var rects = range.getClientRects(), viewPositionRect = rects[ rects.length - 1 ], offset, editable = this.editor.editable(); if ( editable.isInline() ) { offset = CKEDITOR.document.getWindow().getScrollPosition(); } else { offset = editable.getParent().getDocumentPosition( CKEDITOR.document ); } // Consider that offset host might be repositioned on its own. // Similar to #1048. See https://github.com/ckeditor/ckeditor4/pull/1732#discussion_r182790235. var hostElement = CKEDITOR.document.getBody(); if ( hostElement.getComputedStyle( 'position' ) === 'static' ) { hostElement = hostElement.getParent(); } var offsetCorrection = hostElement.getDocumentPosition(); offset.x -= offsetCorrection.x; offset.y -= offsetCorrection.y; return { top: ( viewPositionRect.top + offset.y ), bottom: ( viewPositionRect.top + viewPositionRect.height + offset.y ), left: ( viewPositionRect.left + offset.x ) }; }, /** * Gets the item element by the item ID. * * @param {Number/String} itemId * @returns {CKEDITOR.dom.element} The item element. */ getItemById: function( itemId ) { return this.element.findOne( 'li[data-id="' + itemId + '"]' ); }, /** * Checks whether a given node is the item element. * * @param {CKEDITOR.dom.node} node * @returns {Boolean} */ isItemElement: function( node ) { return node.type == CKEDITOR.NODE_ELEMENT && Boolean( node.data( 'id' ) ); }, /** * Opens the panel. */ open: function() { this.element.addClass( 'cke_autocomplete_opened' ); }, /** * Selects the item in the panel and scrolls the list to show it if needed. * The {@link #selectedItemId currently selected item} is deselected first. * * @param {Number/String} itemId The ID of the item that should be selected. */ selectItem: function( itemId ) { if ( this.selectedItemId != null ) { this.getItemById( this.selectedItemId ).removeClass( 'cke_autocomplete_selected' ); } var itemElement = this.getItemById( itemId ); itemElement.addClass( 'cke_autocomplete_selected' ); this.selectedItemId = itemId; this.scrollElementTo( itemElement ); }, /** * Sets the position of the panel. This method only performs the check * for the available space below and above the specified `rect` and * positions the panel in the best place. * * This method is used by the {@link #updatePosition} method which * controls how the panel should be positioned on the screen, for example * based on the caret position and/or the editor position. * * @param {Object} rect Represents the position of a vertical (e.g. a caret) line relative to which * the panel should be positioned. * @param {Number} rect.left The position relative to the panel's offset parent in pixels. * For example, the position of the caret. * @param {Number} rect.top The position relative to the panel's offset parent in pixels. * For example, the position of the upper end of the caret. * @param {Number} rect.bottom The position relative to the panel's offset parent in pixels. * For example, the position of the bottom end of the caret. */ setPosition: function( rect ) { var documentWindow = this.element.getWindow(), windowRect = documentWindow.getViewPaneSize(), top = getVerticalPosition( { editorViewportRect: getEditorViewportRect( this.editor ), caretRect: rect, viewHeight: this.element.getSize( 'height' ), scrollPositionY: documentWindow.getScrollPosition().y, windowHeight: windowRect.height } ), left = getHorizontalPosition( { leftPosition: rect.left, viewWidth: this.element.getSize( 'width' ), windowWidth: windowRect.width } ); this.element.setStyles( { left: left + 'px', top: top + 'px' } ); function getVerticalPosition( options ) { var editorViewportRect = options.editorViewportRect, caretRect = options.caretRect, viewHeight = options.viewHeight, scrollPositionY = options.scrollPositionY, windowHeight = options.windowHeight; // If the caret position is below the view - keep it at the bottom edge. // +---------------------------------------------+ // | editor viewport | // | | // | +--------------+ | // | | | | // | | view | | // | | | | // +-----+==============+------------------------+ // | | // | â–ˆ - caret position | // | | // +---------------------------------------------+ if ( editorViewportRect.bottom < caretRect.bottom ) { return Math.min( caretRect.top, editorViewportRect.bottom ) - viewHeight; } // If the view doesn't fit below the caret position and fits above, set it there. // This means that the position below the caret is preferred. // +---------------------------------------------+ // | | // | editor viewport | // | +--------------+ | // | | | | // | | view | | // | | | | // | +--------------+ | // | â–ˆ - caret position | // | | // | | // +---------------------------------------------+ // How much space is there for the view above and below the specified rect. var spaceAbove = caretRect.top - editorViewportRect.top, spaceBelow = editorViewportRect.bottom - caretRect.bottom, viewExceedsTopViewport = ( caretRect.top - viewHeight ) < scrollPositionY; if ( viewHeight > spaceBelow && viewHeight < spaceAbove && !viewExceedsTopViewport ) { return caretRect.top - viewHeight; } // If the caret position is above the view - keep it at the top edge. // +---------------------------------------------+ // | | // | â–ˆ - caret position | // | | // +-----+==============+------------------------+ // | | | | // | | view | | // | | | | // | +--------------+ | // | | // | editor viewport | // +---------------------------------------------+ if ( editorViewportRect.top > caretRect.top ) { return Math.max( caretRect.bottom, editorViewportRect.top ); } // (#3582) // If the view goes beyond bottom window border - reverse view position, even if it fits editor viewport. // +---------------------------------------------+ // | editor viewport | // | | // | | // | +--------------+ | // | | view | | // | +--------------+ | // | caret position - â–ˆ | // | | // =============================================== - bottom window border // | | // | | // +---------------------------------------------+ var viewExceedsBottomViewport = ( caretRect.bottom + viewHeight ) > ( windowHeight + scrollPositionY ); if ( !( viewHeight > spaceBelow && viewHeight < spaceAbove ) && viewExceedsBottomViewport ) { return caretRect.top - viewHeight; } // As a default, keep the view inside the editor viewport. // +---------------------------------------------+ // | editor viewport | // | | // | | // | | // | â–ˆ - caret position | // | +--------------+ | // | | view | | // | +--------------+ | // | | // | | // +---------------------------------------------+ return Math.min( editorViewportRect.bottom, caretRect.bottom ); } function getHorizontalPosition( options ) { var caretLeftPosition = options.leftPosition, viewWidth = options.viewWidth, windowWidth = options.windowWidth; // (#3582) // If the view goes beyond right window border - stick it to the edge of the available viewport. // +---------------------------------------------+ || // | editor viewport | || // | | || // | | || // | caret position - â–ˆ | || - right window border // | +--------------+|| // | | ||| // | | view ||| // | | ||| // | +--------------+|| // | | || // +---------------------------------------------+ || if ( caretLeftPosition + viewWidth > windowWidth ) { return windowWidth - viewWidth; } // Otherwise inherit the horizontal position from caret. return caretLeftPosition; } // Bounding rect where the view should fit (visible editor viewport). function getEditorViewportRect( editor ) { var editable = editor.editable(); // iOS classic editor has different viewport element (#1910). if ( CKEDITOR.env.iOS && !editable.isInline() ) { return iOSViewportElement( editor ).getClientRect( true ); } else { return editable.isInline() ? editable.getClientRect( true ) : editor.window.getFrame().getClientRect( true ); } } }, /** * Scrolls the list so the item element is visible in it. * * @param {CKEDITOR.dom.element} itemElement */ scrollElementTo: function( itemElement ) { itemElement.scrollIntoParent( this.element ); }, /** * Updates the list of items in the panel. * * @param {CKEDITOR.plugins.autocomplete.model.item[]} items. */ updateItems: function( items ) { var i, frag = new CKEDITOR.dom.documentFragment( this.document ); for ( i = 0; i < items.length; ++i ) { frag.append( this.createItem( items[ i ] ) ); } this.appendItems( frag ); this.selectedItemId = null; }, /** * Updates the position of the panel. * * By default this method finds the position of the caret and uses * {@link #setPosition} to move the panel to the best position close * to the caret. * * @param {CKEDITOR.dom.range} range The range of the text match. */ updatePosition: function( range ) { this.setPosition( this.getViewPosition( range ) ); } }; CKEDITOR.event.implementOn( View.prototype ); /** * Class representing the autocomplete model. * * In case you want to modify the model behavior, check out the * {@link CKEDITOR.plugins.autocomplete.view} documentation. It contains * examples of how to easily override the default behavior. * * A model instance is created by the {@link CKEDITOR.plugins.autocomplete#getModel} method. * * **Note:** This class is marked as private, which means that its API might be subject to change in order to * provide further enhancements. * * @class CKEDITOR.plugins.autocomplete.model * @since 4.10.0 * @private * @mixins CKEDITOR.event * @constructor Creates the autocomplete model instance. * @param {Function} dataCallback See {@link CKEDITOR.plugins.autocomplete} arguments. */ function Model( dataCallback ) { /** * The callback executed by the model when requesting data. * See {@link CKEDITOR.plugins.autocomplete} arguments. * * @readonly * @property {Function} */ this.dataCallback = dataCallback; /** * Whether the autocomplete is active (i.e. can receive user input like click, key press). * Should be modified by the {@link #setActive} method which fires the {@link #change-isActive} event. * * @readonly */ this.isActive = false; /** * Indicates the limit of items rendered in the dropdown. * * For falsy values like `0` or `null` all items will be rendered. * * @property {Number} [itemsLimit=0] */ this.itemsLimit = 0; /** * The ID of the last request for data. Used by the {@link #setQuery} method. * * @readonly * @private * @property {Number} lastRequestId */ /** * The query string set by the {@link #setQuery} method. * * The query string always has a corresponding {@link #range}. * * @readonly * @property {String} query */ /** * The range in the DOM where the {@link #query} text is. * * The range always has a corresponding {@link #query}. Both can be set by the {@link #setQuery} method. * * @readonly * @property {CKEDITOR.dom.range} range */ /** * The query results — the items to be displayed in the autocomplete panel. * * @readonly * @property {CKEDITOR.plugins.autocomplete.model.item[]} data */ /** * The ID of the item currently selected in the panel. * * @readonly * @property {Number/String} selectedItemId */ /** * Event fired when the {@link #data} array changes. * * @event change-data * @param {CKEDITOR.plugins.autocomplete.model.item[]} data The new value. */ /** * Event fired when the {@link #selectedItemId} property changes. * * @event change-selectedItemId * @param {Number/String} data The new value. */ /** * Event fired when the {@link #isActive} property changes. * * @event change-isActive * @param {Boolean} data The new value. */ } Model.prototype = { /** * Gets an index from the {@link #data} array of the item by its ID. * * @param {Number/String} itemId * @returns {Number} */ getIndexById: function( itemId ) { if ( !this.hasData() ) { return -1; } for ( var data = this.data, i = 0, l = data.length; i < l; i++ ) { if ( data[ i ].id == itemId ) { return i; } } return -1; }, /** * Gets the item from the {@link #data} array by its ID. * * @param {Number/String} itemId * @returns {CKEDITOR.plugins.autocomplete.model.item} */ getItemById: function( itemId ) { var index = this.getIndexById( itemId ); return ~index && this.data[ index ] || null; }, /** * Whether the model contains non-empty {@link #data}. * * @returns {Boolean} */ hasData: function() { return Boolean( this.data && this.data.length ); }, /** * Sets the {@link #selectedItemId} property. * * @param {Number/String} itemId */ setItem: function( itemId ) { if ( this.getIndexById( itemId ) < 0 ) { throw new Error( 'Item with given id does not exist' ); } this.selectedItemId = itemId; }, /** * Fires the {@link #change-selectedItemId} event. * * @param {Number/String} itemId */ select: function( itemId ) { this.fire( 'change-selectedItemId', itemId ); }, /** * Selects the first item. See also the {@link #select} method. */ selectFirst: function() { if ( this.hasData() ) { this.select( this.data[ 0 ].id ); } }, /** * Selects the last item. See also the {@link #select} method. */ selectLast: function() { if ( this.hasData() ) { this.select( this.data[ this.data.length - 1 ].id ); } }, /** * Selects the next item in the {@link #data} array. If no item is selected, * it selects the first one. If the last one is selected, it selects the first one. * * See also the {@link #select} method. */ selectNext: function() { if ( this.selectedItemId == null ) { this.selectFirst(); return; } var index = this.getIndexById( this.selectedItemId ); if ( index < 0 || index + 1 == this.data.length ) { this.selectFirst(); } else { this.select( this.data[ index + 1 ].id ); } }, /** * Selects the previous item in the {@link #data} array. If no item is selected, * it selects the last one. If the first one is selected, it selects the last one. * * See also the {@link #select} method. */ selectPrevious: function() { if ( this.selectedItemId == null ) { this.selectLast(); return; } var index = this.getIndexById( this.selectedItemId ); if ( index <= 0 ) { this.selectLast(); } else { this.select( this.data[ index - 1 ].id ); } }, /** * Sets the {@link #isActive} property and fires the {@link #change-isActive} event. * * @param {Boolean} isActive */ setActive: function( isActive ) { this.isActive = isActive; this.fire( 'change-isActive', isActive ); }, /** * Sets the {@link #query} and {@link #range} and makes a request for the query results * by executing the {@link #dataCallback} function. When the data is returned (synchronously or * asynchronously, because {@link #dataCallback} exposes a callback function), the {@link #data} * property is set and the {@link #change-data} event is fired. * * This method controls that only the response for the current query is handled. * * @param {String} query * @param {CKEDITOR.dom.range} range */ setQuery: function( query, range ) { var that = this, requestId = CKEDITOR.tools.getNextId(); this.lastRequestId = requestId; this.query = query; this.range = range; this.data = null; this.selectedItemId = null; this.dataCallback( { query: query, range: range }, handleData ); // Note: don't put any executable code here because the callback passed to // this.dataCallback may be executed synchronously or asynchronously // so execution order will differ. function handleData( data ) { // Handle only the response for the most recent setQuery call. if ( requestId == that.lastRequestId ) { // Limit number of items (#2030). if ( that.itemsLimit ) { that.data = data.slice( 0, that.itemsLimit ); } else { that.data = data; } that.fire( 'change-data', that.data ); } } } }; CKEDITOR.event.implementOn( Model.prototype ); /** * An abstract class representing one {@link CKEDITOR.plugins.autocomplete.model#data data item}. * A item can be understood as one entry in the autocomplete panel. * * An item must have a unique {@link #id} and may have more properties which can then be used, for example, * in the {@link CKEDITOR.plugins.autocomplete.view#itemTemplate} template or the * {@link CKEDITOR.plugins.autocomplete#getHtmlToInsert} method. * * Example items: * * ```javascript * { id: 345, name: 'CKEditor' } * { id: 'smile1', alt: 'smile', emojiSrc: 'emojis/smile.png' } * ``` * * @abstract * @class CKEDITOR.plugins.autocomplete.model.item * @since 4.10.0 */ /** * The unique ID of the item. The ID should not change with time, so two * {@link CKEDITOR.plugins.autocomplete.model#dataCallback} * calls should always result in the same ID for the same logical item. * This can, for example, allow to keep the same item selected when * the data changes. * * **Note:** When using a string as an item, make sure that the string does not * contain any special characters (above all `"[]` characters). This limitation is * due to the simplified way the {@link CKEDITOR.plugins.autocomplete.view} * stores IDs in the DOM. * * @readonly * @property {Number/String} id */ CKEDITOR.plugins.autocomplete = Autocomplete; Autocomplete.view = View; Autocomplete.model = Model; /** * The autocomplete keystrokes used to finish autocompletion with the selected view item. * This setting will set completing keystrokes for each autocomplete plugin respectively. * * To change completing keystrokes individually use the {@link CKEDITOR.plugins.autocomplete#commitKeystrokes} plugin property. * * ```javascript * // Default configuration (9 = Tab, 13 = Enter). * config.autocomplete_commitKeystrokes = [ 9, 13 ]; * ``` * * Commit keystroke can also be disabled by setting it to an empty array. * * ```javascript * // Disable autocomplete commit keystroke. * config.autocomplete_commitKeystrokes = []; * ``` * * @since 4.10.0 * @cfg {Number/Number[]} [autocomplete_commitKeystrokes=[9, 13]] * @member CKEDITOR.config */ CKEDITOR.config.autocomplete_commitKeystrokes = [ 9, 13 ]; // Viewport on iOS is moved into iframe parent element because of https://bugs.webkit.org/show_bug.cgi?id=149264 issue. // Once upstream issue is resolved this function should be removed and its concurrences should be refactored to // follow the default code path. function iOSViewportElement( editor ) { return editor.window.getFrame().getParent(); } function encodeItem( item ) { return CKEDITOR.tools.array.reduce( CKEDITOR.tools.object.keys( item ), function( cur, key ) { cur[ key ] = CKEDITOR.tools.htmlEncode( item[ key ] ); return cur; }, {} ); } function removeLeadingSpace( editor ) { var selection = editor.getSelection(), nextNode = selection.getRanges()[ 0 ].getNextNode( function( node ) { return Boolean( node.type == CKEDITOR.NODE_TEXT && node.getText() ); } ); if ( nextNode && nextNode.getText().match( /^\s+/ ) ) { var range = editor.createRange(); range.setStart( nextNode, 0 ); range.setEnd( nextNode, 1 ); range.deleteContents(); } } /** * Abstract class describing the definition of the [Autocomplete](https://ckeditor.com/cke4/addon/autocomplete) plugin configuration. * * It lists properties used to define and create autocomplete configuration definition. * * Simple usage: * * ```javascript * var definition = { * dataCallback: dataCallback, * textTestCallback: textTestCallback, * throttle: 200 * }; * ``` * * @class CKEDITOR.plugins.autocomplete.configDefinition * @abstract * @since 4.10.0 */ /** * Callback executed to get suggestion data based on the search query. The returned data will be * displayed in the autocomplete view. * * ```javascript * // Returns (through its callback) the suggestions for the current query. * // Note: The itemsArray variable is the example "database". * function dataCallback( matchInfo, callback ) { * // Simple search. * // Filter the entire items array so only the items that start * // with the query remain. * var suggestions = itemsArray.filter( function( item ) { * return item.name.indexOf( matchInfo.query ) === 0; * } ); * * // Note: The callback function can also be executed asynchronously * // so dataCallback can do an XHR request or use any other asynchronous API. * callback( suggestions ); * } * * ``` * * @method dataCallback * @param {CKEDITOR.plugins.autocomplete.matchInfo} matchInfo * @param {Function} callback The callback which should be executed with the matched data. * @param {CKEDITOR.plugins.autocomplete.model.item[]} callback.data The suggestion data that should be * displayed in the autocomplete view for a given query. The data items should implement the * {@link CKEDITOR.plugins.autocomplete.model.item} interface. */ /** * Callback executed to check if a text next to the selection should open * the autocomplete. See the {@link CKEDITOR.plugins.textWatcher}'s `callback` argument. * * ```javascript * // Called when the user types in the editor or moves the caret. * // The range represents the caret position. * function textTestCallback( range ) { * // You do not want to autocomplete a non-empty selection. * if ( !range.collapsed ) { * return null; * } * * // Use the text match plugin which does the tricky job of doing * // a text search in the DOM. The matchCallback function should return * // a matching fragment of the text. * return CKEDITOR.plugins.textMatch.match( range, matchCallback ); * } * * // Returns a position of the matching text. * // It matches with a word starting from the '@' character * // up to the caret position. * function matchCallback( text, offset ) { * // Get the text before the caret. * var left = text.slice( 0, offset ), * // Will look for an '@' character followed by word characters. * match = left.match( /@\w*$/ ); * * if ( !match ) { * return null; * } * return { start: match.index, end: offset }; * } * ``` * * @method textTestCallback * @param {CKEDITOR.dom.range} range Range representing the caret position. */ /** * @inheritdoc CKEDITOR.plugins.autocomplete#throttle * @property {Number} [throttle] */ /** * @inheritdoc CKEDITOR.plugins.autocomplete.model#itemsLimit * @property {Number} [itemsLimit] */ /** * @inheritdoc CKEDITOR.plugins.autocomplete.view#itemTemplate * @property {String} [itemTemplate] */ /** * @inheritdoc CKEDITOR.plugins.autocomplete#outputTemplate * @property {String} [outputTemplate] */ /** * @inheritdoc CKEDITOR.plugins.autocomplete#followingSpace * @since 4.20.0 * @property {Boolean} [followingSpace] */ /** * Abstract class describing a set of properties that can be used to produce more adequate suggestion data based on the matched query. * * @class CKEDITOR.plugins.autocomplete.matchInfo * @abstract * @since 4.10.0 */ /** * The query string that was accepted by the * {@link CKEDITOR.plugins.autocomplete.configDefinition#textTestCallback config.textTestCallback}. * * @property {String} query */ /** * The range in the DOM indicating the position of the {@link #query}. * * @property {CKEDITOR.dom.range} range */ /** * The {@link CKEDITOR.plugins.autocomplete Autocomplete} instance that matched the query. * * @property {CKEDITOR.plugins.autocomplete} autocomplete */ } )(); rt-5.0.10/devel/third-party/ckeditor-src/plugins/autocomplete/skins/0000775000201500020150000000000015203533226024151 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/autocomplete/skins/default.css0000664000201500020150000000135515203533226026313 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ .cke_autocomplete_panel { position: absolute; display: none; box-sizing: border-box; width: 200px; max-height: 300px; overflow: auto; padding: 0; margin: 0; list-style: none; background: #FFF; border: 1px solid #b6b6b6; border-bottom-color: #999; border-radius: 3px; font: 12px Arial, Helvetica, Tahoma, Verdana, Sans-Serif; } .cke_autocomplete_opened { display: block; } .cke_autocomplete_panel > li { padding: 5px; } .cke_autocomplete_panel > li:hover { cursor: pointer; } .cke_autocomplete_selected, .cke_autocomplete_panel > li:hover { background-color: #EFF0EF; } rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/0000755000201500020150000000000015203533231021260 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/plugin.js0000664000201500020150000012165015203533231023123 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ /** * @fileOverview Undo/Redo system for saving a snapshot for document modification * and other recordable changes. */ 'use strict'; ( function() { var keystrokes = [ CKEDITOR.CTRL + 90 /*Z*/, CKEDITOR.CTRL + 89 /*Y*/, CKEDITOR.CTRL + CKEDITOR.SHIFT + 90 /*Z*/ ], backspaceOrDelete = { 8: 1, 46: 1 }; CKEDITOR.plugins.add( 'undo', { // jscs:disable maximumLineLength lang: 'af,ar,az,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,es-mx,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,oc,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: 'redo,redo-rtl,undo,undo-rtl', // %REMOVE_LINE_CORE% hidpi: true, // %REMOVE_LINE_CORE% init: function( editor ) { var undoManager = editor.undoManager = new UndoManager( editor ), editingHandler = undoManager.editingHandler = new NativeEditingHandler( undoManager ); var undoCommand = editor.addCommand( 'undo', { exec: function() { if ( undoManager.undo() ) { editor.selectionChange(); this.fire( 'afterUndo' ); } }, startDisabled: true, canUndo: false } ); var redoCommand = editor.addCommand( 'redo', { exec: function() { if ( undoManager.redo() ) { editor.selectionChange(); this.fire( 'afterRedo' ); } }, startDisabled: true, canUndo: false } ); editor.setKeystroke( [ [ keystrokes[ 0 ], 'undo' ], [ keystrokes[ 1 ], 'redo' ], [ keystrokes[ 2 ], 'redo' ] ] ); undoManager.onChange = function() { undoCommand.setState( undoManager.undoable() ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED ); redoCommand.setState( undoManager.redoable() ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED ); }; function recordCommand( event ) { // If the command hasn't been marked to not support undo. if ( undoManager.enabled && event.data.command.canUndo !== false ) undoManager.save(); } // We'll save snapshots before and after executing a command. editor.on( 'beforeCommandExec', recordCommand ); editor.on( 'afterCommandExec', recordCommand ); // Save snapshots before doing custom changes. editor.on( 'saveSnapshot', function( evt ) { undoManager.save( evt.data && evt.data.contentOnly ); } ); // Event manager listeners should be attached on contentDom. editor.on( 'contentDom', editingHandler.attachListeners, editingHandler ); editor.on( 'instanceReady', function() { // Saves initial snapshot. editor.fire( 'saveSnapshot' ); } ); // Always save an undo snapshot - the previous mode might have // changed editor contents. editor.on( 'beforeModeUnload', function() { editor.mode == 'wysiwyg' && undoManager.save( true ); } ); function toggleUndoManager() { undoManager.enabled = editor.readOnly ? false : editor.mode == 'wysiwyg'; undoManager.onChange(); } // Make the undo manager available only in wysiwyg mode. editor.on( 'mode', toggleUndoManager ); // Disable undo manager when in read-only mode. editor.on( 'readOnly', toggleUndoManager ); if ( editor.ui.addButton ) { editor.ui.addButton( 'Undo', { label: editor.lang.undo.undo, command: 'undo', toolbar: 'undo,10' } ); editor.ui.addButton( 'Redo', { label: editor.lang.undo.redo, command: 'redo', toolbar: 'undo,20' } ); } /** * Resets the undo stack. * * @member CKEDITOR.editor */ editor.resetUndo = function() { // Reset the undo stack. undoManager.reset(); // Create the first image. editor.fire( 'saveSnapshot' ); }; /** * Amends the top of the undo stack (last undo image) with the current DOM changes. * * function() { * editor.fire( 'saveSnapshot' ); * editor.document.body.append(...); * // Makes new changes following the last undo snapshot a part of it. * editor.fire( 'updateSnapshot' ); * .. * } * * @event updateSnapshot * @member CKEDITOR.editor * @param {CKEDITOR.editor} editor This editor instance. */ editor.on( 'updateSnapshot', function() { if ( undoManager.currentImage ) undoManager.update(); } ); /** * Locks the undo manager to prevent any save/update operations. * * It is convenient to lock the undo manager before performing DOM operations * that should not be recorded (e.g. auto paragraphing). * * See {@link CKEDITOR.plugins.undo.UndoManager#lock} for more details. * * **Note:** In order to unlock the undo manager, {@link #unlockSnapshot} has to be fired * the same number of times that `lockSnapshot` has been fired. * * @since 4.0.0 * @event lockSnapshot * @member CKEDITOR.editor * @param {CKEDITOR.editor} editor This editor instance. * @param data * @param {Boolean} [data.dontUpdate] When set to `true`, the last snapshot will not be updated * with the current content and selection. Read more in the {@link CKEDITOR.plugins.undo.UndoManager#lock} method. * @param {Boolean} [data.forceUpdate] When set to `true`, the last snapshot will always be updated * with the current content and selection. Read more in the {@link CKEDITOR.plugins.undo.UndoManager#lock} method. */ editor.on( 'lockSnapshot', function( evt ) { var data = evt.data; undoManager.lock( data && data.dontUpdate, data && data.forceUpdate ); } ); /** * Unlocks the undo manager and updates the latest snapshot. * * @since 4.0.0 * @event unlockSnapshot * @member CKEDITOR.editor * @param {CKEDITOR.editor} editor This editor instance. */ editor.on( 'unlockSnapshot', undoManager.unlock, undoManager ); } } ); CKEDITOR.plugins.undo = {}; /** * Main logic for the Redo/Undo feature. * * @private * @class CKEDITOR.plugins.undo.UndoManager * @constructor Creates an UndoManager class instance. * @param {CKEDITOR.editor} editor */ var UndoManager = CKEDITOR.plugins.undo.UndoManager = function( editor ) { /** * An array storing the number of key presses, count in a row. Use {@link #keyGroups} members as index. * * **Note:** The keystroke count will be reset after reaching the limit of characters per snapshot. * * @since 4.4.4 */ this.strokesRecorded = [ 0, 0 ]; /** * When the `locked` property is not `null`, the undo manager is locked, so * operations like `save` or `update` are forbidden. * * The manager can be locked and unlocked by the {@link #lock} and {@link #unlock} * methods, respectively. * * @readonly * @property {Object} [locked=null] */ this.locked = null; /** * Contains the previously processed key group, based on {@link #keyGroups}. * `-1` means an unknown group. * * @since 4.4.4 * @readonly * @property {Number} [previousKeyGroup=-1] */ this.previousKeyGroup = -1; /** * The maximum number of snapshots in the stack. Configurable via {@link CKEDITOR.config#undoStackSize}. * * @readonly * @property {Number} [limit] */ this.limit = editor.config.undoStackSize || 20; /** * The maximum number of characters typed/deleted in one undo step. * * @since 4.4.5 * @readonly */ this.strokesLimit = 25; /** * An array of filter rules. * * @since 4.13.0 * @private * @property {Function[]} */ this._filterRules = []; this.editor = editor; // Reset the undo stack. this.reset(); // In IE, we need to remove the expando attributes. if ( CKEDITOR.env.ie ) { this.addFilterRule( function( data ) { return data.replace( /\s+data-cke-expando=".*?"/g, '' ); } ); } }; UndoManager.prototype = { /** * Handles keystroke support for the undo manager. It is called on the `keyup` event for * keystrokes that can change the editor content. * * @param {Number} keyCode The key code. * @param {Boolean} [strokesPerSnapshotExceeded] When set to `true`, the method will * behave as if the strokes limit was exceeded regardless of the {@link #strokesRecorded} value. */ type: function( keyCode, strokesPerSnapshotExceeded ) { var keyGroup = UndoManager.getKeyGroup( keyCode ), // Count of keystrokes in current a row. // Note if strokesPerSnapshotExceeded will be exceeded, it'll be restarted. strokesRecorded = this.strokesRecorded[ keyGroup ] + 1; strokesPerSnapshotExceeded = ( strokesPerSnapshotExceeded || strokesRecorded >= this.strokesLimit ); if ( !this.typing ) onTypingStart( this ); if ( strokesPerSnapshotExceeded ) { // Reset the count of strokes, so it'll be later assigned to this.strokesRecorded. strokesRecorded = 0; this.editor.fire( 'saveSnapshot' ); } else { // Fire change event. this.editor.fire( 'change' ); } // Store recorded strokes count. this.strokesRecorded[ keyGroup ] = strokesRecorded; // This prop will tell in next iteration what kind of group was processed previously. this.previousKeyGroup = keyGroup; }, /** * Whether the new `keyCode` belongs to a different group than the previous one ({@link #previousKeyGroup}). * * @since 4.4.5 * @param {Number} keyCode * @returns {Boolean} */ keyGroupChanged: function( keyCode ) { return UndoManager.getKeyGroup( keyCode ) != this.previousKeyGroup; }, /** * Resets the undo stack. */ reset: function() { // Stack for all the undo and redo snapshots, they're always created/removed // in consistency. this.snapshots = []; // Current snapshot history index. this.index = -1; this.currentImage = null; this.hasUndo = false; this.hasRedo = false; this.locked = null; this.resetType(); }, /** * Resets all typing variables. * * @see #type */ resetType: function() { this.strokesRecorded = [ 0, 0 ]; this.typing = false; this.previousKeyGroup = -1; }, /** * Refreshes the state of the {@link CKEDITOR.plugins.undo.UndoManager undo manager} * as well as the state of the `undo` and `redo` commands. */ refreshState: function() { // These lines can be handled within onChange() too. this.hasUndo = !!this.getNextImage( true ); this.hasRedo = !!this.getNextImage( false ); // Reset typing this.resetType(); this.onChange(); }, /** * Saves a snapshot of the document image for later retrieval. * * @param {Boolean} onContentOnly If set to `true`, the snapshot will be saved only if the content has changed. * @param {CKEDITOR.plugins.undo.Image} image An optional image to save. If skipped, current editor will be used. * @param {Boolean} [autoFireChange=true] If set to `false`, will not trigger the {@link CKEDITOR.editor#change} event to editor. */ save: function( onContentOnly, image, autoFireChange ) { var editor = this.editor; // Do not change snapshots stack when locked, editor is not ready, // editable is not ready or when editor is in mode difference than 'wysiwyg'. if ( this.locked || editor.status != 'ready' || editor.mode != 'wysiwyg' ) return false; var editable = editor.editable(); if ( !editable || editable.status != 'ready' ) return false; var snapshots = this.snapshots; // Get a content image. if ( !image ) image = new Image( editor ); // Do nothing if it was not possible to retrieve an image. if ( image.contents === false ) return false; // Check if this is a duplicate. In such case, do nothing. if ( this.currentImage ) { if ( image.equalsContent( this.currentImage ) ) { if ( onContentOnly ) return false; if ( image.equalsSelection( this.currentImage ) ) return false; } else if ( autoFireChange !== false ) { editor.fire( 'change' ); } } // Drop future snapshots. snapshots.splice( this.index + 1, snapshots.length - this.index - 1 ); // If we have reached the limit, remove the oldest one. if ( snapshots.length == this.limit ) snapshots.shift(); // Add the new image, updating the current index. this.index = snapshots.push( image ) - 1; this.currentImage = image; if ( autoFireChange !== false ) this.refreshState(); return true; }, /** * Sets editor content/selection to the one stored in `image`. * * @param {CKEDITOR.plugins.undo.Image} image */ restoreImage: function( image ) { // Bring editor focused to restore selection. var editor = this.editor, sel; if ( image.bookmarks ) { editor.focus(); // Retrieve the selection beforehand. (https://dev.ckeditor.com/ticket/8324) sel = editor.getSelection(); } // Start transaction - do not allow any mutations to the // snapshots stack done when selecting bookmarks (much probably // by selectionChange listener). this.locked = { level: 999 }; this.editor.loadSnapshot( image.contents ); if ( image.bookmarks ) sel.selectBookmarks( image.bookmarks ); else if ( CKEDITOR.env.ie ) { // IE BUG: If I don't set the selection to *somewhere* after setting // document contents, then IE would create an empty paragraph at the bottom // the next time the document is modified. var $range = this.editor.document.getBody().$.createTextRange(); $range.collapse( true ); $range.select(); } this.locked = null; this.index = image.index; this.currentImage = this.snapshots[ this.index ]; // Update current image with the actual editor // content, since actually content may differ from // the original snapshot due to dom change. (https://dev.ckeditor.com/ticket/4622) this.update(); this.refreshState(); editor.fire( 'change' ); }, /** * Gets the closest available image. * * @param {Boolean} isUndo If `true`, it will return the previous image. * @returns {CKEDITOR.plugins.undo.Image} Next image or `null`. */ getNextImage: function( isUndo ) { var snapshots = this.snapshots, currentImage = this.currentImage, image, i; if ( currentImage ) { if ( isUndo ) { for ( i = this.index - 1; i >= 0; i-- ) { image = snapshots[ i ]; if ( !currentImage.equalsContent( image ) ) { image.index = i; return image; } } } else { for ( i = this.index + 1; i < snapshots.length; i++ ) { image = snapshots[ i ]; if ( !currentImage.equalsContent( image ) ) { image.index = i; return image; } } } } return null; }, /** * Checks the current redo state. * * @returns {Boolean} Whether the document has a previous state to retrieve. */ redoable: function() { return this.enabled && this.hasRedo; }, /** * Checks the current undo state. * * @returns {Boolean} Whether the document has a future state to restore. */ undoable: function() { return this.enabled && this.hasUndo; }, /** * Performs an undo operation on current index. */ undo: function() { if ( this.undoable() ) { this.save( true ); var image = this.getNextImage( true ); if ( image ) return this.restoreImage( image ), true; } return false; }, /** * Performs a redo operation on current index. */ redo: function() { if ( this.redoable() ) { // Try to save. If no changes have been made, the redo stack // will not change, so it will still be redoable. this.save( true ); // If instead we had changes, we can't redo anymore. if ( this.redoable() ) { var image = this.getNextImage( false ); if ( image ) return this.restoreImage( image ), true; } } return false; }, /** * Updates the last snapshot of the undo stack with the current editor content. * * @param {CKEDITOR.plugins.undo.Image} [newImage] The image which will replace the current one. * If it is not set, it defaults to the image taken from the editor. */ update: function( newImage ) { // Do not change snapshots stack is locked. if ( this.locked ) return; if ( !newImage ) newImage = new Image( this.editor ); var i = this.index, snapshots = this.snapshots; // Find all previous snapshots made for the same content (which differ // only by selection) and replace all of them with the current image. while ( i > 0 && this.currentImage.equalsContent( snapshots[ i - 1 ] ) ) i -= 1; snapshots.splice( i, this.index - i + 1, newImage ); this.index = i; this.currentImage = newImage; }, /** * Amends the last snapshot and changes its selection (only in case when content * is equal between these two). * * @since 4.4.4 * @param {CKEDITOR.plugins.undo.Image} newSnapshot New snapshot with new selection. * @returns {Boolean} Returns `true` if selection was amended. */ updateSelection: function( newSnapshot ) { if ( !this.snapshots.length ) return false; var snapshots = this.snapshots, lastImage = snapshots[ snapshots.length - 1 ]; if ( lastImage.equalsContent( newSnapshot ) ) { if ( !lastImage.equalsSelection( newSnapshot ) ) { snapshots[ snapshots.length - 1 ] = newSnapshot; this.currentImage = newSnapshot; return true; } } return false; }, /** * Locks the snapshot stack to prevent any save/update operations and when necessary, * updates the tip of the snapshot stack with the DOM changes introduced during the * locked period, after the {@link #unlock} method is called. * * It is mainly used to ensure any DOM operations that should not be recorded * (e.g. auto paragraphing) are not added to the stack. * * **Note:** For every `lock` call you must call {@link #unlock} once to unlock the undo manager. * * @since 4.0.0 * @param {Boolean} [dontUpdate] When set to `true`, the last snapshot will not be updated * with current content and selection. By default, if undo manager was up to date when the lock started, * the last snapshot will be updated to the current state when unlocking. This means that all changes * done during the lock will be merged into the previous snapshot or the next one. Use this option to gain * more control over this behavior. For example, it is possible to group changes done during the lock into * a separate snapshot. * @param {Boolean} [forceUpdate] When set to `true`, the last snapshot will always be updated with the * current content and selection regardless of the current state of the undo manager. * When not set, the last snapshot will be updated only if the undo manager was up to date when locking. * Additionally, this option makes it possible to lock the snapshot when the editor is not in the `wysiwyg` mode, * because when it is passed, the snapshots will not need to be compared. */ lock: function( dontUpdate, forceUpdate ) { if ( !this.locked ) { if ( dontUpdate ) this.locked = { level: 1 }; else { var update = null; if ( forceUpdate ) update = true; else { // Make a contents image. Don't include bookmarks, because: // * we don't compare them, // * there's a chance that DOM has been changed since // locked (e.g. fake) selection was made, so createBookmark2 could fail. // https://dev.ckeditor.com/ticket/11027#comment:3 var imageBefore = new Image( this.editor, true ); // If current editor content matches the tip of snapshot stack, // the stack tip must be updated by unlock, to include any changes made // during this period. if ( this.currentImage && this.currentImage.equalsContent( imageBefore ) ) update = imageBefore; } this.locked = { update: update, level: 1 }; } // Increase the level of lock. } else { this.locked.level++; } }, /** * Unlocks the snapshot stack and checks to amend the last snapshot. * * See {@link #lock} for more details. * * @since 4.0.0 */ unlock: function() { if ( this.locked ) { // Decrease level of lock and check if equals 0, what means that undoM is completely unlocked. if ( !--this.locked.level ) { var update = this.locked.update; this.locked = null; // forceUpdate was passed to lock(). if ( update === true ) this.update(); // update is instance of Image. else if ( update ) { var newImage = new Image( this.editor, true ); if ( !update.equalsContent( newImage ) ) this.update(); } } } }, /** * Registers a filtering rule. * * @since 4.13.0 * @param {Function} rule Callback function that returns filtered data. * @param {String} rule.data The data passed to the callback. */ addFilterRule: function( rule ) { this._filterRules.push( rule ); } }; /** * Codes for navigation keys like *Arrows*, *Page Up/Down*, etc. * Used by the {@link #isNavigationKey} method. * * @since 4.4.5 * @readonly * @static */ UndoManager.navigationKeyCodes = { 37: 1, 38: 1, 39: 1, 40: 1, // Arrows. 36: 1, 35: 1, // Home, End. 33: 1, 34: 1 // PgUp, PgDn. }; /** * Key groups identifier mapping. Used for accessing members in * {@link #strokesRecorded}. * * * `FUNCTIONAL` – identifier for the *Backspace* / *Delete* key. * * `PRINTABLE` – identifier for printable keys. * * Example usage: * * undoManager.strokesRecorded[ undoManager.keyGroups.FUNCTIONAL ]; * * @since 4.4.5 * @readonly * @static */ UndoManager.keyGroups = { PRINTABLE: 0, FUNCTIONAL: 1 }; /** * Checks whether a key is one of navigation keys (*Arrows*, *Page Up/Down*, etc.). * See also the {@link #navigationKeyCodes} property. * * @since 4.4.5 * @static * @param {Number} keyCode * @returns {Boolean} */ UndoManager.isNavigationKey = function( keyCode ) { return !!UndoManager.navigationKeyCodes[ keyCode ]; }; /** * Returns the group to which the passed `keyCode` belongs. * * @since 4.4.5 * @static * @param {Number} keyCode * @returns {Number} */ UndoManager.getKeyGroup = function( keyCode ) { var keyGroups = UndoManager.keyGroups; return backspaceOrDelete[ keyCode ] ? keyGroups.FUNCTIONAL : keyGroups.PRINTABLE; }; /** * @since 4.4.5 * @static * @param {Number} keyGroup * @returns {Number} */ UndoManager.getOppositeKeyGroup = function( keyGroup ) { var keyGroups = UndoManager.keyGroups; return ( keyGroup == keyGroups.FUNCTIONAL ? keyGroups.PRINTABLE : keyGroups.FUNCTIONAL ); }; /** * Whether we need to use a workaround for functional (*Backspace*, *Delete*) keys not firing * the `keypress` event in Internet Explorer in this environment and for the specified `keyCode`. * * @since 4.4.5 * @static * @param {Number} keyCode * @returns {Boolean} */ UndoManager.ieFunctionalKeysBug = function( keyCode ) { return CKEDITOR.env.ie && UndoManager.getKeyGroup( keyCode ) == UndoManager.keyGroups.FUNCTIONAL; }; // Helper method called when undoManager.typing val was changed to true. function onTypingStart( undoManager ) { // It's safe to now indicate typing state. undoManager.typing = true; // Manually mark snapshot as available. undoManager.hasUndo = true; undoManager.hasRedo = false; undoManager.onChange(); } /** * Contains a snapshot of the editor content and selection at a given point in time. * * @private * @class CKEDITOR.plugins.undo.Image * @constructor Creates an Image class instance. * @param {CKEDITOR.editor} editor The editor instance on which the image is created. * @param {Boolean} [contentsOnly] If set to `true`, the image will only contain content without the selection. */ var Image = CKEDITOR.plugins.undo.Image = function( editor, contentsOnly ) { this.editor = editor; editor.fire( 'beforeUndoImage' ); var contents = editor.getSnapshot(); if ( contents ) { this.contents = applyRules( contents, editor.undoManager._filterRules ); } if ( !contentsOnly ) { var selection = contents && editor.getSelection(); this.bookmarks = selection && selection.createBookmarks2( true ); } editor.fire( 'afterUndoImage' ); }; // Attributes that browser may changing them when setting via innerHTML. var protectedAttrs = /\b(?:href|src|name)="[^"]*?"/gi; function applyRules( data, rules ) { return CKEDITOR.tools.array.reduce( rules, function( currentData, rule ) { return rule( currentData ); }, data ); } Image.prototype = { /** * @param {CKEDITOR.plugins.undo.Image} otherImage Image to compare to. * @returns {Boolean} Returns `true` if content in `otherImage` is the same. */ equalsContent: function( otherImage ) { var thisContents = this.contents, otherContents = otherImage.contents; // For IE7 and IE QM: Comparing only the protected attribute values but not the original ones.(https://dev.ckeditor.com/ticket/4522) if ( CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.quirks ) ) { thisContents = thisContents.replace( protectedAttrs, '' ); otherContents = otherContents.replace( protectedAttrs, '' ); } if ( thisContents != otherContents ) return false; return true; }, /** * @param {CKEDITOR.plugins.undo.Image} otherImage Image to compare to. * @returns {Boolean} Returns `true` if selection in `otherImage` is the same. */ equalsSelection: function( otherImage ) { var bookmarksA = this.bookmarks, bookmarksB = otherImage.bookmarks; if ( bookmarksA || bookmarksB ) { if ( !bookmarksA || !bookmarksB || bookmarksA.length != bookmarksB.length ) return false; for ( var i = 0; i < bookmarksA.length; i++ ) { var bookmarkA = bookmarksA[ i ], bookmarkB = bookmarksB[ i ]; if ( bookmarkA.startOffset != bookmarkB.startOffset || bookmarkA.endOffset != bookmarkB.endOffset || !CKEDITOR.tools.arrayCompare( bookmarkA.start, bookmarkB.start ) || !CKEDITOR.tools.arrayCompare( bookmarkA.end, bookmarkB.end ) ) { return false; } } } return true; } /** * Editor content. * * @readonly * @property {String} contents */ /** * Bookmarks representing the selection in an image. * * @readonly * @property {Object[]} bookmarks Array of bookmark2 objects, see {@link CKEDITOR.dom.range#createBookmark2} for definition. */ }; /** * A class encapsulating all native event listeners which have to be used in * order to handle undo manager integration for native editing actions (excluding drag and drop and paste support * handled by the Clipboard plugin). * * @since 4.4.4 * @private * @class CKEDITOR.plugins.undo.NativeEditingHandler * @member CKEDITOR.plugins.undo Undo manager owning the handler. * @constructor * @param {CKEDITOR.plugins.undo.UndoManager} undoManager */ var NativeEditingHandler = CKEDITOR.plugins.undo.NativeEditingHandler = function( undoManager ) { // We'll use keyboard + input events to determine if snapshot should be created. // Since `input` event is fired before `keyup`. We can tell in `keyup` event if input occurred. // That will tell us if any printable data was inserted. // On `input` event we'll increase input fired counter for proper key code. // Eventually it might be canceled by paste/drop using `ignoreInputEvent` flag. // Order of events can be found in http://www.w3.org/TR/DOM-Level-3-Events/ /** * An undo manager instance owning the editing handler. * * @property {CKEDITOR.plugins.undo.UndoManager} undoManager */ this.undoManager = undoManager; /** * See {@link #ignoreInputEventListener}. * * @since 4.4.5 * @private */ this.ignoreInputEvent = false; /** * A stack of pressed keys. * * @since 4.4.5 * @property {CKEDITOR.plugins.undo.KeyEventsStack} keyEventsStack */ this.keyEventsStack = new KeyEventsStack(); /** * An image of the editor during the `keydown` event (therefore without DOM modification). * * @property {CKEDITOR.plugins.undo.Image} lastKeydownImage */ this.lastKeydownImage = null; }; NativeEditingHandler.prototype = { /** * The `keydown` event listener. * * @param {CKEDITOR.dom.event} evt */ onKeydown: function( evt ) { var keyCode = evt.data.getKey(); // The composition is in progress - ignore the key. (https://dev.ckeditor.com/ticket/12597) if ( keyCode === 229 ) { return; } // Block undo/redo keystrokes when at the bottom/top of the undo stack (https://dev.ckeditor.com/ticket/11126 and https://dev.ckeditor.com/ticket/11677). if ( CKEDITOR.tools.indexOf( keystrokes, evt.data.getKeystroke() ) > -1 ) { evt.data.preventDefault(); return; } // Cleaning tab functional keys. this.keyEventsStack.cleanUp( evt ); var undoManager = this.undoManager; // Gets last record for provided keyCode. If not found will create one. var last = this.keyEventsStack.getLast( keyCode ); if ( !last ) { this.keyEventsStack.push( keyCode ); } // We need to store an image which will be used in case of key group // change. this.lastKeydownImage = new Image( undoManager.editor ); if ( UndoManager.isNavigationKey( keyCode ) || this.undoManager.keyGroupChanged( keyCode ) ) { if ( undoManager.strokesRecorded[ 0 ] || undoManager.strokesRecorded[ 1 ] ) { // We already have image, so we'd like to reuse it. // https://dev.ckeditor.com/ticket/12300 undoManager.save( false, this.lastKeydownImage, false ); undoManager.resetType(); } } }, /** * The `input` event listener. */ onInput: function() { // Input event is ignored if paste/drop event were fired before. if ( this.ignoreInputEvent ) { // Reset flag - ignore only once. this.ignoreInputEvent = false; return; } var lastInput = this.keyEventsStack.getLast(); // Nothing in key events stack, but input event called. Interesting... // That's because on Android order of events is buggy and also keyCode is set to 0. if ( !lastInput ) { lastInput = this.keyEventsStack.push( 0 ); } // Increment inputs counter for provided key code. this.keyEventsStack.increment( lastInput.keyCode ); // Exceeded limit. if ( this.keyEventsStack.getTotalInputs() >= this.undoManager.strokesLimit ) { this.undoManager.type( lastInput.keyCode, true ); this.keyEventsStack.resetInputs(); } }, /** * The `keyup` event listener. * * @param {CKEDITOR.dom.event} evt */ onKeyup: function( evt ) { var undoManager = this.undoManager, keyCode = evt.data.getKey(), totalInputs = this.keyEventsStack.getTotalInputs(); // Remove record from stack for provided key code. this.keyEventsStack.remove( keyCode ); // Second part of the workaround for IEs functional keys bug. We need to check whether something has really // changed because we blindly mocked the keypress event. // Also we need to be aware that lastKeydownImage might not be available (https://dev.ckeditor.com/ticket/12327). if ( UndoManager.ieFunctionalKeysBug( keyCode ) && this.lastKeydownImage && this.lastKeydownImage.equalsContent( new Image( undoManager.editor, true ) ) ) { return; } if ( totalInputs > 0 ) { undoManager.type( keyCode ); } else if ( UndoManager.isNavigationKey( keyCode ) ) { // Note content snapshot has been checked in keydown. this.onNavigationKey( true ); } }, /** * Method called for navigation change. At first it will check if current content does not differ * from the last saved snapshot. * * * If the content is different, the method creates a standard, extra snapshot. * * If the content is not different, the method will compare the selection, and will * amend the last snapshot selection if it changed. * * @param {Boolean} skipContentCompare If set to `true`, it will not compare content, and only do a selection check. */ onNavigationKey: function( skipContentCompare ) { var undoManager = this.undoManager; // We attempt to save content snapshot, if content didn't change, we'll // only amend selection. if ( skipContentCompare || !undoManager.save( true, null, false ) ) undoManager.updateSelection( new Image( undoManager.editor ) ); undoManager.resetType(); }, /** * Makes the next `input` event to be ignored. */ ignoreInputEventListener: function() { this.ignoreInputEvent = true; }, /** * Stops ignoring `input` events. * @since 4.7.3 */ activateInputEventListener: function() { this.ignoreInputEvent = false; }, /** * Attaches editable listeners required to provide the undo functionality. */ attachListeners: function() { var editor = this.undoManager.editor, editable = editor.editable(), that = this; // We'll create a snapshot here (before DOM modification), because we'll // need unmodified content when we got keygroup toggled in keyup. editable.attachListener( editable, 'keydown', function( evt ) { that.onKeydown( evt ); // On IE keypress isn't fired for functional (backspace/delete) keys. // Let's pretend that something's changed. if ( UndoManager.ieFunctionalKeysBug( evt.data.getKey() ) ) { that.onInput(); } }, null, null, 999 ); // Only IE can't use input event, because it's not fired in contenteditable. editable.attachListener( editable, ( CKEDITOR.env.ie ? 'keypress' : 'input' ), that.onInput, that, null, 999 ); // Keyup executes main snapshot logic. editable.attachListener( editable, 'keyup', that.onKeyup, that, null, 999 ); // On paste and drop we need to ignore input event. // It would result with calling undoManager.type() on any following key. editable.attachListener( editable, 'paste', that.ignoreInputEventListener, that, null, 999 ); editable.attachListener( editable, 'drop', that.ignoreInputEventListener, that, null, 999 ); // After paste we need to re-enable input event listener (#554). editor.on( 'afterPaste', that.activateInputEventListener, that, null, 999 ); // Click should create a snapshot if needed, but shouldn't cause change event. // Don't pass onNavigationKey directly as a listener because it accepts one argument which // will conflict with evt passed to listener. // https://dev.ckeditor.com/ticket/12324 comment:4 editable.attachListener( editable.isInline() ? editable : editor.document.getDocumentElement(), 'click', function() { that.onNavigationKey(); }, null, null, 999 ); // When pressing `Tab` key while editable is focused, `keyup` event is not fired. // Which means that record for `tab` key stays in key events stack. // We assume that when editor is blurred `tab` key is already up. editable.attachListener( this.undoManager.editor, 'blur', function() { that.keyEventsStack.remove( 9 /*Tab*/ ); }, null, null, 999 ); } }; /** * This class represents a stack of pressed keys and stores information * about how many `input` events each key press has caused. * * @since 4.4.5 * @private * @class CKEDITOR.plugins.undo.KeyEventsStack * @constructor */ var KeyEventsStack = CKEDITOR.plugins.undo.KeyEventsStack = function() { /** * @readonly */ this.stack = []; }; KeyEventsStack.prototype = { /** * Pushes a literal object with two keys: `keyCode` and `inputs` (whose initial value is set to `0`) to stack. * It is intended to be called on the `keydown` event. * * @param {Number} keyCode */ push: function( keyCode ) { var length = this.stack.push( { keyCode: keyCode, inputs: 0 } ); return this.stack[ length - 1 ]; }, /** * Returns the index of the last registered `keyCode` in the stack. * If no `keyCode` is provided, then the function will return the index of the last item. * If an item is not found, it will return `-1`. * * @param {Number} [keyCode] * @returns {Number} */ getLastIndex: function( keyCode ) { if ( typeof keyCode != 'number' ) { return this.stack.length - 1; // Last index or -1. } else { var i = this.stack.length; while ( i-- ) { if ( this.stack[ i ].keyCode == keyCode ) { return i; } } return -1; } }, /** * Returns the last key recorded in the stack. If `keyCode` is provided, then it will return * the last record for this `keyCode`. * * @param {Number} [keyCode] * @returns {Object} Last matching record or `null`. */ getLast: function( keyCode ) { var index = this.getLastIndex( keyCode ); if ( index != -1 ) { return this.stack[ index ]; } else { return null; } }, /** * Increments registered input events for stack record for a given `keyCode`. * * @param {Number} keyCode */ increment: function( keyCode ) { var found = this.getLast( keyCode ); if ( !found ) { // %REMOVE_LINE% throw new Error( 'Trying to increment, but could not found by keyCode: ' + keyCode + '.' ); // %REMOVE_LINE% } // %REMOVE_LINE% found.inputs++; }, /** * Removes the last record from the stack for the provided `keyCode`. * * @param {Number} keyCode */ remove: function( keyCode ) { var index = this.getLastIndex( keyCode ); if ( index != -1 ) { this.stack.splice( index, 1 ); } }, /** * Resets the `inputs` value to `0` for a given `keyCode` or in entire stack if a * `keyCode` is not specified. * * @param {Number} [keyCode] */ resetInputs: function( keyCode ) { if ( typeof keyCode == 'number' ) { var last = this.getLast( keyCode ); if ( !last ) { // %REMOVE_LINE% throw new Error( 'Trying to reset inputs count, but could not found by keyCode: ' + keyCode + '.' ); // %REMOVE_LINE% } // %REMOVE_LINE% last.inputs = 0; } else { var i = this.stack.length; while ( i-- ) { this.stack[ i ].inputs = 0; } } }, /** * Sums up inputs number for each key code and returns it. * * @returns {Number} */ getTotalInputs: function() { var i = this.stack.length, total = 0; while ( i-- ) { total += this.stack[ i ].inputs; } return total; }, /** * Cleans the stack based on a provided `keydown` event object. The rationale behind this method * is that some keystrokes cause the `keydown` event to be fired in the editor, but not the `keyup` event. * For instance, *Alt+Tab* will fire `keydown`, but since the editor is blurred by it, then there is * no `keyup`, so the keystroke is not removed from the stack. * * @param {CKEDITOR.dom.event} event */ cleanUp: function( event ) { var nativeEvent = event.data.$; if ( !( nativeEvent.ctrlKey || nativeEvent.metaKey ) ) { this.remove( 17 ); } if ( !nativeEvent.shiftKey ) { this.remove( 16 ); } if ( !nativeEvent.altKey ) { this.remove( 18 ); } } }; } )(); /** * The number of undo steps to be saved. The higher value is set, the more * memory is used for it. * * config.undoStackSize = 50; * * @cfg {Number} [undoStackSize=20] * @member CKEDITOR.config */ /** * Fired when the editor is about to save an undo snapshot. This event can be * fired by plugins and customizations to make the editor save undo snapshots. * * @event saveSnapshot * @member CKEDITOR.editor * @param {CKEDITOR.editor} editor This editor instance. */ /** * Fired before an undo image is to be created. An *undo image* represents the * editor state at some point. It is saved into the undo store, so the editor is * able to recover the editor state on undo and redo operations. * * @since 3.5.3 * @event beforeUndoImage * @member CKEDITOR.editor * @param {CKEDITOR.editor} editor This editor instance. * @see CKEDITOR.editor#afterUndoImage */ /** * Fired after an undo image is created. An *undo image* represents the * editor state at some point. It is saved into the undo store, so the editor is * able to recover the editor state on undo and redo operations. * * @since 3.5.3 * @event afterUndoImage * @member CKEDITOR.editor * @param {CKEDITOR.editor} editor This editor instance. * @see CKEDITOR.editor#beforeUndoImage */ /** * Fired when the content of the editor is changed. * * Due to performance reasons, it is not verified if the content really changed. * The editor instead watches several editing actions that usually result in * changes. This event may thus in some cases be fired when no changes happen * or may even get fired twice. * * If it is important not to get the `change` event fired too often, you should compare the * previous and the current editor content inside the event listener. It is * not recommended to do that on every `change` event. * * Please note that the `change` event is only fired in the {@link #property-mode wysiwyg mode}. * In order to implement similar functionality in the source mode, you can listen for example to the {@link #key} * event or the native [`input`](https://developer.mozilla.org/en-US/docs/Web/Reference/Events/input) * event (not supported by Internet Explorer 8). * * editor.on( 'mode', function() { * if ( this.mode == 'source' ) { * var editable = editor.editable(); * editable.attachListener( editable, 'input', function() { * // Handle changes made in the source mode. * } ); * } * } ); * * @since 4.2.0 * @event change * @member CKEDITOR.editor * @param {CKEDITOR.editor} editor This editor instance. */ rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/dev/0000755000201500020150000000000015203533231022036 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/dev/snapshot.html0000664000201500020150000000550715203533231024574 0ustar puckpuck Replace Textarea by Code — CKEditor Sample

    CKEditor Samples » Replace Textarea Elements Using JavaScript Code

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

    CKEDITOR.replace( 'textarea_id' )
    

    Snapshots: 0
    Typing: false
    rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/0000755000201500020150000000000015203533231022201 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/zh.js0000664000201500020150000000036715203533231023170 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'zh', { redo: 'å–æ¶ˆå¾©åŽŸ', undo: '復原' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/nb.js0000664000201500020150000000036215203533231023141 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'nb', { redo: 'Gjør om', undo: 'Angre' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/eo.js0000664000201500020150000000036215203533231023145 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'eo', { redo: 'Refari', undo: 'Malfari' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/es.js0000664000201500020150000000036415203533231023153 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'es', { redo: 'Rehacer', undo: 'Deshacer' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/ro.js0000664000201500020150000000042715203533231023164 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'ro', { redo: 'Starea ulterioară (redo)', undo: 'Starea anterioară (undo)' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/hr.js0000664000201500020150000000036315203533231023154 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'hr', { redo: 'Ponovi', undo: 'PoniÅ¡ti' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/it.js0000664000201500020150000000036615203533231023162 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'it', { redo: 'Ripristina', undo: 'Annulla' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/de-ch.js0000664000201500020150000000040415203533231023517 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'de-ch', { redo: 'Wiederherstellen', undo: 'Rückgängig' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/sk.js0000664000201500020150000000036015203533231023155 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'sk', { redo: 'Znovu', undo: 'Späť' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/az.js0000664000201500020150000000037115203533231023154 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'az', { redo: 'TÉ™krar et', undo: 'İmtina et' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/pt.js0000664000201500020150000000036215203533231023165 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'pt', { redo: 'Refazer', undo: 'Anular' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/si.js0000664000201500020150000000044015203533231023152 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'si', { redo: 'à¶±à·à·€à¶­ කිරීම', undo: 'වෙනස් කිරීම' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/ko.js0000664000201500020150000000037715203533231023161 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'ko', { redo: '다시 실행', undo: '실행 취소' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/mk.js0000664000201500020150000000037015203533231023150 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'mk', { redo: 'Redo', // MISSING undo: 'Undo' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/cy.js0000664000201500020150000000036515203533231023160 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'cy', { redo: 'Ailwneud', undo: 'Dadwneud' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/uk.js0000664000201500020150000000041115203533231023154 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'uk', { redo: 'Повторити', undo: 'Повернути' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/zh-cn.js0000664000201500020150000000036415203533231023563 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'zh-cn', { redo: 'é‡åš', undo: '撤消' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/sv.js0000664000201500020150000000036215203533231023172 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'sv', { redo: 'Gör om', undo: 'Ã…ngra' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/lt.js0000664000201500020150000000036715203533231023166 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'lt', { redo: 'Atstatyti', undo: 'AtÅ¡aukti' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/is.js0000664000201500020150000000040715203533231023155 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'is', { redo: 'Hætta við afturköllun', undo: 'Afturkalla' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/fr-ca.js0000664000201500020150000000036615203533231023536 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'fr-ca', { redo: 'Refaire', undo: 'Annuler' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/et.js0000664000201500020150000000040515203533231023150 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'et', { redo: 'Toimingu kordamine', undo: 'Tagasivõtmine' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/bs.js0000664000201500020150000000036015203533231023144 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'bs', { redo: 'Ponovi', undo: 'Vrati' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/pl.js0000664000201500020150000000036115203533231023154 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'pl', { redo: 'Ponów', undo: 'Cofnij' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/bg.js0000664000201500020150000000040515203533231023130 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'bg', { redo: 'Пренаправи', undo: 'Отмени' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/fa.js0000664000201500020150000000037715203533231023136 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'fa', { redo: 'بازچیدن', undo: 'واچیدن' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/ku.js0000664000201500020150000000042515203533231023161 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'ku', { redo: 'هەڵگەڕاندنەوە', undo: 'پووچکردنەوە' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/bn.js0000664000201500020150000000041615203533231023141 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'bn', { redo: 'পà§à¦¨à¦°à¦¾à§Ÿ করি', undo: 'আনডà§' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/el.js0000664000201500020150000000040715203533231023142 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'el', { redo: 'Επανάληψη', undo: 'ΑναίÏεση' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/fi.js0000664000201500020150000000036015203533231023136 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'fi', { redo: 'Toista', undo: 'Kumoa' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/ru.js0000664000201500020150000000040715203533231023170 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'ru', { redo: 'Повторить', undo: 'Отменить' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/gl.js0000664000201500020150000000036415203533231023146 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'gl', { redo: 'Refacer', undo: 'Desfacer' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/sr-latn.js0000664000201500020150000000036615203533231024126 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'sr-latn', { redo: 'Ponovi ', undo: 'Vrati' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/oc.js0000664000201500020150000000036315203533231023144 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'oc', { redo: 'Refar', undo: 'Restablir' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/sq.js0000664000201500020150000000036515203533231023170 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'sq', { redo: 'Ribëje', undo: 'Rizhbëje' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/pt-br.js0000664000201500020150000000036715203533231023573 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'pt-br', { redo: 'Refazer', undo: 'Desfazer' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/fo.js0000664000201500020150000000036415203533231023150 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'fo', { redo: 'Vend aftur', undo: 'Angra' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/af.js0000664000201500020150000000036315203533231023131 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'af', { redo: 'Oordoen', undo: 'Ontdoen' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/hi.js0000664000201500020150000000040015203533231023133 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'hi', { redo: 'रीडू', undo: 'अनà¥à¤¡à¥‚' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/km.js0000664000201500020150000000045515203533231023154 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'km', { redo: 'ធ្វើ​ឡើង​វិញ', undo: 'មិន​ធ្វើ​វិញ' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/nl.js0000664000201500020150000000040415203533231023150 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'nl', { redo: 'Opnieuw uitvoeren', undo: 'Ongedaan maken' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/ka.js0000664000201500020150000000043015203533231023131 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'ka', { redo: 'გáƒáƒ›áƒ”áƒáƒ áƒ”ბáƒ', undo: 'გáƒáƒ£áƒ¥áƒ›áƒ”ბáƒ' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/es-mx.js0000664000201500020150000000036715203533231023600 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'es-mx', { redo: 'Rehacer', undo: 'Deshacer' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/mn.js0000664000201500020150000000045215203533231023154 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'mn', { redo: 'Өмнөх үйлдлÑÑ ÑÑргÑÑÑ…', undo: 'Хүчингүй болгох' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/da.js0000664000201500020150000000037515203533231023132 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'da', { redo: 'Annullér fortryd', undo: 'Fortryd' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/he.js0000664000201500020150000000044015203533231023133 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'he', { redo: 'חזרה על צעד ×חרון', undo: 'ביטול צעד ×חרון' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/ca.js0000664000201500020150000000036215203533231023125 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'ca', { redo: 'Refés', undo: 'Desfés' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/gu.js0000664000201500020150000000065615203533231023163 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'gu', { redo: 'રિડૂ; પછી હતી àªàªµà«€ સà«àª¥àª¿àª¤àª¿ પાછી લાવવી', undo: 'રદ કરવà«àª‚; પહેલાં હતી àªàªµà«€ સà«àª¥àª¿àª¤àª¿ પાછી લાવવી' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/ms.js0000664000201500020150000000036515203533231023164 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'ms', { redo: 'Ulangkan', undo: 'Batalkan' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/th.js0000664000201500020150000000045215203533231023155 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'th', { redo: 'ทำซ้ำคำสั่ง', undo: 'ยà¸à¹€à¸¥à¸´à¸à¸„ำสั่ง' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/de.js0000664000201500020150000000040115203533231023124 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'de', { redo: 'Wiederherstellen', undo: 'Rückgängig' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/en-ca.js0000664000201500020150000000036015203533231023523 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'en-ca', { redo: 'Redo', undo: 'Undo' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/tt.js0000664000201500020150000000040315203533231023165 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'tt', { redo: 'Кабатлау', undo: 'Кайтару' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/vi.js0000664000201500020150000000041715203533231023161 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'vi', { redo: 'Làm lại thao tác', undo: 'Khôi phục thao tác' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/cs.js0000664000201500020150000000035715203533231023153 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'cs', { redo: 'Znovu', undo: 'ZpÄ›t' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/tr.js0000664000201500020150000000036415203533231023171 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'tr', { redo: 'Tekrarla', undo: 'Geri Al' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/ja.js0000664000201500020150000000037515203533231023140 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'ja', { redo: 'やり直ã™', undo: 'å…ƒã«æˆ»ã™' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/sl.js0000664000201500020150000000036715203533231023165 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'sl', { redo: 'Uveljavi', undo: 'Razveljavi' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/lv.js0000664000201500020150000000036415203533231023165 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'lv', { redo: 'AtkÄrtot', undo: 'Atcelt' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/en-au.js0000664000201500020150000000036015203533231023545 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'en-au', { redo: 'Redo', undo: 'Undo' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/en.js0000664000201500020150000000035515203533231023146 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'en', { redo: 'Redo', undo: 'Undo' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/no.js0000664000201500020150000000036215203533231023156 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'no', { redo: 'Gjør om', undo: 'Angre' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/fr.js0000664000201500020150000000036515203533231023154 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'fr', { redo: 'Rétablir', undo: 'Annuler' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/id.js0000664000201500020150000000040615203533231023135 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'id', { redo: 'Kembali lakukan', undo: 'Batalkan perlakuan' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/ug.js0000664000201500020150000000040215203533231023150 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'ug', { redo: 'قايتىلا ', undo: 'ÙŠÛنىۋال' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/ar.js0000664000201500020150000000037115203533231023144 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'ar', { redo: 'إعادة', undo: 'تراجع' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/sr.js0000664000201500020150000000037415203533231023171 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'sr', { redo: 'Понови ', undo: 'Врати' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/eu.js0000664000201500020150000000036415203533231023155 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'eu', { redo: 'Berregin', undo: 'Desegin' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/en-gb.js0000664000201500020150000000036015203533231023530 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'en-gb', { redo: 'Redo', undo: 'Undo' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/lang/hu.js0000664000201500020150000000037315203533231023160 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'undo', 'hu', { redo: 'Ismétlés', undo: 'Visszavonás' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/icons/0000755000201500020150000000000015153141500022371 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/icons/undo.png0000664000201500020150000000117215153141500024047 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ðiIDAT8Ë¥“±NAEÏaeKxLŠ­Ü þ ”ÉÑþ©S!’‚oñÈeò|Þ"1²%»Øñ¼ö.öÆ(DðiIDAT8Ë¥“±NAEÏaeKxLŠ­Ü þ ”ÉÑþ©S!’‚oñÈeò|Þ"1²%»Øñ¼ö.öÆ(Dc毼ï$Ë2$Iâæ2Uáe´pرÖv´Ök›ŒÜ·µµfþ ÀY–‘µöWÙ ã8nûonµZÐzíÃÌüËãã#¸¯"å:~$I‚¢(Þ#¢Zk¿öe©ï¾!…‘°öÌ|àL¬‘t®µ^iPÞÖ`0@»Ýv ´´øóA"S% K0;;;û£Ñh¸X[²Çqù†ôÝ2¸Y?ÉóüU%/ív»ò,S_¢(zpÎíJ(Š µ.;â|>_áœû†ˆ>¯àKâÔ‘¯Šˆ777pΡ×ëáööÓét€Ü[ÛŠûý>¶··á‰Sõ\óóòçç/..0™Lª¢_&-6yc† e0¬ì ß R6ºŒúý>”Re¿3ñÔÞªW×ÿâåÜ&픸”³ü%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/icons/hidpi/redo-rtl.png0000664000201500020150000000221215153141500025723 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎŽIDATXÃíV¿o+EþfvÏwV¬ü¬R"AÅ'§Ô~zÕëh]!QPPР””ˆ‚´‘ˆŒS<½êý¯F)BñpœÂvÎçÛ] ¼Çx}çô¨`$Ë{»³3ßÌ|;»À]hSÅ4M˱s®VïúúúoàM”NOOAD ÚïÆ¢×-v»]Ìf3cÞ¹ã'œœœ`<ÿk޽T– MSœs•? äÁÃ;ÍÀ¦D;88؇çô6‘’UN§$YÙ|ôJ©3kí¹Ÿ£@Y)¥´ÖÐZãòòr=€n·‹,Ë0ŸÏ—¢‘vs0Æ@)u`¯.¿o Df.篮®Vðxc毼ï$Ë2$Iâæ2Uáe´pرÖv´Ök›ŒÜ·µµfþ ÀY–‘µöWÙ ã8nûonµZÐzíÃÌüËãã#¸¯"å:~$I‚¢(Þ#¢Zk¿öe©ï¾!…‘°öÌ|àL¬‘t®µ^iPÞÖ`0@»Ýv ´´øóA"S% K0;;;û£Ñh¸X[²Çqù†ôÝ2¸Y?ÉóüU%/ív»ò,S_¢(zpÎíJ(Š µ.;â|>_áœû†ˆ>¯àKâÔ‘¯Šˆ777pΡ×ëáööÓét€Ü[ÛŠûý>¶··á‰Sõ\óóòçç/..0™Lª¢_&-6yc† e0¬ì ß R6ºŒúý>”Re¿3ñÔÞªW×ÿâåÜ&픸”³ü%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/icons/hidpi/redo.png0000664000201500020150000000217015153141500025127 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎ|IDATXÃíW;o#UþΙgdGxã_°ù[! œI¬Dé\¬¨èh©@ˆMKò#­ååtüm šˆbÑ&Èãh<3÷ |Çw®g¯AGùhæ<¾ósþëBïëpppÐŒ–áÎÏÏ7ŠÇO^ˆ‡‡‡ÿ[Ž1þY"ÖEQ MÓµm{ ÷"RKn?Zkˆ’$yn‘ôûý&Û*3†Ã!†ÃaÍæÑU0P–%ʲ„R J)7‰˜égæWJ©{5T‰ˆ`3uuuÕàèè¨26ÚÕ¬*U"ºSJíxž×Z!Äq\`è1ÉL%mïV>xž‡²,f¾n`bW’$K Àí©e+"f†ÖÚr½Ò—Lò&ƒ¦Š ÝN§ßëõÊÛÛÛ{¬"‚Rj‡™ïܸ"ÞÛÛkMdžÙl"úÀ["’¦émÉ Zk(¥àyÞ;ߨ UmÞßßo°ù|Ž(Š~f殳=ÕMU[˜ù>˲ga.ß¹ƒfÑüI†""/”RîÚ_Yãæ—™af©”ê…a(>«| b-3®µþŠM¹­o"~û—Zëïl ]ʉZëªr£·-U³B<ϻϲìYÇËbmŠÒ4…ˆüàîí.å„­; Vïîûþ‰Öº–|…n·{¾fǀ߉èˆüÂ̯•RWDôÚ¥Ü膹0 wò<¿³™ï¾©2Ë2Äq|`Sº_|ED?ÚŒh­[÷ K®•RIžç­ÌU¢(úØ _ôó·ù|þÜP¶ŽS©í¯µN˜ùÚ­Úm›ÀÌüµeøiQÏ·¶¶Ýíefø¾÷ðð@mç@Õ{ßG·Û]΀Öú#˜L&4 EQ-yÛ0Ú 8QJ½êt:¶¨ˆ`<ÿ ÄEчƒÁ`yR-¦Øl©ëèßÞÞîO§Ów¶¯Í”¡™k7fßBùmžç?Ùˆ¾ïWý-ËEQÔ0óŸEQô¦Óic¯ ¥Tu ©ù[úno ìîîb<ãââb…R½ “/f¾ïãææ¦‘ÁÚAíöLkÙl†ÓÓS¸Ì´ÝlÝóxž‡²,f¾n`bW’$K Àí©e+"f†ÖÚr½Ò—Lò&ƒ¦Š ÝN§ßëõÊÛÛÛ{¬"‚Rj‡™ïܸ"ÞÛÛkMdžÙl"úÀ["’¦émÉ Zk(¥àyÞ;ߨ UmÞßßo°ù|Ž(Š~f殳=ÕMU[˜ù>˲ga.ß¹ƒfÑüI†""/”RîÚ_Yãæ—™af©”ê…a(>«| b-3®µþŠM¹­o"~û—Zëïl ]ʉZëªr£·-U³B<ϻϲìYÇËbmŠÒ4…ˆüàîí.å„­; Vïîûþ‰Öº–|…n·{¾fǀ߉èˆüÂ̯•RWDôÚ¥Ü膹0 wò<¿³™ï¾©2Ë2Äq|`Sº_|ED?ÚŒh­[÷ K®•RIžç­ÌU¢(úØ _ôó·ù|þÜP¶ŽS©í¯µN˜ùÚ­Úm›ÀÌüµeøiQÏ·¶¶Ýíefø¾÷ðð@mç@Õ{ßG·Û]΀Öú#˜L&4 EQ-yÛ0Ú 8QJ½êt:¶¨ˆ`<ÿ ÄEчƒÁ`yR-¦Øl©ëèßÞÞîO§Ów¶¯Í”¡™k7fßBùmžç?Ùˆ¾ïWý-ËEQÔ0óŸEQô¦Óic¯ ¥Tu ©ù[úno ìîîb<ãââb…R½ “/f¾ïãææ¦‘ÁÚAíöLkÙl†ÓÓS¸Ì´ÝlÝóðQIDAT8Ë¥’1NÃ0…ß³u@-- ¹;@l•¸baF,„½ê-Š”¹è ˜;e ­â¥’­ÿgi"c¢JOŠ"ù÷û^âg"Ñt:Å1‘ìÞUUÿXk‘•e‰õz çöû=¼÷GªÚATÙjµI솪 Um“¶ª:iM1DUaT"éLI‎F£‹ôK:@úÄÿÚªišoU}‘_“C yMòÑóÏ”$·u]wû³8ÅZ{£ªË8¥Gã¢(À€™‰Ï!„%N”ïý€·¤ïÆSõxvu]À¬äyþy¨æ+Ïó+ï=œ‹È]|¬µ¯&EQtÕ·gpk­½‘yƒÁàO¥ÃáðÒ9·imKæ@‘y_}$wèœÛ¤s’È O©1Ú<é‚$Œ10èQßìS|'© X,øw¸ÖCvTh%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/undo/icons/undo-rtl.png0000664000201500020150000000114215153141500024643 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ðQIDAT8Ë¥’1NÃ0…ß³u@-- ¹;@l•¸baF,„½ê-Š”¹è ˜;e ­â¥’­ÿgi"c¢JOŠ"ù÷û^âg"Ñt:Å1‘ìÞUUÿXk‘•e‰õz çöû=¼÷GªÚATÙjµI솪 Um“¶ª:iM1DUaT"éLI‎F£‹ôK:@úÄÿÚªišoU}‘_“C yMòÑóÏ”$·u]wû³8ÅZ{£ªË8¥Gã¢(À€™‰Ï!„%N”ïý€·¤ïÆSõxvu]À¬äyþy¨æ+Ïó+ï=œ‹È]|¬µ¯&EQtÕ·gpk­½‘yƒÁàO¥ÃáðÒ9·imKæ@‘y_}$wèœÛ¤s’È O©1Ú<é‚$Œ10èQßìS|'© X,øw¸ÖCvTh%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/0000755000201500020150000000000015203533226022317 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/plugin.js0000664000201500020150000007351115203533226024164 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ 'use strict'; ( function() { CKEDITOR.plugins.add( 'filetools', { lang: 'az,bg,ca,cs,da,de,de-ch,el,en,en-au,eo,es,es-mx,et,eu,fa,fr,gl,hr,hu,id,it,ja,km,ko,ku,lv,nb,nl,no,oc,pl,pt,pt-br,ro,ru,sk,sq,sr,sr-latn,sv,tr,ug,uk,vi,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.0 * @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. Refer to the {@glink guide/dev_file_upload Uploading Dropped or Pasted Files} article for more information. * * @since 4.5.0 * @event fileUploadRequest * @member CKEDITOR.editor * @param data * @param {CKEDITOR.fileTools.fileLoader} data.fileLoader A file loader instance. * @param {Object} data.requestData An object containing all data to be sent to the server. */ editor.on( 'fileUploadRequest', function( evt ) { var fileLoader = evt.data.fileLoader; fileLoader.xhr.open( 'POST', fileLoader.uploadUrl, true ); // Adding file to event's data by default - allows overwriting it by user's event listeners. (https://dev.ckeditor.com/ticket/13518) evt.data.requestData.upload = { file: fileLoader.file, name: fileLoader.fileName }; }, null, null, 5 ); editor.on( 'fileUploadRequest', function( evt ) { var fileLoader = evt.data.fileLoader, $formData = new FormData(), requestData = evt.data.requestData, configXhrHeaders = editor.config.fileTools_requestHeaders, header; for ( var name in requestData ) { var value = requestData[ name ]; // Treating files in special way if ( typeof value === 'object' && value.file ) { $formData.append( name, value.file, value.name ); } else { $formData.append( name, value ); } } // Append token preventing CSRF attacks. $formData.append( 'ckCsrfToken', CKEDITOR.tools.getCsrfToken() ); if ( configXhrHeaders ) { for ( header in configXhrHeaders ) { fileLoader.xhr.setRequestHeader( header, configXhrHeaders[ header ] ); } } fileLoader.xhr.send( $formData ); }, null, null, 999 ); /** * Event fired when the {@link 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. Refer to the * {@glink guide/dev_file_upload Uploading Dropped or Pasted Files} article for more information. * * @since 4.5.0 * @event fileUploadResponse * @member CKEDITOR.editor * @param data All data will be passed to {@link CKEDITOR.fileTools.fileLoader#responseData}. * @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 { for ( var i in response ) { data[ i ] = response[ i ]; } } } catch ( err ) { // Response parsing error. data.message = fileLoader.lang.filetools.responseError; CKEDITOR.warn( 'filetools-response-error', { responseText: 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.0 * @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}. * @param {Function} [loaderType] Loader type to be created. If skipped, the default {@link CKEDITOR.fileTools.fileLoader} * type will be used. * @returns {CKEDITOR.fileTools.fileLoader} The created file loader instance. */ create: function( fileOrData, fileName, loaderType ) { loaderType = loaderType || FileLoader; var id = this.loaders.length, loader = new loaderType( 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.0 * @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 is 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.uploadTotal = null; this.responseData = null; 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 */ /** * All data received in the response from the server. If the server returns additional data, it will be available * in this property. * * It contains all data set in the {@link CKEDITOR.editor#fileUploadResponse} event listener. * * @readonly * @property {Object} responseData */ /** * The total size of upload data in bytes. * If the `xhr.upload` object is present, this value will indicate the total size of the request payload, not only the file * size itself. If the `xhr.upload` object is not available and the real upload size cannot be obtained, this value will * be equal to {@link #total}. It has a `null` value until the upload size is known. * * loader.on( 'update', function() { * // Wait till uploadTotal is present. * if ( loader.uploadTotal ) { * console.log( 'uploadTotal: ' + loader.uploadTotal ); * } * }); * * @readonly * @property {Number} uploadTotal */ /** * 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. * @param {Object} [additionalRequestParameters] Additional parameters that would be passed to * the {@link CKEDITOR.editor#fileUploadRequest} event. */ loadAndUpload: function( url, additionalRequestParameters ) { 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, additionalRequestParameters ); }, 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. * @param {Object} [additionalRequestParameters] Additional data that would be passed to * the {@link CKEDITOR.editor#fileUploadRequest} event. */ upload: function( url, additionalRequestParameters ) { var requestData = additionalRequestParameters || {}; 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, requestData: requestData } ) ) { 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(); onAbort(); }; xhr.onerror = onError; xhr.onabort = onAbort; // https://dev.ckeditor.com/ticket/13533 - When xhr.upload is present attach onprogress, onerror and onabort functions to get actual upload // information. if ( xhr.upload ) { xhr.upload.onprogress = function( evt ) { if ( evt.lengthComputable ) { // Set uploadTotal with correct data. if ( !loader.uploadTotal ) { loader.uploadTotal = evt.total; } loader.uploaded = evt.loaded; loader.update(); } }; xhr.upload.onerror = onError; xhr.upload.onabort = onAbort; } else { // https://dev.ckeditor.com/ticket/13533 - If xhr.upload is not supported - fire update event anyway and set uploadTotal to file size. loader.uploadTotal = loader.total; loader.update(); } xhr.onload = function() { // https://dev.ckeditor.com/ticket/13433 - Call update at the end of the upload. When xhr.upload object is not supported there will be // no update events fired during the whole process. loader.update(); // https://dev.ckeditor.com/ticket/13433 - Check if loader was not aborted during last update. if ( loader.status == 'abort' ) { return; } loader.uploaded = loader.uploadTotal; 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 ]; } } // The whole response is also hold for use by uploadwidgets (https://dev.ckeditor.com/ticket/13519). loader.responseData = data; // But without reference to the loader itself. delete loader.responseData.fileLoader; if ( success === false ) { loader.changeStatus( 'error' ); } else { loader.changeStatus( 'uploaded' ); } } }; function onError() { // Prevent changing status twice, when XHR.error and XHR.upload.onerror could be called together. if ( loader.status == 'error' ) { return; } loader.message = loader.lang.filetools.networkError; loader.changeStatus( 'error' ); } function onAbort() { // Prevent changing status twice, when XHR.onabort and XHR.upload.onabort could be called together. if ( loader.status == 'abort' ) { return; } loader.changeStatus( 'abort' ); } }, /** * 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.0 * @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 ); }, /** * Feature detection indicating whether the current browser supports methods essential to send files over an XHR request. * * @since 4.9.0 * @property {Boolean} isFileUploadSupported */ isFileUploadSupported: ( function() { return typeof FileReader === 'function' && typeof ( new FileReader() ).readAsDataURL === 'function' && typeof FormData === 'function' && typeof ( new FormData() ).append === 'function' && typeof XMLHttpRequest === 'function' && typeof Blob === 'function'; } )() } ); } )(); /** * The URL where files should be uploaded. * * An empty string means that the option is disabled. * * @since 4.5.0 * @cfg {String} [uploadUrl=''] * @member CKEDITOR.config */ /** * The 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 */ /** * Allows to add extra headers for every request made using the {@link CKEDITOR.fileTools} API. * * Note that headers can still be customized per a single request, using the * [`fileUploadRequest`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-fileUploadRequest) * event. * * config.fileTools_requestHeaders = { * 'X-Requested-With': 'XMLHttpRequest', * 'Custom-Header': 'header value' * }; * * @since 4.9.0 * @cfg {Object} [fileTools_requestHeaders] * @member CKEDITOR.config */ rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/dev/0000755000201500020150000000000015203533226023075 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/dev/uploaddebugger.js0000664000201500020150000000241315203533226026426 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/0000755000201500020150000000000015203533226023240 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/zh.js0000664000201500020150000000123715203533226024224 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'zh', { loadError: 'åœ¨è®€å–æª”案時發生錯誤。', networkError: '在上傳檔案時發生網路錯誤。', httpError404: '在上傳檔案時發生 HTTP 錯誤(404:檔案找ä¸åˆ°ï¼‰ã€‚', httpError403: '在上傳檔案時發生 HTTP 錯誤(403ï¼šç¦æ­¢ï¼‰ã€‚', httpError: '在上傳檔案時發生 HTTP 錯誤(錯誤狀態:%1)。', noUrlError: '上傳的 URL 未被定義。', responseError: '䏿­£ç¢ºçš„伺æœå™¨å›žæ‡‰ã€‚' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/nb.js0000664000201500020150000000122415203533226024176 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/eo.js0000664000201500020150000000125115203533226024202 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/es.js0000664000201500020150000000135115203533226024207 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'es', { loadError: 'Ha ocurrido un error durante la lectura del archivo.', networkError: 'Error de red ocurrido durante carga de archivo.', httpError404: 'Un error HTTP ha ocurrido durante la carga del archivo (404: Archivo no encontrado).', httpError403: 'Un error HTTP ha ocurrido durante la carga del archivo (403: Prohibido).', httpError: 'Error HTTP ocurrido durante la carga del archivo (Estado del error: %1).', noUrlError: 'URL cargada no está definida.', responseError: 'Respueta del servidor incorrecta.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/ro.js0000664000201500020150000000133415203533226024221 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'ro', { loadError: 'Eroare în timpul citirii fiÈ™ierului.', networkError: 'Eroare de reÈ›ea în timpul încărcării fiÈ™ierului.', httpError404: 'Eroare HTTP în timpul încărcării fiÈ™ierului (404: FiÈ™ier negăsit).', httpError403: 'Eroare HTTP în timpul încărcării fiÈ™ierului (403: OperaÈ™ie nepermisă).', httpError: 'Eroare HTTP în timpul încărcării fiÈ™ierului (stare eroiare: %1).', noUrlError: 'URL-ul de ăncărcare nu este specificat.', responseError: 'Răspuns server incorect.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/hr.js0000664000201500020150000000123515203533226024212 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'hr', { loadError: 'GreÅ¡ka prilikom Äitanja datoteke.', networkError: 'Mrežna greÅ¡ka prilikom slanja datoteke.', httpError404: 'HTTP greÅ¡ka tijekom slanja datoteke (404: datoteka nije pronaÄ‘ena).', httpError403: 'HTTP greÅ¡ka tijekom slanja datoteke (403: Zabranjeno).', httpError: 'HTTP greÅ¡ka tijekom slanja datoteke (greÅ¡ka status: %1).', noUrlError: 'URL za slanje nije podeÅ¡en.', responseError: 'Neispravni odgovor servera.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/it.js0000664000201500020150000000147315203533226024221 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/de-ch.js0000664000201500020150000000144115203533226024560 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'de-ch', { 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-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/sk.js0000664000201500020150000000130515203533226024214 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'sk', { loadError: 'PoÄas Äítania súboru nastala chyba.', networkError: 'PoÄas nahrávania súboru nastala chyba siete.', httpError404: 'PoÄas nahrávania súboru nastala HTTP chyba (404: Súbor nebol nájdený).', httpError403: 'PoÄas nahrávania súboru nastala HTTP chyba (403: Zakázaný).', httpError: 'PoÄas nahrávania súboru nastala HTTP chyba (error status: %1).', noUrlError: 'URL nahrávania nie je definovaný.', responseError: 'Nesprávna odpoveÄ servera.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/az.js0000664000201500020150000000126515203533226024216 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'az', { loadError: 'Faylını oxumaq mümkün deyil', networkError: 'XÉ™ta baÅŸ verdi.', httpError404: 'ServerÉ™ göndÉ™rilmÉ™sinin zamanı xÉ™ta baÅŸ verdi (404 - fayl tapılmayıb)', httpError403: 'ServerÉ™ göndÉ™rilmÉ™sinin zamanı xÉ™ta baÅŸ verdi (403 - gadaÄŸandır)', httpError: 'ServerÉ™ göndÉ™rilmÉ™sinin zamanı xÉ™ta baÅŸ verdi (xÉ™tanın ststusu: %1)', noUrlError: 'YüklÉ™mÉ™ linki tÉ™yin edilmÉ™yib', responseError: 'Serverin cavabı yanlışdır' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/pt.js0000664000201500020150000000131515203533226024223 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'pt', { loadError: 'Ocorreu um erro ao ler o ficheiro', networkError: 'Ocorreu um erro de rede ao carregar o ficheiro.', httpError404: 'HTTP error occurred during file upload (404: File not found).', // MISSING httpError403: 'HTTP error occurred during file upload (403: Forbidden).', // MISSING httpError: 'HTTP error occurred during file upload (error status: %1).', // MISSING noUrlError: 'Upload URL is not defined.', // MISSING responseError: 'Incorrect server response.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/ko.js0000664000201500020150000000141215203533226024207 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'ko', { loadError: '파ì¼ì„ ì½ëŠ” 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤.', networkError: 'íŒŒì¼ ì—…ë¡œë“œ 중 ë„¤íŠ¸ì›Œí¬ ì˜¤ë¥˜ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤.', httpError404: 'íŒŒì¼ ì—…ë¡œë“œì¤‘ HTTP 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤ (404: íŒŒì¼ ì°¾ì„수 ì—†ìŒ).', httpError403: 'íŒŒì¼ ì—…ë¡œë“œì¤‘ HTTP 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤ (403: 권한 ì—†ìŒ).', httpError: 'íŒŒì¼ ì—…ë¡œë“œì¤‘ HTTP 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤ (오류 코드 %1).', noUrlError: '업로드 주소가 ì •ì˜ë˜ì–´ 있지 않습니다.', responseError: 'ìž˜ëª»ëœ ì„œë²„ ì‘답.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/uk.js0000664000201500020150000000173015203533226024220 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'uk', { loadError: 'Виникла помилка під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ', networkError: 'Під Ñ‡Ð°Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ виникла помилка мережі.', httpError404: 'Під Ñ‡Ð°Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ виникла помилка HTTP (404: Файл не знайдено).', httpError403: 'Під Ñ‡Ð°Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ виникла помилка HTTP (403: ДоÑтуп заборонено).', httpError: 'Під Ñ‡Ð°Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ виникла помилка (ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸: %1).', noUrlError: 'URL Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ визначений.', responseError: 'Ðевірна відповідь Ñервера.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/zh-cn.js0000664000201500020150000000120415203533226024614 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'zh-cn', { loadError: 'è¯»å–æ–‡ä»¶æ—¶å‘生错误', networkError: '上传文件时å‘生网络错误', httpError404: '上传文件时å‘生 HTTP 错误(404:无法找到文件)', httpError403: '上传文件时å‘生 HTTP 错误(403ï¼šç¦æ­¢è®¿é—®ï¼‰', httpError: '上传文件时å‘生 HTTP 错误(错误代ç ï¼š%1)', noUrlError: '上传的 URL 未定义', responseError: '䏿­£ç¡®çš„æœåŠ¡å™¨å“应' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/sv.js0000664000201500020150000000120715203533226024230 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/et.js0000664000201500020150000000121515203533226024207 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'et', { loadError: 'Faili lugemisel esines viga.', networkError: 'Faili üleslaadimisel esines võrgu viga.', httpError404: 'Faili üleslaadimisel esines HTTP viga (404: faili ei leitud).', httpError403: 'Faili üleslaadimisel esines HTTP viga (403: keelatud).', httpError: 'Faili üleslaadimisel esines HTTP viga (veakood: %1).', noUrlError: 'Üleslaadimise URL ei ole määratud.', responseError: 'Vigane serveri vastus.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/pl.js0000664000201500020150000000130115203533226024206 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/bg.js0000664000201500020150000000167715203533226024203 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'bg', { loadError: 'Възникна грешка при четене на файла.', networkError: 'Възникна мрежова грешка при качването на файла.', httpError404: 'Възникна HTTP грешка при качване на файла (404: Файлът не е намерен).', httpError403: 'Възникна HTTP грешка при качване на файла (403: Забранено).', httpError: 'Възникна HTTP грешка при качване на файла (ÑÑ‚Ð°Ñ‚ÑƒÑ Ð½Ð° грешката: %1).', noUrlError: 'URL адреÑÑŠÑ‚ за качване не е дефиниран.', responseError: 'Ðеправилен отговор на Ñървъра.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/fa.js0000664000201500020150000000144315203533226024170 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'fa', { loadError: 'هنگام خواندن ÙØ§ÛŒÙ„ØŒ خطایی رخ داد.', networkError: 'هنگام آپلود ÙØ§ÛŒÙ„ خطای شبکه رخ داد.', httpError404: 'هنگام آپلود ÙØ§ÛŒÙ„ خطای HTTP رخ داد (404: ÙØ§ÛŒÙ„ ÛŒØ§ÙØª نشد).', httpError403: 'هنگام آپلود ÙØ§ÛŒÙ„ØŒ خطای HTTP رخ داد (403: ممنوع).', httpError: 'خطای HTTP در آپلود ÙØ§ÛŒÙ„ رخ داده است (وضعیت خطا: %1).', noUrlError: 'آدرس آپلود تعری٠نشده است.', responseError: 'پاسخ نادرست سرور.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/ku.js0000664000201500020150000000167115203533226024224 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'ku', { loadError: 'هەڵەیەک ڕوویدا Ù„Û• ماوەی خوێندنەوەی Ù¾Û•Ú•Ú¯Û•Ú©Û•.', networkError: 'هەڵەیەکی ڕایەڵە ڕوویدا Ù„Û• ماوەی بارکردنی Ù¾Û•Ú•Ú¯Û•Ú©Û•.', httpError404: 'هەڵەیەک ڕوویدا Ù„Û• ماوەی بارکردنی Ù¾Û•Ú•Ú¯Û•Ú©Û• (404: Ù¾Û•Ú•Ú¯Û•Ú©Û• نەدۆزراوە).', httpError403: 'هەڵەیەک ڕوویدا Ù„Û• ماوەی بارکردنی Ù¾Û•Ú•Ú¯Û•Ú©Û• (403: قەدەغەکراو).', httpError: 'هەڵەیەک ڕوویدا Ù„Û• ماوەی بارکردنی Ù¾Û•Ú•Ú¯Û•Ú©Û• (دۆخی Ù‡Û•ÚµÛ•: %1).', noUrlError: 'بەستەری Ù¾Û•Ú•Ú¯Û•Ú©Û• پێناسە نەکراوە.', responseError: 'وەڵامێکی نادروستی سێرڤەر.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/el.js0000664000201500020150000000205015203533226024175 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'el', { loadError: 'ΠαÏουσιάστηκε αφάλμα κατά την ανάγνωση αÏχείου.', networkError: 'ΠαÏουσιάστηκε σφάλμα δικτÏου κατά την αποστολή αÏχείου.', httpError404: 'ΠαÏουσιάστηκε σφάλμα HTTP κατά την αποστολή αÏχείου (404: Το αÏχείο δεν βÏέθηκε).', httpError403: 'ΠαÏουσιάστηκε σφάλμα HTTP κατά την αποστολή αÏχείου (403: ΑπαγοÏευμένο).', httpError: 'ΠαÏουσιάστηκε σφάλμα HTTP κατά την αποστολή αÏχείου (κατάσταση σφάλματος: %1).', noUrlError: 'Η διεÏθυνση URL δεν έχει οÏιστεί.', responseError: 'Λανθασμένη απάντηση διακομιστή.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/ru.js0000664000201500020150000000143315203533226024227 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'ru', { loadError: 'Ошибка при чтении файла', networkError: 'Ð¡ÐµÑ‚ÐµÐ²Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° при загрузке файла', httpError404: 'HTTP ошибка при загрузке файла (404: Файл не найден)', httpError403: 'HTTP ошибка при загрузке файла (403: Запрещено)', httpError: 'HTTP ошибка при загрузке файла (%1)', noUrlError: 'Ðе определен URL Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ файлов', responseError: 'Ðекорректный ответ Ñервера' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/gl.js0000664000201500020150000000137015203533226024203 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/sr-latn.js0000664000201500020150000000137015203533226025161 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'sr-latn', { loadError: 'DoÅ¡lo je do greÅ¡ke pri Äitanju datoteke.', networkError: 'Tokom postavljanja datoteke doÅ¡lo je do mrežne greÅ¡ke', httpError404: 'Tokom postavljanja datoteke doÅ¡lo je do HTTP greÅ¡ke (404: Datoteka nije pronadjena).', httpError403: 'Tokom postavljanja datoteke doÅ¡lo je do HTTP greÅ¡ke (403: Zabranjena).', httpError: 'Tokom postavljanja datoteke doÅ¡lo je do HTTP greÅ¡ke (status greÅ¡ke: %1).', noUrlError: 'URL adresa za postavljanje nije navedena.', responseError: 'Neispravan odgovor servera.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/oc.js0000664000201500020150000000145015203533226024201 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'oc', { loadError: 'Una error s\'es produita pendent la lectura del fichièr.', networkError: 'Una error de ret s\'es produita pendent lo mandadís del fichièr.', httpError404: 'Una error HTTP s\'es produita pendent lo mandadís del fichièr (404 : fichièr pas trobat).', httpError403: 'Una error HTTP s\'es produita pendent lo mandadís del fichièr (403 : accès refusat).', httpError: 'Una error HTTP s\'es produita pendent lo mandadís del fichièr (error : %1).', noUrlError: 'L\'URL de mandadís es pas especificada.', responseError: 'Responsa del servidor incorrècta.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/sq.js0000664000201500020150000000137115203533226024225 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'sq', { loadError: 'Gabimi u paraqit gjatë leximit të skedës.', networkError: 'Gabimi në rrjetë u paraqitë gjatë ngarkimit të skedës.', httpError404: 'Gabimi në HTTP u paraqit gjatë ngarkimit të skedës (404: Skeda nuk u gjetë).', httpError403: 'Gabimi në HTTP u paraqitë gjatë ngarkimit të skedës (403: E ndaluar).', httpError: 'Gabimi në HTTP u paraqit gjatë ngarkimit të skedës (gjendja e gabimit: %1).', noUrlError: 'URL e ngarkimit nuk është vendosur.', responseError: 'Përgjigje e gabuar e serverit.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/pt-br.js0000664000201500020150000000133415203533226024625 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/km.js0000664000201500020150000000252515203533226024213 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'km', { loadError: 'មាន​បញ្ហា​កើážáž¡áž¾áž„​ក្នុង​ពáŸáž›â€‹áž¢áž¶áž“​ឯកសារ។', networkError: 'មាន​បញ្ហា​បណ្ដាញ​កើážâ€‹áž¡áž¾áž„​ក្នុង​ពáŸáž›â€‹áž•្ទុកឡើង​ឯកសារ។', httpError404: 'មាន​បញ្ហា HTTP កើážâ€‹áž¡áž¾áž„​ក្នុង​ពáŸáž›â€‹áž•្ទុកឡើង​ឯកសារ (404៖ រក​ឯកសារ​មិន​ឃើញ)។', httpError403: 'មាន​បញ្ហា HTTP កើážâ€‹áž¡áž¾áž„​ក្នុង​ពáŸáž›â€‹áž•្ទុកឡើង​ឯកសារ (403៖ ហាមឃាážáŸ‹)។', httpError: 'មាន​បញ្ហា HTTP កើážâ€‹áž¡áž¾áž„​ក្នុង​ពáŸáž›â€‹áž•្ទុកឡើង​ឯកសារ (ស្ážáž¶áž“ភាព​កំហុស៖ %1)។', noUrlError: 'មិន​មាន​បញ្ជាក់ URL ផ្ទុក​ឡើង។', responseError: 'ការ​ឆ្លើយážáž”​របស់​ម៉ាស៊ីនបម្រើ មិន​ážáŸ’រឹមážáŸ’រូវ។' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/nl.js0000664000201500020150000000123415203533226024211 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/es-mx.js0000664000201500020150000000137115203533226024633 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'es-mx', { loadError: 'Ha ocurrido un error al leer el archivo', networkError: 'Ha ocurrido un error de red durante la carga del archivo.', httpError404: 'Se ha producido un error HTTP durante la subida de archivos (404: archivo no encontrado).', httpError403: 'Se ha producido un error HTTP durante la subida de archivos (403: Prohibido).', httpError: 'Se ha producido un error HTTP durante la subida de archivos (error: %1).', noUrlError: 'La URL de subida no está definida.', responseError: 'Respuesta incorrecta del servidor.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/da.js0000664000201500020150000000125115203533226024163 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/ca.js0000664000201500020150000000142115203533226024161 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'ca', { loadError: 'S\'ha produït un error durant la lectura del fitxer.', networkError: 'S\'ha produït un error de xarxa durant la càrrega del fitxer.', httpError404: 'S\'ha produït un error HTTP durant la càrrega del fitxer (404: Fitxer no trobat).', httpError403: 'S\'ha produït un error HTTP durant la càrrega del fitxer (403: Permís denegat).', httpError: 'S\'ha produït un error HTTP durant la càrrega del fitxer (estat d\'error: %1).', noUrlError: 'La URL de càrrega no està definida.', responseError: 'Resposta incorrecte del servidor' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/de.js0000664000201500020150000000144315203533226024172 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'de', { loadError: 'Während des Lesens der Datei ist ein Fehler aufgetreten.', networkError: 'Während des Hochladens der Datei ist ein Netzwerkfehler aufgetreten.', httpError404: 'Während des Hochladens der Datei ist ein HTTP-Fehler aufgetreten (404: Datei nicht gefunden).', httpError403: 'Während des Hochladens der Datei ist ein HTTP-Fehler aufgetreten (403: Verboten).', httpError: 'Während des Hochladens der Datei ist ein HTTP-Fehler aufgetreten (Fehlerstatus: %1).', noUrlError: 'Hochlade-URL ist nicht definiert.', responseError: 'Falsche Antwort des Servers.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/vi.js0000664000201500020150000000133115203533226024214 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'vi', { loadError: 'Lá»—i xảy ra khi Ä‘ang Ä‘á»c file', networkError: 'Lá»—i kết nối xảy ra khi Ä‘ang tải file lên', httpError404: 'Lá»—i HTTP xảy ra khi Ä‘ang tải file lên (404: Không tìm thấy file)', httpError403: 'Lá»—i HTTP xảy ra khi Ä‘ang tải file lên (403: Bị cấm)', httpError: 'Lá»—i HTTP xảy ra khi Ä‘ang tải file lên (tình trạng lá»—i: %1)', noUrlError: 'ÄÆ°á»ng dẫn tải lên không hoạt động', responseError: 'Phản hồi từ server sai' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/cs.js0000664000201500020150000000130315203533226024202 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/tr.js0000664000201500020150000000122715203533226024227 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/ja.js0000664000201500020150000000156715203533226024203 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'ja', { loadError: 'ファイルã®èª­ã¿è¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚', networkError: 'ファイルã®ã‚¢ãƒƒãƒ—ロード中ã«ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚', httpError404: 'ファイルã®ã‚¢ãƒƒãƒ—ロード中ã«HTTPエラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚(404: File not found)', httpError403: 'ファイルã®ã‚¢ãƒƒãƒ—ロード中ã«HTTPエラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚(403: Forbidden)', httpError: 'ファイルã®ã‚¢ãƒƒãƒ—ロード中ã«HTTPエラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚(error status: %1)', noUrlError: 'アップロードURLãŒå®šç¾©ã•れã¦ã„ã¾ã›ã‚“。', responseError: 'サーãƒãƒ¼ã®å¿œç­”ãŒä¸æ­£ã§ã™ã€‚' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/lv.js0000664000201500020150000000125315203533226024222 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'lv', { loadError: 'RadÄs kļūda nolasot failu.', networkError: 'RadÄs tÄ«kla kļūda, kamÄ“r tika ielÄdÄ“ts fails.', httpError404: 'IelÄdÄ“jot failu, radÄs HTTP kļūda (404: Fails nav atrasts)', httpError403: 'IelÄdÄ“jot failu, radÄs HTTP kļūda (403: Pieeja liegta)', httpError: 'IelÄdÄ“jot failu, radÄs HTTP kļūda (kļūdas statuss: %1)', noUrlError: 'AugÅ¡upielÄdes adrese nav norÄdÄ«ta.', responseError: 'Nekorekta servera atbilde.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/en-au.js0000664000201500020150000000122315203533226024603 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'en-au', { 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-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/en.js0000664000201500020150000000122015203533226024175 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/no.js0000664000201500020150000000130615203533226024214 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'no', { loadError: 'Det oppstod en feil under lesing av filen.', networkError: 'Det oppstod en nettverksfeil under opplasting av filen.', httpError404: 'En HTTP-feil oppstod under opplasting av filen (404: Filen finnes ikke).', httpError403: 'En HTTP-feil oppstod under opplasting av filen (403: Ingen tilgang).', httpError: 'En HTTP-feil oppstod under opplasting av filen (feilkode: %1).', noUrlError: 'Opplastings-URL er ikke definert.', responseError: 'Feil svar fra serveren.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/fr.js0000664000201500020150000000146615203533226024216 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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 (erreur : %1).', noUrlError: 'L\'URL de téléversement n\'est pas spécifiée.', responseError: 'Réponse du serveur incorrecte.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/id.js0000664000201500020150000000125615203533226024200 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'id', { loadError: 'Error terjadi ketika berkas dibaca', networkError: 'Jaringan error terjadi ketika mengunggah berkas', httpError404: 'HTTP error terjadi ketika mengunggah berkas (404: Berkas tidak ditemukan)', httpError403: 'HTTP error terjadi ketika mengunggah berkas (403: Gangguan)', httpError: 'HTTP error terjadi ketika mengunggah berkas (status error: %1)', noUrlError: 'Unggahan URL tidak terdefinisi', responseError: 'Respon server tidak sesuai' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/ug.js0000664000201500020150000000161415203533226024215 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'ug', { loadError: 'ھۆججەت ئوقۇشتا خاتالىق كۆرۈلدى', networkError: 'ھۆججەت يۈكلەشتە تور خاتالىقى كۆرۈلدى.', httpError404: 'ھۆججەت يۈكلىگەندە HTTP خاتالىقى كۆرۈلدى (404: ھۆججەت تÛپىلمىدى).', httpError403: 'ھۆججەت يۈكلىگەندە HTTP خاتالىقى كۆرۈلدى (403: چەكلەنگەن).', httpError: 'ھۆججەت يۈكلىگەندە HTTP خاتالىقى كۆرۈلدى (404: خاتالىق نىسپىتى: 1%).', noUrlError: 'چىقىردىغان ئۇلانما تەڭشەلمىگەن .', responseError: 'مۇلازىمىتىردا ئىنكاس يوق .' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/sr.js0000664000201500020150000000201015203533226024215 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'sr', { loadError: 'Дошло је до грешке при читању датотеке.', networkError: 'Током поÑтављања датотеке дошло је до мрежне грешке.', httpError404: 'Током поÑтављања датотеке дошло је до ХТТП грешке (404: Датотека није пронађена).', httpError403: 'Током поÑтављања датотеке дошло је до ХТТП грешке (403: Забрањена).', httpError: 'Током поÑтављања датотеке дошло је до ХТТП грешке (ÑÑ‚Ð°Ñ‚ÑƒÑ Ð³Ñ€ÐµÑˆÐºÐµ: %1).', noUrlError: 'УРЛ адреÑа за поÑтављање није наведена.', responseError: 'ÐеиÑправан одговор Ñервера.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/eu.js0000664000201500020150000000131215203533226024206 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'eu', { loadError: 'Errorea gertatu da fitxategia irakurtzean.', networkError: 'Sareko errorea gertatu da fitxategia kargatzean.', httpError404: 'HTTP errorea gertatu da fitxategia kargatzean (404: Fitxategia ez da aurkitu).', httpError403: 'HTTP errorea gertatu da fitxategia kargatzean (403: Debekatuta).', httpError: 'HTTP errorea gertatu da fitxategia kargatzean (errore-egoera: %1).', noUrlError: 'Kargatzeko URLa definitu gabe.', responseError: 'Zerbitzariaren erantzun okerra.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/filetools/lang/hu.js0000664000201500020150000000131315203533226024212 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'filetools', 'hu', { loadError: 'Hiba történt a fájl olvasása közben.', networkError: 'Hálózati hiba történt a fájl feltöltése közben.', httpError404: 'HTTP hiba történt a fájl feltöltése alatt (404: A fájl nem található).', httpError403: 'HTTP hiba történt a fájl feltöltése alatt (403: Tiltott).', httpError: 'HTTP hiba történt a fájl feltöltése alatt (hiba státusz: %1).', noUrlError: 'Feltöltési URL nincs megadva.', responseError: 'Helytelen szerver válasz.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadimage/0000755000201500020150000000000015203533231022602 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadimage/plugin.js0000664000201500020150000001160015203533231024436 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ 'use strict'; ( function() { var uniqueNameCounter = 0, // Black rectangle which is shown before the image is loaded. loadingImage = 'data:image/gif;base64,R0lGODlhDgAOAIAAAAAAAP///yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs='; // Returns number as a string. If a number has 1 digit only it returns it prefixed with an extra 0. function padNumber( input ) { if ( input <= 9 ) { input = '0' + input; } return String( input ); } // Returns a unique image file name. function getUniqueImageFileName( type ) { var date = new Date(), dateParts = [ date.getFullYear(), date.getMonth() + 1, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds() ]; uniqueNameCounter += 1; return 'image-' + CKEDITOR.tools.array.map( dateParts, padNumber ).join( '' ) + '-' + uniqueNameCounter + '.' + type; } CKEDITOR.plugins.add( 'uploadimage', { requires: 'uploadwidget', onLoad: function() { CKEDITOR.addCss( '.cke_upload_uploading img{' + 'opacity: 0.3' + '}' ); }, isSupportedEnvironment: function() { return CKEDITOR.plugins.clipboard.isFileApiSupported; }, init: function( editor ) { // Do not execute this paste listener if it will not be possible to upload file. if ( !this.isSupportedEnvironment() ) { return; } var fileTools = CKEDITOR.fileTools, uploadUrl = fileTools.getUploadUrl( editor.config, 'image' ); if ( !uploadUrl ) { return; } // (#5333) if ( editor.config.clipboard_handleImages ) { editor.config.clipboard_handleImages = false; CKEDITOR.warn( 'clipboard-image-handling-disabled', { editor: editor.name, plugin: 'uploadimage' } ); } // Handle images which are available in the dataTransfer. fileTools.addUploadWidget( editor, 'uploadimage', { supportedTypes: /image\/(jpeg|png|gif|bmp)/, uploadUrl: uploadUrl, fileToElement: function() { var img = new CKEDITOR.dom.element( 'img' ); img.setAttribute( 'src', loadingImage ); return img; }, parts: { img: 'img' }, onUploading: function( upload ) { // Show the image during the upload. this.parts.img.setAttribute( 'src', upload.data ); }, onUploaded: function( upload ) { // Width and height could be returned by server (https://dev.ckeditor.com/ticket/13519). var $img = this.parts.img.$, width = upload.responseData.width || $img.naturalWidth, height = upload.responseData.height || $img.naturalHeight; // Set width and height to prevent blinking. this.replaceWith( '' ); } } ); // Handle images which are not available in the dataTransfer. // This means that we need to read them from the elements. editor.on( 'paste', function( evt ) { // For performance reason do not parse data if it does not contain img tag and data attribute. if ( !evt.data.dataValue.match( / this fires another 'paste' event, so cancel it // * fire 'paste' on editor // * !canceled && fire 'afterPaste' on editor // // // PASTE EVENT - PREPROCESSING: // -- Possible dataValue types: auto, text, html. // -- Possible dataValue contents: // * text (possible \n\r) // * htmlified text (text + br,div,p - no presentational markup & attrs - depends on browser) // * html // -- Possible flags: // * htmlified - if true then content is a HTML even if no markup inside. This flag is set // for content from editable pastebins, because they 'htmlify' pasted content. // // -- Type: auto: // * content: htmlified text -> filter, unify text markup (brs, ps, divs), set type: text // * content: html -> filter, set type: html // -- Type: text: // * content: htmlified text -> filter, unify text markup // * content: html -> filter, strip presentational markup, unify text markup // -- Type: html: // * content: htmlified text -> filter, unify text markup // * content: html -> filter // // -- Phases: // * if dataValue is empty copy data from dataTransfer to dataValue (priority 1) // * filtering (priorities 3-5) - e.g. pastefromword filters // * content type sniffing (priority 6) // * markup transformations for text (priority 6) // // DRAG & DROP EXECUTION FLOWS: // -- Drag // * save to the global object: // * drag timestamp (with 'cke-' prefix), // * selected html, // * drag range, // * editor instance. // * put drag timestamp into event.dataTransfer.text // -- Drop // * if events text == saved timestamp && editor == saved editor // internal drag & drop occurred // * getRangeAtDropPosition // * create bookmarks for drag and drop ranges starting from the end of the document // * dragRange.deleteContents() // * fire 'paste' with saved html and drop range // * if events text == saved timestamp && editor != saved editor // cross editor drag & drop occurred // * getRangeAtDropPosition // * fire 'paste' with saved html // * dragRange.deleteContents() // * FF: refreshCursor on afterPaste // * if events text != saved timestamp // drop form external source occurred // * getRangeAtDropPosition // * if event contains html data then fire 'paste' with html // * else if event contains text data then fire 'paste' with encoded text // * FF: refreshCursor on afterPaste 'use strict'; ( function() { var clipboardIdDataType; // Register the plugin. CKEDITOR.plugins.add( 'clipboard', { requires: 'dialog,notification,toolbar', // jscs:disable maximumLineLength lang: 'af,ar,az,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,es-mx,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,oc,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: 'copy,copy-rtl,cut,cut-rtl,paste,paste-rtl', // %REMOVE_LINE_CORE% hidpi: true, // %REMOVE_LINE_CORE% // File matchers registered by CKEDITOR.plugins.clipboard#addFileMatcher method. _supportedFileMatchers: [], init: function( editor ) { var filterType, filtersFactory = filtersFactoryFactory( editor ); if ( editor.config.forcePasteAsPlainText ) { filterType = 'plain-text'; } else if ( editor.config.pasteFilter ) { filterType = editor.config.pasteFilter; } // On Webkit the pasteFilter defaults 'semantic-content' because pasted data is so terrible // that it must be always filtered. else if ( CKEDITOR.env.webkit && !( 'pasteFilter' in editor.config ) ) { filterType = 'semantic-content'; } editor.pasteFilter = filtersFactory.get( filterType ); initPasteClipboard( editor ); initDragDrop( editor ); CKEDITOR.dialog.add( 'paste', CKEDITOR.getUrl( this.path + 'dialogs/paste.js' ) ); // Handle file paste for modern browsers except IE<10, as it does not support // custom MIME types in clipboard (#4612). var isFilePasteSupported = CKEDITOR.plugins.clipboard.isCustomDataTypesSupported || CKEDITOR.plugins.clipboard.isFileApiSupported, latestId; // Display notification for unsupported file types (#5095). CKEDITOR.plugins.clipboard.addFileMatcher( editor, testImageBase64Support ); editor.on( 'paste', function( evt ) { if ( !isFilePasteSupported ) { return; } var dataObj = evt.data, data = dataObj.dataValue, dataTransfer = dataObj.dataTransfer; // Only handle files if there is no data value provided that should take precedence over files. if ( data ) { return; } var unsupportedFileTypes = []; for ( var i = 0; i < dataTransfer.getFilesCount(); i++ ) { var file = dataTransfer.getFile( i ); if ( !isFileTypeSupported( file ) ) { unsupportedFileTypes.push( file.type ); } } displayUnsupportedFileTypesNotification( unsupportedFileTypes ); }, null, null, 1 ); // Convert image file (if present) to base64 string. // Do it as the first step as the conversion is asynchronous and should hold all further paste processing. editor.on( 'paste', function( evt ) { if ( !isFilePasteSupported || !editor.config.clipboard_handleImages ) { return; } var dataObj = evt.data, data = dataObj.dataValue, dataTransfer = dataObj.dataTransfer; // If data empty check for image content inside data transfer. https://dev.ckeditor.com/ticket/16705 // Allow both dragging and dropping and pasting images as base64 (#4681). if ( data || !isFileData( evt, dataTransfer ) ) { return; } var file = dataTransfer.getFile( 0 ); if ( !testImageBase64Support( file ) ) { return; } var fileReader = new FileReader(); // Convert image file to img tag with base64 image. fileReader.addEventListener( 'load', function() { evt.data.dataValue = ''; editor.fire( 'paste', evt.data ); }, false ); // Proceed with normal flow if reading file was aborted. fileReader.addEventListener( 'abort', function() { // (#4681) setCustomIEEventAttribute( evt ); editor.fire( 'paste', evt.data ); }, false ); // Proceed with normal flow if reading file failed. fileReader.addEventListener( 'error', function() { // (#4681) setCustomIEEventAttribute( evt ); editor.fire( 'paste', evt.data ); }, false ); fileReader.readAsDataURL( file ); latestId = dataObj.dataTransfer.id; evt.stop(); }, null, null, 1 ); function testImageBase64Support( file ) { var supportedImageTypes = [ 'image/png', 'image/jpeg', 'image/gif' ]; return CKEDITOR.tools.indexOf( supportedImageTypes, file.type ) !== -1; } function isFileTypeSupported( file ) { var clipboardMatchers = editor.plugins.clipboard._supportedFileMatchers; return CKEDITOR.tools.array.some( clipboardMatchers, function( matcher ) { return matcher( file ); } ); } function displayUnsupportedFileTypesNotification( fileTypes ) { if ( !fileTypes.length ) { return; } fileTypes = CKEDITOR.tools.array.unique( fileTypes ); // Make sure to remove unknown file types. fileTypes = CKEDITOR.tools.array.filter( fileTypes, function( fileType ) { return !!CKEDITOR.tools.trim( fileType ); } ); var unsupportedTypeMsg = createNotificationMessage( fileTypes.join( ', ' ) ); editor.showNotification( unsupportedTypeMsg, 'info', editor.config.clipboard_notificationDuration ); } // Prepare content for unsupported file extension notification (#4750). function createNotificationMessage( fileType ) { if ( !fileType ) { return editor.lang.clipboard.fileWithoutFormatNotSupportedNotification; } return editor.lang.clipboard.fileFormatNotSupportedNotification. replace( /\${formats\}/g, '' + fileType + '' ); } // Only dataTransfer objects containing only file should be considered // to image pasting (#3585, #3625). function isFileData( evt, dataTransfer ) { // Checking for fileTransferCancel on IE to prevent comparing empty string // from dataTransfer.id and falling into infinite loop (#4681). if ( CKEDITOR.env.ie && evt.data.fileTransferCancel ) { return false; } if ( !CKEDITOR.env.ie && ( !dataTransfer || latestId === dataTransfer.id ) ) { return false; } return dataTransfer.isFileTransfer() && dataTransfer.getFilesCount() === 1; } // To avoid falling into an infinite loop on IE10+ when the image loading state is other than `load` // add a custom data attribute. function setCustomIEEventAttribute( evt ) { if ( CKEDITOR.env.ie ) { evt.data.fileTransferCancel = true; } } editor.on( 'paste', function( evt ) { // Init `dataTransfer` if `paste` event was fired without it, so it will be always available. if ( !evt.data.dataTransfer ) { evt.data.dataTransfer = new CKEDITOR.plugins.clipboard.dataTransfer(); } // If dataValue is already set (manually or by paste bin), so do not override it. if ( evt.data.dataValue ) { return; } var dataTransfer = evt.data.dataTransfer, // IE support only text data and throws exception if we try to get html data. // This html data object may also be empty if we drag content of the textarea. value = dataTransfer.getData( 'text/html' ); if ( value ) { evt.data.dataValue = value; evt.data.type = 'html'; } else { // Try to get text data otherwise. value = dataTransfer.getData( 'text/plain' ); if ( value ) { evt.data.dataValue = editor.editable().transformPlainTextToHtml( value ); evt.data.type = 'text'; } } }, null, null, 1 ); editor.on( 'paste', function( evt ) { var data = evt.data.dataValue, blockElements = CKEDITOR.dtd.$block; // Filter webkit garbage. if ( data.indexOf( 'Apple-' ) > -1 ) { // Replace special webkit's   with simple space, because webkit // produces them even for normal spaces. data = data.replace( / <\/span>/gi, ' ' ); // Strip around white-spaces when not in forced 'html' content type. // This spans are created only when pasting plain text into Webkit, // but for safety reasons remove them always. if ( evt.data.type != 'html' ) { data = data.replace( /]*>([^<]*)<\/span>/gi, function( all, spaces ) { // Replace tabs with 4 spaces like Fx does. return spaces.replace( /\t/g, '    ' ); } ); } // This br is produced only when copying & pasting HTML content. if ( data.indexOf( '
    ' ) > -1 ) { evt.data.startsWithEOL = 1; evt.data.preSniffing = 'html'; // Mark as not text. data = data.replace( /
    /, '' ); } // Remove all other classes. data = data.replace( /(<[^>]+) class="Apple-[^"]*"/gi, '$1' ); } // Strip editable that was copied from inside. (https://dev.ckeditor.com/ticket/9534) if ( data.match( /^<[^<]+cke_(editable|contents)/i ) ) { var tmp, editable_wrapper, wrapper = new CKEDITOR.dom.element( 'div' ); wrapper.setHtml( data ); // Verify for sure and check for nested editor UI parts. (https://dev.ckeditor.com/ticket/9675) while ( wrapper.getChildCount() == 1 && ( tmp = wrapper.getFirst() ) && tmp.type == CKEDITOR.NODE_ELEMENT && // Make sure first-child is element. ( tmp.hasClass( 'cke_editable' ) || tmp.hasClass( 'cke_contents' ) ) ) { wrapper = editable_wrapper = tmp; } // If editable wrapper was found strip it and bogus
    (added on FF). if ( editable_wrapper ) data = editable_wrapper.getHtml().replace( /
    $/i, '' ); } if ( CKEDITOR.env.ie ) { //  

    ->

    (br.cke-pasted-remove will be removed later) data = data.replace( /^ (?: |\r\n)?<(\w+)/g, function( match, elementName ) { if ( elementName.toLowerCase() in blockElements ) { evt.data.preSniffing = 'html'; // Mark as not a text. return '<' + elementName; } return match; } ); } else if ( CKEDITOR.env.webkit ) { //


    ->


    // We don't mark br, because this situation can happen for htmlified text too. data = data.replace( /<\/(\w+)>

    <\/div>$/, function( match, elementName ) { if ( elementName in blockElements ) { evt.data.endsWithEOL = 1; return ''; } return match; } ); } else if ( CKEDITOR.env.gecko ) { // Firefox adds bogus
    when user pasted text followed by space(s). data = data.replace( /(\s)
    $/, '$1' ); } evt.data.dataValue = data; }, null, null, 3 ); editor.on( 'paste', function( evt ) { var dataObj = evt.data, type = editor._.nextPasteType || dataObj.type, data = dataObj.dataValue, trueType, // Default is 'html'. defaultType = editor.config.clipboard_defaultContentType || 'html', transferType = dataObj.dataTransfer.getTransferType( editor ), isExternalPaste = transferType == CKEDITOR.DATA_TRANSFER_EXTERNAL, isActiveForcePAPT = editor.config.forcePasteAsPlainText === true; // If forced type is 'html' we don't need to know true data type. if ( type == 'html' || dataObj.preSniffing == 'html' ) { trueType = 'html'; } else { trueType = recogniseContentType( data ); } delete editor._.nextPasteType; // Unify text markup. if ( trueType == 'htmlifiedtext' ) { data = htmlifiedTextHtmlification( editor.config, data ); } // Strip presentational markup & unify text markup. // Forced plain text (dialog or forcePAPT). // Note: we do not check dontFilter option in this case, because forcePAPT was implemented // before pasteFilter and pasteFilter is automatically used on Webkit&Blink since 4.5, so // forcePAPT should have priority as it had before 4.5. if ( type == 'text' && trueType == 'html' ) { data = filterContent( editor, data, filtersFactory.get( 'plain-text' ) ); } // External paste and pasteFilter exists and filtering isn't disabled. // Or force filtering even for internal and cross-editor paste, when forcePAPT is active (#620). else if ( isExternalPaste && editor.pasteFilter && !dataObj.dontFilter || isActiveForcePAPT ) { data = filterContent( editor, data, editor.pasteFilter ); } if ( dataObj.startsWithEOL ) { data = '
    ' + data; } if ( dataObj.endsWithEOL ) { data += '
    '; } if ( type == 'auto' ) { type = ( trueType == 'html' || defaultType == 'html' ) ? 'html' : 'text'; } dataObj.type = type; dataObj.dataValue = data; delete dataObj.preSniffing; delete dataObj.startsWithEOL; delete dataObj.endsWithEOL; }, null, null, 6 ); // Inserts processed data into the editor at the end of the // events chain. editor.on( 'paste', function( evt ) { var data = evt.data; if ( data.dataValue ) { editor.insertHtml( data.dataValue, data.type, data.range ); // Defer 'afterPaste' so all other listeners for 'paste' will be fired first. // Fire afterPaste only if paste inserted some HTML. setTimeout( function() { editor.fire( 'afterPaste' ); }, 0 ); } }, null, null, 1000 ); editor.on( 'pasteDialog', function( evt ) { // TODO it's possible that this setTimeout is not needed any more, // because of changes introduced in the same commit as this comment. // Editor.getClipboardData adds listener to the dialog's events which are // fired after a while (not like 'showDialog'). setTimeout( function() { // Open default paste dialog. editor.openDialog( 'paste', evt.data ); }, 0 ); } ); } } ); function firePasteEvents( editor, data, withBeforePaste ) { if ( !data.type ) { data.type = 'auto'; } if ( withBeforePaste ) { // Fire 'beforePaste' event so clipboard flavor get customized // by other plugins. if ( editor.fire( 'beforePaste', data ) === false ) return false; // Event canceled } // Do not fire paste if there is no data (dataValue and dataTranfser are empty). // This check should be done after firing 'beforePaste' because for native paste // 'beforePaste' is by default fired even for empty clipboard. if ( !data.dataValue && data.dataTransfer.isEmpty() ) { return false; } if ( !data.dataValue ) { data.dataValue = ''; } // Because of FF bug we need to use this hack, otherwise cursor is hidden // or it is not possible to move it (https://dev.ckeditor.com/ticket/12420). // Also, check that editor.toolbox exists, because the toolbar plugin might not be loaded (https://dev.ckeditor.com/ticket/13305). // And don't forget to put focus back into the editor (#4855)! if ( CKEDITOR.env.gecko && data.method == 'drop' && editor.toolbox ) { editor.once( 'afterPaste', function() { editor.toolbox.focus(); editor.focus(); } ); } return editor.fire( 'paste', data ); } function initPasteClipboard( editor ) { var clipboard = CKEDITOR.plugins.clipboard, preventBeforePasteEvent = 0, preventPasteEvent = 0; addListeners(); addButtonsCommands(); /** * Gets clipboard data by directly accessing the clipboard (IE only) or opening the paste dialog window. * * editor.getClipboardData( function( data ) { * if ( data ) * alert( data.type + ' ' + data.dataValue ); * } ); * * @member CKEDITOR.editor * @param {Function/Object} callbackOrOptions For function, see the `callback` parameter documentation. The object was used before 4.7.0 with the `title` property, to set the paste dialog's title. * @param {Function} callback A function that will be executed with the `data` property of the * {@link CKEDITOR.editor#event-paste paste event} or `null` if none of the capturing methods succeeded. * Since 4.7.0 the `callback` should be provided as a first argument, just like in the example above. This parameter will be removed in * an upcoming major release. */ editor.getClipboardData = function( callbackOrOptions, callback ) { var beforePasteNotCanceled = false, dataType = 'auto'; // Options are optional - args shift. if ( !callback ) { callback = callbackOrOptions; callbackOrOptions = null; } // Listen at the end of listeners chain to see if event wasn't canceled // and to retrieve modified data.type. editor.on( 'beforePaste', onBeforePaste, null, null, 1000 ); // Listen with maximum priority to handle content before everyone else. // This callback will handle paste event that will be fired if direct // access to the clipboard succeed in IE. editor.on( 'paste', onPaste, null, null, 0 ); // If command didn't succeed (only IE allows to access clipboard and only if // user agrees) invoke callback with null, meaning that paste is not blocked. if ( getClipboardDataDirectly() === false ) { // Direct access to the clipboard wasn't successful so remove listener. editor.removeListener( 'paste', onPaste ); // If beforePaste was canceled do not open dialog. // Add listeners only if dialog really opened. 'pasteDialog' can be canceled. if ( editor._.forcePasteDialog && beforePasteNotCanceled && editor.fire( 'pasteDialog' ) ) { editor.on( 'pasteDialogCommit', onDialogCommit ); // 'dialogHide' will be fired after 'pasteDialogCommit'. editor.on( 'dialogHide', function( evt ) { evt.removeListener(); evt.data.removeListener( 'pasteDialogCommit', onDialogCommit ); // Notify even if user canceled dialog (clicked 'cancel', ESC, etc). if ( !evt.data._.committed ) { callback( null ); } } ); } else { callback( null ); } } function onPaste( evt ) { evt.removeListener(); evt.cancel(); callback( evt.data ); } function onBeforePaste( evt ) { evt.removeListener(); beforePasteNotCanceled = true; dataType = evt.data.type; } function onDialogCommit( evt ) { evt.removeListener(); // Cancel pasteDialogCommit so paste dialog won't automatically fire // 'paste' evt by itself. evt.cancel(); callback( { type: dataType, dataValue: evt.data.dataValue, dataTransfer: evt.data.dataTransfer, method: 'paste' } ); } }; function addButtonsCommands() { addButtonCommand( 'Cut', 'cut', createCutCopyCmd( 'cut' ), 10, 1 ); addButtonCommand( 'Copy', 'copy', createCutCopyCmd( 'copy' ), 20, 4 ); addButtonCommand( 'Paste', 'paste', createPasteCmd(), 30, 8 ); // Force adding touchend handler to paste button (#595). if ( !editor._.pasteButtons ) { editor._.pasteButtons = []; } editor._.pasteButtons.push( 'Paste' ); function addButtonCommand( buttonName, commandName, command, toolbarOrder, ctxMenuOrder ) { var lang = editor.lang.clipboard[ commandName ]; editor.addCommand( commandName, command ); editor.ui.addButton && editor.ui.addButton( buttonName, { label: lang, command: commandName, toolbar: 'clipboard,' + toolbarOrder } ); // If the "menu" plugin is loaded, register the menu item. if ( editor.addMenuItems ) { editor.addMenuItem( commandName, { label: lang, command: commandName, group: 'clipboard', order: ctxMenuOrder } ); } } } function addListeners() { editor.on( 'key', onKey ); editor.on( 'contentDom', addPasteListenersToEditable ); // For improved performance, we're checking the readOnly state on selectionChange instead of hooking a key event for that. editor.on( 'selectionChange', setToolbarStates ); // If the "contextmenu" plugin is loaded, register the listeners. if ( editor.contextMenu ) { editor.contextMenu.addListener( function() { return { cut: stateFromNamedCommand( 'cut' ), copy: stateFromNamedCommand( 'copy' ), paste: stateFromNamedCommand( 'paste' ) }; } ); // Adds 'touchend' integration with context menu paste item (#1347). var pasteListener = null; editor.on( 'menuShow', function() { // Remove previous listener. if ( pasteListener ) { pasteListener.removeListener(); pasteListener = null; } // Attach new 'touchend' listeners to context menu paste items. var item = editor.contextMenu.findItemByCommandName( 'paste' ); if ( item && item.element ) { pasteListener = item.element.on( 'touchend', function() { editor._.forcePasteDialog = true; } ); } } ); } // Detect if any of paste buttons was touched. In such case we assume that user is using // touch device and force displaying paste dialog (#595). if ( editor.ui.addButton ) { // Waiting for editor instance to be ready seems to be the most reliable way to // be sure that paste buttons are already created. editor.once( 'instanceReady', function() { if ( !editor._.pasteButtons ) { return; } CKEDITOR.tools.array.forEach( editor._.pasteButtons, function( name ) { var pasteButton = editor.ui.get( name ); // Check if button was not removed by `removeButtons` config. if ( pasteButton ) { var buttonElement = CKEDITOR.document.getById( pasteButton._.id ); if ( buttonElement ) { buttonElement.on( 'touchend', function() { editor._.forcePasteDialog = true; } ); } } } ); } ); } } // Add events listeners to editable. function addPasteListenersToEditable() { var editable = editor.editable(); if ( CKEDITOR.plugins.clipboard.isCustomCopyCutSupported ) { var initOnCopyCut = function( evt ) { // There shouldn't be anything to copy/cut when selection is collapsed (#869). if ( editor.getSelection().isCollapsed() ) { return; } // If user tries to cut in read-only editor, we must prevent default action (https://dev.ckeditor.com/ticket/13872). if ( !editor.readOnly || evt.name != 'cut' ) { clipboard.initPasteDataTransfer( evt, editor ); } evt.data.preventDefault(); }; editable.on( 'copy', initOnCopyCut ); editable.on( 'cut', initOnCopyCut ); // Delete content with the low priority so one can overwrite cut data. editable.on( 'cut', function() { // If user tries to cut in read-only editor, we must prevent default action. (https://dev.ckeditor.com/ticket/13872) if ( !editor.readOnly ) { editor.extractSelectedHtml(); } }, null, null, 999 ); } // We'll be catching all pasted content in one line, regardless of whether // it's introduced by a document command execution (e.g. toolbar buttons) or // user paste behaviors (e.g. CTRL+V). editable.on( clipboard.mainPasteEvent, function( evt ) { if ( clipboard.mainPasteEvent == 'beforepaste' && preventBeforePasteEvent ) { return; } // If you've just asked yourself why preventPasteEventNow() is not here, but // in listener for CTRL+V and exec method of 'paste' command // you've asked the same question we did. // // THE ANSWER: // // First thing to notice - this answer makes sense only for IE, // because other browsers don't listen for 'paste' event. // // What would happen if we move preventPasteEventNow() here? // For: // * CTRL+V - IE fires 'beforepaste', so we prevent 'paste' and pasteDataFromClipboard(). OK. // * editor.execCommand( 'paste' ) - we fire 'beforepaste', so we prevent // 'paste' and pasteDataFromClipboard() and doc.execCommand( 'Paste' ). OK. // * native context menu - IE fires 'beforepaste', so we prevent 'paste', but unfortunately // on IE we fail with pasteDataFromClipboard() here, because of... we don't know why, but // we just fail, so... we paste nothing. FAIL. // * native menu bar - the same as for native context menu. // // But don't you know any way to distinguish first two cases from last two? // Only one - special flag set in CTRL+V handler and exec method of 'paste' // command. And that's what we did using preventPasteEventNow(). pasteDataFromClipboard( evt ); } ); // It's not possible to clearly handle all four paste methods (ctrl+v, native menu bar // native context menu, editor's command) in one 'paste/beforepaste' event in IE. // // For ctrl+v & editor's command it's easy to handle pasting in 'beforepaste' listener, // so we do this. For another two methods it's better to use 'paste' event. // // 'paste' is always being fired after 'beforepaste' (except of weird one on opening native // context menu), so for two methods handled in 'beforepaste' we're canceling 'paste' // using preventPasteEvent state. // // 'paste' event in IE is being fired before getClipboardDataByPastebin executes its callback. // // QUESTION: Why didn't you handle all 4 paste methods in handler for 'paste'? // Wouldn't this just be simpler? // ANSWER: Then we would have to evt.data.preventDefault() only for native // context menu and menu bar pastes. The same with execIECommand(). // That would force us to mark CTRL+V and editor's paste command with // special flag, other than preventPasteEvent. But we still would have to // have preventPasteEvent for the second event fired by execIECommand. // Code would be longer and not cleaner. if ( clipboard.mainPasteEvent == 'beforepaste' ) { editable.on( 'paste', function( evt ) { if ( preventPasteEvent ) { return; } // Cancel next 'paste' event fired by execIECommand( 'paste' ) // at the end of this callback. preventPasteEventNow(); // Prevent native paste. evt.data.preventDefault(); pasteDataFromClipboard( evt ); // Force IE to paste content into pastebin so pasteDataFromClipboard will work. execIECommand( 'paste' ); } ); // If mainPasteEvent is 'beforePaste' (IE before Edge), // dismiss the (wrong) 'beforepaste' event fired on context/toolbar menu open. (https://dev.ckeditor.com/ticket/7953) editable.on( 'contextmenu', preventBeforePasteEventNow, null, null, 0 ); editable.on( 'beforepaste', function( evt ) { // Do not prevent event on CTRL+V and SHIFT+INS because it blocks paste (https://dev.ckeditor.com/ticket/11970). if ( evt.data && !evt.data.$.ctrlKey && !evt.data.$.shiftKey ) preventBeforePasteEventNow(); }, null, null, 0 ); } editable.on( 'beforecut', function() { !preventBeforePasteEvent && fixCut( editor ); } ); var mouseupTimeout; // Use editor.document instead of editable in non-IEs for observing mouseup // since editable won't fire the event if selection process started within // iframe and ended out of the editor (https://dev.ckeditor.com/ticket/9851). editable.attachListener( CKEDITOR.env.ie ? editable : editor.document.getDocumentElement(), 'mouseup', function() { mouseupTimeout = setTimeout( setToolbarStates, 0 ); } ); // Make sure that deferred mouseup callback isn't executed after editor instance // had been destroyed. This may happen when editor.destroy() is called in parallel // with mouseup event (i.e. a button with onclick callback) (https://dev.ckeditor.com/ticket/10219). editor.on( 'destroy', function() { clearTimeout( mouseupTimeout ); } ); editable.on( 'keyup', setToolbarStates ); } // Create object representing Cut or Copy commands. function createCutCopyCmd( type ) { return { type: type, canUndo: type == 'cut', // We can't undo copy to clipboard. startDisabled: true, fakeKeystroke: type == 'cut' ? CKEDITOR.CTRL + 88 /*X*/ : CKEDITOR.CTRL + 67 /*C*/, exec: function() { // Attempts to execute the Cut and Copy operations. function tryToCutCopy( type ) { if ( CKEDITOR.env.ie ) return execIECommand( type ); // non-IEs part try { // Other browsers throw an error if the command is disabled. return editor.document.$.execCommand( type, false, null ); } catch ( e ) { return false; } } this.type == 'cut' && fixCut(); var success = tryToCutCopy( this.type ); if ( !success ) { // Show cutError or copyError. editor.showNotification( editor.lang.clipboard[ this.type + 'Error' ] ); // jshint ignore:line } return success; } }; } function createPasteCmd() { return { // Snapshots are done manually by editable.insertXXX methods. canUndo: false, async: true, fakeKeystroke: CKEDITOR.CTRL + 86 /*V*/, /** * The default implementation of the paste command. * * @private * @param {CKEDITOR.editor} editor An instance of the editor where the command is being executed. * @param {Object/String} data If `data` is a string, then it is considered content that is being pasted. * Otherwise it is treated as an object with options. * @param {Boolean/String} [data.notification=true] Content for a notification shown after an unsuccessful * paste attempt. If `false`, the notification will not be displayed. This parameter was added in 4.7.0. * @param {String} [data.type='html'] The type of pasted content. There are two allowed values: * * 'html' * * 'text' * @param {String/Object} data.dataValue Content being pasted. If this parameter is an object, it * is supposed to be a `data` property of the {@link CKEDITOR.editor#paste} event. * @param {CKEDITOR.plugins.clipboard.dataTransfer} data.dataTransfer Data transfer instance connected * with the current paste action. * @member CKEDITOR.editor.commands.paste */ exec: function( editor, data ) { data = typeof data !== 'undefined' && data !== null ? data : {}; var cmd = this, notification = typeof data.notification !== 'undefined' ? data.notification : true, forcedType = data.type, keystroke = CKEDITOR.tools.keystrokeToString( editor.lang.common.keyboard, editor.getCommandKeystroke( this ) ), msg = typeof notification === 'string' ? notification : editor.lang.clipboard.pasteNotification .replace( /%1/, '' + keystroke.display + '' ), pastedContent = typeof data === 'string' ? data : data.dataValue; function callback( data, withBeforePaste ) { withBeforePaste = typeof withBeforePaste !== 'undefined' ? withBeforePaste : true; if ( data ) { data.method = 'paste'; if ( !data.dataTransfer ) { data.dataTransfer = clipboard.initPasteDataTransfer(); } firePasteEvents( editor, data, withBeforePaste ); } else if ( notification && !editor._.forcePasteDialog ) { editor.showNotification( msg, 'info', editor.config.clipboard_notificationDuration ); } // Reset dialog mode (#595). editor._.forcePasteDialog = false; editor.fire( 'afterCommandExec', { name: 'paste', command: cmd, returnValue: !!data } ); } // Force type for the next paste. Do not force if `config.forcePasteAsPlainText` set to true or 'allow-word' (#1013). if ( forcedType && editor.config.forcePasteAsPlainText !== true && editor.config.forcePasteAsPlainText !== 'allow-word' ) { editor._.nextPasteType = forcedType; } else { delete editor._.nextPasteType; } if ( typeof pastedContent === 'string' ) { callback( { dataValue: pastedContent } ); } else { editor.getClipboardData( callback ); } } }; } function preventPasteEventNow() { preventPasteEvent = 1; // For safety reason we should wait longer than 0/1ms. // We don't know how long execution of quite complex getClipboardData will take // and in for example 'paste' listener execCommand() (which fires 'paste') is called // after getClipboardData finishes. // Luckily, it's impossible to immediately fire another 'paste' event we want to handle, // because we only handle there native context menu and menu bar. setTimeout( function() { preventPasteEvent = 0; }, 100 ); } function preventBeforePasteEventNow() { preventBeforePasteEvent = 1; setTimeout( function() { preventBeforePasteEvent = 0; }, 10 ); } // Tries to execute any of the paste, cut or copy commands in IE. Returns a // boolean indicating that the operation succeeded. // @param {String} command *LOWER CASED* name of command ('paste', 'cut', 'copy'). function execIECommand( command ) { var doc = editor.document, body = doc.getBody(), enabled = false, onExec = function() { enabled = true; }; // The following seems to be the only reliable way to detect that // clipboard commands are enabled in IE. It will fire the // onpaste/oncut/oncopy events only if the security settings allowed // the command to execute. body.on( command, onExec ); // IE7: document.execCommand has problem to paste into positioned element. if ( CKEDITOR.env.version > 7 ) { doc.$.execCommand( command ); } else { doc.$.selection.createRange().execCommand( command ); } body.removeListener( command, onExec ); return enabled; } // Cutting off control type element in IE standards breaks the selection entirely. (https://dev.ckeditor.com/ticket/4881) function fixCut() { if ( !CKEDITOR.env.ie || CKEDITOR.env.quirks ) return; var sel = editor.getSelection(), control, range, dummy; if ( ( sel.getType() == CKEDITOR.SELECTION_ELEMENT ) && ( control = sel.getSelectedElement() ) ) { range = sel.getRanges()[ 0 ]; dummy = editor.document.createText( '' ); dummy.insertBefore( control ); range.setStartBefore( dummy ); range.setEndAfter( control ); sel.selectRanges( [ range ] ); // Clear up the fix if the paste wasn't succeeded. setTimeout( function() { // Element still online? if ( control.getParent() ) { dummy.remove(); sel.selectElement( control ); } }, 0 ); } } // Allow to peek clipboard content by redirecting the // pasting content into a temporary bin and grab the content of it. function getClipboardDataByPastebin( evt, callback ) { var doc = editor.document, editable = editor.editable(), cancel = function( evt ) { evt.cancel(); }, blurListener; // Avoid recursions on 'paste' event or consequent paste too fast. (https://dev.ckeditor.com/ticket/5730) if ( doc.getById( 'cke_pastebin' ) ) return; var sel = editor.getSelection(); var bms = sel.createBookmarks(); // https://dev.ckeditor.com/ticket/11384. On IE9+ we use native selectionchange (i.e. editor#selectionCheck) to cache the most // recent selection which we then lock on editable blur. See selection.js for more info. // selectionchange fired before getClipboardDataByPastebin() cached selection // before creating bookmark (cached selection will be invalid, because bookmarks modified the DOM), // so we need to fire selectionchange one more time, to store current seleciton. // Selection will be locked when we focus pastebin. if ( CKEDITOR.env.ie ) sel.root.fire( 'selectionchange' ); // Create container to paste into. // For rich content we prefer to use "body" since it holds // the least possibility to be splitted by pasted content, while this may // breaks the text selection on a frame-less editable, "div" would be // the best one in that case. // In another case on old IEs moving the selection into a "body" paste bin causes error panic. // Body can't be also used for Opera which fills it with
    // what is indistinguishable from pasted
    (copying
    in Opera isn't possible, // but it can be copied from other browser). var pastebin = new CKEDITOR.dom.element( ( CKEDITOR.env.webkit || editable.is( 'body' ) ) && !CKEDITOR.env.ie ? 'body' : 'div', doc ); pastebin.setAttributes( { id: 'cke_pastebin', 'data-cke-temp': '1' } ); var containerOffset = 0, offsetParent, win = doc.getWindow(); if ( CKEDITOR.env.webkit ) { // It's better to paste close to the real paste destination, so inherited styles // (which Webkits will try to compensate by styling span) differs less from the destination's one. editable.append( pastebin ); // Style pastebin like .cke_editable, to minimize differences between origin and destination. (https://dev.ckeditor.com/ticket/9754) pastebin.addClass( 'cke_editable' ); // Compensate position of offsetParent. if ( !editable.is( 'body' ) ) { // We're not able to get offsetParent from pastebin (body element), so check whether // its parent (editable) is positioned. if ( editable.getComputedStyle( 'position' ) != 'static' ) offsetParent = editable; // And if not - safely get offsetParent from editable. else offsetParent = CKEDITOR.dom.element.get( editable.$.offsetParent ); containerOffset = offsetParent.getDocumentPosition().y; } } else { // Opera and IE doesn't allow to append to html element. editable.getAscendant( CKEDITOR.env.ie ? 'body' : 'html', 1 ).append( pastebin ); } pastebin.setStyles( { position: 'absolute', // Position the bin at the top (+10 for safety) of viewport to avoid any subsequent document scroll. top: ( win.getScrollPosition().y - containerOffset + 10 ) + 'px', width: '1px', // Caret has to fit in that height, otherwise browsers like Chrome & Opera will scroll window to show it. // Set height equal to viewport's height - 20px (safety gaps), minimum 1px. height: Math.max( 1, win.getViewPaneSize().height - 20 ) + 'px', overflow: 'hidden', // Reset styles that can mess up pastebin position. margin: 0, padding: 0 } ); // Paste fails in Safari when the body tag has 'user-select: none'. (https://dev.ckeditor.com/ticket/12506) if ( CKEDITOR.env.safari ) pastebin.setStyles( CKEDITOR.tools.cssVendorPrefix( 'user-select', 'text' ) ); // Check if the paste bin now establishes new editing host. var isEditingHost = pastebin.getParent().isReadOnly(); if ( isEditingHost ) { // Hide the paste bin. pastebin.setOpacity( 0 ); // And make it editable. pastebin.setAttribute( 'contenteditable', true ); } // Transparency is not enough since positioned non-editing host always shows // resize handler, pull it off the screen instead. else { pastebin.setStyle( editor.config.contentsLangDirection == 'ltr' ? 'left' : 'right', '-10000px' ); } editor.on( 'selectionChange', cancel, null, null, 0 ); // Webkit fill fire blur on editable when moving selection to // pastebin (if body is used). Cancel it because it causes incorrect // selection lock in case of inline editor (https://dev.ckeditor.com/ticket/10644). // The same seems to apply to Firefox (https://dev.ckeditor.com/ticket/10787). if ( CKEDITOR.env.webkit || CKEDITOR.env.gecko ) blurListener = editable.once( 'blur', cancel, null, null, -100 ); // Temporarily move selection to the pastebin. isEditingHost && pastebin.focus(); var range = new CKEDITOR.dom.range( pastebin ); range.selectNodeContents( pastebin ); var selPastebin = range.select(); // If non-native paste is executed, IE will open security alert and blur editable. // Editable will then lock selection inside itself and after accepting security alert // this selection will be restored. We overwrite stored selection, so it's restored // in pastebin. (https://dev.ckeditor.com/ticket/9552) if ( CKEDITOR.env.ie ) { blurListener = editable.once( 'blur', function() { editor.lockSelection( selPastebin ); } ); } var scrollTop = CKEDITOR.document.getWindow().getScrollPosition().y; // Wait a while and grab the pasted contents. setTimeout( function() { // Restore main window's scroll position which could have been changed // by browser in cases described in https://dev.ckeditor.com/ticket/9771. if ( CKEDITOR.env.webkit ) CKEDITOR.document.getBody().$.scrollTop = scrollTop; // Blur will be fired only on non-native paste. In other case manually remove listener. blurListener && blurListener.removeListener(); // Restore properly the document focus. (https://dev.ckeditor.com/ticket/8849) if ( CKEDITOR.env.ie ) editable.focus(); // IE7: selection must go before removing pastebin. (https://dev.ckeditor.com/ticket/8691) sel.selectBookmarks( bms ); pastebin.remove(); // Grab the HTML contents. // We need to look for a apple style wrapper on webkit it also adds // a div wrapper if you copy/paste the body of the editor. // Remove hidden div and restore selection. var bogusSpan; if ( CKEDITOR.env.webkit && ( bogusSpan = pastebin.getFirst() ) && ( bogusSpan.is && bogusSpan.hasClass( 'Apple-style-span' ) ) ) pastebin = bogusSpan; editor.removeListener( 'selectionChange', cancel ); callback( pastebin.getHtml() ); }, 0 ); } // Try to get content directly on IE from clipboard, without native event // being fired before. In other words - synthetically get clipboard data, if it's possible. // mainPasteEvent will be fired, so if forced native paste: // * worked, getClipboardDataByPastebin will grab it, // * didn't work, dataValue and dataTransfer will be empty and editor#paste won't be fired. // Clipboard data can be accessed directly only on IEs older than Edge. // On other browsers we should fire beforePaste event and return false. function getClipboardDataDirectly() { if ( clipboard.mainPasteEvent == 'paste' ) { editor.fire( 'beforePaste', { type: 'auto', method: 'paste' } ); return false; } // Prevent IE from pasting at the begining of the document. editor.focus(); // Command will be handled by 'beforepaste', but as // execIECommand( 'paste' ) will fire also 'paste' event // we're canceling it. preventPasteEventNow(); // https://dev.ckeditor.com/ticket/9247: Lock focus to prevent IE from hiding toolbar for inline editor. var focusManager = editor.focusManager; focusManager.lock(); if ( editor.editable().fire( clipboard.mainPasteEvent ) && !execIECommand( 'paste' ) ) { focusManager.unlock(); return false; } focusManager.unlock(); return true; } // Listens for some clipboard related keystrokes, so they get customized. // Needs to be bind to keydown event. function onKey( event ) { if ( editor.mode != 'wysiwyg' ) return; switch ( event.data.keyCode ) { // Paste case CKEDITOR.CTRL + 86: // CTRL+V case CKEDITOR.SHIFT + 45: // SHIFT+INS var editable = editor.editable(); // Cancel 'paste' event because ctrl+v is for IE handled // by 'beforepaste'. preventPasteEventNow(); // Simulate 'beforepaste' event for all browsers using 'paste' as main event. if ( clipboard.mainPasteEvent == 'paste' ) { editable.fire( 'beforepaste' ); } return; // Cut case CKEDITOR.CTRL + 88: // CTRL+X case CKEDITOR.SHIFT + 46: // SHIFT+DEL // Save Undo snapshot. editor.fire( 'saveSnapshot' ); // Save before cut setTimeout( function() { editor.fire( 'saveSnapshot' ); // Save after cut }, 50 ); // OSX is slow (https://dev.ckeditor.com/ticket/11416). } } function pasteDataFromClipboard( evt ) { // Default type is 'auto', but can be changed by beforePaste listeners. var eventData = { type: 'auto', method: 'paste', dataTransfer: clipboard.initPasteDataTransfer( evt ) }; eventData.dataTransfer.cacheData(); // Fire 'beforePaste' event so clipboard flavor get customized by other plugins. // If 'beforePaste' is canceled continue executing getClipboardDataByPastebin and then do nothing // (do not fire 'paste', 'afterPaste' events). This way we can grab all - synthetically // and natively pasted content and prevent its insertion into editor // after canceling 'beforePaste' event. var beforePasteNotCanceled = editor.fire( 'beforePaste', eventData ) !== false; // Do not use paste bin if the browser let us get HTML or files from dataTranfer. if ( beforePasteNotCanceled && clipboard.canClipboardApiBeTrusted( eventData.dataTransfer, editor ) ) { evt.data.preventDefault(); setTimeout( function() { firePasteEvents( editor, eventData ); }, 0 ); } else { getClipboardDataByPastebin( evt, function( data ) { // Clean up. eventData.dataValue = data.replace( /]+data-cke-bookmark[^<]*?<\/span>/ig, '' ); // Fire remaining events (without beforePaste) beforePasteNotCanceled && firePasteEvents( editor, eventData ); } ); } } function setToolbarStates() { if ( editor.mode != 'wysiwyg' ) { return; } var pasteState = stateFromNamedCommand( 'paste' ); editor.getCommand( 'cut' ).setState( stateFromNamedCommand( 'cut' ) ); editor.getCommand( 'copy' ).setState( stateFromNamedCommand( 'copy' ) ); editor.getCommand( 'paste' ).setState( pasteState ); editor.fire( 'pasteState', pasteState ); } function stateFromNamedCommand( command ) { var selection = editor.getSelection(), range = selection && selection.getRanges()[ 0 ], // We need to correctly update toolbar states on readOnly (#2775). inReadOnly = editor.readOnly || ( range && range.checkReadOnly() ); if ( inReadOnly && command in { paste: 1, cut: 1 } ) { return CKEDITOR.TRISTATE_DISABLED; } if ( command == 'paste' ) { return CKEDITOR.TRISTATE_OFF; } // Cut, copy - check if the selection is not empty. var sel = editor.getSelection(), ranges = sel.getRanges(), selectionIsEmpty = sel.getType() == CKEDITOR.SELECTION_NONE || ( ranges.length == 1 && ranges[ 0 ].collapsed ); return selectionIsEmpty ? CKEDITOR.TRISTATE_DISABLED : CKEDITOR.TRISTATE_OFF; } } // Returns: // * 'htmlifiedtext' if content looks like transformed by browser from plain text. // See clipboard/paste.html TCs for more info. // * 'html' if it is not 'htmlifiedtext'. function recogniseContentType( data ) { if ( CKEDITOR.env.webkit ) { // Plain text or (

    and text inside
    ). if ( !data.match( /^[^<]*$/g ) && !data.match( /^(
    <\/div>|
    [^<]*<\/div>)*$/gi ) ) return 'html'; } else if ( CKEDITOR.env.ie ) { // Text and
    or ( text and
    in

    - paragraphs can be separated by new \r\n ). if ( !data.match( /^([^<]|)*$/gi ) && !data.match( /^(

    ([^<]|)*<\/p>|(\r\n))*$/gi ) ) return 'html'; } else if ( CKEDITOR.env.gecko ) { // Text or
    . if ( !data.match( /^([^<]|)*$/gi ) ) return 'html'; } else { return 'html'; } return 'htmlifiedtext'; } // This function transforms what browsers produce when // pasting plain text into editable element (see clipboard/paste.html TCs // for more info) into correct HTML (similar to that produced by text2Html). function htmlifiedTextHtmlification( config, data ) { function repeatParagraphs( repeats ) { // Repeat blocks floor((n+1)/2) times. // Even number of repeats - add
    at the beginning of last

    . return CKEDITOR.tools.repeat( '

    ', ~~( repeats / 2 ) ) + ( repeats % 2 == 1 ? '
    ' : '' ); } // Replace adjacent white-spaces (EOLs too - Fx sometimes keeps them) with one space. // We have to skip \u3000 (IDEOGRAPHIC SPACE) character - it's special space character correctly rendered by the browsers (#1321). data = data.replace( /(?!\u3000)\s+/g, ' ' ) // Remove spaces from between tags. .replace( /> +<' ) // Normalize XHTML syntax and upper cased
    tags. .replace( /
    /gi, '
    ' ); // IE - lower cased tags. data = data.replace( /<\/?[A-Z]+>/g, function( match ) { return match.toLowerCase(); } ); // Don't touch single lines (no ) - nothing to do here. if ( data.match( /^[^<]$/ ) ) return data; // Webkit. if ( CKEDITOR.env.webkit && data.indexOf( '

    ' ) > -1 ) { // One line break at the beginning - insert
    data = data.replace( /^(
    (
    |)<\/div>)(?!$|(
    (
    |)<\/div>))/g, '
    ' ) // Two or more - reduce number of new lines by one. .replace( /^(
    (
    |)<\/div>){2}(?!$)/g, '
    ' ); // Two line breaks create one paragraph in Webkit. if ( data.match( /
    (
    |)<\/div>/ ) ) { data = '

    ' + data.replace( /(

    (
    |)<\/div>)+/g, function( match ) { return repeatParagraphs( match.split( '
    ' ).length + 1 ); } ) + '

    '; } // One line break create br. data = data.replace( /<\/div>
    /g, '
    ' ); // Remove remaining divs. data = data.replace( /<\/?div>/g, '' ); } // Opera and Firefox and enterMode != BR. if ( CKEDITOR.env.gecko && config.enterMode != CKEDITOR.ENTER_BR ) { // Remove bogus
    - Fx generates two for one line break. // For two line breaks it still produces two , but it's better to ignore this case than the first one. if ( CKEDITOR.env.gecko ) data = data.replace( /^

    $/, '
    ' ); // This line satisfy edge case when for Opera we have two line breaks //data = data.replace( /) if ( data.indexOf( '

    ' ) > -1 ) { // Two line breaks create one paragraph, three - 2, four - 3, etc. data = '

    ' + data.replace( /(
    ){2,}/g, function( match ) { return repeatParagraphs( match.length / 4 ); } ) + '

    '; } } return switchEnterMode( config, data ); } function filtersFactoryFactory( editor ) { var filters = {}; function setUpTags() { var tags = {}; for ( var tag in CKEDITOR.dtd ) { if ( tag.charAt( 0 ) != '$' && tag != 'div' && tag != 'span' ) { tags[ tag ] = 1; } } return tags; } function createSemanticContentFilter() { var filter = new CKEDITOR.filter( editor, {} ); filter.allow( { $1: { elements: setUpTags(), attributes: true, styles: false, classes: false } } ); return filter; } return { get: function( type ) { if ( type == 'plain-text' ) { // Does this look confusing to you? Did we forget about enter mode? // It is a trick that let's us creating one filter for edidtor, regardless of its // activeEnterMode (which as the name indicates can change during runtime). // // How does it work? // The active enter mode is passed to the filter.applyTo method. // The filter first marks all elements except
    as disallowed and then tries to remove // them. However, it cannot remove e.g. a

    element completely, because it's a basic structural element, // so it tries to replace it with an element created based on the active enter mode, eventually doing nothing. // // Now you can sleep well. return filters.plainText || ( filters.plainText = new CKEDITOR.filter( editor, 'br' ) ); } else if ( type == 'semantic-content' ) { return filters.semanticContent || ( filters.semanticContent = createSemanticContentFilter() ); } else if ( type ) { // Create filter based on rules (string or object). return new CKEDITOR.filter( editor, type ); } return null; } }; } function filterContent( editor, data, filter ) { var fragment = CKEDITOR.htmlParser.fragment.fromHtml( data ), writer = new CKEDITOR.htmlParser.basicWriter(); filter.applyTo( fragment, true, false, editor.activeEnterMode ); fragment.writeHtml( writer ); return writer.getHtml(); } function switchEnterMode( config, data ) { if ( config.enterMode == CKEDITOR.ENTER_BR ) { data = data.replace( /(<\/p>

    )+/g, function( match ) { return CKEDITOR.tools.repeat( '
    ', match.length / 7 * 2 ); } ).replace( /<\/?p>/g, '' ); } else if ( config.enterMode == CKEDITOR.ENTER_DIV ) { data = data.replace( /<(\/)?p>/g, '<$1div>' ); } return data; } function preventDefaultSetDropEffectToNone( evt ) { evt.data.preventDefault(); evt.data.$.dataTransfer.dropEffect = 'none'; } function initDragDrop( editor ) { var clipboard = CKEDITOR.plugins.clipboard; editor.on( 'contentDom', function() { var editable = editor.editable(), dropTarget = CKEDITOR.plugins.clipboard.getDropTarget( editor ), top = editor.ui.space( 'top' ), bottom = editor.ui.space( 'bottom' ); // -------------- DRAGOVER TOP & BOTTOM -------------- // Not allowing dragging on toolbar and bottom (https://dev.ckeditor.com/ticket/12613). clipboard.preventDefaultDropOnElement( top ); clipboard.preventDefaultDropOnElement( bottom ); // -------------- DRAGSTART -------------- // Listed on dragstart to mark internal and cross-editor drag & drop // and save range and selected HTML. editable.attachListener( dropTarget, 'dragstart', fireDragEvent ); // Make sure to reset data transfer (in case dragend was not called or was canceled). editable.attachListener( editor, 'dragstart', clipboard.resetDragDataTransfer, clipboard, null, 1 ); // Create a dataTransfer object and save it globally. editable.attachListener( editor, 'dragstart', function( evt ) { clipboard.initDragDataTransfer( evt, editor ); }, null, null, 2 ); editable.attachListener( editor, 'dragstart', function() { // Save drag range globally for cross editor D&D. var dragRange = clipboard.dragRange = editor.getSelection().getRanges()[ 0 ]; // Store number of children, so we can later tell if any text node was split on drop. (https://dev.ckeditor.com/ticket/13011, https://dev.ckeditor.com/ticket/13447) if ( CKEDITOR.env.ie && CKEDITOR.env.version < 10 ) { clipboard.dragStartContainerChildCount = dragRange ? getContainerChildCount( dragRange.startContainer ) : null; clipboard.dragEndContainerChildCount = dragRange ? getContainerChildCount( dragRange.endContainer ) : null; } }, null, null, 100 ); // -------------- DRAGEND -------------- // Clean up on dragend. editable.attachListener( dropTarget, 'dragend', fireDragEvent ); // Init data transfer if someone wants to use it in dragend. editable.attachListener( editor, 'dragend', clipboard.initDragDataTransfer, clipboard, null, 1 ); // When drag & drop is done we need to reset dataTransfer so the future // external drop will be not recognize as internal. editable.attachListener( editor, 'dragend', clipboard.resetDragDataTransfer, clipboard, null, 100 ); // -------------- DRAGOVER -------------- // We need to call preventDefault on dragover because otherwise if // we drop image it will overwrite document. editable.attachListener( dropTarget, 'dragover', function( evt ) { // Edge requires this handler to have `preventDefault()` regardless of the situation. if ( CKEDITOR.env.edge ) { evt.data.preventDefault(); return; } var target = evt.data.getTarget(); // Prevent reloading page when dragging image on empty document (https://dev.ckeditor.com/ticket/12619). if ( target && target.is && target.is( 'html' ) ) { evt.data.preventDefault(); return; } // If we do not prevent default dragover on IE the file path // will be loaded and we will lose content. On the other hand // if we prevent it the cursor will not we shown, so we prevent // dragover only on IE, on versions which support file API and only // if the event contains files. if ( CKEDITOR.env.ie && CKEDITOR.plugins.clipboard.isFileApiSupported && evt.data.$.dataTransfer.types.contains( 'Files' ) ) { evt.data.preventDefault(); } } ); // -------------- DROP -------------- editable.attachListener( dropTarget, 'drop', function( evt ) { // Do nothing if event was already prevented. (https://dev.ckeditor.com/ticket/13879) if ( evt.data.$.defaultPrevented ) { return; } // Cancel native drop. evt.data.preventDefault(); // We shouldn't start drop action when editor is in read only mode (#808). if ( editor.readOnly ) { return; } var target = evt.data.getTarget(), readOnly = target.isReadOnly(); // Do nothing if drop on non editable element (https://dev.ckeditor.com/ticket/13015). // The tag isn't editable (body is), but we want to allow drop on it // (so it is possible to drop below editor contents). if ( readOnly && !( target.type == CKEDITOR.NODE_ELEMENT && target.is( 'html' ) ) ) { return; } // Getting drop position is one of the most complex parts. var dropRange = clipboard.getRangeAtDropPosition( evt, editor ), dragRange = clipboard.dragRange; // Do nothing if it was not possible to get drop range. if ( !dropRange ) { return; } // Fire drop. fireDragEvent( evt, dragRange, dropRange ); }, null, null, 9999 ); // Create dataTransfer or get it, if it was created before. editable.attachListener( editor, 'drop', clipboard.initDragDataTransfer, clipboard, null, 1 ); // Execute drop action, fire paste. editable.attachListener( editor, 'drop', function( evt ) { var data = evt.data; if ( !data ) { return; } // Let user modify drag and drop range. var dropRange = data.dropRange, dragRange = data.dragRange, dataTransfer = data.dataTransfer; if ( dataTransfer.getTransferType( editor ) == CKEDITOR.DATA_TRANSFER_INTERNAL ) { // Execute drop with a timeout because otherwise selection, after drop, // on IE is in the drag position, instead of drop position. setTimeout( function() { clipboard.internalDrop( dragRange, dropRange, dataTransfer, editor ); }, 0 ); } else if ( dataTransfer.getTransferType( editor ) == CKEDITOR.DATA_TRANSFER_CROSS_EDITORS ) { crossEditorDrop( dragRange, dropRange, dataTransfer ); } else { externalDrop( dropRange, dataTransfer ); } }, null, null, 9999 ); // Cross editor drag and drop (drag in one Editor and drop in the other). function crossEditorDrop( dragRange, dropRange, dataTransfer ) { // Paste event should be fired before delete contents because otherwise // Chrome have a problem with drop range (Chrome split the drop // range container so the offset is bigger then container length). dropRange.select(); firePasteEvents( editor, { dataTransfer: dataTransfer, method: 'drop' }, 1 ); // Remove dragged content and make a snapshot. dataTransfer.sourceEditor.fire( 'saveSnapshot' ); dataTransfer.sourceEditor.editable().extractHtmlFromRange( dragRange ); // Make some selection before saving snapshot, otherwise error will be thrown, because // there will be no valid selection after content is removed. dataTransfer.sourceEditor.getSelection().selectRanges( [ dragRange ] ); dataTransfer.sourceEditor.fire( 'saveSnapshot' ); } // Drop from external source. function externalDrop( dropRange, dataTransfer ) { // Paste content into the drop position. dropRange.select(); firePasteEvents( editor, { dataTransfer: dataTransfer, method: 'drop' }, 1 ); // Usually we reset DataTranfer on dragend, // but dragend is called on the same element as dragstart // so it will not be called on on external drop. clipboard.resetDragDataTransfer(); } // Fire drag/drop events (dragstart, dragend, drop). function fireDragEvent( evt, dragRange, dropRange ) { var eventData = { $: evt.data.$, target: evt.data.getTarget() }; if ( dragRange ) { eventData.dragRange = dragRange; } if ( dropRange ) { eventData.dropRange = dropRange; } if ( editor.fire( evt.name, eventData ) === false ) { evt.data.preventDefault(); } } function getContainerChildCount( container ) { if ( container.type != CKEDITOR.NODE_ELEMENT ) { container = container.getParent(); } return container.getChildCount(); } } ); } /** * @singleton * @class CKEDITOR.plugins.clipboard */ CKEDITOR.plugins.clipboard = { /** * Adds a file matcher verifying whether a file should be supported via clipboard operations. * * In case of pasting or dragging and dropping unsupported files, * the clipboard plugin will show a notification informing a user that a given file type is not supported. * * ```javascript * CKEDITOR.plugins.clipboard.addFileMatcher( editor, function( file ) { * var supportedImageTypes = [ 'image/png', 'image/jpeg', 'image/gif' ]; * return CKEDITOR.tools.indexOf( supportedImageTypes, file.type ) !== -1; * } ); * ``` * * **Note:** This feature will not cancel the `paste` event in case of an unsupported file. * It is the integrator's responsibility to properly handle incorrect files * (e.g. by verifying if the file should be indeed uploaded via upload integrations). * * @since 4.19.0 * @param {CKEDITOR.editor} editor The editor instance. * @param {Function} matcher File matcher. */ addFileMatcher: function( editor, matcher ) { editor.plugins.clipboard._supportedFileMatchers.push( matcher ); }, /** * It returns `true` if the environment allows setting the data on copy or cut manually. This value is `false` in: * * Internet Explorer — because this browser shows the security dialog window when the script tries to set clipboard data. * * Older iOS (below version 13) — because custom data is not saved to clipboard there. * * @since 4.5.0 * @readonly * @property {Boolean} */ isCustomCopyCutSupported: ( function() { if ( CKEDITOR.env.ie && CKEDITOR.env.version < 16 ) { return false; } // There might be lower version supported as well. However, we don't have possibility to test it (#3354). if ( CKEDITOR.env.iOS && CKEDITOR.env.version < 605 ) { return false; } return true; } )(), /** * True if the environment supports MIME types and custom data types in dataTransfer/cliboardData getData/setData methods. * * @since 4.5.0 * @readonly * @property {Boolean} */ isCustomDataTypesSupported: !CKEDITOR.env.ie || CKEDITOR.env.version >= 16, /** * True if the environment supports File API. * * @since 4.5.0 * @readonly * @property {Boolean} */ isFileApiSupported: !CKEDITOR.env.ie || CKEDITOR.env.version > 9, /** * Main native paste event editable should listen to. * * **Note:** Safari does not like the {@link CKEDITOR.editor#beforePaste} event — it sometimes does not * handle Ctrl+C properly. This is probably caused by some race condition between events. * Chrome, Firefox and Edge work well with both events, so it is better to use {@link CKEDITOR.editor#paste} * which will handle pasting from e.g. browsers' menu bars. * IE7/8 does not like the {@link CKEDITOR.editor#paste} event for which it is throwing random errors. * * @since 4.5.0 * @readonly * @property {String} */ mainPasteEvent: ( CKEDITOR.env.ie && !CKEDITOR.env.edge ) ? 'beforepaste' : 'paste', /** * Adds a new paste button to the editor. * * This method should be called for buttons that should display the Paste Dialog fallback in mobile environments. * See [the rationale](https://github.com/ckeditor/ckeditor4/issues/595#issuecomment-345971174) for more * details. * * @since 4.9.0 * @param {CKEDITOR.editor} editor The editor instance. * @param {String} name Name of the button. * @param {Object} definition Definition of the button. */ addPasteButton: function( editor, name, definition ) { if ( !editor.ui.addButton ) { return; } editor.ui.addButton( name, definition ); if ( !editor._.pasteButtons ) { editor._.pasteButtons = []; } editor._.pasteButtons.push( name ); }, /** * Returns `true` if it is expected that a browser provides HTML data through the Clipboard API. * If not, this method returns `false` and as a result CKEditor will use the paste bin. Read more in * the [Clipboard Integration](https://ckeditor.com/docs/ckeditor4/latest/guide/dev_clipboard.html#clipboard-api) guide. * * @since 4.5.2 * @returns {Boolean} */ canClipboardApiBeTrusted: function( dataTransfer, editor ) { // If it's an internal or cross-editor data transfer, then it means that custom cut/copy/paste support works // and that the data were put manually on the data transfer so we can be sure that it's available. if ( dataTransfer.getTransferType( editor ) != CKEDITOR.DATA_TRANSFER_EXTERNAL ) { return true; } // In Chrome we can trust Clipboard API, with the exception of Chrome on Android (in both - mobile and desktop modes), where // clipboard API is not available so we need to check it (https://dev.ckeditor.com/ticket/13187). if ( CKEDITOR.env.chrome && !dataTransfer.isEmpty() ) { return true; } // Because of a Firefox bug HTML data are not available in some cases (e.g. paste from Word), in such cases we // need to use the pastebin (https://dev.ckeditor.com/ticket/13528, https://bugzilla.mozilla.org/show_bug.cgi?id=1183686). if ( CKEDITOR.env.gecko && ( dataTransfer.getData( 'text/html' ) || dataTransfer.getFilesCount() ) ) { return true; } // Safari fixed clipboard in 10.1 (https://bugs.webkit.org/show_bug.cgi?id=19893) (https://dev.ckeditor.com/ticket/16982). if ( CKEDITOR.env.safari && CKEDITOR.env.version >= 603 && !CKEDITOR.env.iOS ) { return true; } // Issue doesn't occur any longer in new iOS version (https://bugs.webkit.org/show_bug.cgi?id=19893#c34) (#3354). if ( CKEDITOR.env.iOS && CKEDITOR.env.version >= 605 ) { return true; } // Edge 15 added support for Clipboard API // (https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/6515107-clipboard-api), however it is // usable for our case starting from Edge 16 (#468). if ( CKEDITOR.env.edge && CKEDITOR.env.version >= 16 ) { return true; } // In older Safari and IE HTML data is not available through the Clipboard API. // In older Edge version things are also a bit messy - // https://connect.microsoft.com/IE/feedback/details/1572456/edge-clipboard-api-text-html-content-messed-up-in-event-clipboarddata // It is safer to use the paste bin in unknown cases. return false; }, /** * Returns the element that should be used as the target for the drop event. * * @since 4.5.0 * @param {CKEDITOR.editor} editor The editor instance. * @returns {CKEDITOR.dom.domObject} the element that should be used as the target for the drop event. */ getDropTarget: function( editor ) { var editable = editor.editable(); // https://dev.ckeditor.com/ticket/11123 Firefox needs to listen on document, because otherwise event won't be fired. // https://dev.ckeditor.com/ticket/11086 IE8 cannot listen on document. if ( ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) || editable.isInline() ) { return editable; } else { return editor.document; } }, /** * IE 8 & 9 split text node on drop so the first node contains the * text before the drop position and the second contains the rest. If you * drag the content from the same node you will be not be able to get * it (the range becomes invalid), so you need to join them back. * * Note that the first node in IE 8 & 9 is the original node object * but with shortened content. * * Before: * --- Text Node A ---------------------------------- * /\ * Drag position * * After (IE 8 & 9): * --- Text Node A ----- --- Text Node B ----------- * /\ /\ * Drop position Drag position * (invalid) * * After (other browsers): * --- Text Node A ---------------------------------- * /\ /\ * Drop position Drag position * * **Note:** This function is in the public scope for tests usage only. * * @since 4.5.0 * @private * @param {CKEDITOR.dom.range} dragRange The drag range. * @param {CKEDITOR.dom.range} dropRange The drop range. * @param {Number} preDragStartContainerChildCount The number of children of the drag range start container before the drop. * @param {Number} preDragEndContainerChildCount The number of children of the drag range end container before the drop. */ fixSplitNodesAfterDrop: function( dragRange, dropRange, preDragStartContainerChildCount, preDragEndContainerChildCount ) { var dropContainer = dropRange.startContainer; if ( typeof preDragEndContainerChildCount != 'number' || typeof preDragStartContainerChildCount != 'number' ) { return; } // We are only concerned about ranges anchored in elements. if ( dropContainer.type != CKEDITOR.NODE_ELEMENT ) { return; } if ( handleContainer( dragRange.startContainer, dropContainer, preDragStartContainerChildCount ) ) { return; } if ( handleContainer( dragRange.endContainer, dropContainer, preDragEndContainerChildCount ) ) { return; } function handleContainer( dragContainer, dropContainer, preChildCount ) { var dragElement = dragContainer; if ( dragElement.type == CKEDITOR.NODE_TEXT ) { dragElement = dragContainer.getParent(); } if ( dragElement.equals( dropContainer ) && preChildCount != dropContainer.getChildCount() ) { applyFix( dropRange ); return true; } } function applyFix( dropRange ) { var nodeBefore = dropRange.startContainer.getChild( dropRange.startOffset - 1 ), nodeAfter = dropRange.startContainer.getChild( dropRange.startOffset ); if ( nodeBefore && nodeBefore.type == CKEDITOR.NODE_TEXT && nodeAfter && nodeAfter.type == CKEDITOR.NODE_TEXT ) { var offset = nodeBefore.getLength(); nodeBefore.setText( nodeBefore.getText() + nodeAfter.getText() ); nodeAfter.remove(); dropRange.setStart( nodeBefore, offset ); dropRange.collapse( true ); } } }, /** * Checks whether turning the drag range into bookmarks will invalidate the drop range. * This usually happens when the drop range shares the container with the drag range and is * located after the drag range, but there are countless edge cases. * * This function is stricly related to {@link #internalDrop} which toggles * order in which it creates bookmarks for both ranges based on a value returned * by this method. In some cases this method returns a value which is not necessarily * true in terms of what it was meant to check, but it is convenient, because * we know how it is interpreted in {@link #internalDrop}, so the correct * behavior of the entire algorithm is assured. * * **Note:** This function is in the public scope for tests usage only. * * @since 4.5.0 * @private * @param {CKEDITOR.dom.range} dragRange The first range to compare. * @param {CKEDITOR.dom.range} dropRange The second range to compare. * @returns {Boolean} `true` if the first range is before the second range. */ isDropRangeAffectedByDragRange: function( dragRange, dropRange ) { var dropContainer = dropRange.startContainer, dropOffset = dropRange.endOffset; // Both containers are the same and drop offset is at the same position or later. // " A L] A " " M A " // ^ ^ if ( dragRange.endContainer.equals( dropContainer ) && dragRange.endOffset <= dropOffset ) { return true; } // Bookmark for drag start container will mess up with offsets. // " O [L A " " M A " // ^ ^ if ( dragRange.startContainer.getParent().equals( dropContainer ) && dragRange.startContainer.getIndex() < dropOffset ) { return true; } // Bookmark for drag end container will mess up with offsets. // " O] L A " " M A " // ^ ^ if ( dragRange.endContainer.getParent().equals( dropContainer ) && dragRange.endContainer.getIndex() < dropOffset ) { return true; } return false; }, /** * Internal drag and drop (drag and drop in the same editor instance). * * **Note:** This function is in the public scope for tests usage only. * * @since 4.5.0 * @private * @param {CKEDITOR.dom.range} dragRange The first range to compare. * @param {CKEDITOR.dom.range} dropRange The second range to compare. * @param {CKEDITOR.plugins.clipboard.dataTransfer} dataTransfer * @param {CKEDITOR.editor} editor */ internalDrop: function( dragRange, dropRange, dataTransfer, editor ) { var clipboard = CKEDITOR.plugins.clipboard, editable = editor.editable(), dragBookmark, dropBookmark, isDropRangeAffected; // Save and lock snapshot so there will be only // one snapshot for both remove and insert content. editor.fire( 'saveSnapshot' ); editor.fire( 'lockSnapshot', { dontUpdate: 1 } ); if ( CKEDITOR.env.ie && CKEDITOR.env.version < 10 ) { this.fixSplitNodesAfterDrop( dragRange, dropRange, clipboard.dragStartContainerChildCount, clipboard.dragEndContainerChildCount ); } // Because we manipulate multiple ranges we need to do it carefully, // changing one range (event creating a bookmark) may make other invalid. // We need to change ranges into bookmarks so we can manipulate them easily in the future. // We can change the range which is later in the text before we change the preceding range. // We call isDropRangeAffectedByDragRange to test the order of ranges. isDropRangeAffected = this.isDropRangeAffectedByDragRange( dragRange, dropRange ); if ( !isDropRangeAffected ) { dragBookmark = dragRange.createBookmark( false ); } dropBookmark = dropRange.clone().createBookmark( false ); if ( isDropRangeAffected ) { dragBookmark = dragRange.createBookmark( false ); } // Check if drop range is inside range. // This is an edge case when we drop something on editable's margin/padding. // That space is not treated as a part of the range we drag, so it is possible to drop there. // When we drop, browser tries to find closest drop position and it finds it inside drag range. (https://dev.ckeditor.com/ticket/13453) var startNode = dragBookmark.startNode, endNode = dragBookmark.endNode, dropNode = dropBookmark.startNode, dropInsideDragRange = // Must check endNode because dragRange could be collapsed in some edge cases (simulated DnD). endNode && ( startNode.getPosition( dropNode ) & CKEDITOR.POSITION_PRECEDING ) && ( endNode.getPosition( dropNode ) & CKEDITOR.POSITION_FOLLOWING ); // If the drop range happens to be inside drag range change it's position to the beginning of the drag range. if ( dropInsideDragRange ) { // We only change position of bookmark span that is connected with dropBookmark. // dropRange will be overwritten and set to the dropBookmark later. dropNode.insertBefore( startNode ); } // No we can safely delete content for the drag range... dragRange = editor.createRange(); dragRange.moveToBookmark( dragBookmark ); editable.extractHtmlFromRange( dragRange, 1 ); // ...and paste content into the drop position. dropRange = editor.createRange(); // Get actual selection with bookmarks if drop's bookmark are not in editable any longer. // This might happen after extracting content from range (#2292). if ( !dropBookmark.startNode.getCommonAncestor( editable ) ) { dropBookmark = editor.getSelection().createBookmarks()[ 0 ]; } dropRange.moveToBookmark( dropBookmark ); // We do not select drop range, because of may be in the place we can not set the selection // (e.g. between blocks, in case of block widget D&D). We put range to the paste event instead. firePasteEvents( editor, { dataTransfer: dataTransfer, method: 'drop', range: dropRange }, 1 ); editor.fire( 'unlockSnapshot' ); }, /** * Gets the range from the `drop` event. * * @since 4.5.0 * @param {Object} domEvent A native DOM drop event object. * @param {CKEDITOR.editor} editor The source editor instance. * @returns {CKEDITOR.dom.range} range at drop position. */ getRangeAtDropPosition: function( dropEvt, editor ) { var $evt = dropEvt.data.$, x = $evt.clientX, y = $evt.clientY, $range, defaultRange = editor.getSelection( true ).getRanges()[ 0 ], range = editor.createRange(); // Make testing possible. if ( dropEvt.data.testRange ) return dropEvt.data.testRange; // Webkits. if ( document.caretRangeFromPoint && editor.document.$.caretRangeFromPoint( x, y ) ) { $range = editor.document.$.caretRangeFromPoint( x, y ); range.setStart( CKEDITOR.dom.node( $range.startContainer ), $range.startOffset ); range.collapse( true ); } // FF. else if ( $evt.rangeParent ) { range.setStart( CKEDITOR.dom.node( $evt.rangeParent ), $evt.rangeOffset ); range.collapse( true ); } // IEs 9+. // We check if editable is focused to make sure that it's an internal DnD. External DnD must use the second // mechanism because of https://dev.ckeditor.com/ticket/13472#comment:6. else if ( CKEDITOR.env.ie && CKEDITOR.env.version > 8 && defaultRange && editor.editable().hasFocus ) { // On IE 9+ range by default is where we expected it. // defaultRange may be undefined if dragover was canceled (file drop). return defaultRange; } // IE 8 and all IEs if !defaultRange or external DnD. else if ( document.body.createTextRange ) { // To use this method we need a focus (which may be somewhere else in case of external drop). editor.focus(); $range = editor.document.getBody().$.createTextRange(); try { var sucess = false; // If user drop between text line IEs moveToPoint throws exception: // // Lorem ipsum pulvinar purus et euismod // // dolor sit amet,| consectetur adipiscing // * // vestibulum tincidunt augue eget tempus. // // * - drop position // | - expected cursor position // // So we try to call moveToPoint with +-1px up to +-20px above or // below original drop position to find nearest good drop position. for ( var i = 0; i < 20 && !sucess; i++ ) { if ( !sucess ) { try { $range.moveToPoint( x, y - i ); sucess = true; } catch ( err ) { } } if ( !sucess ) { try { $range.moveToPoint( x, y + i ); sucess = true; } catch ( err ) { } } } if ( sucess ) { var id = 'cke-temp-' + ( new Date() ).getTime(); $range.pasteHTML( '\u200b' ); var span = editor.document.getById( id ); range.moveToPosition( span, CKEDITOR.POSITION_BEFORE_START ); span.remove(); } else { // If the fist method does not succeed we might be next to // the short element (like header): // // Lorem ipsum pulvinar purus et euismod. // // // SOME HEADER| * // // // vestibulum tincidunt augue eget tempus. // // * - drop position // | - expected cursor position // // In such situation elementFromPoint returns proper element. Using getClientRect // it is possible to check if the cursor should be at the beginning or at the end // of paragraph. var $element = editor.document.$.elementFromPoint( x, y ), element = new CKEDITOR.dom.element( $element ), rect; if ( !element.equals( editor.editable() ) && element.getName() != 'html' ) { rect = element.getClientRect(); if ( x < rect.left ) { range.setStartAt( element, CKEDITOR.POSITION_AFTER_START ); range.collapse( true ); } else { range.setStartAt( element, CKEDITOR.POSITION_BEFORE_END ); range.collapse( true ); } } // If drop happens on no element elementFromPoint returns html or body. // // * |Lorem ipsum pulvinar purus et euismod. // // vestibulum tincidunt augue eget tempus. // // * - drop position // | - expected cursor position // // In such case we can try to use default selection. If startContainer is not // 'editable' element it is probably proper selection. else if ( defaultRange && defaultRange.startContainer && !defaultRange.startContainer.equals( editor.editable() ) ) { return defaultRange; // Otherwise we can not find any drop position and we have to return null // and cancel drop event. } else { return null; } } } catch ( err ) { return null; } } else { return null; } return range; }, /** * This function tries to link the `evt.data.dataTransfer` property of the {@link CKEDITOR.editor#dragstart}, * {@link CKEDITOR.editor#dragend} and {@link CKEDITOR.editor#drop} events to a single * {@link CKEDITOR.plugins.clipboard.dataTransfer} object. * * This method is automatically used by the core of the drag and drop functionality and * usually does not have to be called manually when using the drag and drop events. * * This method behaves differently depending on whether the drag and drop events were fired * artificially (to represent a non-native drag and drop) or whether they were caused by the native drag and drop. * * If the native event is not available, then it will create a new {@link CKEDITOR.plugins.clipboard.dataTransfer} * instance (if it does not exist already) and will link it to this and all following event objects until * the {@link #resetDragDataTransfer} method is called. It means that all three drag and drop events must be fired * in order to ensure that the data transfer is bound correctly. * * If the native event is available, then the {@link CKEDITOR.plugins.clipboard.dataTransfer} is identified * by its ID and a new instance is assigned to the `evt.data.dataTransfer` only if the ID changed or * the {@link #resetDragDataTransfer} method was called. * * @since 4.5.0 * @param {CKEDITOR.dom.event} [evt] A drop event object. * @param {CKEDITOR.editor} [sourceEditor] The source editor instance. */ initDragDataTransfer: function( evt, sourceEditor ) { // Create a new dataTransfer object based on the drop event. // If this event was used on dragstart to create dataTransfer // both dataTransfer objects will have the same id. var nativeDataTransfer = evt.data.$ ? evt.data.$.dataTransfer : null, dataTransfer = new this.dataTransfer( nativeDataTransfer, sourceEditor ); // Set dataTransfer.id only for 'dragstart' event (so for events initializing dataTransfer inside editor) (#962). if ( evt.name === 'dragstart' ) { dataTransfer.storeId(); } if ( !nativeDataTransfer ) { // No native event. if ( this.dragData ) { dataTransfer = this.dragData; } else { this.dragData = dataTransfer; } } else { // Native event. If there is the same id we will replace dataTransfer with the one // created on drag, because it contains drag editor, drag content and so on. // Otherwise (in case of drag from external source) we save new object to // the global clipboard.dragData. if ( this.dragData && dataTransfer.id == this.dragData.id ) { dataTransfer = this.dragData; } else { this.dragData = dataTransfer; } } evt.data.dataTransfer = dataTransfer; }, /** * Removes the global {@link #dragData} so the next call to {@link #initDragDataTransfer} * always creates a new instance of {@link CKEDITOR.plugins.clipboard.dataTransfer}. * * @since 4.5.0 */ resetDragDataTransfer: function() { this.dragData = null; }, /** * Global object storing the data transfer of the current drag and drop operation. * Do not use it directly, use {@link #initDragDataTransfer} and {@link #resetDragDataTransfer}. * * Note: This object is global (meaning that it is not related to a single editor instance) * in order to handle drag and drop from one editor into another. * * @since 4.5.0 * @private * @property {CKEDITOR.plugins.clipboard.dataTransfer} dragData */ /** * Range object to save the drag range and remove its content after the drop. * * @since 4.5.0 * @private * @property {CKEDITOR.dom.range} dragRange */ /** * Initializes and links data transfer objects based on the paste event. If the data * transfer object was already initialized on this event, the function will * return that object. In IE it is not possible to link copy/cut and paste events * so the method always returns a new object. The same happens if there is no paste event * passed to the method. * * @since 4.5.0 * @param {CKEDITOR.dom.event} [evt] A paste event object. * @param {CKEDITOR.editor} [sourceEditor] The source editor instance. * @returns {CKEDITOR.plugins.clipboard.dataTransfer} The data transfer object. */ initPasteDataTransfer: function( evt, sourceEditor ) { if ( !this.isCustomCopyCutSupported ) { // Edge < 16 does not support custom copy/cut, but it has some useful data in the clipboardData (https://dev.ckeditor.com/ticket/13755). return new this.dataTransfer( ( CKEDITOR.env.edge && evt && evt.data.$ && evt.data.$.clipboardData ) || null, sourceEditor ); } else if ( evt && evt.data && evt.data.$ ) { var clipboardData = evt.data.$.clipboardData, dataTransfer = new this.dataTransfer( clipboardData, sourceEditor ); // Set dataTransfer.id only for 'copy'/'cut' events (so for events initializing dataTransfer inside editor) (#962). if ( evt.name === 'copy' || evt.name === 'cut' ) { dataTransfer.storeId(); } if ( this.copyCutData && dataTransfer.id == this.copyCutData.id ) { dataTransfer = this.copyCutData; dataTransfer.$ = clipboardData; } else { this.copyCutData = dataTransfer; } return dataTransfer; } else { return new this.dataTransfer( null, sourceEditor ); } }, /** * Prevents dropping on the specified element. * * @since 4.5.0 * @param {CKEDITOR.dom.element} element The element on which dropping should be disabled. */ preventDefaultDropOnElement: function( element ) { element && element.on( 'dragover', preventDefaultSetDropEffectToNone ); } }; // Data type used to link drag and drop events. // // In IE URL data type is buggie and there is no way to mark drag & drop without // modifying text data (which would be displayed if user drop content to the textarea) // so we just read dragged text. // // In Chrome and Firefox we can use custom data types. clipboardIdDataType = CKEDITOR.plugins.clipboard.isCustomDataTypesSupported ? 'cke/id' : 'Text'; /** * Facade for the native `dataTransfer`/`clipboadData` object to hide all differences * between browsers. * * @since 4.5.0 * @class CKEDITOR.plugins.clipboard.dataTransfer * @constructor Creates a class instance. * @param {Object} [nativeDataTransfer] A native data transfer object. * @param {CKEDITOR.editor} [editor] The source editor instance. If the editor is defined, dataValue will * be created based on the editor content and the type will be 'html'. */ CKEDITOR.plugins.clipboard.dataTransfer = function( nativeDataTransfer, editor ) { if ( nativeDataTransfer ) { this.$ = nativeDataTransfer; } this._ = { metaRegExp: /^/i, fragmentRegExp: /\s*|\s*/g, types: [], data: {}, files: [], // Stores full HTML so it can be accessed asynchronously with `getData( 'text/html', true )`. nativeHtmlCache: '', normalizeType: function( type ) { type = type.toLowerCase(); if ( type == 'text' || type == 'text/plain' ) { return 'Text'; // IE support only Text and URL; } else if ( type == 'url' ) { return 'URL'; // IE support only Text and URL; } else if ( type === 'files' ) { // Do not normalize Files type (#4604). return 'Files'; } else { return type; } } }; this._.fallbackDataTransfer = new CKEDITOR.plugins.clipboard.fallbackDataTransfer( this ); // Check if ID is already created. this.id = this.getData( clipboardIdDataType ); // If there is no ID we need to create it. Different browsers needs different ID. if ( !this.id ) { if ( clipboardIdDataType == 'Text' ) { // For IE10+ only Text data type is supported and we have to compare dragged // and dropped text. If the ID is not set it means that empty string was dragged // (ex. image with no alt). We change null to empty string. this.id = ''; } else { // String for custom data type. this.id = 'cke-' + CKEDITOR.tools.getUniqueId(); } } if ( editor ) { this.sourceEditor = editor; this.setData( 'text/html', editor.getSelectedHtml( 1 ) ); // Without setData( 'text', ... ) on dragstart there is no drop event in Safari. // Also 'text' data is empty as drop to the textarea does not work if we do not put there text. if ( clipboardIdDataType != 'Text' && !this.getData( 'text/plain' ) ) { this.setData( 'text/plain', editor.getSelection().getSelectedText() ); } } /** * Data transfer ID used to bind all dataTransfer * objects based on the same event (e.g. in drag and drop events). * * @readonly * @property {String} id */ /** * A native DOM event object. * * @readonly * @property {Object} $ */ /** * Source editor — the editor where the drag starts. * Might be undefined if the drag starts outside the editor (e.g. when dropping files to the editor). * * @readonly * @property {CKEDITOR.editor} sourceEditor */ /** * Private properties and methods. * * @private * @property {Object} _ */ }; /** * Data transfer operation (drag and drop or copy and paste) started and ended in the same * editor instance. * * @since 4.5.0 * @readonly * @property {Number} [=1] * @member CKEDITOR */ CKEDITOR.DATA_TRANSFER_INTERNAL = 1; /** * Data transfer operation (drag and drop or copy and paste) started in one editor * instance and ended in another. * * @since 4.5.0 * @readonly * @property {Number} [=2] * @member CKEDITOR */ CKEDITOR.DATA_TRANSFER_CROSS_EDITORS = 2; /** * Data transfer operation (drag and drop or copy and paste) started outside of the editor. * The source of the data may be a textarea, HTML, another application, etc. * * @since 4.5.0 * @readonly * @property {Number} [=3] * @member CKEDITOR */ CKEDITOR.DATA_TRANSFER_EXTERNAL = 3; CKEDITOR.plugins.clipboard.dataTransfer.prototype = { /** * Facade for the native `getData` method. * * @param {String} type The type of data to retrieve. * @param {Boolean} [getNative=false] Indicates if the whole, original content of the dataTransfer should be returned. * Introduced in CKEditor 4.7.0. * @returns {String} type Stored data for the given type or an empty string if the data for that type does not exist. */ getData: function( type, getNative ) { function isEmpty( data ) { return data === undefined || data === null || data === ''; } function filterUnwantedCharacters( data ) { if ( typeof data !== 'string' ) { return data; } var htmlEnd = data.indexOf( '' ); if ( htmlEnd !== -1 ) { // Just cut everything after ``, so everything after htmlEnd index + length of ``. // Required to workaround bug: https://bugs.chromium.org/p/chromium/issues/detail?id=696978 return data.substring( 0, htmlEnd + 7 ); } return data; } type = this._.normalizeType( type ); var data = type == 'text/html' && getNative ? this._.nativeHtmlCache : this._.data[ type ]; if ( isEmpty( data ) ) { if ( this._.fallbackDataTransfer.isRequired() ) { data = this._.fallbackDataTransfer.getData( type, getNative ); } else { try { data = this.$.getData( type ) || ''; } catch ( e ) { data = ''; } } if ( type == 'text/html' && !getNative ) { data = this._stripHtml( data ); } } // Firefox on Linux put files paths as a text/plain data if there are files // in the dataTransfer object. We need to hide it, because files should be // handled on paste only if dataValue is empty. if ( type == 'Text' && CKEDITOR.env.gecko && this.getFilesCount() && data.substring( 0, 7 ) == 'file://' ) { data = ''; } return filterUnwantedCharacters( data ); }, /** * Facade for the native `setData` method. * * @param {String} type The type of data to retrieve. * @param {String} value The data to add. */ setData: function( type, value ) { type = this._.normalizeType( type ); if ( type == 'text/html' ) { this._.data[ type ] = this._stripHtml( value ); // If 'text/html' is set manually we also store it in `nativeHtmlCache` without modifications. this._.nativeHtmlCache = value; } else { this._.data[ type ] = value; } // There is "Unexpected call to method or property access." error if you try // to set data of unsupported type on IE. if ( !CKEDITOR.plugins.clipboard.isCustomDataTypesSupported && type != 'URL' && type != 'Text' ) { return; } // If we use the text type to bind the ID, then if someone tries to set the text, we must also // update ID accordingly. https://dev.ckeditor.com/ticket/13468. if ( clipboardIdDataType == 'Text' && type == 'Text' ) { this.id = value; } if ( this._.fallbackDataTransfer.isRequired() ) { this._.fallbackDataTransfer.setData( type, value ); } else { try { this.$.setData( type, value ); } catch ( e ) {} } }, /** * Stores dataTransfer id in native data transfer object * so it can be retrieved by other events. * * @since 4.8.0 */ storeId: function() { if ( clipboardIdDataType !== 'Text' ) { this.setData( clipboardIdDataType, this.id ); } }, /** * Gets the data transfer type. * * @param {CKEDITOR.editor} targetEditor The drop/paste target editor instance. * @returns {Number} Possible values: {@link CKEDITOR#DATA_TRANSFER_INTERNAL}, * {@link CKEDITOR#DATA_TRANSFER_CROSS_EDITORS}, {@link CKEDITOR#DATA_TRANSFER_EXTERNAL}. */ getTransferType: function( targetEditor ) { if ( !this.sourceEditor ) { return CKEDITOR.DATA_TRANSFER_EXTERNAL; } else if ( this.sourceEditor == targetEditor ) { return CKEDITOR.DATA_TRANSFER_INTERNAL; } else { return CKEDITOR.DATA_TRANSFER_CROSS_EDITORS; } }, /** * Copies the data from the native data transfer to a private cache. * This function is needed because the data from the native data transfer * is available only synchronously to the event listener. It is not possible * to get the data asynchronously, after a timeout, and the {@link CKEDITOR.editor#paste} * event is fired asynchronously — hence the need for caching the data. */ cacheData: function() { if ( !this.$ ) { return; } var that = this, i, file, files; function getAndSetData( type ) { type = that._.normalizeType( type ); var data = that.getData( type ); // Cache full html. if ( type == 'text/html' ) { that._.nativeHtmlCache = that.getData( type, true ); data = that._stripHtml( data ); } if ( data ) { that._.data[ type ] = data; } // Cache type itself (#4604). that._.types.push( type ); } // Copy data. if ( CKEDITOR.plugins.clipboard.isCustomDataTypesSupported ) { if ( this.$.types ) { for ( i = 0; i < this.$.types.length; i++ ) { getAndSetData( this.$.types[ i ] ); } } } else { getAndSetData( 'Text' ); getAndSetData( 'URL' ); } // Copy files references. file = this._getImageFromClipboard(); // Only access .files once - it's expensive in Chrome (#4807). files = this.$ && this.$.files || null; if ( files || file ) { this._.files = []; // Edge have empty files property with no length (https://dev.ckeditor.com/ticket/13755). if ( files && files.length ) { for ( i = 0; i < files.length; i++ ) { this._.files.push( files[ i ] ); } } // Don't include $.items if both $.files and $.items contains files, because, // according to spec and browsers behavior, they contain the same files. if ( this._.files.length === 0 && file ) { this._.files.push( file ); } } }, /** * Gets the number of files in the dataTransfer object. * * @returns {Number} The number of files. */ getFilesCount: function() { if ( this._.files.length ) { return this._.files.length; } // Only access .files once - it's expensive in Chrome (#4807). var files = this.$ && this.$.files || null; if ( files && files.length ) { return files.length; } return this._getImageFromClipboard() ? 1 : 0; }, /** * Gets the file at the index given. * * @param {Number} i Index. * @returns {File} File instance. */ getFile: function( i ) { if ( this._.files.length ) { return this._.files[ i ]; } // Only access .files once - it's expensive in Chrome (#4807). var files = this.$ && this.$.files || null; if ( files && files.length ) { return files[ i ]; } // File or null if the file was not found. return i === 0 ? this._getImageFromClipboard() : undefined; }, /** * Checks if the data transfer contains only files. * * @since 4.17.0 * @returns {Boolean} `true` if the object contains only files. */ isFileTransfer: function() { var types = this.getTypes(), // Firefox uses application/x-moz-file type for dropped local files. filteredTypes = CKEDITOR.tools.array.filter( types, function( type ) { return type !== 'application/x-moz-file'; } ); return filteredTypes.length === 1 && filteredTypes[ 0 ].toLowerCase() === 'files'; }, /** * Checks if the data transfer contains any data. * * @returns {Boolean} `true` if the object contains no data. */ isEmpty: function() { var typesToCheck = {}, type; // If dataTransfer contains files it is not empty. if ( this.getFilesCount() ) { return false; } CKEDITOR.tools.array.forEach( CKEDITOR.tools.object.keys( this._.data ), function( type ) { typesToCheck[ type ] = 1; } ); // Add native types. if ( this.$ ) { if ( CKEDITOR.plugins.clipboard.isCustomDataTypesSupported ) { if ( this.$.types ) { for ( var i = 0; i < this.$.types.length; i++ ) { typesToCheck[ this.$.types[ i ] ] = 1; } } } else { typesToCheck.Text = 1; typesToCheck.URL = 1; } } // Remove ID. if ( clipboardIdDataType != 'Text' ) { typesToCheck[ clipboardIdDataType ] = 0; } for ( type in typesToCheck ) { if ( typesToCheck[ type ] && this.getData( type ) !== '' ) { return false; } } return true; }, /** * Returns all MIME types inside the clipboard data. * * @since 4.13.1 * @returns {String[]} */ getTypes: function() { if ( this._.types.length > 0 ) { return this._.types; } if ( !this.$ || !this.$.types ) { return []; } return [].slice.call( this.$.types ); }, /** * When the content of the clipboard is pasted in Chrome, the clipboard data object has an empty `files` property, * but it is possible to get the file as `items[0].getAsFile();` (https://dev.ckeditor.com/ticket/12961). * * @private * @returns {File} File instance or `null` if not found. */ _getImageFromClipboard: function() { var file; try { if ( this.$ && this.$.items && this.$.items[ 0 ] ) { file = this.$.items[ 0 ].getAsFile(); // Duck typing if ( file && file.type ) { return file; } } } catch ( err ) { // noop } return undefined; }, /** * This function removes this meta information and returns only the contents of the `` element if found. * * Various environments use miscellaneous meta tags in HTML clipboard, e.g. * * * `` at the begging of the HTML data. * * Surrounding HTML with `` and `` nested within `` elements. * * @private * @param {String} html * @returns {String} */ _stripHtml: function( html ) { var result = html; // Passed HTML may be empty or null. There is no need to strip such values (#1299). if ( result && result.length ) { result = extractBodyContent( result ); // See https://dev.ckeditor.com/ticket/13583 for more details. // Additionally https://dev.ckeditor.com/ticket/16847 adds a flag allowing to get the whole, original content. result = result.replace( this._.metaRegExp, '' ); // Remove also comments. result = result.replace( this._.fragmentRegExp, '' ); } return result; function extractBodyContent( html ) { var parser = new CKEDITOR.htmlParser(), start, end; parser.onTagOpen = function( name ) { if ( name === 'body' ) { start = parser._.htmlPartsRegex.lastIndex; } }; parser.onTagClose = function( name ) { if ( name === 'body' ) { end = parser._.htmlPartsRegex.lastIndex; } }; parser.parse( html ); if ( typeof start !== 'number' || typeof end !== 'number' ) { return html; } return html.substring( start, end ).replace( /<\/body\s*>$/gi, '' ); } } }; /** * Fallback dataTransfer object which is used together with {@link CKEDITOR.plugins.clipboard.dataTransfer} * for browsers supporting Clipboard API, but not supporting custom * MIME types (Edge 16+, see [ckeditor4/issues/#962](https://github.com/ckeditor/ckeditor4/issues/962)). * * @since 4.8.0 * @class CKEDITOR.plugins.clipboard.fallbackDataTransfer * @constructor * @param {CKEDITOR.plugins.clipboard.dataTransfer} dataTransfer DataTransfer * object which internal cache and * {@link CKEDITOR.plugins.clipboard.dataTransfer#$ data transfer} objects will be reused. */ CKEDITOR.plugins.clipboard.fallbackDataTransfer = function( dataTransfer ) { /** * DataTransfer object which internal cache and * {@link CKEDITOR.plugins.clipboard.dataTransfer#$ data transfer} objects will be modified if needed. * * @private * @property {CKEDITOR.plugins.clipboard.dataTransfer} _dataTransfer */ this._dataTransfer = dataTransfer; /** * A MIME type used for storing custom MIME types. * * @private * @property {String} [_customDataFallbackType='text/html'] */ this._customDataFallbackType = 'text/html'; }; /** * True if the environment supports custom MIME types in {@link CKEDITOR.plugins.clipboard.dataTransfer#getData} * and {@link CKEDITOR.plugins.clipboard.dataTransfer#setData} methods. * * Introduced to distinguish between browsers which support only some whitelisted types (like `text/html`, `application/xml`), * but do not support custom MIME types (like `cke/id`). When the value of this property equals `null` * it means it was not yet initialized. * * This property should not be accessed directly, use {@link #isRequired} method instead. * * @private * @static * @property {Boolean} */ CKEDITOR.plugins.clipboard.fallbackDataTransfer._isCustomMimeTypeSupported = null; /** * Array containing MIME types which are not supported by native `setData`. Those types are * recognized by error which is thrown when using native `setData` with a given type * (see {@link CKEDITOR.plugins.clipboard.fallbackDataTransfer#_isUnsupportedMimeTypeError}). * * @private * @static * @property {String[]} */ CKEDITOR.plugins.clipboard.fallbackDataTransfer._customTypes = []; CKEDITOR.plugins.clipboard.fallbackDataTransfer.prototype = { /** * Whether {@link CKEDITOR.plugins.clipboard.fallbackDataTransfer fallbackDataTransfer object} should * be used when operating on native `dataTransfer`. If `true` is returned, it means custom MIME types * are not supported in the current browser (see {@link #_isCustomMimeTypeSupported}). * * @returns {Boolean} */ isRequired: function() { var fallbackDataTransfer = CKEDITOR.plugins.clipboard.fallbackDataTransfer, nativeDataTransfer = this._dataTransfer.$; if ( fallbackDataTransfer._isCustomMimeTypeSupported === null ) { // If there is no `dataTransfer` we cannot detect if fallback is needed. // Method returns `false` so regular flow will be applied. if ( !nativeDataTransfer ) { return false; } else { var testValue = 'cke test value', testType = 'cke/mimetypetest'; fallbackDataTransfer._isCustomMimeTypeSupported = false; // It looks like after our custom MIME type test Edge 17 is denying access on nativeDataTransfer (#2169). // Upstream issue: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/18089287/ if ( CKEDITOR.env.edge && CKEDITOR.env.version >= 17 ) { return true; } try { nativeDataTransfer.setData( testType, testValue ); fallbackDataTransfer._isCustomMimeTypeSupported = nativeDataTransfer.getData( testType ) === testValue; nativeDataTransfer.clearData( testType ); } catch ( e ) {} } } return !fallbackDataTransfer._isCustomMimeTypeSupported; }, /** * Returns the data of the given MIME type if stored in a regular way or in a special comment. If given type * is the same as {@link #_customDataFallbackType} the whole data without special comment is returned. * * @param {String} type * @param {Boolean} [getNative=false] Indicates if the whole, original content of the dataTransfer should be returned. * @returns {String} */ getData: function( type, getNative ) { // As cache is already checked in CKEDITOR.plugins.clipboard.dataTransfer#getData it is skipped // here. So the assumption is the given type is not in cache. var nativeData = this._getData( this._customDataFallbackType, true ); if ( getNative ) { return nativeData; } var dataComment = this._extractDataComment( nativeData ), value = null; // If we are getting the same type which may store custom data we need to extract content only. if ( type === this._customDataFallbackType ) { value = dataComment.content; } else { // If we are getting different type we need to check inside data comment if it is stored there. if ( dataComment.data && dataComment.data[ type ] ) { value = dataComment.data[ type ]; } else { // And then fallback to regular `getData`. value = this._getData( type, true ); } } return value !== null ? value : ''; }, /** * Sets given data in native `dataTransfer` object. If given MIME type is not supported it uses * {@link #_customDataFallbackType} MIME type to save data using special comment format: * * * * It is important to keep in mind that `{ type: value }` object is stringified (using `JSON.stringify`) * and encoded (using `encodeURIComponent`). * * @param {String} type * @param {String} value * @returns {String} The value which was set. */ setData: function( type, value ) { // In case of fallbackDataTransfer, cache does not reflect native data one-to-one. For example, having // types like text/plain, text/html, cke/id will result in cache storing: // // { // text/plain: value1, // text/html: value2, // cke/id: value3 // } // // and native dataTransfer storing: // // { // text/plain: value1, // text/html: value2 // } // // This way, accessing cache will always return proper value for a given type without a need for further processing. // Cache is already set in CKEDITOR.plugins.clipboard.dataTransfer#setData so it is skipped here. var isFallbackDataType = type === this._customDataFallbackType; if ( isFallbackDataType ) { value = this._applyDataComment( value, this._getFallbackTypeData() ); } var data = value, nativeDataTransfer = this._dataTransfer.$; try { nativeDataTransfer.setData( type, data ); if ( isFallbackDataType ) { // If fallback type used, the native data is different so we overwrite `nativeHtmlCache` here. this._dataTransfer._.nativeHtmlCache = data; } } catch ( e ) { if ( this._isUnsupportedMimeTypeError( e ) ) { var fallbackDataTransfer = CKEDITOR.plugins.clipboard.fallbackDataTransfer; if ( CKEDITOR.tools.indexOf( fallbackDataTransfer._customTypes, type ) === -1 ) { fallbackDataTransfer._customTypes.push( type ); } var fallbackTypeContent = this._getFallbackTypeContent(), fallbackTypeData = this._getFallbackTypeData(); fallbackTypeData[ type ] = data; try { data = this._applyDataComment( fallbackTypeContent, fallbackTypeData ); nativeDataTransfer.setData( this._customDataFallbackType, data ); // Again, fallback type was changed, so we need to refresh the cache. this._dataTransfer._.nativeHtmlCache = data; } catch ( e ) { data = ''; // Some dev logger should be added here. } } } return data; }, /** * Native getData wrapper. * * @private * @param {String} type * @param {Boolean} [skipCache=false] * @returns {String|null} */ _getData: function( type, skipCache ) { var cache = this._dataTransfer._.data; if ( !skipCache && cache[ type ] ) { return cache[ type ]; } else { try { return this._dataTransfer.$.getData( type ); } catch ( e ) { return null; } } }, /** * Returns content stored in {@link #\_customDataFallbackType}. Content is always first retrieved * from {@link #_dataTransfer} cache and then from native `dataTransfer` object. * * @private * @returns {String} */ _getFallbackTypeContent: function() { var fallbackTypeContent = this._dataTransfer._.data[ this._customDataFallbackType ]; if ( !fallbackTypeContent ) { fallbackTypeContent = this._extractDataComment( this._getData( this._customDataFallbackType, true ) ).content; } return fallbackTypeContent; }, /** * Returns custom data stored in {@link #\_customDataFallbackType}. Custom data is always first retrieved * from {@link #_dataTransfer} cache and then from native `dataTransfer` object. * * @private * @returns {Object} */ _getFallbackTypeData: function() { var fallbackTypes = CKEDITOR.plugins.clipboard.fallbackDataTransfer._customTypes, fallbackTypeData = this._extractDataComment( this._getData( this._customDataFallbackType, true ) ).data || {}, cache = this._dataTransfer._.data; CKEDITOR.tools.array.forEach( fallbackTypes, function( type ) { if ( cache[ type ] !== undefined ) { fallbackTypeData[ type ] = cache[ type ]; } else if ( fallbackTypeData[ type ] !== undefined ) { fallbackTypeData[ type ] = fallbackTypeData[ type ]; } }, this ); return fallbackTypeData; }, /** * Whether provided error means that unsupported MIME type was used when calling native `dataTransfer.setData` method. * * @private * @param {Error} error * @returns {Boolean} */ _isUnsupportedMimeTypeError: function( error ) { return error.message && error.message.search( /element not found/gi ) !== -1; }, /** * Extracts `cke-data` comment from the given content. * * @private * @param {String} content * @returns {Object} Returns an object containing extracted data as `data` * and content (without `cke-data` comment) as `content`. * @returns {Object|null} return.data Object containing `MIME type : value` pairs * or null if `cke-data` comment is not present. * @returns {String} return.content Regular content without `cke-data` comment. */ _extractDataComment: function( content ) { var result = { data: null, content: content || '' }; // At least 17 characters length: . if ( content && content.length > 16 ) { var matcher = //g, matches; matches = matcher.exec( content ); if ( matches && matches[ 1 ] ) { result.data = JSON.parse( decodeURIComponent( matches[ 1 ] ) ); result.content = content.replace( matches[ 0 ], '' ); } } return result; }, /** * Creates `cke-data` comment containing stringified and encoded data object which is prepended to a given content. * * @private * @param {String} content * @param {Object} data * @returns {String} */ _applyDataComment: function( content, data ) { var customData = ''; if ( data && CKEDITOR.tools.object.keys( data ).length ) { customData = ''; } return customData + ( content && content.length ? content : '' ); } }; } )(); /** * The default content type that is used when pasted data cannot be clearly recognized as HTML or text. * * For example: `'foo'` may come from a plain text editor or a website. It is not possible to recognize the content * type in this case, so the default type will be used. At the same time it is clear that `'example text'` is * HTML and its origin is a web page, email or another rich text editor. * * **Note:** If content type is text, then styles of the paste context are preserved. * * CKEDITOR.config.clipboard_defaultContentType = 'text'; * * See also the {@link CKEDITOR.editor#paste} event and read more about the integration with clipboard * in the {@glink guide/dev_clipboard Clipboard Deep Dive guide}. * * @since 4.0.0 * @cfg {'html'/'text'} [clipboard_defaultContentType='html'] * @member CKEDITOR.config */ /** * Fired after the user initiated a paste action, but before the data is inserted into the editor. * The listeners to this event are able to process the content before its insertion into the document. * * Read more about the integration with clipboard in the {@glink guide/dev_clipboard Clipboard Deep Dive guide}. * * See also: * * * the {@link CKEDITOR.config#pasteFilter} option, * * the {@link CKEDITOR.editor#drop} event, * * the {@link CKEDITOR.plugins.clipboard.dataTransfer} class. * * @since 3.1.0 * @event paste * @member CKEDITOR.editor * @param {CKEDITOR.editor} editor This editor instance. * @param data * @param {String} data.type The type of data in `data.dataValue`. Usually `'html'` or `'text'`, but for listeners * with a priority smaller than `6` it may also be `'auto'` which means that the content type has not been recognised yet * (this will be done by the content type sniffer that listens with priority `6`). * @param {String} data.dataValue HTML to be pasted. * @param {String} data.method Indicates the data transfer method. It could be drag and drop or copy and paste. * Possible values: `'drop'`, `'paste'`. Introduced in CKEditor 4.5. * @param {CKEDITOR.plugins.clipboard.dataTransfer} data.dataTransfer Facade for the native dataTransfer object * which provides access to various data types and files, and passes some data between linked events * (like drag and drop). Introduced in CKEditor 4.5. * @param {Boolean} [data.dontFilter=false] Whether the {@link CKEDITOR.editor#pasteFilter paste filter} should not * be applied to data. This option has no effect when `data.type` equals `'text'` which means that for instance * {@link CKEDITOR.config#forcePasteAsPlainText} has a higher priority. Introduced in CKEditor 4.5. */ /** * Fired before the {@link #paste} event. Allows to preset data type. * * **Note:** This event is deprecated. Add a `0` priority listener for the * {@link #paste} event instead. * * @deprecated * @event beforePaste * @member CKEDITOR.editor */ /** * Fired after the {@link #paste} event if content was modified. Note that if the paste * event does not insert any data, the `afterPaste` event will not be fired. * * @event afterPaste * @member CKEDITOR.editor */ /** * Internal event to open the Paste dialog window. * * * This event was not available in 4.7.0-4.8.0 versions. * * @private * @event pasteDialog * @member CKEDITOR.editor * @param {CKEDITOR.editor} editor This editor instance. * @param {Function} [data] Callback that will be passed to {@link CKEDITOR.editor#openDialog}. */ /** * Facade for the native `drop` event. Fired when the native `drop` event occurs. * * **Note:** To manipulate dropped data, use the {@link CKEDITOR.editor#paste} event. * Use the `drop` event only to control drag and drop operations (e.g. to prevent the ability to drop some content). * * Read more about integration with drag and drop in the {@glink guide/dev_clipboard Clipboard Deep Dive guide}. * * See also: * * * The {@link CKEDITOR.editor#paste} event, * * The {@link CKEDITOR.editor#dragstart} and {@link CKEDITOR.editor#dragend} events, * * The {@link CKEDITOR.plugins.clipboard.dataTransfer} class. * * @since 4.5.0 * @event drop * @member CKEDITOR.editor * @param {CKEDITOR.editor} editor This editor instance. * @param data * @param {Object} data.$ Native drop event. * @param {CKEDITOR.dom.node} data.target Drop target. * @param {CKEDITOR.plugins.clipboard.dataTransfer} data.dataTransfer DataTransfer facade. * @param {CKEDITOR.dom.range} data.dragRange Drag range, lets you manipulate the drag range. * Note that dragged HTML is saved as `text/html` data on `dragstart` so if you change the drag range * on drop, dropped HTML will not change. You need to change it manually using * {@link CKEDITOR.plugins.clipboard.dataTransfer#setData dataTransfer.setData}. * @param {CKEDITOR.dom.range} data.dropRange Drop range, lets you manipulate the drop range. */ /** * Facade for the native `dragstart` event. Fired when the native `dragstart` event occurs. * * This event can be canceled in order to block the drag start operation. It can also be fired to mimic the start of the drag and drop * operation. For instance, the `widget` plugin uses this option to integrate its custom block widget drag and drop with * the entire system. * * Read more about integration with drag and drop in the {@glink guide/dev_clipboard Clipboard Deep Dive guide}. * * See also: * * * The {@link CKEDITOR.editor#paste} event, * * The {@link CKEDITOR.editor#drop} and {@link CKEDITOR.editor#dragend} events, * * The {@link CKEDITOR.plugins.clipboard.dataTransfer} class. * * @since 4.5.0 * @event dragstart * @member CKEDITOR.editor * @param {CKEDITOR.editor} editor This editor instance. * @param data * @param {Object} data.$ Native dragstart event. * @param {CKEDITOR.dom.node} data.target Drag target. * @param {CKEDITOR.plugins.clipboard.dataTransfer} data.dataTransfer DataTransfer facade. */ /** * Facade for the native `dragend` event. Fired when the native `dragend` event occurs. * * Read more about integration with drag and drop in the {@glink guide/dev_clipboard Clipboard Deep Dive guide}. * * See also: * * * The {@link CKEDITOR.editor#paste} event, * * The {@link CKEDITOR.editor#drop} and {@link CKEDITOR.editor#dragend} events, * * The {@link CKEDITOR.plugins.clipboard.dataTransfer} class. * * @since 4.5.0 * @event dragend * @member CKEDITOR.editor * @param {CKEDITOR.editor} editor This editor instance. * @param data * @param {Object} data.$ Native dragend event. * @param {CKEDITOR.dom.node} data.target Drag target. * @param {CKEDITOR.plugins.clipboard.dataTransfer} data.dataTransfer DataTransfer facade. */ /** * Defines a filter which is applied to external data pasted or dropped into the editor. Possible values are: * * * `'plain-text'` – Content will be pasted as a plain text. * * `'semantic-content'` – Known tags (except `div`, `span`) with all attributes (except * `style` and `class`) will be kept. * * `'h1 h2 p div'` – Custom rules compatible with {@link CKEDITOR.filter}. * * `null` – Content will not be filtered by the paste filter (but it still may be filtered * by {@glink guide/dev_advanced_content_filter Advanced Content Filter}). This value can be used to * disable the paste filter in Chrome and Safari, where this option defaults to `'semantic-content'`. * * Example: * * config.pasteFilter = 'plain-text'; * * Custom setting: * * config.pasteFilter = 'h1 h2 p ul ol li; img[!src, alt]; a[!href]'; * * Based on this configuration option, a proper {@link CKEDITOR.filter} instance will be defined and assigned to the editor * as a {@link CKEDITOR.editor#pasteFilter}. You can tweak the paste filter settings on the fly on this object * as well as delete or replace it. * * var editor = CKEDITOR.replace( 'editor', { * pasteFilter: 'semantic-content' * } ); * * editor.on( 'instanceReady', function() { * // The result of this will be that all semantic content will be preserved * // except tables. * editor.pasteFilter.disallow( 'table' ); * } ); * * Note that the paste filter is applied only to **external** data. There are three data sources: * * * copied and pasted in the same editor (internal), * * copied from one editor and pasted into another (cross-editor), * * coming from all other sources like websites, MS Word, etc. (external). * * If {@link CKEDITOR.config#allowedContent Advanced Content Filter} is not disabled, then * it will also be applied to pasted and dropped data. The paste filter job is to "normalize" * external data which often needs to be handled differently than content produced by the editor. * * This setting defaults to `'semantic-content'` in Chrome, Opera and Safari (all Blink and Webkit based browsers) * due to messy HTML which these browsers keep in the clipboard. In other browsers it defaults to `null`. * * @since 4.5.0 * @cfg {String} [pasteFilter='semantic-content' in Chrome and Safari and `null` in other browsers] * @member CKEDITOR.config */ /** * {@link CKEDITOR.filter Content filter} which is used when external data is pasted or dropped into the editor * or a forced paste as plain text occurs. * * This object might be used on the fly to define rules for pasted external content. * This object is available and used if the {@link CKEDITOR.plugins.clipboard clipboard} plugin is enabled and * {@link CKEDITOR.config#pasteFilter} or {@link CKEDITOR.config#forcePasteAsPlainText} was defined. * * To enable the filter: * * var editor = CKEDITOR.replace( 'editor', { * pasteFilter: 'plain-text' * } ); * * You can also modify the filter on the fly later on: * * editor.pasteFilter = new CKEDITOR.filter( 'p h1 h2; a[!href]' ); * * Note that the paste filter is only applied to **external** data. There are three data sources: * * * copied and pasted in the same editor (internal), * * copied from one editor and pasted into another (cross-editor), * * coming from all other sources like websites, MS Word, etc. (external). * * If {@link CKEDITOR.config#allowedContent Advanced Content Filter} is not disabled, then * it will also be applied to pasted and dropped data. The paste filter job is to "normalize" * external data which often needs to be handled differently than content produced by the editor. * * @since 4.5.0 * @readonly * @property {CKEDITOR.filter} [pasteFilter] * @member CKEDITOR.editor */ /** * Duration of the notification displayed after pasting was blocked by the browser. * * @since 4.7.0 * @cfg {Number} [clipboard_notificationDuration=10000] * @member CKEDITOR.config */ CKEDITOR.config.clipboard_notificationDuration = 10000; /** * Whether to use clipboard plugin to handle image pasting and dropping, * turning images into base64 strings on browsers supporting the File API. * * @since 4.17.0 * @cfg {Boolean} [clipboard_handleImages=true] * @member CKEDITOR.config */ CKEDITOR.config.clipboard_handleImages = true; rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/dev/0000755000201500020150000000000015203533226023034 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/dev/console.js0000664000201500020150000000210715203533226025036 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/dev/dnd.html0000664000201500020150000003351015203533226024473 0ustar puckpuck Manual test for https://dev.ckeditor.com/ticket/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-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/dev/clipboard.html0000664000201500020150000001274015203533226025667 0ustar puckpuck Clipboard playground – CKEditor Sample

    CKEditor Sample — clipboard plugin playground

    Editor 6

    Content content content.

    Styled by .someClass.

    rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/0000755000201500020150000000000015203533226023177 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/zh.js0000664000201500020150000000160315203533226024160 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'zh', { copy: '複製', copyError: 'ç€è¦½å™¨çš„安全性設定ä¸å…許編輯器自動執行複製動作。請使用éµç›¤å¿«æ·éµ (Ctrl/Cmd+C) 複製。', cut: '剪下', cutError: 'ç€è¦½å™¨çš„安全性設定ä¸å…許編輯器自動執行剪下動作。請使用é盤快æ·éµ (Ctrl/Cmd+X) 剪下。', paste: '貼上', pasteNotification: '請按下「%1ã€è²¼ä¸Šã€‚您的ç€è¦½å™¨ä¸æ”¯æ´å·¥å…·åˆ—按鈕或是內容功能表é¸é …。', pasteArea: '貼上å€', pasteMsg: '請將您的內容貼於下方å€åŸŸä¸­ä¸¦æŒ‰ä¸‹ã€ŒOKã€ã€‚', fileFormatNotSupportedNotification: '䏿”¯æ´ ${formats} 檔案格å¼ã€‚', fileWithoutFormatNotSupportedNotification: '檔案格å¼ä¸æ”¯æ´ã€‚' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/nb.js0000664000201500020150000000173715203533226024146 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Trykk %1 for Ã¥ lime inn. Nettleseren din støtter ikke Ã¥ lime inn med knappen i verktøylinjen eller høyreklikkmenyen.', pasteArea: 'InnlimingsomrÃ¥de', pasteMsg: 'Lim inn innholdet i omrÃ¥det nedenfor og klikk OK.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/eo.js0000664000201500020150000000176215203533226024150 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Intergluoareo', pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/es.js0000664000201500020150000000202315203533226024143 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Zona de pegado', pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/ro.js0000664000201500020150000000220515203533226024156 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'Tăiere', 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ă', pasteNotification: 'Apasă %1 pentru adăugare. Navigatorul (browser) tău nu suportă adăugarea din clipboard cu butonul din toolbar sau cu opÈ›iunea din meniul contextual.', pasteArea: 'SuprafaÈ›a de adăugare', pasteMsg: 'Adaugă conÈ›inutul tău înăuntru zonei de mai jos È™i apasă OK.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/hr.js0000664000201500020150000000177015203533226024155 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'VaÅ¡ preglednik Vam ne dozvoljava lijepljenje obiÄnog teksta na ovaj naÄin. Za lijepljenje, pritisnite %1.', pasteArea: 'Okvir za lijepljenje', pasteMsg: 'Zalijepite vaÅ¡ sadržaj u okvir ispod i pritisnite OK.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/it.js0000664000201500020150000000177615203533226024166 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Premere %1 per incollare. Il tuo browser non permette di incollare tramite il pulsante della barra degli strumenti o tramite la voce del menu contestuale.', pasteArea: 'Area dove incollare', pasteMsg: 'Incollare il proprio contenuto all\'interno dell\'area sottostante e premere OK.', fileFormatNotSupportedNotification: 'I file in formato ${formats} non sono supportati.', fileWithoutFormatNotSupportedNotification: 'Il formato di file non è supportato.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/de-ch.js0000664000201500020150000000216315203533226024521 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'de-ch', { copy: 'Kopieren', copyError: 'Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch zu 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', pasteNotification: 'Drücken Sie %1 zum Einfügen. Ihr Browser unterstützt nicht das Einfügen über dem Knopf in der Werkzeugleiste oder dem Kontextmenü.', pasteArea: 'Einfügebereich', pasteMsg: 'Fügen Sie den Inhalt in den unteren Bereich ein und drücken Sie OK.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/sk.js0000664000201500020150000000207515203533226024160 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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. 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. Použite na to klávesnicu (Ctrl/Cmd+X).', paste: 'VložiÅ¥', pasteNotification: 'StlaÄte %1 na vloženie. Váš prehliadaÄ nepodporuje vloženie prostredníctvom tlaÄidla v nástrojovej liÅ¡te alebo voľby v kontextovom menu.', pasteArea: 'Miesto pre vloženie', pasteMsg: 'Vložte svoj obsah do nasledujúcej oblasti a stlaÄte OK.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/az.js0000664000201500020150000000152415203533226024153 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'az', { copy: 'Köçür', copyError: 'Avtomatik köçürülmÉ™si mümkün deyil. Ctrl+C basın.', cut: 'KÉ™s', cutError: 'Avtomatik kÉ™smÉ™ mümkün deyil. Ctrl+X basın.', paste: 'ÆlavÉ™ et', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Paste Area', // MISSING pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/pt.js0000664000201500020150000000200315203533226024155 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Ãrea de colagem', pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/si.js0000664000201500020150000000214715203533226024156 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'අලවන්න', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'අලවන à¶´à·Šâ€à¶»à¶¯à·šà·', pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/ko.js0000664000201500020150000000200615203533226024146 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'ko', { copy: '복사', copyError: '브ë¼ìš°ì €ì˜ 보안설정 ë•Œë¬¸ì— ë³µì‚¬í•  수 없습니다. 키보드(Ctrl/Cmd+C)를 ì´ìš©í•´ì„œ 복사하십시오.', cut: '잘ë¼ë‚´ê¸°', cutError: '브ë¼ìš°ì €ì˜ 보안설정 ë•Œë¬¸ì— ìž˜ë¼ë‚´ê¸° ê¸°ëŠ¥ì„ ì‹¤í–‰í•  수 없습니다. 키보드(Ctrl/Cmd+X)를 ì´ìš©í•´ì„œ 잘ë¼ë‚´ê¸° 하십시오', paste: '붙여넣기', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: '붙여넣기 범위', pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/mk.js0000664000201500020150000000246515203533226024155 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'mk', { copy: 'Копирај (Copy)', copyError: 'Опциите за безбедноÑÑ‚ на вашиот прелиÑтувач не дозволуваат уредувачот автоматÑки да изврши копирање. Ве молиме употребете ја таÑтатурата. (Ctrl/Cmd+C)', cut: 'ИÑечи (Cut)', cutError: 'Опциите за безбедноÑÑ‚ на вашиот прелиÑтувач не дозволуваат уредувачот автоматÑки да изврши Ñечење. Ве молиме употребете ја таÑтатурата. (Ctrl/Cmd+C)', paste: 'Залепи (Paste)', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'ПроÑтор за залепување', pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/cy.js0000664000201500020150000000201415203533226024147 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Ardal Gludo', pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/uk.js0000664000201500020150000000276315203533226024166 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'uk', { copy: 'Копіювати', copyError: 'ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÐµÐ·Ð¿ÐµÐºÐ¸ Вашого браузера не дозволÑють редактору автоматично виконувати операції копіюваннÑ. Будь лаÑка, викориÑтовуйте клавіатуру Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ (Ctrl/Cmd+C).', cut: 'Вирізати', cutError: 'ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÐµÐ·Ð¿ÐµÐºÐ¸ Вашого браузера не дозволÑють редактору автоматично виконувати операції вирізуваннÑ. Будь лаÑка, викориÑтовуйте клавіатуру Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ (Ctrl/Cmd+X)', paste: 'Ð’Ñтавити', pasteNotification: 'ÐатиÑніть %1, щоб вÑтавити. Ваш браузер не підтримує вÑтавку за допомогою кнопки панелі інÑтрументів або пункту контекÑтного меню.', pasteArea: 'ОблаÑть вÑтавки', pasteMsg: 'Ð’Ñтавте вміÑÑ‚ у облаÑть нижче та натиÑніть OK.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/zh-cn.js0000664000201500020150000000166315203533226024564 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'zh-cn', { copy: 'å¤åˆ¶', copyError: '您的æµè§ˆå™¨å®‰å…¨è®¾ç½®ä¸å…许编辑器自动执行å¤åˆ¶æ“作,请使用键盘快æ·é”®(Ctrl/Cmd+C)æ¥å®Œæˆã€‚', cut: '剪切', cutError: '您的æµè§ˆå™¨å®‰å…¨è®¾ç½®ä¸å…许编辑器自动执行剪切æ“作,请使用键盘快æ·é”®(Ctrl/Cmd+X)æ¥å®Œæˆã€‚', paste: '粘贴', pasteNotification: '您的æµè§ˆå™¨ä¸æ”¯æŒé€šè¿‡å·¥å…·æ æˆ–å³é”®èœå•进行粘贴,请按 %1 进行粘贴。', pasteArea: '粘贴区域', pasteMsg: 'å°†æ‚¨çš„å†…å®¹ç²˜è´´åˆ°ä¸‹æ–¹åŒºåŸŸï¼Œç„¶åŽæŒ‰ç¡®å®šã€‚', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/sv.js0000664000201500020150000000167715203533226024202 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'sv', { copy: 'Kopiera', copyError: 'Säkerhetsinställningar i din webbläsare tillÃ¥ter inte Ã¥tgärden kopiera. Använd (Ctrl/Cmd+C) istället.', cut: 'Klipp ut', cutError: 'Säkerhetsinställningar i din webbläsare tillÃ¥ter inte Ã¥tgärden klipp ut. Använd (Ctrl/Cmd+X) istället.', paste: 'Klistra in', pasteNotification: 'Tryck pÃ¥ %1 för att klistra in. Din webbläsare stödjer inte inklistring via verktygsfältet eller snabbmenyn.', pasteArea: 'InklistringsomrÃ¥de', pasteMsg: 'Klistra in ditt innehÃ¥ll i omrÃ¥det nedan och tryck pÃ¥ OK.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/lt.js0000664000201500020150000000205515203533226024160 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Spauskite %1 kad įkliuotumÄ—te. JÅ«sų narÅ¡yklÄ— nepalaiko įklijavimo paspaudus mygtukÄ… arba kontekstinio menių galimybÄ—s.', pasteArea: 'Ä®kelti dalį', pasteMsg: 'Ä®klijuokite savo turinį į žemiau esantį laukÄ… ir paspauskite OK.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/is.js0000664000201500020150000000174215203533226024156 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Paste Area', // MISSING pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/fr-ca.js0000664000201500020150000000206715203533226024534 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Coller la zone', pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/et.js0000664000201500020150000000173615203533226024156 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Asetamiseks vajuta %1. Sinu brauser ei toeta asetamist tööriistariba nupu või kontekstimenüü valikuga.', pasteArea: 'Asetamise ala', pasteMsg: 'Aseta sisu alumisse kasti ja vajuta OK nupule.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/bs.js0000664000201500020150000000200515203533226024140 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Paste Area', // MISSING pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/pl.js0000664000201500020150000000200615203533226024150 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'NaciÅ›nij %1 by wkleić tekst. Twoja przeglÄ…darka nie pozwala na wklejanie za pomocÄ… przycisku paska narzÄ™dzi lub opcji menu kontekstowego.', pasteArea: 'Miejsce do wklejenia treÅ›ci', pasteMsg: 'Wklej treść do obszaru poniżej i naciÅ›nij OK.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/bg.js0000664000201500020150000000267715203533226024143 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'bg', { copy: 'Копирай', copyError: 'ÐаÑтройките за ÑигурноÑÑ‚ на Ð²Ð°ÑˆÐ¸Ñ Ð±Ñ€Ð°Ð·ÑƒÑŠÑ€ не разрешават на редактора да изпълни дейÑтвиÑта по копиране. За целта използвайте клавиатурата (Ctrl+C).', cut: 'Отрежи', cutError: 'ÐаÑтройките за ÑигурноÑÑ‚ на Ð²Ð°ÑˆÐ¸Ñ Ð±Ñ€Ð°ÑƒÐ·ÑŠÑ€ не позволÑват на редактора автоматично да изъплни дейÑтвиÑта за отрÑзване. За целта използвайте клавиатурата (Ctrl+X).', paste: 'Вмъкни', pasteNotification: 'ÐатиÑнете %1 за да вмъкнете. ВашиÑÑ‚ браузър не поддържа поÑтавÑне Ñ Ð±ÑƒÑ‚Ð¾Ð½ от лентата Ñ Ð¸Ð½Ñтрументи или от контекÑтното меню.', pasteArea: 'Зона за поÑтавÑне', pasteMsg: 'ПоÑтавете Ñъдържанието в зоната отдолу и натиÑнете OK.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/fa.js0000664000201500020150000000260115203533226024124 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'fa', { copy: 'رونوشت', copyError: 'تنظیمات امنیتی مرورگر شما اجازه نمیدهد Ú©Ù‡ ویرایشگر به طور خودکار عملکردهای Ú©Ù¾ÛŒ کردن را انجام دهد. Ù„Ø·ÙØ§ با دکمههای ØµÙØ­Ù‡ کلید این کار را انجام دهید (Ctrl/Cmd+C).', cut: 'برش', cutError: 'تنظیمات امنیتی مرورگر شما اجازه نمیدهد Ú©Ù‡ ویرایشگر به طور خودکار عملکردهای برش را انجام دهد. Ù„Ø·ÙØ§ با دکمههای ØµÙØ­Ù‡ کلید این کار را انجام دهید (Ctrl/Cmd+X).', paste: 'چسباندن', pasteNotification: '1% را ÙØ´Ø§Ø±Ø¯Ù‡ÛŒØ¯ تا قرار داده شود. مرورگر شما از قراردهی با دکمه نوارابزار یا گزینه منوی زمینه پشتیبانی نمیکند', pasteArea: 'محل چسباندن', pasteMsg: 'محتوای خود را در ناحیه زیر قرار دهید Ùˆ OK را ÙØ´Ø§Ø± دهید', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/ku.js0000664000201500020150000000253215203533226024160 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'ku', { copy: 'لەبەرگرتنەوە', copyError: 'پارێزی وێبگەڕەکەت ڕێگەنادات بەسەرنووسەکە Ù„Û• لکاندنی دەقی خۆکارارنە. تکایە لەبری ئەمە ئەم Ùەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+C).', cut: 'بڕین', cutError: 'پارێزی وێبگەڕەکەت ڕێگەنادات بە سەرنووسەکە لەبڕینی خۆکارانە. تکایە لەبری ئەمە ئەم Ùەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+X).', paste: 'لکاندن', pasteNotification: 'کلیک بکە لەسەر %1 بۆ لکاندنی. وێبگەڕەکەت پشتیوانی لکاندن ناکات بە دوگمەی تولامراز یان ئامرازی ناوەڕۆکی لیستە - کلیکی دەستی ڕاست. ', pasteArea: 'ناوچەی لکاندن', pasteMsg: 'ناوەڕۆکەکەت Ù„Û•Ù… پانتایی خوارەوە بلکێنە', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/bn.js0000664000201500020150000000275515203533226024147 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'bn', { copy: 'কপি', copyError: 'আপনার বà§à¦°à¦¾à¦‰à¦œà¦¾à¦°à§‡à¦° নিরাপতà§à¦¤à¦¾ সেটিংসমূহ à¦à¦¡à¦¿à¦Ÿà¦°à¦•ে সà§à¦¬à§Ÿà¦‚কà§à¦°à¦¿à§Ÿà¦­à¦¾à¦¬à§‡ কপি করার পà§à¦°à¦•à§à¦°à¦¿à§Ÿà¦¾ চালনা করার অনà§à¦®à¦¤à¦¿ দেয় না। অনà§à¦—à§à¦°à¦¹à¦ªà§‚রà§à¦¬à¦• à¦à¦‡ কাজের জনà§à¦¯ কিবোরà§à¦¡ বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨ (Ctrl/Cmd+C)।', cut: 'কাট', cutError: 'আপনার বà§à¦°à¦¾à¦‰à¦œà¦¾à¦°à§‡à¦° সà§à¦°à¦•à§à¦·à¦¾ সেটিংস à¦à¦¡à¦¿à¦Ÿà¦°à¦•ে অটোমেটিক কাট করার অনà§à¦®à¦¤à¦¿ দেয়নি। দয়া করে à¦à¦‡ কাজের জনà§à¦¯ কিবোরà§à¦¡ বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨ (Ctrl/Cmd+X)।', paste: 'পেসà§à¦Ÿ', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Paste Area', // MISSING pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/el.js0000664000201500020150000000300615203533226024136 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'el', { copy: 'ΑντιγÏαφή', copyError: 'Οι Ïυθμίσεις ασφαλείας του πεÏιηγητή σας δεν επιτÏέπουν την επιλεγμένη εÏγασία αντιγÏαφής. ΠαÏακαλώ χÏησιμοποιείστε το πληκτÏολόγιο (Ctrl/Cmd+C).', cut: 'Αποκοπή', cutError: 'Οι Ïυθμίσεις ασφαλείας του πεÏιηγητή σας δεν επιτÏέπουν την επιλεγμένη εÏγασία αποκοπής. ΠαÏακαλώ χÏησιμοποιείστε το πληκτÏολόγιο (Ctrl/Cmd+X).', paste: 'Επικόλληση', pasteNotification: 'Πατήστε %1 για επικόλληση. Ο φυλλομετÏητής σας δεν υποστηÏίζει επικόλληση με το κουμπί της γÏαμμής εÏγαλείων ή την επιλογή από το Î¼ÎµÎ½Î¿Ï Î´ÎµÎ¾Î¹Î¿Ï ÎºÎ»Î¹Îº.', pasteArea: 'ΠεÏιοχή Επικόλλησης', pasteMsg: 'Επικολλήστε το πεÏιεχόμενό σας μέσα στην πεÏιοχή παÏακάτω και πατήστε Εντάξει.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/fi.js0000664000201500020150000000171215203533226024136 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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ä', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Leikealue', pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/ru.js0000664000201500020150000000270315203533226024167 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'ru', { copy: 'Копировать', copyError: 'ÐаÑтройки безопаÑноÑти вашего браузера не разрешают редактору выполнÑть операции по копированию текÑта. ПожалуйÑта, иÑпользуйте Ð´Ð»Ñ Ñтого клавиатуру (Ctrl/Cmd+C).', cut: 'Вырезать', cutError: 'ÐаÑтройки безопаÑноÑти вашего браузера не разрешают редактору выполнÑть операции по вырезке текÑта. ПожалуйÑта, иÑпользуйте Ð´Ð»Ñ Ñтого клавиатуру (Ctrl/Cmd+X).', paste: 'Ð’Ñтавить', pasteNotification: 'Ð”Ð»Ñ Ð²Ñтавки нажмите %1. Ваш браузер не поддерживает возможноÑть вÑтавки через панель инÑтрументов или контекÑтное меню', pasteArea: 'ОблаÑть вÑтавки', pasteMsg: 'Ð’Ñтавьте контент в Ñту облаÑть и нажмите OK', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/gl.js0000664000201500020150000000200115203533226024132 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Prema %1 para pegar. O seu navegador non admite pegar co botón da barra de ferramentas ou coa opción do menú contextual.', pasteArea: 'Zona de pegado', pasteMsg: 'Pegue o contido dentro da área de abaixo e prema Aceptar.', fileFormatNotSupportedNotification: 'Os formatos de ficheiro ${formats} non son compatíbeis.', fileWithoutFormatNotSupportedNotification: 'O formato de ficheiro non está admitido.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/sr-latn.js0000664000201500020150000000177615203533226025132 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: '"Pritisnite taster %1 za lepljenje. VaÅ¡ pretraživaÄ ne dozvoljava lepljenje iz alatne trake ili menia.', pasteArea: 'Prostor za lepljenje', pasteMsg: 'Nalepite sadržaj u sledeći prostor i pritisnite taster OK.', fileFormatNotSupportedNotification: 'Formati datoteke ${formats} nisu podržani.', fileWithoutFormatNotSupportedNotification: 'Format datoteke nije podržan.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/oc.js0000664000201500020150000000214415203533226024141 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'oc', { copy: 'Copiar', copyError: 'Los paramètres de seguretat de vòstre navigador autorizan pas l\'editor a executar automaticament l\'operacion « Copiar ». Utilizatz l\'acorchi de clavièr a aqueste efièit (Ctrl/Cmd+C).', cut: 'Talhar', cutError: 'Los paramètres de seguretat de vòstre navigador autorizan pas l\'editor a executar automaticament l\'operacion « Talhar ». Utilizatz l\'acorchi de clavièr a aqueste efièit (Ctrl/Cmd+X).', paste: 'Pegar', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Paste Area', // MISSING pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/sq.js0000664000201500020150000000214215203533226024161 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Shtyp %1 për të hedhur tekstin. Shfletuesi juaj nuk mbështetë hedhjen me pullë shiriti ose alternativën e menysë kontekstuale.', pasteArea: 'Hapësira e Hedhjes', pasteMsg: 'Hidh përmbajtjen brenda hapësirës më poshtë dhe shtyp MIRË.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/pt-br.js0000664000201500020150000000206015203533226024561 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Pressione %1 para colar. Seu navegador não permite colar pelos botões da barra de tarefas ou pelo menu de contexto.', pasteArea: 'Ãrea para Colar', pasteMsg: 'Cole o conteúdo na área abaixo e pressione OK.', fileFormatNotSupportedNotification: 'Os formatos de arquivo ${formats} não são suportados.', fileWithoutFormatNotSupportedNotification: 'Formato de arquivo não suportado.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/fo.js0000664000201500020150000000200215203533226024135 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Avritingarumráði', pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/af.js0000664000201500020150000000163715203533226024134 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'af', { copy: 'Kopiëer', copyError: 'U leser se sekuriteitsinstelling belet die kopiëringsaksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+C).', cut: 'Uitsnei', cutError: 'U leser se sekuriteitsinstelling belet die outomatiese uitsnei-aksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+X).', paste: 'Byvoeg', pasteNotification: 'Druk %1 om by te voeg. You leser ondersteun nie die toolbar knoppie of inoud kieslysie opsie nie. ', pasteArea: 'Area byvoeg', pasteMsg: 'Voeg jou inhoud in die gebied onder by en druk OK', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/hi.js0000664000201500020150000000235715203533226024146 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'hi', { copy: 'कॉपी', copyError: 'आपके बà¥à¤°à¤¾à¤†à¤‰à¥›à¤° की सà¥à¤°à¤•à¥à¤·à¤¾ सॅटिनà¥à¤—à¥à¤¸ ने कॉपी करने की अनà¥à¤®à¤¤à¤¿ नहीं पà¥à¤°à¤¦à¤¾à¤¨ की है। (Ctrl/Cmd+C) का पà¥à¤°à¤¯à¥‹à¤— करें।', cut: 'कट', cutError: 'आपके बà¥à¤°à¤¾à¤‰à¥›à¤° की सà¥à¤°à¤•à¥à¤·à¤¾ सॅटिनà¥à¤—à¥à¤¸ ने कट करने की अनà¥à¤®à¤¤à¤¿ नहीं पà¥à¤°à¤¦à¤¾à¤¨ की है। (Ctrl/Cmd+X) का पà¥à¤°à¤¯à¥‹à¤— करें।', paste: 'पेसà¥à¤Ÿ', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Paste Area', // MISSING pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/km.js0000664000201500020150000000324315203533226024150 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'km', { copy: 'ចម្លង', copyError: 'ការកំណážáŸ‹ážŸáž»ážœážáŸ’ážáž—ាពរបស់កម្មវិធីរុករករបស់លោកអ្នក áž“áŸáŸ‡â€‹áž˜áž·áž“អាចធ្វើកម្មវិធីážáž¶áž€áŸ‹ážáŸ‚ងអážáŸ’ážáž”áž‘ ចំលងអážáŸ’ážáž”ទយកដោយស្វáŸáž™áž”្រវážáŸ’ážáž”ានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនáŸáŸ‡ (Ctrl/Cmd+C)។', cut: 'កាážáŸ‹áž™áž€', cutError: 'ការកំណážáŸ‹ážŸáž»ážœážáŸ’ážáž—ាពរបស់កម្មវិធីរុករករបស់លោកអ្នក áž“áŸáŸ‡â€‹áž˜áž·áž“អាចធ្វើកម្មវិធីážáž¶áž€áŸ‹ážáŸ‚ងអážáŸ’ážáž”áž‘ កាážáŸ‹áž¢ážáŸ’ážáž”ទយកដោយស្វáŸáž™áž”្រវážáŸ’ážáž”ានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនáŸáŸ‡ (Ctrl/Cmd+X) ។', paste: 'បិទ​ភ្ជាប់', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'ážáŸ†áž”ន់​បិទ​ភ្ជាប់', pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/nl.js0000664000201500020150000000173315203533226024154 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Plakken met de knop in de werkbalk wordt niet ondersteund door de browser. Gebruik de sneltoets %1 van het toetsenbord.', pasteArea: 'Plakgebied', pasteMsg: 'Plak de inhoud in het vak hieronder en druk op OK.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/ka.js0000664000201500020150000000305115203533226024131 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'ka', { copy: 'áƒáƒ¡áƒšáƒ˜', copyError: 'თქვენი ბრáƒáƒ£áƒ–ერის უსáƒáƒ¤áƒ áƒ—ხáƒáƒ”ბის პáƒáƒ áƒáƒ›áƒ”ტრები áƒáƒ  იძლევრáƒáƒ¡áƒšáƒ˜áƒ¡ áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ˜áƒ¡ áƒáƒ•ტáƒáƒ›áƒáƒ¢áƒ£áƒ áƒáƒ“ გáƒáƒœáƒ®áƒáƒ áƒªáƒ˜áƒ”ლების სáƒáƒ¨áƒ£áƒáƒšáƒ”ბáƒáƒ¡. გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნეთ კლáƒáƒ•იáƒáƒ¢áƒ£áƒ áƒ áƒáƒ›áƒ˜áƒ¡áƒ—ვის (Ctrl/Cmd+C).', cut: 'áƒáƒ›áƒáƒ­áƒ áƒ', cutError: 'თქვენი ბრáƒáƒ£áƒ–ერის უსáƒáƒ¤áƒ áƒ—ხáƒáƒ”ბის პáƒáƒ áƒáƒ›áƒ”ტრები áƒáƒ  იძლევრáƒáƒ›áƒáƒ­áƒ áƒ˜áƒ¡ áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ˜áƒ¡ áƒáƒ•ტáƒáƒ›áƒáƒ¢áƒ£áƒ áƒáƒ“ გáƒáƒœáƒ®áƒáƒ áƒªáƒ˜áƒ”ლების სáƒáƒ¨áƒ£áƒáƒšáƒ”ბáƒáƒ¡. გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნეთ კლáƒáƒ•იáƒáƒ¢áƒ£áƒ áƒ áƒáƒ›áƒ˜áƒ¡áƒ—ვის (Ctrl/Cmd+X).', paste: 'ჩáƒáƒ¡áƒ›áƒ', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'ჩáƒáƒ¡áƒ›áƒ˜áƒ¡ áƒáƒ áƒ”', pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/es-mx.js0000664000201500020150000000206315203533226024571 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'es-mx', { copy: 'Copiar', copyError: 'La configuración de seguridad de su navegador no permite al editor ejecutar automáticamente operaciones de copiado. Por favor, utilice el teclado para (Ctrl/Cmd+C).', cut: 'Cortar', cutError: 'La configuración de seguridad de su navegador no permite al editor ejecutar automáticamente operaciones de corte. Por favor, utilice el teclado para (Ctrl/Cmd+X).', paste: 'Pegar', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Paste Area', // MISSING pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/mn.js0000664000201500020150000000231115203533226024146 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'mn', { copy: 'Хуулах', copyError: 'Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хуулах үйлдÑлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+C) товчны хоÑлолыг ашиглана уу.', cut: 'Хайчлах', cutError: 'Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хайчлах үйлдÑлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+X) товчны хоÑлолыг ашиглана уу.', paste: 'Буулгах', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Paste Area', // MISSING pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/da.js0000664000201500020150000000205315203533226024123 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Tryk %1 for at sætte ind. Din browser understøtter ikke indsættelse med værktøjslinje knappen eller kontekst menuen.', pasteArea: 'Indsættelses omrÃ¥de', pasteMsg: 'Indsæt dit indhold i omrÃ¥det nedenfor og tryk OK.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/he.js0000664000201500020150000000214715203533226024137 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'he', { copy: 'העתקה', copyError: 'הגדרות ×”×בטחה בדפדפן שלך ×œ× ×ž×פשרות לעורך לבצע פעולות העתקה ×וטומטיות. יש להשתמש במקלדת ×œ×©× ×›×š (Ctrl/Cmd+C).', cut: 'גזירה', cutError: 'הגדרות ×”×בטחה בדפדפן שלך ×œ× ×ž×פשרות לעורך לבצע פעולות גזירה ×וטומטיות. יש להשתמש במקלדת ×œ×©× ×›×š (Ctrl/Cmd+X).', paste: 'הדבקה', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: '×יזור הדבקה', pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/ca.js0000664000201500020150000000204315203533226024121 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Àrea d\'enganxat', pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/gu.js0000664000201500020150000000231715203533226024155 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'gu', { copy: 'નકલ', copyError: 'તમારા બà«àª°àª¾àª‰àªàª° ની સà«àª°àª•à«àª·àª¿àª¤ સેટિંગસ કોપી કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+C) का पà¥à¤°à¤¯à¥‹à¤— करें।', cut: 'કાપવà«àª‚', cutError: 'તમારા બà«àª°àª¾àª‰àªàª° ની સà«àª°àª•à«àª·àª¿àª¤ સેટિંગસ કટ કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+X) નો ઉપયોગ કરો.', paste: 'પેસà«àªŸ', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'પેસà«àªŸ કરવાની જગà«àª¯àª¾', pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/ms.js0000664000201500020150000000172615203533226024164 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Paste Area', // MISSING pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/th.js0000664000201500020150000000277615203533226024166 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'th', { copy: 'สำเนา', copyError: 'ไม่สามารถสำเนาข้อความที่เลือà¸à¹„ว้ได้เนื่องจาà¸à¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าระดับความปลอดภัย. à¸à¸£à¸¸à¸“าใช้ปุ่มลัดเพื่อวางข้อความà¹à¸—น (à¸à¸”ปุ่ม Ctrl/Cmd à¹à¸¥à¸°à¸•ัว C พร้อมà¸à¸±à¸™).', cut: 'ตัด', cutError: 'ไม่สามารถตัดข้อความที่เลือà¸à¹„ว้ได้เนื่องจาà¸à¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าระดับความปลอดภัย. à¸à¸£à¸¸à¸“าใช้ปุ่มลัดเพื่อวางข้อความà¹à¸—น (à¸à¸”ปุ่ม Ctrl/Cmd à¹à¸¥à¸°à¸•ัว X พร้อมà¸à¸±à¸™).', paste: 'วาง', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Paste Area', // MISSING pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/de.js0000664000201500020150000000215115203533226024126 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'de', { copy: 'Kopieren', copyError: 'Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch zu 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', pasteNotification: 'Drücken Sie %1 zum Einfügen. Ihr Browser unterstützt nicht das Einfügen über den Knopf in der Toolbar oder dem Kontextmenü.', pasteArea: 'Einfügebereich', pasteMsg: 'Fügen Sie den Inhalt in den unteren Bereich ein und drücken Sie OK.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/en-ca.js0000664000201500020150000000201215203533226024515 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Paste Area', // MISSING pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/tt.js0000664000201500020150000000223215203533226024165 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'tt', { copy: 'Күчермәләү', copyError: 'Браузерыгызның иминлек үзлекләре автоматик рәвештә күчермәләү үтәүне тыÑ. Тиз төймәләрне (Ctrl/Cmd+C) кулланыгыз.', cut: 'КиÑеп алу', cutError: 'Браузерыгызның иминлек үзлекләре автоматик рәвештә күчермәләү үтәүне тыÑ. Тиз төймәләрне (Ctrl/Cmd+C) кулланыгыз.', paste: 'Ó¨Ñтәү', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Ó¨Ñтәү мәйданы', pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/vi.js0000664000201500020150000000212215203533226024152 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Khu vá»±c dán', pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/cs.js0000664000201500020150000000223115203533226024142 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'StisknÄ›te %1 pro vložení. Váš prohlížeÄ nepodporuje vkládání pomocí tlaÄítka na panelu nástrojů nebo volby kontextového menu.', pasteArea: 'Oblast vkládání', pasteMsg: 'Vložte svůj obsah do oblasti níže a stisknÄ›te OK.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/tr.js0000664000201500020150000000211715203533226024165 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'tr', { copy: 'Kopyala', copyError: 'Tarayıcı 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: 'Tarayıcı 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', pasteNotification: '%1 tuÅŸuna yapıştırmak için tıklayın. Tarayıcınız, Araç ÇubuÄŸu yada İçerik Menüsünü kullanarak yapıştırmayı desteklemiyor.', pasteArea: 'Yapıştırma Alanı', pasteMsg: 'İçeriÄŸinizi alttaki bulunan alana yapıştırın ve TAMAM butonuna tıklayın', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/ja.js0000664000201500020150000000225415203533226024134 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'ja', { copy: 'コピー', copyError: 'ブラウザーã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£è¨­å®šã«ã‚ˆã‚Šã‚¨ãƒ‡ã‚£ã‚¿ã®ã‚³ãƒ”ーæ“作を自動ã§å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。実行ã™ã‚‹ã«ã¯æ‰‹å‹•ã§ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®(Ctrl/Cmd+C)を使用ã—ã¦ãã ã•ã„。', cut: '切りå–り', cutError: 'ブラウザーã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£è¨­å®šã«ã‚ˆã‚Šã‚¨ãƒ‡ã‚£ã‚¿ã®åˆ‡ã‚Šå–りæ“作を自動ã§å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。実行ã™ã‚‹ã«ã¯æ‰‹å‹•ã§ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®(Ctrl/Cmd+X)を使用ã—ã¦ãã ã•ã„。', paste: '貼り付ã‘', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: '貼り付ã‘場所', pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/sl.js0000664000201500020150000000173715203533226024165 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Prilepi obmoÄje', pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/lv.js0000664000201500020150000000207615203533226024165 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Nospied %1 lai ielÄ«mÄ“tu. Tavs pÄrlÅ«ks neatbalsta ielÄ«mēšanu ar rÄ«kjoslas pogÄm vai uznirstoÅ¡Äs izvÄ“lnes opciju.', pasteArea: 'IelÄ«mēšanas zona', pasteMsg: 'IelÄ«mÄ“ saturu zemÄk esoÅ¡ajÄ laukÄ un nospied OK.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/en-au.js0000664000201500020150000000175115203533226024550 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', pasteArea: 'Paste Area', pasteMsg: 'Paste your content inside the area below and press OK.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/en.js0000664000201500020150000000172015203533226024141 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', pasteArea: 'Paste Area', pasteMsg: 'Paste your content inside the area below and press OK.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/no.js0000664000201500020150000000173415203533226024160 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Trykk %1 for Ã¥ lime inn. PÃ¥ grunn av manglende støtte i nettleseren din, kan du ikke lime inn via knapperaden eller kontekstmenyen.', pasteArea: 'InnlimingsomrÃ¥de', pasteMsg: 'Lim inn innholdet i omrÃ¥det nedenfor og trykk OK.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/fr.js0000664000201500020150000000220315203533226024143 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'fr', { copy: 'Copier', copyError: 'Les paramètres de sécurité de votre navigateur n\'autorisent pas l\'éditeur à exécuter automatiquement l\'opération « Copier ». Veuillez utiliser le raccourci clavier à cet effet (Ctrl/Cmd+C).', cut: 'Couper', cutError: 'Les paramètres de sécurité de votre navigateur n\'autorisent pas l\'éditeur à exécuter automatiquement l\'opération « Couper ». Veuillez utiliser le raccourci clavier à cet effet (Ctrl/Cmd+X).', paste: 'Coller', pasteNotification: 'Utilisez le raccourci %1 pour coller. Votre navigateur n\'accepte pas de coller à l\'aide du bouton ou du menu contextuel.', pasteArea: 'Coller la zone', pasteMsg: 'Collez votre contenu dans la zone de saisie ci-dessous et cliquez OK.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/id.js0000664000201500020150000000201715203533226024133 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Area Tempel', pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/ug.js0000664000201500020150000000265515203533226024162 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'ug', { copy: 'كۆچۈر', copyError: 'تور كۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى تەھرىرلىگۈچنىڭ كۆچۈر مەشغۇلاتىنى ئۆزلۈكىدىن ئىجرا قىلىشىغا يول قويمايدۇ، ھەرپتاختا ØªÛØ² كۇنۇپكا (Ctrl/Cmd+C) ئارقىلىق تاماملاڭ', cut: 'كەس', cutError: 'تور كۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى تەھرىرلىگۈچنىڭ كەس مەشغۇلاتىنى ئۆزلۈكىدىن ئىجرا قىلىشىغا يول قويمايدۇ، ھەرپتاختا ØªÛØ² كۇنۇپكا (Ctrl/Cmd+X) ئارقىلىق تاماملاڭ', paste: 'چاپلا', pasteNotification: 'چاپلانغىنى 1% . سىزنىڭ تور كۆرگۈچىڭىز قۇرال تەكچىسى Û‹Û• سىيرىلما تاللاپ چاپلاش ئىقتىدارىنى قوللىمايدىكەن .', pasteArea: 'چاپلاش دائىرىسى', pasteMsg: 'مەزمۇنىڭىزنى تۆۋەندىكى رايونغا چاپلاپ ئاندىن OK نى Ø¨ÛØ³Ù‰Ú­ .', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/ar.js0000664000201500020150000000227215203533226024144 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'ar', { copy: 'نسخ', copyError: 'الإعدادات الأمنية Ù„Ù„Ù…ØªØµÙØ­ الذي تستخدمه تمنع عمليات النسخ التلقائي. ÙØ¶Ù„اً إستخدم لوحة Ø§Ù„Ù…ÙØ§ØªÙŠØ­ Ù„ÙØ¹Ù„ ذلك (Ctrl/Cmd+C).', cut: 'قص', cutError: 'الإعدادات الأمنية Ù„Ù„Ù…ØªØµÙØ­ الذي تستخدمه تمنع القص التلقائي. ÙØ¶Ù„اً إستخدم لوحة Ø§Ù„Ù…ÙØ§ØªÙŠØ­ Ù„ÙØ¹Ù„ ذلك (Ctrl/Cmd+X).', paste: 'لصق', pasteNotification: 'اضغط %1 للصق. اللصق عن طريق شريط الادوات او القائمة غير مدعوم من Ø§Ù„Ù…ØªØµÙØ­ المستخدم من قبلك.', pasteArea: 'منطقة اللصق', pasteMsg: 'الصق المحتوى بداخل المساحة المخصصة ادناه ثم اضغط على OK', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/sr.js0000664000201500020150000000263015203533226024164 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'sr', { copy: 'Копирај', copyError: 'СигурноÑна подешавања Вашег претраживача не дозвољавају операције аутоматÑког копирања текÑта. Молимо Ð’Ð°Ñ Ð´Ð° кориÑтите пречицу Ñа таÑтатуре (Ctrl/Cmd+C).', cut: 'ИÑеци', cutError: 'СигурноÑна подешавања Вашег претраживача не дозвољавају операције аутоматÑког иÑецања текÑта. Молимо Ð’Ð°Ñ Ð´Ð° кориÑтите пречицу Ñа таÑтатуре (Ctrl/Cmd+X).', paste: 'Залепи', pasteNotification: 'ПритиÑните таÑтер %1 за лепљење. Ваш ретраживач не дозвољаба лепљење из алатне траке или мениа.', pasteArea: 'Залепи зону', pasteMsg: 'Ðалепите Ñадржај у Ñледећи проÑтор и притиÑните таÑтер OK.', fileFormatNotSupportedNotification: 'Формати датотеке ${форматÑ} ниÑу подржани.', fileWithoutFormatNotSupportedNotification: 'Формат датотеке није подржан.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/eu.js0000664000201500020150000000177015203533226024155 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'clipboard', 'eu', { copy: 'Kopiatu', copyError: 'Zure web nabigatzailearen segurtasun ezarpenek ez dute baimentzen testuak automatikoki kopiatzea. Mesedez teklatua erabil ezazu (Ctrl/Cmd+C).', cut: 'Ebaki', cutError: 'Zure web nabigatzailearen segurtasun ezarpenek ez dute baimentzen testuak automatikoki moztea. Mesedez teklatua erabil ezazu (Ctrl/Cmd+X).', paste: 'Itsatsi', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Itsasteko area', pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/en-gb.js0000664000201500020150000000201215203533226024522 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Paste Area', // MISSING pasteMsg: 'Paste your content inside the area below and press OK.', // MISSING fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/lang/hu.js0000664000201500020150000000214115203533226024151 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', pasteNotification: 'Nyomja meg a %1 gombot a beillesztéshez. A böngészÅ‘ nem támogatja a beillesztést az eszköztárról vagy a menübÅ‘l.', pasteArea: 'Beillesztési terület', pasteMsg: 'Illessze be a tartalmat az alábbi mezÅ‘be, és nyomja meg az OK-t.', fileFormatNotSupportedNotification: 'The ${formats} file format(s) are not supported.', // MISSING fileWithoutFormatNotSupportedNotification: 'The file format is not supported.' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/dialogs/0000755000201500020150000000000015203533226023700 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/dialogs/paste.js0000664000201500020150000001666415203533226025371 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.dialog.add( 'paste', function( editor ) { var lang = editor.lang.clipboard, clipboard = CKEDITOR.plugins.clipboard, lastDataTransfer; function onPasteFrameLoad( win ) { var doc = new CKEDITOR.dom.document( win.document ), body = doc.getBody(), script = doc.getById( 'cke_actscrpt' ); script && script.remove(); body.setAttribute( 'contenteditable', true ); // Forward dataTransfer (#13883). body.on( clipboard.mainPasteEvent, function( evt ) { var dataTransfer = clipboard.initPasteDataTransfer( evt ); if ( !lastDataTransfer ) { lastDataTransfer = dataTransfer; } else // For two paste with the same dataTransfer we can use that dataTransfer (two internal pastes are // considered as an internal paste). if ( dataTransfer != lastDataTransfer ) { // If there were two paste with different DataTransfer objects create a new, empty, data transfer // and use it (one internal and one external paste are considered as external paste). lastDataTransfer = clipboard.initPasteDataTransfer(); } } ); // IE before version 8 will leave cursor blinking inside the document after // editor blurred unless we clean up the selection. (#4716) if ( CKEDITOR.env.ie && CKEDITOR.env.version < 8 ) { doc.getWindow().on( 'blur', function() { doc.$.selection.empty(); } ); } doc.on( 'keydown', function( e ) { var domEvent = e.data, key = domEvent.getKeystroke(), processed; switch ( key ) { case 27: this.hide(); processed = 1; break; case 9: case CKEDITOR.SHIFT + 9: this.changeFocus( 1 ); processed = 1; } processed && domEvent.preventDefault(); }, this ); editor.fire( 'ariaWidget', new CKEDITOR.dom.element( win.frameElement ) ); // Handle pending focus. if ( doc.getWindow().getFrame().removeCustomData( 'pendingFocus' ) ) body.focus(); } // If pasteDialogCommit wasn't canceled by e.g. editor.getClipboardData // then fire paste event. // Do not use editor#paste, because it would start from beforePaste event. editor.on( 'pasteDialogCommit', function( evt ) { if ( evt.data ) { editor.fire( 'paste', { type: 'auto', dataValue: evt.data.dataValue, method: 'paste', dataTransfer: evt.data.dataTransfer || clipboard.initPasteDataTransfer() } ); } }, null, null, 1000 ); return { title: lang.paste, minWidth: CKEDITOR.env.ie && CKEDITOR.env.quirks ? 370 : 350, minHeight: CKEDITOR.env.quirks ? 250 : 245, onShow: function() { // FIREFOX BUG: Force the browser to render the dialog to make the to-be- // inserted iframe editable. (#3366) this.parts.dialog.$.offsetHeight; this.setupContent(); // Reset committed indicator. this._.committed = false; }, onLoad: function() { if ( ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) && editor.lang.dir == 'rtl' ) this.parts.contents.setStyle( 'overflow', 'hidden' ); }, onOk: function() { this.commitContent(); }, contents: [ { id: 'general', label: editor.lang.common.generalTab, elements: [ { type: 'html', id: 'pasteMsg', html: '
    ' + lang.pasteMsg + '
    ' }, { type: 'html', id: 'editing_area', style: 'width:100%;height:100%', html: '', focus: function() { var iframe = this.getInputElement(), doc = iframe.getFrameDocument(), body = doc.getBody(); // Frame content may not loaded at the moment. if ( !body || body.isReadOnly() ) iframe.setCustomData( 'pendingFocus', 1 ); else body.focus(); }, setup: function() { var dialog = this.getDialog(); var htmlToLoad = '' + '' + '' + ''; 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( '' ); // Reset last data transfer. lastDataTransfer = null; 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(); this.getDialog()._.committed = true; editor.fire( 'pasteDialogCommit', { dataValue: html, // Avoid error if there was no paste so lastDataTransfer is null. dataTransfer: lastDataTransfer || clipboard.initPasteDataTransfer() } ); } } ] } ] }; } ); /** * Internal event to pass the paste dialog data to the listeners. * * This event was not available in versions 4.7.0-4.8.0. * * @private * @event pasteDialogCommit * @member CKEDITOR.editor * @param {CKEDITOR.editor} editor This editor instance. */ rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/icons/0000755000201500020150000000000015153141500023363 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/icons/cut-rtl.png0000664000201500020150000000141015153141500025461 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ð÷IDAT8Ë}S=‹SA=÷μHB4ÁB—[A°YÐü–‚µX‚…`'ˆ•…ÿ!…ÛÄRÖb‹-l,$ì®)‚˜â»™™k‘¼ø^<˜y0çœ{Îêõz(/":833RJPUì/Þÿ¡ª?³,;.÷/Þ ;"ÂÞw]DNcŒePÀd2€3UÍþ§à7c´Ìœç9Úí¶ªjeÌkíã‚•ˆ¾Æ!"Ȳì¬dæ§;ƒAEjŒ̼£fæg)¥w…©"BÞû !3WŒ2ÆÀ9çE$WU¤”^—!¢ι ÕëuXkw&€ˆˆsîÖþx)¥ûªú£qÌ cLd¹\~ßïÃz½þ|ÐA¡RµöOI6TÎ9]¯×U€#bŒH)a¹\BU9ç.xE„bŒDD'Û”„™_Ìçs¨ê&ÆÂÄZ­ö À{WDkí[çŒ1h6›¶¤ßbŒ/†®V+p!;„U½Öjµ €{^…N ©³Ùì]Ñí@½^¿³+óf;N?, xNDW¥qÏUõh4‘÷þ! ‡Ãsê÷û»1óqJé´Hb<S§Ó)¿‡ 7·}y’RzcË1©ê""÷Ýn·ò˜ˆè(Ïsxï‘RühˆsÖ¨?÷%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/icons/paste.png0000664000201500020150000000072015153141500025206 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ð¿IDAT8ËÅ’1Â0 EŸ‰{(&©z]6`àRiôHKI,XŠ”ÈßÎûq¬ï{!I˜€ÕD›iãîƒ$¥”^Šó@)%$É݇¹nÆÀ.„Ð""„€¤}Œñ<y¡¹JÂ2sÅÀ¥jáS,-ýÔ ˆ™ÐkÙlC­[á1Iæ-A.¶7y5 Jí×ZâZüŸ ã¶AP®g3ÃÌèºîÜ*ÈVYë7Çñ´Læ97?BÎãÓfÅ-½õž?w³aûz.0%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/icons/copy-rtl.png0000664000201500020150000000077215153141500025652 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ðéIDAT8˵’Ím„0„¿Á4gûN)È ä”()$·”²‡T°”ÂQ à—ËB€˜—ŒdYö¼Ÿñ<«m[#çÜWJéSÒî~¿PnîvQÓ4QU•IòÀ‡Ù¾GŒ€"×Yu]ÓuÌìøæÅafÄéû^)¥—cƒåYò²7M 3#çÅ™Ë-I·c‘’s¬‘’Çï½IJÀÛ¢²à"B‹©¯Àm-¾ù[m»³snõd¼÷+_’²jy·™BÈz ž`žçÝt®šø+Íì”»lâ¿Àc;ÕWsËgäü3ìYŠ‚`W %tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/icons/paste-rtl.png0000664000201500020150000000072015153141500026005 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ð¿IDAT8ËÅ’1Â0 EŸ‰{(&©z]6`àRiôHKI,XŠ”ÈßÎûq¬ï{!I˜€ÕD›iãîƒ$¥”^Šó@)%$É݇¹nÆÀ.„Ð""„€¤}Œñ<y¡¹JÂ2sÅÀ¥jáS,-ýÔ ˆ™ÐkÙlC­[á1Iæ-A.¶7y5 Jí×ZâZüŸ ã¶AP®g3ÃÌèºîÜ*ÈVYë7Çñ´Læ97?BÎãÓfÅ-½õž?w³aûz.0%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/icons/hidpi/0000755000201500020150000000000015153141500024460 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/icons/hidpi/cut-rtl.png0000664000201500020150000000305015153141500026560 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎ,IDATXÃWOhUÿ}oÞnvg“Ù• HÍ©  XAo¡M&!†ÌQ!à¡Z”hs ø03o•$"\½zu?­¨V«¹cw´6›M0óç#˜û-˲-›n³¤”ð}«««Ã ¬¬¬äÃ$˲ҙĮ̂T*«ý~ÿ[3mÑYçŸxÕf ,]ùh>ÎÌšök¯jµú¾”²)Á÷}¤iºjuB›Q‘$ÉŸDôb€RªðAžçýmu´7766Èó¼'÷̓ÁÏÌ\-û‚ò<ïß4MRÊ3$„8n}W|µ¹¹ù¿ #5IÔëuÖ";§”zw8€/¬123â8†ïû¬ƒyÀEãXW kg•Rä)°Újµ›ë±±±²†cÔyÔ}ÁSæ¼Ýna‹ÙN¥Rj¶ [ñI’Ü1éH’äŒ-(=)I§éŠ›º8Ž5¶sss¯ØàœÆÖθcR—ËmýlˆÎA0Q©TžÕj4ó68€=íðc":755Õ ¢Yó.¡Óé|”k ܳQ§ÓA³Ù5ÊN¸PÖ7”Rð<¯tXiûU— ØcWëHñÓ’{AL¸`;5û˜½tpWíôûýG™9ïy!»H)õ‚ÕëõP«ÕEÑPÇt{½Þc¢(Âøø8„…_ø"ZZZÊç€û·ÚÖ‰KgÙ´,¡¼0[ì½þÅT¹Âæ–+X%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/icons/hidpi/paste.png0000664000201500020150000000152615153141500026310 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎZIDATXíWÁjÜ0}#9öÑþ„Bé%Pzl íq!´ìï¶?Cr ½J¡ô¼7/¶gzˆgËÒ®¼»²¤yOz3’lÚn·€ˆ,JÄ~Ñ03œs‡qÞûÌü]j;-ж–è±ÚƒVœs Çñ[Ê)…é˜yA¼Ûíà€(8€?$¥”!"úm&(^&ÌÙxfž+mÛ¢i±ªLö™&"4DÓû§º®¥m[ªë"rPm¡@Ó4OÌ f~íûžŽ)bĤ†¼Šêº~²«gf¸èg"‚ˆÜÞÜÜØ®!æ€s“>ÿ꘢(0Žã­b‡|…•Ã&”÷>ûÎöÇÌöÍdžvJÌ·ˆÉ–]k!nŒÇ­¹d|¸"zSàš“°cCÂXßI.Y}ðNS™Ÿ„9@—æAÊ_DÎRàþÍWÄ>µQ´nÛʲ¼W°bm’xTU̾ª;œDûýþQÃqIÒ‘¾pæ0;#Wµ,B5‚¤Ê• š‰É]ÊÜc;"–§0¢I˜b€h­_–ÇHSWo®Y¿³r lÊtÆnõ.8wÕWQ L²0rm–„©Ù¥n²˜kU±Ø.ÕÙu]”À~×Oí’Y¢Ëg¨ªêW×uÑ+6uöÛkÖÖcŠiY„`†;ï½øXU•eOÅš,p8©SáY(à½×OéçÔÁr V„$D„¢(à.v$›¶«ÌÂ)i®•eù5T"õ«–*Ìüå @.±*Õ÷ýácâÜOµÙY›Íf¶¢°þp„!¹ÄþOoÒ4ŠÌ%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/icons/hidpi/copy-rtl.png0000664000201500020150000000136715153141500026750 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎûIDATXÃÅWÍnÂ0 ¶òdHˆ—ÙeÇRi›¦öÆ.Ûà ^­­½I—çÆöI×Éç/Žkp¿ßƒ…ˆ âò¹ƒù¦ižæyþòí!N§ä@"þpp›ùó>‰q?1/¸8esc³ÙtÓ4uÐgw©$ÈÉ4M="ö6úÖû~Üb"ÒÑ "ÀÌ-õ%~QaÒ•€™Ƙ`žç–ˆ>ÜZ¥Šàn·sòº§W,ÂEq!êlDôÂ̯š¿”v+V hC‘˜yecæ·˜Ÿ?ç‚U ÔBÙÐÝ’¸ÜˆWWóf%có¾5$6ä²ÛjcŽÚ1ºßKîylÄ“r‘líûS »VÆ8¤¢J* %–ˆD+$^vEDìì³mÓ4ÉJIUw¶¼NôvÀ8Ž-$ÊuUVV¹§„+×w¨%$"W¢m¹>†Ç}•F{>Ÿ£6Df³$ž“ hU,´i‰™"a7îcþ«$´I¶ÜeD”ÀV¬„ÖÈh¸R lôï%$´n*G•{^…Üq$ø-Ôhr„j)4É5ÿl)~4¢!m·Û+>9ŸØK*åÿ°~ ÿN ›„>néœCÿb‰Lþ‡¬]¯J°Ò:¤TåÓ×@­4çæBBµþ4 µ£ú*ÿM¢À²G%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/icons/hidpi/paste-rtl.png0000664000201500020150000000152615153141500027107 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎZIDATXíWÁjÜ0}#9öÑþ„Bé%Pzl íq!´ìï¶?Cr ½J¡ô¼7/¶gzˆgËÒ®¼»²¤yOz3’lÚn·€ˆ,JÄ~Ñ03œs‡qÞûÌü]j;-ж–è±ÚƒVœs Çñ[Ê)…é˜yA¼Ûíà€(8€?$¥”!"úm&(^&ÌÙxfž+mÛ¢i±ªLö™&"4DÓû§º®¥m[ªë"rPm¡@Ó4OÌ f~íûžŽ)bĤ†¼Šêº~²«gf¸èg"‚ˆÜÞÜÜØ®!æ€s“>ÿ꘢(0Žã­b‡|…•Ã&”÷>ûÎöÇÌöÍdžvJÌ·ˆÉ–]k!nŒÇ­¹d|¸"zSàš“°cCÂXßI.Y}ðNS™Ÿ„9@—æAÊ_DÎRàþÍWÄ>µQ´nÛʲ¼W°bm’xTU̾ª;œDûýþQÃqIÒ‘¾pæ0;#Wµ,B5‚¤Ê• š‰É]ÊÜc;"–§0¢I˜b€h­_–ÇHSWo®Y¿³r lÊtÆnõ.8wÕWQ L²0rm–„©Ù¥n²˜kU±Ø.ÕÙu]”À~×Oí’Y¢Ëg¨ªêW×uÑ+6uöÛkÖÖcŠiY„`†;ï½øXU•eOÅš,p8©SáY(à½×OéçÔÁr V„$D„¢(à.v$›¶«ÌÂ)i®•eù5T"õ«–*Ìüå @.±*Õ÷ýácâÜOµÙY›Íf¶¢°þp„!¹ÄþOoÒ4ŠÌ%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/icons/hidpi/cut.png0000664000201500020150000000305015153141500025761 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎ,IDATXÃWOhUÿ}oÞnvg“Ù• HÍ©  XAo¡M&!†ÌQ!à¡Z”hs ø03o•$"\½zu?­¨V«¹cw´6›M0óç#˜û-˲-›n³¤”ð}«««Ã ¬¬¬äÃ$˲ҙĮ̂T*«ý~ÿ[3mÑYçŸxÕf ,]ùh>ÎÌšök¯jµú¾”²)Á÷}¤iºjuB›Q‘$ÉŸDôb€RªðAžçýmu´7766Èó¼'÷̓ÁÏÌ\-û‚ò<ïß4MRÊ3$„8n}W|µ¹¹ù¿ #5IÔëuÖ";§”zw8€/¬123â8†ïû¬ƒyÀEãXW kg•Rä)°Újµ›ë±±±²†cÔyÔ}ÁSæ¼Ýna‹ÙN¥Rj¶ [ñI’Ü1éH’äŒ-(=)I§éŠ›º8Ž5¶sss¯ØàœÆÖθcR—ËmýlˆÎA0Q©TžÕj4ó68€=íðc":755Õ ¢Yó.¡Óé|”k ܳQ§ÓA³Ù5ÊN¸PÖ7”Rð<¯tXiûU— ØcWëHñÓ’{AL¸`;5û˜½tpWíôûýG™9ïy!»H)õ‚ÕëõP«ÕEÑPÇt{½Þc¢(Âøø8„…_ø"ZZZÊç€û·ÚÖ‰KgÙ´,¡¼0[ì½þÅT¹Âæ–+X%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/icons/hidpi/copy.png0000664000201500020150000000136715153141500026151 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎûIDATXÃÅWÍnÂ0 ¶òdHˆ—ÙeÇRi›¦öÆ.Ûà ^­­½I—çÆöI×Éç/Žkp¿ßƒ…ˆ âò¹ƒù¦ižæyþòí!N§ä@"þpp›ùó>‰q?1/¸8esc³ÙtÓ4uÐgw©$ÈÉ4M="ö6úÖû~Üb"ÒÑ "ÀÌ-õ%~QaÒ•€™Ƙ`žç–ˆ>ÜZ¥Šàn·sòº§W,ÂEq!êlDôÂ̯š¿”v+V hC‘˜yecæ·˜Ÿ?ç‚U ÔBÙÐÝ’¸ÜˆWWóf%có¾5$6ä²ÛjcŽÚ1ºßKîylÄ“r‘líûS »VÆ8¤¢J* %–ˆD+$^vEDìì³mÓ4ÉJIUw¶¼NôvÀ8Ž-$ÊuUVV¹§„+×w¨%$"W¢m¹>†Ç}•F{>Ÿ£6Df³$ž“ hU,´i‰™"a7îcþ«$´I¶ÜeD”ÀV¬„ÖÈh¸R lôï%$´n*G•{^…Üq$ø-Ôhr„j)4É5ÿl)~4¢!m·Û+>9ŸØK*åÿ°~ ÿN ›„>néœCÿb‰Lþ‡¬]¯J°Ò:¤TåÓ×@­4çæBBµþ4 µ£ú*ÿM¢À²G%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/icons/cut.png0000664000201500020150000000141015153141500024662 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ð÷IDAT8Ë}S=‹SA=÷μHB4ÁB—[A°YÐü–‚µX‚…`'ˆ•…ÿ!…ÛÄRÖb‹-l,$ì®)‚˜â»™™k‘¼ø^<˜y0çœ{Îêõz(/":833RJPUì/Þÿ¡ª?³,;.÷/Þ ;"ÂÞw]DNcŒePÀd2€3UÍþ§à7c´Ìœç9Úí¶ªjeÌkíã‚•ˆ¾Æ!"Ȳì¬dæ§;ƒAEjŒ̼£fæg)¥w…©"BÞû !3WŒ2ÆÀ9çE$WU¤”^—!¢ι ÕëuXkw&€ˆˆsîÖþx)¥ûªú£qÌ cLd¹\~ßïÃz½þ|ÐA¡RµöOI6TÎ9]¯×U€#bŒH)a¹\BU9ç.xE„bŒDD'Û”„™_Ìçs¨ê&ÆÂÄZ­ö À{WDkí[çŒ1h6›¶¤ßbŒ/†®V+p!;„U½Öjµ €{^…N ©³Ùì]Ñí@½^¿³+óf;N?, xNDW¥qÏUõh4‘÷þ! ‡Ãsê÷û»1óqJé´Hb<S§Ó)¿‡ 7·}y’RzcË1©ê""÷Ýn·ò˜ˆè(Ïsxï‘RühˆsÖ¨?÷%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/clipboard/icons/copy.png0000664000201500020150000000077215153141500025053 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ðéIDAT8˵’Ím„0„¿Á4gûN)È ä”()$·”²‡T°”ÂQ à—ËB€˜—ŒdYö¼Ÿñ<«m[#çÜWJéSÒî~¿PnîvQÓ4QU•IòÀ‡Ù¾GŒ€"×Yu]ÓuÌìøæÅafÄéû^)¥—cƒåYò²7M 3#çÅ™Ë-I·c‘’s¬‘’Çï½IJÀÛ¢²à"B‹©¯Àm-¾ù[m»³snõd¼÷+_’²jy·™BÈz ž`žçÝt®šø+Íì”»lâ¿Àc;ÕWsËgäü3ìYŠ‚`W %tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/0000755000201500020150000000000015203533230023206 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/filter/0000755000201500020150000000000015203533227024501 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/filter/default.js0000664000201500020150000017072215203533227026476 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ /* globals CKEDITOR */ ( function() { 'use strict'; var tools = CKEDITOR.tools, pastetools = CKEDITOR.plugins.pastetools, commonFilter = pastetools.filters.common, Style = commonFilter.styles, createAttributeStack = commonFilter.createAttributeStack, getElementIndentation = commonFilter.lists.getElementIndentation, invalidTags = [ 'o:p', 'xml', 'script', 'meta', 'link' ], shapeTags = [ 'v:arc', 'v:curve', 'v:line', 'v:oval', 'v:polyline', 'v:rect', 'v:roundrect', 'v:group' ], links = {}, inComment = 0, plug = {}, List, Heuristics; /** * Set of Paste from Word plugin helpers. * * @since 4.13.0 * @private * @member CKEDITOR.plugins.pastetools.filters */ CKEDITOR.plugins.pastetools.filters.word = plug; /** * Set of Paste from Word plugin helpers. * * See {@link CKEDITOR.plugins.pastetools.filters.word}. * * @since 4.6.0 * @deprecated 4.13.0 * @private * @member CKEDITOR.plugins */ CKEDITOR.plugins.pastefromword = plug; /** * Rules for the Paste from Word filter. * * @since 4.13.0 * @private * @member CKEDITOR.plugins.pastetools.filters.word */ plug.rules = function( html, editor, filter ) { var msoListsDetected = Boolean( html.match( /mso-list:\s*l\d+\s+level\d+\s+lfo\d+/ ) ), shapesIds = [], rules = { root: function( element ) { element.filterChildren( filter ); CKEDITOR.plugins.pastefromword.lists.cleanup( List.createLists( element ) ); }, elementNames: [ [ ( /^\?xml:namespace$/ ), '' ], [ /^v:shapetype/, '' ], [ new RegExp( invalidTags.join( '|' ) ), '' ] // Remove invalid tags. ], elements: { 'a': function( element ) { // Redundant anchor created by IE8. if ( element.attributes.name ) { if ( element.attributes.name == '_GoBack' ) { delete element.name; return; } // Garbage links that go nowhere. if ( element.attributes.name.match( /^OLE_LINK\d+$/ ) ) { delete element.name; return; } } if ( element.attributes.href && element.attributes.href.match( /#.+$/ ) ) { var name = element.attributes.href.match( /#(.+)$/ )[ 1 ]; links[ name ] = element; } if ( element.attributes.name && links[ element.attributes.name ] ) { var link = links[ element.attributes.name ]; link.attributes.href = link.attributes.href.replace( /.*#(.*)$/, '#$1' ); } }, 'div': function( element ) { // Don't allow to delete page break element (#3220). if ( editor.plugins.pagebreak && element.attributes[ 'data-cke-pagebreak' ] ) { return element; } Style.createStyleStack( element, filter, editor ); }, 'img': function( element ) { // If the parent is DocumentFragment it does not have any attributes. (https://dev.ckeditor.com/ticket/16912) if ( element.parent && element.parent.attributes ) { var attrs = element.parent.attributes, style = attrs.style || attrs.STYLE; if ( style && style.match( /mso\-list:\s?Ignore/ ) ) { element.attributes[ 'cke-ignored' ] = true; } } Style.mapCommonStyles( element ); if ( element.attributes.src && element.attributes.src.match( /^file:\/\// ) && element.attributes.alt && element.attributes.alt.match( /^https?:\/\// ) ) { element.attributes.src = element.attributes.alt; } var imgShapesIds = element.attributes[ 'v:shapes' ] ? element.attributes[ 'v:shapes' ].split( ' ' ) : []; // Check whether attribute contains shapes recognised earlier (stored in global list of shapesIds). // If so, add additional data-attribute to img tag. var isShapeFromList = CKEDITOR.tools.array.every( imgShapesIds, function( shapeId ) { return shapesIds.indexOf( shapeId ) > -1; } ); if ( imgShapesIds.length && isShapeFromList ) { // As we don't know how to process shapes we can remove them. return false; } }, 'p': function( element ) { element.filterChildren( filter ); if ( element.attributes.style && element.attributes.style.match( /display:\s*none/i ) ) { return false; } if ( List.thisIsAListItem( editor, element ) ) { if ( Heuristics.isEdgeListItem( editor, element ) ) { Heuristics.cleanupEdgeListItem( element ); } List.convertToFakeListItem( editor, element ); // IE pastes nested paragraphs in list items, which is different from other browsers. (https://dev.ckeditor.com/ticket/16826) // There's a possibility that list item will contain multiple paragraphs, in that case we want // to split them with BR. tools.array.reduce( element.children, function( paragraphsReplaced, node ) { if ( node.name === 'p' ) { // If there were already paragraphs replaced, put a br before this paragraph, so that // it's inline children are displayed in a next line. if ( paragraphsReplaced > 0 ) { var br = new CKEDITOR.htmlParser.element( 'br' ); br.insertBefore( node ); } node.replaceWithChildren(); paragraphsReplaced += 1; } return paragraphsReplaced; }, 0 ); } else { // In IE list level information is stored in

    elements inside

  • elements. var container = element.getAscendant( function( element ) { return element.name == 'ul' || element.name == 'ol'; } ), style = tools.parseCssText( element.attributes.style ); if ( container && !container.attributes[ 'cke-list-level' ] && style[ 'mso-list' ] && style[ 'mso-list' ].match( /level/ ) ) { container.attributes[ 'cke-list-level' ] = style[ 'mso-list' ].match( /level(\d+)/ )[1]; } // Adapt paragraph formatting to editor's convention according to enter-mode (#423). if ( editor.config.enterMode == CKEDITOR.ENTER_BR ) { // We suffer from attribute/style lost in this situation. delete element.name; element.add( new CKEDITOR.htmlParser.element( 'br' ) ); } } Style.createStyleStack( element, filter, editor ); }, 'pre': function( element ) { if ( List.thisIsAListItem( editor, element ) ) List.convertToFakeListItem( editor, element ); Style.createStyleStack( element, filter, editor ); }, 'h1': function( element ) { if ( List.thisIsAListItem( editor, element ) ) List.convertToFakeListItem( editor, element ); Style.createStyleStack( element, filter, editor ); }, 'h2': function( element ) { if ( List.thisIsAListItem( editor, element ) ) List.convertToFakeListItem( editor, element ); Style.createStyleStack( element, filter, editor ); }, 'h3': function( element ) { if ( List.thisIsAListItem( editor, element ) ) List.convertToFakeListItem( editor, element ); Style.createStyleStack( element, filter, editor ); }, 'h4': function( element ) { if ( List.thisIsAListItem( editor, element ) ) List.convertToFakeListItem( editor, element ); Style.createStyleStack( element, filter, editor ); }, 'h5': function( element ) { if ( List.thisIsAListItem( editor, element ) ) List.convertToFakeListItem( editor, element ); Style.createStyleStack( element, filter, editor ); }, 'h6': function( element ) { if ( List.thisIsAListItem( editor, element ) ) List.convertToFakeListItem( editor, element ); Style.createStyleStack( element, filter, editor ); }, 'font': function( element ) { if ( element.getHtml().match( /^\s*$/ ) ) { // There might be font tag directly in document fragment, we cannot replace it with a textnode as this generates // superfluous spaces in output. What later might be transformed into empty paragraphs, so just remove such element. if ( element.parent.type === CKEDITOR.NODE_ELEMENT ) { new CKEDITOR.htmlParser.text( ' ' ).insertAfter( element ); } return false; } if ( editor && editor.config.pasteFromWordRemoveFontStyles === true && element.attributes.size ) { // font[size] are still used by old IEs for font size. delete element.attributes.size; } // Create style stack for td/th > font if only class // and style attributes are present. Such markup is produced by Excel. if ( CKEDITOR.dtd.tr[ element.parent.name ] && CKEDITOR.tools.arrayCompare( CKEDITOR.tools.object.keys( element.attributes ), [ 'class', 'style' ] ) ) { Style.createStyleStack( element, filter, editor ); } else { createAttributeStack( element, filter ); } }, 'ul': function( element ) { if ( !msoListsDetected ) { // List should only be processed if we're sure we're working with Word. (https://dev.ckeditor.com/ticket/16593) return; } // Edge case from 11683 - an unusual way to create a level 2 list. if ( element.parent.name == 'li' && tools.indexOf( element.parent.children, element ) === 0 ) { Style.setStyle( element.parent, 'list-style-type', 'none' ); } List.dissolveList( element ); return false; }, 'li': function( element ) { Heuristics.correctLevelShift( element ); if ( !msoListsDetected ) { return; } element.attributes.style = Style.normalizedStyles( element, editor ); Style.pushStylesLower( element ); }, 'ol': function( element ) { if ( !msoListsDetected ) { // List should only be processed if we're sure we're working with Word. (https://dev.ckeditor.com/ticket/16593) return; } // Fix edge-case where when a list skips a level in IE11, the
      element // is implicitly surrounded by a
    1. . if ( element.parent.name == 'li' && tools.indexOf( element.parent.children, element ) === 0 ) { Style.setStyle( element.parent, 'list-style-type', 'none' ); } List.dissolveList( element ); return false; }, 'span': function( element ) { element.filterChildren( filter ); element.attributes.style = Style.normalizedStyles( element, editor ); if ( !element.attributes.style || // Remove garbage bookmarks that disrupt the content structure. element.attributes.style.match( /^mso\-bookmark:OLE_LINK\d+$/ ) || element.getHtml().match( /^(\s| )+$/ ) ) { commonFilter.elements.replaceWithChildren( element ); return false; } if ( element.attributes.style.match( /FONT-FAMILY:\s*Symbol/i ) ) { element.forEach( function( node ) { node.value = node.value.replace( / /g, '' ); }, CKEDITOR.NODE_TEXT, true ); } Style.createStyleStack( element, filter, editor ); }, 'v:imagedata': remove, // This is how IE8 presents images. 'v:shape': function( element ) { // There are 3 paths: // 1. There is regular `v:shape` (no `v:imagedata` inside). // 2. There is a simple situation with `v:shape` with `v:imagedata` inside. We can remove such element and rely on `img` tag found later on. // 3. There is a complicated situation where we cannot find proper `img` tag after `v:shape` or there is some canvas element. // a) If shape is a child of v:group, then most probably it belongs to canvas, so we need to treat it as in path 1. // b) In other cases, most probably there is no related `img` tag. We need to transform `v:shape` into `img` tag (IE8 integration). var duplicate = false, child = element.getFirst( 'v:imagedata' ); // Path 1: if ( child === null ) { shapeTagging( element ); return; } // Path 2: // Sometimes a child with proper ID might be nested in other tag. element.parent.find( function( child ) { if ( child.name == 'img' && child.attributes && child.attributes[ 'v:shapes' ] == element.attributes.id ) { duplicate = true; } }, true ); if ( duplicate ) { return false; } else { // Path 3: var src = ''; // 3.a) Filter out situation when canvas is used. In such scenario there is v:group containing v:shape containing v:imagedata. // We streat such v:shapes as in Path 1. if ( element.parent.name === 'v:group' ) { shapeTagging( element ); return; } // 3.b) Most probably there is no img tag later on, so we need to transform this v:shape into img. This should only happen on IE8. element.forEach( function( child ) { if ( child.attributes && child.attributes.src ) { src = child.attributes.src; } }, CKEDITOR.NODE_ELEMENT, true ); element.filterChildren( filter ); element.name = 'img'; element.attributes.src = element.attributes.src || src; delete element.attributes.type; } return; }, 'style': function() { // We don't want to let any styles in. Firefox tends to add some. return false; }, 'object': function( element ) { // The specs about object `data` attribute: // Address of the resource as a valid URL. At least one of data and type must be defined. // If there is not `data`, skip the object element. (https://dev.ckeditor.com/ticket/17001) return !!( element.attributes && element.attributes.data ); }, // Integrate page breaks with `pagebreak` plugin (#2598). 'br': function( element ) { if ( !editor.plugins.pagebreak ) { return; } var styles = tools.parseCssText( element.attributes.style, true ); // Safari uses `break-before` instead of `page-break-before` to recognize page breaks. if ( styles[ 'page-break-before' ] === 'always' || styles[ 'break-before' ] === 'page' ) { var pagebreakEl = CKEDITOR.plugins.pagebreak.createElement( editor ); return CKEDITOR.htmlParser.fragment.fromHtml( pagebreakEl.getOuterHtml() ).children[ 0 ]; } } }, attributes: { 'style': function( styles, element ) { // Returning false deletes the attribute. return Style.normalizedStyles( element, editor ) || false; }, 'class': function( classes ) { // The (el\d+)|(font\d+) are default Excel classes for table cells and text. return falseIfEmpty( classes.replace( /(el\d+)|(font\d+)|msonormal|msolistparagraph\w*/ig, '' ) ); }, 'cellspacing': remove, 'cellpadding': remove, 'border': remove, 'v:shapes': remove, 'o:spid': remove }, comment: function( element ) { if ( element.match( /\[if.* supportFields.*\]/ ) ) { inComment++; } if ( element == '[endif]' ) { inComment = inComment > 0 ? inComment - 1 : 0; } return false; }, text: function( content, node ) { if ( inComment ) { return ''; } var grandparent = node.parent && node.parent.parent; if ( grandparent && grandparent.attributes && grandparent.attributes.style && grandparent.attributes.style.match( /mso-list:\s*ignore/i ) ) { return content.replace( / /g, ' ' ); } return content; } }; tools.array.forEach( shapeTags, function( shapeTag ) { rules.elements[ shapeTag ] = shapeTagging; } ); return rules; function shapeTagging( element ) { // Check if regular or canvas shape (#1088). if ( element.attributes[ 'o:gfxdata' ] || element.parent.name === 'v:group' ) { shapesIds.push( element.attributes.id ); } } }; /** * Namespace containing list-oriented helper methods. * * @private * @since 4.13.0 * @member CKEDITOR.plugins.pastetools.filters.word */ plug.lists = { /** * Checks if a given element is a list item-alike. * * @private * @since 4.13.0 * @param {CKEDITOR.editor} editor * @param {CKEDITOR.htmlParser.element} element * @returns {Boolean} * @member CKEDITOR.plugins.pastetools.filters.word.lists */ thisIsAListItem: function( editor, element ) { if ( Heuristics.isEdgeListItem( editor, element ) ) { return true; } /*jshint -W024 */ // Normally a style of the sort that looks like "mso-list: l0 level1 lfo1" // indicates a list element, but the same style may appear in a

      that's within a

    2. . if ( ( element.attributes.style && element.attributes.style.match( /mso\-list:\s?l\d/ ) && element.parent.name !== 'li' ) || element.attributes[ 'cke-dissolved' ] || element.getHtml().match( // ) ) { return true; } return false; /*jshint +W024 */ }, /** * Converts an element to an element with the `cke:li` tag name. * * @private * @since 4.13.0 * @param {CKEDITOR.editor} editor * @param {CKEDITOR.htmlParser.element} element * @member CKEDITOR.plugins.pastetools.filters.word.lists */ convertToFakeListItem: function( editor, element ) { if ( Heuristics.isDegenerateListItem( editor, element ) ) { Heuristics.assignListLevels( editor, element ); } // A dummy call to cache parsed list info inside of cke-list-* attributes. this.getListItemInfo( element ); if ( !element.attributes[ 'cke-dissolved' ] ) { // The symbol is usually the first text node descendant // of the element that doesn't start with a whitespace character; var symbol; element.forEach( function( element ) { // Sometimes there are custom markers represented as images. // They can be recognized by the distinctive alt attribute value. if ( !symbol && element.name == 'img' && element.attributes[ 'cke-ignored' ] && element.attributes.alt == '*' ) { symbol = '·'; // Remove the "symbol" now, since it's the best opportunity to do so. element.remove(); } }, CKEDITOR.NODE_ELEMENT ); element.forEach( function( element ) { if ( !symbol && !element.value.match( /^ / ) ) { symbol = element.value; } }, CKEDITOR.NODE_TEXT ); // Without a symbol this isn't really a list item. if ( typeof symbol == 'undefined' ) { return; } element.attributes[ 'cke-symbol' ] = symbol.replace( /(?: | ).*$/, '' ); List.removeSymbolText( element ); } var styles = element.attributes && tools.parseCssText( element.attributes.style ); // Default list has 40px padding. To correct indentation we need to reduce margin-left by 40px for each list level. // Additionally margin has to be reduced by sum of margins of each parent, however it can't be done until list are structured in a tree (#2870). // Note margin left is absent in IE pasted content. if ( styles[ 'margin-left' ] ) { var margin = styles[ 'margin-left' ], level = element.attributes[ 'cke-list-level' ]; // Ignore negative margins (#2870). margin = Math.max( CKEDITOR.tools.convertToPx( margin ) - 40 * level, 0 ); if ( margin ) { styles[ 'margin-left' ] = margin + 'px'; } else { delete styles[ 'margin-left' ]; } element.attributes.style = CKEDITOR.tools.writeCssText( styles ); } // Converting to a normal list item would implicitly wrap the element around an
        . element.name = 'cke:li'; }, /** * Converts any fake list items contained within `root` into real `
      • ` elements. * * @private * @since 4.13.0 * @param {CKEDITOR.htmlParser.element} root * @returns {CKEDITOR.htmlParser.element[]} An array of converted elements. * @member CKEDITOR.plugins.pastetools.filters.word.lists */ convertToRealListItems: function( root ) { var listElements = []; // Select and clean up list elements. root.forEach( function( element ) { if ( element.name == 'cke:li' ) { element.name = 'li'; listElements.push( element ); } }, CKEDITOR.NODE_ELEMENT, false ); return listElements; }, removeSymbolText: function( element ) { // ...from a list element. var symbol = element.attributes[ 'cke-symbol' ], // Find the first element which contains symbol to be replaced (#2690). node = element.findOne( function( node ) { // Since symbol may contains special characters we use `indexOf` (instead of RegExp) which is sufficient (#877). return node.value && node.value.indexOf( symbol ) > -1; }, true ), parent; if ( node ) { node.value = node.value.replace( symbol, '' ); parent = node.parent; if ( parent.getHtml().match( /^(\s| )*$/ ) && parent !== element ) { parent.remove(); } else if ( !node.value ) { node.remove(); } } }, setListSymbol: function( list, symbol, level ) { level = level || 1; var style = tools.parseCssText( list.attributes.style ); if ( list.name == 'ol' ) { if ( list.attributes.type || style[ 'list-style-type' ] ) return; var typeMap = { '[ivx]': 'lower-roman', '[IVX]': 'upper-roman', '[a-z]': 'lower-alpha', '[A-Z]': 'upper-alpha', '\\d': 'decimal' }; for ( var type in typeMap ) { if ( List.getSubsectionSymbol( symbol ).match( new RegExp( type ) ) ) { style[ 'list-style-type' ] = typeMap[ type ]; break; } } list.attributes[ 'cke-list-style-type' ] = style[ 'list-style-type' ]; } else { var symbolMap = { '·': 'disc', 'o': 'circle', '§': 'square' // In Word this is a square. }; if ( !style[ 'list-style-type' ] && symbolMap[ symbol ] ) { style[ 'list-style-type' ] = symbolMap[ symbol ]; } } List.setListSymbol.removeRedundancies( style, level ); ( list.attributes.style = CKEDITOR.tools.writeCssText( style ) ) || delete list.attributes.style; }, setListStart: function( list ) { var symbols = [], offset = 0; for ( var i = 0; i < list.children.length; i++ ) { symbols.push( list.children[ i ].attributes[ 'cke-symbol' ] || '' ); } // When a list starts with a sublist, use the next element as a start indicator. if ( !symbols[ 0 ] ) { offset++; } // Attribute set in setListSymbol() switch ( list.attributes[ 'cke-list-style-type' ] ) { case 'lower-roman': case 'upper-roman': list.attributes.start = List.toArabic( List.getSubsectionSymbol( symbols[ offset ] ) ) - offset; break; case 'lower-alpha': case 'upper-alpha': list.attributes.start = List.getSubsectionSymbol( symbols[ offset ] ).replace( /\W/g, '' ).toLowerCase().charCodeAt( 0 ) - 96 - offset; break; case 'decimal': list.attributes.start = ( parseInt( List.getSubsectionSymbol( symbols[ offset ] ), 10 ) - offset ) || 1; break; } if ( list.attributes.start == '1' ) { delete list.attributes.start; } delete list.attributes[ 'cke-list-style-type' ]; }, /** * Numbering helper. * * @since 4.13.0 * @member CKEDITOR.plugins.pastetools.filters.word.lists */ numbering: { /** * Converts the list marker value into a decimal number. * * var toNumber = CKEDITOR.plugins.pastefromword.lists.numbering.toNumber; * * console.log( toNumber( 'XIV', 'upper-roman' ) ); // Logs 14. * console.log( toNumber( 'd', 'lower-alpha' ) ); // Logs 4. * console.log( toNumber( '35', 'decimal' ) ); // Logs 35. * console.log( toNumber( '404', 'foo' ) ); // Logs 1. * * @param {String} marker * @param {String} markerType Marker type according to CSS `list-style-type` values. * @returns {Number} * @member CKEDITOR.plugins.pastetools.filters.word.lists.numbering */ toNumber: function( marker, markerType ) { // Functions copied straight from old PFW implementation, no need to reinvent the wheel. function fromAlphabet( str ) { var alpahbets = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 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; } function fromRoman( str ) { var 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' ] ]; 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; } if ( markerType == 'decimal' ) { return Number( marker ); } else if ( markerType == 'upper-roman' || markerType == 'lower-roman' ) { return fromRoman( marker.toUpperCase() ); } else if ( markerType == 'lower-alpha' || markerType == 'upper-alpha' ) { return fromAlphabet( marker ); } else { return 1; } }, /** * Returns a list style based on the Word marker content. * * var getStyle = CKEDITOR.plugins.pastefromword.lists.numbering.getStyle; * * console.log( getStyle( '4' ) ); // Logs: "decimal" * console.log( getStyle( 'b' ) ); // Logs: "lower-alpha" * console.log( getStyle( 'P' ) ); // Logs: "upper-alpha" * console.log( getStyle( 'i' ) ); // Logs: "lower-roman" * console.log( getStyle( 'X' ) ); // Logs: "upper-roman" * * * **Implementation note:** Characters `c` and `d` are not converted to roman on purpose. It is 100 and 500 respectively, so * you rarely go with a list up until this point, while it is common to start with `c` and `d` in alpha. * * @param {String} marker Marker content retained from Word, e.g. `1`, `7`, `XI`, `b`. * @returns {String} Resolved marker type. * @member CKEDITOR.plugins.pastetools.filters.word.lists.numbering */ getStyle: function( marker ) { var typeMap = { 'i': 'lower-roman', 'v': 'lower-roman', 'x': 'lower-roman', 'l': 'lower-roman', 'm': 'lower-roman', 'I': 'upper-roman', 'V': 'upper-roman', 'X': 'upper-roman', 'L': 'upper-roman', 'M': 'upper-roman' }, firstCharacter = marker.slice( 0, 1 ), type = typeMap[ firstCharacter ]; if ( !type ) { type = 'decimal'; if ( firstCharacter.match( /[a-z]/ ) ) { type = 'lower-alpha'; } if ( firstCharacter.match( /[A-Z]/ ) ) { type = 'upper-alpha'; } } return type; } }, // Taking into account cases like "1.1.2." etc. - get the last element. getSubsectionSymbol: function( symbol ) { return ( symbol.match( /([\da-zA-Z]+).?$/ ) || [ 'placeholder', '1' ] )[ 1 ]; }, setListDir: function( list ) { var dirs = { ltr: 0, rtl: 0 }; list.forEach( function( child ) { if ( child.name == 'li' ) { var dir = child.attributes.dir || child.attributes.DIR || ''; if ( dir.toLowerCase() == 'rtl' ) { dirs.rtl++; } else { dirs.ltr++; } } }, CKEDITOR.ELEMENT_NODE ); if ( dirs.rtl > dirs.ltr ) { list.attributes.dir = 'rtl'; } }, createList: function( element ) { // "o" symbolizes a circle in unordered lists. if ( ( element.attributes[ 'cke-symbol' ].match( /([\da-np-zA-NP-Z]).?/ ) || [] )[ 1 ] ) { return new CKEDITOR.htmlParser.element( 'ol' ); } return new CKEDITOR.htmlParser.element( 'ul' ); }, /** * @private * @since 4.13.0 * @param {CKEDITOR.htmlParser.element} root An element to be looked through for lists. * @returns {CKEDITOR.htmlParser.element[]} An array of created list items. * @member CKEDITOR.plugins.pastetools.filters.word.lists */ createLists: function( root ) { var element, level, i, j, listElements = List.convertToRealListItems( root ); if ( listElements.length === 0 ) { return []; } // Chop data into continuous lists. var lists = List.groupLists( listElements ); // Create nested list structures. for ( i = 0; i < lists.length; i++ ) { var list = lists[ i ], firstLevel1Element = list[ 0 ]; // To determine the type of the top-level list a level 1 element is needed. for ( j = 0; j < list.length; j++ ) { if ( list[ j ].attributes[ 'cke-list-level' ] == 1 ) { firstLevel1Element = list[ j ]; break; } } var containerStack = [ List.createList( firstLevel1Element ) ], // List wrapper (ol/ul). innermostContainer = containerStack[ 0 ], allContainers = [ containerStack[ 0 ] ]; // Insert first known list item before the list wrapper. innermostContainer.insertBefore( list[ 0 ] ); for ( j = 0; j < list.length; j++ ) { element = list[ j ]; level = element.attributes[ 'cke-list-level' ]; while ( level > containerStack.length ) { var content = List.createList( element ); var children = innermostContainer.children; if ( children.length > 0 ) { children[ children.length - 1 ].add( content ); } else { var container = new CKEDITOR.htmlParser.element( 'li', { style: 'list-style-type:none' } ); container.add( content ); innermostContainer.add( container ); } containerStack.push( content ); allContainers.push( content ); innermostContainer = content; if ( level == containerStack.length ) { List.setListSymbol( content, element.attributes[ 'cke-symbol' ], level ); } } while ( level < containerStack.length ) { containerStack.pop(); innermostContainer = containerStack[ containerStack.length - 1 ]; if ( level == containerStack.length ) { List.setListSymbol( innermostContainer, element.attributes[ 'cke-symbol' ], level ); } } // For future reference this is where the list elements are actually put into the lists. element.remove(); innermostContainer.add( element ); } // Try to set the symbol for the root (level 1) list. var level1Symbol; if ( containerStack[ 0 ].children.length ) { level1Symbol = containerStack[ 0 ].children[ 0 ].attributes[ 'cke-symbol' ]; if ( !level1Symbol && containerStack[ 0 ].children.length > 1 ) { level1Symbol = containerStack[0].children[1].attributes[ 'cke-symbol' ]; } if ( level1Symbol ) { List.setListSymbol( containerStack[ 0 ], level1Symbol ); } } // This can be done only after all the list elements are where they should be. for ( j = 0; j < allContainers.length; j++ ) { List.setListStart( allContainers[ j ] ); } // Last but not least apply li[start] if needed, also this needs to be done once ols are final. for ( j = 0; j < list.length; j++ ) { this.determineListItemValue( list[ j ] ); } } // Adjust left margin based on parents sum of parents left margin (#2870). CKEDITOR.tools.array.forEach( listElements, function( element ) { var listParents = getParentListItems( element ), leftOffset = getTotalMarginLeft( listParents ), styles, marginLeft; if ( !leftOffset ) { return; } element.attributes = element.attributes || {}; styles = CKEDITOR.tools.parseCssText( element.attributes.style ); marginLeft = styles[ 'margin-left' ] || 0; marginLeft = Math.max( parseInt( marginLeft, 10 ) - leftOffset, 0 ); if ( marginLeft ) { styles[ 'margin-left' ] = marginLeft + 'px'; } else { delete styles[ 'margin-left' ]; } element.attributes.style = CKEDITOR.tools.writeCssText( styles ); } ); return listElements; function getParentListItems( element ) { var parents = [], parent = element.parent; while ( parent ) { if ( parent.name === 'li' ) { parents.push( parent ); } parent = parent.parent; } return parents; } function getTotalMarginLeft( elements ) { return CKEDITOR.tools.array.reduce( elements, function( total, element ) { if ( element.attributes && element.attributes.style ) { var marginLeft = CKEDITOR.tools.parseCssText( element.attributes.style )[ 'margin-left' ]; } return marginLeft ? total + parseInt( marginLeft, 10 ) : total; }, 0 ); } }, /** * Final cleanup — removes all `cke-*` helper attributes. * * @private * @since 4.13.0 * @param {CKEDITOR.htmlParser.element[]} listElements * @member CKEDITOR.plugins.pastetools.filters.word.lists */ cleanup: function( listElements ) { var tempAttributes = [ 'cke-list-level', 'cke-symbol', 'cke-list-id', 'cke-indentation', 'cke-dissolved' ], i, j; for ( i = 0; i < listElements.length; i++ ) { for ( j = 0; j < tempAttributes.length; j++ ) { delete listElements[ i ].attributes[ tempAttributes[ j ] ]; } } }, /** * Tries to determine the `li[value]` attribute for a given list item. The `element` given must * have a parent in order for this function to work properly. * * @private * @since 4.13.0 * @param {CKEDITOR.htmlParser.element} element * @member CKEDITOR.plugins.pastetools.filters.word.lists */ determineListItemValue: function( element ) { if ( element.parent.name !== 'ol' ) { // li[value] make sense only for list items in ordered list. return; } var assumedValue = this.calculateValue( element ), cleanSymbol = element.attributes[ 'cke-symbol' ].match( /[a-z0-9]+/gi ), computedValue, listType; if ( cleanSymbol ) { // Note that we always want to use last match, just because of markers like "1.1.4" "1.A.a.IV" etc. cleanSymbol = cleanSymbol[ cleanSymbol.length - 1 ]; // We can determine proper value only if we know what type of list is it. // So we need to check list wrapper if it has this information. listType = element.parent.attributes[ 'cke-list-style-type' ] || this.numbering.getStyle( cleanSymbol ); computedValue = this.numbering.toNumber( cleanSymbol, listType ); if ( computedValue !== assumedValue ) { element.attributes.value = computedValue; } } }, /** * Calculates the value for a given `
      • ` element based on preceding list items (e.g. the `value` * attribute). It could also look at the start attribute of its parent list (`
          `). * * @private * @since 4.13.0 * @param {CKEDITOR.htmlParser.element} element The `
        1. ` element. * @returns {Number} * @member CKEDITOR.plugins.pastetools.filters.word.lists */ calculateValue: function( element ) { if ( !element.parent ) { return 1; } var list = element.parent, elementIndex = element.getIndex(), valueFound = null, // Index of the element with value attribute. valueElementIndex, curElement, i; // Look for any preceding li[value]. for ( i = elementIndex; i >= 0 && valueFound === null; i-- ) { curElement = list.children[ i ]; if ( curElement.attributes && curElement.attributes.value !== undefined ) { valueElementIndex = i; valueFound = parseInt( curElement.attributes.value, 10 ); } } // Still if no li[value] was found, we'll check the list. if ( valueFound === null ) { valueFound = list.attributes.start !== undefined ? parseInt( list.attributes.start, 10 ) : 1; valueElementIndex = 0; } return valueFound + ( elementIndex - valueElementIndex ); }, /** * @private * @since 4.13.0 * @param {CKEDITOR.htmlParser.element} element * @member CKEDITOR.plugins.pastetools.filters.word.lists */ dissolveList: function( element ) { var nameIs = function( name ) { return function( element ) { return element.name == name; }; }, isList = function( element ) { return nameIs( 'ul' )( element ) || nameIs( 'ol' )( element ); }, arrayTools = CKEDITOR.tools.array, elements = [], children, i; element.forEach( function( child ) { elements.push( child ); }, CKEDITOR.NODE_ELEMENT, false ); var items = arrayTools.filter( elements, nameIs( 'li' ) ), lists = arrayTools.filter( elements, isList ); arrayTools.forEach( lists, function( list ) { var type = list.attributes.type, start = parseInt( list.attributes.start, 10 ) || 1, level = countParents( isList, list ) + 1; if ( !type ) { var style = tools.parseCssText( list.attributes.style ); type = style[ 'list-style-type' ]; } arrayTools.forEach( arrayTools.filter( list.children, nameIs( 'li' ) ), function( child, index ) { var symbol; switch ( type ) { case 'disc': symbol = '·'; break; case 'circle': symbol = 'o'; break; case 'square': symbol = '§'; break; case '1': case 'decimal': symbol = ( start + index ) + '.'; break; case 'a': case 'lower-alpha': symbol = String.fromCharCode( 'a'.charCodeAt( 0 ) + start - 1 + index ) + '.'; break; case 'A': case 'upper-alpha': symbol = String.fromCharCode( 'A'.charCodeAt( 0 ) + start - 1 + index ) + '.'; break; case 'i': case 'lower-roman': symbol = toRoman( start + index ) + '.'; break; case 'I': case 'upper-roman': symbol = toRoman( start + index ).toUpperCase() + '.'; break; default: symbol = list.name == 'ul' ? '·' : ( start + index ) + '.'; } child.attributes[ 'cke-symbol' ] = symbol; child.attributes[ 'cke-list-level' ] = level; } ); } ); children = arrayTools.reduce( items, function( acc, listElement ) { var child = listElement.children[ 0 ]; if ( child && child.name && child.attributes.style && child.attributes.style.match( /mso-list:/i ) ) { Style.pushStylesLower( listElement, { 'list-style-type': true, 'display': true } ); var childStyle = tools.parseCssText( child.attributes.style, true ); Style.setStyle( listElement, 'mso-list', childStyle[ 'mso-list' ], true ); Style.setStyle( child, 'mso-list', '' ); // mso-list takes precedence in determining the level. delete listElement[ 'cke-list-level' ]; // If this style has a value it's usually "none". This marks such list elements for deletion. var styleName = childStyle.display ? 'display' : childStyle.DISPLAY ? 'DISPLAY' : ''; if ( styleName ) { Style.setStyle( listElement, 'display', childStyle[ styleName ], true ); } } // Don't include elements put there only to contain another list. if ( listElement.children.length === 1 && isList( listElement.children[ 0 ] ) ) { return acc; } listElement.name = 'p'; listElement.attributes[ 'cke-dissolved' ] = true; acc.push( listElement ); return acc; }, [] ); for ( i = children.length - 1; i >= 0; i-- ) { children[ i ].insertAfter( element ); } for ( i = lists.length - 1; i >= 0; i-- ) { delete lists[ i ].name; } function toRoman( number ) { if ( number >= 50 ) return 'l' + toRoman( number - 50 ); if ( number >= 40 ) return 'xl' + toRoman( number - 40 ); if ( number >= 10 ) return 'x' + toRoman( number - 10 ); if ( number == 9 ) return 'ix'; if ( number >= 5 ) return 'v' + toRoman( number - 5 ); if ( number == 4 ) return 'iv'; if ( number >= 1 ) return 'i' + toRoman( number - 1 ); return ''; } function countParents( condition, element ) { return count( element, 0 ); function count( parent, number ) { if ( !parent || !parent.parent ) { return number; } if ( condition( parent.parent ) ) { return count( parent.parent, number + 1 ); } else { return count( parent.parent, number ); } } } }, groupLists: function( listElements ) { // Chop data into continuous lists. var i, element, lists = [ [ listElements[ 0 ] ] ], lastList = lists[ 0 ]; element = listElements[ 0 ]; element.attributes[ 'cke-indentation' ] = element.attributes[ 'cke-indentation' ] || getElementIndentation( element ); for ( i = 1; i < listElements.length; i++ ) { element = listElements[ i ]; var previous = listElements[ i - 1 ]; element.attributes[ 'cke-indentation' ] = element.attributes[ 'cke-indentation' ] || getElementIndentation( element ); if ( element.previous !== previous ) { List.chopDiscontinuousLists( lastList, lists ); lists.push( lastList = [] ); } lastList.push( element ); } List.chopDiscontinuousLists( lastList, lists ); return lists; }, /** * Converts a single, flat list items array into an array with a hierarchy of items. * * As the list gets chopped, it will be forced to render as a separate list, even if it has a deeper nesting level. * For example, for level 3 it will create a structure like `ol > li > ol > li > ol > li`. * * Note that list items within a single list but with different levels that did not get chopped * will still be rendered as a list tree later. * * @private * @since 4.13.0 * @param {CKEDITOR.htmlParser.element[]} list An array containing list items. * @param {CKEDITOR.htmlParser.element[]} lists All the lists in the pasted content represented by an array of arrays * of list items. Modified by this method. * @member CKEDITOR.plugins.pastetools.filters.word.lists */ chopDiscontinuousLists: function( list, lists ) { var levelSymbols = {}; var choppedLists = [ [] ], lastListInfo; for ( var i = 0; i < list.length; i++ ) { var lastSymbol = levelSymbols[ list[ i ].attributes[ 'cke-list-level' ] ], currentListInfo = this.getListItemInfo( list[ i ] ), currentSymbol, forceType; if ( lastSymbol ) { // An "h" before an "i". forceType = lastSymbol.type.match( /alpha/ ) && lastSymbol.index == 7 ? 'alpha' : forceType; // An "n" before an "o". forceType = list[ i ].attributes[ 'cke-symbol' ] == 'o' && lastSymbol.index == 14 ? 'alpha' : forceType; currentSymbol = List.getSymbolInfo( list[ i ].attributes[ 'cke-symbol' ], forceType ); currentListInfo = this.getListItemInfo( list[ i ] ); // Based on current and last index we'll decide if we want to chop list. if ( // If the last list was a different list type then chop it! lastSymbol.type != currentSymbol.type || // If those are logically different lists, and current list is not a continuation (https://dev.ckeditor.com/ticket/7918): ( lastListInfo && currentListInfo.id != lastListInfo.id && !this.isAListContinuation( list[ i ] ) ) ) { choppedLists.push( [] ); } } else { currentSymbol = List.getSymbolInfo( list[ i ].attributes[ 'cke-symbol' ] ); } // Reset all higher levels for ( var j = parseInt( list[ i ].attributes[ 'cke-list-level' ], 10 ) + 1; j < 20; j++ ) { if ( levelSymbols[ j ] ) { delete levelSymbols[ j ]; } } levelSymbols[ list[ i ].attributes[ 'cke-list-level' ] ] = currentSymbol; choppedLists[ choppedLists.length - 1 ].push( list[ i ] ); lastListInfo = currentListInfo; } [].splice.apply( lists, [].concat( [ tools.indexOf( lists, list ), 1 ], choppedLists ) ); }, /** * Checks if this list is a direct continuation of a list interrupted by a list with a different ID and * with a different level. So if you look at the following list: * * * list1 level1 * * list1 level1 * * list2 level2 * * list2 level2 * * list1 level1 * * It would return `true`, which means it is a continuation, and should not be chopped. However, if any paragraph or * anything else appears in-between, it should be broken into different lists. * * You can see fixtures from issue https://dev.ckeditor.com/ticket/7918 as an example. * * @private * @since 4.13.0 * @param {CKEDITOR.htmlParser.element} listElement The list to be checked. * @returns {Boolean} * @member CKEDITOR.plugins.pastetools.filters.word.lists */ isAListContinuation: function( listElement ) { var prev = listElement; do { prev = prev.previous; if ( prev && prev.type === CKEDITOR.NODE_ELEMENT ) { if ( prev.attributes[ 'cke-list-level' ] === undefined ) { // Not a list, so looks like an interrupted list. return false; } if ( prev.attributes[ 'cke-list-level' ] === listElement.attributes[ 'cke-list-level' ] ) { // Same level, so we want to check if this is a continuation. return prev.attributes[ 'cke-list-id' ] === listElement.attributes[ 'cke-list-id' ]; } } } while ( prev ); return false; }, // Source: http://stackoverflow.com/a/17534350/3698944 toArabic: function( symbol ) { if ( !symbol.match( /[ivxl]/i ) ) return 0; if ( symbol.match( /^l/i ) ) return 50 + List.toArabic( symbol.slice( 1 ) ); if ( symbol.match( /^lx/i ) ) return 40 + List.toArabic( symbol.slice( 1 ) ); if ( symbol.match( /^x/i ) ) return 10 + List.toArabic( symbol.slice( 1 ) ); if ( symbol.match( /^ix/i ) ) return 9 + List.toArabic( symbol.slice( 2 ) ); if ( symbol.match( /^v/i ) ) return 5 + List.toArabic( symbol.slice( 1 ) ); if ( symbol.match( /^iv/i ) ) return 4 + List.toArabic( symbol.slice( 2 ) ); if ( symbol.match( /^i/i ) ) return 1 + List.toArabic( symbol.slice( 1 ) ); // Ignore other characters. return List.toArabic( symbol.slice( 1 ) ); }, /** * Returns an object describing the given `symbol`. * * @private * @since 4.13.0 * @param {String} symbol * @param {String} type * @returns {Object} ret * @returns {Number} ret.index Identified numbering value * @returns {String} ret.type One of: `decimal`, `disc`, `circle`, `square`, `roman`, `alpha`. * @member CKEDITOR.plugins.pastetools.filters.word.lists */ getSymbolInfo: function( symbol, type ) { var symbolCase = symbol.toUpperCase() == symbol ? 'upper-' : 'lower-', symbolMap = { '·': [ 'disc', -1 ], 'o': [ 'circle', -2 ], '§': [ 'square', -3 ] }; if ( symbol in symbolMap || ( type && type.match( /(disc|circle|square)/ ) ) ) { return { index: symbolMap[ symbol ][ 1 ], type: symbolMap[ symbol ][ 0 ] }; } if ( symbol.match( /\d/ ) ) { return { index: symbol ? parseInt( List.getSubsectionSymbol( symbol ) , 10 ) : 0, type: 'decimal' }; } symbol = symbol.replace( /\W/g, '' ).toLowerCase(); if ( ( !type && symbol.match( /[ivxl]+/i ) ) || ( type && type != 'alpha' ) || type == 'roman' ) { return { index: List.toArabic( symbol ), type: symbolCase + 'roman' }; } if ( symbol.match( /[a-z]/i ) ) { return { index: symbol.charCodeAt( 0 ) - 97, type: symbolCase + 'alpha' }; } return { index: -1, type: 'disc' }; }, /** * Returns Word-generated information about the given list item, mainly by parsing the `mso-list` * CSS property. * * Note: Paragraphs with `mso-list` are also counted as list items because Word serves * list items as paragraphs. * * @private * @since 4.13.0 * @param {CKEDITOR.htmlParser.element} list * @returns ret * @returns {String} ret.id List ID. Usually it is a decimal string. * @returns {String} ret.level List nesting level. `0` means it is the outermost list. Usually it is * a decimal string. * @member CKEDITOR.plugins.pastetools.filters.word.lists */ getListItemInfo: function( list ) { if ( list.attributes[ 'cke-list-id' ] !== undefined ) { // List was already resolved. return { id: list.attributes[ 'cke-list-id' ], level: list.attributes[ 'cke-list-level' ] }; } var propValue = tools.parseCssText( list.attributes.style )[ 'mso-list' ], ret = { id: '0', level: '1' }; if ( propValue ) { // Add one whitespace so it's easier to match values assuming that all of these are separated with \s. propValue += ' '; ret.level = propValue.match( /level(.+?)\s+/ )[ 1 ]; ret.id = propValue.match( /l(\d+?)\s+/ )[ 1 ]; } // Store values. List level will be reused if present to prevent regressions. list.attributes[ 'cke-list-level' ] = list.attributes[ 'cke-list-level' ] !== undefined ? list.attributes[ 'cke-list-level' ] : ret.level; list.attributes[ 'cke-list-id' ] = ret.id; return ret; } }; List = plug.lists; /** * Namespace containing methods used to process the pasted content using heuristics. * * @private * @since 4.13.0 * @member CKEDITOR.plugins.pastetools.filters.word */ plug.heuristics = { /** * Decides if an `item` looks like a list item in Microsoft Edge. * * Note: It will return `false` when run in a browser other than Microsoft Edge, despite the configuration. * * @param {CKEDITOR.editor} editor * @param {CKEDITOR.htmlParser.element} item * @returns {Boolean} * @member CKEDITOR.plugins.pastetools.filters.word.heuristics * @private */ isEdgeListItem: function( editor, item ) { if ( !CKEDITOR.env.edge || !editor.config.pasteFromWord_heuristicsEdgeList ) { return false; } var innerText = ''; // Edge doesn't provide any list-specific markup, so the only way to guess if it's a list is to check the text structure. item.forEach && item.forEach( function( text ) { innerText += text.value; }, CKEDITOR.NODE_TEXT ); if ( innerText.match( /^(?: | )*\(?[a-zA-Z0-9]+?[\.\)](?: | ){2,}/ ) ) { return true; } return Heuristics.isDegenerateListItem( editor, item ); }, /** * Cleans up a given list `item`. It is needed to remove Edge pre-marker indentation, since Edge pastes * list items as plain paragraphs with multiple ` `s before the list marker. * * @since 4.7.0 * @param {CKEDITOR.htmlParser.element} item The pre-processed list-like item, like a paragraph. * @member CKEDITOR.plugins.pastetools.filters.word.heuristics * @private */ cleanupEdgeListItem: function( item ) { var textOccurred = false; item.forEach( function( node ) { if ( !textOccurred ) { node.value = node.value.replace( /^(?: |[\s])+/, '' ); // If there's any remaining text beside nbsp it means that we can stop filtering. if ( node.value.length ) { textOccurred = true; } } }, CKEDITOR.NODE_TEXT ); }, /** * Checks whether an element is a degenerate list item. * * Degenerate list items are elements that have some styles specific to list items, * but lack the ones that could be used to determine their features (like list level etc.). * * @param {CKEDITOR.editor} editor * @param {CKEDITOR.htmlParser.element} item * @returns {Boolean} * @member CKEDITOR.plugins.pastetools.filters.word.heuristics * @private * */ isDegenerateListItem: function( editor, item ) { return !!item.attributes[ 'cke-list-level' ] || ( item.attributes.style && !item.attributes.style.match( /mso\-list/ ) && !!item.find( function( child ) { // In rare cases there's no indication that a heading is a list item other than // the fact that it has a child element containing only a list symbol. if ( child.type == CKEDITOR.NODE_ELEMENT && item.name.match( /h\d/i ) && child.getHtml().match( /^[a-zA-Z0-9]+?[\.\)]$/ ) ) { return true; } var css = tools.parseCssText( child.attributes && child.attributes.style, true ); if ( !css ) { return false; } var fontSize = css.font || css['font-size'] || '', fontFamily = css[ 'font-family' ] || ''; return ( fontSize.match( /7pt/i ) && !!child.previous ) || fontFamily.match( /symbol/i ); }, true ).length ); }, /** * Assigns list levels to the `item` and all directly subsequent nodes for which {@link #isEdgeListItem} returns `true`. * * The algorithm determines list item level based on the lowest common non-zero difference in indentation * of two or more subsequent list-like elements. * * @param {CKEDITOR.editor} editor * @param {CKEDITOR.htmlParser.element} item The first item of the list. * @returns {Object/null} `null` if list levels were already applied, or an object used to verify results in tests. * @returns {Number[]} return.indents * @returns {Number[]} return.levels * @returns {Number[]} return.diffs * @member CKEDITOR.plugins.pastetools.filters.word.heuristics * @private */ assignListLevels: function( editor, item ) { // If levels were already calculated, it means that this function was called for preceeding element. There's // no need to do this heavy work. if ( item.attributes && item.attributes[ 'cke-list-level' ] !== undefined ) { return; } var indents = [ getElementIndentation( item ) ], items = [ item ], levels = [], array = CKEDITOR.tools.array, map = array.map; while ( item.next && item.next.attributes && !item.next.attributes[ 'cke-list-level' ] && Heuristics.isDegenerateListItem( editor, item.next ) ) { item = item.next; indents.push( getElementIndentation( item ) ); items.push( item ); } // An array with indentation difference between n and n-1 list item. It's 0 for the first one. var indentationDiffs = map( indents, function( curIndent, i ) { return i === 0 ? 0 : curIndent - indents[ i - 1 ]; } ), // Guess indentation step, but it must not be equal to 0. indentationPerLevel = this.guessIndentationStep( array.filter( indents, function( val ) { return val !== 0; } ) ); // Here's the tricky part, we need to magically figure out what is the indentation difference between list level. levels = map( indents, function( val ) { // Make sure that the level is a full number. return Math.round( val / indentationPerLevel ); } ); // Level can not be equal to 0, in case if it happens bump all the levels by 1, if ( array.indexOf( levels, 0 ) !== -1 ) { levels = map( levels, function( val ) { return val + 1; } ); } // Assign levels to a proper place. array.forEach( items, function( curItem, index ) { curItem.attributes[ 'cke-list-level' ] = levels[ index ]; } ); return { indents: indents, levels: levels, diffs: indentationDiffs }; }, /** * Given an array of list indentations, this method tries to guess what the indentation difference per list level is. * E.g. assuming that you have something like: * * * foo (indentation 30px) * * bar (indentation 90px) * * baz (indentation 90px) * * baz (indentation 115px) * * baz (indentation 60px) * * The method will return `30`. * * @param {Number[]} indentations An array of indentation sizes. * @returns {Number/null} A number or `null` if empty `indentations` was given. * @member CKEDITOR.plugins.pastetools.filters.word.heuristics * @private */ guessIndentationStep: function( indentations ) { return indentations.length ? Math.min.apply( null, indentations ) : null; }, /** * Shifts lists that were deformed during pasting one level down * so that the list structure matches the content copied from Word. * * @param {CKEDITOR.htmlParser.element} element * @member CKEDITOR.plugins.pastetools.filters.word.heuristics * @private * */ correctLevelShift: function( element ) { var isShiftedList = function( list ) { return list.children && list.children.length == 1 && Heuristics.isShifted( list.children[ 0 ] ); }; if ( this.isShifted( element ) ) { var lists = CKEDITOR.tools.array.filter( element.children, function( child ) { return ( child.name == 'ul' || child.name == 'ol' ); } ); var listChildren = CKEDITOR.tools.array.reduce( lists, function( acc, list ) { var preceding = isShiftedList( list ) ? [ list ] : list.children; return preceding.concat( acc ); }, [] ); CKEDITOR.tools.array.forEach( lists, function( list ) { list.remove(); } ); CKEDITOR.tools.array.forEach( listChildren, function( child ) { // `Add` method without index always append child at the end (#796). element.add( child ); } ); delete element.name; } }, /** * Determines if the list is malformed in a manner that its items * are one level deeper than they should be. * * @param {CKEDITOR.htmlParser.element} element * @returns {Boolean} * @member CKEDITOR.plugins.pastetools.filters.word.heuristics * @private */ isShifted: function( element ) { if ( element.name !== 'li' ) { return false; } return CKEDITOR.tools.array.filter( element.children, function( child ) { if ( child.name ) { if ( child.name == 'ul' || child.name == 'ol' ) { return false; } if ( child.name == 'p' && child.children.length === 0 ) { return false; } } return true; } ).length === 0; } }; Heuristics = plug.heuristics; // Expose this function since it's useful in other places. List.setListSymbol.removeRedundancies = function( style, level ) { // 'disc' and 'decimal' are the default styles in some cases - remove redundancy. if ( ( level === 1 && style[ 'list-style-type' ] === 'disc' ) || style[ 'list-style-type' ] === 'decimal' ) { delete style[ 'list-style-type' ]; } }; function falseIfEmpty( value ) { if ( value === '' ) { return false; } return value; } // Used when filtering attributes - returning false deletes the attribute. function remove() { return false; } CKEDITOR.cleanWord = CKEDITOR.pasteFilters.word = pastetools.createFilter( { rules: [ commonFilter.rules, plug.rules ], additionalTransforms: function( html ) { // Before filtering inline all the styles to allow because some of them are available only in style // sheets. This step is skipped in IEs due to their flaky support for custom types in dataTransfer. (https://dev.ckeditor.com/ticket/16847) if ( CKEDITOR.plugins.clipboard.isCustomDataTypesSupported ) { html = commonFilter.styles.inliner.inline( html ).getBody().getHtml(); } // Sometimes Word malforms the comments. return html.replace( //g, ']-->' ); } } ); /** * See {@link CKEDITOR.plugins.pastetools.filters.word.lists}. * * @property {Object} lists * @private * @deprecated 4.13.0 * @since 4.6.0 * @member CKEDITOR.plugins.pastefromword */ /** * See {@link CKEDITOR.plugins.pastetools.filters.word.images}. * * @property {Object} images * @private * @deprecated 4.13.0 * @removed 4.16.0 * @since 4.8.0 * @member CKEDITOR.plugins.pastefromword */ /** * See {@link CKEDITOR.plugins.pastetools.filters.image}. * * @property {Object} images * @private * @removed 4.16.0 * @since 4.13.0 * @member CKEDITOR.plugins.pastetools.filters.word */ /** * See {@link CKEDITOR.plugins.pastetools.filters.image#extractFromRtf}. * * @property {Function} extractFromRtf * @private * @removed 4.16.0 * @since 4.13.0 * @member CKEDITOR.plugins.pastetools.filters.word.images */ /** * See {@link CKEDITOR.plugins.pastetools.filters.image#extractTagsFromHtml}. * * @property {Function} extractTagsFromHtml * @private * @removed 4.16.0 * @since 4.13.0 * @member CKEDITOR.plugins.pastetools.filters.word.images */ /** * See {@link CKEDITOR.plugins.pastetools.filters.word.heuristics}. * * @property {Object} heuristics * @private * @deprecated 4.13.0 * @since 4.6.2 * @member CKEDITOR.plugins.pastefromword */ /** * See {@link CKEDITOR.plugins.pastetools.filters.common.styles}. * * @property {Object} styles * @private * @deprecated 4.13.0 * @since 4.6.0 * @member CKEDITOR.plugins.pastefromword */ /** * See {@link #pasteTools_removeFontStyles}. * * **Important note:** Prior to version 4.6.0 this configuration option defaulted to `true`. * * @deprecated 4.13.0 * @since 3.1.0 * @cfg {Boolean} [pasteFromWordRemoveFontStyles=false] * @member CKEDITOR.config */ /** * Whether to transform Microsoft Word outline numbered headings into lists. * * config.pasteFromWordNumberedHeadingToList = true; * * @removed 4.6.0 * @since 3.1.0 * @cfg {Boolean} [pasteFromWordNumberedHeadingToList=false] * @member CKEDITOR.config */ /** * Whether to remove element styles that cannot be managed with the editor. Note * that this option does not handle font-specific styles, which depend on the * {@link #pasteTools_removeFontStyles} setting instead. * * config.pasteFromWordRemoveStyles = false; * * @removed 4.6.0 * @since 3.1.0 * @cfg {Boolean} [pasteFromWordRemoveStyles=true] * @member CKEDITOR.config */ /** * Activates a heuristic that helps detect lists pasted into the editor in Microsoft Edge. * * The reason why this heuristic is needed is that on pasting Microsoft Edge removes any Word-specific * metadata allowing to identify lists. * * // Disables list heuristics for Edge. * config.pasteFromWord_heuristicsEdgeList = false; * * @since 4.6.2 * @cfg {Boolean} [pasteFromWord_heuristicsEdgeList=true] * @member CKEDITOR.config */ CKEDITOR.config.pasteFromWord_heuristicsEdgeList = true; } )(); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/plugin.js0000775000201500020150000002100515203533230025045 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ /** * @fileOverview This plugin handles pasting content from Microsoft Office applications. */ ( function() { /* global confirm */ CKEDITOR.plugins.add( 'pastefromword', { requires: 'pastetools', // jscs:disable maximumLineLength lang: 'af,ar,az,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,es-mx,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,oc,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 ) { // Flag indicate this command is actually been asked instead of a generic pasting. var forceFromWord = 0, pastetoolsPath = CKEDITOR.plugins.getPath( 'pastetools' ), path = this.path, configInlineImages = editor.config.pasteFromWord_inlineImages === undefined ? true : editor.config.pasteFromWord_inlineImages, defaultFilters = [ CKEDITOR.getUrl( pastetoolsPath + 'filter/common.js' ), CKEDITOR.getUrl( pastetoolsPath + 'filter/image.js' ), CKEDITOR.getUrl( path + 'filter/default.js' ) ]; editor.addCommand( 'pastefromword', { // Snapshots are done manually by editable.insertXXX methods. canUndo: false, async: true, /** * The Paste from Word command. It will determine its pasted content from Word automatically if possible. * * At the time of writing it was working correctly only in Internet Explorer browsers, due to their * `paste` support in `document.execCommand`. * * @private * @param {CKEDITOR.editor} editor An instance of the editor where the command is being executed. * @param {Object} [data] The options object. * @param {Boolean/String} [data.notification=true] Content for a notification shown after an unsuccessful * paste attempt. If `false`, the notification will not be displayed. This parameter was added in 4.7.0. * @member CKEDITOR.editor.commands.pastefromword */ exec: function( editor, data ) { forceFromWord = 1; editor.execCommand( 'paste', { type: 'html', notification: data && typeof data.notification !== 'undefined' ? data.notification : true } ); } } ); // Register the toolbar button. CKEDITOR.plugins.clipboard.addPasteButton( editor, 'PasteFromWord', { label: editor.lang.pastefromword.toolbar, command: 'pastefromword', toolbar: 'clipboard,50' } ); // Features brought 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 Microsoft Word. // (e.g. from a Microsoft Word similar application.) // 3. Listen with high priority (3), so clean up is done before content // type sniffing (priority = 6). editor.pasteTools.register( { filters: editor.config.pasteFromWordCleanupFile ? [ editor.config.pasteFromWordCleanupFile ] : defaultFilters, canHandle: function( evt ) { var data = evt.data, // Always get raw clipboard data (#3586). mswordHtml = CKEDITOR.plugins.pastetools.getClipboardData( data, 'text/html' ), generatorName = CKEDITOR.plugins.pastetools.getContentGeneratorName( mswordHtml ), wordRegexp = /(class="?Mso|style=["'][^"]*?\bmso\-|w:WordDocument||<\/font>)/, // Use wordRegexp only when there is no meta generator tag in the content isOfficeContent = generatorName ? generatorName === 'microsoft' : wordRegexp.test( mswordHtml ); return mswordHtml && ( forceFromWord || isOfficeContent ); }, handle: function( evt, next ) { var data = evt.data, mswordHtml = CKEDITOR.plugins.pastetools.getClipboardData( data, 'text/html' ), // Required in Paste from Word Image plugin (#662). dataTransferRtf = CKEDITOR.plugins.pastetools.getClipboardData( data, 'text/rtf' ), pfwEvtData = { dataValue: mswordHtml, dataTransfer: { 'text/rtf': dataTransferRtf } }; // PFW might still get prevented, if it's not forced. if ( editor.fire( 'pasteFromWord', pfwEvtData ) === false && !forceFromWord ) { return; } // Do not apply paste filter to data filtered by the Word filter (https://dev.ckeditor.com/ticket/13093). data.dontFilter = true; if ( forceFromWord || confirmCleanUp() ) { pfwEvtData.dataValue = CKEDITOR.cleanWord( pfwEvtData.dataValue, editor ); // Paste From Word Image: // RTF clipboard is required for embedding images. // If img tags are not allowed there is no point to process images. // Also skip embedding images if image filter is not loaded. if ( CKEDITOR.plugins.clipboard.isCustomDataTypesSupported && configInlineImages && CKEDITOR.pasteFilters.image ) { pfwEvtData.dataValue = CKEDITOR.pasteFilters.image( pfwEvtData.dataValue, editor, dataTransferRtf ); } editor.fire( 'afterPasteFromWord', pfwEvtData ); data.dataValue = pfwEvtData.dataValue; if ( editor.config.forcePasteAsPlainText === true ) { // If `config.forcePasteAsPlainText` set to true, force plain text even on Word content (#1013). data.type = 'text'; } else if ( !CKEDITOR.plugins.clipboard.isCustomCopyCutSupported && editor.config.forcePasteAsPlainText === 'allow-word' ) { // In browsers using pastebin when pasting from Word, evt.data.type is 'auto' (not 'html') so it gets converted // by 'pastetext' plugin to 'text'. We need to restore 'html' type (#1013) and (#1638). data.type = 'html'; } } // Reset forceFromWord. forceFromWord = 0; next(); function confirmCleanUp() { return !editor.config.pasteFromWordPromptCleanup || confirm( editor.lang.pastefromword.confirmCleanup ); } } } ); } } ); } )(); /** * Whether to prompt the user about the clean up of content being pasted from Microsoft Word. * * config.pasteFromWordPromptCleanup = true; * * @since 3.1.0 * @cfg {Boolean} [pasteFromWordPromptCleanup=false] * @member CKEDITOR.config */ /** * The file that provides the Microsoft Word cleanup function for pasting operations. * * **Note:** This is a global configuration shared by all editor instances present * on the page. * * // Load from the 'pastefromword' plugin 'filter' sub folder (custom.js file) using a path relative to the CKEditor installation folder. * CKEDITOR.config.pasteFromWordCleanupFile = 'plugins/pastefromword/filter/custom.js'; * * // Load from the 'pastefromword' plugin 'filter' sub folder (custom.js file) using a full path (including the CKEditor installation folder). * CKEDITOR.config.pasteFromWordCleanupFile = '/ckeditor/plugins/pastefromword/filter/custom.js'; * * // Load custom.js file from the 'customFilters' folder (located in server's root) using the full URL. * CKEDITOR.config.pasteFromWordCleanupFile = 'http://my.example.com/customFilters/custom.js'; * * @since 3.1.0 * @cfg {String} [pasteFromWordCleanupFile= + 'filter/default.js'] * @member CKEDITOR.config */ /** * Flag decides whether embedding images pasted with Word content is enabled or not. * * **Note:** Please be aware that embedding images requires Clipboard API support, available only in modern browsers, that is indicated by * {@link CKEDITOR.plugins.clipboard#isCustomDataTypesSupported} flag. * * // Disable embedding images pasted from Word. * config.pasteFromWord_inlineImages = false; * * @since 4.8.0 * @cfg {Boolean} [pasteFromWord_inlineImages=true] * @member CKEDITOR.config */ /** * See {@link #pasteTools_keepZeroMargins}. * @since 4.12.0 * @deprecated 4.13.0 * @cfg {Boolean} [pasteFromWord_keepZeroMargins=false] * @member CKEDITOR.config */ /** * Fired when the pasted content was recognized as Microsoft Word content. * * This event is cancellable. If canceled, it will prevent Paste from Word processing. * * @since 4.6.0 * @event pasteFromWord * @param data * @param {String} data.dataValue Pasted content. Changes to this property will affect the pasted content. * @member CKEDITOR.editor */ /** * Fired after the Paste form Word filters have been applied. * * @since 4.6.0 * @event afterPasteFromWord * @param data * @param {String} data.dataValue Pasted content after processing. Changes to this property will affect the pasted content. * @member CKEDITOR.editor */ rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/0000755000201500020150000000000015203533230024127 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/zh.js0000664000201500020150000000074215203533230025113 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'zh', { confirmCleanup: '您想貼上的文字似乎是自 Word è¤‡è£½è€Œä¾†ï¼Œè«‹å•æ‚¨æ˜¯å¦è¦å…ˆæ¸…除 Word 的格å¼å¾Œå†è¡Œè²¼ä¸Šï¼Ÿ', error: '由於發生內部錯誤,無法清除清除 Word 的格å¼ã€‚', title: '自 Word 貼上', toolbar: '自 Word 貼上' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/nb.js0000664000201500020150000000074315203533230025072 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/eo.js0000664000201500020150000000073615203533230025100 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/es.js0000664000201500020150000000070315203533230025076 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/ro.js0000664000201500020150000000075115203533230025112 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/hr.js0000664000201500020150000000072615203533230025105 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/it.js0000664000201500020150000000072615203533230025110 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/de-ch.js0000664000201500020150000000101115203533230025440 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'de-ch', { 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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/sk.js0000664000201500020150000000073515203533230025111 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'sk', { confirmCleanup: 'Zdá sa, že vkladaný text pochádza z programu MS Word. Chcete ho pred vkladaním automaticky vyÄistiÅ¥?', error: 'Kvôli internej chybe nebolo možné vložené dáta vyÄistiÅ¥', title: 'VložiÅ¥ z Wordu', toolbar: 'VložiÅ¥ z Wordu' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/az.js0000664000201500020150000000075115203533230025104 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'az', { confirmCleanup: 'ÆlavÉ™ edilÉ™n mÉ™tn Word-dan köçürülÉ™nÉ™ oxÅŸayır. TÉ™mizlÉ™mÉ™k istÉ™yirsinizmi?', error: 'Daxili sÉ™hvÉ™ görÉ™ É™lavÉ™ edilÉ™n mÉ™lumatların tÉ™mizlÉ™nmÉ™si mümkün deyil', title: 'Word-dan É™lavÉ™etmÉ™', toolbar: 'Word-dan É™lavÉ™etmÉ™' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/pt.js0000664000201500020150000000073315203533230025115 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'pt', { confirmCleanup: 'O texto que pretende colar parece ter sido copiado do Word. Deseja limpar o código antes de o colar?', error: 'Não foi possível limpar a informação colada devido a um erro interno.', title: 'Colar do Word', toolbar: 'Colar do Word' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/si.js0000664000201500020150000000105115203533230025077 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/ko.js0000664000201500020150000000077715203533230025113 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'ko', { confirmCleanup: '붙여 ë„£ì„ ë‚´ìš©ì€ MS Wordì—서 복사 한 것입니다. 붙여 넣기 ì „ì— ì •ë¦¬ 하시겠습니까?', error: 'ë‚´ë¶€ 오류로 붙여 ë„£ì€ ë°ì´í„°ë¥¼ 정리 í•  수 없습니다.', title: 'MS Word ì—서 붙여넣기', toolbar: 'MS Word ì—서 붙여넣기' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/mk.js0000664000201500020150000000100515203533230025072 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/cy.js0000664000201500020150000000070215203533230025101 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/uk.js0000664000201500020150000000120415203533230025103 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'uk', { confirmCleanup: 'ТекÑÑ‚, що Ви намагаєтеÑÑŒ вÑтавити, Ñхожий на Ñкопійований з Word. Бажаєте очиÑтити його Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ´ вÑтавлÑннÑм?', error: 'Ðеможливо очиÑтити Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‡ÐµÑ€ÐµÐ· внутрішню помилку.', title: 'Ð’Ñтавити з Word', toolbar: 'Ð’Ñтавити з Word' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/zh-cn.js0000664000201500020150000000070615203533230025511 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'zh-cn', { confirmCleanup: '您è¦ç²˜è´´çš„å†…å®¹å¥½åƒæ˜¯æ¥è‡ª MS Word,是å¦è¦æ¸…除 MS Word æ ¼å¼åŽå†ç²˜è´´ï¼Ÿ', error: '由于内部错误无法清ç†è¦ç²˜è´´çš„æ•°æ®', title: '从 MS Word 粘贴', toolbar: '从 MS Word 粘贴' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/sv.js0000664000201500020150000000077115203533230025124 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/lt.js0000664000201500020150000000071515203533230025111 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/is.js0000664000201500020150000000075515203533230025111 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/fr-ca.js0000664000201500020150000000075615203533230025467 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/et.js0000664000201500020150000000072515203533230025103 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/bs.js0000664000201500020150000000076515203533230025103 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/pl.js0000664000201500020150000000102015203533230025073 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/bg.js0000664000201500020150000000117015203533230025056 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'bg', { confirmCleanup: 'ТекÑтът, който иÑкате да поÑтавите, изглежда е копиран от Word. ИÑкате ли да Ñе почиÑти преди поÑтавÑнето?', error: 'Вмъкваните данни не могат да бъдат почиÑтени поради вътрешна грешка', title: 'Вмъкни от Word', toolbar: 'Вмъкни от Word' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/fa.js0000664000201500020150000000120515203533230025053 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'fa', { confirmCleanup: 'متنی Ú©Ù‡ میخواهید بچسبانید به نظر میرسد Ú©Ù‡ از Word Ú©Ù¾ÛŒ شده است. آیا میخواهید قبل از چسباندن آن را پاکسازی کنید؟', error: 'به دلیل بروز خطای داخلی امکان پاکسازی اطلاعات بازنشانی شده وجود ندارد.', title: 'چسباندن از Word', toolbar: 'چسباندن از Word' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/ku.js0000664000201500020150000000114215203533230025104 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'ku', { confirmCleanup: 'ئەم دەقەی بەتەمای بیلکێنی پێدەچێت له word هێنرابێت. دەتەوێت پاکی بکەیوه Ù¾ÛŽØ´ ئەوەی بیلکێنی؟', error: 'هیچ ڕێگەیەك نەبوو لەلکاندنی دەقەکه بەهۆی هەڵەیەکی ناوەخۆیی', title: 'لکاندنی لەلایەن Word', toolbar: 'لکاندنی Ù„Û•Ú•ÛŽÛŒ Word' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/bn.js0000664000201500020150000000101515203533230025063 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/el.js0000664000201500020150000000127615203533230025075 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'el', { confirmCleanup: 'Το κείμενο που επικολλάται φαίνεται να είναι αντιγÏαμμένο από το Word. Μήπως θα θέλατε να καθαÏιστεί Ï€ÏÎ¿Ï„Î¿Ï ÎµÏ€Î¹ÎºÎ¿Î»Î»Î·Î¸ÎµÎ¯;', error: 'Δεν ήταν δυνατό να καθαÏιστοÏν τα δεδομένα λόγω ενός εσωτεÏÎ¹ÎºÎ¿Ï ÏƒÏ†Î¬Î»Î¼Î±Ï„Î¿Ï‚', title: 'Επικόλληση από το Word', toolbar: 'Επικόλληση από το Word' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/fi.js0000664000201500020150000000077215203533230025073 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/ru.js0000664000201500020150000000121615203533230025115 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'ru', { confirmCleanup: 'ТекÑÑ‚, который вы желаете вÑтавить, по вÑей видимоÑти, был Ñкопирован из Word. Следует ли очиÑтить его перед вÑтавкой?', error: 'Ðевозможно очиÑтить вÑтавленные данные из-за внутренней ошибки', title: 'Ð’Ñтавить из Word', toolbar: 'Ð’Ñтавить из Word' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/gl.js0000664000201500020150000000071615203533230025075 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/sr-latn.js0000664000201500020150000000062415203533230026051 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'sr-latn', { confirmCleanup: 'Kopirani tekst je iz Word-a. Želite ga oÄistiti? ', error: 'Zbog interne greÅ¡ke tekst nije oÄišćen.', title: 'Zalepi iz Worda', toolbar: 'Zalepi iz Worda' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/oc.js0000664000201500020150000000073415203533230025074 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'oc', { confirmCleanup: 'Sembla que lo tèxte de pegar proven de Word. Lo volètz netejar abans de lo pegar ?', error: 'Las donadas pegadas an pas pogut èsser netejadas a causa d\'una error intèrna', title: 'Pegar dempuèi Word', toolbar: 'Pegar dempuèi Word' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/sq.js0000664000201500020150000000101515203533230025107 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/pt-br.js0000664000201500020150000000075315203533230025520 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/fo.js0000664000201500020150000000072015203533230025072 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/af.js0000664000201500020150000000075315203533230025062 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'af', { confirmCleanup: 'Die teks wat u wil byvoeg lyk asof dit uit Word gekopiëer is. Wil u dit eers skoonmaak voordat dit bygevoeg word?', error: 'Die bygevoegte teks kon nie skoongemaak word nie, weens \'n interne fout', title: 'Uit Word byvoeg', toolbar: 'Uit Word byvoeg' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/hi.js0000664000201500020150000000103315203533230025064 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/km.js0000664000201500020150000000161115203533230025075 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'km', { confirmCleanup: 'អážáŸ’ážáž”ទ​ដែល​អ្នក​ចង់​បិទ​ភ្ជាប់​នáŸáŸ‡ ទំនង​ដូច​ជា​ចម្លង​មក​ពី Word។ ážáž¾â€‹áž¢áŸ’នក​ចង់​សម្អាážâ€‹ážœáž¶â€‹áž˜áž»áž“​បិទ​ភ្ជាប់​ទáŸ?', error: 'ដោយ​សារ​មាន​បញ្ហា​ផ្នែក​ក្នុង​ធ្វើ​ឲ្យ​មិន​អាច​សម្អាážâ€‹áž‘ិន្ននáŸáž™â€‹ážŠáŸ‚ល​បាន​បិទ​ភ្ជាប់', title: 'បិទ​ភ្ជាប់​ពី Word', toolbar: 'បិទ​ភ្ជាប់​ពី Word' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/nl.js0000664000201500020150000000077615203533230025112 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/ka.js0000664000201500020150000000126215203533230025063 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'ka', { confirmCleanup: 'ჩáƒáƒ¡áƒáƒ¡áƒ›áƒ”ლი ტექსტი ვáƒáƒ áƒ“იდáƒáƒœ გáƒáƒ“მáƒáƒ¢áƒáƒœáƒ˜áƒšáƒ¡ გáƒáƒ•ს - გინდáƒáƒ— მისი წინáƒáƒ¡áƒ¬áƒáƒ  გáƒáƒ¬áƒ›áƒ”ნდáƒ?', error: 'შიდრშეცდáƒáƒ›áƒ˜áƒ¡ გáƒáƒ›áƒ ვერ მáƒáƒ®áƒ”რხდრტექსტის გáƒáƒ¬áƒ›áƒ”ნდáƒ', title: 'ვáƒáƒ áƒ“იდáƒáƒœ ჩáƒáƒ¡áƒ›áƒ', toolbar: 'ვáƒáƒ áƒ“იდáƒáƒœ ჩáƒáƒ¡áƒ›áƒ' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/es-mx.js0000664000201500020150000000072415203533230025523 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'es-mx', { confirmCleanup: 'El texto que desea pegar parece estar copiado de Word. ¿Quieres limpiarlo antes de pegarlo?', error: 'No fue posible limpiar los datos pegados debido a un error interno', title: 'Pegar desde word', toolbar: 'Pegar desde word' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/mn.js0000664000201500020150000000100515203533230025075 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/da.js0000664000201500020150000000077015203533230025057 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/he.js0000664000201500020150000000102215203533230025056 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'he', { confirmCleanup: 'נר××” הטקסט שבכוונתך להדביק מקורו בקובץ וורד. ×”×× ×‘×¨×¦×•× ×š לנקות ×ותו ×˜×¨× ×”×”×“×‘×§×”?', error: '×œ× × ×™×ª×Ÿ ×”×™×” לנקות ×ת המידע בשל תקלה פנימית.', title: 'הדבקה מ-Word', toolbar: 'הדבקה מ-Word' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/ca.js0000664000201500020150000000075315203533230025057 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/gu.js0000664000201500020150000000130715203533230025103 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'gu', { confirmCleanup: 'તમે જે ટેકà«àª·à«àª¤à« કોપી કરી રહà«àª¯àª¾ છો ટે વરà«àª¡ ની છે. કોપી કરતા પેહલા સાફ કરવી છે?', error: 'પેસà«àªŸ કરેલો ડેટા ઇનà«àªŸàª°àª¨àª² àªàª°àª° ના લીથે સાફ કરી શકાયો નથી.', title: 'પેસà«àªŸ (વડૅ ટેકà«àª¸à«àªŸ)', toolbar: 'પેસà«àªŸ (વડૅ ટેકà«àª¸à«àªŸ)' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/ms.js0000664000201500020150000000076115203533230025112 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/th.js0000664000201500020150000000175315203533230025110 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'th', { confirmCleanup: 'ข้อความที่คุณต้องà¸à¸²à¸£à¸§à¸²à¸‡à¸¥à¸‡à¹„ปเป็นข้อความที่คัดลอà¸à¸¡à¸²à¸ˆà¸²à¸à¹‚ปรà¹à¸à¸£à¸¡à¹„มโครซอฟท์เวิร์ด คุณต้องà¸à¸²à¸£à¸¥à¹‰à¸²à¸‡à¸„่าข้อความดังà¸à¸¥à¹ˆà¸²à¸§à¸à¹ˆà¸­à¸™à¸§à¸²à¸‡à¸¥à¸‡à¹„ปหรือไม่?', error: 'ไม่สามารถล้างข้อมูลที่ต้องà¸à¸²à¸£à¸§à¸²à¸‡à¹„ด้เนื่องจาà¸à¹€à¸à¸´à¸”ข้อผิดพลาดภายในระบบ', title: 'วางสำเนาจาà¸à¸•ัวอัà¸à¸©à¸£à¹€à¸§à¸´à¸£à¹Œà¸”', toolbar: 'วางสำเนาจาà¸à¸•ัวอัà¸à¸©à¸£à¹€à¸§à¸´à¸£à¹Œà¸”' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/de.js0000664000201500020150000000100515203533230025053 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/en-ca.js0000664000201500020150000000076215203533230025457 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/tt.js0000664000201500020150000000077715203533230025131 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/vi.js0000664000201500020150000000104115203533230025101 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/cs.js0000664000201500020150000000074115203533230025076 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/tr.js0000664000201500020150000000076215203533230025121 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/ja.js0000664000201500020150000000111015203533230025052 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'ja', { confirmCleanup: '貼り付ã‘を行ã†ãƒ†ã‚­ã‚¹ãƒˆã¯ãƒ¯ãƒ¼ãƒ‰æ–‡ç« ã‹ã‚‰ã‚³ãƒ”ーã•れよã†ã¨ã—ã¦ã„ã¾ã™ã€‚貼り付ã‘ã‚‹å‰ã«ã‚¯ãƒªãƒ¼ãƒ‹ãƒ³ã‚°ã‚’行ã„ã¾ã™ã‹ï¼Ÿ', error: '内部エラーã«ã‚ˆã‚Šè²¼ã‚Šä»˜ã‘ãŸãƒ‡ãƒ¼ã‚¿ã‚’クリアã§ãã¾ã›ã‚“ã§ã—ãŸ', title: 'ワード文章ã‹ã‚‰è²¼ã‚Šä»˜ã‘', toolbar: 'ワード文章ã‹ã‚‰è²¼ã‚Šä»˜ã‘' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/sl.js0000664000201500020150000000074015203533230025106 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'sl', { confirmCleanup: 'Besedilo, ki ga želite prilepiti, je kopirano iz Worda. 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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/lv.js0000664000201500020150000000075115203533230025113 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/en-au.js0000664000201500020150000000073415203533230025500 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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?', 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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/en.js0000664000201500020150000000073115203533230025072 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/no.js0000664000201500020150000000074315203533230025107 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/fr.js0000664000201500020150000000074215203533230025101 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'fr', { confirmCleanup: 'Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller ?', error: 'Les données collées n\'ont pas pu être nettoyées à cause d\'une erreur interne', title: 'Coller depuis Word', toolbar: 'Coller depuis Word' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/id.js0000664000201500020150000000075315203533230025070 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/ug.js0000664000201500020150000000121615203533230025102 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'ug', { confirmCleanup: 'سىز چاپلىماقچى بولغان مەزمۇن MS Word تىن كەلگەندەك قىلىدۇ، MS Word پىچىمىنى تازىلىۋەتكەندىن ÙƒÛيىن ئاندىن چاپلامدۇ؟', error: 'ئىچكى خاتالىق سەۋەبىدىن چاپلايدىغان سانلىق مەلۇماتنى تازىلىيالمايدۇ', title: 'MS Word تىن چاپلا', toolbar: 'MS Word تىن چاپلا' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/ar.js0000664000201500020150000000104015203533230025064 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'ar', { confirmCleanup: 'يبدو أن النص المراد لصقه منسوخ من برنامج وورد. هل تود تنظيÙÙ‡ قبل الشروع ÙÙŠ عملية اللصق؟', error: 'لم يتم مسح المعلومات الملصقة لخلل داخلي', title: 'لصق من وورد', toolbar: 'لصق من وورد' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/sr.js0000664000201500020150000000075215203533230025117 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'sr', { confirmCleanup: 'Уметнути текÑÑ‚ је копиран из Word-а. Желите га очитити? ', error: 'Због интерне грешке текÑÑ‚ није очишћен.', title: 'Залепи из Worda', toolbar: 'Залепи из Worda' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/eu.js0000664000201500020150000000072615203533230025105 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'eu', { confirmCleanup: 'Itsatsi nahi duzun testua Word-etik kopiatua dela dirudi. Itsatsi baino lehen garbitu nahi duzu?', error: 'Barne-errore bat dela eta ezin izan da itsatsitako testua garbitu', title: 'Itsatsi Word-etik', toolbar: 'Itsatsi Word-etik' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/en-gb.js0000664000201500020150000000073415203533230025463 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/lang/hu.js0000664000201500020150000000075415203533230025111 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'pastefromword', 'hu', { confirmCleanup: 'Úgy tűnik a beillesztett szöveget Word-bÅ‘l másolta á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-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/icons/0000755000201500020150000000000015153141500024320 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/icons/pastefromword.png0000664000201500020150000000072715153141500027732 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ðÆIDAT8Ë¥SAÂ0\„OyÒ›Óé«ü“½©ß¢™õ tÚšT§rIì†Dº®CÃH " µ¤]n̬'ÉRÊ °”’4³~Äe¢»_TµÕT$î~ÏŽl‘ó$ ‰ž+šàQ•ðͦ’6,lìÐjÑÁVUà=’b­„ËJœ¿Jàš¿õ6ð¶H–ûZUÏ$Ö™I~&3;¹û5Ï£Zs Ç8 Ãm ˆ97BÄa¹ù 'תçcà ÑÖe¶‚wÊN%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/icons/hidpi/0000755000201500020150000000000015153141500025415 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/icons/hidpi/pastefromword.png0000664000201500020150000000162715153141500031027 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎ›IDATXíW±nÛ0}GÊ´7yîT è’¥c ¤Ýl páßègñœ?h¿#ídH¶ K€¢@Ñ?7Ù’x¢s)Š”%Ë"Å»wÇÇ㉢õz f0s«ä]€µJ©ƒžÖú»µö³(Ê{"j5yŸ¸ŽŽ8¹’ŽRêUU­bF1Le­m9Þn·ð€ÀocÊqÀDôË <Õ˜ }km“Ȳ óùœ]VjyƒžÂÌoe‹êñ»4M9Ë2JÓÌ|`­ÅÀ|>°ÖÂZû\u9‚¢º,KðÌÌHÓôÁ]½µ*úžˆÀÌ“ÉÄúë;PJ¡¶‘çÑI’UU]¶ï/qépJkíë¾vçCâÎ5h®OJÈ6 Ñ*>nÈ 2Fß_ ½0pÎ \]ßahî(cVï©nÍJØhlÄì™ù$._l™Ý§4" öÝwƘKK†&€{aÅ9÷AöBʼn™±Ûíîe;Æ$!uÌsŠÙ [pV@`Ų¿Q“®ùè)ˆenŸÊF0 »Œ‡Ê1¬^u`Lp!ÝQIØå\k}zÏ•R×}ð΀1fUUÕFÆUUmŒ1«cƒp“ËoyžßÿoI°ßïïB8$ŒEû’Å’Vô1_ ,˯±ÓЀäyŽÙlÖr*Æn Nÿ¦,Ëoµê+7Ç6´0NæyüĆê=ÝØ8ª"º Õ wëh±X4&˲„Ö:¶ ±7* ûZk¹J?ÆÎü¹Š$¾"B’$ð!T’wg‰B‰Ó¾bŒùä3ûU‹5kíÇ} SEQ.§^Õ'–ËecE~ßÿáð·dŒüú<;Üv±º‡%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/icons/hidpi/pastefromword-rtl.png0000664000201500020150000000165715153141500031631 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎ³IDATXÃÅW±nÛ0}GSR&ëº(ºdé˜!íä%páÏèoñœOh#íàÕC³]Šþ½Y%vÏ¥NE'zaR<òÞÝ=iZ­V°Ö¬µƒ¯DtÅúDtœPJ}éºî=ýy"ê5þ¦}C†yÑÏQO·mÛ%"ÚWu]70¼ßïà€õ<üù¸‡…Rê d‡ˆ~Àl6ƒµÖ*¥îÝž=[]×=FÀG·ßïQ–¥•ß¼âN×u½ß€§¯]D82oæó¹ÝívT–å0~ʲüæÐ=4MtÑD1†<ðÞ2 *°á…S:ϲ̟úí/æ>§ƒûŽx¿x‘ÖmÛž; Ir-0±xcO^†te_ÓãB3:Æø±ESsR/&Z"–ãTC)ÆC`´4Ròóîƒó.”†1Qïȵ'‡7Õ8à€Ç8pª+!OEq Àr#"ëCˆ¬«X¬) N•÷cªªÚ†j| AÙmI_ˆ¡cH§äÖûf§Ò2š‚ÿ)1œëˆCO`¢^)–ELJlÉ2V´b8uŒd<ŽUÂØz v’c5!•”S÷JH’H¨µþÇ ×ÿg2 Ïóe]×k×u½Îó|9åñ³ðæu]ßòC”R¨ëú@òuœT ¥øìwOénü)õ¶ã'xôLE´Öׯ˜ÏeÙ‹¦i®Ù@ ªªPÅi)ð<¸1Æ9`ŒYÑ9æÄáp@Qßݧ»ÅbqÔçoD"ÙäúÁ¢¶mIë~Ðu V N½l<þÜ…Œa¤¹ë]Å#§üùq"ú,ËÞÉ{@!q÷ÞgggoSÀó^€{@Ó4[FbY¦‰UUE//i9Ï}ïùÁcÆ7› þÓßp%Öõ%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/pastefromword/icons/pastefromword-rtl.png0000664000201500020150000000073215153141500030525 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ðÉIDAT8Ë•“Avƒ0 D¿"q¨®Úey¹Tz§^ ½–Ñ›nDJ©Mèl@Í÷Ø26Ï3If`½¦ËúWIÊÌ_æ*”™HRD\¾µ±µö ¼¹û(×ÖÚ}M»ž»$¬2wöðÕÝB§ñ”¶;íÚ(ê”u´ª™!Ɇ€2Ñ÷g 'õSÀ¿5œÃåÀ| òàî€Õ³§—m±¿‰Vÿ™yn½tÓ4½/Ëò¨9#×w¨Q¯f€8º$el3ãèch{n%ì%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/widgetselection/0000775000201500020150000000000015203533231023506 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/widgetselection/plugin.js0000664000201500020150000002623215203533231025347 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ /** * @fileOverview A plugin created to handle ticket https://dev.ckeditor.com/ticket/11064. While the issue is caused by native WebKit/Blink behaviour, * this plugin can be easily detached or modified when the issue is fixed in the browsers without changing the core. * When Ctrl/Cmd + A is pressed to select all content it does not work due to a bug in * Webkit/Blink if a non-editable element is at the beginning or the end of the content. */ ( function() { 'use strict'; CKEDITOR.plugins.add( 'widgetselection', { init: function( editor ) { if ( CKEDITOR.env.webkit ) { var widgetselection = CKEDITOR.plugins.widgetselection; editor.on( 'contentDom', function( evt ) { var editor = evt.editor, editable = editor.editable(); editable.attachListener( editable, 'keydown', function( evt ) { // Ctrl/Cmd + A if ( evt.data.getKeystroke() == CKEDITOR.CTRL + 65 ) { // Defer the call so the selection is already changed by the pressed keys. CKEDITOR.tools.setTimeout( function() { // Manage filler elements on keydown. If there is no need // to add fillers, we need to check and clean previously used once. if ( !widgetselection.addFillers( editable ) ) { widgetselection.removeFillers( editable ); } }, 0 ); } }, null, null, -1 ); // Check and clean previously used fillers. editor.on( 'selectionCheck', function( evt ) { widgetselection.removeFillers( evt.editor.editable() ); } ); // Remove fillers on paste before data gets inserted into editor. editor.on( 'paste', function( evt ) { evt.data.dataValue = widgetselection.cleanPasteData( evt.data.dataValue ); } ); if ( 'selectall' in editor.plugins ) { widgetselection.addSelectAllIntegration( editor ); } } ); } } } ); /** * A set of helper methods for the Widget Selection plugin. * * @property widgetselection * @member CKEDITOR.plugins * @since 4.6.1 */ CKEDITOR.plugins.widgetselection = { /** * The start filler element reference. * * @property {CKEDITOR.dom.element} * @member CKEDITOR.plugins.widgetselection * @private */ startFiller: null, /** * The end filler element reference. * * @property {CKEDITOR.dom.element} * @member CKEDITOR.plugins.widgetselection * @private */ endFiller: null, /** * An attribute which identifies the filler element. * * @property {String} * @member CKEDITOR.plugins.widgetselection * @private */ fillerAttribute: 'data-cke-filler-webkit', /** * The default content of the filler element. Note: The filler needs to have `visible` content. * Unprintable elements or empty content do not help as a workaround. * * @property {String} * @member CKEDITOR.plugins.widgetselection * @private */ fillerContent: ' ', /** * Tag name which is used to create fillers. * * @property {String} * @member CKEDITOR.plugins.widgetselection * @private */ fillerTagName: 'div', /** * Adds a filler before or after a non-editable element at the beginning or the end of the `editable`. * * @param {CKEDITOR.editable} editable * @returns {Boolean} * @member CKEDITOR.plugins.widgetselection */ addFillers: function( editable ) { var editor = editable.editor; // Whole content should be selected, if not fix the selection manually. if ( !this.isWholeContentSelected( editable ) && editable.getChildCount() > 0 ) { var firstChild = editable.getFirst( filterTempElements ), lastChild = editable.getLast( filterTempElements ); // Check if first element is editable. If not prepend with filler. if ( firstChild && firstChild.type == CKEDITOR.NODE_ELEMENT && !firstChild.isEditable() ) { this.startFiller = this.createFiller(); editable.append( this.startFiller, 1 ); } // Check if last element is editable. If not append filler. if ( lastChild && lastChild.type == CKEDITOR.NODE_ELEMENT && !lastChild.isEditable() ) { this.endFiller = this.createFiller( true ); editable.append( this.endFiller, 0 ); } // Reselect whole content after any filler was added. if ( this.hasFiller( editable ) ) { var rangeAll = editor.createRange(); rangeAll.selectNodeContents( editable ); rangeAll.select(); return true; } } return false; }, /** * Removes filler elements or updates their references. * * It will **not remove** filler elements if the whole content is selected, as it would break the * selection. * * @param {CKEDITOR.editable} editable * @member CKEDITOR.plugins.widgetselection */ removeFillers: function( editable ) { // If startFiller or endFiller exists and not entire content is selected it means the selection // just changed from selected all. We need to remove fillers and set proper selection/content. if ( this.hasFiller( editable ) && !this.isWholeContentSelected( editable ) ) { var startFillerContent = editable.findOne( this.fillerTagName + '[' + this.fillerAttribute + '=start]' ), endFillerContent = editable.findOne( this.fillerTagName + '[' + this.fillerAttribute + '=end]' ); if ( this.startFiller && startFillerContent && this.startFiller.equals( startFillerContent ) ) { this.removeFiller( this.startFiller, editable ); } else { // The start filler is still present but it is a different element than previous one. It means the // undo recreating entirely selected content was performed. We need to update filler reference. this.startFiller = startFillerContent; } if ( this.endFiller && endFillerContent && this.endFiller.equals( endFillerContent ) ) { this.removeFiller( this.endFiller, editable ); } else { // Same as with start filler. this.endFiller = endFillerContent; } } }, /** * Removes fillers from the paste data. * * @param {String} data * @returns {String} * @member CKEDITOR.plugins.widgetselection * @private */ cleanPasteData: function( data ) { if ( data && data.length ) { data = data .replace( this.createFillerRegex(), '' ) .replace( this.createFillerRegex( true ), '' ); } return data; }, /** * Checks if the entire content of the given editable is selected. * * @param {CKEDITOR.editable} editable * @returns {Boolean} * @member CKEDITOR.plugins.widgetselection * @private */ isWholeContentSelected: function( editable ) { var range = editable.editor.getSelection().getRanges()[ 0 ]; if ( range ) { if ( range && range.collapsed ) { return false; } else { var rangeClone = range.clone(); rangeClone.enlarge( CKEDITOR.ENLARGE_ELEMENT ); return !!( rangeClone && editable && rangeClone.startContainer && rangeClone.endContainer && rangeClone.startOffset === 0 && rangeClone.endOffset === editable.getChildCount() && rangeClone.startContainer.equals( editable ) && rangeClone.endContainer.equals( editable ) ); } } return false; }, /** * Checks if there is any filler element in the given editable. * * @param {CKEDITOR.editable} editable * @returns {Boolean} * @member CKEDITOR.plugins.widgetselection * @private */ hasFiller: function( editable ) { return editable.find( this.fillerTagName + '[' + this.fillerAttribute + ']' ).count() > 0; }, /** * Creates a filler element. * * @param {Boolean} [onEnd] If filler will be placed on end or beginning of the content. * @returns {CKEDITOR.dom.element} * @member CKEDITOR.plugins.widgetselection * @private */ createFiller: function( onEnd ) { var filler = new CKEDITOR.dom.element( this.fillerTagName ); filler.setHtml( this.fillerContent ); filler.setAttribute( this.fillerAttribute, onEnd ? 'end' : 'start' ); filler.setAttribute( 'data-cke-temp', 1 ); filler.setStyles( { display: 'block', width: 0, height: 0, padding: 0, border: 0, margin: 0, position: 'absolute', top: 0, left: '-9999px', opacity: 0, overflow: 'hidden' } ); return filler; }, /** * Removes the specific filler element from the given editable. If the filler contains any content (typed or pasted), * it replaces the current editable content. If not, the caret is placed before the first or after the last editable * element (depends if the filler was at the beginning or the end). * * @param {CKEDITOR.dom.element} filler * @param {CKEDITOR.editable} editable * @member CKEDITOR.plugins.widgetselection * @private */ removeFiller: function( filler, editable ) { if ( filler ) { var editor = editable.editor, currentRange = editable.editor.getSelection().getRanges()[ 0 ], currentPath = currentRange.startPath(), range = editor.createRange(), insertedHtml, fillerOnStart, manuallyHandleCaret; if ( currentPath.contains( filler ) ) { insertedHtml = filler.getHtml(); manuallyHandleCaret = true; } fillerOnStart = filler.getAttribute( this.fillerAttribute ) == 'start'; filler.remove(); filler = null; if ( insertedHtml && insertedHtml.length > 0 && insertedHtml != this.fillerContent ) { editable.insertHtmlIntoRange( insertedHtml, editor.getSelection().getRanges()[ 0 ] ); range.setStartAt( editable.getChild( editable.getChildCount() - 1 ), CKEDITOR.POSITION_BEFORE_END ); editor.getSelection().selectRanges( [ range ] ); } else if ( manuallyHandleCaret ) { if ( fillerOnStart ) { range.setStartAt( editable.getFirst().getNext(), CKEDITOR.POSITION_AFTER_START ); } else { range.setEndAt( editable.getLast().getPrevious(), CKEDITOR.POSITION_BEFORE_END ); } editable.editor.getSelection().selectRanges( [ range ] ); } } }, /** * Creates a regular expression which will match the filler HTML in the text. * * @param {Boolean} [onEnd] Whether a regular expression should be created for the filler at the beginning or * the end of the content. * @returns {RegExp} * @member CKEDITOR.plugins.widgetselection * @private */ createFillerRegex: function( onEnd ) { var matcher = this.createFiller( onEnd ).getOuterHtml() .replace( /style="[^"]*"/gi, 'style="[^"]*"' ) .replace( />[^<]*[^<]*<' ); return new RegExp( ( !onEnd ? '^' : '' ) + matcher + ( onEnd ? '$' : '' ) ); }, /** * Adds an integration for the [Select All](https://ckeditor.com/cke4/addon/selectall) plugin to the given `editor`. * * @private * @param {CKEDITOR.editor} editor * @member CKEDITOR.plugins.widgetselection */ addSelectAllIntegration: function( editor ) { var widgetselection = this; editor.editable().attachListener( editor, 'beforeCommandExec', function( evt ) { var editable = editor.editable(); if ( evt.data.name == 'selectAll' && editable ) { widgetselection.addFillers( editable ); } }, null, null, 9999 ); } }; function filterTempElements( el ) { return el.getName && !el.hasAttribute( 'data-cke-temp' ); } } )(); rt-5.0.10/devel/third-party/ckeditor-src/plugins/dialogui/0000755000201500020150000000000015203533226022114 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/dialogui/plugin.js0000664000201500020150000014736615203533226023773 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ /** * @fileOverview The Dialog User Interface plugin. */ CKEDITOR.plugins.add( 'dialogui', { onLoad: function() { var initPrivateObject = function( elementDefinition ) { this._ || ( this._ = {} ); this._[ 'default' ] = this._.initValue = elementDefinition[ 'default' ] || ''; this._.required = elementDefinition.required || false; var args = [ this._ ]; for ( var i = 1; i < arguments.length; i++ ) args.push( arguments[ i ] ); args.push( true ); CKEDITOR.tools.extend.apply( CKEDITOR.tools, args ); return this._; }, textBuilder = { build: function( dialog, elementDefinition, output ) { return new CKEDITOR.ui.dialog.textInput( dialog, elementDefinition, output ); } }, commonBuilder = { build: function( dialog, elementDefinition, output ) { return new CKEDITOR.ui.dialog[ elementDefinition.type ]( dialog, elementDefinition, output ); } }, containerBuilder = { 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 ); } }, commonPrototype = { isChanged: function() { return this.getValue() != this.getInitValue(); }, reset: function( noChangeEvent ) { this.setValue( this.getInitValue(), noChangeEvent ); }, setInitValue: function() { this._.initValue = this.getValue(); }, resetInitValue: function() { this._.initValue = this._[ 'default' ]; }, getInitValue: function() { return this._.initValue; } }, commonEventProcessors = CKEDITOR.tools.extend( {}, CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors, { onChange: function( dialog, func ) { if ( !this._.domOnChangeRegistered ) { dialog.on( 'load', function() { this.getInputElement().on( 'change', function() { // Make sure 'onchange' doesn't get fired after dialog closed. (https://dev.ckeditor.com/ticket/5719) if ( !dialog.parts.dialog.isVisible() ) return; this.fire( 'change', { value: this.getValue() } ); }, this ); }, this ); this._.domOnChangeRegistered = true; } this.on( 'change', func ); } }, true ), eventRegex = /^on([A-Z]\w+)/, cleanInnerDefinition = function( def ) { // An inner UI element should not have the parent's type, title or events. for ( var i in def ) { if ( eventRegex.test( i ) || i == 'title' || i == 'type' ) delete def[ i ]; } return def; }, // @context {CKEDITOR.dialog.uiElement} UI element (textarea or textInput) // @param {CKEDITOR.dom.event} evt toggleBidiKeyUpHandler = function( evt ) { var keystroke = evt.data.getKeystroke(); // ALT + SHIFT + Home for LTR direction. if ( keystroke == CKEDITOR.SHIFT + CKEDITOR.ALT + 36 ) this.setDirectionMarker( 'ltr' ); // ALT + SHIFT + End for RTL direction. else if ( keystroke == CKEDITOR.SHIFT + CKEDITOR.ALT + 35 ) this.setDirectionMarker( 'rtl' ); }; CKEDITOR.tools.extend( CKEDITOR.ui.dialog, { /** * Base class for all dialog window elements with a textual label on the left. * * @class CKEDITOR.ui.dialog.labeledElement * @extends CKEDITOR.ui.dialog.uiElement * @constructor Creates a labeledElement class instance. * @param {CKEDITOR.dialog} dialog Parent dialog window object. * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition * The element definition. Accepted fields: * * * `label` (Required) The label string. * * `labelLayout` (Optional) Put 'horizontal' here if the * label element is to be laid out horizontally. Otherwise a vertical * layout will be used. * * `widths` (Optional) This applies only to horizontal * layouts — a two-element array of lengths to specify the widths of the * label and the content element. * * `role` (Optional) Value for the `role` attribute. * * `includeLabel` (Optional) If set to `true`, the `aria-labelledby` attribute * will be included. * * @param {Array} htmlList The list of HTML code to output to. * @param {Function} contentHtml * A function returning the HTML code string to be added inside the content * cell. */ labeledElement: function( dialog, elementDefinition, htmlList, contentHtml ) { if ( arguments.length < 4 ) return; var _ = initPrivateObject.call( this, elementDefinition ); _.labelId = CKEDITOR.tools.getNextId() + '_label'; this._.children = []; var innerHTML = function() { var html = [], requiredClass = elementDefinition.required ? ' cke_required' : ''; if ( elementDefinition.labelLayout != 'horizontal' ) { html.push( '', '' ); } 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. * * Since 4.11.0 it also represents the phone number input. * * @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.(https://dev.ckeditor.com/ticket/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 (https://dev.ckeditor.com/ticket/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(); // https://dev.ckeditor.com/ticket/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 exists onClick in elementDefinition, then it is called and checked response type. // If it's possible, then XHR is used, what prevents of using submit. var responseType = onClick ? onClick.call( this, evt ) : false; if ( responseType !== false ) { if ( responseType !== 'xhr' ) { 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.0 * @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.0 * @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 `', 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-5.0.10/devel/third-party/ckeditor-src/plugins/docprops/samples/0000755000201500020150000000000015203533226023614 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/docprops/samples/docprops.html0000664000201500020150000002014015203533226026332 0ustar puckpuck Document Properties — CKEditor Sample

          CKEditor Samples » Document Properties Plugin

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

          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-5.0.10/devel/third-party/ckeditor-src/plugins/docprops/icons/0000755000201500020150000000000015153141500023255 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/docprops/icons/docprops.png0000664000201500020150000000104515153141500025616 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ðIDAT8ËR1NÅ0 }vRõ°r8 -܆2$F„@­ #FþÒ46Ëò)Å’¥(¶ŸŸŸM]×a͈¨ú6o]rf¾^÷e³2¡mÛƒ—sn‘ªî1ñX±iš¶MÓÅ?œs‘ d *@9ç<ÏŸÄ‹ÈÕ/ ˆè¶ÉžAÚ¶=L)]ª*²sNPÕû¢ûE¦™)‡¶%[f>pcgSÕïý©©na—ðd?sQŒñ™JAj r3?ª*˜ù®&f•Ñ"rND*"«…{ œs'µ sîø_)¥·aìYcGJ)½ÛkF}ß[álæ’jc~¥Ãß;ÀEñËîú^ ‹šÿØ7c‘ÎŽ&%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/docprops/icons/hidpi/0000755000201500020150000000000015153141500024352 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/docprops/icons/hidpi/docprops.png0000664000201500020150000000177115153141500026721 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎýIDATXíV¿kÝ0¾;[öKp†B Ð)­CéPèÔäÿI‡@³…@ ùO2vI³ºšµ]K3”B ÐÁ}÷à ".謵A}h¿µv˜_]]ALh•ÃSâÖ­µ {W`ÿú±ÖÍÝ@Ä‘^γ,»HŒ ˜"·‘·“z9×ZÀiŠ¥ˆ €Þ)ÀÂðõZkDÄ»ÞîOWa"ÊÀTQJAÛ¶;ˆø€™Oˆh2ˆµ "”e mÛ>€É ¢¦I®bŠ¢ˆ‚HùðËOB)EQ ÜLXkÎwÈÏÚ Üß߃ÖzƒÂå„1愈.¤yÆ€¸Í/7÷ åÐZCÛ¶QpׇãhrÑ3Ø– Rb­…®ë‚ º®Û‰ÎóŒ1ŸµÖÑøßÜÜ€®÷ÀÙåy¾4”¡$|‘eY4ö÷÷-¼ôõÌ ˆÆ`æQ÷Lðâü„™?¦²¿—EQ<•ëÖZhÛ˜ytð²õ~•¥(ûÒ4Í—¦ip6›ö,³[`ÀmÊóü­ïDÖ¸/ˆ³ÙìÛ¿¬áD^O1ð¾ûÇËÖ$¤±‹!½ŸÏçÃÚ|>"zçÙW+ŸèÉ.ƒ‰Èyµ±±a•RÏ໵ö§1f”Y– €}†¤¤1†5UÒ"BÓ4Ÿ\86ˆ˜˜¹~(²œùÎØ;OÜúlÊ!ÉN(öûå—’>dçS©žÂTUµÚ$ãì:^UU»Y–%KÕg2@:¨ëú¶,Ë=×Û‡M}ÌÝ\)µW×õ­<”™Á³~:išæ›Ö•RÖ¡—7ìºåG(Tÿþÿ$€PÜ•RàWƒ;H®­Óx‚ âðeè¿r›Ϙ¤lrY×¾„tÒt}} [[[ÁÅP—Kõ}?4“Ÿå——— åäžÝ1ûL §óûà "Âæææ63ÿîumY–e[þòJÿ§ÍÄ%9E%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/docprops/icons/hidpi/docprops-rtl.png0000664000201500020150000000204415153141500027512 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎ(IDATXíW=kÜ@}3Z8ß¹0LRÜ%? `¤°Áù7nʸŠÿ‰Ëþh)H´!`rÇõ±“Âyµ·«Sbˆ[­vç½}ó!!`ûûû͘ˆš±ˆà©ìüü`ºÀŸ4dÜî›1æDî‰þúcÎyöÙÀQQª 5ê¸cߺž5 ÄÀEDÁŽDäˆ@D7UU€æ‘Ö½;¿*„ÜÌ|d­=¬§oó<ßLÓt•Z½;2UUuXKy›çùF–e "0s«Bb¶J[¬'¯AZàziˆº@u]Œ,«“x=w›çùÆ`0hª:×uâ.ð%j𓪪B²»àeY¢ªªQî¶–"O’äÆgf03ò˲W"ò©‡ÏÃáð¥îwóÅô}Ûùò/ ˆÈ7uèÊëÏÀ|>ÿn­%·­T D@¯µµµ÷ÀÜvá%`K cÌ?D´···´V}­àôÀ¸M Gfq,ùí­@Àð:Ù>Îf³x>Ÿƒ™/|ü~aBžWµO=VG=~7%˲ç"²à‹Vóf…›ˆ@$ C>!™2óØÿ(Y,¿üýN™úXÑ>ÐÃŽý²Ò„tÇÜþq¼tØÝÝÝ%|}Ö¥À×~e\‡‰’$iÍ=& 1·bÒ#"ŒF£­$IZoU gˆH«©ƒétz¦é¶Êí‚j‰Ò4ÝžÍf×n™êÕ»*­uVÅ¢((MS %oY–ä®÷ÿ+®"õ —O[n×,…ûÀ¿qÍ AäÍÙJæ³³³N}c³úÓáK’ÖZ\\Ü7ÉÎ>àÿÆNî›ß][__ÇååesR€b ’Ñ%åÿ“v[¯ÚééiëþQ}ÀµÁ`ð@Æ+"?G£Ñ3%{MÿÝ~p`½œá%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/docprops/icons/docprops-rtl.png0000664000201500020150000000103715153141500026416 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ðIDAT8ËS;NÄ0™ØÊh÷ »G€" Ø‚{Q¬D¹B D‚††®@»GÈÇ~4ë0ÎÚOɱ=ï½™q¸m[ \— ÉM‘¡1€EQDœsûº®¯ˆˆ‹i«çä{kífÇÓJ0Ú¶sno­ÝÌóüCDÄü'˜ë‰ ÁvPÎ%3ó1r­Ù†a8%&q« <‡ofNO!$c®¼¬\<ŠÈÍER˜¦é=Cþ€‹´my@"òªÝ(;ðÞß13¼÷ñEרªj›Ùß Ôh¿û¾^_×uâœûZÊlšfÉ£ÄSUgª5¼”"‰‹Ùgí@DÀ™ fþ<«~hô ͬ™DÖZÝ<%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/0000755000201500020150000000000015203533227021273 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/list/plugin.js0000775000201500020150000011771315203533227023146 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ /** * @fileOverview Insert and remove numbered and bulleted lists. */ ( function() { var listNodeNames = { ol: 1, ul: 1 }; var whitespaces = CKEDITOR.dom.walker.whitespaces(), bookmarks = CKEDITOR.dom.walker.bookmark(), nonEmpty = function( node ) { return !( whitespaces( node ) || bookmarks( node ) ); }, blockBogus = CKEDITOR.dom.walker.bogus(); function cleanUpDirection( element ) { var dir, parent, parentDir; if ( ( dir = element.getDirection() ) ) { parent = element.getParent(); while ( parent && !( parentDir = parent.getDirection() ) ) parent = parent.getParent(); if ( dir == parentDir ) element.removeAttribute( 'dir' ); } } // Inherit inline styles from another element. function inheritInlineStyles( parent, el ) { var style = parent.getAttribute( 'style' ); // Put parent styles before child styles. style && el.setAttribute( 'style', style.replace( /([^;])$/, '$1;' ) + ( el.getAttribute( 'style' ) || '' ) ); } CKEDITOR.plugins.list = { /** * Convert a DOM list tree into a data structure that is easier to * manipulate. This operation should be non-intrusive in the sense that it * does not change the DOM tree, with the exception that it may add some * markers to the list item nodes when database is specified. * * @member CKEDITOR.plugins.list * @todo params */ listToArray: function( listNode, database, baseArray, baseIndentLevel, grandparentNode ) { if ( !listNodeNames[ listNode.getName() ] ) return []; if ( !baseIndentLevel ) baseIndentLevel = 0; if ( !baseArray ) baseArray = []; // Iterate over all list items to and look for inner lists. for ( var i = 0, count = listNode.getChildCount(); i < count; i++ ) { var listItem = listNode.getChild( i ); // Fixing malformed nested lists by moving it into a previous list item. (https://dev.ckeditor.com/ticket/6236) if ( listItem.type == CKEDITOR.NODE_ELEMENT && listItem.getName() in CKEDITOR.dtd.$list ) CKEDITOR.plugins.list.listToArray( listItem, database, baseArray, baseIndentLevel + 1 ); // It may be a text node or some funny stuff. if ( listItem.$.nodeName.toLowerCase() != 'li' ) continue; var itemObj = { 'parent': listNode, indent: baseIndentLevel, element: listItem, contents: [] }; if ( !grandparentNode ) { itemObj.grandparent = listNode.getParent(); if ( itemObj.grandparent && itemObj.grandparent.$.nodeName.toLowerCase() == 'li' ) itemObj.grandparent = itemObj.grandparent.getParent(); } else { itemObj.grandparent = grandparentNode; } if ( database ) CKEDITOR.dom.element.setMarker( database, listItem, 'listarray_index', baseArray.length ); baseArray.push( itemObj ); for ( var j = 0, itemChildCount = listItem.getChildCount(), child; j < itemChildCount; j++ ) { child = listItem.getChild( j ); if ( child.type == CKEDITOR.NODE_ELEMENT && listNodeNames[ child.getName() ] ) // Note the recursion here, it pushes inner list items with // +1 indentation in the correct order. CKEDITOR.plugins.list.listToArray( child, database, baseArray, baseIndentLevel + 1, itemObj.grandparent ); else itemObj.contents.push( child ); } } return baseArray; }, /** * Convert our internal representation of a list back to a DOM forest. * * @member CKEDITOR.plugins.list * @todo params */ arrayToList: function( listArray, database, baseIndex, paragraphMode, dir ) { if ( !baseIndex ) baseIndex = 0; if ( !listArray || listArray.length < baseIndex + 1 ) return null; var i, doc = listArray[ baseIndex ].parent.getDocument(), retval = new CKEDITOR.dom.documentFragment( doc ), rootNode = null, currentIndex = baseIndex, indentLevel = Math.max( listArray[ baseIndex ].indent, 0 ), currentListItem = null, orgDir, block, paragraphName = ( paragraphMode == CKEDITOR.ENTER_P ? 'p' : 'div' ); while ( 1 ) { var item = listArray[ currentIndex ], itemGrandParent = item.grandparent; orgDir = item.element.getDirection( 1 ); if ( item.indent == indentLevel ) { if ( !rootNode || listArray[ currentIndex ].parent.getName() != rootNode.getName() ) { rootNode = listArray[ currentIndex ].parent.clone( false, 1 ); dir && rootNode.setAttribute( 'dir', dir ); retval.append( rootNode ); } currentListItem = rootNode.append( item.element.clone( 0, 1 ) ); if ( orgDir != rootNode.getDirection( 1 ) ) currentListItem.setAttribute( 'dir', orgDir ); for ( i = 0; i < item.contents.length; i++ ) currentListItem.append( item.contents[ i ].clone( 1, 1 ) ); currentIndex++; } else if ( item.indent == Math.max( indentLevel, 0 ) + 1 ) { // Maintain original direction (https://dev.ckeditor.com/ticket/6861). var currDir = listArray[ currentIndex - 1 ].element.getDirection( 1 ), listData = CKEDITOR.plugins.list.arrayToList( listArray, null, currentIndex, paragraphMode, currDir != orgDir ? orgDir : null ); // If the next block is an
        2. with another list tree as the first // child, we'll need to append a filler (
          /NBSP) or the list item // wouldn't be editable. (https://dev.ckeditor.com/ticket/6724) if ( !currentListItem.getChildCount() && CKEDITOR.env.needsNbspFiller && doc.$.documentMode <= 7 ) currentListItem.append( doc.createText( '\xa0' ) ); currentListItem.append( listData.listNode ); currentIndex = listData.nextIndex; } else if ( item.indent == -1 && !baseIndex && itemGrandParent ) { if ( listNodeNames[ itemGrandParent.getName() ] ) { currentListItem = item.element.clone( false, true ); if ( orgDir != itemGrandParent.getDirection( 1 ) ) currentListItem.setAttribute( 'dir', orgDir ); } else { currentListItem = new CKEDITOR.dom.documentFragment( doc ); } // Migrate all children to the new container, // apply the proper text direction. var dirLoose = itemGrandParent.getDirection( 1 ) != orgDir, li = item.element, className = li.getAttribute( 'class' ), style = li.getAttribute( 'style' ); var needsBlock = currentListItem.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT && ( paragraphMode != CKEDITOR.ENTER_BR || dirLoose || style || className ); var child, count = item.contents.length, cachedBookmark; for ( i = 0; i < count; i++ ) { child = item.contents[ i ]; // Append bookmark if we can, or cache it and append it when we'll know // what to do with it. Generally - we want to keep it next to its original neighbour. // Exception: if bookmark is the only child it hasn't got any neighbour, so handle it normally // (wrap with block if needed). if ( bookmarks( child ) && count > 1 ) { // If we don't need block, it's simple - append bookmark directly to the current list item. if ( !needsBlock ) currentListItem.append( child.clone( 1, 1 ) ); else cachedBookmark = child.clone( 1, 1 ); } // Block content goes directly to the current list item, without wrapping. else if ( child.type == CKEDITOR.NODE_ELEMENT && child.isBlockBoundary() ) { // Apply direction on content blocks. if ( dirLoose && !child.getDirection() ) child.setAttribute( 'dir', orgDir ); inheritInlineStyles( li, child ); className && child.addClass( className ); // Close the block which we started for inline content. block = null; // Append bookmark directly before current child. if ( cachedBookmark ) { currentListItem.append( cachedBookmark ); cachedBookmark = null; } // Append this block element to the list item. currentListItem.append( child.clone( 1, 1 ) ); } // Some inline content was found - wrap it with block and append that // block to the current list item or append it to the block previously created. else if ( needsBlock ) { // Establish new block to hold text direction and styles. if ( !block ) { block = doc.createElement( paragraphName ); currentListItem.append( block ); dirLoose && block.setAttribute( 'dir', orgDir ); } // Copy over styles to new block; style && block.setAttribute( 'style', style ); className && block.setAttribute( 'class', className ); // Append bookmark directly before current child. if ( cachedBookmark ) { block.append( cachedBookmark ); cachedBookmark = null; } block.append( child.clone( 1, 1 ) ); } // E.g. BR mode - inline content appended directly to the list item. else { currentListItem.append( child.clone( 1, 1 ) ); } } // No content after bookmark - append it to the block if we had one // or directly to the current list item if we finished directly in the current list item. if ( cachedBookmark ) { ( block || currentListItem ).append( cachedBookmark ); cachedBookmark = null; } if ( currentListItem.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT && currentIndex != listArray.length - 1 ) { var last; // Remove bogus
          if this browser uses them. if ( CKEDITOR.env.needsBrFiller ) { last = currentListItem.getLast(); if ( last && last.type == CKEDITOR.NODE_ELEMENT && last.is( 'br' ) ) last.remove(); } // If the last element is not a block, append
          to separate merged list items. last = currentListItem.getLast( nonEmpty ); if ( !( last && last.type == CKEDITOR.NODE_ELEMENT && last.is( CKEDITOR.dtd.$block ) ) ) currentListItem.append( doc.createElement( 'br' ) ); } var currentListItemName = currentListItem.$.nodeName.toLowerCase(); if ( currentListItemName == 'div' || currentListItemName == 'p' ) { currentListItem.appendBogus(); } retval.append( currentListItem ); rootNode = null; currentIndex++; } else { return null; } block = null; if ( listArray.length <= currentIndex || Math.max( listArray[ currentIndex ].indent, 0 ) < indentLevel ) break; } if ( database ) { var currentNode = retval.getFirst(); while ( currentNode ) { if ( currentNode.type == CKEDITOR.NODE_ELEMENT ) { // Clear marker attributes for the new list tree made of cloned nodes, if any. CKEDITOR.dom.element.clearMarkers( database, currentNode ); // Clear redundant direction attribute specified on list items. if ( currentNode.getName() in CKEDITOR.dtd.$listItem ) cleanUpDirection( currentNode ); } currentNode = currentNode.getNextSourceNode(); } } return { listNode: retval, nextIndex: currentIndex }; } }; function changeListType( editor, groupObj, database, listsCreated ) { // This case is easy... // 1. Convert the whole list into a one-dimensional array. // 2. Change the list type by modifying the array. // 3. Recreate the whole list by converting the array to a list. // 4. Replace the original list with the recreated list. var listArray = CKEDITOR.plugins.list.listToArray( groupObj.root, database ), selectedListItems = []; for ( var i = 0; i < groupObj.contents.length; i++ ) { var itemNode = groupObj.contents[ i ]; itemNode = itemNode.getAscendant( 'li', true ); if ( !itemNode || itemNode.getCustomData( 'list_item_processed' ) ) continue; selectedListItems.push( itemNode ); CKEDITOR.dom.element.setMarker( database, itemNode, 'list_item_processed', true ); } var root = groupObj.root, doc = root.getDocument(), listNode, newListNode; for ( i = 0; i < selectedListItems.length; i++ ) { var listIndex = selectedListItems[ i ].getCustomData( 'listarray_index' ); listNode = listArray[ listIndex ].parent; // Switch to new list node for this particular item. if ( !listNode.is( this.type ) ) { newListNode = doc.createElement( this.type ); // Copy all attributes, except from 'start' and 'type'. listNode.copyAttributes( newListNode, { start: 1, type: 1 } ); // The list-style-type property should be ignored. newListNode.removeStyle( 'list-style-type' ); listArray[ listIndex ].parent = newListNode; } } var newList = CKEDITOR.plugins.list.arrayToList( listArray, database, null, editor.config.enterMode ); var child, length = newList.listNode.getChildCount(); for ( i = 0; i < length && ( child = newList.listNode.getChild( i ) ); i++ ) { if ( child.getName() == this.type ) listsCreated.push( child ); } newList.listNode.replace( groupObj.root ); editor.fire( 'contentDomInvalidated' ); } function createList( editor, groupObj, listsCreated ) { var contents = groupObj.contents, doc = groupObj.root.getDocument(), listContents = []; // It is possible to have the contents returned by DomRangeIterator to be the same as the root. // e.g. when we're running into table cells. // In such a case, enclose the childNodes of contents[0] into a
          . if ( contents.length == 1 && contents[ 0 ].equals( groupObj.root ) ) { var divBlock = doc.createElement( 'div' ); contents[ 0 ].moveChildren && contents[ 0 ].moveChildren( divBlock ); contents[ 0 ].append( divBlock ); contents[ 0 ] = divBlock; } // Calculate the common parent node of all content blocks. var commonParent = groupObj.contents[ 0 ].getParent(); for ( var i = 0; i < contents.length; i++ ) commonParent = commonParent.getCommonAncestor( contents[ i ].getParent() ); var useComputedState = editor.config.useComputedState, listDir, explicitDirection; // We want to insert things that are in the same tree level only, so calculate the contents again // by expanding the selected blocks to the same tree level. for ( i = 0; i < contents.length; i++ ) { var contentNode = contents[ i ], parentNode; while ( ( parentNode = contentNode.getParent() ) ) { if ( parentNode.equals( commonParent ) ) { listContents.push( contentNode ); // Determine the lists's direction. if ( !explicitDirection && contentNode.getDirection() ) explicitDirection = 1; var itemDir = contentNode.getDirection( useComputedState ); if ( listDir !== null ) { // If at least one LI have a different direction than current listDir, we can't have listDir. if ( listDir && listDir != itemDir ) listDir = null; else listDir = itemDir; } break; } contentNode = parentNode; } } if ( listContents.length < 1 ) return; // Insert the list to the DOM tree. var insertAnchor = listContents[ listContents.length - 1 ].getNext(), listNode = doc.createElement( this.type ); listsCreated.push( listNode ); var contentBlock, listItem; while ( listContents.length ) { contentBlock = listContents.shift(); listItem = doc.createElement( 'li' ); // If current block should be preserved, append it to list item instead of // transforming it to
        3. element. if ( shouldPreserveBlock( contentBlock ) ) contentBlock.appendTo( listItem ); else { contentBlock.copyAttributes( listItem ); // Remove direction attribute after it was merged into list root. (https://dev.ckeditor.com/ticket/7657) if ( listDir && contentBlock.getDirection() ) { listItem.removeStyle( 'direction' ); listItem.removeAttribute( 'dir' ); } contentBlock.moveChildren( listItem ); contentBlock.remove(); } listItem.appendTo( listNode ); } // Apply list root dir only if it has been explicitly declared. if ( listDir && explicitDirection ) listNode.setAttribute( 'dir', listDir ); if ( insertAnchor ) listNode.insertBefore( insertAnchor ); else listNode.appendTo( commonParent ); } function removeList( editor, groupObj, database ) { // This is very much like the change list type operation. // Except that we're changing the selected items' indent to -1 in the list array. var listArray = CKEDITOR.plugins.list.listToArray( groupObj.root, database ), selectedListItems = []; for ( var i = 0; i < groupObj.contents.length; i++ ) { var itemNode = groupObj.contents[ i ]; itemNode = itemNode.getAscendant( 'li', true ); if ( !itemNode || itemNode.getCustomData( 'list_item_processed' ) ) continue; selectedListItems.push( itemNode ); CKEDITOR.dom.element.setMarker( database, itemNode, 'list_item_processed', true ); } var lastListIndex = null; for ( i = 0; i < selectedListItems.length; i++ ) { var listIndex = selectedListItems[ i ].getCustomData( 'listarray_index' ); listArray[ listIndex ].indent = -1; lastListIndex = listIndex; } // After cutting parts of the list out with indent=-1, we still have to maintain the array list // model's nextItem.indent <= currentItem.indent + 1 invariant. Otherwise the array model of the // list cannot be converted back to a real DOM list. for ( i = lastListIndex + 1; i < listArray.length; i++ ) { if ( listArray[ i ].indent > listArray[ i - 1 ].indent + 1 ) { var indentOffset = listArray[ i - 1 ].indent + 1 - listArray[ i ].indent; var oldIndent = listArray[ i ].indent; while ( listArray[ i ] && listArray[ i ].indent >= oldIndent ) { listArray[ i ].indent += indentOffset; i++; } i--; } } var newList = CKEDITOR.plugins.list.arrayToList( listArray, database, null, editor.config.enterMode, groupObj.root.getAttribute( 'dir' ) ); // Compensate
          before/after the list node if the surrounds are non-blocks.(https://dev.ckeditor.com/ticket/3836) var docFragment = newList.listNode, boundaryNode, siblingNode; function compensateBrs( isStart ) { if ( ( boundaryNode = docFragment[ isStart ? 'getFirst' : 'getLast' ]() ) && !( boundaryNode.is && boundaryNode.isBlockBoundary() ) && ( siblingNode = groupObj.root[ isStart ? 'getPrevious' : 'getNext' ]( CKEDITOR.dom.walker.invisible( true ) ) ) && !( siblingNode.is && siblingNode.isBlockBoundary( { br: 1 } ) ) ) { editor.document.createElement( 'br' )[ isStart ? 'insertBefore' : 'insertAfter' ]( boundaryNode ); } } compensateBrs( true ); compensateBrs(); docFragment.replace( groupObj.root ); editor.fire( 'contentDomInvalidated' ); } var headerTagRegex = /^h[1-6]$/; // Checks wheather this block should be element preserved (not transformed to
        4. ) when creating list. function shouldPreserveBlock( block ) { return ( // https://dev.ckeditor.com/ticket/5335 block.is( 'pre' ) || // https://dev.ckeditor.com/ticket/5271 - this is a header. headerTagRegex.test( block.getName() ) || // 11083 - this is a non-editable element. block.getAttribute( 'contenteditable' ) == 'false' ); } function listCommand( name, type ) { this.name = name; this.type = type; this.context = type; this.allowedContent = type + ' li'; this.requiredContent = type; } var elementType = CKEDITOR.dom.walker.nodeType( CKEDITOR.NODE_ELEMENT ); // Merge child nodes with direction preserved. (https://dev.ckeditor.com/ticket/7448) function mergeChildren( from, into, refNode, forward ) { var child, itemDir; while ( ( child = from[ forward ? 'getLast' : 'getFirst' ]( elementType ) ) ) { if ( ( itemDir = child.getDirection( 1 ) ) !== into.getDirection( 1 ) ) child.setAttribute( 'dir', itemDir ); child.remove(); refNode ? child[ forward ? 'insertBefore' : 'insertAfter' ]( refNode ) : into.append( child, forward ); refNode = child; } } listCommand.prototype = { exec: function( editor ) { // Run state check first of all. this.refresh( editor, editor.elementPath() ); var config = editor.config, selection = editor.getSelection(), ranges = selection && selection.getRanges(); // Midas lists rule #1 says we can create a list even in an empty document. // But DOM iterator wouldn't run if the document is really empty. // So create a paragraph if the document is empty and we're going to create a list. if ( this.state == CKEDITOR.TRISTATE_OFF ) { var editable = editor.editable(); if ( !editable.getFirst( nonEmpty ) ) { config.enterMode == CKEDITOR.ENTER_BR ? editable.appendBogus() : ranges[ 0 ].fixBlock( 1, config.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ); selection.selectRanges( ranges ); } // Maybe a single range there enclosing the whole list, // turn on the list state manually(https://dev.ckeditor.com/ticket/4129). else { var range = ranges.length == 1 && ranges[ 0 ], enclosedNode = range && range.getEnclosedNode(); if ( enclosedNode && enclosedNode.is && this.type == enclosedNode.getName() ) this.setState( CKEDITOR.TRISTATE_ON ); } } var bookmarks = selection.createBookmarks( true ); // Group the blocks up because there are many cases where multiple lists have to be created, // or multiple lists have to be cancelled. var listGroups = [], database = {}, rangeIterator = ranges.createIterator(), index = 0; while ( ( range = rangeIterator.getNextRange() ) && ++index ) { var boundaryNodes = range.getBoundaryNodes(), startNode = boundaryNodes.startNode, endNode = boundaryNodes.endNode; if ( startNode.type == CKEDITOR.NODE_ELEMENT && startNode.getName() == 'td' ) range.setStartAt( boundaryNodes.startNode, CKEDITOR.POSITION_AFTER_START ); if ( endNode.type == CKEDITOR.NODE_ELEMENT && endNode.getName() == 'td' ) range.setEndAt( boundaryNodes.endNode, CKEDITOR.POSITION_BEFORE_END ); var iterator = range.createIterator(), block; iterator.forceBrBreak = ( this.state == CKEDITOR.TRISTATE_OFF ); while ( ( block = iterator.getNextParagraph() ) ) { // Avoid duplicate blocks get processed across ranges. // Avoid processing comments, we don't want to touch it. if ( block.getCustomData( 'list_block' ) || hasCommentsChildOnly( block ) ) continue; else CKEDITOR.dom.element.setMarker( database, block, 'list_block', 1 ); var path = editor.elementPath( block ), pathElements = path.elements, pathElementsCount = pathElements.length, processedFlag = 0, blockLimit = path.blockLimit, element; // First, try to group by a list ancestor. for ( var i = pathElementsCount - 1; i >= 0 && ( element = pathElements[ i ] ); i-- ) { // Don't leak outside block limit (https://dev.ckeditor.com/ticket/3940). if ( listNodeNames[ element.getName() ] && blockLimit.contains( element ) ) { // If we've encountered a list inside a block limit // The last group object of the block limit element should // no longer be valid. Since paragraphs after the list // should belong to a different group of paragraphs before // the list. (Bug https://dev.ckeditor.com/ticket/1309) blockLimit.removeCustomData( 'list_group_object_' + index ); var groupObj = element.getCustomData( 'list_group_object' ); if ( groupObj ) groupObj.contents.push( block ); else { groupObj = { root: element, contents: [ block ] }; listGroups.push( groupObj ); CKEDITOR.dom.element.setMarker( database, element, 'list_group_object', groupObj ); } processedFlag = 1; break; } } if ( processedFlag ) continue; // No list ancestor? Group by block limit, but don't mix contents from different ranges. var root = blockLimit; if ( root.getCustomData( 'list_group_object_' + index ) ) root.getCustomData( 'list_group_object_' + index ).contents.push( block ); else { groupObj = { root: root, contents: [ block ] }; CKEDITOR.dom.element.setMarker( database, root, 'list_group_object_' + index, groupObj ); listGroups.push( groupObj ); } } } // Now we have two kinds of list groups, groups rooted at a list, and groups rooted at a block limit element. // We either have to build lists or remove lists, for removing a list does not makes sense when we are looking // at the group that's not rooted at lists. So we have three cases to handle. var listsCreated = []; while ( listGroups.length > 0 ) { groupObj = listGroups.shift(); if ( this.state == CKEDITOR.TRISTATE_OFF ) { if ( isEmptyList( groupObj ) ) { continue; } else if ( listNodeNames[ groupObj.root.getName() ] ) { changeListType.call( this, editor, groupObj, database, listsCreated ); } else { createList.call( this, editor, groupObj, listsCreated ); } } else if ( this.state == CKEDITOR.TRISTATE_ON && listNodeNames[ groupObj.root.getName() ] && !isEmptyList( groupObj ) ) { removeList.call( this, editor, groupObj, database ); } } // For all new lists created, merge into adjacent, same type lists. for ( i = 0; i < listsCreated.length; i++ ) mergeListSiblings( listsCreated[ i ] ); // Clean up, restore selection and update toolbar button states. CKEDITOR.dom.element.clearAllMarkers( database ); selection.selectBookmarks( bookmarks ); editor.focus(); function isEmptyList( groupObj ) { // If list is without any li item, then ignore such element from transformation, because it throws errors in console (#2411, #2438). return listNodeNames[ groupObj.root.getName() ] && !getChildCount( groupObj.root, [ CKEDITOR.NODE_COMMENT ] ); } function getChildCount( element, excludeTypes ) { return CKEDITOR.tools.array.filter( element.getChildren().toArray(), function( node ) { return CKEDITOR.tools.array.indexOf( excludeTypes, node.type ) === -1; } ).length; } function hasCommentsChildOnly( element ) { var ret = true; if ( element.getChildCount() === 0 ) { return false; } element.forEach( function( node ) { if ( node.type !== CKEDITOR.NODE_COMMENT ) { ret = false; return false; } }, null, true ); return ret; } }, refresh: function( editor, path ) { var list = path.contains( listNodeNames, 1 ), limit = path.blockLimit || path.root; // 1. Only a single type of list activate. // 2. Do not show list outside of block limit. if ( list && limit.contains( list ) ) this.setState( list.is( this.type ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF ); else this.setState( CKEDITOR.TRISTATE_OFF ); } }; // Merge list adjacent, of same type lists. function mergeListSiblings( listNode ) { function mergeSibling( rtl ) { var sibling = listNode[ rtl ? 'getPrevious' : 'getNext' ]( nonEmpty ); if ( sibling && sibling.type == CKEDITOR.NODE_ELEMENT && sibling.is( listNode.getName() ) ) { // Move children order by merge direction.(https://dev.ckeditor.com/ticket/3820) mergeChildren( listNode, sibling, null, !rtl ); listNode.remove(); listNode = sibling; } } mergeSibling(); mergeSibling( 1 ); } // Check if node is block element that recieves text. function isTextBlock( node ) { return node.type == CKEDITOR.NODE_ELEMENT && ( node.getName() in CKEDITOR.dtd.$block || node.getName() in CKEDITOR.dtd.$listItem ) && CKEDITOR.dtd[ node.getName() ][ '#' ]; } // Join visually two block lines. function joinNextLineToCursor( editor, cursor, nextCursor ) { editor.fire( 'saveSnapshot' ); // Merge with previous block's content. nextCursor.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS ); var frag = nextCursor.extractContents(); cursor.trim( false, true ); var bm = cursor.createBookmark(); // Kill original bogus; var currentPath = new CKEDITOR.dom.elementPath( cursor.startContainer ), pathBlock = currentPath.block, currentBlock = currentPath.lastElement.getAscendant( 'li', 1 ) || pathBlock, nextPath = new CKEDITOR.dom.elementPath( nextCursor.startContainer ), nextLi = nextPath.contains( CKEDITOR.dtd.$listItem ), nextList = nextPath.contains( CKEDITOR.dtd.$list ), last; // Remove bogus node the current block/pseudo block. if ( pathBlock ) { var bogus = pathBlock.getBogus(); bogus && bogus.remove(); } else if ( nextList ) { last = nextList.getPrevious( nonEmpty ); if ( last && blockBogus( last ) ) last.remove(); } // Kill the tail br in extracted. last = frag.getLast(); if ( last && last.type == CKEDITOR.NODE_ELEMENT && last.is( 'br' ) ) last.remove(); // Insert fragment at the range position. var nextNode = cursor.startContainer.getChild( cursor.startOffset ); if ( nextNode ) frag.insertBefore( nextNode ); else cursor.startContainer.append( frag ); // Move the sub list nested in the next list item. if ( nextLi ) { var sublist = getSubList( nextLi ); if ( sublist ) { // If next line is in the sub list of the current list item. if ( currentBlock.contains( nextLi ) ) { mergeChildren( sublist, nextLi.getParent(), nextLi ); sublist.remove(); } // Migrate the sub list to current list item. else { currentBlock.append( sublist ); } } } var nextBlock, parent; // Remove any remaining zombies path blocks at the end after line merged. while ( nextCursor.checkStartOfBlock() && nextCursor.checkEndOfBlock() ) { nextPath = nextCursor.startPath(); nextBlock = nextPath.block; // Abort when nothing to be removed (https://dev.ckeditor.com/ticket/10890). if ( !nextBlock ) break; // Check if also to remove empty list. if ( nextBlock.is( 'li' ) ) { parent = nextBlock.getParent(); if ( nextBlock.equals( parent.getLast( nonEmpty ) ) && nextBlock.equals( parent.getFirst( nonEmpty ) ) ) nextBlock = parent; } nextCursor.moveToPosition( nextBlock, CKEDITOR.POSITION_BEFORE_START ); nextBlock.remove(); } // Check if need to further merge with the list resides after the merged block. (https://dev.ckeditor.com/ticket/9080) var walkerRng = nextCursor.clone(), editable = editor.editable(); walkerRng.setEndAt( editable, CKEDITOR.POSITION_BEFORE_END ); var walker = new CKEDITOR.dom.walker( walkerRng ); walker.evaluator = function( node ) { return nonEmpty( node ) && !blockBogus( node ); }; var next = walker.next(); if ( next && next.type == CKEDITOR.NODE_ELEMENT && next.getName() in CKEDITOR.dtd.$list ) mergeListSiblings( next ); cursor.moveToBookmark( bm ); // Make fresh selection. cursor.select(); editor.fire( 'saveSnapshot' ); } function getSubList( li ) { var last = li.getLast( nonEmpty ); return last && last.type == CKEDITOR.NODE_ELEMENT && last.getName() in listNodeNames ? last : null; } CKEDITOR.plugins.add( 'list', { // jscs:disable maximumLineLength lang: 'af,ar,az,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,es-mx,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,oc,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: 'bulletedlist,bulletedlist-rtl,numberedlist,numberedlist-rtl', // %REMOVE_LINE_CORE% hidpi: true, // %REMOVE_LINE_CORE% requires: 'indentlist', init: function( editor ) { if ( editor.blockless ) return; // Register commands. editor.addCommand( 'numberedlist', new listCommand( 'numberedlist', 'ol' ) ); editor.addCommand( 'bulletedlist', new listCommand( 'bulletedlist', 'ul' ) ); // Register the toolbar button. if ( editor.ui.addButton ) { editor.ui.addButton( 'NumberedList', { isToggle: true, label: editor.lang.list.numberedlist, command: 'numberedlist', directional: true, toolbar: 'list,10' } ); editor.ui.addButton( 'BulletedList', { isToggle: true, label: editor.lang.list.bulletedlist, command: 'bulletedlist', directional: true, toolbar: 'list,20' } ); } // Handled backspace/del key to join list items. (https://dev.ckeditor.com/ticket/8248,https://dev.ckeditor.com/ticket/9080) editor.on( 'key', function( evt ) { // Use getKey directly in order to ignore modifiers. // Justification: https://dev.ckeditor.com/ticket/11861#comment:13 var key = evt.data.domEvent.getKey(), li; // DEl/BACKSPACE if ( editor.mode == 'wysiwyg' && key in { 8: 1, 46: 1 } ) { var sel = editor.getSelection(), range = sel.getRanges()[ 0 ], path = range && range.startPath(); if ( !range || !range.collapsed ) return; var isBackspace = key == 8; var editable = editor.editable(); var walker = new CKEDITOR.dom.walker( range.clone() ); walker.evaluator = function( node ) { return nonEmpty( node ) && !blockBogus( node ); }; // Backspace/Del behavior at the start/end of table is handled in core. walker.guard = function( node, isOut ) { return !( isOut && node.type == CKEDITOR.NODE_ELEMENT && node.is( 'table' ) ); }; var cursor = range.clone(); if ( isBackspace ) { var previous, joinWith; // Join a sub list's first line, with the previous visual line in parent. if ( ( previous = path.contains( listNodeNames ) ) && range.checkBoundaryOfElement( previous, CKEDITOR.START ) && ( previous = previous.getParent() ) && previous.is( 'li' ) && ( previous = getSubList( previous ) ) ) { joinWith = previous; previous = previous.getPrevious( nonEmpty ); // Place cursor before the nested list. cursor.moveToPosition( previous && blockBogus( previous ) ? previous : joinWith, CKEDITOR.POSITION_BEFORE_START ); } // Join any line following a list, with the last visual line of the list. else { walker.range.setStartAt( editable, CKEDITOR.POSITION_AFTER_START ); walker.range.setEnd( range.startContainer, range.startOffset ); previous = walker.previous(); if ( previous && previous.type == CKEDITOR.NODE_ELEMENT && ( previous.getName() in listNodeNames || previous.is( 'li' ) ) ) { if ( !previous.is( 'li' ) ) { walker.range.selectNodeContents( previous ); walker.reset(); walker.evaluator = isTextBlock; previous = walker.previous(); } joinWith = previous; // Place cursor at the end of previous block. cursor.moveToElementEditEnd( joinWith ); // And then just before end of closest block element (https://dev.ckeditor.com/ticket/12729). cursor.moveToPosition( cursor.endPath().block, CKEDITOR.POSITION_BEFORE_END ); } } if ( joinWith ) { joinNextLineToCursor( editor, cursor, range ); evt.cancel(); } else { var list = path.contains( listNodeNames ); // Backspace pressed at the start of list outdents the first list item. (https://dev.ckeditor.com/ticket/9129) if ( list && range.checkBoundaryOfElement( list, CKEDITOR.START ) ) { li = list.getFirst( nonEmpty ); if ( range.checkBoundaryOfElement( li, CKEDITOR.START ) ) { previous = list.getPrevious( nonEmpty ); // Only if the list item contains a sub list, do nothing but // simply move cursor backward one character. if ( getSubList( li ) ) { if ( previous ) { range.moveToElementEditEnd( previous ); range.select(); } evt.cancel(); } else { editor.execCommand( 'outdent' ); evt.cancel(); } } } } } else { var next, nextLine; li = path.contains( 'li' ); if ( li ) { walker.range.setEndAt( editable, CKEDITOR.POSITION_BEFORE_END ); var last = li.getLast( nonEmpty ); var block = last && isTextBlock( last ) ? last : li; // Indicate cursor at the visual end of an list item. var isAtEnd = 0; next = walker.next(); // When list item contains a sub list. if ( next && next.type == CKEDITOR.NODE_ELEMENT && next.getName() in listNodeNames && next.equals( last ) ) { isAtEnd = 1; // Move to the first item in sub list. next = walker.next(); } // Right at the end of list item. else if ( range.checkBoundaryOfElement( block, CKEDITOR.END ) ) { isAtEnd = 2; } if ( isAtEnd && next ) { // Put cursor range there. nextLine = range.clone(); nextLine.moveToElementEditStart( next ); // https://dev.ckeditor.com/ticket/13409 // For the following case and similar // //
            //
          • //

            x^

            //
              //
            • y
            • //
            //
          • //
          if ( isAtEnd == 1 ) { // Move the cursor to if attached to "x" text node. cursor.optimize(); // Abort if the range is attached directly in
        5. , like // //
            //
          • // x^ //
              //
            • y
            • //
            //
          • //
          if ( !cursor.startContainer.equals( li ) ) { var node = cursor.startContainer, farthestInlineAscendant; // Find , which is farthest from but still inline element. while ( node.is( CKEDITOR.dtd.$inline ) ) { farthestInlineAscendant = node; node = node.getParent(); } // Move the range so it does not contain inline elements. // It prevents from being included in . // // // // so instead of // //
            //
          • //

            x^y

            //
          • //
          // // pressing DELETE produces // //
            //
          • //

            x^y

            //
          • //
          if ( farthestInlineAscendant ) { cursor.moveToPosition( farthestInlineAscendant, CKEDITOR.POSITION_AFTER_END ); } } } // Moving `cursor` and `next line` only when at the end literally (https://dev.ckeditor.com/ticket/12729). if ( isAtEnd == 2 ) { cursor.moveToPosition( cursor.endPath().block, CKEDITOR.POSITION_BEFORE_END ); // Next line might be text node not wrapped in block element. if ( nextLine.endPath().block ) { nextLine.moveToPosition( nextLine.endPath().block, CKEDITOR.POSITION_AFTER_START ); } } joinNextLineToCursor( editor, cursor, nextLine ); evt.cancel(); } } else { // Handle Del key pressed before the list. walker.range.setEndAt( editable, CKEDITOR.POSITION_BEFORE_END ); next = walker.next(); if ( next && next.type == CKEDITOR.NODE_ELEMENT && next.is( listNodeNames ) ) { // The start
        6. next = next.getFirst( nonEmpty ); // Simply remove the current empty block, move cursor to the // subsequent list. if ( path.block && range.checkStartOfBlock() && range.checkEndOfBlock() ) { path.block.remove(); range.moveToElementEditStart( next ); range.select(); evt.cancel(); } // Preventing the default (merge behavior), but simply move // the cursor one character forward if subsequent list item // contains sub list. else if ( getSubList( next ) ) { range.moveToElementEditStart( next ); range.select(); evt.cancel(); } // Merge the first list item with the current line. else { nextLine = range.clone(); nextLine.moveToElementEditStart( next ); joinNextLineToCursor( editor, cursor, nextLine ); evt.cancel(); } } } } // The backspace/del could potentially put cursor at a bad position, // being it handled or not, check immediately the selection to have it fixed. setTimeout( function() { editor.selectionChange( 1 ); } ); } } ); } } ); } )(); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/0000755000201500020150000000000015203533227022214 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/zh.js0000664000201500020150000000046315203533227023200 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'zh', { bulletedlist: 'æ’å…¥/移除項目符號清單', numberedlist: 'æ’å…¥/移除編號清單清單' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/nb.js0000664000201500020150000000046015203533227023153 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'nb', { bulletedlist: 'Legg til / fjern punktliste', numberedlist: 'Legg til / fjern nummerert liste' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/eo.js0000664000201500020150000000041315203533227023155 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'eo', { bulletedlist: 'Bula Listo', numberedlist: 'Numera Listo' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/es.js0000664000201500020150000000041015203533227023156 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'es', { bulletedlist: 'Viñetas', numberedlist: 'Numeración' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/ro.js0000664000201500020150000000050315203533227023172 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'ro', { bulletedlist: 'Inserează / Elimină Listă cu puncte', numberedlist: 'Inserează / Elimină Listă numerotată' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/hr.js0000664000201500020150000000042115203533227023162 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'hr', { bulletedlist: 'ObiÄna lista', numberedlist: 'BrojÄana lista' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/it.js0000664000201500020150000000046615203533227023176 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'it', { bulletedlist: 'Inserisci/Rimuovi Elenco Puntato', numberedlist: 'Inserisci/Rimuovi Elenco Numerato' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/de-ch.js0000664000201500020150000000044215203533227023534 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'de-ch', { bulletedlist: 'Liste', numberedlist: 'Nummerierte Liste einfügen/entfernen' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/sk.js0000664000201500020150000000050615203533227023172 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'sk', { bulletedlist: 'VložiÅ¥/odstrániÅ¥ zoznam s odrážkami', numberedlist: 'VložiÅ¥/odstrániÅ¥ Äíslovaný zoznam' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/az.js0000664000201500020150000000050015203533227023161 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'az', { bulletedlist: 'MarkerlÉ™nmiÅŸ siyahını baÅŸlat/sil', numberedlist: 'NömrÉ™lÉ™nmiÅŸ siyahını baÅŸlat/sil' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/pt.js0000664000201500020150000000040615203533227023177 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'pt', { bulletedlist: 'Marcas', numberedlist: 'Numeração' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/si.js0000664000201500020150000000063415203533227023172 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'si', { bulletedlist: 'ඇතුලත් / ඉවත් කිරීම ලඉස්තුව', numberedlist: 'ඇතුලත් / ඉවත් කිරීම අන්න්කිත ලඉස්තුව' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/ko.js0000664000201500020150000000043515203533227023167 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'ko', { bulletedlist: '순서 없는 목ë¡', numberedlist: '순서 있는 목ë¡' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/mk.js0000664000201500020150000000050115203533227023157 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'mk', { bulletedlist: 'Insert/Remove Bulleted List', // MISSING numberedlist: 'Insert/Remove Numbered List' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/cy.js0000664000201500020150000000045415203533227023172 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'cy', { bulletedlist: 'Mewnosod/Tynnu Rhestr Bwled', numberedlist: 'Mewnosod/Tynnu Rhestr Rhifol' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/uk.js0000664000201500020150000000057515203533227023202 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'uk', { bulletedlist: 'Ð’Ñтавити/видалити маркований ÑпиÑок', numberedlist: 'Ð’Ñтавити/видалити нумерований ÑпиÑок' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/zh-cn.js0000664000201500020150000000042015203533227023567 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'zh-cn', { bulletedlist: '项目列表', numberedlist: 'ç¼–å·åˆ—表' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/sv.js0000664000201500020150000000045315203533227023206 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'sv', { bulletedlist: 'Infoga/ta bort punktlista', numberedlist: 'Infoga/ta bort numrerad lista' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/lt.js0000664000201500020150000000044015203533227023171 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'lt', { bulletedlist: 'Suženklintas sÄ…raÅ¡as', numberedlist: 'Numeruotas sÄ…raÅ¡as' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/is.js0000664000201500020150000000042115203533227023164 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'is', { bulletedlist: 'Punktalisti', numberedlist: 'Númeraður listi' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/fr-ca.js0000664000201500020150000000042715203533227023547 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'fr-ca', { bulletedlist: 'Liste à puces', numberedlist: 'Liste numérotée' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/et.js0000664000201500020150000000041215203533227023161 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'et', { bulletedlist: 'Punktloend', numberedlist: 'Numberloend' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/bs.js0000664000201500020150000000041215203533227023155 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'bs', { bulletedlist: 'Lista', numberedlist: 'Numerisana lista' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/pl.js0000664000201500020150000000042715203533227023172 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'pl', { bulletedlist: 'Lista wypunktowana', numberedlist: 'Lista numerowana' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/bg.js0000664000201500020150000000060315203533227023143 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'bg', { bulletedlist: 'Вмъкване/премахване на точков ÑпиÑък', numberedlist: 'Вмъкване/премахване на номериран ÑпиÑък' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/fa.js0000664000201500020150000000045515203533227023146 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'fa', { bulletedlist: 'Ùهرست نقطه​ای', numberedlist: 'Ùهرست شماره​دار' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/ku.js0000664000201500020150000000051715203533227023176 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'ku', { bulletedlist: 'دانان/لابردنی خاڵی لیست', numberedlist: 'دانان/لابردنی ژمارەی لیست' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/bn.js0000664000201500020150000000061315203533227023153 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'bn', { bulletedlist: 'বà§à¦²à§‡à¦Ÿà§‡à¦¡ তালিকা পà§à¦°à¦¬à§‡à¦¶/অপসারন করি', numberedlist: 'সাংখà§à¦¯à¦¿à¦• লিসà§à¦Ÿà§‡à¦° লেবেল' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/el.js0000664000201500020150000000060715203533227023157 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'el', { bulletedlist: 'Εισαγωγή/ΑπομάκÏυνση Λίστας Κουκκίδων', numberedlist: 'Εισαγωγή/ΑπομάκÏυνση ΑÏιθμημένης Λίστας' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/fi.js0000664000201500020150000000041515203533227023152 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'fi', { bulletedlist: 'Luettelomerkit', numberedlist: 'Numerointi' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/ru.js0000664000201500020150000000060515203533227023203 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'ru', { bulletedlist: 'Ð’Ñтавить / удалить маркированный ÑпиÑок', numberedlist: 'Ð’Ñтавить / удалить нумерованный ÑпиÑок' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/gl.js0000664000201500020150000000046315203533227023161 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'gl', { bulletedlist: 'Inserir/retirar lista viñeteada', numberedlist: 'Inserir/retirar lista numerada' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/sr-latn.js0000664000201500020150000000042015203533227024130 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'sr-latn', { bulletedlist: 'Nаbrajanje', numberedlist: 'Numerisanje' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/oc.js0000664000201500020150000000050215203533227023152 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'oc', { bulletedlist: 'Inserir/Suprimir una lista amb de piuses', numberedlist: 'Inserir/Suprimir una lista numerotada' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/sq.js0000664000201500020150000000045615203533227023204 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'sq', { bulletedlist: 'Vendos/Largo Listën me Pika', numberedlist: 'Vendos/Largo Listën me Numra' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/pt-br.js0000664000201500020150000000043015203533227023575 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'pt-br', { bulletedlist: 'Lista sem números', numberedlist: 'Lista numerada' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/fo.js0000664000201500020150000000042715203533227023163 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'fo', { bulletedlist: 'Punktmerktur listi', numberedlist: 'Talmerktur listi' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/af.js0000664000201500020150000000042315203533227023141 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'af', { bulletedlist: 'Ongenommerde lys', numberedlist: 'Genommerde lys' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/hi.js0000664000201500020150000000045515203533227023160 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'hi', { bulletedlist: 'बà¥à¤²à¥…ट सूची', numberedlist: 'अंकीय सूची' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/km.js0000664000201500020150000000062115203533227023162 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'km', { bulletedlist: 'បញ្ចូល / លុប​បញ្ជី​ជា​ចំណុច​មូល', numberedlist: 'បញ្ចូល / លុប​បញ្ជី​ជា​លáŸáž' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/nl.js0000664000201500020150000000044015203533227023163 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'nl', { bulletedlist: 'Opsomming invoegen', numberedlist: 'Genummerde lijst invoegen' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/ka.js0000664000201500020150000000047715203533227023157 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'ka', { bulletedlist: 'ღილიáƒáƒœáƒ˜ სიáƒ', numberedlist: 'გáƒáƒ“áƒáƒœáƒáƒ›áƒ áƒ˜áƒšáƒ˜ სიáƒ' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/es-mx.js0000664000201500020150000000047215203533227023610 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'es-mx', { bulletedlist: 'Insertar/Remover Lista con viñetas', numberedlist: 'Insertar/Remover Lista numerada' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/mn.js0000664000201500020150000000047515203533227023174 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'mn', { bulletedlist: 'ЦÑгтÑй жагÑаалт', numberedlist: 'ДугаарлагдÑан жагÑаалт' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/da.js0000664000201500020150000000042115203533227023135 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'da', { bulletedlist: 'Punktopstilling', numberedlist: 'Talopstilling' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/he.js0000664000201500020150000000044515203533227023153 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'he', { bulletedlist: 'רשימת נקודות', numberedlist: 'רשימה ממוספרת' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/ca.js0000664000201500020150000000042215203533227023135 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'ca', { bulletedlist: 'Llista de pics', numberedlist: 'Llista numerada' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/gu.js0000664000201500020150000000047115203533227023171 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'gu', { bulletedlist: 'બà«àª²à«‡àªŸ સૂચિ', numberedlist: 'સંખà«àª¯àª¾àª‚કન સૂચિ' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/ms.js0000664000201500020150000000043515203533227023175 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'ms', { bulletedlist: 'Senarai tidak bernombor', numberedlist: 'Senarai bernombor' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/th.js0000664000201500020150000000056615203533227023176 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'th', { bulletedlist: 'ลำดับรายà¸à¸²à¸£à¹à¸šà¸šà¸ªà¸±à¸à¸¥à¸±à¸à¸©à¸“์', numberedlist: 'ลำดับรายà¸à¸²à¸£à¹à¸šà¸šà¸•ัวเลข' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/de.js0000664000201500020150000000043715203533227023150 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'de', { bulletedlist: 'Liste', numberedlist: 'Nummerierte Liste einfügen/entfernen' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/en-ca.js0000664000201500020150000000045615203533227023544 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'en-ca', { bulletedlist: 'Insert/Remove Bulleted List', numberedlist: 'Insert/Remove Numbered List' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/tt.js0000664000201500020150000000054215203533227023204 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'tt', { bulletedlist: 'Маркерлы тезмә Ó©Ñтәү/бетерү', numberedlist: ' Ðомерланган тезмә Ó©Ñтәү/бетерү' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/vi.js0000664000201500020150000000050015203533227023165 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'vi', { bulletedlist: 'Chèn/Xoá Danh sách không thứ tá»±', numberedlist: 'Chèn/Xoá Danh sách có thứ tá»±' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/cs.js0000664000201500020150000000041315203533227023157 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'cs', { bulletedlist: 'Odrážky', numberedlist: 'Číslování' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/tr.js0000664000201500020150000000042115203533227023176 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'tr', { bulletedlist: 'Simgeli Liste', numberedlist: 'Numaralı Liste' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/ja.js0000664000201500020150000000043715203533227023152 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'ja', { bulletedlist: '番å·ç„¡ã—リスト', numberedlist: '番å·ä»˜ãリスト' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/sl.js0000664000201500020150000000047515203533227023200 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'sl', { bulletedlist: 'Vstavi/odstrani neoÅ¡tevilÄen seznam', numberedlist: 'Vstavi/odstrani oÅ¡tevilÄen seznam' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/lv.js0000664000201500020150000000047715203533227023205 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'lv', { bulletedlist: 'Ievietot/noņemt sarakstu ar aizzÄ«mÄ“m', numberedlist: 'Ievietot/noņemt numurÄ“tu sarakstu' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/en-au.js0000664000201500020150000000045615203533227023566 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'en-au', { bulletedlist: 'Insert/Remove Bulleted List', numberedlist: 'Insert/Remove Numbered List' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/en.js0000664000201500020150000000045315203533227023160 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'en', { bulletedlist: 'Insert/Remove Bulleted List', numberedlist: 'Insert/Remove Numbered List' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/no.js0000664000201500020150000000046315203533227023173 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'no', { bulletedlist: 'Legg til/Fjern punktmerket liste', numberedlist: 'Legg til/Fjern nummerert liste' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/fr.js0000664000201500020150000000050215203533227023160 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'fr', { bulletedlist: 'Insérer/Supprimer une liste à puces', numberedlist: 'Insérer/Supprimer une liste numérotée' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/id.js0000664000201500020150000000045115203533227023150 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'id', { bulletedlist: 'Sisip/Hapus Daftar Bullet', numberedlist: 'Sisip/Hapus Daftar Bernomor' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/ug.js0000664000201500020150000000046715203533227023176 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'ug', { bulletedlist: 'تۈر بەلگە تىزىمى', numberedlist: 'تەرتىپ نومۇر تىزىمى' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/ar.js0000664000201500020150000000047715203533227023166 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'ar', { bulletedlist: 'ادخال/حذ٠تعداد نقطي', numberedlist: 'ادخال/حذ٠تعداد رقمي' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/sr.js0000664000201500020150000000043315203533227023200 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'sr', { bulletedlist: 'Ðабрајање', numberedlist: 'ÐумериÑање' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/eu.js0000664000201500020150000000043115203533227023163 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'eu', { bulletedlist: 'Buletdun Zerrenda', numberedlist: 'Zenbakidun Zerrenda' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/en-gb.js0000664000201500020150000000045615203533227023551 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'en-gb', { bulletedlist: 'Insert/Remove Bulleted List', numberedlist: 'Insert/Remove Numbered List' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/lang/hu.js0000664000201500020150000000041215203533227023165 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'list', 'hu', { bulletedlist: 'Felsorolás', numberedlist: 'Számozás' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/icons/0000755000201500020150000000000015153141500022377 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/list/icons/bulletedlist.png0000664000201500020150000000056215153141500025606 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ðaIDAT8Ëí‘Q €@DßÄުힻîe?-ÂÒW40?:ÊŒĘ̂àîš$–rºÀ« :àט !-÷‘UÒhÄÍ4jxÒSŒ°I×íQ”ðæ Úž:âþ7~â'eˆ$‹dŽtj%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/icons/numberedlist.png0000664000201500020150000000060615153141500025606 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ðuIDAT8Ë­RAÀ ‚ÅÏõÿb§&]§³ê¸5¤Pš"$H>æ€ ‡8hiv¿Ls| Hb"´QPe䚃XÉz-,)þZ£$ù•Õk !ÒUB.µão)ÔµCÀ°FÉAQ$5#VØ:ˆ9'Äœë%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/icons/hidpi/0000755000201500020150000000000015153141500023474 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/list/icons/hidpi/bulletedlist.png0000664000201500020150000000147415153141500026706 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎ@IDATXÃåVA®£0 }Ï@WÐröÿÄÜ \§´¬@gñB DíÌf,EAØŽýlÇð¿àççgú¡ªÛ äBÖ×ñù{Αã{eRH>9ء؋zÕo£Jr f|G¸P»®öß"Z$U¨ÿ½µ¬ Ïó\ÇÎyžë8Ž,Š"TQÚ¨*H:y 9EQ\×´BžªBUU•þþfMv%bç¼áùÄó¯`j ùòyLÀ­l^?Ì$1†!‹l È,‰ª¶"òjò ’ª¶!c I.œ‹5)÷íަ`ÇK <¡†á†Ò E¸¨ïíó"tˆ‹¢À0 $Ù:d$Ûax8f©ø„¢×Ðl ÍÐúÆ÷:±V¾ž8”a$bôIË]£)©auµáöTr`&¼[°Sˆü›³Cö4’˜S_sàú¿í„ÄŒ÷}Øi(" àÚ÷}Ô8É·Ó‘ièôóYß÷(Ërš†ÏçÎeYêãñ`UU‹àÀ>íhr`QeY^C§TÆTUµ˜”n¦,7€ ÙÆqŽõoKçØÌß[ზä+{[)D“’U…ˆ¨ªJôA ÝÐñ’ŒÛý5 ½èºî,;IÜï÷K$”Iù÷ÖÜwðétB×u̲¬€,Ë`Œio·Çã×çA+Œº®¡ªÓ»@DP×5ÂÁõ¦4KÁ¿šŠ³7áÚ;n IdY’hšæ³4M“„ȯ—OÀ·ñÌŽWÏÆ¡%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/icons/hidpi/numberedlist.png0000664000201500020150000000121715153141500026702 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎ“IDATXÃåWYNÄ0 µ«ò \j*õÒ=sòø AŽó²u: K£ÉâåÅvWä¿“¦Á¾ïÙ. ší{¾´_5èöÆT3>¢p––‡¤/ ¿ ¹_U¾'‘;‰5Ì>DlìgzVoØÌ?Ed믉ÇÄ'61Uµ•Cð¶Ö*'ðb…Ð…­Ï$p@f r$™Í‘‚Z—§qíjÆÈõÝ}A¿Ðcû€pz°åÐ2µ8°“ FÔpñˆùïã8®6HV×% ÏŽÀkÈÃ:’€"²L¿@N¬8Áé±¥ñí0_$ÅOõ IV×ë¢åT3I°ÌÅCÕOwÇ{ncØ“–™œl"ARÌì#Á¢³CϽD¢è´°Cð›™!™ë¢HdÆ€úý^¢›˜<ûD¢ä%IQU´¬´EùµTä˜tÜÌšÞ‹,D÷Èôk+á‘Þ—R9´ŠgÏ'×À„ ‡¥ G(‘8ý5l*atÆ/z„(-kvü1O.$@rêq´f§fcNu¦×ü¼È;ñkØãa Ó#Ù —È[“¸ã©Íð«êOOÇÕÀê1ò¿•×qS3×ëõ-^ÔâW ô¦£Ô3ÌdQ³µK ÷ê}«Ÿ,EàèqŠ©«VOî´·À¯ÿLçuÂÃþè].—›Ë;Rñô†äÀHPûRÑG%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/icons/hidpi/bulletedlist-rtl.png0000664000201500020150000000146415153141500027504 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎ8IDATXÃåWK£0 õKCWâ:í 817(×A(+"Ù³(aœ ¥Ìj,E4ñ‡;ñ£Dÿ» m[""‘D‘ÏìV~%›(]ב¹r7{/ÏmÚ¶½À fÏà_ƒ0q@ˆhz@äí!osѶ+ !½”Ík^[°‰¼9’ă4K_¬µ’ù?¬µB@UUI,“ýFiÌÀJëK£TUõÚ^ÒÙ<@içqÇG²BDíʯu&ÀYm“Q:"Âô£,%`fÐõ]eEDH×Ü“œ™yôs/ð­$d´¥<´äŸ÷’€M6ܳÍêEÞ{¢Œ ½÷E6õ=ƆèÄÞ{Oι:çÄ{ç\Ö¨É&ÒvGLJ("äœ{m•À9·fÃ=&ü$¥†%"q¹¿ÞÓNÍ ãc’g¢Ó€¾Úþ¶OŸ/D6dæEû€>_ÕŸþ2fpÇg© qŸÚ6ÏÀπ꺦aÀÌ 2s? êº&Åo.¸êÅzWMÓˆ<—fc 5MC¥žË2pä¯[À©ƒ—HÛ¶ËUdæ¤ËéYýÒxòkxJº®+~Gîe u]GÆ»a® 'ã%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/icons/numberedlist-rtl.png0000664000201500020150000000060615153141500026405 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ðuIDAT8Ë¥“IÀ 3U?Çÿä RiÃâ# Æ ¡”b ’¬0œù¹ËqLp{e?ssôX‚êÿØŽ‚O ©‚Œ ETén œ„fB”¤fe­FWáËR3YVÐ.F>tK†³‘‡l¨€ð'Î`PùQf' Þìô%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/list/icons/bulletedlist-rtl.png0000664000201500020150000000055715153141500026411 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ð^IDAT8Ëí‘;€0 CíŠ[Qsç2“¥ª‚´SŸ”%JœIè!‰eXñ—€’0{“«Nn>wbØå?‘<Ýc%©xiоÂT’væèO˜á~ÛfÙ¸l€kÛ$ÑzÚƒ%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/0000755000201500020150000000000015203533231021576 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/plugin.js0000664000201500020150000047554315203533231023456 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ /** * @fileOverview [Widget](https://ckeditor.com/cke4/addon/widget) plugin. */ 'use strict'; ( function() { var DRAG_HANDLER_SIZE = 15; CKEDITOR.plugins.add( 'widget', { // jscs:disable maximumLineLength lang: 'af,ar,az,bg,ca,cs,cy,da,de,de-ch,el,en,en-au,en-gb,eo,es,es-mx,et,eu,fa,fi,fr,gl,he,hr,hu,id,it,ja,km,ko,ku,lt,lv,nb,nl,no,oc,pl,pt,pt-br,ro,ru,sk,sl,sq,sr,sr-latn,sv,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% // jscs:enable maximumLineLength requires: 'lineutils,clipboard,widgetselection', onLoad: function() { // Widgets require querySelectorAll for proper work (#1319). if ( CKEDITOR.document.$.querySelectorAll === undefined ) { return; } 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 #ffd25c;' + 'cursor:default' + '}' + '.cke_widget_wrapper:hover .cke_widget_editable{' + 'outline:2px solid #ffd25c' + '}' + '.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 #47a4f5' + '}' + '.cke_widget_editable{' + 'cursor:text' + '}' + '.cke_widget_drag_handler_container{' + 'position:absolute;' + 'width:' + DRAG_HANDLER_SIZE + 'px;' + 'height:0;' + 'display:block;' + 'opacity:0.75;' + 'transition:height 0s 0.2s;' + // Delay hiding drag handler. // Prevent drag handler from being misplaced (https://dev.ckeditor.com/ticket/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' + '}' + '.cke_editable[contenteditable="false"] .cke_widget_drag_handler_container{' + // Hide drag handler in read only mode (#3260). 'display:none;' + '}' + '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_widget_partial_mask{' + 'position:absolute;' + 'display:block' + '}' + '.cke_editable.cke_widget_dragging, .cke_editable.cke_widget_dragging *{' + 'cursor:move !important' + '}' ); addCustomStyleHandler(); }, beforeInit: function( editor ) { // Widgets require querySelectorAll for proper work (#1319). if ( CKEDITOR.document.$.querySelectorAll === undefined ) { return; } /** * 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.0 * @readonly * @property {CKEDITOR.plugins.widget.repository} widgets * @member CKEDITOR.editor */ editor.widgets = new Repository( editor ); }, afterInit: function( editor ) { // Widgets require querySelectorAll for proper work (#1319). if ( CKEDITOR.document.$.querySelectorAll === undefined ) { return; } addWidgetButtons( editor ); setupContextMenu( editor ); setupUndoFilter( editor.undoManager ); } } ); /** * 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 ) { var editor = this.editor; // Create prototyped copy of original widget definition, so we won't modify it. widgetDef = CKEDITOR.tools.prototypedCopy( widgetDef ); widgetDef.name = name; widgetDef._ = widgetDef._ || {}; editor.fire( 'widgetDefinition', widgetDef ); if ( widgetDef.template ) widgetDef.template = new CKEDITOR.template( widgetDef.template ); addWidgetCommand( editor, widgetDef ); addWidgetProcessors( this, widgetDef ); this.registered[ name ] = widgetDef; // Define default `getMode` member for widget dialog definition (#2423). if ( widgetDef.dialog && editor.plugins.dialog ) { var dialogListener = CKEDITOR.on( 'dialogDefinition', function( evt ) { var definition = evt.data.definition, dialog = definition.dialog; if ( !definition.getMode && dialog.getName() === widgetDef.dialog ) { definition.getMode = function() { var model = dialog.getModel( editor ); return model && model instanceof CKEDITOR.plugins.widget && model.ready ? CKEDITOR.dialog.EDITING_MODE : CKEDITOR.dialog.CREATION_MODE; }; } dialogListener.removeListener(); } ); } 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() { if ( !this.editor.getSelection() ) { return; } 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.0 * @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.0 * @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 ) { widgetName = widgetName || element.data( 'widget' ); widgetDef = this.registered[ widgetName ]; 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 ); element.data( 'widget', widgetName ); isInline = isWidgetInline( widgetDef, element.getName() ); // Preserve initial and trailing space by replacing white space with   (#605). if ( isInline ) { preserveSpaces( element ); } wrapper = new CKEDITOR.dom.element( isInline ? 'span' : 'div', element.getDocument() ); wrapper.setAttributes( getWrapperAttributes( isInline, widgetName ) ); 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 ) { widgetName = widgetName || element.attributes[ 'data-widget' ]; widgetDef = this.registered[ widgetName ]; 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 ); // Preserve initial and trailing space by replacing white space with   (#605). if ( isInline ) { preserveSpaces( element ); } wrapper = new CKEDITOR.htmlParser.element( isInline ? 'span' : 'div', getWrapperAttributes( isInline, widgetName ) ); 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.0 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.0 * @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. * Parts can be reinitialized with the {@link #refreshParts} method. * * @readonly * @property {Object} parts */ /** * An object containing definitions of widget parts (`part name => CSS selector`). * * Unlike the {@link #parts} object, it stays unchanged throughout the widget lifecycle * and is used in the {@link #refreshParts} method. * * @readonly * @property {Object} partSelectors * @since 4.14.0 */ /** * 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 overridden by widgets * which should handle classes differently (e.g. add them to other elements). * * Since 4.6.0 this method also adds a corresponding class prefixed with {@link #WRAPPER_CLASS_PREFIX} * to the widget wrapper element. * * **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.0 * @param {String} className The class name to be added. */ addClass: function( className ) { this.element.addClass( className ); this.wrapper.addClass( Widget.WRAPPER_CLASS_PREFIX + 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.0 * @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.0 * @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 ], canDestroyFilter = true; editable.removeListener( 'focus', onEditableFocus ); editable.removeListener( 'blur', onEditableBlur ); this.editor.focusManager.remove( editable ); // Destroy filter if it's no longer used by other editables (#1722). if ( editable.filter ) { for ( var widgetName in this.repository.instances ) { var widget = this.repository.instances[ widgetName ]; if ( !widget.editables ) { continue; } var widgetEditable = widget.editables[ editableName ]; if ( !widgetEditable || widgetEditable === editable ) { continue; } if ( editable.filter === widgetEditable.filter ) { canDestroyFilter = false; } } if ( canDestroyFilter ) { editable.filter.destroy(); var filters = this.repository._.filters[ this.name ]; if ( filters ) { delete filters[ editableName ]; } } } 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(); } ); }, that ); 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.0 * @returns {Object} */ getClasses: function() { return this.repository.parseElementClasses( this.element.getAttribute( 'class' ) ); }, /** * Returns the HTML of the widget. Can be overridden by * {@link CKEDITOR.plugins.widget.definition#getClipboardHtml widgetDefinition.getClipboardHtml()} * to customize the HTML copied to the clipboard during copy, cut and drag events. * * @since 4.13.0 * @returns {String} Widget HTML. */ getClipboardHtml: function() { var range = this.editor.createRange(); range.setStartBefore( this.wrapper ); range.setEndAfter( this.wrapper ); return this.editor.editable().getHtmlFromRange( range ).getHtml(); }, /** * 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.0 * @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. (https://dev.ckeditor.com/ticket/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. (https://dev.ckeditor.com/ticket/13334) * * @since 4.5.0 * @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 https://dev.ckeditor.com/ticket/10483). this.editor.focus(); }, /** * Refreshes the widget's mask. It can be used together with the {@link #refreshParts} method to reinitialize the mask * for dynamically created widgets. * * @since 4.14.0 */ refreshMask: function() { setupMask( this ); }, /** * Reinitializes the widget's {@link #parts}. * * This method can be used to link new DOM elements to widget parts, for example in case when the widget's HTML is created * asynchronously or modified during the widget lifecycle. Note that it uses the {@link #partSelectors} object, so it does not * refresh parts that were created manually. * * @since 4.14.0 * @param {Boolean} [refreshInitialized=true] Whether the parts that are already initialized should be reinitialized. */ refreshParts: function( refreshInitialized ) { refreshInitialized = typeof refreshInitialized !== 'undefined' ? refreshInitialized : true; setupParts( this, refreshInitialized ); }, /** * 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.0 * @param {String} className The class to be removed. */ removeClass: function( className ) { this.element.removeClass( className ); this.wrapper.removeClass( Widget.WRAPPER_CLASS_PREFIX + 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.0 * @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 (https://dev.ckeditor.com/ticket/11487). var initialDirty = editor.checkDirty(); editor.fire( 'lockSnapshot' ); this.dragHandlerContainer.setStyles( { top: newPos.y + 'px', left: newPos.x + 'px' } ); this.dragHandlerContainer.removeStyle( 'display' ); 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.0 * @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.0 * @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.0 * @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.0 * @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.0 * @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.0 * @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 DOM widget. * * @since 4.8.0 * @static * @param {CKEDITOR.dom.node} node * @returns {Boolean} */ Widget.isDomWidget = function( node ) { return node ? this.isDomWidgetWrapper( node ) || this.isDomWidgetElement( node ) : false; }; /** * Checks whether the `node` is a {@link CKEDITOR.plugins.widget#element widget element}. * * @since 4.5.0 * @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.0 * @static * @param {CKEDITOR.htmlParser.element} node * @returns {Boolean} */ Widget.isParserWidgetWrapper = function( node ) { return node.type == CKEDITOR.NODE_ELEMENT && !!node.attributes[ 'data-cke-widget-wrapper' ]; }; /** * Prefix added to wrapper classes. Each class added to the widget element by the {@link #addClass} * method will also be added to the wrapper prefixed with it. * * @since 4.6.0 * @static * @readonly * @property {String} [='cke_widget_wrapper_'] */ Widget.WRAPPER_CLASS_PREFIX = '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; // Unprotect comments, to get rid of additional characters (#4777). data = this.editor.dataProcessor.unprotectRealComments( data ); // Unescape protected content to prevent double escaping and corruption of content (#4060, #4509). data = this.editor.dataProcessor.unprotectSource( data ); 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 ( focused && focused.name == widgetDef.name ) { // If a widget of the same type is focused, start editing. focused.edit(); } else if ( widgetDef.insert ) { // ... use insert method is was defined. widgetDef.insert( { editor: editor, commandData: commandData } ); } else if ( widgetDef.template ) { // ... or create a brand-new widget from template. var defaults = typeof widgetDef.defaults == 'function' ? widgetDef.defaults() : widgetDef.defaults, element = CKEDITOR.dom.element.createFromHtml( widgetDef.template.output( defaults ), editor.document ), 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, priority = widgetDef.upcastPriority || 10; function multipleUpcastsHandler( element, data ) { var upcasts = widgetDef.upcast.split( ',' ), upcast, i; for ( i = 0; i < upcasts.length; i++ ) { upcast = upcasts[ i ]; if ( upcast === element.name ) { return widgetDef.upcasts[ upcast ].call( this, element, data ); } } return false; } if ( !upcast ) return; // Multiple upcasts defined in string. if ( typeof upcast == 'string' ) { // This handler ensures that upcast method is fired only for appropriate element (#1094). addUpcast( multipleUpcastsHandler, widgetDef, priority ); } // Single rule which is automatically activated. else { addUpcast( upcast, widgetDef, priority ); } function addUpcast( upcast, def, 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, [ CKEDITOR.tools.bind( upcast, def ), def.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 ) { // https://dev.ckeditor.com/ticket/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 (https://dev.ckeditor.com/ticket/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 ); } } // Preserves white spaces in widget element. // // This function is replacing white spaces with   // at the beginning of the first text node // and at the end of the last text node. // // @param {CKEDITOR.htmlParser.element} el function preserveSpaces( el ) { if ( typeof el.attributes != 'undefined' && el.attributes[ 'data-widget' ] ) { var firstTextNode = getFirstTextNode( el ), lastTextNode = getLastTextNode( el ), spacesReplaced = false; // Check whether the value of the first text node contains white space at the beginning and replace it with  . if ( firstTextNode && firstTextNode.value && firstTextNode.value.match( /^\s/g ) ) { firstTextNode.parent.attributes[ 'data-cke-white-space-first' ] = 1; firstTextNode.value = firstTextNode.value.replace( /^\s/g, ' ' ); spacesReplaced = true; } // Check whether the value of the last text node contains white space at the end and replace it with  . if ( lastTextNode && lastTextNode.value && lastTextNode.value.match( /\s$/g ) ) { lastTextNode.parent.attributes[ 'data-cke-white-space-last' ] = 1; lastTextNode.value = lastTextNode.value.replace( /\s$/g, ' ' ); spacesReplaced = true; } if ( spacesReplaced ) { el.attributes[ 'data-cke-widget-white-space' ] = 1; } } } // Returns first child text node of the given element. // // @param {CKEDITOR.htmlParser.element} el. // @returns {CKEDITOR.htmlParser.text} function getFirstTextNode( el ) { return el.find( function( node ) { return node.type === 3; }, true ).shift(); } // Returns last child text node of the given element. // // @param {CKEDITOR.htmlParser.element} el. // @returns {CKEDITOR.htmlParser.text} function getLastTextNode( el ) { return el.find( function( node ) { return node.type === 3; }, true ).pop(); } // 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 && !editableDefinition.disallowedContent ) return null; var editables = this._.filters[ widgetName ]; if ( !editables ) this._.filters[ widgetName ] = editables = {}; var filter = editables[ editableName ]; if ( !filter ) { filter = editableDefinition.allowedContent ? new CKEDITOR.filter( editableDefinition.allowedContent ) : this.editor.filter.clone(); editables[ editableName ] = filter; if ( editableDefinition.disallowedContent ) { filter.disallow( editableDefinition.disallowedContent ); } } 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 (https://dev.ckeditor.com/ticket/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 https://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, name ) { 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' ) + ( name ? ' cke_widget_' + name : '' ) }; } // 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 (https://dev.ckeditor.com/ticket/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 (https://dev.ckeditor.com/ticket/12172#comment:10). widget.focus(); } } ); editor.on( 'drop', function( evt ) { var dataTransfer = evt.data.dataTransfer, id = dataTransfer.getData( 'cke/widget-id' ), transferType = dataTransfer.getTransferType( editor ), dragRange = editor.createRange(), dropRange = evt.data.dropRange, dropWidget = getWidgetFromRange( dropRange ), sourceWidget; // Disable cross-editor drag & drop for widgets - https://dev.ckeditor.com/ticket/13599. if ( id !== '' && transferType === CKEDITOR.DATA_TRANSFER_CROSS_EDITORS ) { evt.cancel(); return; } if ( transferType != CKEDITOR.DATA_TRANSFER_INTERNAL ) { return; } // Add support for dropping selection containing more than widget itself // or more than one widget (#3441). if ( id === '' && editor.widgets.selected.length > 0 ) { evt.data.dataTransfer.setData( 'text/html', getClipboardHtml( editor ) ); return; } sourceWidget = widgetsRepo.instances[ id ]; if ( !sourceWidget ) { return; } // Disable dropping into itself or nested widgets (#4509). if ( isTheSameWidget( sourceWidget, dropWidget ) ) { evt.cancel(); 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', sourceWidget.getClipboardHtml() ); editor.widgets.destroy( sourceWidget, true ); // In case of dropping widget, the fake selection should be on the widget itself. // Thanks to that we should always get widget from range's boundary nodes. function getWidgetFromRange( range ) { var startElement = range.getBoundaryNodes().startNode; if ( startElement.type !== CKEDITOR.NODE_ELEMENT ) { startElement = startElement.getParent(); } return editor.widgets.getByElement( startElement ); } function isTheSameWidget( widget1, widget2 ) { if ( !widget1 || !widget2 ) { return false; } return widget1.wrapper.equals( widget2.wrapper ) || widget1.wrapper.contains( widget2.wrapper ); } } ); 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 (https://dev.ckeditor.com/ticket/12006). if ( Widget.isDomNestedEditable( el ) ) return; // Do not allow droping inside the widget being dragged (https://dev.ckeditor.com/ticket/13397). if ( widgetsRepo._.draggedWidget.wrapper.contains( el ) ) { return; } // If element is nested editable, make sure widget can be dropped there (https://dev.ckeditor.com/ticket/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(); // Clicking scrollbar in Chrome will invoke event with target object of document type (#663). // In IE8 the target object will be empty (https://dev.ckeditor.com/ticket/10887). // We need to check if target is a proper element. widget = ( target instanceof CKEDITOR.dom.element ) ? widgetsRepo.getByElement( target ) : null; 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; // When drag handler is pressed we have to clear current selection if it wasn't already on this widget. // Otherwise, the selection may be in a fillingChar, which prevents dragging a widget. (https://dev.ckeditor.com/ticket/13284, see comment 8 and 9.) if ( widgetsRepo.focused != widget ) editor.getSelection().removeAllRanges(); 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 the user accepted the security alert on IEs. // Note: When copying or cutting using keystroke, copyWidgets will be executed first // by the keydown listener. A conflict between two calls will be resolved by the 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.selected.length < 1 ) { return; } copyWidgets( editor, evt.name === 'cut' ); } } // Setup selection observer which will trigger: // * widget select & focus on selection change, // * nested editable focus (related properties 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', fireCheckSelection ); // The selectionCheck event is fired on keyup, so we must force refreshing // widgets selection on key event. Also fire it only in WYSIWYG mode (#3352, #3704). editor.on( 'contentDom', function() { editor.editable().attachListener( editor, 'key', function() { setTimeout( fireCheckSelection, 10 ); } ); } ); // (#3498) if ( !CKEDITOR.env.ie ) { widgetsRepo.on( 'checkSelection', fixCrossContentSelection ); } 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 ); } ); // Selection is fixed only when it starts in content and ends in a widget (and vice versa). // It's not possible to manually create selection which starts inside one widget and ends in another, // so we are skipping this case to simplify implementation (#3498). function fixCrossContentSelection() { var selection = editor.getSelection(); if ( !selection ) { return; } var range = selection.getRanges()[ 0 ]; if ( !range || range.collapsed ) { return; } var startWidget = findWidget( range.startContainer ), endWidget = findWidget( range.endContainer ); if ( !startWidget && endWidget ) { range.setEndBefore( endWidget.wrapper ); range.select(); } else if ( startWidget && !endWidget ) { range.setStartAfter( startWidget.wrapper ); range.select(); } } function findWidget( node ) { if ( !node ) { return null; } if ( node.type == CKEDITOR.NODE_TEXT ) { return findWidget( node.getParent() ); } return editor.widgets.getByElement( node ); } function fireCheckSelection() { widgetsRepo.fire( 'checkSelection' ); } } // 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; // Reset initial and trailing space by replacing   with white space (#605). if ( 'data-cke-widget-white-space' in attrs ) { var firstTextNode = getFirstTextNode( element ), lastTextNode = getLastTextNode( element ); // Check whether the value of the text node contains   at the beginning and replace it with white space. if ( firstTextNode.parent.attributes[ 'data-cke-white-space-first' ] ) { firstTextNode.value = firstTextNode.value.replace( /^ /g, ' ' ); } // Check whether the value of the text node contains   at the end and replace it with white space. if ( lastTextNode.parent.attributes[ 'data-cke-white-space-last' ] ) { lastTextNode.value = lastTextNode.value.replace( / $/g, ' ' ); } } // 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) (https://dev.ckeditor.com/ticket/11372). // There is possibility that nested editable is detected during pasting, when widget // containing it is not yet upcasted (#1469). if ( toBeDowncasted.length > 0 ) { 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, parserFragment; while ( ( toBe = toBeDowncasted.shift() ) ) { widget = toBe.widget; widgetElement = toBe.element; retElement = widget._.downcastFn && widget._.downcastFn.call( widget, widgetElement ); // In case of copying widgets, we replace the widget with clipboard data (#3138). if ( evt.data.widgetsCopy && widget.getClipboardHtml ) { parserFragment = CKEDITOR.htmlParser.fragment.fromHtml( widget.getClipboardHtml() ); retElement = parserFragment.children[ 0 ]; } // 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 (https://dev.ckeditor.com/ticket/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' ); } }; } function setupUndoFilter( undoManager ) { if ( !undoManager ) { return; } undoManager.addFilterRule( function( data ) { return data.replace( /\s*cke_widget_selected/g, '' ) .replace( /\s*cke_widget_focused/g, '' ); } ); } // // 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 }; // Do not block SHIFT + F10 which opens context menu (#1901). keystrokesNotBlockedByWidget[ CKEDITOR.SHIFT + 121 ] = 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(); } var CopyBin = CKEDITOR.tools.createClass( { $: function( editor, options ) { this._.createCopyBin( editor, options ); this._.createListeners( options ); }, _: { createCopyBin: function( editor ) { // [IE] Use span for copybin and its container to avoid bug with expanding // editable height by absolutely positioned element. // For Edge 16+ always use div, as span causes scrolling to the end of the document // on widget cut (also for blockless editor) (#1160). // Edge 16+ workaround could be safetly removed after #1169 is fixed. var doc = editor.document, isEdge16 = CKEDITOR.env.edge && CKEDITOR.env.version >= 16, copyBinName = ( ( editor.blockless || CKEDITOR.env.ie ) && !isEdge16 ) ? 'span' : 'div', copyBin = doc.createElement( copyBinName ), container = doc.createElement( copyBinName ); container.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' ); this.editor = editor; this.copyBin = copyBin; this.container = container; }, createListeners: function( options ) { if ( !options ) { return; } if ( options.beforeDestroy ) { this.beforeDestroy = options.beforeDestroy; } if ( options.afterDestroy ) { this.afterDestroy = options.afterDestroy; } } }, proto: { handle: function( html ) { var copyBin = this.copyBin, editor = this.editor, container = this.container, // IE8 always jumps to the end of document. needsScrollHack = CKEDITOR.env.ie && CKEDITOR.env.version < 9, docElement = editor.document.getDocumentElement().$, range = editor.createRange(), that = this, // We need 100ms timeout for Chrome on macOS so it will be able to grab the content on cut. isMacWebkit = CKEDITOR.env.mac && CKEDITOR.env.webkit, copyTimeout = isMacWebkit ? 100 : 0, waitForContent = window.requestAnimationFrame && !isMacWebkit ? requestAnimationFrame : setTimeout, listener1, listener2, scrollTop; copyBin.setHtml( '\u200b' + html + '\u200b' ); // Ignore copybin. editor.fire( 'lockSnapshot' ); container.append( copyBin ); editor.editable().append( container ); listener1 = editor.on( 'selectionChange', cancel, null, null, 0 ); listener2 = editor.widgets.on( 'checkSelection', cancel, null, null, 0 ); if ( needsScrollHack ) { 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.selectNodeContents( copyBin ); range.select(); if ( needsScrollHack ) { docElement.scrollTop = scrollTop; } return new CKEDITOR.tools.promise( function( resolve ) { waitForContent( function() { if ( that.beforeDestroy ) { that.beforeDestroy(); } container.remove(); listener1.removeListener(); listener2.removeListener(); editor.fire( 'unlockSnapshot' ); if ( that.afterDestroy ) { that.afterDestroy(); } resolve(); }, copyTimeout ); } ); } }, statics: { hasCopyBin: function( editor ) { return !!CopyBin.getCopyBin( editor ); }, getCopyBin: function( editor ) { return editor.document.getById( 'cke_copybin' ); } } } ); function insertLine( widget, position ) { var elementTag = decodeEnterMode( widget.editor.config.enterMode ), newElement = new CKEDITOR.dom.element( elementTag ); // Avoid nesting
          inside
          . if ( elementTag !== 'br' ) { newElement.appendBogus(); } if ( position === 'after' ) { newElement.insertAfter( widget.wrapper ); } else { newElement.insertBefore( widget.wrapper ); } select( newElement ); function decodeEnterMode( option ) { if ( option == CKEDITOR.ENTER_BR ) { return 'br'; } else if ( option == CKEDITOR.ENTER_DIV ) { return 'div'; } // Default option - CKEDITOR.ENTER_P. return 'p'; } function select( element ) { var newRange = widget.editor.createRange(); newRange.setStart( element, 0 ); widget.editor.getSelection().selectRanges( [ newRange ] ); } } function copyWidgets( editor, isCut ) { var focused = editor.widgets.focused, isWholeSelection, copyBin, bookmarks; // We're still handling previous copy/cut. // When keystroke is used to copy/cut this will also prevent // conflict with copyWidgets called again for native copy/cut event. if ( CopyBin.hasCopyBin( editor ) ) { return; } copyBin = new CopyBin( editor, { beforeDestroy: function() { if ( !isCut && focused ) { focused.focus(); } if ( bookmarks ) { editor.getSelection().selectBookmarks( bookmarks ); } if ( isWholeSelection ) { CKEDITOR.plugins.widgetselection.addFillers( editor.editable() ); } }, afterDestroy: function() { // Prevent cutting in read-only editor (#1570). if ( isCut && !editor.readOnly ) { handleCut(); } } } ); // When more than one widget is selected, we must save selection to restore it // after destroying copybin. Additionally we have to work around issue with selecting all in // Blink and WebKit, when widgets are at the beginning and at the end of the content (#3138). if ( !focused ) { isWholeSelection = CKEDITOR.env.webkit && CKEDITOR.plugins.widgetselection.isWholeContentSelected( editor.editable() ); bookmarks = editor.getSelection().createBookmarks( true ); } copyBin.handle( getClipboardHtml( editor ) ); function handleCut() { if ( focused ) { editor.widgets.del( focused ); } else { editor.extractSelectedHtml(); } editor.fire( 'saveSnapshot' ); } } // 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 ); } } function getClipboardHtml( editor ) { var selectedHtml = editor.getSelectedHtml( true ); if ( editor.widgets.focused ) { return editor.widgets.focused.getClipboardHtml(); } editor.once( 'toDataFormat', function( evt ) { evt.data.widgetsCopy = true; }, null, null, -1 ); return editor.dataProcessor.toDataFormat( selectedHtml ); } function setupWidget( widget, widgetDef ) { var keystrokeInsertLineBefore = widget.editor.config.widget_keystrokeInsertLineBefore, keystrokeInsertLineAfter = widget.editor.config.widget_keystrokeInsertLineAfter; setupWrapper( widget ); setupParts( widget ); setupEditables( widget ); setupMask( widget ); setupDragHandler( widget ); setupDataClassesListener( widget ); setupA11yListener( widget ); // https://dev.ckeditor.com/ticket/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; // Insert a new paragraph before the widget (#4467). if ( keyCode == keystrokeInsertLineBefore ) { insertLine( widget, 'before' ); widget.editor.fire( 'saveSnapshot' ); } // Insert a new paragraph after the widget (#4467). else if ( keyCode == keystrokeInsertLineAfter ) { insertLine( widget, 'after' ); widget.editor.fire( 'saveSnapshot' ); } // ENTER. else if ( keyCode == 13 ) { widget.edit(); } // CTRL+C or CTRL+X. else if ( keyCode == CKEDITOR.CTRL + 67 || keyCode == CKEDITOR.CTRL + 88 ) { copyWidgets( widget.editor, keyCode == CKEDITOR.CTRL + 88 ); return; // Do not preventDefault. } // Pass all CTRL/ALT keystrokes. // Pass chosen keystrokes to other plugins or default fake sel handlers. else if ( keyCode in keystrokesNotBlockedByWidget || ( CKEDITOR.CTRL & keyCode ) || ( CKEDITOR.ALT & keyCode ) ) { 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 (https://dev.ckeditor.com/ticket/12140). evt.cancel(); } } ); if ( widgetDef.data ) { widget.on( 'data', widgetDef.data ); } if ( widgetDef.edit ) { widget.on( 'edit', widgetDef.edit ); } } 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 ); } // Replace parts object containing: // partName => selector pairs // with: // partName => element pairs function setupParts( widget, refreshInitialized ) { if ( !widget.partSelectors ) { widget.partSelectors = widget.parts; } if ( widget.parts ) { var parts = {}, el, partName; for ( partName in widget.partSelectors ) { if ( refreshInitialized || !widget.parts[ partName ] || typeof widget.parts[ partName ] == 'string' ) { el = widget.wrapper.findOne( widget.partSelectors[ partName ] ); parts[ partName ] = el; } else { parts[ partName ] = widget.parts[ partName ]; } } widget.parts = parts; } } function setupEditables( widget ) { var definedEditables = widget.editables, editableName, editableDef; 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 === true ) { setupFullMask( widget ); } else if ( widget.mask ) { // Buffer to limit number of separate calls to 'refreshPartialMask()', e.g. during writing. var maskBuffer = new CKEDITOR.tools.buffers.throttle( 250, refreshPartialMask, widget ), timeout = ( CKEDITOR.env.gecko ? 300 : 0 ), changeListener, blurListener; // First listener is the most obvious, refresh mask after every change that could affect widget. widget.on( 'focus', function() { // Refresh widget mask on initial focus. This handle cases when widget can be resized without // being focused and is focused right after (e.g. `image2` on Edge/IE browsers). maskBuffer.input(); changeListener = widget.editor.on( 'change', maskBuffer.input ); blurListener = widget.on( 'blur', function() { changeListener.removeListener(); blurListener.removeListener(); } ); } ); // Another insurance policy vs FF but this time also Chrome (the latter is just a bit better here). // This time setup mask after editor is ready (in FF it doesn't mean that widgets are fully loaded // so timeout is needed) and after switching from source mode (same story). widget.editor.on( 'instanceReady', function() { setTimeout( function() { maskBuffer.input(); }, timeout ); } ); widget.editor.on( 'mode', function() { setTimeout( function() { maskBuffer.input(); }, timeout ); } ); // FF renders image-like widget very late, so mask has to be create asynchronously after // image is loaded. if ( CKEDITOR.env.gecko ) { var imgs = widget.element.find( 'img' ); CKEDITOR.tools.array.forEach( imgs.toArray(), function( img ) { img.on( 'load', function() { maskBuffer.input(); } ); } ); } // Focusing editable doesn't trigger focus on widget, so listen to those events separately. for ( var editable in widget.editables ) { widget.editables[ editable ].on( 'focus', function() { widget.editor.on( 'change', maskBuffer.input ); // If widget was focused before focusing editable, the 'blur' event has to be removed. // Otherwise on Chrome it will trigger after the focus event and cancel listening to // changes (on FF it works inversely). if ( blurListener ) { blurListener.removeListener(); } } ); widget.editables[ editable ].on( 'blur', function() { widget.editor.removeListener( 'change', maskBuffer.input ); } ); } // Trigger initial setup. maskBuffer.input(); } } function setupFullMask( widget ) { // Reuse mask if already exists (https://dev.ckeditor.com/ticket/11281). var mask = widget.wrapper.findOne( '.cke_widget_mask' ); if ( !mask ) { mask = new CKEDITOR.dom.element( 'img', widget.editor.document ); mask.setAttributes( { src: CKEDITOR.tools.transparentImageData, 'class': 'cke_reset cke_widget_mask' } ); widget.wrapper.append( mask ); } widget.mask = mask; } function refreshPartialMask() { if ( !this.wrapper ) { return; } // Original value of 'widget.mask' is substituted with actual mask element, so // 'widget.maskPart' property was added to be able to adjust partial mask e.g. after resizing. this.maskPart = this.maskPart || this.mask; var part = this.parts[ this.maskPart ], mask; // If requested part is invalid or wasn't fetched yet (#3775), don't create mask. if ( !part || typeof part == 'string' ) { return; } mask = this.wrapper.findOne( '.cke_widget_partial_mask' ); if ( !mask ) { mask = new CKEDITOR.dom.element( 'img', this.editor.document ); mask.setAttributes( { src: CKEDITOR.tools.transparentImageData, 'class': 'cke_reset cke_widget_partial_mask' } ); this.wrapper.append( mask ); } this.mask = mask; if ( !isMaskFitting( mask, part ) ) { setMaskSizeAndPosition( mask, part ); } } function isMaskFitting( oldElement, newElement ) { var oldEl = oldElement.$, newEl = newElement.$, dimensionsChanged = !( oldEl.offsetWidth == newEl.offsetWidth && oldEl.offsetHeight == newEl.offsetHeight ), positionChanged = !( oldEl.offsetTop == newEl.offsetTop && oldEl.offsetLeft == newEl.offsetLeft ); return !( dimensionsChanged || positionChanged ); } function setMaskSizeAndPosition( mask, maskedPart ) { // Widgets with resize feature are messing with default widget structure, // so it needs to be taken into account and mask's position will be adjusted. // The problem was appearing after dragging the widget in FF. var parent = maskedPart.getParent(), isDomWidget = CKEDITOR.plugins.widget.isDomWidget( parent ); mask.setStyles( { top: maskedPart.$.offsetTop + ( !isDomWidget ? parent.$.offsetTop : 0 ) + 'px', left: maskedPart.$.offsetLeft + ( !isDomWidget ? parent.$.offsetLeft : 0 ) + 'px', width: maskedPart.$.offsetWidth + 'px', height: maskedPart.$.offsetHeight + 'px' } ); } function setupDragHandler( widget ) { if ( !widget.draggable ) { return; } var editor = widget.editor, // Use getLast to find wrapper's direct descendant (https://dev.ckeditor.com/ticket/12022). container = widget.wrapper.getLast( Widget.isDomDragHandlerContainer ), img; // Reuse drag handler if already exists (https://dev.ckeditor.com/ticket/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(). // Initially drag handler should not be visible, until its position will be // calculated (https://dev.ckeditor.com/ticket/11177). // We need to hide unpositined handlers, so they don't extend // widget's outline far to the left (https://dev.ckeditor.com/ticket/12024). style: 'background:rgba(220,220,220,0.5);background-image:url(' + editor.plugins.widget.path + 'images/handle.png);' + 'display:none;' } ); 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, role: 'presentation' } ); widget.inline && img.setAttribute( 'draggable', 'true' ); container.append( img ); widget.wrapper.append( container ); } // Preventing page reload when dropped content on widget wrapper (https://dev.ckeditor.com/ticket/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 ) { // Allow to drag widget only with left mouse button (#711). if ( CKEDITOR.tools.getMouseButton( evt ) !== CKEDITOR.MOUSE_BUTTON_LEFT ) { return; } var finder = this.repository.finder, locator = this.repository.locator, liner = this.repository.liner, editor = this.editor, editable = editor.editable(), listeners = [], sorted = [], locations, y; // 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(); } } ); // 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 } ); } // 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; } ); } // Add a listener to data event that will set/change widget's label (https://dev.ckeditor.com/ticket/14539). function setupA11yListener( widget ) { // Note, the function gets executed in a context of widget instance. function getLabelDefault() { return this.editor.lang.widget.label.replace( /%1/, this.pathName || this.element.getName() ); } // Setting a listener on data is enough, there's no need to perform it on widget initialization, as // setupWidgetData fires this event anyway. widget.on( 'data', function() { // In some cases widget might get destroyed in an earlier data listener. For instance, image2 plugin, does // so when changing its internal state. if ( !widget.wrapper ) { return; } var label = this.getLabel ? this.getLabel() : getLabelDefault.call( this ); widget.wrapper.setAttribute( 'role', 'region' ); widget.wrapper.setAttribute( 'aria-label', label ); }, null, null, 9999 ); } 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 writeDataToElement( widget ) { widget.element.data( 'cke-widget-data', encodeURIComponent( JSON.stringify( widget.data ) ) ); } // // WIDGET STYLE HANDLER --------------------------------------------------- // function addCustomStyleHandler() { // Styles categorized by group. It is used to prevent applying styles for the same group being used together. var styleGroups = {}; /** * 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.0 * @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; /** * An array of groups that this style belongs to. * Styles assigned to the same group cannot be combined. * * @since 4.6.2 * @property {Array} group */ this.group = typeof styleDefinition.group == 'string' ? [ styleDefinition.group ] : styleDefinition.group; // Store style categorized by its group. // It is used to prevent enabling two styles from same group. if ( this.group ) { saveStyleGroup( this ); } }, apply: function( editor ) { var widget; // Before CKEditor 4.4.0 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 removing itself. if ( this.checkApplicable( editor.elementPath(), editor ) ) { widget = editor.widgets.focused; // Remove other styles from the same group. if ( this.group ) { this.removeStylesFromSameGroup( editor ); } widget.applyStyle( this ); } }, remove: function( editor ) { // Before CKEditor 4.4.0 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 ); } }, /** * Removes all styles that belong to the same group as this style. This method will neither add nor remove * the current style. * Returns `true` if any style was removed, otherwise returns `false`. * * @since 4.6.2 * @param {CKEDITOR.editor} editor * @returns {Boolean} */ removeStylesFromSameGroup: function( editor ) { var removed = false, stylesFromSameGroup, path; // Before CKEditor 4.4.0 wasn't a required argument, so we need to // handle a case when it wasn't provided. if ( !( editor instanceof CKEDITOR.editor ) ) { return false; } path = editor.elementPath(); if ( this.checkApplicable( path, editor ) ) { // Iterate over each group. for ( var i = 0, l = this.group.length; i < l; i++ ) { stylesFromSameGroup = styleGroups[ this.widget ][ this.group[ i ] ]; // Iterate over each style from group. for ( var j = 0; j < stylesFromSameGroup.length; j++ ) { if ( stylesFromSameGroup[ j ] !== this && stylesFromSameGroup[ j ].checkActive( path, editor ) ) { editor.widgets.focused.removeStyle( stylesFromSameGroup[ j ] ); removed = true; } } } } return removed; }, checkActive: function( elementPath, editor ) { return this.checkElementMatch( elementPath.lastElement, 0, editor ); }, checkApplicable: function( elementPath, editor ) { // Before CKEditor 4.4.0 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.0 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 ); } // Save and categorize style by its group. function saveStyleGroup( style ) { var widgetName = style.widget, groupName, group; if ( !styleGroups[ widgetName ] ) { styleGroups[ widgetName ] = {}; } for ( var i = 0, l = style.group.length; i < l; i++ ) { groupName = style.group[ i ]; if ( !styleGroups[ widgetName ][ groupName ] ) { styleGroups[ widgetName ][ groupName ] = []; } group = styleGroups[ widgetName ][ groupName ]; // Don't push the style if it's already stored (#589). if ( !find( group, getCompareFn( style ) ) ) { group.push( style ); } } // Copied `CKEDITOR.tools.array` from major branch. function find( array, fn, thisArg ) { var length = array.length, i = 0; while ( i < length ) { if ( fn.call( thisArg, array[ i ], i, array ) ) { return array[ i ]; } i++; } return undefined; } function getCompareFn( left ) { return function( right ) { return deepCompare( left.getDefinition(), right.getDefinition() ); }; function deepCompare( left, right ) { var leftKeys = CKEDITOR.tools.object.keys( left ), rightKeys = CKEDITOR.tools.object.keys( right ); if ( leftKeys.length !== rightKeys.length ) { return false; } for ( var key in left ) { var areSameObjects = typeof left[ key ] === 'object' && typeof right[ key ] === 'object' && deepCompare( left[ key ], right[ key ] ); if ( !areSameObjects && left[ key ] !== right[ key ] ) { return false; } } return true; } } } } // // 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), however, it is executed in the * {@link CKEDITOR.plugins.widget#definition widget's definition} context. * Two arguments are passed to the upcast function: * * * `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.0 * @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 function 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 * @param {Object} options Options object added in **4.11.0**. * @param {CKEDITOR.editor} options.editor The editor where the widget is going to be inserted to. * @param {Object} [options.commandData] Command data passed to the invoking command, if any. */ /** * 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 */ /** * The function used to obtain an accessibility label for the widget. It might be used to make * the widget labels as precise as possible, since it has access to the widget instance. * * If not specified, the default implementation will use the {@link #pathName} or the main * {@link CKEDITOR.plugins.widget#element element} tag name. * * @property {Function} getLabel */ /** * The widget name displayed in the 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 iframes that generate a separate "context". * * If the value is a `string` type, then the partial mask covering only the given widget part * is created instead. The `string` mask should point to the name of one of the widget {@link CKEDITOR.plugins.widget#parts parts}. * * **Note**: Partial mask is available since the `4.13.0` version. * * @property {Boolean/String} 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 (`
          `) or an inline (``) 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 */ /** * Customizes widget HTML copied to the clipboard * during copy, cut and drop operations. * * If not set, the current widget HTML will be used instead. * * Note: This method will overwrite the HTML for the whole widget, **including** * any nested widgets. * * @method getClipboardHtml * @since 4.13.0 * @returns {String} Widget HTML. */ /** * Whether the widget should be draggable. Defaults to `true`. * If set to `false`, the drag handler will not be displayed when hovering the 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.0 * @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.0 * @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 {@glink guide/dev_advanced_content_filter 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. * * If no `allowedContent` is specified, the editable will use the editor default * {@link CKEDITOR.editor#filter}. * * @property {CKEDITOR.filter.allowedContentRules} allowedContent */ /** * The {@glink guide/dev_advanced_content_filter Advanced Content Filter} rules * which will be used to blacklist elements within this nested editable. * This option is similar to {@link CKEDITOR.config#disallowedContent}. * * Note that `disallowedContent` work on top of the definition's {@link #allowedContent}. * * @since 4.7.3 * @property {CKEDITOR.filter.disallowedContentRules} disallowedContent */ /** * Nested editable name displayed in the elements path. * * @property {String} pathName */ /** * Defines the keyboard shortcut for inserting a line before selected widget. Default combination * is `Shift+Alt+Enter`. New element tag is based on {@link CKEDITOR.config#enterMode} option. * * config.widget_keystrokeInsertLineBefore = 'CKEDITOR.SHIFT + 38'; // Shift + Arrow Up * * @since 4.17.0 * @cfg {Number} [widget_keystrokeInsertLineBefore=CKEDITOR.SHIFT+CKEDITOR.ALT+13] * @member CKEDITOR.config */ CKEDITOR.config.widget_keystrokeInsertLineBefore = CKEDITOR.SHIFT + CKEDITOR.ALT + 13; /** * Defines the keyboard shortcut for inserting a line after selected widget. Default combination * is `Shift+Enter`. New element tag is based on {@link CKEDITOR.config#enterMode} option. * * config.widget_keystrokeInsertLineAfter = 'CKEDITOR.SHIFT + 40'; // Shift + Arrow Down * * @since 4.17.0 * @cfg {Number} [widget_keystrokeInsertLineAfter=CKEDITOR.SHIFT+13] * @member CKEDITOR.config */ CKEDITOR.config.widget_keystrokeInsertLineAfter = CKEDITOR.SHIFT + 13; rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/dev/0000755000201500020150000000000015203533231022354 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/dev/console.js0000664000201500020150000000720515203533231024362 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/widget/dev/nestedwidgets.html0000664000201500020150000002554515203533231026130 0ustar puckpuck 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-5.0.10/devel/third-party/ckeditor-src/plugins/widget/dev/assets/0000755000201500020150000000000014101750137023660 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/dev/assets/simplebox/0000755000201500020150000000000015153141500025656 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/dev/assets/simplebox/contents.css0000644000201500020150000000117314101750137030233 0ustar puckpuck.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-5.0.10/devel/third-party/ckeditor-src/plugins/widget/dev/assets/simplebox/plugin.js0000664000201500020150000001131715153141500027517 0ustar puckpuck'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,dialog', // 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: // * https://ckeditor.com/docs/ckeditor4/latest/guide/dev_advanced_content_filter.html // * https://ckeditor.com/docs/ckeditor4/latest/guide/plugin_sdk_integration_with_acf.html 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 https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_htmlParser_element.html // 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-5.0.10/devel/third-party/ckeditor-src/plugins/widget/dev/assets/simplebox/dialogs/0000755000201500020150000000000015153141500027300 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/dev/assets/simplebox/dialogs/simplebox.js0000664000201500020150000000305615153141500031646 0ustar puckpuck// 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.left, 'left' ], [ editor.lang.common.right, 'right' ], [ editor.lang.common.center, '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-5.0.10/devel/third-party/ckeditor-src/plugins/widget/dev/assets/simplebox/icons/0000755000201500020150000000000014101750137026775 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/dev/assets/simplebox/icons/simplebox.png0000644000201500020150000000043614101750137031510 0ustar puckpuck‰PNG  IHDRóÿasBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<›IDAT8¥’Á Ä ‰BUPTÀ‹*x¤Ž<¨"MÐ ¥,¾×EºèÇ?Köh¼`ÆxSÆ{/o6„€RŠjù8Ø9' µös¨Öz ˜sÂ’ü;xW$arÎï2 ‰}ßfyÛ693è½?2‰1šK1ÆÇ$@c@r=£Æàr‚Ú@DÔ"ûm4@cpRJªßèœÃôÅZoˆ½vIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/dev/assets/contents.css0000644000201500020150000000047314101750137026233 0ustar puckpuck.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-5.0.10/devel/third-party/ckeditor-src/plugins/widget/dev/assets/sample.jpg0000644000201500020150000004301414101750137025645 0ustar puckpuckÿØÿàJFIF,,ÿþKFile source: http://commons.wikimedia.org/wiki/File:Apollo_11_Launch2.jpgÿâ XICC_PROFILE HLinomntrRGB XYZ Î 1acspMSFTIEC sRGBöÖÓ-HP cprtP3desc„lwtptðbkptrXYZgXYZ,bXYZ@dmndTpdmddĈvuedL†viewÔ$lumiømeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ óQÌXYZ XYZ o¢8õXYZ b™·…ÚXYZ $ „¶Ï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 VPWçmeassig 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ƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@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/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿÿÛC   %# , #&')*)-0-(0%()(ÿÛC   (((((((((((((((((((((((((((((((((((((((((((((((((((ÿÀÈ ÿÄÿÄA!1A"Qa2q‘#B¡R±Á3Cbr‚Ñð$áñ%c’ÂÿÄÿÄ2!1AQð"aq‘¡±ÁÑ#2áñ3RBÿÚ ?ic¤*øõàÏÊS©K›“¿Ï&ÛNûÁÒè¹ Ö±íŠÎÞBê7µÍ†û^êT‰#µÎ#3®'%ˆ;®$ÎFdr9crßs‰Ô'XΠ<б’Kl-€Ô®¨ 0ô¨3¿QEˇÄ÷“µú e¿ý& q´Ô_ù«¦ÇyB:gf¸*îv¾?ôéÚ,?æT¼Še1JRú‰òïƒSã)Ô §ô͈‘È ü`‹ô¸ÁÒ¸oâ`šƒ'ò€ÝF Á”ãZÛ‹¼©[H‹ßé‹H¼ä9=IßiRÓð%Ž3o¹}±@ŒvN‘¹”¦,J˜¡…{™ÿ1ÏÐl>ø¸ Çù_Òf»–š@­pcŒ„[ym¿ï‰4TNñ˜í=—æ4ÔWÒéH’B’«Ü·ÃmÍÉéÓôé]AY¡ÀUóÑæJÐ'@>;ø}qæÈózÍ­X–ªªƒ[m‰¨l$&`Yi§¹†-:Íü@“i0‚Cîõ9% ’wð‘o\H$IÒ ·šÑÓf¹½TÑ£ÔK˜C DÇ«G,¸=‰.~Øw†¡'ž"õn–fm™RËT)*rî:yúƒŠ(†f†?øý¤m­Á f±êpÅ7Òo¨ bÍxF%S$2å?¨¤}:ãE8«j‰).c¬ª•Z”F’Ö#Îûaõ­ëj¤š*üÂB#Uf~Ábý°A\ŽpG†N„5̈¾ûIR—J«±?,xp`…;¬¹G˜ U.m ±[ŸPvÁÿ!íŠWtYAYyE¶_!é€ë´.‹ÉiêçÒÃÀ,¿Sn¸²´†KN+š¢>d¡å1‘k |¯†éµâ•%%1fyrÅcp ÊÑî‘?¾ ýb‡Lý- ºuåN_Ĭ¢1{z€-ò8µÜs‘ué%§ÊD¡š.¥®.X–Û|¾_¾'Sÿõ éæ$߀toÁ©9÷+Sb7óïûヿÿR^’úå9®¥‘ Š;xsŒò ¾;ÍÖG—¤º™aTŸ›$Ìžy‹cnå@틦¡d'q$ž÷ LM¦­åGœ± oŠ´(I >ıßÈnp»>q «iÅÍÔŸ™À‹@Ÿ•žIV"yfn‘D¤“óÀj8M÷†E-¶Ð¥7 TWTG _*–på´Å˜-»FǽÉÂU+7Œ"Àš'd)“SK–9 =î¢ÝºŒÎ)¯¼{‡X÷K ¢ëµaŒºµ,14)¨ç9™‹µ–æÛÚØ@¶£ a*¥’R#ˆh§¥$_Äq|TUM"aŠQ+1˪̲0 DLT½ŽÀÖ×Ûq‚+¶`о"ÅET’=Úg¹"Øý[výñÌÌѤ@6(9JÒ²AeBKÔ|·'爴æé>M­ái••ÞÃWˆ…ˆÿ—Ç1å!W2¦‡¾ÁvêIÀ‹BZl~ÆérñA-Tr$•!´È,F¶ÂþVÂS°6ŒRPs³£©eWPN¦C¾¬f—´mRò‘¥D” .öß¶^ðÁm åÔÉWKPÜ 6QÞýþ°É(ˆâ/ˆ~¡ß jµ®$T;ØÂ&$*M®}1ÌE¯Ôoiœ{aI!Ëè* NÑÑÕÃU2bQ[Qµú› oð”x`­»\û.1«UM]C•£ ]=>kDµt‰iª“›¨M™[pqç*Ð(ÄÄÚḀTO>qÆ]˜ä¹äï0d¥†¬tõÜ/×®4øJªÊ9J›–LoŒ$šlÍÃ…Aa¨yÿª¹ïêÉ<–¾…¿køoèNxd_Çr&“ÂYz´æbk•z(ÍâT+ØGi9îc¼TŠZòon˜TÑÔnÐ-X‰0§ À±OÓ6«Áx—™ßdóæ­¶¤Ñ¤õ îá”…ÔšF ×%TÝ”)S¨Ó¦™­Z˜Ñ«÷B-:mbÃ?XÉÙ|4|-“ÓÓÆ±Å@ý “õ7?\!^ìåŽòôÛNQö­’¾iÂÕiaå…y©~Änmó`ªh¨) „:•ž=âêdŽduãèÈuýûcÖpµo‰‘Z¢Ìw ê§Vc‹ÅTr„'‰\2Ó‡¶Ì¬×Ü\ذqÎFƒÊTÒËmûíò¶#Tµës‹•+%Ð4Ü]›úbàˆ" -‘QG5T\÷*…€°Bn¦$¹âW@1¡TÆŒ¦­ÆÄ7\0ÖÖdœ¦\®6Ô¡Zv:@ÜÙG_O[Ö.vK !ì b ktØb¥§å>ÖJ±Sº®£›¢õ&B6ÿžX»N#H¼ù•e“i†)?.Z‘Í-+° .Iê:Ÿ^˜ê†æÐk‹˜ñÂqþ”?¢æªV¡ÉhÈÒÓ³E½m倶Ð9žsUá~9&Q`õ'ó*]·-+|DŸÛïç‚h²æV÷8š‡ eÞãDÍ ´Ò›°ò Æ;éÔtÆ]€0Ø\H§qyô·Á ;H¼Ê¸¯ŠÓ$j“MW¢¨ÖHÏKQ¢34A¬LnÃáØ‹î/~ã©Ã©V÷ïÝ.*tÓ…jéóËg£™%ˆ@±–C{2,¿0AÉâ)•cxMY¸ŸsjUž…C)¾¥=ƨ/´s‡©¤Ï$ûJöyš#Ì*#å.^ µ*"ü×Î÷ïën E¦ïο ÎÅÄÇëiÞ \eYMˆakàãz•@â×™u©¼±2†’VGB€ÿ‰ ˆûÇj ÒHzÎd„*G°$‚vûbCÊéÌâ8ƽ¾£ ˆ6å.K͉&Žx»jRz_§OBó­“*TÀbîc(îš‚Þ÷Üïÿ<°6ip-ÌU˜EO‘øØƒmû›ü¶úâi›)sPê`±ç„¸us|Ũæw§†3U˜U6þïN–:Wçåܑ兞¡åÕͱ4€ç¼NÙûÒ l¾V›+¦Z4 á[/ˆú‘ˆ¤ :¹ z˜ç㉵k‘ô°!¼ì|÷Ū1;™Dë(©5”1ÊÅut6Æ~Ÿ5¥ÜXËã\AAÍw-Ä(@K•Ànwô'è;áîžu™G8´ËxÂc˳‚9%z×z™eÒ59sp*Ê©«©˜°A"‚U™n#Ëc¤êG†¨Ûã>'É– ã4¢‹JÇìuÓÜwõÇ£áø‚\ïh­z ³/(*˜eµ42 ×Ë2“mƒ[[ë£Áˆa±ÜI›¡ÜŸ‰ÄºÊªÿ €nÓ犩]®1-SäõE$-<Ú€Ò»lz}€õÅ…K Á²gׄ2HrªLƸ;VÅgT×eÒÜüñcT·•` ¦›îARkÂH% 8ÕËÕssçƒQo¨o´óâF5ª/ùwï3_1Ð,laØèXÅC$Ñ»$1Û©¹==-ˆ-‹N ›À¹ÂÈtÌÌ• žH7µÿž/sa$‹dȲ(£‰ UBHCe$€ù\ïoÅë>^ æ7ë5Éòʬ§(ÊøR–lÛ4Ó˜æåŽê·ü¸ŸÈ¤v¶k’3ØüÆ€<„wʲÚz:XééãЫ»m­»¹·ro†l[¤^úÌ/O¨Ò–b;¶vé «ä2³y© ü…ŽÃsÛ Ópx‹zBV_Ù ëíÑÄÊÙ¥Í@~b;»-¬ÊVö·[Zà_äFáΤ )Tib"o#°¨y mM{ï`¸]ü†Ã{ÁÌSˆ`÷zÉ¥X'¨q·Îÿ|@6ÞT©8Ð|‘Vð× eùuD«3+ÈÇ’ÚÒ Æúo·C~ͱâ¸÷-\·Y¿GF›t}Ì·ÄõUô3SCX)Ùŵ„¯®ýï…ƒ_xå*u<ׯ<˜pËIUS"ÕS¼Ü¾hC{·ñu¶øÖ¡Å-_("R¥-rn \¤Éb¯S E©¨cNêÝUˆ:M½í‡Ö¹[°ÌUé&ÛœBÙŸÌ)¹Ë ´ 4L‡ž]-ˆ§Åd‰f£p XËßÝæRZX ¥—¨ßý»aÛêÌX"=pó~%œÀDšIrË)ì<»ã@F B Ìײ *8ë˜*£ŒI GÆå|¾ÝúàÊFÜà-yŽI4M^’*V… ¼À‘ÌkÞì<þ[â ym«æ¼&*ᆅ"Œ™$*œ‹íåo©ûárÙ†1;†z¼Æ,¿IæÊ4jE€,l6^˜š?ȹåõ€ªl4õžËxzÌçâáÿÙrEçHöþÕ×tAõÜý| £s°ßñ9ÙævŽüO5T•¼GšòŽc™Hκ÷1Æv°ô°ä1ɨÝõ—¬l1aV‡’¥†,í(ƒ0ÖYJLÉùlîI¶Ã ±†8Ö]šê™Jï"¥Êø¿¼ÄÊVkÓUéxT o*âñ9çj•dXÔÙ[{½<2 Šh”±ÊÑ,-çsu;¿]ñŸE|*IpÞ˜ºÇZ-FÜþbqA¨¤‚‚žž®*ÉcUY…V¥,ˆ¶äÛ§®fom¢Ê—`Šñ5^a ‰@iÐ7Rʼn°½úõÇkòY:,ú ö>O’Räy]>YB¤RS‘+ZáuÒöóÇŸâhþá½±ëñK[^GUE MÍÐÛ­°‰¢/xÍ:Ì›À9¶_t2SJ"x$øÒE¸aåØßÔ{ Ågá<«.Ì«³* H㨒1­?»$2ØØíÔ`Þ#iÒN°ú¹˜Œòï| ¨XÕb>;1[é¿Aòî0JO¥§n-<ýA=3©™ÒX»7[Ø(ÿ; Ü› $­®g<;E>c™”“j¬ªs qØ\Fo}#ÌÛsÓѹZJ§Ö'v¨×›o—¥&_‘p˯7‘Ck…6ë½ÏÉWÏ 2“jc~}úC©s´eBhHTG *ª¿ `0á²€aËL¿ ·.Í#Žöé|-Pà Œ9>ŠyfcrÃJßËÿx\.óª5Ⱥ&™P6Á)Sµ@@€-q™eMñ°¨@Ï=û~UŠcq`Æ(Ø“õÓq/î¶xu÷ÌË6†uÌ2øÞ9cPÅÀ15Õ®n}é¶&¡!:”Éx~—ŸÆÙg¼ÉjúpÒ1ÿò¯þ±p?jÇŒvã3ØIf±Øã+Œ6vksœ‚ø”êI6ß³‡@TÚ«P¤›tpÚ=Ló‚ÊéP4 ·ïnØ{C› -’$¢G*I±€µ®}°D812n%¤ ®¤‰²áJó† _A"5õÓ¾þ¸Ó Zöh½[[m-?ºÑ¤É!’=cpèµðÿ 9Eäó‡øW8¬Éiê̤”ÕÖ­u‚»î7ì<°u*E„ Š›Èx-vY‘W€ŽõT¼™ˆÞBB~éËûà`Úã§Þ1kœÁÝ3ÖÕÁ‘P²ÉUPâ9¥×³5…ÈÚÁc[¿\V’çYØ}e+7ÿÎjÏ2¸(*êóUAø^WŠ{}9:Ul}EÿÔ02à1våõ£^HÅ—Ódš²ª(S1ª»K$A‰*Zö%˜Ü߸`0Õ6#nz@Õ{”!† ÆÝ×Ç=„-E%ÍÕï¸ÂŒs ±ÎTñCḠ¶ùuÅ0G$™qlEƤŒA"‹ :‚ÂPÌ»ÚvAEÄæXê^Jz˜IHª#-b¬§â[ïØŽÇ(®nd– XLëŒjs!H"¨/xÑ4‘K $ÈTîmüXŠŒmËç!¿9œs䊮:äreG@T‚ ó;`djR9™pt°<§¢3^:¨Í}¡ä™'ÖQÕÒ=›3üƒ'-×´€éVÒ¶±þ?1leqY:±ôïÒ=JˆZf£{¾Ç¿õí¤’p›…¸µ»‹¾øËVRŽùÈÅÜÞyj„uëÛ ±$âiQQlÅZŒøÑ™´E!‘ºo°# S§yw´Rͳ×â ¶j)èáeNšˆñ*‹‚6ßVöÓ¾4‡Ø÷Ö)âêS€ø3Ê3WšzÈ,l‘IJºEßmˆØ¸ß =Eeµ³”Êäˆi+¢5M ±k + V*YGmÀù‚<ðqM’Á¥ÆÎäZÛü®-†i.`\Á”sKøNgL†ÙDÂh'‘ˆåtE! mÂ’Œ|¶óµ?ôs-‚j2ŒYtkWÆQR_PÜdw욵ѣq·~øA¸v±¤¤I›™Êuz§ŒÝv/ßp ý0UM7=`¯oI¤þ3BrÖž˜t´È¥‚“{ZýpÇP<âõõXHc©Pó©%â&ú£:´úz}pG[ ˜kí,S«‘ãfÚý-€xhW-t†©eY‘EÀ-}ÎÃ÷8^¢žPÈG8߬dܨÜùã5›[K@¼!ØwÃÜ;÷‹0Ÿ+Ø{…AìcaûcOPu¸”Ä õ0$^ص„¡™µÊ‘K” Qa•ô¼HºžB,U͈Ƭ²ÒLûM?ù¨žzõÂ~32Ÿ%¥©È¨ó lÊ ÁÑ—ŸEH¦ ªYXd§c¨¢± D /–  pw íeËW™[I E6­bÌ¡ ‘ge±?Ä@½ÏÃ…E&-}À޳¨§m‰Ì?‘Éï´¹…UU:Áil½öˆ)„”*§üAÜØâtýÃìü|ä¨ cÛùùMC ‚ L’–8¬ìñ‰Y™®Íªö'èF KJSïZì礴õ4¾/N…ŽÚdRI¶Ã®8ÔB,L¨VjVŒN†šHä•ZÅQßP@óÀ˜£bð 0ͧÚz‰)k#‘ nT³hv€%aþlfq *{¿ùá@ˆ“PJjªªLjÑ›0W»ßöÆmˆÈ›hs…Z’«M]+S¼qM$K¨´–k‚O übÄI'#Ò¥ôéãNyêb•C#)®· ¤}±oùZP¬ dO4ñWç¾Ïj³:¿gµyƒ4îi`©MF† ‹J–#I¹eµˆ°¾=9M;ÌÐäÄÌãˆë+ÿõ ãh žš/A¿T0ÒŠì›RIreØr0¸©ôåùþ¿¸èµåߟ³ öõ‹Ÿfo’VÈ] U[°åyFI,5„QÖËe[k‹[¦ ã=!Œ©>ø3ÂS¬nÆÎG+~}9Çÿb^ÏiøÆª|û7¤©§£Ë HQD1ÊÈÖÑú•c»ßrÏsë™ÆTdS¤àö~¸´jŽ‹ª‘žíóÞlÙ¯e‘ÍL¶ÿVU¬bÌH[ˆ> ªl׋)øo/¬Z? ’º¸juhÁâc`HèŸC¢€/lœ^éîñn‹6Êk}žSæÒÓ¦rŒôÓÉ£#JÌHi ¸²•¨/êÔØ¨œ~JàtÌo{7¿Û¤J‚drd4nÈÊ&‘у N@>ßûÄ5$e±—ÊÀ‰[+¤ÔdLÎ%J˜"ŒD® -']_ÂÑÜ\ã"µ2®ViÑ}J¬“)ʨK1†z¸œ±:á©qcç×®p9Ry4¼‚†H©dЧ¨$ñÛ`.p“RÖN›Ã bÐôQTÐðõ]@• ¨îÑ–_ LØ›ù·ÛÍትâÚÛ9k~½]{Þ÷Æü‚œ ¾ûÇé êÏùgN‹.‡Blmÿ ÂÊ G6ÌQͶ(ëuå‚=zôýðÚ â̤&¨–"ŠÈçr0qN \äV2g¼Šoböþ¸ A(\Êq“]‚¯#Z"“¨Ü!û†Œÿ§pϦàÅx”Õb%n% =Fi@³Ó†J9¡…5º7ˆ‚ ñ úãMÀ¶ó=…ÎÓáÙ+2CUT™}l™\Òï%ºω˜s¤ïÚø}S³0f$E|·1Z³Ýê fg•fM͸±t`E­äwÆÜÔÔ§tôÞ—ÜlÓ½åµÅ™<JÍ<9`ˆ‹’GÔ÷ïáŠ'é¿‹ !ž¶*—¤Bô¹=ü&Ë–ftÙ«ÔÈl’M<ÒGÙÀŒ±p ½Èó¹òÇlæüþߟ´ QÔ}ÿéå°´¢ûÛaÐbIåDåÒ°]ô›úœG9håâ̧æ"4•Ó,A–ÖE ^ÿÙœgÕ˧€Ÿ‡’(ÚI„±‚¤(PûöðaG[‚oCci¨pœnÕO­¹/c¬‚5¸¿ÖøJ‰v:CñUt´Nÿ¨\÷3Ÿ„*2ü˜Ë$ŽFÌ«DŠ @–($]Ik ÚÅTÜl ­VË˾ý}€Å) ¦57òä;ì{m<ëYïüPrHµÓÑäÔïÈu$Å j4ÉS+ßQ± 7 “¥PZ×e‰¸?Ô2( ìþ-¼Wã<Û–¯‘dóÕ>MN塊W¹øEÙ£@{{E¬I78¨¤ ÜmÞaš¹Zv wÆÃ§û´»Ã9­-FP¹bÅZsˆêÍdqÙM<Ó*²ËЯ$J7VÜX\Üö*é߯(Ä1-}ù}½“ÖžÉeZ?gùF[$ç›)¨h —%—[5Éó6fúãÏñ••ªxC•þ‘ú4˜äbMI<ÙÎ\³ÓÆ 7YÌάCmÚÄ¹ß Ó¢Ì.>qƨªH1C3¨Y†eJ$ež’©©¥²‹kI=͈aožJl›ÅÕ² Ê+=§³ m$1¸½Ž òÝ*¨æ“¤hb.E…C‹èÔ-)ªÆò*¬È@Ôµš.”Ô½è'D£×ÀçíŽE$ØsÄ»Ï,÷î”?ê"š ¼ÞœÓT¤ÕK9c JLO¹{ìºJ‹_{66x2§”ÉâÃ. ÷EœˆÖ†Že’Zƒ¨ jbO9Í®‘ÜĤ #Ï Á÷!w/S‰r¶??Aë1,ó,L²¹ j¨«)ÍŠU 5 1ÓrìmŒá` )¼Ûuk…qoÀÞÍx­²IÚ þUHRª¦X[‘T Ð5 Áø‘# ½æ•©¼·âÕRÜïi ùTð ²Õe±C² ’8Y½ÆòMœ0èF;ë3•îoÖÿÌr¤ÍVªJTÄY9m($elÃRÜ Ž÷¸=±ØayS¦\‘¹ÒˆéОTê’³ ì¯}­ÓåÛVBwÚ]ÑÀÚ(åó²pÕÜ *LORÁžß¾3­sØFZÑ—åyUÏ$Zxåuåºib\@t=ý;`N ʽáÖÚCNŸÚf]”ü¦…ê^dy„Õ2¬PËm¥$¤!'õ6Ê‚ä tª€)­‚÷þX|¡ßC·ùü?8»DŒî3í^®¾¸‡,Êò˜!ÅI1c5LúŠE[(©*4’¨vñY‰z”Ø/^_¼Z§‘¿Âe|[Wô™fPe¥Êª«M/ Q’§àÝÁSªä6’z 5S…ý2ëcsÒú–У¦gUPf™ƒ2ÓV4²‡D0i|+âaµÍ¶ú HªiÓèrXÞq“ñU~x)d0:¸r¥#µÈíµ¬ ŠNðU,6–$âZ9já«­y6 .O]ö0p¸Ä_s˜=ãiªãš“/§Ž"”//‰¼B×lãφ¼¾ Ú(×UBó~!˜6¨dQQùuÔÃS-ºŸ­…¾ccˆh‹œíñÞç 86¯XØc|ì/ן\ ˜&:ÌÓˆ3(½Îžxc¨Q R‡XÚK l¸²l:\œG  > òžó|·´ü¥¸–Jdx[Ž‹a}÷“8¤¡¡É3¨këråÏ)5›Q¬çDËk®Á¯òwÆm:¦á-±ÚÓb¿¡Z 7`ƒÄZxf¡4‚R‹)‹šš!°o]ïò¶-©\3Ê+ÒÒ[s4Žâ¯Ä!-Ìd-YÔ’;]§’G¹ìBÀŠ<ÆÝ·f•K&#ÄP·}/ß¾h‹ˆ› úùëÖ@),‹+„‰Q•öÜŽöõùb]ÞI4ÝAýÍ¡ÎËZJÉj3©åjxÞ4"¼P.ÚÔ¿„·Rçsc‰ý9ZLTùÎÇ¿‡ÒGêƒ×E¨¿¶@éîøýdµÜ}L`1R-EEhXÀ«ªd VÌX!¸a¥E€·êNÍY©¨8ÆMóìôõ;Ãø|:×r™ò‹cÛëè0:ü)ÃÔcˆå£¬Íò¹„ÊP‚ÃòÁRlø»ÛýŠßúã×ûƒªáoàù‡Mþ_ˆ7нÖerÔÍ’J²Æñ´RèEÔRé;®Ýü°³Óz6oä½GÞ5N½*ê<Žwí3z”jyI ‘[W.æé¸Òîv½ñÀ†óœ6"ÞŸŽÖ=˜q'ã™-5qQ˜ÓC+«>Â{!7ÿ5ÂßÎ×óÁ[Ó*w‰j]·ŽœY"PðÝq©tòùLÌê È6Úö6Û¨¶¢„_@èÖmÈý9ü&YžñuvcQÔÉU[4¶––¤§§1ÙïñxˆÙlØ¥<·îòÄf¢OÚ$òç’7€Z:ª‰jM,u)á>ÕœŸTQ»5€{àÅÒ“Ã~Ÿ~ó¥ªSNÜÛñÊUÕ ²RÂÓ{íÊ”+´cÏͽ׿ü³%.0õ.º’•éáuu€‰fo®b." Š.zÞ˶*«mç3jÚXš’ž®CUÊia‰§«©ìå–×ýÕvQæÄÛ¶ ~á½ä·í¡ ‡Š³²™2Ù$ÌdÇQ¨?ˆë1‰Æ @,m$‚/‚*›ãnû¼G™©œ7§Ç±=1ìòŸ-ἂ*Z‡ü+-²Ó ëFÓ1ø€&Åš×&Ûo·L`qn•K-Ckž_9«E (Ð.FÖyíC…3¨+¸f2Š‚G ‘Õæ VŸHd7¹ Àaskâø”¼$RãÖÀ|ǾQ)µ*‚£O}qðžvÌ3Z™8ª¦†2iÖš¡â‚µAA0³}*𪴵‘‰Ô;T |Éd­©zjeiÝ™Øu=÷ï‰TQ…Ķìe ú©ä#Q­BÄÛ×Ч˜­g¸‹ù>q»Í C<åÄqÆ#³H{Xv¾@YT“«¤3ùGÒwFèµ~óXêj%ÝùKð-þòϱå)q+f¹ÔE’ V-e×f*ÆÆã¦Äý‡–.Œݳè%YIG>qz8ºYž2ÃÌ>) ‚ƒso^ñCL¹½¯žý%Õô ^ÝügÿÙrt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/dev/widgetstyles.html0000664000201500020150000002277515203533231026010 0ustar puckpuck 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-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/0000755000201500020150000000000015203533231022517 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/zh.js0000664000201500020150000000043015203533231023475 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'zh', { 'move': '拖曳以移動', 'label': '%1 å°å·¥å…·' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/nb.js0000664000201500020150000000044015203533231023454 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'nb', { 'move': 'Klikk og dra for Ã¥ flytte', 'label': 'Widget %1' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/eo.js0000664000201500020150000000044315203533231023463 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'eo', { 'move': 'klaki kaj treni por movi', 'label': '%1 fenestraĵo' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/es.js0000664000201500020150000000045215203533231023467 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'es', { 'move': 'Dar clic y arrastrar para mover', 'label': 'reproductor %1' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/ro.js0000664000201500020150000000044415203533231023501 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'ro', { 'move': 'Apasă È™i trage pentru a muta', 'label': '%1 widget' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/hr.js0000664000201500020150000000044215203533231023470 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'hr', { 'move': 'Klikni i povuci za pomicanje', 'label': '%1 widget' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/it.js0000664000201500020150000000045115203533231023473 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'it', { 'move': 'Fare clic e trascinare per spostare', 'label': 'Widget %1' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/de-ch.js0000664000201500020150000000046415203533231024043 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'de-ch', { 'move': 'Zum Verschieben anwählen und ziehen', 'label': '%1 Steuerelement' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/sk.js0000664000201500020150000000045215203533231023475 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'sk', { 'move': 'Kliknite a potiahnite pre presunutie', 'label': '%1 widget' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/az.js0000664000201500020150000000043415203533231023472 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'az', { 'move': 'Tıklayın vÉ™ aparın', 'label': '%1 vidjet' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/pt.js0000664000201500020150000000045415203533231023505 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'pt', { 'move': 'Clique e arraste para mover', 'label': '%1 widget' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/ko.js0000664000201500020150000000046415203533231023474 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'ko', { 'move': '움ì§ì´ë ¤ë©´ í´ë¦­ 후 드래그 하세요', 'label': '%1 위젯' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/cy.js0000664000201500020150000000044715203533231023477 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'cy', { 'move': 'Clcio a llusgo i symud', 'label': '%1 widget' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/uk.js0000664000201500020150000000052015203533231023473 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'uk', { 'move': 'Клікніть Ñ– потÑгніть Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ', 'label': '%1 віджет' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/zh-cn.js0000664000201500020150000000044415203533231024100 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'zh-cn', { 'move': '点击并拖拽以移动', 'label': '%1 å°éƒ¨ä»¶' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/sv.js0000664000201500020150000000044515203533231023512 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'sv', { 'move': 'Klicka och drag för att flytta', 'label': '%1-widget' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/lt.js0000664000201500020150000000046215203533231023500 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'lt', { 'move': 'Paspauskite ir tempkite kad perkeltumÄ—te', 'label': '%1 valdiklis' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/et.js0000664000201500020150000000044515203533231023472 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'et', { 'move': 'Liigutamiseks klõpsa ja lohista', 'label': '%1 vidin' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/pl.js0000664000201500020150000000045515203533231023476 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'pl', { 'move': 'Kliknij i przeciÄ…gnij, by przenieść.', 'label': 'Widget %1' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/bg.js0000664000201500020150000000051215203533231023445 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'bg', { 'move': 'Кликни и влачи, за да премеÑтиш', 'label': '%1 приÑтавка' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/fa.js0000664000201500020150000000047215203533231023450 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'fa', { 'move': 'کلیک Ùˆ کشیدن برای جابجایی', 'label': 'ابزارک %1' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/ku.js0000664000201500020150000000050015203533231023471 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'ku', { 'move': 'کرتەبکە Ùˆ ڕایبکێشە بۆ جوڵاندن', 'label': '%1 ویجێت' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/el.js0000664000201500020150000000054615203533231023464 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'el', { 'move': 'Κάνετε κλικ και σÏÏετε το ποντίκι για να μετακινήστε', 'label': '%1 widget' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/fi.js0000664000201500020150000000046415203533231023461 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'fi', { 'move': 'Siirrä klikkaamalla ja raahaamalla', 'label': '%1 widget' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/ru.js0000664000201500020150000000052515203533231023507 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'ru', { 'move': 'Ðажмите и перетащите, чтобы перемеÑтить', 'label': '%1 виджет' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/gl.js0000664000201500020150000000044315203533231023462 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'gl', { 'move': 'Prema e arrastre para mover', 'label': 'Trebello %1' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/sr-latn.js0000664000201500020150000000045415203533231024442 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'sr-latn', { 'move': 'Kliknite i povucite da bi pomerali', 'label': '%1 modul' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/oc.js0000664000201500020150000000044415203533231023462 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'oc', { 'move': 'Clicar e lisar per desplaçar', 'label': 'Element %1' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/sq.js0000664000201500020150000000045115203533231023502 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'sq', { 'move': 'Kliko dhe tërhiqe për ta lëvizur', 'label': '%1 vegël' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/pt-br.js0000664000201500020150000000044315203533231024104 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'pt-br', { 'move': 'Click e arraste para mover', 'label': '%1 widget' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/af.js0000664000201500020150000000045215203533231023446 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'af', { 'move': 'Klik en trek on te beweeg', 'label': '%1 widget' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/km.js0000664000201500020150000000054515203533231023472 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'km', { 'move': 'ចុច​ហើយ​ទាញ​ដើម្បី​ផ្លាស់​ទី', 'label': '%1 widget' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/nl.js0000664000201500020150000000044515203533231023473 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'nl', { 'move': 'Klik en sleep om te verplaatsen', 'label': '%1 widget' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/es-mx.js0000664000201500020150000000044715203533231024115 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'es-mx', { 'move': 'Presiona y arrastra para mover', 'label': '%1 widget' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/da.js0000664000201500020150000000044115203533231023442 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'da', { 'move': 'Klik og træk for at flytte', 'label': '%1 widget' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/he.js0000664000201500020150000000045515203533231023457 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'he', { 'move': 'לחץ וגרור להזזה', 'label': '%1 widget' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/ca.js0000664000201500020150000000044315203533231023443 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'ca', { 'move': 'Clicar i arrossegar per moure', 'label': '%1 widget' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/de.js0000664000201500020150000000046115203533231023450 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'de', { 'move': 'Zum Verschieben anwählen und ziehen', 'label': '%1 Steuerelement' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/tt.js0000664000201500020150000000051715203533231023511 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'tt', { 'move': 'Күчереп куер өчен баÑып шудырыгыз', 'label': '%1 widget' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/vi.js0000664000201500020150000000047215203533231023500 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'vi', { 'move': 'Nhấp chuá»™t và kéo để di chuyển', 'label': '%1 widget' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/cs.js0000664000201500020150000000046515203533231023471 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'cs', { 'move': 'KlepnÄ›te a táhnÄ›te pro pÅ™esunutí', 'label': 'Ovládací prvek %1' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/tr.js0000664000201500020150000000047315203533231023510 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'tr', { 'move': 'Taşımak için, tıklayın ve sürükleyin', 'label': '%1 Grafik BeleÅŸeni' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/ja.js0000664000201500020150000000045215203533231023452 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'ja', { 'move': 'ドラッグã—ã¦ç§»å‹•', 'label': '%1 ウィジェット' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/sl.js0000664000201500020150000000046515203533231023502 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'sl', { 'move': 'Kliknite in povlecite, da premaknete', 'label': '%1 widget' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/lv.js0000664000201500020150000000045415203533231023503 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'lv', { 'move': 'Klikšķina un velc, lai pÄrvietotu', 'label': 'logrÄ«ks %1' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/en-au.js0000664000201500020150000000043715203533231024070 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'en-au', { 'move': 'Click and drag to move', 'label': '%1 widget' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/en.js0000664000201500020150000000043415203533231023462 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'en', { 'move': 'Click and drag to move', 'label': '%1 widget' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/no.js0000664000201500020150000000044015203533231023471 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'no', { 'move': 'Klikk og dra for Ã¥ flytte', 'label': 'Widget %1' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/fr.js0000664000201500020150000000045215203533231023467 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'fr', { 'move': 'Cliquer et glisser pour déplacer', 'label': 'Élément %1' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/id.js0000664000201500020150000000046215203533231023455 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'id', { 'move': 'Tekan dan geser untuk memindahkan', 'label': '%1 widget' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/ug.js0000664000201500020150000000046015203533231023472 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'ug', { 'move': 'يۆتكەشتە Ú†Ûكىپ سۆرەڭ', 'label': '1% Ø¨ÛØ²Û•Ùƒ' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/ar.js0000664000201500020150000000046415203533231023465 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'ar', { 'move': 'إضغط Ùˆ إسحب للتحريك', 'label': '%1 widget' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/sr.js0000664000201500020150000000051115203533231023500 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'sr', { 'move': 'Кликните и повуците да би померали', 'label': '%1 модул' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/eu.js0000664000201500020150000000045315203533231023472 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'eu', { 'move': 'Klikatu eta arrastatu lekuz aldatzeko', 'label': '%1 widget' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/en-gb.js0000664000201500020150000000045215203533231024050 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'en-gb', { 'move': 'Click and drag to move', 'label': '%1 widget' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/lang/hu.js0000664000201500020150000000044615203533231023477 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'widget', 'hu', { 'move': 'Kattints és húzd a mozgatáshoz', 'label': '%1 modul' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/images/0000755000201500020150000000000014101750137023045 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/widget/images/handle.png0000644000201500020150000000033414101750137025006 0ustar puckpuck‰PNG  IHDRÉøˆy*PLTEÿÿÿ$$$&&&$$$###%%%$$$&&&%%%%%%%%%%%%%%%%%%2 ÛO tRNS8<@HL€¸ÀÂÇÉþðTIDAT×c黈a톣 ¶ ¬.00ÌÀ¤€ ^c„¤ – Ɔܻ`ÀÀØid@¨ë‚›7ùØ.– 0Û"µÆé»$æIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/0000755000201500020150000000000015203533226021431 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/about/plugin.js0000664000201500020150000000206715203533226023274 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.add( 'about', { requires: 'dialog', // jscs:disable maximumLineLength lang: 'af,ar,az,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,es-mx,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,oc,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: 'about', // %REMOVE_LINE_CORE% hidpi: true, // %REMOVE_LINE_CORE% init: function( editor ) { var command = editor.addCommand( 'about', new CKEDITOR.dialogCommand( 'about' ) ); command.modes = { wysiwyg: 1, source: 1 }; command.canUndo = false; command.readOnly = 1; editor.ui.addButton && editor.ui.addButton( 'About', { label: editor.lang.about.dlgTitle, command: 'about', toolbar: 'about' } ); CKEDITOR.dialog.add( 'about', this.path + 'dialogs/about.js' ); } } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/0000755000201500020150000000000015203533226022352 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/zh.js0000664000201500020150000000054315203533226023335 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'zh', { copy: 'Copyright © $1. All rights reserved.', dlgTitle: '關於 CKEditor 4', moreInfo: '關於授權資訊,請åƒé–±æˆ‘們的網站:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/nb.js0000664000201500020150000000056415203533226023316 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'nb', { copy: 'Copyright © $1. Alle rettigheter reservert.', dlgTitle: 'Om CKEditor 4', moreInfo: 'For lisensieringsinformasjon, vennligst besøk vÃ¥rt nettsted:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/eo.js0000664000201500020150000000055615203533226023323 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'eo', { copy: 'Copyright © $1. Ĉiuj rajtoj rezervitaj.', dlgTitle: 'Pri CKEditor 4', moreInfo: 'Por informoj pri licenco, bonvolu viziti nian retpaÄaron:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/es.js0000664000201500020150000000060215203533226023317 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'es', { copy: 'Copyright © $1. Todos los derechos reservados.', dlgTitle: 'Acerca de CKEditor 4', moreInfo: 'Para información de licencia, por favor visite nuestro sitio web:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/ro.js0000664000201500020150000000061215203533226023331 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'ro', { copy: 'Copyright © $1. Toate drepturile rezervate.', dlgTitle: 'Despre CKEeditor 4', moreInfo: 'Pentru informaÈ›ii despre licenÈ›iere, vă rugăm vizitaÈ›i web site-ul nostru:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/hr.js0000664000201500020150000000055515203533226023330 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'hr', { copy: 'Autorsko pravo © $1. Sva prava pridržana.', dlgTitle: 'O CKEditoru 4', moreInfo: 'Za informacije o licencama posjetite naÅ¡u web stranicu:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/it.js0000664000201500020150000000061015203533226023323 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'it', { copy: 'Copyright © $1. Tutti i diritti riservati.', dlgTitle: 'Informazioni su CKEditor 4', moreInfo: 'Per le informazioni sulla licenza si prega di visitare il nostro sito:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/de-ch.js0000664000201500020150000000061715203533226023676 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'de-ch', { copy: 'Copyright © $1. Alle Rechte vorbehalten.', dlgTitle: 'Über CKEditor 4', moreInfo: 'Für Informationen über unsere Lizenzbestimmungen besuchen Sie bitte unsere Webseite:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/sk.js0000664000201500020150000000060715203533226023332 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'sk', { copy: 'Copyright © $1. VÅ¡etky práva vyhradené.', dlgTitle: 'O aplikácii CKEditor 4', moreInfo: 'Pre informácie o licenciách, prosíme, navÅ¡tívte naÅ¡u web stránku:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/az.js0000664000201500020150000000060615203533226023326 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'az', { copy: 'Copyright © $1. Bütün hüquqlar qorunur.', dlgTitle: 'CKEditor haqqında', moreInfo: 'Lisenziya informasiyası üçün zÉ™hmÉ™t olmasa saytımızı ziyarÉ™t edin:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/pt.js0000664000201500020150000000060515203533226023336 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'pt', { copy: 'Direitos de Autor © $1. Todos os direitos reservados.', dlgTitle: 'Sobre o CKEditor 4', moreInfo: 'Para informação sobre licenciamento visite o nosso sítio web:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/si.js0000664000201500020150000000113315203533226023323 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'si', { copy: 'à¶´à·’à¶§à¶´à¶­à·Š අයිතිය සහ à¶´à·’à¶§à¶´à¶­à·Š කිරීම;$1 .සියලුම හිමිකම් ඇවිරිණි.', dlgTitle: 'CKEditor à¶œà·à¶± විස්තර', moreInfo: 'බලපත්â€à¶» තොරතුරු සදහ෠කරුණà·à¶šà¶» අපගේ විද්â€à¶ºà·”à¶­à·Š ලිපිනයට පිවිසෙන්න:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/ko.js0000664000201500020150000000057415203533226023331 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'ko', { copy: '저작권 © $1 . íŒê¶Œ 소유.', dlgTitle: 'CKEditor ì— ëŒ€í•˜ì—¬', moreInfo: 'ë¼ì´ì„ ìŠ¤ì— ëŒ€í•œ 정보는 ì €í¬ ì›¹ 사ì´íŠ¸ë¥¼ 참고하세요:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/mk.js0000664000201500020150000000073015203533226023321 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'mk', { copy: 'ÐвторÑки права © $1. Сите права Ñе задржани.', dlgTitle: 'За CKEditor 4', moreInfo: 'За информации околу лиценцата, ве молиме поÑетете го нашиот веб-Ñајт: ' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/cy.js0000664000201500020150000000055515203533226023332 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'cy', { copy: 'Hawlfraint © $1. Cedwir pob hawl.', dlgTitle: 'About CKEditor 4', // MISSING moreInfo: 'Am wybodaeth ynghylch trwyddedau, ewch i\'n gwefan:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/uk.js0000664000201500020150000000065215203533226023334 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'uk', { copy: 'Copyright © $1. Ð’ÑÑ– права заÑтережено.', dlgTitle: 'Про CKEditor 4', moreInfo: 'Щодо інформації з Ð»Ñ–Ñ†ÐµÐ½Ð·ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð²Ñ–Ñ‚Ð°Ð¹Ñ‚Ðµ на наш Ñайт:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/zh-cn.js0000664000201500020150000000056415203533226023736 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'zh-cn', { copy: 'ç‰ˆæƒæ‰€æœ‰ © $1。
            ä¿ç•™æ‰€æœ‰æƒåˆ©ã€‚', dlgTitle: '关于 CKEditor 4', moreInfo: '相关授æƒè®¸å¯ä¿¡æ¯è¯·è®¿é—®æˆ‘们的网站:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/sv.js0000664000201500020150000000055615203533226023350 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'sv', { copy: 'Copyright © $1. Alla rättigheter reserverade.', dlgTitle: 'Om CKEditor 4', moreInfo: 'För information om licensiering besök vÃ¥r hemsida:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/lt.js0000664000201500020150000000054615203533226023336 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'lt', { copy: 'Copyright © $1. Visos teiss saugomos.', dlgTitle: 'Apie CKEditor 4', moreInfo: 'DÄ—l licencijavimo apsilankykite mÅ«sų svetainÄ—je:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/is.js0000664000201500020150000000060715203533226023330 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'is', { copy: 'Copyright © $1. All rights reserved.', // MISSING dlgTitle: 'About CKEditor 4', // MISSING moreInfo: 'For licensing information please visit our web site:' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/fr-ca.js0000664000201500020150000000057715203533226023713 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'fr-ca', { copy: 'Copyright © $1. Tous droits réservés.', dlgTitle: 'À propos de CKEditor 4', moreInfo: 'Pour les informations de licence, consulter notre site internet:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/et.js0000664000201500020150000000054415203533226023325 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'et', { copy: 'Copyright © $1. Kõik õigused kaitstud.', dlgTitle: 'CKEditor 4st lähemalt', moreInfo: 'Litsentsi andmed leiab meie veebilehelt:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/bs.js0000664000201500020150000000060715203533226023321 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'bs', { copy: 'Copyright © $1. All rights reserved.', // MISSING dlgTitle: 'About CKEditor 4', // MISSING moreInfo: 'For licensing information please visit our web site:' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/pl.js0000664000201500020150000000061315203533226023325 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'pl', { copy: 'Copyright © $1. Wszelkie prawa zastrzeżone.', dlgTitle: 'Informacje o programie CKEditor 4', moreInfo: 'Informacje na temat licencji można znaleźć na naszej stronie:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/bg.js0000664000201500020150000000067515203533226023312 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'bg', { copy: 'ÐвторÑко право © $1. Ð’Ñички права запазени.', dlgTitle: 'ОтноÑно CKEditor 4', moreInfo: 'За лицензионна Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¼Ð¾Ð»Ñ Ð¿Ð¾Ñетете Ñайта ни:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/fa.js0000664000201500020150000000065015203533226023301 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'fa', { copy: 'حق نشر © $1. کلیه حقوق محÙوظ است.', dlgTitle: 'درباره CKEditor', moreInfo: 'برای کسب اطلاعات مجوز Ù„Ø·ÙØ§ به وب سایت ما مراجعه کنید:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/ku.js0000664000201500020150000000106215203533226023330 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'ku', { copy: 'ماÙÛŒ لەبەرگەرتنەوەی © $1. گشتی پارێزراوه. ورگێڕانی بۆ کوردی لەلایەن Ù‡Û†Ú˜Û• کۆیی.', dlgTitle: 'دەربارەی CKEditor 4', moreInfo: 'بۆ زانیاری زیاتر دەربارەی مۆڵەتی بەکارهێنان، تکایه سەردانی ماڵپەڕەکەمان بکه:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/bn.js0000664000201500020150000000060715203533226023314 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'bn', { copy: 'Copyright © $1. All rights reserved.', // MISSING dlgTitle: 'About CKEditor 4', // MISSING moreInfo: 'For licensing information please visit our web site:' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/el.js0000664000201500020150000000105215203533226023310 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'el', { copy: 'Πνευματικά δικαιώματα © $1 Με επιφÏλαξη παντός δικαιώματος.', dlgTitle: 'ΠεÏί του CKEditor 4', moreInfo: 'Για πληÏοφοÏίες σχετικές με την άδεια χÏήσης, παÏακαλοÏμε επισκεφθείτε την ιστοσελίδα μας:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/fi.js0000664000201500020150000000055115203533226023311 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'fi', { copy: 'Copyright © $1. Kaikki oikeuden pidätetään.', dlgTitle: 'Tietoa CKEditorista', moreInfo: 'Lisenssitiedot löytyvät kotisivuiltamme:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/ru.js0000664000201500020150000000070015203533226023335 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'ru', { copy: 'Copyright © $1. Ð’Ñе права защищены.', dlgTitle: 'О CKEditor 4', moreInfo: 'Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о лицензии, пожалуйÑта, перейдите на наш Ñайт:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/gl.js0000664000201500020150000000057715203533226023325 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'gl', { copy: 'Copyright © $1. Todos os dereitos reservados.', dlgTitle: 'Sobre o CKEditor 4', moreInfo: 'Para obter información sobre a licenza, visite o noso sitio web:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/sr-latn.js0000664000201500020150000000055015203533226024272 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'sr-latn', { copy: 'Copyright © $1. Sva prava zadržana.', dlgTitle: 'O CKEditor 4', moreInfo: 'Za informacije o licenci posetite naÅ¡u web stranicu:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/oc.js0000664000201500020150000000057615203533226023323 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'oc', { copy: 'Copyright © $1. Totes los dreits reservats.', dlgTitle: 'A prepaus de CKEditor 4', moreInfo: 'Per las informacions de licéncia, visitatz nòstre site web :' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/sq.js0000664000201500020150000000060215203533226023333 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'sq', { copy: 'Të drejtat e autorit © $1. Të gjitha të drejtat e rezervuara.', dlgTitle: 'Rreth CKEditor 4', moreInfo: 'Për informacione rreth licencave shih faqen tonë:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/pt-br.js0000664000201500020150000000060215203533226023734 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'pt-br', { copy: 'Copyright © $1. Todos os direitos reservados.', dlgTitle: 'Sobre o CKEditor 4', moreInfo: 'Para informações sobre a licença por favor visite o nosso site:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/fo.js0000664000201500020150000000054115203533226023316 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'fo', { copy: 'Copyright © $1. All rights reserved.', dlgTitle: 'Um CKEditor 4', moreInfo: 'Licens upplýsingar finnast á heimasíðu okkara:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/af.js0000664000201500020150000000054615203533226023305 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'af', { copy: 'Kopiereg © $1. Alle regte voorbehou.', dlgTitle: 'Meer oor CKEditor 4', moreInfo: 'Vir lisensie-informasie, besoek asb. ons webwerf:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/hi.js0000664000201500020150000000060715203533226023315 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'hi', { copy: 'Copyright © $1. All rights reserved.', // MISSING dlgTitle: 'About CKEditor 4', // MISSING moreInfo: 'For licensing information please visit our web site:' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/km.js0000664000201500020150000000111715203533226023321 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'km', { copy: 'រក្សាសិទ្ធិ © $1។ រក្សា​សិទ្ធិ​គ្រប់​បែប​យ៉ាង។', dlgTitle: 'អំពី CKEditor', moreInfo: 'សម្រាប់​ពáŸážáŸŒáž˜áž¶áž“​អំពី​អាជ្ញាបណញណ សូម​មើល​ក្នុង​គáŸáž áž‘ំពáŸážšâ€‹ážšáž”ស់​យើង៖' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/nl.js0000664000201500020150000000054315203533226023325 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'nl', { copy: 'Copyright © $1. Alle rechten voorbehouden.', dlgTitle: 'Over CKEditor 4', moreInfo: 'Bezoek onze website voor licentieinformatie:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/ka.js0000664000201500020150000000075115203533226023310 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'ka', { copy: 'Copyright © $1. ყველრუფლებრდáƒáƒªáƒ£áƒšáƒ˜áƒ.', dlgTitle: 'CKEditor-ის შესáƒáƒ®áƒ”ბ', moreInfo: 'ლიცენზიის ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡áƒ—ვის ეწვიეთ ჩვენს სáƒáƒ˜áƒ¢áƒ¡:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/es-mx.js0000664000201500020150000000062315203533226023744 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'es-mx', { copy: 'Derechos reservados © $1. Todos los derechos reservados', dlgTitle: 'Acerca de CKEditor 4', moreInfo: 'Para información sobre la licencia por favor visita nuestro sitio web:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/mn.js0000664000201500020150000000060715203533226023327 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'mn', { copy: 'Copyright © $1. All rights reserved.', // MISSING dlgTitle: 'About CKEditor 4', // MISSING moreInfo: 'For licensing information please visit our web site:' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/da.js0000664000201500020150000000060515203533226023277 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'da', { copy: 'Copyright © $1. Alle rettigheder forbeholdes.', dlgTitle: 'Om CKEditor 4', moreInfo: 'For informationer omkring licens, se venligst vores hjemmeside (pÃ¥ engelsk):' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/he.js0000664000201500020150000000055415203533226023312 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'he', { copy: 'Copyright © $1. כל הזכויות שמורות.', dlgTitle: '×ודות CKEditor', moreInfo: 'למידע נוסף בקרו ב×תרנו:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/ca.js0000664000201500020150000000056715203533226023305 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'ca', { copy: 'Copyright © $1. Tots els drets reservats.', dlgTitle: 'Quant al CKEditor 4', moreInfo: 'Per informació sobre llicències visiteu el nostre lloc web:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/gu.js0000664000201500020150000000065315203533226023331 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'gu', { copy: 'કોપીરાઈટ © $1. ઓલ રાઈટà«àª¸ ', dlgTitle: 'CKEditor વિષે', moreInfo: 'લાયસનસની માહિતી માટે અમારી વેબ સાઈટ' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/ms.js0000664000201500020150000000060715203533226023334 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'ms', { copy: 'Copyright © $1. All rights reserved.', // MISSING dlgTitle: 'About CKEditor 4', // MISSING moreInfo: 'For licensing information please visit our web site:' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/th.js0000664000201500020150000000060715203533226023330 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'th', { copy: 'Copyright © $1. All rights reserved.', // MISSING dlgTitle: 'About CKEditor 4', // MISSING moreInfo: 'For licensing information please visit our web site:' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/de.js0000664000201500020150000000061415203533226023303 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'de', { copy: 'Copyright © $1. Alle Rechte vorbehalten.', dlgTitle: 'Über CKEditor 4', moreInfo: 'Für Informationen über unsere Lizenzbestimmungen besuchen sie bitte unsere Webseite:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/en-ca.js0000664000201500020150000000056415203533226023702 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'en-ca', { copy: 'Copyright © $1. All rights reserved.', dlgTitle: 'About CKEditor 4', // MISSING moreInfo: 'For licensing information please visit our web site:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/tt.js0000664000201500020150000000061615203533226023344 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'tt', { copy: 'Copyright © $1. Бар хокуклар Ñакланган', dlgTitle: 'CKEditor турында', moreInfo: 'For licensing information please visit our web site:' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/vi.js0000664000201500020150000000063015203533226023327 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'vi', { copy: 'Bản quyá»n © $1. Giữ toàn quyá»n.', dlgTitle: 'Thông tin vá» CKEditor 4', moreInfo: 'Vui lòng ghé thăm trang web cá»§a chúng tôi để có thông tin vá» giấy phép:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/cs.js0000664000201500020150000000056215203533226023322 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'cs', { copy: 'Copyright © $1. All rights reserved.', dlgTitle: 'O aplikaci CKEditor 4', moreInfo: 'Pro informace o lincenci navÅ¡tivte naÅ¡i webovou stránku:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/tr.js0000664000201500020150000000061115203533226023335 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'tr', { copy: 'Copyright © $1. Tüm hakları saklıdır.', dlgTitle: 'CKEditor Hakkında', moreInfo: 'Lisanslama hakkında daha fazla bilgi almak için lütfen sitemizi ziyaret edin:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/ja.js0000664000201500020150000000061015203533226023301 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'ja', { copy: 'Copyright © $1. All rights reserved.', dlgTitle: 'CKEditorã«ã¤ã„ã¦', moreInfo: 'ライセンス情報ã®è©³ç´°ã¯ã‚¦ã‚§ãƒ–サイトã«ã¦ç¢ºèªã—ã¦ãã ã•ã„:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/sl.js0000664000201500020150000000057715203533226023341 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'sl', { copy: 'Copyright © $1. Vse pravice pridržane.', dlgTitle: 'O programu CKEditor 4', moreInfo: 'Za informacije o licenciranju prosimo obiÅ¡Äite naÅ¡o spletno stran:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/lv.js0000664000201500020150000000060315203533226023332 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'lv', { copy: 'Kopēšanas tiesÄ«bas © $1. Visas tiesÄ«bas rezervÄ“tas.', dlgTitle: 'Par CKEditor 4', moreInfo: 'InformÄcijai par licenzēšanu apmeklÄ“jiet mÅ«su mÄjas lapu:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/en-au.js0000664000201500020150000000055115203533226023720 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'en-au', { copy: 'Copyright © $1. All rights reserved.', dlgTitle: 'About CKEditor 4', moreInfo: 'For licensing information please visit our web site:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/en.js0000664000201500020150000000054615203533226023321 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'en', { copy: 'Copyright © $1. All rights reserved.', dlgTitle: 'About CKEditor 4', moreInfo: 'For licensing information please visit our web site:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/no.js0000664000201500020150000000056415203533226023333 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'no', { copy: 'Copyright © $1. Alle rettigheter reservert.', dlgTitle: 'Om CKEditor 4', moreInfo: 'For lisensieringsinformasjon, vennligst besøk vÃ¥rt nettsted:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/fr.js0000664000201500020150000000060015203533226023315 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'fr', { copy: 'Copyright © $1. Tous droits réservés.', dlgTitle: 'À propos de CKEditor 4', moreInfo: 'Pour les informations de licence, veuillez visiter notre site web :' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/id.js0000664000201500020150000000055415203533226023312 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'id', { copy: 'Hak cipta © $1. All rights reserved.', dlgTitle: 'Tentang CKEditor 4', moreInfo: 'Untuk informasi lisensi silahkan kunjungi web site kami:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/ug.js0000664000201500020150000000074715203533226023335 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'ug', { copy: 'Copyright © $1. نەشر ھوقۇقىغا ئىگە', dlgTitle: 'CKEditor تەھرىرلىگۈچى 4 ھەقىدە', moreInfo: 'تور تۇرايىمىزنى زىيارەت قىلىپ ÙƒÛلىشىمگە ئائىت ØªÛØ®Ù‰Ù…Û‡ ÙƒÛ†Ù¾ ئۇچۇرغا Ø¦ÛØ±Ù‰Ø´Ù‰Ú­' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/ar.js0000664000201500020150000000063615203533226023321 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'ar', { copy: 'حقوق النشر © $1. جميع الحقوق محÙوظة.', dlgTitle: 'عن CKEditor', moreInfo: 'للحصول على معلومات الترخيص ØŒ يرجى زيارة موقعنا:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/sr.js0000664000201500020150000000063615203533226023343 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'sr', { copy: 'Copyright © $1. Сва права задржана.', dlgTitle: 'О CKEditor 4', moreInfo: 'За информације о лиценци поÑетите нашу веб Ñтраницу:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/eu.js0000664000201500020150000000055715203533226023332 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'eu', { copy: 'Copyright © $1. Eskubide guztiak erreserbaturik.', dlgTitle: 'CKEditor 4ri buruz', moreInfo: 'Lizentziari buruzko informazioa gure webgunean:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/en-gb.js0000664000201500020150000000056415203533226023707 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'en-gb', { copy: 'Copyright © $1. All rights reserved.', dlgTitle: 'About CKEditor 4', // MISSING moreInfo: 'For licensing information please visit our web site:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/lang/hu.js0000664000201500020150000000057315203533226023333 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'about', 'hu', { copy: 'Copyright © $1. Minden jog fenntartva.', dlgTitle: 'A CKEditor 4-rÅ‘l', moreInfo: 'Licenszelési információkért kérjük látogassa meg weboldalunkat:' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/dialogs/0000755000201500020150000000000015203533226023053 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/about/dialogs/logo_ckeditor.png0000664000201500020150000001302215153141500026377 0ustar puckpuck‰PNG  IHDRÂ:â †EbKGDÿÿÿ ½§“ pHYs  šœ²IDATxÚí]{tSUºÿ}û¤/ž*0Î /ET|´´$)IZ„©"‚Šà8ƒkÔÑÁqÄÇàL[îÌuz]×i@í¸FsgFÇGQ\ŠŠòÌ«MÒ&µ)| (¢‚¼ ¤IÎþîi¡ôA›JtßZg­¬dŸ}¾}¾ýÛßã|g‡d \Ö€£Å—`ø+‡M–,ŒÌr"@MD´U{£%9[[·Õ átƒ’ÚÛ¯k¿ê‘¶44K•xàÁD»VQ€ö¤ š.ÉþPS†T€Hfgº±ÊdQ^·F•ü&ÀC;é? à±)?öÐ?uËB£ ÝÞ iCÃwó_æ“3ÛÞ¥Øëþ-%׸²Ç0ß"UþTgGËR²®Mß§"G[¼¬iW÷ç {ý`¹Àˆ>Šò!ˆþG–f?ßÓ3Ò–…-Îi&ãÖq*¢ãÖ¥gîlZ|Ñ~ЕoFlÉeš¦5$#žhÀ×w]‚Õ›×¾23ÓO²HµDüSµtÒŽÖ×lC€¥!DKr +¯Ê‚oeæ?‘Õv`´  ßeï½wRLSµ†äáw~àa#†T4 oŒÄÖ9;Ù1F+DˆÄ;jiö5qŠADíÉ­JÞà¬núúPÉL›,#Ñ#jÉ$Mãz#dUl¤Ÿu¦b¯{¨±)ú5˜'õ# YÎöëìuwe.ßšetËB…*#ÔÀxµ)JËJÏÔÔ­¡wáN'ðdtöÐÍx̧IJ:D ‹ÕÒì= ÊëŽtн¼/—Lš¨©\Ã)[eÜE¢<̧;çuÏuF!”… Z¢õ ~¾P·´~ª¦r ‰ kùP¸‰á˜7:{èlf<Ç’¯H »E[c%—ȨØ:(ÚùI'mþ+¹ìo –†Œ`ÌhßBJ^ RS»†N-B „=ôŒdþ€‘"$@à*ˆ5EÇPµ8t«nYèÇÝt4GS¹†„!³|ÂK&"mÙæ RÊMÌ|N 2ï7 îèΑ‚k"i,Ãá7€¶iÔ¶.ÎÑT®!¡E/™ˆ3Êw RUù~*’ >)£ùƒš€%õjqÎÇššþâ–Ì’˜Q¬i\Cb"è®Ë:Œƒ ‹T’‰Îoþx@2(,m¨_ ©qOy€§#gh§¦r ‰@FcRYH†¼²ÄšÚ’„GdýyËØ´ åK]†²ë2t¬C?Œ—4•kHHã;S^JÆ9нnXcñyQ"ñ`ëŸ$ó#MáØ®HSìãHSì#89ößµëEè%\ÿMë:Ä“¿rE –f?L QF±‡œ ycÇø€V©K²·àÕ5­kèHfŒïå¹ T݈v¶è­2¯81§uôc%²‚™m`ŒlÇ‚ jIöüo㆚L… ¿×›l'ž2}z—}ä™­I’F9EÙm'ehþl6·Í¢ë“&Û·}¾­ÓßH”×z*…èyYšóóþZYúK~¡]´ë¥“¦@¦}ÛYnz€¥kQÅ?ÔÒìÛ”¥!¨%9½–ǰp!‚Ï<¿¡Fë<_ ¦|d`/ˆ¶Ð@àç>Ïæó§ Å¥^ïÊ“Š0Zw…îT¹ÞíTYf j½äš,÷Jнä}î#`´ZG£¸‘£ÐMy I"þY]éüäTÆ™k².b 0èsÏ;ñ±à &õo*‚>ÏcíϹDoDC­?¥I0þ|¬\¹³µ’ï2xà¸Mëß´ü®ëM§i¤,mBÛ§ÑÉBKÙ5 v²ì°â*öº«¥“n —Nü€5}Y½1¦Ê'LÀ͇$ÐkŠH»'RrñÞ¬Ší8¾øÂÞ‡(ÍÕ¯†;îHC]Cƒ'€)â—ñ>AŽfæ\3p¿Þd}¶Öç¾õœ$Áâëÿ 8>sLŒ|ï&&µ^7ôfË-Râ1Uœžv̰p!°ù}È ò=š%W8%"Hæ\Ó–Tê=Ì à—¹fÛò€×+**Â7GŽ•JÆyµ>ÏÂT&Ù\ˆ•+WbJ~Áù1Uý_iѦð@}#B”Õ'sª¢Óù¤&[è–w¤J·Ççt‡ÌÏa+/ˆOÚ)ÎöÐ\¶%3,q Ž—µïÓΗ*€4û–>‘Æ]x)LS§‰Ô5ÔÈ Rf}Î7˜ÞQ$±ˆY–èMÖAµ>÷ü)ù¨®rv(#ïà™,¨ñº¡7Ù~)+ˆ°zpú„k®H¸7bòœ¹iôåWyDôrÖ qsF¦ë<·Àqìl~iã*5Q û©’â.IüAXQãuÅ`ÿáã`ÆU.6L-¸7Xé<žªDðzq÷Zªë¤%j£ëåiÝìlˆ {¨¿²Dè²È9_ªøX)•gè°¼‰éàÑâKØ#ìuøô†óO’¶ôÒ>‹óÉŽ ;ëÌç ÓA\Pís~d6Ïoãö@e|Vé[Wª7Yƃy^žÙvMu•óõîúÏ3[Qãu#×d¹I²¬ ¢:¥iÐuGi牕ÐýCŽ ð[žõÎpϽؾ[ìŸk€{‡ ƒ²²2”••àø3• )‹<› 5.ô&ë£Ì<ÀS~Õ‘ì}š°Ü?¸‡|á%áʪÜ.Êë¶ {G–&ÿå½Ñ¶ › q_µßõQ|•YÙ¡]eå:@­Ï3@DJ~ªÛ¾§´à—’ñ<ë2E,¯ú½5j×Ý:>JŽÎ:ÁÌ™3»msxß§X½aCR®—;uZ÷q™eFßIìraJ¡m˜Ñ›¨IžEH-(F°$ÉÎå_žQ#Kìø\ËóL¨ñ9{²ÿ•™ï3˜­ç½îµ™’_€êJ'ôù¶_HU>C@M†ÈšF¸_^-Õ›¬:{ ^]=ƒÁW˜¦ãD¨ùò@ãh©éjïc[/ÏŒD"ë è¶ Û½Ã`²]Ì,' ƒ¢êÕ£%JBÔ¼®6c½õÎí¨ï¶+\à|f„‰è=)cof/@½¿m6Ü`²Øå‚ gýÿŒÖißÌDÉp}Ðënê±5(,DÃX˜ƒ j úܳõ&ËmßW"ôÊÊʰz͆‘†ƒè±¸›àìѹ zL€ÿ03oàî¸Ú™,¨®r"Ïl›§ªòïDTAùUUëú…“AŸzf?€¼¸‘¡]ÿ€ó<”g¶ÎWe‡šÒÓ"±x€—10¿•'ûrs|þ€[Z®© ½w{=8^¹@„ÎÌ×ñ ÁdYôyæ´dtZ9÷êõ¹fÛ`)e#xÊÖÀá€ÁlýKKÀì®ã >úx¤>Hйҩ“Õ²3Ôú\ŸüžÛßÜT‘0Ãôyk²-T¥\IDn]”mÁ*W¿m2 »h4é€&µÌct÷€Áƒ}ž ƒ~÷° %mžeÆlƒÉòÔÊ•+QXXØ1ƒ%¥]Í®õ{(èwç}=·g±ý%/#"GÐïy³ËûÓ»ùOûÒ)].™¸»/ÊI¯Ør~,¢Á<$UÉÀŒøë,v&w…¶Î”,ŸaÆÍþ 'œk¶!àuuwj–ÞdÜÝ"F@cÐç>‘Õ‹mû¬ÀATð¹–æµöÑí®õº­z£5À̆î–(wUe4×hýñº/É‚¾zâY£cŸ5´X ˜q‘( ú\Î\cAë|ì7AŸçVƒÑòfÜQPXø_‡ã›cʯóÍö£ÛøÃhÃEi?¡m±}Ž}în’^YE(³Â%w|zO¯' ¿ìDdñ¥À])n~º¬ô÷“Ô_,Ïhû 3¿M„W ”Bõ¼YW‹’±ÌÀ¼¿‹ã lw꧉åy j*7´NÍA9U$É KgÆíDô¡’N•¹f~g«tæÆø*¬t-4†c #ð ×ùÚÔ©sN‰Æ™3ð»°-úŸ[˜1–ˆ~ ¡Åé³ERÍP½çŽ‘½¾Y÷LhYqóR™Ä’@,|\IJ‡’m*øAU}îyú|ÛåPå†öZàÚî¬=G O×¾%©Ä/µË°‚ðb­Ûy´³³‚>× ½ÑòBŸ³$Òc,Gøïj—³SwÏ_ùNTo´¼ÄŒks-Ó†<›wÌĽqJ×ö¯YƒÜ‚i#d8ú‚>÷3àp8’Of~TØëæ¨/–2€KXrj¿POô˜Á‚.ðezœA”ø;ÕµU®£õf^k¶ý<àuý«k—‡]¿çÙ­ÌV+‚n7 ÍÓ†–Q€謭Õj…Ûí€ÝF÷‰ë$Æ7?ü®ëÁ Þ°±è0‡ûd‰fÏ8¢Èpô- ôøuãÞfSü½ß‚mƒÊ ‰ H”þI¼P`~ñ|\9`\°Ê¹«ÝŠ^?™EG9|ÂúÝ7L– ™ù¹çÇŠ³œg0YÞ€¢¢¢¤Œ£ºÒñE<<áìÎÚ8Þo è¾_Qiˆ”zò/0cHè”ýɉ鸒/ˆùvb^ÐSsÓZ¾c‰QšEèUUë£z£­çš­÷ªÜéªÍáp ðr[Æá£|5ˆ·ÔxÝôä:ùùE¨ªZ»No²>ÁÌwåš­?]»ví‹=L©ö€ÔØÆà;üº¨¨k×®mÛ`o rͶ˥”}~ÂÃ2Ò`?ƒqõô‚Ç¿‚Ž«;+Í`¾Žˆö=Îoú:Æ\“•>w—eùz“eÿwfú˜Uk6ô­úD à/`Ô÷‡GÂf~À™©@†Z¿k¹Þh™'%WmkˆhçÔ©s:d4ôS  @*‡ÊêøÍM¿¾ç„[ ÃÔ+‹ FëURòмü‚Í5UÎ-í=ð^;¿‡”«òLÖŸ­]»v…aÆ ×Ç74ä[¬rCJ¹8÷+è÷„õ&ë+`^¸7F£Î ŸšL…ðùâ™›–çz“õQ0!%9±fÀçîI‘M&|Õë{¶ý*VšýtN¾ô¥›1©Ö¦ÆN˜ˆ´´ô›¢ÑHu´I­Í5ÜvLÝ-UõmÕ³Ç_WÄ䡿TÛ¼)ÆÂ52“¢ÝÕV\›åš,¸úÊX·fãšãÀ•ùƒÙz0¸~ýÛ-íJ—Ü ûCü83f5gnº}À)’ct:UœÄd²Áçs!Cê~ÛDÑ[d8öIžÉVàó9N˜µædîgÉ‹AôN Ò½%ÏbAÇsÚtÜ+"Bõý)Ôȧ÷àËoöL÷h׎­ ¢ÏæÍ›?úãϾxO²úêÞC€ÞdÝHÀ6cœÆÙGIÐÜ€×ý€$HP“y……¨Þä8h0Z2x<°b«º~®JQ€=̘CìKô Û`´¼ðyf|ϽfÖy»öúŠ%¿e0Z‚ø0F•?ôxB=%™‡˜×]ßgŸ1_¤Œ·€èÒ<Ô8¸8Lj ßý¢Ád9 éð»ØšŸ?ý¨Tæ8=(Ö"ð‰çEEEXõú[MzkÁЍw2x.@׃¸‘˜ßð|Àç^•—o³2Ë6iâÌHôxØ¢ƒrâqôš5košº$BÄ<— ¿Œ‚Tõ¿«% µs²Ù:FaºC²¼F7‚© `— ñRÀçú{0aÒ fôKÝ•"tUªªnIÏÌ:ÚÖs,¯SÑ¿ÿuðmÎXU–æœÖ@gu1z“µ¾øü2ÌžàêÕ]öc±Xài^%Û“ª/hÝo›@ÓlÅÕWLGYY€6Øõ£Ñ¿ßÕ.`-D 9èê~´ï«}òŒÔø“g)]珞c¯ÛÁŒ ß µê’I-×¥áÔã^¦÷¾?áMšJ5ôŠBGO~_3êœÐTª¡WD`H?@Ÿ~÷Ý"z哟 nÒv¼ÖÐ+·8ã±ÐàÃÇq0•wÄîfê’ìÁôxëMCŠZ„̇C8x_ÎEÑçßAKàQtºqBfù6M£zoÚ0ÃzÌ?00ÅeÿDÈÒœeš5ôÙ"´|˜ÿrÜ·–¥9 h<ÞM]öŠ ÆËÒœe(^Bv ’fZC)]ÁÄCŸ"Ò®%VîW—\¶%;%)»ØiÐÐ-°h=°|F*üáøP._ÐT¦¡_]£„X>YÛ+ÍyN§£³Tþ-´(mPÚðHñ¥¬ŠíšÆ4œ‹Ð÷WNÁGBÃcXå­ßj”"DôŽZšs pr[v NEhG§`Ä 8üÛœ}çfO&" @ûú›µD¸¬…#žhÐH !…,BgL²×?–w#¾!l_ðH”ÉÒìç5µhH]‹Ð'Ó­Ù*Ð!B¯7†D%̱ ²4ûy”¬ÓÒ¡¾{¡5tKëõRòŸîÙÆJDÏ bÅ9»Óí ˆ”^¢iDÃwŸXT,Ÿ„´¥¡YªÄ 'Ú¬6 ОtAÓÃ%Ùj*Ððý#€Ëp´ø b—r¨ñÐdÉdd–j"¢­‚Ø-ÉihÝVƒ†Óÿǧפ”†j!IEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/dialogs/about.js0000664000201500020150000000450615203533226024532 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.dialog.add( 'about', function( editor ) { var lang = editor.lang.about, imagePath = CKEDITOR.getUrl( CKEDITOR.plugins.get( 'about' ).path + 'dialogs/' + ( CKEDITOR.env.hidpi ? 'hidpi/' : '' ) + 'logo_ckeditor.png' ); return { title: lang.dlgTitle, minWidth: 390, minHeight: 210, contents: [ { id: 'tab1', label: '', title: '', expand: true, padding: 0, elements: [ { type: 'html', html: '' + '
            ' + '' + '

            ' + 'CKEditor ' + CKEDITOR.version + ' (revision ' + CKEDITOR.revision + ')
            ' + 'https://ckeditor.com' + '

            ' + '

            ' + lang.moreInfo + '
            ' + 'https://ckeditor.com/legal/ckeditor-oss-license/' + '

            ' + '

            ' + lang.copy.replace( '$1', 'CKSource Holding sp. z o.o' ) + '

            ' + '
            ' } ] } ], buttons: [ CKEDITOR.dialog.cancelButton ] }; } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/dialogs/hidpi/0000755000201500020150000000000015153141500024142 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/about/dialogs/hidpi/logo_ckeditor.png0000664000201500020150000002771415153141500027511 0ustar puckpuck‰PNG  IHDRƒtg„^bKGDÿÿÿ ½§“ pHYs  šœ IDATxÚíy|TÕùÿ?Ͻ3I€„EPÜ*îÊ–„™$3“Ì„EתÅ.V[mÝúµn $j[ü~­kÕjµ­ÚZíO©V¡ˆR–ÉÌ$3!™˜ ›ˆ"jQ@@v’™{Ïóûc–  Ë$Lä¼_¯¼^™;3wî}ιçóý-DK²³Íßß}çˆЧr5”LÙéÕGC}Ȥ¸„aüÀð£U“‚r0×éåù-² K$’TÐsc7¼0Ílúñ¾=‘½B€yÂÞ=áMêÌÐ_à@ùHœúÜ]3zecT*›~ÉÄ„a¼Û!—Á^ÁXgªlš x8 k²D"éb`]0J­ -/8¹—Ù)‹Á7+•ûM³W^»¥y« Ì3›:t’ìÇ¢ƒÒ a˜RÙØÄ,žì‚-† ¯«•ËûõÍ>!z=²FK$’NÑmÝDýžX‰}÷ŒFÿß®5íSZþÅÀeèe¹ŽÀç&(ãùëã÷y42æ4!<5™³ÇD|ú¦°÷d@œß\1f³¬Ò‰$-"µ2êýî»g4ÔY¡){•ð6.ÿ |G'þP­ ½Ò|@œ ê¬ÃOE-[ÎOÍ…:«éÚˆ@Cj…8' Údªlb‰D"9&‘Á€™MØU‘‹¬Ç×*‘px 3/s\‘hªâñæò1|¸ÏôrÝI{÷Ø O7^‰qâ`sö–[G4˪-‘Hz^ ~åþ¯ ™•+ÏŠ°ñ×qhËω”Fyî ÉO}î lݽeÐé#'ô@6ûÂûqxêHYÃ%I»HI7QfÎàJeèáŽS!€ï0‹¿¨•Žøœ§×â‹ÛNÊ=!À€ÅÔ¿Ï5R$IÏD×ÖoÃTÙx§`ÌBÊûÁ{¥9·ŠŠ¼¡ÉGf0ÓÿV†D'N¶ D»“Ê(ÌÛûes–Ò¯åÞÜý²L$I{0uö‹jQ¿2„f æBiƘ¨˜~è±ÿ›Õ4¿gÚ,*òJÍ¡T6Þà™öžAoá{<*KE"‘´‡vuÅóýyn 2f‡rÔ™^¼œ!… Gá‰OŠ V®ÂÌã;,´Äwµq8«#ç`Æ cÎjY0‰$5b°ñ¦³;vn™«ü%Niºoð‘Ïó¥˜ÁÑ E3Æ.„¢ˆ :ÚˆàŽ”çÏëúåðèì'×g˱‰DÒ%1èÿxԣ̚µVU+C•ÊÆ„¸@?i¶6ù¯š™Á‰dvîË!kèØ¸Ìþç4ƒæbÐ3ë©ÿS¶îóÌÞÙ`ÿe±H$’N‹ZÂîûF"svè°¯aæ÷À_8 ¢/.?sÔÁë ˜:ÔF@åÊïÁ×S°oOøü½{ØZßäŽ_óXY2‰¤Ãb0 –kgDÿ,EÙø@Äൟ/Ítt˜±ëí|Ã{?¯j²Þ¨Èÿ¿þ‡†ˆ¸îÒÔ_reÉH$’öp·¿«"Úv¬ÙÝÜÈ€Ü ¸cnýÎ6޶w*h$S¡ËØý› ¨3Cå >€èâU ‘#‘H:ÜûNôÀÌP3K!èxh`nãh»ö (ÿïÀ´ÜõpÒÓšü`Š®J¦¥H$탌Y+ß] µ²1H!èdh0  …ØÞ%øÚ¨È½1þrûž‹d'ÞMþdǯéKY.‰¤Ýbž>jeÓ]̰I“tV øÄ¾sÙ߀¨éè@ѵýžX—Eà§à*t•¢¨«[?gzK®"«í¾$À/ F"‘´˜ž]k;[—æèŒSZtA’§ýxÜr”o6‰µÍÞnëCzù¨ 6¨3C¹ÿÄÄ€”ù²`$I»#Þ~€*ÍÑ%Î1ŒYŸ‹6Ô³VÌ!úQe¤›Ð§^*‹E"‘´Ëy4Í àÏÑÁ•²’o’©šÏ80mäçñ׃ÿú¡úõû·p„¯½GÀª¶KGyÚ(ÏÝje“,¾ ÀÁ@ñQ ˜oTä_%KE"‘´)ÊC A ˆýwÄ_oÿÉù†R*ó³GøÚÅ \ÜvÌÀoØý—ǘÒ~™§2g…Ð2=OŒD"9*ŠÁÆDi†Ô ˜oë÷ĆÌÄý¢<ïÖtV_’þ7: FyÞÛR$Iû#&'w_·õñ5Øs €^½¸o!EyXñZÇφÔÊ ÚŸ0##s’\` ‘H:0á\i†TÊÊÀ4+˜l¿úôÜ×úS‡ÏÅüKfžËÌs¾º}AÍn¾ïÂÍ}_'ËB"‘´¿éR*›ÁÈ”¦H¥QéczÞŠ;3D¢"Õ™¡:t£½)Êó¯Å÷ÜÀ?ËdAH$’vc:Bð½Î„O{WÅÙÌtU{s<[™Ýø/¦-ú´Qy £˜«vG>aÆéÝ MfUùQ €¡¶AØòÏô´cYYÜn÷?c·—!p§ì7¬v'‚_·ÜÏàSÎÀ/o»3fÌøÖ5“'OƼy­[kX5 A¯·]ßµijÛùYI÷P4~¾p|Á±ß2@tNCÀÛ¥H´ÈéÄ ŸE%Z‰®³¯5 £ÿ Özª V›ÁZlÅ¥CuCÌc°–úP•žjð{ïêîr´Ø4Ž­‹l!¢!Á€wïa>Z“5a‘’iº¬®Ê-g§ô0¶RÔ×V¡Ð¡]fþw¢Ê(ê õþª¿¶JõXTü@¯˜w!cNÀhWKƸUú þV†‘¯GÓ ‰ò|¨•M0*ò‡ªž«@y°ã)èŠB?5«4LLÏ{E™J+!‚»s.ƒ72ã°Bp8O æ§øÒj×nݰºv»ë¨¿½Íµ-'é·êÌ6qI8eXáó¡À¡MÒuö$]·žeRfúù`­V›Ó1ŒÝ"Ñá—Ý/ÎI ä3Ám×T‹]ž,±º?Üh1ÚÌjPP\ÿÞM»ö£X"[ñQ_[[Ñ„ÉB‚ʼnGú^í^ÆàA0ô±¶Üß{翇wE ö5å´7‹ žaª e¬¾nd"-µQÝ7BL½MxT­l¼«À8Ñ}úƺO"Ñ.lÑÇ ¼&¦çýC0Ï]=O­'°:' è[‚â’ñý›õ–÷ãìdóh ¢ Ô7¨>[±Ô} þ¦½¤l¨. M0 À±·r˜ù¹›f<7·C+Sæ¹\ð{Ü(²»ÆëB¼“ôÖ2јj_ÕþCÇ(ì¶ñæµ¼>hUÿG±rLcEÍî‘Ƕ˜Te‡®‡ ün¢¶»Äêkܰ:\W³/Ä„``0à}F6ã)xþleÖºQZæµQzœbÐ nëÍB`š½ ú´Qà™×wä{‚ù¥24±¿Yqì\ó±^öã«àu²âÝ;Fyþs7½ÍÏýmÍJ3TfV˜˜Ä`¨¤ÓryŽú?¾»ïK¿Í%(›òº²»ú© Mjªx`Îe™;÷ðÒïïR T»·ø'€æÚ¦LÐw æÄ¦ßdµiß©x.ºôÒK±hÑ¢n½—ââq¨ñ,C¡S+Ô#âݤ·ô dœð-Ûjmc@¦³n÷—P[»ôp­Ü`NÜ4Eym7G1ÇÔ5øÁ€§@õ¡Ç%= ȈUٵǎÕ|`€Áé(É êUÖæTžŠKtÝø@Zz­øÙÝåùû¸Î ¼Þ»Ô/YB‡ö=CðOâÇ•´ú¯™4H|Dª«@Ù´á:°@f†®ëO—N¸¶¦jIJg«ØlãQë]Š»«ÌKZE R·ûK[Yj¸V‚™âEÒ“‚ ÀZ⺘u‘Ø5QUÕ ÃøGo PÈÌ…{9jeh-o+L+@¼QXB:1lT$‰D:#6Ág=™x­Ð[ÛfßY§Mî´tú´•öàE|70ó„ˆÐ³HÕ-hš¯w) ley‚õåIoP*¬«©Zm·—!p”EsIOráè"ôЯ¿‰ÌOŠÈŸ­«©ò[lÎv?|Š4ešÌÃÁ\. ÞÌ `q/X+´;o¢ƒ¦D´·Áï½úùß­os< 3Ô/ö ÇÔC9FD\šªë/?^¯¶bg®€hõñ ªÖºïêB§³K+£Ó…É“''þŸ4iRJÎ9qbú$?v8&·y¯Ç¾Ý¯eø`å ý±ÃºJô@GÏ%Å }!ô’5{éåŠÌMºði©~(Š‹ÇÁí}w/Õ´þޏ3çv:X±t) .{Ä@I=‘gÏ·¶ÈéDÏ×ë*‘õÖ[[Û9ö‹ÝyɆÏ6_oµiw[íÚ=[wì½Þb×.¶M,~ìLj»›Q`w]n±;Ÿ-°»´äF¹ÐÑæÚäÛœ0Qà8zWiQIYëç‹]ì6íÒÞ|ƒÅ¦ÝkµiwoølóõV»6©¨¸thkzqÇ]gi¶Å®%¦B&¯‹(´9‹¬víf«M{¸Àîš’*¨=øýn8JÇ28±îÄDøî ¿ggGÏ%»‰$]&Ò²ËN¬¤naÆ»“&MB*Šššeq¡y6¾Ó3ʺÜXN˜ß’%°;¿6ÄAn¿¢š†×׸?€½LöÏ?‹³ìlèÆŸŒHd$RÖLJ5XlÚü¾}³~:cÆŒOîB¼ ƒ‰o@~´üëü»Î1 ž‡ètcNLˆ^Ï­6íÒ$çG‚WëýÞé‡û½» õVT»QX\z±!Œg…!ÎJ¾/ný膫] *¤Þæ÷¿€B— uÏÑǦ j‰Ÿȱڜkƒµ¾Á€V»v.ó ðpÄ923 ‹Kêjª–÷ˆØÛµ¾BMrÄ^[ð-lO0Hº£k\¼.Ñš`­÷“îXpA¾L´±~ˆèÉ®œ¯¤äJ—,AAq©-là# –´‘…”qõ5îâ«e{›,ñ5‚™aµkBDÿ8VFG+È+÷ï?°¥Àæº?):mûefÇ»)˜—•\ž‘ü¾að að© >>­Õ}¢ÇøÔØßéBð´BGé‡û½ú€…öÒó­6ÍgÆ»`œuôjÊVCèõV›6¿¨Ô5¨ÎãÃqôò5ÀÃô‹éÊ`±kw2ózoC#=öè~ à;‰Ò2™î*t8;,R $]¢¬¬,Þd$:Œ‰ñ÷îú½u~ýží*Ñ0EQ´`À{w¡½´Sçš8q"ª«ç£°xÂÂ0¼HêoSQ}À³ˆ®–ímÌ›7¿¸ãr*°»>`æŸ'½µŸˆÖÑò3RèfÍÑ*ñ‰ f1»À¡=ÆíXïr8TRù–f¢ƒýûì=¤›HÛ—ø#ÚYç¯úìM‹{ÄÅë\’Ü[B5ýV!ü¤üŒˆ#¢&$­þfðF3ï°—žæ÷»QXvTAHî²e«]» ÌO%½¿ˆ6€ðrC]×§ž2¢û£‡K‹{6‡rU°Ú½µÎß¹(VvI:MÜû8h¶ŒÌní0-°k¨ x7ØuªŽ?DW\Å À^ìº0l4×#¶@Œ`EßPSUg±9ÑPÛûÆ Š5Ô×x±haÝ2Ä¼ØØ½½NP~Yð´•auºÅ® !à f¾„à©DʰHÉuýÞ­6׿Al¡/3øÒX„÷€_ i¬FUÔq‡#ÙË­¯õ¢ÐæÊ5XxZ;@¤àx£!àk«‹kšÕáL‚¦DWI3aa4Ú/ŸpFàßK:2#MeæxDºSQ”›^Vï÷îŠà¼1Nœ6À÷—kº¥Œ­'‚~˜Åó­jE5Y},(´»Pðtê¼R $]«˜vmL<)Zê½K>ç'ê껸êÖᘠÿ‚y(()Ö÷]C@Ê% 5UKIºieswS_ã…Õá|„EëxŠeF}ÀópnaÉỈ¶×û=?¶Ú]˜E4Í<‹ÇRymÁZÏW‰zcÓ$¹ÝêÞGr8àŒs‡ã”SOÍÑ[Zj“z5ö(0•ÕûÝï:¿hS´½®Öû@]k̯ÅddHd[ËGTÎ>ý_ p°ýû/d¨¥sÏsÖ¿ò¢~è›ëß÷a}7–qÐïƒÅᬄÀ…­-¹zwù‚.-néùn"…æf˜Lç(*eÅ<ÿ#  ¥ˆr‰d—áóÿqôè.!H~ÿ<8.*t£6YTR. ú=ïص^+….¬vçx éŸ[_ëyšêª/"~@0àù5)ôDÚ9&à³Ö"ÒÒòGŸcŠÝßEõµî÷ϹpÌg{ÕÕzãÎÄë*)W¶ÖY>õ_o-øE„Dø°¡Ög¾ò¢ž<[«GìP¬Áb׬¸¿Õ‡Q~¬vwy5~F*)—F¦ç.ŠnÖ~'€§Yå2€:.ufèuO†¤“Ðɉy„]éz•ñÙ5ÅÚ(aðÈ>¨>°x¼`츥J‹Ñ’Òf(V[i.¢Yh»v*UDj¼A«]£`ààMm⫼-vç½híßþ&óC…6'êÚÙåe)vÁ¤òz˜ngpVº”_pÉX´±§#™–Í{,E£Sk#G]ÞC5q:Í;-©@·¤Ðr‰nNÖ™qÇš3f ðÀj×naæøJrD. ši·že‰¤óÔû½MI›×d¹JÏ\áñtëoÚµ»ó¬Òk'¶³þ’«Þ_UUä‹Ú#,.ÚôÉǬ*ã„c‡Ì,ð÷Cçô§gdÀJòóL‚º<Ýu§Ñömí` ”møDÌû“µO:‰ÁEW]“ÉÌIsðé ß_ ³èrkÄ%‘tŽÄ~ܺ’Ûh×vçRT¨eÌU`|°÷¿ÚÓ¿ËfµkXá;rVaǨa¨­ñlTÜ–tØiµ;_NÿÈ€"8(ùwy‘©40îð‹ÖÅÐ.¹k(­fíØ²õßHL| Í µÞ+;å'´Š]¤íÈ™`µ¹dn"Iç‰OicÂ{`h±ÿŒ¤nR-%¥£ ¹1oøÂ»6²>à=š(P°9-Z„‡õ~ßK›s€¢ž®·Úœ/k}Ë .Ôû=iWÄs’0Dv×=ÆôÙ§œ/Zÿ§ÓSwb:-±HÓg]E¡Ch¶'ÆÉ›“»Vžü´Åæ|º GâÏÁZÏ-22¤À¹b7âS˜‡[mÚYݵõëâ d09'ð‡©<},ýoFßœŸƒè@¢­%ZVT\:(…XåýhíÞÎ°ÙÆw휂G§O%S“êÛ¸TœÒæpbp¿ÖŸÀÚt¹]#š¼G¦Ù0x²ÅæÌ”bŠ6ê®`IDAT é2æÌüIy‰2‰pɼyóZ÷;HmŽ9©Á[¸ü_·l$X¾( Ð-q7Yâ=àà-Ó…`oˆ¶'y¼¹µµK»jì1iSÇ ¼“±˜ì%ÚI]Ûx謜‹ÖÏÆ»ëAÁbN¬*´ÚµG‚ïCÙV°û#4¼߉‹ÁßPÑ);—¡¾Æ §Í´°ë{|àDø€N¥ÛH$-´»&$õ»ìU±­;vèë “&M¢èÅté‚,6çFÃbÞÓ‚ïS‡~&¾GµŒ $)¡.à{‘bpÌœm±9ß²ŸxR‘â7î‰ àŽd/G‘ ¥¤¬[ï«>à™KD/µz¥ü`¡Ýu¹ÛýIÚ•e˜Izyn¡ÍÕ©D`õ5n:Ç /]îmPvŸf"4%…-×ÑÔÖ¾¿Uëcõ©uyýgEooºÜo E)yZt›™âùŽ•lðY/ûûr™Ú ¨Jòjî«"çŸ16øüó]ê.šÇ‰Œ¡½Œf¥2ä'Mû’`ñâŰžu¸¬ä6Zæs2¢[ò Áÿ²Úµ[-Zô–•¡î(}í“'OFãÚ|þyX¥—°0ÞJ„»D˜”+{òÞlš†€Çû™Åæ¼ÀŸ¢&ÎVŒ–_-^ìqètSVh ÇÐ@,½PY)·8J¬®:®ŸážÂëú}¹_è­B0ÏYC×ÿ@ŠÁ¡Þé'뀙•Àp«]ÛÈÌÃ(Ìü«M»OÉRÆÍúv´8ê›løâkvòɦþÙÎgX?ouàLª=èëú!¾j¹¡Ö÷g‹]» ÌűÆ÷7—¿Þïy/¾ùHÔeÛæ™_ïùú×dðo­vgê*>›õ`íòƒÅW‚Î6—lÛÞŠxâ:Ý–hÎOÝáN·gèTh/³é†î· DØÁŒº§=PV‚c cölu~ÏZ«Ýù<3n ÉEV›ö ˆ‹² ùªú½·Úü^vöF9&œ7¿´Þ“Êtm]mÕåÓÛƒb@É+{1‘©£ Î }Årø m/Ú6µµK¡š2G‘ƒÇDZi4›¬²Ø4?-T@Ÿ«fõ3ƒ©Å }0 q6\ÆzóØ{š­HJ]a«h ~wƒÅQŠÿ±ñâ2³r\áæÝ0ãÜh»/þa¹ôòÓðÞŠÄïƒú ütÇþ]ëÁÀük&Ü ÆžÖÄí6ç2™ÝuÕ­+«ËÊʰxɲ}E6­Ôêbõ4ÃÐy…ŦÕás¦ya jÙf(*Õ†ê-¸›ñ3ƒu-IY@Àå ®éCªX3b ú¹V»ö6›Î<½`“9+ž1ÎnÅð3O:h0U9a‚ßV»¶Ÿ™ï‹Õ­3ÁøøÀÎíU‡ö\¦Èðûk—n»].Ú¶‹obn‹¤U"º».à}³Ð¦%öH–bÐ0³ ðÓðRïtª3æ4!<5LÈ•Zp/:6·}…oÉ~–‡6Mž`pì#£ÅÌ·Œ°q˜ÎƒÖCDðÞD‡îÑ„€…è¶Ð3Ò²×`Rn‹x6ÓA´c×â`xK¢!]²ìßÂR¬M‚ 0‰>!Ù#MØèÆúêåõ=¹ÝnØljk½õ–—:¿ 6'Ÿ‹™QnÃb‹ö³ëÍÜ–ç¶ÙD|‰n˜>@kŠ£#.€2„rЉ¦ÃoRèr¿Aœ€Çf,1óÍGnnÙàG «ÍùáI' µhÁ‚ƒÖ‘ˆŸ"6­wŠÅ¦õø'ˆflÍør\Þ‚–Äý…¹Íu?)ô@Ðï}Òjw¡.pÔ…„thw\/‚w‡Ò“ÈeæY¡;ð’p݅ɯ÷®Ö4çéµOÍEÿ§×dü¨lö*þ ÌÔû½³йDÊÃDèØ1¢Å™æŒ³stÅiÑøö­¨ ø–ï%Ûè`ÒSu_õ~üž€ ú~Ò½:“‹CCC÷sµ_Ö z‚@§þ§Äx²mAöÂRRІjO@! á…öŸ–žzʉÃVø}¡†îÕÇÞújbEö7Ø»ö#¶@ˆð®ûÍÖuǃúõ>6eª“|ÝfýÎßòÕÎKÛz/¾¾£¡Ö{K†j>„uí¿?,U:%è÷þÞêÐ xÚó¥]h]Ý­ú}Ë÷õ) ÕIJ°çÈ=w=·ï²ýgœ3Ÿ~´ƒÏÉÇvϯ©àÚß}O…â^Qëùêp¿SP\ !D1_ÂDsÞGZ˜̾ñæëÔÕk7ÿ/ 1  ÓAL1½¬õÞr¤{‹ïT¶Ò‚ăè8ÇàØým'`;C (*^©¯ñ|:ÒâÀ‰ý3Û½h°ÀáTXÐo@(P€ÇëÞ¥½æy+.=†xÀVroNm?Ü}÷¤H¤&§pŸØÖ‡l‚5­Û#Θ13fÌ8nmluN@з¤Ãß;’ÝÒe•wl5p´‹«³áÒ‰’’‹P]ýŸoˆgÛbPÙØ F¦l2Ò1ă&Êó}Ò‰¤»QÚ&Í–€Z¤$Iˆ1>’fHKtJéTD‰D"9‚0±ì†HOÂPx‹4ƒD"é1PI],͆m2¦ç- !‘Hz&2b ÞA’ƒ‡¤$Iµ9zEÞ6Í—¦H£ ´Y¯Èû§©²QC"‘ôŒ ̸€!Í‘6< zy¾´„D"é91Ðï®)÷Is¤CX@ŸyOICH$’ƒŒY+a”ç>I„Zi’cʾþæ¬1Ò ‰ä˜ˆAxúhàÞw`”çÛZ)ÍrlP¡\½sÊ_÷¶$~‰¤÷Ófö/µ2ÔÄÌ£¥yzŒý¤6—ç®é7{5öM)-"‘Hz>2ˆ3`f`Dÿ¬|"<(ÍÓ#,Wä6—ç®0³I D"9öb°«"°fw³0Êó5«Ê€>”fê– lîù㘣ùîãö—H$’o‘÷FÿÇWc÷}#‘5k­‘ LâßàÜ3ù[mtz”@ê¹û¤5$IZ‹A›aĬ¦¹âvÄ7Ú–tÐÚ´ŒT¾×¸?¿IÙCF‰$Mh×¶—g¾ø `ðÀ“¦(êÉÈävc§bR DyÞxãþü&Lü›‰DÒ{#ƒdÔÊP˜g3P(ÍxXë† ˜š­ö}n×ýç‡M5A¿_Š€D"饑A[¯ÜFE~‘Bt€ýÒ”¡Ñ¿ÿúß³²Œòü§2úF¤H$’o_dLæì•#BÜæ_I“R CQolž>j=dÍlB³ì’H$ßÖÈ ™–Ý_ïåy¿6gð§¶üœ€Ÿ‹Š›Ì#!‘HŽßÈh]0 G„Qž[/*òû“¢L°ë[ª ¢WIQÏ1ÊóæDÂ}¤H$)qŒò¨(ô{b%Œé¹ssô¾Cˆ°À·©±üÜÄt¾Qžw}V&6$ß·D"‘ôJÿ¶§~È<{Õ(a¿gð¸^l­ ©70+oå#uóÌ&D䘀D"‘‘Aû‰„‚«ŒŠ¼ñ áF›{™š‰ð¢(Ïï«OýÆÐAƒtR$‰Œ ºBÎÓ«3÷ï5ngO¤¿…hIN¶ùû»î±úT®Ær™YT"‘ÈÈ ËìùpO‹QžûûLÊ8¼ž¦2¹F!åjQžwÑ®çÖí˜ÁÑ!)‰DF)&sn#Z¦äÃüXèð†1Að÷¶ëq†`fìîî–î]‹Àh4*œzI’ Ùl>4ÆÜcÌ»Y–}>33“—fÙÀ¿"`ÏvÛ’$AÇ¢µv½Þi6›¡1æS—è?Y­°Ù Ûíö­ŠyŸXàº?0µð?T’$y¦Îº:VKß“$I¾©˜÷hšO÷Ú|"Q! Ã×\uˆJ©çªÞûÿ ×”R_A@AÜ Ãð…,Ë(Š¢©÷™ê(¶ŸaÖÆUðÀªâ{_'[äÌÛfØ«Ÿ%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/about/icons/about.png0000664000201500020150000000132515153141500024361 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ðÄIDAT8ËmS±Ž1}3^˹*Uz z® »+¨¢4ÑUð´)Å Úã:@¢¦é”:Rh D‚&¢O¥»Dk¼ž¡8{ñ’X²v5ûæíø½gšL&PUˆHçyhˆÆcPUXDÚ¦ÜB€ª¾ iÿaægÞ{¨*bŒhšÞ{0€¶YU±Ûí`­UO‹º1¾µÖþ®ëº%‰1‚™%I¿ßÿ¢ª "0óKU=&¢Ïéwsç+"·Ì "BÓ4ˆ1>LàsU}ÅÌ?<2Æ\§úe© gaˆ‹ÅÌü™¿…>”À¦iޤף²^•êŽÇc¨ê°Öv0Æœ‰Èž3|Ȯ솪b³Ù€ˆžˆÈ‹ôùê uÄL$ƒŠÈûŒóÞ?/§îLp Dgøº®krÎýkfeät:År¹ì ÀWU=!¢Ç>uþœœk'X­VpÎÁƒœ 9ÏçBØknw&Øn·(UöÞƒ™ŒF#µÖ¾.õ‘öN´!„·Gªz?ç¢t(%Ì|›ƒÿí€õz}SUU&ü•]Êk6›íÛ˜ADk-bŒÔëõîxïÍÀ_}ñÎ^ßšå%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/richcombo/0000755000201500020150000000000015203533230022257 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/richcombo/plugin.js0000664000201500020150000003224215203533230024120 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.add( 'richcombo', { requires: 'floatpanel,listblock,button', beforeInit: function( editor ) { editor.ui.addHandler( CKEDITOR.UI_RICHCOMBO, CKEDITOR.ui.richCombo.handler ); } } ); ( function() { var template = '' + '{label}' + '' + '{label}' + '' + '' + // BLACK DOWN-POINTING TRIANGLE ( CKEDITOR.env.hc ? '▼' : CKEDITOR.env.air ? ' ' : '' ) + '' + '' + '' + ''; var rcomboTpl = CKEDITOR.addTemplate( 'combo', template ); /** * Button UI element. * * @readonly * @property {String} [='richcombo'] * @member CKEDITOR */ CKEDITOR.UI_RICHCOMBO = 'richcombo'; /** * @class * @todo */ CKEDITOR.ui.richCombo = CKEDITOR.tools.createClass( { $: function( definition ) { // Copy all definition properties to this object. CKEDITOR.tools.extend( this, definition, // Set defaults. { // The combo won't participate in toolbar grouping. canGroup: false, title: definition.label, modes: { wysiwyg: 1 }, editorFocus: 1 } ); // We don't want the panel definition in this object. var panelDefinition = this.panel || {}; delete this.panel; this.id = CKEDITOR.tools.getNextNumber(); this.document = ( panelDefinition.parent && panelDefinition.parent.getDocument() ) || CKEDITOR.document; panelDefinition.className = 'cke_combopanel'; panelDefinition.block = { multiSelect: panelDefinition.multiSelect, attributes: panelDefinition.attributes }; panelDefinition.toolbarRelated = true; this._ = { panelDefinition: panelDefinition, items: {}, listeners: [] }; }, proto: { renderHtml: function( editor ) { var output = []; this.render( editor, output ); return output.join( '' ); }, /** * Renders the rich combo. * * @param {CKEDITOR.editor} editor The editor instance which this button is * to be used by. * @param {Array} output The output array that the HTML relative * to this button will be appended to. */ render: function( editor, output ) { var env = CKEDITOR.env, instance, selLocked; var id = 'cke_' + this.id; var clickFn = CKEDITOR.tools.addFunction( function( el ) { // Restore locked selection in Opera. if ( selLocked ) { editor.unlockSelection( 1 ); selLocked = 0; } instance.execute( el ); }, this ); var combo = this; instance = { id: id, combo: this, focus: function() { var element = CKEDITOR.document.getById( id ).getChild( 1 ); element.focus(); }, execute: function( el ) { var _ = combo._; if ( _.state == CKEDITOR.TRISTATE_DISABLED ) return; combo.createPanel( editor ); if ( _.on ) { _.panel.hide(); return; } combo.commit(); var value = combo.getValue(); if ( value ) _.list.mark( value ); else _.list.unmarkAll(); _.panel.showBlock( combo.id, new CKEDITOR.dom.element( el ), 4 ); }, clickFn: clickFn }; function updateState() { // Don't change state while richcombo is active (https://dev.ckeditor.com/ticket/11793). if ( this.getState() == CKEDITOR.TRISTATE_ON ) return; var state = this.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED; if ( editor.readOnly && !this.readOnly ) state = CKEDITOR.TRISTATE_DISABLED; this.setState( state ); this.setValue( '' ); // Let plugin to disable button. if ( state != CKEDITOR.TRISTATE_DISABLED && this.refresh ) this.refresh(); } // Update status when activeFilter, mode, selection or readOnly changes. this._.listeners.push( editor.on( 'activeFilterChange', updateState, this ) ); this._.listeners.push( editor.on( 'mode', updateState, this ) ); this._.listeners.push( editor.on( 'selectionChange', updateState, this ) ); // If this combo is sensitive to readOnly state, update it accordingly. !this.readOnly && this._.listeners.push( editor.on( 'readOnly', updateState, this ) ); var keyDownFn = CKEDITOR.tools.addFunction( function( ev, element ) { ev = new CKEDITOR.dom.event( ev ); var keystroke = ev.getKeystroke(); switch ( keystroke ) { case 13: // ENTER case 32: // SPACE case 40: // ARROW-DOWN // Show panel CKEDITOR.tools.callFunction( clickFn, element ); break; default: // Delegate the default behavior to toolbar button key handling. instance.onkey( instance, keystroke ); } // Avoid subsequent focus grab on editor document. ev.preventDefault(); } ); var focusFn = CKEDITOR.tools.addFunction( function() { instance.onfocus && instance.onfocus(); } ); selLocked = 0; // For clean up instance.keyDownFn = keyDownFn; var params = { id: id, name: this.name || this.command, label: this.label, title: this.title, cls: this.className || '', titleJs: env.gecko && !env.hc ? '' : ( this.title || '' ).replace( "'", '' ), keydownFn: keyDownFn, focusFn: focusFn, clickFn: clickFn }; rcomboTpl.output( params, output ); if ( this.onRender ) this.onRender(); return instance; }, createPanel: function( editor ) { if ( this._.panel ) return; var panelDefinition = this._.panelDefinition, panelBlockDefinition = this._.panelDefinition.block, panelParentElement = panelDefinition.parent || CKEDITOR.document.getBody(), namedPanelCls = 'cke_combopanel__' + this.name, panel = new CKEDITOR.ui.floatPanel( editor, panelParentElement, panelDefinition ), list = panel.addListBlock( this.id, panelBlockDefinition ), me = this; panel.onShow = function() { this.element.addClass( namedPanelCls ); me.setState( CKEDITOR.TRISTATE_ON ); me._.on = 1; me.editorFocus && !editor.focusManager.hasFocus && editor.focus(); if ( me.onOpen ) me.onOpen(); }; panel.onHide = function( preventOnClose ) { this.element.removeClass( namedPanelCls ); me.setState( me.modes && me.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED ); me._.on = 0; if ( !preventOnClose && me.onClose ) me.onClose(); }; panel.onEscape = function() { // Hide drop-down with focus returned. panel.hide( 1 ); }; list.onClick = function( value, marked ) { if ( me.onClick ) me.onClick.call( me, value, marked ); panel.hide(); }; this._.panel = panel; this._.list = list; panel.getBlock( this.id ).onHide = function() { me._.on = 0; me.setState( CKEDITOR.TRISTATE_OFF ); }; if ( this.init ) this.init(); }, setValue: function( value, text ) { this._.value = value; var textElement = this.document.getById( 'cke_' + this.id + '_text' ); if ( textElement ) { if ( !( value || text ) ) { text = this.label; textElement.addClass( 'cke_combo_inlinelabel' ); } else { textElement.removeClass( 'cke_combo_inlinelabel' ); } textElement.setText( typeof text != 'undefined' ? text : value ); } var newLabel = createLabel( typeof text != 'undefined' ? text : value, this.label ), labelElement = this.document.getById( 'cke_' + this.id + '_label' ); if ( labelElement ) { labelElement.setText( newLabel ); } function createLabel( newLabel, initialLabel ) { if ( newLabel === initialLabel ) { return newLabel; } return newLabel + ', ' + initialLabel; } }, getValue: function() { return this._.value || ''; }, unmarkAll: function() { this._.list.unmarkAll(); }, mark: function( value ) { this._.list.mark( value ); }, hideItem: function( value ) { this._.list.hideItem( value ); }, hideGroup: function( groupTitle ) { this._.list.hideGroup( groupTitle ); }, showAll: function() { this._.list.showAll(); }, /** * Adds an entry displayed inside the rich combo panel. * * @param {String} value * @param {String} html * @param {String} text */ add: function( value, html, text ) { this._.items[ value ] = text || value; this._.list.add( value, html, text ); }, startGroup: function( title ) { this._.list.startGroup( title ); }, commit: function() { if ( !this._.committed ) { this._.list.commit(); this._.committed = 1; CKEDITOR.ui.fire( 'ready', this ); } this._.committed = 1; }, setState: function( state ) { if ( this._.state == state ) return; var el = this.document.getById( 'cke_' + this.id ), linkEl = el.getElementsByTag( 'a' ).getItem( 0 ); el.setState( state, 'cke_combo' ); state == CKEDITOR.TRISTATE_DISABLED ? el.setAttribute( 'aria-disabled', true ) : el.removeAttribute( 'aria-disabled' ); if ( linkEl ) { linkEl.setAttribute( 'aria-expanded', state == CKEDITOR.TRISTATE_ON ); } this._.state = state; }, getState: function() { return this._.state; }, enable: function() { if ( this._.state == CKEDITOR.TRISTATE_DISABLED ) this.setState( this._.lastState ); }, disable: function() { if ( this._.state != CKEDITOR.TRISTATE_DISABLED ) { this._.lastState = this._.state; this.setState( CKEDITOR.TRISTATE_DISABLED ); } }, /** * Removes all listeners from a rich combo element. * * @since 4.11.0 */ destroy: function() { CKEDITOR.tools.array.forEach( this._.listeners, function( listener ) { listener.removeListener(); } ); this._.listeners = []; }, /** * Selects a rich combo item based on the first matching result from the given filter function. * The filter function takes an object as an argument with `value` and `text` fields. The values of these * fields match to arguments passed in the {@link #add} method. * In order to obtain a correct result with this method, it is required to open or initialize the rich combo panel. * * ```js * var richCombo = editor.ui.get( 'Font' ); * * // Required when 'richcombo' was never open in a given editor instance. * richCombo.createPanel( editor ); * * richCombo.select( function( item ) { * return item.value === 'Tahoma' || item.text === 'Tahoma'; * } ); * ``` * * @since 4.14.0 * @param {Function} callback The function should return `true` if a matching element is found. * @param {Object} callback.item An object containing the `value` and `text` fields which are compared by this callback. */ select: function( callback ) { if ( CKEDITOR.tools.isEmpty( this._.items ) ) { return; } for ( var value in this._.items ) { if ( callback( { value: value, text: this._.items[ value ] } ) ) { this.setValue( value ); return; } } } }, /** * Represents a rich combo handler object. * * @class CKEDITOR.ui.richCombo.handler * @singleton * @extends CKEDITOR.ui.handlerDefinition */ statics: { handler: { /** * Transforms a rich combo definition into a {@link CKEDITOR.ui.richCombo} instance. * * @param {Object} definition * @returns {CKEDITOR.ui.richCombo} */ create: function( definition ) { return new CKEDITOR.ui.richCombo( definition ); } } } } ); /** * @param {String} name * @param {Object} definition * @member CKEDITOR.ui * @todo */ CKEDITOR.ui.prototype.addRichCombo = function( name, definition ) { this.add( name, CKEDITOR.UI_RICHCOMBO, definition ); }; } )(); rt-5.0.10/devel/third-party/ckeditor-src/plugins/lineutils/0000755000201500020150000000000015203533227022330 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/lineutils/plugin.js0000664000201500020150000007055015203533227024175 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ /** * @fileOverview A set of utilities to find and create horizontal spaces in edited content. */ 'use strict'; ( function() { CKEDITOR.plugins.add( 'lineutils' ); /** * Determines a position relative to an element in DOM (before). * * @readonly * @property {Number} [=0] * @member CKEDITOR */ CKEDITOR.LINEUTILS_BEFORE = 1; /** * Determines a position relative to an element in DOM (after). * * @readonly * @property {Number} [=2] * @member CKEDITOR */ CKEDITOR.LINEUTILS_AFTER = 2; /** * Determines a position relative to an element in DOM (inside). * * @readonly * @property {Number} [=4] * @member CKEDITOR */ CKEDITOR.LINEUTILS_INSIDE = 4; /** * A utility that traverses the DOM tree and discovers elements * (relations) matching user-defined lookups. * * @private * @class CKEDITOR.plugins.lineutils.finder * @constructor Creates a Finder class instance. * @param {CKEDITOR.editor} editor Editor instance that the Finder belongs to. * @param {Object} def Finder's definition. * @since 4.3.0 */ function Finder( editor, def ) { CKEDITOR.tools.extend( this, { editor: editor, editable: editor.editable(), doc: editor.document, win: editor.window }, def, true ); this.inline = this.editable.isInline(); if ( !this.inline ) { this.frame = this.win.getFrame(); } this.target = this[ this.inline ? 'editable' : 'doc' ]; } Finder.prototype = { /** * Initializes searching for elements with every mousemove event fired. * To stop searching use {@link #stop}. * * @param {Function} [callback] Function executed on every iteration. */ start: function( callback ) { var that = this, editor = this.editor, doc = this.doc, el, elfp, x, y; var moveBuffer = CKEDITOR.tools.eventsBuffer( 50, function() { if ( editor.readOnly || editor.mode != 'wysiwyg' ) return; that.relations = {}; // Sometimes it happens that elementFromPoint returns null (especially on IE). // Any further traversal makes no sense if there's no start point. Abort. // Note: In IE8 elementFromPoint may return zombie nodes of undefined nodeType, // so rejecting those as well. if ( !( elfp = doc.$.elementFromPoint( x, y ) ) || !elfp.nodeType ) { return; } el = new CKEDITOR.dom.element( elfp ); that.traverseSearch( el ); if ( !isNaN( x + y ) ) { that.pixelSearch( el, x, y ); } callback && callback( that.relations, x, y ); } ); // Searching starting from element from point on mousemove. this.listener = this.editable.attachListener( this.target, 'mousemove', function( evt ) { x = evt.data.$.clientX; y = evt.data.$.clientY; moveBuffer.input(); } ); this.editable.attachListener( this.inline ? this.editable : this.frame, 'mouseout', function() { moveBuffer.reset(); } ); }, /** * Stops observing mouse events attached by {@link #start}. */ stop: function() { if ( this.listener ) { this.listener.removeListener(); } }, /** * Returns a range representing the relation, according to its element * and type. * * @param {Object} location Location containing a unique identifier and type. * @returns {CKEDITOR.dom.range} Range representing the relation. */ getRange: ( function() { var where = {}; where[ CKEDITOR.LINEUTILS_BEFORE ] = CKEDITOR.POSITION_BEFORE_START; where[ CKEDITOR.LINEUTILS_AFTER ] = CKEDITOR.POSITION_AFTER_END; where[ CKEDITOR.LINEUTILS_INSIDE ] = CKEDITOR.POSITION_AFTER_START; return function( location ) { var range = this.editor.createRange(); range.moveToPosition( this.relations[ location.uid ].element, where[ location.type ] ); return range; }; } )(), /** * Stores given relation in a {@link #relations} object. Processes the relation * to normalize and avoid duplicates. * * @param {CKEDITOR.dom.element} el Element of the relation. * @param {Number} type Relation, one of `CKEDITOR.LINEUTILS_AFTER`, `CKEDITOR.LINEUTILS_BEFORE`, `CKEDITOR.LINEUTILS_INSIDE`. */ store: ( function() { function merge( el, type, relations ) { var uid = el.getUniqueId(); if ( uid in relations ) { relations[ uid ].type |= type; } else { relations[ uid ] = { element: el, type: type }; } } return function( el, type ) { var alt; // Normalization to avoid duplicates: // CKEDITOR.LINEUTILS_AFTER becomes CKEDITOR.LINEUTILS_BEFORE of el.getNext(). if ( is( type, CKEDITOR.LINEUTILS_AFTER ) && isStatic( alt = el.getNext() ) && alt.isVisible() ) { merge( alt, CKEDITOR.LINEUTILS_BEFORE, this.relations ); type ^= CKEDITOR.LINEUTILS_AFTER; } // Normalization to avoid duplicates: // CKEDITOR.LINEUTILS_INSIDE becomes CKEDITOR.LINEUTILS_BEFORE of el.getFirst(). if ( is( type, CKEDITOR.LINEUTILS_INSIDE ) && isStatic( alt = el.getFirst() ) && alt.isVisible() ) { merge( alt, CKEDITOR.LINEUTILS_BEFORE, this.relations ); type ^= CKEDITOR.LINEUTILS_INSIDE; } merge( el, type, this.relations ); }; } )(), /** * Traverses the DOM tree towards root, checking all ancestors * with lookup rules, avoiding duplicates. Stores positive relations * in the {@link #relations} object. * * @param {CKEDITOR.dom.element} el Element which is the starting point. */ traverseSearch: function( el ) { var l, type, uid; // Go down DOM towards root (or limit). do { uid = el.$[ 'data-cke-expando' ]; // This element was already visited and checked. if ( uid && uid in this.relations ) { continue; } if ( el.equals( this.editable ) ) { return; } if ( isStatic( el ) ) { // Collect all addresses yielded by lookups for that element. for ( l in this.lookups ) { if ( ( type = this.lookups[ l ]( el ) ) ) { this.store( el, type ); } } } } while ( !isLimit( el ) && ( el = el.getParent() ) ); }, /** * Iterates vertically pixel-by-pixel within a given element starting * from given coordinates, searching for elements in the neighborhood. * Once an element is found it is processed by {@link #traverseSearch}. * * @param {CKEDITOR.dom.element} el Element which is the starting point. * @param {Number} [x] Horizontal mouse coordinate relative to the viewport. * @param {Number} [y] Vertical mouse coordinate relative to the viewport. */ pixelSearch: ( function() { var contains = CKEDITOR.env.ie || CKEDITOR.env.webkit ? function( el, found ) { return el.contains( found ); } : function( el, found ) { return !!( el.compareDocumentPosition( found ) & 16 ); }; // Iterates pixel-by-pixel from starting coordinates, moving by defined // step and getting elementFromPoint in every iteration. Iteration stops when: // * A valid element is found. // * Condition function returns `false` (i.e. reached boundaries of viewport). // * No element is found (i.e. coordinates out of viewport). // * Element found is ascendant of starting element. // // @param {Object} doc Native DOM document. // @param {Object} el Native DOM element. // @param {Number} xStart Horizontal starting coordinate to use. // @param {Number} yStart Vertical starting coordinate to use. // @param {Number} step Step of the algorithm. // @param {Function} condition A condition relative to current vertical coordinate. function iterate( el, xStart, yStart, step, condition ) { var y = yStart, tryouts = 0, found; while ( condition( y ) ) { y += step; // If we try and we try, and still nothing's found, let's end // that party. if ( ++tryouts == 25 ) { return; } found = this.doc.$.elementFromPoint( xStart, y ); // Nothing found. This is crazy... but... // It might be that a line, which is in different document, // covers that pixel (elementFromPoint is doc-sensitive). // Better let's have another try. if ( !found ) { continue; } // Still in the same element. else if ( found == el ) { tryouts = 0; continue; } // Reached the edge of an element and found an ancestor or... // A line, that covers that pixel. Better let's have another try. else if ( !contains( el, found ) ) { continue; } tryouts = 0; // Found a valid element. Stop iterating. if ( isStatic( ( found = new CKEDITOR.dom.element( found ) ) ) ) { return found; } } } return function( el, x, y ) { var paneHeight = this.win.getViewPaneSize().height, // Try to find an element iterating *up* from the starting point. neg = iterate.call( this, el.$, x, y, -1, function( y ) { return y > 0; } ), // Try to find an element iterating *down* from the starting point. pos = iterate.call( this, el.$, x, y, 1, function( y ) { return y < paneHeight; } ); if ( neg ) { this.traverseSearch( neg ); // Iterate towards DOM root until neg is a direct child of el. while ( !neg.getParent().equals( el ) ) { neg = neg.getParent(); } } if ( pos ) { this.traverseSearch( pos ); // Iterate towards DOM root until pos is a direct child of el. while ( !pos.getParent().equals( el ) ) { pos = pos.getParent(); } } // Iterate forwards starting from neg and backwards from // pos to harvest all children of el between those elements. // Stop when neg and pos meet each other or there's none of them. // TODO (?) reduce number of hops forwards/backwards. while ( neg || pos ) { if ( neg ) { neg = neg.getNext( isStatic ); } if ( !neg || neg.equals( pos ) ) { break; } this.traverseSearch( neg ); if ( pos ) { pos = pos.getPrevious( isStatic ); } if ( !pos || pos.equals( neg ) ) { break; } this.traverseSearch( pos ); } }; } )(), /** * Unlike {@link #traverseSearch}, it collects **all** elements from editable's DOM tree * and runs lookups for every one of them, collecting relations. * * @returns {Object} {@link #relations}. */ greedySearch: function() { this.relations = {}; var all = this.editable.getElementsByTag( '*' ), i = 0, el, type, l; while ( ( el = all.getItem( i++ ) ) ) { // Don't consider editable, as it might be inline, // and i.e. checking it's siblings is pointless. if ( el.equals( this.editable ) ) { continue; } // On IE8 element.getElementsByTagName returns comments... sic! (https://dev.ckeditor.com/ticket/13176) if ( el.type != CKEDITOR.NODE_ELEMENT ) { continue; } // Don't visit non-editable internals, for example widget's // guts (above wrapper, below nested). Still check editable limits, // as they are siblings with editable contents. if ( !el.hasAttribute( 'contenteditable' ) && el.isReadOnly() ) { continue; } if ( isStatic( el ) && el.isVisible() ) { // Collect all addresses yielded by lookups for that element. for ( l in this.lookups ) { if ( ( type = this.lookups[ l ]( el ) ) ) { this.store( el, type ); } } } } return this.relations; } /** * Relations express elements in DOM that match user-defined {@link #lookups}. * Every relation has its own `type` that determines whether * it refers to the space before, after or inside the `element`. * This object stores relations found by {@link #traverseSearch} or {@link #greedySearch}, structured * in the following way: * * relations: { * // Unique identifier of the element. * Number: { * // Element of this relation. * element: {@link CKEDITOR.dom.element} * // Conjunction of CKEDITOR.LINEUTILS_BEFORE, CKEDITOR.LINEUTILS_AFTER and CKEDITOR.LINEUTILS_INSIDE. * type: Number * }, * ... * } * * @property {Object} relations * @readonly */ /** * A set of user-defined functions used by Finder to check if an element * is a valid relation, belonging to {@link #relations}. * When the criterion is met, lookup returns a logical conjunction of `CKEDITOR.LINEUTILS_BEFORE`, * `CKEDITOR.LINEUTILS_AFTER` or `CKEDITOR.LINEUTILS_INSIDE`. * * Lookups are passed along with Finder's definition. * * lookups: { * 'some lookup': function( el ) { * if ( someCondition ) * return CKEDITOR.LINEUTILS_BEFORE; * }, * ... * } * * @property {Object} lookups */ }; /** * A utility that analyses relations found by * CKEDITOR.plugins.lineutils.finder and locates them * in the viewport as horizontal lines of specific coordinates. * * @private * @class CKEDITOR.plugins.lineutils.locator * @constructor Creates a Locator class instance. * @param {CKEDITOR.editor} editor Editor instance that Locator belongs to. * @since 4.3.0 */ function Locator( editor, def ) { CKEDITOR.tools.extend( this, def, { editor: editor }, true ); } Locator.prototype = { /** * Locates the Y coordinate for all types of every single relation and stores * them in an object. * * @param {Object} relations {@link CKEDITOR.plugins.lineutils.finder#relations}. * @returns {Object} {@link #locations}. */ locate: ( function() { function locateSibling( rel, type ) { var sib = rel.element[ type === CKEDITOR.LINEUTILS_BEFORE ? 'getPrevious' : 'getNext' ](); // Return the middle point between siblings. if ( sib && isStatic( sib ) ) { rel.siblingRect = sib.getClientRect(); if ( type == CKEDITOR.LINEUTILS_BEFORE ) { return ( rel.siblingRect.bottom + rel.elementRect.top ) / 2; } else { return ( rel.elementRect.bottom + rel.siblingRect.top ) / 2; } } // If there's no sibling, use the edge of an element. else { if ( type == CKEDITOR.LINEUTILS_BEFORE ) { return rel.elementRect.top; } else { return rel.elementRect.bottom; } } } return function( relations ) { var rel; this.locations = {}; for ( var uid in relations ) { rel = relations[ uid ]; rel.elementRect = rel.element.getClientRect(); if ( is( rel.type, CKEDITOR.LINEUTILS_BEFORE ) ) { this.store( uid, CKEDITOR.LINEUTILS_BEFORE, locateSibling( rel, CKEDITOR.LINEUTILS_BEFORE ) ); } if ( is( rel.type, CKEDITOR.LINEUTILS_AFTER ) ) { this.store( uid, CKEDITOR.LINEUTILS_AFTER, locateSibling( rel, CKEDITOR.LINEUTILS_AFTER ) ); } // The middle point of the element. if ( is( rel.type, CKEDITOR.LINEUTILS_INSIDE ) ) { this.store( uid, CKEDITOR.LINEUTILS_INSIDE, ( rel.elementRect.top + rel.elementRect.bottom ) / 2 ); } } return this.locations; }; } )(), /** * Calculates distances from every location to given vertical coordinate * and sorts locations according to that distance. * * @param {Number} y The vertical coordinate used for sorting, used as a reference. * @param {Number} [howMany] Determines the number of "closest locations" to be returned. * @returns {Array} Sorted, array representation of {@link #locations}. */ sort: ( function() { var locations, sorted, dist, i; function distance( y, uid, type ) { return Math.abs( y - locations[ uid ][ type ] ); } return function( y, howMany ) { locations = this.locations; sorted = []; for ( var uid in locations ) { for ( var type in locations[ uid ] ) { dist = distance( y, uid, type ); // An array is empty. if ( !sorted.length ) { sorted.push( { uid: +uid, type: type, dist: dist } ); } else { // Sort the array on fly when it's populated. for ( i = 0; i < sorted.length; i++ ) { if ( dist < sorted[ i ].dist ) { sorted.splice( i, 0, { uid: +uid, type: type, dist: dist } ); break; } } // Nothing was inserted, so the distance is bigger than // any of already calculated: push to the end. if ( i == sorted.length ) { sorted.push( { uid: +uid, type: type, dist: dist } ); } } } } if ( typeof howMany != 'undefined' ) { return sorted.slice( 0, howMany ); } else { return sorted; } }; } )(), /** * Stores the location in a collection. * * @param {Number} uid Unique identifier of the relation. * @param {Number} type One of `CKEDITOR.LINEUTILS_BEFORE`, `CKEDITOR.LINEUTILS_AFTER` and `CKEDITOR.LINEUTILS_INSIDE`. * @param {Number} y Vertical position of the relation. */ store: function( uid, type, y ) { if ( !this.locations[ uid ] ) { this.locations[ uid ] = {}; } this.locations[ uid ][ type ] = y; } /** * @readonly * @property {Object} locations */ }; var tipCss = { display: 'block', width: '0px', height: '0px', 'border-color': 'transparent', 'border-style': 'solid', position: 'absolute', top: '-6px' }, lineStyle = { height: '0px', 'border-top': '1px dashed red', position: 'absolute', 'z-index': 9999 }, lineTpl = '
            ' + ' ' + ' ' + '
            '; /** * A utility that draws horizontal lines in DOM according to locations * returned by CKEDITOR.plugins.lineutils.locator. * * @private * @class CKEDITOR.plugins.lineutils.liner * @constructor Creates a Liner class instance. * @param {CKEDITOR.editor} editor Editor instance that Liner belongs to. * @param {Object} def Liner's definition. * @since 4.3.0 */ function Liner( editor, def ) { var editable = editor.editable(); CKEDITOR.tools.extend( this, { editor: editor, editable: editable, inline: editable.isInline(), doc: editor.document, win: editor.window, container: CKEDITOR.document.getBody(), winTop: CKEDITOR.document.getWindow() }, def, true ); this.hidden = {}; this.visible = {}; if ( !this.inline ) { this.frame = this.win.getFrame(); } this.queryViewport(); // Callbacks must be wrapped. Otherwise they're not attached // to global DOM objects (i.e. topmost window) for every editor // because they're treated as duplicates. They belong to the // same prototype shared among Liner instances. var queryViewport = CKEDITOR.tools.bind( this.queryViewport, this ), hideVisible = CKEDITOR.tools.bind( this.hideVisible, this ), removeAll = CKEDITOR.tools.bind( this.removeAll, this ); editable.attachListener( this.winTop, 'resize', queryViewport ); editable.attachListener( this.winTop, 'scroll', queryViewport ); editable.attachListener( this.winTop, 'resize', hideVisible ); editable.attachListener( this.win, 'scroll', hideVisible ); editable.attachListener( this.inline ? editable : this.frame, 'mouseout', function( evt ) { var x = evt.data.$.clientX, y = evt.data.$.clientY; this.queryViewport(); // Check if mouse is out of the element (iframe/editable). if ( x <= this.rect.left || x >= this.rect.right || y <= this.rect.top || y >= this.rect.bottom ) { this.hideVisible(); } // Check if mouse is out of the top-window vieport. if ( x <= 0 || x >= this.winTopPane.width || y <= 0 || y >= this.winTopPane.height ) { this.hideVisible(); } }, this ); editable.attachListener( editor, 'resize', queryViewport ); editable.attachListener( editor, 'mode', removeAll ); editor.on( 'destroy', removeAll ); this.lineTpl = new CKEDITOR.template( lineTpl ).output( { lineStyle: CKEDITOR.tools.writeCssText( CKEDITOR.tools.extend( {}, lineStyle, this.lineStyle, true ) ), tipLeftStyle: CKEDITOR.tools.writeCssText( CKEDITOR.tools.extend( {}, tipCss, { left: '0px', 'border-left-color': 'red', 'border-width': '6px 0 6px 6px' }, this.tipCss, this.tipLeftStyle, true ) ), tipRightStyle: CKEDITOR.tools.writeCssText( CKEDITOR.tools.extend( {}, tipCss, { right: '0px', 'border-right-color': 'red', 'border-width': '6px 6px 6px 0' }, this.tipCss, this.tipRightStyle, true ) ) } ); } Liner.prototype = { /** * Permanently removes all lines (both hidden and visible) from DOM. */ removeAll: function() { var l; for ( l in this.hidden ) { this.hidden[ l ].remove(); delete this.hidden[ l ]; } for ( l in this.visible ) { this.visible[ l ].remove(); delete this.visible[ l ]; } }, /** * Hides a given line. * * @param {CKEDITOR.dom.element} line The line to be hidden. */ hideLine: function( line ) { var uid = line.getUniqueId(); line.hide(); this.hidden[ uid ] = line; delete this.visible[ uid ]; }, /** * Shows a given line. * * @param {CKEDITOR.dom.element} line The line to be shown. */ showLine: function( line ) { var uid = line.getUniqueId(); line.show(); this.visible[ uid ] = line; delete this.hidden[ uid ]; }, /** * Hides all visible lines. */ hideVisible: function() { for ( var l in this.visible ) { this.hideLine( this.visible[ l ] ); } }, /** * Shows a line at given location. * * @param {Object} location Location object containing the unique identifier of the relation * and its type. Usually returned by {@link CKEDITOR.plugins.lineutils.locator#sort}. * @param {Function} [callback] A callback to be called once the line is shown. */ placeLine: function( location, callback ) { var styles, line, l; // No style means that line would be out of viewport. if ( !( styles = this.getStyle( location.uid, location.type ) ) ) { return; } // Search for any visible line of a different hash first. // It's faster to re-position visible line than to show it. for ( l in this.visible ) { if ( this.visible[ l ].getCustomData( 'hash' ) !== this.hash ) { line = this.visible[ l ]; break; } } // Search for any hidden line of a different hash. if ( !line ) { for ( l in this.hidden ) { if ( this.hidden[ l ].getCustomData( 'hash' ) !== this.hash ) { this.showLine( ( line = this.hidden[ l ] ) ); break; } } } // If no line available, add the new one. if ( !line ) { this.showLine( ( line = this.addLine() ) ); } // Mark the line with current hash. line.setCustomData( 'hash', this.hash ); // Mark the line as visible. this.visible[ line.getUniqueId() ] = line; line.setStyles( styles ); callback && callback( line ); }, /** * Creates a style set to be used by the line, representing a particular * relation (location). * * @param {Number} uid Unique identifier of the relation. * @param {Number} type Type of the relation. * @returns {Object} An object containing styles. */ getStyle: function( uid, type ) { var rel = this.relations[ uid ], loc = this.locations[ uid ][ type ], styles = {}, hdiff; // Line should be between two elements. if ( rel.siblingRect ) { styles.width = Math.max( rel.siblingRect.width, rel.elementRect.width ); } // Line is relative to a single element. else { styles.width = rel.elementRect.width; } // Let's calculate the vertical position of the line. if ( this.inline ) { // (https://dev.ckeditor.com/ticket/13155) styles.top = loc + this.winTopScroll.y - this.rect.relativeY; } else { styles.top = this.rect.top + this.winTopScroll.y + loc; } // Check if line would be vertically out of the viewport. if ( styles.top - this.winTopScroll.y < this.rect.top || styles.top - this.winTopScroll.y > this.rect.bottom ) { return false; } // Now let's calculate the horizontal alignment (left and width). if ( this.inline ) { // (https://dev.ckeditor.com/ticket/13155) styles.left = rel.elementRect.left - this.rect.relativeX; } else { if ( rel.elementRect.left > 0 ) styles.left = this.rect.left + rel.elementRect.left; // H-scroll case. Left edge of element may be out of viewport. else { styles.width += rel.elementRect.left; styles.left = this.rect.left; } // H-scroll case. Right edge of element may be out of viewport. if ( ( hdiff = styles.left + styles.width - ( this.rect.left + this.winPane.width ) ) > 0 ) { styles.width -= hdiff; } } // Finally include horizontal scroll of the global window. styles.left += this.winTopScroll.x; // Append 'px' to style values. for ( var style in styles ) { styles[ style ] = CKEDITOR.tools.cssLength( styles[ style ] ); } return styles; }, /** * Adds a new line to DOM. * * @returns {CKEDITOR.dom.element} A brand-new line. */ addLine: function() { var line = CKEDITOR.dom.element.createFromHtml( this.lineTpl ); line.appendTo( this.container ); return line; }, /** * Assigns a unique hash to the instance that is later used * to tell unwanted lines from new ones. This method **must** be called * before a new set of relations is to be visualized so {@link #cleanup} * eventually hides obsolete lines. This is because lines * are re-used between {@link #placeLine} calls and the number of * necessary ones may vary depending on the number of relations. * * @param {Object} relations {@link CKEDITOR.plugins.lineutils.finder#relations}. * @param {Object} locations {@link CKEDITOR.plugins.lineutils.locator#locations}. */ prepare: function( relations, locations ) { this.relations = relations; this.locations = locations; this.hash = Math.random(); }, /** * Hides all visible lines that do not belong to current hash * and no longer represent relations (locations). * * See also: {@link #prepare}. */ cleanup: function() { var line; for ( var l in this.visible ) { line = this.visible[ l ]; if ( line.getCustomData( 'hash' ) !== this.hash ) { this.hideLine( line ); } } }, /** * Queries dimensions of the viewport, editable, frame etc. * that are used for correct positioning of the line. */ queryViewport: function() { this.winPane = this.win.getViewPaneSize(); this.winTopScroll = this.winTop.getScrollPosition(); this.winTopPane = this.winTop.getViewPaneSize(); // (https://dev.ckeditor.com/ticket/13155) this.rect = this.getClientRect( this.inline ? this.editable : this.frame ); }, /** * Returns `boundingClientRect` of an element, shifted by the position * of `container` when the container is not `static` (https://dev.ckeditor.com/ticket/13155). * * See also: {@link CKEDITOR.dom.element#getClientRect}. * * @param {CKEDITOR.dom.element} el A DOM element. * @returns {Object} A shifted rect, extended by `relativeY` and `relativeX` properties. */ getClientRect: function( el ) { var rect = el.getClientRect(), relativeContainerDocPosition = this.container.getDocumentPosition(), relativeContainerComputedPosition = this.container.getComputedStyle( 'position' ); // Static or not, those values are used to offset the position of the line so they cannot be undefined. rect.relativeX = rect.relativeY = 0; if ( relativeContainerComputedPosition != 'static' ) { // Remember the offset used to shift the clientRect. rect.relativeY = relativeContainerDocPosition.y; rect.relativeX = relativeContainerDocPosition.x; rect.top -= rect.relativeY; rect.bottom -= rect.relativeY; rect.left -= rect.relativeX; rect.right -= rect.relativeX; } return rect; } }; function is( type, flag ) { return type & flag; } var floats = { left: 1, right: 1, center: 1 }, positions = { absolute: 1, fixed: 1 }; function isElement( node ) { return node && node.type == CKEDITOR.NODE_ELEMENT; } function isFloated( el ) { return !!( floats[ el.getComputedStyle( 'float' ) ] || floats[ el.getAttribute( 'align' ) ] ); } function isPositioned( el ) { return !!positions[ el.getComputedStyle( 'position' ) ]; } function isLimit( node ) { return isElement( node ) && node.getAttribute( 'contenteditable' ) == 'true'; } function isStatic( node ) { return isElement( node ) && !isFloated( node ) && !isPositioned( node ); } /** * Global namespace storing definitions and global helpers for the Line Utilities plugin. * * @private * @class * @singleton * @since 4.3.0 */ CKEDITOR.plugins.lineutils = { finder: Finder, locator: Locator, liner: Liner }; } )(); rt-5.0.10/devel/third-party/ckeditor-src/plugins/lineutils/dev/0000755000201500020150000000000015203533227023106 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/lineutils/dev/magicfinger.html0000664000201500020150000002161315203533227026254 0ustar puckpuck Lineutils — CKEditor Sample

            CKEditor Samples » Lineutils

            Classic (iframe-based) Editor

            Inline Editor

            This table is the very first element of the document.
            We are still able to acces the space before it.
            This table is inside of a cell of another table.
            We can type either before or after it though.

            Two succesive horizontal lines (HR tags). We can access the space in between:



            1. This numbered list...
            2. ...is a neighbour of a horizontal line...
              1. Nested list!
            • We can type between the lists...
            • ...thanks to Magicline.

            Lorem ipsum dolor sit amet dui. Morbi vel turpis. Nullam et leo. Etiam rutrum, urna tellus dui vel tincidunt mattis egestas, justo fringilla vel, massa. Phasellus.

            Quisque iaculis, dui lectus varius vitae, tortor. Proin lacus. Pellentesque ac lacus. Aenean nonummy commodo nec, pede. Etiam blandit risus elit.

            Ut pretium. Vestibulum rutrum in, adipiscing elit. Sed in quam in purus sem vitae pede. Pellentesque bibendum, urna sem vel risus. Vivamus posuere metus. Aliquam gravida iaculis nisl. Nam enim. Aliquam erat ac lacus tellus ac felis.

            This text is wrapped in a DIV element. We can type after this element though.

            Extreme inline

            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

            Classic (iframe-based) Editor, H-scroll

            rt-5.0.10/devel/third-party/ckeditor-src/plugins/lineutils/dev/dnd.html0000664000201500020150000001741515203533227024553 0ustar puckpuck Widget Drag & Drop with Lineutils — CKEditor Sample

            CKEditor Samples » Widget Drag & Drop with Lineutils

            Classic (iframe-based) Editor

            Inline Editor

            This table is the very first element of the document.
            We are still able to acces the space before it.
            This table is inside of a cell of another table.
            We can type either before or after it though.


            1. This numbered list...
            2. ...is a neighbour of a horizontal line...
              1. Nested list!
            Saturn V
            Roll out of Saturn V on launch pad
            • We can type between the lists...
            • ...thanks to Magicline.

            Lorem ipsum dolor sit amet dui. Morbi vel turpis. Nullam et leo. Etiam rutrum, urna tellus dui vel tincidunt mattis egestas, justo fringilla vel, massa. Phasellus.

            Quisque iaculis, dui lectus varius vitae, tortor. Proin lacus. Pellentesque ac lacus. Aenean nonummy commodo nec, pede. Etiam blandit risus elit.

            Ut pretium. Vestibulum rutrum in, adipiscing elit. Sed in quam in purus sem vitae pede. Pellentesque bibendum, urna sem vel risus. Vivamus posuere metus. Aliquam gravida iaculis nisl. Nam enim. Aliquam erat ac lacus tellus ac felis.

            This text is wrapped in a DIV element. We can type after this element though.

            rt-5.0.10/devel/third-party/ckeditor-src/plugins/panel/0000755000201500020150000000000015203533227021417 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/panel/plugin.js0000664000201500020150000003076315203533227023266 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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 ) { 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 }; 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. (https://dev.ckeditor.com/ticket/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 (https://dev.ckeditor.com/ticket/4534). doc.on( 'keydown', function( evt ) { var keystroke = evt.data.getKeystroke(), dir = this.document.getById( this.id ).getAttribute( 'dir' ); // Arrow left and right should use native behaviour inside input element if ( evt.data.getTarget().getName() === 'input' && ( keystroke === 37 || keystroke === 39 ) ) { return; } // Delegate key processing to block. if ( this._.onKeyDown && this._.onKeyDown( keystroke ) === false ) { if ( !( evt.data.getTarget().getName() === 'input' && keystroke === 32 ) ) { // Don't prevent space when is pressed on a input filed. 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; }; 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 && !CKEDITOR.env.edge ) ? '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. (https://dev.ckeditor.com/ticket/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 focusables = this._.getItems(); var item = focusables.getItem( this._.focusIndex = index ); // Safari need focus on the iframe window first(https://dev.ckeditor.com/ticket/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 ); }, /** * Marks the first visible item or the one whose `aria-selected` attribute is set to `true`. * The latter has priority over the former. * * @private * @param beforeMark function to be executed just before marking. * Used in cases when any preparatory cleanup (like unmarking all items) would simultaneously * destroy the information that is needed to determine the focused item. */ markFirstDisplayed: function( beforeMark ) { var notDisplayed = function( element ) { return element.type == CKEDITOR.NODE_ELEMENT && element.getStyle( 'display' ) == 'none'; }, focusables = this._.getItems(), item, focused; for ( var i = focusables.count() - 1; i >= 0; i-- ) { item = focusables.getItem( i ); if ( !item.getAscendant( notDisplayed ) ) { focused = item; this._.focusIndex = i; } if ( item.getAttribute( 'aria-selected' ) == 'true' ) { focused = item; this._.focusIndex = i; break; } } if ( !focused ) { return; } if ( beforeMark ) { beforeMark(); } if ( CKEDITOR.env.webkit ) focused.getDocument().getWindow().focus(); focused.focus(); this.onMark && this.onMark( focused ); }, /** * Returns a `CKEDITOR.dom.nodeList` of block items. * * @returns {CKEDITOR.dom.nodeList} */ getItems: function() { return this.element.find( 'a,input' ); } }, 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, focusables = this._.getItems(), focusable; while ( ( focusable = focusables.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 ( focusable.getAttribute( '_cke_focus' ) && focusable.$.offsetWidth ) { this._.focusIndex = index; focusable.focus( true ); break; } } // If no focusable was found, cycle and restart from the top. (https://dev.ckeditor.com/ticket/11125) if ( !focusable && !noCycle ) { this._.focusIndex = -1; return this.onKeyDown( keystroke, 1 ); } return false; // Move backward. case 'prev': index = this._.focusIndex; focusables = this._.getItems(); while ( index > 0 && ( focusable = focusables.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 ( focusable.getAttribute( '_cke_focus' ) && focusable.$.offsetWidth ) { this._.focusIndex = index; focusable.focus( true ); break; } // Make sure focusable is null when the loop ends and nothing was // found (https://dev.ckeditor.com/ticket/11125). focusable = null; } // If no focusable was found, cycle and restart from the bottom. (https://dev.ckeditor.com/ticket/11125) if ( !focusable && !noCycle ) { this._.focusIndex = focusables.count(); return this.onKeyDown( keystroke, 1 ); } return false; case 'click': case 'mouseup': index = this._.focusIndex; focusable = index >= 0 && this._.getItems().getItem( index ); if ( focusable ) { // We must pass info about clicked button (#2857). focusable.fireEventHandler( keyAction, { button: CKEDITOR.tools.normalizeMouseButton( CKEDITOR.MOUSE_BUTTON_LEFT, true ) } ); } 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-5.0.10/devel/third-party/ckeditor-src/plugins/floatpanel/0000755000201500020150000000000015203533226022444 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/floatpanel/plugin.js0000664000201500020150000005003615203533226024306 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.add( 'floatpanel', { requires: 'panel' } ); ( function() { var panels = {}; function getPanel( editor, doc, parentElement, definition, level ) { // Generates the panel key: docId-eleId-skinName-langDir[-uiColor][-CSSs][-level] var key = CKEDITOR.tools.genKey( doc.getUniqueId(), parentElement.getUniqueId(), editor.lang.dir, editor.uiColor || '', definition.css || '', level || '' ), panel = panels[ key ]; if ( !panel ) { panel = panels[ key ] = new CKEDITOR.ui.panel( doc, definition ); panel.element = parentElement.append( CKEDITOR.dom.element.createFromHtml( panel.render( editor ), doc ) ); panel.element.setStyles( { display: 'none', position: 'absolute' } ); } return panel; } /** * Represents a floating panel UI element. * * It is reused by rich combos, color combos, menus, etc. * and it renders its content using {@link CKEDITOR.ui.panel}. * * @class * @todo */ CKEDITOR.ui.floatPanel = CKEDITOR.tools.createClass( { /** * Creates a floatPanel class instance. * * @constructor * @param {CKEDITOR.editor} editor * @param {CKEDITOR.dom.element} parentElement * @param {Object} definition Definition of the panel that will be floating. * @param {Number} level */ $: function( editor, parentElement, definition, level ) { definition.forceIFrame = 1; // In case of editor with floating toolbar append panels that should float // to the main UI element. if ( definition.toolbarRelated && editor.elementMode == CKEDITOR.ELEMENT_MODE_INLINE ) parentElement = CKEDITOR.document.getById( 'cke_' + editor.name ); var doc = parentElement.getDocument(), panel = getPanel( editor, doc, parentElement, definition, level || 0 ), element = panel.element, iframe = element.getFirst(), that = this; // Disable native browser menu. (https://dev.ckeditor.com/ticket/4825) element.disableContextMenu(); this.element = element; this._ = { editor: editor, // The panel that will be floating. panel: panel, parentElement: parentElement, definition: definition, document: doc, iframe: iframe, children: [], dir: editor.lang.dir, showBlockParams: null, markFirst: definition.markFirst !== undefined ? definition.markFirst : true }; editor.on( 'mode', hide ); editor.on( 'resize', hide ); // When resize of the window is triggered floatpanel should be repositioned according to new dimensions. // https://dev.ckeditor.com/ticket/11724. Fixes issue with undesired panel hiding on Android and iOS. doc.getWindow().on( 'resize', function() { this.reposition(); }, this ); // We need a wrapper because events implementation doesn't allow to attach // one listener more than once for the same event on the same object. // Remember that floatPanel#hide is shared between all instances. function hide() { that.hide(); } }, proto: { /** * @todo */ addBlock: function( name, block ) { return this._.panel.addBlock( name, block ); }, /** * @todo */ addListBlock: function( name, multiSelect ) { return this._.panel.addListBlock( name, multiSelect ); }, /** * @todo */ getBlock: function( name ) { return this._.panel.getBlock( name ); }, /** * Shows the panel block. * * @param {String} name * @param {CKEDITOR.dom.element} offsetParent Positioned parent. * @param {Number} corner * * * For LTR (left to right) oriented editor: * * `1` = top-left * * `2` = top-right * * `3` = bottom-right * * `4` = bottom-left * * For RTL (right to left): * * `1` = top-right * * `2` = top-left * * `3` = bottom-left * * `4` = bottom-right * * @param {Number} [offsetX=0] * @param {Number} [offsetY=0] * @param {Function} [callback] A callback function executed when block positioning is done. * @todo what do exactly these params mean (especially corner)? */ showBlock: function( name, offsetParent, corner, offsetX, offsetY, callback ) { var panel = this._.panel, block = panel.showBlock( name ); this._.showBlockParams = [].slice.call( arguments ); this.allowBlur( false ); // Record from where the focus is when open panel. var editable = this._.editor.editable(); this._.returnFocus = editable.hasFocus ? editable : new CKEDITOR.dom.element( CKEDITOR.document.$.activeElement ); this._.hideTimeout = 0; var element = this.element, iframe = this._.iframe, // Edge prefers iframe's window to the iframe, just like the rest of the browsers (https://dev.ckeditor.com/ticket/13143). focused = CKEDITOR.env.ie && !CKEDITOR.env.edge ? iframe : new CKEDITOR.dom.window( iframe.$.contentWindow ), doc = element.getDocument(), positionedAncestor = this._.parentElement.getPositionedAncestor(), position = offsetParent.getDocumentPosition( doc ), positionedAncestorPosition = positionedAncestor ? positionedAncestor.getDocumentPosition( doc ) : { x: 0, y: 0 }, rtl = this._.dir == 'rtl', left = position.x + ( offsetX || 0 ) - positionedAncestorPosition.x, top = position.y + ( offsetY || 0 ) - positionedAncestorPosition.y; // Floating panels are off by (-1px, 0px) in RTL mode. (https://dev.ckeditor.com/ticket/3438) if ( rtl && ( corner == 1 || corner == 4 ) ) left += offsetParent.$.offsetWidth; else if ( !rtl && ( corner == 2 || corner == 3 ) ) left += offsetParent.$.offsetWidth - 1; if ( corner == 3 || corner == 4 ) top += offsetParent.$.offsetHeight - 1; // Memorize offsetParent by it's ID. this._.panel._.offsetParentId = offsetParent.getId(); element.setStyles( { top: top + 'px', left: 0, display: '' } ); // Don't use display or visibility style because we need to // calculate the rendering layout later and focus the element. element.setOpacity( 0 ); // To allow the context menu to decrease back their width element.getFirst().removeStyle( 'width' ); // Report to focus manager. this._.editor.focusManager.add( focused ); // Configure the IFrame blur event. Do that only once. if ( !this._.blurSet ) { // With addEventListener compatible browsers, we must // useCapture when registering the focus/blur events to // guarantee they will be firing in all situations. (https://dev.ckeditor.com/ticket/3068, https://dev.ckeditor.com/ticket/3222 ) CKEDITOR.event.useCapture = true; focused.on( 'blur', function( ev ) { // As we are using capture to register the listener, // the blur event may get fired even when focusing // inside the window itself, so we must ensure the // target is out of it. if ( !this.allowBlur() || ev.data.getPhase() != CKEDITOR.EVENT_PHASE_AT_TARGET ) return; if ( this.visible && !this._.activeChild ) { // [iOS] Allow hide to be prevented if touch is bound // to any parent of the iframe blur happens before touch (https://dev.ckeditor.com/ticket/10714). if ( CKEDITOR.env.iOS ) { if ( !this._.hideTimeout ) this._.hideTimeout = CKEDITOR.tools.setTimeout( doHide, 0, this ); } else { doHide.call( this ); } } function doHide() { // Panel close is caused by user's navigating away the focus, e.g. click outside the panel. // DO NOT restore focus in this case. delete this._.returnFocus; this.hide(); } }, this ); focused.on( 'focus', function() { this._.focused = true; this.hideChild(); this.allowBlur( true ); }, this ); // [iOS] if touch is bound to any parent of the iframe blur // happens twice before touchstart and before touchend (https://dev.ckeditor.com/ticket/10714). if ( CKEDITOR.env.iOS ) { // Prevent false hiding on blur. // We don't need to return focus here because touchend will fire anyway. // If user scrolls and pointer gets out of the panel area touchend will also fire. focused.on( 'touchstart', function() { clearTimeout( this._.hideTimeout ); }, this ); // Set focus back to handle blur and hide panel when needed. focused.on( 'touchend', function() { this._.hideTimeout = 0; this.focus(); }, this ); } CKEDITOR.event.useCapture = false; this._.blurSet = 1; } panel.onEscape = CKEDITOR.tools.bind( function( keystroke ) { if ( this.onEscape && this.onEscape( keystroke ) === false ) return false; }, this ); CKEDITOR.tools.setTimeout( function() { var panelLoad = CKEDITOR.tools.bind( function() { var target = element; // Reset panel width as the new content can be narrower // than the old one. (https://dev.ckeditor.com/ticket/9355) target.removeStyle( 'width' ); if ( block.autoSize ) { var panelDoc = block.element.getDocument(), width = ( ( CKEDITOR.env.webkit || CKEDITOR.env.edge ) ? block.element : panelDoc.getBody() ).$.scrollWidth; // Account for extra height needed due to IE quirks box model bug: // http://en.wikipedia.org/wiki/Internet_Explorer_box_model_bug // (https://dev.ckeditor.com/ticket/3426) if ( CKEDITOR.env.ie && CKEDITOR.env.quirks && width > 0 ) width += ( target.$.offsetWidth || 0 ) - ( target.$.clientWidth || 0 ) + 3; // Add some extra pixels to improve the appearance. width += 10; target.setStyle( 'width', width + 'px' ); var height = block.element.$.scrollHeight; // Account for extra height needed due to IE quirks box model bug: // http://en.wikipedia.org/wiki/Internet_Explorer_box_model_bug // (https://dev.ckeditor.com/ticket/3426) if ( CKEDITOR.env.ie && CKEDITOR.env.quirks && height > 0 ) height += ( target.$.offsetHeight || 0 ) - ( target.$.clientHeight || 0 ) + 3; target.setStyle( 'height', height + 'px' ); // Fix IE < 8 visibility. panel._.currentBlock.element.setStyle( 'display', 'none' ).removeStyle( 'display' ); } else { target.removeStyle( 'height' ); } // Flip panel layout horizontally in RTL with known width. if ( rtl ) left -= element.$.offsetWidth; // Pop the style now for measurement. element.setStyle( 'left', left + 'px' ); /* panel layout smartly fit the viewport size. */ var panelElement = panel.element, panelWindow = panelElement.getWindow(), rect = element.$.getBoundingClientRect(), viewportSize = panelWindow.getViewPaneSize(); // Compensation for browsers that dont support "width" and "height". var rectWidth = rect.width || rect.right - rect.left, rectHeight = rect.height || rect.bottom - rect.top; // Check if default horizontal layout is impossible. var spaceAfter = rtl ? rect.right : viewportSize.width - rect.left, spaceBefore = rtl ? viewportSize.width - rect.right : rect.left; if ( rtl ) { if ( spaceAfter < rectWidth ) { // Flip to show on right. if ( spaceBefore > rectWidth ) left += rectWidth; // Align to window left. else if ( viewportSize.width > rectWidth ) left = left - rect.left; // Align to window right, never cutting the panel at right. else left = left - rect.right + viewportSize.width; } } else if ( spaceAfter < rectWidth ) { // Flip to show on left. if ( spaceBefore > rectWidth ) left -= rectWidth; // Align to window right. else if ( viewportSize.width > rectWidth ) left = left - rect.right + viewportSize.width; // Align to window left, never cutting the panel at left. else left = left - rect.left; } // Check if the default vertical layout is possible. var spaceBelow = viewportSize.height - rect.top, spaceAbove = rect.top; if ( spaceBelow < rectHeight ) { // Flip to show above. if ( spaceAbove > rectHeight ) top -= rectHeight; // Align to window bottom. else if ( viewportSize.height > rectHeight ) top = top - rect.bottom + viewportSize.height; // Align to top, never cutting the panel at top. else top = top - rect.top; } // If IE is in RTL, we have troubles with absolute // position and horizontal scrolls. Here we have a // series of hacks to workaround it. (https://dev.ckeditor.com/ticket/6146) if ( CKEDITOR.env.ie && !CKEDITOR.env.edge ) { var offsetParent = element.$.offsetParent && new CKEDITOR.dom.element( element.$.offsetParent ), scrollParent = offsetParent; // Quirks returns , but standards returns . if ( scrollParent && scrollParent.getName() == 'html' ) { scrollParent = scrollParent.getDocument().getBody(); } if ( scrollParent && scrollParent.getComputedStyle( 'direction' ) == 'rtl' ) { // For IE8, there is not much logic on this, but it works. if ( CKEDITOR.env.ie8Compat ) { left -= element.getDocument().getDocumentElement().$.scrollLeft * 2; } else { left -= ( offsetParent.$.scrollWidth - offsetParent.$.clientWidth ); } } } // Trigger the onHide event of the previously active panel to prevent // incorrect styles from being applied (https://dev.ckeditor.com/ticket/6170) var innerElement = element.getFirst(), activePanel; if ( ( activePanel = innerElement.getCustomData( 'activePanel' ) ) ) activePanel.onHide && activePanel.onHide.call( this, 1 ); innerElement.setCustomData( 'activePanel', this ); element.setStyles( { top: top + 'px', left: left + 'px' } ); element.setOpacity( 1 ); callback && callback(); }, this ); panel.isLoaded ? panelLoad() : panel.onLoad = panelLoad; CKEDITOR.tools.setTimeout( function() { var scrollTop = CKEDITOR.env.webkit && CKEDITOR.document.getWindow().getScrollPosition().y; // Focus the panel frame first, so blur gets fired. this.focus(); // Focus the block now. block.element.focus(); // https://dev.ckeditor.com/ticket/10623, https://dev.ckeditor.com/ticket/10951 - restore the viewport's scroll position after focusing list element. if ( CKEDITOR.env.webkit ) CKEDITOR.document.getBody().$.scrollTop = scrollTop; // We need this get fired manually because of unfired focus() function. this.allowBlur( true ); // Ensure that the first item is focused (https://dev.ckeditor.com/ticket/16804). if ( this._.markFirst ) { if ( CKEDITOR.env.ie ) { CKEDITOR.tools.setTimeout( function() { block.markFirstDisplayed ? block.markFirstDisplayed() : block._.markFirstDisplayed(); }, 0 ); } else { block.markFirstDisplayed ? block.markFirstDisplayed() : block._.markFirstDisplayed(); } } this._.editor.fire( 'panelShow', this ); }, 0, this ); }, CKEDITOR.env.air ? 200 : 0, this ); this.visible = 1; if ( this.onShow ) this.onShow.call( this ); }, /** * Repositions the panel with the same parameters that were used in the last {@link #showBlock} call. * * @since 4.5.4 */ reposition: function() { var blockParams = this._.showBlockParams; if ( this.visible && this._.showBlockParams ) { this.hide(); this.showBlock.apply( this, blockParams ); } }, /** * Restores the last focused element or simply focuses the panel window. */ focus: function() { // Webkit requires to blur any previous focused page element, in // order to properly fire the "focus" event. if ( CKEDITOR.env.webkit ) { var active = CKEDITOR.document.getActive(); active && !active.equals( this._.iframe ) && active.$.blur(); } // Restore last focused element or simply focus panel window. var focus = this._.lastFocused || this._.iframe.getFrameDocument().getWindow(); focus.focus(); }, /** * @todo */ blur: function() { var doc = this._.iframe.getFrameDocument(), active = doc.getActive(); active && active.is( 'a' ) && ( this._.lastFocused = active ); }, /** * Hides the panel. * * @todo */ hide: function( returnFocus ) { if ( this.visible && ( !this.onHide || this.onHide.call( this ) !== true ) ) { this.hideChild(); // Blur previously focused element. (https://dev.ckeditor.com/ticket/6671) CKEDITOR.env.gecko && this._.iframe.getFrameDocument().$.activeElement.blur(); this.element.setStyle( 'display', 'none' ); this.visible = 0; this.element.getFirst().removeCustomData( 'activePanel' ); // Return focus properly. (https://dev.ckeditor.com/ticket/6247) var focusReturn = returnFocus && this._.returnFocus; if ( focusReturn ) { // Webkit requires focus moved out panel iframe first. if ( CKEDITOR.env.webkit && focusReturn.type ) focusReturn.getWindow().$.focus(); focusReturn.focus(); } delete this._.lastFocused; this._.showBlockParams = null; this._.editor.fire( 'panelHide', this ); } }, /** * @todo */ allowBlur: function( allow ) { // Prevent editor from hiding the panel. (https://dev.ckeditor.com/ticket/3222) var panel = this._.panel; if ( allow !== undefined ) panel.allowBlur = allow; return panel.allowBlur; }, /** * Shows the specified panel as a child of one block of this one. * * @param {CKEDITOR.ui.floatPanel} panel * @param {String} blockName * @param {CKEDITOR.dom.element} offsetParent Positioned parent. * @param {Number} corner * * * For LTR (left to right) oriented editor: * * `1` = top-left * * `2` = top-right * * `3` = bottom-right * * `4` = bottom-left * * For RTL (right to left): * * `1` = top-right * * `2` = top-left * * `3` = bottom-left * * `4` = bottom-right * * @param {Number} [offsetX=0] * @param {Number} [offsetY=0] * @todo */ showAsChild: function( panel, blockName, offsetParent, corner, offsetX, offsetY ) { // Skip reshowing of child which is already visible. if ( this._.activeChild == panel && panel._.panel._.offsetParentId == offsetParent.getId() ) return; this.hideChild(); panel.onHide = CKEDITOR.tools.bind( function() { // Use a timeout, so we give time for this menu to get // potentially focused. CKEDITOR.tools.setTimeout( function() { if ( !this._.focused ) this.hide(); }, 0, this ); }, this ); this._.activeChild = panel; this._.focused = false; panel.showBlock( blockName, offsetParent, corner, offsetX, offsetY ); this.blur(); /* https://dev.ckeditor.com/ticket/3767 IE: Second level menu may not have borders */ if ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) { setTimeout( function() { panel.element.getChild( 0 ).$.style.cssText += ''; }, 100 ); } }, /** * @todo */ hideChild: function( restoreFocus ) { var activeChild = this._.activeChild; if ( activeChild ) { delete activeChild.onHide; delete this._.activeChild; activeChild.hide(); // At this point focus should be moved back to parent panel. restoreFocus && this.focus(); } } } } ); CKEDITOR.on( 'instanceDestroyed', function() { var isLastInstance = CKEDITOR.tools.isEmpty( CKEDITOR.instances ); for ( var i in panels ) { var panel = panels[ i ]; // Safe to destroy it since there're no more instances.(https://dev.ckeditor.com/ticket/4241) if ( isLastInstance ) panel.destroy(); // Panel might be used by other instances, just hide them.(https://dev.ckeditor.com/ticket/4552) else panel.element.hide(); } // Remove the registration. isLastInstance && ( panels = {} ); } ); } )(); rt-5.0.10/devel/third-party/ckeditor-src/plugins/notificationaggregator/0000755000201500020150000000000015203533227025051 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/notificationaggregator/plugin.js0000664000201500020150000003537715203533227026726 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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.0 * @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.0 * @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-5.0.10/devel/third-party/ckeditor-src/plugins/table/0000755000201500020150000000000015203533231021402 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/table/plugin.js0000775000201500020150000001147215203533231023250 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.add( 'table', { requires: 'dialog', // jscs:disable maximumLineLength lang: 'af,ar,az,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,es-mx,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,oc,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,border-collapse}[align,border,cellpadding,cellspacing,summary];' + 'caption tbody thead tfoot;' + 'th td tr[scope];' + 'td{border*,background-color,vertical-align,width,height}[colspan,rowspan];' + ( editor.plugins.dialogadvtab ? 'table' + editor.plugins.dialogadvtab.allowedContent() : '' ), requiredContent: 'table', contentTransformations: [ [ 'table{width}: sizeToStyle', 'table[width]: sizeToAttribute' ], [ 'td: splitBorderShorthand' ], [ { element: 'table', right: function( element ) { if ( element.styles ) { var parsedStyle; if ( element.styles.border ) { parsedStyle = CKEDITOR.tools.style.parse.border( element.styles.border ); } else if ( CKEDITOR.env.ie && CKEDITOR.env.version === 8 ) { var styleData = element.styles; // Workaround for IE8 browser. It transforms CSS border shorthand property // to the longer one, consisting of border-top, border-right, etc. We have to check // if all those properties exists and have the same value (#566). if ( styleData[ 'border-left' ] && styleData[ 'border-left' ] === styleData[ 'border-right' ] && styleData[ 'border-right' ] === styleData[ 'border-top' ] && styleData[ 'border-top' ] === styleData[ 'border-bottom' ] ) { parsedStyle = CKEDITOR.tools.style.parse.border( styleData[ 'border-top' ] ); } } if ( parsedStyle && parsedStyle.style && parsedStyle.style === 'solid' && parsedStyle.width && parseFloat( parsedStyle.width ) !== 0 ) { element.attributes.border = 1; } if ( element.styles[ 'border-collapse' ] == 'collapse' ) { element.attributes.cellspacing = 0; } } } } ] ] } ) ); 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) //(https://dev.ckeditor.com/ticket/5416, https://dev.ckeditor.com/ticket/6289, https://dev.ckeditor.com/ticket/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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/0000755000201500020150000000000015203533231022323 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/zh.js0000664000201500020150000000430715203533231023310 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'é é¦–', columnHeader: '欄標題', rowHeader: '列標題', yes: '是', no: 'å¦', invalidWidth: '儲存格寬度必須為數字。', invalidHeight: '儲存格高度必須為數字。', invalidRowSpan: '行全長必須是整數。', invalidColSpan: '列全長必須是整數。', chooseColor: '鏿“‡' }, cellPad: '儲存格邊è·', cellSpace: '儲存格間è·', column: { menu: '列', insertBefore: '左方æ’入列', insertAfter: '峿–¹æ’入列', deleteColumn: '刪除列' }, columns: '列', deleteTable: '刪除表格', headers: 'é é¦–', headersBoth: 'åŒæ™‚', headersColumn: '第一列', headersNone: 'ç„¡', headersRow: '第一行', heightUnit: '高度單ä½', invalidBorder: '框線大å°å¿…須是整數。', invalidCellPadding: '儲存格邊è·å¿…須為正數。', invalidCellSpacing: '儲存格間è·å¿…須為正數。', invalidCols: '列數須為大於 0 的正整數。', invalidHeight: '表格高度必須為數字。', invalidRows: '行數須為大於 0 的正整數。', invalidWidth: '表格寬度必須為數字。', menu: '表格屬性', row: { menu: '行', insertBefore: '上方æ’入行', insertAfter: '下方æ’入行', deleteRow: '刪除行' }, rows: '行', summary: '總çµ', title: '表格屬性', toolbar: '表格', widthPc: '百分比', widthPx: 'åƒç´ ', widthUnit: '寬度單ä½' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/nb.js0000664000201500020150000000455115203533231023267 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/eo.js0000664000201500020150000000473615203533231023300 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/es.js0000664000201500020150000000516115203533231023275 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/ro.js0000664000201500020150000000510615203533231023305 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/hr.js0000664000201500020150000000452315203533231023300 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/it.js0000664000201500020150000000505415203533231023303 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Intestazione colonna', rowHeader: 'Intestazione riga', 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', heightUnit: 'unità altezza', 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/de-ch.js0000664000201500020150000000506115203533231023645 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'table', 'de-ch', { border: 'Rahmengrösse', 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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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 aussen', 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', heightUnit: 'Höheneinheit', invalidBorder: 'Die Rahmenbreite muss eine Zahl sein.', invalidCellPadding: 'Der Zellenabstand innen muss eine positive Zahl sein.', invalidCellSpacing: 'Der Zellenabstand aussen muss eine positive Zahl sein.', invalidCols: 'Die Anzahl der Spalten muss grösser als 0 sein..', invalidHeight: 'Die Tabellenbreite muss eine Zahl sein.', invalidRows: 'Die Anzahl der Zeilen muss grösser 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: 'Breiteneinheit' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/sk.js0000664000201500020150000000506415203533231023305 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'table', 'sk', { border: 'Šírka orámovania', 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: 'Zalamovanie riadkov', hAlign: 'Horizontálne zarovnanie', vAlign: 'Vertikálne zarovnanie', alignBaseline: 'Základná Äiara (baseline)', bgColor: 'Farba pozadia', borderColor: 'Farba orámovania', data: 'Dáta', header: 'HlaviÄka', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'jednotka výšky', invalidBorder: 'Šírka orámovania 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/az.js0000664000201500020150000000526615203533231023306 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'table', 'az', { border: 'SÉ™rhÉ™dlÉ™rin eni', caption: 'CÉ™dvÉ™lin baÅŸlığı', cell: { menu: 'Xana', insertBefore: 'Burdan É™vvÉ™lÉ™ xanası çək', insertAfter: 'Burdan sonra xanası çək', deleteCell: 'Xanaları sil', merge: 'Xanaları birləşdir', mergeRight: 'SaÄŸdan birləşdir', mergeDown: 'Soldan birləşdir', splitHorizontal: 'Üfüqi böl', splitVertical: 'Åžaquli böl', title: 'Xanaların seçimlÉ™ri', cellType: 'Xana növü', rowSpan: 'SÉ™tirlÉ™ri birləşdir', colSpan: 'Sütunları birləşdir', wordWrap: 'SÉ™tirlÉ™rin sınması', hAlign: 'Üfüqi düzlÉ™ndirmÉ™', vAlign: 'Åžaquli düzlÉ™ndirmÉ™', alignBaseline: 'MÉ™tn xÉ™tti', bgColor: 'Doldurma rÉ™ngi', borderColor: 'SÉ™rhÉ™din rÉ™ngi', data: 'MÉ™lumatlar', header: 'BaÅŸlıq', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING yes: 'BÉ™li', no: 'Xeyr', invalidWidth: 'Xanasın eni rÉ™qÉ™m olmalıdır.', invalidHeight: 'Xanasın hündürlüyü rÉ™qÉ™m olmalıdır.', invalidRowSpan: 'Birləşdirdiyiniz sütun xanaların sayı tam vÉ™ müsbÉ™t rÉ™qÉ™m olmalıdır.', invalidColSpan: 'Birləşdirdiyiniz sÉ™tir xanaların sayı tam vÉ™ müsbÉ™t rÉ™qÉ™m olmalıdır.', chooseColor: 'Seç' }, cellPad: 'Xanalardakı kÉ™nar boÅŸluqlar', cellSpace: 'Xanalararası interval', column: { menu: 'Sütun', insertBefore: 'Sola sütun É™lavÉ™ et', insertAfter: 'SaÄŸa sütun É™lavÉ™ et', deleteColumn: 'Sütunları sil' }, columns: 'Sütunlar', deleteTable: 'CÉ™dvÉ™li sil', headers: 'BaÅŸlıqlar', headersBoth: 'HÉ™r ikisi', headersColumn: 'Birinci sütun', headersNone: 'yox', headersRow: 'Birinci sÉ™tir', heightUnit: 'height unit', // MISSING invalidBorder: 'SÉ™rhÉ™dlÉ™rin eni müsbÉ™t rÉ™qÉ™m olmalıdır.', invalidCellPadding: 'Xanalardakı kÉ™nar boÅŸluqlar müsbÉ™t rÉ™qÉ™m olmalıdır.', invalidCellSpacing: 'Xanalararası interval müsbÉ™t rÉ™qÉ™m olmalıdır.', invalidCols: 'Sütunlarin sayı tam vÉ™ müsbÉ™t olmalıdır.', invalidHeight: 'CÉ™dvÉ™lin hündürlüyü rÉ™qÉ™m olmalıdır.', invalidRows: 'SÉ™tirlÉ™tin sayı tam vÉ™ müsbÉ™t olmalıdır.', invalidWidth: 'CÉ™dvÉ™lin eni rÉ™qÉ™m olmalıdır.', menu: 'CÉ™dvÉ™l alÉ™tlÉ™ri', row: { menu: 'SÉ™tir', insertBefore: 'Yuxarıya sÉ™tir É™lavÉ™ et', insertAfter: 'AÅŸağıya sÉ™tir É™lavÉ™ et', deleteRow: 'SÉ™tirlÉ™ri sil' }, rows: 'SÉ™tirlÉ™r', summary: 'XülasÉ™', title: 'CÉ™dvÉ™l alÉ™tlÉ™ri', toolbar: 'CÉ™dvÉ™l', widthPc: 'faiz', widthPx: 'piksel', widthUnit: 'en vahidi' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/pt.js0000664000201500020150000000511315203533231023306 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'Linhas na célula', colSpan: 'Colunas na célula', wordWrap: 'Moldar texto', hAlign: 'Alinhamento horizontal', vAlign: 'Alinhamento vertical', alignBaseline: 'Linha base', bgColor: 'Cor de fundo', borderColor: 'Cor da margem', data: 'Dados', header: 'Cabeçalho', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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 linhas da célula devem ser um número inteiro.', invalidColSpan: 'As colunas da célula devem 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', heightUnit: 'height unit', // MISSING 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: 'Resumo', title: 'Propriedades da tabela', toolbar: 'Tabela', widthPc: 'percentagem', widthPx: 'píxeis', widthUnit: 'unidade da largura' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/si.js0000664000201500020150000000642015203533231023300 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'à·à·“ර්ෂක', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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: 'පළමූ පේළිය', heightUnit: 'height unit', // 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', // 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/ko.js0000664000201500020150000000452015203533231023275 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: '머릿칸', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING yes: '예', no: '아니오', invalidWidth: 'ì…€ 너비는 숫ìžì—¬ì•¼ 합니다.', invalidHeight: 'ì…€ 높ì´ëŠ” 숫ìžì—¬ì•¼ 합니다.', invalidRowSpan: 'í–‰ ê°„ê²©ì€ ì •ìˆ˜ì—¬ì•¼ 합니다.', invalidColSpan: 'ì—´ ê°„ê²©ì€ ì •ìˆ˜ì—¬ì•¼ 합니다.', chooseColor: 'ì„ íƒ' }, cellPad: 'ì…€ 여백', cellSpace: 'ì…€ 간격', column: { menu: 'ì—´', insertBefore: 'ì™¼ìª½ì— ì—´ 삽입', insertAfter: 'ì˜¤ë¥¸ìª½ì— ì—´ 삽입', deleteColumn: 'ì—´ ì‚­ì œ' }, columns: 'ì—´', deleteTable: '표 ì‚­ì œ', headers: '머릿칸', headersBoth: '모ë‘', headersColumn: '첫 ì—´', headersNone: 'ì—†ìŒ', headersRow: '첫 í–‰', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/mk.js0000664000201500020150000000504215203533231023273 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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 heightUnit: 'height unit', // 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/cy.js0000664000201500020150000000465415203533231023307 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/uk.js0000664000201500020150000000726515203533231023314 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'Заголовок', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING yes: 'Так', no: 'ÐÑ–', invalidWidth: 'Ширина комірки повинна бути цілим чиÑлом.', invalidHeight: 'ВиÑота комірки повинна бути цілим чиÑлом.', invalidRowSpan: 'КількіÑть об\'єднуваних Ñ€Ñдків повинна бути цілим чиÑлом.', invalidColSpan: 'КількіÑть об\'єднуваних Ñтовбців повинна бути цілим чиÑлом.', chooseColor: 'Обрати' }, cellPad: 'Внутр. відÑтуп', cellSpace: 'Проміжок', column: { menu: 'Стовбці', insertBefore: 'Ð’Ñтавити Ñтовбець перед', insertAfter: 'Ð’Ñтавити Ñтовбець піÑлÑ', deleteColumn: 'Видалити Ñтовбці' }, columns: 'Стовбці', deleteTable: 'Видалити таблицю', headers: 'Заголовки Ñтовбців/Ñ€Ñдків', headersBoth: 'Стовбці Ñ– Ñ€Ñдки', headersColumn: 'Стовбці', headersNone: 'Без заголовків', headersRow: 'РÑдки', heightUnit: 'Ð¾Ð´Ð¸Ð½Ð¸Ñ†Ñ Ð²Ð¸Ñоти', invalidBorder: 'Розмір рамки повинен бути цілим чиÑлом.', invalidCellPadding: 'Внутр. відÑтуп комірки повинен бути цілим чиÑлом.', invalidCellSpacing: 'Проміжок між комірками повинен бути цілим чиÑлом.', invalidCols: 'КількіÑть Ñтовбців повинна бути більшою 0.', invalidHeight: 'ВиÑота таблиці повинна бути цілим чиÑлом.', invalidRows: 'КількіÑть Ñ€Ñдків повинна бути більшою 0.', invalidWidth: 'Ширина таблиці повинна бути цілим чиÑлом.', menu: 'ВлаÑтивоÑті таблиці', row: { menu: 'РÑдки', insertBefore: 'Ð’Ñтавити Ñ€Ñдок перед', insertAfter: 'Ð’Ñтавити Ñ€Ñдок піÑлÑ', deleteRow: 'Видалити Ñ€Ñдки' }, rows: 'РÑдки', summary: 'Детальний Ð¾Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑƒ таблиці', title: 'ВлаÑтивоÑті таблиці', toolbar: 'ТаблицÑ', widthPc: 'відÑотків', widthPx: 'пікÑелів', widthUnit: 'Ð¾Ð´Ð¸Ð½Ð¸Ñ†Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð¸' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/zh-cn.js0000664000201500020150000000444115203533231023705 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: '表头', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING yes: '是', no: 'å¦', invalidWidth: 'å•元格宽度必须为数字格å¼', invalidHeight: 'å•元格高度必须为数字格å¼', invalidRowSpan: '行跨度必须为整数格å¼', invalidColSpan: '列跨度必须为整数格å¼', chooseColor: '选择' }, cellPad: 'è¾¹è·', cellSpace: 'é—´è·', column: { menu: '列', insertBefore: '在左侧æ’入列', insertAfter: '在å³ä¾§æ’入列', deleteColumn: '删除列' }, columns: '列数', deleteTable: '删除表格', headers: '标题å•元格', headersBoth: '第一列和第一行', headersColumn: '第一列', headersNone: 'æ— ', headersRow: '第一行', heightUnit: '高度å•ä½', invalidBorder: '边框粗细必须为数字格å¼', invalidCellPadding: 'å•元格填充必须为数字格å¼', invalidCellSpacing: 'å•元格间è·å¿…须为数字格å¼', invalidCols: '指定的行数必须大于零', invalidHeight: '表格高度必须为数字格å¼', invalidRows: '指定的列数必须大于零', invalidWidth: '表格宽度必须为数字格å¼', menu: '表格属性', row: { menu: '行', insertBefore: '在上方æ’入行', insertAfter: '在下方æ’入行', deleteRow: '删除行' }, rows: '行数', summary: '摘è¦', title: '表格属性', toolbar: '表格', widthPc: '百分比', widthPx: 'åƒç´ ', widthUnit: '宽度å•ä½' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/sv.js0000664000201500020150000000453315203533231023320 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'Enhetshöjd', 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/lt.js0000664000201500020150000000500715203533231023304 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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Ä—', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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Ä—', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/is.js0000664000201500020150000000476515203533231023312 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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öð', heightUnit: 'height unit', // 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: '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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/fr-ca.js0000664000201500020150000000532115203533231023654 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/et.js0000664000201500020150000000455015203533231023277 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'kõrgusühik', 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/bs.js0000664000201500020150000000467615203533231023304 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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 heightUnit: 'height unit', // 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/pl.js0000664000201500020150000000511215203533231023275 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'jednostka wysokoÅ›ci', 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/bg.js0000664000201500020150000000710415203533231023255 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'table', 'bg', { border: 'Размер на рамката', caption: 'Заглавие', cell: { menu: 'Клетка', insertBefore: 'Вмъкване на клетка преди', insertAfter: 'Вмъкване на клетка Ñлед', deleteCell: 'Изтриване на клетки', merge: 'Сливане на клетки', mergeRight: 'Сливане надÑÑно', mergeDown: 'Сливане надолу', splitHorizontal: 'РазделÑне клетката хоризонтално', splitVertical: 'РазделÑне клетката вертикално', title: 'ÐаÑтройки на клетката', cellType: 'Тип на клетката', rowSpan: 'Редове обединени', colSpan: 'Колони обединени', wordWrap: 'Ðвто. преноÑ', hAlign: 'Хоризонтално подравнÑване', vAlign: 'Вертикално подравнÑване', alignBaseline: 'Базова линиÑ', bgColor: 'Фон', borderColor: 'ЦвÑÑ‚ на рамката', data: 'Данни', header: 'Заглавие', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING yes: 'Да', no: 'Ðе', invalidWidth: 'Ширината на клетката трÑбва да е чиÑло.', invalidHeight: 'ВиÑочината на клетката трÑбва да е чиÑло.', invalidRowSpan: 'Редове обединени трÑбва да е цÑло чиÑло.', invalidColSpan: 'Колони обединени трÑбва да е цÑло чиÑло.', chooseColor: 'Изберете' }, cellPad: 'ОтделÑне на клетките', cellSpace: 'РазÑтоÑние между клетките', column: { menu: 'Колона', insertBefore: 'Вмъкване на колона преди', insertAfter: 'Вмъкване на колона Ñлед', deleteColumn: 'Изтриване на колони' }, columns: 'Колони', deleteTable: 'Изтриване на таблица', headers: 'ЗаглавиÑ', headersBoth: 'И двете', headersColumn: 'Първа колона', headersNone: 'ÐÑма', headersRow: 'Първи ред', heightUnit: 'height unit', // MISSING invalidBorder: 'Размерът на рамката трÑбва да е чиÑло.', invalidCellPadding: 'ОтÑтоÑнието на клетките трÑбва да е положително чиÑло.', invalidCellSpacing: 'Интервалът в клетките трÑбва да е положително чиÑло.', invalidCols: 'БроÑÑ‚ колони трÑбва да е по-голÑм от 0.', invalidHeight: 'ВиÑочината на таблицата трÑбва да е чиÑло.', invalidRows: 'БроÑÑ‚ редове трÑбва да е по-голÑм от 0.', invalidWidth: 'Ширината на таблицата трÑбва да е чиÑло.', menu: 'ÐаÑтройки на таблицата', row: { menu: 'Ред', insertBefore: 'Вмъкване на ред преди', insertAfter: 'Вмъкване на ред Ñлед', deleteRow: 'Изтриване на редове' }, rows: 'Редове', summary: 'Обща информациÑ', title: 'ÐаÑтройки на таблицата', toolbar: 'Таблица', widthPc: 'процент', widthPx: 'пикÑела', widthUnit: 'единица за ширина' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/fa.js0000664000201500020150000000576215203533231023263 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'سرنویس', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING yes: 'بله', no: 'خیر', invalidWidth: 'عرض سلول باید یک عدد باشد.', invalidHeight: 'Ø§Ø±ØªÙØ§Ø¹ سلول باید عدد باشد.', invalidRowSpan: 'مقدار محدوده ردیÙها باید یک عدد باشد.', invalidColSpan: 'مقدار محدوده ستونها باید یک عدد باشد.', chooseColor: 'انتخاب' }, cellPad: 'ÙØ§ØµÙ„هٴ پرشده در سلول', cellSpace: 'ÙØ§ØµÙ„هٴ میان سلولها', column: { menu: 'ستون', insertBefore: 'Ø§ÙØ²ÙˆØ¯Ù† ستون قبل از', insertAfter: 'Ø§ÙØ²ÙˆØ¯Ù† ستون بعد از', deleteColumn: 'حذ٠ستونها' }, columns: 'ستونها', deleteTable: 'پاک کردن جدول', headers: 'سرنویسها', headersBoth: 'هردو', headersColumn: 'اولین ستون', headersNone: 'هیچ', headersRow: 'اولین ردیÙ', heightUnit: 'واحد Ø§Ø±ØªÙØ§Ø¹', invalidBorder: 'مقدار اندازه خطوط باید یک عدد باشد.', invalidCellPadding: 'بالشتک سلول باید یک عدد باشد.', invalidCellSpacing: 'مقدار ÙØ§ØµÙ„هگذاری سلول باید یک عدد باشد.', invalidCols: 'تعداد ستونها باید یک عدد بزرگتر از 0 باشد.', invalidHeight: 'مقدار Ø§Ø±ØªÙØ§Ø¹ جدول باید یک عدد باشد.', invalidRows: 'تعداد ردیÙها باید یک عدد بزرگتر از 0 باشد.', invalidWidth: 'مقدار پهنای جدول باید یک عدد باشد.', menu: 'ویژگیهای جدول', row: { menu: 'سطر', insertBefore: 'Ø§ÙØ²ÙˆØ¯Ù† سطر قبل از', insertAfter: 'Ø§ÙØ²ÙˆØ¯Ù† سطر بعد از', deleteRow: 'حذ٠سطرها' }, rows: 'سطرها', summary: 'خلاصه', title: 'ویژگیهای جدول', toolbar: 'جدول', widthPc: 'درصد', widthPx: 'پیکسل', widthUnit: 'واحد پهنا' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/ku.js0000664000201500020150000000635515203533231023313 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'سەرپەڕه', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING yes: 'بەڵێ', no: 'نەخێر', invalidWidth: 'پانی خانه دەبێت بەتەواوی ژماره بێت.', invalidHeight: 'درێژی خانه بەتەواوی دەبێت ژمارە بێت.', invalidRowSpan: 'ماوەی نێوان ڕیز بەتەواوی دەبێت ژمارە بێت.', invalidColSpan: 'ماوەی نێوان ئەستونی بەتەواوی دەبێت ژمارە بێت.', chooseColor: 'هەڵبژێرە' }, cellPad: 'بۆشایی ناوپۆش', cellSpace: 'بۆشایی خانه', column: { menu: 'ئەستون', insertBefore: 'دانانی ئەستون Ù„Û•Ù¾ÛŽØ´', insertAfter: 'دانانی ئەستوون لەپاش', deleteColumn: 'سڕینەوەی ئەستوون' }, columns: 'ستوونەکان', deleteTable: 'سڕینەوەی خشتە', headers: 'سەرپەڕه', headersBoth: 'هەردووك', headersColumn: 'یەکەم ئەستوون', headersNone: 'هیچ', headersRow: 'یەکەم ڕیز', heightUnit: 'یەکەی بەرز', invalidBorder: 'ژمارەی پەراوێز دەبێت تەنها ژماره بێت.', invalidCellPadding: 'ناوپۆشی خانه دەبێت ژمارەکی درووست بێت.', invalidCellSpacing: 'بۆشایی خانه دەبێت ژمارەکی درووست بێت.', invalidCols: 'ژمارەی ئەستوونی دەبێت گەورەتر بێت لەژمارەی 0.', invalidHeight: 'درێژی خشته دهبێت تهنها ژماره بێت.', invalidRows: 'ژمارەی ڕیز دەبێت گەورەتر بێت لەژمارەی 0.', invalidWidth: 'پانی خشته دەبێت تەنها ژماره بێت.', menu: 'خاسیەتی خشتە', row: { menu: 'ڕیز', insertBefore: 'دانانی ڕیز Ù„Û•Ù¾ÛŽØ´', insertAfter: 'دانانی ڕیز لەپاش', deleteRow: 'سڕینەوەی ڕیز' }, rows: 'ڕیز', summary: 'کورتە', title: 'خاسیەتی خشتە', toolbar: 'خشتە', widthPc: 'لەسەدا', widthPx: 'وێنەخاڵ - پیکسل', widthUnit: 'پانی یەکە' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/bn.js0000664000201500020150000000542415203533231023267 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'পৃষà§à¦ à¦¤à¦²à§‡à¦° রং', borderColor: 'Border Color', data: 'Data', header: 'Header', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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 heightUnit: 'height unit', // 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/el.js0000664000201500020150000000724415203533231023272 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'Κεφαλίδα', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING yes: 'Îαι', no: 'Όχι', invalidWidth: 'Το πλάτος του ÎºÎµÎ»Î¹Î¿Ï Ï€Ïέπει να είναι αÏιθμός.', invalidHeight: 'Το Ïψος του ÎºÎµÎ»Î¹Î¿Ï Ï€Ïέπει να είναι αÏιθμός.', invalidRowSpan: 'Το εÏÏος των γÏαμμών Ï€Ïέπει να είναι ακέÏαιος αÏιθμός.', invalidColSpan: 'Το εÏÏος των στηλών Ï€Ïέπει να είναι ακέÏαιος αÏιθμός.', chooseColor: 'Επιλέξτε' }, cellPad: 'ΑναπλήÏωση κελιών', cellSpace: 'Απόσταση κελιών', column: { menu: 'Στήλη', insertBefore: 'Εισαγωγή Στήλης ΠÏιν', insertAfter: 'Εισαγωγή Στήλης Μετά', deleteColumn: 'ΔιαγÏαφή Στηλών' }, columns: 'Στήλες', deleteTable: 'ΔιαγÏαφή Πίνακα', headers: 'Κεφαλίδες', headersBoth: 'Και τα δÏο', headersColumn: 'ΠÏώτη στήλη', headersNone: 'Κανένα', headersRow: 'ΠÏώτη ΓÏαμμή', heightUnit: 'μονάδα Ïψους', invalidBorder: 'Το πάχος του πεÏιγÏάμματος Ï€Ïέπει να είναι ένας αÏιθμός.', invalidCellPadding: 'Η αναπλήÏωση των κελιών Ï€Ïέπει να είναι θετικός αÏιθμός.', invalidCellSpacing: 'Η απόσταση Î¼ÎµÏ„Î±Î¾Ï Ï„Ï‰Î½ κελιών Ï€Ïέπει να είναι ένας θετικός αÏιθμός.', invalidCols: 'Ο αÏιθμός των στηλών Ï€Ïέπει να είναι μεγαλÏτεÏος από 0.', invalidHeight: 'Το Ïψος του πίνακα Ï€Ïέπει να είναι αÏιθμός.', invalidRows: 'Ο αÏιθμός των σειÏών Ï€Ïέπει να είναι μεγαλÏτεÏος από 0.', invalidWidth: 'Το πλάτος του πίνακα Ï€Ïέπει να είναι ένας αÏιθμός.', menu: 'Ιδιότητες Πίνακα', row: { menu: 'ΓÏαμμή', insertBefore: 'Εισαγωγή ΓÏαμμής ΠÏιν', insertAfter: 'Εισαγωγή ΓÏαμμής Μετά', deleteRow: 'ΔιαγÏαφή ΓÏαμμών' }, rows: 'ΓÏαμμές', summary: 'ΠεÏίληψη', title: 'Ιδιότητες Πίνακα', toolbar: 'Πίνακας', widthPc: 'τοις εκατό', widthPx: 'pixel', widthUnit: 'μονάδα πλάτους' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/fi.js0000664000201500020150000000476115203533231023271 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/ru.js0000664000201500020150000000712515203533231023316 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'Заголовок', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING yes: 'Да', no: 'Ðет', invalidWidth: 'Ширина Ñчейки должна быть чиÑлом.', invalidHeight: 'Ð’Ñ‹Ñота Ñчейки должна быть чиÑлом.', invalidRowSpan: 'КоличеÑтво объединÑемых Ñтрок должно быть задано чиÑлом.', invalidColSpan: 'КоличеÑтво объединÑемых колонок должно быть задано чиÑлом.', chooseColor: 'Выберите' }, cellPad: 'Внутренний отÑтуп Ñчеек', cellSpace: 'Внешний отÑтуп Ñчеек', column: { menu: 'Колонка', insertBefore: 'Ð’Ñтавить колонку Ñлева', insertAfter: 'Ð’Ñтавить колонку Ñправа', deleteColumn: 'Удалить колонки' }, columns: 'Колонки', deleteTable: 'Удалить таблицу', headers: 'Заголовки', headersBoth: 'Сверху и Ñлева', headersColumn: 'Ð›ÐµÐ²Ð°Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ°', headersNone: 'Без заголовков', headersRow: 'ВерхнÑÑ Ñтрока', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/gl.js0000664000201500020150000000506615203533231023274 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'unidade do alto', 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/sr-latn.js0000664000201500020150000000461015203533231024244 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'table', 'sr-latn', { border: 'VeliÄina okvira', caption: 'Naslov tabele', cell: { menu: 'Ćelija', insertBefore: 'Ubaci levo', insertAfter: 'Ubaci desno', deleteCell: 'ObriÅ¡i ćelije', merge: 'Spoj ćelije', mergeRight: 'Spolj ćelije desno', mergeDown: 'Spolj Äelije na dole', splitHorizontal: 'Razdvoji ćelije vodoravno', splitVertical: 'Razdvoji ćelije uspravno', title: 'Karakteristike ćelija', cellType: 'Tip ćelija', rowSpan: 'Spoj uzdužno', colSpan: 'Spoj vodoravno', wordWrap: 'Brisanje dugaÄkih redova', hAlign: 'Ravnanje vodoravno', vAlign: 'Ravnanje uspravno', alignBaseline: 'Bazna linija', bgColor: 'Boja pozadine', borderColor: 'Boja okvira', data: 'Podatak', header: 'Zaglavlje', columnHeader: 'Zaglavlje kolone', rowHeader: 'Zaglavlje reda', yes: 'Da', no: 'Nе', invalidWidth: 'U polje Å¡irina možete upisati samo brojeve. ', invalidHeight: 'U polje visina možete upisati samo brojeve.', invalidRowSpan: 'U polje spoj uspravno možete upistai samo brojeve.', invalidColSpan: 'U polje spoj vodoravno možete upistai samo brojeve.', chooseColor: 'Izaberi' }, cellPad: 'Razmak ćelija', cellSpace: 'Ćelijski prostor', column: { menu: 'Kolona', insertBefore: 'Ubaci levo', insertAfter: 'Ubaci desno', deleteColumn: 'ObriÅ¡i kolone' }, columns: 'Kolona', deleteTable: 'IzbriÅ¡i tabelu', headers: 'Zaglavlja', headersBoth: 'Oba', headersColumn: 'Prva kolona', headersNone: 'Nema', headersRow: 'Prvi red', heightUnit: 'Jedinica visine', 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: 'Red', insertBefore: 'Ubaci iznad', insertAfter: 'Ubaci ispod', deleteRow: 'ObriÅ¡i redove' }, rows: 'Redovi', summary: 'Opis', title: 'Karakteristike tabele', toolbar: 'Tabela', widthPc: 'procenata', widthPx: 'piksela', widthUnit: 'jedinica za Å¡irinu' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/oc.js0000664000201500020150000000535515203533231023274 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'table', 'oc', { border: 'Talha de la bordadura', caption: 'Títol del tablèu', cell: { menu: 'Cellula', insertBefore: 'Inserir una cellula abans', insertAfter: 'Inserir una cellula aprèp', deleteCell: 'Suprimir las cellulas', merge: 'Fusionar las cellulas', mergeRight: 'Fusionar cap a dreita', mergeDown: 'Fusionar cap aval', splitHorizontal: 'Separar la cellula orizontalament', splitVertical: 'Separar la cellula verticalament', title: 'Proprietats de la cellula', cellType: 'Tipe de cellula', rowSpan: 'Linhas ocupadas', colSpan: 'Colomnas ocupadas', wordWrap: 'Cesura', hAlign: 'Alinhament orizontal', vAlign: 'Alinhament vertical', alignBaseline: 'Linha de basa', bgColor: 'Color de rèireplan', borderColor: 'Color de bordadura', data: 'Donadas', header: 'Entèsta', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING yes: 'Ã’c', no: 'Non', invalidWidth: 'La largor de la cellula deu èsser un nombre.', invalidHeight: 'La nautor de la cellula deu èsser un nombre.', invalidRowSpan: 'Lo nombre de linhas ocupadas deu èsser un nombre entièr.', invalidColSpan: 'Lo nombre de colomnas ocupadas deu èsser un nombre entièr.', chooseColor: 'Causir' }, cellPad: 'Marge intèrne de las cellulas', cellSpace: 'Espaçament entre las cellulas', column: { menu: 'Colomna', insertBefore: 'Inserir una colomna abans', insertAfter: 'Inserir una colomna aprèp', deleteColumn: 'Suprimir las colomnas' }, columns: 'Colomnas', deleteTable: 'Suprimir lo tablèu', headers: 'Entèstas', headersBoth: 'Los dos', headersColumn: 'Primièra colomna', headersNone: 'Pas cap', headersRow: 'Primièra linha', heightUnit: 'height unit', // MISSING invalidBorder: 'La talha de la bordadura deu èsser un nombre.', invalidCellPadding: 'Lo marge intèrne de las cellulas deu èsser un nombre positiu.', invalidCellSpacing: 'L\'espaçament entre las cellulas deu èsser un nombre positiu.', invalidCols: 'Lo nombre de colomnas deu èsser superior a 0.', invalidHeight: 'La nautor del tablèu deu èsser un nombre.', invalidRows: 'Lo nombre de linhas deu èsser superior a 0.', invalidWidth: 'La largor del tablèu deu èsser un nombre.', menu: 'Proprietats del tablèu', row: { menu: 'Linha', insertBefore: 'Inserir una linha abans', insertAfter: 'Inserir una linha aprèp', deleteRow: 'Suprimir las linhas' }, rows: 'Linhas', summary: 'Resumit (descripcion)', title: 'Proprietats del tablèu', toolbar: 'Tablèu', widthPc: 'per cent', widthPx: 'pixèls', widthUnit: 'unitat de largor' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/sq.js0000664000201500020150000000507415203533231023314 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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ë', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/pt-br.js0000664000201500020150000000511515203533231023711 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Cabeçalho da Coluna', rowHeader: 'Cabeçalho da Linha', 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', heightUnit: 'Unidade para altura', 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/fo.js0000664000201500020150000000463615203533231023300 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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ð', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/af.js0000664000201500020150000000445515203533231023261 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/hi.js0000664000201500020150000000616615203533231023274 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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 heightUnit: 'height unit', // 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/km.js0000664000201500020150000001056515203533231023301 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'ក្បាល', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING yes: 'ព្រម', no: 'áž‘áŸ', invalidWidth: 'ទទឹង​ក្រឡា​ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážáŸ”', invalidHeight: 'កម្ពស់​ក្រឡា​ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážáŸ”', invalidRowSpan: 'ចំនួន​ជួរ​ដáŸáž€â€‹áž›áž¶áž™â€‹áž…ូល​គ្នា​ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážâ€‹áž‘ាំង​អស់។', invalidColSpan: 'ចំនួន​ជួរ​ឈរ​លាយ​ចូល​គ្នា​ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážâ€‹áž‘ាំង​អស់។', chooseColor: 'រើស' }, cellPad: 'ចន្លោះ​ក្រឡា', cellSpace: 'គម្លាážâ€‹áž€áŸ’រឡា', column: { menu: 'ជួរ​ឈរ', insertBefore: 'បញ្ចូល​ជួរ​ឈរ​ពីមុáž', insertAfter: 'បញ្ចូល​ជួរ​ឈរ​ពី​ក្រោយ', deleteColumn: 'លុប​ជួរ​ឈរ' }, columns: 'ជួរឈរ', deleteTable: 'លុប​ážáž¶ážšáž¶áž„', headers: 'ក្បាល', headersBoth: 'ទាំង​ពីរ', headersColumn: 'ជួរ​ឈរ​ដំបូង', headersNone: 'មិន​មាន', headersRow: 'ជួរ​ដáŸáž€â€‹ážŠáŸ†áž”ូង', heightUnit: 'height unit', // MISSING invalidBorder: 'ទំហំ​បន្ទាážáŸ‹â€‹ážŸáŸŠáž»áž˜â€‹ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážáŸ”', invalidCellPadding: 'ចន្លោះ​ក្រឡា​ážáŸ’រូវ​ážáŸ‚ជា​លáŸážâ€‹ážœáž·áž‡áŸ’ជមាន។', invalidCellSpacing: 'គម្លាážâ€‹áž€áŸ’រឡា​ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážâ€‹ážœáž·áž‡áŸ’ជមាន។', invalidCols: 'ចំនួន​ជួរ​ឈរ​ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážâ€‹áž’ំ​ជាង 0។', invalidHeight: 'កម្ពស់​ážáž¶ážšáž¶áž„​ážáŸ’រូវ​ážáŸ‚​ជា​លáŸáž', invalidRows: 'ចំនួន​ជួរ​ដáŸáž€â€‹ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážâ€‹áž’ំ​ជាង 0។', invalidWidth: 'ទទឹង​ážáž¶ážšáž¶áž„​ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážáŸ”', menu: 'លក្ážážŽáŸˆâ€‹ážáž¶ážšáž¶áž„', row: { menu: 'ជួរ​ដáŸáž€', insertBefore: 'បញ្ចូល​ជួរ​ដáŸáž€â€‹áž–ីមុáž', insertAfter: 'បញ្ចូល​ជួរ​ដáŸáž€â€‹áž–ី​ក្រោយ', deleteRow: 'លុប​ជួរ​ដáŸáž€' }, rows: 'ជួរ​ដáŸáž€', summary: 'សáŸáž…ក្ážáž¸â€‹ážŸáž„្ážáŸáž”', title: 'លក្ážážŽáŸˆâ€‹ážáž¶ážšáž¶áž„', toolbar: 'ážáž¶ážšáž¶áž„', widthPc: 'ភាគរយ', widthPx: 'ភីកសែល', widthUnit: 'ឯកážáž¶â€‹áž‘ទឹង' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/nl.js0000664000201500020150000000463615203533231023305 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'table', 'nl', { border: 'Randdikte', caption: 'Bijschrift', 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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/ka.js0000664000201500020150000001115715203533231023263 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'სáƒáƒ—áƒáƒ£áƒ áƒ˜', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING yes: 'დიáƒáƒ®', no: 'áƒáƒ áƒ', invalidWidth: 'უჯრის სიგáƒáƒœáƒ” რიცხვით უნდრიყáƒáƒ¡ წáƒáƒ áƒ›áƒáƒ“გენილი.', invalidHeight: 'უჯრის სიმáƒáƒ¦áƒšáƒ” რიცხვით უნდრიყáƒáƒ¡ წáƒáƒ áƒ›áƒáƒ“გენილი.', invalidRowSpan: 'სტრიქáƒáƒœáƒ”ბის რáƒáƒáƒ“ენáƒáƒ‘რმთელი რიცხვი უნდრიყáƒáƒ¡.', invalidColSpan: 'სვეტების რáƒáƒáƒ“ენáƒáƒ‘რმთელი რიცხვი უნდრიყáƒáƒ¡.', chooseColor: 'áƒáƒ áƒ©áƒ”ვáƒ' }, cellPad: 'უჯრის კიდე (padding)', cellSpace: 'უჯრის სივრცე (spacing)', column: { menu: 'სვეტი', insertBefore: 'სვეტის ჩáƒáƒ›áƒáƒ¢áƒ”ბრწინ', insertAfter: 'სვეტის ჩáƒáƒ›áƒáƒ¢áƒ”ბრმერე', deleteColumn: 'სვეტების წáƒáƒ¨áƒšáƒ' }, columns: 'სვეტი', deleteTable: 'ცხრილის წáƒáƒ¨áƒšáƒ', headers: 'სáƒáƒ—áƒáƒ£áƒ áƒ”ბი', headersBoth: 'áƒáƒ áƒ˜áƒ•ე', headersColumn: 'პირველი სვეტი', headersNone: 'áƒáƒ áƒáƒ¤áƒ”რი', headersRow: 'პირველი სტრიქáƒáƒœáƒ˜', heightUnit: 'height unit', // MISSING invalidBorder: 'ჩáƒáƒ áƒ©áƒáƒ¡ ზáƒáƒ›áƒ რიცხვით უდნრიყáƒáƒ¡ წáƒáƒ áƒ›áƒáƒ“გენილი.', invalidCellPadding: 'უჯრის კიდე (padding) რიცხვით უნდრიყáƒáƒ¡ წáƒáƒ áƒ›áƒáƒ“გენილი.', invalidCellSpacing: 'უჯრის სივრცე (spacing) რიცხვით უნდრიყáƒáƒ¡ წáƒáƒ áƒ›áƒáƒ“გენილი.', invalidCols: 'სვეტების რáƒáƒáƒ“ენáƒáƒ‘რდáƒáƒ“ებითი რიცხვი უნდრიყáƒáƒ¡.', invalidHeight: 'ცხრილის სიმáƒáƒ¦áƒšáƒ” რიცხვით უნდრიყáƒáƒ¡ წáƒáƒ áƒ›áƒáƒ“გენილი.', invalidRows: 'სტრიქáƒáƒœáƒ”ბის რáƒáƒáƒ“ენáƒáƒ‘რდáƒáƒ“ებითი რიცხვი უნდრიყáƒáƒ¡.', invalidWidth: 'ცხრილის სიგáƒáƒœáƒ” რიცხვით უნდრიყáƒáƒ¡ წáƒáƒ áƒ›áƒáƒ“გენილი.', menu: 'ცხრილის პáƒáƒ áƒáƒ›áƒ”ტრები', row: { menu: 'სტრიქáƒáƒœáƒ˜', insertBefore: 'სტრიქáƒáƒœáƒ˜áƒ¡ ჩáƒáƒ›áƒáƒ¢áƒ”ბრწინ', insertAfter: 'სტრიქáƒáƒœáƒ˜áƒ¡ ჩáƒáƒ›áƒáƒ¢áƒ”ბრმერე', deleteRow: 'სტრიქáƒáƒœáƒ”ბის წáƒáƒ¨áƒšáƒ' }, rows: 'სტრიქáƒáƒœáƒ˜', summary: 'შეჯáƒáƒ›áƒ”ბáƒ', title: 'ცხრილის პáƒáƒ áƒáƒ›áƒ”ტრები', toolbar: 'ცხრილი', widthPc: 'პრáƒáƒªáƒ”ნტი', widthPx: 'წერტილი', widthUnit: 'სáƒáƒ–áƒáƒ›áƒ˜ ერთეული' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/es-mx.js0000664000201500020150000000513015203533231023713 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'table', 'es-mx', { border: 'Tamaño del borde', caption: 'Subtítulo', cell: { menu: 'Celda', insertBefore: 'Insertar una celda antes', insertAfter: 'Insertar una celda despues', deleteCell: 'Borrar celdas', merge: 'Unir celdas', mergeRight: 'Unir a la derecha', mergeDown: 'Unir abajo', splitHorizontal: 'Dividir celda horizontalmente', splitVertical: 'Dividir celda verticalmente', title: 'Propiedades de la celda', cellType: 'Tipo de celda', rowSpan: 'Extensión de las filas', colSpan: 'Extensión de las columnas', wordWrap: 'Ajuste de línea', hAlign: 'Alineación horizontal', vAlign: 'Alineación vertical', alignBaseline: 'Base', bgColor: 'Color de fondo', borderColor: 'Color de borde', data: 'Datos', header: 'Encabezado', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING yes: 'Si', no: 'No', invalidWidth: 'El ancho de la celda debe ser un número entero.', invalidHeight: 'El alto de la celda debe ser un número entero.', invalidRowSpan: 'El intervalo de filas debe ser un número entero.', invalidColSpan: 'El intervalo de columnas debe ser un número entero.', chooseColor: 'Escoger' }, cellPad: 'relleno de celda', cellSpace: 'Espacio de celda', column: { menu: 'Columna', insertBefore: 'Insertar columna antes', insertAfter: 'Insertar columna después', deleteColumn: 'Borrar columnas' }, columns: 'Columnas', deleteTable: 'Borrar tabla', headers: 'Encabezados', headersBoth: 'Ambos', headersColumn: 'Primera columna', headersNone: 'Ninguna', headersRow: 'Primera fila', heightUnit: 'height unit', // MISSING invalidBorder: 'El tamaño del borde debe ser un número entero.', invalidCellPadding: 'El relleno de la celda debe ser un número positivo.', invalidCellSpacing: 'El espacio de la celda debe ser un número positivo.', invalidCols: 'El número de columnas debe ser un número mayo que 0.', invalidHeight: 'La altura de la tabla debe ser un número.', invalidRows: 'El número de filas debe ser mayor a 0.', invalidWidth: 'El ancho de la tabla debe ser un número.', menu: 'Propiedades de la tabla', row: { menu: 'Fila', insertBefore: 'Inserta una fila antes', insertAfter: 'Inserta una fila después', deleteRow: 'Borrar filas' }, rows: 'Filas', summary: 'Resumen', title: 'Propiedades de la tabla', toolbar: 'Tabla', widthPc: 'porcentaje', widthPx: 'pixeles', widthUnit: 'Unidad de ancho' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/mn.js0000664000201500020150000000570715203533231023306 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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 heightUnit: 'height unit', // 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/da.js0000664000201500020150000000447415203533231023260 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'højde enhed', 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/he.js0000664000201500020150000000562515203533231023267 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'כותרת', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING yes: 'כן', no: 'ל×', invalidWidth: 'שדה רוחב ×”×ª× ×—×™×™×‘ להיות מספר.', invalidHeight: 'שדה גובה ×”×ª× ×—×™×™×‘ להיות מספר.', invalidRowSpan: 'שדה מתיחת השורות חייב להיות מספר של×.', invalidColSpan: 'שדה מתיחת העמודות חייב להיות מספר של×.', chooseColor: 'בחר' }, cellPad: 'ריפוד ת×', cellSpace: 'מרווח ת×', column: { menu: 'עמודה', insertBefore: 'הוספת עמודה לפני', insertAfter: 'הוספת עמודה ×חרי', deleteColumn: 'מחיקת עמודות' }, columns: 'עמודות', deleteTable: 'מחק טבלה', headers: 'כותרות', headersBoth: 'שניה×', headersColumn: 'עמודה ר×שונה', headersNone: '×ין', headersRow: 'שורה ר×שונה', heightUnit: 'height unit', // MISSING invalidBorder: 'שדה גודל המסגרת חייב להיות מספר.', invalidCellPadding: 'שדה ריפוד הת××™× ×—×™×™×‘ להיות מספר חיובי.', invalidCellSpacing: 'שדה ריווח הת××™× ×—×™×™×‘ להיות מספר חיובי.', invalidCols: 'שדה מספר העמודות חייב להיות מספר גדול מ 0.', invalidHeight: 'שדה גובה הטבלה חייב להיות מספר.', invalidRows: 'שדה מספר השורות חייב להיות מספר גדול מ 0.', invalidWidth: 'שדה רוחב הטבלה חייב להיות מספר.', menu: 'מ×פייני טבלה', row: { menu: 'שורה', insertBefore: 'הוספת שורה לפני', insertAfter: 'הוספת שורה ×חרי', deleteRow: 'מחיקת שורות' }, rows: 'שורות', summary: 'תקציר', title: 'מ×פייני טבלה', toolbar: 'טבלה', widthPc: '×חוז', widthPx: 'פיקסלי×', widthUnit: 'יחידת רוחב' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/ca.js0000664000201500020150000000507215203533231023252 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/gu.js0000664000201500020150000001026215203533231023277 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'મથાળà«àª‚', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING yes: 'હા', no: 'ના', invalidWidth: 'સેલની પોહલાઈ આંકડો હોવો જોઈàª.', invalidHeight: 'સેલની ઊંચાઈ આંકડો હોવો જોઈàª.', invalidRowSpan: 'રો સà«àªªàª¾àª¨ આંકડો હોવો જોઈàª.', invalidColSpan: 'કોલમ સà«àªªàª¾àª¨ આંકડો હોવો જોઈàª.', chooseColor: 'પસંદ કરવà«àª‚' }, cellPad: 'સેલ પૅડિંગ', cellSpace: 'સેલ અંતર', column: { menu: 'કૉલમ/ઊભી કટાર', insertBefore: 'પહેલાં કૉલમ/ઊભી કટાર ઉમેરવી', insertAfter: 'પછી કૉલમ/ઊભી કટાર ઉમેરવી', deleteColumn: 'કૉલમ/ઊભી કટાર ડિલીટ/કાઢી નાખવી' }, columns: 'કૉલમ/ઊભી કટાર', deleteTable: 'કોઠો ડિલીટ/કાઢી નાખવà«àª‚', headers: 'મથાળા', headersBoth: 'બેવà«àª‚', headersColumn: 'પહેલી ઊભી કટાર', headersNone: 'નથી ', headersRow: 'પહેલી કટાર', heightUnit: 'height unit', // MISSING invalidBorder: 'બોરà«àª¡àª° àªàª• આંકડો હોવો જોઈàª', invalidCellPadding: 'સેલની અંદરની જગà«àª¯àª¾ સà«àª¨à«àª¯ કરતા વધારે હોવી જોઈàª.', invalidCellSpacing: 'સેલ વચà«àªšà«‡àª¨à«€ જગà«àª¯àª¾ સà«àª¨à«àª¯ કરતા વધારે હોવી જોઈàª.', invalidCols: 'ઉભી કટાર, 0 કરતા વધારે હોવી જોઈàª.', invalidHeight: 'ટેબલની ઊંચાઈ આંકડો હોવો જોઈàª.', invalidRows: 'આડી કટાર, 0 કરતા વધારે હોવી જોઈàª.', invalidWidth: 'ટેબલની પોહલાઈ આંકડો હોવો જોઈàª.', menu: 'ટેબલ, કોઠાનà«àª‚ મથાળà«àª‚', row: { menu: 'પંકà«àª¤àª¿àª¨àª¾ ખાના', insertBefore: 'પહેલાં પંકà«àª¤àª¿ ઉમેરવી', insertAfter: 'પછી પંકà«àª¤àª¿ ઉમેરવી', deleteRow: 'પંકà«àª¤àª¿àª“ ડિલીટ/કાઢી નાખવી' }, rows: 'પંકà«àª¤àª¿àª¨àª¾ ખાના', summary: 'ટૂંકો àªàª¹à«‡àªµàª¾àª²', title: 'ટેબલ, કોઠાનà«àª‚ મથાળà«àª‚', toolbar: 'ટેબલ, કોઠો', widthPc: 'પà«àª°àª¤àª¿àª¶àª¤', widthPx: 'પિકસલ', widthUnit: 'પોહાલાઈ àªàª•મ' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/ms.js0000664000201500020150000000474615203533231023315 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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 heightUnit: 'height unit', // 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/th.js0000664000201500020150000000615615203533231023306 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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: 'à¹à¸–วà¹à¸£à¸', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/de.js0000664000201500020150000000505615203533231023261 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'Höheneinheit', 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/en-ca.js0000664000201500020150000000444115203533231023651 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/tt.js0000664000201500020150000000632015203533231023313 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'Башлык', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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: 'Беренче юл', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/vi.js0000664000201500020150000000543515203533231023310 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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 Ä‘á»', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/cs.js0000664000201500020150000000504015203533231023267 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'jednotka výšky', 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/tr.js0000664000201500020150000000477715203533231023327 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'yükseklik birimi', 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/ja.js0000664000201500020150000000524315203533231023261 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'ヘッダ', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING yes: 'ã¯ã„', no: 'ã„ã„ãˆ', invalidWidth: 'ã‚»ãƒ«å¹…ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。', invalidHeight: 'セル高ã•ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。', invalidRowSpan: '縦幅(行数)ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。', invalidColSpan: '横幅(列数)ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。', chooseColor: '色ã®é¸æŠž' }, cellPad: 'セル内間隔', cellSpace: 'セル内余白', column: { menu: '列', insertBefore: 'åˆ—ã‚’å·¦ã«æŒ¿å…¥', insertAfter: '列をå³ã«æŒ¿å…¥', deleteColumn: '列を削除' }, columns: '列数', deleteTable: '表を削除', headers: 'ヘッダ (th)', headersBoth: '両方', headersColumn: '最åˆã®åˆ—ã®ã¿', headersNone: 'ãªã—', headersRow: '最åˆã®è¡Œã®ã¿', heightUnit: 'height unit', // MISSING invalidBorder: 'æž ç·šã®å¹…ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。', invalidCellPadding: 'ã‚»ãƒ«å†…ä½™ç™½ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。', invalidCellSpacing: 'ã‚»ãƒ«é–“ä½™ç™½ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。', invalidCols: '列数ã¯0より大ããªæ•°å€¤ã‚’入力ã—ã¦ãã ã•ã„。', invalidHeight: '高ã•ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。', invalidRows: '行数ã¯0より大ããªæ•°å€¤ã‚’入力ã—ã¦ãã ã•ã„。', invalidWidth: 'å¹…ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。', menu: '表ã®ãƒ—ロパティ', row: { menu: '行', insertBefore: 'è¡Œã‚’ä¸Šã«æŒ¿å…¥', insertAfter: 'è¡Œã‚’ä¸‹ã«æŒ¿å…¥', deleteRow: '行を削除' }, rows: '行数', summary: 'è¡¨ã®æ¦‚è¦', title: '表ã®ãƒ—ロパティ', toolbar: '表', widthPc: 'パーセント', widthPx: 'ピクセル', widthUnit: 'å¹…ã®å˜ä½' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/sl.js0000664000201500020150000000462115203533231023304 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'table', 'sl', { border: 'Velikost obrobe', caption: 'Napis', cell: { menu: 'Celica', insertBefore: 'Vstavi celico pred', insertAfter: 'Vstavi celico za', deleteCell: 'IzbriÅ¡i celice', merge: 'Združi celice', mergeRight: 'Združi desno', mergeDown: 'Združ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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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: 'Odmik znotraj celic', 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', heightUnit: 'height unit', // MISSING invalidBorder: 'Å irina obrobe mora biti Å¡tevilo.', invalidCellPadding: 'Odmik znotraj celic mora biti pozitivno Å¡tevilo.', invalidCellSpacing: 'Razmik med celicami mora biti pozitivno Å¡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: 'odstotkov', widthPx: 'pik', widthUnit: 'enota Å¡irine' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/lv.js0000664000201500020150000000475415203533231023316 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/en-au.js0000664000201500020150000000442615203533231023676 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/en.js0000664000201500020150000000440415203533231023267 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', rowHeader: 'Row 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', heightUnit: 'height unit', 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/no.js0000664000201500020150000000455115203533231023304 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/fr.js0000664000201500020150000000540415203533231023275 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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 vers la droite', mergeDown: 'Fusionner vers le bas', splitHorizontal: 'Scinder la cellule horizontalement', splitVertical: 'Scinder la cellule verticalement', title: 'Propriétés de la cellule', cellType: 'Type de cellule', rowSpan: 'Lignes occupées', colSpan: 'Colonnes occupées', wordWrap: 'Césure', hAlign: 'Alignement horizontal', vAlign: 'Alignement vertical', alignBaseline: 'Ligne de base', bgColor: 'Couleur d\'arrière-plan', borderColor: 'Couleur de bordure', data: 'Données', header: 'En-tête', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING yes: 'Oui', no: 'Non', invalidWidth: 'La largeur de la cellule doit être un nombre.', invalidHeight: 'La hauteur de la cellule doit être un nombre.', invalidRowSpan: 'Le nombre de colonnes occupées doit être un nombre entier.', invalidColSpan: 'Le nombre de colonnes occupées doit être un nombre entier.', chooseColor: 'Choisir' }, cellPad: 'Marge interne des cellules', cellSpace: 'Espacement entre les cellules', column: { menu: 'Colonne', 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: 'Aucun', headersRow: 'Première ligne', heightUnit: 'unité de hauteur', invalidBorder: 'La taille de la bordure doit être un nombre.', invalidCellPadding: 'La marge interne des cellules doit être un nombre positif.', invalidCellSpacing: 'L\'espacement entre les 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: 'pour cent', widthPx: 'pixels', widthUnit: 'unité de largeur' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/id.js0000664000201500020150000000460215203533231023261 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/ug.js0000664000201500020150000000662315203533231023305 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'جەدۋەل باشى', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING yes: 'ھەئە', no: 'ياق', invalidWidth: 'كاتەكچە كەڭلىكى چوقۇم سان بولىدۇ', invalidHeight: 'كاتەكچە ئÛگىزلىكى چوقۇم سان بولىدۇ', invalidRowSpan: 'قۇر چات ئارىسى چوقۇم پۈتۈن سان بولىدۇ ', invalidColSpan: 'ئىستون چات ئارىسى چوقۇم پۈتۈن سان بولىدۇ', chooseColor: 'تاللاڭ' }, cellPad: 'يان ئارىلىق', cellSpace: 'ئارىلىق', column: { menu: 'ئىستون', insertBefore: 'سولغا ئىستون قىستۇر', insertAfter: 'ئوڭغا ئىستون قىستۇر', deleteColumn: 'ئىستون ئۆچۈر' }, columns: 'ئىستون سانى', deleteTable: 'جەدۋەل ئۆچۈر', headers: 'ماۋزۇ كاتەكچە', headersBoth: 'بىرىنچى ئىستون Û‹Û• بىرىنچى قۇر', headersColumn: 'بىرىنچى ئىستون', headersNone: 'يوق', headersRow: 'بىرىنچى قۇر', heightUnit: 'height unit', // MISSING invalidBorder: 'گىرۋەك توملۇقى چوقۇم سان بولىدۇ', invalidCellPadding: 'كاتەكچىگە چوقۇم سان تولدۇرۇلىدۇ', invalidCellSpacing: 'كاتەكچە ئارىلىقى چوقۇم سان بولىدۇ', invalidCols: 'بەلگىلەنگەن قۇر سانى چوقۇم نۆلدىن Ú†ÙˆÚ­ بولىدۇ', invalidHeight: 'جەدۋەل ئÛگىزلىكى چوقۇم سان بولىدۇ', invalidRows: 'بەلگىلەنگەن ئىستون سانى چوقۇم نۆلدىن Ú†ÙˆÚ­ بولىدۇ', invalidWidth: 'جەدۋەل كەڭلىكى چوقۇم سان بولىدۇ', menu: 'جەدۋەل خاسلىقى', row: { menu: 'قۇر', insertBefore: 'ئۈستىگە قۇر قىستۇر', insertAfter: 'ئاستىغا قۇر قىستۇر', deleteRow: 'قۇر ئۆچۈر' }, rows: 'قۇر سانى', summary: 'ئۈزۈندە', title: 'جەدۋەل خاسلىقى', toolbar: 'جەدۋەل', widthPc: 'پىرسەنت', widthPx: 'پىكسÛÙ„', widthUnit: 'كەڭلىك بىرلىكى' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/ar.js0000664000201500020150000000566215203533231023276 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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: 'عنوان', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING yes: 'نعم', no: 'لا', invalidWidth: 'عرض الخلية يجب أن يكون عدداً.', invalidHeight: 'Ø§Ø±ØªÙØ§Ø¹ الخلية يجب أن يكون عدداً.', invalidRowSpan: 'امتداد الصÙو٠يجب أن يكون عدداً صحيحاً.', invalidColSpan: 'امتداد الأعمدة يجب أن يكون عدداً صحيحاً.', chooseColor: 'اختر' }, cellPad: 'Ø§Ù„Ù…Ø³Ø§ÙØ© البادئة', cellSpace: 'تباعد الخلايا', column: { menu: 'عمود', insertBefore: 'إدراج عمود قبل', insertAfter: 'إدراج عمود بعد', deleteColumn: 'حذ٠أعمدة' }, columns: 'أعمدة', deleteTable: 'حذ٠الجدول', headers: 'العناوين', headersBoth: 'كلاهما', headersColumn: 'العمود الأول', headersNone: 'بدون', headersRow: 'الص٠الأول', heightUnit: 'height unit', // MISSING invalidBorder: 'حجم الحد يجب أن يكون عدداً.', invalidCellPadding: 'Ø§Ù„Ù…Ø³Ø§ÙØ© البادئة يجب أن تكون عدداً', invalidCellSpacing: 'Ø§Ù„Ù…Ø³Ø§ÙØ© بين الخلايا يجب أن تكون عدداً.', invalidCols: 'عدد الأعمدة يجب أن يكون عدداً أكبر من ØµÙØ±.', invalidHeight: 'Ø§Ø±ØªÙØ§Ø¹ الجدول يجب أن يكون عدداً.', invalidRows: 'عدد الصÙو٠يجب أن يكون عدداً أكبر من ØµÙØ±.', invalidWidth: 'عرض الجدول يجب أن يكون عدداً.', menu: 'خصائص الجدول', row: { menu: 'صÙ', insertBefore: 'إدراج ص٠قبل', insertAfter: 'إدراج ص٠بعد', deleteRow: 'حذ٠صÙÙˆÙ' }, rows: 'صÙÙˆÙ', summary: 'الخلاصة', title: 'خصائص الجدول', toolbar: 'جدول', widthPc: 'بالمئة', widthPx: 'بكسل', widthUnit: 'وحدة العرض' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/sr.js0000664000201500020150000000646115203533231023316 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'table', 'sr', { border: 'Величина оквира', caption: 'ÐаÑлов табеле', cell: { menu: 'Ћелија', insertBefore: 'Убаци лево', insertAfter: 'Убаци деÑно', deleteCell: 'Обриши ћелије', merge: 'Спој ћелије', mergeRight: 'Спој ћелије на деÑно', mergeDown: 'Спој ћелије на доле', splitHorizontal: 'Раздвој ћелије водоравно', splitVertical: 'Раздвој ћелије уÑправно', title: 'КарактериÑтика ћелија', cellType: 'Тип ћелија', rowSpan: 'Спој уздужно', colSpan: 'Спој водоравно', wordWrap: 'БриÑање дугачких редова', hAlign: 'Равнање водоравно', vAlign: 'Равнање уÑправно', alignBaseline: 'Базна линија', bgColor: 'Боја позадине', borderColor: 'Боја оквира', data: 'Податак', header: 'ÐаÑлов', columnHeader: 'Заглавље колоне', rowHeader: 'Заглавље реда', yes: 'Да', no: 'Ðе', invalidWidth: 'У поље ширина можете упиÑати Ñамо бројеве.', invalidHeight: 'У поље виÑина можете упиÑати Ñамо бројеве.', invalidRowSpan: 'У поље Ñпој уÑправно можете упиÑати Ñамо бројеве.', invalidColSpan: 'У поље Ñпој водоравно можете упиÑати Ñамо бројеве.', chooseColor: 'Изабери' }, cellPad: 'Размак ћелија', cellSpace: 'ЋелијÑки проÑтор', column: { menu: 'Колона', insertBefore: 'Убаци лево', insertAfter: 'Убаци деÑно', deleteColumn: 'Обриши колоне' }, columns: 'Kолона', deleteTable: 'Обриши таблу', headers: 'Поглавља', headersBoth: 'Оба', headersColumn: 'Прва колона', headersNone: 'Ðема', headersRow: 'Први ред', heightUnit: 'Јединица виÑине', invalidBorder: 'Величина ивице треба да буде цифра.', invalidCellPadding: 'Пуњење ћелије треба да буде позитивна цифра.', invalidCellSpacing: 'Размак ћелије треба да буде позитивна цифра.', invalidCols: 'Број колона треба да буде цифра већа од 0.', invalidHeight: 'ВиÑина табеле треба да буде цифра.', invalidRows: 'Број реда треба да буде цифра већа од 0.', invalidWidth: 'Ширина табеле треба да буде цифра.', menu: 'КарактериÑтике табеле', row: { menu: 'Ред', insertBefore: 'Убаци изнад', insertAfter: 'Убаци иÑпод', deleteRow: 'Обриши редове' }, rows: 'Редови', summary: 'OпиÑ', title: 'КарактериÑтике табеле', toolbar: 'Табела', widthPc: 'процената', widthPx: 'пикÑела', widthUnit: 'јединица ширине' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/eu.js0000664000201500020150000000517315203533231023302 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'table', 'eu', { border: 'Ertzaren zabalera', caption: 'Epigrafea', cell: { menu: 'Gelaxka', insertBefore: 'Txertatu gelaxka aurretik', insertAfter: 'Txertatu gelaxka ondoren', deleteCell: 'Ezabatu gelaxkak', merge: 'Batu gelaxkak', mergeRight: 'Batu eskuinetara', mergeDown: 'Batu behera', splitHorizontal: 'Banatu gelaxka horizontalki', splitVertical: 'Banatu gelaxka bertikalki', title: 'Gelaxkaren propietateak', cellType: 'Gelaxka-mota', rowSpan: 'Errenkaden hedadura', colSpan: 'Zutabeen hedadura', wordWrap: 'Itzulbira', hAlign: 'Lerrokatze horizontala', vAlign: 'Lerrokatze bertikala', alignBaseline: 'Oinarri-lerroan', bgColor: 'Atzeko planoaren kolorea', borderColor: 'Ertzaren kolorea', data: 'Data', header: 'Goiburua', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING yes: 'Bai', no: 'Ez', invalidWidth: 'Gelaxkaren zabalera zenbaki bat izan behar da.', invalidHeight: 'Gelaxkaren altuera zenbaki bat izan behar da.', invalidRowSpan: 'Errenkaden hedadura zenbaki osoa izan behar da.', invalidColSpan: 'Zutabeen hedadura zenbaki osoa izan behar da.', chooseColor: 'Aukeratu' }, cellPad: 'Gelaxken betegarria', cellSpace: 'Gelaxka arteko tartea', column: { menu: 'Zutabea', insertBefore: 'Txertatu zutabea aurretik', insertAfter: 'Txertatu zutabea ondoren', deleteColumn: 'Ezabatu zutabeak' }, columns: 'Zutabeak', deleteTable: 'Ezabatu taula', headers: 'Goiburuak', headersBoth: 'Biak', headersColumn: 'Lehen zutabea', headersNone: 'Bat ere ez', headersRow: 'Lehen errenkada', heightUnit: 'height unit', // MISSING 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: 'Errenkada kopurua 0 baino handiagoa den zenbakia izan behar da.', invalidWidth: 'Taularen zabalera zenbaki bat izan behar da.', menu: 'Taularen propietateak', row: { menu: 'Errenkada', insertBefore: 'Txertatu errenkada aurretik', insertAfter: 'Txertatu errenkada ondoren', deleteRow: 'Ezabatu errenkadak' }, rows: 'Errenkadak', summary: 'Laburpena', title: 'Taularen propietateak', toolbar: 'Taula', widthPc: 'ehuneko', widthPx: 'pixel', widthUnit: 'zabalera unitatea' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/en-gb.js0000664000201500020150000000442615203533231023661 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'height unit', // MISSING 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/lang/hu.js0000664000201500020150000000521215203533231023277 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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', columnHeader: 'Column Header', // MISSING rowHeader: 'Row Header', // MISSING 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', heightUnit: 'Magasság egység', 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/dialogs/0000755000201500020150000000000015203533231023024 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/table/dialogs/table.js0000775000201500020150000004434015203533231024463 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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().call( this, 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; function shouldReplaceThByTd( cell, headers, index ) { return cell.type == CKEDITOR.NODE_ELEMENT && ( !headers || index !== 0 ); } return { title: editor.lang.table.title, minWidth: 310, minHeight: CKEDITOR.env.ie ? 310 : 280, getModel: function( editor ) { if ( this.dialog.getName() !== 'tableProperties' ) { return null; } var selection = editor.getSelection(), range = selection && selection.getRanges()[ 0 ]; return range ? range._getTableElement( { table: 1 } ) : null; }, 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 (https://dev.ckeditor.com/ticket/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 = table.getElementsByTag( 'thead' ).getItem( 0 ); tbody = table.getElementsByTag( 'tbody' ).getItem( 0 ); var theRow = tbody.getElementsByTag( 'tr' ).getItem( 0 ); if ( !thead ) { thead = new CKEDITOR.dom.element( 'thead' ); thead.insertBefore( tbody ); } // Change TD to TH: for ( i = 0; i < theRow.getChildCount(); i++ ) { var th = theRow.getChild( i ); // Skip bookmark nodes. (https://dev.ckeditor.com/ticket/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 ); while ( thead.getChildCount() > 0 ) { theRow = thead.getFirst(); for ( i = 0; i < theRow.getChildCount(); i++ ) { var newCell = theRow.getChild( i ); // In case when header is replaced to td element, // check if the replaced cell should contain a 'row' scope (#2881). if ( shouldReplaceThByTd( newCell, headers, i ) ) { newCell.renameNode( 'td' ); newCell.removeAttribute( 'scope' ); } else { newCell.setAttribute( 'scope', 'row' ); } } // Append the row to the start (#1397). tbody.append( theRow, true ); } 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' ); // If "both" is set, the first cell in table head should have scope "col"(#2996). if ( headers === 'both' && row === 0 ) { newCell.setAttribute( 'scope', 'col' ); } else { 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 (https://dev.ckeditor.com/ticket/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, (https://dev.ckeditor.com/ticket/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.left, 'left' ], [ editor.lang.common.center, 'center' ], [ editor.lang.common.right, '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. (https://dev.ckeditor.com/ticket/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 ); table.append( captionElement, true ); } 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-5.0.10/devel/third-party/ckeditor-src/plugins/table/icons/0000755000201500020150000000000015153141500022513 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/table/icons/table.png0000664000201500020150000000051315153141500024311 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ð:IDAT8Ëcôðð` °000ü§Ä&Ь°@iF4ñÿÄŠ ¼¨ØÒQb£H¥@dd §J þd'#•%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/table/icons/hidpi/0000755000201500020150000000000015153141500023610 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/table/icons/hidpi/table.png0000664000201500020150000000115215153141500025406 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎnIDATXýVA!Âãöÿ’Z¶,ElJÒ¬…TÔQ¼® V&"€ˆK\‡O”‘«tø â ~´ˆøðÏf´Ëg?Bû¤DcŒÓå“Z2Ñ7¬dMÍ~—O01Kªø;|òŽNò>1ëcÛúÕÒjyuMsÂ'Ó¸AÚ֯ƭYì ŸgçTcˆø˜úü¦Ûák¥ØàÑݱ¸IÇò‰¥ù>Ë#TUºE§m£*°zìNˆ#åŠ:òršÙ,_ä7¡Ý<«äÙ€«Uá.±ƒ‹xå=pbí xrõQâ¯ÞY^6É6š[{‰0ê31ñü£÷€õwÞ?T¤d·.Ê*Q>˱8Ê@ÿ2JF×¶Ý£Ëu›­·ï(&¼¥¸Òa¶¹"ntB2ãµË$»Z=Y ÑnâUÌcZï_ž{ å[$i[…D¼cöçS&yŸïÿõ3÷þHZ;|ÔDU²·þ_®ã™½sA/>³†ó%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/ajax/0000755000201500020150000000000015203533226021242 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/ajax/plugin.js0000664000201500020150000001655215203533226023111 0ustar puckpuck/* global ActiveXObject */ /** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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 getResponse( xhr, type ) { if ( !checkStatus( xhr ) ) { return null; } switch ( type ) { case 'text': return xhr.responseText; case 'xml': var xml = xhr.responseXML; return new CKEDITOR.xml( xml && xml.firstChild ? xml : xhr.responseText ); case 'arraybuffer': return xhr.response; default: return null; } } function load( url, callback, responseType ) { var async = !!callback; var xhr = createXMLHttpRequest(); if ( !xhr ) return null; if ( async && responseType !== 'text' && responseType !== 'xml' ) { xhr.responseType = responseType; } xhr.open( 'GET', url, async ); if ( async ) { // TODO: perform leak checks on this closure. xhr.onreadystatechange = function() { if ( xhr.readyState == 4 ) { callback( getResponse( xhr, responseType ) ); xhr = null; } }; } xhr.send( null ); return async ? '' : getResponse( xhr, responseType ); } function post( url, data, contentType, callback, responseType ) { var xhr = createXMLHttpRequest(); if ( !xhr ) return null; xhr.open( 'POST', url, true ); xhr.onreadystatechange = function() { if ( xhr.readyState == 4 ) { if ( callback ) { callback( getResponse( xhr, responseType ) ); } xhr = null; } }; xhr.setRequestHeader( 'Content-type', contentType || 'application/x-www-form-urlencoded; charset=UTF-8' ); xhr.send( data ); } return { /** * Loads data from a given URL. * * // 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. * @param {String} [responseType='text'] Defines type of returned data. * Currently supports: `text`, `xml`, `arraybuffer`. This parameter was introduced in `4.16.0`. * @returns {String/null} The loaded data for synchronous request. For asynchronous requests - * empty string. For invalid requests - `null`. */ load: function( url, callback, responseType ) { responseType = responseType || 'text'; return load( url, callback, responseType ); }, /** * 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, 'text' ); }, /** * Loads data from a given 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 synchronous * request. For asynchronous requests - empty string. For invalid requests - `null`. */ loadXml: function( url, callback ) { return load( url, callback, 'xml' ); }, /** * Loads data from a given URL as text. * * // Load text synchronously. * var text = CKEDITOR.ajax.loadText( 'somedata.txt' ); * alert( text ); * * // Load text asynchronously. * var data = CKEDITOR.ajax.loadText( 'somedata.txt', function( textData ) { * alert( textData ); * } ); * * @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} String storing the loaded data for synchronous * request. For asynchronous requests - empty string. For invalid requests - `null`. */ loadText: function( url, callback ) { return load( url, callback, 'text' ); }, /** * Loads data from a given URL as binary data. * * // Load data synchronously. * var binaryData = CKEDITOR.ajax.loadBinary( 'somedata.png' ); * alert( binaryData ); * * // Load data asynchronously. * var data = CKEDITOR.ajax.loadBinary( 'somedata.png', function( binaryData ) { * alert( binaryData ); * } ); * * @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 {ArrayBuffer} ArrayBuffer storing the loaded data for synchronous * request. For asynchronous requests - empty string. For invalid requests - `null`. */ loadBinary: function( url, callback ) { return load( url, callback, 'arraybuffer' ); } }; } )(); } )(); rt-5.0.10/devel/third-party/ckeditor-src/plugins/dialog/0000755000201500020150000000000015203533226021556 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/dialog/styles/0000775000201500020150000000000015153141500023075 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/dialog/styles/dialog.css0000664000201500020150000000034715153141500025052 0ustar puckpuck.cke_dialog_open { overflow: hidden; } .cke_dialog_container { position: fixed; overflow-y: auto; overflow-x: auto; width: 100%; height: 100%; top: 0; left: 0; z-index: 10010; } .cke_dialog_body { position: relative; } rt-5.0.10/devel/third-party/ckeditor-src/plugins/dialog/plugin.js0000664000201500020150000034531715203533226023431 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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() { 'use strict'; var cssLength = CKEDITOR.tools.cssLength, defaultDialogDefinition, currentCover, stylesLoaded = false; function focusActiveTab( dialog ) { dialog._.tabBarMode = true; dialog._.tabs[ dialog._.currentTabId ][ 0 ].focus(); dialog._.currentFocusIndex = -1; } 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 useFlex = !CKEDITOR.env.ie || CKEDITOR.env.edge, 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 (https://dev.ckeditor.com/ticket/13184). editor.plugins.clipboard && CKEDITOR.plugins.clipboard.preventDefaultDropOnElement( body ); // IFrame shim for dialog that masks activeX in IE. (https://dev.ckeditor.com/ticket/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 (https://dev.ckeditor.com/ticket/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, model: null, contentSize: { width: 0, height: 0 }, size: { width: 0, height: 0 }, contents: {}, buttons: {}, accessKeyMap: {}, // Default value is 0.5 which means a centered dialog. viewportRatio: { width: 0.5, height: 0.5 }, // 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 = { top: 0, visibility: 'hidden' }; if ( CKEDITOR.env.ie6Compat ) { startStyles.position = 'absolute'; } 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, dialog: this }, 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 (https://dev.ckeditor.com/ticket/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 (https://dev.ckeditor.com/ticket/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. focusActiveTab( me ); 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 (https://dev.ckeditor.com/ticket/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 (https://dev.ckeditor.com/ticket/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. (https://dev.ckeditor.com/ticket/4531,https://dev.ckeditor.com/ticket/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 ) { // https://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 (https://dev.ckeditor.com/ticket/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( '_' ) ) ); focusActiveTab( this ); 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( 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 ) { var containerWidth = this.parts.dialog.getParent().getClientSize().width; this._.position.x = containerWidth - 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 ) { var element = this._.element.getFirst(), rtl = this._.editor.lang.dir == 'rtl'; // (https://dev.ckeditor.com/ticket/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%' ); } var containerSize = this.parts.dialog.getParent().getClientSize(), dialogSize = this.getSize(), ratios = this._.viewportRatio, freeSpace = { width: Math.max( containerSize.width - dialogSize.width, 0 ), height: Math.max( containerSize.height - dialogSize.height, 0 ) }; if ( this._.position && this._.position.x == x && this._.position.y == y ) { // If position didn't change window might have been resized. x = Math.floor( freeSpace.width * ratios.width ); y = Math.floor( freeSpace.height * ratios.height ); } else { updateRatios( this, x, y ); } // Save the current position. this._.position = { x: x, y: y }; // Translate coordinate for RTL. if ( rtl ) { x = freeSpace.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, definition = this.definition, documentBody = CKEDITOR.document.getBody(), baseFloatZIndex = this._.editor.config.baseFloatZIndex; if ( !( element.getParent() && element.getParent().equals( documentBody ) ) ) { element.appendTo( documentBody ); } else { element.setStyle( 'display', useFlex ? 'flex' : '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(); // Selects the first tab if no tab is already selected. if ( this._.currentTabId === null ) { this.selectPage( this.definition.contents[ 0 ].id ); } // Set z-index to dialog and container (#3559). if ( CKEDITOR.dialog._.currentZIndex === null ) { CKEDITOR.dialog._.currentZIndex = baseFloatZIndex; } this._.element.getFirst().setStyle( 'z-index', CKEDITOR.dialog._.currentZIndex += 10 ); this.getElement().setStyle( 'z-index', CKEDITOR.dialog._.currentZIndex ); // Maintain the dialog ordering and dialog cover. if ( CKEDITOR.dialog._.currentTop === null ) { CKEDITOR.dialog._.currentTop = this; this._.parentDialog = null; showCover( this._.editor ); } else if ( CKEDITOR.dialog._.currentTop !== this ) { // Reposition the new dialog only if the current dialog is not already on the top (#3638). this._.parentDialog = CKEDITOR.dialog._.currentTop; var parentElement = this._.parentDialog.getElement().getFirst(); parentElement.$.style.zIndex -= Math.floor( baseFloatZIndex / 2 ); this._.parentDialog.getElement().setStyle( 'z-index', parentElement.$.style.zIndex ); 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.0 */ layout: function() { var el = this.parts.dialog; if ( !this._.moved && useFlex ) { return; } var dialogSize = this.getSize(), win = CKEDITOR.document.getWindow(), viewSize = win.getViewPaneSize(), posX, posY; if ( this._.moved && this._.position ) { posX = this._.position.x; posY = this._.position.y; } else { posX = ( viewSize.width - dialogSize.width ) / 2; posY = ( viewSize.height - dialogSize.height ) / 2; } if ( !CKEDITOR.env.ie6Compat ) { el.setStyle( 'position', 'absolute' ); el.removeStyle( 'margin' ); } posX = Math.floor( posX ); posY = Math.floor( posY ); this.move( posX, 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. (https://dev.ckeditor.com/ticket/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(), newZIndex = parseInt( parentElement.$.style.zIndex, 10 ) + Math.floor( this._.editor.config.baseFloatZIndex / 2 ); this._.parentDialog.getElement().setStyle( 'z-index', newZIndex ); parentElement.setStyle( 'z-index', newZIndex ); } 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. (https://dev.ckeditor.com/ticket/172) setTimeout( function() { editor.focusManager.unlock(); // Fixed iOS focus issue (https://dev.ckeditor.com/ticket/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 (https://dev.ckeditor.com/ticket/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 ), 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' ); page.setStyle( 'min-height', '100%' ); var env = CKEDITOR.env, 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' ); tab.removeAttribute( 'aria-selected' ); page.hide(); } page.setAttribute( 'aria-hidden', i != id ); } var selected = this._.tabs[ id ]; selected[ 0 ].addClass( 'cke_dialog_tab_selected' ); selected[ 0 ].setAttribute( 'aria-selected', true ); // [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 (https://dev.ckeditor.com/ticket/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.0 * @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(); if ( this.getButton( 'ok' ) ) { 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(); if ( this.getButton( 'ok' ) ) { this.getButton( 'ok' ).enable(); } } this.fire( 'state', state ); }, /** * @inheritdoc CKEDITOR.dialog.definition#getModel */ getModel: function( editor ) { // Prioritize forced model. if ( this._.model ) { return this._.model; } if ( this.definition.getModel ) { return this.definition.getModel( editor ); } return null; }, /** * Sets the given model as the subject of the dialog. * * For most plugins, like the `table` or `link` plugin, the given model should be a * {@link CKEDITOR.dom.element DOM element instance} if there is an element related to the dialog. * For widget plugins (`image2`, `placeholder`) you should provide a {@link CKEDITOR.plugins.widget} instance that * is the subject of this dialog. * * @since 4.13.0 * @private * @param {CKEDITOR.dom.element/CKEDITOR.plugins.widget/Object/null} newModel The model to be set. */ setModel: function( newModel ) { this._.model = newModel; }, /** * Returns the current dialog mode based on the state of the feature used with this dialog. * * In case if the dialog definition did not define the {@link CKEDITOR.dialog.definition#getMode} * function, it will use the {@link #getModel} method to recognize the editor mode: * * The {@link CKEDITOR.dialog#EDITING_MODE editing mode} is used when the method returns: * * * A {@link CKEDITOR.dom.element} attached to the DOM. * * A {@link CKEDITOR.plugins.widget} instance. * * Otherwise the {@link CKEDITOR.dialog#CREATION_MODE creation mode} is used. * * @since 4.13.0 * @param {CKEDITOR.editor} editor * @returns {Number} Dialog mode. */ getMode: function( editor ) { if ( this.definition.getMode ) { return this.definition.getMode( editor ); } var model = this.getModel( editor ); if ( !model || ( model instanceof CKEDITOR.dom.element && !model.getParent() ) ) { return CKEDITOR.dialog.CREATION_MODE; } return CKEDITOR.dialog.EDITING_MODE; } }; CKEDITOR.tools.extend( CKEDITOR.dialog, { /** * Indicates that the dialog is introducing new changes to the editor, for example inserting * a newly created element as a part of a feature used with this dialog. * * @static * @since 4.13.0 */ CREATION_MODE: 0, /** * Indicates that the dialog is modifying the existing editor state, for example updating * an existing element as a part of a feature used with this dialog. * * @static * @since 4.13.0 */ EDITING_MODE: 1, /** * 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.0 * @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 ); 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. */ function definitionObject( 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(), containerSize = dialog.parts.dialog.getParent().getClientSize(), 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 ] > containerSize.width - dialogSize.width - magnetDistance ) { realX = containerSize.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 ] > containerSize.height - dialogSize.height - magnetDistance ) { realY = containerSize.height - dialogSize.height + margins[ 2 ]; } else { realY = abstractDialogCoords.y; } realX = Math.floor( realX ); realY = Math.floor( realY ); 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 ) { if ( !dialog._.moved ) { var container = dialog._.element, element = container.getFirst(); element.setStyle( 'position', 'absolute' ); container.removeStyle( 'display' ); dialog._.moved = true; dialog.layout(); } 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, isBorderBox = !( CKEDITOR.env.gecko || CKEDITOR.env.ie && CKEDITOR.env.quirks ); // 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. // Use size of current tab panel because we can't rely on size of contents container (#3144). wrapperHeight = startSize.height - dialog.parts.contents.getFirst( isVisible ).getSize( 'height', isBorderBox ); wrapperWidth = startSize.width - dialog.parts.contents.getFirst( isVisible ).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(); function isVisible( el ) { return el.isVisible(); } } ); // 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 && parseInt( element.getComputedStyle( 'right' ), 10 ), position = dialog.getPosition(); position.x = position.x || 0; position.y = position.y || 0; 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 ); } internalHeight = Math.floor( internalHeight ); internalWidth = Math.floor( internalWidth ); // 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 ) { var x = dialog._.position.x, y = dialog._.position.y; updateRatios( dialog, x, y ); } 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 ); } } } function updateRatios( dialog, x, y ) { var containerSize = dialog.parts.dialog.getParent().getClientSize(), dialogSize = dialog.getSize(), ratios = dialog._.viewportRatio, freeSpace = { width: Math.max( containerSize.width - dialogSize.width, 0 ), height: Math.max( containerSize.height - dialogSize.height, 0 ) }; ratios.width = freeSpace.width ? ( x / freeSpace.width ) : ratios.width; ratios.height = freeSpace.height ? ( y / freeSpace.height ) : ratios.height; dialog._.viewportRatio = ratios; } // Caching reusable covers and allowing only one cover on screen. var covers = {}; function cancelEvent( ev ) { ev.data.preventDefault( 1 ); } function showCover( editor ) { var config = editor.config, skinName = ( CKEDITOR.skinName || editor.config.skin ), backgroundColorStyle = config.dialog_backgroundCoverColor || ( skinName == 'moono-lisa' ? 'black' : 'white' ), backgroundCoverOpacity = config.dialog_backgroundCoverOpacity, baseFloatZIndex = config.baseFloatZIndex, coverKey = CKEDITOR.tools.genKey( backgroundColorStyle, backgroundCoverOpacity, baseFloatZIndex ), coverElement = covers[ coverKey ]; CKEDITOR.document.getBody().addClass( 'cke_dialog_open' ); 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; // Using Safari/Mac, focus must be kept where it is (https://dev.ckeditor.com/ticket/7027) if ( !( CKEDITOR.env.mac && CKEDITOR.env.webkit ) ) coverElement.focus(); } function hideCover( editor ) { CKEDITOR.document.getBody().removeClass( 'cke_dialog_open' ); if ( !currentCover ) return; editor.focusManager.remove( currentCover ); currentCover.hide(); } function removeCovers() { for ( var coverId in covers ) covers[ coverId ].remove(); covers = {}; } var accessKeyProcessors = {}; function accessKeyDownHandler( 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(); } function accessKeyUpHandler( 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(); } } function registerAccessKey( 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 } ); } function unregisterAccessKey( 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 ]; } } function tabAccessKeyUp( dialog, key ) { if ( dialog._.accessKeyMap[ key ] ) dialog.selectPage( dialog._.accessKeyMap[ key ] ); } function tabAccessKeyDown() {} ( 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. * @param {String} [ext.tabId] You can provide additional property (`tabId`) if you wish to open the dialog on a specific tabId. * * // Open the dialog on the 'keystroke' tabId. * editor.addCommand( 'keystroke', new CKEDITOR.dialogCommand( 'a11yHelp', { tabId: 'keystroke' } ) ); */ CKEDITOR.dialogCommand = function( dialogName, ext ) { this.dialogName = dialogName; CKEDITOR.tools.extend( this, ext, true ); }; CKEDITOR.dialogCommand.prototype = { exec: function( editor ) { var tabId = this.tabId; editor.openDialog( this.dialogName, function( dialog ) { // Select different tab if it's provided (#830). if ( tabId ) { dialog.selectPage( tabId ); } } ); }, // 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 integerRegex = /^\d*$/, numberRegex = /^\d*(?:\.\d+)?$/, htmlLengthRegex = /^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/, cssLengthRegex = /^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i, inlineStylePropertyRegex = /^(--|-?([a-zA-Z_]|\\))(\\|[a-zA-Z0-9-_])*\s*?:\s*?[^:;]+$/; /** * {@link CKEDITOR.dialog Dialog} `OR` logical value indicates the * relation between validation functions. * * @readonly * @property {Number} [=1] * @member CKEDITOR */ CKEDITOR.VALIDATE_OR = 1; /** * {@link CKEDITOR.dialog Dialog} `AND` logical value indicates the * relation between validation functions. * * @readonly * @property {Number} [=2] * @member CKEDITOR */ CKEDITOR.VALIDATE_AND = 2; /** * The namespace with dialog helper validation functions. * * @class * @singleton */ CKEDITOR.dialog.validate = { /** * Performs validation functions composition. * * ```javascript * CKEDITOR.dialog.validate.functions( * CKEDITOR.dialog.validate.notEmpty( 'Value is required.' ), * CKEDITOR.dialog.validate.number( 'Value is not a number.' ), * 'error!' * ); * ``` * **Note:** validation functions should return `true` value for successful validation. Since 4.19.1 * this method does not coerce return type to boolean. * * @param {Function...} validators Validation functions which will be composed into a single validator. * @param {String} [msg] Error message returned by the composed validation function. * @param {Number} [relation=CKEDITOR.VALIDATE_OR] Indicates a relation between validation functions. * Use {@link CKEDITOR#VALIDATE_OR} or {@link CKEDITOR#VALIDATE_AND}. * * @returns {Function} Composed validation function. */ functions: function() { var args = arguments; return function( value ) { // 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. if ( this && this.getValue ) { value = this.getValue(); } 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 = runValidators( functions, relation, value ); return !passed ? msg : true; }; function runValidators( functions, relation, value ) { var passed = relation == CKEDITOR.VALIDATE_AND; for ( var i = 0; i < functions.length; i++ ) { // Do not confuse `true` with `truthy` not empty error message (#4449). var doesValidationPassed = functions[ i ]( value ) === true; if ( relation == CKEDITOR.VALIDATE_AND ) { passed = passed && doesValidationPassed; } else { passed = passed || doesValidationPassed; } } return passed; } }, /** * Checks if a dialog UI element value meets the regex condition. * * ```javascript * CKEDITOR.dialog.validate.regex( /^\d*$/, 'error!' )( '123' ) // true * CKEDITOR.dialog.validate.regex( /^\d*$/, 'error!' )( '123.321' ) // error! * ``` * * @param {RegExp} regex Regular expression used to validate the value. * @param {String} msg Validator error message. * @returns {Function} Validation function. */ regex: function( regex, msg ) { return this.functions( function( val ) { return regex.test( val ); }, msg ); }, /** * Checks if a dialog UI element value is not an empty string. * * ```javascript * CKEDITOR.dialog.validate.notEmpty( 'error!' )( 'test' ) // true * CKEDITOR.dialog.validate.notEmpty( 'error!' )( ' ' ) // error! * ``` * * @param {String} msg Validator error message. * @returns {Function} Validation function. */ notEmpty: function( msg ) { return this.functions( function( val ) { var trimCharacters = '\\u0020\\u00a0\\u1680\\u202f\\u205f\\u3000\\u2000-\\u200a\\s', trimRegex = new RegExp( '^[' + trimCharacters + ']+|[' + trimCharacters + ']+$', 'g' ); return val.replace( trimRegex, '' ).length > 0; }, msg ); }, /** * Checks if a dialog UI element value is an Integer. * * ```javascript * CKEDITOR.dialog.validate.integer( 'error!' )( '123' ) // true * CKEDITOR.dialog.validate.integer( 'error!' )( '123.321' ) // error! * ``` * * @param {String} msg Validator error message. * @returns {Function} Validation function. */ integer: function( msg ) { return this.regex( integerRegex, msg ); }, /** * Checks if a dialog UI element value is a Number. * * ```javascript * CKEDITOR.dialog.validate.number( 'error!' )( '123' ) // true * CKEDITOR.dialog.validate.number( 'error!' )( 'test' ) // error! * ``` * * @param {String} msg Validator error message. * @returns {Function} Validation function. */ 'number': function( msg ) { return this.regex( numberRegex, msg ); }, /** * Checks if a dialog UI element value is a correct CSS length value. * * It allows `px`, `em`, `ex`, `in`, `cm`, `mm`, `pt`, `pc` units. * * ```javascript * CKEDITOR.dialog.validate.cssLength( 'error!' )( '10pt' ) // true * CKEDITOR.dialog.validate.cssLength( 'error!' )( 'solid' ) // error! * ``` * * @param {String} msg Validator error message. * @returns {Function} Validation function. */ 'cssLength': function( msg ) { return this.functions( function( val ) { return cssLengthRegex.test( CKEDITOR.tools.trim( val ) ); }, msg ); }, /** * Checks if a dialog UI element value is a correct HTML length value. * * It allows `px` units. * * ```javascript * CKEDITOR.dialog.validate.htmlLength( 'error!' )( '10px' ) // true * CKEDITOR.dialog.validate.htmlLength( 'error!' )( 'solid' ) // error! * ``` * * @param {String} msg Validator error message. * @returns {Function} Validation function. */ 'htmlLength': function( msg ) { return this.functions( function( val ) { return htmlLengthRegex.test( CKEDITOR.tools.trim( val ) ); }, msg ); }, /** * Checks if a dialog UI element value is a correct CSS inline style. * * ```javascript * CKEDITOR.dialog.validate.inlineStyle( 'error!' )( '' ) // true * CKEDITOR.dialog.validate.inlineStyle( 'error!' )( 'height: 10px; width: 20px;' ) // true * CKEDITOR.dialog.validate.inlineStyle( 'error!' )( 'test' ) // error! * ``` * * @param {String} msg Validator error message. * @returns {Function} Validation function. */ 'inlineStyle': function( msg ) { return this.functions( function( val ) { var properties = CKEDITOR.tools.trim( val ).split( ';' ); // Empty value is treated as valid value. It can be the only value (when empty 'val' provided) // or the last one in table after splitting (due to ';' on end). // Such value is removed so `every` call below can check for valid non-empty values only. if ( properties[ properties.length - 1 ] === '' ) { properties.pop(); } return CKEDITOR.tools.array.every( properties, function( property ) { return inlineStylePropertyRegex.test( CKEDITOR.tools.trim( property ) ); } ); }, msg ); }, /** * Checks if a dialog UI element value and the given value are equal. * * ```javascript * CKEDITOR.dialog.validate.equals( 'foo', 'error!' )( 'foo' ) // true * CKEDITOR.dialog.validate.equals( 'foo', 'error!' )( 'baz' ) // error! * ``` * * @param {String} value The value to compare. * @param {String} msg Validator error message. * @returns {Function} Validation function. */ equals: function( value, msg ) { return this.functions( function( val ) { return val == value; }, msg ); }, /** * Checks if a dialog UI element value and the given value are not equal. * * ```javascript * CKEDITOR.dialog.validate.notEqual( 'foo', 'error!' )( 'baz' ) // true * CKEDITOR.dialog.validate.notEqual( 'foo', 'error!' )( 'foo' ) // error! * ``` * * @param {String} value The value to compare. * @param {String} msg Validator error message. * @returns {Function} Validation function. */ 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 a dialog instance is created. * @param {CKEDITOR.dom.element/CKEDITOR.plugins.widget/Object} [forceModel] Forces opening the dialog * using the given model as a subject. The forced model will take precedence before the * {@link CKEDITOR.dialog.definition#getModel} method. Available since 4.13.0. * @returns {CKEDITOR.dialog} The dialog object corresponding to the dialog displayed or * `null` if the dialog name is not registered. * @see CKEDITOR.dialog#add */ openDialog: function( dialogName, callback, forceModel ) { 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 ) ); dialog.setModel( forceModel ); 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, forceModel ); }, this, 0, 1 ); } CKEDITOR.skin.loadPart( 'dialog' ); // Dissolve model, so `definition.getModel` can take precedence // in the next dialog opening (#2423). if ( dialog ) { dialog.once( 'hide', function() { dialog.setModel( null ); }, null, null, 999 ); } return dialog; } } ); CKEDITOR.plugins.add( 'dialog', { requires: 'dialogui', init: function( editor ) { if ( !stylesLoaded ) { CKEDITOR.document.appendStyleSheet( this.path + 'styles/dialog.css' ); stylesLoaded = true; } 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.0 * @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 = 'table:advanced;image:Link'; * * @since 3.5.0 * @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.0 * @cfg {Boolean} [dialog_noConfirmCancel=false] * @member CKEDITOR.config */ /** * Event fired when a dialog definition is about to be used to create a dialog in * 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 {Object} data * @param {String} data.name The name of the dialog. * @param {CKEDITOR.dialog.definition} data.definition The dialog definition that * is being loaded. * @param {CKEDITOR.dialog} data.dialog A dialog instance that the definition is loaded * for. Introduced in **CKEditor 4.13.0**. * @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 is going to 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.0 * @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.0 * @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-5.0.10/devel/third-party/ckeditor-src/plugins/dialog/samples/0000755000201500020150000000000015203533226023222 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/dialog/samples/assets/0000755000201500020150000000000015203533226024524 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/dialog/samples/assets/my_dialog.js0000664000201500020150000000157115203533226027034 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/dialog/samples/dialog.html0000664000201500020150000001635015203533226025356 0ustar puckpuck 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 Examples.

            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-5.0.10/devel/third-party/ckeditor-src/plugins/dialog/dialogDefinition.js0000664000201500020150000006301715203533226025375 0ustar puckpuck// jscs:disable disallowMixedSpacesAndTabs /** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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 */ /** * Returns the subject of the dialog. * * For most plugins, like the `table` or `link` plugin, it should return a * {@link CKEDITOR.dom.element DOM element instance} if there is an element related to the dialog. * For widget plugins (`image2`, `placeholder`) it should return a {@link CKEDITOR.plugins.widget} instance that * is the subject of this dialog. * * @since 4.13.0 * @method getModel * @param {CKEDITOR.editor} editor * @returns {CKEDITOR.dom.element/CKEDITOR.plugins.widget/Object/null} Returns `null` if the dialog does not use the model. */ /** * Returns the current dialog mode based on the state of the feature used with this dialog. * * See {@link CKEDITOR.dialog#EDITING_MODE} and {@link CKEDITOR.dialog#CREATION_MODE}. * * @since 4.13.0 * @method getMode * @param {CKEDITOR.editor} editor * @returns {Number} Dialog mode. */ /** * The function to execute when the "OK" button is pressed. * * @property {Function} onOk */ /** * The function to execute when the "Cancel" button 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 */ /** * The function executed every time the dialog is closed. * * @property {Function} onHide */ /** * 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 a 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 the 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`](https://www.unicode.org/charts/PDF/U2000.pdf) – for Right-To-Left, * * [`\u202B`](https://www.unicode.org/charts/PDF/U2000.pdf) – for Left-To-Right. * * This marker allows for restoring the same text direction upon the next dialog opening. * * @since 4.5.0 * @property {Boolean} bidi */ rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/0000755000201500020150000000000015203533227022250 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/plugin.js0000664000201500020150000020252415203533227024113 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ /** * @fileOverview The [Magic Line](https://ckeditor.com/cke4/addon/magicline) 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,az,bg,ca,cs,cy,da,de,de-ch,el,en,en-au,en-gb,eo,es,es-mx,et,eu,fa,fi,fr,fr-ca,gl,he,hr,hu,id,it,ja,km,ko,ku,lt,lv,nb,nl,no,oc,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,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. // (https://dev.ckeditor.com/ticket/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 (https://dev.ckeditor.com/ticket/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. editor._.magiclineBackdoor = { 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. (https://dev.ckeditor.com/ticket/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) (https://dev.ckeditor.com/ticket/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; } 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. (https://dev.ckeditor.com/ticket/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; // (https://dev.ckeditor.com/ticket/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). * * Read more in the {@glink features/magicline documentation} * and see the {@glink examples/magicline example}. * * // 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}. * * Read more in the {@glink features/magicline documentation} * and see the {@glink examples/magicline example}. * * // 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 accesses the closest unreachable focus space **before** * the caret (start of the selection). If there is no focus space available, the selection remains unchanged. * * Read more in the {@glink features/magicline documentation} * and see the {@glink examples/magicline example}. * * // 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 accesses the closest unreachable focus space **after** * the caret (start of the selection). If there is no focus space available, the selection remains unchanged. * * Read more in the {@glink features/magicline documentation} * and see the {@glink examples/magicline example}. * * // 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. * * Read more in the {@glink features/magicline documentation} * and see the {@glink examples/magicline example}. * * // 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. * * Read more in the {@glink features/magicline documentation} * and see the {@glink examples/magicline example}. * * // 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. * * Read more in the {@glink features/magicline documentation} * and see the {@glink examples/magicline example}. * * // Enables the greedy "put everywhere" mode. * CKEDITOR.config.magicline_everywhere = true; * * @cfg {Boolean} [magicline_everywhere=false] * @member CKEDITOR.config */ rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/dev/0000755000201500020150000000000015203533227023026 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/dev/magicline.html0000664000201500020150000055413615203533227025664 0ustar puckpuck 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-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/0000755000201500020150000000000015203533227023171 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/zh.js0000664000201500020150000000040415203533227024150 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'zh', { title: '在此æ’入段è½' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/nb.js0000664000201500020150000000041315203533227024126 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'nb', { title: 'Sett inn nytt avsnitt her' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/eo.js0000664000201500020150000000041415203533227024133 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'eo', { title: 'Enmeti paragrafon ĉi-tien' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/es.js0000664000201500020150000000041115203533227024134 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'es', { title: 'Insertar párrafo aquí' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/ro.js0000664000201500020150000000041215203533227024146 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'ro', { title: 'Inserează paragraf aici' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/hr.js0000664000201500020150000000040615203533227024142 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'hr', { title: 'Ubaci paragraf ovdje' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/it.js0000664000201500020150000000041115203533227024141 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'it', { title: 'Inserisci paragrafo qui' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/de-ch.js0000664000201500020150000000041215203533227024506 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'de-ch', { title: 'Absatz hier einfügen' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/sk.js0000664000201500020150000000040415203533227024144 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'sk', { title: 'Odsek vložiÅ¥ sem' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/az.js0000664000201500020150000000041315203533227024141 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'az', { title: 'Abzası burada É™lavÉ™ et' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/pt.js0000664000201500020150000000041115203533227024150 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'pt', { title: 'Inserir parágrafo aqui' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/si.js0000664000201500020150000000044115203533227024143 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'si', { title: 'චේදය ඇතුලත් කරන්න' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/ko.js0000664000201500020150000000041115203533227024136 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'ko', { title: 'ì—¬ê¸°ì— ë‹¨ë½ ì‚½ìž…' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/cy.js0000664000201500020150000000041015203533227024137 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'cy', { title: 'Mewnosod paragraff yma' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/uk.js0000664000201500020150000000041515203533227024150 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'uk', { title: 'Ð’Ñтавити абзац' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/zh-cn.js0000664000201500020150000000040715203533227024551 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'zh-cn', { title: '在这æ’入段è½' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/sv.js0000664000201500020150000000040615203533227024161 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'sv', { title: 'Infoga paragraf här' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/lt.js0000664000201500020150000000041215203533227024145 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'lt', { title: 'Ä®terpti pastraipÄ… Äia' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/fr-ca.js0000664000201500020150000000041715203533227024523 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'fr-ca', { title: 'Insérer le paragraphe ici' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/et.js0000664000201500020150000000041315203533227024137 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'et', { title: 'Sisesta siia lõigu tekst' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/pl.js0000664000201500020150000000040315203533227024141 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'pl', { title: 'Wstaw nowy akapit' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/bg.js0000664000201500020150000000043215203533227024120 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'bg', { title: 'Вмъкнете параграф тук' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/fa.js0000664000201500020150000000043215203533227024116 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'fa', { title: 'قرار دادن بند در اینجا' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/ku.js0000664000201500020150000000041615203533227024151 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'ku', { title: 'بڕگە لێرە دابنێ' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/el.js0000664000201500020150000000043415203533227024132 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'el', { title: 'Εισάγετε παÏάγÏαφο εδώ' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/fi.js0000664000201500020150000000041215203533227024124 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'fi', { title: 'Lisää kappale tähän.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/ru.js0000664000201500020150000000043615203533227024162 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'ru', { title: 'Ð’Ñтавить здеÑÑŒ параграф' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/gl.js0000664000201500020150000000041415203533227024132 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'gl', { title: 'Inserir aquí o parágrafo' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/sr-latn.js0000664000201500020150000000041315203533227025107 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'sr-latn', { title: 'Umetnite pasus ovde.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/oc.js0000664000201500020150000000041315203533227024130 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'oc', { title: 'Inserir un paragraf aicí' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/sq.js0000664000201500020150000000040715203533227024155 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'sq', { title: 'Shto paragrafin këtu' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/pt-br.js0000664000201500020150000000041715203533227024557 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'pt-br', { title: 'Inserir um parágrafo aqui' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/af.js0000664000201500020150000000041015203533227024112 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'af', { title: 'Voeg paragraaf hier in' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/km.js0000664000201500020150000000046715203533227024147 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'km', { title: 'បញ្ចូល​កážáž¶ážážŽáŸ’ឌ​នៅ​ទីនáŸáŸ‡' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/nl.js0000664000201500020150000000041115203533227024136 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'nl', { title: 'Hier paragraaf invoeren' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/es-mx.js0000664000201500020150000000041715203533227024564 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'es-mx', { title: 'Insertar un párrafo aquí' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/da.js0000664000201500020150000000040015203533227024107 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'da', { title: 'Indsæt afsnit' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/he.js0000664000201500020150000000041215203533227024122 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'he', { title: 'הכנס פסקה ×›×ן' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/ca.js0000664000201500020150000000041515203533227024114 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'ca', { title: 'Insereix el paràgraf aquí' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/de.js0000664000201500020150000000040715203533227024122 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'de', { title: 'Absatz hier einfügen' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/tt.js0000664000201500020150000000043215203533227024157 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'tt', { title: 'Бирегә параграф Ó©Ñтәү' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/vi.js0000664000201500020150000000041215203533227024144 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'vi', { title: 'Chèn Ä‘oạn vào đây' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/cs.js0000664000201500020150000000040615203533227024136 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'cs', { title: 'zde vložit odstavec' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/tr.js0000664000201500020150000000041115203533227024152 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'tr', { title: 'ParaÄŸrafı buraya ekle' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/ja.js0000664000201500020150000000041215203533227024120 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'ja', { title: 'ã“ã“ã«æ®µè½ã‚’挿入' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/sl.js0000664000201500020150000000041115203533227024143 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'sl', { title: 'Vstavite odstavek tukaj' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/lv.js0000664000201500020150000000041115203533227024146 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'lv', { title: 'Ievietot Å¡eit rindkopu' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/en-au.js0000664000201500020150000000041215203533227024533 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'en-au', { title: 'Insert paragraph here' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/en.js0000664000201500020150000000040715203533227024134 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'en', { title: 'Insert paragraph here' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/no.js0000664000201500020150000000041315203533227024143 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'no', { title: 'Sett inn nytt avsnitt her' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/fr.js0000664000201500020150000000041415203533227024137 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'fr', { title: 'Insérer un paragraphe ici' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/id.js0000664000201500020150000000041215203533227024122 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'id', { title: 'Masukkan paragraf disini' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/ug.js0000664000201500020150000000043315203533227024144 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'ug', { title: 'بۇ جايغا ئابزاس قىستۇر' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/ar.js0000664000201500020150000000041415203533227024132 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'ar', { title: 'إدراج Ùقرة هنا' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/sr.js0000664000201500020150000000042715203533227024160 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'sr', { title: 'Уметните паÑÑƒÑ Ð¾Ð²Ð´Ðµ.' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/eu.js0000664000201500020150000000041315203533227024140 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'eu', { title: 'Txertatu paragrafoa hemen' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/en-gb.js0000664000201500020150000000041215203533227024516 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'en-gb', { title: 'Insert paragraph here' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/lang/hu.js0000664000201500020150000000041515203533227024145 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'magicline', 'hu', { title: 'Szúrja be a bekezdést ide' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/images/0000755000201500020150000000000014101750135023510 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/images/hidpi/0000755000201500020150000000000014101750135024605 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/images/hidpi/icon-rtl.png0000644000201500020150000000026014101750135027040 0ustar puckpuck‰PNG  IHDRr¹pyPLTEÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿHÏmtRNSóúûýþÊoDIDAT×cPQa€‚´4+4Æ Ã”ÅÏB×›—Mƒ³‚ff0}iPÀšD@&L ¨& 3¤j'Œ²_SŽ~·R.IEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/images/hidpi/icon.png0000644000201500020150000000030714101750135026243 0ustar puckpuck‰PNG  IHDRr¹pyPLTEÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ#~_tRNSóúûýþñ­êÌWIDAT×}Œ±À0 ß•Z1…ÊÉ>±~ [)CÃC ×Å!»é¾!‡ªÙ­¤ œmT†ý³ÉX‹ð¶ËOù!fg|-1%Iê?bÛ }•æ%NêIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/images/icon-rtl.png0000644000201500020150000000021214101750135025740 0ustar puckpuck‰PNG  IHDR ft¾QIDAT…A 5êÿŸí”¹a!&Ò k’ˆ4íNAee%à A’Ÿ”LàH„ôôŸgÃNzm‘í²Psâ]luó=bê&îÅ ÷¥#âî3µ¸IEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/images/icon.png0000644000201500020150000000020514101750135025143 0ustar puckpuck‰PNG  IHDR ft¾LIDATÓ…1À0ÏUþÿÚ¬‰»”¨BÐzb8Ì QÄvŒ Xú 0øŽ®bûèÜ´I Pun¤†ªm‡Óì¤ÒvcžÓB7/¬'ܸ–³êIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/samples/0000755000201500020150000000000015203533227023714 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/magicline/samples/magicline.html0000664000201500020150000002027015203533227026535 0ustar puckpuck Using Magicline plugin — CKEditor Sample

            CKEditor Samples » Using Magicline plugin

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

            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-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/0000755000201500020150000000000015203533226022644 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/plugin.js0000664000201500020150000001760215203533226024510 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.add( 'basicstyles', { // jscs:disable maximumLineLength lang: 'af,ar,az,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,es-mx,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,oc,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: 'bold,italic,underline,strike,subscript,superscript', // %REMOVE_LINE_CORE% hidpi: true, // %REMOVE_LINE_CORE% init: function( editor ) { var order = 0; // All buttons use the same code to register. So, to avoid // duplications, let's use this tool function. var addButtonCommand = function( buttonName, buttonLabel, commandName, styleDefiniton ) { // Disable the command if no definition is configured. if ( !styleDefiniton ) return; var style = new CKEDITOR.style( styleDefiniton ), forms = contentForms[ commandName ]; // Put the style as the most important form. forms.unshift( style ); // Listen to contextual style activation. editor.attachStyleStateChange( style, function( state ) { !editor.readOnly && editor.getCommand( commandName ).setState( state ); } ); // Create the command that can be used to apply the style. editor.addCommand( commandName, new CKEDITOR.styleCommand( style, { contentForms: forms } ) ); // Register the button, if the button plugin is loaded. if ( editor.ui.addButton ) { editor.ui.addButton( buttonName, { isToggle: true, label: buttonLabel, command: commandName, toolbar: 'basicstyles,' + ( order += 10 ) } ); } }; var contentForms = { bold: [ 'strong', 'b', [ 'span', function( el ) { var fw = el.styles[ 'font-weight' ]; return fw == 'bold' || +fw >= 700; } ] ], italic: [ 'em', 'i', [ 'span', function( el ) { return el.styles[ 'font-style' ] == 'italic'; } ] ], underline: [ 'u', [ 'span', function( el ) { return el.styles[ 'text-decoration' ] == 'underline'; } ] ], strike: [ 's', 'strike', [ 'span', function( el ) { return el.styles[ 'text-decoration' ] == 'line-through'; } ] ], subscript: [ 'sub' ], superscript: [ 'sup' ] }, config = editor.config, lang = editor.lang.basicstyles; addButtonCommand( 'Bold', lang.bold, 'bold', config.coreStyles_bold ); addButtonCommand( 'Italic', lang.italic, 'italic', config.coreStyles_italic ); addButtonCommand( 'Underline', lang.underline, 'underline', config.coreStyles_underline ); addButtonCommand( 'Strike', lang.strike, 'strike', config.coreStyles_strike ); addButtonCommand( 'Subscript', lang.subscript, 'subscript', config.coreStyles_subscript ); addButtonCommand( 'Superscript', lang.superscript, 'superscript', config.coreStyles_superscript ); editor.setKeystroke( [ [ CKEDITOR.CTRL + 66 /*B*/, 'bold' ], [ CKEDITOR.CTRL + 73 /*I*/, 'italic' ], [ CKEDITOR.CTRL + 85 /*U*/, 'underline' ] ] ); }, afterInit: function( editor ) { // If disabled, sub and sub scripts can be applied to element simoultaneously. // The rest of that code takes care of toggling both elements (#5215). if ( !editor.config.coreStyles_toggleSubSup ) { return; } var subscriptCommand = editor.getCommand( 'subscript' ), superscriptCommand = editor.getCommand( 'superscript' ); // Both commands are required for toggle operation. if ( !subscriptCommand || !superscriptCommand ) { return; } editor.on( 'afterCommandExec', function( evt ) { var commandName = evt.data.name; if ( commandName !== 'subscript' && commandName !== 'superscript' ) { return; } var executedCommand = commandName === 'subscript' ? subscriptCommand : superscriptCommand, otherCommand = commandName === 'subscript' ? superscriptCommand : subscriptCommand; // Disable the other command if both are enabled. if ( executedCommand.state === CKEDITOR.TRISTATE_ON && otherCommand.state === CKEDITOR.TRISTATE_ON ) { otherCommand.exec( editor ); // Merge undo images, so toggle operation is treated as a single undo step. editor.fire( 'updateSnapshot' ); } } ); } } ); // Basic Inline Styles. /** * The style definition that applies the **bold** style to the text. * * Read more in the {@glink features/basicstyles documentation} * and see the {@glink examples/basicstyles example}. * * config.coreStyles_bold = { element: 'b', overrides: 'strong' }; * * config.coreStyles_bold = { * element: 'span', * attributes: { 'class': 'Bold' } * }; * * @cfg {Object} [coreStyles_bold={ element: 'strong', overrides: 'b' }] * @member CKEDITOR.config */ CKEDITOR.config.coreStyles_bold = { element: 'strong', overrides: 'b' }; /** * The style definition that applies the *italics* style to the text. * * Read more in the {@glink features/basicstyles documentation} * and see the {@glink examples/basicstyles example}. * * config.coreStyles_italic = { element: 'i', overrides: 'em' }; * * CKEDITOR.config.coreStyles_italic = { * element: 'span', * attributes: { 'class': 'Italic' } * }; * * @cfg {Object} [coreStyles_italic={ element: 'em', overrides: 'i' }] * @member CKEDITOR.config */ CKEDITOR.config.coreStyles_italic = { element: 'em', overrides: 'i' }; /** * The style definition that applies the underline style to the text. * * Read more in the {@glink features/basicstyles documentation} * and see the {@glink examples/basicstyles example}. * * CKEDITOR.config.coreStyles_underline = { * element: 'span', * attributes: { 'class': 'Underline' } * }; * * @cfg {Object} [coreStyles_underline={ element: 'u' }] * @member CKEDITOR.config */ CKEDITOR.config.coreStyles_underline = { element: 'u' }; /** * The style definition that applies the strikethrough style to the text. * * Read more in the {@glink features/basicstyles documentation} * and see the {@glink examples/basicstyles example}. * * CKEDITOR.config.coreStyles_strike = { * element: 'span', * attributes: { 'class': 'Strikethrough' }, * overrides: 'strike' * }; * * @cfg {Object} [coreStyles_strike={ element: 's', overrides: 'strike' }] * @member CKEDITOR.config */ CKEDITOR.config.coreStyles_strike = { element: 's', overrides: 'strike' }; /** * The style definition that applies the subscript style to the text. * * Read more in the {@glink features/basicstyles documentation} * and see the {@glink examples/basicstyles example}. * * CKEDITOR.config.coreStyles_subscript = { * element: 'span', * attributes: { 'class': 'Subscript' }, * overrides: 'sub' * }; * * @cfg {Object} [coreStyles_subscript={ element: 'sub' }] * @member CKEDITOR.config */ CKEDITOR.config.coreStyles_subscript = { element: 'sub' }; /** * The style definition that applies the superscript style to the text. * * Read more in the {@glink features/basicstyles documentation} * and see the {@glink examples/basicstyles example}. * * CKEDITOR.config.coreStyles_superscript = { * element: 'span', * attributes: { 'class': 'Superscript' }, * overrides: 'sup' * }; * * @cfg {Object} [coreStyles_superscript={ element: 'sup' }] * @member CKEDITOR.config */ CKEDITOR.config.coreStyles_superscript = { element: 'sup' }; /** * Disallow setting subscript and superscript simultaneously on the same element using UI buttons. * * By default, you can apply subscript and superscript styles to the same element. Enabling that option * will remove the superscript style when the subscript button is pressed and vice versa. * * @cfg {Boolean} [coreStyles_toggleSubSup=false] * @since 4.20.0 * @member CKEDITOR.config */ CKEDITOR.config.coreStyles_toggleSubSup = false; rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/0000755000201500020150000000000015203533226023565 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/zh.js0000664000201500020150000000052415203533226024547 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'zh', { bold: 'ç²—é«”', italic: '斜體', strike: '刪除線', subscript: '下標', superscript: '上標', underline: '底線' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/nb.js0000664000201500020150000000055315203533226024527 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'nb', { bold: 'Fet', italic: 'Kursiv', strike: 'Gjennomstreking', subscript: 'Senket skrift', superscript: 'Hevet skrift', underline: 'Understreking' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/eo.js0000664000201500020150000000054215203533226024531 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'eo', { bold: 'Grasa', italic: 'Kursiva', strike: 'Trastreko', subscript: 'Suba indico', superscript: 'Supra indico', underline: 'Substreko' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/es.js0000664000201500020150000000054115203533226024534 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'es', { bold: 'Negrita', italic: 'Cursiva', strike: 'Tachado', subscript: 'Subíndice', superscript: 'Superíndice', underline: 'Subrayado' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/ro.js0000664000201500020150000000064215203533226024547 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'ro', { bold: 'ÃŽngroÅŸat (bold)', italic: 'ÃŽnclinat (italic)', strike: 'Tăiat (strike through)', subscript: 'Indice (subscript)', superscript: 'Putere (superscript)', underline: 'Subliniat (underline)' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/hr.js0000664000201500020150000000054515203533226024542 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'hr', { bold: 'Podebljano', italic: 'UkoÅ¡eno', strike: 'Precrtano', subscript: 'Subscript', superscript: 'Superscript', underline: 'Potcrtano' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/it.js0000664000201500020150000000053315203533226024542 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'it', { bold: 'Grassetto', italic: 'Corsivo', strike: 'Barrato', subscript: 'Pedice', superscript: 'Apice', underline: 'Sottolineato' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/de-ch.js0000664000201500020150000000055615203533226025113 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'de-ch', { bold: 'Fett', italic: 'Kursiv', strike: 'Durchgestrichen', subscript: 'Tiefgestellt', superscript: 'Hochgestellt', underline: 'Unterstrichen' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/sk.js0000664000201500020150000000056015203533226024543 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'sk', { bold: 'TuÄné', italic: 'Kurzíva', strike: 'PreÄiarknuté', subscript: 'Dolný index', superscript: 'Horný index', underline: 'PodÄiarknuté' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/az.js0000664000201500020150000000055615203533226024545 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'az', { bold: 'Qalın', italic: 'Kursiv', strike: 'ÜstüxÉ™tli', subscript: 'AÅŸağı indeks', superscript: 'Yuxarı indeks', underline: 'Altdan xÉ™tt' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/pt.js0000664000201500020150000000056015203533226024551 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'pt', { bold: 'Negrito', italic: 'Itálico', strike: 'Rasurado', subscript: 'Superior à linha', superscript: 'Superior à linha', underline: 'Sublinhado' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/si.js0000664000201500020150000000100015203533226024527 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'si', { bold: 'තද අකුරින් ලියනලද', italic: 'à¶¶à·à¶°à·“අකුරින් ලියන ලද', strike: 'Strikethrough', // MISSING subscript: 'Subscript', // MISSING superscript: 'Superscript', // MISSING underline: 'යටින් ඉරි අදින ලද' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/ko.js0000664000201500020150000000054515203533226024542 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'ko', { bold: '굵게', italic: '기울임꼴', strike: '취소선', subscript: '아래 첨ìž', superscript: '위 첨ìž', underline: '밑줄' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/mk.js0000664000201500020150000000064515203533226024541 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'mk', { bold: 'Здебелено', italic: 'Ðакривено', strike: 'Прецртано', subscript: 'Долен индекÑ', superscript: 'Горен индекÑ', underline: 'Подвлечено' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/cy.js0000664000201500020150000000054315203533226024542 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'cy', { bold: 'Bras', italic: 'Italig', strike: 'Llinell Trwyddo', subscript: 'Is-sgript', superscript: 'Uwchsgript', underline: 'Tanlinellu' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/uk.js0000664000201500020150000000064715203533226024553 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'uk', { bold: 'Жирний', italic: 'КурÑив', strike: 'ЗакреÑлений', subscript: 'Ðижній індекÑ', superscript: 'Верхній індекÑ', underline: 'ПідкреÑлений' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/zh-cn.js0000664000201500020150000000053215203533226025144 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'zh-cn', { bold: '加粗', italic: '倾斜', strike: '删除线', subscript: '下标', superscript: '上标', underline: '下划线' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/sv.js0000664000201500020150000000055715203533226024564 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'sv', { bold: 'Fet', italic: 'Kursiv', strike: 'Genomstruken', subscript: 'Nedsänkta tecken', superscript: 'Upphöjda tecken', underline: 'Understruken' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/lt.js0000664000201500020150000000057015203533226024546 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'lt', { bold: 'Pusjuodis', italic: 'Kursyvas', strike: 'Perbrauktas', subscript: 'Apatinis indeksas', superscript: 'VirÅ¡utinis indeksas', underline: 'Pabrauktas' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/is.js0000664000201500020150000000056515203533226024546 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'is', { bold: 'Feitletrað', italic: 'Skáletrað', strike: 'Yfirstrikað', subscript: 'Niðurskrifað', superscript: 'Uppskrifað', underline: 'Undirstrikað' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/fr-ca.js0000664000201500020150000000053115203533226025114 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'fr-ca', { bold: 'Gras', italic: 'Italique', strike: 'Barré', subscript: 'Indice', superscript: 'Exposant', underline: 'Souligné' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/et.js0000664000201500020150000000054415203533226024540 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'et', { bold: 'Paks', italic: 'Kursiiv', strike: 'Läbijoonitud', subscript: 'Allindeks', superscript: 'Ülaindeks', underline: 'Allajoonitud' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/bs.js0000664000201500020150000000053515203533226024534 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'bs', { bold: 'Boldiraj', italic: 'Ukosi', strike: 'Precrtaj', subscript: 'Subscript', superscript: 'Superscript', underline: 'Podvuci' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/pl.js0000664000201500020150000000056315203533226024544 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'pl', { bold: 'Pogrubienie', italic: 'Kursywa', strike: 'PrzekreÅ›lenie', subscript: 'Indeks dolny', superscript: 'Indeks górny', underline: 'PodkreÅ›lenie' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/bg.js0000664000201500020150000000065015203533226024516 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'bg', { bold: 'Удебелен', italic: 'Ðаклонен', strike: 'Зачертан текÑÑ‚', subscript: 'Долен индекÑ', superscript: 'Горен индекÑ', underline: 'Подчертан' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/fa.js0000664000201500020150000000060115203533226024510 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'fa', { bold: 'درشت', italic: 'خمیده', strike: 'خط‌خورده', subscript: 'زیرنویس', superscript: 'بالانویس', underline: 'زیرخط‌دار' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/ku.js0000664000201500020150000000055715203533226024553 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'ku', { bold: 'Ù‚Û•ÚµÛ•Ùˆ', italic: 'لار', strike: 'لێدان', subscript: 'ژێرنووس', superscript: 'سەرنووس', underline: 'ژێرهێڵ' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/bn.js0000664000201500020150000000066215203533226024530 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'bn', { bold: 'বোলà§à¦¡', italic: 'বাà¦à¦•া', strike: 'সà§à¦Ÿà§à¦°à¦¾à¦‡à¦• থà§à¦°à§', subscript: 'অধোলেখ', superscript: 'অভিলেখ', underline: 'আনà§à¦¡à¦¾à¦°à¦²à¦¾à¦‡à¦¨' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/el.js0000664000201500020150000000063015203533226024524 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'el', { bold: 'Έντονη', italic: 'Πλάγια', strike: 'ΔιακÏιτή ΔιαγÏαφή', subscript: 'Δείκτης', superscript: 'Εκθέτης', underline: 'ΥπογÏάμμιση' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/fi.js0000664000201500020150000000055415203533226024527 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'fi', { bold: 'Lihavoitu', italic: 'Kursivoitu', strike: 'Yliviivattu', subscript: 'Alaindeksi', superscript: 'Yläindeksi', underline: 'Alleviivattu' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/ru.js0000664000201500020150000000070115203533226024551 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'ru', { bold: 'Полужирный', italic: 'КурÑив', strike: 'Зачеркнутый', subscript: 'ПодÑтрочный индекÑ', superscript: 'ÐадÑтрочный индекÑ', underline: 'Подчеркнутый' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/gl.js0000664000201500020150000000054015203533226024526 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'gl', { bold: 'Negra', italic: 'Cursiva', strike: 'Riscado', subscript: 'Subíndice', superscript: 'Superíndice', underline: 'Subliñado' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/sr-latn.js0000664000201500020150000000054115203533226025505 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'sr-latn', { bold: 'Podebljano', italic: 'Kurziv', strike: 'Precrtano', subscript: 'Indeks', superscript: 'Stepen', underline: 'PodvuÄeno' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/oc.js0000664000201500020150000000052315203533226024526 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'oc', { bold: 'Gras', italic: 'Italica', strike: 'Raiat', subscript: 'Indici', superscript: 'Exponent', underline: 'Solinhat' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/sq.js0000664000201500020150000000055415203533226024554 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'sq', { bold: 'Trash', italic: 'Pjerrët', strike: 'Nëpërmes', subscript: 'Nën-skriptë', superscript: 'Super-skriptë', underline: 'Nënvijëzuar' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/pt-br.js0000664000201500020150000000054415203533226025154 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'pt-br', { bold: 'Negrito', italic: 'Itálico', strike: 'Tachado', subscript: 'Subscrito', superscript: 'Sobrescrito', underline: 'Sublinhado' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/fo.js0000664000201500020150000000057215203533226024535 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'fo', { bold: 'Feit skrift', italic: 'Skráskrift', strike: 'Yvirstrikað', subscript: 'Lækkað skrift', superscript: 'Hækkað skrift', underline: 'Undirstrikað' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/af.js0000664000201500020150000000053715203533226024520 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'af', { bold: 'Vet', italic: 'Skuins', strike: 'Deurgestreep', subscript: 'Onderskrif', superscript: 'Bo-skrif', underline: 'Onderstreep' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/hi.js0000664000201500020150000000065415203533226024532 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'hi', { bold: 'बोलà¥à¤¡', italic: 'इटैलिक', strike: 'सà¥à¤Ÿà¥à¤°à¤¾à¤‡à¤• थà¥à¤°à¥‚', subscript: 'अधोलेख', superscript: 'अभिलेख', underline: 'रेखांकण' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/km.js0000664000201500020150000000077415203533226024544 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'km', { bold: 'ដិáž', italic: 'ទ្រáŸáž', strike: 'គូស​បន្ទាážáŸ‹â€‹áž…ំ​កណ្ដាល', subscript: 'អក្សរážáž¼áž…ក្រោម', superscript: 'អក្សរážáž¼áž…លើ', underline: 'គូស​បន្ទាážáŸ‹â€‹áž€áŸ’រោម' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/nl.js0000664000201500020150000000054015203533226024535 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'nl', { bold: 'Vet', italic: 'Cursief', strike: 'Doorhalen', subscript: 'Subscript', superscript: 'Superscript', underline: 'Onderstrepen' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/ka.js0000664000201500020150000000066715203533226024531 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'ka', { bold: 'მსხვილი', italic: 'დáƒáƒ®áƒ áƒ˜áƒšáƒ˜', strike: 'გáƒáƒ“áƒáƒ®áƒáƒ–ული', subscript: 'ინდექსი', superscript: 'ხáƒáƒ áƒ˜áƒ¡áƒ®áƒ˜', underline: 'გáƒáƒ®áƒáƒ–ული' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/es-mx.js0000664000201500020150000000054315203533226025160 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'es-mx', { bold: 'Negrita', italic: 'Cursiva', strike: 'Tachado', subscript: 'subíndice', superscript: 'Sobrescrito', underline: 'Subrayada' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/mn.js0000664000201500020150000000073615203533226024545 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'mn', { bold: 'Тод бүдүүн', italic: 'Ðалуу', strike: 'Дундуур нь зурааÑтай болгох', subscript: 'Суурь болгох', superscript: 'ЗÑÑ€Ñг болгох', underline: 'Доогуур нь зурааÑтай болгох' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/da.js0000664000201500020150000000055215203533226024513 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'da', { bold: 'Fed', italic: 'Kursiv', strike: 'Gennemstreget', subscript: 'Sænket skrift', superscript: 'Hævet skrift', underline: 'Understreget' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/he.js0000664000201500020150000000060515203533226024522 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'he', { bold: 'מודגש', italic: 'נטוי', strike: 'כתיב מחוק', subscript: 'כתיב תחתון', superscript: 'כתיב עליון', underline: 'קו תחתון' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/ca.js0000664000201500020150000000054015203533226024507 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'ca', { bold: 'Negreta', italic: 'Cursiva', strike: 'Ratllat', subscript: 'Subíndex', superscript: 'Superíndex', underline: 'Subratllat' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/gu.js0000664000201500020150000000120015203533226024531 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'gu', { bold: 'બોલà«àª¡/સà«àªªàª·à«àªŸ', italic: 'ઇટેલિક, તà«àª°àª¾àª‚સા', strike: 'છેકી નાખવà«àª‚', subscript: 'àªàª• ચિહà«àª¨àª¨à«€ નીચે કરેલà«àª‚ બીજà«àª‚ ચિહà«àª¨', superscript: 'àªàª• ચિહà«àª¨ ઉપર કરેલà«àª‚ બીજà«àª‚ ચિહà«àª¨.', underline: 'અનà«àª¡àª°à«àª²àª¾àª‡àª¨, નીચે લીટી' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/ms.js0000664000201500020150000000054215203533226024545 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'ms', { bold: 'Bold', italic: 'Italic', strike: 'Strike Through', subscript: 'Subscript', superscript: 'Superscript', underline: 'Underline' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/th.js0000664000201500020150000000071115203533226024537 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'th', { bold: 'ตัวหนา', italic: 'ตัวเอียง', strike: 'ตัวขีดเส้นทับ', subscript: 'ตัวห้อย', superscript: 'ตัวยà¸', underline: 'ตัวขีดเส้นใต้' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/de.js0000664000201500020150000000055315203533226024520 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'de', { bold: 'Fett', italic: 'Kursiv', strike: 'Durchgestrichen', subscript: 'Tiefgestellt', superscript: 'Hochgestellt', underline: 'Unterstrichen' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/en-ca.js0000664000201500020150000000054515203533226025114 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'en-ca', { bold: 'Bold', italic: 'Italic', strike: 'Strike Through', subscript: 'Subscript', superscript: 'Superscript', underline: 'Underline' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/tt.js0000664000201500020150000000063215203533226024555 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'tt', { bold: 'Калын', italic: 'КурÑив', strike: 'Сызылган', subscript: 'ÐÑкы индекÑ', superscript: 'Ó¨Ñке индекÑ', underline: 'ÐÑтына Ñызылган' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/vi.js0000664000201500020150000000057415203533226024551 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'vi', { bold: 'Äậm', italic: 'Nghiêng', strike: 'Gạch xuyên ngang', subscript: 'Chỉ số dưới', superscript: 'Chỉ số trên', underline: 'Gạch chân' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/cs.js0000664000201500020150000000055515203533226024537 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'cs', { bold: 'TuÄné', italic: 'Kurzíva', strike: 'PÅ™eÅ¡krtnuté', subscript: 'Dolní index', superscript: 'Horní index', underline: 'Podtržené' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/tr.js0000664000201500020150000000055215203533226024554 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'tr', { bold: 'Kalın', italic: 'İtalik', strike: 'Üstü Çizgili', subscript: 'Alt Simge', superscript: 'Üst Simge', underline: 'Altı Çizgili' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/ja.js0000664000201500020150000000054015203533226024516 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'ja', { bold: '太字', italic: '斜体', strike: 'æ‰“ã¡æ¶ˆã—ç·š', subscript: '下付ã', superscript: '上付ã', underline: '下線' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/sl.js0000664000201500020150000000054115203533226024543 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'sl', { bold: 'Krepko', italic: 'LežeÄe', strike: 'PreÄrtano', subscript: 'Podpisano', superscript: 'Nadpisano', underline: 'PodÄrtano' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/lv.js0000664000201500020150000000056615203533226024555 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'lv', { bold: 'Treknraksts', italic: 'SlÄ«praksts', strike: 'PÄrsvÄ«trojums', subscript: 'ApakÅ¡raksts', superscript: 'AugÅ¡raksts', underline: 'PasvÄ«trojums' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/en-au.js0000664000201500020150000000054515203533226025136 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'en-au', { bold: 'Bold', italic: 'Italic', strike: 'Strike Through', subscript: 'Subscript', superscript: 'Superscript', underline: 'Underline' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/en.js0000664000201500020150000000054115203533226024527 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'en', { bold: 'Bold', italic: 'Italic', strike: 'Strikethrough', subscript: 'Subscript', superscript: 'Superscript', underline: 'Underline' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/no.js0000664000201500020150000000055315203533226024544 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'no', { bold: 'Fet', italic: 'Kursiv', strike: 'Gjennomstreking', subscript: 'Senket skrift', superscript: 'Hevet skrift', underline: 'Understreking' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/fr.js0000664000201500020150000000052615203533226024537 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'fr', { bold: 'Gras', italic: 'Italique', strike: 'Barré', subscript: 'Indice', superscript: 'Exposant', underline: 'Souligné' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/id.js0000664000201500020150000000062115203533226024520 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'id', { bold: 'Huruf Tebal', italic: 'Huruf Miring', strike: 'Strikethrough', // MISSING subscript: 'Subscript', // MISSING superscript: 'Superscript', // MISSING underline: 'Garis Bawah' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/ug.js0000664000201500020150000000064115203533226024541 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'ug', { bold: 'توم', italic: 'يانتۇ', strike: 'ئۆچۈرۈش سىزىقى', subscript: 'تۆۋەن ئىندÛكس', superscript: 'يۇقىرى ئىندÛكس', underline: 'ئاستى سىزىق' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/ar.js0000664000201500020150000000055415203533226024533 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'ar', { bold: 'عريض', italic: 'مائل', strike: 'يتوسطه خط', subscript: 'Ù…Ù†Ø®ÙØ¶', superscript: 'Ù…Ø±ØªÙØ¹', underline: 'تسطير' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/sr.js0000664000201500020150000000060715203533226024554 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'sr', { bold: 'Подебљано', italic: 'Курзив', strike: 'Прецртано', subscript: 'ИндекÑ', superscript: 'Степен', underline: 'Подвучено' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/eu.js0000664000201500020150000000054215203533226024537 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'eu', { bold: 'Lodia', italic: 'Etzana', strike: 'Marratua', subscript: 'Azpi-indizea', superscript: 'Goi-indizea', underline: 'Azpimarratu' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/en-gb.js0000664000201500020150000000054515203533226025121 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'en-gb', { bold: 'Bold', italic: 'Italic', strike: 'Strike Through', subscript: 'Subscript', superscript: 'Superscript', underline: 'Underline' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/lang/hu.js0000664000201500020150000000055115203533226024542 0ustar puckpuck/* Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'basicstyles', 'hu', { bold: 'Félkövér', italic: 'DÅ‘lt', strike: 'Ãthúzott', subscript: 'Alsó index', superscript: 'FelsÅ‘ index', underline: 'Aláhúzott' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/icons/0000755000201500020150000000000015153141500023751 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/icons/underline.png0000664000201500020150000000103515153141500026445 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ð IDAT8Ë¥’ÁJ†@…Ïu!u×#â¢çèuz–¶èÚô-ªE?BÖèœ5Ãüþê/t@d®÷|Üñ\išKˆœs jñRçÜ‘±ï{(¥`­EY–Ál­Å8ŽcLèOH"~Œ1̲ŒEQz9Éúÿo%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/icons/hidpi/0000755000201500020150000000000015153141500025046 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/icons/hidpi/underline.png0000664000201500020150000000207415153141500027546 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎ@IDATXíW=o1}ãÝõÝ&§mRRø!%©P¤T4~F$~üª”éhhRúHQD•k©ÐÀ¡è¤(äâÍÙø{÷ò1Íi­ñÌ›÷Æö!²ÝÝ]䌈@D(ŠƒÁu]£ª*œAD "`fXký·R EQ ,KE¥”R888”qk-ºŒˆÆÚ¶…1Æ'ÀÂ:3û"œÝùÀ.¸1Æÿ& ÷Xk¡”Z(" LçççÐZû@®ŠÑhä)+žL&F> 3ƒ™Ñ4͵ؠÐc«««¢µ–²,Ek-u]ËÞÞ^i­3£mÛÍ×ÖÖþh­Ek-UUÉp8”¦i^9B°I¡f"â+WJùµýýýÖcæ8Äw·ÇéMD¿cé²ä$ {ÃZ» cdWa/ÌÍäœ{%HHi°&±?In_/€”1Mç~±ê„,%þ¦*qæäq=³ÙÌŠ­÷vÉrËíYŠÛ& /£œõöÀ}1p¯rÕ† Ö÷¦dÄQªÓãNþÓœ:w– WeÊ'ä>ï 6GoŠk-ÅE‘mš¥¸`î!9::J&ŸÛƒÄþ¿Kˆ"òï¸R D„ííí&NÈó(dhÞÓ\ü$aàð%sëº~ÖÁ¹tÉ&“É·0¹+( ¦”™?'ª}ŸºÛ•R/ÝZx VVV<ƒEQ@k½|h­ßÅkÌü˜ˆÆJ©‡ÓéZëu¥Ô[ã{€ˆ>¹„XÓ4>Öµ«ØÑãÐ_\\|-Ëë7¶ˆ8ç>ÆòC½\.¢×ñª{É0 ö}@xGüð8Æ_ÝŒ”÷‘\×f~ÒQ:×;¢ÔûN§s“ê•ey×$ª¤\:ç>¤zóùü°7$s¤üï=‹H¾7¶Ý”4"Âãããu¨âß{½ù.JOM瀔A–e7i‡dæ»ô»sT˜DCѳ¢(ŽøŸÍfÈ’•£Ñ›ÍÞ{„*8É¿.@ÌŒÉdb@ÜT‹ÎxþoiþÏ ®&iBÅwÝn÷uÊ¿÷þ›Ö±J%ç\UÉÕü‰h߈EQŒëô/Š€¦¡( @Í|Þû¯1Ìq£v»½Ÿ‹…9•ó@Ê_–eoœs&ƒD„~¿]/HÏ|áS4?ˆè»^;7Λ&¢—S뉗ãšckPñ‘¹g4ýy‘_³TêŠÐ?ðß#pJþËAtÖË”Ö%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/icons/hidpi/subscript.png0000664000201500020150000000224515153141500027577 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎ©IDATXÃíW¿‹$Eþ^UMWõÌwŠp¡Á¹§g¤(&—ìŠl`¸©Ëþ/—n ,Ȉ ©§«™ ŠxsÃÐ?ª«žÉ¼²¦§{gæDL|ÐtuuW½ï}ïW5ð¿üÇBp~~fÞ¸¤»Èåå%äû´”R˜L&pÎa6›Á9ç...v8;;KÉ]Æ9¥Œ1 "„cLóùš#B`fÄquuu#ÓWÄÌi3™#"03º®ƒ1fƒ©c0Äâ.1ý‰±Å¢(Ƹ¥hˆ±}Eõ•‹²ªª X.—hÛvðÝAÖ>}—ˆØ9ÇÌümÓ4[)Š–Ë%ü2›ÍØÃƘ»™Àˆï2KŸÈÝ/ŠâÏãKJ©Ä3cµZáèè(0s2Â{ufì‚>½™KnÑóº®Ó»Õj…étêså/*(¥ÀÌ%Åä`îœ{î½G]טN§uÁ䌬Ç^€DrÓ4ïk­¯™Y‰’¹ÖúÚ9÷33[q‰ÔãWmÛ~$)Ù¯'£1 J$ʲD]×ÇÖÚ§1Æ{yŽÑÝÂÐ>_zï”e‰C(c äkœshšæu"úî¦Ò¼–/Ú¶}àœƒR ZkL&XkáœÛ  (Ф\€µmÛ¾ àñèb¥>öÞ?tÎ¥ž`ŒI}a>ŸïvÁb±Hý2¼.»ÇC ‰]×½‘3#= m[, 03NOO1¶>aNsžŠZëÀ«C¬Á¾eŒùµ®kÄS#‰“-å †êø:ý|Áîä¸SÅïyÈÒww h­!)%ʉ(b Q)¥>ðÙÀ>¯Xkÿ¨ªê å &“ÉFOWJý€rJDßÄ?ðÞŸø~Àe/[k?Ï–G«÷þiz!¤t¾½mfæÁñ9².˜2Crò.¾?‘ëûLD!àüüü‚.B“ £¯V+t]7ÿ~=—Ø0f9PJMÐEñIqÎ €Û¶½ ÎÙ¤¿ˆ1F¬µ¯ÎK9‘$ŸÆUÅ@ß÷÷’nZkÿŒ™¥Y ð"òr|×4Í£\íwiKE>|Hrµ^¯'Hö$Õ6v†r½ ŒÒº9çཿ;¯½ˆ\+ËrÕ÷}^CÒÌw€;Éâ˸+2αÞûqK@×uk­Iº¶X,’ü€‹ÀwMÓ|–”ó0©yΟ2fáœC]×Çî§ÀB!¼Bx%¾¿$¿mÛöƒªªæ ÷š2Æ zÔCY–hÛöM?T Ý.vÀÈÉoÚ¶ýÐ9’ãó>²@Q(Šâ ²,Ñ÷ýÛ$ïY^˜Rêó®ën—e9.®µFQ—fÀ¬V«­ý[k 9NéN¿{ïߊïÒ²h­‰ØVóÞvC¥TÀîÿŽ1æq]×/•e9–(Ž¿LTîñÞC)ÕcP{ *c7¬µ¿7M32á½Çf³Áf³Ù@k=A꽇Ö:ˆˆÉ4—/•R_eæyÑZûGlVÃŽ™œž[D&u¿¿å"ñÉOÚ¶ýÀÏ™æò‚sîëÜÅfo "C+>ž‘üÞ{ÿ®R ‹ÅmÛÞ$ù 3ßí½+ΤÐ97ÒŒBº×uÝ-cÌx3*ËMÓ¼AòÑüº2±¿Çࣣ£Ãöƒ1æN]×ï[kÇÅ£óu’_D!WUå®Ê€™+{¹\þ&"Œ7žªª²NDàœƒˆ|:” ëõz^ºýæ9ÚâåÓ3¹í²K·â]ÒûžÖÖZÄm›Š÷ߘÊM”ûoŒAUU0Æ\ùÄûßvÙ_ÏfÌ­»MÉ5%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/icons/hidpi/strike.png0000664000201500020150000000251515153141500027062 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎQIDATXÃ¥WMh$Uþ^õë4ÓITÈÉÅ£º!«BÄ‹,ùC ž¢§xò² 7a‚ìŃ'ŃG/þŒ§v••½xÙHv½ìUAA0ƒ™¡gÞ{U2¯©îôü°4Óýº^ÕW_ýôƒ ²½½ ˆ˜¹¼ŸEŒ10Æ€ˆÊûýýýŠNÒ´QDÐív1 ཇˆÌì´ @¼·ÖbuuÇÇÇ“œžžâìì Ãá!0s…‰GBDH’Y–UغòÆÆNNN`Œ3—Îűf4©Û¡¦ ƒÁ B”áp"zÀ¯D$rñR.|ˆøÀ/>2Æ\sÎ]bn"€ÝÝÝJä‘þ¢(àý4M%„𩈬0s‘ˆÄû'¬ø™¬µÒï÷K§Ñ¦–J êF£dYöˆ¼ÑDký¹¾ž¦i¹."—T`f$IR¶ „^ˆÎcN“&½ þ®Â€÷I’TŒXk!€ˆ@D%Ýþ%¢[Dô™Ï¼÷ËÖÚkÞûå$IV¢ÃqL Œ¾ßï#ÏóÇ£ãøŽ™¿cæ4MB€ˆ€ˆî2s ’ˆ^‘Ÿ¼÷Ȳ¬´Y—J ê=ttTyVzo[kǶ樎~`ò<ëìÖÖVùàœ+#ôz½Æ\fYöRáû:¥Ñ‘JSe­( EÍÍÍfb•ƨ×××+m©Ru‡ˆnžŸŸ7Z,6ÝÎq&Ôë‚ÆP½}GiaŒAáÖÂÂBB÷‰è–µöYç\#¨qBM¨ô}·Û]Œ,èôÔt¯†n:ç~³ÖŠˆ<0Æ\ʼnvl]’$¢ ¯Ýnƒè‚(Ý eµÉsÌ|_ëÄÔ°3À¨ µQç\©¬r^1¤«ZœfIa}¿tÔ@§!" ¼ˆÈ‘ñÞ›<ÏŸ±Ö~“¾¬µågWBÒ4]‰6ãoL›XM’¦)ƒÁCf~€éõzfnnîUfÞ×Lj{£ŽøzlNõ:’>åÌÏÏÃ9w‡ˆ^!cÌ{Ñqdeâéÿ @Gs¬kaô ùÄsëAϽG××¥¹¶¶V_ú2„ð–µV×É$¦þ‘+ѹ*8£tÐn·Ñétfb`7I!¢Ï[­Vk’b–e‰È•šãF&£ØIµbáF¯×»1¢ðG·™ù÷åO1ó®sîå1ŸßÏtôZì$§qCÙ2£>!\p=NHòRI’À{ÿ®*ÈÊû©)Ðê§™êÌüš.º(Ng6>ð§^ˆ@š~5Hf^p»J§ax²( BxÀÖÚ»þR§€µökíWDô|Q†ˆLb˜R„u«Õ‚ˆÜpOG©£Ñ߉<ÏgJÕTê”Í*qà4µãÁÁÁl è¶MgÃ&} :~”BåuxxXÝ3ÎØÎÎBðÞÃ9ïýÔÿ!Ë2,..¢Ýncii {{{—öüøM‚‰›Ê´%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/icons/hidpi/bold.png0000664000201500020150000000226715153141500026505 0ustar puckpuck‰PNG  IHDR szzôgAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“tIMEà  !ƒÎ»IDATXíWÍj,UþÎOÿÐ3C²½Äu\¸¸"®f“@²Ñ'ð"$O "î\¹A_ ²A¹‚|›…¸ IHOúœS.nWßêÓÝó,8ÌtwuÕWUß©:­ÉÞÞ”RÍÒZCkÝ<'"”R "„B5:J©Ö/œŸŸ£OT|c¿eˆ— %vÞq QJáìì¬õ\cp„Þûfñ5ÿ.rÛ""´îÛ>ÅX®®®¦)ÀÓ”À{Ñh´Ô9—«O–f@kýåææ&EAEQP–e”ç9eYF£Ñˆˆˆ´Ö¼.´Ö_]__÷FÏëððp€T€ªªþ•<ˆ @–è…÷þ› "¢?noo;Î¥í¥êTWò¥ÂJ5°;™Lèòòr=C¥`Ç‹HÞÛÛÛ¯Ùaü»2ÞF!h­9 EDÊ{¯ˆHcÞçòp悔ëœë´€F¹v ûƒµZkxïÿ®ÁtšUžçÏž €ôÕ/cL«iñkí;ƒA­“8 惚Ïç-€Ì‰›››¿žÔbaƒ±1’çùÏ1I•RfY6hÓb á”Ö êS"Ú !lYkw|â½oÈ ¼)ÉÝÝÝîxŽÑQ_pƒ$Q-ÍPk[Y ¯zìî®à)Òs0ý žžJ©þWC³!MÓÀ[¾ˆ©xÑGð¥G²Ø™\÷÷÷€‡‡¤iú<„ð£sî¢ÞûŸä5ËJ»€‰É[¬N+EÁãóù¼éŠR¿îŽßÆ5“r(jé|Õ#Yœ±Z~óÞQ“³£»ôLøøø˜Éâ#˜¼Wgá%€¬µ­¯,y°]Z¥ÔÖЩ˜ÿבûÂk­õïZë着ºˆ£–ʲ|c?v8N[×eY6eàŽX6©>ÞÄÎ1H’EQàää¤?ƘVŠ¢è”GêHBÉ àgY–aggç-Ѐüv‹·“œû:߆1^’S³Ù¬å¯“ÉdÒb¼\Î9„¸Ý¢ª*TU5üݧ5¬µ°Ö"IœžžvtþN2Éa¡%tEXtdate:create2016-11-02T13:33:00+01:00׬í%tEXtdate:modify2016-11-02T13:33:00+01:00¦\QIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/icons/italic.png0000664000201500020150000000114315153141500025725 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ðRIDAT8ËS»NÃ@œ]Ç–ɱDAIâ?Ò娨,!wüU¾ %½ÿ€¯  ¡¦µeE>Ù¹¥ÀëÇqA¬´ÍíÜìÌœM°Ûí"2¶¯˜Ì "V:t/N§¤Õ4 6›Íâœ}›³,»dfaf!¢±Ó4Ýϱ"2Ì•TUõ8߬£(zq{xR¹@Ƙ¯_¹øÂÈ®”Ðóáb¸r‡³BgI’àŽó<‡Ï/åÃÓ½º3æIøª®kA°ÈÀZ f¾€¾ïzAça¢,ËÆÝ8Ý(¸mÛ·™*Š¢˜ô}ïóÿ —Öëõ(=ÄqŒív;e`­…vÛ¶ªà~P³·ÖN‰3#Š¢eˆsïq¿‘¸æOÌ,Çãq´§ŸøhÁùîð7IDAT8Ë•RAnƒ0œ1XäT5Ð$‡¶ß!/Î 8Ñ?4@T‘•Þ 2Û v4ÍH+y×»³³ks»ÝB)…(Š ”IXk!"ˆ¢`­õ1g»Ý‹Æq„ˆ€$ø$kí™ïÎ!â0^†E× T˜0 ÙÌ0v *8Zk!ùÄ^µÖàë.ˆè©k[–%ò<€ýtÞ"`Q€ÍfóT×õñR.I,—Ë…1¦¿6Š" ’¨ëú»ë:º—pŧӉƘÞù3‚pÛUUÍ6oŒÁ_ð;Çñ­( _íºeY&I’dw ”RŸþ9†mÛúqú¾ïœ¨ û% ¹€4MI’`µZa½^?O£|L£€3@LÒ}šw’8~„¦iŽa²ë"ÆãàŒÀ©ø'$X2U0û?Ý2ÊŽ¸Ÿi%%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/icons/superscript.png0000664000201500020150000000112215153141500027040 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ðAIDAT8ËR»n1œñ=H—pø’Šàø+þŠ? º”4¡:t:%¥ÑySpwZNв’%ïÚ;3/7› Æâp8À{ÔD$ÈÓý~c ’$1$Ѷ-DI’@DšðÞCD@r`ѹåL5z¼rÆÌè ι¡±_}M5‰Vb¢Ë²LÌUmÑÕÎZ¶Z@Ö1]v»Š¢€j\DÒ…¤„! ’(Ëò•$D«ÕJ꺾?šÄr¹LŸ°‡ ªªú©ëšÚy’¸ÝnÎ7M>ôïýûz½–øòl6“<Ïçc é€dÌWÏîœcÓ4°ÖJ÷•=$±ÝnC$Ï0N_&“ ¬µ(Ëò­{Êg<ƒ‚Þyù ‰ëõ:°TUõM߸ÿ 3æî_ã뙾¢^“%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/icons/strike.png0000664000201500020150000000116315153141500025763 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ðbIDAT8Ë’1KA…ßÌÝ4b)!`c‘_`+X]¡vö‚6ÖþA°µA°ìý)ì„ÃZbØÛ¹gs÷âEÄ…Û›Ù·ßÛ)Š "ˆ‹$H.öiTÎ9 äé¡ÿ,íúéœÛð €i|ö޷Ⱥν÷OÖ:,í… "‹è¸Šyžo«ªdY6VÕ30³Åí!„¶@úxªúhfo$Q×uIòZDd8¼÷˜ÍfmˆÕˆxȲìx2™dÑ;I˜Ì $ˆÈABsB¸ŸN§Á9G¹¬ªªåWâ4¯üçö5¤’Èr˜™ôz½M7K6cÍ·…x{¿ß_…yž£ªª§ËÓØ¤}>ŸÏDä]DNÌl<6Tõb•½¼+Ar‹ä­ª¢,ËV®®ë]Um´T wi[›xuÎíˆÈKœ’ß]è"Yå;­×´ø·«Ä¿êó¯ù- °µ%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/basicstyles/icons/bold.png0000664000201500020150000000110415153141500025375 0ustar puckpuck‰PNG  IHDRóÿagAMA± üa cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFbKGDÿÿÿ ½§“ pHYs  šœtIMEà *->ð3IDAT8Ë•S±JÄ@œyd-+{‘€EÿÂ&i…û±öüA°Ó€eŠCð ÄNRÉ¡Ø[yÍÙ±Éæ6ñrž°³»ófçæyŽ’0Éîkf=.Á?1l`ÃM’ßФ$ÉÌ꺆¤^Y¼hE>7ulšæ,Ë2M§Ó$ð’úZ,£Ëlë$peYÞÇÏØ$ 803ƒ÷þµ»`ö5šÁ/+Ë%&“ÉA’$w«ªê<>3:IpÎi±Xtœsî(Ïs‘ì²u@$ŸH¾nµZ}¸þ+ƒ§R4³›–»œÍf; tn܆uQÇÛ2ðÞ£iÌçsHzŒÂ} ›BÜ‹:‹$Ò4]‡fvåœ[O!ü¡+ÉÃpx°÷bfÞûç˜ï9hdz?–…÷~(º[ˆÛðü£ ë$ %tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iÍÏÄIEND®B`‚rt-5.0.10/devel/third-party/ckeditor-src/plugins/resize/0000755000201500020150000000000015203533230021613 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/resize/plugin.js0000664000201500020150000001501015203533230023446 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.add( 'resize', { init: function( editor ) { function dragHandler( evt ) { var dx = evt.data.$.screenX - origin.x, dy = evt.data.$.screenY - origin.y, width = startSize.width, height = startSize.height, internalWidth = width + dx * ( resizeDir == 'rtl' ? -1 : 1 ), internalHeight = height + dy; if ( resizeHorizontal ) width = Math.max( config.resize_minWidth, Math.min( internalWidth, config.resize_maxWidth ) ); if ( resizeVertical ) height = Math.max( config.resize_minHeight, Math.min( internalHeight, config.resize_maxHeight ) ); // DO NOT impose fixed size with single direction resize. (https://dev.ckeditor.com/ticket/6308) editor.resize( resizeHorizontal ? width : null, height ); } function dragEndHandler() { CKEDITOR.document.removeListener( 'mousemove', dragHandler ); CKEDITOR.document.removeListener( 'mouseup', dragEndHandler ); if ( editor.document ) { editor.document.removeListener( 'mousemove', dragHandler ); editor.document.removeListener( 'mouseup', dragEndHandler ); } } var config = editor.config; var spaceId = editor.ui.spaceId( 'resizer' ); // Resize in the same direction of chrome, // which is identical to dir of editor element. (https://dev.ckeditor.com/ticket/6614) var resizeDir = editor.element ? editor.element.getDirection( 1 ) : 'ltr'; !config.resize_dir && ( config.resize_dir = 'vertical' ); ( config.resize_maxWidth === undefined ) && ( config.resize_maxWidth = 3000 ); ( config.resize_maxHeight === undefined ) && ( config.resize_maxHeight = 3000 ); ( config.resize_minWidth === undefined ) && ( config.resize_minWidth = 750 ); ( config.resize_minHeight === undefined ) && ( config.resize_minHeight = 250 ); if ( config.resize_enabled !== false ) { var container = null, origin, startSize, resizeHorizontal = ( config.resize_dir == 'both' || config.resize_dir == 'horizontal' ) && ( config.resize_minWidth != config.resize_maxWidth ), resizeVertical = ( config.resize_dir == 'both' || config.resize_dir == 'vertical' ) && ( config.resize_minHeight != config.resize_maxHeight ); var mouseDownFn = CKEDITOR.tools.addFunction( function( $event ) { if ( !container ) container = editor.getResizable(); startSize = { width: container.$.offsetWidth || 0, height: container.$.offsetHeight || 0 }; origin = { x: $event.screenX, y: $event.screenY }; config.resize_minWidth > startSize.width && ( config.resize_minWidth = startSize.width ); config.resize_minHeight > startSize.height && ( config.resize_minHeight = startSize.height ); CKEDITOR.document.on( 'mousemove', dragHandler ); CKEDITOR.document.on( 'mouseup', dragEndHandler ); if ( editor.document ) { editor.document.on( 'mousemove', dragHandler ); editor.document.on( 'mouseup', dragEndHandler ); } $event.preventDefault && $event.preventDefault(); } ); editor.on( 'destroy', function() { CKEDITOR.tools.removeFunction( mouseDownFn ); } ); editor.on( 'uiSpace', function( event ) { if ( event.data.space == 'bottom' ) { var direction = ''; if ( resizeHorizontal && !resizeVertical ) direction = ' cke_resizer_horizontal'; if ( !resizeHorizontal && resizeVertical ) direction = ' cke_resizer_vertical'; var resizerHtml = '' + // BLACK LOWER RIGHT TRIANGLE (ltr) // BLACK LOWER LEFT TRIANGLE (rtl) ( resizeDir == 'ltr' ? '\u25E2' : '\u25E3' ) + ''; // Always sticks the corner of botttom space. resizeDir == 'ltr' && direction == 'ltr' ? event.data.html += resizerHtml : event.data.html = resizerHtml + event.data.html; } }, editor, null, 100 ); // Toggle the visibility of the resizer when an editor is being maximized or minimized. editor.on( 'maximize', function( event ) { editor.ui.space( 'resizer' )[ event.data == CKEDITOR.TRISTATE_ON ? 'hide' : 'show' ](); } ); } } } ); /** * The minimum editor width, in pixels, when resizing the editor interface by using the resize handle. * Note: It falls back to editor's actual width if it is smaller than the default value. * * Read more in the {@glink features/resize documentation} * and see the {@glink examples/resize example}. * * config.resize_minWidth = 500; * * @cfg {Number} [resize_minWidth=750] * @member CKEDITOR.config */ /** * The minimum editor height, in pixels, when resizing the editor interface by using the resize handle. * Note: It falls back to editor's actual height if it is smaller than the default value. * * Read more in the {@glink features/resize documentation} * and see the {@glink examples/resize example}. * * config.resize_minHeight = 600; * * @cfg {Number} [resize_minHeight=250] * @member CKEDITOR.config */ /** * The maximum editor width, in pixels, when resizing the editor interface by using the resize handle. * * Read more in the {@glink features/resize documentation} * and see the {@glink examples/resize example}. * * config.resize_maxWidth = 750; * * @cfg {Number} [resize_maxWidth=3000] * @member CKEDITOR.config */ /** * The maximum editor height, in pixels, when resizing the editor interface by using the resize handle. * * Read more in the {@glink features/resize documentation} * and see the {@glink examples/resize example}. * * config.resize_maxHeight = 600; * * @cfg {Number} [resize_maxHeight=3000] * @member CKEDITOR.config */ /** * Whether to enable the resizing feature. If this feature is disabled, the resize handle will not be visible. * * Read more in the {@glink features/resize documentation} * and see the {@glink examples/resize example}. * * config.resize_enabled = false; * * @cfg {Boolean} [resize_enabled=true] * @member CKEDITOR.config */ /** * The dimensions for which the editor resizing is enabled. Possible values * are `both`, `vertical`, and `horizontal`. * * Read more in the {@glink features/resize documentation} * and see the {@glink examples/resize example}. * * config.resize_dir = 'both'; * * @since 3.3.0 * @cfg {String} [resize_dir='vertical'] * @member CKEDITOR.config */ rt-5.0.10/devel/third-party/ckeditor-src/plugins/xml/0000755000201500020150000000000015203533231021113 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/xml/plugin.js0000664000201500020150000001231415203533231022752 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ /** * @fileOverview Defines the {@link CKEDITOR.xml} class, which represents a * loaded XML document. */ ( function() { /* global ActiveXObject */ CKEDITOR.plugins.add( 'xml', {} ); /** * Represents a loaded XML document. * * var xml = new CKEDITOR.xml( '' ); * * @class * @constructor Creates xml class instance. * @param {Object/String} xmlObjectOrData A native XML (DOM document) object or * a string containing the XML definition to be loaded. */ CKEDITOR.xml = function( xmlObjectOrData ) { var baseXml = null; if ( typeof xmlObjectOrData == 'object' ) baseXml = xmlObjectOrData; else { var data = ( xmlObjectOrData || '' ).replace( / /g, '\xA0' ); // Check ActiveXObject before DOMParser, because IE10+ support both, but // there's no XPath support in DOMParser instance. // Also, the only check for ActiveXObject which still works in IE11+ is with `in` operator. if ( 'ActiveXObject' in window ) { try { baseXml = new ActiveXObject( 'MSXML2.DOMDocument' ); } catch ( e ) { try { baseXml = new ActiveXObject( 'Microsoft.XmlDom' ); } catch ( err ) {} } if ( baseXml ) { baseXml.async = false; baseXml.resolveExternals = false; baseXml.validateOnParse = false; baseXml.loadXML( data ); } } else if ( window.DOMParser ) { baseXml = ( new DOMParser() ).parseFromString( data, 'text/xml' ); } } /** * The native XML (DOM document) used by the class instance. * * @property {Object} */ this.baseXml = baseXml; }; CKEDITOR.xml.prototype = { /** * Get a single node from the XML document, based on a XPath query. * * // Create the XML instance. * var xml = new CKEDITOR.xml( '' ); * // Get the first node. * var itemNode = xml.selectSingleNode( 'list/item' ); * // Alert "item". * alert( itemNode.nodeName ); * * @param {String} xpath The XPath query to execute. * @param {Object} [contextNode] The XML DOM node to be used as the context * for the XPath query. The document root is used by default. * @returns {Object} A XML node element or null if the query has no results. */ selectSingleNode: function( xpath, contextNode ) { var baseXml = this.baseXml; if ( contextNode || ( contextNode = baseXml ) ) { if ( 'selectSingleNode' in contextNode ) // IEs return contextNode.selectSingleNode( xpath ); else if ( baseXml.evaluate ) { // Others var result = baseXml.evaluate( xpath, contextNode, null, 9, null ); return ( result && result.singleNodeValue ) || null; } } return null; }, /** * Gets a list node from the XML document, based on a XPath query. * * // Create the XML instance. * var xml = new CKEDITOR.xml( '' ); * // Get all nodes. * var itemNodes = xml.selectNodes( 'list/item' ); * // Alert "item" twice, one for each . * for ( var i = 0; i < itemNodes.length; i++ ) * alert( itemNodes[i].nodeName ); * * @param {String} xpath The XPath query to execute. * @param {Object} [contextNode] The XML DOM node to be used as the context * for the XPath query. The document root is used by default. * @returns {Array} An array containing all matched nodes. The array will * be empty if the query has no results. */ selectNodes: function( xpath, contextNode ) { var baseXml = this.baseXml, nodes = []; if ( contextNode || ( contextNode = baseXml ) ) { if ( 'selectNodes' in contextNode ) // IEs return contextNode.selectNodes( xpath ); else if ( baseXml.evaluate ) { // Others var result = baseXml.evaluate( xpath, contextNode, null, 5, null ); if ( result ) { var node; while ( ( node = result.iterateNext() ) ) nodes.push( node ); } } } return nodes; }, /** * Gets the string representation of hte inner contents of a XML node, * based on a XPath query. * * // Create the XML instance. * var xml = new CKEDITOR.xml( '' ); * // Alert "". * alert( xml.getInnerXml( 'list' ) ); * * @param {String} xpath The XPath query to execute. * @param {Object} [contextNode] The XML DOM node to be used as the context * for the XPath query. The document root is used by default. * @returns {String} The textual representation of the inner contents of * the node or null if the query has no results. */ getInnerXml: function( xpath, contextNode ) { var node = this.selectSingleNode( xpath, contextNode ), xml = []; if ( node ) { node = node.firstChild; while ( node ) { if ( node.xml ) // IEs xml.push( node.xml ); else if ( window.XMLSerializer ) // Others xml.push( ( new XMLSerializer() ).serializeToString( node ) ); node = node.nextSibling; } } return xml.length ? xml.join( '' ) : null; } }; } )(); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/0000755000201500020150000000000015203533231023003 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/plugin.js0000664000201500020150000005464315203533231024655 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ 'use strict'; ( function() { CKEDITOR.plugins.add( 'uploadwidget', { lang: 'az,bg,ca,cs,da,de,de-ch,el,en,en-au,eo,es,es-mx,et,eu,fa,fr,gl,hr,hu,id,it,ja,km,ko,ku,lv,nb,nl,no,oc,pl,pt,pt-br,ro,ru,sk,sq,sr,sr-latn,sv,tr,ug,uk,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]' ); }, isSupportedEnvironment: function() { return CKEDITOR.plugins.clipboard.isFileApiSupported; } } ); /** * 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 to pass additional data to the request, you can do this using the * {@link CKEDITOR.fileTools.uploadWidgetDefinition#additionalRequestParameters additionalRequestParameters} property. * That data is then passed to the upload method defined by {@link CKEDITOR.fileTools.uploadWidgetDefinition#loadMethod}, * and to the {@link CKEDITOR.editor#fileUploadRequest} event (as part of the `requestData` property). * The syntax of that parameter is compatible with the {@link CKEDITOR.editor#fileUploadRequest} `requestData` property. * * CKEDITOR.fileTools.addUploadWidget( editor, 'uploadFile', { * additionalRequestParameters: { * foo: 'bar' * }, * * fileToElement: function( file ) { * var el = new CKEDITOR.dom.element( 'span' ); * el.setText( '...' ); * return el; * }, * * onUploaded: function( upload ) { * this.replaceWith( '' + upload.fileName + '' ); * } * } ); * * 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; // Add a callback as a matcher in the clipboard plugin to check if notification should be displayed (#5095). CKEDITOR.plugins.clipboard.addFileMatcher( editor, function( file ) { // Allow any file type in case no type is defined. if ( !def.supportedTypes ) { return true; } return fileTools.isTypeSupported( file, def.supportedTypes ); } ); if ( def.fileToElement ) { editor.on( 'paste', function( evt ) { var data = evt.data, // Fetch runtime widget definition as it might get changed in editor#widgetDefinition event. def = editor.widgets.registered[ name ], 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, undefined, def.loaderType ); if ( el ) { loader[ loadMethod ]( def.uploadUrl, def.additionalRequestParameters ); CKEDITOR.fileTools.markElement( el, name, loader.id ); if ( ( loadMethod == 'loadAndUpload' || loadMethod == 'upload' ) && !def.skipNotifications ) { 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}, {@link #uploadUrl} and {@link #additionalRequestParameters}) 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 ) { // (#1454) if ( loader.status === 'abort' ) { if ( typeof widget.onAbort === 'function' ) { widget.onAbort( loader ); } } // Abort if widget was removed. if ( !widget.wrapper || !widget.wrapper.getParent() ) { // Uploading should be aborted if the editor is already destroyed (#966) or the upload widget was removed. if ( !CKEDITOR.instances[ editor.name ] || !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 ( loader.status !== 'abort' && 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 ); } }, /** * @private * @returns {CKEDITOR.fileTools.fileLoader/null} The loader associated with this widget instance or `null` if not found. */ _getLoader: function() { var marker = this.wrapper.findOne( '[data-cke-upload-id]' ); return marker ? this.editor.uploadRepository.loaders[ marker.data( 'cke-upload-id' ) ] : null; } /** * 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 {RegExp} [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] */ /** * Loader type that should be used for creating file tools requests. * * @property {Function} [loaderType] */ /** * An object containing additional data that should be passed to the function defined by {@link #loadMethod}. * * @property {Object} [additionalRequestParameters] */ /** * 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] */ /** * Indicates whether default notification handling should be skipped. * * By default upload widget will use [Notification](https://ckeditor.com/cke4/addon/notification) plugin to provide * feedback for upload progress and eventual success / error message. * * @since 4.8.0 * @property {Boolean} [skipNotifications=false] */ /** * 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, task = null; loader.on( 'update', function() { // Value of uploadTotal is known after upload start. Task will be created when uploadTotal is present. if ( !task && loader.uploadTotal ) { createAggregator(); task = aggregator.createTask( { weight: loader.uploadTotal } ); } 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 could be already destroyed (#966). if ( CKEDITOR.instances[ editor.name ] ) { editor.showNotification( editor.lang.uploadwidget.abort, 'info' ); } } ); function createAggregator() { aggregator = editor._.uploadWidgetNotificaionAggregator; // Create one notification aggregator 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 } ); } } ); } } } // Two plugins extend this object. if ( !CKEDITOR.fileTools ) { CKEDITOR.fileTools = {}; } CKEDITOR.tools.extend( CKEDITOR.fileTools, { addUploadWidget: addUploadWidget, markElement: markElement, bindNotifications: bindNotifications } ); } )(); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/dev/0000755000201500020150000000000015203533231023561 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/dev/filereaderplugin.js0000664000201500020150000000261515203533231027446 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/dev/cors.html0000664000201500020150000001366715203533231025434 0ustar puckpuck CORS sample

            CORS sample

            rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/dev/upload.html0000664000201500020150000002431515203533231025742 0ustar puckpuck 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-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/0000755000201500020150000000000015203533231023724 5ustar puckpuckrt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/zh.js0000664000201500020150000000075715203533231024716 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'zh', { abort: '上傳由使用者放棄。', doneOne: '檔案æˆåŠŸä¸Šå‚³ã€‚', doneMany: 'æˆåŠŸä¸Šå‚³ %1 檔案。', uploadOne: '正在上傳檔案({percentage}%)...', uploadMany: '正在上傳檔案,{max} 中的 {current} 已完æˆï¼ˆ{percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/nb.js0000664000201500020150000000076415203533231024672 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/eo.js0000664000201500020150000000076015203533231024672 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/es.js0000664000201500020150000000076315203533231024701 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'es', { abort: 'Carga abortada por el usuario.', doneOne: 'Archivo cargado exitósamente.', doneMany: '%1 archivos exitósamente cargados.', uploadOne: 'Cargando archivo ({percentage}%)...', uploadMany: 'Cargando archivos, {current} de {max} hecho ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/ro.js0000664000201500020150000000100415203533231024677 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'ro', { abort: 'ÃŽncărcare întreruptă de utilizator.', doneOne: 'FiÈ™ier încărcat cu succes.', doneMany: '%1 fiÈ™iere încărcate cu succes.', uploadOne: 'ÃŽncărcare fiÈ™ier ({percentage}%)...', uploadMany: 'ÃŽncărcare fiÈ™iere, {current} din {max} realizat ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/hr.js0000664000201500020150000000075715203533231024706 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'hr', { abort: 'Slanje prekinuto od strane korisnika', doneOne: 'Datoteka uspjeÅ¡no poslana.', doneMany: 'UspjeÅ¡no poslano %1 datoteka.', uploadOne: 'Slanje datoteke ({percentage}%)...', uploadMany: 'Slanje datoteka, {current} od {max} gotovo ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/it.js0000664000201500020150000000102615203533231024677 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/de-ch.js0000664000201500020150000000102215203533231025237 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'de-ch', { 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-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/sk.js0000664000201500020150000000077315203533231024710 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'sk', { abort: 'Nahrávanie zruÅ¡ené používateľom.', doneOne: 'Súbor úspeÅ¡ne nahraný.', doneMany: 'ÚspeÅ¡ne nahraných %1 súborov.', uploadOne: 'Nahrávanie súboru ({percentage}%)...', uploadMany: 'Nahrávanie súborov, {current} z {max} hotovo ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/az.js0000664000201500020150000000105415203533231024676 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'az', { abort: 'ServerÉ™ yüklÉ™mÉ™ istifadəçi tÉ™rÉ™findÉ™n dayandırılıb', doneOne: 'Fayl müvÉ™ffÉ™qiyyÉ™tlÉ™ yüklÉ™nib', doneMany: '%1 fayllar müvÉ™ffÉ™qiyyÉ™tlÉ™ yüklÉ™nib', uploadOne: 'Faylın yüklÉ™nmÉ™si ({percentage}%)', uploadMany: 'Faylların yüklÉ™nmÉ™si, {max}-dan {current} hazır ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/pt.js0000664000201500020150000000102515203533231024705 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'pt', { abort: 'Carregamento cancelado pelo utilizador.', doneOne: 'Ficheiro carregado com sucesso.', doneMany: 'Successfully uploaded %1 files.', // MISSING uploadOne: 'Uploading file ({percentage}%)...', // MISSING uploadMany: 'Uploading files, {current} of {max} done ({percentage}%)...' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/ko.js0000664000201500020150000000107715203533231024702 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'ko', { abort: '사용ìžê°€ 업로드를 중단했습니다.', doneOne: '파ì¼ì´ 성공ì ìœ¼ë¡œ 업로드ë˜ì—ˆìŠµë‹ˆë‹¤.', doneMany: 'íŒŒì¼ %1개를 성공ì ìœ¼ë¡œ 업로드하였습니다.', uploadOne: 'íŒŒì¼ ì—…ë¡œë“œì¤‘ ({percentage}%)...', uploadMany: 'íŒŒì¼ {max} ê°œ 중 {current} 번째 íŒŒì¼ ì—…ë¡œë“œ 중 ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/uk.js0000664000201500020150000000116215203533231024703 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'uk', { abort: 'Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑ€Ð²Ð°Ð½Ð¾ кориÑтувачем.', doneOne: 'Файл цілком завантажено.', doneMany: 'Цілком завантажено %1 файлів.', uploadOne: 'Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ ({percentage}%)...', uploadMany: 'Завантажено {current} із {max} файлів завершено на ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/zh-cn.js0000664000201500020150000000074515203533231025311 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'zh-cn', { abort: '上传已被用户中止', doneOne: '文件上传æˆåŠŸ', doneMany: 'æˆåŠŸä¸Šä¼ äº† %1 个文件', uploadOne: '正在上传文件({percentage}%)...', uploadMany: '正在上传文件,{max} 中的 {current}({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/sv.js0000664000201500020150000000076115203533231024720 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/et.js0000664000201500020150000000100315203533231024666 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'et', { abort: 'Kasutaja katkestas üleslaadimise.', doneOne: 'Fail on üles laaditud.', doneMany: '%1 faili laaditi edukalt üles.', uploadOne: 'Faili üleslaadimine ({percentage}%)...', uploadMany: 'Failide üleslaadimine, {current} fail {max}-st üles laaditud ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/pl.js0000664000201500020150000000077415203533231024707 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/bg.js0000664000201500020150000000113215203533231024651 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'bg', { abort: 'Качването е прекратено от потребителÑ.', doneOne: 'Файлът е качен уÑпешно.', doneMany: 'УÑпешно Ñа качени %1 файла.', uploadOne: 'Качване на файл ({percentage}%)...', uploadMany: 'Качване на файлове, {current} от {max} качени ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/fa.js0000664000201500020150000000113415203533231024651 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'fa', { abort: 'بارگذاری توسط کاربر لغو شد.', doneOne: 'ÙØ§ÛŒÙ„ با موÙقیت بارگذاری شد.', doneMany: '%1 از ÙØ§ÛŒÙ„​ها با موÙقیت بارگذاری شد.', uploadOne: 'بارگذاری ÙØ§ÛŒÙ„ ({percentage}%)...', uploadMany: 'بارگذاری ÙØ§ÛŒÙ„​ها, {current} از {max} انجام شده ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/ku.js0000664000201500020150000000116515203533231024706 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'ku', { abort: 'بارکردنەکە بڕدرا لەلایەن بەکارهێنەر.', doneOne: 'Ù¾Û•Ú•Ú¯Û•Ú©Û• بەسەرکەوتووانە بارکرا.', doneMany: 'بەسەرکەوتووانە بارکرا %1 Ù¾Û•Ú•Ú¯Û•.', uploadOne: 'Ù¾Û•Ú•Ú¯Û• باردەکرێت ({percentage}%)...', uploadMany: 'Ù¾Û•Ú•Ú¯Û• باردەکرێت, {current} Ù„Û• {max} ئەنجامدراوە ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/el.js0000664000201500020150000000113715203533231024666 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'el', { abort: 'Αποστολή ακυÏώθηκε απο χÏήστη.', doneOne: 'ΑÏχείο εστάλη επιτυχώς.', doneMany: 'Επιτυχής αποστολή %1 αÏχείων.', uploadOne: 'Αποστολή αÏχείου ({percentage}%)…', uploadMany: 'Αποστολή αÏχείων, {current} από {max} ολοκληÏωμένα ({percentage}%)…' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/ru.js0000664000201500020150000000111515203533231024710 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'ru', { abort: 'Загрузка отменена пользователем', doneOne: 'Файл уÑпешно загружен', doneMany: 'УÑпешно загружено файлов: %1', uploadOne: 'Загрузка файла ({percentage}%)', uploadMany: 'Загрузка файлов, {current} из {max} загружено ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/gl.js0000664000201500020150000000101015203533231024656 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/sr-latn.js0000664000201500020150000000102215203533231025637 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'sr-latn', { abort: 'Postavljanje je prekinuto sa strane korisnika', doneOne: 'Datoteka je uspeÅ¡no postavljena', doneMany: '%1 datoteka je uspeÅ¡no postavljena', uploadOne: 'Postavljanje datoteke ({percentage}%)...', uploadMany: 'Postavljanje datoteka, {current} of {max} done ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/oc.js0000664000201500020150000000104015203533231024660 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'oc', { abort: 'Mandadís interromput per l\'utilizaire', doneOne: 'Fichièr mandat amb succès.', doneMany: '%1 fichièrs mandats amb succès.', uploadOne: 'Mandadís del fichièr en cors ({percentage} %)…', uploadMany: 'Mandadís dels fichièrs en cors, {current} sus {max} efectuats ({percentage} %)…' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/sq.js0000664000201500020150000000077615203533231024721 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'sq', { abort: 'Ngarkimi u ndërpre nga përdoruesi.', doneOne: 'Skeda u ngarkua me sukses.', doneMany: 'Me sukses u ngarkuan %1 skeda.', uploadOne: 'Duke ngarkuar skedën ({percentage}%)...', uploadMany: 'Duke ngarkuar skedat, {current} nga {max} , ngarkuar ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/pt-br.js0000664000201500020150000000076515203533231025320 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/km.js0000664000201500020150000000152015203533231024671 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'km', { abort: 'បាន​ផ្ដាច់​ការផ្ទុកឡើង​ដោយ​អ្នក​ប្រើប្រាស់។', doneOne: 'បាន​ផ្ទុកឡើង​នូវ​ឯកសារ​ដោយ​ជោគជáŸáž™áŸ”', doneMany: 'បាន​ផ្ទុក​ឡើង​នូវ​ឯកសារ %1 ដោយ​ជោគជáŸáž™áŸ”', uploadOne: 'កំពុង​ផ្ទុកឡើង​ឯកសារ ({percentage}%)...', uploadMany: 'កំពុង​ផ្ទុកឡើង​ឯកសារ, រួចរាល់ {current} នៃ {max} ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/nl.js0000664000201500020150000000077415203533231024705 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/es-mx.js0000664000201500020150000000101415203533231025311 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'es-mx', { abort: 'La carga ha sido abortada por el usuario.', doneOne: 'El archivo ha sido cargado completamente.', doneMany: '%1 archivos cargados completamente.', uploadOne: 'Cargando archivo ({percentage}%)...', uploadMany: 'Cargando archivos, {current} de {max} listo ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/da.js0000664000201500020150000000073215203533231024652 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'da', { abort: 'Upload er afbrudt af bruger.', doneOne: 'Filen er uploadet.', doneMany: 'Du har uploadet %1 filer.', uploadOne: 'Uploader fil ({percentage}%)...', uploadMany: 'Uploader filer, {current} af {max} er uploadet ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/ca.js0000664000201500020150000000075715203533231024660 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'ca', { abort: 'Pujada cancel·lada per l\'usuari.', doneOne: 'Fitxer pujat correctament.', doneMany: '%1 fitxers pujats correctament.', uploadOne: 'Pujant fitxer ({percentage}%)...', uploadMany: 'Pujant fitxers, {current} de {max} finalitzats ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/de.js0000664000201500020150000000101715203533231024653 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/cs.js0000664000201500020150000000077215203533231024677 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/tr.js0000664000201500020150000000105615203533231024713 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/ja.js0000664000201500020150000000115615203533231024661 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'ja', { abort: 'アップロードを中止ã—ã¾ã—ãŸã€‚', doneOne: 'ファイルã®ã‚¢ãƒƒãƒ—ãƒ­ãƒ¼ãƒ‰ã«æˆåŠŸã—ã¾ã—ãŸã€‚', doneMany: '%1個ã®ãƒ•ァイルã®ã‚¢ãƒƒãƒ—ãƒ­ãƒ¼ãƒ‰ã«æˆåŠŸã—ã¾ã—ãŸã€‚', uploadOne: 'ファイルã®ã‚¢ãƒƒãƒ—ロード中 ({percentage}%)...', uploadMany: '{max} 個中 {current} 個ã®ãƒ•ァイルをアップロードã—ã¾ã—ãŸã€‚ ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/lv.js0000664000201500020150000000076515203533231024715 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'lv', { abort: 'AugÅ¡upielÄdi atcÄ“la lietotÄjs.', doneOne: 'Fails veiksmÄ«gi ielÄdÄ“ts.', doneMany: 'VeiksmÄ«gi ielÄdÄ“ts %1 fails.', uploadOne: 'IelÄdÄju failu ({percentage}%)...', uploadMany: 'IelÄdÄ“ju failus, {curent} no {max} izpildÄ«ts ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/en-au.js0000664000201500020150000000074715203533231025301 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'en-au', { 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-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/en.js0000664000201500020150000000074415203533231024673 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/no.js0000664000201500020150000000076415203533231024707 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'no', { 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-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/fr.js0000664000201500020150000000107615203533231024677 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/id.js0000664000201500020150000000077515203533231024671 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'id', { abort: 'Pengunggahan dibatalkan oleh pengguna', doneOne: 'Berkas telah berhasil diunggah', doneMany: 'Pengunggahan berkas %1 berhasil', uploadOne: 'Mengunggah berkas ({percentage}%)...', uploadMany: 'Pengunggahan berkas {current} dari {max} berhasil ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/ug.js0000664000201500020150000000114615203533231024701 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'ug', { abort: 'يۈكلەشنى ئىشلەتكۈچى ئۈزۈۋەتتى.', doneOne: 'ھۆججەت مۇۋەپپەقىيەتلىك يۈكلەندى.', doneMany: 'مۇۋەپپەقىيەتلىك ھالدا %1 ھۆججەت يۈكلەندى.', uploadOne: 'Uploading file ({percentage}%)...', // MISSING uploadMany: 'Uploading files, {current} of {max} done ({percentage}%)...' // MISSING } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/sr.js0000664000201500020150000000120515203533231024706 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'sr', { abort: 'ПоÑтављање је прекинуто Ñа Ñтране кориÑника', doneOne: 'Датотека је уÑпешно поÑтављена', doneMany: '%1 датотека је уÑпешно поÑтављена', uploadOne: 'ПоÑтављање датотеке ({percentage}%)...', uploadMany: 'ПоÑтављање датотека, {current} of {max} done ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/eu.js0000664000201500020150000000102015203533231024666 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'uploadwidget', 'eu', { abort: 'Karga erabiltzaileak bertan behera utzita.', doneOne: 'Fitxategia behar bezala kargatu da.', doneMany: 'Behar bezala kargatu dira %1 fitxategi.', uploadOne: 'Fitxategia kargatzen ({percentage}%)...', uploadMany: 'Fitxategiak kargatzen, {current} / {max} eginda ({percentage}%)...' } ); rt-5.0.10/devel/third-party/ckeditor-src/plugins/uploadwidget/lang/hu.js0000664000201500020150000000077715203533231024713 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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-5.0.10/devel/third-party/ckeditor-src/.editorconfig0000664000201500020150000000041115153141500021303 0ustar puckpuck# 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 [*.yml] indent_style = space indent_size = 2 rt-5.0.10/devel/third-party/ckeditor-src/.gitignore0000664000201500020150000000140515203533224020626 0ustar puckpuck# These files will be ignored by Git and by our linting tools: # grunt jshint # grunt jscs # # Be sure to append /** to folders to have everything inside them ignored. # All "dot directories". .*/** node_modules/** build/** coverage/** dev/builder/release/** dev/builder/ckbuilder/** dev/langtool/po/** dev/langtool/cklangtool/** samples/toolbarconfigurator/.bender/** samples/toolbarconfigurator/node_modules/** samples/toolbarconfigurator/docs/** tests/security tests/plugins/mathjax/_assets/mathjax/** *.css.map bender-*.log !.github/** !.npm/* .DS_Store # Ignore package-lock.json # - we don't intent to force specific 3rd party dependency version via `package-lock.json` file # Such information should be specified in the package.json file. package-lock.json rt-5.0.10/devel/third-party/ckeditor-src/styles.js0000664000201500020150000001255215203533231020522 0ustar puckpuck/** * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-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 the Styles drop-down // list containing all styles in the editor toolbar. Other plugins, like // the "div" plugin, use a subset of the styles for their features. // // If you do not have plugins that depend on this file in your editor build, you can simply // ignore it. Otherwise it is strongly recommended to customize this file to match your // website requirements and design properly. // // For more information refer to: https://ckeditor.com/docs/ckeditor4/latest/guide/dev_styles.html#style-rules CKEDITOR.stylesSet.add( 'default', [ /* Block styles */ // These styles are already available in the "Format" drop-down list ("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 drop-down list, 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' } }, /* Widget styles */ { name: 'Clean Image', type: 'widget', widget: 'image', attributes: { 'class': 'image-clean' } }, { name: 'Grayscale Image', type: 'widget', widget: 'image', attributes: { 'class': 'image-grayscale' } }, { name: 'Featured Snippet', type: 'widget', widget: 'codeSnippet', attributes: { 'class': 'code-featured' } }, { name: 'Featured Formula', type: 'widget', widget: 'mathjax', attributes: { 'class': 'math-featured' } }, { name: '240p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-240p' }, group: 'size' }, { name: '360p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-360p' }, group: 'size' }, { name: '480p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-480p' }, group: 'size' }, { name: '720p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-720p' }, group: 'size' }, { name: '1080p', type: 'widget', widget: 'embedSemantic', attributes: { 'class': 'embed-1080p' }, group: 'size' }, // Adding space after the style name is an intended workaround. For now, there // is no option to create two styles with the same name for different widget types. See https://dev.ckeditor.com/ticket/16664. { name: '240p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-240p' }, group: 'size' }, { name: '360p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-360p' }, group: 'size' }, { name: '480p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-480p' }, group: 'size' }, { name: '720p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-720p' }, group: 'size' }, { name: '1080p ', type: 'widget', widget: 'embed', attributes: { 'class': 'embed-1080p' }, group: 'size' } ] ); // %LEAVE_UNMINIFIED% %REMOVE_LINE% rt-5.0.10/devel/third-party/ckeditor-src/bender-runner.config.json0000664000201500020150000000036615153141500023544 0ustar puckpuck{ "bender": { "port": 9001 }, "server": { "port": 9002 }, "paths": { "ckeditor4": "../ckeditor4/", "runner": "./src/runner.html" }, "browsers": { "linux": [ "chrome", "firefox" ], "macos": [ "safari" ] } } rt-5.0.10/devel/third-party/eyedropper.svg0000664000201500020150000000243515203371200017142 0ustar puckpuck rt-5.0.10/devel/third-party/selectize-0.12.6/0000775000201500020150000000000015203371200016750 5ustar puckpuckrt-5.0.10/devel/third-party/selectize-0.12.6/selectize.js0000664000201500020150000031767415203371200021317 0ustar puckpuck/** * sifter.js * Copyright (c) 2013 Brian Reavis & contributors * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this * file except in compliance with the License. You may obtain a copy of the License at: * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF * ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. * * @author Brian Reavis */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define('sifter', factory); } else if (typeof exports === 'object') { module.exports = factory(); } else { root.Sifter = factory(); } }(this, function() { /** * Textually searches arrays and hashes of objects * by property (or multiple properties). Designed * specifically for autocomplete. * * @constructor * @param {array|object} items * @param {object} items */ var Sifter = function(items, settings) { this.items = items; this.settings = settings || {diacritics: true}; }; /** * Splits a search string into an array of individual * regexps to be used to match results. * * @param {string} query * @returns {array} */ Sifter.prototype.tokenize = function(query) { query = trim(String(query || '').toLowerCase()); if (!query || !query.length) return []; var i, n, regex, letter; var tokens = []; var words = query.split(/ +/); for (i = 0, n = words.length; i < n; i++) { regex = escape_regex(words[i]); if (this.settings.diacritics) { for (letter in DIACRITICS) { if (DIACRITICS.hasOwnProperty(letter)) { regex = regex.replace(new RegExp(letter, 'g'), DIACRITICS[letter]); } } } tokens.push({ string : words[i], regex : new RegExp(regex, 'i') }); } return tokens; }; /** * Iterates over arrays and hashes. * * ``` * this.iterator(this.items, function(item, id) { * // invoked for each item * }); * ``` * * @param {array|object} object */ Sifter.prototype.iterator = function(object, callback) { var iterator; if (is_array(object)) { iterator = Array.prototype.forEach || function(callback) { for (var i = 0, n = this.length; i < n; i++) { callback(this[i], i, this); } }; } else { iterator = function(callback) { for (var key in this) { if (this.hasOwnProperty(key)) { callback(this[key], key, this); } } }; } iterator.apply(object, [callback]); }; /** * Returns a function to be used to score individual results. * * Good matches will have a higher score than poor matches. * If an item is not a match, 0 will be returned by the function. * * @param {object|string} search * @param {object} options (optional) * @returns {function} */ Sifter.prototype.getScoreFunction = function(search, options) { var self, fields, tokens, token_count, nesting; self = this; search = self.prepareSearch(search, options); tokens = search.tokens; fields = search.options.fields; token_count = tokens.length; nesting = search.options.nesting; /** * Calculates how close of a match the * given value is against a search token. * * @param {mixed} value * @param {object} token * @return {number} */ var scoreValue = function(value, token) { var score, pos; if (!value) return 0; value = String(value || ''); pos = value.search(token.regex); if (pos === -1) return 0; score = token.string.length / value.length; if (pos === 0) score += 0.5; return score; }; /** * Calculates the score of an object * against the search query. * * @param {object} token * @param {object} data * @return {number} */ var scoreObject = (function() { var field_count = fields.length; if (!field_count) { return function() { return 0; }; } if (field_count === 1) { return function(token, data) { return scoreValue(getattr(data, fields[0], nesting), token); }; } return function(token, data) { for (var i = 0, sum = 0; i < field_count; i++) { sum += scoreValue(getattr(data, fields[i], nesting), token); } return sum / field_count; }; })(); if (!token_count) { return function() { return 0; }; } if (token_count === 1) { return function(data) { return scoreObject(tokens[0], data); }; } if (search.options.conjunction === 'and') { return function(data) { var score; for (var i = 0, sum = 0; i < token_count; i++) { score = scoreObject(tokens[i], data); if (score <= 0) return 0; sum += score; } return sum / token_count; }; } else { return function(data) { for (var i = 0, sum = 0; i < token_count; i++) { sum += scoreObject(tokens[i], data); } return sum / token_count; }; } }; /** * Returns a function that can be used to compare two * results, for sorting purposes. If no sorting should * be performed, `null` will be returned. * * @param {string|object} search * @param {object} options * @return function(a,b) */ Sifter.prototype.getSortFunction = function(search, options) { var i, n, self, field, fields, fields_count, multiplier, multipliers, get_field, implicit_score, sort; self = this; search = self.prepareSearch(search, options); sort = (!search.query && options.sort_empty) || options.sort; /** * Fetches the specified sort field value * from a search result item. * * @param {string} name * @param {object} result * @return {mixed} */ get_field = function(name, result) { if (name === '$score') return result.score; return getattr(self.items[result.id], name, options.nesting); }; // parse options fields = []; if (sort) { for (i = 0, n = sort.length; i < n; i++) { if (search.query || sort[i].field !== '$score') { fields.push(sort[i]); } } } // the "$score" field is implied to be the primary // sort field, unless it's manually specified if (search.query) { implicit_score = true; for (i = 0, n = fields.length; i < n; i++) { if (fields[i].field === '$score') { implicit_score = false; break; } } if (implicit_score) { fields.unshift({field: '$score', direction: 'desc'}); } } else { for (i = 0, n = fields.length; i < n; i++) { if (fields[i].field === '$score') { fields.splice(i, 1); break; } } } multipliers = []; for (i = 0, n = fields.length; i < n; i++) { multipliers.push(fields[i].direction === 'desc' ? -1 : 1); } // build function fields_count = fields.length; if (!fields_count) { return null; } else if (fields_count === 1) { field = fields[0].field; multiplier = multipliers[0]; return function(a, b) { return multiplier * cmp( get_field(field, a), get_field(field, b) ); }; } else { return function(a, b) { var i, result, a_value, b_value, field; for (i = 0; i < fields_count; i++) { field = fields[i].field; result = multipliers[i] * cmp( get_field(field, a), get_field(field, b) ); if (result) return result; } return 0; }; } }; /** * Parses a search query and returns an object * with tokens and fields ready to be populated * with results. * * @param {string} query * @param {object} options * @returns {object} */ Sifter.prototype.prepareSearch = function(query, options) { if (typeof query === 'object') return query; options = extend({}, options); var option_fields = options.fields; var option_sort = options.sort; var option_sort_empty = options.sort_empty; if (option_fields && !is_array(option_fields)) options.fields = [option_fields]; if (option_sort && !is_array(option_sort)) options.sort = [option_sort]; if (option_sort_empty && !is_array(option_sort_empty)) options.sort_empty = [option_sort_empty]; return { options : options, query : String(query || '').toLowerCase(), tokens : this.tokenize(query), total : 0, items : [] }; }; /** * Searches through all items and returns a sorted array of matches. * * The `options` parameter can contain: * * - fields {string|array} * - sort {array} * - score {function} * - filter {bool} * - limit {integer} * * Returns an object containing: * * - options {object} * - query {string} * - tokens {array} * - total {int} * - items {array} * * @param {string} query * @param {object} options * @returns {object} */ Sifter.prototype.search = function(query, options) { var self = this, value, score, search, calculateScore; var fn_sort; var fn_score; search = this.prepareSearch(query, options); options = search.options; query = search.query; // generate result scoring function fn_score = options.score || self.getScoreFunction(search); // perform search and sort if (query.length) { self.iterator(self.items, function(item, id) { score = fn_score(item); if (options.filter === false || score > 0) { search.items.push({'score': score, 'id': id}); } }); } else { self.iterator(self.items, function(item, id) { search.items.push({'score': 1, 'id': id}); }); } fn_sort = self.getSortFunction(search, options); if (fn_sort) search.items.sort(fn_sort); // apply limits search.total = search.items.length; if (typeof options.limit === 'number') { search.items = search.items.slice(0, options.limit); } return search; }; // utilities // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - var cmp = function(a, b) { if (typeof a === 'number' && typeof b === 'number') { return a > b ? 1 : (a < b ? -1 : 0); } a = asciifold(String(a || '')); b = asciifold(String(b || '')); if (a > b) return 1; if (b > a) return -1; return 0; }; var extend = function(a, b) { var i, n, k, object; for (i = 1, n = arguments.length; i < n; i++) { object = arguments[i]; if (!object) continue; for (k in object) { if (object.hasOwnProperty(k)) { a[k] = object[k]; } } } return a; }; /** * A property getter resolving dot-notation * @param {Object} obj The root object to fetch property on * @param {String} name The optionally dotted property name to fetch * @param {Boolean} nesting Handle nesting or not * @return {Object} The resolved property value */ var getattr = function(obj, name, nesting) { if (!obj || !name) return; if (!nesting) return obj[name]; var names = name.split("."); while(names.length && (obj = obj[names.shift()])); return obj; }; var trim = function(str) { return (str + '').replace(/^\s+|\s+$|/g, ''); }; var escape_regex = function(str) { return (str + '').replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1'); }; var is_array = Array.isArray || (typeof $ !== 'undefined' && $.isArray) || function(object) { return Object.prototype.toString.call(object) === '[object Array]'; }; var DIACRITICS = { 'a': '[aḀá¸Ä‚ăÂâÇǎȺⱥȦȧẠạÄäÀàÃáĀÄÃãÅåąĄÃąĄ]', 'b': '[bâ¢Î²Î’B฿ðŒá›’]', 'c': '[cĆćĈĉČÄÄŠÄ‹CÌ„c̄ÇçḈḉȻȼƇƈɕᴄCc]', 'd': '[dÄŽÄḊḋá¸á¸‘Ḍá¸á¸’ḓḎá¸ÄÄ‘D̦d̦ƉɖƊɗƋƌᵭá¶á¶‘ȡᴅDdð]', 'e': '[eÉéÈèÊêḘḙĚěĔĕẼẽḚḛẺẻĖėËëĒēȨȩĘęᶒɆɇȄȅẾếỀá»á»„ễỂểḜá¸á¸–á¸—á¸”á¸•È†È‡áº¸áº¹á»†á»‡â±¸á´‡ï¼¥ï½…É˜ÇÆÆÎµ]', 'f': '[fƑƒḞḟ]', 'g': '[gɢ₲ǤǥĜÄĞğĢģƓɠĠġ]', 'h': '[hĤĥĦħḨḩẖẖḤḥḢḣɦʰǶƕ]', 'i': '[iÃíÌìĬĭÎîÇÇÃïḮḯĨĩĮįĪīỈỉȈȉȊȋỊịḬḭƗɨɨ̆ᵻᶖİiIıɪIi]', 'j': '[jȷĴĵɈɉÊɟʲ]', 'k': '[kƘƙê€êḰḱǨǩḲḳḴḵκϰ₭]', 'l': '[lÅłĽľĻļĹĺḶḷḸḹḼḽḺḻĿŀȽƚⱠⱡⱢɫɬᶅɭȴʟLl]', 'n': '[nŃńǸǹŇňÑñṄṅŅņṆṇṊṋṈṉN̈n̈ÆÉ²È Æžáµ°á¶‡É³ÈµÉ´ï¼®ï½ŽÅŠÅ‹]', 'o': '[oØøÖöÓóÒòÔôǑǒÅőŎÅÈ®È¯á»Œá»ÆŸÉµÆ Æ¡á»Žá»ÅŒÅÕõǪǫȌÈÕ•Ö…]', 'p': '[pṔṕṖṗⱣᵽƤƥᵱ]', 'q': '[qê–ê—Ê ÉŠÉ‹ê˜ê™q̃]', 'r': '[rŔŕɌÉŘřŖŗṘṙÈȑȒȓṚṛⱤɽ]', 's': '[sŚśṠṡṢṣꞨꞩŜÅŠšŞşȘșS̈s̈]', 't': '[tŤťṪṫŢţṬṭƮʈȚțṰṱṮṯƬƭ]', 'u': '[uŬŭɄʉỤụÜüÚúÙùÛûǓǔŰűŬŭƯưỦủŪūŨũŲųȔȕ∪]', 'v': '[vṼṽṾṿƲʋêžêŸâ±±Ê‹]', 'w': '[wẂẃẀáºÅ´Åµáº„ẅẆẇẈẉ]', 'x': '[xẌáºáºŠáº‹Ï‡]', 'y': '[yÃýỲỳŶŷŸÿỸỹẎáºá»´á»µÉŽÉƳƴ]', 'z': '[zŹźáºáº‘ŽžŻżẒẓẔẕƵƶ]' }; var asciifold = (function() { var i, n, k, chunk; var foreignletters = ''; var lookup = {}; for (k in DIACRITICS) { if (DIACRITICS.hasOwnProperty(k)) { chunk = DIACRITICS[k].substring(2, DIACRITICS[k].length - 1); foreignletters += chunk; for (i = 0, n = chunk.length; i < n; i++) { lookup[chunk.charAt(i)] = k; } } } var regexp = new RegExp('[' + foreignletters + ']', 'g'); return function(str) { return str.replace(regexp, function(foreignletter) { return lookup[foreignletter]; }).toLowerCase(); }; })(); // export // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - return Sifter; })); /** * microplugin.js * Copyright (c) 2013 Brian Reavis & contributors * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this * file except in compliance with the License. You may obtain a copy of the License at: * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF * ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. * * @author Brian Reavis */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define('microplugin', factory); } else if (typeof exports === 'object') { module.exports = factory(); } else { root.MicroPlugin = factory(); } }(this, function() { var MicroPlugin = {}; MicroPlugin.mixin = function(Interface) { Interface.plugins = {}; /** * Initializes the listed plugins (with options). * Acceptable formats: * * List (without options): * ['a', 'b', 'c'] * * List (with options): * [{'name': 'a', options: {}}, {'name': 'b', options: {}}] * * Hash (with options): * {'a': { ... }, 'b': { ... }, 'c': { ... }} * * @param {mixed} plugins */ Interface.prototype.initializePlugins = function(plugins) { var i, n, key; var self = this; var queue = []; self.plugins = { names : [], settings : {}, requested : {}, loaded : {} }; if (utils.isArray(plugins)) { for (i = 0, n = plugins.length; i < n; i++) { if (typeof plugins[i] === 'string') { queue.push(plugins[i]); } else { self.plugins.settings[plugins[i].name] = plugins[i].options; queue.push(plugins[i].name); } } } else if (plugins) { for (key in plugins) { if (plugins.hasOwnProperty(key)) { self.plugins.settings[key] = plugins[key]; queue.push(key); } } } while (queue.length) { self.require(queue.shift()); } }; Interface.prototype.loadPlugin = function(name) { var self = this; var plugins = self.plugins; var plugin = Interface.plugins[name]; if (!Interface.plugins.hasOwnProperty(name)) { throw new Error('Unable to find "' + name + '" plugin'); } plugins.requested[name] = true; plugins.loaded[name] = plugin.fn.apply(self, [self.plugins.settings[name] || {}]); plugins.names.push(name); }; /** * Initializes a plugin. * * @param {string} name */ Interface.prototype.require = function(name) { var self = this; var plugins = self.plugins; if (!self.plugins.loaded.hasOwnProperty(name)) { if (plugins.requested[name]) { throw new Error('Plugin has circular dependency ("' + name + '")'); } self.loadPlugin(name); } return plugins.loaded[name]; }; /** * Registers a plugin. * * @param {string} name * @param {function} fn */ Interface.define = function(name, fn) { Interface.plugins[name] = { 'name' : name, 'fn' : fn }; }; }; var utils = { isArray: Array.isArray || function(vArg) { return Object.prototype.toString.call(vArg) === '[object Array]'; } }; return MicroPlugin; })); /** * selectize.js (v0.12.6) * Copyright (c) 2013–2015 Brian Reavis & contributors * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this * file except in compliance with the License. You may obtain a copy of the License at: * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF * ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. * * @author Brian Reavis */ /*jshint curly:false */ /*jshint browser:true */ (function(root, factory) { if (typeof define === 'function' && define.amd) { define('selectize', ['jquery','sifter','microplugin'], factory); } else if (typeof exports === 'object') { module.exports = factory(require('jquery'), require('sifter'), require('microplugin')); } else { root.Selectize = factory(root.jQuery, root.Sifter, root.MicroPlugin); } }(this, function($, Sifter, MicroPlugin) { 'use strict'; var highlight = function($element, pattern) { if (typeof pattern === 'string' && !pattern.length) return; var regex = (typeof pattern === 'string') ? new RegExp(pattern, 'i') : pattern; var highlight = function(node) { var skip = 0; // Wrap matching part of text node with highlighting , e.g. // Soccer -> Soccer for regex = /soc/i if (node.nodeType === 3) { var pos = node.data.search(regex); if (pos >= 0 && node.data.length > 0) { var match = node.data.match(regex); var spannode = document.createElement('span'); spannode.className = 'highlight'; var middlebit = node.splitText(pos); var endbit = middlebit.splitText(match[0].length); var middleclone = middlebit.cloneNode(true); spannode.appendChild(middleclone); middlebit.parentNode.replaceChild(spannode, middlebit); skip = 1; } } // Recurse element node, looking for child text nodes to highlight, unless element // is childless,