rt-5.0.1/0000755000201500020150000000000014002071474010615 5ustar puckpuckrt-5.0.1/devel/0000755000201500020150000000000014002071474011714 5ustar puckpuckrt-5.0.1/devel/third-party/0000755000201500020150000000000014011701017014154 5ustar puckpuckrt-5.0.1/devel/third-party/d3/0000755000201500020150000000000014005022167014467 5ustar puckpuckrt-5.0.1/devel/third-party/d3/LICENSE0000644000201500020150000000270314002071405015472 0ustar puckpuckCopyright 2010-2017 Mike Bostock All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. rt-5.0.1/devel/third-party/d3/d3.js0000644000201500020150000175520514002071405015346 0ustar puckpuck// https://d3js.org v5.15.1 Copyright 2020 Mike Bostock (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = global || self, factory(global.d3 = global.d3 || {})); }(this, function (exports) { 'use strict'; var version = "5.15.1"; function ascending(a, b) { return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; } function bisector(compare) { if (compare.length === 1) compare = ascendingComparator(compare); return { left: function(a, x, lo, hi) { if (lo == null) lo = 0; if (hi == null) hi = a.length; while (lo < hi) { var mid = lo + hi >>> 1; if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid; } return lo; }, right: function(a, x, lo, hi) { if (lo == null) lo = 0; if (hi == null) hi = a.length; while (lo < hi) { var mid = lo + hi >>> 1; if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1; } return lo; } }; } function ascendingComparator(f) { return function(d, x) { return ascending(f(d), x); }; } var ascendingBisect = bisector(ascending); var bisectRight = ascendingBisect.right; var bisectLeft = ascendingBisect.left; function pairs(array, f) { if (f == null) f = pair; var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n); while (i < n) pairs[i] = f(p, p = array[++i]); return pairs; } function pair(a, b) { return [a, b]; } function cross(values0, values1, reduce) { var n0 = values0.length, n1 = values1.length, values = new Array(n0 * n1), i0, i1, i, value0; if (reduce == null) reduce = pair; for (i0 = i = 0; i0 < n0; ++i0) { for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) { values[i] = reduce(value0, values1[i1]); } } return values; } function descending(a, b) { return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; } function number(x) { return x === null ? NaN : +x; } function variance(values, valueof) { var n = values.length, m = 0, i = -1, mean = 0, value, delta, sum = 0; if (valueof == null) { while (++i < n) { if (!isNaN(value = number(values[i]))) { delta = value - mean; mean += delta / ++m; sum += delta * (value - mean); } } } else { while (++i < n) { if (!isNaN(value = number(valueof(values[i], i, values)))) { delta = value - mean; mean += delta / ++m; sum += delta * (value - mean); } } } if (m > 1) return sum / (m - 1); } function deviation(array, f) { var v = variance(array, f); return v ? Math.sqrt(v) : v; } function extent(values, valueof) { var n = values.length, i = -1, value, min, max; if (valueof == null) { while (++i < n) { // Find the first comparable value. if ((value = values[i]) != null && value >= value) { min = max = value; while (++i < n) { // Compare the remaining values. if ((value = values[i]) != null) { if (min > value) min = value; if (max < value) max = value; } } } } } else { while (++i < n) { // Find the first comparable value. if ((value = valueof(values[i], i, values)) != null && value >= value) { min = max = value; while (++i < n) { // Compare the remaining values. if ((value = valueof(values[i], i, values)) != null) { if (min > value) min = value; if (max < value) max = value; } } } } } return [min, max]; } var array = Array.prototype; var slice = array.slice; var map = array.map; function constant(x) { return function() { return x; }; } function identity(x) { return x; } function sequence(start, stop, step) { start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; var i = -1, n = Math.max(0, Math.ceil((stop - start) / step)) | 0, range = new Array(n); while (++i < n) { range[i] = start + i * step; } return range; } var e10 = Math.sqrt(50), e5 = Math.sqrt(10), e2 = Math.sqrt(2); function ticks(start, stop, count) { var reverse, i = -1, n, ticks, step; stop = +stop, start = +start, count = +count; if (start === stop && count > 0) return [start]; if (reverse = stop < start) n = start, start = stop, stop = n; if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return []; if (step > 0) { start = Math.ceil(start / step); stop = Math.floor(stop / step); ticks = new Array(n = Math.ceil(stop - start + 1)); while (++i < n) ticks[i] = (start + i) * step; } else { start = Math.floor(start * step); stop = Math.ceil(stop * step); ticks = new Array(n = Math.ceil(start - stop + 1)); while (++i < n) ticks[i] = (start - i) / step; } if (reverse) ticks.reverse(); return ticks; } function tickIncrement(start, stop, count) { var step = (stop - start) / Math.max(0, count), power = Math.floor(Math.log(step) / Math.LN10), error = step / Math.pow(10, power); return power >= 0 ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power) : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1); } function tickStep(start, stop, count) { var step0 = Math.abs(stop - start) / Math.max(0, count), step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), error = step0 / step1; if (error >= e10) step1 *= 10; else if (error >= e5) step1 *= 5; else if (error >= e2) step1 *= 2; return stop < start ? -step1 : step1; } function thresholdSturges(values) { return Math.ceil(Math.log(values.length) / Math.LN2) + 1; } function histogram() { var value = identity, domain = extent, threshold = thresholdSturges; function histogram(data) { var i, n = data.length, x, values = new Array(n); for (i = 0; i < n; ++i) { values[i] = value(data[i], i, data); } var xz = domain(values), x0 = xz[0], x1 = xz[1], tz = threshold(values, x0, x1); // Convert number of thresholds into uniform thresholds. if (!Array.isArray(tz)) { tz = tickStep(x0, x1, tz); tz = sequence(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive } // Remove any thresholds outside the domain. var m = tz.length; while (tz[0] <= x0) tz.shift(), --m; while (tz[m - 1] > x1) tz.pop(), --m; var bins = new Array(m + 1), bin; // Initialize bins. for (i = 0; i <= m; ++i) { bin = bins[i] = []; bin.x0 = i > 0 ? tz[i - 1] : x0; bin.x1 = i < m ? tz[i] : x1; } // Assign data to bins by value, ignoring any outside the domain. for (i = 0; i < n; ++i) { x = values[i]; if (x0 <= x && x <= x1) { bins[bisectRight(tz, x, 0, m)].push(data[i]); } } return bins; } histogram.value = function(_) { return arguments.length ? (value = typeof _ === "function" ? _ : constant(_), histogram) : value; }; histogram.domain = function(_) { return arguments.length ? (domain = typeof _ === "function" ? _ : constant([_[0], _[1]]), histogram) : domain; }; histogram.thresholds = function(_) { return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold; }; return histogram; } function threshold(values, p, valueof) { if (valueof == null) valueof = number; if (!(n = values.length)) return; if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values); if (p >= 1) return +valueof(values[n - 1], n - 1, values); var n, i = (n - 1) * p, i0 = Math.floor(i), value0 = +valueof(values[i0], i0, values), value1 = +valueof(values[i0 + 1], i0 + 1, values); return value0 + (value1 - value0) * (i - i0); } function freedmanDiaconis(values, min, max) { values = map.call(values, number).sort(ascending); return Math.ceil((max - min) / (2 * (threshold(values, 0.75) - threshold(values, 0.25)) * Math.pow(values.length, -1 / 3))); } function scott(values, min, max) { return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3))); } function max(values, valueof) { var n = values.length, i = -1, value, max; if (valueof == null) { while (++i < n) { // Find the first comparable value. if ((value = values[i]) != null && value >= value) { max = value; while (++i < n) { // Compare the remaining values. if ((value = values[i]) != null && value > max) { max = value; } } } } } else { while (++i < n) { // Find the first comparable value. if ((value = valueof(values[i], i, values)) != null && value >= value) { max = value; while (++i < n) { // Compare the remaining values. if ((value = valueof(values[i], i, values)) != null && value > max) { max = value; } } } } } return max; } function mean(values, valueof) { var n = values.length, m = n, i = -1, value, sum = 0; if (valueof == null) { while (++i < n) { if (!isNaN(value = number(values[i]))) sum += value; else --m; } } else { while (++i < n) { if (!isNaN(value = number(valueof(values[i], i, values)))) sum += value; else --m; } } if (m) return sum / m; } function median(values, valueof) { var n = values.length, i = -1, value, numbers = []; if (valueof == null) { while (++i < n) { if (!isNaN(value = number(values[i]))) { numbers.push(value); } } } else { while (++i < n) { if (!isNaN(value = number(valueof(values[i], i, values)))) { numbers.push(value); } } } return threshold(numbers.sort(ascending), 0.5); } function merge(arrays) { var n = arrays.length, m, i = -1, j = 0, merged, array; while (++i < n) j += arrays[i].length; merged = new Array(j); while (--n >= 0) { array = arrays[n]; m = array.length; while (--m >= 0) { merged[--j] = array[m]; } } return merged; } function min(values, valueof) { var n = values.length, i = -1, value, min; if (valueof == null) { while (++i < n) { // Find the first comparable value. if ((value = values[i]) != null && value >= value) { min = value; while (++i < n) { // Compare the remaining values. if ((value = values[i]) != null && min > value) { min = value; } } } } } else { while (++i < n) { // Find the first comparable value. if ((value = valueof(values[i], i, values)) != null && value >= value) { min = value; while (++i < n) { // Compare the remaining values. if ((value = valueof(values[i], i, values)) != null && min > value) { min = value; } } } } } return min; } function permute(array, indexes) { var i = indexes.length, permutes = new Array(i); while (i--) permutes[i] = array[indexes[i]]; return permutes; } function scan(values, compare) { if (!(n = values.length)) return; var n, i = 0, j = 0, xi, xj = values[j]; if (compare == null) compare = ascending; while (++i < n) { if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) { xj = xi, j = i; } } if (compare(xj, xj) === 0) return j; } function shuffle(array, i0, i1) { var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0), t, i; while (m) { i = Math.random() * m-- | 0; t = array[m + i0]; array[m + i0] = array[i + i0]; array[i + i0] = t; } return array; } function sum(values, valueof) { var n = values.length, i = -1, value, sum = 0; if (valueof == null) { while (++i < n) { if (value = +values[i]) sum += value; // Note: zero and null are equivalent. } } else { while (++i < n) { if (value = +valueof(values[i], i, values)) sum += value; } } return sum; } function transpose(matrix) { if (!(n = matrix.length)) return []; for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) { for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) { row[j] = matrix[j][i]; } } return transpose; } function length(d) { return d.length; } function zip() { return transpose(arguments); } var slice$1 = Array.prototype.slice; function identity$1(x) { return x; } var top = 1, right = 2, bottom = 3, left = 4, epsilon = 1e-6; function translateX(x) { return "translate(" + (x + 0.5) + ",0)"; } function translateY(y) { return "translate(0," + (y + 0.5) + ")"; } function number$1(scale) { return function(d) { return +scale(d); }; } function center(scale) { var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset. if (scale.round()) offset = Math.round(offset); return function(d) { return +scale(d) + offset; }; } function entering() { return !this.__axis; } function axis(orient, scale) { var tickArguments = [], tickValues = null, tickFormat = null, tickSizeInner = 6, tickSizeOuter = 6, tickPadding = 3, k = orient === top || orient === left ? -1 : 1, x = orient === left || orient === right ? "x" : "y", transform = orient === top || orient === bottom ? translateX : translateY; function axis(context) { var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues, format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$1) : tickFormat, spacing = Math.max(tickSizeInner, 0) + tickPadding, range = scale.range(), range0 = +range[0] + 0.5, range1 = +range[range.length - 1] + 0.5, position = (scale.bandwidth ? center : number$1)(scale.copy()), selection = context.selection ? context.selection() : context, path = selection.selectAll(".domain").data([null]), tick = selection.selectAll(".tick").data(values, scale).order(), tickExit = tick.exit(), tickEnter = tick.enter().append("g").attr("class", "tick"), line = tick.select("line"), text = tick.select("text"); path = path.merge(path.enter().insert("path", ".tick") .attr("class", "domain") .attr("stroke", "currentColor")); tick = tick.merge(tickEnter); line = line.merge(tickEnter.append("line") .attr("stroke", "currentColor") .attr(x + "2", k * tickSizeInner)); text = text.merge(tickEnter.append("text") .attr("fill", "currentColor") .attr(x, k * spacing) .attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em")); if (context !== selection) { path = path.transition(context); tick = tick.transition(context); line = line.transition(context); text = text.transition(context); tickExit = tickExit.transition(context) .attr("opacity", epsilon) .attr("transform", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute("transform"); }); tickEnter .attr("opacity", epsilon) .attr("transform", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); }); } tickExit.remove(); path .attr("d", orient === left || orient == right ? (tickSizeOuter ? "M" + k * tickSizeOuter + "," + range0 + "H0.5V" + range1 + "H" + k * tickSizeOuter : "M0.5," + range0 + "V" + range1) : (tickSizeOuter ? "M" + range0 + "," + k * tickSizeOuter + "V0.5H" + range1 + "V" + k * tickSizeOuter : "M" + range0 + ",0.5H" + range1)); tick .attr("opacity", 1) .attr("transform", function(d) { return transform(position(d)); }); line .attr(x + "2", k * tickSizeInner); text .attr(x, k * spacing) .text(format); selection.filter(entering) .attr("fill", "none") .attr("font-size", 10) .attr("font-family", "sans-serif") .attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle"); selection .each(function() { this.__axis = position; }); } axis.scale = function(_) { return arguments.length ? (scale = _, axis) : scale; }; axis.ticks = function() { return tickArguments = slice$1.call(arguments), axis; }; axis.tickArguments = function(_) { return arguments.length ? (tickArguments = _ == null ? [] : slice$1.call(_), axis) : tickArguments.slice(); }; axis.tickValues = function(_) { return arguments.length ? (tickValues = _ == null ? null : slice$1.call(_), axis) : tickValues && tickValues.slice(); }; axis.tickFormat = function(_) { return arguments.length ? (tickFormat = _, axis) : tickFormat; }; axis.tickSize = function(_) { return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner; }; axis.tickSizeInner = function(_) { return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner; }; axis.tickSizeOuter = function(_) { return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter; }; axis.tickPadding = function(_) { return arguments.length ? (tickPadding = +_, axis) : tickPadding; }; return axis; } function axisTop(scale) { return axis(top, scale); } function axisRight(scale) { return axis(right, scale); } function axisBottom(scale) { return axis(bottom, scale); } function axisLeft(scale) { return axis(left, scale); } var noop = {value: function() {}}; function dispatch() { for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) { if (!(t = arguments[i] + "") || (t in _) || /[\s.]/.test(t)) throw new Error("illegal type: " + t); _[t] = []; } return new Dispatch(_); } function Dispatch(_) { this._ = _; } function parseTypenames(typenames, types) { return typenames.trim().split(/^|\s+/).map(function(t) { var name = "", i = t.indexOf("."); if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t); return {type: t, name: name}; }); } Dispatch.prototype = dispatch.prototype = { constructor: Dispatch, on: function(typename, callback) { var _ = this._, T = parseTypenames(typename + "", _), t, i = -1, n = T.length; // If no callback was specified, return the callback of the given type and name. if (arguments.length < 2) { while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t; return; } // If a type was specified, set the callback for the given type and name. // Otherwise, if a null callback was specified, remove callbacks of the given name. if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback); while (++i < n) { if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback); else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null); } return this; }, copy: function() { var copy = {}, _ = this._; for (var t in _) copy[t] = _[t].slice(); return new Dispatch(copy); }, call: function(type, that) { if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2]; if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); }, apply: function(type, that, args) { if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); } }; function get(type, name) { for (var i = 0, n = type.length, c; i < n; ++i) { if ((c = type[i]).name === name) { return c.value; } } } function set(type, name, callback) { for (var i = 0, n = type.length; i < n; ++i) { if (type[i].name === name) { type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1)); break; } } if (callback != null) type.push({name: name, value: callback}); return type; } var xhtml = "http://www.w3.org/1999/xhtml"; var namespaces = { svg: "http://www.w3.org/2000/svg", xhtml: xhtml, xlink: "http://www.w3.org/1999/xlink", xml: "http://www.w3.org/XML/1998/namespace", xmlns: "http://www.w3.org/2000/xmlns/" }; function namespace(name) { var prefix = name += "", i = prefix.indexOf(":"); if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1); return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; } function creatorInherit(name) { return function() { var document = this.ownerDocument, uri = this.namespaceURI; return uri === xhtml && document.documentElement.namespaceURI === xhtml ? document.createElement(name) : document.createElementNS(uri, name); }; } function creatorFixed(fullname) { return function() { return this.ownerDocument.createElementNS(fullname.space, fullname.local); }; } function creator(name) { var fullname = namespace(name); return (fullname.local ? creatorFixed : creatorInherit)(fullname); } function none() {} function selector(selector) { return selector == null ? none : function() { return this.querySelector(selector); }; } function selection_select(select) { if (typeof select !== "function") select = selector(select); for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { if ("__data__" in node) subnode.__data__ = node.__data__; subgroup[i] = subnode; } } } return new Selection(subgroups, this._parents); } function empty() { return []; } function selectorAll(selector) { return selector == null ? empty : function() { return this.querySelectorAll(selector); }; } function selection_selectAll(select) { if (typeof select !== "function") select = selectorAll(select); for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { if (node = group[i]) { subgroups.push(select.call(node, node.__data__, i, group)); parents.push(node); } } } return new Selection(subgroups, parents); } function matcher(selector) { return function() { return this.matches(selector); }; } function selection_filter(match) { if (typeof match !== "function") match = matcher(match); for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { if ((node = group[i]) && match.call(node, node.__data__, i, group)) { subgroup.push(node); } } } return new Selection(subgroups, this._parents); } function sparse(update) { return new Array(update.length); } function selection_enter() { return new Selection(this._enter || this._groups.map(sparse), this._parents); } function EnterNode(parent, datum) { this.ownerDocument = parent.ownerDocument; this.namespaceURI = parent.namespaceURI; this._next = null; this._parent = parent; this.__data__ = datum; } EnterNode.prototype = { constructor: EnterNode, appendChild: function(child) { return this._parent.insertBefore(child, this._next); }, insertBefore: function(child, next) { return this._parent.insertBefore(child, next); }, querySelector: function(selector) { return this._parent.querySelector(selector); }, querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); } }; function constant$1(x) { return function() { return x; }; } var keyPrefix = "$"; // Protect against keys like “__proto__”. function bindIndex(parent, group, enter, update, exit, data) { var i = 0, node, groupLength = group.length, dataLength = data.length; // Put any non-null nodes that fit into update. // Put any null nodes into enter. // Put any remaining data into enter. for (; i < dataLength; ++i) { if (node = group[i]) { node.__data__ = data[i]; update[i] = node; } else { enter[i] = new EnterNode(parent, data[i]); } } // Put any non-null nodes that don’t fit into exit. for (; i < groupLength; ++i) { if (node = group[i]) { exit[i] = node; } } } function bindKey(parent, group, enter, update, exit, data, key) { var i, node, nodeByKeyValue = {}, groupLength = group.length, dataLength = data.length, keyValues = new Array(groupLength), keyValue; // Compute the key for each node. // If multiple nodes have the same key, the duplicates are added to exit. for (i = 0; i < groupLength; ++i) { if (node = group[i]) { keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group); if (keyValue in nodeByKeyValue) { exit[i] = node; } else { nodeByKeyValue[keyValue] = node; } } } // Compute the key for each datum. // If there a node associated with this key, join and add it to update. // If there is not (or the key is a duplicate), add it to enter. for (i = 0; i < dataLength; ++i) { keyValue = keyPrefix + key.call(parent, data[i], i, data); if (node = nodeByKeyValue[keyValue]) { update[i] = node; node.__data__ = data[i]; nodeByKeyValue[keyValue] = null; } else { enter[i] = new EnterNode(parent, data[i]); } } // Add any remaining nodes that were not bound to data to exit. for (i = 0; i < groupLength; ++i) { if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) { exit[i] = node; } } } function selection_data(value, key) { if (!value) { data = new Array(this.size()), j = -1; this.each(function(d) { data[++j] = d; }); return data; } var bind = key ? bindKey : bindIndex, parents = this._parents, groups = this._groups; if (typeof value !== "function") value = constant$1(value); for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) { var parent = parents[j], group = groups[j], groupLength = group.length, data = value.call(parent, parent && parent.__data__, j, parents), dataLength = data.length, enterGroup = enter[j] = new Array(dataLength), updateGroup = update[j] = new Array(dataLength), exitGroup = exit[j] = new Array(groupLength); bind(parent, group, enterGroup, updateGroup, exitGroup, data, key); // Now connect the enter nodes to their following update node, such that // appendChild can insert the materialized enter node before this node, // rather than at the end of the parent node. for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) { if (previous = enterGroup[i0]) { if (i0 >= i1) i1 = i0 + 1; while (!(next = updateGroup[i1]) && ++i1 < dataLength); previous._next = next || null; } } } update = new Selection(update, parents); update._enter = enter; update._exit = exit; return update; } function selection_exit() { return new Selection(this._exit || this._groups.map(sparse), this._parents); } function selection_join(onenter, onupdate, onexit) { var enter = this.enter(), update = this, exit = this.exit(); enter = typeof onenter === "function" ? onenter(enter) : enter.append(onenter + ""); if (onupdate != null) update = onupdate(update); if (onexit == null) exit.remove(); else onexit(exit); return enter && update ? enter.merge(update).order() : update; } function selection_merge(selection) { for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { if (node = group0[i] || group1[i]) { merge[i] = node; } } } for (; j < m0; ++j) { merges[j] = groups0[j]; } return new Selection(merges, this._parents); } function selection_order() { for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) { for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) { if (node = group[i]) { if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next); next = node; } } } return this; } function selection_sort(compare) { if (!compare) compare = ascending$1; function compareNode(a, b) { return a && b ? compare(a.__data__, b.__data__) : !a - !b; } for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) { for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) { if (node = group[i]) { sortgroup[i] = node; } } sortgroup.sort(compareNode); } return new Selection(sortgroups, this._parents).order(); } function ascending$1(a, b) { return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; } function selection_call() { var callback = arguments[0]; arguments[0] = this; callback.apply(null, arguments); return this; } function selection_nodes() { var nodes = new Array(this.size()), i = -1; this.each(function() { nodes[++i] = this; }); return nodes; } function selection_node() { for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { for (var group = groups[j], i = 0, n = group.length; i < n; ++i) { var node = group[i]; if (node) return node; } } return null; } function selection_size() { var size = 0; this.each(function() { ++size; }); return size; } function selection_empty() { return !this.node(); } function selection_each(callback) { for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) { if (node = group[i]) callback.call(node, node.__data__, i, group); } } return this; } function attrRemove(name) { return function() { this.removeAttribute(name); }; } function attrRemoveNS(fullname) { return function() { this.removeAttributeNS(fullname.space, fullname.local); }; } function attrConstant(name, value) { return function() { this.setAttribute(name, value); }; } function attrConstantNS(fullname, value) { return function() { this.setAttributeNS(fullname.space, fullname.local, value); }; } function attrFunction(name, value) { return function() { var v = value.apply(this, arguments); if (v == null) this.removeAttribute(name); else this.setAttribute(name, v); }; } function attrFunctionNS(fullname, value) { return function() { var v = value.apply(this, arguments); if (v == null) this.removeAttributeNS(fullname.space, fullname.local); else this.setAttributeNS(fullname.space, fullname.local, v); }; } function selection_attr(name, value) { var fullname = namespace(name); if (arguments.length < 2) { var node = this.node(); return fullname.local ? node.getAttributeNS(fullname.space, fullname.local) : node.getAttribute(fullname); } return this.each((value == null ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function" ? (fullname.local ? attrFunctionNS : attrFunction) : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value)); } function defaultView(node) { return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node || (node.document && node) // node is a Window || node.defaultView; // node is a Document } function styleRemove(name) { return function() { this.style.removeProperty(name); }; } function styleConstant(name, value, priority) { return function() { this.style.setProperty(name, value, priority); }; } function styleFunction(name, value, priority) { return function() { var v = value.apply(this, arguments); if (v == null) this.style.removeProperty(name); else this.style.setProperty(name, v, priority); }; } function selection_style(name, value, priority) { return arguments.length > 1 ? this.each((value == null ? styleRemove : typeof value === "function" ? styleFunction : styleConstant)(name, value, priority == null ? "" : priority)) : styleValue(this.node(), name); } function styleValue(node, name) { return node.style.getPropertyValue(name) || defaultView(node).getComputedStyle(node, null).getPropertyValue(name); } function propertyRemove(name) { return function() { delete this[name]; }; } function propertyConstant(name, value) { return function() { this[name] = value; }; } function propertyFunction(name, value) { return function() { var v = value.apply(this, arguments); if (v == null) delete this[name]; else this[name] = v; }; } function selection_property(name, value) { return arguments.length > 1 ? this.each((value == null ? propertyRemove : typeof value === "function" ? propertyFunction : propertyConstant)(name, value)) : this.node()[name]; } function classArray(string) { return string.trim().split(/^|\s+/); } function classList(node) { return node.classList || new ClassList(node); } function ClassList(node) { this._node = node; this._names = classArray(node.getAttribute("class") || ""); } ClassList.prototype = { add: function(name) { var i = this._names.indexOf(name); if (i < 0) { this._names.push(name); this._node.setAttribute("class", this._names.join(" ")); } }, remove: function(name) { var i = this._names.indexOf(name); if (i >= 0) { this._names.splice(i, 1); this._node.setAttribute("class", this._names.join(" ")); } }, contains: function(name) { return this._names.indexOf(name) >= 0; } }; function classedAdd(node, names) { var list = classList(node), i = -1, n = names.length; while (++i < n) list.add(names[i]); } function classedRemove(node, names) { var list = classList(node), i = -1, n = names.length; while (++i < n) list.remove(names[i]); } function classedTrue(names) { return function() { classedAdd(this, names); }; } function classedFalse(names) { return function() { classedRemove(this, names); }; } function classedFunction(names, value) { return function() { (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names); }; } function selection_classed(name, value) { var names = classArray(name + ""); if (arguments.length < 2) { var list = classList(this.node()), i = -1, n = names.length; while (++i < n) if (!list.contains(names[i])) return false; return true; } return this.each((typeof value === "function" ? classedFunction : value ? classedTrue : classedFalse)(names, value)); } function textRemove() { this.textContent = ""; } function textConstant(value) { return function() { this.textContent = value; }; } function textFunction(value) { return function() { var v = value.apply(this, arguments); this.textContent = v == null ? "" : v; }; } function selection_text(value) { return arguments.length ? this.each(value == null ? textRemove : (typeof value === "function" ? textFunction : textConstant)(value)) : this.node().textContent; } function htmlRemove() { this.innerHTML = ""; } function htmlConstant(value) { return function() { this.innerHTML = value; }; } function htmlFunction(value) { return function() { var v = value.apply(this, arguments); this.innerHTML = v == null ? "" : v; }; } function selection_html(value) { return arguments.length ? this.each(value == null ? htmlRemove : (typeof value === "function" ? htmlFunction : htmlConstant)(value)) : this.node().innerHTML; } function raise() { if (this.nextSibling) this.parentNode.appendChild(this); } function selection_raise() { return this.each(raise); } function lower() { if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild); } function selection_lower() { return this.each(lower); } function selection_append(name) { var create = typeof name === "function" ? name : creator(name); return this.select(function() { return this.appendChild(create.apply(this, arguments)); }); } function constantNull() { return null; } function selection_insert(name, before) { var create = typeof name === "function" ? name : creator(name), select = before == null ? constantNull : typeof before === "function" ? before : selector(before); return this.select(function() { return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null); }); } function remove() { var parent = this.parentNode; if (parent) parent.removeChild(this); } function selection_remove() { return this.each(remove); } function selection_cloneShallow() { var clone = this.cloneNode(false), parent = this.parentNode; return parent ? parent.insertBefore(clone, this.nextSibling) : clone; } function selection_cloneDeep() { var clone = this.cloneNode(true), parent = this.parentNode; return parent ? parent.insertBefore(clone, this.nextSibling) : clone; } function selection_clone(deep) { return this.select(deep ? selection_cloneDeep : selection_cloneShallow); } function selection_datum(value) { return arguments.length ? this.property("__data__", value) : this.node().__data__; } var filterEvents = {}; exports.event = null; if (typeof document !== "undefined") { var element = document.documentElement; if (!("onmouseenter" in element)) { filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"}; } } function filterContextListener(listener, index, group) { listener = contextListener(listener, index, group); return function(event) { var related = event.relatedTarget; if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) { listener.call(this, event); } }; } function contextListener(listener, index, group) { return function(event1) { var event0 = exports.event; // Events can be reentrant (e.g., focus). exports.event = event1; try { listener.call(this, this.__data__, index, group); } finally { exports.event = event0; } }; } function parseTypenames$1(typenames) { return typenames.trim().split(/^|\s+/).map(function(t) { var name = "", i = t.indexOf("."); if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); return {type: t, name: name}; }); } function onRemove(typename) { return function() { var on = this.__on; if (!on) return; for (var j = 0, i = -1, m = on.length, o; j < m; ++j) { if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) { this.removeEventListener(o.type, o.listener, o.capture); } else { on[++i] = o; } } if (++i) on.length = i; else delete this.__on; }; } function onAdd(typename, value, capture) { var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener; return function(d, i, group) { var on = this.__on, o, listener = wrap(value, i, group); if (on) for (var j = 0, m = on.length; j < m; ++j) { if ((o = on[j]).type === typename.type && o.name === typename.name) { this.removeEventListener(o.type, o.listener, o.capture); this.addEventListener(o.type, o.listener = listener, o.capture = capture); o.value = value; return; } } this.addEventListener(typename.type, listener, capture); o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture}; if (!on) this.__on = [o]; else on.push(o); }; } function selection_on(typename, value, capture) { var typenames = parseTypenames$1(typename + ""), i, n = typenames.length, t; if (arguments.length < 2) { var on = this.node().__on; if (on) for (var j = 0, m = on.length, o; j < m; ++j) { for (i = 0, o = on[j]; i < n; ++i) { if ((t = typenames[i]).type === o.type && t.name === o.name) { return o.value; } } } return; } on = value ? onAdd : onRemove; if (capture == null) capture = false; for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture)); return this; } function customEvent(event1, listener, that, args) { var event0 = exports.event; event1.sourceEvent = exports.event; exports.event = event1; try { return listener.apply(that, args); } finally { exports.event = event0; } } function dispatchEvent(node, type, params) { var window = defaultView(node), event = window.CustomEvent; if (typeof event === "function") { event = new event(type, params); } else { event = window.document.createEvent("Event"); if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail; else event.initEvent(type, false, false); } node.dispatchEvent(event); } function dispatchConstant(type, params) { return function() { return dispatchEvent(this, type, params); }; } function dispatchFunction(type, params) { return function() { return dispatchEvent(this, type, params.apply(this, arguments)); }; } function selection_dispatch(type, params) { return this.each((typeof params === "function" ? dispatchFunction : dispatchConstant)(type, params)); } var root = [null]; function Selection(groups, parents) { this._groups = groups; this._parents = parents; } function selection() { return new Selection([[document.documentElement]], root); } Selection.prototype = selection.prototype = { constructor: Selection, select: selection_select, selectAll: selection_selectAll, filter: selection_filter, data: selection_data, enter: selection_enter, exit: selection_exit, join: selection_join, merge: selection_merge, order: selection_order, sort: selection_sort, call: selection_call, nodes: selection_nodes, node: selection_node, size: selection_size, empty: selection_empty, each: selection_each, attr: selection_attr, style: selection_style, property: selection_property, classed: selection_classed, text: selection_text, html: selection_html, raise: selection_raise, lower: selection_lower, append: selection_append, insert: selection_insert, remove: selection_remove, clone: selection_clone, datum: selection_datum, on: selection_on, dispatch: selection_dispatch }; function select(selector) { return typeof selector === "string" ? new Selection([[document.querySelector(selector)]], [document.documentElement]) : new Selection([[selector]], root); } function create(name) { return select(creator(name).call(document.documentElement)); } var nextId = 0; function local() { return new Local; } function Local() { this._ = "@" + (++nextId).toString(36); } Local.prototype = local.prototype = { constructor: Local, get: function(node) { var id = this._; while (!(id in node)) if (!(node = node.parentNode)) return; return node[id]; }, set: function(node, value) { return node[this._] = value; }, remove: function(node) { return this._ in node && delete node[this._]; }, toString: function() { return this._; } }; function sourceEvent() { var current = exports.event, source; while (source = current.sourceEvent) current = source; return current; } function point(node, event) { var svg = node.ownerSVGElement || node; if (svg.createSVGPoint) { var point = svg.createSVGPoint(); point.x = event.clientX, point.y = event.clientY; point = point.matrixTransform(node.getScreenCTM().inverse()); return [point.x, point.y]; } var rect = node.getBoundingClientRect(); return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop]; } function mouse(node) { var event = sourceEvent(); if (event.changedTouches) event = event.changedTouches[0]; return point(node, event); } function selectAll(selector) { return typeof selector === "string" ? new Selection([document.querySelectorAll(selector)], [document.documentElement]) : new Selection([selector == null ? [] : selector], root); } function touch(node, touches, identifier) { if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches; for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) { if ((touch = touches[i]).identifier === identifier) { return point(node, touch); } } return null; } function touches(node, touches) { if (touches == null) touches = sourceEvent().touches; for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) { points[i] = point(node, touches[i]); } return points; } function nopropagation() { exports.event.stopImmediatePropagation(); } function noevent() { exports.event.preventDefault(); exports.event.stopImmediatePropagation(); } function dragDisable(view) { var root = view.document.documentElement, selection = select(view).on("dragstart.drag", noevent, true); if ("onselectstart" in root) { selection.on("selectstart.drag", noevent, true); } else { root.__noselect = root.style.MozUserSelect; root.style.MozUserSelect = "none"; } } function yesdrag(view, noclick) { var root = view.document.documentElement, selection = select(view).on("dragstart.drag", null); if (noclick) { selection.on("click.drag", noevent, true); setTimeout(function() { selection.on("click.drag", null); }, 0); } if ("onselectstart" in root) { selection.on("selectstart.drag", null); } else { root.style.MozUserSelect = root.__noselect; delete root.__noselect; } } function constant$2(x) { return function() { return x; }; } function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) { this.target = target; this.type = type; this.subject = subject; this.identifier = id; this.active = active; this.x = x; this.y = y; this.dx = dx; this.dy = dy; this._ = dispatch; } DragEvent.prototype.on = function() { var value = this._.on.apply(this._, arguments); return value === this._ ? this : value; }; // Ignore right-click, since that should open the context menu. function defaultFilter() { return !exports.event.ctrlKey && !exports.event.button; } function defaultContainer() { return this.parentNode; } function defaultSubject(d) { return d == null ? {x: exports.event.x, y: exports.event.y} : d; } function defaultTouchable() { return navigator.maxTouchPoints || ("ontouchstart" in this); } function drag() { var filter = defaultFilter, container = defaultContainer, subject = defaultSubject, touchable = defaultTouchable, gestures = {}, listeners = dispatch("start", "drag", "end"), active = 0, mousedownx, mousedowny, mousemoving, touchending, clickDistance2 = 0; function drag(selection) { selection .on("mousedown.drag", mousedowned) .filter(touchable) .on("touchstart.drag", touchstarted) .on("touchmove.drag", touchmoved) .on("touchend.drag touchcancel.drag", touchended) .style("touch-action", "none") .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); } function mousedowned() { if (touchending || !filter.apply(this, arguments)) return; var gesture = beforestart("mouse", container.apply(this, arguments), mouse, this, arguments); if (!gesture) return; select(exports.event.view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true); dragDisable(exports.event.view); nopropagation(); mousemoving = false; mousedownx = exports.event.clientX; mousedowny = exports.event.clientY; gesture("start"); } function mousemoved() { noevent(); if (!mousemoving) { var dx = exports.event.clientX - mousedownx, dy = exports.event.clientY - mousedowny; mousemoving = dx * dx + dy * dy > clickDistance2; } gestures.mouse("drag"); } function mouseupped() { select(exports.event.view).on("mousemove.drag mouseup.drag", null); yesdrag(exports.event.view, mousemoving); noevent(); gestures.mouse("end"); } function touchstarted() { if (!filter.apply(this, arguments)) return; var touches = exports.event.changedTouches, c = container.apply(this, arguments), n = touches.length, i, gesture; for (i = 0; i < n; ++i) { if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) { nopropagation(); gesture("start"); } } } function touchmoved() { var touches = exports.event.changedTouches, n = touches.length, i, gesture; for (i = 0; i < n; ++i) { if (gesture = gestures[touches[i].identifier]) { noevent(); gesture("drag"); } } } function touchended() { var touches = exports.event.changedTouches, n = touches.length, i, gesture; if (touchending) clearTimeout(touchending); touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed! for (i = 0; i < n; ++i) { if (gesture = gestures[touches[i].identifier]) { nopropagation(); gesture("end"); } } } function beforestart(id, container, point, that, args) { var p = point(container, id), s, dx, dy, sublisteners = listeners.copy(); if (!customEvent(new DragEvent(drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() { if ((exports.event.subject = s = subject.apply(that, args)) == null) return false; dx = s.x - p[0] || 0; dy = s.y - p[1] || 0; return true; })) return; return function gesture(type) { var p0 = p, n; switch (type) { case "start": gestures[id] = gesture, n = active++; break; case "end": delete gestures[id], --active; // nobreak case "drag": p = point(container, id), n = active; break; } customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]); }; } drag.filter = function(_) { return arguments.length ? (filter = typeof _ === "function" ? _ : constant$2(!!_), drag) : filter; }; drag.container = function(_) { return arguments.length ? (container = typeof _ === "function" ? _ : constant$2(_), drag) : container; }; drag.subject = function(_) { return arguments.length ? (subject = typeof _ === "function" ? _ : constant$2(_), drag) : subject; }; drag.touchable = function(_) { return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$2(!!_), drag) : touchable; }; drag.on = function() { var value = listeners.on.apply(listeners, arguments); return value === listeners ? drag : value; }; drag.clickDistance = function(_) { return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2); }; return drag; } function define(constructor, factory, prototype) { constructor.prototype = factory.prototype = prototype; prototype.constructor = constructor; } function extend(parent, definition) { var prototype = Object.create(parent.prototype); for (var key in definition) prototype[key] = definition[key]; return prototype; } function Color() {} var darker = 0.7; var brighter = 1 / darker; var reI = "\\s*([+-]?\\d+)\\s*", reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*", reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*", reHex = /^#([0-9a-f]{3,8})$/, reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$"), reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$"), reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$"), reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$"), reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$"), reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$"); var named = { aliceblue: 0xf0f8ff, antiquewhite: 0xfaebd7, aqua: 0x00ffff, aquamarine: 0x7fffd4, azure: 0xf0ffff, beige: 0xf5f5dc, bisque: 0xffe4c4, black: 0x000000, blanchedalmond: 0xffebcd, blue: 0x0000ff, blueviolet: 0x8a2be2, brown: 0xa52a2a, burlywood: 0xdeb887, cadetblue: 0x5f9ea0, chartreuse: 0x7fff00, chocolate: 0xd2691e, coral: 0xff7f50, cornflowerblue: 0x6495ed, cornsilk: 0xfff8dc, crimson: 0xdc143c, cyan: 0x00ffff, darkblue: 0x00008b, darkcyan: 0x008b8b, darkgoldenrod: 0xb8860b, darkgray: 0xa9a9a9, darkgreen: 0x006400, darkgrey: 0xa9a9a9, darkkhaki: 0xbdb76b, darkmagenta: 0x8b008b, darkolivegreen: 0x556b2f, darkorange: 0xff8c00, darkorchid: 0x9932cc, darkred: 0x8b0000, darksalmon: 0xe9967a, darkseagreen: 0x8fbc8f, darkslateblue: 0x483d8b, darkslategray: 0x2f4f4f, darkslategrey: 0x2f4f4f, darkturquoise: 0x00ced1, darkviolet: 0x9400d3, deeppink: 0xff1493, deepskyblue: 0x00bfff, dimgray: 0x696969, dimgrey: 0x696969, dodgerblue: 0x1e90ff, firebrick: 0xb22222, floralwhite: 0xfffaf0, forestgreen: 0x228b22, fuchsia: 0xff00ff, gainsboro: 0xdcdcdc, ghostwhite: 0xf8f8ff, gold: 0xffd700, goldenrod: 0xdaa520, gray: 0x808080, green: 0x008000, greenyellow: 0xadff2f, grey: 0x808080, honeydew: 0xf0fff0, hotpink: 0xff69b4, indianred: 0xcd5c5c, indigo: 0x4b0082, ivory: 0xfffff0, khaki: 0xf0e68c, lavender: 0xe6e6fa, lavenderblush: 0xfff0f5, lawngreen: 0x7cfc00, lemonchiffon: 0xfffacd, lightblue: 0xadd8e6, lightcoral: 0xf08080, lightcyan: 0xe0ffff, lightgoldenrodyellow: 0xfafad2, lightgray: 0xd3d3d3, lightgreen: 0x90ee90, lightgrey: 0xd3d3d3, lightpink: 0xffb6c1, lightsalmon: 0xffa07a, lightseagreen: 0x20b2aa, lightskyblue: 0x87cefa, lightslategray: 0x778899, lightslategrey: 0x778899, lightsteelblue: 0xb0c4de, lightyellow: 0xffffe0, lime: 0x00ff00, limegreen: 0x32cd32, linen: 0xfaf0e6, magenta: 0xff00ff, maroon: 0x800000, mediumaquamarine: 0x66cdaa, mediumblue: 0x0000cd, mediumorchid: 0xba55d3, mediumpurple: 0x9370db, mediumseagreen: 0x3cb371, mediumslateblue: 0x7b68ee, mediumspringgreen: 0x00fa9a, mediumturquoise: 0x48d1cc, mediumvioletred: 0xc71585, midnightblue: 0x191970, mintcream: 0xf5fffa, mistyrose: 0xffe4e1, moccasin: 0xffe4b5, navajowhite: 0xffdead, navy: 0x000080, oldlace: 0xfdf5e6, olive: 0x808000, olivedrab: 0x6b8e23, orange: 0xffa500, orangered: 0xff4500, orchid: 0xda70d6, palegoldenrod: 0xeee8aa, palegreen: 0x98fb98, paleturquoise: 0xafeeee, palevioletred: 0xdb7093, papayawhip: 0xffefd5, peachpuff: 0xffdab9, peru: 0xcd853f, pink: 0xffc0cb, plum: 0xdda0dd, powderblue: 0xb0e0e6, purple: 0x800080, rebeccapurple: 0x663399, red: 0xff0000, rosybrown: 0xbc8f8f, royalblue: 0x4169e1, saddlebrown: 0x8b4513, salmon: 0xfa8072, sandybrown: 0xf4a460, seagreen: 0x2e8b57, seashell: 0xfff5ee, sienna: 0xa0522d, silver: 0xc0c0c0, skyblue: 0x87ceeb, slateblue: 0x6a5acd, slategray: 0x708090, slategrey: 0x708090, snow: 0xfffafa, springgreen: 0x00ff7f, steelblue: 0x4682b4, tan: 0xd2b48c, teal: 0x008080, thistle: 0xd8bfd8, tomato: 0xff6347, turquoise: 0x40e0d0, violet: 0xee82ee, wheat: 0xf5deb3, white: 0xffffff, whitesmoke: 0xf5f5f5, yellow: 0xffff00, yellowgreen: 0x9acd32 }; define(Color, color, { copy: function(channels) { return Object.assign(new this.constructor, this, channels); }, displayable: function() { return this.rgb().displayable(); }, hex: color_formatHex, // Deprecated! Use color.formatHex. formatHex: color_formatHex, formatHsl: color_formatHsl, formatRgb: color_formatRgb, toString: color_formatRgb }); function color_formatHex() { return this.rgb().formatHex(); } function color_formatHsl() { return hslConvert(this).formatHsl(); } function color_formatRgb() { return this.rgb().formatRgb(); } function color(format) { var m, l; format = (format + "").trim().toLowerCase(); return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000 : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00 : l === 8 ? new Rgb(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000 : l === 4 ? new Rgb((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000 : null) // invalid hex : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0) : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%) : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1) : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1) : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%) : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1) : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0) : null; } function rgbn(n) { return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1); } function rgba(r, g, b, a) { if (a <= 0) r = g = b = NaN; return new Rgb(r, g, b, a); } function rgbConvert(o) { if (!(o instanceof Color)) o = color(o); if (!o) return new Rgb; o = o.rgb(); return new Rgb(o.r, o.g, o.b, o.opacity); } function rgb(r, g, b, opacity) { return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity); } function Rgb(r, g, b, opacity) { this.r = +r; this.g = +g; this.b = +b; this.opacity = +opacity; } define(Rgb, rgb, extend(Color, { brighter: function(k) { k = k == null ? brighter : Math.pow(brighter, k); return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); }, darker: function(k) { k = k == null ? darker : Math.pow(darker, k); return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); }, rgb: function() { return this; }, displayable: function() { return (-0.5 <= this.r && this.r < 255.5) && (-0.5 <= this.g && this.g < 255.5) && (-0.5 <= this.b && this.b < 255.5) && (0 <= this.opacity && this.opacity <= 1); }, hex: rgb_formatHex, // Deprecated! Use color.formatHex. formatHex: rgb_formatHex, formatRgb: rgb_formatRgb, toString: rgb_formatRgb })); function rgb_formatHex() { return "#" + hex(this.r) + hex(this.g) + hex(this.b); } function rgb_formatRgb() { var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a)); return (a === 1 ? "rgb(" : "rgba(") + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", " + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", " + Math.max(0, Math.min(255, Math.round(this.b) || 0)) + (a === 1 ? ")" : ", " + a + ")"); } function hex(value) { value = Math.max(0, Math.min(255, Math.round(value) || 0)); return (value < 16 ? "0" : "") + value.toString(16); } function hsla(h, s, l, a) { if (a <= 0) h = s = l = NaN; else if (l <= 0 || l >= 1) h = s = NaN; else if (s <= 0) h = NaN; return new Hsl(h, s, l, a); } function hslConvert(o) { if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity); if (!(o instanceof Color)) o = color(o); if (!o) return new Hsl; if (o instanceof Hsl) return o; o = o.rgb(); var r = o.r / 255, g = o.g / 255, b = o.b / 255, min = Math.min(r, g, b), max = Math.max(r, g, b), h = NaN, s = max - min, l = (max + min) / 2; if (s) { if (r === max) h = (g - b) / s + (g < b) * 6; else if (g === max) h = (b - r) / s + 2; else h = (r - g) / s + 4; s /= l < 0.5 ? max + min : 2 - max - min; h *= 60; } else { s = l > 0 && l < 1 ? 0 : h; } return new Hsl(h, s, l, o.opacity); } function hsl(h, s, l, opacity) { return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity); } function Hsl(h, s, l, opacity) { this.h = +h; this.s = +s; this.l = +l; this.opacity = +opacity; } define(Hsl, hsl, extend(Color, { brighter: function(k) { k = k == null ? brighter : Math.pow(brighter, k); return new Hsl(this.h, this.s, this.l * k, this.opacity); }, darker: function(k) { k = k == null ? darker : Math.pow(darker, k); return new Hsl(this.h, this.s, this.l * k, this.opacity); }, rgb: function() { var h = this.h % 360 + (this.h < 0) * 360, s = isNaN(h) || isNaN(this.s) ? 0 : this.s, l = this.l, m2 = l + (l < 0.5 ? l : 1 - l) * s, m1 = 2 * l - m2; return new Rgb( hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), hsl2rgb(h, m1, m2), hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), this.opacity ); }, displayable: function() { return (0 <= this.s && this.s <= 1 || isNaN(this.s)) && (0 <= this.l && this.l <= 1) && (0 <= this.opacity && this.opacity <= 1); }, formatHsl: function() { var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a)); return (a === 1 ? "hsl(" : "hsla(") + (this.h || 0) + ", " + (this.s || 0) * 100 + "%, " + (this.l || 0) * 100 + "%" + (a === 1 ? ")" : ", " + a + ")"); } })); /* From FvD 13.37, CSS Color Module Level 3 */ function hsl2rgb(h, m1, m2) { return (h < 60 ? m1 + (m2 - m1) * h / 60 : h < 180 ? m2 : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60 : m1) * 255; } var deg2rad = Math.PI / 180; var rad2deg = 180 / Math.PI; // https://observablehq.com/@mbostock/lab-and-rgb var K = 18, Xn = 0.96422, Yn = 1, Zn = 0.82521, t0 = 4 / 29, t1 = 6 / 29, t2 = 3 * t1 * t1, t3 = t1 * t1 * t1; function labConvert(o) { if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity); if (o instanceof Hcl) return hcl2lab(o); if (!(o instanceof Rgb)) o = rgbConvert(o); var r = rgb2lrgb(o.r), g = rgb2lrgb(o.g), b = rgb2lrgb(o.b), y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z; if (r === g && g === b) x = z = y; else { x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn); z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn); } return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity); } function gray(l, opacity) { return new Lab(l, 0, 0, opacity == null ? 1 : opacity); } function lab(l, a, b, opacity) { return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity); } function Lab(l, a, b, opacity) { this.l = +l; this.a = +a; this.b = +b; this.opacity = +opacity; } define(Lab, lab, extend(Color, { brighter: function(k) { return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity); }, darker: function(k) { return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity); }, rgb: function() { var y = (this.l + 16) / 116, x = isNaN(this.a) ? y : y + this.a / 500, z = isNaN(this.b) ? y : y - this.b / 200; x = Xn * lab2xyz(x); y = Yn * lab2xyz(y); z = Zn * lab2xyz(z); return new Rgb( lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z), lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z), lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z), this.opacity ); } })); function xyz2lab(t) { return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0; } function lab2xyz(t) { return t > t1 ? t * t * t : t2 * (t - t0); } function lrgb2rgb(x) { return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055); } function rgb2lrgb(x) { return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4); } function hclConvert(o) { if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity); if (!(o instanceof Lab)) o = labConvert(o); if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity); var h = Math.atan2(o.b, o.a) * rad2deg; return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity); } function lch(l, c, h, opacity) { return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity); } function hcl(h, c, l, opacity) { return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity); } function Hcl(h, c, l, opacity) { this.h = +h; this.c = +c; this.l = +l; this.opacity = +opacity; } function hcl2lab(o) { if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity); var h = o.h * deg2rad; return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity); } define(Hcl, hcl, extend(Color, { brighter: function(k) { return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity); }, darker: function(k) { return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity); }, rgb: function() { return hcl2lab(this).rgb(); } })); var A = -0.14861, B = +1.78277, C = -0.29227, D = -0.90649, E = +1.97294, ED = E * D, EB = E * B, BC_DA = B * C - D * A; function cubehelixConvert(o) { if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity); if (!(o instanceof Rgb)) o = rgbConvert(o); var r = o.r / 255, g = o.g / 255, b = o.b / 255, l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB), bl = b - l, k = (E * (g - l) - C * bl) / D, s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1 h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN; return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity); } function cubehelix(h, s, l, opacity) { return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity); } function Cubehelix(h, s, l, opacity) { this.h = +h; this.s = +s; this.l = +l; this.opacity = +opacity; } define(Cubehelix, cubehelix, extend(Color, { brighter: function(k) { k = k == null ? brighter : Math.pow(brighter, k); return new Cubehelix(this.h, this.s, this.l * k, this.opacity); }, darker: function(k) { k = k == null ? darker : Math.pow(darker, k); return new Cubehelix(this.h, this.s, this.l * k, this.opacity); }, rgb: function() { var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad, l = +this.l, a = isNaN(this.s) ? 0 : this.s * l * (1 - l), cosh = Math.cos(h), sinh = Math.sin(h); return new Rgb( 255 * (l + a * (A * cosh + B * sinh)), 255 * (l + a * (C * cosh + D * sinh)), 255 * (l + a * (E * cosh)), this.opacity ); } })); function basis(t1, v0, v1, v2, v3) { var t2 = t1 * t1, t3 = t2 * t1; return ((1 - 3 * t1 + 3 * t2 - t3) * v0 + (4 - 6 * t2 + 3 * t3) * v1 + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2 + t3 * v3) / 6; } function basis$1(values) { var n = values.length - 1; return function(t) { var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n), v1 = values[i], v2 = values[i + 1], v0 = i > 0 ? values[i - 1] : 2 * v1 - v2, v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1; return basis((t - i / n) * n, v0, v1, v2, v3); }; } function basisClosed(values) { var n = values.length; return function(t) { var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n), v0 = values[(i + n - 1) % n], v1 = values[i % n], v2 = values[(i + 1) % n], v3 = values[(i + 2) % n]; return basis((t - i / n) * n, v0, v1, v2, v3); }; } function constant$3(x) { return function() { return x; }; } function linear(a, d) { return function(t) { return a + t * d; }; } function exponential(a, b, y) { return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) { return Math.pow(a + t * b, y); }; } function hue(a, b) { var d = b - a; return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$3(isNaN(a) ? b : a); } function gamma(y) { return (y = +y) === 1 ? nogamma : function(a, b) { return b - a ? exponential(a, b, y) : constant$3(isNaN(a) ? b : a); }; } function nogamma(a, b) { var d = b - a; return d ? linear(a, d) : constant$3(isNaN(a) ? b : a); } var interpolateRgb = (function rgbGamma(y) { var color = gamma(y); function rgb$1(start, end) { var r = color((start = rgb(start)).r, (end = rgb(end)).r), g = color(start.g, end.g), b = color(start.b, end.b), opacity = nogamma(start.opacity, end.opacity); return function(t) { start.r = r(t); start.g = g(t); start.b = b(t); start.opacity = opacity(t); return start + ""; }; } rgb$1.gamma = rgbGamma; return rgb$1; })(1); function rgbSpline(spline) { return function(colors) { var n = colors.length, r = new Array(n), g = new Array(n), b = new Array(n), i, color; for (i = 0; i < n; ++i) { color = rgb(colors[i]); r[i] = color.r || 0; g[i] = color.g || 0; b[i] = color.b || 0; } r = spline(r); g = spline(g); b = spline(b); color.opacity = 1; return function(t) { color.r = r(t); color.g = g(t); color.b = b(t); return color + ""; }; }; } var rgbBasis = rgbSpline(basis$1); var rgbBasisClosed = rgbSpline(basisClosed); function numberArray(a, b) { if (!b) b = []; var n = a ? Math.min(b.length, a.length) : 0, c = b.slice(), i; return function(t) { for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t; return c; }; } function isNumberArray(x) { return ArrayBuffer.isView(x) && !(x instanceof DataView); } function array$1(a, b) { return (isNumberArray(b) ? numberArray : genericArray)(a, b); } function genericArray(a, b) { var nb = b ? b.length : 0, na = a ? Math.min(nb, a.length) : 0, x = new Array(na), c = new Array(nb), i; for (i = 0; i < na; ++i) x[i] = interpolateValue(a[i], b[i]); for (; i < nb; ++i) c[i] = b[i]; return function(t) { for (i = 0; i < na; ++i) c[i] = x[i](t); return c; }; } function date(a, b) { var d = new Date; return a = +a, b = +b, function(t) { return d.setTime(a * (1 - t) + b * t), d; }; } function interpolateNumber(a, b) { return a = +a, b = +b, function(t) { return a * (1 - t) + b * t; }; } function object(a, b) { var i = {}, c = {}, k; if (a === null || typeof a !== "object") a = {}; if (b === null || typeof b !== "object") b = {}; for (k in b) { if (k in a) { i[k] = interpolateValue(a[k], b[k]); } else { c[k] = b[k]; } } return function(t) { for (k in i) c[k] = i[k](t); return c; }; } var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, reB = new RegExp(reA.source, "g"); function zero(b) { return function() { return b; }; } function one(b) { return function(t) { return b(t) + ""; }; } function interpolateString(a, b) { var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b am, // current match in a bm, // current match in b bs, // string preceding current number in b, if any i = -1, // index in s s = [], // string constants and placeholders q = []; // number interpolators // Coerce inputs to strings. a = a + "", b = b + ""; // Interpolate pairs of numbers in a & b. while ((am = reA.exec(a)) && (bm = reB.exec(b))) { if ((bs = bm.index) > bi) { // a string precedes the next number in b bs = b.slice(bi, bs); if (s[i]) s[i] += bs; // coalesce with previous string else s[++i] = bs; } if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match if (s[i]) s[i] += bm; // coalesce with previous string else s[++i] = bm; } else { // interpolate non-matching numbers s[++i] = null; q.push({i: i, x: interpolateNumber(am, bm)}); } bi = reB.lastIndex; } // Add remains of b. if (bi < b.length) { bs = b.slice(bi); if (s[i]) s[i] += bs; // coalesce with previous string else s[++i] = bs; } // Special optimization for only a single match. // Otherwise, interpolate each of the numbers and rejoin the string. return s.length < 2 ? (q[0] ? one(q[0].x) : zero(b)) : (b = q.length, function(t) { for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); return s.join(""); }); } function interpolateValue(a, b) { var t = typeof b, c; return b == null || t === "boolean" ? constant$3(b) : (t === "number" ? interpolateNumber : t === "string" ? ((c = color(b)) ? (b = c, interpolateRgb) : interpolateString) : b instanceof color ? interpolateRgb : b instanceof Date ? date : isNumberArray(b) ? numberArray : Array.isArray(b) ? genericArray : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? object : interpolateNumber)(a, b); } function discrete(range) { var n = range.length; return function(t) { return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))]; }; } function hue$1(a, b) { var i = hue(+a, +b); return function(t) { var x = i(t); return x - 360 * Math.floor(x / 360); }; } function interpolateRound(a, b) { return a = +a, b = +b, function(t) { return Math.round(a * (1 - t) + b * t); }; } var degrees = 180 / Math.PI; var identity$2 = { translateX: 0, translateY: 0, rotate: 0, skewX: 0, scaleX: 1, scaleY: 1 }; function decompose(a, b, c, d, e, f) { var scaleX, scaleY, skewX; if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX; if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX; if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY; if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX; return { translateX: e, translateY: f, rotate: Math.atan2(b, a) * degrees, skewX: Math.atan(skewX) * degrees, scaleX: scaleX, scaleY: scaleY }; } var cssNode, cssRoot, cssView, svgNode; function parseCss(value) { if (value === "none") return identity$2; if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView; cssNode.style.transform = value; value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform"); cssRoot.removeChild(cssNode); value = value.slice(7, -1).split(","); return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]); } function parseSvg(value) { if (value == null) return identity$2; if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g"); svgNode.setAttribute("transform", value); if (!(value = svgNode.transform.baseVal.consolidate())) return identity$2; value = value.matrix; return decompose(value.a, value.b, value.c, value.d, value.e, value.f); } function interpolateTransform(parse, pxComma, pxParen, degParen) { function pop(s) { return s.length ? s.pop() + " " : ""; } function translate(xa, ya, xb, yb, s, q) { if (xa !== xb || ya !== yb) { var i = s.push("translate(", null, pxComma, null, pxParen); q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)}); } else if (xb || yb) { s.push("translate(" + xb + pxComma + yb + pxParen); } } function rotate(a, b, s, q) { if (a !== b) { if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: interpolateNumber(a, b)}); } else if (b) { s.push(pop(s) + "rotate(" + b + degParen); } } function skewX(a, b, s, q) { if (a !== b) { q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: interpolateNumber(a, b)}); } else if (b) { s.push(pop(s) + "skewX(" + b + degParen); } } function scale(xa, ya, xb, yb, s, q) { if (xa !== xb || ya !== yb) { var i = s.push(pop(s) + "scale(", null, ",", null, ")"); q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)}); } else if (xb !== 1 || yb !== 1) { s.push(pop(s) + "scale(" + xb + "," + yb + ")"); } } return function(a, b) { var s = [], // string constants and placeholders q = []; // number interpolators a = parse(a), b = parse(b); translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q); rotate(a.rotate, b.rotate, s, q); skewX(a.skewX, b.skewX, s, q); scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q); a = b = null; // gc return function(t) { var i = -1, n = q.length, o; while (++i < n) s[(o = q[i]).i] = o.x(t); return s.join(""); }; }; } var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)"); var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")"); var rho = Math.SQRT2, rho2 = 2, rho4 = 4, epsilon2 = 1e-12; function cosh(x) { return ((x = Math.exp(x)) + 1 / x) / 2; } function sinh(x) { return ((x = Math.exp(x)) - 1 / x) / 2; } function tanh(x) { return ((x = Math.exp(2 * x)) - 1) / (x + 1); } // p0 = [ux0, uy0, w0] // p1 = [ux1, uy1, w1] function interpolateZoom(p0, p1) { var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2], dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, i, S; // Special case for u0 ≅ u1. if (d2 < epsilon2) { S = Math.log(w1 / w0) / rho; i = function(t) { return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(rho * t * S) ]; }; } // General case. else { var d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1), b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1); S = (r1 - r0) / rho; i = function(t) { var s = t * S, coshr0 = cosh(r0), u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0)); return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / cosh(rho * s + r0) ]; }; } i.duration = S * 1000; return i; } function hsl$1(hue) { return function(start, end) { var h = hue((start = hsl(start)).h, (end = hsl(end)).h), s = nogamma(start.s, end.s), l = nogamma(start.l, end.l), opacity = nogamma(start.opacity, end.opacity); return function(t) { start.h = h(t); start.s = s(t); start.l = l(t); start.opacity = opacity(t); return start + ""; }; } } var hsl$2 = hsl$1(hue); var hslLong = hsl$1(nogamma); function lab$1(start, end) { var l = nogamma((start = lab(start)).l, (end = lab(end)).l), a = nogamma(start.a, end.a), b = nogamma(start.b, end.b), opacity = nogamma(start.opacity, end.opacity); return function(t) { start.l = l(t); start.a = a(t); start.b = b(t); start.opacity = opacity(t); return start + ""; }; } function hcl$1(hue) { return function(start, end) { var h = hue((start = hcl(start)).h, (end = hcl(end)).h), c = nogamma(start.c, end.c), l = nogamma(start.l, end.l), opacity = nogamma(start.opacity, end.opacity); return function(t) { start.h = h(t); start.c = c(t); start.l = l(t); start.opacity = opacity(t); return start + ""; }; } } var hcl$2 = hcl$1(hue); var hclLong = hcl$1(nogamma); function cubehelix$1(hue) { return (function cubehelixGamma(y) { y = +y; function cubehelix$1(start, end) { var h = hue((start = cubehelix(start)).h, (end = cubehelix(end)).h), s = nogamma(start.s, end.s), l = nogamma(start.l, end.l), opacity = nogamma(start.opacity, end.opacity); return function(t) { start.h = h(t); start.s = s(t); start.l = l(Math.pow(t, y)); start.opacity = opacity(t); return start + ""; }; } cubehelix$1.gamma = cubehelixGamma; return cubehelix$1; })(1); } var cubehelix$2 = cubehelix$1(hue); var cubehelixLong = cubehelix$1(nogamma); function piecewise(interpolate, values) { var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n); while (i < n) I[i] = interpolate(v, v = values[++i]); return function(t) { var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n))); return I[i](t - i); }; } function quantize(interpolator, n) { var samples = new Array(n); for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1)); return samples; } var frame = 0, // is an animation frame pending? timeout = 0, // is a timeout pending? interval = 0, // are any timers active? pokeDelay = 1000, // how frequently we check for clock skew taskHead, taskTail, clockLast = 0, clockNow = 0, clockSkew = 0, clock = typeof performance === "object" && performance.now ? performance : Date, setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); }; function now() { return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew); } function clearNow() { clockNow = 0; } function Timer() { this._call = this._time = this._next = null; } Timer.prototype = timer.prototype = { constructor: Timer, restart: function(callback, delay, time) { if (typeof callback !== "function") throw new TypeError("callback is not a function"); time = (time == null ? now() : +time) + (delay == null ? 0 : +delay); if (!this._next && taskTail !== this) { if (taskTail) taskTail._next = this; else taskHead = this; taskTail = this; } this._call = callback; this._time = time; sleep(); }, stop: function() { if (this._call) { this._call = null; this._time = Infinity; sleep(); } } }; function timer(callback, delay, time) { var t = new Timer; t.restart(callback, delay, time); return t; } function timerFlush() { now(); // Get the current time, if not already set. ++frame; // Pretend we’ve set an alarm, if we haven’t already. var t = taskHead, e; while (t) { if ((e = clockNow - t._time) >= 0) t._call.call(null, e); t = t._next; } --frame; } function wake() { clockNow = (clockLast = clock.now()) + clockSkew; frame = timeout = 0; try { timerFlush(); } finally { frame = 0; nap(); clockNow = 0; } } function poke() { var now = clock.now(), delay = now - clockLast; if (delay > pokeDelay) clockSkew -= delay, clockLast = now; } function nap() { var t0, t1 = taskHead, t2, time = Infinity; while (t1) { if (t1._call) { if (time > t1._time) time = t1._time; t0 = t1, t1 = t1._next; } else { t2 = t1._next, t1._next = null; t1 = t0 ? t0._next = t2 : taskHead = t2; } } taskTail = t0; sleep(time); } function sleep(time) { if (frame) return; // Soonest alarm already set, or will be. if (timeout) timeout = clearTimeout(timeout); var delay = time - clockNow; // Strictly less than if we recomputed clockNow. if (delay > 24) { if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew); if (interval) interval = clearInterval(interval); } else { if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay); frame = 1, setFrame(wake); } } function timeout$1(callback, delay, time) { var t = new Timer; delay = delay == null ? 0 : +delay; t.restart(function(elapsed) { t.stop(); callback(elapsed + delay); }, delay, time); return t; } function interval$1(callback, delay, time) { var t = new Timer, total = delay; if (delay == null) return t.restart(callback, delay, time), t; delay = +delay, time = time == null ? now() : +time; t.restart(function tick(elapsed) { elapsed += total; t.restart(tick, total += delay, time); callback(elapsed); }, delay, time); return t; } var emptyOn = dispatch("start", "end", "cancel", "interrupt"); var emptyTween = []; var CREATED = 0; var SCHEDULED = 1; var STARTING = 2; var STARTED = 3; var RUNNING = 4; var ENDING = 5; var ENDED = 6; function schedule(node, name, id, index, group, timing) { var schedules = node.__transition; if (!schedules) node.__transition = {}; else if (id in schedules) return; create$1(node, id, { name: name, index: index, // For context during callback. group: group, // For context during callback. on: emptyOn, tween: emptyTween, time: timing.time, delay: timing.delay, duration: timing.duration, ease: timing.ease, timer: null, state: CREATED }); } function init(node, id) { var schedule = get$1(node, id); if (schedule.state > CREATED) throw new Error("too late; already scheduled"); return schedule; } function set$1(node, id) { var schedule = get$1(node, id); if (schedule.state > STARTED) throw new Error("too late; already running"); return schedule; } function get$1(node, id) { var schedule = node.__transition; if (!schedule || !(schedule = schedule[id])) throw new Error("transition not found"); return schedule; } function create$1(node, id, self) { var schedules = node.__transition, tween; // Initialize the self timer when the transition is created. // Note the actual delay is not known until the first callback! schedules[id] = self; self.timer = timer(schedule, 0, self.time); function schedule(elapsed) { self.state = SCHEDULED; self.timer.restart(start, self.delay, self.time); // If the elapsed delay is less than our first sleep, start immediately. if (self.delay <= elapsed) start(elapsed - self.delay); } function start(elapsed) { var i, j, n, o; // If the state is not SCHEDULED, then we previously errored on start. if (self.state !== SCHEDULED) return stop(); for (i in schedules) { o = schedules[i]; if (o.name !== self.name) continue; // While this element already has a starting transition during this frame, // defer starting an interrupting transition until that transition has a // chance to tick (and possibly end); see d3/d3-transition#54! if (o.state === STARTED) return timeout$1(start); // Interrupt the active transition, if any. if (o.state === RUNNING) { o.state = ENDED; o.timer.stop(); o.on.call("interrupt", node, node.__data__, o.index, o.group); delete schedules[i]; } // Cancel any pre-empted transitions. else if (+i < id) { o.state = ENDED; o.timer.stop(); o.on.call("cancel", node, node.__data__, o.index, o.group); delete schedules[i]; } } // Defer the first tick to end of the current frame; see d3/d3#1576. // Note the transition may be canceled after start and before the first tick! // Note this must be scheduled before the start event; see d3/d3-transition#16! // Assuming this is successful, subsequent callbacks go straight to tick. timeout$1(function() { if (self.state === STARTED) { self.state = RUNNING; self.timer.restart(tick, self.delay, self.time); tick(elapsed); } }); // Dispatch the start event. // Note this must be done before the tween are initialized. self.state = STARTING; self.on.call("start", node, node.__data__, self.index, self.group); if (self.state !== STARTING) return; // interrupted self.state = STARTED; // Initialize the tween, deleting null tween. tween = new Array(n = self.tween.length); for (i = 0, j = -1; i < n; ++i) { if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) { tween[++j] = o; } } tween.length = j + 1; } function tick(elapsed) { var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1), i = -1, n = tween.length; while (++i < n) { tween[i].call(node, t); } // Dispatch the end event. if (self.state === ENDING) { self.on.call("end", node, node.__data__, self.index, self.group); stop(); } } function stop() { self.state = ENDED; self.timer.stop(); delete schedules[id]; for (var i in schedules) return; // eslint-disable-line no-unused-vars delete node.__transition; } } function interrupt(node, name) { var schedules = node.__transition, schedule, active, empty = true, i; if (!schedules) return; name = name == null ? null : name + ""; for (i in schedules) { if ((schedule = schedules[i]).name !== name) { empty = false; continue; } active = schedule.state > STARTING && schedule.state < ENDING; schedule.state = ENDED; schedule.timer.stop(); schedule.on.call(active ? "interrupt" : "cancel", node, node.__data__, schedule.index, schedule.group); delete schedules[i]; } if (empty) delete node.__transition; } function selection_interrupt(name) { return this.each(function() { interrupt(this, name); }); } function tweenRemove(id, name) { var tween0, tween1; return function() { var schedule = set$1(this, id), tween = schedule.tween; // If this node shared tween with the previous node, // just assign the updated shared tween and we’re done! // Otherwise, copy-on-write. if (tween !== tween0) { tween1 = tween0 = tween; for (var i = 0, n = tween1.length; i < n; ++i) { if (tween1[i].name === name) { tween1 = tween1.slice(); tween1.splice(i, 1); break; } } } schedule.tween = tween1; }; } function tweenFunction(id, name, value) { var tween0, tween1; if (typeof value !== "function") throw new Error; return function() { var schedule = set$1(this, id), tween = schedule.tween; // If this node shared tween with the previous node, // just assign the updated shared tween and we’re done! // Otherwise, copy-on-write. if (tween !== tween0) { tween1 = (tween0 = tween).slice(); for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) { if (tween1[i].name === name) { tween1[i] = t; break; } } if (i === n) tween1.push(t); } schedule.tween = tween1; }; } function transition_tween(name, value) { var id = this._id; name += ""; if (arguments.length < 2) { var tween = get$1(this.node(), id).tween; for (var i = 0, n = tween.length, t; i < n; ++i) { if ((t = tween[i]).name === name) { return t.value; } } return null; } return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value)); } function tweenValue(transition, name, value) { var id = transition._id; transition.each(function() { var schedule = set$1(this, id); (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments); }); return function(node) { return get$1(node, id).value[name]; }; } function interpolate(a, b) { var c; return (typeof b === "number" ? interpolateNumber : b instanceof color ? interpolateRgb : (c = color(b)) ? (b = c, interpolateRgb) : interpolateString)(a, b); } function attrRemove$1(name) { return function() { this.removeAttribute(name); }; } function attrRemoveNS$1(fullname) { return function() { this.removeAttributeNS(fullname.space, fullname.local); }; } function attrConstant$1(name, interpolate, value1) { var string00, string1 = value1 + "", interpolate0; return function() { var string0 = this.getAttribute(name); return string0 === string1 ? null : string0 === string00 ? interpolate0 : interpolate0 = interpolate(string00 = string0, value1); }; } function attrConstantNS$1(fullname, interpolate, value1) { var string00, string1 = value1 + "", interpolate0; return function() { var string0 = this.getAttributeNS(fullname.space, fullname.local); return string0 === string1 ? null : string0 === string00 ? interpolate0 : interpolate0 = interpolate(string00 = string0, value1); }; } function attrFunction$1(name, interpolate, value) { var string00, string10, interpolate0; return function() { var string0, value1 = value(this), string1; if (value1 == null) return void this.removeAttribute(name); string0 = this.getAttribute(name); string1 = value1 + ""; return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1)); }; } function attrFunctionNS$1(fullname, interpolate, value) { var string00, string10, interpolate0; return function() { var string0, value1 = value(this), string1; if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local); string0 = this.getAttributeNS(fullname.space, fullname.local); string1 = value1 + ""; return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1)); }; } function transition_attr(name, value) { var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate; return this.attrTween(name, typeof value === "function" ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, "attr." + name, value)) : value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname) : (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value)); } function attrInterpolate(name, i) { return function(t) { this.setAttribute(name, i.call(this, t)); }; } function attrInterpolateNS(fullname, i) { return function(t) { this.setAttributeNS(fullname.space, fullname.local, i.call(this, t)); }; } function attrTweenNS(fullname, value) { var t0, i0; function tween() { var i = value.apply(this, arguments); if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i); return t0; } tween._value = value; return tween; } function attrTween(name, value) { var t0, i0; function tween() { var i = value.apply(this, arguments); if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i); return t0; } tween._value = value; return tween; } function transition_attrTween(name, value) { var key = "attr." + name; if (arguments.length < 2) return (key = this.tween(key)) && key._value; if (value == null) return this.tween(key, null); if (typeof value !== "function") throw new Error; var fullname = namespace(name); return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value)); } function delayFunction(id, value) { return function() { init(this, id).delay = +value.apply(this, arguments); }; } function delayConstant(id, value) { return value = +value, function() { init(this, id).delay = value; }; } function transition_delay(value) { var id = this._id; return arguments.length ? this.each((typeof value === "function" ? delayFunction : delayConstant)(id, value)) : get$1(this.node(), id).delay; } function durationFunction(id, value) { return function() { set$1(this, id).duration = +value.apply(this, arguments); }; } function durationConstant(id, value) { return value = +value, function() { set$1(this, id).duration = value; }; } function transition_duration(value) { var id = this._id; return arguments.length ? this.each((typeof value === "function" ? durationFunction : durationConstant)(id, value)) : get$1(this.node(), id).duration; } function easeConstant(id, value) { if (typeof value !== "function") throw new Error; return function() { set$1(this, id).ease = value; }; } function transition_ease(value) { var id = this._id; return arguments.length ? this.each(easeConstant(id, value)) : get$1(this.node(), id).ease; } function transition_filter(match) { if (typeof match !== "function") match = matcher(match); for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { if ((node = group[i]) && match.call(node, node.__data__, i, group)) { subgroup.push(node); } } } return new Transition(subgroups, this._parents, this._name, this._id); } function transition_merge(transition) { if (transition._id !== this._id) throw new Error; for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { if (node = group0[i] || group1[i]) { merge[i] = node; } } } for (; j < m0; ++j) { merges[j] = groups0[j]; } return new Transition(merges, this._parents, this._name, this._id); } function start(name) { return (name + "").trim().split(/^|\s+/).every(function(t) { var i = t.indexOf("."); if (i >= 0) t = t.slice(0, i); return !t || t === "start"; }); } function onFunction(id, name, listener) { var on0, on1, sit = start(name) ? init : set$1; return function() { var schedule = sit(this, id), on = schedule.on; // If this node shared a dispatch with the previous node, // just assign the updated shared dispatch and we’re done! // Otherwise, copy-on-write. if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener); schedule.on = on1; }; } function transition_on(name, listener) { var id = this._id; return arguments.length < 2 ? get$1(this.node(), id).on.on(name) : this.each(onFunction(id, name, listener)); } function removeFunction(id) { return function() { var parent = this.parentNode; for (var i in this.__transition) if (+i !== id) return; if (parent) parent.removeChild(this); }; } function transition_remove() { return this.on("end.remove", removeFunction(this._id)); } function transition_select(select) { var name = this._name, id = this._id; if (typeof select !== "function") select = selector(select); for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { if ("__data__" in node) subnode.__data__ = node.__data__; subgroup[i] = subnode; schedule(subgroup[i], name, id, i, subgroup, get$1(node, id)); } } } return new Transition(subgroups, this._parents, name, id); } function transition_selectAll(select) { var name = this._name, id = this._id; if (typeof select !== "function") select = selectorAll(select); for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { if (node = group[i]) { for (var children = select.call(node, node.__data__, i, group), child, inherit = get$1(node, id), k = 0, l = children.length; k < l; ++k) { if (child = children[k]) { schedule(child, name, id, k, children, inherit); } } subgroups.push(children); parents.push(node); } } } return new Transition(subgroups, parents, name, id); } var Selection$1 = selection.prototype.constructor; function transition_selection() { return new Selection$1(this._groups, this._parents); } function styleNull(name, interpolate) { var string00, string10, interpolate0; return function() { var string0 = styleValue(this, name), string1 = (this.style.removeProperty(name), styleValue(this, name)); return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : interpolate0 = interpolate(string00 = string0, string10 = string1); }; } function styleRemove$1(name) { return function() { this.style.removeProperty(name); }; } function styleConstant$1(name, interpolate, value1) { var string00, string1 = value1 + "", interpolate0; return function() { var string0 = styleValue(this, name); return string0 === string1 ? null : string0 === string00 ? interpolate0 : interpolate0 = interpolate(string00 = string0, value1); }; } function styleFunction$1(name, interpolate, value) { var string00, string10, interpolate0; return function() { var string0 = styleValue(this, name), value1 = value(this), string1 = value1 + ""; if (value1 == null) string1 = value1 = (this.style.removeProperty(name), styleValue(this, name)); return string0 === string1 ? null : string0 === string00 && string1 === string10 ? interpolate0 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1)); }; } function styleMaybeRemove(id, name) { var on0, on1, listener0, key = "style." + name, event = "end." + key, remove; return function() { var schedule = set$1(this, id), on = schedule.on, listener = schedule.value[key] == null ? remove || (remove = styleRemove$1(name)) : undefined; // If this node shared a dispatch with the previous node, // just assign the updated shared dispatch and we’re done! // Otherwise, copy-on-write. if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener); schedule.on = on1; }; } function transition_style(name, value, priority) { var i = (name += "") === "transform" ? interpolateTransformCss : interpolate; return value == null ? this .styleTween(name, styleNull(name, i)) .on("end.style." + name, styleRemove$1(name)) : typeof value === "function" ? this .styleTween(name, styleFunction$1(name, i, tweenValue(this, "style." + name, value))) .each(styleMaybeRemove(this._id, name)) : this .styleTween(name, styleConstant$1(name, i, value), priority) .on("end.style." + name, null); } function styleInterpolate(name, i, priority) { return function(t) { this.style.setProperty(name, i.call(this, t), priority); }; } function styleTween(name, value, priority) { var t, i0; function tween() { var i = value.apply(this, arguments); if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority); return t; } tween._value = value; return tween; } function transition_styleTween(name, value, priority) { var key = "style." + (name += ""); if (arguments.length < 2) return (key = this.tween(key)) && key._value; if (value == null) return this.tween(key, null); if (typeof value !== "function") throw new Error; return this.tween(key, styleTween(name, value, priority == null ? "" : priority)); } function textConstant$1(value) { return function() { this.textContent = value; }; } function textFunction$1(value) { return function() { var value1 = value(this); this.textContent = value1 == null ? "" : value1; }; } function transition_text(value) { return this.tween("text", typeof value === "function" ? textFunction$1(tweenValue(this, "text", value)) : textConstant$1(value == null ? "" : value + "")); } function textInterpolate(i) { return function(t) { this.textContent = i.call(this, t); }; } function textTween(value) { var t0, i0; function tween() { var i = value.apply(this, arguments); if (i !== i0) t0 = (i0 = i) && textInterpolate(i); return t0; } tween._value = value; return tween; } function transition_textTween(value) { var key = "text"; if (arguments.length < 1) return (key = this.tween(key)) && key._value; if (value == null) return this.tween(key, null); if (typeof value !== "function") throw new Error; return this.tween(key, textTween(value)); } function transition_transition() { var name = this._name, id0 = this._id, id1 = newId(); for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) { for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { if (node = group[i]) { var inherit = get$1(node, id0); schedule(node, name, id1, i, group, { time: inherit.time + inherit.delay + inherit.duration, delay: 0, duration: inherit.duration, ease: inherit.ease }); } } } return new Transition(groups, this._parents, name, id1); } function transition_end() { var on0, on1, that = this, id = that._id, size = that.size(); return new Promise(function(resolve, reject) { var cancel = {value: reject}, end = {value: function() { if (--size === 0) resolve(); }}; that.each(function() { var schedule = set$1(this, id), on = schedule.on; // If this node shared a dispatch with the previous node, // just assign the updated shared dispatch and we’re done! // Otherwise, copy-on-write. if (on !== on0) { on1 = (on0 = on).copy(); on1._.cancel.push(cancel); on1._.interrupt.push(cancel); on1._.end.push(end); } schedule.on = on1; }); }); } var id = 0; function Transition(groups, parents, name, id) { this._groups = groups; this._parents = parents; this._name = name; this._id = id; } function transition(name) { return selection().transition(name); } function newId() { return ++id; } var selection_prototype = selection.prototype; Transition.prototype = transition.prototype = { constructor: Transition, select: transition_select, selectAll: transition_selectAll, filter: transition_filter, merge: transition_merge, selection: transition_selection, transition: transition_transition, call: selection_prototype.call, nodes: selection_prototype.nodes, node: selection_prototype.node, size: selection_prototype.size, empty: selection_prototype.empty, each: selection_prototype.each, on: transition_on, attr: transition_attr, attrTween: transition_attrTween, style: transition_style, styleTween: transition_styleTween, text: transition_text, textTween: transition_textTween, remove: transition_remove, tween: transition_tween, delay: transition_delay, duration: transition_duration, ease: transition_ease, end: transition_end }; function linear$1(t) { return +t; } function quadIn(t) { return t * t; } function quadOut(t) { return t * (2 - t); } function quadInOut(t) { return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2; } function cubicIn(t) { return t * t * t; } function cubicOut(t) { return --t * t * t + 1; } function cubicInOut(t) { return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2; } var exponent = 3; var polyIn = (function custom(e) { e = +e; function polyIn(t) { return Math.pow(t, e); } polyIn.exponent = custom; return polyIn; })(exponent); var polyOut = (function custom(e) { e = +e; function polyOut(t) { return 1 - Math.pow(1 - t, e); } polyOut.exponent = custom; return polyOut; })(exponent); var polyInOut = (function custom(e) { e = +e; function polyInOut(t) { return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2; } polyInOut.exponent = custom; return polyInOut; })(exponent); var pi = Math.PI, halfPi = pi / 2; function sinIn(t) { return 1 - Math.cos(t * halfPi); } function sinOut(t) { return Math.sin(t * halfPi); } function sinInOut(t) { return (1 - Math.cos(pi * t)) / 2; } function expIn(t) { return Math.pow(2, 10 * t - 10); } function expOut(t) { return 1 - Math.pow(2, -10 * t); } function expInOut(t) { return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2; } function circleIn(t) { return 1 - Math.sqrt(1 - t * t); } function circleOut(t) { return Math.sqrt(1 - --t * t); } function circleInOut(t) { return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2; } var b1 = 4 / 11, b2 = 6 / 11, b3 = 8 / 11, b4 = 3 / 4, b5 = 9 / 11, b6 = 10 / 11, b7 = 15 / 16, b8 = 21 / 22, b9 = 63 / 64, b0 = 1 / b1 / b1; function bounceIn(t) { return 1 - bounceOut(1 - t); } function bounceOut(t) { return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9; } function bounceInOut(t) { return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2; } var overshoot = 1.70158; var backIn = (function custom(s) { s = +s; function backIn(t) { return t * t * ((s + 1) * t - s); } backIn.overshoot = custom; return backIn; })(overshoot); var backOut = (function custom(s) { s = +s; function backOut(t) { return --t * t * ((s + 1) * t + s) + 1; } backOut.overshoot = custom; return backOut; })(overshoot); var backInOut = (function custom(s) { s = +s; function backInOut(t) { return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2; } backInOut.overshoot = custom; return backInOut; })(overshoot); var tau = 2 * Math.PI, amplitude = 1, period = 0.3; var elasticIn = (function custom(a, p) { var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); function elasticIn(t) { return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p); } elasticIn.amplitude = function(a) { return custom(a, p * tau); }; elasticIn.period = function(p) { return custom(a, p); }; return elasticIn; })(amplitude, period); var elasticOut = (function custom(a, p) { var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); function elasticOut(t) { return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p); } elasticOut.amplitude = function(a) { return custom(a, p * tau); }; elasticOut.period = function(p) { return custom(a, p); }; return elasticOut; })(amplitude, period); var elasticInOut = (function custom(a, p) { var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); function elasticInOut(t) { return ((t = t * 2 - 1) < 0 ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p) : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2; } elasticInOut.amplitude = function(a) { return custom(a, p * tau); }; elasticInOut.period = function(p) { return custom(a, p); }; return elasticInOut; })(amplitude, period); var defaultTiming = { time: null, // Set on use. delay: 0, duration: 250, ease: cubicInOut }; function inherit(node, id) { var timing; while (!(timing = node.__transition) || !(timing = timing[id])) { if (!(node = node.parentNode)) { return defaultTiming.time = now(), defaultTiming; } } return timing; } function selection_transition(name) { var id, timing; if (name instanceof Transition) { id = name._id, name = name._name; } else { id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + ""; } for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) { for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { if (node = group[i]) { schedule(node, name, id, i, group, timing || inherit(node, id)); } } } return new Transition(groups, this._parents, name, id); } selection.prototype.interrupt = selection_interrupt; selection.prototype.transition = selection_transition; var root$1 = [null]; function active(node, name) { var schedules = node.__transition, schedule, i; if (schedules) { name = name == null ? null : name + ""; for (i in schedules) { if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) { return new Transition([[node]], root$1, name, +i); } } } return null; } function constant$4(x) { return function() { return x; }; } function BrushEvent(target, type, selection) { this.target = target; this.type = type; this.selection = selection; } function nopropagation$1() { exports.event.stopImmediatePropagation(); } function noevent$1() { exports.event.preventDefault(); exports.event.stopImmediatePropagation(); } var MODE_DRAG = {name: "drag"}, MODE_SPACE = {name: "space"}, MODE_HANDLE = {name: "handle"}, MODE_CENTER = {name: "center"}; function number1(e) { return [+e[0], +e[1]]; } function number2(e) { return [number1(e[0]), number1(e[1])]; } function toucher(identifier) { return function(target) { return touch(target, exports.event.touches, identifier); }; } var X = { name: "x", handles: ["w", "e"].map(type), input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; }, output: function(xy) { return xy && [xy[0][0], xy[1][0]]; } }; var Y = { name: "y", handles: ["n", "s"].map(type), input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; }, output: function(xy) { return xy && [xy[0][1], xy[1][1]]; } }; var XY = { name: "xy", handles: ["n", "w", "e", "s", "nw", "ne", "sw", "se"].map(type), input: function(xy) { return xy == null ? null : number2(xy); }, output: function(xy) { return xy; } }; var cursors = { overlay: "crosshair", selection: "move", n: "ns-resize", e: "ew-resize", s: "ns-resize", w: "ew-resize", nw: "nwse-resize", ne: "nesw-resize", se: "nwse-resize", sw: "nesw-resize" }; var flipX = { e: "w", w: "e", nw: "ne", ne: "nw", se: "sw", sw: "se" }; var flipY = { n: "s", s: "n", nw: "sw", ne: "se", se: "ne", sw: "nw" }; var signsX = { overlay: +1, selection: +1, n: null, e: +1, s: null, w: -1, nw: -1, ne: +1, se: +1, sw: -1 }; var signsY = { overlay: +1, selection: +1, n: -1, e: null, s: +1, w: null, nw: -1, ne: -1, se: +1, sw: +1 }; function type(t) { return {type: t}; } // Ignore right-click, since that should open the context menu. function defaultFilter$1() { return !exports.event.ctrlKey && !exports.event.button; } function defaultExtent() { var svg = this.ownerSVGElement || this; if (svg.hasAttribute("viewBox")) { svg = svg.viewBox.baseVal; return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]]; } return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]]; } function defaultTouchable$1() { return navigator.maxTouchPoints || ("ontouchstart" in this); } // Like d3.local, but with the name “__brush” rather than auto-generated. function local$1(node) { while (!node.__brush) if (!(node = node.parentNode)) return; return node.__brush; } function empty$1(extent) { return extent[0][0] === extent[1][0] || extent[0][1] === extent[1][1]; } function brushSelection(node) { var state = node.__brush; return state ? state.dim.output(state.selection) : null; } function brushX() { return brush$1(X); } function brushY() { return brush$1(Y); } function brush() { return brush$1(XY); } function brush$1(dim) { var extent = defaultExtent, filter = defaultFilter$1, touchable = defaultTouchable$1, keys = true, listeners = dispatch("start", "brush", "end"), handleSize = 6, touchending; function brush(group) { var overlay = group .property("__brush", initialize) .selectAll(".overlay") .data([type("overlay")]); overlay.enter().append("rect") .attr("class", "overlay") .attr("pointer-events", "all") .attr("cursor", cursors.overlay) .merge(overlay) .each(function() { var extent = local$1(this).extent; select(this) .attr("x", extent[0][0]) .attr("y", extent[0][1]) .attr("width", extent[1][0] - extent[0][0]) .attr("height", extent[1][1] - extent[0][1]); }); group.selectAll(".selection") .data([type("selection")]) .enter().append("rect") .attr("class", "selection") .attr("cursor", cursors.selection) .attr("fill", "#777") .attr("fill-opacity", 0.3) .attr("stroke", "#fff") .attr("shape-rendering", "crispEdges"); var handle = group.selectAll(".handle") .data(dim.handles, function(d) { return d.type; }); handle.exit().remove(); handle.enter().append("rect") .attr("class", function(d) { return "handle handle--" + d.type; }) .attr("cursor", function(d) { return cursors[d.type]; }); group .each(redraw) .attr("fill", "none") .attr("pointer-events", "all") .on("mousedown.brush", started) .filter(touchable) .on("touchstart.brush", started) .on("touchmove.brush", touchmoved) .on("touchend.brush touchcancel.brush", touchended) .style("touch-action", "none") .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); } brush.move = function(group, selection) { if (group.selection) { group .on("start.brush", function() { emitter(this, arguments).beforestart().start(); }) .on("interrupt.brush end.brush", function() { emitter(this, arguments).end(); }) .tween("brush", function() { var that = this, state = that.__brush, emit = emitter(that, arguments), selection0 = state.selection, selection1 = dim.input(typeof selection === "function" ? selection.apply(this, arguments) : selection, state.extent), i = interpolateValue(selection0, selection1); function tween(t) { state.selection = t === 1 && selection1 === null ? null : i(t); redraw.call(that); emit.brush(); } return selection0 !== null && selection1 !== null ? tween : tween(1); }); } else { group .each(function() { var that = this, args = arguments, state = that.__brush, selection1 = dim.input(typeof selection === "function" ? selection.apply(that, args) : selection, state.extent), emit = emitter(that, args).beforestart(); interrupt(that); state.selection = selection1 === null ? null : selection1; redraw.call(that); emit.start().brush().end(); }); } }; brush.clear = function(group) { brush.move(group, null); }; function redraw() { var group = select(this), selection = local$1(this).selection; if (selection) { group.selectAll(".selection") .style("display", null) .attr("x", selection[0][0]) .attr("y", selection[0][1]) .attr("width", selection[1][0] - selection[0][0]) .attr("height", selection[1][1] - selection[0][1]); group.selectAll(".handle") .style("display", null) .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; }) .attr("y", function(d) { return d.type[0] === "s" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; }) .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection[1][0] - selection[0][0] + handleSize : handleSize; }) .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection[1][1] - selection[0][1] + handleSize : handleSize; }); } else { group.selectAll(".selection,.handle") .style("display", "none") .attr("x", null) .attr("y", null) .attr("width", null) .attr("height", null); } } function emitter(that, args, clean) { return (!clean && that.__brush.emitter) || new Emitter(that, args); } function Emitter(that, args) { this.that = that; this.args = args; this.state = that.__brush; this.active = 0; } Emitter.prototype = { beforestart: function() { if (++this.active === 1) this.state.emitter = this, this.starting = true; return this; }, start: function() { if (this.starting) this.starting = false, this.emit("start"); else this.emit("brush"); return this; }, brush: function() { this.emit("brush"); return this; }, end: function() { if (--this.active === 0) delete this.state.emitter, this.emit("end"); return this; }, emit: function(type) { customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]); } }; function started() { if (touchending && !exports.event.touches) return; if (!filter.apply(this, arguments)) return; var that = this, type = exports.event.target.__data__.type, mode = (keys && exports.event.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (keys && exports.event.altKey ? MODE_CENTER : MODE_HANDLE), signX = dim === Y ? null : signsX[type], signY = dim === X ? null : signsY[type], state = local$1(that), extent = state.extent, selection = state.selection, W = extent[0][0], w0, w1, N = extent[0][1], n0, n1, E = extent[1][0], e0, e1, S = extent[1][1], s0, s1, dx = 0, dy = 0, moving, shifting = signX && signY && keys && exports.event.shiftKey, lockX, lockY, pointer = exports.event.touches ? toucher(exports.event.changedTouches[0].identifier) : mouse, point0 = pointer(that), point = point0, emit = emitter(that, arguments, true).beforestart(); if (type === "overlay") { if (selection) moving = true; state.selection = selection = [ [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]], [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0] ]; } else { w0 = selection[0][0]; n0 = selection[0][1]; e0 = selection[1][0]; s0 = selection[1][1]; } w1 = w0; n1 = n0; e1 = e0; s1 = s0; var group = select(that) .attr("pointer-events", "none"); var overlay = group.selectAll(".overlay") .attr("cursor", cursors[type]); if (exports.event.touches) { emit.moved = moved; emit.ended = ended; } else { var view = select(exports.event.view) .on("mousemove.brush", moved, true) .on("mouseup.brush", ended, true); if (keys) view .on("keydown.brush", keydowned, true) .on("keyup.brush", keyupped, true); dragDisable(exports.event.view); } nopropagation$1(); interrupt(that); redraw.call(that); emit.start(); function moved() { var point1 = pointer(that); if (shifting && !lockX && !lockY) { if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true; else lockX = true; } point = point1; moving = true; noevent$1(); move(); } function move() { var t; dx = point[0] - point0[0]; dy = point[1] - point0[1]; switch (mode) { case MODE_SPACE: case MODE_DRAG: { if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx; if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy; break; } case MODE_HANDLE: { if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0; else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx; if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0; else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy; break; } case MODE_CENTER: { if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX)); if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY)); break; } } if (e1 < w1) { signX *= -1; t = w0, w0 = e0, e0 = t; t = w1, w1 = e1, e1 = t; if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]); } if (s1 < n1) { signY *= -1; t = n0, n0 = s0, s0 = t; t = n1, n1 = s1, s1 = t; if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]); } if (state.selection) selection = state.selection; // May be set by brush.move! if (lockX) w1 = selection[0][0], e1 = selection[1][0]; if (lockY) n1 = selection[0][1], s1 = selection[1][1]; if (selection[0][0] !== w1 || selection[0][1] !== n1 || selection[1][0] !== e1 || selection[1][1] !== s1) { state.selection = [[w1, n1], [e1, s1]]; redraw.call(that); emit.brush(); } } function ended() { nopropagation$1(); if (exports.event.touches) { if (exports.event.touches.length) return; if (touchending) clearTimeout(touchending); touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed! } else { yesdrag(exports.event.view, moving); view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null); } group.attr("pointer-events", "all"); overlay.attr("cursor", cursors.overlay); if (state.selection) selection = state.selection; // May be set by brush.move (on start)! if (empty$1(selection)) state.selection = null, redraw.call(that); emit.end(); } function keydowned() { switch (exports.event.keyCode) { case 16: { // SHIFT shifting = signX && signY; break; } case 18: { // ALT if (mode === MODE_HANDLE) { if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX; if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY; mode = MODE_CENTER; move(); } break; } case 32: { // SPACE; takes priority over ALT if (mode === MODE_HANDLE || mode === MODE_CENTER) { if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx; if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy; mode = MODE_SPACE; overlay.attr("cursor", cursors.selection); move(); } break; } default: return; } noevent$1(); } function keyupped() { switch (exports.event.keyCode) { case 16: { // SHIFT if (shifting) { lockX = lockY = shifting = false; move(); } break; } case 18: { // ALT if (mode === MODE_CENTER) { if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1; if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1; mode = MODE_HANDLE; move(); } break; } case 32: { // SPACE if (mode === MODE_SPACE) { if (exports.event.altKey) { if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX; if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY; mode = MODE_CENTER; } else { if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1; if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1; mode = MODE_HANDLE; } overlay.attr("cursor", cursors[type]); move(); } break; } default: return; } noevent$1(); } } function touchmoved() { emitter(this, arguments).moved(); } function touchended() { emitter(this, arguments).ended(); } function initialize() { var state = this.__brush || {selection: null}; state.extent = number2(extent.apply(this, arguments)); state.dim = dim; return state; } brush.extent = function(_) { return arguments.length ? (extent = typeof _ === "function" ? _ : constant$4(number2(_)), brush) : extent; }; brush.filter = function(_) { return arguments.length ? (filter = typeof _ === "function" ? _ : constant$4(!!_), brush) : filter; }; brush.touchable = function(_) { return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$4(!!_), brush) : touchable; }; brush.handleSize = function(_) { return arguments.length ? (handleSize = +_, brush) : handleSize; }; brush.keyModifiers = function(_) { return arguments.length ? (keys = !!_, brush) : keys; }; brush.on = function() { var value = listeners.on.apply(listeners, arguments); return value === listeners ? brush : value; }; return brush; } var cos = Math.cos; var sin = Math.sin; var pi$1 = Math.PI; var halfPi$1 = pi$1 / 2; var tau$1 = pi$1 * 2; var max$1 = Math.max; function compareValue(compare) { return function(a, b) { return compare( a.source.value + a.target.value, b.source.value + b.target.value ); }; } function chord() { var padAngle = 0, sortGroups = null, sortSubgroups = null, sortChords = null; function chord(matrix) { var n = matrix.length, groupSums = [], groupIndex = sequence(n), subgroupIndex = [], chords = [], groups = chords.groups = new Array(n), subgroups = new Array(n * n), k, x, x0, dx, i, j; // Compute the sum. k = 0, i = -1; while (++i < n) { x = 0, j = -1; while (++j < n) { x += matrix[i][j]; } groupSums.push(x); subgroupIndex.push(sequence(n)); k += x; } // Sort groups… if (sortGroups) groupIndex.sort(function(a, b) { return sortGroups(groupSums[a], groupSums[b]); }); // Sort subgroups… if (sortSubgroups) subgroupIndex.forEach(function(d, i) { d.sort(function(a, b) { return sortSubgroups(matrix[i][a], matrix[i][b]); }); }); // Convert the sum to scaling factor for [0, 2pi]. // TODO Allow start and end angle to be specified? // TODO Allow padding to be specified as percentage? k = max$1(0, tau$1 - padAngle * n) / k; dx = k ? padAngle : tau$1 / n; // Compute the start and end angle for each group and subgroup. // Note: Opera has a bug reordering object literal properties! x = 0, i = -1; while (++i < n) { x0 = x, j = -1; while (++j < n) { var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k; subgroups[dj * n + di] = { index: di, subindex: dj, startAngle: a0, endAngle: a1, value: v }; } groups[di] = { index: di, startAngle: x0, endAngle: x, value: groupSums[di] }; x += dx; } // Generate chords for each (non-empty) subgroup-subgroup link. i = -1; while (++i < n) { j = i - 1; while (++j < n) { var source = subgroups[j * n + i], target = subgroups[i * n + j]; if (source.value || target.value) { chords.push(source.value < target.value ? {source: target, target: source} : {source: source, target: target}); } } } return sortChords ? chords.sort(sortChords) : chords; } chord.padAngle = function(_) { return arguments.length ? (padAngle = max$1(0, _), chord) : padAngle; }; chord.sortGroups = function(_) { return arguments.length ? (sortGroups = _, chord) : sortGroups; }; chord.sortSubgroups = function(_) { return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups; }; chord.sortChords = function(_) { return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._; }; return chord; } var slice$2 = Array.prototype.slice; function constant$5(x) { return function() { return x; }; } var pi$2 = Math.PI, tau$2 = 2 * pi$2, epsilon$1 = 1e-6, tauEpsilon = tau$2 - epsilon$1; function Path() { this._x0 = this._y0 = // start of current subpath this._x1 = this._y1 = null; // end of current subpath this._ = ""; } function path() { return new Path; } Path.prototype = path.prototype = { constructor: Path, moveTo: function(x, y) { this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y); }, closePath: function() { if (this._x1 !== null) { this._x1 = this._x0, this._y1 = this._y0; this._ += "Z"; } }, lineTo: function(x, y) { this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y); }, quadraticCurveTo: function(x1, y1, x, y) { this._ += "Q" + (+x1) + "," + (+y1) + "," + (this._x1 = +x) + "," + (this._y1 = +y); }, bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._ += "C" + (+x1) + "," + (+y1) + "," + (+x2) + "," + (+y2) + "," + (this._x1 = +x) + "," + (this._y1 = +y); }, arcTo: function(x1, y1, x2, y2, r) { x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r; var x0 = this._x1, y0 = this._y1, x21 = x2 - x1, y21 = y2 - y1, x01 = x0 - x1, y01 = y0 - y1, l01_2 = x01 * x01 + y01 * y01; // Is the radius negative? Error. if (r < 0) throw new Error("negative radius: " + r); // Is this path empty? Move to (x1,y1). if (this._x1 === null) { this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1); } // Or, is (x1,y1) coincident with (x0,y0)? Do nothing. else if (!(l01_2 > epsilon$1)); // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear? // Equivalently, is (x1,y1) coincident with (x2,y2)? // Or, is the radius zero? Line to (x1,y1). else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon$1) || !r) { this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1); } // Otherwise, draw an arc! else { var x20 = x2 - x0, y20 = y2 - y0, l21_2 = x21 * x21 + y21 * y21, l20_2 = x20 * x20 + y20 * y20, l21 = Math.sqrt(l21_2), l01 = Math.sqrt(l01_2), l = r * Math.tan((pi$2 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2), t01 = l / l01, t21 = l / l21; // If the start tangent is not coincident with (x0,y0), line to. if (Math.abs(t01 - 1) > epsilon$1) { this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01); } this._ += "A" + r + "," + r + ",0,0," + (+(y01 * x20 > x01 * y20)) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21); } }, arc: function(x, y, r, a0, a1, ccw) { x = +x, y = +y, r = +r, ccw = !!ccw; var dx = r * Math.cos(a0), dy = r * Math.sin(a0), x0 = x + dx, y0 = y + dy, cw = 1 ^ ccw, da = ccw ? a0 - a1 : a1 - a0; // Is the radius negative? Error. if (r < 0) throw new Error("negative radius: " + r); // Is this path empty? Move to (x0,y0). if (this._x1 === null) { this._ += "M" + x0 + "," + y0; } // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0). else if (Math.abs(this._x1 - x0) > epsilon$1 || Math.abs(this._y1 - y0) > epsilon$1) { this._ += "L" + x0 + "," + y0; } // Is this arc empty? We’re done. if (!r) return; // Does the angle go the wrong way? Flip the direction. if (da < 0) da = da % tau$2 + tau$2; // Is this a complete circle? Draw two arcs to complete the circle. if (da > tauEpsilon) { this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0); } // Is this arc non-empty? Draw an arc! else if (da > epsilon$1) { this._ += "A" + r + "," + r + ",0," + (+(da >= pi$2)) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1)); } }, rect: function(x, y, w, h) { this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + (+w) + "v" + (+h) + "h" + (-w) + "Z"; }, toString: function() { return this._; } }; function defaultSource(d) { return d.source; } function defaultTarget(d) { return d.target; } function defaultRadius(d) { return d.radius; } function defaultStartAngle(d) { return d.startAngle; } function defaultEndAngle(d) { return d.endAngle; } function ribbon() { var source = defaultSource, target = defaultTarget, radius = defaultRadius, startAngle = defaultStartAngle, endAngle = defaultEndAngle, context = null; function ribbon() { var buffer, argv = slice$2.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv), sr = +radius.apply(this, (argv[0] = s, argv)), sa0 = startAngle.apply(this, argv) - halfPi$1, sa1 = endAngle.apply(this, argv) - halfPi$1, sx0 = sr * cos(sa0), sy0 = sr * sin(sa0), tr = +radius.apply(this, (argv[0] = t, argv)), ta0 = startAngle.apply(this, argv) - halfPi$1, ta1 = endAngle.apply(this, argv) - halfPi$1; if (!context) context = buffer = path(); context.moveTo(sx0, sy0); context.arc(0, 0, sr, sa0, sa1); if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr? context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0)); context.arc(0, 0, tr, ta0, ta1); } context.quadraticCurveTo(0, 0, sx0, sy0); context.closePath(); if (buffer) return context = null, buffer + "" || null; } ribbon.radius = function(_) { return arguments.length ? (radius = typeof _ === "function" ? _ : constant$5(+_), ribbon) : radius; }; ribbon.startAngle = function(_) { return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$5(+_), ribbon) : startAngle; }; ribbon.endAngle = function(_) { return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$5(+_), ribbon) : endAngle; }; ribbon.source = function(_) { return arguments.length ? (source = _, ribbon) : source; }; ribbon.target = function(_) { return arguments.length ? (target = _, ribbon) : target; }; ribbon.context = function(_) { return arguments.length ? ((context = _ == null ? null : _), ribbon) : context; }; return ribbon; } var prefix = "$"; function Map() {} Map.prototype = map$1.prototype = { constructor: Map, has: function(key) { return (prefix + key) in this; }, get: function(key) { return this[prefix + key]; }, set: function(key, value) { this[prefix + key] = value; return this; }, remove: function(key) { var property = prefix + key; return property in this && delete this[property]; }, clear: function() { for (var property in this) if (property[0] === prefix) delete this[property]; }, keys: function() { var keys = []; for (var property in this) if (property[0] === prefix) keys.push(property.slice(1)); return keys; }, values: function() { var values = []; for (var property in this) if (property[0] === prefix) values.push(this[property]); return values; }, entries: function() { var entries = []; for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]}); return entries; }, size: function() { var size = 0; for (var property in this) if (property[0] === prefix) ++size; return size; }, empty: function() { for (var property in this) if (property[0] === prefix) return false; return true; }, each: function(f) { for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this); } }; function map$1(object, f) { var map = new Map; // Copy constructor. if (object instanceof Map) object.each(function(value, key) { map.set(key, value); }); // Index array by numeric index or specified key function. else if (Array.isArray(object)) { var i = -1, n = object.length, o; if (f == null) while (++i < n) map.set(i, object[i]); else while (++i < n) map.set(f(o = object[i], i, object), o); } // Convert object to map. else if (object) for (var key in object) map.set(key, object[key]); return map; } function nest() { var keys = [], sortKeys = [], sortValues, rollup, nest; function apply(array, depth, createResult, setResult) { if (depth >= keys.length) { if (sortValues != null) array.sort(sortValues); return rollup != null ? rollup(array) : array; } var i = -1, n = array.length, key = keys[depth++], keyValue, value, valuesByKey = map$1(), values, result = createResult(); while (++i < n) { if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) { values.push(value); } else { valuesByKey.set(keyValue, [value]); } } valuesByKey.each(function(values, key) { setResult(result, key, apply(values, depth, createResult, setResult)); }); return result; } function entries(map, depth) { if (++depth > keys.length) return map; var array, sortKey = sortKeys[depth - 1]; if (rollup != null && depth >= keys.length) array = map.entries(); else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); }); return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array; } return nest = { object: function(array) { return apply(array, 0, createObject, setObject); }, map: function(array) { return apply(array, 0, createMap, setMap); }, entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); }, key: function(d) { keys.push(d); return nest; }, sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; }, sortValues: function(order) { sortValues = order; return nest; }, rollup: function(f) { rollup = f; return nest; } }; } function createObject() { return {}; } function setObject(object, key, value) { object[key] = value; } function createMap() { return map$1(); } function setMap(map, key, value) { map.set(key, value); } function Set() {} var proto = map$1.prototype; Set.prototype = set$2.prototype = { constructor: Set, has: proto.has, add: function(value) { value += ""; this[prefix + value] = value; return this; }, remove: proto.remove, clear: proto.clear, values: proto.keys, size: proto.size, empty: proto.empty, each: proto.each }; function set$2(object, f) { var set = new Set; // Copy constructor. if (object instanceof Set) object.each(function(value) { set.add(value); }); // Otherwise, assume it’s an array. else if (object) { var i = -1, n = object.length; if (f == null) while (++i < n) set.add(object[i]); else while (++i < n) set.add(f(object[i], i, object)); } return set; } function keys(map) { var keys = []; for (var key in map) keys.push(key); return keys; } function values(map) { var values = []; for (var key in map) values.push(map[key]); return values; } function entries(map) { var entries = []; for (var key in map) entries.push({key: key, value: map[key]}); return entries; } var array$2 = Array.prototype; var slice$3 = array$2.slice; function ascending$2(a, b) { return a - b; } function area(ring) { var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1]; while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1]; return area; } function constant$6(x) { return function() { return x; }; } function contains(ring, hole) { var i = -1, n = hole.length, c; while (++i < n) if (c = ringContains(ring, hole[i])) return c; return 0; } function ringContains(ring, point) { var x = point[0], y = point[1], contains = -1; for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) { var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1]; if (segmentContains(pi, pj, point)) return 0; if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains; } return contains; } function segmentContains(a, b, c) { var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]); } function collinear(a, b, c) { return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]); } function within(p, q, r) { return p <= q && q <= r || r <= q && q <= p; } function noop$1() {} var cases = [ [], [[[1.0, 1.5], [0.5, 1.0]]], [[[1.5, 1.0], [1.0, 1.5]]], [[[1.5, 1.0], [0.5, 1.0]]], [[[1.0, 0.5], [1.5, 1.0]]], [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]], [[[1.0, 0.5], [1.0, 1.5]]], [[[1.0, 0.5], [0.5, 1.0]]], [[[0.5, 1.0], [1.0, 0.5]]], [[[1.0, 1.5], [1.0, 0.5]]], [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]], [[[1.5, 1.0], [1.0, 0.5]]], [[[0.5, 1.0], [1.5, 1.0]]], [[[1.0, 1.5], [1.5, 1.0]]], [[[0.5, 1.0], [1.0, 1.5]]], [] ]; function contours() { var dx = 1, dy = 1, threshold = thresholdSturges, smooth = smoothLinear; function contours(values) { var tz = threshold(values); // Convert number of thresholds into uniform thresholds. if (!Array.isArray(tz)) { var domain = extent(values), start = domain[0], stop = domain[1]; tz = tickStep(start, stop, tz); tz = sequence(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz); } else { tz = tz.slice().sort(ascending$2); } return tz.map(function(value) { return contour(values, value); }); } // Accumulate, smooth contour rings, assign holes to exterior rings. // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js function contour(values, value) { var polygons = [], holes = []; isorings(values, value, function(ring) { smooth(ring, values, value); if (area(ring) > 0) polygons.push([ring]); else holes.push(ring); }); holes.forEach(function(hole) { for (var i = 0, n = polygons.length, polygon; i < n; ++i) { if (contains((polygon = polygons[i])[0], hole) !== -1) { polygon.push(hole); return; } } }); return { type: "MultiPolygon", value: value, coordinates: polygons }; } // Marching squares with isolines stitched into rings. // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js function isorings(values, value, callback) { var fragmentByStart = new Array, fragmentByEnd = new Array, x, y, t0, t1, t2, t3; // Special case for the first row (y = -1, t2 = t3 = 0). x = y = -1; t1 = values[0] >= value; cases[t1 << 1].forEach(stitch); while (++x < dx - 1) { t0 = t1, t1 = values[x + 1] >= value; cases[t0 | t1 << 1].forEach(stitch); } cases[t1 << 0].forEach(stitch); // General case for the intermediate rows. while (++y < dy - 1) { x = -1; t1 = values[y * dx + dx] >= value; t2 = values[y * dx] >= value; cases[t1 << 1 | t2 << 2].forEach(stitch); while (++x < dx - 1) { t0 = t1, t1 = values[y * dx + dx + x + 1] >= value; t3 = t2, t2 = values[y * dx + x + 1] >= value; cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch); } cases[t1 | t2 << 3].forEach(stitch); } // Special case for the last row (y = dy - 1, t0 = t1 = 0). x = -1; t2 = values[y * dx] >= value; cases[t2 << 2].forEach(stitch); while (++x < dx - 1) { t3 = t2, t2 = values[y * dx + x + 1] >= value; cases[t2 << 2 | t3 << 3].forEach(stitch); } cases[t2 << 3].forEach(stitch); function stitch(line) { var start = [line[0][0] + x, line[0][1] + y], end = [line[1][0] + x, line[1][1] + y], startIndex = index(start), endIndex = index(end), f, g; if (f = fragmentByEnd[startIndex]) { if (g = fragmentByStart[endIndex]) { delete fragmentByEnd[f.end]; delete fragmentByStart[g.start]; if (f === g) { f.ring.push(end); callback(f.ring); } else { fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)}; } } else { delete fragmentByEnd[f.end]; f.ring.push(end); fragmentByEnd[f.end = endIndex] = f; } } else if (f = fragmentByStart[endIndex]) { if (g = fragmentByEnd[startIndex]) { delete fragmentByStart[f.start]; delete fragmentByEnd[g.end]; if (f === g) { f.ring.push(end); callback(f.ring); } else { fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)}; } } else { delete fragmentByStart[f.start]; f.ring.unshift(start); fragmentByStart[f.start = startIndex] = f; } } else { fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]}; } } } function index(point) { return point[0] * 2 + point[1] * (dx + 1) * 4; } function smoothLinear(ring, values, value) { ring.forEach(function(point) { var x = point[0], y = point[1], xt = x | 0, yt = y | 0, v0, v1 = values[yt * dx + xt]; if (x > 0 && x < dx && xt === x) { v0 = values[yt * dx + xt - 1]; point[0] = x + (value - v0) / (v1 - v0) - 0.5; } if (y > 0 && y < dy && yt === y) { v0 = values[(yt - 1) * dx + xt]; point[1] = y + (value - v0) / (v1 - v0) - 0.5; } }); } contours.contour = contour; contours.size = function(_) { if (!arguments.length) return [dx, dy]; var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]); if (!(_0 > 0) || !(_1 > 0)) throw new Error("invalid size"); return dx = _0, dy = _1, contours; }; contours.thresholds = function(_) { return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$6(slice$3.call(_)) : constant$6(_), contours) : threshold; }; contours.smooth = function(_) { return arguments.length ? (smooth = _ ? smoothLinear : noop$1, contours) : smooth === smoothLinear; }; return contours; } // TODO Optimize edge cases. // TODO Optimize index calculation. // TODO Optimize arguments. function blurX(source, target, r) { var n = source.width, m = source.height, w = (r << 1) + 1; for (var j = 0; j < m; ++j) { for (var i = 0, sr = 0; i < n + r; ++i) { if (i < n) { sr += source.data[i + j * n]; } if (i >= r) { if (i >= w) { sr -= source.data[i - w + j * n]; } target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w); } } } } // TODO Optimize edge cases. // TODO Optimize index calculation. // TODO Optimize arguments. function blurY(source, target, r) { var n = source.width, m = source.height, w = (r << 1) + 1; for (var i = 0; i < n; ++i) { for (var j = 0, sr = 0; j < m + r; ++j) { if (j < m) { sr += source.data[i + j * n]; } if (j >= r) { if (j >= w) { sr -= source.data[i + (j - w) * n]; } target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w); } } } } function defaultX(d) { return d[0]; } function defaultY(d) { return d[1]; } function defaultWeight() { return 1; } function density() { var x = defaultX, y = defaultY, weight = defaultWeight, dx = 960, dy = 500, r = 20, // blur radius k = 2, // log2(grid cell size) o = r * 3, // grid offset, to pad for blur n = (dx + o * 2) >> k, // grid width m = (dy + o * 2) >> k, // grid height threshold = constant$6(20); function density(data) { var values0 = new Float32Array(n * m), values1 = new Float32Array(n * m); data.forEach(function(d, i, data) { var xi = (+x(d, i, data) + o) >> k, yi = (+y(d, i, data) + o) >> k, wi = +weight(d, i, data); if (xi >= 0 && xi < n && yi >= 0 && yi < m) { values0[xi + yi * n] += wi; } }); // TODO Optimize. blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k); blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k); blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k); blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k); blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k); blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k); var tz = threshold(values0); // Convert number of thresholds into uniform thresholds. if (!Array.isArray(tz)) { var stop = max(values0); tz = tickStep(0, stop, tz); tz = sequence(0, Math.floor(stop / tz) * tz, tz); tz.shift(); } return contours() .thresholds(tz) .size([n, m]) (values0) .map(transform); } function transform(geometry) { geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel. geometry.coordinates.forEach(transformPolygon); return geometry; } function transformPolygon(coordinates) { coordinates.forEach(transformRing); } function transformRing(coordinates) { coordinates.forEach(transformPoint); } // TODO Optimize. function transformPoint(coordinates) { coordinates[0] = coordinates[0] * Math.pow(2, k) - o; coordinates[1] = coordinates[1] * Math.pow(2, k) - o; } function resize() { o = r * 3; n = (dx + o * 2) >> k; m = (dy + o * 2) >> k; return density; } density.x = function(_) { return arguments.length ? (x = typeof _ === "function" ? _ : constant$6(+_), density) : x; }; density.y = function(_) { return arguments.length ? (y = typeof _ === "function" ? _ : constant$6(+_), density) : y; }; density.weight = function(_) { return arguments.length ? (weight = typeof _ === "function" ? _ : constant$6(+_), density) : weight; }; density.size = function(_) { if (!arguments.length) return [dx, dy]; var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]); if (!(_0 >= 0) && !(_0 >= 0)) throw new Error("invalid size"); return dx = _0, dy = _1, resize(); }; density.cellSize = function(_) { if (!arguments.length) return 1 << k; if (!((_ = +_) >= 1)) throw new Error("invalid cell size"); return k = Math.floor(Math.log(_) / Math.LN2), resize(); }; density.thresholds = function(_) { return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$6(slice$3.call(_)) : constant$6(_), density) : threshold; }; density.bandwidth = function(_) { if (!arguments.length) return Math.sqrt(r * (r + 1)); if (!((_ = +_) >= 0)) throw new Error("invalid bandwidth"); return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize(); }; return density; } var EOL = {}, EOF = {}, QUOTE = 34, NEWLINE = 10, RETURN = 13; function objectConverter(columns) { return new Function("d", "return {" + columns.map(function(name, i) { return JSON.stringify(name) + ": d[" + i + "] || \"\""; }).join(",") + "}"); } function customConverter(columns, f) { var object = objectConverter(columns); return function(row, i) { return f(object(row), i, columns); }; } // Compute unique columns in order of discovery. function inferColumns(rows) { var columnSet = Object.create(null), columns = []; rows.forEach(function(row) { for (var column in row) { if (!(column in columnSet)) { columns.push(columnSet[column] = column); } } }); return columns; } function pad(value, width) { var s = value + "", length = s.length; return length < width ? new Array(width - length + 1).join(0) + s : s; } function formatYear(year) { return year < 0 ? "-" + pad(-year, 6) : year > 9999 ? "+" + pad(year, 6) : pad(year, 4); } function formatDate(date) { var hours = date.getUTCHours(), minutes = date.getUTCMinutes(), seconds = date.getUTCSeconds(), milliseconds = date.getUTCMilliseconds(); return isNaN(date) ? "Invalid Date" : formatYear(date.getUTCFullYear()) + "-" + pad(date.getUTCMonth() + 1, 2) + "-" + pad(date.getUTCDate(), 2) + (milliseconds ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + ":" + pad(seconds, 2) + "." + pad(milliseconds, 3) + "Z" : seconds ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + ":" + pad(seconds, 2) + "Z" : minutes || hours ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + "Z" : ""); } function dsvFormat(delimiter) { var reFormat = new RegExp("[\"" + delimiter + "\n\r]"), DELIMITER = delimiter.charCodeAt(0); function parse(text, f) { var convert, columns, rows = parseRows(text, function(row, i) { if (convert) return convert(row, i - 1); columns = row, convert = f ? customConverter(row, f) : objectConverter(row); }); rows.columns = columns || []; return rows; } function parseRows(text, f) { var rows = [], // output rows N = text.length, I = 0, // current character index n = 0, // current line number t, // current token eof = N <= 0, // current token followed by EOF? eol = false; // current token followed by EOL? // Strip the trailing newline. if (text.charCodeAt(N - 1) === NEWLINE) --N; if (text.charCodeAt(N - 1) === RETURN) --N; function token() { if (eof) return EOF; if (eol) return eol = false, EOL; // Unescape quotes. var i, j = I, c; if (text.charCodeAt(j) === QUOTE) { while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE); if ((i = I) >= N) eof = true; else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true; else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; } return text.slice(j + 1, i - 1).replace(/""/g, "\""); } // Find next delimiter or newline. while (I < N) { if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true; else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; } else if (c !== DELIMITER) continue; return text.slice(j, i); } // Return last token before EOF. return eof = true, text.slice(j, N); } while ((t = token()) !== EOF) { var row = []; while (t !== EOL && t !== EOF) row.push(t), t = token(); if (f && (row = f(row, n++)) == null) continue; rows.push(row); } return rows; } function preformatBody(rows, columns) { return rows.map(function(row) { return columns.map(function(column) { return formatValue(row[column]); }).join(delimiter); }); } function format(rows, columns) { if (columns == null) columns = inferColumns(rows); return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join("\n"); } function formatBody(rows, columns) { if (columns == null) columns = inferColumns(rows); return preformatBody(rows, columns).join("\n"); } function formatRows(rows) { return rows.map(formatRow).join("\n"); } function formatRow(row) { return row.map(formatValue).join(delimiter); } function formatValue(value) { return value == null ? "" : value instanceof Date ? formatDate(value) : reFormat.test(value += "") ? "\"" + value.replace(/"/g, "\"\"") + "\"" : value; } return { parse: parse, parseRows: parseRows, format: format, formatBody: formatBody, formatRows: formatRows, formatRow: formatRow, formatValue: formatValue }; } var csv = dsvFormat(","); var csvParse = csv.parse; var csvParseRows = csv.parseRows; var csvFormat = csv.format; var csvFormatBody = csv.formatBody; var csvFormatRows = csv.formatRows; var csvFormatRow = csv.formatRow; var csvFormatValue = csv.formatValue; var tsv = dsvFormat("\t"); var tsvParse = tsv.parse; var tsvParseRows = tsv.parseRows; var tsvFormat = tsv.format; var tsvFormatBody = tsv.formatBody; var tsvFormatRows = tsv.formatRows; var tsvFormatRow = tsv.formatRow; var tsvFormatValue = tsv.formatValue; function autoType(object) { for (var key in object) { var value = object[key].trim(), number, m; if (!value) value = null; else if (value === "true") value = true; else if (value === "false") value = false; else if (value === "NaN") value = NaN; else if (!isNaN(number = +value)) value = number; else if (m = value.match(/^([-+]\d{2})?\d{4}(-\d{2}(-\d{2})?)?(T\d{2}:\d{2}(:\d{2}(\.\d{3})?)?(Z|[-+]\d{2}:\d{2})?)?$/)) { if (fixtz && !!m[4] && !m[7]) value = value.replace(/-/g, "/").replace(/T/, " "); value = new Date(value); } else continue; object[key] = value; } return object; } // https://github.com/d3/d3-dsv/issues/45 var fixtz = new Date("2019-01-01T00:00").getHours() || new Date("2019-07-01T00:00").getHours(); function responseBlob(response) { if (!response.ok) throw new Error(response.status + " " + response.statusText); return response.blob(); } function blob(input, init) { return fetch(input, init).then(responseBlob); } function responseArrayBuffer(response) { if (!response.ok) throw new Error(response.status + " " + response.statusText); return response.arrayBuffer(); } function buffer(input, init) { return fetch(input, init).then(responseArrayBuffer); } function responseText(response) { if (!response.ok) throw new Error(response.status + " " + response.statusText); return response.text(); } function text(input, init) { return fetch(input, init).then(responseText); } function dsvParse(parse) { return function(input, init, row) { if (arguments.length === 2 && typeof init === "function") row = init, init = undefined; return text(input, init).then(function(response) { return parse(response, row); }); }; } function dsv(delimiter, input, init, row) { if (arguments.length === 3 && typeof init === "function") row = init, init = undefined; var format = dsvFormat(delimiter); return text(input, init).then(function(response) { return format.parse(response, row); }); } var csv$1 = dsvParse(csvParse); var tsv$1 = dsvParse(tsvParse); function image(input, init) { return new Promise(function(resolve, reject) { var image = new Image; for (var key in init) image[key] = init[key]; image.onerror = reject; image.onload = function() { resolve(image); }; image.src = input; }); } function responseJson(response) { if (!response.ok) throw new Error(response.status + " " + response.statusText); return response.json(); } function json(input, init) { return fetch(input, init).then(responseJson); } function parser(type) { return function(input, init) { return text(input, init).then(function(text) { return (new DOMParser).parseFromString(text, type); }); }; } var xml = parser("application/xml"); var html = parser("text/html"); var svg = parser("image/svg+xml"); function center$1(x, y) { var nodes; if (x == null) x = 0; if (y == null) y = 0; function force() { var i, n = nodes.length, node, sx = 0, sy = 0; for (i = 0; i < n; ++i) { node = nodes[i], sx += node.x, sy += node.y; } for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) { node = nodes[i], node.x -= sx, node.y -= sy; } } force.initialize = function(_) { nodes = _; }; force.x = function(_) { return arguments.length ? (x = +_, force) : x; }; force.y = function(_) { return arguments.length ? (y = +_, force) : y; }; return force; } function constant$7(x) { return function() { return x; }; } function jiggle() { return (Math.random() - 0.5) * 1e-6; } function tree_add(d) { var x = +this._x.call(null, d), y = +this._y.call(null, d); return add(this.cover(x, y), x, y, d); } function add(tree, x, y, d) { if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points var parent, node = tree._root, leaf = {data: d}, x0 = tree._x0, y0 = tree._y0, x1 = tree._x1, y1 = tree._y1, xm, ym, xp, yp, right, bottom, i, j; // If the tree is empty, initialize the root as a leaf. if (!node) return tree._root = leaf, tree; // Find the existing leaf for the new point, or add it. while (node.length) { if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree; } // Is the new point is exactly coincident with the existing point? xp = +tree._x.call(null, node.data); yp = +tree._y.call(null, node.data); if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; // Otherwise, split the leaf node until the old and new point are separated. do { parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4); if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm))); return parent[j] = node, parent[i] = leaf, tree; } function addAll(data) { var d, i, n = data.length, x, y, xz = new Array(n), yz = new Array(n), x0 = Infinity, y0 = Infinity, x1 = -Infinity, y1 = -Infinity; // Compute the points and their extent. for (i = 0; i < n; ++i) { if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue; xz[i] = x; yz[i] = y; if (x < x0) x0 = x; if (x > x1) x1 = x; if (y < y0) y0 = y; if (y > y1) y1 = y; } // If there were no (valid) points, abort. if (x0 > x1 || y0 > y1) return this; // Expand the tree to cover the new points. this.cover(x0, y0).cover(x1, y1); // Add the new points. for (i = 0; i < n; ++i) { add(this, xz[i], yz[i], data[i]); } return this; } function tree_cover(x, y) { if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points var x0 = this._x0, y0 = this._y0, x1 = this._x1, y1 = this._y1; // If the quadtree has no extent, initialize them. // Integer extent are necessary so that if we later double the extent, // the existing quadrant boundaries don’t change due to floating point error! if (isNaN(x0)) { x1 = (x0 = Math.floor(x)) + 1; y1 = (y0 = Math.floor(y)) + 1; } // Otherwise, double repeatedly to cover. else { var z = x1 - x0, node = this._root, parent, i; while (x0 > x || x >= x1 || y0 > y || y >= y1) { i = (y < y0) << 1 | (x < x0); parent = new Array(4), parent[i] = node, node = parent, z *= 2; switch (i) { case 0: x1 = x0 + z, y1 = y0 + z; break; case 1: x0 = x1 - z, y1 = y0 + z; break; case 2: x1 = x0 + z, y0 = y1 - z; break; case 3: x0 = x1 - z, y0 = y1 - z; break; } } if (this._root && this._root.length) this._root = node; } this._x0 = x0; this._y0 = y0; this._x1 = x1; this._y1 = y1; return this; } function tree_data() { var data = []; this.visit(function(node) { if (!node.length) do data.push(node.data); while (node = node.next) }); return data; } function tree_extent(_) { return arguments.length ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1]) : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]]; } function Quad(node, x0, y0, x1, y1) { this.node = node; this.x0 = x0; this.y0 = y0; this.x1 = x1; this.y1 = y1; } function tree_find(x, y, radius) { var data, x0 = this._x0, y0 = this._y0, x1, y1, x2, y2, x3 = this._x1, y3 = this._y1, quads = [], node = this._root, q, i; if (node) quads.push(new Quad(node, x0, y0, x3, y3)); if (radius == null) radius = Infinity; else { x0 = x - radius, y0 = y - radius; x3 = x + radius, y3 = y + radius; radius *= radius; } while (q = quads.pop()) { // Stop searching if this quadrant can’t contain a closer node. if (!(node = q.node) || (x1 = q.x0) > x3 || (y1 = q.y0) > y3 || (x2 = q.x1) < x0 || (y2 = q.y1) < y0) continue; // Bisect the current quadrant. if (node.length) { var xm = (x1 + x2) / 2, ym = (y1 + y2) / 2; quads.push( new Quad(node[3], xm, ym, x2, y2), new Quad(node[2], x1, ym, xm, y2), new Quad(node[1], xm, y1, x2, ym), new Quad(node[0], x1, y1, xm, ym) ); // Visit the closest quadrant first. if (i = (y >= ym) << 1 | (x >= xm)) { q = quads[quads.length - 1]; quads[quads.length - 1] = quads[quads.length - 1 - i]; quads[quads.length - 1 - i] = q; } } // Visit this point. (Visiting coincident points isn’t necessary!) else { var dx = x - +this._x.call(null, node.data), dy = y - +this._y.call(null, node.data), d2 = dx * dx + dy * dy; if (d2 < radius) { var d = Math.sqrt(radius = d2); x0 = x - d, y0 = y - d; x3 = x + d, y3 = y + d; data = node.data; } } } return data; } function tree_remove(d) { if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points var parent, node = this._root, retainer, previous, next, x0 = this._x0, y0 = this._y0, x1 = this._x1, y1 = this._y1, x, y, xm, ym, right, bottom, i, j; // If the tree is empty, initialize the root as a leaf. if (!node) return this; // Find the leaf node for the point. // While descending, also retain the deepest parent with a non-removed sibling. if (node.length) while (true) { if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; if (!(parent = node, node = node[i = bottom << 1 | right])) return this; if (!node.length) break; if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i; } // Find the point to remove. while (node.data !== d) if (!(previous = node, node = node.next)) return this; if (next = node.next) delete node.next; // If there are multiple coincident points, remove just the point. if (previous) return (next ? previous.next = next : delete previous.next), this; // If this is the root point, remove it. if (!parent) return this._root = next, this; // Remove this leaf. next ? parent[i] = next : delete parent[i]; // If the parent now contains exactly one leaf, collapse superfluous parents. if ((node = parent[0] || parent[1] || parent[2] || parent[3]) && node === (parent[3] || parent[2] || parent[1] || parent[0]) && !node.length) { if (retainer) retainer[j] = node; else this._root = node; } return this; } function removeAll(data) { for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]); return this; } function tree_root() { return this._root; } function tree_size() { var size = 0; this.visit(function(node) { if (!node.length) do ++size; while (node = node.next) }); return size; } function tree_visit(callback) { var quads = [], q, node = this._root, child, x0, y0, x1, y1; if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1)); while (q = quads.pop()) { if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) { var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1)); if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1)); if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym)); if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym)); } } return this; } function tree_visitAfter(callback) { var quads = [], next = [], q; if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1)); while (q = quads.pop()) { var node = q.node; if (node.length) { var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym)); if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym)); if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1)); if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1)); } next.push(q); } while (q = next.pop()) { callback(q.node, q.x0, q.y0, q.x1, q.y1); } return this; } function defaultX$1(d) { return d[0]; } function tree_x(_) { return arguments.length ? (this._x = _, this) : this._x; } function defaultY$1(d) { return d[1]; } function tree_y(_) { return arguments.length ? (this._y = _, this) : this._y; } function quadtree(nodes, x, y) { var tree = new Quadtree(x == null ? defaultX$1 : x, y == null ? defaultY$1 : y, NaN, NaN, NaN, NaN); return nodes == null ? tree : tree.addAll(nodes); } function Quadtree(x, y, x0, y0, x1, y1) { this._x = x; this._y = y; this._x0 = x0; this._y0 = y0; this._x1 = x1; this._y1 = y1; this._root = undefined; } function leaf_copy(leaf) { var copy = {data: leaf.data}, next = copy; while (leaf = leaf.next) next = next.next = {data: leaf.data}; return copy; } var treeProto = quadtree.prototype = Quadtree.prototype; treeProto.copy = function() { var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1), node = this._root, nodes, child; if (!node) return copy; if (!node.length) return copy._root = leaf_copy(node), copy; nodes = [{source: node, target: copy._root = new Array(4)}]; while (node = nodes.pop()) { for (var i = 0; i < 4; ++i) { if (child = node.source[i]) { if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)}); else node.target[i] = leaf_copy(child); } } } return copy; }; treeProto.add = tree_add; treeProto.addAll = addAll; treeProto.cover = tree_cover; treeProto.data = tree_data; treeProto.extent = tree_extent; treeProto.find = tree_find; treeProto.remove = tree_remove; treeProto.removeAll = removeAll; treeProto.root = tree_root; treeProto.size = tree_size; treeProto.visit = tree_visit; treeProto.visitAfter = tree_visitAfter; treeProto.x = tree_x; treeProto.y = tree_y; function x(d) { return d.x + d.vx; } function y(d) { return d.y + d.vy; } function collide(radius) { var nodes, radii, strength = 1, iterations = 1; if (typeof radius !== "function") radius = constant$7(radius == null ? 1 : +radius); function force() { var i, n = nodes.length, tree, node, xi, yi, ri, ri2; for (var k = 0; k < iterations; ++k) { tree = quadtree(nodes, x, y).visitAfter(prepare); for (i = 0; i < n; ++i) { node = nodes[i]; ri = radii[node.index], ri2 = ri * ri; xi = node.x + node.vx; yi = node.y + node.vy; tree.visit(apply); } } function apply(quad, x0, y0, x1, y1) { var data = quad.data, rj = quad.r, r = ri + rj; if (data) { if (data.index > node.index) { var x = xi - data.x - data.vx, y = yi - data.y - data.vy, l = x * x + y * y; if (l < r * r) { if (x === 0) x = jiggle(), l += x * x; if (y === 0) y = jiggle(), l += y * y; l = (r - (l = Math.sqrt(l))) / l * strength; node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj)); node.vy += (y *= l) * r; data.vx -= x * (r = 1 - r); data.vy -= y * r; } } return; } return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r; } } function prepare(quad) { if (quad.data) return quad.r = radii[quad.data.index]; for (var i = quad.r = 0; i < 4; ++i) { if (quad[i] && quad[i].r > quad.r) { quad.r = quad[i].r; } } } function initialize() { if (!nodes) return; var i, n = nodes.length, node; radii = new Array(n); for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes); } force.initialize = function(_) { nodes = _; initialize(); }; force.iterations = function(_) { return arguments.length ? (iterations = +_, force) : iterations; }; force.strength = function(_) { return arguments.length ? (strength = +_, force) : strength; }; force.radius = function(_) { return arguments.length ? (radius = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : radius; }; return force; } function index(d) { return d.index; } function find(nodeById, nodeId) { var node = nodeById.get(nodeId); if (!node) throw new Error("missing: " + nodeId); return node; } function link(links) { var id = index, strength = defaultStrength, strengths, distance = constant$7(30), distances, nodes, count, bias, iterations = 1; if (links == null) links = []; function defaultStrength(link) { return 1 / Math.min(count[link.source.index], count[link.target.index]); } function force(alpha) { for (var k = 0, n = links.length; k < iterations; ++k) { for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) { link = links[i], source = link.source, target = link.target; x = target.x + target.vx - source.x - source.vx || jiggle(); y = target.y + target.vy - source.y - source.vy || jiggle(); l = Math.sqrt(x * x + y * y); l = (l - distances[i]) / l * alpha * strengths[i]; x *= l, y *= l; target.vx -= x * (b = bias[i]); target.vy -= y * b; source.vx += x * (b = 1 - b); source.vy += y * b; } } } function initialize() { if (!nodes) return; var i, n = nodes.length, m = links.length, nodeById = map$1(nodes, id), link; for (i = 0, count = new Array(n); i < m; ++i) { link = links[i], link.index = i; if (typeof link.source !== "object") link.source = find(nodeById, link.source); if (typeof link.target !== "object") link.target = find(nodeById, link.target); count[link.source.index] = (count[link.source.index] || 0) + 1; count[link.target.index] = (count[link.target.index] || 0) + 1; } for (i = 0, bias = new Array(m); i < m; ++i) { link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]); } strengths = new Array(m), initializeStrength(); distances = new Array(m), initializeDistance(); } function initializeStrength() { if (!nodes) return; for (var i = 0, n = links.length; i < n; ++i) { strengths[i] = +strength(links[i], i, links); } } function initializeDistance() { if (!nodes) return; for (var i = 0, n = links.length; i < n; ++i) { distances[i] = +distance(links[i], i, links); } } force.initialize = function(_) { nodes = _; initialize(); }; force.links = function(_) { return arguments.length ? (links = _, initialize(), force) : links; }; force.id = function(_) { return arguments.length ? (id = _, force) : id; }; force.iterations = function(_) { return arguments.length ? (iterations = +_, force) : iterations; }; force.strength = function(_) { return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initializeStrength(), force) : strength; }; force.distance = function(_) { return arguments.length ? (distance = typeof _ === "function" ? _ : constant$7(+_), initializeDistance(), force) : distance; }; return force; } function x$1(d) { return d.x; } function y$1(d) { return d.y; } var initialRadius = 10, initialAngle = Math.PI * (3 - Math.sqrt(5)); function simulation(nodes) { var simulation, alpha = 1, alphaMin = 0.001, alphaDecay = 1 - Math.pow(alphaMin, 1 / 300), alphaTarget = 0, velocityDecay = 0.6, forces = map$1(), stepper = timer(step), event = dispatch("tick", "end"); if (nodes == null) nodes = []; function step() { tick(); event.call("tick", simulation); if (alpha < alphaMin) { stepper.stop(); event.call("end", simulation); } } function tick(iterations) { var i, n = nodes.length, node; if (iterations === undefined) iterations = 1; for (var k = 0; k < iterations; ++k) { alpha += (alphaTarget - alpha) * alphaDecay; forces.each(function (force) { force(alpha); }); for (i = 0; i < n; ++i) { node = nodes[i]; if (node.fx == null) node.x += node.vx *= velocityDecay; else node.x = node.fx, node.vx = 0; if (node.fy == null) node.y += node.vy *= velocityDecay; else node.y = node.fy, node.vy = 0; } } return simulation; } function initializeNodes() { for (var i = 0, n = nodes.length, node; i < n; ++i) { node = nodes[i], node.index = i; if (node.fx != null) node.x = node.fx; if (node.fy != null) node.y = node.fy; if (isNaN(node.x) || isNaN(node.y)) { var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle; node.x = radius * Math.cos(angle); node.y = radius * Math.sin(angle); } if (isNaN(node.vx) || isNaN(node.vy)) { node.vx = node.vy = 0; } } } function initializeForce(force) { if (force.initialize) force.initialize(nodes); return force; } initializeNodes(); return simulation = { tick: tick, restart: function() { return stepper.restart(step), simulation; }, stop: function() { return stepper.stop(), simulation; }, nodes: function(_) { return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes; }, alpha: function(_) { return arguments.length ? (alpha = +_, simulation) : alpha; }, alphaMin: function(_) { return arguments.length ? (alphaMin = +_, simulation) : alphaMin; }, alphaDecay: function(_) { return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay; }, alphaTarget: function(_) { return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget; }, velocityDecay: function(_) { return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay; }, force: function(name, _) { return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name); }, find: function(x, y, radius) { var i = 0, n = nodes.length, dx, dy, d2, node, closest; if (radius == null) radius = Infinity; else radius *= radius; for (i = 0; i < n; ++i) { node = nodes[i]; dx = x - node.x; dy = y - node.y; d2 = dx * dx + dy * dy; if (d2 < radius) closest = node, radius = d2; } return closest; }, on: function(name, _) { return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name); } }; } function manyBody() { var nodes, node, alpha, strength = constant$7(-30), strengths, distanceMin2 = 1, distanceMax2 = Infinity, theta2 = 0.81; function force(_) { var i, n = nodes.length, tree = quadtree(nodes, x$1, y$1).visitAfter(accumulate); for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply); } function initialize() { if (!nodes) return; var i, n = nodes.length, node; strengths = new Array(n); for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes); } function accumulate(quad) { var strength = 0, q, c, weight = 0, x, y, i; // For internal nodes, accumulate forces from child quadrants. if (quad.length) { for (x = y = i = 0; i < 4; ++i) { if ((q = quad[i]) && (c = Math.abs(q.value))) { strength += q.value, weight += c, x += c * q.x, y += c * q.y; } } quad.x = x / weight; quad.y = y / weight; } // For leaf nodes, accumulate forces from coincident quadrants. else { q = quad; q.x = q.data.x; q.y = q.data.y; do strength += strengths[q.data.index]; while (q = q.next); } quad.value = strength; } function apply(quad, x1, _, x2) { if (!quad.value) return true; var x = quad.x - node.x, y = quad.y - node.y, w = x2 - x1, l = x * x + y * y; // Apply the Barnes-Hut approximation if possible. // Limit forces for very close nodes; randomize direction if coincident. if (w * w / theta2 < l) { if (l < distanceMax2) { if (x === 0) x = jiggle(), l += x * x; if (y === 0) y = jiggle(), l += y * y; if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); node.vx += x * quad.value * alpha / l; node.vy += y * quad.value * alpha / l; } return true; } // Otherwise, process points directly. else if (quad.length || l >= distanceMax2) return; // Limit forces for very close nodes; randomize direction if coincident. if (quad.data !== node || quad.next) { if (x === 0) x = jiggle(), l += x * x; if (y === 0) y = jiggle(), l += y * y; if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); } do if (quad.data !== node) { w = strengths[quad.data.index] * alpha / l; node.vx += x * w; node.vy += y * w; } while (quad = quad.next); } force.initialize = function(_) { nodes = _; initialize(); }; force.strength = function(_) { return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength; }; force.distanceMin = function(_) { return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2); }; force.distanceMax = function(_) { return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2); }; force.theta = function(_) { return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2); }; return force; } function radial(radius, x, y) { var nodes, strength = constant$7(0.1), strengths, radiuses; if (typeof radius !== "function") radius = constant$7(+radius); if (x == null) x = 0; if (y == null) y = 0; function force(alpha) { for (var i = 0, n = nodes.length; i < n; ++i) { var node = nodes[i], dx = node.x - x || 1e-6, dy = node.y - y || 1e-6, r = Math.sqrt(dx * dx + dy * dy), k = (radiuses[i] - r) * strengths[i] * alpha / r; node.vx += dx * k; node.vy += dy * k; } } function initialize() { if (!nodes) return; var i, n = nodes.length; strengths = new Array(n); radiuses = new Array(n); for (i = 0; i < n; ++i) { radiuses[i] = +radius(nodes[i], i, nodes); strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes); } } force.initialize = function(_) { nodes = _, initialize(); }; force.strength = function(_) { return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength; }; force.radius = function(_) { return arguments.length ? (radius = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : radius; }; force.x = function(_) { return arguments.length ? (x = +_, force) : x; }; force.y = function(_) { return arguments.length ? (y = +_, force) : y; }; return force; } function x$2(x) { var strength = constant$7(0.1), nodes, strengths, xz; if (typeof x !== "function") x = constant$7(x == null ? 0 : +x); function force(alpha) { for (var i = 0, n = nodes.length, node; i < n; ++i) { node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha; } } function initialize() { if (!nodes) return; var i, n = nodes.length; strengths = new Array(n); xz = new Array(n); for (i = 0; i < n; ++i) { strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); } } force.initialize = function(_) { nodes = _; initialize(); }; force.strength = function(_) { return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength; }; force.x = function(_) { return arguments.length ? (x = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : x; }; return force; } function y$2(y) { var strength = constant$7(0.1), nodes, strengths, yz; if (typeof y !== "function") y = constant$7(y == null ? 0 : +y); function force(alpha) { for (var i = 0, n = nodes.length, node; i < n; ++i) { node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha; } } function initialize() { if (!nodes) return; var i, n = nodes.length; strengths = new Array(n); yz = new Array(n); for (i = 0; i < n; ++i) { strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); } } force.initialize = function(_) { nodes = _; initialize(); }; force.strength = function(_) { return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength; }; force.y = function(_) { return arguments.length ? (y = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : y; }; return force; } // Computes the decimal coefficient and exponent of the specified number x with // significant digits p, where x is positive and p is in [1, 21] or undefined. // For example, formatDecimal(1.23) returns ["123", 0]. function formatDecimal(x, p) { if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity var i, coefficient = x.slice(0, i); // The string returned by toExponential either has the form \d\.\d+e[-+]\d+ // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3). return [ coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, +x.slice(i + 1) ]; } function exponent$1(x) { return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN; } function formatGroup(grouping, thousands) { return function(value, width) { var i = value.length, t = [], j = 0, g = grouping[0], length = 0; while (i > 0 && g > 0) { if (length + g + 1 > width) g = Math.max(1, width - length); t.push(value.substring(i -= g, i + g)); if ((length += g + 1) > width) break; g = grouping[j = (j + 1) % grouping.length]; } return t.reverse().join(thousands); }; } function formatNumerals(numerals) { return function(value) { return value.replace(/[0-9]/g, function(i) { return numerals[+i]; }); }; } // [[fill]align][sign][symbol][0][width][,][.precision][~][type] var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i; function formatSpecifier(specifier) { if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier); var match; return new FormatSpecifier({ fill: match[1], align: match[2], sign: match[3], symbol: match[4], zero: match[5], width: match[6], comma: match[7], precision: match[8] && match[8].slice(1), trim: match[9], type: match[10] }); } formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof function FormatSpecifier(specifier) { this.fill = specifier.fill === undefined ? " " : specifier.fill + ""; this.align = specifier.align === undefined ? ">" : specifier.align + ""; this.sign = specifier.sign === undefined ? "-" : specifier.sign + ""; this.symbol = specifier.symbol === undefined ? "" : specifier.symbol + ""; this.zero = !!specifier.zero; this.width = specifier.width === undefined ? undefined : +specifier.width; this.comma = !!specifier.comma; this.precision = specifier.precision === undefined ? undefined : +specifier.precision; this.trim = !!specifier.trim; this.type = specifier.type === undefined ? "" : specifier.type + ""; } FormatSpecifier.prototype.toString = function() { return this.fill + this.align + this.sign + this.symbol + (this.zero ? "0" : "") + (this.width === undefined ? "" : Math.max(1, this.width | 0)) + (this.comma ? "," : "") + (this.precision === undefined ? "" : "." + Math.max(0, this.precision | 0)) + (this.trim ? "~" : "") + this.type; }; // Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k. function formatTrim(s) { out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) { switch (s[i]) { case ".": i0 = i1 = i; break; case "0": if (i0 === 0) i0 = i; i1 = i; break; default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break; } } return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s; } var prefixExponent; function formatPrefixAuto(x, p) { var d = formatDecimal(x, p); if (!d) return x + ""; var coefficient = d[0], exponent = d[1], i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1, n = coefficient.length; return i === n ? coefficient : i > n ? coefficient + new Array(i - n + 1).join("0") : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i) : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y! } function formatRounded(x, p) { var d = formatDecimal(x, p); if (!d) return x + ""; var coefficient = d[0], exponent = d[1]; return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1) : coefficient + new Array(exponent - coefficient.length + 2).join("0"); } var formatTypes = { "%": function(x, p) { return (x * 100).toFixed(p); }, "b": function(x) { return Math.round(x).toString(2); }, "c": function(x) { return x + ""; }, "d": function(x) { return Math.round(x).toString(10); }, "e": function(x, p) { return x.toExponential(p); }, "f": function(x, p) { return x.toFixed(p); }, "g": function(x, p) { return x.toPrecision(p); }, "o": function(x) { return Math.round(x).toString(8); }, "p": function(x, p) { return formatRounded(x * 100, p); }, "r": formatRounded, "s": formatPrefixAuto, "X": function(x) { return Math.round(x).toString(16).toUpperCase(); }, "x": function(x) { return Math.round(x).toString(16); } }; function identity$3(x) { return x; } var map$2 = Array.prototype.map, prefixes = ["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"]; function formatLocale(locale) { var group = locale.grouping === undefined || locale.thousands === undefined ? identity$3 : formatGroup(map$2.call(locale.grouping, Number), locale.thousands + ""), currencyPrefix = locale.currency === undefined ? "" : locale.currency[0] + "", currencySuffix = locale.currency === undefined ? "" : locale.currency[1] + "", decimal = locale.decimal === undefined ? "." : locale.decimal + "", numerals = locale.numerals === undefined ? identity$3 : formatNumerals(map$2.call(locale.numerals, String)), percent = locale.percent === undefined ? "%" : locale.percent + "", minus = locale.minus === undefined ? "-" : locale.minus + "", nan = locale.nan === undefined ? "NaN" : locale.nan + ""; function newFormat(specifier) { specifier = formatSpecifier(specifier); var fill = specifier.fill, align = specifier.align, sign = specifier.sign, symbol = specifier.symbol, zero = specifier.zero, width = specifier.width, comma = specifier.comma, precision = specifier.precision, trim = specifier.trim, type = specifier.type; // The "n" type is an alias for ",g". if (type === "n") comma = true, type = "g"; // The "" type, and any invalid type, is an alias for ".12~g". else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = "g"; // If zero fill is specified, padding goes after sign and before digits. if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "="; // Compute the prefix and suffix. // For SI-prefix, the suffix is lazily computed. var prefix = symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "", suffix = symbol === "$" ? currencySuffix : /[%p]/.test(type) ? percent : ""; // What format function should we use? // Is this an integer type? // Can this type generate exponential notation? var formatType = formatTypes[type], maybeSuffix = /[defgprs%]/.test(type); // Set the default precision if not specified, // or clamp the specified precision to the supported range. // For significant precision, it must be in [1, 21]. // For fixed precision, it must be in [0, 20]. precision = precision === undefined ? 6 : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) : Math.max(0, Math.min(20, precision)); function format(value) { var valuePrefix = prefix, valueSuffix = suffix, i, n, c; if (type === "c") { valueSuffix = formatType(value) + valueSuffix; value = ""; } else { value = +value; // Determine the sign. -0 is not less than 0, but 1 / -0 is! var valueNegative = value < 0 || 1 / value < 0; // Perform the initial formatting. value = isNaN(value) ? nan : formatType(Math.abs(value), precision); // Trim insignificant zeros. if (trim) value = formatTrim(value); // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign. if (valueNegative && +value === 0 && sign !== "+") valueNegative = false; // Compute the prefix and suffix. valuePrefix = (valueNegative ? (sign === "(" ? sign : minus) : sign === "-" || sign === "(" ? "" : sign) + valuePrefix; valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : ""); // Break the formatted value into the integer “value” part that can be // grouped, and fractional or exponential “suffix” part that is not. if (maybeSuffix) { i = -1, n = value.length; while (++i < n) { if (c = value.charCodeAt(i), 48 > c || c > 57) { valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix; value = value.slice(0, i); break; } } } } // If the fill character is not "0", grouping is applied before padding. if (comma && !zero) value = group(value, Infinity); // Compute the padding. var length = valuePrefix.length + value.length + valueSuffix.length, padding = length < width ? new Array(width - length + 1).join(fill) : ""; // If the fill character is "0", grouping is applied after padding. if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = ""; // Reconstruct the final output based on the desired alignment. switch (align) { case "<": value = valuePrefix + value + valueSuffix + padding; break; case "=": value = valuePrefix + padding + value + valueSuffix; break; case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break; default: value = padding + valuePrefix + value + valueSuffix; break; } return numerals(value); } format.toString = function() { return specifier + ""; }; return format; } function formatPrefix(specifier, value) { var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)), e = Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3, k = Math.pow(10, -e), prefix = prefixes[8 + e / 3]; return function(value) { return f(k * value) + prefix; }; } return { format: newFormat, formatPrefix: formatPrefix }; } var locale; defaultLocale({ decimal: ".", thousands: ",", grouping: [3], currency: ["$", ""], minus: "-" }); function defaultLocale(definition) { locale = formatLocale(definition); exports.format = locale.format; exports.formatPrefix = locale.formatPrefix; return locale; } function precisionFixed(step) { return Math.max(0, -exponent$1(Math.abs(step))); } function precisionPrefix(step, value) { return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3 - exponent$1(Math.abs(step))); } function precisionRound(step, max) { step = Math.abs(step), max = Math.abs(max) - step; return Math.max(0, exponent$1(max) - exponent$1(step)) + 1; } // Adds floating point numbers with twice the normal precision. // Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and // Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3) // 305–363 (1997). // Code adapted from GeographicLib by Charles F. F. Karney, // http://geographiclib.sourceforge.net/ function adder() { return new Adder; } function Adder() { this.reset(); } Adder.prototype = { constructor: Adder, reset: function() { this.s = // rounded value this.t = 0; // exact error }, add: function(y) { add$1(temp, y, this.t); add$1(this, temp.s, this.s); if (this.s) this.t += temp.t; else this.s = temp.t; }, valueOf: function() { return this.s; } }; var temp = new Adder; function add$1(adder, a, b) { var x = adder.s = a + b, bv = x - a, av = x - bv; adder.t = (a - av) + (b - bv); } var epsilon$2 = 1e-6; var epsilon2$1 = 1e-12; var pi$3 = Math.PI; var halfPi$2 = pi$3 / 2; var quarterPi = pi$3 / 4; var tau$3 = pi$3 * 2; var degrees$1 = 180 / pi$3; var radians = pi$3 / 180; var abs = Math.abs; var atan = Math.atan; var atan2 = Math.atan2; var cos$1 = Math.cos; var ceil = Math.ceil; var exp = Math.exp; var log = Math.log; var pow = Math.pow; var sin$1 = Math.sin; var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; }; var sqrt = Math.sqrt; var tan = Math.tan; function acos(x) { return x > 1 ? 0 : x < -1 ? pi$3 : Math.acos(x); } function asin(x) { return x > 1 ? halfPi$2 : x < -1 ? -halfPi$2 : Math.asin(x); } function haversin(x) { return (x = sin$1(x / 2)) * x; } function noop$2() {} function streamGeometry(geometry, stream) { if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) { streamGeometryType[geometry.type](geometry, stream); } } var streamObjectType = { Feature: function(object, stream) { streamGeometry(object.geometry, stream); }, FeatureCollection: function(object, stream) { var features = object.features, i = -1, n = features.length; while (++i < n) streamGeometry(features[i].geometry, stream); } }; var streamGeometryType = { Sphere: function(object, stream) { stream.sphere(); }, Point: function(object, stream) { object = object.coordinates; stream.point(object[0], object[1], object[2]); }, MultiPoint: function(object, stream) { var coordinates = object.coordinates, i = -1, n = coordinates.length; while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]); }, LineString: function(object, stream) { streamLine(object.coordinates, stream, 0); }, MultiLineString: function(object, stream) { var coordinates = object.coordinates, i = -1, n = coordinates.length; while (++i < n) streamLine(coordinates[i], stream, 0); }, Polygon: function(object, stream) { streamPolygon(object.coordinates, stream); }, MultiPolygon: function(object, stream) { var coordinates = object.coordinates, i = -1, n = coordinates.length; while (++i < n) streamPolygon(coordinates[i], stream); }, GeometryCollection: function(object, stream) { var geometries = object.geometries, i = -1, n = geometries.length; while (++i < n) streamGeometry(geometries[i], stream); } }; function streamLine(coordinates, stream, closed) { var i = -1, n = coordinates.length - closed, coordinate; stream.lineStart(); while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]); stream.lineEnd(); } function streamPolygon(coordinates, stream) { var i = -1, n = coordinates.length; stream.polygonStart(); while (++i < n) streamLine(coordinates[i], stream, 1); stream.polygonEnd(); } function geoStream(object, stream) { if (object && streamObjectType.hasOwnProperty(object.type)) { streamObjectType[object.type](object, stream); } else { streamGeometry(object, stream); } } var areaRingSum = adder(); var areaSum = adder(), lambda00, phi00, lambda0, cosPhi0, sinPhi0; var areaStream = { point: noop$2, lineStart: noop$2, lineEnd: noop$2, polygonStart: function() { areaRingSum.reset(); areaStream.lineStart = areaRingStart; areaStream.lineEnd = areaRingEnd; }, polygonEnd: function() { var areaRing = +areaRingSum; areaSum.add(areaRing < 0 ? tau$3 + areaRing : areaRing); this.lineStart = this.lineEnd = this.point = noop$2; }, sphere: function() { areaSum.add(tau$3); } }; function areaRingStart() { areaStream.point = areaPointFirst; } function areaRingEnd() { areaPoint(lambda00, phi00); } function areaPointFirst(lambda, phi) { areaStream.point = areaPoint; lambda00 = lambda, phi00 = phi; lambda *= radians, phi *= radians; lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi); } function areaPoint(lambda, phi) { lambda *= radians, phi *= radians; phi = phi / 2 + quarterPi; // half the angular distance from south pole // Spherical excess E for a spherical triangle with vertices: south pole, // previous point, current point. Uses a formula derived from Cagnoli’s // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2). var dLambda = lambda - lambda0, sdLambda = dLambda >= 0 ? 1 : -1, adLambda = sdLambda * dLambda, cosPhi = cos$1(phi), sinPhi = sin$1(phi), k = sinPhi0 * sinPhi, u = cosPhi0 * cosPhi + k * cos$1(adLambda), v = k * sdLambda * sin$1(adLambda); areaRingSum.add(atan2(v, u)); // Advance the previous points. lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi; } function area$1(object) { areaSum.reset(); geoStream(object, areaStream); return areaSum * 2; } function spherical(cartesian) { return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])]; } function cartesian(spherical) { var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi); return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)]; } function cartesianDot(a, b) { return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; } function cartesianCross(a, b) { return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]]; } // TODO return a function cartesianAddInPlace(a, b) { a[0] += b[0], a[1] += b[1], a[2] += b[2]; } function cartesianScale(vector, k) { return [vector[0] * k, vector[1] * k, vector[2] * k]; } // TODO return d function cartesianNormalizeInPlace(d) { var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]); d[0] /= l, d[1] /= l, d[2] /= l; } var lambda0$1, phi0, lambda1, phi1, // bounds lambda2, // previous lambda-coordinate lambda00$1, phi00$1, // first point p0, // previous 3D point deltaSum = adder(), ranges, range; var boundsStream = { point: boundsPoint, lineStart: boundsLineStart, lineEnd: boundsLineEnd, polygonStart: function() { boundsStream.point = boundsRingPoint; boundsStream.lineStart = boundsRingStart; boundsStream.lineEnd = boundsRingEnd; deltaSum.reset(); areaStream.polygonStart(); }, polygonEnd: function() { areaStream.polygonEnd(); boundsStream.point = boundsPoint; boundsStream.lineStart = boundsLineStart; boundsStream.lineEnd = boundsLineEnd; if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90); else if (deltaSum > epsilon$2) phi1 = 90; else if (deltaSum < -epsilon$2) phi0 = -90; range[0] = lambda0$1, range[1] = lambda1; }, sphere: function() { lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90); } }; function boundsPoint(lambda, phi) { ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]); if (phi < phi0) phi0 = phi; if (phi > phi1) phi1 = phi; } function linePoint(lambda, phi) { var p = cartesian([lambda * radians, phi * radians]); if (p0) { var normal = cartesianCross(p0, p), equatorial = [normal[1], -normal[0], 0], inflection = cartesianCross(equatorial, normal); cartesianNormalizeInPlace(inflection); inflection = spherical(inflection); var delta = lambda - lambda2, sign = delta > 0 ? 1 : -1, lambdai = inflection[0] * degrees$1 * sign, phii, antimeridian = abs(delta) > 180; if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) { phii = inflection[1] * degrees$1; if (phii > phi1) phi1 = phii; } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) { phii = -inflection[1] * degrees$1; if (phii < phi0) phi0 = phii; } else { if (phi < phi0) phi0 = phi; if (phi > phi1) phi1 = phi; } if (antimeridian) { if (lambda < lambda2) { if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda; } else { if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda; } } else { if (lambda1 >= lambda0$1) { if (lambda < lambda0$1) lambda0$1 = lambda; if (lambda > lambda1) lambda1 = lambda; } else { if (lambda > lambda2) { if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda; } else { if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda; } } } } else { ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]); } if (phi < phi0) phi0 = phi; if (phi > phi1) phi1 = phi; p0 = p, lambda2 = lambda; } function boundsLineStart() { boundsStream.point = linePoint; } function boundsLineEnd() { range[0] = lambda0$1, range[1] = lambda1; boundsStream.point = boundsPoint; p0 = null; } function boundsRingPoint(lambda, phi) { if (p0) { var delta = lambda - lambda2; deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta); } else { lambda00$1 = lambda, phi00$1 = phi; } areaStream.point(lambda, phi); linePoint(lambda, phi); } function boundsRingStart() { areaStream.lineStart(); } function boundsRingEnd() { boundsRingPoint(lambda00$1, phi00$1); areaStream.lineEnd(); if (abs(deltaSum) > epsilon$2) lambda0$1 = -(lambda1 = 180); range[0] = lambda0$1, range[1] = lambda1; p0 = null; } // Finds the left-right distance between two longitudes. // This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want // the distance between ±180° to be 360°. function angle(lambda0, lambda1) { return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1; } function rangeCompare(a, b) { return a[0] - b[0]; } function rangeContains(range, x) { return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x; } function bounds(feature) { var i, n, a, b, merged, deltaMax, delta; phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity); ranges = []; geoStream(feature, boundsStream); // First, sort ranges by their minimum longitudes. if (n = ranges.length) { ranges.sort(rangeCompare); // Then, merge any ranges that overlap. for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) { b = ranges[i]; if (rangeContains(a, b[0]) || rangeContains(a, b[1])) { if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1]; if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0]; } else { merged.push(a = b); } } // Finally, find the largest gap between the merged ranges. // The final bounding box will be the inverse of this gap. for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) { b = merged[i]; if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1]; } } ranges = range = null; return lambda0$1 === Infinity || phi0 === Infinity ? [[NaN, NaN], [NaN, NaN]] : [[lambda0$1, phi0], [lambda1, phi1]]; } var W0, W1, X0, Y0, Z0, X1, Y1, Z1, X2, Y2, Z2, lambda00$2, phi00$2, // first point x0, y0, z0; // previous point var centroidStream = { sphere: noop$2, point: centroidPoint, lineStart: centroidLineStart, lineEnd: centroidLineEnd, polygonStart: function() { centroidStream.lineStart = centroidRingStart; centroidStream.lineEnd = centroidRingEnd; }, polygonEnd: function() { centroidStream.lineStart = centroidLineStart; centroidStream.lineEnd = centroidLineEnd; } }; // Arithmetic mean of Cartesian vectors. function centroidPoint(lambda, phi) { lambda *= radians, phi *= radians; var cosPhi = cos$1(phi); centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)); } function centroidPointCartesian(x, y, z) { ++W0; X0 += (x - X0) / W0; Y0 += (y - Y0) / W0; Z0 += (z - Z0) / W0; } function centroidLineStart() { centroidStream.point = centroidLinePointFirst; } function centroidLinePointFirst(lambda, phi) { lambda *= radians, phi *= radians; var cosPhi = cos$1(phi); x0 = cosPhi * cos$1(lambda); y0 = cosPhi * sin$1(lambda); z0 = sin$1(phi); centroidStream.point = centroidLinePoint; centroidPointCartesian(x0, y0, z0); } function centroidLinePoint(lambda, phi) { lambda *= radians, phi *= radians; var cosPhi = cos$1(phi), x = cosPhi * cos$1(lambda), y = cosPhi * sin$1(lambda), z = sin$1(phi), w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z); W1 += w; X1 += w * (x0 + (x0 = x)); Y1 += w * (y0 + (y0 = y)); Z1 += w * (z0 + (z0 = z)); centroidPointCartesian(x0, y0, z0); } function centroidLineEnd() { centroidStream.point = centroidPoint; } // See J. E. Brock, The Inertia Tensor for a Spherical Triangle, // J. Applied Mechanics 42, 239 (1975). function centroidRingStart() { centroidStream.point = centroidRingPointFirst; } function centroidRingEnd() { centroidRingPoint(lambda00$2, phi00$2); centroidStream.point = centroidPoint; } function centroidRingPointFirst(lambda, phi) { lambda00$2 = lambda, phi00$2 = phi; lambda *= radians, phi *= radians; centroidStream.point = centroidRingPoint; var cosPhi = cos$1(phi); x0 = cosPhi * cos$1(lambda); y0 = cosPhi * sin$1(lambda); z0 = sin$1(phi); centroidPointCartesian(x0, y0, z0); } function centroidRingPoint(lambda, phi) { lambda *= radians, phi *= radians; var cosPhi = cos$1(phi), x = cosPhi * cos$1(lambda), y = cosPhi * sin$1(lambda), z = sin$1(phi), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = sqrt(cx * cx + cy * cy + cz * cz), w = asin(m), // line weight = angle v = m && -w / m; // area weight multiplier X2 += v * cx; Y2 += v * cy; Z2 += v * cz; W1 += w; X1 += w * (x0 + (x0 = x)); Y1 += w * (y0 + (y0 = y)); Z1 += w * (z0 + (z0 = z)); centroidPointCartesian(x0, y0, z0); } function centroid(object) { W0 = W1 = X0 = Y0 = Z0 = X1 = Y1 = Z1 = X2 = Y2 = Z2 = 0; geoStream(object, centroidStream); var x = X2, y = Y2, z = Z2, m = x * x + y * y + z * z; // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid. if (m < epsilon2$1) { x = X1, y = Y1, z = Z1; // If the feature has zero length, fall back to arithmetic mean of point vectors. if (W1 < epsilon$2) x = X0, y = Y0, z = Z0; m = x * x + y * y + z * z; // If the feature still has an undefined ccentroid, then return. if (m < epsilon2$1) return [NaN, NaN]; } return [atan2(y, x) * degrees$1, asin(z / sqrt(m)) * degrees$1]; } function constant$8(x) { return function() { return x; }; } function compose(a, b) { function compose(x, y) { return x = a(x, y), b(x[0], x[1]); } if (a.invert && b.invert) compose.invert = function(x, y) { return x = b.invert(x, y), x && a.invert(x[0], x[1]); }; return compose; } function rotationIdentity(lambda, phi) { return [abs(lambda) > pi$3 ? lambda + Math.round(-lambda / tau$3) * tau$3 : lambda, phi]; } rotationIdentity.invert = rotationIdentity; function rotateRadians(deltaLambda, deltaPhi, deltaGamma) { return (deltaLambda %= tau$3) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma)) : rotationLambda(deltaLambda)) : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma) : rotationIdentity); } function forwardRotationLambda(deltaLambda) { return function(lambda, phi) { return lambda += deltaLambda, [lambda > pi$3 ? lambda - tau$3 : lambda < -pi$3 ? lambda + tau$3 : lambda, phi]; }; } function rotationLambda(deltaLambda) { var rotation = forwardRotationLambda(deltaLambda); rotation.invert = forwardRotationLambda(-deltaLambda); return rotation; } function rotationPhiGamma(deltaPhi, deltaGamma) { var cosDeltaPhi = cos$1(deltaPhi), sinDeltaPhi = sin$1(deltaPhi), cosDeltaGamma = cos$1(deltaGamma), sinDeltaGamma = sin$1(deltaGamma); function rotation(lambda, phi) { var cosPhi = cos$1(phi), x = cos$1(lambda) * cosPhi, y = sin$1(lambda) * cosPhi, z = sin$1(phi), k = z * cosDeltaPhi + x * sinDeltaPhi; return [ atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi), asin(k * cosDeltaGamma + y * sinDeltaGamma) ]; } rotation.invert = function(lambda, phi) { var cosPhi = cos$1(phi), x = cos$1(lambda) * cosPhi, y = sin$1(lambda) * cosPhi, z = sin$1(phi), k = z * cosDeltaGamma - y * sinDeltaGamma; return [ atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi), asin(k * cosDeltaPhi - x * sinDeltaPhi) ]; }; return rotation; } function rotation(rotate) { rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0); function forward(coordinates) { coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians); return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates; } forward.invert = function(coordinates) { coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians); return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates; }; return forward; } // Generates a circle centered at [0°, 0°], with a given radius and precision. function circleStream(stream, radius, delta, direction, t0, t1) { if (!delta) return; var cosRadius = cos$1(radius), sinRadius = sin$1(radius), step = direction * delta; if (t0 == null) { t0 = radius + direction * tau$3; t1 = radius - step / 2; } else { t0 = circleRadius(cosRadius, t0); t1 = circleRadius(cosRadius, t1); if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau$3; } for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) { point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]); stream.point(point[0], point[1]); } } // Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0]. function circleRadius(cosRadius, point) { point = cartesian(point), point[0] -= cosRadius; cartesianNormalizeInPlace(point); var radius = acos(-point[1]); return ((-point[2] < 0 ? -radius : radius) + tau$3 - epsilon$2) % tau$3; } function circle() { var center = constant$8([0, 0]), radius = constant$8(90), precision = constant$8(6), ring, rotate, stream = {point: point}; function point(x, y) { ring.push(x = rotate(x, y)); x[0] *= degrees$1, x[1] *= degrees$1; } function circle() { var c = center.apply(this, arguments), r = radius.apply(this, arguments) * radians, p = precision.apply(this, arguments) * radians; ring = []; rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert; circleStream(stream, r, p, 1); c = {type: "Polygon", coordinates: [ring]}; ring = rotate = null; return c; } circle.center = function(_) { return arguments.length ? (center = typeof _ === "function" ? _ : constant$8([+_[0], +_[1]]), circle) : center; }; circle.radius = function(_) { return arguments.length ? (radius = typeof _ === "function" ? _ : constant$8(+_), circle) : radius; }; circle.precision = function(_) { return arguments.length ? (precision = typeof _ === "function" ? _ : constant$8(+_), circle) : precision; }; return circle; } function clipBuffer() { var lines = [], line; return { point: function(x, y) { line.push([x, y]); }, lineStart: function() { lines.push(line = []); }, lineEnd: noop$2, rejoin: function() { if (lines.length > 1) lines.push(lines.pop().concat(lines.shift())); }, result: function() { var result = lines; lines = []; line = null; return result; } }; } function pointEqual(a, b) { return abs(a[0] - b[0]) < epsilon$2 && abs(a[1] - b[1]) < epsilon$2; } function Intersection(point, points, other, entry) { this.x = point; this.z = points; this.o = other; // another intersection this.e = entry; // is an entry? this.v = false; // visited this.n = this.p = null; // next & previous } // A generalized polygon clipping algorithm: given a polygon that has been cut // into its visible line segments, and rejoins the segments by interpolating // along the clip edge. function clipRejoin(segments, compareIntersection, startInside, interpolate, stream) { var subject = [], clip = [], i, n; segments.forEach(function(segment) { if ((n = segment.length - 1) <= 0) return; var n, p0 = segment[0], p1 = segment[n], x; // If the first and last points of a segment are coincident, then treat as a // closed ring. TODO if all rings are closed, then the winding order of the // exterior ring should be checked. if (pointEqual(p0, p1)) { stream.lineStart(); for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]); stream.lineEnd(); return; } subject.push(x = new Intersection(p0, segment, null, true)); clip.push(x.o = new Intersection(p0, null, x, false)); subject.push(x = new Intersection(p1, segment, null, false)); clip.push(x.o = new Intersection(p1, null, x, true)); }); if (!subject.length) return; clip.sort(compareIntersection); link$1(subject); link$1(clip); for (i = 0, n = clip.length; i < n; ++i) { clip[i].e = startInside = !startInside; } var start = subject[0], points, point; while (1) { // Find first unvisited intersection. var current = start, isSubject = true; while (current.v) if ((current = current.n) === start) return; points = current.z; stream.lineStart(); do { current.v = current.o.v = true; if (current.e) { if (isSubject) { for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]); } else { interpolate(current.x, current.n.x, 1, stream); } current = current.n; } else { if (isSubject) { points = current.p.z; for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]); } else { interpolate(current.x, current.p.x, -1, stream); } current = current.p; } current = current.o; points = current.z; isSubject = !isSubject; } while (!current.v); stream.lineEnd(); } } function link$1(array) { if (!(n = array.length)) return; var n, i = 0, a = array[0], b; while (++i < n) { a.n = b = array[i]; b.p = a; a = b; } a.n = b = array[0]; b.p = a; } var sum$1 = adder(); function longitude(point) { if (abs(point[0]) <= pi$3) return point[0]; else return sign(point[0]) * ((abs(point[0]) + pi$3) % tau$3 - pi$3); } function polygonContains(polygon, point) { var lambda = longitude(point), phi = point[1], sinPhi = sin$1(phi), normal = [sin$1(lambda), -cos$1(lambda), 0], angle = 0, winding = 0; sum$1.reset(); if (sinPhi === 1) phi = halfPi$2 + epsilon$2; else if (sinPhi === -1) phi = -halfPi$2 - epsilon$2; for (var i = 0, n = polygon.length; i < n; ++i) { if (!(m = (ring = polygon[i]).length)) continue; var ring, m, point0 = ring[m - 1], lambda0 = longitude(point0), phi0 = point0[1] / 2 + quarterPi, sinPhi0 = sin$1(phi0), cosPhi0 = cos$1(phi0); for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) { var point1 = ring[j], lambda1 = longitude(point1), phi1 = point1[1] / 2 + quarterPi, sinPhi1 = sin$1(phi1), cosPhi1 = cos$1(phi1), delta = lambda1 - lambda0, sign = delta >= 0 ? 1 : -1, absDelta = sign * delta, antimeridian = absDelta > pi$3, k = sinPhi0 * sinPhi1; sum$1.add(atan2(k * sign * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta))); angle += antimeridian ? delta + sign * tau$3 : delta; // Are the longitudes either side of the point’s meridian (lambda), // and are the latitudes smaller than the parallel (phi)? if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) { var arc = cartesianCross(cartesian(point0), cartesian(point1)); cartesianNormalizeInPlace(arc); var intersection = cartesianCross(normal, arc); cartesianNormalizeInPlace(intersection); var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]); if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) { winding += antimeridian ^ delta >= 0 ? 1 : -1; } } } } // First, determine whether the South pole is inside or outside: // // It is inside if: // * the polygon winds around it in a clockwise direction. // * the polygon does not (cumulatively) wind around it, but has a negative // (counter-clockwise) area. // // Second, count the (signed) number of times a segment crosses a lambda // from the point to the South pole. If it is zero, then the point is the // same side as the South pole. return (angle < -epsilon$2 || angle < epsilon$2 && sum$1 < -epsilon$2) ^ (winding & 1); } function clip(pointVisible, clipLine, interpolate, start) { return function(sink) { var line = clipLine(sink), ringBuffer = clipBuffer(), ringSink = clipLine(ringBuffer), polygonStarted = false, polygon, segments, ring; var clip = { point: point, lineStart: lineStart, lineEnd: lineEnd, polygonStart: function() { clip.point = pointRing; clip.lineStart = ringStart; clip.lineEnd = ringEnd; segments = []; polygon = []; }, polygonEnd: function() { clip.point = point; clip.lineStart = lineStart; clip.lineEnd = lineEnd; segments = merge(segments); var startInside = polygonContains(polygon, start); if (segments.length) { if (!polygonStarted) sink.polygonStart(), polygonStarted = true; clipRejoin(segments, compareIntersection, startInside, interpolate, sink); } else if (startInside) { if (!polygonStarted) sink.polygonStart(), polygonStarted = true; sink.lineStart(); interpolate(null, null, 1, sink); sink.lineEnd(); } if (polygonStarted) sink.polygonEnd(), polygonStarted = false; segments = polygon = null; }, sphere: function() { sink.polygonStart(); sink.lineStart(); interpolate(null, null, 1, sink); sink.lineEnd(); sink.polygonEnd(); } }; function point(lambda, phi) { if (pointVisible(lambda, phi)) sink.point(lambda, phi); } function pointLine(lambda, phi) { line.point(lambda, phi); } function lineStart() { clip.point = pointLine; line.lineStart(); } function lineEnd() { clip.point = point; line.lineEnd(); } function pointRing(lambda, phi) { ring.push([lambda, phi]); ringSink.point(lambda, phi); } function ringStart() { ringSink.lineStart(); ring = []; } function ringEnd() { pointRing(ring[0][0], ring[0][1]); ringSink.lineEnd(); var clean = ringSink.clean(), ringSegments = ringBuffer.result(), i, n = ringSegments.length, m, segment, point; ring.pop(); polygon.push(ring); ring = null; if (!n) return; // No intersections. if (clean & 1) { segment = ringSegments[0]; if ((m = segment.length - 1) > 0) { if (!polygonStarted) sink.polygonStart(), polygonStarted = true; sink.lineStart(); for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]); sink.lineEnd(); } return; } // Rejoin connected segments. // TODO reuse ringBuffer.rejoin()? if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); segments.push(ringSegments.filter(validSegment)); } return clip; }; } function validSegment(segment) { return segment.length > 1; } // Intersections are sorted along the clip edge. For both antimeridian cutting // and circle clipping, the same comparison is used. function compareIntersection(a, b) { return ((a = a.x)[0] < 0 ? a[1] - halfPi$2 - epsilon$2 : halfPi$2 - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfPi$2 - epsilon$2 : halfPi$2 - b[1]); } var clipAntimeridian = clip( function() { return true; }, clipAntimeridianLine, clipAntimeridianInterpolate, [-pi$3, -halfPi$2] ); // Takes a line and cuts into visible segments. Return values: 0 - there were // intersections or the line was empty; 1 - no intersections; 2 - there were // intersections, and the first and last segments should be rejoined. function clipAntimeridianLine(stream) { var lambda0 = NaN, phi0 = NaN, sign0 = NaN, clean; // no intersections return { lineStart: function() { stream.lineStart(); clean = 1; }, point: function(lambda1, phi1) { var sign1 = lambda1 > 0 ? pi$3 : -pi$3, delta = abs(lambda1 - lambda0); if (abs(delta - pi$3) < epsilon$2) { // line crosses a pole stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$2 : -halfPi$2); stream.point(sign0, phi0); stream.lineEnd(); stream.lineStart(); stream.point(sign1, phi0); stream.point(lambda1, phi0); clean = 0; } else if (sign0 !== sign1 && delta >= pi$3) { // line crosses antimeridian if (abs(lambda0 - sign0) < epsilon$2) lambda0 -= sign0 * epsilon$2; // handle degeneracies if (abs(lambda1 - sign1) < epsilon$2) lambda1 -= sign1 * epsilon$2; phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1); stream.point(sign0, phi0); stream.lineEnd(); stream.lineStart(); stream.point(sign1, phi0); clean = 0; } stream.point(lambda0 = lambda1, phi0 = phi1); sign0 = sign1; }, lineEnd: function() { stream.lineEnd(); lambda0 = phi0 = NaN; }, clean: function() { return 2 - clean; // if intersections, rejoin first and last segments } }; } function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) { var cosPhi0, cosPhi1, sinLambda0Lambda1 = sin$1(lambda0 - lambda1); return abs(sinLambda0Lambda1) > epsilon$2 ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1) - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0)) / (cosPhi0 * cosPhi1 * sinLambda0Lambda1)) : (phi0 + phi1) / 2; } function clipAntimeridianInterpolate(from, to, direction, stream) { var phi; if (from == null) { phi = direction * halfPi$2; stream.point(-pi$3, phi); stream.point(0, phi); stream.point(pi$3, phi); stream.point(pi$3, 0); stream.point(pi$3, -phi); stream.point(0, -phi); stream.point(-pi$3, -phi); stream.point(-pi$3, 0); stream.point(-pi$3, phi); } else if (abs(from[0] - to[0]) > epsilon$2) { var lambda = from[0] < to[0] ? pi$3 : -pi$3; phi = direction * lambda / 2; stream.point(-lambda, phi); stream.point(0, phi); stream.point(lambda, phi); } else { stream.point(to[0], to[1]); } } function clipCircle(radius) { var cr = cos$1(radius), delta = 6 * radians, smallRadius = cr > 0, notHemisphere = abs(cr) > epsilon$2; // TODO optimise for this common case function interpolate(from, to, direction, stream) { circleStream(stream, radius, delta, direction, from, to); } function visible(lambda, phi) { return cos$1(lambda) * cos$1(phi) > cr; } // Takes a line and cuts into visible segments. Return values used for polygon // clipping: 0 - there were intersections or the line was empty; 1 - no // intersections 2 - there were intersections, and the first and last segments // should be rejoined. function clipLine(stream) { var point0, // previous point c0, // code for previous point v0, // visibility of previous point v00, // visibility of first point clean; // no intersections return { lineStart: function() { v00 = v0 = false; clean = 1; }, point: function(lambda, phi) { var point1 = [lambda, phi], point2, v = visible(lambda, phi), c = smallRadius ? v ? 0 : code(lambda, phi) : v ? code(lambda + (lambda < 0 ? pi$3 : -pi$3), phi) : 0; if (!point0 && (v00 = v0 = v)) stream.lineStart(); // Handle degeneracies. // TODO ignore if not clipping polygons. if (v !== v0) { point2 = intersect(point0, point1); if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) { point1[0] += epsilon$2; point1[1] += epsilon$2; v = visible(point1[0], point1[1]); } } if (v !== v0) { clean = 0; if (v) { // outside going in stream.lineStart(); point2 = intersect(point1, point0); stream.point(point2[0], point2[1]); } else { // inside going out point2 = intersect(point0, point1); stream.point(point2[0], point2[1]); stream.lineEnd(); } point0 = point2; } else if (notHemisphere && point0 && smallRadius ^ v) { var t; // If the codes for two points are different, or are both zero, // and there this segment intersects with the small circle. if (!(c & c0) && (t = intersect(point1, point0, true))) { clean = 0; if (smallRadius) { stream.lineStart(); stream.point(t[0][0], t[0][1]); stream.point(t[1][0], t[1][1]); stream.lineEnd(); } else { stream.point(t[1][0], t[1][1]); stream.lineEnd(); stream.lineStart(); stream.point(t[0][0], t[0][1]); } } } if (v && (!point0 || !pointEqual(point0, point1))) { stream.point(point1[0], point1[1]); } point0 = point1, v0 = v, c0 = c; }, lineEnd: function() { if (v0) stream.lineEnd(); point0 = null; }, // Rejoin first and last segments if there were intersections and the first // and last points were visible. clean: function() { return clean | ((v00 && v0) << 1); } }; } // Intersects the great circle between a and b with the clip circle. function intersect(a, b, two) { var pa = cartesian(a), pb = cartesian(b); // We have two planes, n1.p = d1 and n2.p = d2. // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2). var n1 = [1, 0, 0], // normal n2 = cartesianCross(pa, pb), n2n2 = cartesianDot(n2, n2), n1n2 = n2[0], // cartesianDot(n1, n2), determinant = n2n2 - n1n2 * n1n2; // Two polar points. if (!determinant) return !two && a; var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = cartesianCross(n1, n2), A = cartesianScale(n1, c1), B = cartesianScale(n2, c2); cartesianAddInPlace(A, B); // Solve |p(t)|^2 = 1. var u = n1xn2, w = cartesianDot(A, u), uu = cartesianDot(u, u), t2 = w * w - uu * (cartesianDot(A, A) - 1); if (t2 < 0) return; var t = sqrt(t2), q = cartesianScale(u, (-w - t) / uu); cartesianAddInPlace(q, A); q = spherical(q); if (!two) return q; // Two intersection points. var lambda0 = a[0], lambda1 = b[0], phi0 = a[1], phi1 = b[1], z; if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z; var delta = lambda1 - lambda0, polar = abs(delta - pi$3) < epsilon$2, meridian = polar || delta < epsilon$2; if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z; // Check that the first point is between a and b. if (meridian ? polar ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon$2 ? phi0 : phi1) : phi0 <= q[1] && q[1] <= phi1 : delta > pi$3 ^ (lambda0 <= q[0] && q[0] <= lambda1)) { var q1 = cartesianScale(u, (-w + t) / uu); cartesianAddInPlace(q1, A); return [q, spherical(q1)]; } } // Generates a 4-bit vector representing the location of a point relative to // the small circle's bounding box. function code(lambda, phi) { var r = smallRadius ? radius : pi$3 - radius, code = 0; if (lambda < -r) code |= 1; // left else if (lambda > r) code |= 2; // right if (phi < -r) code |= 4; // below else if (phi > r) code |= 8; // above return code; } return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$3, radius - pi$3]); } function clipLine(a, b, x0, y0, x1, y1) { var ax = a[0], ay = a[1], bx = b[0], by = b[1], t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r; r = x0 - ax; if (!dx && r > 0) return; r /= dx; if (dx < 0) { if (r < t0) return; if (r < t1) t1 = r; } else if (dx > 0) { if (r > t1) return; if (r > t0) t0 = r; } r = x1 - ax; if (!dx && r < 0) return; r /= dx; if (dx < 0) { if (r > t1) return; if (r > t0) t0 = r; } else if (dx > 0) { if (r < t0) return; if (r < t1) t1 = r; } r = y0 - ay; if (!dy && r > 0) return; r /= dy; if (dy < 0) { if (r < t0) return; if (r < t1) t1 = r; } else if (dy > 0) { if (r > t1) return; if (r > t0) t0 = r; } r = y1 - ay; if (!dy && r < 0) return; r /= dy; if (dy < 0) { if (r > t1) return; if (r > t0) t0 = r; } else if (dy > 0) { if (r < t0) return; if (r < t1) t1 = r; } if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy; if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy; return true; } var clipMax = 1e9, clipMin = -clipMax; // TODO Use d3-polygon’s polygonContains here for the ring check? // TODO Eliminate duplicate buffering in clipBuffer and polygon.push? function clipRectangle(x0, y0, x1, y1) { function visible(x, y) { return x0 <= x && x <= x1 && y0 <= y && y <= y1; } function interpolate(from, to, direction, stream) { var a = 0, a1 = 0; if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoint(from, to) < 0 ^ direction > 0) { do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); while ((a = (a + direction + 4) % 4) !== a1); } else { stream.point(to[0], to[1]); } } function corner(p, direction) { return abs(p[0] - x0) < epsilon$2 ? direction > 0 ? 0 : 3 : abs(p[0] - x1) < epsilon$2 ? direction > 0 ? 2 : 1 : abs(p[1] - y0) < epsilon$2 ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon } function compareIntersection(a, b) { return comparePoint(a.x, b.x); } function comparePoint(a, b) { var ca = corner(a, 1), cb = corner(b, 1); return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0]; } return function(stream) { var activeStream = stream, bufferStream = clipBuffer(), segments, polygon, ring, x__, y__, v__, // first point x_, y_, v_, // previous point first, clean; var clipStream = { point: point, lineStart: lineStart, lineEnd: lineEnd, polygonStart: polygonStart, polygonEnd: polygonEnd }; function point(x, y) { if (visible(x, y)) activeStream.point(x, y); } function polygonInside() { var winding = 0; for (var i = 0, n = polygon.length; i < n; ++i) { for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) { a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1]; if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; } else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; } } } return winding; } // Buffer geometry within a polygon and then clip it en masse. function polygonStart() { activeStream = bufferStream, segments = [], polygon = [], clean = true; } function polygonEnd() { var startInside = polygonInside(), cleanInside = clean && startInside, visible = (segments = merge(segments)).length; if (cleanInside || visible) { stream.polygonStart(); if (cleanInside) { stream.lineStart(); interpolate(null, null, 1, stream); stream.lineEnd(); } if (visible) { clipRejoin(segments, compareIntersection, startInside, interpolate, stream); } stream.polygonEnd(); } activeStream = stream, segments = polygon = ring = null; } function lineStart() { clipStream.point = linePoint; if (polygon) polygon.push(ring = []); first = true; v_ = false; x_ = y_ = NaN; } // TODO rather than special-case polygons, simply handle them separately. // Ideally, coincident intersection points should be jittered to avoid // clipping issues. function lineEnd() { if (segments) { linePoint(x__, y__); if (v__ && v_) bufferStream.rejoin(); segments.push(bufferStream.result()); } clipStream.point = point; if (v_) activeStream.lineEnd(); } function linePoint(x, y) { var v = visible(x, y); if (polygon) ring.push([x, y]); if (first) { x__ = x, y__ = y, v__ = v; first = false; if (v) { activeStream.lineStart(); activeStream.point(x, y); } } else { if (v && v_) activeStream.point(x, y); else { var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))], b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))]; if (clipLine(a, b, x0, y0, x1, y1)) { if (!v_) { activeStream.lineStart(); activeStream.point(a[0], a[1]); } activeStream.point(b[0], b[1]); if (!v) activeStream.lineEnd(); clean = false; } else if (v) { activeStream.lineStart(); activeStream.point(x, y); clean = false; } } } x_ = x, y_ = y, v_ = v; } return clipStream; }; } function extent$1() { var x0 = 0, y0 = 0, x1 = 960, y1 = 500, cache, cacheStream, clip; return clip = { stream: function(stream) { return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream); }, extent: function(_) { return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]]; } }; } var lengthSum = adder(), lambda0$2, sinPhi0$1, cosPhi0$1; var lengthStream = { sphere: noop$2, point: noop$2, lineStart: lengthLineStart, lineEnd: noop$2, polygonStart: noop$2, polygonEnd: noop$2 }; function lengthLineStart() { lengthStream.point = lengthPointFirst; lengthStream.lineEnd = lengthLineEnd; } function lengthLineEnd() { lengthStream.point = lengthStream.lineEnd = noop$2; } function lengthPointFirst(lambda, phi) { lambda *= radians, phi *= radians; lambda0$2 = lambda, sinPhi0$1 = sin$1(phi), cosPhi0$1 = cos$1(phi); lengthStream.point = lengthPoint; } function lengthPoint(lambda, phi) { lambda *= radians, phi *= radians; var sinPhi = sin$1(phi), cosPhi = cos$1(phi), delta = abs(lambda - lambda0$2), cosDelta = cos$1(delta), sinDelta = sin$1(delta), x = cosPhi * sinDelta, y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta, z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta; lengthSum.add(atan2(sqrt(x * x + y * y), z)); lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi; } function length$1(object) { lengthSum.reset(); geoStream(object, lengthStream); return +lengthSum; } var coordinates = [null, null], object$1 = {type: "LineString", coordinates: coordinates}; function distance(a, b) { coordinates[0] = a; coordinates[1] = b; return length$1(object$1); } var containsObjectType = { Feature: function(object, point) { return containsGeometry(object.geometry, point); }, FeatureCollection: function(object, point) { var features = object.features, i = -1, n = features.length; while (++i < n) if (containsGeometry(features[i].geometry, point)) return true; return false; } }; var containsGeometryType = { Sphere: function() { return true; }, Point: function(object, point) { return containsPoint(object.coordinates, point); }, MultiPoint: function(object, point) { var coordinates = object.coordinates, i = -1, n = coordinates.length; while (++i < n) if (containsPoint(coordinates[i], point)) return true; return false; }, LineString: function(object, point) { return containsLine(object.coordinates, point); }, MultiLineString: function(object, point) { var coordinates = object.coordinates, i = -1, n = coordinates.length; while (++i < n) if (containsLine(coordinates[i], point)) return true; return false; }, Polygon: function(object, point) { return containsPolygon(object.coordinates, point); }, MultiPolygon: function(object, point) { var coordinates = object.coordinates, i = -1, n = coordinates.length; while (++i < n) if (containsPolygon(coordinates[i], point)) return true; return false; }, GeometryCollection: function(object, point) { var geometries = object.geometries, i = -1, n = geometries.length; while (++i < n) if (containsGeometry(geometries[i], point)) return true; return false; } }; function containsGeometry(geometry, point) { return geometry && containsGeometryType.hasOwnProperty(geometry.type) ? containsGeometryType[geometry.type](geometry, point) : false; } function containsPoint(coordinates, point) { return distance(coordinates, point) === 0; } function containsLine(coordinates, point) { var ao, bo, ab; for (var i = 0, n = coordinates.length; i < n; i++) { bo = distance(coordinates[i], point); if (bo === 0) return true; if (i > 0) { ab = distance(coordinates[i], coordinates[i - 1]); if ( ab > 0 && ao <= ab && bo <= ab && (ao + bo - ab) * (1 - Math.pow((ao - bo) / ab, 2)) < epsilon2$1 * ab ) return true; } ao = bo; } return false; } function containsPolygon(coordinates, point) { return !!polygonContains(coordinates.map(ringRadians), pointRadians(point)); } function ringRadians(ring) { return ring = ring.map(pointRadians), ring.pop(), ring; } function pointRadians(point) { return [point[0] * radians, point[1] * radians]; } function contains$1(object, point) { return (object && containsObjectType.hasOwnProperty(object.type) ? containsObjectType[object.type] : containsGeometry)(object, point); } function graticuleX(y0, y1, dy) { var y = sequence(y0, y1 - epsilon$2, dy).concat(y1); return function(x) { return y.map(function(y) { return [x, y]; }); }; } function graticuleY(x0, x1, dx) { var x = sequence(x0, x1 - epsilon$2, dx).concat(x1); return function(y) { return x.map(function(x) { return [x, y]; }); }; } function graticule() { var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5; function graticule() { return {type: "MultiLineString", coordinates: lines()}; } function lines() { return sequence(ceil(X0 / DX) * DX, X1, DX).map(X) .concat(sequence(ceil(Y0 / DY) * DY, Y1, DY).map(Y)) .concat(sequence(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon$2; }).map(x)) .concat(sequence(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon$2; }).map(y)); } graticule.lines = function() { return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; }); }; graticule.outline = function() { return { type: "Polygon", coordinates: [ X(X0).concat( Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1)) ] }; }; graticule.extent = function(_) { if (!arguments.length) return graticule.extentMinor(); return graticule.extentMajor(_).extentMinor(_); }; graticule.extentMajor = function(_) { if (!arguments.length) return [[X0, Y0], [X1, Y1]]; X0 = +_[0][0], X1 = +_[1][0]; Y0 = +_[0][1], Y1 = +_[1][1]; if (X0 > X1) _ = X0, X0 = X1, X1 = _; if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _; return graticule.precision(precision); }; graticule.extentMinor = function(_) { if (!arguments.length) return [[x0, y0], [x1, y1]]; x0 = +_[0][0], x1 = +_[1][0]; y0 = +_[0][1], y1 = +_[1][1]; if (x0 > x1) _ = x0, x0 = x1, x1 = _; if (y0 > y1) _ = y0, y0 = y1, y1 = _; return graticule.precision(precision); }; graticule.step = function(_) { if (!arguments.length) return graticule.stepMinor(); return graticule.stepMajor(_).stepMinor(_); }; graticule.stepMajor = function(_) { if (!arguments.length) return [DX, DY]; DX = +_[0], DY = +_[1]; return graticule; }; graticule.stepMinor = function(_) { if (!arguments.length) return [dx, dy]; dx = +_[0], dy = +_[1]; return graticule; }; graticule.precision = function(_) { if (!arguments.length) return precision; precision = +_; x = graticuleX(y0, y1, 90); y = graticuleY(x0, x1, precision); X = graticuleX(Y0, Y1, 90); Y = graticuleY(X0, X1, precision); return graticule; }; return graticule .extentMajor([[-180, -90 + epsilon$2], [180, 90 - epsilon$2]]) .extentMinor([[-180, -80 - epsilon$2], [180, 80 + epsilon$2]]); } function graticule10() { return graticule()(); } function interpolate$1(a, b) { var x0 = a[0] * radians, y0 = a[1] * radians, x1 = b[0] * radians, y1 = b[1] * radians, cy0 = cos$1(y0), sy0 = sin$1(y0), cy1 = cos$1(y1), sy1 = sin$1(y1), kx0 = cy0 * cos$1(x0), ky0 = cy0 * sin$1(x0), kx1 = cy1 * cos$1(x1), ky1 = cy1 * sin$1(x1), d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))), k = sin$1(d); var interpolate = d ? function(t) { var B = sin$1(t *= d) / k, A = sin$1(d - t) / k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1; return [ atan2(y, x) * degrees$1, atan2(z, sqrt(x * x + y * y)) * degrees$1 ]; } : function() { return [x0 * degrees$1, y0 * degrees$1]; }; interpolate.distance = d; return interpolate; } function identity$4(x) { return x; } var areaSum$1 = adder(), areaRingSum$1 = adder(), x00, y00, x0$1, y0$1; var areaStream$1 = { point: noop$2, lineStart: noop$2, lineEnd: noop$2, polygonStart: function() { areaStream$1.lineStart = areaRingStart$1; areaStream$1.lineEnd = areaRingEnd$1; }, polygonEnd: function() { areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$2; areaSum$1.add(abs(areaRingSum$1)); areaRingSum$1.reset(); }, result: function() { var area = areaSum$1 / 2; areaSum$1.reset(); return area; } }; function areaRingStart$1() { areaStream$1.point = areaPointFirst$1; } function areaPointFirst$1(x, y) { areaStream$1.point = areaPoint$1; x00 = x0$1 = x, y00 = y0$1 = y; } function areaPoint$1(x, y) { areaRingSum$1.add(y0$1 * x - x0$1 * y); x0$1 = x, y0$1 = y; } function areaRingEnd$1() { areaPoint$1(x00, y00); } var x0$2 = Infinity, y0$2 = x0$2, x1 = -x0$2, y1 = x1; var boundsStream$1 = { point: boundsPoint$1, lineStart: noop$2, lineEnd: noop$2, polygonStart: noop$2, polygonEnd: noop$2, result: function() { var bounds = [[x0$2, y0$2], [x1, y1]]; x1 = y1 = -(y0$2 = x0$2 = Infinity); return bounds; } }; function boundsPoint$1(x, y) { if (x < x0$2) x0$2 = x; if (x > x1) x1 = x; if (y < y0$2) y0$2 = y; if (y > y1) y1 = y; } // TODO Enforce positive area for exterior, negative area for interior? var X0$1 = 0, Y0$1 = 0, Z0$1 = 0, X1$1 = 0, Y1$1 = 0, Z1$1 = 0, X2$1 = 0, Y2$1 = 0, Z2$1 = 0, x00$1, y00$1, x0$3, y0$3; var centroidStream$1 = { point: centroidPoint$1, lineStart: centroidLineStart$1, lineEnd: centroidLineEnd$1, polygonStart: function() { centroidStream$1.lineStart = centroidRingStart$1; centroidStream$1.lineEnd = centroidRingEnd$1; }, polygonEnd: function() { centroidStream$1.point = centroidPoint$1; centroidStream$1.lineStart = centroidLineStart$1; centroidStream$1.lineEnd = centroidLineEnd$1; }, result: function() { var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1] : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1] : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1] : [NaN, NaN]; X0$1 = Y0$1 = Z0$1 = X1$1 = Y1$1 = Z1$1 = X2$1 = Y2$1 = Z2$1 = 0; return centroid; } }; function centroidPoint$1(x, y) { X0$1 += x; Y0$1 += y; ++Z0$1; } function centroidLineStart$1() { centroidStream$1.point = centroidPointFirstLine; } function centroidPointFirstLine(x, y) { centroidStream$1.point = centroidPointLine; centroidPoint$1(x0$3 = x, y0$3 = y); } function centroidPointLine(x, y) { var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy); X1$1 += z * (x0$3 + x) / 2; Y1$1 += z * (y0$3 + y) / 2; Z1$1 += z; centroidPoint$1(x0$3 = x, y0$3 = y); } function centroidLineEnd$1() { centroidStream$1.point = centroidPoint$1; } function centroidRingStart$1() { centroidStream$1.point = centroidPointFirstRing; } function centroidRingEnd$1() { centroidPointRing(x00$1, y00$1); } function centroidPointFirstRing(x, y) { centroidStream$1.point = centroidPointRing; centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y); } function centroidPointRing(x, y) { var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy); X1$1 += z * (x0$3 + x) / 2; Y1$1 += z * (y0$3 + y) / 2; Z1$1 += z; z = y0$3 * x - x0$3 * y; X2$1 += z * (x0$3 + x); Y2$1 += z * (y0$3 + y); Z2$1 += z * 3; centroidPoint$1(x0$3 = x, y0$3 = y); } function PathContext(context) { this._context = context; } PathContext.prototype = { _radius: 4.5, pointRadius: function(_) { return this._radius = _, this; }, polygonStart: function() { this._line = 0; }, polygonEnd: function() { this._line = NaN; }, lineStart: function() { this._point = 0; }, lineEnd: function() { if (this._line === 0) this._context.closePath(); this._point = NaN; }, point: function(x, y) { switch (this._point) { case 0: { this._context.moveTo(x, y); this._point = 1; break; } case 1: { this._context.lineTo(x, y); break; } default: { this._context.moveTo(x + this._radius, y); this._context.arc(x, y, this._radius, 0, tau$3); break; } } }, result: noop$2 }; var lengthSum$1 = adder(), lengthRing, x00$2, y00$2, x0$4, y0$4; var lengthStream$1 = { point: noop$2, lineStart: function() { lengthStream$1.point = lengthPointFirst$1; }, lineEnd: function() { if (lengthRing) lengthPoint$1(x00$2, y00$2); lengthStream$1.point = noop$2; }, polygonStart: function() { lengthRing = true; }, polygonEnd: function() { lengthRing = null; }, result: function() { var length = +lengthSum$1; lengthSum$1.reset(); return length; } }; function lengthPointFirst$1(x, y) { lengthStream$1.point = lengthPoint$1; x00$2 = x0$4 = x, y00$2 = y0$4 = y; } function lengthPoint$1(x, y) { x0$4 -= x, y0$4 -= y; lengthSum$1.add(sqrt(x0$4 * x0$4 + y0$4 * y0$4)); x0$4 = x, y0$4 = y; } function PathString() { this._string = []; } PathString.prototype = { _radius: 4.5, _circle: circle$1(4.5), pointRadius: function(_) { if ((_ = +_) !== this._radius) this._radius = _, this._circle = null; return this; }, polygonStart: function() { this._line = 0; }, polygonEnd: function() { this._line = NaN; }, lineStart: function() { this._point = 0; }, lineEnd: function() { if (this._line === 0) this._string.push("Z"); this._point = NaN; }, point: function(x, y) { switch (this._point) { case 0: { this._string.push("M", x, ",", y); this._point = 1; break; } case 1: { this._string.push("L", x, ",", y); break; } default: { if (this._circle == null) this._circle = circle$1(this._radius); this._string.push("M", x, ",", y, this._circle); break; } } }, result: function() { if (this._string.length) { var result = this._string.join(""); this._string = []; return result; } else { return null; } } }; function circle$1(radius) { return "m0," + radius + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius + "z"; } function index$1(projection, context) { var pointRadius = 4.5, projectionStream, contextStream; function path(object) { if (object) { if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments)); geoStream(object, projectionStream(contextStream)); } return contextStream.result(); } path.area = function(object) { geoStream(object, projectionStream(areaStream$1)); return areaStream$1.result(); }; path.measure = function(object) { geoStream(object, projectionStream(lengthStream$1)); return lengthStream$1.result(); }; path.bounds = function(object) { geoStream(object, projectionStream(boundsStream$1)); return boundsStream$1.result(); }; path.centroid = function(object) { geoStream(object, projectionStream(centroidStream$1)); return centroidStream$1.result(); }; path.projection = function(_) { return arguments.length ? (projectionStream = _ == null ? (projection = null, identity$4) : (projection = _).stream, path) : projection; }; path.context = function(_) { if (!arguments.length) return context; contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _); if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius); return path; }; path.pointRadius = function(_) { if (!arguments.length) return pointRadius; pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_); return path; }; return path.projection(projection).context(context); } function transform(methods) { return { stream: transformer(methods) }; } function transformer(methods) { return function(stream) { var s = new TransformStream; for (var key in methods) s[key] = methods[key]; s.stream = stream; return s; }; } function TransformStream() {} TransformStream.prototype = { constructor: TransformStream, point: function(x, y) { this.stream.point(x, y); }, sphere: function() { this.stream.sphere(); }, lineStart: function() { this.stream.lineStart(); }, lineEnd: function() { this.stream.lineEnd(); }, polygonStart: function() { this.stream.polygonStart(); }, polygonEnd: function() { this.stream.polygonEnd(); } }; function fit(projection, fitBounds, object) { var clip = projection.clipExtent && projection.clipExtent(); projection.scale(150).translate([0, 0]); if (clip != null) projection.clipExtent(null); geoStream(object, projection.stream(boundsStream$1)); fitBounds(boundsStream$1.result()); if (clip != null) projection.clipExtent(clip); return projection; } function fitExtent(projection, extent, object) { return fit(projection, function(b) { var w = extent[1][0] - extent[0][0], h = extent[1][1] - extent[0][1], k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])), x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2, y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2; projection.scale(150 * k).translate([x, y]); }, object); } function fitSize(projection, size, object) { return fitExtent(projection, [[0, 0], size], object); } function fitWidth(projection, width, object) { return fit(projection, function(b) { var w = +width, k = w / (b[1][0] - b[0][0]), x = (w - k * (b[1][0] + b[0][0])) / 2, y = -k * b[0][1]; projection.scale(150 * k).translate([x, y]); }, object); } function fitHeight(projection, height, object) { return fit(projection, function(b) { var h = +height, k = h / (b[1][1] - b[0][1]), x = -k * b[0][0], y = (h - k * (b[1][1] + b[0][1])) / 2; projection.scale(150 * k).translate([x, y]); }, object); } var maxDepth = 16, // maximum depth of subdivision cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance) function resample(project, delta2) { return +delta2 ? resample$1(project, delta2) : resampleNone(project); } function resampleNone(project) { return transformer({ point: function(x, y) { x = project(x, y); this.stream.point(x[0], x[1]); } }); } function resample$1(project, delta2) { function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) { var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy; if (d2 > 4 * delta2 && depth--) { var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = sqrt(a * a + b * b + c * c), phi2 = asin(c /= m), lambda2 = abs(abs(c) - 1) < epsilon$2 || abs(lambda0 - lambda1) < epsilon$2 ? (lambda0 + lambda1) / 2 : atan2(b, a), p = project(lambda2, phi2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2; if (dz * dz / d2 > delta2 // perpendicular projected distance || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream); stream.point(x2, y2); resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream); } } } return function(stream) { var lambda00, x00, y00, a00, b00, c00, // first point lambda0, x0, y0, a0, b0, c0; // previous point var resampleStream = { point: point, lineStart: lineStart, lineEnd: lineEnd, polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; }, polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; } }; function point(x, y) { x = project(x, y); stream.point(x[0], x[1]); } function lineStart() { x0 = NaN; resampleStream.point = linePoint; stream.lineStart(); } function linePoint(lambda, phi) { var c = cartesian([lambda, phi]), p = project(lambda, phi); resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream); stream.point(x0, y0); } function lineEnd() { resampleStream.point = point; stream.lineEnd(); } function ringStart() { lineStart(); resampleStream.point = ringPoint; resampleStream.lineEnd = ringEnd; } function ringPoint(lambda, phi) { linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0; resampleStream.point = linePoint; } function ringEnd() { resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream); resampleStream.lineEnd = lineEnd; lineEnd(); } return resampleStream; }; } var transformRadians = transformer({ point: function(x, y) { this.stream.point(x * radians, y * radians); } }); function transformRotate(rotate) { return transformer({ point: function(x, y) { var r = rotate(x, y); return this.stream.point(r[0], r[1]); } }); } function scaleTranslate(k, dx, dy) { function transform(x, y) { return [dx + k * x, dy - k * y]; } transform.invert = function(x, y) { return [(x - dx) / k, (dy - y) / k]; }; return transform; } function scaleTranslateRotate(k, dx, dy, alpha) { var cosAlpha = cos$1(alpha), sinAlpha = sin$1(alpha), a = cosAlpha * k, b = sinAlpha * k, ai = cosAlpha / k, bi = sinAlpha / k, ci = (sinAlpha * dy - cosAlpha * dx) / k, fi = (sinAlpha * dx + cosAlpha * dy) / k; function transform(x, y) { return [a * x - b * y + dx, dy - b * x - a * y]; } transform.invert = function(x, y) { return [ai * x - bi * y + ci, fi - bi * x - ai * y]; }; return transform; } function projection(project) { return projectionMutator(function() { return project; })(); } function projectionMutator(projectAt) { var project, k = 150, // scale x = 480, y = 250, // translate lambda = 0, phi = 0, // center deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate alpha = 0, // post-rotate theta = null, preclip = clipAntimeridian, // pre-clip angle x0 = null, y0, x1, y1, postclip = identity$4, // post-clip extent delta2 = 0.5, // precision projectResample, projectTransform, projectRotateTransform, cache, cacheStream; function projection(point) { return projectRotateTransform(point[0] * radians, point[1] * radians); } function invert(point) { point = projectRotateTransform.invert(point[0], point[1]); return point && [point[0] * degrees$1, point[1] * degrees$1]; } projection.stream = function(stream) { return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream))))); }; projection.preclip = function(_) { return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip; }; projection.postclip = function(_) { return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip; }; projection.clipAngle = function(_) { return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1; }; projection.clipExtent = function(_) { return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]]; }; projection.scale = function(_) { return arguments.length ? (k = +_, recenter()) : k; }; projection.translate = function(_) { return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y]; }; projection.center = function(_) { return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1]; }; projection.rotate = function(_) { return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees$1, deltaPhi * degrees$1, deltaGamma * degrees$1]; }; projection.angle = function(_) { return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees$1; }; projection.precision = function(_) { return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2); }; projection.fitExtent = function(extent, object) { return fitExtent(projection, extent, object); }; projection.fitSize = function(size, object) { return fitSize(projection, size, object); }; projection.fitWidth = function(width, object) { return fitWidth(projection, width, object); }; projection.fitHeight = function(height, object) { return fitHeight(projection, height, object); }; function recenter() { var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)), transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha); rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma); projectTransform = compose(project, transform); projectRotateTransform = compose(rotate, projectTransform); projectResample = resample(projectTransform, delta2); return reset(); } function reset() { cache = cacheStream = null; return projection; } return function() { project = projectAt.apply(this, arguments); projection.invert = project.invert && invert; return recenter(); }; } function conicProjection(projectAt) { var phi0 = 0, phi1 = pi$3 / 3, m = projectionMutator(projectAt), p = m(phi0, phi1); p.parallels = function(_) { return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1]; }; return p; } function cylindricalEqualAreaRaw(phi0) { var cosPhi0 = cos$1(phi0); function forward(lambda, phi) { return [lambda * cosPhi0, sin$1(phi) / cosPhi0]; } forward.invert = function(x, y) { return [x / cosPhi0, asin(y * cosPhi0)]; }; return forward; } function conicEqualAreaRaw(y0, y1) { var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2; // Are the parallels symmetrical around the Equator? if (abs(n) < epsilon$2) return cylindricalEqualAreaRaw(y0); var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n; function project(x, y) { var r = sqrt(c - 2 * n * sin$1(y)) / n; return [r * sin$1(x *= n), r0 - r * cos$1(x)]; } project.invert = function(x, y) { var r0y = r0 - y; return [atan2(x, abs(r0y)) / n * sign(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))]; }; return project; } function conicEqualArea() { return conicProjection(conicEqualAreaRaw) .scale(155.424) .center([0, 33.6442]); } function albers() { return conicEqualArea() .parallels([29.5, 45.5]) .scale(1070) .translate([480, 250]) .rotate([96, 0]) .center([-0.6, 38.7]); } // The projections must have mutually exclusive clip regions on the sphere, // as this will avoid emitting interleaving lines and polygons. function multiplex(streams) { var n = streams.length; return { point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); }, sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); }, lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); }, lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); }, polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); }, polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); } }; } // A composite projection for the United States, configured by default for // 960×500. The projection also works quite well at 960×600 if you change the // scale to 1285 and adjust the translate accordingly. The set of standard // parallels for each region comes from USGS, which is published here: // http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers function albersUsa() { var cache, cacheStream, lower48 = albers(), lower48Point, alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338 hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007 point, pointStream = {point: function(x, y) { point = [x, y]; }}; function albersUsa(coordinates) { var x = coordinates[0], y = coordinates[1]; return point = null, (lower48Point.point(x, y), point) || (alaskaPoint.point(x, y), point) || (hawaiiPoint.point(x, y), point); } albersUsa.invert = function(coordinates) { var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k; return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii : lower48).invert(coordinates); }; albersUsa.stream = function(stream) { return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]); }; albersUsa.precision = function(_) { if (!arguments.length) return lower48.precision(); lower48.precision(_), alaska.precision(_), hawaii.precision(_); return reset(); }; albersUsa.scale = function(_) { if (!arguments.length) return lower48.scale(); lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_); return albersUsa.translate(lower48.translate()); }; albersUsa.translate = function(_) { if (!arguments.length) return lower48.translate(); var k = lower48.scale(), x = +_[0], y = +_[1]; lower48Point = lower48 .translate(_) .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]]) .stream(pointStream); alaskaPoint = alaska .translate([x - 0.307 * k, y + 0.201 * k]) .clipExtent([[x - 0.425 * k + epsilon$2, y + 0.120 * k + epsilon$2], [x - 0.214 * k - epsilon$2, y + 0.234 * k - epsilon$2]]) .stream(pointStream); hawaiiPoint = hawaii .translate([x - 0.205 * k, y + 0.212 * k]) .clipExtent([[x - 0.214 * k + epsilon$2, y + 0.166 * k + epsilon$2], [x - 0.115 * k - epsilon$2, y + 0.234 * k - epsilon$2]]) .stream(pointStream); return reset(); }; albersUsa.fitExtent = function(extent, object) { return fitExtent(albersUsa, extent, object); }; albersUsa.fitSize = function(size, object) { return fitSize(albersUsa, size, object); }; albersUsa.fitWidth = function(width, object) { return fitWidth(albersUsa, width, object); }; albersUsa.fitHeight = function(height, object) { return fitHeight(albersUsa, height, object); }; function reset() { cache = cacheStream = null; return albersUsa; } return albersUsa.scale(1070); } function azimuthalRaw(scale) { return function(x, y) { var cx = cos$1(x), cy = cos$1(y), k = scale(cx * cy); return [ k * cy * sin$1(x), k * sin$1(y) ]; } } function azimuthalInvert(angle) { return function(x, y) { var z = sqrt(x * x + y * y), c = angle(z), sc = sin$1(c), cc = cos$1(c); return [ atan2(x * sc, z * cc), asin(z && y * sc / z) ]; } } var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) { return sqrt(2 / (1 + cxcy)); }); azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) { return 2 * asin(z / 2); }); function azimuthalEqualArea() { return projection(azimuthalEqualAreaRaw) .scale(124.75) .clipAngle(180 - 1e-3); } var azimuthalEquidistantRaw = azimuthalRaw(function(c) { return (c = acos(c)) && c / sin$1(c); }); azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) { return z; }); function azimuthalEquidistant() { return projection(azimuthalEquidistantRaw) .scale(79.4188) .clipAngle(180 - 1e-3); } function mercatorRaw(lambda, phi) { return [lambda, log(tan((halfPi$2 + phi) / 2))]; } mercatorRaw.invert = function(x, y) { return [x, 2 * atan(exp(y)) - halfPi$2]; }; function mercator() { return mercatorProjection(mercatorRaw) .scale(961 / tau$3); } function mercatorProjection(project) { var m = projection(project), center = m.center, scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, x0 = null, y0, x1, y1; // clip extent m.scale = function(_) { return arguments.length ? (scale(_), reclip()) : scale(); }; m.translate = function(_) { return arguments.length ? (translate(_), reclip()) : translate(); }; m.center = function(_) { return arguments.length ? (center(_), reclip()) : center(); }; m.clipExtent = function(_) { return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]]; }; function reclip() { var k = pi$3 * scale(), t = m(rotation(m.rotate()).invert([0, 0])); return clipExtent(x0 == null ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]] : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]); } return reclip(); } function tany(y) { return tan((halfPi$2 + y) / 2); } function conicConformalRaw(y0, y1) { var cy0 = cos$1(y0), n = y0 === y1 ? sin$1(y0) : log(cy0 / cos$1(y1)) / log(tany(y1) / tany(y0)), f = cy0 * pow(tany(y0), n) / n; if (!n) return mercatorRaw; function project(x, y) { if (f > 0) { if (y < -halfPi$2 + epsilon$2) y = -halfPi$2 + epsilon$2; } else { if (y > halfPi$2 - epsilon$2) y = halfPi$2 - epsilon$2; } var r = f / pow(tany(y), n); return [r * sin$1(n * x), f - r * cos$1(n * x)]; } project.invert = function(x, y) { var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy); return [atan2(x, abs(fy)) / n * sign(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi$2]; }; return project; } function conicConformal() { return conicProjection(conicConformalRaw) .scale(109.5) .parallels([30, 30]); } function equirectangularRaw(lambda, phi) { return [lambda, phi]; } equirectangularRaw.invert = equirectangularRaw; function equirectangular() { return projection(equirectangularRaw) .scale(152.63); } function conicEquidistantRaw(y0, y1) { var cy0 = cos$1(y0), n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0), g = cy0 / n + y0; if (abs(n) < epsilon$2) return equirectangularRaw; function project(x, y) { var gy = g - y, nx = n * x; return [gy * sin$1(nx), g - gy * cos$1(nx)]; } project.invert = function(x, y) { var gy = g - y; return [atan2(x, abs(gy)) / n * sign(gy), g - sign(n) * sqrt(x * x + gy * gy)]; }; return project; } function conicEquidistant() { return conicProjection(conicEquidistantRaw) .scale(131.154) .center([0, 13.9389]); } var A1 = 1.340264, A2 = -0.081106, A3 = 0.000893, A4 = 0.003796, M = sqrt(3) / 2, iterations = 12; function equalEarthRaw(lambda, phi) { var l = asin(M * sin$1(phi)), l2 = l * l, l6 = l2 * l2 * l2; return [ lambda * cos$1(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))), l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) ]; } equalEarthRaw.invert = function(x, y) { var l = y, l2 = l * l, l6 = l2 * l2 * l2; for (var i = 0, delta, fy, fpy; i < iterations; ++i) { fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y; fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2); l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2; if (abs(delta) < epsilon2$1) break; } return [ M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos$1(l), asin(sin$1(l) / M) ]; }; function equalEarth() { return projection(equalEarthRaw) .scale(177.158); } function gnomonicRaw(x, y) { var cy = cos$1(y), k = cos$1(x) * cy; return [cy * sin$1(x) / k, sin$1(y) / k]; } gnomonicRaw.invert = azimuthalInvert(atan); function gnomonic() { return projection(gnomonicRaw) .scale(144.049) .clipAngle(60); } function scaleTranslate$1(kx, ky, tx, ty) { return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity$4 : transformer({ point: function(x, y) { this.stream.point(x * kx + tx, y * ky + ty); } }); } function identity$5() { var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = identity$4, // scale, translate and reflect x0 = null, y0, x1, y1, // clip extent postclip = identity$4, cache, cacheStream, projection; function reset() { cache = cacheStream = null; return projection; } return projection = { stream: function(stream) { return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream)); }, postclip: function(_) { return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip; }, clipExtent: function(_) { return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]]; }, scale: function(_) { return arguments.length ? (transform = scaleTranslate$1((k = +_) * sx, k * sy, tx, ty), reset()) : k; }, translate: function(_) { return arguments.length ? (transform = scaleTranslate$1(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty]; }, reflectX: function(_) { return arguments.length ? (transform = scaleTranslate$1(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0; }, reflectY: function(_) { return arguments.length ? (transform = scaleTranslate$1(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0; }, fitExtent: function(extent, object) { return fitExtent(projection, extent, object); }, fitSize: function(size, object) { return fitSize(projection, size, object); }, fitWidth: function(width, object) { return fitWidth(projection, width, object); }, fitHeight: function(height, object) { return fitHeight(projection, height, object); } }; } function naturalEarth1Raw(lambda, phi) { var phi2 = phi * phi, phi4 = phi2 * phi2; return [ lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))), phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) ]; } naturalEarth1Raw.invert = function(x, y) { var phi = y, i = 25, delta; do { var phi2 = phi * phi, phi4 = phi2 * phi2; phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) / (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4))); } while (abs(delta) > epsilon$2 && --i > 0); return [ x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))), phi ]; }; function naturalEarth1() { return projection(naturalEarth1Raw) .scale(175.295); } function orthographicRaw(x, y) { return [cos$1(y) * sin$1(x), sin$1(y)]; } orthographicRaw.invert = azimuthalInvert(asin); function orthographic() { return projection(orthographicRaw) .scale(249.5) .clipAngle(90 + epsilon$2); } function stereographicRaw(x, y) { var cy = cos$1(y), k = 1 + cos$1(x) * cy; return [cy * sin$1(x) / k, sin$1(y) / k]; } stereographicRaw.invert = azimuthalInvert(function(z) { return 2 * atan(z); }); function stereographic() { return projection(stereographicRaw) .scale(250) .clipAngle(142); } function transverseMercatorRaw(lambda, phi) { return [log(tan((halfPi$2 + phi) / 2)), -lambda]; } transverseMercatorRaw.invert = function(x, y) { return [-y, 2 * atan(exp(x)) - halfPi$2]; }; function transverseMercator() { var m = mercatorProjection(transverseMercatorRaw), center = m.center, rotate = m.rotate; m.center = function(_) { return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]); }; m.rotate = function(_) { return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]); }; return rotate([0, 0, 90]) .scale(159.155); } function defaultSeparation(a, b) { return a.parent === b.parent ? 1 : 2; } function meanX(children) { return children.reduce(meanXReduce, 0) / children.length; } function meanXReduce(x, c) { return x + c.x; } function maxY(children) { return 1 + children.reduce(maxYReduce, 0); } function maxYReduce(y, c) { return Math.max(y, c.y); } function leafLeft(node) { var children; while (children = node.children) node = children[0]; return node; } function leafRight(node) { var children; while (children = node.children) node = children[children.length - 1]; return node; } function cluster() { var separation = defaultSeparation, dx = 1, dy = 1, nodeSize = false; function cluster(root) { var previousNode, x = 0; // First walk, computing the initial x & y values. root.eachAfter(function(node) { var children = node.children; if (children) { node.x = meanX(children); node.y = maxY(children); } else { node.x = previousNode ? x += separation(node, previousNode) : 0; node.y = 0; previousNode = node; } }); var left = leafLeft(root), right = leafRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2; // Second walk, normalizing x & y to the desired size. return root.eachAfter(nodeSize ? function(node) { node.x = (node.x - root.x) * dx; node.y = (root.y - node.y) * dy; } : function(node) { node.x = (node.x - x0) / (x1 - x0) * dx; node.y = (1 - (root.y ? node.y / root.y : 1)) * dy; }); } cluster.separation = function(x) { return arguments.length ? (separation = x, cluster) : separation; }; cluster.size = function(x) { return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]); }; cluster.nodeSize = function(x) { return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null); }; return cluster; } function count(node) { var sum = 0, children = node.children, i = children && children.length; if (!i) sum = 1; else while (--i >= 0) sum += children[i].value; node.value = sum; } function node_count() { return this.eachAfter(count); } function node_each(callback) { var node = this, current, next = [node], children, i, n; do { current = next.reverse(), next = []; while (node = current.pop()) { callback(node), children = node.children; if (children) for (i = 0, n = children.length; i < n; ++i) { next.push(children[i]); } } } while (next.length); return this; } function node_eachBefore(callback) { var node = this, nodes = [node], children, i; while (node = nodes.pop()) { callback(node), children = node.children; if (children) for (i = children.length - 1; i >= 0; --i) { nodes.push(children[i]); } } return this; } function node_eachAfter(callback) { var node = this, nodes = [node], next = [], children, i, n; while (node = nodes.pop()) { next.push(node), children = node.children; if (children) for (i = 0, n = children.length; i < n; ++i) { nodes.push(children[i]); } } while (node = next.pop()) { callback(node); } return this; } function node_sum(value) { return this.eachAfter(function(node) { var sum = +value(node.data) || 0, children = node.children, i = children && children.length; while (--i >= 0) sum += children[i].value; node.value = sum; }); } function node_sort(compare) { return this.eachBefore(function(node) { if (node.children) { node.children.sort(compare); } }); } function node_path(end) { var start = this, ancestor = leastCommonAncestor(start, end), nodes = [start]; while (start !== ancestor) { start = start.parent; nodes.push(start); } var k = nodes.length; while (end !== ancestor) { nodes.splice(k, 0, end); end = end.parent; } return nodes; } function leastCommonAncestor(a, b) { if (a === b) return a; var aNodes = a.ancestors(), bNodes = b.ancestors(), c = null; a = aNodes.pop(); b = bNodes.pop(); while (a === b) { c = a; a = aNodes.pop(); b = bNodes.pop(); } return c; } function node_ancestors() { var node = this, nodes = [node]; while (node = node.parent) { nodes.push(node); } return nodes; } function node_descendants() { var nodes = []; this.each(function(node) { nodes.push(node); }); return nodes; } function node_leaves() { var leaves = []; this.eachBefore(function(node) { if (!node.children) { leaves.push(node); } }); return leaves; } function node_links() { var root = this, links = []; root.each(function(node) { if (node !== root) { // Don’t include the root’s parent, if any. links.push({source: node.parent, target: node}); } }); return links; } function hierarchy(data, children) { var root = new Node(data), valued = +data.value && (root.value = data.value), node, nodes = [root], child, childs, i, n; if (children == null) children = defaultChildren; while (node = nodes.pop()) { if (valued) node.value = +node.data.value; if ((childs = children(node.data)) && (n = childs.length)) { node.children = new Array(n); for (i = n - 1; i >= 0; --i) { nodes.push(child = node.children[i] = new Node(childs[i])); child.parent = node; child.depth = node.depth + 1; } } } return root.eachBefore(computeHeight); } function node_copy() { return hierarchy(this).eachBefore(copyData); } function defaultChildren(d) { return d.children; } function copyData(node) { node.data = node.data.data; } function computeHeight(node) { var height = 0; do node.height = height; while ((node = node.parent) && (node.height < ++height)); } function Node(data) { this.data = data; this.depth = this.height = 0; this.parent = null; } Node.prototype = hierarchy.prototype = { constructor: Node, count: node_count, each: node_each, eachAfter: node_eachAfter, eachBefore: node_eachBefore, sum: node_sum, sort: node_sort, path: node_path, ancestors: node_ancestors, descendants: node_descendants, leaves: node_leaves, links: node_links, copy: node_copy }; var slice$4 = Array.prototype.slice; function shuffle$1(array) { var m = array.length, t, i; while (m) { i = Math.random() * m-- | 0; t = array[m]; array[m] = array[i]; array[i] = t; } return array; } function enclose(circles) { var i = 0, n = (circles = shuffle$1(slice$4.call(circles))).length, B = [], p, e; while (i < n) { p = circles[i]; if (e && enclosesWeak(e, p)) ++i; else e = encloseBasis(B = extendBasis(B, p)), i = 0; } return e; } function extendBasis(B, p) { var i, j; if (enclosesWeakAll(p, B)) return [p]; // If we get here then B must have at least one element. for (i = 0; i < B.length; ++i) { if (enclosesNot(p, B[i]) && enclosesWeakAll(encloseBasis2(B[i], p), B)) { return [B[i], p]; } } // If we get here then B must have at least two elements. for (i = 0; i < B.length - 1; ++i) { for (j = i + 1; j < B.length; ++j) { if (enclosesNot(encloseBasis2(B[i], B[j]), p) && enclosesNot(encloseBasis2(B[i], p), B[j]) && enclosesNot(encloseBasis2(B[j], p), B[i]) && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) { return [B[i], B[j], p]; } } } // If we get here then something is very wrong. throw new Error; } function enclosesNot(a, b) { var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y; return dr < 0 || dr * dr < dx * dx + dy * dy; } function enclosesWeak(a, b) { var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y; return dr > 0 && dr * dr > dx * dx + dy * dy; } function enclosesWeakAll(a, B) { for (var i = 0; i < B.length; ++i) { if (!enclosesWeak(a, B[i])) { return false; } } return true; } function encloseBasis(B) { switch (B.length) { case 1: return encloseBasis1(B[0]); case 2: return encloseBasis2(B[0], B[1]); case 3: return encloseBasis3(B[0], B[1], B[2]); } } function encloseBasis1(a) { return { x: a.x, y: a.y, r: a.r }; } function encloseBasis2(a, b) { var x1 = a.x, y1 = a.y, r1 = a.r, x2 = b.x, y2 = b.y, r2 = b.r, x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1, l = Math.sqrt(x21 * x21 + y21 * y21); return { x: (x1 + x2 + x21 / l * r21) / 2, y: (y1 + y2 + y21 / l * r21) / 2, r: (l + r1 + r2) / 2 }; } function encloseBasis3(a, b, c) { var x1 = a.x, y1 = a.y, r1 = a.r, x2 = b.x, y2 = b.y, r2 = b.r, x3 = c.x, y3 = c.y, r3 = c.r, a2 = x1 - x2, a3 = x1 - x3, b2 = y1 - y2, b3 = y1 - y3, c2 = r2 - r1, c3 = r3 - r1, d1 = x1 * x1 + y1 * y1 - r1 * r1, d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2, d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3, ab = a3 * b2 - a2 * b3, xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1, xb = (b3 * c2 - b2 * c3) / ab, ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1, yb = (a2 * c3 - a3 * c2) / ab, A = xb * xb + yb * yb - 1, B = 2 * (r1 + xa * xb + ya * yb), C = xa * xa + ya * ya - r1 * r1, r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B); return { x: x1 + xa + xb * r, y: y1 + ya + yb * r, r: r }; } function place(b, a, c) { var dx = b.x - a.x, x, a2, dy = b.y - a.y, y, b2, d2 = dx * dx + dy * dy; if (d2) { a2 = a.r + c.r, a2 *= a2; b2 = b.r + c.r, b2 *= b2; if (a2 > b2) { x = (d2 + b2 - a2) / (2 * d2); y = Math.sqrt(Math.max(0, b2 / d2 - x * x)); c.x = b.x - x * dx - y * dy; c.y = b.y - x * dy + y * dx; } else { x = (d2 + a2 - b2) / (2 * d2); y = Math.sqrt(Math.max(0, a2 / d2 - x * x)); c.x = a.x + x * dx - y * dy; c.y = a.y + x * dy + y * dx; } } else { c.x = a.x + c.r; c.y = a.y; } } function intersects(a, b) { var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y; return dr > 0 && dr * dr > dx * dx + dy * dy; } function score(node) { var a = node._, b = node.next._, ab = a.r + b.r, dx = (a.x * b.r + b.x * a.r) / ab, dy = (a.y * b.r + b.y * a.r) / ab; return dx * dx + dy * dy; } function Node$1(circle) { this._ = circle; this.next = null; this.previous = null; } function packEnclose(circles) { if (!(n = circles.length)) return 0; var a, b, c, n, aa, ca, i, j, k, sj, sk; // Place the first circle. a = circles[0], a.x = 0, a.y = 0; if (!(n > 1)) return a.r; // Place the second circle. b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0; if (!(n > 2)) return a.r + b.r; // Place the third circle. place(b, a, c = circles[2]); // Initialize the front-chain using the first three circles a, b and c. a = new Node$1(a), b = new Node$1(b), c = new Node$1(c); a.next = c.previous = b; b.next = a.previous = c; c.next = b.previous = a; // Attempt to place each remaining circle… pack: for (i = 3; i < n; ++i) { place(a._, b._, c = circles[i]), c = new Node$1(c); // Find the closest intersecting circle on the front-chain, if any. // “Closeness” is determined by linear distance along the front-chain. // “Ahead” or “behind” is likewise determined by linear distance. j = b.next, k = a.previous, sj = b._.r, sk = a._.r; do { if (sj <= sk) { if (intersects(j._, c._)) { b = j, a.next = b, b.previous = a, --i; continue pack; } sj += j._.r, j = j.next; } else { if (intersects(k._, c._)) { a = k, a.next = b, b.previous = a, --i; continue pack; } sk += k._.r, k = k.previous; } } while (j !== k.next); // Success! Insert the new circle c between a and b. c.previous = a, c.next = b, a.next = b.previous = b = c; // Compute the new closest circle pair to the centroid. aa = score(a); while ((c = c.next) !== b) { if ((ca = score(c)) < aa) { a = c, aa = ca; } } b = a.next; } // Compute the enclosing circle of the front chain. a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a); // Translate the circles to put the enclosing circle around the origin. for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y; return c.r; } function siblings(circles) { packEnclose(circles); return circles; } function optional(f) { return f == null ? null : required(f); } function required(f) { if (typeof f !== "function") throw new Error; return f; } function constantZero() { return 0; } function constant$9(x) { return function() { return x; }; } function defaultRadius$1(d) { return Math.sqrt(d.value); } function index$2() { var radius = null, dx = 1, dy = 1, padding = constantZero; function pack(root) { root.x = dx / 2, root.y = dy / 2; if (radius) { root.eachBefore(radiusLeaf(radius)) .eachAfter(packChildren(padding, 0.5)) .eachBefore(translateChild(1)); } else { root.eachBefore(radiusLeaf(defaultRadius$1)) .eachAfter(packChildren(constantZero, 1)) .eachAfter(packChildren(padding, root.r / Math.min(dx, dy))) .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r))); } return root; } pack.radius = function(x) { return arguments.length ? (radius = optional(x), pack) : radius; }; pack.size = function(x) { return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy]; }; pack.padding = function(x) { return arguments.length ? (padding = typeof x === "function" ? x : constant$9(+x), pack) : padding; }; return pack; } function radiusLeaf(radius) { return function(node) { if (!node.children) { node.r = Math.max(0, +radius(node) || 0); } }; } function packChildren(padding, k) { return function(node) { if (children = node.children) { var children, i, n = children.length, r = padding(node) * k || 0, e; if (r) for (i = 0; i < n; ++i) children[i].r += r; e = packEnclose(children); if (r) for (i = 0; i < n; ++i) children[i].r -= r; node.r = e + r; } }; } function translateChild(k) { return function(node) { var parent = node.parent; node.r *= k; if (parent) { node.x = parent.x + k * node.x; node.y = parent.y + k * node.y; } }; } function roundNode(node) { node.x0 = Math.round(node.x0); node.y0 = Math.round(node.y0); node.x1 = Math.round(node.x1); node.y1 = Math.round(node.y1); } function treemapDice(parent, x0, y0, x1, y1) { var nodes = parent.children, node, i = -1, n = nodes.length, k = parent.value && (x1 - x0) / parent.value; while (++i < n) { node = nodes[i], node.y0 = y0, node.y1 = y1; node.x0 = x0, node.x1 = x0 += node.value * k; } } function partition() { var dx = 1, dy = 1, padding = 0, round = false; function partition(root) { var n = root.height + 1; root.x0 = root.y0 = padding; root.x1 = dx; root.y1 = dy / n; root.eachBefore(positionNode(dy, n)); if (round) root.eachBefore(roundNode); return root; } function positionNode(dy, n) { return function(node) { if (node.children) { treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n); } var x0 = node.x0, y0 = node.y0, x1 = node.x1 - padding, y1 = node.y1 - padding; if (x1 < x0) x0 = x1 = (x0 + x1) / 2; if (y1 < y0) y0 = y1 = (y0 + y1) / 2; node.x0 = x0; node.y0 = y0; node.x1 = x1; node.y1 = y1; }; } partition.round = function(x) { return arguments.length ? (round = !!x, partition) : round; }; partition.size = function(x) { return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy]; }; partition.padding = function(x) { return arguments.length ? (padding = +x, partition) : padding; }; return partition; } var keyPrefix$1 = "$", // Protect against keys like “__proto__”. preroot = {depth: -1}, ambiguous = {}; function defaultId(d) { return d.id; } function defaultParentId(d) { return d.parentId; } function stratify() { var id = defaultId, parentId = defaultParentId; function stratify(data) { var d, i, n = data.length, root, parent, node, nodes = new Array(n), nodeId, nodeKey, nodeByKey = {}; for (i = 0; i < n; ++i) { d = data[i], node = nodes[i] = new Node(d); if ((nodeId = id(d, i, data)) != null && (nodeId += "")) { nodeKey = keyPrefix$1 + (node.id = nodeId); nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node; } } for (i = 0; i < n; ++i) { node = nodes[i], nodeId = parentId(data[i], i, data); if (nodeId == null || !(nodeId += "")) { if (root) throw new Error("multiple roots"); root = node; } else { parent = nodeByKey[keyPrefix$1 + nodeId]; if (!parent) throw new Error("missing: " + nodeId); if (parent === ambiguous) throw new Error("ambiguous: " + nodeId); if (parent.children) parent.children.push(node); else parent.children = [node]; node.parent = parent; } } if (!root) throw new Error("no root"); root.parent = preroot; root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight); root.parent = null; if (n > 0) throw new Error("cycle"); return root; } stratify.id = function(x) { return arguments.length ? (id = required(x), stratify) : id; }; stratify.parentId = function(x) { return arguments.length ? (parentId = required(x), stratify) : parentId; }; return stratify; } function defaultSeparation$1(a, b) { return a.parent === b.parent ? 1 : 2; } // function radialSeparation(a, b) { // return (a.parent === b.parent ? 1 : 2) / a.depth; // } // This function is used to traverse the left contour of a subtree (or // subforest). It returns the successor of v on this contour. This successor is // either given by the leftmost child of v or by the thread of v. The function // returns null if and only if v is on the highest level of its subtree. function nextLeft(v) { var children = v.children; return children ? children[0] : v.t; } // This function works analogously to nextLeft. function nextRight(v) { var children = v.children; return children ? children[children.length - 1] : v.t; } // Shifts the current subtree rooted at w+. This is done by increasing // prelim(w+) and mod(w+) by shift. function moveSubtree(wm, wp, shift) { var change = shift / (wp.i - wm.i); wp.c -= change; wp.s += shift; wm.c += change; wp.z += shift; wp.m += shift; } // All other shifts, applied to the smaller subtrees between w- and w+, are // performed by this function. To prepare the shifts, we have to adjust // change(w+), shift(w+), and change(w-). function executeShifts(v) { var shift = 0, change = 0, children = v.children, i = children.length, w; while (--i >= 0) { w = children[i]; w.z += shift; w.m += shift; shift += w.s + (change += w.c); } } // If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise, // returns the specified (default) ancestor. function nextAncestor(vim, v, ancestor) { return vim.a.parent === v.parent ? vim.a : ancestor; } function TreeNode(node, i) { this._ = node; this.parent = null; this.children = null; this.A = null; // default ancestor this.a = this; // ancestor this.z = 0; // prelim this.m = 0; // mod this.c = 0; // change this.s = 0; // shift this.t = null; // thread this.i = i; // number } TreeNode.prototype = Object.create(Node.prototype); function treeRoot(root) { var tree = new TreeNode(root, 0), node, nodes = [tree], child, children, i, n; while (node = nodes.pop()) { if (children = node._.children) { node.children = new Array(n = children.length); for (i = n - 1; i >= 0; --i) { nodes.push(child = node.children[i] = new TreeNode(children[i], i)); child.parent = node; } } } (tree.parent = new TreeNode(null, 0)).children = [tree]; return tree; } // Node-link tree diagram using the Reingold-Tilford "tidy" algorithm function tree() { var separation = defaultSeparation$1, dx = 1, dy = 1, nodeSize = null; function tree(root) { var t = treeRoot(root); // Compute the layout using Buchheim et al.’s algorithm. t.eachAfter(firstWalk), t.parent.m = -t.z; t.eachBefore(secondWalk); // If a fixed node size is specified, scale x and y. if (nodeSize) root.eachBefore(sizeNode); // If a fixed tree size is specified, scale x and y based on the extent. // Compute the left-most, right-most, and depth-most nodes for extents. else { var left = root, right = root, bottom = root; root.eachBefore(function(node) { if (node.x < left.x) left = node; if (node.x > right.x) right = node; if (node.depth > bottom.depth) bottom = node; }); var s = left === right ? 1 : separation(left, right) / 2, tx = s - left.x, kx = dx / (right.x + s + tx), ky = dy / (bottom.depth || 1); root.eachBefore(function(node) { node.x = (node.x + tx) * kx; node.y = node.depth * ky; }); } return root; } // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is // applied recursively to the children of v, as well as the function // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the // node v is placed to the midpoint of its outermost children. function firstWalk(v) { var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null; if (children) { executeShifts(v); var midpoint = (children[0].z + children[children.length - 1].z) / 2; if (w) { v.z = w.z + separation(v._, w._); v.m = v.z - midpoint; } else { v.z = midpoint; } } else if (w) { v.z = w.z + separation(v._, w._); } v.parent.A = apportion(v, w, v.parent.A || siblings[0]); } // Computes all real x-coordinates by summing up the modifiers recursively. function secondWalk(v) { v._.x = v.z + v.parent.m; v.m += v.parent.m; } // The core of the algorithm. Here, a new subtree is combined with the // previous subtrees. Threads are used to traverse the inside and outside // contours of the left and right subtree up to the highest common level. The // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the // superscript o means outside and i means inside, the subscript - means left // subtree and + means right subtree. For summing up the modifiers along the // contour, we use respective variables si+, si-, so-, and so+. Whenever two // nodes of the inside contours conflict, we compute the left one of the // greatest uncommon ancestors using the function ANCESTOR and call MOVE // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees. // Finally, we add a new thread (if necessary). function apportion(v, w, ancestor) { if (w) { var vip = v, vop = v, vim = w, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift; while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) { vom = nextLeft(vom); vop = nextRight(vop); vop.a = v; shift = vim.z + sim - vip.z - sip + separation(vim._, vip._); if (shift > 0) { moveSubtree(nextAncestor(vim, v, ancestor), v, shift); sip += shift; sop += shift; } sim += vim.m; sip += vip.m; som += vom.m; sop += vop.m; } if (vim && !nextRight(vop)) { vop.t = vim; vop.m += sim - sop; } if (vip && !nextLeft(vom)) { vom.t = vip; vom.m += sip - som; ancestor = v; } } return ancestor; } function sizeNode(node) { node.x *= dx; node.y = node.depth * dy; } tree.separation = function(x) { return arguments.length ? (separation = x, tree) : separation; }; tree.size = function(x) { return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]); }; tree.nodeSize = function(x) { return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null); }; return tree; } function treemapSlice(parent, x0, y0, x1, y1) { var nodes = parent.children, node, i = -1, n = nodes.length, k = parent.value && (y1 - y0) / parent.value; while (++i < n) { node = nodes[i], node.x0 = x0, node.x1 = x1; node.y0 = y0, node.y1 = y0 += node.value * k; } } var phi = (1 + Math.sqrt(5)) / 2; function squarifyRatio(ratio, parent, x0, y0, x1, y1) { var rows = [], nodes = parent.children, row, nodeValue, i0 = 0, i1 = 0, n = nodes.length, dx, dy, value = parent.value, sumValue, minValue, maxValue, newRatio, minRatio, alpha, beta; while (i0 < n) { dx = x1 - x0, dy = y1 - y0; // Find the next non-empty node. do sumValue = nodes[i1++].value; while (!sumValue && i1 < n); minValue = maxValue = sumValue; alpha = Math.max(dy / dx, dx / dy) / (value * ratio); beta = sumValue * sumValue * alpha; minRatio = Math.max(maxValue / beta, beta / minValue); // Keep adding nodes while the aspect ratio maintains or improves. for (; i1 < n; ++i1) { sumValue += nodeValue = nodes[i1].value; if (nodeValue < minValue) minValue = nodeValue; if (nodeValue > maxValue) maxValue = nodeValue; beta = sumValue * sumValue * alpha; newRatio = Math.max(maxValue / beta, beta / minValue); if (newRatio > minRatio) { sumValue -= nodeValue; break; } minRatio = newRatio; } // Position and record the row orientation. rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)}); if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1); else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1); value -= sumValue, i0 = i1; } return rows; } var squarify = (function custom(ratio) { function squarify(parent, x0, y0, x1, y1) { squarifyRatio(ratio, parent, x0, y0, x1, y1); } squarify.ratio = function(x) { return custom((x = +x) > 1 ? x : 1); }; return squarify; })(phi); function index$3() { var tile = squarify, round = false, dx = 1, dy = 1, paddingStack = [0], paddingInner = constantZero, paddingTop = constantZero, paddingRight = constantZero, paddingBottom = constantZero, paddingLeft = constantZero; function treemap(root) { root.x0 = root.y0 = 0; root.x1 = dx; root.y1 = dy; root.eachBefore(positionNode); paddingStack = [0]; if (round) root.eachBefore(roundNode); return root; } function positionNode(node) { var p = paddingStack[node.depth], x0 = node.x0 + p, y0 = node.y0 + p, x1 = node.x1 - p, y1 = node.y1 - p; if (x1 < x0) x0 = x1 = (x0 + x1) / 2; if (y1 < y0) y0 = y1 = (y0 + y1) / 2; node.x0 = x0; node.y0 = y0; node.x1 = x1; node.y1 = y1; if (node.children) { p = paddingStack[node.depth + 1] = paddingInner(node) / 2; x0 += paddingLeft(node) - p; y0 += paddingTop(node) - p; x1 -= paddingRight(node) - p; y1 -= paddingBottom(node) - p; if (x1 < x0) x0 = x1 = (x0 + x1) / 2; if (y1 < y0) y0 = y1 = (y0 + y1) / 2; tile(node, x0, y0, x1, y1); } } treemap.round = function(x) { return arguments.length ? (round = !!x, treemap) : round; }; treemap.size = function(x) { return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy]; }; treemap.tile = function(x) { return arguments.length ? (tile = required(x), treemap) : tile; }; treemap.padding = function(x) { return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner(); }; treemap.paddingInner = function(x) { return arguments.length ? (paddingInner = typeof x === "function" ? x : constant$9(+x), treemap) : paddingInner; }; treemap.paddingOuter = function(x) { return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop(); }; treemap.paddingTop = function(x) { return arguments.length ? (paddingTop = typeof x === "function" ? x : constant$9(+x), treemap) : paddingTop; }; treemap.paddingRight = function(x) { return arguments.length ? (paddingRight = typeof x === "function" ? x : constant$9(+x), treemap) : paddingRight; }; treemap.paddingBottom = function(x) { return arguments.length ? (paddingBottom = typeof x === "function" ? x : constant$9(+x), treemap) : paddingBottom; }; treemap.paddingLeft = function(x) { return arguments.length ? (paddingLeft = typeof x === "function" ? x : constant$9(+x), treemap) : paddingLeft; }; return treemap; } function binary(parent, x0, y0, x1, y1) { var nodes = parent.children, i, n = nodes.length, sum, sums = new Array(n + 1); for (sums[0] = sum = i = 0; i < n; ++i) { sums[i + 1] = sum += nodes[i].value; } partition(0, n, parent.value, x0, y0, x1, y1); function partition(i, j, value, x0, y0, x1, y1) { if (i >= j - 1) { var node = nodes[i]; node.x0 = x0, node.y0 = y0; node.x1 = x1, node.y1 = y1; return; } var valueOffset = sums[i], valueTarget = (value / 2) + valueOffset, k = i + 1, hi = j - 1; while (k < hi) { var mid = k + hi >>> 1; if (sums[mid] < valueTarget) k = mid + 1; else hi = mid; } if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k; var valueLeft = sums[k] - valueOffset, valueRight = value - valueLeft; if ((x1 - x0) > (y1 - y0)) { var xk = (x0 * valueRight + x1 * valueLeft) / value; partition(i, k, valueLeft, x0, y0, xk, y1); partition(k, j, valueRight, xk, y0, x1, y1); } else { var yk = (y0 * valueRight + y1 * valueLeft) / value; partition(i, k, valueLeft, x0, y0, x1, yk); partition(k, j, valueRight, x0, yk, x1, y1); } } } function sliceDice(parent, x0, y0, x1, y1) { (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1); } var resquarify = (function custom(ratio) { function resquarify(parent, x0, y0, x1, y1) { if ((rows = parent._squarify) && (rows.ratio === ratio)) { var rows, row, nodes, i, j = -1, n, m = rows.length, value = parent.value; while (++j < m) { row = rows[j], nodes = row.children; for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value; if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value); else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1); value -= row.value; } } else { parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1); rows.ratio = ratio; } } resquarify.ratio = function(x) { return custom((x = +x) > 1 ? x : 1); }; return resquarify; })(phi); function area$2(polygon) { var i = -1, n = polygon.length, a, b = polygon[n - 1], area = 0; while (++i < n) { a = b; b = polygon[i]; area += a[1] * b[0] - a[0] * b[1]; } return area / 2; } function centroid$1(polygon) { var i = -1, n = polygon.length, x = 0, y = 0, a, b = polygon[n - 1], c, k = 0; while (++i < n) { a = b; b = polygon[i]; k += c = a[0] * b[1] - b[0] * a[1]; x += (a[0] + b[0]) * c; y += (a[1] + b[1]) * c; } return k *= 3, [x / k, y / k]; } // Returns the 2D cross product of AB and AC vectors, i.e., the z-component of // the 3D cross product in a quadrant I Cartesian coordinate system (+x is // right, +y is up). Returns a positive value if ABC is counter-clockwise, // negative if clockwise, and zero if the points are collinear. function cross$1(a, b, c) { return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]); } function lexicographicOrder(a, b) { return a[0] - b[0] || a[1] - b[1]; } // Computes the upper convex hull per the monotone chain algorithm. // Assumes points.length >= 3, is sorted by x, unique in y. // Returns an array of indices into points in left-to-right order. function computeUpperHullIndexes(points) { var n = points.length, indexes = [0, 1], size = 2; for (var i = 2; i < n; ++i) { while (size > 1 && cross$1(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size; indexes[size++] = i; } return indexes.slice(0, size); // remove popped points } function hull(points) { if ((n = points.length) < 3) return null; var i, n, sortedPoints = new Array(n), flippedPoints = new Array(n); for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i]; sortedPoints.sort(lexicographicOrder); for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]]; var upperIndexes = computeUpperHullIndexes(sortedPoints), lowerIndexes = computeUpperHullIndexes(flippedPoints); // Construct the hull polygon, removing possible duplicate endpoints. var skipLeft = lowerIndexes[0] === upperIndexes[0], skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1], hull = []; // Add upper hull in right-to-l order. // Then add lower hull in left-to-right order. for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]); for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]); return hull; } function contains$2(polygon, point) { var n = polygon.length, p = polygon[n - 1], x = point[0], y = point[1], x0 = p[0], y0 = p[1], x1, y1, inside = false; for (var i = 0; i < n; ++i) { p = polygon[i], x1 = p[0], y1 = p[1]; if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside; x0 = x1, y0 = y1; } return inside; } function length$2(polygon) { var i = -1, n = polygon.length, b = polygon[n - 1], xa, ya, xb = b[0], yb = b[1], perimeter = 0; while (++i < n) { xa = xb; ya = yb; b = polygon[i]; xb = b[0]; yb = b[1]; xa -= xb; ya -= yb; perimeter += Math.sqrt(xa * xa + ya * ya); } return perimeter; } function defaultSource$1() { return Math.random(); } var uniform = (function sourceRandomUniform(source) { function randomUniform(min, max) { min = min == null ? 0 : +min; max = max == null ? 1 : +max; if (arguments.length === 1) max = min, min = 0; else max -= min; return function() { return source() * max + min; }; } randomUniform.source = sourceRandomUniform; return randomUniform; })(defaultSource$1); var normal = (function sourceRandomNormal(source) { function randomNormal(mu, sigma) { var x, r; mu = mu == null ? 0 : +mu; sigma = sigma == null ? 1 : +sigma; return function() { var y; // If available, use the second previously-generated uniform random. if (x != null) y = x, x = null; // Otherwise, generate a new x and y. else do { x = source() * 2 - 1; y = source() * 2 - 1; r = x * x + y * y; } while (!r || r > 1); return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r); }; } randomNormal.source = sourceRandomNormal; return randomNormal; })(defaultSource$1); var logNormal = (function sourceRandomLogNormal(source) { function randomLogNormal() { var randomNormal = normal.source(source).apply(this, arguments); return function() { return Math.exp(randomNormal()); }; } randomLogNormal.source = sourceRandomLogNormal; return randomLogNormal; })(defaultSource$1); var irwinHall = (function sourceRandomIrwinHall(source) { function randomIrwinHall(n) { return function() { for (var sum = 0, i = 0; i < n; ++i) sum += source(); return sum; }; } randomIrwinHall.source = sourceRandomIrwinHall; return randomIrwinHall; })(defaultSource$1); var bates = (function sourceRandomBates(source) { function randomBates(n) { var randomIrwinHall = irwinHall.source(source)(n); return function() { return randomIrwinHall() / n; }; } randomBates.source = sourceRandomBates; return randomBates; })(defaultSource$1); var exponential$1 = (function sourceRandomExponential(source) { function randomExponential(lambda) { return function() { return -Math.log(1 - source()) / lambda; }; } randomExponential.source = sourceRandomExponential; return randomExponential; })(defaultSource$1); function initRange(domain, range) { switch (arguments.length) { case 0: break; case 1: this.range(domain); break; default: this.range(range).domain(domain); break; } return this; } function initInterpolator(domain, interpolator) { switch (arguments.length) { case 0: break; case 1: this.interpolator(domain); break; default: this.interpolator(interpolator).domain(domain); break; } return this; } var array$3 = Array.prototype; var map$3 = array$3.map; var slice$5 = array$3.slice; var implicit = {name: "implicit"}; function ordinal() { var index = map$1(), domain = [], range = [], unknown = implicit; function scale(d) { var key = d + "", i = index.get(key); if (!i) { if (unknown !== implicit) return unknown; index.set(key, i = domain.push(d)); } return range[(i - 1) % range.length]; } scale.domain = function(_) { if (!arguments.length) return domain.slice(); domain = [], index = map$1(); var i = -1, n = _.length, d, key; while (++i < n) if (!index.has(key = (d = _[i]) + "")) index.set(key, domain.push(d)); return scale; }; scale.range = function(_) { return arguments.length ? (range = slice$5.call(_), scale) : range.slice(); }; scale.unknown = function(_) { return arguments.length ? (unknown = _, scale) : unknown; }; scale.copy = function() { return ordinal(domain, range).unknown(unknown); }; initRange.apply(scale, arguments); return scale; } function band() { var scale = ordinal().unknown(undefined), domain = scale.domain, ordinalRange = scale.range, range = [0, 1], step, bandwidth, round = false, paddingInner = 0, paddingOuter = 0, align = 0.5; delete scale.unknown; function rescale() { var n = domain().length, reverse = range[1] < range[0], start = range[reverse - 0], stop = range[1 - reverse]; step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2); if (round) step = Math.floor(step); start += (stop - start - step * (n - paddingInner)) * align; bandwidth = step * (1 - paddingInner); if (round) start = Math.round(start), bandwidth = Math.round(bandwidth); var values = sequence(n).map(function(i) { return start + step * i; }); return ordinalRange(reverse ? values.reverse() : values); } scale.domain = function(_) { return arguments.length ? (domain(_), rescale()) : domain(); }; scale.range = function(_) { return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice(); }; scale.rangeRound = function(_) { return range = [+_[0], +_[1]], round = true, rescale(); }; scale.bandwidth = function() { return bandwidth; }; scale.step = function() { return step; }; scale.round = function(_) { return arguments.length ? (round = !!_, rescale()) : round; }; scale.padding = function(_) { return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner; }; scale.paddingInner = function(_) { return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner; }; scale.paddingOuter = function(_) { return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter; }; scale.align = function(_) { return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align; }; scale.copy = function() { return band(domain(), range) .round(round) .paddingInner(paddingInner) .paddingOuter(paddingOuter) .align(align); }; return initRange.apply(rescale(), arguments); } function pointish(scale) { var copy = scale.copy; scale.padding = scale.paddingOuter; delete scale.paddingInner; delete scale.paddingOuter; scale.copy = function() { return pointish(copy()); }; return scale; } function point$1() { return pointish(band.apply(null, arguments).paddingInner(1)); } function constant$a(x) { return function() { return x; }; } function number$2(x) { return +x; } var unit = [0, 1]; function identity$6(x) { return x; } function normalize(a, b) { return (b -= (a = +a)) ? function(x) { return (x - a) / b; } : constant$a(isNaN(b) ? NaN : 0.5); } function clamper(domain) { var a = domain[0], b = domain[domain.length - 1], t; if (a > b) t = a, a = b, b = t; return function(x) { return Math.max(a, Math.min(b, x)); }; } // normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1]. // interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b]. function bimap(domain, range, interpolate) { var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1]; if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0); else d0 = normalize(d0, d1), r0 = interpolate(r0, r1); return function(x) { return r0(d0(x)); }; } function polymap(domain, range, interpolate) { var j = Math.min(domain.length, range.length) - 1, d = new Array(j), r = new Array(j), i = -1; // Reverse descending domains. if (domain[j] < domain[0]) { domain = domain.slice().reverse(); range = range.slice().reverse(); } while (++i < j) { d[i] = normalize(domain[i], domain[i + 1]); r[i] = interpolate(range[i], range[i + 1]); } return function(x) { var i = bisectRight(domain, x, 1, j) - 1; return r[i](d[i](x)); }; } function copy(source, target) { return target .domain(source.domain()) .range(source.range()) .interpolate(source.interpolate()) .clamp(source.clamp()) .unknown(source.unknown()); } function transformer$1() { var domain = unit, range = unit, interpolate = interpolateValue, transform, untransform, unknown, clamp = identity$6, piecewise, output, input; function rescale() { piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap; output = input = null; return scale; } function scale(x) { return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x))); } scale.invert = function(y) { return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y))); }; scale.domain = function(_) { return arguments.length ? (domain = map$3.call(_, number$2), clamp === identity$6 || (clamp = clamper(domain)), rescale()) : domain.slice(); }; scale.range = function(_) { return arguments.length ? (range = slice$5.call(_), rescale()) : range.slice(); }; scale.rangeRound = function(_) { return range = slice$5.call(_), interpolate = interpolateRound, rescale(); }; scale.clamp = function(_) { return arguments.length ? (clamp = _ ? clamper(domain) : identity$6, scale) : clamp !== identity$6; }; scale.interpolate = function(_) { return arguments.length ? (interpolate = _, rescale()) : interpolate; }; scale.unknown = function(_) { return arguments.length ? (unknown = _, scale) : unknown; }; return function(t, u) { transform = t, untransform = u; return rescale(); }; } function continuous(transform, untransform) { return transformer$1()(transform, untransform); } function tickFormat(start, stop, count, specifier) { var step = tickStep(start, stop, count), precision; specifier = formatSpecifier(specifier == null ? ",f" : specifier); switch (specifier.type) { case "s": { var value = Math.max(Math.abs(start), Math.abs(stop)); if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision; return exports.formatPrefix(specifier, value); } case "": case "e": case "g": case "p": case "r": { if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e"); break; } case "f": case "%": { if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2; break; } } return exports.format(specifier); } function linearish(scale) { var domain = scale.domain; scale.ticks = function(count) { var d = domain(); return ticks(d[0], d[d.length - 1], count == null ? 10 : count); }; scale.tickFormat = function(count, specifier) { var d = domain(); return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier); }; scale.nice = function(count) { if (count == null) count = 10; var d = domain(), i0 = 0, i1 = d.length - 1, start = d[i0], stop = d[i1], step; if (stop < start) { step = start, start = stop, stop = step; step = i0, i0 = i1, i1 = step; } step = tickIncrement(start, stop, count); if (step > 0) { start = Math.floor(start / step) * step; stop = Math.ceil(stop / step) * step; step = tickIncrement(start, stop, count); } else if (step < 0) { start = Math.ceil(start * step) / step; stop = Math.floor(stop * step) / step; step = tickIncrement(start, stop, count); } if (step > 0) { d[i0] = Math.floor(start / step) * step; d[i1] = Math.ceil(stop / step) * step; domain(d); } else if (step < 0) { d[i0] = Math.ceil(start * step) / step; d[i1] = Math.floor(stop * step) / step; domain(d); } return scale; }; return scale; } function linear$2() { var scale = continuous(identity$6, identity$6); scale.copy = function() { return copy(scale, linear$2()); }; initRange.apply(scale, arguments); return linearish(scale); } function identity$7(domain) { var unknown; function scale(x) { return isNaN(x = +x) ? unknown : x; } scale.invert = scale; scale.domain = scale.range = function(_) { return arguments.length ? (domain = map$3.call(_, number$2), scale) : domain.slice(); }; scale.unknown = function(_) { return arguments.length ? (unknown = _, scale) : unknown; }; scale.copy = function() { return identity$7(domain).unknown(unknown); }; domain = arguments.length ? map$3.call(domain, number$2) : [0, 1]; return linearish(scale); } function nice(domain, interval) { domain = domain.slice(); var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], t; if (x1 < x0) { t = i0, i0 = i1, i1 = t; t = x0, x0 = x1, x1 = t; } domain[i0] = interval.floor(x0); domain[i1] = interval.ceil(x1); return domain; } function transformLog(x) { return Math.log(x); } function transformExp(x) { return Math.exp(x); } function transformLogn(x) { return -Math.log(-x); } function transformExpn(x) { return -Math.exp(-x); } function pow10(x) { return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x; } function powp(base) { return base === 10 ? pow10 : base === Math.E ? Math.exp : function(x) { return Math.pow(base, x); }; } function logp(base) { return base === Math.E ? Math.log : base === 10 && Math.log10 || base === 2 && Math.log2 || (base = Math.log(base), function(x) { return Math.log(x) / base; }); } function reflect(f) { return function(x) { return -f(-x); }; } function loggish(transform) { var scale = transform(transformLog, transformExp), domain = scale.domain, base = 10, logs, pows; function rescale() { logs = logp(base), pows = powp(base); if (domain()[0] < 0) { logs = reflect(logs), pows = reflect(pows); transform(transformLogn, transformExpn); } else { transform(transformLog, transformExp); } return scale; } scale.base = function(_) { return arguments.length ? (base = +_, rescale()) : base; }; scale.domain = function(_) { return arguments.length ? (domain(_), rescale()) : domain(); }; scale.ticks = function(count) { var d = domain(), u = d[0], v = d[d.length - 1], r; if (r = v < u) i = u, u = v, v = i; var i = logs(u), j = logs(v), p, k, t, n = count == null ? 10 : +count, z = []; if (!(base % 1) && j - i < n) { i = Math.round(i) - 1, j = Math.round(j) + 1; if (u > 0) for (; i < j; ++i) { for (k = 1, p = pows(i); k < base; ++k) { t = p * k; if (t < u) continue; if (t > v) break; z.push(t); } } else for (; i < j; ++i) { for (k = base - 1, p = pows(i); k >= 1; --k) { t = p * k; if (t < u) continue; if (t > v) break; z.push(t); } } } else { z = ticks(i, j, Math.min(j - i, n)).map(pows); } return r ? z.reverse() : z; }; scale.tickFormat = function(count, specifier) { if (specifier == null) specifier = base === 10 ? ".0e" : ","; if (typeof specifier !== "function") specifier = exports.format(specifier); if (count === Infinity) return specifier; if (count == null) count = 10; var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate? return function(d) { var i = d / pows(Math.round(logs(d))); if (i * base < base - 0.5) i *= base; return i <= k ? specifier(d) : ""; }; }; scale.nice = function() { return domain(nice(domain(), { floor: function(x) { return pows(Math.floor(logs(x))); }, ceil: function(x) { return pows(Math.ceil(logs(x))); } })); }; return scale; } function log$1() { var scale = loggish(transformer$1()).domain([1, 10]); scale.copy = function() { return copy(scale, log$1()).base(scale.base()); }; initRange.apply(scale, arguments); return scale; } function transformSymlog(c) { return function(x) { return Math.sign(x) * Math.log1p(Math.abs(x / c)); }; } function transformSymexp(c) { return function(x) { return Math.sign(x) * Math.expm1(Math.abs(x)) * c; }; } function symlogish(transform) { var c = 1, scale = transform(transformSymlog(c), transformSymexp(c)); scale.constant = function(_) { return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c; }; return linearish(scale); } function symlog() { var scale = symlogish(transformer$1()); scale.copy = function() { return copy(scale, symlog()).constant(scale.constant()); }; return initRange.apply(scale, arguments); } function transformPow(exponent) { return function(x) { return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent); }; } function transformSqrt(x) { return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x); } function transformSquare(x) { return x < 0 ? -x * x : x * x; } function powish(transform) { var scale = transform(identity$6, identity$6), exponent = 1; function rescale() { return exponent === 1 ? transform(identity$6, identity$6) : exponent === 0.5 ? transform(transformSqrt, transformSquare) : transform(transformPow(exponent), transformPow(1 / exponent)); } scale.exponent = function(_) { return arguments.length ? (exponent = +_, rescale()) : exponent; }; return linearish(scale); } function pow$1() { var scale = powish(transformer$1()); scale.copy = function() { return copy(scale, pow$1()).exponent(scale.exponent()); }; initRange.apply(scale, arguments); return scale; } function sqrt$1() { return pow$1.apply(null, arguments).exponent(0.5); } function quantile() { var domain = [], range = [], thresholds = [], unknown; function rescale() { var i = 0, n = Math.max(1, range.length); thresholds = new Array(n - 1); while (++i < n) thresholds[i - 1] = threshold(domain, i / n); return scale; } function scale(x) { return isNaN(x = +x) ? unknown : range[bisectRight(thresholds, x)]; } scale.invertExtent = function(y) { var i = range.indexOf(y); return i < 0 ? [NaN, NaN] : [ i > 0 ? thresholds[i - 1] : domain[0], i < thresholds.length ? thresholds[i] : domain[domain.length - 1] ]; }; scale.domain = function(_) { if (!arguments.length) return domain.slice(); domain = []; for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d); domain.sort(ascending); return rescale(); }; scale.range = function(_) { return arguments.length ? (range = slice$5.call(_), rescale()) : range.slice(); }; scale.unknown = function(_) { return arguments.length ? (unknown = _, scale) : unknown; }; scale.quantiles = function() { return thresholds.slice(); }; scale.copy = function() { return quantile() .domain(domain) .range(range) .unknown(unknown); }; return initRange.apply(scale, arguments); } function quantize$1() { var x0 = 0, x1 = 1, n = 1, domain = [0.5], range = [0, 1], unknown; function scale(x) { return x <= x ? range[bisectRight(domain, x, 0, n)] : unknown; } function rescale() { var i = -1; domain = new Array(n); while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1); return scale; } scale.domain = function(_) { return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1]; }; scale.range = function(_) { return arguments.length ? (n = (range = slice$5.call(_)).length - 1, rescale()) : range.slice(); }; scale.invertExtent = function(y) { var i = range.indexOf(y); return i < 0 ? [NaN, NaN] : i < 1 ? [x0, domain[0]] : i >= n ? [domain[n - 1], x1] : [domain[i - 1], domain[i]]; }; scale.unknown = function(_) { return arguments.length ? (unknown = _, scale) : scale; }; scale.thresholds = function() { return domain.slice(); }; scale.copy = function() { return quantize$1() .domain([x0, x1]) .range(range) .unknown(unknown); }; return initRange.apply(linearish(scale), arguments); } function threshold$1() { var domain = [0.5], range = [0, 1], unknown, n = 1; function scale(x) { return x <= x ? range[bisectRight(domain, x, 0, n)] : unknown; } scale.domain = function(_) { return arguments.length ? (domain = slice$5.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice(); }; scale.range = function(_) { return arguments.length ? (range = slice$5.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice(); }; scale.invertExtent = function(y) { var i = range.indexOf(y); return [domain[i - 1], domain[i]]; }; scale.unknown = function(_) { return arguments.length ? (unknown = _, scale) : unknown; }; scale.copy = function() { return threshold$1() .domain(domain) .range(range) .unknown(unknown); }; return initRange.apply(scale, arguments); } var t0$1 = new Date, t1$1 = new Date; function newInterval(floori, offseti, count, field) { function interval(date) { return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date; } interval.floor = function(date) { return floori(date = new Date(+date)), date; }; interval.ceil = function(date) { return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date; }; interval.round = function(date) { var d0 = interval(date), d1 = interval.ceil(date); return date - d0 < d1 - date ? d0 : d1; }; interval.offset = function(date, step) { return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date; }; interval.range = function(start, stop, step) { var range = [], previous; start = interval.ceil(start); step = step == null ? 1 : Math.floor(step); if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date do range.push(previous = new Date(+start)), offseti(start, step), floori(start); while (previous < start && start < stop); return range; }; interval.filter = function(test) { return newInterval(function(date) { if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1); }, function(date, step) { if (date >= date) { if (step < 0) while (++step <= 0) { while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty } else while (--step >= 0) { while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty } } }); }; if (count) { interval.count = function(start, end) { t0$1.setTime(+start), t1$1.setTime(+end); floori(t0$1), floori(t1$1); return Math.floor(count(t0$1, t1$1)); }; interval.every = function(step) { step = Math.floor(step); return !isFinite(step) || !(step > 0) ? null : !(step > 1) ? interval : interval.filter(field ? function(d) { return field(d) % step === 0; } : function(d) { return interval.count(0, d) % step === 0; }); }; } return interval; } var millisecond = newInterval(function() { // noop }, function(date, step) { date.setTime(+date + step); }, function(start, end) { return end - start; }); // An optimized implementation for this simple case. millisecond.every = function(k) { k = Math.floor(k); if (!isFinite(k) || !(k > 0)) return null; if (!(k > 1)) return millisecond; return newInterval(function(date) { date.setTime(Math.floor(date / k) * k); }, function(date, step) { date.setTime(+date + step * k); }, function(start, end) { return (end - start) / k; }); }; var milliseconds = millisecond.range; var durationSecond = 1e3; var durationMinute = 6e4; var durationHour = 36e5; var durationDay = 864e5; var durationWeek = 6048e5; var second = newInterval(function(date) { date.setTime(date - date.getMilliseconds()); }, function(date, step) { date.setTime(+date + step * durationSecond); }, function(start, end) { return (end - start) / durationSecond; }, function(date) { return date.getUTCSeconds(); }); var seconds = second.range; var minute = newInterval(function(date) { date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond); }, function(date, step) { date.setTime(+date + step * durationMinute); }, function(start, end) { return (end - start) / durationMinute; }, function(date) { return date.getMinutes(); }); var minutes = minute.range; var hour = newInterval(function(date) { date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute); }, function(date, step) { date.setTime(+date + step * durationHour); }, function(start, end) { return (end - start) / durationHour; }, function(date) { return date.getHours(); }); var hours = hour.range; var day = newInterval(function(date) { date.setHours(0, 0, 0, 0); }, function(date, step) { date.setDate(date.getDate() + step); }, function(start, end) { return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay; }, function(date) { return date.getDate() - 1; }); var days = day.range; function weekday(i) { return newInterval(function(date) { date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7); date.setHours(0, 0, 0, 0); }, function(date, step) { date.setDate(date.getDate() + step * 7); }, function(start, end) { return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek; }); } var sunday = weekday(0); var monday = weekday(1); var tuesday = weekday(2); var wednesday = weekday(3); var thursday = weekday(4); var friday = weekday(5); var saturday = weekday(6); var sundays = sunday.range; var mondays = monday.range; var tuesdays = tuesday.range; var wednesdays = wednesday.range; var thursdays = thursday.range; var fridays = friday.range; var saturdays = saturday.range; var month = newInterval(function(date) { date.setDate(1); date.setHours(0, 0, 0, 0); }, function(date, step) { date.setMonth(date.getMonth() + step); }, function(start, end) { return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12; }, function(date) { return date.getMonth(); }); var months = month.range; var year = newInterval(function(date) { date.setMonth(0, 1); date.setHours(0, 0, 0, 0); }, function(date, step) { date.setFullYear(date.getFullYear() + step); }, function(start, end) { return end.getFullYear() - start.getFullYear(); }, function(date) { return date.getFullYear(); }); // An optimized implementation for this simple case. year.every = function(k) { return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) { date.setFullYear(Math.floor(date.getFullYear() / k) * k); date.setMonth(0, 1); date.setHours(0, 0, 0, 0); }, function(date, step) { date.setFullYear(date.getFullYear() + step * k); }); }; var years = year.range; var utcMinute = newInterval(function(date) { date.setUTCSeconds(0, 0); }, function(date, step) { date.setTime(+date + step * durationMinute); }, function(start, end) { return (end - start) / durationMinute; }, function(date) { return date.getUTCMinutes(); }); var utcMinutes = utcMinute.range; var utcHour = newInterval(function(date) { date.setUTCMinutes(0, 0, 0); }, function(date, step) { date.setTime(+date + step * durationHour); }, function(start, end) { return (end - start) / durationHour; }, function(date) { return date.getUTCHours(); }); var utcHours = utcHour.range; var utcDay = newInterval(function(date) { date.setUTCHours(0, 0, 0, 0); }, function(date, step) { date.setUTCDate(date.getUTCDate() + step); }, function(start, end) { return (end - start) / durationDay; }, function(date) { return date.getUTCDate() - 1; }); var utcDays = utcDay.range; function utcWeekday(i) { return newInterval(function(date) { date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7); date.setUTCHours(0, 0, 0, 0); }, function(date, step) { date.setUTCDate(date.getUTCDate() + step * 7); }, function(start, end) { return (end - start) / durationWeek; }); } var utcSunday = utcWeekday(0); var utcMonday = utcWeekday(1); var utcTuesday = utcWeekday(2); var utcWednesday = utcWeekday(3); var utcThursday = utcWeekday(4); var utcFriday = utcWeekday(5); var utcSaturday = utcWeekday(6); var utcSundays = utcSunday.range; var utcMondays = utcMonday.range; var utcTuesdays = utcTuesday.range; var utcWednesdays = utcWednesday.range; var utcThursdays = utcThursday.range; var utcFridays = utcFriday.range; var utcSaturdays = utcSaturday.range; var utcMonth = newInterval(function(date) { date.setUTCDate(1); date.setUTCHours(0, 0, 0, 0); }, function(date, step) { date.setUTCMonth(date.getUTCMonth() + step); }, function(start, end) { return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12; }, function(date) { return date.getUTCMonth(); }); var utcMonths = utcMonth.range; var utcYear = newInterval(function(date) { date.setUTCMonth(0, 1); date.setUTCHours(0, 0, 0, 0); }, function(date, step) { date.setUTCFullYear(date.getUTCFullYear() + step); }, function(start, end) { return end.getUTCFullYear() - start.getUTCFullYear(); }, function(date) { return date.getUTCFullYear(); }); // An optimized implementation for this simple case. utcYear.every = function(k) { return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) { date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k); date.setUTCMonth(0, 1); date.setUTCHours(0, 0, 0, 0); }, function(date, step) { date.setUTCFullYear(date.getUTCFullYear() + step * k); }); }; var utcYears = utcYear.range; function localDate(d) { if (0 <= d.y && d.y < 100) { var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L); date.setFullYear(d.y); return date; } return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L); } function utcDate(d) { if (0 <= d.y && d.y < 100) { var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L)); date.setUTCFullYear(d.y); return date; } return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L)); } function newDate(y, m, d) { return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0}; } function formatLocale$1(locale) { var locale_dateTime = locale.dateTime, locale_date = locale.date, locale_time = locale.time, locale_periods = locale.periods, locale_weekdays = locale.days, locale_shortWeekdays = locale.shortDays, locale_months = locale.months, locale_shortMonths = locale.shortMonths; var periodRe = formatRe(locale_periods), periodLookup = formatLookup(locale_periods), weekdayRe = formatRe(locale_weekdays), weekdayLookup = formatLookup(locale_weekdays), shortWeekdayRe = formatRe(locale_shortWeekdays), shortWeekdayLookup = formatLookup(locale_shortWeekdays), monthRe = formatRe(locale_months), monthLookup = formatLookup(locale_months), shortMonthRe = formatRe(locale_shortMonths), shortMonthLookup = formatLookup(locale_shortMonths); var formats = { "a": formatShortWeekday, "A": formatWeekday, "b": formatShortMonth, "B": formatMonth, "c": null, "d": formatDayOfMonth, "e": formatDayOfMonth, "f": formatMicroseconds, "H": formatHour24, "I": formatHour12, "j": formatDayOfYear, "L": formatMilliseconds, "m": formatMonthNumber, "M": formatMinutes, "p": formatPeriod, "q": formatQuarter, "Q": formatUnixTimestamp, "s": formatUnixTimestampSeconds, "S": formatSeconds, "u": formatWeekdayNumberMonday, "U": formatWeekNumberSunday, "V": formatWeekNumberISO, "w": formatWeekdayNumberSunday, "W": formatWeekNumberMonday, "x": null, "X": null, "y": formatYear$1, "Y": formatFullYear, "Z": formatZone, "%": formatLiteralPercent }; var utcFormats = { "a": formatUTCShortWeekday, "A": formatUTCWeekday, "b": formatUTCShortMonth, "B": formatUTCMonth, "c": null, "d": formatUTCDayOfMonth, "e": formatUTCDayOfMonth, "f": formatUTCMicroseconds, "H": formatUTCHour24, "I": formatUTCHour12, "j": formatUTCDayOfYear, "L": formatUTCMilliseconds, "m": formatUTCMonthNumber, "M": formatUTCMinutes, "p": formatUTCPeriod, "q": formatUTCQuarter, "Q": formatUnixTimestamp, "s": formatUnixTimestampSeconds, "S": formatUTCSeconds, "u": formatUTCWeekdayNumberMonday, "U": formatUTCWeekNumberSunday, "V": formatUTCWeekNumberISO, "w": formatUTCWeekdayNumberSunday, "W": formatUTCWeekNumberMonday, "x": null, "X": null, "y": formatUTCYear, "Y": formatUTCFullYear, "Z": formatUTCZone, "%": formatLiteralPercent }; var parses = { "a": parseShortWeekday, "A": parseWeekday, "b": parseShortMonth, "B": parseMonth, "c": parseLocaleDateTime, "d": parseDayOfMonth, "e": parseDayOfMonth, "f": parseMicroseconds, "H": parseHour24, "I": parseHour24, "j": parseDayOfYear, "L": parseMilliseconds, "m": parseMonthNumber, "M": parseMinutes, "p": parsePeriod, "q": parseQuarter, "Q": parseUnixTimestamp, "s": parseUnixTimestampSeconds, "S": parseSeconds, "u": parseWeekdayNumberMonday, "U": parseWeekNumberSunday, "V": parseWeekNumberISO, "w": parseWeekdayNumberSunday, "W": parseWeekNumberMonday, "x": parseLocaleDate, "X": parseLocaleTime, "y": parseYear, "Y": parseFullYear, "Z": parseZone, "%": parseLiteralPercent }; // These recursive directive definitions must be deferred. formats.x = newFormat(locale_date, formats); formats.X = newFormat(locale_time, formats); formats.c = newFormat(locale_dateTime, formats); utcFormats.x = newFormat(locale_date, utcFormats); utcFormats.X = newFormat(locale_time, utcFormats); utcFormats.c = newFormat(locale_dateTime, utcFormats); function newFormat(specifier, formats) { return function(date) { var string = [], i = -1, j = 0, n = specifier.length, c, pad, format; if (!(date instanceof Date)) date = new Date(+date); while (++i < n) { if (specifier.charCodeAt(i) === 37) { string.push(specifier.slice(j, i)); if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i); else pad = c === "e" ? " " : "0"; if (format = formats[c]) c = format(date, pad); string.push(c); j = i + 1; } } string.push(specifier.slice(j, i)); return string.join(""); }; } function newParse(specifier, Z) { return function(string) { var d = newDate(1900, undefined, 1), i = parseSpecifier(d, specifier, string += "", 0), week, day$1; if (i != string.length) return null; // If a UNIX timestamp is specified, return it. if ("Q" in d) return new Date(d.Q); if ("s" in d) return new Date(d.s * 1000 + ("L" in d ? d.L : 0)); // If this is utcParse, never use the local timezone. if (Z && !("Z" in d)) d.Z = 0; // The am-pm flag is 0 for AM, and 1 for PM. if ("p" in d) d.H = d.H % 12 + d.p * 12; // If the month was not specified, inherit from the quarter. if (d.m === undefined) d.m = "q" in d ? d.q : 0; // Convert day-of-week and week-of-year to day-of-year. if ("V" in d) { if (d.V < 1 || d.V > 53) return null; if (!("w" in d)) d.w = 1; if ("Z" in d) { week = utcDate(newDate(d.y, 0, 1)), day$1 = week.getUTCDay(); week = day$1 > 4 || day$1 === 0 ? utcMonday.ceil(week) : utcMonday(week); week = utcDay.offset(week, (d.V - 1) * 7); d.y = week.getUTCFullYear(); d.m = week.getUTCMonth(); d.d = week.getUTCDate() + (d.w + 6) % 7; } else { week = localDate(newDate(d.y, 0, 1)), day$1 = week.getDay(); week = day$1 > 4 || day$1 === 0 ? monday.ceil(week) : monday(week); week = day.offset(week, (d.V - 1) * 7); d.y = week.getFullYear(); d.m = week.getMonth(); d.d = week.getDate() + (d.w + 6) % 7; } } else if ("W" in d || "U" in d) { if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0; day$1 = "Z" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay(); d.m = 0; d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day$1 + 5) % 7 : d.w + d.U * 7 - (day$1 + 6) % 7; } // If a time zone is specified, all fields are interpreted as UTC and then // offset according to the specified time zone. if ("Z" in d) { d.H += d.Z / 100 | 0; d.M += d.Z % 100; return utcDate(d); } // Otherwise, all fields are in local time. return localDate(d); }; } function parseSpecifier(d, specifier, string, j) { var i = 0, n = specifier.length, m = string.length, c, parse; while (i < n) { if (j >= m) return -1; c = specifier.charCodeAt(i++); if (c === 37) { c = specifier.charAt(i++); parse = parses[c in pads ? specifier.charAt(i++) : c]; if (!parse || ((j = parse(d, string, j)) < 0)) return -1; } else if (c != string.charCodeAt(j++)) { return -1; } } return j; } function parsePeriod(d, string, i) { var n = periodRe.exec(string.slice(i)); return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1; } function parseShortWeekday(d, string, i) { var n = shortWeekdayRe.exec(string.slice(i)); return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; } function parseWeekday(d, string, i) { var n = weekdayRe.exec(string.slice(i)); return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; } function parseShortMonth(d, string, i) { var n = shortMonthRe.exec(string.slice(i)); return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1; } function parseMonth(d, string, i) { var n = monthRe.exec(string.slice(i)); return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1; } function parseLocaleDateTime(d, string, i) { return parseSpecifier(d, locale_dateTime, string, i); } function parseLocaleDate(d, string, i) { return parseSpecifier(d, locale_date, string, i); } function parseLocaleTime(d, string, i) { return parseSpecifier(d, locale_time, string, i); } function formatShortWeekday(d) { return locale_shortWeekdays[d.getDay()]; } function formatWeekday(d) { return locale_weekdays[d.getDay()]; } function formatShortMonth(d) { return locale_shortMonths[d.getMonth()]; } function formatMonth(d) { return locale_months[d.getMonth()]; } function formatPeriod(d) { return locale_periods[+(d.getHours() >= 12)]; } function formatQuarter(d) { return 1 + ~~(d.getMonth() / 3); } function formatUTCShortWeekday(d) { return locale_shortWeekdays[d.getUTCDay()]; } function formatUTCWeekday(d) { return locale_weekdays[d.getUTCDay()]; } function formatUTCShortMonth(d) { return locale_shortMonths[d.getUTCMonth()]; } function formatUTCMonth(d) { return locale_months[d.getUTCMonth()]; } function formatUTCPeriod(d) { return locale_periods[+(d.getUTCHours() >= 12)]; } function formatUTCQuarter(d) { return 1 + ~~(d.getUTCMonth() / 3); } return { format: function(specifier) { var f = newFormat(specifier += "", formats); f.toString = function() { return specifier; }; return f; }, parse: function(specifier) { var p = newParse(specifier += "", false); p.toString = function() { return specifier; }; return p; }, utcFormat: function(specifier) { var f = newFormat(specifier += "", utcFormats); f.toString = function() { return specifier; }; return f; }, utcParse: function(specifier) { var p = newParse(specifier += "", true); p.toString = function() { return specifier; }; return p; } }; } var pads = {"-": "", "_": " ", "0": "0"}, numberRe = /^\s*\d+/, // note: ignores next directive percentRe = /^%/, requoteRe = /[\\^$*+?|[\]().{}]/g; function pad$1(value, fill, width) { var sign = value < 0 ? "-" : "", string = (sign ? -value : value) + "", length = string.length; return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string); } function requote(s) { return s.replace(requoteRe, "\\$&"); } function formatRe(names) { return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i"); } function formatLookup(names) { var map = {}, i = -1, n = names.length; while (++i < n) map[names[i].toLowerCase()] = i; return map; } function parseWeekdayNumberSunday(d, string, i) { var n = numberRe.exec(string.slice(i, i + 1)); return n ? (d.w = +n[0], i + n[0].length) : -1; } function parseWeekdayNumberMonday(d, string, i) { var n = numberRe.exec(string.slice(i, i + 1)); return n ? (d.u = +n[0], i + n[0].length) : -1; } function parseWeekNumberSunday(d, string, i) { var n = numberRe.exec(string.slice(i, i + 2)); return n ? (d.U = +n[0], i + n[0].length) : -1; } function parseWeekNumberISO(d, string, i) { var n = numberRe.exec(string.slice(i, i + 2)); return n ? (d.V = +n[0], i + n[0].length) : -1; } function parseWeekNumberMonday(d, string, i) { var n = numberRe.exec(string.slice(i, i + 2)); return n ? (d.W = +n[0], i + n[0].length) : -1; } function parseFullYear(d, string, i) { var n = numberRe.exec(string.slice(i, i + 4)); return n ? (d.y = +n[0], i + n[0].length) : -1; } function parseYear(d, string, i) { var n = numberRe.exec(string.slice(i, i + 2)); return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1; } function parseZone(d, string, i) { var n = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i, i + 6)); return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1; } function parseQuarter(d, string, i) { var n = numberRe.exec(string.slice(i, i + 1)); return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1; } function parseMonthNumber(d, string, i) { var n = numberRe.exec(string.slice(i, i + 2)); return n ? (d.m = n[0] - 1, i + n[0].length) : -1; } function parseDayOfMonth(d, string, i) { var n = numberRe.exec(string.slice(i, i + 2)); return n ? (d.d = +n[0], i + n[0].length) : -1; } function parseDayOfYear(d, string, i) { var n = numberRe.exec(string.slice(i, i + 3)); return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1; } function parseHour24(d, string, i) { var n = numberRe.exec(string.slice(i, i + 2)); return n ? (d.H = +n[0], i + n[0].length) : -1; } function parseMinutes(d, string, i) { var n = numberRe.exec(string.slice(i, i + 2)); return n ? (d.M = +n[0], i + n[0].length) : -1; } function parseSeconds(d, string, i) { var n = numberRe.exec(string.slice(i, i + 2)); return n ? (d.S = +n[0], i + n[0].length) : -1; } function parseMilliseconds(d, string, i) { var n = numberRe.exec(string.slice(i, i + 3)); return n ? (d.L = +n[0], i + n[0].length) : -1; } function parseMicroseconds(d, string, i) { var n = numberRe.exec(string.slice(i, i + 6)); return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1; } function parseLiteralPercent(d, string, i) { var n = percentRe.exec(string.slice(i, i + 1)); return n ? i + n[0].length : -1; } function parseUnixTimestamp(d, string, i) { var n = numberRe.exec(string.slice(i)); return n ? (d.Q = +n[0], i + n[0].length) : -1; } function parseUnixTimestampSeconds(d, string, i) { var n = numberRe.exec(string.slice(i)); return n ? (d.s = +n[0], i + n[0].length) : -1; } function formatDayOfMonth(d, p) { return pad$1(d.getDate(), p, 2); } function formatHour24(d, p) { return pad$1(d.getHours(), p, 2); } function formatHour12(d, p) { return pad$1(d.getHours() % 12 || 12, p, 2); } function formatDayOfYear(d, p) { return pad$1(1 + day.count(year(d), d), p, 3); } function formatMilliseconds(d, p) { return pad$1(d.getMilliseconds(), p, 3); } function formatMicroseconds(d, p) { return formatMilliseconds(d, p) + "000"; } function formatMonthNumber(d, p) { return pad$1(d.getMonth() + 1, p, 2); } function formatMinutes(d, p) { return pad$1(d.getMinutes(), p, 2); } function formatSeconds(d, p) { return pad$1(d.getSeconds(), p, 2); } function formatWeekdayNumberMonday(d) { var day = d.getDay(); return day === 0 ? 7 : day; } function formatWeekNumberSunday(d, p) { return pad$1(sunday.count(year(d) - 1, d), p, 2); } function formatWeekNumberISO(d, p) { var day = d.getDay(); d = (day >= 4 || day === 0) ? thursday(d) : thursday.ceil(d); return pad$1(thursday.count(year(d), d) + (year(d).getDay() === 4), p, 2); } function formatWeekdayNumberSunday(d) { return d.getDay(); } function formatWeekNumberMonday(d, p) { return pad$1(monday.count(year(d) - 1, d), p, 2); } function formatYear$1(d, p) { return pad$1(d.getFullYear() % 100, p, 2); } function formatFullYear(d, p) { return pad$1(d.getFullYear() % 10000, p, 4); } function formatZone(d) { var z = d.getTimezoneOffset(); return (z > 0 ? "-" : (z *= -1, "+")) + pad$1(z / 60 | 0, "0", 2) + pad$1(z % 60, "0", 2); } function formatUTCDayOfMonth(d, p) { return pad$1(d.getUTCDate(), p, 2); } function formatUTCHour24(d, p) { return pad$1(d.getUTCHours(), p, 2); } function formatUTCHour12(d, p) { return pad$1(d.getUTCHours() % 12 || 12, p, 2); } function formatUTCDayOfYear(d, p) { return pad$1(1 + utcDay.count(utcYear(d), d), p, 3); } function formatUTCMilliseconds(d, p) { return pad$1(d.getUTCMilliseconds(), p, 3); } function formatUTCMicroseconds(d, p) { return formatUTCMilliseconds(d, p) + "000"; } function formatUTCMonthNumber(d, p) { return pad$1(d.getUTCMonth() + 1, p, 2); } function formatUTCMinutes(d, p) { return pad$1(d.getUTCMinutes(), p, 2); } function formatUTCSeconds(d, p) { return pad$1(d.getUTCSeconds(), p, 2); } function formatUTCWeekdayNumberMonday(d) { var dow = d.getUTCDay(); return dow === 0 ? 7 : dow; } function formatUTCWeekNumberSunday(d, p) { return pad$1(utcSunday.count(utcYear(d) - 1, d), p, 2); } function formatUTCWeekNumberISO(d, p) { var day = d.getUTCDay(); d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d); return pad$1(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2); } function formatUTCWeekdayNumberSunday(d) { return d.getUTCDay(); } function formatUTCWeekNumberMonday(d, p) { return pad$1(utcMonday.count(utcYear(d) - 1, d), p, 2); } function formatUTCYear(d, p) { return pad$1(d.getUTCFullYear() % 100, p, 2); } function formatUTCFullYear(d, p) { return pad$1(d.getUTCFullYear() % 10000, p, 4); } function formatUTCZone() { return "+0000"; } function formatLiteralPercent() { return "%"; } function formatUnixTimestamp(d) { return +d; } function formatUnixTimestampSeconds(d) { return Math.floor(+d / 1000); } var locale$1; defaultLocale$1({ dateTime: "%x, %X", date: "%-m/%-d/%Y", time: "%-I:%M:%S %p", periods: ["AM", "PM"], days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] }); function defaultLocale$1(definition) { locale$1 = formatLocale$1(definition); exports.timeFormat = locale$1.format; exports.timeParse = locale$1.parse; exports.utcFormat = locale$1.utcFormat; exports.utcParse = locale$1.utcParse; return locale$1; } var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ"; function formatIsoNative(date) { return date.toISOString(); } var formatIso = Date.prototype.toISOString ? formatIsoNative : exports.utcFormat(isoSpecifier); function parseIsoNative(string) { var date = new Date(string); return isNaN(date) ? null : date; } var parseIso = +new Date("2000-01-01T00:00:00.000Z") ? parseIsoNative : exports.utcParse(isoSpecifier); var durationSecond$1 = 1000, durationMinute$1 = durationSecond$1 * 60, durationHour$1 = durationMinute$1 * 60, durationDay$1 = durationHour$1 * 24, durationWeek$1 = durationDay$1 * 7, durationMonth = durationDay$1 * 30, durationYear = durationDay$1 * 365; function date$1(t) { return new Date(t); } function number$3(t) { return t instanceof Date ? +t : +new Date(+t); } function calendar(year, month, week, day, hour, minute, second, millisecond, format) { var scale = continuous(identity$6, identity$6), invert = scale.invert, domain = scale.domain; var formatMillisecond = format(".%L"), formatSecond = format(":%S"), formatMinute = format("%I:%M"), formatHour = format("%I %p"), formatDay = format("%a %d"), formatWeek = format("%b %d"), formatMonth = format("%B"), formatYear = format("%Y"); var tickIntervals = [ [second, 1, durationSecond$1], [second, 5, 5 * durationSecond$1], [second, 15, 15 * durationSecond$1], [second, 30, 30 * durationSecond$1], [minute, 1, durationMinute$1], [minute, 5, 5 * durationMinute$1], [minute, 15, 15 * durationMinute$1], [minute, 30, 30 * durationMinute$1], [ hour, 1, durationHour$1 ], [ hour, 3, 3 * durationHour$1 ], [ hour, 6, 6 * durationHour$1 ], [ hour, 12, 12 * durationHour$1 ], [ day, 1, durationDay$1 ], [ day, 2, 2 * durationDay$1 ], [ week, 1, durationWeek$1 ], [ month, 1, durationMonth ], [ month, 3, 3 * durationMonth ], [ year, 1, durationYear ] ]; function tickFormat(date) { return (second(date) < date ? formatMillisecond : minute(date) < date ? formatSecond : hour(date) < date ? formatMinute : day(date) < date ? formatHour : month(date) < date ? (week(date) < date ? formatDay : formatWeek) : year(date) < date ? formatMonth : formatYear)(date); } function tickInterval(interval, start, stop, step) { if (interval == null) interval = 10; // If a desired tick count is specified, pick a reasonable tick interval // based on the extent of the domain and a rough estimate of tick size. // Otherwise, assume interval is already a time interval and use it. if (typeof interval === "number") { var target = Math.abs(stop - start) / interval, i = bisector(function(i) { return i[2]; }).right(tickIntervals, target); if (i === tickIntervals.length) { step = tickStep(start / durationYear, stop / durationYear, interval); interval = year; } else if (i) { i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i]; step = i[1]; interval = i[0]; } else { step = Math.max(tickStep(start, stop, interval), 1); interval = millisecond; } } return step == null ? interval : interval.every(step); } scale.invert = function(y) { return new Date(invert(y)); }; scale.domain = function(_) { return arguments.length ? domain(map$3.call(_, number$3)) : domain().map(date$1); }; scale.ticks = function(interval, step) { var d = domain(), t0 = d[0], t1 = d[d.length - 1], r = t1 < t0, t; if (r) t = t0, t0 = t1, t1 = t; t = tickInterval(interval, t0, t1, step); t = t ? t.range(t0, t1 + 1) : []; // inclusive stop return r ? t.reverse() : t; }; scale.tickFormat = function(count, specifier) { return specifier == null ? tickFormat : format(specifier); }; scale.nice = function(interval, step) { var d = domain(); return (interval = tickInterval(interval, d[0], d[d.length - 1], step)) ? domain(nice(d, interval)) : scale; }; scale.copy = function() { return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format)); }; return scale; } function time() { return initRange.apply(calendar(year, month, sunday, day, hour, minute, second, millisecond, exports.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments); } function utcTime() { return initRange.apply(calendar(utcYear, utcMonth, utcSunday, utcDay, utcHour, utcMinute, second, millisecond, exports.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments); } function transformer$2() { var x0 = 0, x1 = 1, t0, t1, k10, transform, interpolator = identity$6, clamp = false, unknown; function scale(x) { return isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x)); } scale.domain = function(_) { return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1]; }; scale.clamp = function(_) { return arguments.length ? (clamp = !!_, scale) : clamp; }; scale.interpolator = function(_) { return arguments.length ? (interpolator = _, scale) : interpolator; }; scale.unknown = function(_) { return arguments.length ? (unknown = _, scale) : unknown; }; return function(t) { transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0); return scale; }; } function copy$1(source, target) { return target .domain(source.domain()) .interpolator(source.interpolator()) .clamp(source.clamp()) .unknown(source.unknown()); } function sequential() { var scale = linearish(transformer$2()(identity$6)); scale.copy = function() { return copy$1(scale, sequential()); }; return initInterpolator.apply(scale, arguments); } function sequentialLog() { var scale = loggish(transformer$2()).domain([1, 10]); scale.copy = function() { return copy$1(scale, sequentialLog()).base(scale.base()); }; return initInterpolator.apply(scale, arguments); } function sequentialSymlog() { var scale = symlogish(transformer$2()); scale.copy = function() { return copy$1(scale, sequentialSymlog()).constant(scale.constant()); }; return initInterpolator.apply(scale, arguments); } function sequentialPow() { var scale = powish(transformer$2()); scale.copy = function() { return copy$1(scale, sequentialPow()).exponent(scale.exponent()); }; return initInterpolator.apply(scale, arguments); } function sequentialSqrt() { return sequentialPow.apply(null, arguments).exponent(0.5); } function sequentialQuantile() { var domain = [], interpolator = identity$6; function scale(x) { if (!isNaN(x = +x)) return interpolator((bisectRight(domain, x) - 1) / (domain.length - 1)); } scale.domain = function(_) { if (!arguments.length) return domain.slice(); domain = []; for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d); domain.sort(ascending); return scale; }; scale.interpolator = function(_) { return arguments.length ? (interpolator = _, scale) : interpolator; }; scale.copy = function() { return sequentialQuantile(interpolator).domain(domain); }; return initInterpolator.apply(scale, arguments); } function transformer$3() { var x0 = 0, x1 = 0.5, x2 = 1, t0, t1, t2, k10, k21, interpolator = identity$6, transform, clamp = false, unknown; function scale(x) { return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (x < t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x)); } scale.domain = function(_) { return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), t2 = transform(x2 = +_[2]), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), scale) : [x0, x1, x2]; }; scale.clamp = function(_) { return arguments.length ? (clamp = !!_, scale) : clamp; }; scale.interpolator = function(_) { return arguments.length ? (interpolator = _, scale) : interpolator; }; scale.unknown = function(_) { return arguments.length ? (unknown = _, scale) : unknown; }; return function(t) { transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1); return scale; }; } function diverging() { var scale = linearish(transformer$3()(identity$6)); scale.copy = function() { return copy$1(scale, diverging()); }; return initInterpolator.apply(scale, arguments); } function divergingLog() { var scale = loggish(transformer$3()).domain([0.1, 1, 10]); scale.copy = function() { return copy$1(scale, divergingLog()).base(scale.base()); }; return initInterpolator.apply(scale, arguments); } function divergingSymlog() { var scale = symlogish(transformer$3()); scale.copy = function() { return copy$1(scale, divergingSymlog()).constant(scale.constant()); }; return initInterpolator.apply(scale, arguments); } function divergingPow() { var scale = powish(transformer$3()); scale.copy = function() { return copy$1(scale, divergingPow()).exponent(scale.exponent()); }; return initInterpolator.apply(scale, arguments); } function divergingSqrt() { return divergingPow.apply(null, arguments).exponent(0.5); } function colors(specifier) { var n = specifier.length / 6 | 0, colors = new Array(n), i = 0; while (i < n) colors[i] = "#" + specifier.slice(i * 6, ++i * 6); return colors; } var category10 = colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"); var Accent = colors("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666"); var Dark2 = colors("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666"); var Paired = colors("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928"); var Pastel1 = colors("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2"); var Pastel2 = colors("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc"); var Set1 = colors("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999"); var Set2 = colors("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3"); var Set3 = colors("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"); var Tableau10 = colors("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab"); function ramp(scheme) { return rgbBasis(scheme[scheme.length - 1]); } var scheme = new Array(3).concat( "d8b365f5f5f55ab4ac", "a6611adfc27d80cdc1018571", "a6611adfc27df5f5f580cdc1018571", "8c510ad8b365f6e8c3c7eae55ab4ac01665e", "8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e", "8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e", "8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e", "5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30", "5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30" ).map(colors); var BrBG = ramp(scheme); var scheme$1 = new Array(3).concat( "af8dc3f7f7f77fbf7b", "7b3294c2a5cfa6dba0008837", "7b3294c2a5cff7f7f7a6dba0008837", "762a83af8dc3e7d4e8d9f0d37fbf7b1b7837", "762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837", "762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837", "762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837", "40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b", "40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b" ).map(colors); var PRGn = ramp(scheme$1); var scheme$2 = new Array(3).concat( "e9a3c9f7f7f7a1d76a", "d01c8bf1b6dab8e1864dac26", "d01c8bf1b6daf7f7f7b8e1864dac26", "c51b7de9a3c9fde0efe6f5d0a1d76a4d9221", "c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221", "c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221", "c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221", "8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419", "8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419" ).map(colors); var PiYG = ramp(scheme$2); var scheme$3 = new Array(3).concat( "998ec3f7f7f7f1a340", "5e3c99b2abd2fdb863e66101", "5e3c99b2abd2f7f7f7fdb863e66101", "542788998ec3d8daebfee0b6f1a340b35806", "542788998ec3d8daebf7f7f7fee0b6f1a340b35806", "5427888073acb2abd2d8daebfee0b6fdb863e08214b35806", "5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806", "2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08", "2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08" ).map(colors); var PuOr = ramp(scheme$3); var scheme$4 = new Array(3).concat( "ef8a62f7f7f767a9cf", "ca0020f4a58292c5de0571b0", "ca0020f4a582f7f7f792c5de0571b0", "b2182bef8a62fddbc7d1e5f067a9cf2166ac", "b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac", "b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac", "b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac", "67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061", "67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061" ).map(colors); var RdBu = ramp(scheme$4); var scheme$5 = new Array(3).concat( "ef8a62ffffff999999", "ca0020f4a582bababa404040", "ca0020f4a582ffffffbababa404040", "b2182bef8a62fddbc7e0e0e09999994d4d4d", "b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d", "b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d", "b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d", "67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a", "67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a" ).map(colors); var RdGy = ramp(scheme$5); var scheme$6 = new Array(3).concat( "fc8d59ffffbf91bfdb", "d7191cfdae61abd9e92c7bb6", "d7191cfdae61ffffbfabd9e92c7bb6", "d73027fc8d59fee090e0f3f891bfdb4575b4", "d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4", "d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4", "d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4", "a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695", "a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695" ).map(colors); var RdYlBu = ramp(scheme$6); var scheme$7 = new Array(3).concat( "fc8d59ffffbf91cf60", "d7191cfdae61a6d96a1a9641", "d7191cfdae61ffffbfa6d96a1a9641", "d73027fc8d59fee08bd9ef8b91cf601a9850", "d73027fc8d59fee08bffffbfd9ef8b91cf601a9850", "d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850", "d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850", "a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837", "a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837" ).map(colors); var RdYlGn = ramp(scheme$7); var scheme$8 = new Array(3).concat( "fc8d59ffffbf99d594", "d7191cfdae61abdda42b83ba", "d7191cfdae61ffffbfabdda42b83ba", "d53e4ffc8d59fee08be6f59899d5943288bd", "d53e4ffc8d59fee08bffffbfe6f59899d5943288bd", "d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd", "d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd", "9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2", "9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2" ).map(colors); var Spectral = ramp(scheme$8); var scheme$9 = new Array(3).concat( "e5f5f999d8c92ca25f", "edf8fbb2e2e266c2a4238b45", "edf8fbb2e2e266c2a42ca25f006d2c", "edf8fbccece699d8c966c2a42ca25f006d2c", "edf8fbccece699d8c966c2a441ae76238b45005824", "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824", "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b" ).map(colors); var BuGn = ramp(scheme$9); var scheme$a = new Array(3).concat( "e0ecf49ebcda8856a7", "edf8fbb3cde38c96c688419d", "edf8fbb3cde38c96c68856a7810f7c", "edf8fbbfd3e69ebcda8c96c68856a7810f7c", "edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b", "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b", "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b" ).map(colors); var BuPu = ramp(scheme$a); var scheme$b = new Array(3).concat( "e0f3dba8ddb543a2ca", "f0f9e8bae4bc7bccc42b8cbe", "f0f9e8bae4bc7bccc443a2ca0868ac", "f0f9e8ccebc5a8ddb57bccc443a2ca0868ac", "f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e", "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e", "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081" ).map(colors); var GnBu = ramp(scheme$b); var scheme$c = new Array(3).concat( "fee8c8fdbb84e34a33", "fef0d9fdcc8afc8d59d7301f", "fef0d9fdcc8afc8d59e34a33b30000", "fef0d9fdd49efdbb84fc8d59e34a33b30000", "fef0d9fdd49efdbb84fc8d59ef6548d7301f990000", "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000", "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000" ).map(colors); var OrRd = ramp(scheme$c); var scheme$d = new Array(3).concat( "ece2f0a6bddb1c9099", "f6eff7bdc9e167a9cf02818a", "f6eff7bdc9e167a9cf1c9099016c59", "f6eff7d0d1e6a6bddb67a9cf1c9099016c59", "f6eff7d0d1e6a6bddb67a9cf3690c002818a016450", "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450", "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636" ).map(colors); var PuBuGn = ramp(scheme$d); var scheme$e = new Array(3).concat( "ece7f2a6bddb2b8cbe", "f1eef6bdc9e174a9cf0570b0", "f1eef6bdc9e174a9cf2b8cbe045a8d", "f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d", "f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b", "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b", "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858" ).map(colors); var PuBu = ramp(scheme$e); var scheme$f = new Array(3).concat( "e7e1efc994c7dd1c77", "f1eef6d7b5d8df65b0ce1256", "f1eef6d7b5d8df65b0dd1c77980043", "f1eef6d4b9dac994c7df65b0dd1c77980043", "f1eef6d4b9dac994c7df65b0e7298ace125691003f", "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f", "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f" ).map(colors); var PuRd = ramp(scheme$f); var scheme$g = new Array(3).concat( "fde0ddfa9fb5c51b8a", "feebe2fbb4b9f768a1ae017e", "feebe2fbb4b9f768a1c51b8a7a0177", "feebe2fcc5c0fa9fb5f768a1c51b8a7a0177", "feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177", "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177", "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a" ).map(colors); var RdPu = ramp(scheme$g); var scheme$h = new Array(3).concat( "edf8b17fcdbb2c7fb8", "ffffcca1dab441b6c4225ea8", "ffffcca1dab441b6c42c7fb8253494", "ffffccc7e9b47fcdbb41b6c42c7fb8253494", "ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84", "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84", "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58" ).map(colors); var YlGnBu = ramp(scheme$h); var scheme$i = new Array(3).concat( "f7fcb9addd8e31a354", "ffffccc2e69978c679238443", "ffffccc2e69978c67931a354006837", "ffffccd9f0a3addd8e78c67931a354006837", "ffffccd9f0a3addd8e78c67941ab5d238443005a32", "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32", "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529" ).map(colors); var YlGn = ramp(scheme$i); var scheme$j = new Array(3).concat( "fff7bcfec44fd95f0e", "ffffd4fed98efe9929cc4c02", "ffffd4fed98efe9929d95f0e993404", "ffffd4fee391fec44ffe9929d95f0e993404", "ffffd4fee391fec44ffe9929ec7014cc4c028c2d04", "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04", "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506" ).map(colors); var YlOrBr = ramp(scheme$j); var scheme$k = new Array(3).concat( "ffeda0feb24cf03b20", "ffffb2fecc5cfd8d3ce31a1c", "ffffb2fecc5cfd8d3cf03b20bd0026", "ffffb2fed976feb24cfd8d3cf03b20bd0026", "ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026", "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026", "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026" ).map(colors); var YlOrRd = ramp(scheme$k); var scheme$l = new Array(3).concat( "deebf79ecae13182bd", "eff3ffbdd7e76baed62171b5", "eff3ffbdd7e76baed63182bd08519c", "eff3ffc6dbef9ecae16baed63182bd08519c", "eff3ffc6dbef9ecae16baed64292c62171b5084594", "f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594", "f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b" ).map(colors); var Blues = ramp(scheme$l); var scheme$m = new Array(3).concat( "e5f5e0a1d99b31a354", "edf8e9bae4b374c476238b45", "edf8e9bae4b374c47631a354006d2c", "edf8e9c7e9c0a1d99b74c47631a354006d2c", "edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32", "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32", "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b" ).map(colors); var Greens = ramp(scheme$m); var scheme$n = new Array(3).concat( "f0f0f0bdbdbd636363", "f7f7f7cccccc969696525252", "f7f7f7cccccc969696636363252525", "f7f7f7d9d9d9bdbdbd969696636363252525", "f7f7f7d9d9d9bdbdbd969696737373525252252525", "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525", "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000" ).map(colors); var Greys = ramp(scheme$n); var scheme$o = new Array(3).concat( "efedf5bcbddc756bb1", "f2f0f7cbc9e29e9ac86a51a3", "f2f0f7cbc9e29e9ac8756bb154278f", "f2f0f7dadaebbcbddc9e9ac8756bb154278f", "f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486", "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486", "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d" ).map(colors); var Purples = ramp(scheme$o); var scheme$p = new Array(3).concat( "fee0d2fc9272de2d26", "fee5d9fcae91fb6a4acb181d", "fee5d9fcae91fb6a4ade2d26a50f15", "fee5d9fcbba1fc9272fb6a4ade2d26a50f15", "fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d", "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d", "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d" ).map(colors); var Reds = ramp(scheme$p); var scheme$q = new Array(3).concat( "fee6cefdae6be6550d", "feeddefdbe85fd8d3cd94701", "feeddefdbe85fd8d3ce6550da63603", "feeddefdd0a2fdae6bfd8d3ce6550da63603", "feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04", "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04", "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704" ).map(colors); var Oranges = ramp(scheme$q); function cividis(t) { t = Math.max(0, Math.min(1, t)); return "rgb(" + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + ", " + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + ", " + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67))))))) + ")"; } var cubehelix$3 = cubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0)); var warm = cubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8)); var cool = cubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8)); var c = cubehelix(); function rainbow(t) { if (t < 0 || t > 1) t -= Math.floor(t); var ts = Math.abs(t - 0.5); c.h = 360 * t - 100; c.s = 1.5 - 1.5 * ts; c.l = 0.8 - 0.9 * ts; return c + ""; } var c$1 = rgb(), pi_1_3 = Math.PI / 3, pi_2_3 = Math.PI * 2 / 3; function sinebow(t) { var x; t = (0.5 - t) * Math.PI; c$1.r = 255 * (x = Math.sin(t)) * x; c$1.g = 255 * (x = Math.sin(t + pi_1_3)) * x; c$1.b = 255 * (x = Math.sin(t + pi_2_3)) * x; return c$1 + ""; } function turbo(t) { t = Math.max(0, Math.min(1, t)); return "rgb(" + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + ", " + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + ", " + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66))))))) + ")"; } function ramp$1(range) { var n = range.length; return function(t) { return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))]; }; } var viridis = ramp$1(colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")); var magma = ramp$1(colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")); var inferno = ramp$1(colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")); var plasma = ramp$1(colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")); function constant$b(x) { return function constant() { return x; }; } var abs$1 = Math.abs; var atan2$1 = Math.atan2; var cos$2 = Math.cos; var max$2 = Math.max; var min$1 = Math.min; var sin$2 = Math.sin; var sqrt$2 = Math.sqrt; var epsilon$3 = 1e-12; var pi$4 = Math.PI; var halfPi$3 = pi$4 / 2; var tau$4 = 2 * pi$4; function acos$1(x) { return x > 1 ? 0 : x < -1 ? pi$4 : Math.acos(x); } function asin$1(x) { return x >= 1 ? halfPi$3 : x <= -1 ? -halfPi$3 : Math.asin(x); } function arcInnerRadius(d) { return d.innerRadius; } function arcOuterRadius(d) { return d.outerRadius; } function arcStartAngle(d) { return d.startAngle; } function arcEndAngle(d) { return d.endAngle; } function arcPadAngle(d) { return d && d.padAngle; // Note: optional! } function intersect(x0, y0, x1, y1, x2, y2, x3, y3) { var x10 = x1 - x0, y10 = y1 - y0, x32 = x3 - x2, y32 = y3 - y2, t = y32 * x10 - x32 * y10; if (t * t < epsilon$3) return; t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t; return [x0 + t * x10, y0 + t * y10]; } // Compute perpendicular offset line of length rc. // http://mathworld.wolfram.com/Circle-LineIntersection.html function cornerTangents(x0, y0, x1, y1, r1, rc, cw) { var x01 = x0 - x1, y01 = y0 - y1, lo = (cw ? rc : -rc) / sqrt$2(x01 * x01 + y01 * y01), ox = lo * y01, oy = -lo * x01, x11 = x0 + ox, y11 = y0 + oy, x10 = x1 + ox, y10 = y1 + oy, x00 = (x11 + x10) / 2, y00 = (y11 + y10) / 2, dx = x10 - x11, dy = y10 - y11, d2 = dx * dx + dy * dy, r = r1 - rc, D = x11 * y10 - x10 * y11, d = (dy < 0 ? -1 : 1) * sqrt$2(max$2(0, r * r * d2 - D * D)), cx0 = (D * dy - dx * d) / d2, cy0 = (-D * dx - dy * d) / d2, cx1 = (D * dy + dx * d) / d2, cy1 = (-D * dx + dy * d) / d2, dx0 = cx0 - x00, dy0 = cy0 - y00, dx1 = cx1 - x00, dy1 = cy1 - y00; // Pick the closer of the two intersection points. // TODO Is there a faster way to determine which intersection to use? if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1; return { cx: cx0, cy: cy0, x01: -ox, y01: -oy, x11: cx0 * (r1 / r - 1), y11: cy0 * (r1 / r - 1) }; } function arc() { var innerRadius = arcInnerRadius, outerRadius = arcOuterRadius, cornerRadius = constant$b(0), padRadius = null, startAngle = arcStartAngle, endAngle = arcEndAngle, padAngle = arcPadAngle, context = null; function arc() { var buffer, r, r0 = +innerRadius.apply(this, arguments), r1 = +outerRadius.apply(this, arguments), a0 = startAngle.apply(this, arguments) - halfPi$3, a1 = endAngle.apply(this, arguments) - halfPi$3, da = abs$1(a1 - a0), cw = a1 > a0; if (!context) context = buffer = path(); // Ensure that the outer radius is always larger than the inner radius. if (r1 < r0) r = r1, r1 = r0, r0 = r; // Is it a point? if (!(r1 > epsilon$3)) context.moveTo(0, 0); // Or is it a circle or annulus? else if (da > tau$4 - epsilon$3) { context.moveTo(r1 * cos$2(a0), r1 * sin$2(a0)); context.arc(0, 0, r1, a0, a1, !cw); if (r0 > epsilon$3) { context.moveTo(r0 * cos$2(a1), r0 * sin$2(a1)); context.arc(0, 0, r0, a1, a0, cw); } } // Or is it a circular or annular sector? else { var a01 = a0, a11 = a1, a00 = a0, a10 = a1, da0 = da, da1 = da, ap = padAngle.apply(this, arguments) / 2, rp = (ap > epsilon$3) && (padRadius ? +padRadius.apply(this, arguments) : sqrt$2(r0 * r0 + r1 * r1)), rc = min$1(abs$1(r1 - r0) / 2, +cornerRadius.apply(this, arguments)), rc0 = rc, rc1 = rc, t0, t1; // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0. if (rp > epsilon$3) { var p0 = asin$1(rp / r0 * sin$2(ap)), p1 = asin$1(rp / r1 * sin$2(ap)); if ((da0 -= p0 * 2) > epsilon$3) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0; else da0 = 0, a00 = a10 = (a0 + a1) / 2; if ((da1 -= p1 * 2) > epsilon$3) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1; else da1 = 0, a01 = a11 = (a0 + a1) / 2; } var x01 = r1 * cos$2(a01), y01 = r1 * sin$2(a01), x10 = r0 * cos$2(a10), y10 = r0 * sin$2(a10); // Apply rounded corners? if (rc > epsilon$3) { var x11 = r1 * cos$2(a11), y11 = r1 * sin$2(a11), x00 = r0 * cos$2(a00), y00 = r0 * sin$2(a00), oc; // Restrict the corner radius according to the sector angle. if (da < pi$4 && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) { var ax = x01 - oc[0], ay = y01 - oc[1], bx = x11 - oc[0], by = y11 - oc[1], kc = 1 / sin$2(acos$1((ax * bx + ay * by) / (sqrt$2(ax * ax + ay * ay) * sqrt$2(bx * bx + by * by))) / 2), lc = sqrt$2(oc[0] * oc[0] + oc[1] * oc[1]); rc0 = min$1(rc, (r0 - lc) / (kc - 1)); rc1 = min$1(rc, (r1 - lc) / (kc + 1)); } } // Is the sector collapsed to a line? if (!(da1 > epsilon$3)) context.moveTo(x01, y01); // Does the sector’s outer ring have rounded corners? else if (rc1 > epsilon$3) { t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw); t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw); context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01); // Have the corners merged? if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw); // Otherwise, draw the two corners and the ring. else { context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw); context.arc(0, 0, r1, atan2$1(t0.cy + t0.y11, t0.cx + t0.x11), atan2$1(t1.cy + t1.y11, t1.cx + t1.x11), !cw); context.arc(t1.cx, t1.cy, rc1, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw); } } // Or is the outer ring just a circular arc? else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw); // Is there no inner ring, and it’s a circular sector? // Or perhaps it’s an annular sector collapsed due to padding? if (!(r0 > epsilon$3) || !(da0 > epsilon$3)) context.lineTo(x10, y10); // Does the sector’s inner ring (or point) have rounded corners? else if (rc0 > epsilon$3) { t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw); t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw); context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01); // Have the corners merged? if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw); // Otherwise, draw the two corners and the ring. else { context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw); context.arc(0, 0, r0, atan2$1(t0.cy + t0.y11, t0.cx + t0.x11), atan2$1(t1.cy + t1.y11, t1.cx + t1.x11), cw); context.arc(t1.cx, t1.cy, rc0, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw); } } // Or is the inner ring just a circular arc? else context.arc(0, 0, r0, a10, a00, cw); } context.closePath(); if (buffer) return context = null, buffer + "" || null; } arc.centroid = function() { var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$4 / 2; return [cos$2(a) * r, sin$2(a) * r]; }; arc.innerRadius = function(_) { return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant$b(+_), arc) : innerRadius; }; arc.outerRadius = function(_) { return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant$b(+_), arc) : outerRadius; }; arc.cornerRadius = function(_) { return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant$b(+_), arc) : cornerRadius; }; arc.padRadius = function(_) { return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant$b(+_), arc) : padRadius; }; arc.startAngle = function(_) { return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$b(+_), arc) : startAngle; }; arc.endAngle = function(_) { return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$b(+_), arc) : endAngle; }; arc.padAngle = function(_) { return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$b(+_), arc) : padAngle; }; arc.context = function(_) { return arguments.length ? ((context = _ == null ? null : _), arc) : context; }; return arc; } function Linear(context) { this._context = context; } Linear.prototype = { areaStart: function() { this._line = 0; }, areaEnd: function() { this._line = NaN; }, lineStart: function() { this._point = 0; }, lineEnd: function() { if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); this._line = 1 - this._line; }, point: function(x, y) { x = +x, y = +y; switch (this._point) { case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; case 1: this._point = 2; // proceed default: this._context.lineTo(x, y); break; } } }; function curveLinear(context) { return new Linear(context); } function x$3(p) { return p[0]; } function y$3(p) { return p[1]; } function line() { var x = x$3, y = y$3, defined = constant$b(true), context = null, curve = curveLinear, output = null; function line(data) { var i, n = data.length, d, defined0 = false, buffer; if (context == null) output = curve(buffer = path()); for (i = 0; i <= n; ++i) { if (!(i < n && defined(d = data[i], i, data)) === defined0) { if (defined0 = !defined0) output.lineStart(); else output.lineEnd(); } if (defined0) output.point(+x(d, i, data), +y(d, i, data)); } if (buffer) return output = null, buffer + "" || null; } line.x = function(_) { return arguments.length ? (x = typeof _ === "function" ? _ : constant$b(+_), line) : x; }; line.y = function(_) { return arguments.length ? (y = typeof _ === "function" ? _ : constant$b(+_), line) : y; }; line.defined = function(_) { return arguments.length ? (defined = typeof _ === "function" ? _ : constant$b(!!_), line) : defined; }; line.curve = function(_) { return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve; }; line.context = function(_) { return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context; }; return line; } function area$3() { var x0 = x$3, x1 = null, y0 = constant$b(0), y1 = y$3, defined = constant$b(true), context = null, curve = curveLinear, output = null; function area(data) { var i, j, k, n = data.length, d, defined0 = false, buffer, x0z = new Array(n), y0z = new Array(n); if (context == null) output = curve(buffer = path()); for (i = 0; i <= n; ++i) { if (!(i < n && defined(d = data[i], i, data)) === defined0) { if (defined0 = !defined0) { j = i; output.areaStart(); output.lineStart(); } else { output.lineEnd(); output.lineStart(); for (k = i - 1; k >= j; --k) { output.point(x0z[k], y0z[k]); } output.lineEnd(); output.areaEnd(); } } if (defined0) { x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data); output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]); } } if (buffer) return output = null, buffer + "" || null; } function arealine() { return line().defined(defined).curve(curve).context(context); } area.x = function(_) { return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$b(+_), x1 = null, area) : x0; }; area.x0 = function(_) { return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$b(+_), area) : x0; }; area.x1 = function(_) { return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant$b(+_), area) : x1; }; area.y = function(_) { return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$b(+_), y1 = null, area) : y0; }; area.y0 = function(_) { return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$b(+_), area) : y0; }; area.y1 = function(_) { return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant$b(+_), area) : y1; }; area.lineX0 = area.lineY0 = function() { return arealine().x(x0).y(y0); }; area.lineY1 = function() { return arealine().x(x0).y(y1); }; area.lineX1 = function() { return arealine().x(x1).y(y0); }; area.defined = function(_) { return arguments.length ? (defined = typeof _ === "function" ? _ : constant$b(!!_), area) : defined; }; area.curve = function(_) { return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve; }; area.context = function(_) { return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context; }; return area; } function descending$1(a, b) { return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; } function identity$8(d) { return d; } function pie() { var value = identity$8, sortValues = descending$1, sort = null, startAngle = constant$b(0), endAngle = constant$b(tau$4), padAngle = constant$b(0); function pie(data) { var i, n = data.length, j, k, sum = 0, index = new Array(n), arcs = new Array(n), a0 = +startAngle.apply(this, arguments), da = Math.min(tau$4, Math.max(-tau$4, endAngle.apply(this, arguments) - a0)), a1, p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)), pa = p * (da < 0 ? -1 : 1), v; for (i = 0; i < n; ++i) { if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) { sum += v; } } // Optionally sort the arcs by previously-computed values or by data. if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); }); else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); }); // Compute the arcs! They are stored in the original data's order. for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) { j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = { data: data[j], index: i, value: v, startAngle: a0, endAngle: a1, padAngle: p }; } return arcs; } pie.value = function(_) { return arguments.length ? (value = typeof _ === "function" ? _ : constant$b(+_), pie) : value; }; pie.sortValues = function(_) { return arguments.length ? (sortValues = _, sort = null, pie) : sortValues; }; pie.sort = function(_) { return arguments.length ? (sort = _, sortValues = null, pie) : sort; }; pie.startAngle = function(_) { return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$b(+_), pie) : startAngle; }; pie.endAngle = function(_) { return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$b(+_), pie) : endAngle; }; pie.padAngle = function(_) { return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$b(+_), pie) : padAngle; }; return pie; } var curveRadialLinear = curveRadial(curveLinear); function Radial(curve) { this._curve = curve; } Radial.prototype = { areaStart: function() { this._curve.areaStart(); }, areaEnd: function() { this._curve.areaEnd(); }, lineStart: function() { this._curve.lineStart(); }, lineEnd: function() { this._curve.lineEnd(); }, point: function(a, r) { this._curve.point(r * Math.sin(a), r * -Math.cos(a)); } }; function curveRadial(curve) { function radial(context) { return new Radial(curve(context)); } radial._curve = curve; return radial; } function lineRadial(l) { var c = l.curve; l.angle = l.x, delete l.x; l.radius = l.y, delete l.y; l.curve = function(_) { return arguments.length ? c(curveRadial(_)) : c()._curve; }; return l; } function lineRadial$1() { return lineRadial(line().curve(curveRadialLinear)); } function areaRadial() { var a = area$3().curve(curveRadialLinear), c = a.curve, x0 = a.lineX0, x1 = a.lineX1, y0 = a.lineY0, y1 = a.lineY1; a.angle = a.x, delete a.x; a.startAngle = a.x0, delete a.x0; a.endAngle = a.x1, delete a.x1; a.radius = a.y, delete a.y; a.innerRadius = a.y0, delete a.y0; a.outerRadius = a.y1, delete a.y1; a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0; a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1; a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0; a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1; a.curve = function(_) { return arguments.length ? c(curveRadial(_)) : c()._curve; }; return a; } function pointRadial(x, y) { return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)]; } var slice$6 = Array.prototype.slice; function linkSource(d) { return d.source; } function linkTarget(d) { return d.target; } function link$2(curve) { var source = linkSource, target = linkTarget, x = x$3, y = y$3, context = null; function link() { var buffer, argv = slice$6.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv); if (!context) context = buffer = path(); curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv)); if (buffer) return context = null, buffer + "" || null; } link.source = function(_) { return arguments.length ? (source = _, link) : source; }; link.target = function(_) { return arguments.length ? (target = _, link) : target; }; link.x = function(_) { return arguments.length ? (x = typeof _ === "function" ? _ : constant$b(+_), link) : x; }; link.y = function(_) { return arguments.length ? (y = typeof _ === "function" ? _ : constant$b(+_), link) : y; }; link.context = function(_) { return arguments.length ? ((context = _ == null ? null : _), link) : context; }; return link; } function curveHorizontal(context, x0, y0, x1, y1) { context.moveTo(x0, y0); context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1); } function curveVertical(context, x0, y0, x1, y1) { context.moveTo(x0, y0); context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1); } function curveRadial$1(context, x0, y0, x1, y1) { var p0 = pointRadial(x0, y0), p1 = pointRadial(x0, y0 = (y0 + y1) / 2), p2 = pointRadial(x1, y0), p3 = pointRadial(x1, y1); context.moveTo(p0[0], p0[1]); context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]); } function linkHorizontal() { return link$2(curveHorizontal); } function linkVertical() { return link$2(curveVertical); } function linkRadial() { var l = link$2(curveRadial$1); l.angle = l.x, delete l.x; l.radius = l.y, delete l.y; return l; } var circle$2 = { draw: function(context, size) { var r = Math.sqrt(size / pi$4); context.moveTo(r, 0); context.arc(0, 0, r, 0, tau$4); } }; var cross$2 = { draw: function(context, size) { var r = Math.sqrt(size / 5) / 2; context.moveTo(-3 * r, -r); context.lineTo(-r, -r); context.lineTo(-r, -3 * r); context.lineTo(r, -3 * r); context.lineTo(r, -r); context.lineTo(3 * r, -r); context.lineTo(3 * r, r); context.lineTo(r, r); context.lineTo(r, 3 * r); context.lineTo(-r, 3 * r); context.lineTo(-r, r); context.lineTo(-3 * r, r); context.closePath(); } }; var tan30 = Math.sqrt(1 / 3), tan30_2 = tan30 * 2; var diamond = { draw: function(context, size) { var y = Math.sqrt(size / tan30_2), x = y * tan30; context.moveTo(0, -y); context.lineTo(x, 0); context.lineTo(0, y); context.lineTo(-x, 0); context.closePath(); } }; var ka = 0.89081309152928522810, kr = Math.sin(pi$4 / 10) / Math.sin(7 * pi$4 / 10), kx = Math.sin(tau$4 / 10) * kr, ky = -Math.cos(tau$4 / 10) * kr; var star = { draw: function(context, size) { var r = Math.sqrt(size * ka), x = kx * r, y = ky * r; context.moveTo(0, -r); context.lineTo(x, y); for (var i = 1; i < 5; ++i) { var a = tau$4 * i / 5, c = Math.cos(a), s = Math.sin(a); context.lineTo(s * r, -c * r); context.lineTo(c * x - s * y, s * x + c * y); } context.closePath(); } }; var square = { draw: function(context, size) { var w = Math.sqrt(size), x = -w / 2; context.rect(x, x, w, w); } }; var sqrt3 = Math.sqrt(3); var triangle = { draw: function(context, size) { var y = -Math.sqrt(size / (sqrt3 * 3)); context.moveTo(0, y * 2); context.lineTo(-sqrt3 * y, -y); context.lineTo(sqrt3 * y, -y); context.closePath(); } }; var c$2 = -0.5, s = Math.sqrt(3) / 2, k = 1 / Math.sqrt(12), a = (k / 2 + 1) * 3; var wye = { draw: function(context, size) { var r = Math.sqrt(size / a), x0 = r / 2, y0 = r * k, x1 = x0, y1 = r * k + r, x2 = -x1, y2 = y1; context.moveTo(x0, y0); context.lineTo(x1, y1); context.lineTo(x2, y2); context.lineTo(c$2 * x0 - s * y0, s * x0 + c$2 * y0); context.lineTo(c$2 * x1 - s * y1, s * x1 + c$2 * y1); context.lineTo(c$2 * x2 - s * y2, s * x2 + c$2 * y2); context.lineTo(c$2 * x0 + s * y0, c$2 * y0 - s * x0); context.lineTo(c$2 * x1 + s * y1, c$2 * y1 - s * x1); context.lineTo(c$2 * x2 + s * y2, c$2 * y2 - s * x2); context.closePath(); } }; var symbols = [ circle$2, cross$2, diamond, square, star, triangle, wye ]; function symbol() { var type = constant$b(circle$2), size = constant$b(64), context = null; function symbol() { var buffer; if (!context) context = buffer = path(); type.apply(this, arguments).draw(context, +size.apply(this, arguments)); if (buffer) return context = null, buffer + "" || null; } symbol.type = function(_) { return arguments.length ? (type = typeof _ === "function" ? _ : constant$b(_), symbol) : type; }; symbol.size = function(_) { return arguments.length ? (size = typeof _ === "function" ? _ : constant$b(+_), symbol) : size; }; symbol.context = function(_) { return arguments.length ? (context = _ == null ? null : _, symbol) : context; }; return symbol; } function noop$3() {} function point$2(that, x, y) { that._context.bezierCurveTo( (2 * that._x0 + that._x1) / 3, (2 * that._y0 + that._y1) / 3, (that._x0 + 2 * that._x1) / 3, (that._y0 + 2 * that._y1) / 3, (that._x0 + 4 * that._x1 + x) / 6, (that._y0 + 4 * that._y1 + y) / 6 ); } function Basis(context) { this._context = context; } Basis.prototype = { areaStart: function() { this._line = 0; }, areaEnd: function() { this._line = NaN; }, lineStart: function() { this._x0 = this._x1 = this._y0 = this._y1 = NaN; this._point = 0; }, lineEnd: function() { switch (this._point) { case 3: point$2(this, this._x1, this._y1); // proceed case 2: this._context.lineTo(this._x1, this._y1); break; } if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); this._line = 1 - this._line; }, point: function(x, y) { x = +x, y = +y; switch (this._point) { case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; case 1: this._point = 2; break; case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed default: point$2(this, x, y); break; } this._x0 = this._x1, this._x1 = x; this._y0 = this._y1, this._y1 = y; } }; function basis$2(context) { return new Basis(context); } function BasisClosed(context) { this._context = context; } BasisClosed.prototype = { areaStart: noop$3, areaEnd: noop$3, lineStart: function() { this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN; this._point = 0; }, lineEnd: function() { switch (this._point) { case 1: { this._context.moveTo(this._x2, this._y2); this._context.closePath(); break; } case 2: { this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3); this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3); this._context.closePath(); break; } case 3: { this.point(this._x2, this._y2); this.point(this._x3, this._y3); this.point(this._x4, this._y4); break; } } }, point: function(x, y) { x = +x, y = +y; switch (this._point) { case 0: this._point = 1; this._x2 = x, this._y2 = y; break; case 1: this._point = 2; this._x3 = x, this._y3 = y; break; case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break; default: point$2(this, x, y); break; } this._x0 = this._x1, this._x1 = x; this._y0 = this._y1, this._y1 = y; } }; function basisClosed$1(context) { return new BasisClosed(context); } function BasisOpen(context) { this._context = context; } BasisOpen.prototype = { areaStart: function() { this._line = 0; }, areaEnd: function() { this._line = NaN; }, lineStart: function() { this._x0 = this._x1 = this._y0 = this._y1 = NaN; this._point = 0; }, lineEnd: function() { if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); this._line = 1 - this._line; }, point: function(x, y) { x = +x, y = +y; switch (this._point) { case 0: this._point = 1; break; case 1: this._point = 2; break; case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break; case 3: this._point = 4; // proceed default: point$2(this, x, y); break; } this._x0 = this._x1, this._x1 = x; this._y0 = this._y1, this._y1 = y; } }; function basisOpen(context) { return new BasisOpen(context); } function Bundle(context, beta) { this._basis = new Basis(context); this._beta = beta; } Bundle.prototype = { lineStart: function() { this._x = []; this._y = []; this._basis.lineStart(); }, lineEnd: function() { var x = this._x, y = this._y, j = x.length - 1; if (j > 0) { var x0 = x[0], y0 = y[0], dx = x[j] - x0, dy = y[j] - y0, i = -1, t; while (++i <= j) { t = i / j; this._basis.point( this._beta * x[i] + (1 - this._beta) * (x0 + t * dx), this._beta * y[i] + (1 - this._beta) * (y0 + t * dy) ); } } this._x = this._y = null; this._basis.lineEnd(); }, point: function(x, y) { this._x.push(+x); this._y.push(+y); } }; var bundle = (function custom(beta) { function bundle(context) { return beta === 1 ? new Basis(context) : new Bundle(context, beta); } bundle.beta = function(beta) { return custom(+beta); }; return bundle; })(0.85); function point$3(that, x, y) { that._context.bezierCurveTo( that._x1 + that._k * (that._x2 - that._x0), that._y1 + that._k * (that._y2 - that._y0), that._x2 + that._k * (that._x1 - x), that._y2 + that._k * (that._y1 - y), that._x2, that._y2 ); } function Cardinal(context, tension) { this._context = context; this._k = (1 - tension) / 6; } Cardinal.prototype = { areaStart: function() { this._line = 0; }, areaEnd: function() { this._line = NaN; }, lineStart: function() { this._x0 = this._x1 = this._x2 = this._y0 = this._y1 = this._y2 = NaN; this._point = 0; }, lineEnd: function() { switch (this._point) { case 2: this._context.lineTo(this._x2, this._y2); break; case 3: point$3(this, this._x1, this._y1); break; } if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); this._line = 1 - this._line; }, point: function(x, y) { x = +x, y = +y; switch (this._point) { case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; case 1: this._point = 2; this._x1 = x, this._y1 = y; break; case 2: this._point = 3; // proceed default: point$3(this, x, y); break; } this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; } }; var cardinal = (function custom(tension) { function cardinal(context) { return new Cardinal(context, tension); } cardinal.tension = function(tension) { return custom(+tension); }; return cardinal; })(0); function CardinalClosed(context, tension) { this._context = context; this._k = (1 - tension) / 6; } CardinalClosed.prototype = { areaStart: noop$3, areaEnd: noop$3, lineStart: function() { this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; this._point = 0; }, lineEnd: function() { switch (this._point) { case 1: { this._context.moveTo(this._x3, this._y3); this._context.closePath(); break; } case 2: { this._context.lineTo(this._x3, this._y3); this._context.closePath(); break; } case 3: { this.point(this._x3, this._y3); this.point(this._x4, this._y4); this.point(this._x5, this._y5); break; } } }, point: function(x, y) { x = +x, y = +y; switch (this._point) { case 0: this._point = 1; this._x3 = x, this._y3 = y; break; case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; case 2: this._point = 3; this._x5 = x, this._y5 = y; break; default: point$3(this, x, y); break; } this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; } }; var cardinalClosed = (function custom(tension) { function cardinal(context) { return new CardinalClosed(context, tension); } cardinal.tension = function(tension) { return custom(+tension); }; return cardinal; })(0); function CardinalOpen(context, tension) { this._context = context; this._k = (1 - tension) / 6; } CardinalOpen.prototype = { areaStart: function() { this._line = 0; }, areaEnd: function() { this._line = NaN; }, lineStart: function() { this._x0 = this._x1 = this._x2 = this._y0 = this._y1 = this._y2 = NaN; this._point = 0; }, lineEnd: function() { if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); this._line = 1 - this._line; }, point: function(x, y) { x = +x, y = +y; switch (this._point) { case 0: this._point = 1; break; case 1: this._point = 2; break; case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; case 3: this._point = 4; // proceed default: point$3(this, x, y); break; } this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; } }; var cardinalOpen = (function custom(tension) { function cardinal(context) { return new CardinalOpen(context, tension); } cardinal.tension = function(tension) { return custom(+tension); }; return cardinal; })(0); function point$4(that, x, y) { var x1 = that._x1, y1 = that._y1, x2 = that._x2, y2 = that._y2; if (that._l01_a > epsilon$3) { var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a, n = 3 * that._l01_a * (that._l01_a + that._l12_a); x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n; y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n; } if (that._l23_a > epsilon$3) { var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a, m = 3 * that._l23_a * (that._l23_a + that._l12_a); x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m; y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m; } that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2); } function CatmullRom(context, alpha) { this._context = context; this._alpha = alpha; } CatmullRom.prototype = { areaStart: function() { this._line = 0; }, areaEnd: function() { this._line = NaN; }, lineStart: function() { this._x0 = this._x1 = this._x2 = this._y0 = this._y1 = this._y2 = NaN; this._l01_a = this._l12_a = this._l23_a = this._l01_2a = this._l12_2a = this._l23_2a = this._point = 0; }, lineEnd: function() { switch (this._point) { case 2: this._context.lineTo(this._x2, this._y2); break; case 3: this.point(this._x2, this._y2); break; } if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); this._line = 1 - this._line; }, point: function(x, y) { x = +x, y = +y; if (this._point) { var x23 = this._x2 - x, y23 = this._y2 - y; this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); } switch (this._point) { case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; case 1: this._point = 2; break; case 2: this._point = 3; // proceed default: point$4(this, x, y); break; } this._l01_a = this._l12_a, this._l12_a = this._l23_a; this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; } }; var catmullRom = (function custom(alpha) { function catmullRom(context) { return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0); } catmullRom.alpha = function(alpha) { return custom(+alpha); }; return catmullRom; })(0.5); function CatmullRomClosed(context, alpha) { this._context = context; this._alpha = alpha; } CatmullRomClosed.prototype = { areaStart: noop$3, areaEnd: noop$3, lineStart: function() { this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; this._l01_a = this._l12_a = this._l23_a = this._l01_2a = this._l12_2a = this._l23_2a = this._point = 0; }, lineEnd: function() { switch (this._point) { case 1: { this._context.moveTo(this._x3, this._y3); this._context.closePath(); break; } case 2: { this._context.lineTo(this._x3, this._y3); this._context.closePath(); break; } case 3: { this.point(this._x3, this._y3); this.point(this._x4, this._y4); this.point(this._x5, this._y5); break; } } }, point: function(x, y) { x = +x, y = +y; if (this._point) { var x23 = this._x2 - x, y23 = this._y2 - y; this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); } switch (this._point) { case 0: this._point = 1; this._x3 = x, this._y3 = y; break; case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; case 2: this._point = 3; this._x5 = x, this._y5 = y; break; default: point$4(this, x, y); break; } this._l01_a = this._l12_a, this._l12_a = this._l23_a; this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; } }; var catmullRomClosed = (function custom(alpha) { function catmullRom(context) { return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0); } catmullRom.alpha = function(alpha) { return custom(+alpha); }; return catmullRom; })(0.5); function CatmullRomOpen(context, alpha) { this._context = context; this._alpha = alpha; } CatmullRomOpen.prototype = { areaStart: function() { this._line = 0; }, areaEnd: function() { this._line = NaN; }, lineStart: function() { this._x0 = this._x1 = this._x2 = this._y0 = this._y1 = this._y2 = NaN; this._l01_a = this._l12_a = this._l23_a = this._l01_2a = this._l12_2a = this._l23_2a = this._point = 0; }, lineEnd: function() { if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); this._line = 1 - this._line; }, point: function(x, y) { x = +x, y = +y; if (this._point) { var x23 = this._x2 - x, y23 = this._y2 - y; this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); } switch (this._point) { case 0: this._point = 1; break; case 1: this._point = 2; break; case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; case 3: this._point = 4; // proceed default: point$4(this, x, y); break; } this._l01_a = this._l12_a, this._l12_a = this._l23_a; this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; } }; var catmullRomOpen = (function custom(alpha) { function catmullRom(context) { return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0); } catmullRom.alpha = function(alpha) { return custom(+alpha); }; return catmullRom; })(0.5); function LinearClosed(context) { this._context = context; } LinearClosed.prototype = { areaStart: noop$3, areaEnd: noop$3, lineStart: function() { this._point = 0; }, lineEnd: function() { if (this._point) this._context.closePath(); }, point: function(x, y) { x = +x, y = +y; if (this._point) this._context.lineTo(x, y); else this._point = 1, this._context.moveTo(x, y); } }; function linearClosed(context) { return new LinearClosed(context); } function sign$1(x) { return x < 0 ? -1 : 1; } // Calculate the slopes of the tangents (Hermite-type interpolation) based on // the following paper: Steffen, M. 1990. A Simple Method for Monotonic // Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO. // NOV(II), P. 443, 1990. function slope3(that, x2, y2) { var h0 = that._x1 - that._x0, h1 = x2 - that._x1, s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0), s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0), p = (s0 * h1 + s1 * h0) / (h0 + h1); return (sign$1(s0) + sign$1(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0; } // Calculate a one-sided slope. function slope2(that, t) { var h = that._x1 - that._x0; return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t; } // According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations // "you can express cubic Hermite interpolation in terms of cubic Bézier curves // with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1". function point$5(that, t0, t1) { var x0 = that._x0, y0 = that._y0, x1 = that._x1, y1 = that._y1, dx = (x1 - x0) / 3; that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1); } function MonotoneX(context) { this._context = context; } MonotoneX.prototype = { areaStart: function() { this._line = 0; }, areaEnd: function() { this._line = NaN; }, lineStart: function() { this._x0 = this._x1 = this._y0 = this._y1 = this._t0 = NaN; this._point = 0; }, lineEnd: function() { switch (this._point) { case 2: this._context.lineTo(this._x1, this._y1); break; case 3: point$5(this, this._t0, slope2(this, this._t0)); break; } if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); this._line = 1 - this._line; }, point: function(x, y) { var t1 = NaN; x = +x, y = +y; if (x === this._x1 && y === this._y1) return; // Ignore coincident points. switch (this._point) { case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; case 1: this._point = 2; break; case 2: this._point = 3; point$5(this, slope2(this, t1 = slope3(this, x, y)), t1); break; default: point$5(this, this._t0, t1 = slope3(this, x, y)); break; } this._x0 = this._x1, this._x1 = x; this._y0 = this._y1, this._y1 = y; this._t0 = t1; } }; function MonotoneY(context) { this._context = new ReflectContext(context); } (MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) { MonotoneX.prototype.point.call(this, y, x); }; function ReflectContext(context) { this._context = context; } ReflectContext.prototype = { moveTo: function(x, y) { this._context.moveTo(y, x); }, closePath: function() { this._context.closePath(); }, lineTo: function(x, y) { this._context.lineTo(y, x); }, bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); } }; function monotoneX(context) { return new MonotoneX(context); } function monotoneY(context) { return new MonotoneY(context); } function Natural(context) { this._context = context; } Natural.prototype = { areaStart: function() { this._line = 0; }, areaEnd: function() { this._line = NaN; }, lineStart: function() { this._x = []; this._y = []; }, lineEnd: function() { var x = this._x, y = this._y, n = x.length; if (n) { this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]); if (n === 2) { this._context.lineTo(x[1], y[1]); } else { var px = controlPoints(x), py = controlPoints(y); for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) { this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]); } } } if (this._line || (this._line !== 0 && n === 1)) this._context.closePath(); this._line = 1 - this._line; this._x = this._y = null; }, point: function(x, y) { this._x.push(+x); this._y.push(+y); } }; // See https://www.particleincell.com/2012/bezier-splines/ for derivation. function controlPoints(x) { var i, n = x.length - 1, m, a = new Array(n), b = new Array(n), r = new Array(n); a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1]; for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1]; a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n]; for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1]; a[n - 1] = r[n - 1] / b[n - 1]; for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i]; b[n - 1] = (x[n] + a[n - 1]) / 2; for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1]; return [a, b]; } function natural(context) { return new Natural(context); } function Step(context, t) { this._context = context; this._t = t; } Step.prototype = { areaStart: function() { this._line = 0; }, areaEnd: function() { this._line = NaN; }, lineStart: function() { this._x = this._y = NaN; this._point = 0; }, lineEnd: function() { if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y); if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line; }, point: function(x, y) { x = +x, y = +y; switch (this._point) { case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; case 1: this._point = 2; // proceed default: { if (this._t <= 0) { this._context.lineTo(this._x, y); this._context.lineTo(x, y); } else { var x1 = this._x * (1 - this._t) + x * this._t; this._context.lineTo(x1, this._y); this._context.lineTo(x1, y); } break; } } this._x = x, this._y = y; } }; function step(context) { return new Step(context, 0.5); } function stepBefore(context) { return new Step(context, 0); } function stepAfter(context) { return new Step(context, 1); } function none$1(series, order) { if (!((n = series.length) > 1)) return; for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) { s0 = s1, s1 = series[order[i]]; for (j = 0; j < m; ++j) { s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1]; } } } function none$2(series) { var n = series.length, o = new Array(n); while (--n >= 0) o[n] = n; return o; } function stackValue(d, key) { return d[key]; } function stack() { var keys = constant$b([]), order = none$2, offset = none$1, value = stackValue; function stack(data) { var kz = keys.apply(this, arguments), i, m = data.length, n = kz.length, sz = new Array(n), oz; for (i = 0; i < n; ++i) { for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) { si[j] = sij = [0, +value(data[j], ki, j, data)]; sij.data = data[j]; } si.key = ki; } for (i = 0, oz = order(sz); i < n; ++i) { sz[oz[i]].index = i; } offset(sz, oz); return sz; } stack.keys = function(_) { return arguments.length ? (keys = typeof _ === "function" ? _ : constant$b(slice$6.call(_)), stack) : keys; }; stack.value = function(_) { return arguments.length ? (value = typeof _ === "function" ? _ : constant$b(+_), stack) : value; }; stack.order = function(_) { return arguments.length ? (order = _ == null ? none$2 : typeof _ === "function" ? _ : constant$b(slice$6.call(_)), stack) : order; }; stack.offset = function(_) { return arguments.length ? (offset = _ == null ? none$1 : _, stack) : offset; }; return stack; } function expand(series, order) { if (!((n = series.length) > 0)) return; for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) { for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0; if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y; } none$1(series, order); } function diverging$1(series, order) { if (!((n = series.length) > 0)) return; for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) { for (yp = yn = 0, i = 0; i < n; ++i) { if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) { d[0] = yp, d[1] = yp += dy; } else if (dy < 0) { d[1] = yn, d[0] = yn += dy; } else { d[0] = 0, d[1] = dy; } } } } function silhouette(series, order) { if (!((n = series.length) > 0)) return; for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) { for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0; s0[j][1] += s0[j][0] = -y / 2; } none$1(series, order); } function wiggle(series, order) { if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return; for (var y = 0, j = 1, s0, m, n; j < m; ++j) { for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) { var si = series[order[i]], sij0 = si[j][1] || 0, sij1 = si[j - 1][1] || 0, s3 = (sij0 - sij1) / 2; for (var k = 0; k < i; ++k) { var sk = series[order[k]], skj0 = sk[j][1] || 0, skj1 = sk[j - 1][1] || 0; s3 += skj0 - skj1; } s1 += sij0, s2 += s3 * sij0; } s0[j - 1][1] += s0[j - 1][0] = y; if (s1) y -= s2 / s1; } s0[j - 1][1] += s0[j - 1][0] = y; none$1(series, order); } function appearance(series) { var peaks = series.map(peak); return none$2(series).sort(function(a, b) { return peaks[a] - peaks[b]; }); } function peak(series) { var i = -1, j = 0, n = series.length, vi, vj = -Infinity; while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i; return j; } function ascending$3(series) { var sums = series.map(sum$2); return none$2(series).sort(function(a, b) { return sums[a] - sums[b]; }); } function sum$2(series) { var s = 0, i = -1, n = series.length, v; while (++i < n) if (v = +series[i][1]) s += v; return s; } function descending$2(series) { return ascending$3(series).reverse(); } function insideOut(series) { var n = series.length, i, j, sums = series.map(sum$2), order = appearance(series), top = 0, bottom = 0, tops = [], bottoms = []; for (i = 0; i < n; ++i) { j = order[i]; if (top < bottom) { top += sums[j]; tops.push(j); } else { bottom += sums[j]; bottoms.push(j); } } return bottoms.reverse().concat(tops); } function reverse(series) { return none$2(series).reverse(); } function constant$c(x) { return function() { return x; }; } function x$4(d) { return d[0]; } function y$4(d) { return d[1]; } function RedBlackTree() { this._ = null; // root node } function RedBlackNode(node) { node.U = // parent node node.C = // color - true for red, false for black node.L = // left node node.R = // right node node.P = // previous node node.N = null; // next node } RedBlackTree.prototype = { constructor: RedBlackTree, insert: function(after, node) { var parent, grandpa, uncle; if (after) { node.P = after; node.N = after.N; if (after.N) after.N.P = node; after.N = node; if (after.R) { after = after.R; while (after.L) after = after.L; after.L = node; } else { after.R = node; } parent = after; } else if (this._) { after = RedBlackFirst(this._); node.P = null; node.N = after; after.P = after.L = node; parent = after; } else { node.P = node.N = null; this._ = node; parent = null; } node.L = node.R = null; node.U = parent; node.C = true; after = node; while (parent && parent.C) { grandpa = parent.U; if (parent === grandpa.L) { uncle = grandpa.R; if (uncle && uncle.C) { parent.C = uncle.C = false; grandpa.C = true; after = grandpa; } else { if (after === parent.R) { RedBlackRotateLeft(this, parent); after = parent; parent = after.U; } parent.C = false; grandpa.C = true; RedBlackRotateRight(this, grandpa); } } else { uncle = grandpa.L; if (uncle && uncle.C) { parent.C = uncle.C = false; grandpa.C = true; after = grandpa; } else { if (after === parent.L) { RedBlackRotateRight(this, parent); after = parent; parent = after.U; } parent.C = false; grandpa.C = true; RedBlackRotateLeft(this, grandpa); } } parent = after.U; } this._.C = false; }, remove: function(node) { if (node.N) node.N.P = node.P; if (node.P) node.P.N = node.N; node.N = node.P = null; var parent = node.U, sibling, left = node.L, right = node.R, next, red; if (!left) next = right; else if (!right) next = left; else next = RedBlackFirst(right); if (parent) { if (parent.L === node) parent.L = next; else parent.R = next; } else { this._ = next; } if (left && right) { red = next.C; next.C = node.C; next.L = left; left.U = next; if (next !== right) { parent = next.U; next.U = node.U; node = next.R; parent.L = node; next.R = right; right.U = next; } else { next.U = parent; parent = next; node = next.R; } } else { red = node.C; node = next; } if (node) node.U = parent; if (red) return; if (node && node.C) { node.C = false; return; } do { if (node === this._) break; if (node === parent.L) { sibling = parent.R; if (sibling.C) { sibling.C = false; parent.C = true; RedBlackRotateLeft(this, parent); sibling = parent.R; } if ((sibling.L && sibling.L.C) || (sibling.R && sibling.R.C)) { if (!sibling.R || !sibling.R.C) { sibling.L.C = false; sibling.C = true; RedBlackRotateRight(this, sibling); sibling = parent.R; } sibling.C = parent.C; parent.C = sibling.R.C = false; RedBlackRotateLeft(this, parent); node = this._; break; } } else { sibling = parent.L; if (sibling.C) { sibling.C = false; parent.C = true; RedBlackRotateRight(this, parent); sibling = parent.L; } if ((sibling.L && sibling.L.C) || (sibling.R && sibling.R.C)) { if (!sibling.L || !sibling.L.C) { sibling.R.C = false; sibling.C = true; RedBlackRotateLeft(this, sibling); sibling = parent.L; } sibling.C = parent.C; parent.C = sibling.L.C = false; RedBlackRotateRight(this, parent); node = this._; break; } } sibling.C = true; node = parent; parent = parent.U; } while (!node.C); if (node) node.C = false; } }; function RedBlackRotateLeft(tree, node) { var p = node, q = node.R, parent = p.U; if (parent) { if (parent.L === p) parent.L = q; else parent.R = q; } else { tree._ = q; } q.U = parent; p.U = q; p.R = q.L; if (p.R) p.R.U = p; q.L = p; } function RedBlackRotateRight(tree, node) { var p = node, q = node.L, parent = p.U; if (parent) { if (parent.L === p) parent.L = q; else parent.R = q; } else { tree._ = q; } q.U = parent; p.U = q; p.L = q.R; if (p.L) p.L.U = p; q.R = p; } function RedBlackFirst(node) { while (node.L) node = node.L; return node; } function createEdge(left, right, v0, v1) { var edge = [null, null], index = edges.push(edge) - 1; edge.left = left; edge.right = right; if (v0) setEdgeEnd(edge, left, right, v0); if (v1) setEdgeEnd(edge, right, left, v1); cells[left.index].halfedges.push(index); cells[right.index].halfedges.push(index); return edge; } function createBorderEdge(left, v0, v1) { var edge = [v0, v1]; edge.left = left; return edge; } function setEdgeEnd(edge, left, right, vertex) { if (!edge[0] && !edge[1]) { edge[0] = vertex; edge.left = left; edge.right = right; } else if (edge.left === right) { edge[1] = vertex; } else { edge[0] = vertex; } } // Liang–Barsky line clipping. function clipEdge(edge, x0, y0, x1, y1) { var a = edge[0], b = edge[1], ax = a[0], ay = a[1], bx = b[0], by = b[1], t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r; r = x0 - ax; if (!dx && r > 0) return; r /= dx; if (dx < 0) { if (r < t0) return; if (r < t1) t1 = r; } else if (dx > 0) { if (r > t1) return; if (r > t0) t0 = r; } r = x1 - ax; if (!dx && r < 0) return; r /= dx; if (dx < 0) { if (r > t1) return; if (r > t0) t0 = r; } else if (dx > 0) { if (r < t0) return; if (r < t1) t1 = r; } r = y0 - ay; if (!dy && r > 0) return; r /= dy; if (dy < 0) { if (r < t0) return; if (r < t1) t1 = r; } else if (dy > 0) { if (r > t1) return; if (r > t0) t0 = r; } r = y1 - ay; if (!dy && r < 0) return; r /= dy; if (dy < 0) { if (r > t1) return; if (r > t0) t0 = r; } else if (dy > 0) { if (r < t0) return; if (r < t1) t1 = r; } if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check? if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy]; if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy]; return true; } function connectEdge(edge, x0, y0, x1, y1) { var v1 = edge[1]; if (v1) return true; var v0 = edge[0], left = edge.left, right = edge.right, lx = left[0], ly = left[1], rx = right[0], ry = right[1], fx = (lx + rx) / 2, fy = (ly + ry) / 2, fm, fb; if (ry === ly) { if (fx < x0 || fx >= x1) return; if (lx > rx) { if (!v0) v0 = [fx, y0]; else if (v0[1] >= y1) return; v1 = [fx, y1]; } else { if (!v0) v0 = [fx, y1]; else if (v0[1] < y0) return; v1 = [fx, y0]; } } else { fm = (lx - rx) / (ry - ly); fb = fy - fm * fx; if (fm < -1 || fm > 1) { if (lx > rx) { if (!v0) v0 = [(y0 - fb) / fm, y0]; else if (v0[1] >= y1) return; v1 = [(y1 - fb) / fm, y1]; } else { if (!v0) v0 = [(y1 - fb) / fm, y1]; else if (v0[1] < y0) return; v1 = [(y0 - fb) / fm, y0]; } } else { if (ly < ry) { if (!v0) v0 = [x0, fm * x0 + fb]; else if (v0[0] >= x1) return; v1 = [x1, fm * x1 + fb]; } else { if (!v0) v0 = [x1, fm * x1 + fb]; else if (v0[0] < x0) return; v1 = [x0, fm * x0 + fb]; } } } edge[0] = v0; edge[1] = v1; return true; } function clipEdges(x0, y0, x1, y1) { var i = edges.length, edge; while (i--) { if (!connectEdge(edge = edges[i], x0, y0, x1, y1) || !clipEdge(edge, x0, y0, x1, y1) || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$4 || Math.abs(edge[0][1] - edge[1][1]) > epsilon$4)) { delete edges[i]; } } } function createCell(site) { return cells[site.index] = { site: site, halfedges: [] }; } function cellHalfedgeAngle(cell, edge) { var site = cell.site, va = edge.left, vb = edge.right; if (site === vb) vb = va, va = site; if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]); if (site === va) va = edge[1], vb = edge[0]; else va = edge[0], vb = edge[1]; return Math.atan2(va[0] - vb[0], vb[1] - va[1]); } function cellHalfedgeStart(cell, edge) { return edge[+(edge.left !== cell.site)]; } function cellHalfedgeEnd(cell, edge) { return edge[+(edge.left === cell.site)]; } function sortCellHalfedges() { for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) { if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) { var index = new Array(m), array = new Array(m); for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]); index.sort(function(i, j) { return array[j] - array[i]; }); for (j = 0; j < m; ++j) array[j] = halfedges[index[j]]; for (j = 0; j < m; ++j) halfedges[j] = array[j]; } } } function clipCells(x0, y0, x1, y1) { var nCells = cells.length, iCell, cell, site, iHalfedge, halfedges, nHalfedges, start, startX, startY, end, endX, endY, cover = true; for (iCell = 0; iCell < nCells; ++iCell) { if (cell = cells[iCell]) { site = cell.site; halfedges = cell.halfedges; iHalfedge = halfedges.length; // Remove any dangling clipped edges. while (iHalfedge--) { if (!edges[halfedges[iHalfedge]]) { halfedges.splice(iHalfedge, 1); } } // Insert any border edges as necessary. iHalfedge = 0, nHalfedges = halfedges.length; while (iHalfedge < nHalfedges) { end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1]; start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1]; if (Math.abs(endX - startX) > epsilon$4 || Math.abs(endY - startY) > epsilon$4) { halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end, Math.abs(endX - x0) < epsilon$4 && y1 - endY > epsilon$4 ? [x0, Math.abs(startX - x0) < epsilon$4 ? startY : y1] : Math.abs(endY - y1) < epsilon$4 && x1 - endX > epsilon$4 ? [Math.abs(startY - y1) < epsilon$4 ? startX : x1, y1] : Math.abs(endX - x1) < epsilon$4 && endY - y0 > epsilon$4 ? [x1, Math.abs(startX - x1) < epsilon$4 ? startY : y0] : Math.abs(endY - y0) < epsilon$4 && endX - x0 > epsilon$4 ? [Math.abs(startY - y0) < epsilon$4 ? startX : x0, y0] : null)) - 1); ++nHalfedges; } } if (nHalfedges) cover = false; } } // If there weren’t any edges, have the closest site cover the extent. // It doesn’t matter which corner of the extent we measure! if (cover) { var dx, dy, d2, dc = Infinity; for (iCell = 0, cover = null; iCell < nCells; ++iCell) { if (cell = cells[iCell]) { site = cell.site; dx = site[0] - x0; dy = site[1] - y0; d2 = dx * dx + dy * dy; if (d2 < dc) dc = d2, cover = cell; } } if (cover) { var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0]; cover.halfedges.push( edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1, edges.push(createBorderEdge(site, v01, v11)) - 1, edges.push(createBorderEdge(site, v11, v10)) - 1, edges.push(createBorderEdge(site, v10, v00)) - 1 ); } } // Lastly delete any cells with no edges; these were entirely clipped. for (iCell = 0; iCell < nCells; ++iCell) { if (cell = cells[iCell]) { if (!cell.halfedges.length) { delete cells[iCell]; } } } } var circlePool = []; var firstCircle; function Circle() { RedBlackNode(this); this.x = this.y = this.arc = this.site = this.cy = null; } function attachCircle(arc) { var lArc = arc.P, rArc = arc.N; if (!lArc || !rArc) return; var lSite = lArc.site, cSite = arc.site, rSite = rArc.site; if (lSite === rSite) return; var bx = cSite[0], by = cSite[1], ax = lSite[0] - bx, ay = lSite[1] - by, cx = rSite[0] - bx, cy = rSite[1] - by; var d = 2 * (ax * cy - ay * cx); if (d >= -epsilon2$2) return; var ha = ax * ax + ay * ay, hc = cx * cx + cy * cy, x = (cy * ha - ay * hc) / d, y = (ax * hc - cx * ha) / d; var circle = circlePool.pop() || new Circle; circle.arc = arc; circle.site = cSite; circle.x = x + bx; circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom arc.circle = circle; var before = null, node = circles._; while (node) { if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) { if (node.L) node = node.L; else { before = node.P; break; } } else { if (node.R) node = node.R; else { before = node; break; } } } circles.insert(before, circle); if (!before) firstCircle = circle; } function detachCircle(arc) { var circle = arc.circle; if (circle) { if (!circle.P) firstCircle = circle.N; circles.remove(circle); circlePool.push(circle); RedBlackNode(circle); arc.circle = null; } } var beachPool = []; function Beach() { RedBlackNode(this); this.edge = this.site = this.circle = null; } function createBeach(site) { var beach = beachPool.pop() || new Beach; beach.site = site; return beach; } function detachBeach(beach) { detachCircle(beach); beaches.remove(beach); beachPool.push(beach); RedBlackNode(beach); } function removeBeach(beach) { var circle = beach.circle, x = circle.x, y = circle.cy, vertex = [x, y], previous = beach.P, next = beach.N, disappearing = [beach]; detachBeach(beach); var lArc = previous; while (lArc.circle && Math.abs(x - lArc.circle.x) < epsilon$4 && Math.abs(y - lArc.circle.cy) < epsilon$4) { previous = lArc.P; disappearing.unshift(lArc); detachBeach(lArc); lArc = previous; } disappearing.unshift(lArc); detachCircle(lArc); var rArc = next; while (rArc.circle && Math.abs(x - rArc.circle.x) < epsilon$4 && Math.abs(y - rArc.circle.cy) < epsilon$4) { next = rArc.N; disappearing.push(rArc); detachBeach(rArc); rArc = next; } disappearing.push(rArc); detachCircle(rArc); var nArcs = disappearing.length, iArc; for (iArc = 1; iArc < nArcs; ++iArc) { rArc = disappearing[iArc]; lArc = disappearing[iArc - 1]; setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex); } lArc = disappearing[0]; rArc = disappearing[nArcs - 1]; rArc.edge = createEdge(lArc.site, rArc.site, null, vertex); attachCircle(lArc); attachCircle(rArc); } function addBeach(site) { var x = site[0], directrix = site[1], lArc, rArc, dxl, dxr, node = beaches._; while (node) { dxl = leftBreakPoint(node, directrix) - x; if (dxl > epsilon$4) node = node.L; else { dxr = x - rightBreakPoint(node, directrix); if (dxr > epsilon$4) { if (!node.R) { lArc = node; break; } node = node.R; } else { if (dxl > -epsilon$4) { lArc = node.P; rArc = node; } else if (dxr > -epsilon$4) { lArc = node; rArc = node.N; } else { lArc = rArc = node; } break; } } } createCell(site); var newArc = createBeach(site); beaches.insert(lArc, newArc); if (!lArc && !rArc) return; if (lArc === rArc) { detachCircle(lArc); rArc = createBeach(lArc.site); beaches.insert(newArc, rArc); newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site); attachCircle(lArc); attachCircle(rArc); return; } if (!rArc) { // && lArc newArc.edge = createEdge(lArc.site, newArc.site); return; } // else lArc !== rArc detachCircle(lArc); detachCircle(rArc); var lSite = lArc.site, ax = lSite[0], ay = lSite[1], bx = site[0] - ax, by = site[1] - ay, rSite = rArc.site, cx = rSite[0] - ax, cy = rSite[1] - ay, d = 2 * (bx * cy - by * cx), hb = bx * bx + by * by, hc = cx * cx + cy * cy, vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay]; setEdgeEnd(rArc.edge, lSite, rSite, vertex); newArc.edge = createEdge(lSite, site, null, vertex); rArc.edge = createEdge(site, rSite, null, vertex); attachCircle(lArc); attachCircle(rArc); } function leftBreakPoint(arc, directrix) { var site = arc.site, rfocx = site[0], rfocy = site[1], pby2 = rfocy - directrix; if (!pby2) return rfocx; var lArc = arc.P; if (!lArc) return -Infinity; site = lArc.site; var lfocx = site[0], lfocy = site[1], plby2 = lfocy - directrix; if (!plby2) return lfocx; var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2; if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx; return (rfocx + lfocx) / 2; } function rightBreakPoint(arc, directrix) { var rArc = arc.N; if (rArc) return leftBreakPoint(rArc, directrix); var site = arc.site; return site[1] === directrix ? site[0] : Infinity; } var epsilon$4 = 1e-6; var epsilon2$2 = 1e-12; var beaches; var cells; var circles; var edges; function triangleArea(a, b, c) { return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]); } function lexicographic(a, b) { return b[1] - a[1] || b[0] - a[0]; } function Diagram(sites, extent) { var site = sites.sort(lexicographic).pop(), x, y, circle; edges = []; cells = new Array(sites.length); beaches = new RedBlackTree; circles = new RedBlackTree; while (true) { circle = firstCircle; if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) { if (site[0] !== x || site[1] !== y) { addBeach(site); x = site[0], y = site[1]; } site = sites.pop(); } else if (circle) { removeBeach(circle.arc); } else { break; } } sortCellHalfedges(); if (extent) { var x0 = +extent[0][0], y0 = +extent[0][1], x1 = +extent[1][0], y1 = +extent[1][1]; clipEdges(x0, y0, x1, y1); clipCells(x0, y0, x1, y1); } this.edges = edges; this.cells = cells; beaches = circles = edges = cells = null; } Diagram.prototype = { constructor: Diagram, polygons: function() { var edges = this.edges; return this.cells.map(function(cell) { var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); }); polygon.data = cell.site.data; return polygon; }); }, triangles: function() { var triangles = [], edges = this.edges; this.cells.forEach(function(cell, i) { if (!(m = (halfedges = cell.halfedges).length)) return; var site = cell.site, halfedges, j = -1, m, s0, e1 = edges[halfedges[m - 1]], s1 = e1.left === site ? e1.right : e1.left; while (++j < m) { s0 = s1; e1 = edges[halfedges[j]]; s1 = e1.left === site ? e1.right : e1.left; if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) { triangles.push([site.data, s0.data, s1.data]); } } }); return triangles; }, links: function() { return this.edges.filter(function(edge) { return edge.right; }).map(function(edge) { return { source: edge.left.data, target: edge.right.data }; }); }, find: function(x, y, radius) { var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell; // Use the previously-found cell, or start with an arbitrary one. while (!(cell = that.cells[i1])) if (++i1 >= n) return null; var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy; // Traverse the half-edges to find a closer cell, if any. do { cell = that.cells[i0 = i1], i1 = null; cell.halfedges.forEach(function(e) { var edge = that.edges[e], v = edge.left; if ((v === cell.site || !v) && !(v = edge.right)) return; var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy; if (v2 < d2) d2 = v2, i1 = v.index; }); } while (i1 !== null); that._found = i0; return radius == null || d2 <= radius * radius ? cell.site : null; } }; function voronoi() { var x = x$4, y = y$4, extent = null; function voronoi(data) { return new Diagram(data.map(function(d, i) { var s = [Math.round(x(d, i, data) / epsilon$4) * epsilon$4, Math.round(y(d, i, data) / epsilon$4) * epsilon$4]; s.index = i; s.data = d; return s; }), extent); } voronoi.polygons = function(data) { return voronoi(data).polygons(); }; voronoi.links = function(data) { return voronoi(data).links(); }; voronoi.triangles = function(data) { return voronoi(data).triangles(); }; voronoi.x = function(_) { return arguments.length ? (x = typeof _ === "function" ? _ : constant$c(+_), voronoi) : x; }; voronoi.y = function(_) { return arguments.length ? (y = typeof _ === "function" ? _ : constant$c(+_), voronoi) : y; }; voronoi.extent = function(_) { return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]]; }; voronoi.size = function(_) { return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]]; }; return voronoi; } function constant$d(x) { return function() { return x; }; } function ZoomEvent(target, type, transform) { this.target = target; this.type = type; this.transform = transform; } function Transform(k, x, y) { this.k = k; this.x = x; this.y = y; } Transform.prototype = { constructor: Transform, scale: function(k) { return k === 1 ? this : new Transform(this.k * k, this.x, this.y); }, translate: function(x, y) { return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y); }, apply: function(point) { return [point[0] * this.k + this.x, point[1] * this.k + this.y]; }, applyX: function(x) { return x * this.k + this.x; }, applyY: function(y) { return y * this.k + this.y; }, invert: function(location) { return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k]; }, invertX: function(x) { return (x - this.x) / this.k; }, invertY: function(y) { return (y - this.y) / this.k; }, rescaleX: function(x) { return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x)); }, rescaleY: function(y) { return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y)); }, toString: function() { return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")"; } }; var identity$9 = new Transform(1, 0, 0); transform$1.prototype = Transform.prototype; function transform$1(node) { while (!node.__zoom) if (!(node = node.parentNode)) return identity$9; return node.__zoom; } function nopropagation$2() { exports.event.stopImmediatePropagation(); } function noevent$2() { exports.event.preventDefault(); exports.event.stopImmediatePropagation(); } // Ignore right-click, since that should open the context menu. function defaultFilter$2() { return !exports.event.ctrlKey && !exports.event.button; } function defaultExtent$1() { var e = this; if (e instanceof SVGElement) { e = e.ownerSVGElement || e; if (e.hasAttribute("viewBox")) { e = e.viewBox.baseVal; return [[e.x, e.y], [e.x + e.width, e.y + e.height]]; } return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]]; } return [[0, 0], [e.clientWidth, e.clientHeight]]; } function defaultTransform() { return this.__zoom || identity$9; } function defaultWheelDelta() { return -exports.event.deltaY * (exports.event.deltaMode === 1 ? 0.05 : exports.event.deltaMode ? 1 : 0.002); } function defaultTouchable$2() { return navigator.maxTouchPoints || ("ontouchstart" in this); } function defaultConstrain(transform, extent, translateExtent) { var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0], dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0], dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1], dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1]; return transform.translate( dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1), dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1) ); } function zoom() { var filter = defaultFilter$2, extent = defaultExtent$1, constrain = defaultConstrain, wheelDelta = defaultWheelDelta, touchable = defaultTouchable$2, scaleExtent = [0, Infinity], translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]], duration = 250, interpolate = interpolateZoom, listeners = dispatch("start", "zoom", "end"), touchstarting, touchending, touchDelay = 500, wheelDelay = 150, clickDistance2 = 0; function zoom(selection) { selection .property("__zoom", defaultTransform) .on("wheel.zoom", wheeled) .on("mousedown.zoom", mousedowned) .on("dblclick.zoom", dblclicked) .filter(touchable) .on("touchstart.zoom", touchstarted) .on("touchmove.zoom", touchmoved) .on("touchend.zoom touchcancel.zoom", touchended) .style("touch-action", "none") .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); } zoom.transform = function(collection, transform, point) { var selection = collection.selection ? collection.selection() : collection; selection.property("__zoom", defaultTransform); if (collection !== selection) { schedule(collection, transform, point); } else { selection.interrupt().each(function() { gesture(this, arguments) .start() .zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform) .end(); }); } }; zoom.scaleBy = function(selection, k, p) { zoom.scaleTo(selection, function() { var k0 = this.__zoom.k, k1 = typeof k === "function" ? k.apply(this, arguments) : k; return k0 * k1; }, p); }; zoom.scaleTo = function(selection, k, p) { zoom.transform(selection, function() { var e = extent.apply(this, arguments), t0 = this.__zoom, p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p, p1 = t0.invert(p0), k1 = typeof k === "function" ? k.apply(this, arguments) : k; return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent); }, p); }; zoom.translateBy = function(selection, x, y) { zoom.transform(selection, function() { return constrain(this.__zoom.translate( typeof x === "function" ? x.apply(this, arguments) : x, typeof y === "function" ? y.apply(this, arguments) : y ), extent.apply(this, arguments), translateExtent); }); }; zoom.translateTo = function(selection, x, y, p) { zoom.transform(selection, function() { var e = extent.apply(this, arguments), t = this.__zoom, p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p; return constrain(identity$9.translate(p0[0], p0[1]).scale(t.k).translate( typeof x === "function" ? -x.apply(this, arguments) : -x, typeof y === "function" ? -y.apply(this, arguments) : -y ), e, translateExtent); }, p); }; function scale(transform, k) { k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k)); return k === transform.k ? transform : new Transform(k, transform.x, transform.y); } function translate(transform, p0, p1) { var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k; return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y); } function centroid(extent) { return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2]; } function schedule(transition, transform, point) { transition .on("start.zoom", function() { gesture(this, arguments).start(); }) .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); }) .tween("zoom", function() { var that = this, args = arguments, g = gesture(that, args), e = extent.apply(that, args), p = point == null ? centroid(e) : typeof point === "function" ? point.apply(that, args) : point, w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]), a = that.__zoom, b = typeof transform === "function" ? transform.apply(that, args) : transform, i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k)); return function(t) { if (t === 1) t = b; // Avoid rounding error on end. else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); } g.zoom(null, t); }; }); } function gesture(that, args, clean) { return (!clean && that.__zooming) || new Gesture(that, args); } function Gesture(that, args) { this.that = that; this.args = args; this.active = 0; this.extent = extent.apply(that, args); this.taps = 0; } Gesture.prototype = { start: function() { if (++this.active === 1) { this.that.__zooming = this; this.emit("start"); } return this; }, zoom: function(key, transform) { if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]); if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]); if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]); this.that.__zoom = transform; this.emit("zoom"); return this; }, end: function() { if (--this.active === 0) { delete this.that.__zooming; this.emit("end"); } return this; }, emit: function(type) { customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]); } }; function wheeled() { if (!filter.apply(this, arguments)) return; var g = gesture(this, arguments), t = this.__zoom, k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))), p = mouse(this); // If the mouse is in the same location as before, reuse it. // If there were recent wheel events, reset the wheel idle timeout. if (g.wheel) { if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) { g.mouse[1] = t.invert(g.mouse[0] = p); } clearTimeout(g.wheel); } // If this wheel event won’t trigger a transform change, ignore it. else if (t.k === k) return; // Otherwise, capture the mouse point and location at the start. else { g.mouse = [p, t.invert(p)]; interrupt(this); g.start(); } noevent$2(); g.wheel = setTimeout(wheelidled, wheelDelay); g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent)); function wheelidled() { g.wheel = null; g.end(); } } function mousedowned() { if (touchending || !filter.apply(this, arguments)) return; var g = gesture(this, arguments, true), v = select(exports.event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true), p = mouse(this), x0 = exports.event.clientX, y0 = exports.event.clientY; dragDisable(exports.event.view); nopropagation$2(); g.mouse = [p, this.__zoom.invert(p)]; interrupt(this); g.start(); function mousemoved() { noevent$2(); if (!g.moved) { var dx = exports.event.clientX - x0, dy = exports.event.clientY - y0; g.moved = dx * dx + dy * dy > clickDistance2; } g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent, translateExtent)); } function mouseupped() { v.on("mousemove.zoom mouseup.zoom", null); yesdrag(exports.event.view, g.moved); noevent$2(); g.end(); } } function dblclicked() { if (!filter.apply(this, arguments)) return; var t0 = this.__zoom, p0 = mouse(this), p1 = t0.invert(p0), k1 = t0.k * (exports.event.shiftKey ? 0.5 : 2), t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments), translateExtent); noevent$2(); if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0); else select(this).call(zoom.transform, t1); } function touchstarted() { if (!filter.apply(this, arguments)) return; var touches = exports.event.touches, n = touches.length, g = gesture(this, arguments, exports.event.changedTouches.length === n), started, i, t, p; nopropagation$2(); for (i = 0; i < n; ++i) { t = touches[i], p = touch(this, touches, t.identifier); p = [p, this.__zoom.invert(p), t.identifier]; if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting; else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0; } if (touchstarting) touchstarting = clearTimeout(touchstarting); if (started) { if (g.taps < 2) touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay); interrupt(this); g.start(); } } function touchmoved() { if (!this.__zooming) return; var g = gesture(this, arguments), touches = exports.event.changedTouches, n = touches.length, i, t, p, l; noevent$2(); if (touchstarting) touchstarting = clearTimeout(touchstarting); g.taps = 0; for (i = 0; i < n; ++i) { t = touches[i], p = touch(this, touches, t.identifier); if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p; else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p; } t = g.that.__zoom; if (g.touch1) { var p0 = g.touch0[0], l0 = g.touch0[1], p1 = g.touch1[0], l1 = g.touch1[1], dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp, dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl; t = scale(t, Math.sqrt(dp / dl)); p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2]; l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2]; } else if (g.touch0) p = g.touch0[0], l = g.touch0[1]; else return; g.zoom("touch", constrain(translate(t, p, l), g.extent, translateExtent)); } function touchended() { if (!this.__zooming) return; var g = gesture(this, arguments), touches = exports.event.changedTouches, n = touches.length, i, t; nopropagation$2(); if (touchending) clearTimeout(touchending); touchending = setTimeout(function() { touchending = null; }, touchDelay); for (i = 0; i < n; ++i) { t = touches[i]; if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0; else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1; } if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1; if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]); else { g.end(); // If this was a dbltap, reroute to the (optional) dblclick.zoom handler. if (g.taps === 2) { var p = select(this).on("dblclick.zoom"); if (p) p.apply(this, arguments); } } } zoom.wheelDelta = function(_) { return arguments.length ? (wheelDelta = typeof _ === "function" ? _ : constant$d(+_), zoom) : wheelDelta; }; zoom.filter = function(_) { return arguments.length ? (filter = typeof _ === "function" ? _ : constant$d(!!_), zoom) : filter; }; zoom.touchable = function(_) { return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$d(!!_), zoom) : touchable; }; zoom.extent = function(_) { return arguments.length ? (extent = typeof _ === "function" ? _ : constant$d([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent; }; zoom.scaleExtent = function(_) { return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]]; }; zoom.translateExtent = function(_) { return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]]; }; zoom.constrain = function(_) { return arguments.length ? (constrain = _, zoom) : constrain; }; zoom.duration = function(_) { return arguments.length ? (duration = +_, zoom) : duration; }; zoom.interpolate = function(_) { return arguments.length ? (interpolate = _, zoom) : interpolate; }; zoom.on = function() { var value = listeners.on.apply(listeners, arguments); return value === listeners ? zoom : value; }; zoom.clickDistance = function(_) { return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2); }; return zoom; } exports.FormatSpecifier = FormatSpecifier; exports.active = active; exports.arc = arc; exports.area = area$3; exports.areaRadial = areaRadial; exports.ascending = ascending; exports.autoType = autoType; exports.axisBottom = axisBottom; exports.axisLeft = axisLeft; exports.axisRight = axisRight; exports.axisTop = axisTop; exports.bisect = bisectRight; exports.bisectLeft = bisectLeft; exports.bisectRight = bisectRight; exports.bisector = bisector; exports.blob = blob; exports.brush = brush; exports.brushSelection = brushSelection; exports.brushX = brushX; exports.brushY = brushY; exports.buffer = buffer; exports.chord = chord; exports.clientPoint = point; exports.cluster = cluster; exports.color = color; exports.contourDensity = density; exports.contours = contours; exports.create = create; exports.creator = creator; exports.cross = cross; exports.csv = csv$1; exports.csvFormat = csvFormat; exports.csvFormatBody = csvFormatBody; exports.csvFormatRow = csvFormatRow; exports.csvFormatRows = csvFormatRows; exports.csvFormatValue = csvFormatValue; exports.csvParse = csvParse; exports.csvParseRows = csvParseRows; exports.cubehelix = cubehelix; exports.curveBasis = basis$2; exports.curveBasisClosed = basisClosed$1; exports.curveBasisOpen = basisOpen; exports.curveBundle = bundle; exports.curveCardinal = cardinal; exports.curveCardinalClosed = cardinalClosed; exports.curveCardinalOpen = cardinalOpen; exports.curveCatmullRom = catmullRom; exports.curveCatmullRomClosed = catmullRomClosed; exports.curveCatmullRomOpen = catmullRomOpen; exports.curveLinear = curveLinear; exports.curveLinearClosed = linearClosed; exports.curveMonotoneX = monotoneX; exports.curveMonotoneY = monotoneY; exports.curveNatural = natural; exports.curveStep = step; exports.curveStepAfter = stepAfter; exports.curveStepBefore = stepBefore; exports.customEvent = customEvent; exports.descending = descending; exports.deviation = deviation; exports.dispatch = dispatch; exports.drag = drag; exports.dragDisable = dragDisable; exports.dragEnable = yesdrag; exports.dsv = dsv; exports.dsvFormat = dsvFormat; exports.easeBack = backInOut; exports.easeBackIn = backIn; exports.easeBackInOut = backInOut; exports.easeBackOut = backOut; exports.easeBounce = bounceOut; exports.easeBounceIn = bounceIn; exports.easeBounceInOut = bounceInOut; exports.easeBounceOut = bounceOut; exports.easeCircle = circleInOut; exports.easeCircleIn = circleIn; exports.easeCircleInOut = circleInOut; exports.easeCircleOut = circleOut; exports.easeCubic = cubicInOut; exports.easeCubicIn = cubicIn; exports.easeCubicInOut = cubicInOut; exports.easeCubicOut = cubicOut; exports.easeElastic = elasticOut; exports.easeElasticIn = elasticIn; exports.easeElasticInOut = elasticInOut; exports.easeElasticOut = elasticOut; exports.easeExp = expInOut; exports.easeExpIn = expIn; exports.easeExpInOut = expInOut; exports.easeExpOut = expOut; exports.easeLinear = linear$1; exports.easePoly = polyInOut; exports.easePolyIn = polyIn; exports.easePolyInOut = polyInOut; exports.easePolyOut = polyOut; exports.easeQuad = quadInOut; exports.easeQuadIn = quadIn; exports.easeQuadInOut = quadInOut; exports.easeQuadOut = quadOut; exports.easeSin = sinInOut; exports.easeSinIn = sinIn; exports.easeSinInOut = sinInOut; exports.easeSinOut = sinOut; exports.entries = entries; exports.extent = extent; exports.forceCenter = center$1; exports.forceCollide = collide; exports.forceLink = link; exports.forceManyBody = manyBody; exports.forceRadial = radial; exports.forceSimulation = simulation; exports.forceX = x$2; exports.forceY = y$2; exports.formatDefaultLocale = defaultLocale; exports.formatLocale = formatLocale; exports.formatSpecifier = formatSpecifier; exports.geoAlbers = albers; exports.geoAlbersUsa = albersUsa; exports.geoArea = area$1; exports.geoAzimuthalEqualArea = azimuthalEqualArea; exports.geoAzimuthalEqualAreaRaw = azimuthalEqualAreaRaw; exports.geoAzimuthalEquidistant = azimuthalEquidistant; exports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw; exports.geoBounds = bounds; exports.geoCentroid = centroid; exports.geoCircle = circle; exports.geoClipAntimeridian = clipAntimeridian; exports.geoClipCircle = clipCircle; exports.geoClipExtent = extent$1; exports.geoClipRectangle = clipRectangle; exports.geoConicConformal = conicConformal; exports.geoConicConformalRaw = conicConformalRaw; exports.geoConicEqualArea = conicEqualArea; exports.geoConicEqualAreaRaw = conicEqualAreaRaw; exports.geoConicEquidistant = conicEquidistant; exports.geoConicEquidistantRaw = conicEquidistantRaw; exports.geoContains = contains$1; exports.geoDistance = distance; exports.geoEqualEarth = equalEarth; exports.geoEqualEarthRaw = equalEarthRaw; exports.geoEquirectangular = equirectangular; exports.geoEquirectangularRaw = equirectangularRaw; exports.geoGnomonic = gnomonic; exports.geoGnomonicRaw = gnomonicRaw; exports.geoGraticule = graticule; exports.geoGraticule10 = graticule10; exports.geoIdentity = identity$5; exports.geoInterpolate = interpolate$1; exports.geoLength = length$1; exports.geoMercator = mercator; exports.geoMercatorRaw = mercatorRaw; exports.geoNaturalEarth1 = naturalEarth1; exports.geoNaturalEarth1Raw = naturalEarth1Raw; exports.geoOrthographic = orthographic; exports.geoOrthographicRaw = orthographicRaw; exports.geoPath = index$1; exports.geoProjection = projection; exports.geoProjectionMutator = projectionMutator; exports.geoRotation = rotation; exports.geoStereographic = stereographic; exports.geoStereographicRaw = stereographicRaw; exports.geoStream = geoStream; exports.geoTransform = transform; exports.geoTransverseMercator = transverseMercator; exports.geoTransverseMercatorRaw = transverseMercatorRaw; exports.gray = gray; exports.hcl = hcl; exports.hierarchy = hierarchy; exports.histogram = histogram; exports.hsl = hsl; exports.html = html; exports.image = image; exports.interpolate = interpolateValue; exports.interpolateArray = array$1; exports.interpolateBasis = basis$1; exports.interpolateBasisClosed = basisClosed; exports.interpolateBlues = Blues; exports.interpolateBrBG = BrBG; exports.interpolateBuGn = BuGn; exports.interpolateBuPu = BuPu; exports.interpolateCividis = cividis; exports.interpolateCool = cool; exports.interpolateCubehelix = cubehelix$2; exports.interpolateCubehelixDefault = cubehelix$3; exports.interpolateCubehelixLong = cubehelixLong; exports.interpolateDate = date; exports.interpolateDiscrete = discrete; exports.interpolateGnBu = GnBu; exports.interpolateGreens = Greens; exports.interpolateGreys = Greys; exports.interpolateHcl = hcl$2; exports.interpolateHclLong = hclLong; exports.interpolateHsl = hsl$2; exports.interpolateHslLong = hslLong; exports.interpolateHue = hue$1; exports.interpolateInferno = inferno; exports.interpolateLab = lab$1; exports.interpolateMagma = magma; exports.interpolateNumber = interpolateNumber; exports.interpolateNumberArray = numberArray; exports.interpolateObject = object; exports.interpolateOrRd = OrRd; exports.interpolateOranges = Oranges; exports.interpolatePRGn = PRGn; exports.interpolatePiYG = PiYG; exports.interpolatePlasma = plasma; exports.interpolatePuBu = PuBu; exports.interpolatePuBuGn = PuBuGn; exports.interpolatePuOr = PuOr; exports.interpolatePuRd = PuRd; exports.interpolatePurples = Purples; exports.interpolateRainbow = rainbow; exports.interpolateRdBu = RdBu; exports.interpolateRdGy = RdGy; exports.interpolateRdPu = RdPu; exports.interpolateRdYlBu = RdYlBu; exports.interpolateRdYlGn = RdYlGn; exports.interpolateReds = Reds; exports.interpolateRgb = interpolateRgb; exports.interpolateRgbBasis = rgbBasis; exports.interpolateRgbBasisClosed = rgbBasisClosed; exports.interpolateRound = interpolateRound; exports.interpolateSinebow = sinebow; exports.interpolateSpectral = Spectral; exports.interpolateString = interpolateString; exports.interpolateTransformCss = interpolateTransformCss; exports.interpolateTransformSvg = interpolateTransformSvg; exports.interpolateTurbo = turbo; exports.interpolateViridis = viridis; exports.interpolateWarm = warm; exports.interpolateYlGn = YlGn; exports.interpolateYlGnBu = YlGnBu; exports.interpolateYlOrBr = YlOrBr; exports.interpolateYlOrRd = YlOrRd; exports.interpolateZoom = interpolateZoom; exports.interrupt = interrupt; exports.interval = interval$1; exports.isoFormat = formatIso; exports.isoParse = parseIso; exports.json = json; exports.keys = keys; exports.lab = lab; exports.lch = lch; exports.line = line; exports.lineRadial = lineRadial$1; exports.linkHorizontal = linkHorizontal; exports.linkRadial = linkRadial; exports.linkVertical = linkVertical; exports.local = local; exports.map = map$1; exports.matcher = matcher; exports.max = max; exports.mean = mean; exports.median = median; exports.merge = merge; exports.min = min; exports.mouse = mouse; exports.namespace = namespace; exports.namespaces = namespaces; exports.nest = nest; exports.now = now; exports.pack = index$2; exports.packEnclose = enclose; exports.packSiblings = siblings; exports.pairs = pairs; exports.partition = partition; exports.path = path; exports.permute = permute; exports.pie = pie; exports.piecewise = piecewise; exports.pointRadial = pointRadial; exports.polygonArea = area$2; exports.polygonCentroid = centroid$1; exports.polygonContains = contains$2; exports.polygonHull = hull; exports.polygonLength = length$2; exports.precisionFixed = precisionFixed; exports.precisionPrefix = precisionPrefix; exports.precisionRound = precisionRound; exports.quadtree = quadtree; exports.quantile = threshold; exports.quantize = quantize; exports.radialArea = areaRadial; exports.radialLine = lineRadial$1; exports.randomBates = bates; exports.randomExponential = exponential$1; exports.randomIrwinHall = irwinHall; exports.randomLogNormal = logNormal; exports.randomNormal = normal; exports.randomUniform = uniform; exports.range = sequence; exports.rgb = rgb; exports.ribbon = ribbon; exports.scaleBand = band; exports.scaleDiverging = diverging; exports.scaleDivergingLog = divergingLog; exports.scaleDivergingPow = divergingPow; exports.scaleDivergingSqrt = divergingSqrt; exports.scaleDivergingSymlog = divergingSymlog; exports.scaleIdentity = identity$7; exports.scaleImplicit = implicit; exports.scaleLinear = linear$2; exports.scaleLog = log$1; exports.scaleOrdinal = ordinal; exports.scalePoint = point$1; exports.scalePow = pow$1; exports.scaleQuantile = quantile; exports.scaleQuantize = quantize$1; exports.scaleSequential = sequential; exports.scaleSequentialLog = sequentialLog; exports.scaleSequentialPow = sequentialPow; exports.scaleSequentialQuantile = sequentialQuantile; exports.scaleSequentialSqrt = sequentialSqrt; exports.scaleSequentialSymlog = sequentialSymlog; exports.scaleSqrt = sqrt$1; exports.scaleSymlog = symlog; exports.scaleThreshold = threshold$1; exports.scaleTime = time; exports.scaleUtc = utcTime; exports.scan = scan; exports.schemeAccent = Accent; exports.schemeBlues = scheme$l; exports.schemeBrBG = scheme; exports.schemeBuGn = scheme$9; exports.schemeBuPu = scheme$a; exports.schemeCategory10 = category10; exports.schemeDark2 = Dark2; exports.schemeGnBu = scheme$b; exports.schemeGreens = scheme$m; exports.schemeGreys = scheme$n; exports.schemeOrRd = scheme$c; exports.schemeOranges = scheme$q; exports.schemePRGn = scheme$1; exports.schemePaired = Paired; exports.schemePastel1 = Pastel1; exports.schemePastel2 = Pastel2; exports.schemePiYG = scheme$2; exports.schemePuBu = scheme$e; exports.schemePuBuGn = scheme$d; exports.schemePuOr = scheme$3; exports.schemePuRd = scheme$f; exports.schemePurples = scheme$o; exports.schemeRdBu = scheme$4; exports.schemeRdGy = scheme$5; exports.schemeRdPu = scheme$g; exports.schemeRdYlBu = scheme$6; exports.schemeRdYlGn = scheme$7; exports.schemeReds = scheme$p; exports.schemeSet1 = Set1; exports.schemeSet2 = Set2; exports.schemeSet3 = Set3; exports.schemeSpectral = scheme$8; exports.schemeTableau10 = Tableau10; exports.schemeYlGn = scheme$i; exports.schemeYlGnBu = scheme$h; exports.schemeYlOrBr = scheme$j; exports.schemeYlOrRd = scheme$k; exports.select = select; exports.selectAll = selectAll; exports.selection = selection; exports.selector = selector; exports.selectorAll = selectorAll; exports.set = set$2; exports.shuffle = shuffle; exports.stack = stack; exports.stackOffsetDiverging = diverging$1; exports.stackOffsetExpand = expand; exports.stackOffsetNone = none$1; exports.stackOffsetSilhouette = silhouette; exports.stackOffsetWiggle = wiggle; exports.stackOrderAppearance = appearance; exports.stackOrderAscending = ascending$3; exports.stackOrderDescending = descending$2; exports.stackOrderInsideOut = insideOut; exports.stackOrderNone = none$2; exports.stackOrderReverse = reverse; exports.stratify = stratify; exports.style = styleValue; exports.sum = sum; exports.svg = svg; exports.symbol = symbol; exports.symbolCircle = circle$2; exports.symbolCross = cross$2; exports.symbolDiamond = diamond; exports.symbolSquare = square; exports.symbolStar = star; exports.symbolTriangle = triangle; exports.symbolWye = wye; exports.symbols = symbols; exports.text = text; exports.thresholdFreedmanDiaconis = freedmanDiaconis; exports.thresholdScott = scott; exports.thresholdSturges = thresholdSturges; exports.tickFormat = tickFormat; exports.tickIncrement = tickIncrement; exports.tickStep = tickStep; exports.ticks = ticks; exports.timeDay = day; exports.timeDays = days; exports.timeFormatDefaultLocale = defaultLocale$1; exports.timeFormatLocale = formatLocale$1; exports.timeFriday = friday; exports.timeFridays = fridays; exports.timeHour = hour; exports.timeHours = hours; exports.timeInterval = newInterval; exports.timeMillisecond = millisecond; exports.timeMilliseconds = milliseconds; exports.timeMinute = minute; exports.timeMinutes = minutes; exports.timeMonday = monday; exports.timeMondays = mondays; exports.timeMonth = month; exports.timeMonths = months; exports.timeSaturday = saturday; exports.timeSaturdays = saturdays; exports.timeSecond = second; exports.timeSeconds = seconds; exports.timeSunday = sunday; exports.timeSundays = sundays; exports.timeThursday = thursday; exports.timeThursdays = thursdays; exports.timeTuesday = tuesday; exports.timeTuesdays = tuesdays; exports.timeWednesday = wednesday; exports.timeWednesdays = wednesdays; exports.timeWeek = sunday; exports.timeWeeks = sundays; exports.timeYear = year; exports.timeYears = years; exports.timeout = timeout$1; exports.timer = timer; exports.timerFlush = timerFlush; exports.touch = touch; exports.touches = touches; exports.transition = transition; exports.transpose = transpose; exports.tree = tree; exports.treemap = index$3; exports.treemapBinary = binary; exports.treemapDice = treemapDice; exports.treemapResquarify = resquarify; exports.treemapSlice = treemapSlice; exports.treemapSliceDice = sliceDice; exports.treemapSquarify = squarify; exports.tsv = tsv$1; exports.tsvFormat = tsvFormat; exports.tsvFormatBody = tsvFormatBody; exports.tsvFormatRow = tsvFormatRow; exports.tsvFormatRows = tsvFormatRows; exports.tsvFormatValue = tsvFormatValue; exports.tsvParse = tsvParse; exports.tsvParseRows = tsvParseRows; exports.utcDay = utcDay; exports.utcDays = utcDays; exports.utcFriday = utcFriday; exports.utcFridays = utcFridays; exports.utcHour = utcHour; exports.utcHours = utcHours; exports.utcMillisecond = millisecond; exports.utcMilliseconds = milliseconds; exports.utcMinute = utcMinute; exports.utcMinutes = utcMinutes; exports.utcMonday = utcMonday; exports.utcMondays = utcMondays; exports.utcMonth = utcMonth; exports.utcMonths = utcMonths; exports.utcSaturday = utcSaturday; exports.utcSaturdays = utcSaturdays; exports.utcSecond = second; exports.utcSeconds = seconds; exports.utcSunday = utcSunday; exports.utcSundays = utcSundays; exports.utcThursday = utcThursday; exports.utcThursdays = utcThursdays; exports.utcTuesday = utcTuesday; exports.utcTuesdays = utcTuesdays; exports.utcWednesday = utcWednesday; exports.utcWednesdays = utcWednesdays; exports.utcWeek = utcSunday; exports.utcWeeks = utcSundays; exports.utcYear = utcYear; exports.utcYears = utcYears; exports.values = values; exports.variance = variance; exports.version = version; exports.voronoi = voronoi; exports.window = defaultView; exports.xml = xml; exports.zip = zip; exports.zoom = zoom; exports.zoomIdentity = identity$9; exports.zoomTransform = transform$1; Object.defineProperty(exports, '__esModule', { value: true }); })); rt-5.0.1/devel/third-party/ckeditor-4.13.0/0000755000201500020150000000000014005022167016506 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-4.13.0/._config.js0000644000201500020150000000032514002072145020524 0ustar puckpuckMac OS X  2ATTR==com.apple.quarantineq/0081;5ecf6c4b;Firefox;F2219E1A-60BB-4A0C-B1F0-C7D1D1B628F6rt-5.0.1/devel/third-party/ckeditor-4.13.0/README.md0000644000201500020150000000250414002071405017762 0ustar puckpuckCKEditor 4 ========== Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. https://ckeditor.com - See LICENSE.md for license information. CKEditor 4 is a text editor to be used inside web pages. It's not a replacement for desktop text editors like Word or OpenOffice, but a component to be used as part of web applications and websites. ## Documentation The full editor documentation is available online at the following address: https://ckeditor.com/docs/ ## Installation Installing CKEditor is an easy task. Just follow these simple steps: 1. **Download** the latest version from the CKEditor website: https://ckeditor.com. You should have already completed this step, but be sure you have the very latest version. 2. **Extract** (decompress) the downloaded file into the root of your website. **Note:** CKEditor is by default installed in the `ckeditor` folder. You can place the files in whichever you want though. ## Checking Your Installation The editor comes with a few sample pages that can be used to verify that installation proceeded properly. Take a look at the `samples` directory. To test your installation, just call the following page at your website: http:////samples/index.html For example: http://www.example.com/ckeditor/samples/index.html rt-5.0.1/devel/third-party/ckeditor-4.13.0/contents.css0000644000201500020150000000602614002072501021053 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ body { /* Font */ /* Emoji fonts are added to visualise them nicely in Internet Explorer. */ font-family: sans-serif, Arial, Verdana, "Trebuchet MS", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 12px; /* Text color */ color: #333; /* Remove the background color to make it transparent. */ background-color: #fff; margin: 20px; } .cke_editable { font-size: 13px; line-height: 1.6; /* Fix for missing scrollbars with RTL texts. (#10488) */ word-wrap: break-word; } blockquote { font-style: italic; font-family: Georgia, Times, "Times New Roman", serif; padding: 2px 0; border-style: solid; border-color: #ccc; border-width: 0; } .cke_contents_ltr blockquote { padding-left: 20px; padding-right: 8px; border-left-width: 5px; } .cke_contents_rtl blockquote { padding-left: 8px; padding-right: 20px; border-right-width: 5px; } a { color: #0782C1; } ol,ul,dl { /* IE7: reset rtl list margin. (#7334) */ *margin-right: 0px; /* Preserved spaces for list items with text direction different than the list. (#6249,#8049)*/ padding: 0 40px; } h1,h2,h3,h4,h5,h6 { font-weight: normal; line-height: 1.2; } hr { border: 0px; border-top: 1px solid #ccc; } img.right { border: 1px solid #ccc; float: right; margin-left: 15px; padding: 5px; } img.left { border: 1px solid #ccc; float: left; margin-right: 15px; padding: 5px; } pre { white-space: pre-wrap; /* CSS 2.1 */ word-wrap: break-word; /* IE7 */ -moz-tab-size: 4; tab-size: 4; } .marker { background-color: Yellow; } span[lang] { font-style: italic; } figure { text-align: center; outline: solid 1px #ccc; background: rgba(0,0,0,0.05); padding: 10px; margin: 10px 20px; display: inline-block; } figure > figcaption { text-align: center; display: block; /* For IE8 */ } a > img { padding: 1px; margin: 1px; border: none; outline: 1px solid #0782C1; } /* Widget Styles */ .code-featured { border: 5px solid red; } .math-featured { padding: 20px; box-shadow: 0 0 2px rgba(200, 0, 0, 1); background-color: rgba(255, 0, 0, 0.05); margin: 10px; } .image-clean { border: 0; background: none; padding: 0; } .image-clean > figcaption { font-size: .9em; text-align: right; } .image-grayscale { background-color: white; color: #666; } .image-grayscale img, img.image-grayscale { filter: grayscale(100%); } .embed-240p { max-width: 426px; max-height: 240px; margin:0 auto; } .embed-360p { max-width: 640px; max-height: 360px; margin:0 auto; } .embed-480p { max-width: 854px; max-height: 480px; margin:0 auto; } .embed-720p { max-width: 1280px; max-height: 720px; margin:0 auto; } .embed-1080p { max-width: 1920px; max-height: 1080px; margin:0 auto; } rt-5.0.1/devel/third-party/ckeditor-4.13.0/vendor/0000755000201500020150000000000014002071405017777 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-4.13.0/vendor/promise.js0000644000201500020150000001423114002071405022014 0ustar puckpuck(function(v,w){"object"===typeof exports&&"undefined"!==typeof module?module.exports=w():"function"===typeof define&&define.amd?define(w):v.ES6Promise=w()})(this,function(){function v(a){return"function"===typeof a}function w(){return function(){return process.nextTick(n)}}function R(){return"undefined"!==typeof B?function(){B(n)}:C()}function S(){var a=0,b=new J(n),c=document.createTextNode("");b.observe(c,{characterData:!0});return function(){c.data=a=++a%2}}function T(){var a=new MessageChannel; a.port1.onmessage=n;return function(){return a.port2.postMessage(0)}}function C(){var a=setTimeout;return function(){return a(n,1)}}function n(){for(var a=0;a.cke_dialog_ui_html,.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_ui_hbox_first{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_file,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_textarea{border:1px solid}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:active,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:hover{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:active,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:hover{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:active,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:hover{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:active span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:hover span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:hover{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background,.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_locked,.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .FlashPreviewBox,.cke_dialog .ImagePreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:#fff}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:#fff;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:700}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:active,a.cke_smile:focus,a.cke_smile:hover,a.cke_specialchar:active,a.cke_specialchar:focus,a.cke_specialchar:hover{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:active,a.cke_smile:focus,a.cke_specialchar:active,a.cke_specialchar:focus{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_btn_over,.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_dialog_footer{filter:""}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/dialog.css0000644000201500020150000002350214002071405024137 0ustar puckpuckinput.cke_dialog_ui_input_password,input.cke_dialog_ui_input_text,textarea.cke_dialog_ui_input_textarea{background-color:#fff;outline:0;width:100%;*width:95%;height:30px;padding:4px 10px;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_text:focus,textarea.cke_dialog_ui_input_textarea:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eee;border:1px solid #ddd;border-radius:4px}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:700}.cke_dialog_title{font-weight:700;font-size:13px;cursor:move;position:relative;color:#333;border-bottom:1px solid #ddd;padding:10px 12px;background:#eee}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px;margin-top:35px;border-top:1px solid #ddd;border-radius:0 0 4px 4px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-radius:0 0 4px 4px;border-top:1px solid #ddd;background:#eee}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:28px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:10px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#555;border:1px solid #ddd;border-radius:3px 3px 0 0;background:#f3f3f3}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ddd;text-decoration:none}a.cke_dialog_tab_selected{background:#fff;color:#333;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_dialog_tabs .cke_dialog_ui_input_select{top:-7px!important}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:9px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:700;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_hbox table,.cke_dialog_ui_vbox table{margin:auto}.cke_dialog_ui_vbox{margin-top:5px}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_dialog_ui_hbox_first>.cke_dialog_ui_html,.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_ui_hbox_first{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_file,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_textarea{border:1px solid}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:active,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:hover{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:active,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:hover{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:active,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:hover{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:active span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:hover span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:hover{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background,.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_locked,.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .FlashPreviewBox,.cke_dialog .ImagePreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:#fff}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:#fff;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:700}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:active,a.cke_smile:focus,a.cke_smile:hover,a.cke_specialchar:active,a.cke_specialchar:focus,a.cke_specialchar:hover{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:active,a.cke_smile:focus,a.cke_specialchar:active,a.cke_specialchar:focus{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_btn_over,.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/editor_iequirks.css0000644000201500020150000006604614002071405026114 0ustar puckpuck.cke_reset{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all input[type=password],.cke_reset_all input[type=text],.cke_reset_all textarea{cursor:text}.cke_reset_all input[type=password][disabled],.cke_reset_all input[type=text][disabled],.cke_reset_all textarea[disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:0;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_bottom,.cke_contents,.cke_top{display:block;overflow:hidden}.cke_bottom,.cke_top{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:active,.cke_panel_listItem a:focus,.cke_panel_listItem a:hover{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:active,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:hover{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:700;white-space:nowrap;margin:0;padding:6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem p,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:active.cke_colorbox,a:focus.cke_colorbox,a:hover.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:active.cke_colorauto,a:active.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:hover.cke_colorauto,a:hover.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup :first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup :last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;float:left;border:0;border-radius:2px}.cke_hc .cke_button{border:1px solid #000;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on,.cke_hc a.cke_button_disabled:active,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:hover{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_disabled:active,a.cke_button_disabled:focus,a.cke_button_disabled:hover,a.cke_button_off:active,a.cke_button_off:focus,a.cke_button_off:hover{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#ddd;margin:4px 2px 0;height:16px;width:1px}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:active,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:hover{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menuarrow,.cke_menubutton_icon,.cke_menubutton_label{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.7;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:active .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:hover .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:active .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:hover .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.7}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:hover{outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_off a.cke_combo_button:active,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_empty,.cke_path_item{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:700;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_empty,.cke_rtl .cke_path_item{float:right}a.cke_path_item:active,a.cke_path_item:focus,a.cke_path_item:hover{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:active,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:hover{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff}.cke_wysiwyg_div,.cke_wysiwyg_frame{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label,legend.cke_voice_label{display:none}.cke_bottom,.cke_contents,.cke_top{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_empty,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_toolgroup{float:none}.cke_rtl .cke_button,.cke_rtl .cke_button_icon,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_toolgroup{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}.cke_button__about_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -648px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -672px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -696px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -720px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -744px !important;}.cke_button__removeformat_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -768px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -792px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -816px !important;}.cke_button__specialchar_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -840px !important;}.cke_button__table_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -864px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -888px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -912px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -936px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -960px !important;}.cke_button__pbckcode_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -984px !important;}.cke_button__bgcolor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1008px !important;}.cke_button__textcolor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1032px !important;}.cke_rtl .cke_button__docprops_icon, .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1056px !important;}.cke_ltr .cke_button__docprops_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1080px !important;}.cke_button__emojipanel_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1104px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_button__pbckcode_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__docprops_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__emojipanel_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1104px !important;background-size: 16px !important;}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/dialog_ie.css0000644000201500020150000002477514002071405024631 0ustar puckpuckinput.cke_dialog_ui_input_password,input.cke_dialog_ui_input_text,textarea.cke_dialog_ui_input_textarea{background-color:#fff;outline:0;width:100%;*width:95%;height:30px;padding:4px 10px;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_text:focus,textarea.cke_dialog_ui_input_textarea:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eee;border:1px solid #ddd;border-radius:4px}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:700}.cke_dialog_title{font-weight:700;font-size:13px;cursor:move;position:relative;color:#333;border-bottom:1px solid #ddd;padding:10px 12px;background:#eee}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px;margin-top:35px;border-top:1px solid #ddd;border-radius:0 0 4px 4px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-radius:0 0 4px 4px;border-top:1px solid #ddd;background:#eee}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:28px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:10px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#555;border:1px solid #ddd;border-radius:3px 3px 0 0;background:#f3f3f3}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ddd;text-decoration:none}a.cke_dialog_tab_selected{background:#fff;color:#333;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_dialog_tabs .cke_dialog_ui_input_select{top:-7px!important}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:9px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:700;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_hbox table,.cke_dialog_ui_vbox table{margin:auto}.cke_dialog_ui_vbox{margin-top:5px}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_dialog_ui_hbox_first>.cke_dialog_ui_html,.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_ui_hbox_first{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-left:5px;padding-right:0}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:active,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:hover{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:active,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:hover{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:active,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:hover{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:active span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:hover span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:hover{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background,.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_locked,.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .FlashPreviewBox,.cke_dialog .ImagePreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:#fff}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:#fff;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:700}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:active,a.cke_smile:focus,a.cke_smile:hover,a.cke_specialchar:active,a.cke_specialchar:focus,a.cke_specialchar:hover{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:active,a.cke_smile:focus,a.cke_specialchar:active,a.cke_specialchar:focus{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_btn_over,.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_password,.cke_rtl input.cke_dialog_ui_input_text{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_password,.cke_rtl div.cke_dialog_ui_input_text{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last,.cke_rtl .cke_dialog_ui_vbox_child{padding-right:2px!important}.cke_hc .cke_dialog_footer,.cke_hc .cke_dialog_title,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_file,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_textarea{border:0}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/icons_hidpi.png0000644000201500020150000005057714002071405025200 0ustar puckpuckPNG  IHDR U- IDATx{\EUg&L*X^n""71}I`"**UVotW񺬂+ @΀"ʢ&a!ݧ#:un=~>>T:uՌɍ^~K𖷼e1yay ;1vQPP2PZ nHJn=[.I\&f͚S(;JJfEQض4h7n$ {y>KpzgFq! zB6n6駛9s߅%f׷]5c Twu)Qhhr-ja޼y(n.'oBXT9n!(hj5q~ !O 0ϪjQJS.馬imABD:6!$wAaÆQ#\bkՑ:3:~#EHR|͗ϱ#;-cJ۶ `0 ^m844Ƨ}{e5ph/z,3ݕE'<Gyw8qDBHC2T B8uHJ/#a R@N#<Vv,%\.|>8_.ɶ D߆%J}  XQMNRt@RdE?) u4P)iy3|_~Tgx4eY(JZqƢp].lŞ5?('G K8tisr 48?LnS^+˱ Bޭl'.+9OtR`xx0՟H)MtR`rrJD׿+t}R@׿cV\yzWv+ !-;:)+d2<|ӱƪuN25 <}AT'!I4<Ž+g0 `0 :3Σ%ƍM? ~ JY]("3% ag%b[u\4Z4s]6Y>c5@Gi&9V;!$HR%1d[%J(1ƶ4#RkQeg$~,̓{T*t-6\.w*Uym&:Bp/b46"9NHcP&FuK{@dٶ"|<z?bY:JwFGGS|%k@TWsJRdD6rs`7:%tsb!zRrRJ.\5\v!zJY*R.Mמ|>NNNRR7JӰ`l.7h Az:R|ixKB= ُ2 w+WphhhP٢|I*/|Q&tcl_ c^T=He?<  X67Q&fCaiⴁ2AEKgoYVGC@SO=X˲.[`RJ(_`0 `0 }c=+JS@*ZnݺIhV!q'````5k6&@^o9B;{L؊m~\.B:^\XE3mjl6dIBHJ|KDMuڹ;󖩣h)c"5!r;I6 ^+#/)=5a|:o d|;VyWe1bxN]׽R! v.5B |Iu,䑑 c>|ՁBaiӦI5l<ᆱ*Tccc!oMp %Ec۳g^ Kj5dٌ3D맔swn ضG鶻\._D8pηJϐϔe"mmK=!V^&gVU@2Y{fQD s~!!{W8tg2&*HweL .@`0 CrubIʆu*xݺuㄢh~z+m̒_(>Un0hcP(7ic5*yfs,nK=rn-JU*H! K ?m7[mw{7( uGWFEqm_dYf(9>>]w,QOck,+'?arB{l6˃B#q.lǂ0ٳ*cm<"J?8tHdK>yYYt7ngy۷?$B;-s./pׯ}&۶m{JRRhvi+/..bJ_UUKjyb?\.Rmq:008L8QwZm{0ҁ l ecRa&Po !Wfپ_o~"{ye@ޗb]fg~_<|LܾbyPx A5ZD܆cccRzmc ÄMGh#jp`0 !6_ /؅_``0 #$6P8S .<::::NXs~n:XX,ㄐG⑺ڷbu9ew,9_l!BNE*:Τ[Tx7P-Mq~CCT@Uym0W*GLl U teح j`-)dT5` W@h7}']1~p~[[YV(Da .lr2A0:fX-6ƴ 0M T RӶ H"\~w@FPwA/zɮj@mdDr/c[ Ngր_FلUb@:.ZCopV@Z}o%?\Ah]^/$~@OK`0 ._`_`_`_`_`_`_`_`0 `h{;Bo|E[H L0-R*(r+۲خZ`E7QMDH9jtn! n6t t l`ڀ`0 *O@gpsLM2N,X ƒEͪ9-*t널cY*.2P8_真Ox|qޭ@UUJOQ'3߭A7`RZ z cM)iZ^ Е+WcǎocIaر7yNpfOHfoe2|d@s5Fl4\pGց~o |s r۶O%h4͑5#foi!;}Jz%䜿yxxXD~ڶ=[:s~mܲzj9dX̪j'Ҧzڶ=6裏Nuiز/} ~6*o`#TgJ(bՀ.ƌL7k* ]nm[VgdmGDjRU@enS/&NUC)鈒o7t[`0 `HL.4hQ$ta9?> `0 Cטf~_`f~Aq~ۿcl_۶)c*9nj3&UJ ` QW8$S2 ,tT*1S{?TS:@F'0 3/}/0 `0 t/V6FVDi6 ?$4 vڎ)mZ#B0(:W1ms۶.= 8W•=A9%"߶X~(Z.Z6жj}EAg'[PeGxQNP]3^>999fd26j>.-m`ݺuH/WG XF)_7m fz~A@:<uhZq\&4 U@"mt'L[qOoݪ`0 oYZ/ScH)+q2ƾ u_@Tjb[XTV 8OR鑑q+j!lIi4;sCTz'~61uAv !j5.Tt1c-cTbCa ۖR\G00̬'  4@J?CPnJ*~_Wj uu"@G1} 8 IDAT%X@kb5M@9:XV֦I|D5M%cK").*w DngkoRcleY1vRԻEB !)J@7@6}s~|R2m w˲֫5(eR.›T* !k;,3{ ՜rgQd2e]|w+4W޳@}x`ZF8 '`0 8$zA<=%Gc{ッַ\P044Fq{XJ?~1P'u8FBZK/y}k׮m -o4c8 ck\9[`KF  Aa}f u@g7 " DDR&(zmUuq:5 nCxaM܂+ _ ۖ-;g@G(Q QHR?p=clRzc̱,5k͕J@Mo8qe9*@4+с%}ip|_fDnp+j \5 q1(8رc/Z)YAޱwg 7|3[惵8̝;72M^Tu]eٖc((W涚_@LsuO-&"6?\=IoJ鹞y}HRy!2 8ulPJm N>eh<>>APDh˗/?RzscccDg+;ث._'+JJ5JumEj3 U`0 `0  !sb# (c캘'l_{]w]ꮻw`ͺqŊM_`YѥRFmDUtz_yBp|_jr|>Q\S8<ϻ\ 3gw? \s׮]>}s~/ŽjT*91۶O Ss~n3FjQ/x~VBRԜb صN=իW?fB>*oʥR T0;ϔ{mOVI5R鴖:Ӥض"Yl,sbq~J&k`B('|h8_WBNfFd2Bަ{wBH\.DY ض_&uV*{ss9_Oj 3R4[{:BReYg;@*(2* >эmXfH?KN[ 7 `0 4?r PjĕbdxCb t-v QmZ5Keq >9?^wVS1\+rrh LIRD!%<1^4o 59Ļf[J%i(yF;ZAHsfOC&z3 i(Ϛ !$우Yē힧6jkJj0ƚOCC3f0 `0 ~.ŵrY) %B߆I@눨 Hj] $wD. Iڀ5f?$Fu~6^-&w.0~awxk {o $J~m? = wK[ ~sB) N=X/kcI ; =bDt fTܵw,! `0 Ô5 jbx|\b;R&j:Ǵmf!Ib<6dgEްyA G*팉$6Qچmt Rg Q{R5]%;szF&b5ii.e&1۶͎ZOfkOIk2m OB]hз)B6ufДR`0 &H?F9Aǃ m¤y_q?dn tM_!iP}K5tMeq辎;^bL{#0b Tm_BWL{Glr &yORjV՞4YiouLb{n6(oih0 0$~s@qvttttt(Iy#B\Sy^>qyA\q Wu7Bbx[:9#K)Vy2y#\վZ)!7 .0RqPTUmڿĨjoiS5 lTZض3AW݉n!);i6>j_bŊ&''Q#mr@\- 脫[TBGHkmYVG,M8(.(VM9¬0L[ Fף@Xp*DLţzt:Kc?Lx:{Z}/v?]O?tm5|rѢTXN x;@y̘1C`0 !B :.pe^8B;o !{@pΓ c Te| mF7,kB(@T  i7TL%&5I\m~Lo: WөWUjz˲~5 yiv}+tf}U [F6XUI&(V ``V=9#/)]u/-FX]v^u+e%!rBFW,"|NU2G|$B_` `0uЕ@X+eYS/N,%w Щ_G8УqBg_/hfTNP0 6 #MAk׮n~juNsLNNNQGV+O|$5N6&]ى$5u|p瓞] e]Q*" =ޟB8x+X]9ǎ;FQ¯+#P oGR 䴉V6Bo2|WF%ׄUfVWB>f t~aǒ#PQBG z+ 0OV1f `0 C ~.!7]sr1(Drq,h[*G *pYgm۶-v`q9B @lBHʯ >͆R׿9R/qQiV> Ν{SdFEŃ~Q V {lG[t/u@K{r|nQ 2 "/A6}n?!ۻE]J/16R< Bkq#_ -?!1O,B0w/J!˷mݶM>Ͽ5+W[t:Wq',\( ̺|>yuݺ1)=ڗNyKJe/]m C!$ b/HCipL&s.}O/R-brCrWՉoj5~G,Y$|ްt7n\T‡ZHy89?2pgVbozӛd2`0 tV<<<|m^$z.#[}vK\׽^_ :H\.w5cR,/+8N Qk#\j.J5b񲤂.MrSJ) 1 :$a! K$BГĽDW_\.`XwAVuR1Vy tr_fOn˲NYHq&+o,E)[CRi4mLe|RiUP  ,]fMsOvRT*pᇿOZR /|3?˲~+)/|a|zV 3 d2mrV7@[1qaY& d@@&9ssȋea^۶;L\Z}6hQZ>L)=Rromf]t:=;LHnۦ@&zm_T*ސߠ)Tk=+mBkZ!VS$)kccc^z{@oBwdefxI5^|y^P״ Nh̠xeRVyy7H ϫhtpjʸSdP}!)S=+̜933 `0 ';7Jg׍-#=RQEN TIsI ha+OnS9P?)m@MT.I~QSͯbrt$#ݦbT\/(]2i~N4'Ѹ8:bhK;2mӟ}P&}lA|t]l5kP+[p|gW%i>INh~qP-w,OQ `0 c\mװs9g?|s'{9籽#a$q۽p^7 7M/>#rZY\ٻ[Kf?Elٲ%u]wZ;m@s Ϙ?G)BuNtZVKrX ض}vҰCS* 4J&;*U[|Pd?HgR8y. ߕ@RK)Jg$-JTx[>6 9oY{B|}BJ% TdtHgQJL=yuX]3T"R?NY$BjuyW}_ @TBޕJD{BKtMg@Z\._ӉjzŜ9skW?gFL&+˵b `0  za.?sڢ1c{>}r+ =ϻq?VT{|0l6 3##%y Tr\ yz*.Ç̭V[RuKc ` |<_]Q.Jm?'.6 Ռ1Jb87㼕1(sCWrk@@#tq :) -55@vX\.\]v]X̠۵گ@Up@fBrK)yeBȯE-d !sGFFtERDzejU0 J%@&Y.9ccc2 ę*~xr PJPxMIF)mkh`DOSUrA ```N^{^#1m `0 `_`_`:@A/0 `0 _%&Gd&G@#LoBZ(?60:O<8>erxp(ΆM~,[ͼl8-}8&ge7lޠR/>ֽ ,E8g9Ymkd7mz#8-Y-\xL%.9ݯ g%ԉ.\'&&&!'r[}<οtje۠{d#gč7n goAkN,xa…g4/X|F9%}֛֯_\|ƍ&,_זf ^F[~}l޼yǜ}~go*i8ۛ8nZiə.]KK.~P%}p/`1o`0 +V X$!a‚bi[k׎*8=NdCRtfď3t…_'!Gd bŊuSFq};A9GVkʒASԣ(t{8!(em H#GR[Br\FH^ETYEÏι"Q"|M&øK{UJR1hd::9Ap-5AJ{^0W.lTy-MԱH]\ҡS,!]a) '̞] >y_XhNVFycʕWX < ^x }}}oW9|Rj :38FdË~P%P!wyiYee]F)]nݺ 9MNHy?d2mGOB6E.3r缬)B ~J`X|DIz S⮸y۶p{1{F ۶ӊ(PtMPxNIY c s[:"Hg*Mxt&ҳuujz8NX׵/L+T*}.PK;8m7kjD}moX`Y+9-.@c61NqI8#0N&KZ} J@'tB.nЎtr؛ıcccGSJ%lQ ZBE|N3<{wH+q>5 !l˔˧TZv ڧR+dyp]X}.383eFGG"S+7Ozq}1vRzؔ(@y|eCvyl8p]--BP,3JiӢ>]m\Db7ag1v;qttrcE:ݾ}{K_wmh]Z^ ࠮ܜEbWBiMMm!D?.\v<l/>1%oBeNK|(8$@xt:}3!bۿm4>>~.}%fg( 7Xuj# po rE*gAPFؼoll,plNGti˗!YBHLAe!@9KYeh_ߣ@QɘF`0 C"zu[v)ZY#z~Z8jSwK\.)Y>[,_WqqB7"ߊpsKqU }ҶFiª?T;DBqKTH8$-i\Z.vV{7VBeYB8!ė BOZ{T۲P((QmۧڶqnIAǻ+V9',oNzQtV`ǎ#˿@\\׽@8R"~g x1 Z؇{f.cVM8NI]*8N; ;oq<d2|ƌq$tM[JtRcǎ߫ ᜿M?p:X+g+c)JtN i0k֬JAB{.ԕѕW׷T,Xr-뮻0 L&uo?ccc-gOC#+hM abtkUQDNǃ-D[ tzFj zPT*8O{|`0 ]?hϏ3N(GߎFq뺉u5R)۱p_ ) #[qX|<ŮJte'TۉhS ApP%QJd%D<\.8W[~1vIl(/J=+J"B;lSAfm۶}j\vL0}1=ñfQDىZ _GjrF wp]A&ض}id l:{OBX,N\|>^G9s~Dh<9kƌXvmKc]Fy??,F)WJ@cu2J)B6Y4x7sspURtoll۾szk~E}nh.;8®5r[6|_m& sߞhUVغu9zĩ !FyOT)`q9oC JiVDJ81;לRnJHa_$lL'|WT*D9ϗ|~!D,9se> XbuhѢK,~pڵ?ww}]x>}k}GC8WZE#>E'ts?p}Ʋe˶8 h4^ܸqzۢEQ69驧yރ~u֟ - >44d֭?s|ꩧ68YMI]]$WBȨW\9rΏ뭋kK[z>cV\9 n!dT"kF 4ͳ/ CB>BxmۯV۶j ~|?j6éT˲&`9s>?cƌOBB0;ϟB3f|bppseY:}; oY֡~;[f}}} ,馛zśniҾ׬Y,:t```b[ ڈ֮]ddd$tkn]l )Sb<"駟~m3utض=sժUuOQBHJ&fВ۷?98/lldd[tQ34YYO 8_lX[2("`/wŋVl7YxjUVoݺj[W.Wi.?<لG)_`;(gxWV)҉a۶gR9?f֭p?:!ds*@={ْ̝|>hf?=88T}mZD"hݺu- 6ZjƖ-[6Zv& 8uO&;Ho[>hU8es/$l(˲NJ%u&a/$啌1u|m{%kmذabٲee-˖-.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_first>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:hover,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:active{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:hover,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#eee}.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .ImagePreviewBox,.cke_dialog .FlashPreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:white}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_dialog_footer{filter:""}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/.temp/css/dialog.css0000644000201500020150000002356014002071405025756 0ustar puckpuckinput.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;outline:0;width:100%;*width:95%;height:30px;padding:4px 10px;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eee;border:1px solid #ddd;border-radius:4px}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#333;border-bottom:1px solid #ddd;padding:10px 12px;background:#eee}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:35px;border-top:1px solid #ddd;border-radius:0 0 4px 4px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-radius:0 0 4px 4px;border-top:1px solid #ddd;background:#eee}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:28px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:10px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#555;border:1px solid #ddd;border-radius:3px 3px 0 0;background:#f3f3f3}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ddd;text-decoration:none}a.cke_dialog_tab_selected{background:#fff;color:#333;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_dialog_tabs .cke_dialog_ui_input_select{top:-7px!important}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:9px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox{margin-top:5px}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_first>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:hover,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:active{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:hover,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#eee}.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .ImagePreviewBox,.cke_dialog .FlashPreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:white}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/.temp/css/editor_iequirks.css0000644000201500020150000003240714002071405027721 0ustar puckpuck.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:transparent;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top,.cke_bottom{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_bottom{position:relative}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup *:last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;float:left;border:0;border-radius:2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on{border-width:3px;padding:1px 3px}.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#ddd;margin:4px 2px 0;height:16px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_off a.cke_combo_button:active{border-color:#333}.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/.temp/css/dialog_ie.css0000644000201500020150000002537714002071405026443 0ustar puckpuckinput.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;outline:0;width:100%;*width:95%;height:30px;padding:4px 10px;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eee;border:1px solid #ddd;border-radius:4px}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#333;border-bottom:1px solid #ddd;padding:10px 12px;background:#eee}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:35px;border-top:1px solid #ddd;border-radius:0 0 4px 4px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-radius:0 0 4px 4px;border-top:1px solid #ddd;background:#eee}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:28px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:10px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#555;border:1px solid #ddd;border-radius:3px 3px 0 0;background:#f3f3f3}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ddd;text-decoration:none}a.cke_dialog_tab_selected{background:#fff;color:#333;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_dialog_tabs .cke_dialog_ui_input_select{top:-7px!important}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:9px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox{margin-top:5px}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_first>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:hover,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:active{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:hover,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#eee}.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .ImagePreviewBox,.cke_dialog .FlashPreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:white}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/.temp/css/editor_ie7.css0000644000201500020150000003514614002071405026554 0ustar puckpuck.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:transparent;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top,.cke_bottom{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_bottom{position:relative}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup *:last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;float:left;border:0;border-radius:2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on{border-width:3px;padding:1px 3px}.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#ddd;margin:4px 2px 0;height:16px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_off a.cke_combo_button:active{border-color:#333}.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:26px}.cke_toolgroup,.cke_combo{position:relative}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top;background-color:#c0c0c0}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:5px;height:6px;padding:0;position:absolute;right:8px;top:10px;background-position:0 0}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -24px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/.temp/css/dialog_ie7.css0000644000201500020150000002463514002071405026526 0ustar puckpuckinput.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;outline:0;width:100%;*width:95%;height:30px;padding:4px 10px;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eee;border:1px solid #ddd;border-radius:4px}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#333;border-bottom:1px solid #ddd;padding:10px 12px;background:#eee}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:35px;border-top:1px solid #ddd;border-radius:0 0 4px 4px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-radius:0 0 4px 4px;border-top:1px solid #ddd;background:#eee}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:28px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:10px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#555;border:1px solid #ddd;border-radius:3px 3px 0 0;background:#f3f3f3}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ddd;text-decoration:none}a.cke_dialog_tab_selected{background:#fff;color:#333;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_dialog_tabs .cke_dialog_ui_input_select{top:-7px!important}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:9px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox{margin-top:5px}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_first>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:hover,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:active{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:hover,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#eee}.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .ImagePreviewBox,.cke_dialog .FlashPreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:white}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_dialog_title{zoom:1}.cke_dialog_footer{border-top:1px solid #bfbfbf}.cke_dialog_footer_buttons{position:static}.cke_dialog_footer_buttons a.cke_dialog_ui_button{vertical-align:top}.cke_dialog .cke_resizer_ltr{padding-left:4px}.cke_dialog .cke_resizer_rtl{padding-right:4px}.cke_dialog_ui_input_text,.cke_dialog_ui_input_password,.cke_dialog_ui_input_textarea,.cke_dialog_ui_input_select{padding:0!important}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid transparent!important}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/.temp/css/dialog_ie8.css0000644000201500020150000002403414002071405026520 0ustar puckpuckinput.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;outline:0;width:100%;*width:95%;height:30px;padding:4px 10px;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eee;border:1px solid #ddd;border-radius:4px}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#333;border-bottom:1px solid #ddd;padding:10px 12px;background:#eee}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:35px;border-top:1px solid #ddd;border-radius:0 0 4px 4px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-radius:0 0 4px 4px;border-top:1px solid #ddd;background:#eee}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:28px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:10px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#555;border:1px solid #ddd;border-radius:3px 3px 0 0;background:#f3f3f3}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ddd;text-decoration:none}a.cke_dialog_tab_selected{background:#fff;color:#333;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_dialog_tabs .cke_dialog_ui_input_select{top:-7px!important}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:9px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox{margin-top:5px}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_first>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:hover,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:active{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:hover,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#eee}.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .ImagePreviewBox,.cke_dialog .FlashPreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:white}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{display:block}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/.temp/css/editor.css0000644000201500020150000003117614002071405026007 0ustar puckpuck.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:transparent;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top,.cke_bottom{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_bottom{position:relative}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup *:last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;float:left;border:0;border-radius:2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on{border-width:3px;padding:1px 3px}.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#ddd;margin:4px 2px 0;height:16px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_off a.cke_combo_button:active{border-color:#333}.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/.temp/css/dialog_opera.css0000644000201500020150000002376014002071405027146 0ustar puckpuckinput.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;outline:0;width:100%;*width:95%;height:30px;padding:4px 10px;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eee;border:1px solid #ddd;border-radius:4px}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#333;border-bottom:1px solid #ddd;padding:10px 12px;background:#eee}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:35px;border-top:1px solid #ddd;border-radius:0 0 4px 4px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-radius:0 0 4px 4px;border-top:1px solid #ddd;background:#eee}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:28px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:10px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#555;border:1px solid #ddd;border-radius:3px 3px 0 0;background:#f3f3f3}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ddd;text-decoration:none}a.cke_dialog_tab_selected{background:#fff;color:#333;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_dialog_tabs .cke_dialog_ui_input_select{top:-7px!important}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:9px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox{margin-top:5px}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_first>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:hover,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:hover,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:active{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:hover,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#eee}.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .ImagePreviewBox,.cke_dialog .FlashPreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:white}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_dialog_footer{display:block;height:38px}.cke_ltr .cke_dialog_footer>*{float:right}.cke_rtl .cke_dialog_footer>*{float:left}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/.temp/css/editor_gecko.css0000644000201500020150000003131714002071405027154 0ustar puckpuck.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:transparent;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top,.cke_bottom{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_bottom{position:relative}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup *:last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;float:left;border:0;border-radius:2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on{border-width:3px;padding:1px 3px}.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#ddd;margin:4px 2px 0;height:16px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_off a.cke_combo_button:active{border-color:#333}.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/.temp/css/editor_ie8.css0000644000201500020150000003145514002071405026554 0ustar puckpuck.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:transparent;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top,.cke_bottom{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_bottom{position:relative}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup *:last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;float:left;border:0;border-radius:2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on{border-width:3px;padding:1px 3px}.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#ddd;margin:4px 2px 0;height:16px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_off a.cke_combo_button:active{border-color:#333}.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/.temp/css/editor_ie.css0000644000201500020150000003313714002071405026463 0ustar puckpuck.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:transparent;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top,.cke_bottom{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_bottom{position:relative}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:6px 6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup *:last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;float:left;border:0;border-radius:2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on{border-width:3px;padding:1px 3px}.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#ddd;margin:4px 2px 0;height:16px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{outline:0}.cke_combo_off a.cke_combo_button:active{border-color:#333}.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity=30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity=100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity=30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/editor_ie7.css0000644000201500020150000007016714002071405024743 0ustar puckpuck.cke_reset{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all input[type=password],.cke_reset_all input[type=text],.cke_reset_all textarea{cursor:text}.cke_reset_all input[type=password][disabled],.cke_reset_all input[type=text][disabled],.cke_reset_all textarea[disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:0;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_bottom,.cke_contents,.cke_top{display:block;overflow:hidden}.cke_bottom,.cke_top{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_bottom{position:relative}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:active,.cke_panel_listItem a:focus,.cke_panel_listItem a:hover{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:active,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:hover{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:700;white-space:nowrap;margin:0;padding:6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem p,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:active.cke_colorbox,a:focus.cke_colorbox,a:hover.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:active.cke_colorauto,a:active.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:hover.cke_colorauto,a:hover.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup :first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup :last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;border:0;border-radius:2px}.cke_hc .cke_button{border:1px solid #000;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on,.cke_hc a.cke_button_disabled:active,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:hover{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_disabled:active,a.cke_button_disabled:focus,a.cke_button_disabled:hover,a.cke_button_off:active,a.cke_button_off:focus,a.cke_button_off:hover{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{margin:4px 2px 0;height:16px;width:1px}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:active,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:hover{border:2px solid;padding:0}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.7;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:active .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:hover .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:active .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:hover .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.7}.cke_menuarrow{background-image:url(images/arrow.png);background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:hover{outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_off a.cke_combo_button:active,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_empty,.cke_path_item{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:700;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_empty,.cke_rtl .cke_path_item{float:right}a.cke_path_item:active,a.cke_path_item:focus,a.cke_path_item:hover{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:active,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:hover{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_div,.cke_wysiwyg_frame{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label,legend.cke_voice_label{display:none}.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_empty,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_toolgroup{float:none}.cke_rtl .cke_button,.cke_rtl .cke_button_icon,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_toolgroup{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:26px}.cke_combo,.cke_toolgroup{position:relative}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top;background-color:silver}.cke_toolbox_collapser .cke_arrow{margin-top:0;border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menuarrow,.cke_menubutton_icon,.cke_menubutton_label{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:5px;height:6px;padding:0;position:absolute;right:8px;top:10px;background-position:0 0}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -24px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_password,.cke_rtl input.cke_dialog_ui_input_text{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important}.cke_button__about_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -648px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -672px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -696px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -720px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -744px !important;}.cke_button__removeformat_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -768px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -792px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -816px !important;}.cke_button__specialchar_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -840px !important;}.cke_button__table_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -864px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -888px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -912px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -936px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -960px !important;}.cke_button__pbckcode_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -984px !important;}.cke_button__bgcolor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1008px !important;}.cke_button__textcolor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1032px !important;}.cke_rtl .cke_button__docprops_icon, .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1056px !important;}.cke_ltr .cke_button__docprops_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1080px !important;}.cke_button__emojipanel_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1104px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_button__pbckcode_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__docprops_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__emojipanel_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1104px !important;background-size: 16px !important;}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/images/0000755000201500020150000000000014005022167023435 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/images/arrow.png0000644000201500020150000000040514002071405025270 0ustar puckpuckPNG  IHDRIobKGD pHYs  tIME  9satIDAT(!PDIT&u=wkHUlߟ*q;MvfR"0=1xϋPw+!#rf2w\}[7~&%$% Jj["HSuG݀wkMޭ IENDB`rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/images/hidpi/0000755000201500020150000000000014005022167024532 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/images/hidpi/close.png0000644000201500020150000000076214002071405026346 0ustar puckpuckPNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time2/25/14ݘeitEXtSoftwareAdobe Fireworks CS6輲KIDATXQ0.\B: pkОL)!% EEZO5ߪ6/lT^lIENDB`rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/images/hidpi/lock.png0000644000201500020150000000107314002071405026165 0ustar puckpuckPNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time2/25/14ݘeitEXtSoftwareAdobe Fireworks CS6輲IDATX햱JAEYHU`%E`@v`e!V~@~OlvZcM&& Ko{6 MSʄ*U} 츊AdnZ-Ԥ<Ƙ=9p-fZ@585>rեV$g$I~l 0PJ]$QD-$Imhhg%>k)tڟ lE7HVExSs&ށm:p7ր20 p."[NH xm9F= qb;<x[s0 #c!_Nʀ DdKSR>Kr`yǕRS Pia aPʩOm4 I4slNմ-$  r= 0@j\K GZ%@˱60!c/fϼk{)@ \و$eLC1/XEbd3P>"yfZIENDB`rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/images/hidpi/refresh.png0000644000201500020150000000154314002071405026675 0ustar puckpuckPNG  IHDR szzsBIT|d pHYs  ~tEXtCreation Time2/25/14ݘeitEXtSoftwareAdobe Fireworks CS6輲IDATXŗOHQUB$ZQ.B?AE=ZFA"-r"MjH*E,EF-Iy{V|}s{Τ&&&NKO+;03 RIZNB~ &ྤI7#gBeIENDB`rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/images/lock-open.png0000644000201500020150000000062214002071405026026 0ustar puckpuckPNG  IHDRasBIT|d pHYs  ZtEXtCreation Time2/25/14ݘeitEXtSoftwareAdobe Fireworks CS6輲IDAT8ҭNCAo) Ă(+ TUO5!8<@bz1Ms/I6;{̤mtRJ3;".9ADC/UU-͠o\R>[DtpF;<مXT.qsj3t1sW[zM:s0^vJ}#A)Mq"B6fkgpLyh&%=xy6IENDB`rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/images/refresh.png0000644000201500020150000000102414002071405025572 0ustar puckpuckPNG  IHDRasBIT|d pHYs  ZtEXtCreation Time2/25/14ݘeitEXtSoftwareAdobe Fireworks CS6輲mIDAT8ӻkVAߕ|4h#66 Z(B-RYha#)D c V[Q|!(+77paݙ9sVM4%1> y*<}X0a:"*Aʯ>.aoL] kDFbZ;¦m 0?E.cke_dialog_ui_html,.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_ui_hbox_first{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_file,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_textarea{border:1px solid}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:active,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:hover{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:active,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:hover{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:active,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:hover{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:active span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:hover span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:hover{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background,.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_locked,.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .FlashPreviewBox,.cke_dialog .ImagePreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:#fff}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:#fff;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:700}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:active,a.cke_smile:focus,a.cke_smile:hover,a.cke_specialchar:active,a.cke_specialchar:focus,a.cke_specialchar:hover{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:active,a.cke_smile:focus,a.cke_specialchar:active,a.cke_specialchar:focus{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_btn_over,.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_dialog_title{zoom:1}.cke_dialog_footer{border-top:1px solid #bfbfbf}.cke_dialog_footer_buttons{position:static}.cke_dialog_footer_buttons a.cke_dialog_ui_button{vertical-align:top}.cke_dialog .cke_resizer_ltr{padding-left:4px}.cke_dialog .cke_resizer_rtl{padding-right:4px}.cke_dialog_ui_input_password,.cke_dialog_ui_input_select,.cke_dialog_ui_input_text,.cke_dialog_ui_input_textarea{padding:0!important}.cke_btn_locked,.cke_btn_reset,.cke_btn_unlocked,.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input{border:1px solid transparent!important}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/dialog_ie8.css0000644000201500020150000002375614002071405024717 0ustar puckpuckinput.cke_dialog_ui_input_password,input.cke_dialog_ui_input_text,textarea.cke_dialog_ui_input_textarea{background-color:#fff;outline:0;width:100%;*width:95%;height:30px;padding:4px 10px;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_text:focus,textarea.cke_dialog_ui_input_textarea:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eee;border:1px solid #ddd;border-radius:4px}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:700}.cke_dialog_title{font-weight:700;font-size:13px;cursor:move;position:relative;color:#333;border-bottom:1px solid #ddd;padding:10px 12px;background:#eee}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px;margin-top:35px;border-top:1px solid #ddd;border-radius:0 0 4px 4px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-radius:0 0 4px 4px;border-top:1px solid #ddd;background:#eee}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:28px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:10px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#555;border:1px solid #ddd;border-radius:3px 3px 0 0;background:#f3f3f3}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ddd;text-decoration:none}a.cke_dialog_tab_selected{background:#fff;color:#333;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_dialog_tabs .cke_dialog_ui_input_select{top:-7px!important}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:9px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:700;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_hbox table,.cke_dialog_ui_vbox table{margin:auto}.cke_dialog_ui_vbox{margin-top:5px}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_dialog_ui_hbox_first>.cke_dialog_ui_html,.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_ui_hbox_first{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_file,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_textarea{border:1px solid}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:active,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:hover{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:active,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:hover{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:active,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:hover{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:active span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:hover span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:hover{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background,.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_locked,.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .FlashPreviewBox,.cke_dialog .ImagePreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:#fff}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:#fff;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:700}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:active,a.cke_smile:focus,a.cke_smile:hover,a.cke_specialchar:active,a.cke_specialchar:focus,a.cke_specialchar:hover{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:active,a.cke_smile:focus,a.cke_specialchar:active,a.cke_specialchar:focus{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_btn_over,.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}a.cke_dialog_ui_button_cancel:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_ok:focus span{display:block}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/editor.css0000644000201500020150000014100114002071405024161 0ustar puckpuck.cke_reset{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all input[type=password],.cke_reset_all input[type=text],.cke_reset_all textarea{cursor:text}.cke_reset_all input[type=password][disabled],.cke_reset_all input[type=text][disabled],.cke_reset_all textarea[disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:0;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_bottom,.cke_contents,.cke_top{display:block;overflow:hidden}.cke_bottom,.cke_top{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_bottom{position:relative}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:active,.cke_panel_listItem a:focus,.cke_panel_listItem a:hover{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:active,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:hover{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:700;white-space:nowrap;margin:0;padding:6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem p,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:active.cke_colorbox,a:focus.cke_colorbox,a:hover.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:active.cke_colorauto,a:active.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:hover.cke_colorauto,a:hover.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup :first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup :last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;float:left;border:0;border-radius:2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid #000;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on,.cke_hc a.cke_button_disabled:active,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:hover{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_disabled:active,a.cke_button_disabled:focus,a.cke_button_disabled:hover,a.cke_button_off:active,a.cke_button_off:focus,a.cke_button_off:hover{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#ddd;margin:4px 2px 0;height:16px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:active,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:hover{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menuarrow,.cke_menubutton_icon,.cke_menubutton_label{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.7;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:active .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:hover .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:active .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:hover .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.7}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:hover{outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_off a.cke_combo_button:active,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_empty,.cke_path_item{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:700;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_empty,.cke_rtl .cke_path_item{float:right}a.cke_path_item:active,a.cke_path_item:focus,a.cke_path_item:hover{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:active,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:hover{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_div,.cke_wysiwyg_frame{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label,legend.cke_voice_label{display:none}.cke_button__about_icon{background:url(icons.png) no-repeat 0 -0px!important}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -24px!important}.cke_ltr .cke_button__anchor_icon{background:url(icons.png) no-repeat 0 -48px!important}.cke_button__bgcolor_icon{background:url(icons.png) no-repeat 0 -72px!important}.cke_button__bidiltr_icon{background:url(icons.png) no-repeat 0 -96px!important}.cke_button__bidirtl_icon{background:url(icons.png) no-repeat 0 -120px!important}.cke_button__blockquote_icon{background:url(icons.png) no-repeat 0 -144px!important}.cke_button__bold_icon{background:url(icons.png) no-repeat 0 -168px!important}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -192px!important}.cke_ltr .cke_button__bulletedlist_icon{background:url(icons.png) no-repeat 0 -216px!important}.cke_button__button_icon{background:url(icons.png) no-repeat 0 -240px!important}.cke_button__checkbox_icon{background:url(icons.png) no-repeat 0 -264px!important}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -288px!important}.cke_ltr .cke_button__copy_icon{background:url(icons.png) no-repeat 0 -312px!important}.cke_button__creatediv_icon{background:url(icons.png) no-repeat 0 -336px!important}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -360px!important}.cke_ltr .cke_button__cut_icon{background:url(icons.png) no-repeat 0 -384px!important}.cke_button__find_icon{background:url(icons.png) no-repeat 0 -408px!important}.cke_button__flash_icon{background:url(icons.png) no-repeat 0 -432px!important}.cke_button__form_icon{background:url(icons.png) no-repeat 0 -456px!important}.cke_rtl .cke_button__hiddenfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -480px!important}.cke_ltr .cke_button__hiddenfield_icon{background:url(icons.png) no-repeat 0 -504px!important}.cke_button__horizontalrule_icon{background:url(icons.png) no-repeat 0 -528px!important}.cke_button__iframe_icon{background:url(icons.png) no-repeat 0 -552px!important}.cke_button__image_icon{background:url(icons.png) no-repeat 0 -576px!important}.cke_button__imagebutton_icon{background:url(icons.png) no-repeat 0 -600px!important}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -624px!important}.cke_ltr .cke_button__indent_icon{background:url(icons.png) no-repeat 0 -648px!important}.cke_button__italic_icon{background:url(icons.png) no-repeat 0 -672px!important}.cke_button__justifyblock_icon{background:url(icons.png) no-repeat 0 -696px!important}.cke_button__justifycenter_icon{background:url(icons.png) no-repeat 0 -720px!important}.cke_button__justifyleft_icon{background:url(icons.png) no-repeat 0 -744px!important}.cke_button__justifyright_icon{background:url(icons.png) no-repeat 0 -768px!important}.cke_button__link_icon{background:url(icons.png) no-repeat 0 -792px!important}.cke_button__maximize_icon{background:url(icons.png) no-repeat 0 -816px!important}.cke_rtl .cke_button__newpage_icon,.cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -840px!important}.cke_ltr .cke_button__newpage_icon{background:url(icons.png) no-repeat 0 -864px!important}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -888px!important}.cke_ltr .cke_button__numberedlist_icon{background:url(icons.png) no-repeat 0 -912px!important}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -936px!important}.cke_ltr .cke_button__outdent_icon{background:url(icons.png) no-repeat 0 -960px!important}.cke_rtl .cke_button__pagebreak_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -984px!important}.cke_ltr .cke_button__pagebreak_icon{background:url(icons.png) no-repeat 0 -1008px!important}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1032px!important}.cke_ltr .cke_button__paste_icon{background:url(icons.png) no-repeat 0 -1056px!important}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1080px!important}.cke_ltr .cke_button__pastefromword_icon{background:url(icons.png) no-repeat 0 -1104px!important}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1128px!important}.cke_ltr .cke_button__pastetext_icon{background:url(icons.png) no-repeat 0 -1152px!important}.cke_rtl .cke_button__preview_icon,.cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1176px!important}.cke_ltr .cke_button__preview_icon{background:url(icons.png) no-repeat 0 -1200px!important}.cke_button__print_icon{background:url(icons.png) no-repeat 0 -1224px!important}.cke_button__radio_icon{background:url(icons.png) no-repeat 0 -1248px!important}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1272px!important}.cke_ltr .cke_button__redo_icon{background:url(icons.png) no-repeat 0 -1296px!important}.cke_button__removeformat_icon{background:url(icons.png) no-repeat 0 -1320px!important}.cke_button__replace_icon{background:url(icons.png) no-repeat 0 -1344px!important}.cke_button__save_icon{background:url(icons.png) no-repeat 0 -1368px!important}.cke_button__scayt_icon{background:url(icons.png) no-repeat 0 -1392px!important}.cke_rtl .cke_button__select_icon,.cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1416px!important}.cke_ltr .cke_button__select_icon{background:url(icons.png) no-repeat 0 -1440px!important}.cke_button__selectall_icon{background:url(icons.png) no-repeat 0 -1464px!important}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1488px!important}.cke_ltr .cke_button__showblocks_icon{background:url(icons.png) no-repeat 0 -1512px!important}.cke_button__smiley_icon{background:url(icons.png) no-repeat 0 -1536px!important}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1560px!important}.cke_ltr .cke_button__source_icon{background:url(icons.png) no-repeat 0 -1584px!important}.cke_button__specialchar_icon{background:url(icons.png) no-repeat 0 -1608px!important}.cke_button__spellchecker_icon{background:url(icons.png) no-repeat 0 -1632px!important}.cke_button__strike_icon{background:url(icons.png) no-repeat 0 -1656px!important}.cke_button__subscript_icon{background:url(icons.png) no-repeat 0 -1680px!important}.cke_button__superscript_icon{background:url(icons.png) no-repeat 0 -1704px!important}.cke_button__table_icon{background:url(icons.png) no-repeat 0 -1728px!important}.cke_rtl .cke_button__templates_icon,.cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1752px!important}.cke_ltr .cke_button__templates_icon{background:url(icons.png) no-repeat 0 -1776px!important}.cke_rtl .cke_button__textarea_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1800px!important}.cke_ltr .cke_button__textarea_icon{background:url(icons.png) no-repeat 0 -1824px!important}.cke_button__textcolor_icon{background:url(icons.png) no-repeat 0 -1848px!important}.cke_rtl .cke_button__textfield_icon,.cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1872px!important}.cke_ltr .cke_button__textfield_icon{background:url(icons.png) no-repeat 0 -1896px!important}.cke_button__underline_icon{background:url(icons.png) no-repeat 0 -1920px!important}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -1944px!important}.cke_ltr .cke_button__undo_icon{background:url(icons.png) no-repeat 0 -1968px!important}.cke_button__unlink_icon{background:url(icons.png) no-repeat 0 -1992px!important}.cke_hidpi .cke_button__about_icon{background:url(icons_hidpi.png) no-repeat 0 -0px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__anchor_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -24px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon{background:url(icons_hidpi.png) no-repeat 0 -48px!important;background-size:16px!important}.cke_hidpi .cke_button__bgcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -72px!important;background-size:16px!important}.cke_hidpi .cke_button__bidiltr_icon{background:url(icons_hidpi.png) no-repeat 0 -96px!important;background-size:16px!important}.cke_hidpi .cke_button__bidirtl_icon{background:url(icons_hidpi.png) no-repeat 0 -120px!important;background-size:16px!important}.cke_hidpi .cke_button__blockquote_icon{background:url(icons_hidpi.png) no-repeat 0 -144px!important;background-size:16px!important}.cke_hidpi .cke_button__bold_icon{background:url(icons_hidpi.png) no-repeat 0 -168px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -192px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -216px!important;background-size:16px!important}.cke_hidpi .cke_button__button_icon{background:url(icons_hidpi.png) no-repeat 0 -240px!important;background-size:16px!important}.cke_hidpi .cke_button__checkbox_icon{background:url(icons_hidpi.png) no-repeat 0 -264px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__copy_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -288px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon{background:url(icons_hidpi.png) no-repeat 0 -312px!important;background-size:16px!important}.cke_hidpi .cke_button__creatediv_icon{background:url(icons_hidpi.png) no-repeat 0 -336px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__cut_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -360px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon{background:url(icons_hidpi.png) no-repeat 0 -384px!important;background-size:16px!important}.cke_hidpi .cke_button__find_icon{background:url(icons_hidpi.png) no-repeat 0 -408px!important;background-size:16px!important}.cke_hidpi .cke_button__flash_icon{background:url(icons_hidpi.png) no-repeat 0 -432px!important;background-size:16px!important}.cke_hidpi .cke_button__form_icon{background:url(icons_hidpi.png) no-repeat 0 -456px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__hiddenfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -480px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__hiddenfield_icon,.cke_ltr.cke_hidpi .cke_button__hiddenfield_icon{background:url(icons_hidpi.png) no-repeat 0 -504px!important;background-size:16px!important}.cke_hidpi .cke_button__horizontalrule_icon{background:url(icons_hidpi.png) no-repeat 0 -528px!important;background-size:16px!important}.cke_hidpi .cke_button__iframe_icon{background:url(icons_hidpi.png) no-repeat 0 -552px!important;background-size:16px!important}.cke_hidpi .cke_button__image_icon{background:url(icons_hidpi.png) no-repeat 0 -576px!important;background-size:16px!important}.cke_hidpi .cke_button__imagebutton_icon{background:url(icons_hidpi.png) no-repeat 0 -600px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__indent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -624px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon{background:url(icons_hidpi.png) no-repeat 0 -648px!important;background-size:16px!important}.cke_hidpi .cke_button__italic_icon{background:url(icons_hidpi.png) no-repeat 0 -672px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyblock_icon{background:url(icons_hidpi.png) no-repeat 0 -696px!important;background-size:16px!important}.cke_hidpi .cke_button__justifycenter_icon{background:url(icons_hidpi.png) no-repeat 0 -720px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyleft_icon{background:url(icons_hidpi.png) no-repeat 0 -744px!important;background-size:16px!important}.cke_hidpi .cke_button__justifyright_icon{background:url(icons_hidpi.png) no-repeat 0 -768px!important;background-size:16px!important}.cke_hidpi .cke_button__link_icon{background:url(icons_hidpi.png) no-repeat 0 -792px!important;background-size:16px!important}.cke_hidpi .cke_button__maximize_icon{background:url(icons_hidpi.png) no-repeat 0 -816px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__newpage_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -840px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon{background:url(icons_hidpi.png) no-repeat 0 -864px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -888px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon{background:url(icons_hidpi.png) no-repeat 0 -912px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__outdent_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -936px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon{background:url(icons_hidpi.png) no-repeat 0 -960px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -984px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon{background:url(icons_hidpi.png) no-repeat 0 -1008px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__paste_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -1032px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon{background:url(icons_hidpi.png) no-repeat 0 -1056px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1080px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon{background:url(icons_hidpi.png) no-repeat 0 -1104px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__pastetext_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1128px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon{background:url(icons_hidpi.png) no-repeat 0 -1152px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__preview_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1176px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon{background:url(icons_hidpi.png) no-repeat 0 -1200px!important;background-size:16px!important}.cke_hidpi .cke_button__print_icon{background:url(icons_hidpi.png) no-repeat 0 -1224px!important;background-size:16px!important}.cke_hidpi .cke_button__radio_icon{background:url(icons_hidpi.png) no-repeat 0 -1248px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__redo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -1272px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon{background:url(icons_hidpi.png) no-repeat 0 -1296px!important;background-size:16px!important}.cke_hidpi .cke_button__removeformat_icon{background:url(icons_hidpi.png) no-repeat 0 -1320px!important;background-size:16px!important}.cke_hidpi .cke_button__replace_icon{background:url(icons_hidpi.png) no-repeat 0 -1344px!important;background-size:16px!important}.cke_hidpi .cke_button__save_icon{background:url(icons_hidpi.png) no-repeat 0 -1368px!important;background-size:16px!important}.cke_hidpi .cke_button__scayt_icon{background:url(icons_hidpi.png) no-repeat 0 -1392px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__select_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -1416px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon{background:url(icons_hidpi.png) no-repeat 0 -1440px!important;background-size:16px!important}.cke_hidpi .cke_button__selectall_icon{background:url(icons_hidpi.png) no-repeat 0 -1464px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__showblocks_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1488px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon{background:url(icons_hidpi.png) no-repeat 0 -1512px!important;background-size:16px!important}.cke_hidpi .cke_button__smiley_icon{background:url(icons_hidpi.png) no-repeat 0 -1536px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__source_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1560px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon{background:url(icons_hidpi.png) no-repeat 0 -1584px!important;background-size:16px!important}.cke_hidpi .cke_button__specialchar_icon{background:url(icons_hidpi.png) no-repeat 0 -1608px!important;background-size:16px!important}.cke_hidpi .cke_button__spellchecker_icon{background:url(icons_hidpi.png) no-repeat 0 -1632px!important;background-size:16px!important}.cke_hidpi .cke_button__strike_icon{background:url(icons_hidpi.png) no-repeat 0 -1656px!important;background-size:16px!important}.cke_hidpi .cke_button__subscript_icon{background:url(icons_hidpi.png) no-repeat 0 -1680px!important;background-size:16px!important}.cke_hidpi .cke_button__superscript_icon{background:url(icons_hidpi.png) no-repeat 0 -1704px!important;background-size:16px!important}.cke_hidpi .cke_button__table_icon{background:url(icons_hidpi.png) no-repeat 0 -1728px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__templates_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -1752px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon{background:url(icons_hidpi.png) no-repeat 0 -1776px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textarea_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -1800px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon{background:url(icons_hidpi.png) no-repeat 0 -1824px!important;background-size:16px!important}.cke_hidpi .cke_button__textcolor_icon{background:url(icons_hidpi.png) no-repeat 0 -1848px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__textfield_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -1872px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon{background:url(icons_hidpi.png) no-repeat 0 -1896px!important;background-size:16px!important}.cke_hidpi .cke_button__underline_icon{background:url(icons_hidpi.png) no-repeat 0 -1920px!important;background-size:16px!important}.cke_rtl.cke_hidpi .cke_button__undo_icon,.cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -1944px!important;background-size:16px!important}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon{background:url(icons_hidpi.png) no-repeat 0 -1968px!important;background-size:16px!important}.cke_hidpi .cke_button__unlink_icon{background:url(icons_hidpi.png) no-repeat 0 -1992px!important;background-size:16px!important}.cke_button__about_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -648px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -672px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -696px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -720px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -744px !important;}.cke_button__removeformat_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -768px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -792px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -816px !important;}.cke_button__specialchar_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -840px !important;}.cke_button__table_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -864px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -888px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -912px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -936px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -960px !important;}.cke_button__pbckcode_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -984px !important;}.cke_button__bgcolor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1008px !important;}.cke_button__textcolor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1032px !important;}.cke_rtl .cke_button__docprops_icon, .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1056px !important;}.cke_ltr .cke_button__docprops_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1080px !important;}.cke_button__emojipanel_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1104px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_button__pbckcode_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__docprops_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__emojipanel_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1104px !important;background-size: 16px !important;}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/dialog_opera.css0000644000201500020150000002370214002071405025327 0ustar puckpuckinput.cke_dialog_ui_input_password,input.cke_dialog_ui_input_text,textarea.cke_dialog_ui_input_textarea{background-color:#fff;outline:0;width:100%;*width:95%;height:30px;padding:4px 10px;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}input.cke_dialog_ui_input_password:focus,input.cke_dialog_ui_input_text:focus,textarea.cke_dialog_ui_input_textarea:focus{border-color:#66afe9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eee;border:1px solid #ddd;border-radius:4px}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:700}.cke_dialog_title{font-weight:700;font-size:13px;cursor:move;position:relative;color:#333;border-bottom:1px solid #ddd;padding:10px 12px;background:#eee}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px;margin-top:35px;border-top:1px solid #ddd;border-radius:0 0 4px 4px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border-radius:0 0 4px 4px;border-top:1px solid #ddd;background:#eee}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:28px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:10px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#555;border:1px solid #ddd;border-radius:3px 3px 0 0;background:#f3f3f3}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ddd;text-decoration:none}a.cke_dialog_tab_selected{background:#fff;color:#333;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#fff}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_dialog_tabs .cke_dialog_ui_input_select{top:-7px!important}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:9px;z-index:5}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:700;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_hbox table,.cke_dialog_ui_vbox table{margin:auto}.cke_dialog_ui_vbox{margin-top:5px}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_dialog_ui_hbox_first>.cke_dialog_ui_html,.cke_dialog_ui_hbox_first>.cke_dialog_ui_labeled_label,.cke_dialog_ui_hbox_last>.cke_dialog_ui_html,.cke_dialog_ui_hbox_last>.cke_dialog_ui_labeled_label{line-height:30px}.cke_ltr .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_ui_hbox_first{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_file,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_textarea{border:1px solid}.cke_dialog_ui_text{margin-bottom:7px}.cke_dialog_ui_select{height:auto!important;margin-bottom:7px}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #ddd;border-radius:4px;background:#fff}a.cke_dialog_ui_button:active,a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:hover{border-color:#aaa;background-color:#eee;text-decoration:none}.cke_dialog_page_contents a.cke_dialog_ui_button{height:22px;line-height:22px;background-color:#f4f4f4}.cke_dialog_page_contents a.cke_dialog_ui_button:active,.cke_dialog_page_contents a.cke_dialog_ui_button:focus,.cke_dialog_page_contents a.cke_dialog_ui_button:hover{background-color:#eee}span.cke_dialog_ui_button{padding:0 12px}.cke_hc a.cke_dialog_ui_button:active,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:hover{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:active span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:hover span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;border-color:#2274c9;background:#3f8edf}a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:hover{border-color:#1e68b4;background:#2981db}a.cke_dialog_ui_button_cancel{background-color:#fff}a.cke_dialog_ui_button_cancel:focus{outline:0}span.cke_dialog_ui_button{cursor:pointer}.cke_dialog_footer_buttons{display:inline-table;margin:10px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:30px;line-height:30px;background-color:#fff;padding:4px 10px;border:1px solid #ddd;outline:0;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.cke_dialog_ui_input_file{width:100%;height:30px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background,.cke_dialog .cke_light_background{background-color:#eee}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_hidpi .cke_dialog a.cke_btn_locked,.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog .FlashPreviewBox,.cke_dialog .ImagePreviewBox{border:1px solid #aaa;border-radius:4px;padding:6px 10px;margin-top:5px;background-color:#fff}.cke_dialog .ImagePreviewBox{overflow:scroll;height:205px;width:300px}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .FlashPreviewBox{white-space:normal;overflow:auto;height:160px;width:390px}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity=90);background-color:#e4e4e4}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:#fff;border:1px solid #aeb3b9;border-radius:4px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline-block;margin-bottom:3px;cursor:default}.cke_dialog_body label.cke_required{font-weight:700}.cke_dialog_ui_html{line-height:150%}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{background-color:#eee;border:1px solid transparent;vertical-align:top}a.cke_smile:active,a.cke_smile:focus,a.cke_smile:hover,a.cke_specialchar:active,a.cke_specialchar:focus,a.cke_specialchar:hover{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#aaa}a.cke_smile:active,a.cke_smile:focus,a.cke_specialchar:active,a.cke_specialchar:focus{border-color:#428bca}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox{display:inline-block;margin-bottom:5px}.cke_btn_over,.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity=0);width:100%;height:100%}.cke_dialog_footer{display:block;height:38px}.cke_ltr .cke_dialog_footer>*{float:right}.cke_rtl .cke_dialog_footer>*{float:left}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/editor_gecko.css0000644000201500020150000006530314002071405025343 0ustar puckpuck.cke_reset{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all input[type=password],.cke_reset_all input[type=text],.cke_reset_all textarea{cursor:text}.cke_reset_all input[type=password][disabled],.cke_reset_all input[type=text][disabled],.cke_reset_all textarea[disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:0;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_bottom,.cke_contents,.cke_top{display:block;overflow:hidden}.cke_bottom,.cke_top{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_bottom{position:relative}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:active,.cke_panel_listItem a:focus,.cke_panel_listItem a:hover{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:active,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:hover{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:700;white-space:nowrap;margin:0;padding:6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem p,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:active.cke_colorbox,a:focus.cke_colorbox,a:hover.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:active.cke_colorauto,a:active.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:hover.cke_colorauto,a:hover.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup :first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup :last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;float:left;border:0;border-radius:2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid #000;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on,.cke_hc a.cke_button_disabled:active,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:hover{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_disabled:active,a.cke_button_disabled:focus,a.cke_button_disabled:hover,a.cke_button_off:active,a.cke_button_off:focus,a.cke_button_off:hover{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#ddd;margin:4px 2px 0;height:16px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:active,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:hover{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menuarrow,.cke_menubutton_icon,.cke_menubutton_label{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.7;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:active .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:hover .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:active .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:hover .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.7}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:hover{outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_off a.cke_combo_button:active,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_empty,.cke_path_item{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:700;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_empty,.cke_rtl .cke_path_item{float:right}a.cke_path_item:active,a.cke_path_item:focus,a.cke_path_item:hover{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:active,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:hover{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_div,.cke_wysiwyg_frame{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label,legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -648px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -672px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -696px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -720px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -744px !important;}.cke_button__removeformat_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -768px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -792px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -816px !important;}.cke_button__specialchar_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -840px !important;}.cke_button__table_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -864px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -888px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -912px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -936px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -960px !important;}.cke_button__pbckcode_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -984px !important;}.cke_button__bgcolor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1008px !important;}.cke_button__textcolor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1032px !important;}.cke_rtl .cke_button__docprops_icon, .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1056px !important;}.cke_ltr .cke_button__docprops_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1080px !important;}.cke_button__emojipanel_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1104px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_button__pbckcode_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__docprops_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__emojipanel_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1104px !important;background-size: 16px !important;}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/editor_ie8.css0000644000201500020150000006542214002071405024742 0ustar puckpuck.cke_reset{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all input[type=password],.cke_reset_all input[type=text],.cke_reset_all textarea{cursor:text}.cke_reset_all input[type=password][disabled],.cke_reset_all input[type=text][disabled],.cke_reset_all textarea[disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:0;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_bottom,.cke_contents,.cke_top{display:block;overflow:hidden}.cke_bottom,.cke_top{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_bottom{position:relative}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:active,.cke_panel_listItem a:focus,.cke_panel_listItem a:hover{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:active,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:hover{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:700;white-space:nowrap;margin:0;padding:6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem p,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:active.cke_colorbox,a:focus.cke_colorbox,a:hover.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:active.cke_colorauto,a:active.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:hover.cke_colorauto,a:hover.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup :first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup :last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;float:left;border:0;border-radius:2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid #000;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on,.cke_hc a.cke_button_disabled:active,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:hover{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_disabled:active,a.cke_button_disabled:focus,a.cke_button_disabled:hover,a.cke_button_off:active,a.cke_button_off:focus,a.cke_button_off:hover{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#ddd;margin:4px 2px 0;height:16px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:active,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:hover{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menuarrow,.cke_menubutton_icon,.cke_menubutton_label{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.7;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:active .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:hover .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:active .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:hover .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.7}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:hover{outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_off a.cke_combo_button:active,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_empty,.cke_path_item{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:700;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_empty,.cke_rtl .cke_path_item{float:right}a.cke_path_item:active,a.cke_path_item:focus,a.cke_path_item:hover{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:active,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:hover{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_div,.cke_wysiwyg_frame{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label,legend.cke_voice_label{display:none}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_button__about_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -648px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -672px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -696px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -720px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -744px !important;}.cke_button__removeformat_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -768px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -792px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -816px !important;}.cke_button__specialchar_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -840px !important;}.cke_button__table_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -864px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -888px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -912px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -936px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -960px !important;}.cke_button__pbckcode_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -984px !important;}.cke_button__bgcolor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1008px !important;}.cke_button__textcolor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1032px !important;}.cke_rtl .cke_button__docprops_icon, .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1056px !important;}.cke_ltr .cke_button__docprops_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1080px !important;}.cke_button__emojipanel_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1104px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_button__pbckcode_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__docprops_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__emojipanel_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1104px !important;background-size: 16px !important;}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/editor_ie.css0000644000201500020150000006701714002071405024654 0ustar puckpuck.cke_reset{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:0;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#333;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all input[type=password],.cke_reset_all input[type=text],.cke_reset_all textarea{cursor:text}.cke_reset_all input[type=password][disabled],.cke_reset_all input[type=text][disabled],.cke_reset_all textarea[disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;margin-top:10px;border:1px solid #ddd}.cke_reset_all fieldset legend{padding:0 5px}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #ddd;border-radius:4px;padding:0 3px;background:#eee}.cke_inner{display:block;-webkit-touch-callout:none;background:0;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_float .cke_top{border:1px solid #ddd}.cke_bottom,.cke_contents,.cke_top{display:block;overflow:hidden}.cke_bottom,.cke_top{padding:3px 0 0;background:#eee}.cke_top{white-space:normal}.cke_contents{background-color:#fff;border:1px solid #ddd;border-radius:4px}.cke_bottom{position:relative}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #555 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #aaa;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;margin-top:5px;background-color:#fff;border:1px solid #aaa;border-radius:4px}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:178px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;border-radius:2px}.cke_panel_listItem a:active,.cke_panel_listItem a:focus,.cke_panel_listItem a:hover{background-color:#e1edf7}* html .cke_panel_listItem a{width:100%;color:#000}:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{background-color:#92bce0;outline:0}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:active,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:hover{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:700;white-space:nowrap;margin:0;padding:6px;color:#474747;border-bottom:1px solid #aaa;background:#eee}.cke_panel_grouptitle:first-child{border-radius:4px 4px 0 0}.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem p,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:1px solid #aaa;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:1px solid #fff;padding:2px;float:left;width:12px;height:12px;border-radius:2px}.cke_rtl a.cke_colorbox{float:right}a:active.cke_colorbox,a:focus.cke_colorbox,a:hover.cke_colorbox{border:1px solid #ddd;background-color:#eee}a.cke_colorauto,a.cke_colormore{border:1px solid #fff;padding:2px;display:block;cursor:pointer}a:active.cke_colorauto,a:active.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:hover.cke_colorauto,a:hover.cke_colormore{border:1px solid #ddd;background-color:#eee}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 3px 0;padding:2px;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup :first-child{border-radius:0 4px 4px 0}.cke_rtl .cke_toolgroup :last-child{border-radius:4px 0 0 4px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:2px 4px;outline:0;cursor:default;float:left;border:0;border-radius:2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid #000;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{background:#92bce0}.cke_hc .cke_button_on,.cke_hc a.cke_button_disabled:active,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:hover{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_disabled:active,a.cke_button_disabled:focus,a.cke_button_disabled:hover,a.cke_button_off:active,a.cke_button_off:focus,a.cke_button_off:hover{background:#e1edf7}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:18px;vertical-align:middle;float:left;cursor:default;color:#555}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#ddd;margin:4px 2px 0;height:16px;width:1px}.cke_rtl .cke_toolbar_separator{float:right}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border-radius:4px;background:#e4e4e4}.cke_toolbox_collapser:hover{background:#ccc}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_rtl .cke_toolbox_collapser{float:left}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_button_icon{opacity:.8}.cke_menuitem span{cursor:default}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:active,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:hover{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menuarrow,.cke_menubutton_icon,.cke_menubutton_label{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.7;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:active .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:hover .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:active .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:hover .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:active,.cke_menubutton:focus,.cke_menubutton:hover{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.7}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_menuarrow span{display:none}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #ddd;border-radius:4px;background:#fff}.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:hover{outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border-color:#333}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_off a.cke_combo_button:active,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_on a.cke_combo_button{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #333}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_empty,.cke_path_item{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;font-weight:700;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_empty,.cke_rtl .cke_path_item{float:right}a.cke_path_item:active,a.cke_path_item:focus,a.cke_path_item:hover{background-color:#bfbfbf;color:#333;border-radius:2px}.cke_hc a.cke_path_item:active,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:hover{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_div,.cke_wysiwyg_frame{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label,legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:active,a.cke_button_disabled:focus,a.cke_button_disabled:hover{filter:alpha(opacity=30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:active,.cke_button_off:focus,.cke_button_off:hover{filter:alpha(opacity=100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity=30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_bottom,.cke_hc .cke_button_on,.cke_hc .cke_combo_button,.cke_hc .cke_panel_grouptitle,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_toolgroup,.cke_hc .cke_top,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_combo_button:focus,.cke_hc a.cke_combo_button:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_button__about_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -144px !important;}.cke_button__blockquote_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -168px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -192px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -216px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -240px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -264px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -288px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -312px !important;}.cke_button__horizontalrule_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -336px !important;}.cke_button__image_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -360px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -384px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -408px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -432px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -456px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -480px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -504px !important;}.cke_button__link_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -528px !important;}.cke_button__unlink_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -552px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -576px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -600px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -624px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -648px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -672px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -696px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -720px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -744px !important;}.cke_button__removeformat_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -768px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -792px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -816px !important;}.cke_button__specialchar_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -840px !important;}.cke_button__table_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -864px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -888px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -912px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -936px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -960px !important;}.cke_button__pbckcode_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -984px !important;}.cke_button__bgcolor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1008px !important;}.cke_button__textcolor_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1032px !important;}.cke_rtl .cke_button__docprops_icon, .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1056px !important;}.cke_ltr .cke_button__docprops_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1080px !important;}.cke_button__emojipanel_icon {background: url(icons.png?t=83e9de8d6b) no-repeat 0 -1104px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_button__pbckcode_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__docprops_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__docprops_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__docprops_icon,.cke_ltr.cke_hidpi .cke_button__docprops_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__emojipanel_icon {background: url(icons_hidpi.png?t=83e9de8d6b) no-repeat 0 -1104px !important;background-size: 16px !important;}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/sample/0000755000201500020150000000000014005022167023451 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/sample/css/0000755000201500020150000000000014005022167024241 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/sample/css/bootstrapck-sample.css0000644000201500020150000000224514002071405030564 0ustar puckpuckbody{margin-top:1.0em;background-color:#fff;font-family:Helvetica,Arial,sans-serif;color:#404040}.container{margin:0 auto;width:900px;padding:0 0 20px}h1{font-size:40px;margin:40px 0 28px;padding:110px 0 9px;border-bottom:1px solid #ccc}h1 a,h1 a:visited,h1 a:focus,h1 a:hover{color:#404040;text-decoration:none}h1 span{font-size:18px;font-weight:normal;color:#bfbfbf}h1 span a,h1 span a:visited,h1 span a:focus,h1 span a:hover{color:#bfbfbf}h1 a{text-decoration:none}h2{font-size:23px;margin:10px 0 8px}h3{font-size:16px;margin:10px 0 8px}p{margin:0 0 30px;font-size:13px;line-height:18px}a,a:visited,a:focus{color:#0069d6;text-decoration:none}a:hover{color:#00438a;text-decoration:underline}.download{float:right}pre{background:#f5f5f5;color:#404040;padding:16px;border:1px solid rgba(0,0,0,0.05);border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,0.05) inset;margin:-20px 0 10px;line-height:200%}.twitter{margin:-20px 0 40px;color:#666}.twitter iframe{vertical-align:bottom;margin:0 0 0 5px}.footer{text-align:center;padding-top:20px;margin-top:60px;font-size:14px;color:#808080;border-top:1px solid #ccc}.footer a,.footer a:visited,.footer a:focus{color:#333}.footer a:hover{color:#000}rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/sample/js/0000755000201500020150000000000014002071405024061 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/sample/js/analytics.js0000644000201500020150000000271414002071405026412 0ustar puckpuckvar _ga=_ga||{},_gaq=_gaq||[];_ga.trackSocial=function(a,c){_ga.trackFacebook(a,c);_ga.trackTwitter(a,c)}; _ga.trackFacebook=function(a,c){var d=_ga.buildTrackerName_(c);try{FB&&FB.Event&&FB.Event.subscribe&&(FB.Event.subscribe("edge.create",function(b){_gaq.push([d+"_trackSocial","facebook","like",b,a])}),FB.Event.subscribe("edge.remove",function(b){_gaq.push([d+"_trackSocial","facebook","unlike",b,a])}),FB.Event.subscribe("message.send",function(b){_gaq.push([d+"_trackSocial","facebook","send",b,a])}))}catch(e){}};_ga.buildTrackerName_=function(a){return a?a+".":""}; _ga.trackTwitter=function(a,c){var d=_ga.buildTrackerName_(c);try{twttr&&twttr.events&&twttr.events.bind&&twttr.events.bind("tweet",function(b){if(b){var c;b.target&&"IFRAME"==b.target.nodeName&&(c=_ga.extractParamFromUri_(b.target.src,"url"));_gaq.push([d+"_trackSocial","twitter","tweet",c,a])}})}catch(e){}};_ga.extractParamFromUri_=function(a,c){if(a){var a=a.split("#")[0],d=a.split("?");if(1!=d.length)for(var d=decodeURI(d[1]),c=c+"=",d=d.split("&"),e=0,b;b=d[e];++e)if(0===b.indexOf(c))return unescape(b.split("=")[1])}}; jQuery&&jQuery("a").click(function(){var a=jQuery(this).attr("href");null!=a&&(a.match(/^http/i)&&!a.match(document.domain)?_gaq.push(["_trackEvent","outgoing","click",a]):a.match(/\.(doc|pdf|xls|ppt|zip|txt|vsd|vxd|js|css|rar|exe|wma|mov|avi|wmv|mp3)$/i)?_gaq.push(["_trackEvent","download","click",a]):a.match(/^mailto:/i)&&_gaq.push(["_trackEvent","mailto","click",a]))});rt-5.0.1/devel/third-party/ckeditor-4.13.0/skins/bootstrapck/sample/js/jquery-1.11.0.min.js0000644000201500020150000027447114002071405027253 0ustar puckpuck!function(o,ea){"object"==typeof module&&"object"==typeof module.exports?module.exports=o.document?ea(o,!0):function(o){if(!o.document)throw Error("jQuery requires a window with a document");return ea(o)}:ea(o)}("undefined"!=typeof window?window:this,function(o,ea){function Ba(a){var b=a.length,d=c.type(a);return"function"===d||c.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===d||0===b||"number"==typeof b&&0e;e++)c.event.add(b,d,h[d][e])}g.data&&(g.data=c.extend({},g.data))}}function hb(a,b){var d=c(b.createElement(a)).appendTo(b.body),e=o.getDefaultComputedStyle?o.getDefaultComputedStyle(d[0]).display:c.css(d[0],"display");return d.detach(),e}function ib(a){var b=l,d=jb[a];return d||(d=hb(a,b),"none"!==d&&d||(fa=(fa||c("' ); iframe.setStyles( { width: '100%', height: '100%' } ); iframe.addClass( 'cke_wysiwyg_frame' ).addClass( 'cke_reset' ); var contentSpace = editor.ui.space( 'contents' ); contentSpace.append( iframe ); // Asynchronous iframe loading is only required in IE>8 and Gecko (other reasons probably). // Do not use it on WebKit as it'll break the browser-back navigation. var useOnloadEvent = ( CKEDITOR.env.ie && !CKEDITOR.env.edge ) || CKEDITOR.env.gecko; if ( useOnloadEvent ) iframe.on( 'load', onLoad ); var frameLabel = editor.title, helpLabel = editor.fire( 'ariaEditorHelpLabel', {} ).label; if ( frameLabel ) { if ( CKEDITOR.env.ie && helpLabel ) frameLabel += ', ' + helpLabel; iframe.setAttribute( 'title', frameLabel ); } if ( helpLabel ) { var labelId = CKEDITOR.tools.getNextId(), desc = CKEDITOR.dom.element.createFromHtml( '' + helpLabel + '' ); contentSpace.append( desc, 1 ); iframe.setAttribute( 'aria-describedby', labelId ); } // Remove the ARIA description. editor.on( 'beforeModeUnload', function( evt ) { evt.removeListener(); if ( desc ) desc.remove(); } ); iframe.setAttributes( { tabIndex: editor.tabIndex, allowTransparency: 'true' } ); // Execute onLoad manually for all non IE||Gecko browsers. !useOnloadEvent && onLoad(); editor.fire( 'ariaWidget', iframe ); function onLoad( evt ) { evt && evt.removeListener(); if ( editor.isDestroyed() || editor.isDetached() ) { return; } editor.editable( new framedWysiwyg( editor, iframe.$.contentWindow.document.body ) ); editor.setData( editor.getData( 1 ), callback ); } } ); } } ); /** * Adds the path to a stylesheet file to the exisiting {@link CKEDITOR.config#contentsCss} value. * * **Note:** This method is available only with the `wysiwygarea` plugin and only affects * classic editors based on it (so it does not affect inline editors). * * editor.addContentsCss( 'assets/contents.css' ); * * @since 4.4.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 ); this._.docTitle = this.getWindow().getFrame().getAttribute( 'title' ); }, base: CKEDITOR.editable, proto: { setData: function( data, isSnapshot ) { var editor = this.editor; if ( isSnapshot ) { this.setHtml( data ); this.fixInitialSelection(); // Fire dataReady for the consistency with inline editors // and because it makes sense. (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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/0000755000201500020150000000000014011700756024226 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/zh.js0000644000201500020150000001112414011700756025204 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 以使用分頁列表。焦點在分頁列表上時,分別使用右方向鍵及左方向鍵移動到下一個及上一個分頁。' }, { 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/nb.js0000644000201500020150000001154214011700756025166 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/eo.js0000644000201500020150000001226514011700756025175 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/es.js0000644000201500020150000001233014011700756025172 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ro.js0000644000201500020150000001171014011700756025204 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/hr.js0000644000201500020150000001126314011700756025200 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/it.js0000644000201500020150000001252614011700756025206 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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: 'Premere ${toolbarFocus} per passare alla barra degli strumenti. Usare TAB per spostarsi al gruppo successivo, MAIUSC+TAB per spostarsi a quello precedente. Usare FRECCIA DESTRA per spostarsi al pulsante successivo, FRECCIA SINISTRA per spostarsi a quello precedente. Premere SPAZIO o INVIO per attivare il pulsante della barra degli strumenti.' }, { name: 'Finestra Editor', legend: 'All\'interno di una finestra di dialogo è possibile premere TAB per passare all\'elemento successivo della finestra, MAIUSC+TAB per passare a quello precedente; premere INVIO per inviare i dati della finestra, oppure ESC per annullare l\'operazione. Quando una finestra di dialogo ha più schede, è possibile passare all\'elenco delle schede sia con ALT+F10 che con TAB, in base all\'ordine delle tabulazioni della finestra. Quando l\'elenco delle schede è attivo, premere la FRECCIA DESTRA o la FRECCIA SINISTRA per passare rispettivamente alla scheda successiva o a quella precedente.' }, { name: 'Menù contestuale Editor', legend: 'Premi ${contextMenu} o TASTO APPLICAZIONE per aprire il menu contestuale. Dunque muoviti all\'opzione successiva del menu con il tasto TAB o con la Freccia Sotto. Muoviti all\'opzione precedente con MAIUSC+TAB o con Freccia Sopra. Premi SPAZIO o INVIO per scegliere l\'opzione di menu. Apri il sottomenu dell\'opzione corrente con SPAZIO o INVIO oppure con la Freccia Destra. Torna indietro al menu superiore con ESC oppure Freccia Sinistra. Chiudi il menu contestuale con ESC.' }, { name: 'Box Lista Editor', legend: 'All\'interno di un elenco di opzioni, per spostarsi all\'elemento successivo premere TAB oppure FRECCIA GIÙ. Per spostarsi all\'elemento precedente usare SHIFT+TAB oppure FRECCIA SU. Premere SPAZIO o INVIO per selezionare l\'elemento della lista. Premere ESC per chiudere l\'elenco di opzioni.' }, { name: 'Barra percorso elementi editor', legend: 'Premere ${elementsPathFocus} per passare agli elementi della barra del percorso. Usare TAB o FRECCIA DESTRA per passare al pulsante successivo. Per passare al pulsante precedente premere MAIUSC+TAB o FRECCIA SINISTRA. Premere SPAZIO o INVIO per selezionare l\'elemento nell\'editor.' } ] }, { name: 'Comandi', items: [ { name: ' Annulla comando', legend: 'Premi ${undo}' }, { name: ' Ripeti comando', legend: 'Premi ${redo}' }, { name: ' Comando Grassetto', legend: 'Premi ${bold}' }, { name: ' Comando Corsivo', legend: 'Premi ${italic}' }, { name: ' Comando Sottolineato', legend: 'Premi ${underline}' }, { name: ' Comando Link', legend: 'Premi ${link}' }, { name: ' Comando riduci barra degli strumenti', legend: 'Premi ${toolbarCollapse}' }, { name: 'Comando di accesso al precedente spazio di focus', legend: 'Premi ${accessPreviousSpace} per accedere il più vicino spazio di focus non raggiungibile prima del simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti.' }, { name: 'Comando di accesso al prossimo spazio di focus', legend: 'Premi ${accessNextSpace} per accedere il più vicino spazio di focus non raggiungibile dopo il simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti.' }, { name: ' Aiuto Accessibilità', legend: 'Premi ${a11yHelp}' }, { 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/de-ch.js0000644000201500020150000001200714011700756025544 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 aktivieren.' }, { name: 'Editordialog', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor-Kontextmenü', legend: 'Dürcken Sie ${contextMenu} oder die Anwendungstaste um das Kontextmenü zu öffnen. Man kann die Pfeiltasten zum Wechsel benutzen. Mit der Leertaste oder der Enter-Taste kann man den Menüpunkt aufrufen. Schliessen Sie das Kontextmenü mit der ESC-Taste.' }, { name: 'Editor-Listenbox', legend: 'Innerhalb einer Listenbox kann man mit der TAB-Taste oder den Pfeilrunter-Taste den nächsten Menüeintrag wählen. Mit der SHIFT+TAB Tastenkombination oder der Pfeilhoch-Taste gelangt man zum vorherigen Menüpunkt. Mit der Leertaste oder Enter kann man den Menüpunkt auswählen. Drücken Sie ESC zum Verlassen des Menüs.' }, { name: 'Editor-Elementpfadleiste', legend: 'Drücken Sie ${elementsPathFocus} um sich durch die Pfadleiste zu bewegen. Um zum nächsten Element zu gelangen drücken Sie TAB oder die Pfeilrechts-Taste. Zum vorherigen Element gelangen Sie mit der SHIFT+TAB oder der Pfeillinks-Taste. Drücken Sie die Leertaste oder Enter um das Element auszuwählen.' } ] }, { name: 'Befehle', items: [ { name: 'Rückgängig-Befehl', legend: 'Drücken Sie ${undo}' }, { name: 'Wiederherstellen-Befehl', legend: 'Drücken Sie ${redo}' }, { name: 'Fettschrift-Befehl', legend: 'Drücken Sie ${bold}' }, { name: 'Kursiv-Befehl', legend: 'Drücken Sie ${italic}' }, { name: 'Unterstreichen-Befehl', legend: 'Drücken Sie ${underline}' }, { name: 'Link-Befehl', legend: 'Drücken Sie ${link}' }, { name: 'Werkzeugleiste einklappen-Befehl', legend: 'Drücken Sie ${toolbarCollapse}' }, { name: 'Zugang bisheriger Fokussierung Raumbefehl ', legend: 'Drücken Sie ${accessPreviousSpace} auf den am nächsten nicht erreichbar Fokus-Abstand vor die Einfügemarke zugreifen: zwei benachbarte HR-Elemente. Wiederholen Sie die Tastenkombination um entfernte Fokusräume zu erreichen. ' }, { name: 'Zugang nächster Schwerpunkt Raumbefehl ', legend: 'Drücken Sie $ { accessNextSpace }, um den nächsten unerreichbar Fokus Leerzeichen nach dem Cursor zum Beispiel auf: zwei benachbarten HR Elemente. Wiederholen Sie die Tastenkombination zum fernen Fokus Bereiche zu erreichen. ' }, { name: 'Eingabehilfen', legend: 'Drücken Sie ${a11yHelp}' }, { name: ' Paste as plain text', // MISSING legend: 'Press ${pastetext}', // MISSING legendEdge: 'Press ${pastetext}, followed by ${paste}' // MISSING } ] } ], 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: 'Schliessende eckige Klammer', singleQuote: 'Einfaches Anführungszeichen' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/sk.js0000644000201500020150000001214214011700756025201 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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čte ${toolbarFocus} pre navigáciu na lištu nástrojov. Medzi ďalšou a predchádzajúcou lištou nástrojov sa pohybujete s TAB a SHIFT+TAB. Medzi ďalším a predchádzajúcim tlačidlom na lište nástrojov sa pohybujete s pravou šípkou a ľavou šípkou. Stlačte medzerník alebo ENTER pre aktiváciu tlačidla lišty nástrojov.' }, { name: 'Editorový dialóg', legend: '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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/az.js0000644000201500020150000001134614011700756025203 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/pt.js0000644000201500020150000001224214011700756025210 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/si.js0000644000201500020150000001577514011700756025216 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ko.js0000644000201500020150000001377114011700756025206 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/mk.js0000644000201500020150000001244614011700756025202 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // MISSING }, { name: 'Дијалот за едиторот', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Контекст-мени на уредувачот', legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: '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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/cy.js0000644000201500020150000001223214011700756025177 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/uk.js0000644000201500020150000001640714011700756025213 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/zh-cn.js0000644000201500020150000001106014011700756025601 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/sv.js0000644000201500020150000001141314011700756025214 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/lt.js0000644000201500020150000001256614011700756025215 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // MISSING }, { name: 'Editor Dialog', // MISSING legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Commands', // MISSING items: [ { name: ' Undo command', // MISSING legend: 'Press ${undo}' // MISSING }, { name: ' Redo command', // MISSING legend: 'Press ${redo}' // MISSING }, { name: ' Bold command', // MISSING legend: 'Press ${bold}' // MISSING }, { name: ' Italic command', // MISSING legend: 'Press ${italic}' // MISSING }, { name: ' Underline command', // MISSING legend: 'Press ${underline}' // MISSING }, { name: ' Link command', // MISSING legend: 'Press ${link}' // MISSING }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: 'Press ${a11yHelp}' // MISSING }, { 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/fr-ca.js0000644000201500020150000001353214011700756025560 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/et.js0000644000201500020150000001147414011700756025203 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/pl.js0000644000201500020150000001304014011700756025175 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/bg.js0000644000201500020150000001312614011700756025157 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // MISSING }, { name: 'Диалог на редактора', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Контекстно меню на редактора', legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Списъчно меню на редактора', legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Лента с път на елемент на редактора', 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/fa.js0000644000201500020150000001465314011700756025163 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 در مجموعه نوار ابزار بعدی و قبلی حرکت کنید. برای حرکت در کلید نوار ابزار قبلی و بعدی با کلید جهت‌نمای راست و چپ جابجا شوید. کلید Space یا Enter را برای فعال کردن کلید نوار ابزار بفشارید.' }, { 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ku.js0000644000201500020150000001462414011700756025212 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/el.js0000644000201500020150000001770714011700756025200 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/fi.js0000644000201500020150000001257714011700756025176 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ru.js0000644000201500020150000001576014011700756025223 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/gl.js0000644000201500020150000001173014011700756025170 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 pola barra de ferramentas. Para moverse polos distintos grupos de ferramentas use as teclas TAB e MAIÚS+TAB. Para moverse polas distintas ferramentas use FRECHA DEREITA ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para activar o botón da barra de ferramentas.' }, { name: 'Editor de diálogo', legend: '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.' }, { 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/sr-latn.js0000644000201500020150000001155214011700756026150 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 bi označili alatke. Do sledeće i prethodne grupe alatki možete doći sa tasterom TAB i SHIFT+TAB. Do tastera sledeće i predthodne grupe alatki možete doći sa tasterima STRELICA LEVO i STRELICA DESNO. Pritisnite SPACE ili ENTER da bi aktivirali taster alatki.' }, { name: 'Uređivač dijaloga', legend: 'U prozoru dijalog pritisnite TAB da bi došli do sledećeg polja dijaloga, pritisnite ENTER za prihvatanje dijaloga, pritisnite ESC za odbijanje dijaloga. Kada dijalog ima više kartica, do njih možete doći pritiskom na ALT + F10 ili TAB. Zatim sa TAB ili STRELICA DESNO dolazite do naredne kartice.' }, { 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/oc.js0000644000201500020150000001305414011700756025170 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/sq.js0000644000201500020150000001250014011700756025205 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/pt-br.js0000644000201500020150000001211614011700756025611 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/fo.js0000644000201500020150000001206014011700756025167 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // MISSING }, { name: 'Editor Dialog', // MISSING legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Commands', // MISSING items: [ { name: ' Undo command', // MISSING legend: 'Press ${undo}' // MISSING }, { name: ' Redo command', // MISSING legend: 'Press ${redo}' // MISSING }, { name: ' Bold command', // MISSING legend: 'Press ${bold}' // MISSING }, { name: ' Italic command', // MISSING legend: 'Press ${italic}' // MISSING }, { name: ' Underline command', // MISSING legend: 'Press ${underline}' // MISSING }, { name: ' Link command', // MISSING legend: 'Press ${link}' // MISSING }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: 'Press ${a11yHelp}' // MISSING }, { 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/af.js0000644000201500020150000001145714011700756025162 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/hi.js0000644000201500020150000001257314011700756025174 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // MISSING }, { name: 'Editor Dialog', // MISSING legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Commands', // MISSING items: [ { name: ' Undo command', // MISSING legend: 'Press ${undo}' // MISSING }, { name: ' Redo command', // MISSING legend: 'Press ${redo}' // MISSING }, { name: ' Bold command', // MISSING legend: 'Press ${bold}' // MISSING }, { name: ' Italic command', // MISSING legend: 'Press ${italic}' // MISSING }, { name: ' Underline command', // MISSING legend: 'Press ${underline}' // MISSING }, { name: ' Link command', // MISSING legend: 'Press ${link}' // MISSING }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: 'Press ${a11yHelp}' // MISSING }, { 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/km.js0000644000201500020150000001323414011700756025176 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // MISSING }, { name: 'ផ្ទាំង​កម្មវិធីនិពន្ធ', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'ម៉ីនុយបរិបទអ្នកកែសម្រួល', legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'ប្រអប់បញ្ជីអ្នកកែសម្រួល', legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'ពាក្យបញ្ជា', items: [ { name: 'ការ​បញ្ជា​មិនធ្វើវិញ', legend: 'ចុច ${undo}' }, { name: 'ការបញ្ជា​ធ្វើវិញ', legend: 'ចុច ${redo}' }, { name: 'ការបញ្ជា​អក្សរ​ដិត', legend: 'ចុច ${bold}' }, { name: 'ការបញ្ជា​អក្សរ​ទ្រេត', legend: 'ចុច ${italic}' }, { name: 'ពាក្យបញ្ជា​បន្ទាត់​ពីក្រោម', legend: 'ចុច ${underline}' }, { name: 'ពាក្យបញ្ជា​តំណ', legend: 'ចុច ${link}' }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: 'ជំនួយ​ពី​ភាព​ងាយស្រួល', legend: 'ជួយ ${a11yHelp}' }, { 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/nl.js0000644000201500020150000001165514011700756025205 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/es-mx.js0000644000201500020150000001246614011700756025626 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/mn.js0000644000201500020150000001256414011700756025206 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // MISSING }, { name: 'Editor Dialog', // MISSING legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Commands', // MISSING items: [ { name: ' Undo command', // MISSING legend: 'Press ${undo}' // MISSING }, { name: ' Redo command', // MISSING legend: 'Press ${redo}' // MISSING }, { name: ' Bold command', // MISSING legend: 'Press ${bold}' // MISSING }, { name: ' Italic command', // MISSING legend: 'Press ${italic}' // MISSING }, { name: ' Underline command', // MISSING legend: 'Press ${underline}' // MISSING }, { name: ' Link command', // MISSING legend: 'Press ${link}' // MISSING }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: 'Press ${a11yHelp}' // MISSING }, { 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/da.js0000644000201500020150000001122114011700756025145 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/he.js0000644000201500020150000001302714011700756025163 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ca.js0000644000201500020150000001235614011700756025156 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/gu.js0000644000201500020150000001270614011700756025205 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // MISSING }, { name: 'એડિટર ડાયલોગ', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'કમાંડસ', items: [ { name: 'અન્ડું કમાંડ', legend: '$ દબાવો {undo}' }, { name: 'ફરી કરો કમાંડ', legend: '$ દબાવો {redo}' }, { name: 'બોલ્દનો કમાંડ', legend: '$ દબાવો {bold}' }, { name: ' Italic command', // MISSING legend: 'Press ${italic}' // MISSING }, { name: ' Underline command', // MISSING legend: 'Press ${underline}' // MISSING }, { name: ' Link command', // MISSING legend: 'Press ${link}' // MISSING }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: 'Press ${a11yHelp}' // MISSING }, { 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/_translationstatus.txt0000644000201500020150000000154014011700756030730 0ustar puckpuckCopyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/th.js0000644000201500020150000001311514011700756025200 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // MISSING }, { name: 'Editor Dialog', // MISSING legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'คำสั่ง', items: [ { name: 'เลิกทำคำสั่ง', legend: 'วาง ${undo}' }, { name: 'คำสั่งสำหรับทำซ้ำ', legend: 'วาง ${redo}' }, { name: 'คำสั่งสำหรับตัวหนา', legend: 'วาง ${bold}' }, { name: 'คำสั่งสำหรับตัวเอียง', legend: 'วาง ${italic}' }, { name: 'คำสั่งสำหรับขีดเส้นใต้', legend: 'วาง ${underline}' }, { name: 'คำสั่งสำหรับลิงก์', legend: 'วาง ${link}' }, { name: ' Toolbar Collapse command', // MISSING legend: 'Press ${toolbarCollapse}' // MISSING }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: 'Press ${a11yHelp}' // MISSING }, { 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/de.js0000644000201500020150000001205014011700756025152 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/tt.js0000644000201500020150000001166414011700756025223 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // MISSING }, { name: 'Editor Dialog', // MISSING legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Командалар', items: [ { name: 'Кайтару', legend: '${undo} басыгыз' }, { name: 'Кабатлау', legend: '${redo} басыгыз' }, { name: 'Калын', legend: '${bold} басыгыз' }, { name: 'Курсив', legend: '${italic} басыгыз' }, { name: 'Астына сызылган', legend: '${underline} басыгыз' }, { name: 'Сылталама', legend: '${link} басыгыз' }, { name: ' Toolbar Collapse command', // MISSING legend: '${toolbarCollapse} басыгыз' }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', // MISSING legend: '${a11yHelp} басыгыз' }, { 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/vi.js0000644000201500020150000001330114011700756025200 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/cs.js0000644000201500020150000001235514011700756025177 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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ů. Přejděte na další a předchozí skupiny pomocí TAB a SHIFT+TAB. Přechod na další a předchozí tlačítko panelu nástrojů je pomocí ŠIPKA VPRAVO nebo ŠIPKA VLEVO. Stisknutím mezerníku nebo klávesy ENTER tlačítko aktivujete.' }, { name: 'Dialogové okno editoru', legend: 'Uvnitř dialogového okna stiskněte TAB pro přesunutí na další prvek okna, stiskněte SHIFT+TAB pro přesun na předchozí prvek okna, stiskněte ENTER pro odeslání dialogu, stiskněte ESC pro jeho zrušení. Pro dialogová okna, která mají mnoho karet stiskněte ALT+F10 pro zaměření seznamu karet, nebo TAB, pro posun podle pořadí karet.Při zaměření seznamu karet se můžete jimi posouvat pomocí ŠIPKY VPRAVO a VLEVO.' }, { name: 'Kontextové menu editoru', legend: 'Stiskněte ${contextMenu} nebo klávesu APPLICATION k otevření kontextového menu. Pak se přesuňte na další možnost menu pomocí TAB nebo ŠIPKY DOLŮ. Přesuňte se na předchozí možnost pomocí SHIFT+TAB nebo ŠIPKY NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti menu. Podmenu současné možnosti otevřete pomocí MEZERNÍKU nebo ENTER či ŠIPKY DOLEVA. Kontextové menu uzavřete stiskem ESC.' }, { name: 'Rámeček seznamu editoru', legend: 'Uvnitř rámečku seznamu se přesunete na další položku menu pomocí TAB nebo ŠIPKA DOLŮ. Na předchozí položku se přesunete SHIFT+TAB nebo ŠIPKA NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti seznamu. Stiskněte ESC pro uzavření seznamu.' }, { name: 'Lišta cesty prvku v editoru', legend: 'Stiskněte ${elementsPathFocus} pro procházení lišty cesty prvku. Na další tlačítko prvku se přesunete pomocí TAB nebo ŠIPKA VPRAVO. Na předchozí tlačítko se přesunete pomocí SHIFT+TAB nebo ŠIPKA VLEVO. Stiskněte MEZERNÍK nebo ENTER pro vybrání prvku v editoru.' } ] }, { name: 'Příkazy', items: [ { name: ' Příkaz Zpět', legend: 'Stiskněte ${undo}' }, { name: ' Příkaz Znovu', legend: 'Stiskněte ${redo}' }, { name: ' Příkaz Tučné', legend: 'Stiskněte ${bold}' }, { name: ' Příkaz Kurzíva', legend: 'Stiskněte ${italic}' }, { name: ' Příkaz Podtržení', legend: 'Stiskněte ${underline}' }, { name: ' Příkaz Odkaz', legend: 'Stiskněte ${link}' }, { name: ' Příkaz Skrýt panel nástrojů', legend: 'Stiskněte ${toolbarCollapse}' }, { name: 'Příkaz pro přístup k předchozímu prostoru zaměření', legend: 'Stiskněte ${accessPreviousSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření před stříškou, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte.' }, { name: 'Příkaz pro přístup k dalšímu prostoru zaměření', legend: 'Stiskněte ${accessNextSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření po stříšce, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte.' }, { name: ' Nápověda přístupnosti', legend: 'Stiskněte ${a11yHelp}' }, { 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/tr.js0000644000201500020150000001173714011700756025222 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ja.js0000644000201500020150000001277314011700756025170 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/sl.js0000644000201500020150000001155414011700756025210 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/lv.js0000644000201500020150000001333614011700756025213 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // MISSING }, { name: 'Redaktora satura izvēle', legend: 'Nospiediet ${contextMenu} vai APPLICATION KEY lai atvērtu satura izvēlni. Lai pārvietotos uz nākošo izvēlnes opciju izmantojiet pogu TAB vai pogu Bultiņu uz leju. Lai pārvietotos uz iepriekšējo opciju izmantojiet SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvelētos izvēlnes opciju. Atveriet tekošajā opcija apakšizvēlni ar SAPCE vai ENTER ka ari to var izdarīt ar Labo bultiņu. Lai atgrieztos atpakaļ uz sakuma izvēlni nospiediet ESC vai Kreiso bultiņu. Lai aizvērtu ciet izvēlnes saturu nospiediet ESC.' }, { name: 'Redaktora saraksta lauks', legend: 'Saraksta laukā, lai pārvietotos uz nākošo saraksta elementu nospiediet TAB vai pogu Bultiņa uz leju. Lai pārvietotos uz iepriekšējo saraksta elementu nospiediet SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvēlētos saraksta opcijas. Nospiediet ESC lai aizvērtu saraksta lauku.' }, { name: 'Redaktora elementa ceļa josla', legend: 'Nospiediet ${elementsPathFocus} lai pārvietotos uz elementa ceļa joslu. Lai pārvietotos uz nākošo elementa pogu izmantojiet TAB vai Labo bultiņu. Lai pārvietotos uz iepriekšējo elementa pogu izmantojiet SHIFT+TAB vai Kreiso bultiņu. Nospiediet SPACE vai ENTER lai izvēlētos elementu redaktorā.' } ] }, { name: 'Komandas', items: [ { name: 'Komanda atcelt darbību', legend: 'Nospiediet ${undo}' }, { name: 'Komanda atkārtot darbību', legend: 'Nospiediet ${redo}' }, { name: 'Treknraksta komanda', legend: 'Nospiediet ${bold}' }, { name: 'Kursīva komanda', legend: 'Nospiediet ${italic}' }, { name: 'Apakšsvītras komanda ', legend: 'Nospiediet ${underline}' }, { name: 'Hipersaites komanda', legend: 'Nospiediet ${link}' }, { name: 'Rīkjoslas aizvēršanas komanda', legend: 'Nospiediet ${toolbarCollapse}' }, { name: 'Piekļūt iepriekšējai fokusa vietas komandai', legend: 'Nospiediet ${accessPreviousSpace} lai piekļūtu tuvākajai nepieejamajai fokusa vietai pirms kursora. Piemēram: diviem blakus esošiem līnijas HR elementiem. Atkārtojiet taustiņu kombināciju lai piekļūtu pie tālākām vietām.' }, { name: 'Piekļūt nākošā fokusa apgabala komandai', legend: 'Nospiediet ${accessNextSpace} lai piekļūtu tuvākajai nepieejamajai fokusa vietai pēc kursora. Piemēram: diviem blakus esošiem līnijas HR elementiem. Atkārtojiet taustiņu kombināciju lai piekļūtu pie tālākām vietām.' }, { name: 'Pieejamības palīdzība', legend: 'Nospiediet ${a11yHelp}' }, { 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/en-au.js0000644000201500020150000001062214011700756025572 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' }, { name: 'Editor Dialog', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' }, { name: 'Editor Context Menu', legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' }, { name: 'Editor List Box', legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' }, { name: 'Editor Element Path Bar', legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' } ] }, { name: 'Commands', items: [ { name: ' Undo command', legend: 'Press ${undo}' }, { name: ' Redo command', legend: 'Press ${redo}' }, { name: ' Bold command', legend: 'Press ${bold}' }, { name: ' Italic command', legend: 'Press ${italic}' }, { name: ' Underline command', legend: 'Press ${underline}' }, { name: ' Link command', legend: 'Press ${link}' }, { name: ' Toolbar Collapse command', legend: 'Press ${toolbarCollapse}' }, { name: ' Access previous focus space command', legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' }, { name: ' Access next focus space command', legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' }, { name: ' Accessibility Help', legend: 'Press ${a11yHelp}' }, { 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/en.js0000644000201500020150000001107114011700756025166 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' }, { name: 'Editor Dialog', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. ' + 'When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. ' + 'With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' }, { name: 'Editor Context Menu', legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. ' + 'Then move to next menu option with TAB or DOWN ARROW. ' + 'Move to previous option with SHIFT+TAB or UP ARROW. ' + 'Press SPACE or ENTER to select the menu option. ' + 'Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. ' + 'Go back to parent menu item with ESC or LEFT ARROW. ' + 'Close context menu with ESC.' }, { name: 'Editor List Box', legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. ' + 'Move to previous list item with SHIFT+TAB or UP ARROW. ' + 'Press SPACE or ENTER to select the list option. ' + 'Press ESC to close the list-box.' }, { name: 'Editor Element Path Bar', legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. ' + 'Move to next element button with TAB or RIGHT ARROW. ' + 'Move to previous button with SHIFT+TAB or LEFT ARROW. ' + 'Press SPACE or ENTER to select the element in editor.' } ] }, { name: 'Commands', items: [ { name: ' Undo command', legend: 'Press ${undo}' }, { name: ' Redo command', legend: 'Press ${redo}' }, { name: ' Bold command', legend: 'Press ${bold}' }, { name: ' Italic command', legend: 'Press ${italic}' }, { name: ' Underline command', legend: 'Press ${underline}' }, { name: ' Link command', legend: 'Press ${link}' }, { name: ' Toolbar Collapse command', legend: 'Press ${toolbarCollapse}' }, { name: ' Access previous focus space command', legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, ' + 'for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' }, { name: ' Access next focus space command', legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, ' + 'for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' }, { name: ' Accessibility Help', legend: 'Press ${a11yHelp}' }, { 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/no.js0000644000201500020150000001210214011700756025174 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/fr.js0000644000201500020150000001333514011700756025200 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/id.js0000644000201500020150000001250714011700756025165 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ug.js0000644000201500020150000001644714011700756025213 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/ar.js0000644000201500020150000001220314011700756025164 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // MISSING }, { name: 'Editor Dialog', // MISSING legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', // MISSING legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', // MISSING legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', // MISSING legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'الاوامر', items: [ { name: 'تراجع', legend: '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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/sr.js0000644000201500020150000001610014011700756025206 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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: 'Притисните ${toolbarFocus} да би означили алатке. До следеће и претходне групе алатки можете дићи тастером TAB и SHIFT+TAB. До тастера следеће и претходне групе алатки можете доћи са тастерима СТРЕЛИЦА ЛЕВО и СТРЕЛИЦА ДЕСНО. Притисните СПАЦЕ и ЕНТЕР да би активирали тастер алатки.' }, { 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/eu.js0000644000201500020150000001167614011700756025210 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/en-gb.js0000644000201500020150000001104114011700756025551 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' // MISSING }, { name: 'Editor Dialog', legend: 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING }, { name: 'Editor Context Menu', legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING }, { name: 'Editor List Box', legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING }, { name: 'Editor Element Path Bar', legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING } ] }, { name: 'Commands', items: [ { name: ' Undo command', legend: 'Press ${undo}' }, { name: ' Redo command', legend: 'Press ${redo}' }, { name: ' Bold command', legend: 'Press ${bold}' }, { name: ' Italic command', legend: 'Press ${italic}' }, { name: ' Underline command', legend: 'Press ${underline}' }, { name: ' Link command', legend: 'Press ${link}' }, { name: ' Toolbar Collapse command', legend: 'Press ${toolbarCollapse}' }, { name: ' Access previous focus space command', // MISSING legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Access next focus space command', // MISSING legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING }, { name: ' Accessibility Help', legend: 'Press ${a11yHelp}' }, { 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.1/devel/third-party/ckeditor-src/plugins/a11yhelp/dialogs/lang/hu.js0000644000201500020150000001222714011700756025204 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/0000755000201500020150000000000014011700756022407 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/blockquote/plugin.js0000755000201500020150000002047714011700756024260 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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', { label: editor.lang.blockquote.toolbar, command: 'blockquote', toolbar: 'blocks,10' } ); } } ); } )(); rt-5.0.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/0000755000201500020150000000000014011700756023330 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/zh.js0000644000201500020150000000036114011700756024307 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/nb.js0000644000201500020150000000035714011700756024272 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/eo.js0000644000201500020150000000035414011700756024273 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/es.js0000644000201500020150000000035114011700756024274 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/ro.js0000644000201500020150000000035214011700756024306 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/hr.js0000644000201500020150000000035214011700756024277 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/it.js0000644000201500020150000000035614011700756024306 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/de-ch.js0000644000201500020150000000036214011700756024647 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/sk.js0000644000201500020150000000035514011700756024306 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/az.js0000644000201500020150000000036014011700756024277 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/pt.js0000644000201500020150000000036714011700756024317 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/si.js0000644000201500020150000000040414011700756024277 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/ko.js0000644000201500020150000000036214011700756024300 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/mk.js0000644000201500020150000000037414011700756024301 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/cy.js0000644000201500020150000000036214011700756024302 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/uk.js0000644000201500020150000000036114011700756024305 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/zh-cn.js0000644000201500020150000000036114011700756024705 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/sv.js0000644000201500020150000000035714011700756024323 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/lt.js0000644000201500020150000000035314011700756024306 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/is.js0000644000201500020150000000036014011700756024300 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/fr-ca.js0000644000201500020150000000036014011700756024655 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/et.js0000644000201500020150000000036114011700756024276 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/bs.js0000644000201500020150000000037314011700756024275 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/pl.js0000644000201500020150000000035214011700756024301 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/bg.js0000644000201500020150000000037514011700756024263 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/fa.js0000644000201500020150000000037314011700756024257 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/ku.js0000644000201500020150000000043114011700756024303 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/bn.js0000644000201500020150000000037314011700756024270 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/el.js0000644000201500020150000000040614011700756024266 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/fi.js0000644000201500020150000000035414011700756024266 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/ru.js0000644000201500020150000000036114011700756024314 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/gl.js0000644000201500020150000000035114011700756024267 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/sr-latn.js0000644000201500020150000000036414011700756025251 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/oc.js0000644000201500020150000000035514011700756024272 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/sq.js0000644000201500020150000000035714011700756024316 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/pt-br.js0000644000201500020150000000036114011700756024712 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/fo.js0000644000201500020150000000035714011700756024277 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/af.js0000644000201500020150000000035714011700756024261 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/hi.js0000644000201500020150000000037614011700756024274 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/km.js0000644000201500020150000000043314011700756024275 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/nl.js0000644000201500020150000000035714011700756024304 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/ka.js0000644000201500020150000000036714011700756024267 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/es-mx.js0000644000201500020150000000036614011700756024724 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/mn.js0000644000201500020150000000037214011700756024302 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/da.js0000644000201500020150000000035614011700756024256 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/he.js0000644000201500020150000000037014011700756024262 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/ca.js0000644000201500020150000000036114011700756024251 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/gu.js0000644000201500020150000000044114011700756024300 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/ms.js0000644000201500020150000000037314011700756024310 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/th.js0000644000201500020150000000036014011700756024300 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/de.js0000644000201500020150000000035714011700756024263 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/en-ca.js0000644000201500020150000000036314011700756024653 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/tt.js0000644000201500020150000000037414011700756024321 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/vi.js0000644000201500020150000000037014011700756024304 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/cs.js0000644000201500020150000000035314011700756024274 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/tr.js0000644000201500020150000000036214011700756024314 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/ja.js0000644000201500020150000000037214011700756024262 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/sl.js0000644000201500020150000000035214011700756024304 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/lv.js0000644000201500020150000000036214011700756024310 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/en-au.js0000644000201500020150000000036314011700756024675 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/en.js0000644000201500020150000000036014011700756024267 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/no.js0000644000201500020150000000035714011700756024307 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/fr.js0000644000201500020150000000035514011700756024300 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/id.js0000644000201500020150000000036114011700756024262 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/ug.js0000644000201500020150000000037214011700756024303 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/ar.js0000644000201500020150000000036114011700756024270 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/sr.js0000644000201500020150000000037014011700756024312 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/eu.js0000644000201500020150000000036314011700756024301 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/en-gb.js0000644000201500020150000000036314011700756024660 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/lang/hu.js0000644000201500020150000000036214011700756024303 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/blockquote/icons/0000755000201500020150000000000014011700520023507 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/blockquote/icons/hidpi/0000755000201500020150000000000014011700520024604 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/blockquote/icons/hidpi/blockquote.png0000644000201500020150000000255314011700520027467 0ustar puckpuckPNG  IHDR szzgAMA a cHRMz&u0`:pQ<bKGDtIME  !oIDATXWMh$E^U`Ildr2<BrQxZ.búW5  l@H@AUG/!`HdLVWzfMWW{{UO1Rnݛyo!DM ,Zkcr,Rs =??/I !R&T^d}GE  Ic@C#B"TBhff!t 3!9B|vs@~ډ襔k W.cΊ?ǖy 2uCF3Z_&g<_wtvvq ČEngfdc\9ڷj?:Z\\ a!-c'CDQ*2224MUgYs\Zc* a *XJf-_Ⳣ̎8Wƾˍ1ZWjN:0>raۤzȲe?3R@k]eYe@p =4hl?juT*7@z8zFJjͷؾ "c^7[֡\JyՈ|i$I^mc>!B1~с% &IFmn;Ro `#wq0zP.|}}I\;j)f(Rl&,3OD1Chff!VuYkloo?t%垭۰2,:Ɛ$ t^xP.s2TneDA933vwwܜ8??T.'!~s#(0<Ynivv݈iboAwk eDEֵ݅PLNNB)fi:TUuЧ">H6qrrst]wG\]]0ǓĻD%tEXtdate:create2016-11-02T13:33:00+01:00%tEXtdate:modify2016-11-02T13:33:00+01:00\QIENDB`rt-5.0.1/devel/third-party/ckeditor-src/plugins/blockquote/icons/blockquote.png0000644000201500020150000000131414011700520026364 0ustar puckpuckPNG  IHDRagAMA a cHRMz%u0`:o_FbKGD pHYs  tIME *->IDAT8mA*z&&9EO!HVI$>> ^| 7]xe0DIty$LACw_U]%3@DPUT"BYxOp 3p8͝;{_ٛ"gsӢ(03upY8瞈ryO2NQ 3if\zEQ_38_eyoߗ釐%f0@Y\PEǍ6}s b>$ &"tݚ>S/$ߓɄv+GU!d6լZUUIE'}q,H칈,U`0 Cph%pI<fl"ȲVD_rnKU_~9% QdY*E#3Nsrw"b6H'v>@&)u%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iIENDB`rt-5.0.1/devel/third-party/ckeditor-src/plugins/stylescombo/0000755000201500020150000000000014011700756022602 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/stylescombo/plugin.js0000644000201500020150000001450214011700756024440 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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; } ); } ); 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 = []; } } ); } } ); } )(); rt-5.0.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/0000755000201500020150000000000014011700756023523 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/zh.js0000644000201500020150000000054414011700756024505 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/nb.js0000644000201500020150000000053614011700756024464 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/eo.js0000644000201500020150000000056614011700756024473 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/es.js0000644000201500020150000000057714011700756024501 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ro.js0000644000201500020150000000056014011700756024502 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/hr.js0000644000201500020150000000055414011700756024476 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/it.js0000644000201500020150000000056614011700756024504 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/de-ch.js0000644000201500020150000000054714011700756025047 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/sk.js0000644000201500020150000000056414011700756024503 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/az.js0000644000201500020150000000060714011700756024476 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/pt.js0000644000201500020150000000057714011700756024515 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/si.js0000644000201500020150000000064014011700756024474 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ko.js0000644000201500020150000000057614011700756024502 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/mk.js0000644000201500020150000000062414011700756024472 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/cy.js0000644000201500020150000000057514011700756024503 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/uk.js0000644000201500020150000000064314011700756024503 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/zh-cn.js0000644000201500020150000000056014011700756025101 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/sv.js0000644000201500020150000000055314011700756024514 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/lt.js0000644000201500020150000000056414011700756024505 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/is.js0000644000201500020150000000063214011700756024475 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/fr-ca.js0000644000201500020150000000056514011700756025057 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/et.js0000644000201500020150000000055414011700756024475 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/bs.js0000644000201500020150000000062214011700756024465 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/pl.js0000644000201500020150000000055214011700756024476 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/bg.js0000644000201500020150000000067414011700756024460 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/fa.js0000644000201500020150000000062114011700756024446 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ku.js0000644000201500020150000000063314011700756024502 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/bn.js0000644000201500020150000000062714011700756024465 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/el.js0000644000201500020150000000065214011700756024464 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/fi.js0000644000201500020150000000056614011700756024466 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ru.js0000644000201500020150000000064514011700756024514 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/gl.js0000644000201500020150000000057214011700756024467 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/sr-latn.js0000644000201500020150000000056114011700756025443 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/oc.js0000644000201500020150000000057114011700756024465 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/sq.js0000644000201500020150000000056714011700756024514 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/pt-br.js0000644000201500020150000000060414011700756025105 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/fo.js0000644000201500020150000000056214011700756024470 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/af.js0000644000201500020150000000053414011700756024451 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/hi.js0000644000201500020150000000064014011700756024461 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/km.js0000644000201500020150000000075014011700756024472 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/nl.js0000644000201500020150000000054514011700756024476 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ka.js0000644000201500020150000000077614011700756024466 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/es-mx.js0000644000201500020150000000057514011700756025121 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/mn.js0000644000201500020150000000064314011700756024476 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/da.js0000644000201500020150000000057614011700756024455 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'stylescombo', 'da', { label: 'Typografi', panelTitle: 'Formattering på stylesheet', panelTitle1: 'Block typografi', panelTitle2: 'Inline typografi', panelTitle3: 'Object typografi' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/he.js0000644000201500020150000000062714011700756024462 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ca.js0000644000201500020150000000056014011700756024445 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/gu.js0000644000201500020150000000064514011700756024501 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ms.js0000644000201500020150000000062314011700756024501 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/th.js0000644000201500020150000000064014011700756024474 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/de.js0000644000201500020150000000054414011700756024454 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/en-ca.js0000644000201500020150000000056614011700756025053 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/tt.js0000644000201500020150000000067714011700756024522 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/vi.js0000644000201500020150000000060214011700756024475 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/cs.js0000644000201500020150000000056014011700756024467 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/tr.js0000644000201500020150000000055714011700756024515 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ja.js0000644000201500020150000000062414011700756024455 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/sl.js0000644000201500020150000000055314011700756024502 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/lv.js0000644000201500020150000000055414011700756024506 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/en-au.js0000644000201500020150000000055314011700756025071 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/en.js0000644000201500020150000000055014011700756024463 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/no.js0000644000201500020150000000053614011700756024501 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/fr.js0000644000201500020150000000056414011700756024475 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/id.js0000644000201500020150000000062214011700756024455 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ug.js0000644000201500020150000000076014011700756024477 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/ar.js0000644000201500020150000000062114011700756024462 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/sr.js0000644000201500020150000000064714011700756024514 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/eu.js0000644000201500020150000000056114011700756024474 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/en-gb.js0000644000201500020150000000055314011700756025054 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/stylescombo/lang/hu.js0000644000201500020150000000057014011700756024477 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/0000755000201500020150000000000014011700756021520 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/indent/plugin.js0000755000201500020150000003730214011700756023364 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/dev/0000755000201500020150000000000014011700756022276 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/indent/dev/indent.html0000644000201500020150000001326014011700756024447 0ustar puckpuck Indent DEV sample

Indent DEV sample

List & Block

  • 
    		

Indent classes

  • 
    		

List only

  • 
    		

Block only

  • 
    		

CKEDITOR.ENTER_BR

  • 
    		
rt-5.0.1/devel/third-party/ckeditor-src/plugins/indent/lang/0000755000201500020150000000000014011700756022441 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/indent/lang/zh.js0000644000201500020150000000040614011700756023420 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/nb.js0000644000201500020150000000041014011700756023371 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/eo.js0000644000201500020150000000044314011700756023403 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/es.js0000644000201500020150000000042114011700756023403 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/ro.js0000644000201500020150000000042014011700756023413 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/hr.js0000644000201500020150000000041314011700756023406 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/it.js0000644000201500020150000000041314011700756023411 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/de-ch.js0000644000201500020150000000042114011700756023754 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'de-ch', { indent: 'Einzug erhöhen', outdent: 'Einzug verringern' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/indent/lang/sk.js0000644000201500020150000000042614011700756023416 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/az.js0000644000201500020150000000042314011700756023410 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/pt.js0000644000201500020150000000041614011700756023423 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/si.js0000644000201500020150000000052514011700756023414 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/ko.js0000644000201500020150000000040614011700756023410 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/mk.js0000644000201500020150000000044214011700756023406 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/cy.js0000644000201500020150000000042614011700756023414 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/uk.js0000644000201500020150000000045614011700756023423 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/zh-cn.js0000644000201500020150000000041714011700756024020 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/sv.js0000644000201500020150000000040614011700756023427 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/lt.js0000644000201500020150000000042514011700756023417 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/is.js0000644000201500020150000000041414011700756023411 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/fr-ca.js0000644000201500020150000000043014011700756023764 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/et.js0000644000201500020150000000042414011700756023407 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/bs.js0000644000201500020150000000040614011700756023403 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/pl.js0000644000201500020150000000042014011700756023406 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/bg.js0000644000201500020150000000050014011700756023362 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/fa.js0000644000201500020150000000044014011700756023363 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/ku.js0000644000201500020150000000046014011700756023416 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/bn.js0000644000201500020150000000046514011700756023403 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/el.js0000644000201500020150000000044014011700756023375 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/fi.js0000644000201500020150000000042714011700756023400 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/ru.js0000644000201500020150000000045414011700756023430 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/gl.js0000644000201500020150000000042314011700756023400 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/sr-latn.js0000644000201500020150000000042014011700756024353 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/oc.js0000644000201500020150000000042214011700756023376 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/sq.js0000644000201500020150000000041314011700756023420 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/pt-br.js0000644000201500020150000000041514011700756024023 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/fo.js0000644000201500020150000000043614011700756023406 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/af.js0000644000201500020150000000042014011700756023361 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/hi.js0000644000201500020150000000050514011700756023377 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/km.js0000644000201500020150000000053514011700756023411 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/nl.js0000644000201500020150000000043114011700756023406 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/ka.js0000644000201500020150000000047314011700756023376 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/es-mx.js0000644000201500020150000000043114011700756024026 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/mn.js0000644000201500020150000000044614011700756023415 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/da.js0000644000201500020150000000042314011700756023362 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/he.js0000644000201500020150000000042414011700756023373 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/ca.js0000644000201500020150000000042114011700756023357 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/gu.js0000644000201500020150000000066714011700756023423 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/ms.js0000644000201500020150000000041414011700756023415 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/th.js0000644000201500020150000000050514011700756023412 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/de.js0000644000201500020150000000041614011700756023370 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ CKEDITOR.plugins.setLang( 'indent', 'de', { indent: 'Einzug erhöhen', outdent: 'Einzug verringern' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/indent/lang/en-ca.js0000644000201500020150000000041714011700756023764 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/tt.js0000644000201500020150000000046014011700756023426 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/vi.js0000644000201500020150000000041714011700756023417 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/cs.js0000644000201500020150000000042314011700756023403 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/tr.js0000644000201500020150000000040614011700756023424 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/ja.js0000644000201500020150000000042214011700756023367 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/sl.js0000644000201500020150000000041314011700756023413 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/lv.js0000644000201500020150000000042314011700756023417 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/en-au.js0000644000201500020150000000041714011700756024006 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/en.js0000644000201500020150000000041414011700756023400 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/no.js0000644000201500020150000000041014011700756023406 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/fr.js0000644000201500020150000000042514011700756023407 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/id.js0000644000201500020150000000041314011700756023371 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/ug.js0000644000201500020150000000040614011700756023412 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/ar.js0000644000201500020150000000047614011700756023410 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/sr.js0000644000201500020150000000045314011700756023425 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/eu.js0000644000201500020150000000041014011700756023403 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/en-gb.js0000644000201500020150000000041714011700756023771 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/lang/hu.js0000644000201500020150000000043114011700756023411 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/indent/icons/0000755000201500020150000000000014011700521022621 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/indent/icons/hidpi/0000755000201500020150000000000014011700521023716 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/indent/icons/hidpi/indent.png0000644000201500020150000000175114011700521025711 0ustar puckpuckPNG  IHDR szzgAMA a cHRMz&u0`:pQ<bKGDtIME  !IDATXíWMn0 V] Sv#tĪ?ꊮ(G+ pnzĶ7@f#U0I3IV{ jkSx*&d)>dD' ڳ)\D>2d0T笵I ?p8|MιC I\]]]иH5n90e/| Hd21IW,$!"s"BI $]`iTe57;oooDD5= *^0*!):ByL.6-<7DscオjV,{$/o D{(, A"Ï@z1ƅ1(}3<T+::`t'󏷷I{R`尵-Bg|1\Tӷ;:P' +>ݭ :9~<1h4 ( 4GFmc<۲,:$eU$1uss0 B 1\m nOܛEQ)1p8;EV D$x1T-$ʲ@[-Bj@ Z h4֕^NDS y :@7@HZmٲ߃K@)˲g~V@`: PR21&ȓO.x;8. %tEXtdate:create2016-11-02T13:33:00+01:00%tEXtdate:modify2016-11-02T13:33:00+01:00\QIENDB`rt-5.0.1/devel/third-party/ckeditor-src/plugins/indent/icons/hidpi/indent-rtl.png0000644000201500020150000000136514011700521026511 0ustar puckpuckPNG  IHDR szzgAMA a cHRMz&u0`:pQ<bKGDtIME  !IDATXWKn1 Chش@@B\ t1y]0AR-E~~vT)v4̣nWdx&fQhy5'5\ަ24UQ˟d3\d{]`jl3*]:'"ޏhslQK@,`Yn$i{,NzH5)l8})[Nn@tsR뺑JDKd[Zs4޿ԟߢ!κVt˥R. [ZMh{e t`.>e㜼X6R矶mslQ.',O~|N^5nȝ{@c XOcIe P+ r=u`;^ݦ (\qs8[) Gz7԰45eg~ HI?(@mAe)03s4곳Z:)5l;%tEXtdate:create2016-11-02T13:33:00+01:00%tEXtdate:modify2016-11-02T13:33:00+01:00\QIENDB`rt-5.0.1/devel/third-party/ckeditor-src/plugins/indent/icons/hidpi/outdent.png0000644000201500020150000000136214011700521026110 0ustar puckpuckPNG  IHDR szzgAMA a cHRMz&u0`:pQ<bKGDtIME  !IDATXVn@ /q@i @N8ufP-Ed_xN1 [|YQʟ7f`I leD}C\f$Nכx3K)Hg*fku+&lͺ*AoH!Yn¹QKVc1M=F}D # >5z ttfUyHJznmAR達J!)SD9oeo_(=Sk\C!։9'ιGWTFSЛ d> " 0HNZFSe2}Re4PʸzX5Ou=͐y(9C p$ndt>stXwE{x΃1r[.ku-nr127:#5_e%tEXtdate:create2016-11-02T13:33:00+01:00%tEXtdate:modify2016-11-02T13:33:00+01:00\QIENDB`rt-5.0.1/devel/third-party/ckeditor-src/plugins/indent/icons/indent.png0000644000201500020150000000075114011700521024613 0ustar puckpuckPNG  IHDRagAMA a cHRMz%u0`:o_FbKGD pHYs  tIME *->IDAT8˕RI0 X{#7rCj%Kxɠ{ff@9gCɘnйu] <$"S<-6۶#9/q1y˴/{3dsuΉSvssl][l7xpuAB9p}Kl<+.  P這osp83m|Ѕ0 oxKL%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iIENDB`rt-5.0.1/devel/third-party/ckeditor-src/plugins/indent/icons/indent-rtl.png0000644000201500020150000000066614011700521025417 0ustar puckpuckPNG  IHDRagAMA a cHRMz%u0`:o_FbKGD pHYs  tIME *->IDAT8͒ 0 n y)OܤY)Jj`8#̀FSIނcJ 痂e؏~Mdf3Kq<"ao]V]b& n3=ܣK((S*>Zuh38|Qe`B2%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iIENDB`rt-5.0.1/devel/third-party/ckeditor-src/plugins/indent/icons/outdent.png0000644000201500020150000000063514011700521025015 0ustar puckpuckPNG  IHDRagAMA a cHRMz%u0`:o_FbKGD pHYs  tIME *->IDAT8˥Q !D{ut6WDV(y޻PUD%pJa5nzˁzJXDDapAkM'2DF)j$c?aUޙW(y+S<ЯȨ¦x@2 ߵ%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iIENDB`rt-5.0.1/devel/third-party/ckeditor-src/plugins/indent/icons/outdent-rtl.png0000644000201500020150000000070214011700521025607 0ustar puckpuckPNG  IHDRagAMA a cHRMz%u0`:o_FbKGD pHYs  tIME *->IDAT8˝ D!!8zrƘ<Be磅u]%I4B]'IN~5l{(ivm7?;"u@umq Î.Btn8lVٶ UP>gHzO"usֶm j\șk~{Mop%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iIENDB`rt-5.0.1/devel/third-party/ckeditor-src/plugins/autocomplete/0000755000201500020150000000000014011700756022740 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/autocomplete/plugin.js0000644000201500020150000013431514011700756024603 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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; /** * 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 ) ); // Update view position on viewport change. this._listeners.push( win.on( 'scroll', function() { this.viewRepositionListener(); }, this ) ); this._listeners.push( editorScrollableElement.on( 'scroll', function() { this.viewRepositionListener(); }, this ) ); this._listeners.push( editor.on( 'contentDom', onContentDom, this ) ); // CKEditor's event system has a limitation that one function (in this case this.check) // cannot be used as listener for the same event more than once. Hence, wrapper function. this._listeners.push( editor.on( 'change', 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 ) ); // Attach if editor is already initialized. if ( editable ) { onContentDom.call( this ); } function onContentDom() { // 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.on( 'keydown', function( evt ) { this.onKeyDown( evt ); }, this, null, 5 ) ); } }, /** * 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; editor.fire( 'saveSnapshot' ); editor.getSelection().selectRanges( [ this.model.range ] ); editor.insertHtml( this.getHtmlToInsert( item ), 'text' ); 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(); }, /** * 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 once the content has changed. * * @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 ) { this.model.setItem( evt.data ); this.view.selectItem( evt.data ); }, /** * 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 ); 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 ); 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 ); return CKEDITOR.dom.element.createFromHtml( this.itemTemplate.output( encodedItem ), this.document ); }, /** * 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/ckeditor-dev/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 editor = this.editor, viewHeight = this.element.getSize( 'height' ), editable = editor.editable(), // Bounding rect where the view should fit (visible editor viewport). editorViewportRect; // iOS classic editor has different viewport element (#1910). if ( CKEDITOR.env.iOS && !editable.isInline() ) { editorViewportRect = iOSViewportElement( editor ).getClientRect( true ); } else { editorViewportRect = editable.isInline() ? editable.getClientRect( true ) : editor.window.getFrame().getClientRect( true ); } // How much space is there for the view above and below the specified rect. var spaceAbove = rect.top - editorViewportRect.top, spaceBelow = editorViewportRect.bottom - rect.bottom, top; // As a default, keep the view inside the editor viewport. // +---------------------------------------------+ // | editor viewport | // | | // | | // | | // | █ - caret position | // | +--------------+ | // | | view | | // | +--------------+ | // | | // | | // +---------------------------------------------+ top = rect.top < editorViewportRect.top ? editorViewportRect.top : Math.min( editorViewportRect.bottom, rect.bottom ); // 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 | // | | // +---------------------------------------------+ if ( viewHeight > spaceBelow && viewHeight < spaceAbove ) { top = rect.top - viewHeight; } // If the caret position is below the view - keep it at the bottom edge. // +---------------------------------------------+ // | editor viewport | // | | // | +--------------+ | // | | | | // | | view | | // | | | | // +-----+==============+------------------------+ // | | // | █ - caret position | // | | // +---------------------------------------------+ if ( editorViewportRect.bottom < rect.bottom ) { top = Math.min( rect.top - viewHeight, editorViewportRect.bottom - viewHeight ); } // If the caret position is above the view - keep it at the top edge. // +---------------------------------------------+ // | | // | █ - caret position | // | | // +-----+==============+------------------------+ // | | | | // | | view | | // | | | | // | +--------------+ | // | | // | editor viewport | // +---------------------------------------------+ if ( editorViewportRect.top > rect.top ) { top = Math.max( rect.bottom, editorViewportRect.top ); } this.element.setStyles( { left: rect.left + 'px', top: top + 'px' } ); }, /** * 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; }, {} ); } /** * 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] */ /** * 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.1/devel/third-party/ckeditor-src/plugins/autocomplete/skins/0000755000201500020150000000000014011700756024067 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/autocomplete/skins/default.css0000644000201500020150000000135714011700756026233 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/autocomplete/samples/0000755000201500020150000000000014011700756024404 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/autocomplete/samples/smiley.html0000644000201500020150000001406714011700756026604 0ustar puckpuck Autocomplete Smileys — CKEditor Sample

    CKEditor Sample

    Autocomplete Smileys Demo

    This sample shows the progress of work on Autocomplete with Smileys integration. Type “ : ” to start smileys autocompletion.

    Apollo 11

    Saturn V carrying 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.

    Saturn V carrying Apollo 11
    Saturn V carrying Apollo 11

    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.

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

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

    rt-5.0.1/devel/third-party/ckeditor-src/plugins/autocomplete/samples/utils.js0000644000201500020150000000343714011700756026111 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ /* exported autocompleteUtils */ 'use strict'; var autocompleteUtils = { generateData: function( object, prefix ) { return Object.keys( object ).sort().map( function( prop, index ) { return { id: index, name: prefix + prop }; } ); }, getAsyncDataCallback: function( data ) { return function( query, range, callback ) { setTimeout( function() { callback( data.filter( function( item ) { return item.name.indexOf( query ) === 0; } ) ); }, Math.random() * 500 ); }; }, getSyncDataCallback: function( data ) { return function( query, range, callback ) { callback( data.filter( function( item ) { return item.name.indexOf( query ) === 0; } ) ); }; }, getTextTestCallback: function( prefix, minChars, requireSpaceAfter ) { var matchPattern = createPattern(); return function( range ) { if ( !range.collapsed ) { return null; } return CKEDITOR.plugins.textMatch.match( range, matchCallback ); }; function matchCallback( text, offset ) { var left = text.slice( 0, offset ), right = text.slice( offset ), match = left.match( matchPattern ); if ( !match ) { return null; } if ( requireSpaceAfter ) { // Require space (or end of text) after the caret. if ( right && !right.match( /^\s/ ) ) { return null; } } return { start: match.index, end: offset }; } function createPattern() { var pattern = prefix + '\\w'; if ( minChars ) { pattern += '{' + minChars + ',}'; } else { pattern += '*'; } pattern += '$'; return new RegExp( pattern ); } } }; rt-5.0.1/devel/third-party/ckeditor-src/plugins/autocomplete/samples/customview.html0000644000201500020150000001417014011700756027502 0ustar puckpuck Autocomplete Custom View — CKEditor Sample

    CKEditor Sample

    Autocomplete Custom View Demo

    This sample shows the progress of work on Autocomplete with custom View. Type “ @ ” (at least 2 characters) to start autocompletion.

    Apollo 11

    Saturn V carrying 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.

    Saturn V carrying Apollo 11
    Saturn V carrying Apollo 11

    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.

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

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

    rt-5.0.1/devel/third-party/ckeditor-src/plugins/undo/0000755000201500020150000000000014011700756021204 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/undo/plugin.js0000644000201500020150000012165214011700756023047 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/dev/0000755000201500020150000000000014011700756021762 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/undo/dev/snapshot.html0000644000201500020150000000551614011700756024516 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/0000755000201500020150000000000014011700756022125 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/undo/lang/zh.js0000644000201500020150000000037114011700756023105 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/nb.js0000644000201500020150000000036414011700756023065 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/eo.js0000644000201500020150000000036414011700756023071 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/es.js0000644000201500020150000000036614011700756023077 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/ro.js0000644000201500020150000000043114011700756023101 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/hr.js0000644000201500020150000000036514011700756023100 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/it.js0000644000201500020150000000037014011700756023077 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/de-ch.js0000644000201500020150000000040614011700756023443 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/sk.js0000644000201500020150000000036214011700756023101 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/az.js0000644000201500020150000000037314011700756023100 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/pt.js0000644000201500020150000000036414011700756023111 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/si.js0000644000201500020150000000044214011700756023076 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/ko.js0000644000201500020150000000040114011700756023067 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/mk.js0000644000201500020150000000037214011700756023074 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/cy.js0000644000201500020150000000036714011700756023104 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/uk.js0000644000201500020150000000041314011700756023100 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/zh-cn.js0000644000201500020150000000036614011700756023507 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/sv.js0000644000201500020150000000036414011700756023116 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/lt.js0000644000201500020150000000037114011700756023103 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/is.js0000644000201500020150000000041114011700756023072 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/fr-ca.js0000644000201500020150000000037014011700756023453 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/et.js0000644000201500020150000000040714011700756023074 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/bs.js0000644000201500020150000000036214011700756023070 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/pl.js0000644000201500020150000000036314011700756023100 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/bg.js0000644000201500020150000000040714011700756023054 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/fa.js0000644000201500020150000000040114011700756023044 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/ku.js0000644000201500020150000000042714011700756023105 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/bn.js0000644000201500020150000000042014011700756023056 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/el.js0000644000201500020150000000041114011700756023057 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/fi.js0000644000201500020150000000036214011700756023062 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/ru.js0000644000201500020150000000041114011700756023105 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/gl.js0000644000201500020150000000036614011700756023072 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/sr-latn.js0000644000201500020150000000037014011700756024043 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/oc.js0000644000201500020150000000036514011700756023070 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/sq.js0000644000201500020150000000036714011700756023114 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/pt-br.js0000644000201500020150000000037114011700756023510 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/fo.js0000644000201500020150000000036614011700756023074 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/af.js0000644000201500020150000000036514011700756023055 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/hi.js0000644000201500020150000000040214011700756023057 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/km.js0000644000201500020150000000045714011700756023100 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/nl.js0000644000201500020150000000040614011700756023074 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/ka.js0000644000201500020150000000043214011700756023055 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/es-mx.js0000644000201500020150000000037114011700756023515 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/mn.js0000644000201500020150000000045414011700756023100 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/da.js0000644000201500020150000000037714011700756023056 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/he.js0000644000201500020150000000044214011700756023057 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/ca.js0000644000201500020150000000036414011700756023051 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/gu.js0000644000201500020150000000066014011700756023100 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/ms.js0000644000201500020150000000036714011700756023110 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/th.js0000644000201500020150000000045414011700756023101 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/de.js0000644000201500020150000000040314011700756023050 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/en-ca.js0000644000201500020150000000036214011700756023447 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/tt.js0000644000201500020150000000040514011700756023111 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/vi.js0000644000201500020150000000042114011700756023076 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/cs.js0000644000201500020150000000036114011700756023070 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/tr.js0000644000201500020150000000036614011700756023115 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/ja.js0000644000201500020150000000037714011700756023064 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/sl.js0000644000201500020150000000037114011700756023102 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/lv.js0000644000201500020150000000036614011700756023111 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/en-au.js0000644000201500020150000000036214011700756023471 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/en.js0000644000201500020150000000035714011700756023072 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/no.js0000644000201500020150000000036414011700756023102 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/fr.js0000644000201500020150000000036714011700756023100 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/id.js0000644000201500020150000000041014011700756023052 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/ug.js0000644000201500020150000000040414011700756023074 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/ar.js0000644000201500020150000000037314011700756023070 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/sr.js0000644000201500020150000000037614011700756023115 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/eu.js0000644000201500020150000000036614011700756023101 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/en-gb.js0000644000201500020150000000036214011700756023454 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/lang/hu.js0000644000201500020150000000037514011700756023104 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/undo/icons/0000755000201500020150000000000014011700521022305 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/undo/icons/undo.png0000644000201500020150000000117214011700521023761 0ustar puckpuckPNG  IHDRagAMA a cHRMz%u0`:o_FbKGD pHYs  tIME *->iIDAT8˥NAEϝaeKxL  S!oe|"1%.(DiIDAT8˥NAEϝaeKxL  S!oe|"1%.(Dc$2$I2Uepرvkܷf YW 8nonZz#":~$I(#Zke!|Lt^iP`0@v A"S% K0;;;hX[q2Y?U%/v,S_(zpJ(.;|>_>Kԑ777pΡt[ۊ>S\/..0L_&-6yc e0 R6>Re3ުW&픸%tEXtdate:create2016-11-02T13:33:00+01:00%tEXtdate:modify2016-11-02T13:33:00+01:00\QIENDB`rt-5.0.1/devel/third-party/ckeditor-src/plugins/undo/icons/hidpi/redo-rtl.png0000644000201500020150000000221214011700521025635 0ustar puckpuckPNG  IHDR szzgAMA a cHRMz&u0`:pQ<bKGDtIME  !IDATXVo+EfvwVR"A'~zh]!QPPРS<F)Bpv] x}`${3|;]hS4M˱sVoMNOOAD Ƣ-v]f3c޹'`<kT MSs?;D;88ç6UN$Y|J3k@Y)Zr=n,0ϗvs0@)u`.o Df.篮Vxc$2$I2Uepرvkܷf YW 8nonZz#":~$I(#Zke!|Lt^iP`0@v A"S% K0;;;hX[q2Y?U%/v,S_(zpJ(.;|>_>Kԑ777pΡt[ۊ>S\/..0L_&-6yc e0 R6>Re3ުW&픸%tEXtdate:create2016-11-02T13:33:00+01:00%tEXtdate:modify2016-11-02T13:33:00+01:00\QIENDB`rt-5.0.1/devel/third-party/ckeditor-src/plugins/undo/icons/hidpi/redo.png0000644000201500020150000000217014011700521025041 0ustar puckpuckPNG  IHDR szzgAMA a cHRMz&u0`:pQ<bKGDtIME  !|IDATXW;o#UΙgdGx_[! ID\h@MK#tm b&h<3 |wgAGhx,fn`bW$K e+"frL& ݝN{"Rjܸ"kMdl"["m Zk(y; Umo|(~f=MU[>˲ga.߹fI""/R_Y旙afa(>| b-3Mo"~ûZl ]ʉZr-UB<ϻϲYbm4.; Vֺ|n{f߉荈̯RWDڥ膹0 w<ᄅ22q|`S_|ED?ڌh[ KRIU( _|PSNڭmeiQϷef@m@{G]΀#L&4 EQ-y0 8QJt:`< Eч`yR-lOw͔k7fBm?W-EQ0EQic Tu [no b<bR /f榑ALklS̴lx,fn`bW$K e+"frL& ݝN{"Rjܸ"kMdl"["m Zk(y; Umo|(~f=MU[>˲ga.߹fI""/R_Y旙afa(>| b-3Mo"~ûZl ]ʉZr-UB<ϻϲYbm4.; Vֺ|n{f߉荈̯RWDڥ膹0 w<ᄅ22q|`S_|ED?ڌh[ KRIU( _|PSNڭmeiQϷef@m@{G]΀#L&4 EQ-y0 8QJt:`< Eч`yR-lOw͔k7fBm?W-EQ0EQic Tu [no b<bR /f榑ALklS̴lQIDAT8˥1N0߳u@-- ;@lbaF,- ;e⥒gi"cJO"^g"t:1UUXkez =GATjI솪 Um:iM1DUaT"LIFK:@ڪioU}_C yM$u]w8Z{8G(!%NSxvu]yy++=]|&EQtշgpkyO9imK@y_}$wۤs O1<遂$10QߍS|' X,wCvTh%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iIENDB`rt-5.0.1/devel/third-party/ckeditor-src/plugins/undo/icons/undo-rtl.png0000644000201500020150000000114214011700521024555 0ustar puckpuckPNG  IHDRagAMA a cHRMz%u0`:o_FbKGD pHYs  tIME *->QIDAT8˥1N0߳u@-- ;@lbaF,- ;e⥒gi"cJO"^g"t:1UUXkez =GATjI솪 Um:iM1DUaT"LIFK:@ڪioU}_C yM$u]w8Z{8G(!%NSxvu]yy++=]|&EQtշgpkyO9imK@y_}$wۤs O1<遂$10QߍS|' X,wCvTh%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iIENDB`rt-5.0.1/devel/third-party/ckeditor-src/plugins/filetools/0000755000201500020150000000000014011700756022237 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/filetools/plugin.js0000644000201500020150000007347714011700756024115 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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,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% 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 {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.1/devel/third-party/ckeditor-src/plugins/filetools/dev/0000755000201500020150000000000014011700756023015 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/filetools/dev/uploaddebugger.js0000644000201500020150000000241514011700756026346 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/0000755000201500020150000000000014011700756023160 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/filetools/lang/zh.js0000644000201500020150000000124114011700756024135 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/nb.js0000644000201500020150000000122614011700756024116 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/eo.js0000644000201500020150000000125314011700756024122 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/es.js0000644000201500020150000000135314011700756024127 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/ro.js0000644000201500020150000000133614011700756024141 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/hr.js0000644000201500020150000000123714011700756024132 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/it.js0000644000201500020150000000147514011700756024141 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/de-ch.js0000644000201500020150000000144314011700756024500 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/sk.js0000644000201500020150000000130714011700756024134 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/az.js0000644000201500020150000000126714011700756024136 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/pt.js0000644000201500020150000000131714011700756024143 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/ko.js0000644000201500020150000000141414011700756024127 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/uk.js0000644000201500020150000000173214011700756024140 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/zh-cn.js0000644000201500020150000000120614011700756024534 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/sv.js0000644000201500020150000000121114011700756024141 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/et.js0000644000201500020150000000121714011700756024127 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/pl.js0000644000201500020150000000130314011700756024126 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/bg.js0000644000201500020150000000170114011700756024105 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/fa.js0000644000201500020150000000144514011700756024110 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/ku.js0000644000201500020150000000167314011700756024144 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/ru.js0000644000201500020150000000143514011700756024147 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/gl.js0000644000201500020150000000137214011700756024123 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/sr-latn.js0000644000201500020150000000137214011700756025101 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/oc.js0000644000201500020150000000145214011700756024121 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/sq.js0000644000201500020150000000137314011700756024145 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/pt-br.js0000644000201500020150000000133614011700756024545 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/km.js0000644000201500020150000000252714011700756024133 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/nl.js0000644000201500020150000000123614011700756024131 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/es-mx.js0000644000201500020150000000137314011700756024553 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/da.js0000644000201500020150000000125314011700756024103 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/ca.js0000644000201500020150000000142314011700756024101 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/de.js0000644000201500020150000000144514011700756024112 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/cs.js0000644000201500020150000000130514011700756024122 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/tr.js0000644000201500020150000000123114011700756024140 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/ja.js0000644000201500020150000000157114011700756024114 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/lv.js0000644000201500020150000000125514011700756024142 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/en-au.js0000644000201500020150000000122514011700756024523 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/en.js0000644000201500020150000000122214011700756024115 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/no.js0000644000201500020150000000131014011700756024125 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/fr.js0000644000201500020150000000147014011700756024127 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/id.js0000644000201500020150000000126014011700756024111 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/ug.js0000644000201500020150000000161614011700756024135 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/sr.js0000644000201500020150000000201214011700756024135 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/eu.js0000644000201500020150000000131414011700756024126 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/filetools/lang/hu.js0000644000201500020150000000131514011700756024132 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/uploadimage/0000755000201500020150000000000014011700756022526 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/uploadimage/plugin.js0000644000201500020150000001124014011700756024360 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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; } // 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% 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' ) ); // Convert image file (if present) to base64 string for Firefox. Do it as the first // step as the conversion is asynchronous and should hold all further paste processing. if ( CKEDITOR.env.gecko ) { var supportedImageTypes = [ 'image/png', 'image/jpeg', 'image/gif' ], latestId; editor.on( 'paste', function( evt ) { 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 if ( !data && dataObj.method == 'paste' && dataTransfer && dataTransfer.getFilesCount() == 1 && latestId != dataTransfer.id ) { var file = dataTransfer.getFile( 0 ); if ( CKEDITOR.tools.indexOf( supportedImageTypes, file.type ) != -1 ) { 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() { editor.fire( 'paste', evt.data ); }, false ); // Proceed with normal flow if reading file failed. fileReader.addEventListener( 'error', function() { editor.fire( 'paste', evt.data ); }, false ); fileReader.readAsDataURL( file ); latestId = dataObj.dataTransfer.id; evt.stop(); } } }, null, null, 1 ); } 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). if ( CKEDITOR.env.gecko && data.method == 'drop' && editor.toolbox ) { editor.once( 'afterPaste', function() { editor.toolbox.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 = { /** * It returns `true` if the environment allows to set 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/ckeditor-dev/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, bodyRegExp: /([\s\S]*)<\/body>/i, fragmentRegExp: //g, 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 { 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; 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; } } // 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(); if ( ( this.$ && this.$.files ) || file ) { this._.files = []; // Edge have empty files property with no length (https://dev.ckeditor.com/ticket/13755). if ( this.$.files && this.$.files.length ) { for ( i = 0; i < this.$.files.length; i++ ) { this._.files.push( this.$.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; } if ( this.$ && this.$.files && this.$.files.length ) { return this.$.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 ]; } if ( this.$ && this.$.files && this.$.files.length ) { return this.$.files[ i ]; } // File or null if the file was not found. return i === 0 ? this._getImageFromClipboard() : undefined; }, /** * 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; }, /** * 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 ) { // 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, '' ); // Keep only contents of the element var match = this._.bodyRegExp.exec( result ); if ( match && match.length ) { result = match[ 1 ]; // Remove also comments. result = result.replace( this._.fragmentRegExp, '' ); } } return result; } }; /** * 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 [ckeditor-dev/issues/#962](https://github.com/ckeditor/ckeditor-dev/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; rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/dev/0000755000201500020150000000000014011700756022754 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/dev/console.js0000644000201500020150000000211114011700756024747 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/clipboard/dev/dnd.html0000644000201500020150000003351214011700756024413 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.1/devel/third-party/ckeditor-src/plugins/clipboard/dev/clipboard.html0000644000201500020150000001274214011700756025607 0ustar puckpuck Clipboard playground – CKEditor Sample

    CKEditor Sample — clipboard plugin playground

    Editor 6

    Content content content.

    Styled by .someClass.

    rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/0000755000201500020150000000000014011700756023117 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/zh.js0000644000201500020150000000136014011700756024076 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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」。' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/nb.js0000644000201500020150000000144114011700756024054 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/eo.js0000644000201500020150000000146414011700756024065 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/es.js0000644000201500020150000000152514011700756024067 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/ro.js0000644000201500020150000000170714011700756024102 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/hr.js0000644000201500020150000000147214011700756024072 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/it.js0000644000201500020150000000152114011700756024070 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/de-ch.js0000644000201500020150000000163214011700756024437 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 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: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Einfügebereich', pasteMsg: 'Paste your content inside the area below and press OK.' // MISSING } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/sk.js0000644000201500020150000000157714011700756024104 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/az.js0000644000201500020150000000122614011700756024070 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/pt.js0000644000201500020150000000150514011700756024101 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/si.js0000644000201500020150000000165114011700756024073 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/ko.js0000644000201500020150000000151014011700756024063 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/mk.js0000644000201500020150000000216714011700756024072 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/cy.js0000644000201500020150000000151614011700756024073 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/uk.js0000644000201500020150000000246514011700756024103 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/zh-cn.js0000644000201500020150000000136514011700756024501 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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: '将您的内容粘贴到下方区域,然后按确定。' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/sv.js0000644000201500020150000000140114011700756024101 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/lt.js0000644000201500020150000000155714011700756024104 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/is.js0000644000201500020150000000144414011700756024073 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/fr-ca.js0000644000201500020150000000157114011700756024451 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/et.js0000644000201500020150000000144014011700756024064 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/bs.js0000644000201500020150000000150714011700756024064 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/pl.js0000644000201500020150000000151014011700756024065 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/bg.js0000644000201500020150000000240114011700756024042 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/fa.js0000644000201500020150000000213014011700756024037 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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: '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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/ku.js0000644000201500020150000000223414011700756024075 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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: 'ناوەڕۆکەکەت لەم پانتایی خوارەوە بلکێنە' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/bn.js0000644000201500020150000000245714011700756024064 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/el.js0000644000201500020150000000213714011700756024060 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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: '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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/fi.js0000644000201500020150000000141414011700756024053 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/ru.js0000644000201500020150000000240514011700756024104 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/gl.js0000644000201500020150000000151114011700756024055 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/sr-latn.js0000644000201500020150000000153614011700756025042 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/oc.js0000644000201500020150000000164614011700756024065 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/sq.js0000644000201500020150000000164414011700756024105 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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Ë.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/pt-br.js0000644000201500020150000000162014011700756024500 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Área para Colar', pasteMsg: 'Paste your content inside the area below and press OK.' // MISSING } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/fo.js0000644000201500020150000000150414011700756024061 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/af.js0000644000201500020150000000134114011700756024042 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/hi.js0000644000201500020150000000206114011700756024054 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/km.js0000644000201500020150000000274514011700756024074 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/nl.js0000644000201500020150000000145114011700756024067 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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: 'Press %1 to paste. Your browser doesn‘t support pasting with the toolbar button or context menu option.', // MISSING pasteArea: 'Plakgebied', pasteMsg: 'Paste your content inside the area below and press OK.' // MISSING } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/ka.js0000644000201500020150000000255314011700756024055 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/es-mx.js0000644000201500020150000000156514011700756024515 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/mn.js0000644000201500020150000000201314011700756024063 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/da.js0000644000201500020150000000157314011700756024047 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/he.js0000644000201500020150000000165114011700756024054 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/ca.js0000644000201500020150000000154514011700756024045 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/gu.js0000644000201500020150000000202114011700756024063 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/ms.js0000644000201500020150000000143014011700756024072 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/th.js0000644000201500020150000000250014011700756024065 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/de.js0000644000201500020150000000165014011700756024047 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 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 Toolbar oder dem Kontextmenü.', pasteArea: 'Einfügebereich', pasteMsg: 'Fügen Sie den Inhalt in den unteren Bereich ein und drücken Sie OK.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/en-ca.js0000644000201500020150000000151414011700756024441 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/tt.js0000644000201500020150000000173414011700756024111 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/vi.js0000644000201500020150000000162414011700756024076 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/cs.js0000644000201500020150000000173314011700756024066 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/tr.js0000644000201500020150000000162114011700756024102 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/ja.js0000644000201500020150000000175614011700756024060 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/sl.js0000644000201500020150000000144114011700756024073 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/lv.js0000644000201500020150000000160014011700756024073 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/en-au.js0000644000201500020150000000145314011700756024465 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/en.js0000644000201500020150000000145014011700756024057 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/no.js0000644000201500020150000000143614011700756024075 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/fr.js0000644000201500020150000000170514011700756024067 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/id.js0000644000201500020150000000152114011700756024050 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/ug.js0000644000201500020150000000235714011700756024077 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 نى بېسىڭ .' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/ar.js0000644000201500020150000000177414011700756024070 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/sr.js0000644000201500020150000000227714011700756024111 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/eu.js0000644000201500020150000000147214011700756024072 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/en-gb.js0000644000201500020150000000151414011700756024446 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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 } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/lang/hu.js0000644000201500020150000000164314011700756024075 0ustar puckpuck/* Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.' } ); rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/dialogs/0000755000201500020150000000000014011700756023620 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/dialogs/paste.js0000644000201500020150000001666614011700756025311 0ustar puckpuck/** * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. 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.1/devel/third-party/ckeditor-src/plugins/clipboard/icons/0000755000201500020150000000000014011700520023276 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/icons/cut-rtl.png0000644000201500020150000000141014011700520025372 0ustar puckpuckPNG  IHDRagAMA a cHRMz%u0`:o_FbKGD pHYs  tIME *->IDAT8}S=SA=μHB4B[AYX`'!Rb-l,$)⻙k^IDAT8Œ10 E{(&z]6`RiHKI,Xq{!IDi$^@)%$݇n.""}<yJ2sjS,-ԠklC[1I-A.7y5 JZZAPg3*VY7L97?Bf-?waz.0%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iIENDB`rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/icons/copy-rtl.png0000644000201500020150000000077214011700520025563 0ustar puckpuckPNG  IHDRagAMA a cHRMz%u0`:o_FbKGD pHYs  tIME *->IDAT8˵m04gN) ()$TQ BdYIDAT8Œ10 E{(&z]6`RiHKI,Xq{!IDi$^@)%$݇n.""}<yJ2sjS,-ԠklC[1I-A.7y5 JZZAPg3*VY7L97?Bf-?waz.0%tEXtdate:create2016-07-19T13:30:42+02:00wx%tEXtdate:modify2016-07-19T13:30:42+02:00iIENDB`rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/icons/hidpi/0000755000201500020150000000000014011700520024373 5ustar puckpuckrt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/icons/hidpi/cut-rtl.png0000644000201500020150000000305014011700520026471 0ustar puckpuckPNG  IHDR szzgAMA a cHRMz&u0`:pQ<bKGDtIME  !,IDATXÍWOhU}onvgٕ Hͩ  XAoM&!Q!Zhs 03o$"\zu?Vcw6M0#-˲-n} $˲ҙ̨T*~[3mYxf,]h>kj)}ijuBQ$ɟDbRAmu7766'\-<4MR3$8n}W| #5Iu";zw8/1238yEXW kgR)j뱱cy}SnaNRj[I1H-(=)I銛85ssscRmlA0QTj468=c":755 Y.|k ÜQA5NP7R꘢(0b|&>dvJ̷ɖ]k!nǭd|"zScCXI.Y}NS9@A_DRW>QnʲWbmxTU̾;DQqIґp0;#W,B5ʕ ]c;"0Ibh_HSWoYr ltn.8wWQ L0rm٥nkU.u]~OYˁgWu+6ukciY`;XUeOŚ,p8SY(OrV$D(.v$)ie5T"*@.*cOYfp!Oo4%tEXtdate:create2016-11-02T13:33:00+01:00%tEXtdate:modify2016-11-02T13:33:00+01:00\QIENDB`rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/icons/hidpi/copy-rtl.png0000644000201500020150000000136714011700520026661 0ustar puckpuckPNG  IHDR szzgAMA a cHRMz&u0`:pQ<bKGDtIME  !IDATXWn0 dHeRi. ^II/kp߃ iy!N@"pp>q?1/8esct4ugw$4M="6~b" "-%~QaҕƘ`疈>ZnsW,Eq!lD̯v+V hCyec淘?U Bݒ܈WWf%c5$6jc1KylērlS V8J*%D+$^vEDm4JIUwNv8-$uUVV+w%$"Wm>}F{>6Df$ hU,i"a7c$IeDVhR lô%$n*G{^q$-Ԑhrj)45l)~4!m+>9K*~N >nCbL]J:T@4BB4 *MG%tEXtdate:create2016-11-02T13:33:00+01:00%tEXtdate:modify2016-11-02T13:33:00+01:00\QIENDB`rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/icons/hidpi/paste-rtl.png0000644000201500020150000000152614011700520027020 0ustar puckpuckPNG  IHDR szzgAMA a cHRMz&u0`:pQ<bKGDtIME  !ZIDATXíWj0}#9B%Pzl q!?Cr J7/gzgҮ²yOz3ln,J~03sq]j;-ڃVs [)yA(8?$!"m&(^&xf+mۢiL&"4Dm["rPm@4O f~)bĤ~gfg"خ!s>꘢(0b|&>dvJ̷ɖ]k!nǭd|"zScCXI.Y}NS9@A_DRW>QnʲWbmxTU̾;DQqIґp0;#W,B5ʕ ]c;"0Ibh_HSWoYr ltn.8wWQ L0rm٥nkU.u]~OYˁgWu+6ukciY`;XUeOŚ,p8SY(OrV$D(.v$)ie5T"*@.*cOYfp!Oo4%tEXtdate:create2016-11-02T13:33:00+01:00%tEXtdate:modify2016-11-02T13:33:00+01:00\QIENDB`rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/icons/hidpi/cut.png0000644000201500020150000000305014011700520025672 0ustar puckpuckPNG  IHDR szzgAMA a cHRMz&u0`:pQ<bKGDtIME  !,IDATXÍWOhU}onvgٕ Hͩ  XAoM&!Q!Zhs 03o$"\zu?Vcw6M0#-˲-n} $˲ҙ̨T*~[3mYxf,]h>kj)}ijuBQ$ɟDbRAmu7766'\-<4MR3$8n}W| #5Iu";zw8/1238yEXW kgR)j뱱cy}SnaNRj[I1H-(=)I銛85ssscRmlA0QTj468=c":755 Y.|k ÜQA5NP7Rq?1/8esct4ugw$4M="6~b" "-%~QaҕƘ`疈>ZnsW,Eq!lD̯v+V hCyec淘?U Bݒ܈WWf%c5$6jc1KylērlS V8J*%D+$^vEDm4JIUwNv8-$uUVV+w%$"Wm>}F{>6Df$ hU,i"a7c$IeDVhR lô%$n*G{^q$-Ԑhrj)45l)~4!m+>9K*~N >nCbL]J:T@4BB4 *MG%tEXtdate:create2016-11-02T13:33:00+01:00%tEXtdate:modify2016-11-02T13:33:00+01:00\QIENDB`rt-5.0.1/devel/third-party/ckeditor-src/plugins/clipboard/icons/cut.png0000644000201500020150000000141014011700520024573 0ustar puckpuckPNG  IHDRagAMA a cHRMz%u0`:o_FbKGD pHYs  tIME *->IDAT8}S=SA=μHB4B[AYX`'!Rb-l,$)⻙k^IDAT8˵m04gN) ()$TQ BdY -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*$/ ) ) { 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