tinymce-rails 4.4.0 → 4.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/source/tinymce/tinymce.js +71 -22
- data/lib/tinymce/rails/version.rb +2 -2
- data/vendor/assets/javascripts/tinymce/plugins/advlist/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/fullscreen/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/lists/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/paste/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/themes/inlite/scratch/compile/theme.js +204 -199
- data/vendor/assets/javascripts/tinymce/themes/inlite/scratch/inline/theme.js +204 -199
- data/vendor/assets/javascripts/tinymce/themes/inlite/scratch/inline/theme.raw.js +204 -199
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/demo/html/demo.html +51 -24
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/Theme.js +24 -17
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/Measure.js +14 -23
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/UrlType.js +6 -1
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/ui/Buttons.js +3 -3
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/ui/Forms.js +1 -1
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/ui/Panel.js +162 -160
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/atomic/core/UrlTypeTest.js +8 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/alien/BookmarkTest.js +4 -4
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/core/MeasureTest.js +4 -4
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/core/SelectionMatcherTest.js +3 -3
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/file/ConversionsTest.js +1 -1
- data/vendor/assets/javascripts/tinymce/themes/inlite/theme.js +1 -1
- data/vendor/assets/javascripts/tinymce/themes/modern/theme.js +1 -1
- data/vendor/assets/javascripts/tinymce/tinymce.js +13 -13
- metadata +2 -2
@@ -13,30 +13,57 @@ ephox.bolt.module.api.main('tinymce/inlite/Demo');
|
|
13
13
|
<body>
|
14
14
|
<h2>inlite-theme Demo Page</h2>
|
15
15
|
<div id="ephox-ui">
|
16
|
-
<div class="tinymce" style="width: 900px; min-height: 100px">
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
</div>
|
16
|
+
<div class="tinymce" style="width: 900px; min-height: 100px">
|
17
|
+
<p>
|
18
|
+
<img src="https://www.tinymce.com/images/glyph-tinymce@2x.png" style="width: 100px; float: right">
|
19
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ultricies posuere felis sed interdum. Quisque nec diam
|
20
|
+
nec purus gravida dapibus
|
21
|
+
</p>
|
22
|
+
<p>
|
23
|
+
eget non <a href="http://www.tinymce.com">nulla</a>. Ut eu vestibulum libero. Vestibulum pretium est vitae metus auctor, quis fermentum mi
|
24
|
+
luctus. Fusce aliquet tincidunt massa vitae scelerisque. Vivamus in tellus risus. Mauris auctor metus ut gravida feugiat.
|
25
|
+
Nunc consequat urna eu augue commodo, eget malesuada odio fringilla. Morbi vitae turpis in elit laoreet malesuada a nec massa.
|
26
|
+
</p>
|
27
|
+
<table>
|
28
|
+
<tbody>
|
29
|
+
<tr>
|
30
|
+
<td>Lorem ipsum dolor sit amet</td>
|
31
|
+
<td>Lorem ipsum dolor sit amet</td>
|
32
|
+
</tr>
|
33
|
+
<tr>
|
34
|
+
<td>Vivamus in tellus risus</td>
|
35
|
+
<td>Vivamus in tellus risus</td>
|
36
|
+
</tr>
|
37
|
+
</tbody>
|
38
|
+
</table>
|
39
|
+
</div>
|
40
|
+
|
41
|
+
<div style="height: 3000px"></div>
|
42
|
+
|
43
|
+
<div class="tinymce" style="width: 900px; min-height: 100px; margin: 20px; border: 20px solid black; padding: 20px">
|
44
|
+
<p>
|
45
|
+
<img src="https://www.tinymce.com/images/glyph-tinymce@2x.png" style="width: 100px; float: right">
|
46
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ultricies posuere felis sed interdum. Quisque nec diam
|
47
|
+
nec purus gravida dapibus
|
48
|
+
</p>
|
49
|
+
<p>
|
50
|
+
eget non <a href="http://www.tinymce.com">nulla</a>. Ut eu vestibulum libero. Vestibulum pretium est vitae metus auctor, quis fermentum mi
|
51
|
+
luctus. Fusce aliquet tincidunt massa vitae scelerisque. Vivamus in tellus risus. Mauris auctor metus ut gravida feugiat.
|
52
|
+
Nunc consequat urna eu augue commodo, eget malesuada odio fringilla. Morbi vitae turpis in elit laoreet malesuada a nec massa.
|
53
|
+
</p>
|
54
|
+
<table>
|
55
|
+
<tbody>
|
56
|
+
<tr>
|
57
|
+
<td>Lorem ipsum dolor sit amet</td>
|
58
|
+
<td>Lorem ipsum dolor sit amet</td>
|
59
|
+
</tr>
|
60
|
+
<tr>
|
61
|
+
<td>Vivamus in tellus risus</td>
|
62
|
+
<td>Vivamus in tellus risus</td>
|
63
|
+
</tr>
|
64
|
+
</tbody>
|
65
|
+
</table>
|
66
|
+
</div>
|
40
67
|
</div>
|
41
68
|
</body>
|
42
69
|
</html>
|
@@ -63,11 +63,16 @@ define('tinymce/inlite/Theme', [
|
|
63
63
|
return result && result.rect ? result : null;
|
64
64
|
};
|
65
65
|
|
66
|
-
var togglePanel = function (editor) {
|
66
|
+
var togglePanel = function (editor, panel) {
|
67
67
|
var toggle = function () {
|
68
68
|
var toolbars = getToolbars(editor);
|
69
69
|
var result = findMatchResult(editor, toolbars);
|
70
|
-
|
70
|
+
|
71
|
+
if (result) {
|
72
|
+
panel.show(editor, result.id, result.rect, toolbars);
|
73
|
+
} else {
|
74
|
+
panel.hide();
|
75
|
+
}
|
71
76
|
};
|
72
77
|
|
73
78
|
return function () {
|
@@ -77,28 +82,28 @@ define('tinymce/inlite/Theme', [
|
|
77
82
|
};
|
78
83
|
};
|
79
84
|
|
80
|
-
var ignoreWhenFormIsVisible = function (f) {
|
85
|
+
var ignoreWhenFormIsVisible = function (panel, f) {
|
81
86
|
return function () {
|
82
|
-
if (!
|
87
|
+
if (!panel.inForm()) {
|
83
88
|
f();
|
84
89
|
}
|
85
90
|
};
|
86
91
|
};
|
87
92
|
|
88
|
-
var bindContextualToolbarsEvents = function (editor) {
|
89
|
-
var throttledTogglePanel = Delay.throttle(togglePanel(editor), 0);
|
90
|
-
var throttledTogglePanelWhenNotInForm = Delay.throttle(ignoreWhenFormIsVisible(togglePanel(editor)), 0);
|
93
|
+
var bindContextualToolbarsEvents = function (editor, panel) {
|
94
|
+
var throttledTogglePanel = Delay.throttle(togglePanel(editor, panel), 0);
|
95
|
+
var throttledTogglePanelWhenNotInForm = Delay.throttle(ignoreWhenFormIsVisible(panel, togglePanel(editor, panel)), 0);
|
91
96
|
|
92
|
-
editor.on('blur hide ObjectResizeStart',
|
97
|
+
editor.on('blur hide ObjectResizeStart', panel.hide);
|
93
98
|
editor.on('click', throttledTogglePanel);
|
94
99
|
editor.on('nodeChange mouseup', throttledTogglePanelWhenNotInForm);
|
95
100
|
editor.on('ResizeEditor ResizeWindow keyup', throttledTogglePanel);
|
96
|
-
editor.on('remove',
|
101
|
+
editor.on('remove', panel.remove);
|
97
102
|
|
98
|
-
editor.shortcuts.add('Alt+F10', '',
|
103
|
+
editor.shortcuts.add('Alt+F10', '', panel.focus);
|
99
104
|
};
|
100
105
|
|
101
|
-
var overrideLinkShortcut = function (editor) {
|
106
|
+
var overrideLinkShortcut = function (editor, panel) {
|
102
107
|
editor.shortcuts.remove('meta+k');
|
103
108
|
editor.shortcuts.add('meta+k', '', function () {
|
104
109
|
var toolbars = getToolbars(editor);
|
@@ -107,17 +112,17 @@ define('tinymce/inlite/Theme', [
|
|
107
112
|
]);
|
108
113
|
|
109
114
|
if (result) {
|
110
|
-
|
115
|
+
panel.show(editor, result.id, result.rect, toolbars);
|
111
116
|
}
|
112
117
|
});
|
113
118
|
};
|
114
119
|
|
115
|
-
var renderInlineUI = function (editor) {
|
120
|
+
var renderInlineUI = function (editor, panel) {
|
116
121
|
var skinName = editor.settings.skin || 'lightgray';
|
117
122
|
|
118
123
|
SkinLoader.load(editor, skinName, function () {
|
119
|
-
bindContextualToolbarsEvents(editor);
|
120
|
-
overrideLinkShortcut(editor);
|
124
|
+
bindContextualToolbarsEvents(editor, panel);
|
125
|
+
overrideLinkShortcut(editor, panel);
|
121
126
|
});
|
122
127
|
|
123
128
|
return {};
|
@@ -128,10 +133,12 @@ define('tinymce/inlite/Theme', [
|
|
128
133
|
};
|
129
134
|
|
130
135
|
ThemeManager.add('inlite', function (editor) {
|
131
|
-
|
136
|
+
var panel = new Panel();
|
137
|
+
|
138
|
+
Buttons.addToEditor(editor, panel);
|
132
139
|
|
133
140
|
var renderUI = function () {
|
134
|
-
return editor.inline ? renderInlineUI(editor) : fail('inlite theme only supports inline mode.');
|
141
|
+
return editor.inline ? renderInlineUI(editor, panel) : fail('inlite theme only supports inline mode.');
|
135
142
|
};
|
136
143
|
|
137
144
|
return {
|
data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/Measure.js
CHANGED
@@ -24,36 +24,27 @@ define('tinymce/inlite/core/Measure', [
|
|
24
24
|
};
|
25
25
|
};
|
26
26
|
|
27
|
-
var
|
28
|
-
var
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
targetRect.y -= root.ownerDocument.documentElement.scrollTop || root.scrollTop;
|
38
|
-
}
|
39
|
-
|
40
|
-
targetRect.x += pos.x;
|
41
|
-
targetRect.y += pos.y;
|
42
|
-
|
43
|
-
// We need to use these instead of the rect values since the style
|
44
|
-
// size properites might not be the same as the real size for a table
|
45
|
-
targetRect.w = elm.clientWidth > 0 ? elm.clientWidth : elm.offsetWidth;
|
46
|
-
targetRect.h = elm.clientHeight > 0 ? elm.clientHeight : elm.offsetHeight;
|
27
|
+
var measureElement = function (elm) {
|
28
|
+
var clientRect = elm.getBoundingClientRect();
|
29
|
+
|
30
|
+
return toAbsolute({
|
31
|
+
x: clientRect.left,
|
32
|
+
y: clientRect.top,
|
33
|
+
w: Math.max(elm.clientWidth, elm.offsetWidth),
|
34
|
+
h: Math.max(elm.clientHeight, elm.offsetHeight)
|
35
|
+
});
|
36
|
+
};
|
47
37
|
|
48
|
-
|
38
|
+
var getElementRect = function (editor, elm) {
|
39
|
+
return measureElement(elm);
|
49
40
|
};
|
50
41
|
|
51
42
|
var getPageAreaRect = function (editor) {
|
52
|
-
return
|
43
|
+
return measureElement(editor.getElement().ownerDocument.body);
|
53
44
|
};
|
54
45
|
|
55
46
|
var getContentAreaRect = function (editor) {
|
56
|
-
return
|
47
|
+
return measureElement(editor.getContentAreaContainer() || editor.getBody());
|
57
48
|
};
|
58
49
|
|
59
50
|
var getSelectionRect = function (editor) {
|
data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/UrlType.js
CHANGED
@@ -14,8 +14,13 @@ define('tinymce/inlite/core/UrlType', [
|
|
14
14
|
return /^www\.|\.(com|org|edu|gov|uk|net|ca|de|jp|fr|au|us|ru|ch|it|nl|se|no|es|mil)$/i.test(href.trim());
|
15
15
|
};
|
16
16
|
|
17
|
+
var isAbsolute = function (href) {
|
18
|
+
return /^https?:\/\//.test(href.trim());
|
19
|
+
};
|
20
|
+
|
17
21
|
return {
|
18
|
-
isDomainLike: isDomainLike
|
22
|
+
isDomainLike: isDomainLike,
|
23
|
+
isAbsolute: isAbsolute
|
19
24
|
};
|
20
25
|
});
|
21
26
|
|
data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/ui/Buttons.js
CHANGED
@@ -38,13 +38,13 @@ define('tinymce/inlite/ui/Buttons', [
|
|
38
38
|
}
|
39
39
|
};
|
40
40
|
|
41
|
-
var addToEditor = function (editor) {
|
41
|
+
var addToEditor = function (editor, panel) {
|
42
42
|
editor.addButton('quicklink', {
|
43
43
|
icon: 'link',
|
44
44
|
tooltip: 'Insert/Edit link',
|
45
45
|
stateSelector: 'a[href]',
|
46
46
|
onclick: function () {
|
47
|
-
|
47
|
+
panel.showForm(editor, 'quicklink');
|
48
48
|
}
|
49
49
|
});
|
50
50
|
|
@@ -66,7 +66,7 @@ define('tinymce/inlite/ui/Buttons', [
|
|
66
66
|
icon: 'table',
|
67
67
|
tooltip: 'Insert table',
|
68
68
|
onclick: function () {
|
69
|
-
|
69
|
+
panel.hide();
|
70
70
|
Actions.insertTable(editor, 2, 2);
|
71
71
|
}
|
72
72
|
});
|
@@ -57,7 +57,7 @@ define('tinymce/inlite/ui/Forms', [
|
|
57
57
|
};
|
58
58
|
|
59
59
|
var convertLinkToAbsolute = function (editor, href) {
|
60
|
-
return UrlType.isDomainLike(href) ? askAboutPrefix(editor, href) : Promise.resolve(href);
|
60
|
+
return !UrlType.isAbsolute(href) && UrlType.isDomainLike(href) ? askAboutPrefix(editor, href) : Promise.resolve(href);
|
61
61
|
};
|
62
62
|
|
63
63
|
var createQuickLinkForm = function (editor, hide) {
|
@@ -17,138 +17,103 @@ define('tinymce/inlite/ui/Panel', [
|
|
17
17
|
'tinymce/inlite/core/Measure',
|
18
18
|
'tinymce/inlite/core/Layout'
|
19
19
|
], function (Tools, Factory, DOM, Toolbar, Forms, Measure, Layout) {
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
return
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
var
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
var
|
37
|
-
|
38
|
-
|
20
|
+
return function () {
|
21
|
+
var DEFAULT_TEXT_SELECTION_ITEMS = 'bold italic | quicklink h2 h3 blockquote';
|
22
|
+
var DEFAULT_INSERT_TOOLBAR_ITEMS = 'quickimage quicktable';
|
23
|
+
var panel, currentRect;
|
24
|
+
|
25
|
+
var createToolbars = function (editor, toolbars) {
|
26
|
+
return Tools.map(toolbars, function (toolbar) {
|
27
|
+
return Toolbar.create(editor, toolbar.id, toolbar.items);
|
28
|
+
});
|
29
|
+
};
|
30
|
+
|
31
|
+
var getTextSelectionToolbarItems = function (settings) {
|
32
|
+
var value = settings.selection_toolbar;
|
33
|
+
return value ? value : DEFAULT_TEXT_SELECTION_ITEMS;
|
34
|
+
};
|
35
|
+
|
36
|
+
var getInsertToolbarItems = function (settings) {
|
37
|
+
var value = settings.insert_toolbar;
|
38
|
+
return value ? value : DEFAULT_INSERT_TOOLBAR_ITEMS;
|
39
|
+
};
|
40
|
+
|
41
|
+
var create = function (editor, toolbars) {
|
42
|
+
var items, settings = editor.settings;
|
43
|
+
|
44
|
+
items = createToolbars(editor, toolbars);
|
45
|
+
items = items.concat([
|
46
|
+
Toolbar.create(editor, 'text', getTextSelectionToolbarItems(settings)),
|
47
|
+
Toolbar.create(editor, 'insert', getInsertToolbarItems(settings)),
|
48
|
+
Forms.createQuickLinkForm(editor, hide)
|
49
|
+
]);
|
50
|
+
|
51
|
+
return Factory.create({
|
52
|
+
type: 'floatpanel',
|
53
|
+
role: 'dialog',
|
54
|
+
classes: 'tinymce tinymce-inline arrow',
|
55
|
+
ariaLabel: 'Inline toolbar',
|
56
|
+
layout: 'flex',
|
57
|
+
direction: 'column',
|
58
|
+
align: 'stretch',
|
59
|
+
autohide: false,
|
60
|
+
autofix: true,
|
61
|
+
fixed: true,
|
62
|
+
border: 1,
|
63
|
+
items: items,
|
64
|
+
oncancel: function() {
|
65
|
+
editor.focus();
|
66
|
+
}
|
67
|
+
});
|
68
|
+
};
|
39
69
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
items = createToolbars(editor, toolbars);
|
44
|
-
items = items.concat([
|
45
|
-
Toolbar.create(editor, 'text', getTextSelectionToolbarItems(settings)),
|
46
|
-
Toolbar.create(editor, 'insert', getInsertToolbarItems(settings)),
|
47
|
-
Forms.createQuickLinkForm(editor, hide)
|
48
|
-
]);
|
49
|
-
|
50
|
-
return Factory.create({
|
51
|
-
type: 'floatpanel',
|
52
|
-
role: 'dialog',
|
53
|
-
classes: 'tinymce tinymce-inline arrow',
|
54
|
-
ariaLabel: 'Inline toolbar',
|
55
|
-
layout: 'flex',
|
56
|
-
direction: 'column',
|
57
|
-
align: 'stretch',
|
58
|
-
autohide: false,
|
59
|
-
autofix: true,
|
60
|
-
fixed: true,
|
61
|
-
border: 1,
|
62
|
-
items: items,
|
63
|
-
oncancel: function() {
|
64
|
-
editor.focus();
|
70
|
+
var showPanel = function (panel) {
|
71
|
+
if (panel) {
|
72
|
+
panel.show();
|
65
73
|
}
|
66
|
-
}
|
67
|
-
};
|
74
|
+
};
|
68
75
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
}
|
73
|
-
};
|
76
|
+
var movePanelTo = function (panel, pos) {
|
77
|
+
panel.moveTo(pos.x, pos.y);
|
78
|
+
};
|
74
79
|
|
75
|
-
|
76
|
-
|
77
|
-
};
|
80
|
+
var togglePositionClass = function (panel, relPos) {
|
81
|
+
relPos = relPos ? relPos.substr(0, 2) : '';
|
78
82
|
|
79
|
-
var togglePositionClass = function (panel, relPos) {
|
80
|
-
relPos = relPos ? relPos.substr(0, 2) : '';
|
81
|
-
|
82
|
-
Tools.each({
|
83
|
-
t: 'down',
|
84
|
-
b: 'up',
|
85
|
-
c: 'center'
|
86
|
-
}, function(cls, pos) {
|
87
|
-
panel.classes.toggle('arrow-' + cls, pos === relPos.substr(0, 1));
|
88
|
-
});
|
89
|
-
|
90
|
-
if (relPos === 'cr') {
|
91
|
-
panel.classes.toggle('arrow-left', true);
|
92
|
-
panel.classes.toggle('arrow-right', false);
|
93
|
-
} else if (relPos === 'cl') {
|
94
|
-
panel.classes.toggle('arrow-left', true);
|
95
|
-
panel.classes.toggle('arrow-right', true);
|
96
|
-
} else {
|
97
83
|
Tools.each({
|
98
|
-
|
99
|
-
|
84
|
+
t: 'down',
|
85
|
+
b: 'up',
|
86
|
+
c: 'center'
|
100
87
|
}, function(cls, pos) {
|
101
|
-
panel.classes.toggle('arrow-' + cls, pos === relPos.substr(
|
88
|
+
panel.classes.toggle('arrow-' + cls, pos === relPos.substr(0, 1));
|
102
89
|
});
|
103
|
-
}
|
104
|
-
};
|
105
90
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
userConstainHandler = editor.settings.inline_toolbar_position_handler;
|
123
|
-
contentAreaRect = Measure.getContentAreaRect(editor);
|
124
|
-
panelRect = DOM.getRect(panel.getEl());
|
125
|
-
|
126
|
-
if (id === 'insert') {
|
127
|
-
result = Layout.calcInsert(targetRect, contentAreaRect, panelRect);
|
128
|
-
} else {
|
129
|
-
result = Layout.calc(targetRect, contentAreaRect, panelRect);
|
130
|
-
}
|
131
|
-
|
132
|
-
if (result) {
|
133
|
-
panelRect = result.rect;
|
134
|
-
currentRect = targetRect;
|
135
|
-
movePanelTo(panel, Layout.userConstrain(userConstainHandler, targetRect, contentAreaRect, panelRect));
|
136
|
-
|
137
|
-
togglePositionClass(panel, result.position);
|
138
|
-
} else {
|
139
|
-
hide(panel);
|
140
|
-
}
|
141
|
-
};
|
91
|
+
if (relPos === 'cr') {
|
92
|
+
panel.classes.toggle('arrow-left', true);
|
93
|
+
panel.classes.toggle('arrow-right', false);
|
94
|
+
} else if (relPos === 'cl') {
|
95
|
+
panel.classes.toggle('arrow-left', true);
|
96
|
+
panel.classes.toggle('arrow-right', true);
|
97
|
+
} else {
|
98
|
+
Tools.each({
|
99
|
+
l: 'left',
|
100
|
+
r: 'right'
|
101
|
+
}, function(cls, pos) {
|
102
|
+
panel.classes.toggle('arrow-' + cls, pos === relPos.substr(1, 1));
|
103
|
+
});
|
104
|
+
}
|
105
|
+
};
|
142
106
|
|
143
|
-
|
144
|
-
|
145
|
-
};
|
107
|
+
var showToolbar = function (panel, id) {
|
108
|
+
var toolbars = panel.items().filter('#' + id);
|
146
109
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
110
|
+
if (toolbars.length > 0) {
|
111
|
+
toolbars[0].show();
|
112
|
+
panel.reflow();
|
113
|
+
}
|
114
|
+
};
|
151
115
|
|
116
|
+
var showPanelAt = function (panel, id, editor, targetRect) {
|
152
117
|
var contentAreaRect, panelRect, result, userConstainHandler;
|
153
118
|
|
154
119
|
showPanel(panel);
|
@@ -159,58 +124,95 @@ define('tinymce/inlite/ui/Panel', [
|
|
159
124
|
contentAreaRect = Measure.getContentAreaRect(editor);
|
160
125
|
panelRect = DOM.getRect(panel.getEl());
|
161
126
|
|
162
|
-
|
127
|
+
if (id === 'insert') {
|
128
|
+
result = Layout.calcInsert(targetRect, contentAreaRect, panelRect);
|
129
|
+
} else {
|
130
|
+
result = Layout.calc(targetRect, contentAreaRect, panelRect);
|
131
|
+
}
|
163
132
|
|
164
133
|
if (result) {
|
165
134
|
panelRect = result.rect;
|
166
|
-
|
135
|
+
currentRect = targetRect;
|
136
|
+
movePanelTo(panel, Layout.userConstrain(userConstainHandler, targetRect, contentAreaRect, panelRect));
|
167
137
|
|
168
138
|
togglePositionClass(panel, result.position);
|
139
|
+
} else {
|
140
|
+
hide(panel);
|
169
141
|
}
|
170
|
-
}
|
171
|
-
};
|
142
|
+
};
|
172
143
|
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
panel.renderTo(document.body).reflow().moveTo(targetRect.x, targetRect.y);
|
177
|
-
editor.nodeChanged();
|
178
|
-
}
|
144
|
+
var hasFormVisible = function () {
|
145
|
+
return panel.items().filter('form:visible').length > 0;
|
146
|
+
};
|
179
147
|
|
180
|
-
|
181
|
-
|
148
|
+
var showForm = function (editor, id) {
|
149
|
+
if (panel) {
|
150
|
+
panel.items().hide();
|
151
|
+
showToolbar(panel, id);
|
182
152
|
|
183
|
-
|
184
|
-
if (panel) {
|
185
|
-
panel.hide();
|
186
|
-
}
|
187
|
-
};
|
153
|
+
var contentAreaRect, panelRect, result, userConstainHandler;
|
188
154
|
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
item.focus(true);
|
193
|
-
});
|
194
|
-
}
|
195
|
-
};
|
155
|
+
showPanel(panel);
|
156
|
+
panel.items().hide();
|
157
|
+
showToolbar(panel, id);
|
196
158
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
panel = null;
|
201
|
-
}
|
202
|
-
};
|
159
|
+
userConstainHandler = editor.settings.inline_toolbar_position_handler;
|
160
|
+
contentAreaRect = Measure.getContentAreaRect(editor);
|
161
|
+
panelRect = DOM.getRect(panel.getEl());
|
203
162
|
|
204
|
-
|
205
|
-
return panel && panel.visible() && hasFormVisible();
|
206
|
-
};
|
163
|
+
result = Layout.calc(currentRect, contentAreaRect, panelRect);
|
207
164
|
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
165
|
+
if (result) {
|
166
|
+
panelRect = result.rect;
|
167
|
+
movePanelTo(panel, Layout.userConstrain(userConstainHandler, currentRect, contentAreaRect, panelRect));
|
168
|
+
|
169
|
+
togglePositionClass(panel, result.position);
|
170
|
+
}
|
171
|
+
}
|
172
|
+
};
|
173
|
+
|
174
|
+
var show = function (editor, id, targetRect, toolbars) {
|
175
|
+
if (!panel) {
|
176
|
+
panel = create(editor, toolbars);
|
177
|
+
panel.renderTo(document.body).reflow().moveTo(targetRect.x, targetRect.y);
|
178
|
+
editor.nodeChanged();
|
179
|
+
}
|
180
|
+
|
181
|
+
showPanelAt(panel, id, editor, targetRect);
|
182
|
+
};
|
183
|
+
|
184
|
+
var hide = function () {
|
185
|
+
if (panel) {
|
186
|
+
panel.hide();
|
187
|
+
}
|
188
|
+
};
|
189
|
+
|
190
|
+
var focus = function () {
|
191
|
+
if (panel) {
|
192
|
+
panel.find('toolbar:visible').eq(0).each(function (item) {
|
193
|
+
item.focus(true);
|
194
|
+
});
|
195
|
+
}
|
196
|
+
};
|
197
|
+
|
198
|
+
var remove = function () {
|
199
|
+
if (panel) {
|
200
|
+
panel.remove();
|
201
|
+
panel = null;
|
202
|
+
}
|
203
|
+
};
|
204
|
+
|
205
|
+
var inForm = function () {
|
206
|
+
return panel && panel.visible() && hasFormVisible();
|
207
|
+
};
|
208
|
+
|
209
|
+
return {
|
210
|
+
show: show,
|
211
|
+
showForm: showForm,
|
212
|
+
inForm: inForm,
|
213
|
+
hide: hide,
|
214
|
+
focus: focus,
|
215
|
+
remove: remove
|
216
|
+
};
|
215
217
|
};
|
216
218
|
});
|