simditor 2.1.5.1 → 2.1.6.0
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/README.md +16 -0
- data/lib/simditor/version.rb +1 -1
- data/vendor/assets/javascripts/simditor/simditor.js +256 -160
- metadata +3 -4
- data/lib/simditor/version.rb~ +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aad34313602242d3c57b3e66c1cb3875724862d2
|
4
|
+
data.tar.gz: 563b7a4c147de9b3acae6499c0414a625e2fc7be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 900d43f6655399a9c570d59e6698dfd0698ff696f53370d86eaaeea38eb5cb9ebcca48535ac8c9aae3d187f46c6fe89040f668c8aa2601a294779675ad86a2b3
|
7
|
+
data.tar.gz: 9ad53e032294e73ea59c6aab7b3d6af4d3649351d9d85d8457ba6e725a523a72ad3681de8299dadf1fbe92515086067aedcf4f53b0c1c51fe60e10101ecb132c
|
data/README.md
CHANGED
@@ -17,3 +17,19 @@ in application.css
|
|
17
17
|
```
|
18
18
|
*= require simditor
|
19
19
|
```
|
20
|
+
|
21
|
+
## Initialization
|
22
|
+
|
23
|
+
```coffeescript
|
24
|
+
editor = new Simditor(
|
25
|
+
textarea: $('#editor')
|
26
|
+
toolbar: [
|
27
|
+
'title','bold','italic','underline','strikethrough','color','|'
|
28
|
+
'ol','ul','blockquote','code','table','link','image','hr','|'
|
29
|
+
'indent','outdent','|'
|
30
|
+
'source'
|
31
|
+
]
|
32
|
+
pasteImage: true
|
33
|
+
defaultImage: '<%= image_path "upload-loading.png" %>'
|
34
|
+
upload: url: '/upload')
|
35
|
+
```
|
data/lib/simditor/version.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/*!
|
2
|
-
* Simditor v2.1.
|
2
|
+
* Simditor v2.1.6
|
3
3
|
* http://simditor.tower.im/
|
4
|
-
* 2015-
|
4
|
+
* 2015-10-04
|
5
5
|
*/
|
6
6
|
(function (root, factory) {
|
7
7
|
if (typeof define === 'function' && define.amd) {
|
@@ -19,7 +19,7 @@
|
|
19
19
|
}
|
20
20
|
}(this, function ($, SimpleModule, simpleHotkeys, simpleUploader) {
|
21
21
|
|
22
|
-
var BlockquoteButton, BoldButton, Button, CodeButton, CodePopover, ColorButton, Formatter, HrButton, ImageButton, ImagePopover, IndentButton, InputManager, ItalicButton, Keystroke, LinkButton, LinkPopover, ListButton, OrderListButton, OutdentButton, Popover, Selection, Simditor, SourceButton, StrikethroughButton, TableButton, TitleButton, Toolbar, UnderlineButton, UndoManager, UnorderListButton, Util,
|
22
|
+
var BlockquoteButton, BoldButton, Button, CodeButton, CodePopover, ColorButton, Formatter, HrButton, ImageButton, ImagePopover, IndentButton, Indentation, InputManager, ItalicButton, Keystroke, LinkButton, LinkPopover, ListButton, OrderListButton, OutdentButton, Popover, Selection, Simditor, SourceButton, StrikethroughButton, TableButton, TitleButton, Toolbar, UnderlineButton, UndoManager, UnorderListButton, Util,
|
23
23
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
24
24
|
hasProp = {}.hasOwnProperty,
|
25
25
|
indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
|
@@ -1076,21 +1076,6 @@ Keystroke = (function(superClass) {
|
|
1076
1076
|
}
|
1077
1077
|
};
|
1078
1078
|
})(this));
|
1079
|
-
this.editor.inputManager.addKeystrokeHandler('9', '*', (function(_this) {
|
1080
|
-
return function(e) {
|
1081
|
-
var codeButton;
|
1082
|
-
codeButton = _this.editor.toolbar.findButton('code');
|
1083
|
-
if (!(_this.editor.opts.tabIndent || (codeButton && codeButton.active))) {
|
1084
|
-
return;
|
1085
|
-
}
|
1086
|
-
if (e.shiftKey) {
|
1087
|
-
_this.editor.util.outdent();
|
1088
|
-
} else {
|
1089
|
-
_this.editor.util.indent();
|
1090
|
-
}
|
1091
|
-
return true;
|
1092
|
-
};
|
1093
|
-
})(this));
|
1094
1079
|
this.editor.inputManager.addKeystrokeHandler('13', 'li', (function(_this) {
|
1095
1080
|
return function(e, $node) {
|
1096
1081
|
var $cloneNode, listEl, newBlockEl, newListEl;
|
@@ -1733,107 +1718,6 @@ Util = (function(superClass) {
|
|
1733
1718
|
return results1;
|
1734
1719
|
};
|
1735
1720
|
|
1736
|
-
Util.prototype.indent = function() {
|
1737
|
-
var $blockEl, $childList, $nextTd, $parentLi, $td, indentLevel, range, ref, spaceNode, tagName;
|
1738
|
-
$blockEl = this.editor.util.closestBlockEl();
|
1739
|
-
if (!($blockEl && $blockEl.length > 0)) {
|
1740
|
-
return false;
|
1741
|
-
}
|
1742
|
-
if ($blockEl.is('pre')) {
|
1743
|
-
spaceNode = document.createTextNode('\u00A0\u00A0');
|
1744
|
-
this.editor.selection.insertNode(spaceNode);
|
1745
|
-
} else if ($blockEl.is('li')) {
|
1746
|
-
$parentLi = $blockEl.prev('li');
|
1747
|
-
if ($parentLi.length < 1) {
|
1748
|
-
return false;
|
1749
|
-
}
|
1750
|
-
this.editor.selection.save();
|
1751
|
-
tagName = $blockEl.parent()[0].tagName;
|
1752
|
-
$childList = $parentLi.children('ul, ol');
|
1753
|
-
if ($childList.length > 0) {
|
1754
|
-
$childList.append($blockEl);
|
1755
|
-
} else {
|
1756
|
-
$('<' + tagName + '/>').append($blockEl).appendTo($parentLi);
|
1757
|
-
}
|
1758
|
-
this.editor.selection.restore();
|
1759
|
-
} else if ($blockEl.is('p, h1, h2, h3, h4')) {
|
1760
|
-
indentLevel = (ref = $blockEl.attr('data-indent')) != null ? ref : 0;
|
1761
|
-
indentLevel = indentLevel * 1 + 1;
|
1762
|
-
if (indentLevel > 10) {
|
1763
|
-
indentLevel = 10;
|
1764
|
-
}
|
1765
|
-
$blockEl.attr('data-indent', indentLevel);
|
1766
|
-
} else if ($blockEl.is('table')) {
|
1767
|
-
range = this.editor.selection.getRange();
|
1768
|
-
$td = $(range.commonAncestorContainer).closest('td');
|
1769
|
-
$nextTd = $td.next('td');
|
1770
|
-
if (!($nextTd.length > 0)) {
|
1771
|
-
$nextTd = $td.parent('tr').next('tr').find('td:first');
|
1772
|
-
}
|
1773
|
-
if (!($td.length > 0 && $nextTd.length > 0)) {
|
1774
|
-
return false;
|
1775
|
-
}
|
1776
|
-
this.editor.selection.setRangeAtEndOf($nextTd);
|
1777
|
-
} else {
|
1778
|
-
spaceNode = document.createTextNode('\u00A0\u00A0\u00A0\u00A0');
|
1779
|
-
this.editor.selection.insertNode(spaceNode);
|
1780
|
-
}
|
1781
|
-
this.editor.trigger('valuechanged');
|
1782
|
-
return true;
|
1783
|
-
};
|
1784
|
-
|
1785
|
-
Util.prototype.outdent = function() {
|
1786
|
-
var $blockEl, $parent, $parentLi, $prevTd, $td, button, indentLevel, range, ref;
|
1787
|
-
$blockEl = this.editor.util.closestBlockEl();
|
1788
|
-
if (!($blockEl && $blockEl.length > 0)) {
|
1789
|
-
return false;
|
1790
|
-
}
|
1791
|
-
if ($blockEl.is('pre')) {
|
1792
|
-
return false;
|
1793
|
-
} else if ($blockEl.is('li')) {
|
1794
|
-
$parent = $blockEl.parent();
|
1795
|
-
$parentLi = $parent.parent('li');
|
1796
|
-
if ($parentLi.length < 1) {
|
1797
|
-
button = this.editor.toolbar.findButton($parent[0].tagName.toLowerCase());
|
1798
|
-
if (button != null) {
|
1799
|
-
button.command();
|
1800
|
-
}
|
1801
|
-
return false;
|
1802
|
-
}
|
1803
|
-
this.editor.selection.save();
|
1804
|
-
if ($blockEl.next('li').length > 0) {
|
1805
|
-
$('<' + $parent[0].tagName + '/>').append($blockEl.nextAll('li')).appendTo($blockEl);
|
1806
|
-
}
|
1807
|
-
$blockEl.insertAfter($parentLi);
|
1808
|
-
if ($parent.children('li').length < 1) {
|
1809
|
-
$parent.remove();
|
1810
|
-
}
|
1811
|
-
this.editor.selection.restore();
|
1812
|
-
} else if ($blockEl.is('p, h1, h2, h3, h4')) {
|
1813
|
-
indentLevel = (ref = $blockEl.attr('data-indent')) != null ? ref : 0;
|
1814
|
-
indentLevel = indentLevel * 1 - 1;
|
1815
|
-
if (indentLevel < 0) {
|
1816
|
-
indentLevel = 0;
|
1817
|
-
}
|
1818
|
-
$blockEl.attr('data-indent', indentLevel);
|
1819
|
-
} else if ($blockEl.is('table')) {
|
1820
|
-
range = this.editor.selection.getRange();
|
1821
|
-
$td = $(range.commonAncestorContainer).closest('td');
|
1822
|
-
$prevTd = $td.prev('td');
|
1823
|
-
if (!($prevTd.length > 0)) {
|
1824
|
-
$prevTd = $td.parent('tr').prev('tr').find('td:last');
|
1825
|
-
}
|
1826
|
-
if (!($td.length > 0 && $prevTd.length > 0)) {
|
1827
|
-
return false;
|
1828
|
-
}
|
1829
|
-
this.editor.selection.setRangeAtEndOf($prevTd);
|
1830
|
-
} else {
|
1831
|
-
return false;
|
1832
|
-
}
|
1833
|
-
this.editor.trigger('valuechanged');
|
1834
|
-
return true;
|
1835
|
-
};
|
1836
|
-
|
1837
1721
|
Util.prototype.dataURLtoBlob = function(dataURL) {
|
1838
1722
|
var BlobBuilder, arrayBuffer, bb, byteString, hasArrayBufferViewSupport, hasBlobConstructor, i, intArray, j, mimeString, ref;
|
1839
1723
|
hasBlobConstructor = window.Blob && (function() {
|
@@ -2129,6 +2013,179 @@ Toolbar = (function(superClass) {
|
|
2129
2013
|
|
2130
2014
|
})(SimpleModule);
|
2131
2015
|
|
2016
|
+
Indentation = (function(superClass) {
|
2017
|
+
extend(Indentation, superClass);
|
2018
|
+
|
2019
|
+
function Indentation() {
|
2020
|
+
return Indentation.__super__.constructor.apply(this, arguments);
|
2021
|
+
}
|
2022
|
+
|
2023
|
+
Indentation.pluginName = 'Indentation';
|
2024
|
+
|
2025
|
+
Indentation.prototype.opts = {
|
2026
|
+
tabIndent: true
|
2027
|
+
};
|
2028
|
+
|
2029
|
+
Indentation.prototype._init = function() {
|
2030
|
+
this.editor = this._module;
|
2031
|
+
return this.editor.inputManager.addKeystrokeHandler('9', '*', (function(_this) {
|
2032
|
+
return function(e) {
|
2033
|
+
var codeButton;
|
2034
|
+
codeButton = _this.editor.toolbar.findButton('code');
|
2035
|
+
if (!(_this.opts.tabIndent || (codeButton && codeButton.active))) {
|
2036
|
+
return;
|
2037
|
+
}
|
2038
|
+
return _this.indent(e.shiftKey);
|
2039
|
+
};
|
2040
|
+
})(this));
|
2041
|
+
};
|
2042
|
+
|
2043
|
+
Indentation.prototype.indent = function(isBackward) {
|
2044
|
+
var $blockEls, $endBlock, $startBlock, range, result;
|
2045
|
+
range = this.editor.selection.getRange();
|
2046
|
+
if (!range) {
|
2047
|
+
return;
|
2048
|
+
}
|
2049
|
+
$startBlock = this.editor.util.closestBlockEl(range.startContainer);
|
2050
|
+
$endBlock = this.editor.util.closestBlockEl(range.endContainer);
|
2051
|
+
if (!($startBlock.is('li') && $endBlock.is('li') && $startBlock.parent().is($endBlock.parent()))) {
|
2052
|
+
$startBlock = this.editor.util.furthestBlockEl($startBlock);
|
2053
|
+
$endBlock = this.editor.util.furthestBlockEl($endBlock);
|
2054
|
+
}
|
2055
|
+
if ($startBlock.is($endBlock)) {
|
2056
|
+
$blockEls = $startBlock;
|
2057
|
+
} else {
|
2058
|
+
$blockEls = $startBlock.nextUntil($endBlock).add($startBlock).add($endBlock);
|
2059
|
+
}
|
2060
|
+
result = false;
|
2061
|
+
$blockEls.each((function(_this) {
|
2062
|
+
return function(i, blockEl) {
|
2063
|
+
return result = isBackward ? _this.outdentBlock(blockEl) : _this.indentBlock(blockEl);
|
2064
|
+
};
|
2065
|
+
})(this));
|
2066
|
+
return result;
|
2067
|
+
};
|
2068
|
+
|
2069
|
+
Indentation.prototype.indentBlock = function(blockEl) {
|
2070
|
+
var $blockEl, $childList, $nextTd, $parentLi, $pre, $td, indentLevel, range, tagName;
|
2071
|
+
$blockEl = $(blockEl);
|
2072
|
+
if (!$blockEl.length) {
|
2073
|
+
return;
|
2074
|
+
}
|
2075
|
+
if ($blockEl.is('pre')) {
|
2076
|
+
range = this.editor.selection.getRange();
|
2077
|
+
$pre = $(range.commonAncestorContainer);
|
2078
|
+
if (!($pre.is($blockEl) || $pre.closest('pre').is($blockEl))) {
|
2079
|
+
return;
|
2080
|
+
}
|
2081
|
+
this.indentText(range);
|
2082
|
+
} else if ($blockEl.is('li')) {
|
2083
|
+
$parentLi = $blockEl.prev('li');
|
2084
|
+
if ($parentLi.length < 1) {
|
2085
|
+
return;
|
2086
|
+
}
|
2087
|
+
this.editor.selection.save();
|
2088
|
+
tagName = $blockEl.parent()[0].tagName;
|
2089
|
+
$childList = $parentLi.children('ul, ol');
|
2090
|
+
if ($childList.length > 0) {
|
2091
|
+
$childList.append($blockEl);
|
2092
|
+
} else {
|
2093
|
+
$('<' + tagName + '/>').append($blockEl).appendTo($parentLi);
|
2094
|
+
}
|
2095
|
+
this.editor.selection.restore();
|
2096
|
+
} else if ($blockEl.is('p, h1, h2, h3, h4')) {
|
2097
|
+
indentLevel = $blockEl.attr('data-indent') || 0;
|
2098
|
+
indentLevel = Math.min(indentLevel * 1 + 1, 10);
|
2099
|
+
$blockEl.attr('data-indent', indentLevel);
|
2100
|
+
} else if ($blockEl.is('table')) {
|
2101
|
+
range = this.editor.selection.getRange();
|
2102
|
+
$td = $(range.commonAncestorContainer).closest('td');
|
2103
|
+
$nextTd = $td.next('td');
|
2104
|
+
if (!($nextTd.length > 0)) {
|
2105
|
+
$nextTd = $td.parent('tr').next('tr').find('td:first');
|
2106
|
+
}
|
2107
|
+
if (!($td.length > 0 && $nextTd.length > 0)) {
|
2108
|
+
return false;
|
2109
|
+
}
|
2110
|
+
this.editor.selection.setRangeAtEndOf($nextTd);
|
2111
|
+
}
|
2112
|
+
return true;
|
2113
|
+
};
|
2114
|
+
|
2115
|
+
Indentation.prototype.indentText = function(range) {
|
2116
|
+
var text, textNode;
|
2117
|
+
text = range.toString().replace(/^(?=.+)/mg, '\u00A0\u00A0');
|
2118
|
+
textNode = document.createTextNode(text || '\u00A0\u00A0');
|
2119
|
+
range.deleteContents();
|
2120
|
+
range.insertNode(textNode);
|
2121
|
+
if (text) {
|
2122
|
+
range.selectNode(textNode);
|
2123
|
+
return this.editor.selection.selectRange(range);
|
2124
|
+
} else {
|
2125
|
+
return this.editor.selection.setRangeAfter(textNode);
|
2126
|
+
}
|
2127
|
+
};
|
2128
|
+
|
2129
|
+
Indentation.prototype.outdentBlock = function(blockEl) {
|
2130
|
+
var $blockEl, $parent, $parentLi, $pre, $prevTd, $td, button, indentLevel, range, ref;
|
2131
|
+
$blockEl = $(blockEl);
|
2132
|
+
if (!($blockEl && $blockEl.length > 0)) {
|
2133
|
+
return;
|
2134
|
+
}
|
2135
|
+
if ($blockEl.is('pre')) {
|
2136
|
+
range = this.editor.selection.getRange();
|
2137
|
+
$pre = $(range.commonAncestorContainer);
|
2138
|
+
if (!($pre.is($blockEl) || $pre.closest('pre').is($blockEl))) {
|
2139
|
+
return;
|
2140
|
+
}
|
2141
|
+
this.outdentText(range);
|
2142
|
+
} else if ($blockEl.is('li')) {
|
2143
|
+
$parent = $blockEl.parent();
|
2144
|
+
$parentLi = $parent.parent('li');
|
2145
|
+
if ($parentLi.length < 1) {
|
2146
|
+
button = this.editor.toolbar.findButton($parent[0].tagName.toLowerCase());
|
2147
|
+
if (button != null) {
|
2148
|
+
button.command();
|
2149
|
+
}
|
2150
|
+
return;
|
2151
|
+
}
|
2152
|
+
this.editor.selection.save();
|
2153
|
+
if ($blockEl.next('li').length > 0) {
|
2154
|
+
$('<' + $parent[0].tagName + '/>').append($blockEl.nextAll('li')).appendTo($blockEl);
|
2155
|
+
}
|
2156
|
+
$blockEl.insertAfter($parentLi);
|
2157
|
+
if ($parent.children('li').length < 1) {
|
2158
|
+
$parent.remove();
|
2159
|
+
}
|
2160
|
+
this.editor.selection.restore();
|
2161
|
+
} else if ($blockEl.is('p, h1, h2, h3, h4')) {
|
2162
|
+
indentLevel = (ref = $blockEl.attr('data-indent')) != null ? ref : 0;
|
2163
|
+
indentLevel = indentLevel * 1 - 1;
|
2164
|
+
if (indentLevel < 0) {
|
2165
|
+
indentLevel = 0;
|
2166
|
+
}
|
2167
|
+
$blockEl.attr('data-indent', indentLevel);
|
2168
|
+
} else if ($blockEl.is('table')) {
|
2169
|
+
range = this.editor.selection.getRange();
|
2170
|
+
$td = $(range.commonAncestorContainer).closest('td');
|
2171
|
+
$prevTd = $td.prev('td');
|
2172
|
+
if (!($prevTd.length > 0)) {
|
2173
|
+
$prevTd = $td.parent('tr').prev('tr').find('td:last');
|
2174
|
+
}
|
2175
|
+
if (!($td.length > 0 && $prevTd.length > 0)) {
|
2176
|
+
return;
|
2177
|
+
}
|
2178
|
+
this.editor.selection.setRangeAtEndOf($prevTd);
|
2179
|
+
}
|
2180
|
+
return true;
|
2181
|
+
};
|
2182
|
+
|
2183
|
+
Indentation.prototype.outdentText = function(range) {};
|
2184
|
+
|
2185
|
+
return Indentation;
|
2186
|
+
|
2187
|
+
})(SimpleModule);
|
2188
|
+
|
2132
2189
|
Simditor = (function(superClass) {
|
2133
2190
|
extend(Simditor, superClass);
|
2134
2191
|
|
@@ -2150,6 +2207,8 @@ Simditor = (function(superClass) {
|
|
2150
2207
|
|
2151
2208
|
Simditor.connect(Toolbar);
|
2152
2209
|
|
2210
|
+
Simditor.connect(Indentation);
|
2211
|
+
|
2153
2212
|
Simditor.count = 0;
|
2154
2213
|
|
2155
2214
|
Simditor.prototype.opts = {
|
@@ -2157,8 +2216,7 @@ Simditor = (function(superClass) {
|
|
2157
2216
|
placeholder: '',
|
2158
2217
|
defaultImage: 'images/image.png',
|
2159
2218
|
params: {},
|
2160
|
-
upload: false
|
2161
|
-
tabIndent: true
|
2219
|
+
upload: false
|
2162
2220
|
};
|
2163
2221
|
|
2164
2222
|
Simditor.prototype._init = function() {
|
@@ -2366,6 +2424,7 @@ Simditor.i18n = {
|
|
2366
2424
|
'uploadError': '上传出错了',
|
2367
2425
|
'imageUrl': '图片地址',
|
2368
2426
|
'imageSize': '图片尺寸',
|
2427
|
+
'imageAlt': '图片描述',
|
2369
2428
|
'restoreImageSize': '还原图片尺寸',
|
2370
2429
|
'uploading': '正在上传',
|
2371
2430
|
'indent': '向右缩进',
|
@@ -4231,51 +4290,28 @@ ImagePopover = (function(superClass) {
|
|
4231
4290
|
|
4232
4291
|
ImagePopover.prototype.render = function() {
|
4233
4292
|
var tpl;
|
4234
|
-
tpl = "<div class=\"link-settings\">\n <div class=\"settings-field\">\n <label>" + (this._t('imageUrl')) + "</label>\n <input class=\"image-src\" type=\"text\" tabindex=\"1\" />\n <a class=\"btn-upload\" href=\"javascript:;\" title=\"" + (this._t('uploadImage')) + "\" tabindex=\"-1\">\n <span class=\"simditor-icon simditor-icon-upload\"></span>\n </a>\n </div>\n <div class=\"settings-field\">\n <label>" + (this._t('imageSize')) + "</label>\n <input class=\"image-size\" id=\"image-width\" type=\"text\" tabindex=\"2\" />\n <span class=\"times\">×</span>\n <input class=\"image-size\" id=\"image-height\" type=\"text\" tabindex=\"3\" />\n <a class=\"btn-restore\" href=\"javascript:;\" title=\"" + (this._t('restoreImageSize')) + "\" tabindex=\"-1\">\n <span class=\"simditor-icon simditor-icon-undo\"></span>\n </a>\n </div>\n</div>";
|
4293
|
+
tpl = "<div class=\"link-settings\">\n <div class=\"settings-field\">\n <label>" + (this._t('imageUrl')) + "</label>\n <input class=\"image-src\" type=\"text\" tabindex=\"1\" />\n <a class=\"btn-upload\" href=\"javascript:;\" title=\"" + (this._t('uploadImage')) + "\" tabindex=\"-1\">\n <span class=\"simditor-icon simditor-icon-upload\"></span>\n </a>\n </div>\n <div class='settings-field'>\n <label>" + (this._t('imageAlt')) + "</label>\n <input class=\"image-alt\" id=\"image-alt\" type=\"text\" tabindex=\"1\" />\n </div>\n <div class=\"settings-field\">\n <label>" + (this._t('imageSize')) + "</label>\n <input class=\"image-size\" id=\"image-width\" type=\"text\" tabindex=\"2\" />\n <span class=\"times\">×</span>\n <input class=\"image-size\" id=\"image-height\" type=\"text\" tabindex=\"3\" />\n <a class=\"btn-restore\" href=\"javascript:;\" title=\"" + (this._t('restoreImageSize')) + "\" tabindex=\"-1\">\n <span class=\"simditor-icon simditor-icon-undo\"></span>\n </a>\n </div>\n</div>";
|
4235
4294
|
this.el.addClass('image-popover').append(tpl);
|
4236
4295
|
this.srcEl = this.el.find('.image-src');
|
4296
|
+
this.widthEl = this.el.find('#image-width');
|
4297
|
+
this.heightEl = this.el.find('#image-height');
|
4298
|
+
this.altEl = this.el.find('#image-alt');
|
4237
4299
|
this.srcEl.on('keydown', (function(_this) {
|
4238
4300
|
return function(e) {
|
4239
|
-
|
4240
|
-
if (!(e.which === 13 || e.which === 27)) {
|
4301
|
+
if (!(e.which === 13 && !_this.target.hasClass('uploading'))) {
|
4241
4302
|
return;
|
4242
4303
|
}
|
4243
4304
|
e.preventDefault();
|
4244
|
-
|
4245
|
-
|
4246
|
-
|
4247
|
-
|
4248
|
-
|
4249
|
-
|
4250
|
-
|
4251
|
-
|
4252
|
-
hideAndFocus();
|
4253
|
-
return;
|
4254
|
-
}
|
4255
|
-
return _this.button.loadImage(_this.target, src, function(success) {
|
4256
|
-
var blob;
|
4257
|
-
if (!success) {
|
4258
|
-
return;
|
4259
|
-
}
|
4260
|
-
if (/^data:image/.test(src)) {
|
4261
|
-
blob = _this.editor.util.dataURLtoBlob(src);
|
4262
|
-
blob.name = "Base64 Image.png";
|
4263
|
-
return _this.editor.uploader.upload(blob, {
|
4264
|
-
inline: true,
|
4265
|
-
img: _this.target
|
4266
|
-
});
|
4267
|
-
} else {
|
4268
|
-
hideAndFocus();
|
4269
|
-
return _this.editor.trigger('valuechanged');
|
4270
|
-
}
|
4271
|
-
});
|
4272
|
-
} else {
|
4273
|
-
return hideAndFocus();
|
4274
|
-
}
|
4305
|
+
_this.button.editor.body.focus();
|
4306
|
+
_this.button.editor.selection.setRangeAfter(_this.target);
|
4307
|
+
return _this.hide();
|
4308
|
+
};
|
4309
|
+
})(this));
|
4310
|
+
this.srcEl.on('blur', (function(_this) {
|
4311
|
+
return function(e) {
|
4312
|
+
return _this._loadImage(_this.srcEl.val());
|
4275
4313
|
};
|
4276
4314
|
})(this));
|
4277
|
-
this.widthEl = this.el.find('#image-width');
|
4278
|
-
this.heightEl = this.el.find('#image-height');
|
4279
4315
|
this.el.find('.image-size').on('blur', (function(_this) {
|
4280
4316
|
return function(e) {
|
4281
4317
|
_this._resizeImg($(e.currentTarget));
|
@@ -4310,6 +4346,25 @@ ImagePopover = (function(superClass) {
|
|
4310
4346
|
}
|
4311
4347
|
};
|
4312
4348
|
})(this));
|
4349
|
+
this.altEl.on('keydown', (function(_this) {
|
4350
|
+
return function(e) {
|
4351
|
+
if (e.which === 13) {
|
4352
|
+
e.preventDefault();
|
4353
|
+
_this.button.editor.body.focus();
|
4354
|
+
_this.button.editor.selection.setRangeAfter(_this.target);
|
4355
|
+
return _this.hide();
|
4356
|
+
}
|
4357
|
+
};
|
4358
|
+
})(this));
|
4359
|
+
this.altEl.on('keyup', (function(_this) {
|
4360
|
+
return function(e) {
|
4361
|
+
if (e.which === 13 || e.which === 27 || e.which === 9) {
|
4362
|
+
return;
|
4363
|
+
}
|
4364
|
+
_this.alt = _this.altEl.val();
|
4365
|
+
return _this.target.attr('alt', _this.alt);
|
4366
|
+
};
|
4367
|
+
})(this));
|
4313
4368
|
this.el.find('.btn-restore').on('click', (function(_this) {
|
4314
4369
|
return function(e) {
|
4315
4370
|
_this._restoreImg();
|
@@ -4375,11 +4430,12 @@ ImagePopover = (function(superClass) {
|
|
4375
4430
|
this.widthEl.val(width);
|
4376
4431
|
}
|
4377
4432
|
if (!onlySetVal) {
|
4378
|
-
|
4433
|
+
this.target.attr({
|
4379
4434
|
width: width || value,
|
4380
4435
|
height: height || value
|
4381
4436
|
});
|
4382
4437
|
}
|
4438
|
+
return this.editor.trigger('valuechanged');
|
4383
4439
|
};
|
4384
4440
|
|
4385
4441
|
ImagePopover.prototype._restoreImg = function() {
|
@@ -4390,7 +4446,45 @@ ImagePopover = (function(superClass) {
|
|
4390
4446
|
height: size[1] * 1
|
4391
4447
|
});
|
4392
4448
|
this.widthEl.val(size[0]);
|
4393
|
-
|
4449
|
+
this.heightEl.val(size[1]);
|
4450
|
+
return this.editor.trigger('valuechanged');
|
4451
|
+
};
|
4452
|
+
|
4453
|
+
ImagePopover.prototype._loadImage = function(src, callback) {
|
4454
|
+
if (/^data:image/.test(src) && !this.editor.uploader) {
|
4455
|
+
if (callback) {
|
4456
|
+
callback(false);
|
4457
|
+
}
|
4458
|
+
return;
|
4459
|
+
}
|
4460
|
+
return this.button.loadImage(this.target, src, (function(_this) {
|
4461
|
+
return function(img) {
|
4462
|
+
var blob;
|
4463
|
+
if (!img) {
|
4464
|
+
return;
|
4465
|
+
}
|
4466
|
+
if (_this.active) {
|
4467
|
+
_this.width = img.width;
|
4468
|
+
_this.height = img.height;
|
4469
|
+
_this.widthEl.val(_this.width);
|
4470
|
+
_this.heightEl.val(_this.height);
|
4471
|
+
_this.target.removeAttr('width').removeAttr('height');
|
4472
|
+
}
|
4473
|
+
if (/^data:image/.test(src)) {
|
4474
|
+
blob = _this.editor.util.dataURLtoBlob(src);
|
4475
|
+
blob.name = "Base64 Image.png";
|
4476
|
+
_this.editor.uploader.upload(blob, {
|
4477
|
+
inline: true,
|
4478
|
+
img: _this.target
|
4479
|
+
});
|
4480
|
+
} else {
|
4481
|
+
_this.editor.trigger('valuechanged');
|
4482
|
+
}
|
4483
|
+
if (callback) {
|
4484
|
+
return callback(img);
|
4485
|
+
}
|
4486
|
+
};
|
4487
|
+
})(this));
|
4394
4488
|
};
|
4395
4489
|
|
4396
4490
|
ImagePopover.prototype.show = function() {
|
@@ -4400,12 +4494,14 @@ ImagePopover = (function(superClass) {
|
|
4400
4494
|
$img = this.target;
|
4401
4495
|
this.width = $img.width();
|
4402
4496
|
this.height = $img.height();
|
4497
|
+
this.alt = $img.attr('alt');
|
4403
4498
|
if ($img.hasClass('uploading')) {
|
4404
4499
|
return this.srcEl.val(this._t('uploading')).prop('disabled', true);
|
4405
4500
|
} else {
|
4406
4501
|
this.srcEl.val($img.attr('src')).prop('disabled', false);
|
4407
4502
|
this.widthEl.val(this.width);
|
4408
|
-
|
4503
|
+
this.heightEl.val(this.height);
|
4504
|
+
return this.altEl.val(this.alt);
|
4409
4505
|
}
|
4410
4506
|
};
|
4411
4507
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simditor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wentao Liu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-04-11 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Rails assets wrapper for https://github.com/mycolorway/simditor
|
14
14
|
email:
|
@@ -22,7 +22,6 @@ files:
|
|
22
22
|
- lib/simditor.rb
|
23
23
|
- lib/simditor/engine.rb
|
24
24
|
- lib/simditor/version.rb
|
25
|
-
- lib/simditor/version.rb~
|
26
25
|
- vendor/assets/images/upload-loading.png
|
27
26
|
- vendor/assets/javascripts/simditor.js
|
28
27
|
- vendor/assets/javascripts/simditor/hotkeys.js
|
@@ -52,7 +51,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
52
51
|
version: '0'
|
53
52
|
requirements: []
|
54
53
|
rubyforge_project:
|
55
|
-
rubygems_version: 2.4.
|
54
|
+
rubygems_version: 2.4.6
|
56
55
|
signing_key:
|
57
56
|
specification_version: 4
|
58
57
|
summary: A simple editor designed by mycolorway http://mycolorway.github.io/simditor/demo.html
|