Skip to content

Commit

Permalink
Added rtl support.
Browse files Browse the repository at this point in the history
  • Loading branch information
spocke committed Oct 3, 2013
1 parent 205a88a commit a60b532
Show file tree
Hide file tree
Showing 26 changed files with 244 additions and 28 deletions.
2 changes: 2 additions & 0 deletions js/tinymce/classes/Editor.js
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,8 @@ define("tinymce/Editor", [
ie7_compat: true
}, settings);

self.rtl = settings.directionality == 'rtl';

AddOnManager.language = settings.language || 'en';
AddOnManager.languageLoad = settings.language_load;

Expand Down
4 changes: 4 additions & 0 deletions js/tinymce/classes/ui/Container.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@ define("tinymce/ui/Container", [
self._fixed = settings.fixed;
self._items = new Collection();

if (self.isRtl()) {
self.addClass('rtl');
}

self.addClass('container');
self.addClass('container-body', 'body');

Expand Down
4 changes: 3 additions & 1 deletion js/tinymce/classes/ui/Control.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ define("tinymce/ui/Control", [
controlIdLookup: {}
},

dom: DomUtils,
isRtl: function() {
return Control.rtl;
},

/**
* Class/id prefix to use for all controls.
Expand Down
4 changes: 2 additions & 2 deletions js/tinymce/classes/ui/FlexLayout.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@ define("tinymce/ui/FlexLayout", [
contLayoutRect = container.layoutRect();
contPaddingBox = container._paddingBox;
contSettings = container.settings;
direction = contSettings.direction;
direction = container.isRtl() ? (contSettings.direction || 'row-reversed') : contSettings.direction;
align = contSettings.align;
pack = contSettings.pack;
pack = container.isRtl() ? (contSettings.pack || 'end') : contSettings.pack;
spacing = contSettings.spacing || 0;

if (direction == "row-reversed" || direction == "column-reverse") {
Expand Down
2 changes: 1 addition & 1 deletion js/tinymce/classes/ui/FloatPanel.js
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ define("tinymce/ui/FloatPanel", [

if (settings.popover) {
self._preBodyHtml = '<div class="' + self.classPrefix + 'arrow"></div>';
self.addClass('popover').addClass('bottom').addClass('start');
self.addClass('popover').addClass('bottom').addClass(self.isRtl() ? 'end' : 'start');
}
},

Expand Down
4 changes: 4 additions & 0 deletions js/tinymce/classes/ui/FormatControls.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ define("tinymce/ui/FormatControls", [
var each = Tools.each;

EditorManager.on('AddEditor', function(e) {
if (e.editor.rtl) {
Control.rtl = true;
}

registerControls(e.editor);
});

Expand Down
2 changes: 1 addition & 1 deletion js/tinymce/classes/ui/MenuButton.js
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ define("tinymce/ui/MenuButton", [

self.menu.show();
self.menu.layoutRect({w: self.layoutRect().w});
self.menu.moveRel(self.getEl(), ['bl-tl', 'tl-bl']);
self.menu.moveRel(self.getEl(), self.isRtl() ? ['br-tr', 'tr-br'] : ['bl-tl', 'tl-bl']);
},

/**
Expand Down
6 changes: 5 additions & 1 deletion js/tinymce/classes/ui/MenuItem.js
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,11 @@ define("tinymce/ui/MenuItem", [

menu.addClass('menu-sub');

var rel = menu.testMoveRel(self.getEl(), ['tr-tl', 'br-bl', 'tl-tr', 'bl-br']);
var rel = menu.testMoveRel(
self.getEl(),
self.isRtl() ? ['tl-tr', 'bl-br', 'tr-tl', 'br-bl'] : ['tr-tl', 'br-bl', 'tl-tr', 'bl-br']
);

menu.moveRel(self.getEl(), rel);

rel = 'menu-sub-' + rel;
Expand Down
2 changes: 1 addition & 1 deletion js/tinymce/classes/ui/PanelButton.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ define("tinymce/ui/PanelButton", [
self.panel.show();
}

self.panel.moveRel(self.getEl(), settings.popoverAlign || ['bc-tl', 'bc-tc']);
self.panel.moveRel(self.getEl(), settings.popoverAlign || self.isRtl() ? ['bc-tr', 'bc-tc'] : ['bc-tl', 'bc-tc']);
},

/**
Expand Down
30 changes: 23 additions & 7 deletions js/tinymce/classes/ui/Path.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,6 @@ define("tinymce/ui/Path", [
"use strict";

return Control.extend({
Defaults: {
delimiter: "\u00BB"
},

/**
* Constructs a instance with the specified settings.
*
Expand All @@ -36,6 +32,10 @@ define("tinymce/ui/Path", [
init: function(settings) {
var self = this;

if (!settings.delimiter) {
settings.delimiter = self.isRtl() ? '\u00AB' : '\u00BB';
}

self._super(settings);
self.addClass('path');
self.canFocus = true;
Expand Down Expand Up @@ -126,14 +126,30 @@ define("tinymce/ui/Path", [
},

_getPathHtml: function() {
var self = this, parts = self._data || [], i, l, html = '', prefix = self.classPrefix;
var self = this, parts = self._data || [], i, l, html = '', prefix = self.classPrefix, rtl = self.isRtl();
var delimiterHtml = '<div class="'+ prefix + 'divider" aria-hidden="true"> ' + self.settings.delimiter + ' </div>';

if (rtl) {
i = parts.length - 1;
l = 0;
} else {
i = 0;
l = parts.length;
}

for (i, l; rtl ? i >= 0 : i < l; rtl ? i-- : i++) {
if (!rtl && i > 0) {
html += delimiterHtml;
}

for (i = 0, l = parts.length; i < l; i++) {
html += (
(i > 0 ? '<div class="'+ prefix + 'divider" aria-hidden="true"> ' + self.settings.delimiter + ' </div>' : '') +
'<div role="button" class="' + prefix + 'path-item' + (i == l - 1 ? ' ' + prefix + 'last' : '') + '" data-index="' +
i + '" tabindex="-1" id="' + self._id + '-' + i +'">' + parts[i].name + '</div>'
);

if (rtl && i > 0) {
html += delimiterHtml;
}
}

if (!html) {
Expand Down
6 changes: 5 additions & 1 deletion js/tinymce/classes/ui/Window.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,10 @@ define("tinymce/ui/Window", [

self._super(settings);

if (self.isRtl()) {
self.addClass('rtl');
}

self.addClass('window');
self._fixed = true;

Expand All @@ -65,7 +69,7 @@ define("tinymce/ui/Window", [
spacing: 3,
padding: 10,
align: 'center',
pack: 'end',
pack: self.isRtl() ? 'start' : 'end',
defaults: {
type: 'button'
},
Expand Down
1 change: 0 additions & 1 deletion js/tinymce/plugins/media/plugin.js
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,6 @@ tinymce.PluginManager.add('media', function(editor, url) {
type: 'container',
label: 'Dimensions',
layout: 'flex',
direction: 'row',
align: 'center',
spacing: 5,
items: [
Expand Down
34 changes: 25 additions & 9 deletions js/tinymce/plugins/table/classes/Plugin.js
Original file line number Diff line number Diff line change
Expand Up @@ -482,7 +482,7 @@ define("tinymce/tableplugin/Plugin", [
html: generateTableGrid(),

onmousemove: function(e) {
var target = e.target;
var x, y, target = e.target;

if (target.nodeName == 'A') {
var table = editor.dom.getParent(target, 'table');
Expand All @@ -494,17 +494,33 @@ define("tinymce/tableplugin/Plugin", [
pos[0] = parseInt(pos[0], 10);
pos[1] = parseInt(pos[1], 10);

for (var y = 0; y < 10; y++) {
for (var x = 0; x < 10; x++) {
editor.dom.toggleClass(
table.rows[y].childNodes[x].firstChild,
'mce-active',
x <= pos[0] && y <= pos[1]
);
if (e.control.isRtl()) {
for (y = 9; y >= 0; y--) {
for (x = 0; x < 10; x++) {
editor.dom.toggleClass(
table.rows[y].childNodes[x].firstChild,
'mce-active',
x >= pos[0] && y <= pos[1]
);
}
}

pos[0] = 10 - pos[0];
table.nextSibling.innerHTML = pos[0] + ' x '+ (pos[1] + 1);
} else {
for (y = 0; y < 10; y++) {
for (x = 0; x < 10; x++) {
editor.dom.toggleClass(
table.rows[y].childNodes[x].firstChild,
'mce-active',
x <= pos[0] && y <= pos[1]
);
}
}

table.nextSibling.innerHTML = (pos[0] + 1) + ' x '+ (pos[1] + 1);
}

table.nextSibling.innerHTML = (pos[0] + 1) + ' x '+ (pos[1] + 1);
this.lastPos = pos;
}
}
Expand Down
6 changes: 6 additions & 0 deletions js/tinymce/skins/lightgray/Button.less
Original file line number Diff line number Diff line change
Expand Up @@ -129,3 +129,9 @@
border-bottom: 4px solid @btn-caret-border;
border-top: 0;
}

// RTL

.mce-rtl .mce-btn button {
direction: rtl;
}
11 changes: 11 additions & 0 deletions js/tinymce/skins/lightgray/Checkbox.less
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,14 @@ i.mce-i-checkbox {
.mce-checkbox.mce-disabled .mce-label, .mce-checkbox.mce-disabled i.mce-i-checkbox {
color: mix(@text, @panel-bg, 40%);
}

// RTL

.mce-rtl .mce-checkbox {
direction: rtl;
text-align: right;
}

.mce-rtl i.mce-i-checkbox {
margin: 0 0 0 3px;
}
30 changes: 30 additions & 0 deletions js/tinymce/skins/lightgray/ColorButton.less
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,33 @@
border-left-color: @btn-split-border;
border-right-color: @btn-split-border;
}

// RTL

.mce-rtl .mce-colorbutton {
direction: rtl;
}

.mce-rtl .mce-colorbutton .mce-preview {
margin-left: 0;
padding-right: 0;
padding-left: 3px;
margin-right: -14px;
}

.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview {
margin-left: 0;
padding-right: 0;
margin-right: -17px;
padding-left: 0;
}

.mce-rtl .mce-colorbutton button {
padding-right: 10px;
padding-left: 10px;
}

.mce-rtl .mce-colorbutton .mce-open {
padding-left: 4px;
padding-right: 4px;
}
10 changes: 10 additions & 0 deletions js/tinymce/skins/lightgray/FlowLayout.less
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,13 @@
.mce-tinymce-inline .mce-flow-layout {
white-space: nowrap;
}

// RTL

.mce-rtl .mce-flow-layout {
text-align: right;
}

.mce-rtl .mce-flow-layout-item {
margin: 2px 2px 2px 0;
}
7 changes: 7 additions & 0 deletions js/tinymce/skins/lightgray/Label.less
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,10 @@
.mce-label.mce-multiline {
white-space: pre-wrap;
}

// RTL

.mce-rtl .mce-label {
text-align: right;
direction: rtl;
}
11 changes: 11 additions & 0 deletions js/tinymce/skins/lightgray/ListBox.less
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,14 @@
right: 8px;
top: 50%;
}

// RTL

.mce-rtl .mce-listbox .mce-caret {
right: auto;
left: 8px;
}

.mce-rtl .mce-listbox button {
padding-right: 10px;
}
7 changes: 7 additions & 0 deletions js/tinymce/skins/lightgray/MenuButton.less
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,10 @@
.mce-menubtn.mce-fixed-width.mce-btn-small span {
width: 70px;
}

// RTL

.mce-rtl .mce-menubtn button {
direction: rtl;
text-align: right;
}
27 changes: 26 additions & 1 deletion js/tinymce/skins/lightgray/MenuItem.less
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@
.vertical-gradient(@menuitem-bg-selected, @menuitem-bg-selected-hlight);
}

.mce-menu-item-sep, .mce-menu-item-sep:hover {
div.mce-menu .mce-menu-item-sep, .mce-menu-item-sep:hover {
border: 0;
padding: 0;
height: 1px;
Expand All @@ -107,3 +107,28 @@
cursor: default;
filter: none;
}

// RTL

.mce-rtl .mce-menu-item {
text-align: right;
direction: rtl;
padding: 6px 12px 6px 15px;
}

.mce-menu-align.mce-rtl .mce-menu-shortcut, .mce-menu-align.mce-rtl .mce-caret {
right: auto;
left: 0;
}

.mce-rtl .mce-menu-item .mce-caret {
margin-left: 6px;
margin-right: 0;
border-right: 4px solid @menuitem-caret;
border-left: 0;
}

.mce-rtl .mce-menu-item.mce-selected .mce-caret, .mce-rtl .mce-menu-item:focus .mce-caret, .mce-rtl .mce-menu-item:hover .mce-caret {
border-left-color: transparent;
border-right-color: @menuitem-caret-selected;
}
17 changes: 17 additions & 0 deletions js/tinymce/skins/lightgray/SplitButton.less
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,20 @@
.mce-splitbtn .mce-open.mce-active {
.box-shadow(inset 0 2px 4px rgba(0, 0, 0, .15), 0 1px 2px rgba(0, 0, 0 ,.05));
}

// RTL

.mce-rtl .mce-splitbtn {
direction: rtl;
text-align: right;
}

.mce-rtl .mce-splitbtn button {
padding-right: 10px;
padding-left: 10px;
}

.mce-rtl .mce-splitbtn .mce-open {
padding-left: 4px;
padding-right: 4px;
}

0 comments on commit a60b532

Please sign in to comment.