markitup-rails 1.0.1 → 1.1.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.
- data/lib/markitup/rails/version.rb +1 -1
- data/vendor/assets/javascripts/markitup.js +79 -48
- metadata +2 -2
@@ -12,10 +12,10 @@
|
|
12
12
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
13
13
|
// copies of the Software, and to permit persons to whom the Software is
|
14
14
|
// furnished to do so, subject to the following conditions:
|
15
|
-
//
|
15
|
+
//
|
16
16
|
// The above copyright notice and this permission notice shall be included in
|
17
17
|
// all copies or substantial portions of the Software.
|
18
|
-
//
|
18
|
+
//
|
19
19
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
20
20
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
21
21
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
@@ -31,7 +31,7 @@
|
|
31
31
|
if (typeof settings == 'string') {
|
32
32
|
method = settings;
|
33
33
|
params = extraSettings;
|
34
|
-
}
|
34
|
+
}
|
35
35
|
|
36
36
|
options = { id: '',
|
37
37
|
nameSpace: '',
|
@@ -66,6 +66,35 @@
|
|
66
66
|
});
|
67
67
|
}
|
68
68
|
|
69
|
+
// Quick patch to keep compatibility with jQuery 1.9
|
70
|
+
var uaMatch = function(ua) {
|
71
|
+
ua = ua.toLowerCase();
|
72
|
+
|
73
|
+
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
|
74
|
+
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
|
75
|
+
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
|
76
|
+
/(msie) ([\w.]+)/.exec(ua) ||
|
77
|
+
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
|
78
|
+
[];
|
79
|
+
|
80
|
+
return {
|
81
|
+
browser: match[ 1 ] || "",
|
82
|
+
version: match[ 2 ] || "0"
|
83
|
+
};
|
84
|
+
};
|
85
|
+
var matched = uaMatch( navigator.userAgent );
|
86
|
+
var browser = {};
|
87
|
+
|
88
|
+
if (matched.browser) {
|
89
|
+
browser[matched.browser] = true;
|
90
|
+
browser.version = matched.version;
|
91
|
+
}
|
92
|
+
if (browser.chrome) {
|
93
|
+
browser.webkit = true;
|
94
|
+
} else if (browser.webkit) {
|
95
|
+
browser.safari = true;
|
96
|
+
}
|
97
|
+
|
69
98
|
return this.each(function() {
|
70
99
|
var $$, textarea, levels, scrollPosition, caretPosition, caretOffset,
|
71
100
|
clicked, hash, header, footer, previewWindow, template, iFrame, abort;
|
@@ -87,7 +116,7 @@
|
|
87
116
|
case 'insert':
|
88
117
|
markup(params);
|
89
118
|
break;
|
90
|
-
default:
|
119
|
+
default:
|
91
120
|
$.error('Method ' + method + ' does not exist on jQuery.markItUp');
|
92
121
|
}
|
93
122
|
return;
|
@@ -126,7 +155,7 @@
|
|
126
155
|
footer = $('<div class="markItUpFooter"></div>').insertAfter($$);
|
127
156
|
|
128
157
|
// add the resize handle after textarea
|
129
|
-
if (options.resizeHandle === true &&
|
158
|
+
if (options.resizeHandle === true && browser.safari !== true) {
|
130
159
|
resizeHandle = $('<div class="markItUpResizeHandle"></div>')
|
131
160
|
.insertAfter($$)
|
132
161
|
.bind("mousedown.markItUp", function(e) {
|
@@ -146,7 +175,7 @@
|
|
146
175
|
|
147
176
|
// listen key events
|
148
177
|
$$.bind('keydown.markItUp', keyPressed).bind('keyup', keyPressed);
|
149
|
-
|
178
|
+
|
150
179
|
// bind an event to catch external calls
|
151
180
|
$$.bind("insertion.markItUp", function(e, settings) {
|
152
181
|
if (settings.target !== false) {
|
@@ -185,8 +214,8 @@
|
|
185
214
|
li = $('<li class="markItUpButton markItUpButton'+t+(i)+' '+(button.className||'')+'"><a href="" '+key+' title="'+title+'">'+(button.name||'')+'</a></li>')
|
186
215
|
.bind("contextmenu.markItUp", function() { // prevent contextmenu on mac and allow ctrl+click
|
187
216
|
return false;
|
188
|
-
}).bind('click.markItUp', function() {
|
189
|
-
|
217
|
+
}).bind('click.markItUp', function(e) {
|
218
|
+
e.preventDefault();
|
190
219
|
}).bind("focusin.markItUp", function(){
|
191
220
|
$$.focus();
|
192
221
|
}).bind('mouseup', function() {
|
@@ -209,7 +238,7 @@
|
|
209
238
|
$(li).addClass('markItUpDropMenu').append(dropMenus(button.dropMenu));
|
210
239
|
}
|
211
240
|
}
|
212
|
-
});
|
241
|
+
});
|
213
242
|
levels.pop();
|
214
243
|
return ul;
|
215
244
|
}
|
@@ -264,7 +293,7 @@
|
|
264
293
|
var openBlockWith = prepare(clicked.openBlockWith);
|
265
294
|
var closeBlockWith = prepare(clicked.closeBlockWith);
|
266
295
|
var multiline = clicked.multiline;
|
267
|
-
|
296
|
+
|
268
297
|
if (replaceWith !== "") {
|
269
298
|
block = openWith + replaceWith + closeWith;
|
270
299
|
} else if (selection === '' && placeHolder !== '') {
|
@@ -273,11 +302,11 @@
|
|
273
302
|
string = string || selection;
|
274
303
|
|
275
304
|
var lines = [string], blocks = [];
|
276
|
-
|
305
|
+
|
277
306
|
if (multiline === true) {
|
278
307
|
lines = string.split(/\r?\n/);
|
279
308
|
}
|
280
|
-
|
309
|
+
|
281
310
|
for (var l = 0; l < lines.length; l++) {
|
282
311
|
line = lines[l];
|
283
312
|
var trailingSpaces;
|
@@ -287,17 +316,19 @@
|
|
287
316
|
blocks.push(openWith + line + closeWith);
|
288
317
|
}
|
289
318
|
}
|
290
|
-
|
319
|
+
|
291
320
|
block = blocks.join("\n");
|
292
321
|
}
|
293
322
|
|
294
323
|
block = openBlockWith + block + closeBlockWith;
|
295
324
|
|
296
|
-
return { block:block,
|
297
|
-
|
298
|
-
|
325
|
+
return { block:block,
|
326
|
+
openBlockWith:openBlockWith,
|
327
|
+
openWith:openWith,
|
328
|
+
replaceWith:replaceWith,
|
299
329
|
placeHolder:placeHolder,
|
300
|
-
closeWith:closeWith
|
330
|
+
closeWith:closeWith,
|
331
|
+
closeBlockWith:closeBlockWith
|
301
332
|
};
|
302
333
|
}
|
303
334
|
|
@@ -306,13 +337,13 @@
|
|
306
337
|
var len, j, n, i;
|
307
338
|
hash = clicked = button;
|
308
339
|
get();
|
309
|
-
$.extend(hash, { line:"",
|
340
|
+
$.extend(hash, { line:"",
|
310
341
|
root:options.root,
|
311
|
-
textarea:textarea,
|
312
|
-
selection:(selection||''),
|
342
|
+
textarea:textarea,
|
343
|
+
selection:(selection||''),
|
313
344
|
caretPosition:caretPosition,
|
314
|
-
ctrlKey:ctrlKey,
|
315
|
-
shiftKey:shiftKey,
|
345
|
+
ctrlKey:ctrlKey,
|
346
|
+
shiftKey:shiftKey,
|
316
347
|
altKey:altKey
|
317
348
|
}
|
318
349
|
);
|
@@ -321,7 +352,7 @@
|
|
321
352
|
prepare(clicked.beforeInsert);
|
322
353
|
if ((ctrlKey === true && shiftKey === true) || button.multiline === true) {
|
323
354
|
prepare(clicked.beforeMultiInsert);
|
324
|
-
}
|
355
|
+
}
|
325
356
|
$.extend(hash, { line:1 });
|
326
357
|
|
327
358
|
if ((ctrlKey === true && shiftKey === true)) {
|
@@ -337,7 +368,7 @@
|
|
337
368
|
|
338
369
|
string = { block:lines.join('\n')};
|
339
370
|
start = caretPosition;
|
340
|
-
len = string.block.length + ((
|
371
|
+
len = string.block.length + ((browser.opera) ? n-1 : 0);
|
341
372
|
} else if (ctrlKey === true) {
|
342
373
|
string = build(selection);
|
343
374
|
start = caretPosition + string.openWith.length;
|
@@ -357,9 +388,9 @@
|
|
357
388
|
}
|
358
389
|
if ((selection === '' && string.replaceWith === '')) {
|
359
390
|
caretOffset += fixOperaBug(string.block);
|
360
|
-
|
361
|
-
start = caretPosition + string.openWith.length;
|
362
|
-
len = string.block.length - string.openWith.length - string.closeWith.length;
|
391
|
+
|
392
|
+
start = caretPosition + string.openBlockWith.length + string.openWith.length;
|
393
|
+
len = string.block.length - string.openBlockWith.length - string.openWith.length - string.closeWith.length - string.closeBlockWith.length;
|
363
394
|
|
364
395
|
caretOffset = $$.val().substring(caretPosition, $$.val().length).length;
|
365
396
|
caretOffset -= fixOperaBug($$.val().substring(0, caretPosition));
|
@@ -385,30 +416,30 @@
|
|
385
416
|
|
386
417
|
// refresh preview if opened
|
387
418
|
if (previewWindow && options.previewAutoRefresh) {
|
388
|
-
refreshPreview();
|
419
|
+
refreshPreview();
|
389
420
|
}
|
390
|
-
|
421
|
+
|
391
422
|
// reinit keyevent
|
392
423
|
shiftKey = altKey = ctrlKey = abort = false;
|
393
424
|
}
|
394
425
|
|
395
426
|
// Substract linefeed in Opera
|
396
427
|
function fixOperaBug(string) {
|
397
|
-
if (
|
428
|
+
if (browser.opera) {
|
398
429
|
return string.length - string.replace(/\n*/g, '').length;
|
399
430
|
}
|
400
431
|
return 0;
|
401
432
|
}
|
402
433
|
// Substract linefeed in IE
|
403
434
|
function fixIeBug(string) {
|
404
|
-
if (
|
435
|
+
if (browser.msie) {
|
405
436
|
return string.length - string.replace(/\r*/g, '').length;
|
406
437
|
}
|
407
438
|
return 0;
|
408
439
|
}
|
409
|
-
|
440
|
+
|
410
441
|
// add markup
|
411
|
-
function insert(block) {
|
442
|
+
function insert(block) {
|
412
443
|
if (document.selection) {
|
413
444
|
var newSelection = document.selection.createRange();
|
414
445
|
newSelection.text = block;
|
@@ -421,13 +452,13 @@
|
|
421
452
|
function set(start, len) {
|
422
453
|
if (textarea.createTextRange){
|
423
454
|
// quick fix to make it work on Opera 9.5
|
424
|
-
if (
|
455
|
+
if (browser.opera && browser.version >= 9.5 && len == 0) {
|
425
456
|
return false;
|
426
457
|
}
|
427
458
|
range = textarea.createTextRange();
|
428
459
|
range.collapse(true);
|
429
|
-
range.moveStart('character', start);
|
430
|
-
range.moveEnd('character', len);
|
460
|
+
range.moveStart('character', start);
|
461
|
+
range.moveEnd('character', len);
|
431
462
|
range.select();
|
432
463
|
} else if (textarea.setSelectionRange ){
|
433
464
|
textarea.setSelectionRange(start, start + len);
|
@@ -443,7 +474,7 @@
|
|
443
474
|
scrollPosition = textarea.scrollTop;
|
444
475
|
if (document.selection) {
|
445
476
|
selection = document.selection.createRange().text;
|
446
|
-
if (
|
477
|
+
if (browser.msie) { // ie
|
447
478
|
var range = document.selection.createRange(), rangeCopy = range.duplicate();
|
448
479
|
rangeCopy.moveToElementText(textarea);
|
449
480
|
caretPosition = -1;
|
@@ -458,7 +489,7 @@
|
|
458
489
|
caretPosition = textarea.selectionStart;
|
459
490
|
|
460
491
|
selection = textarea.value.substring(caretPosition, textarea.selectionEnd);
|
461
|
-
}
|
492
|
+
}
|
462
493
|
return selection;
|
463
494
|
}
|
464
495
|
|
@@ -480,7 +511,7 @@
|
|
480
511
|
iFrame.insertAfter(footer);
|
481
512
|
} else {
|
482
513
|
iFrame.insertBefore(header);
|
483
|
-
}
|
514
|
+
}
|
484
515
|
previewWindow = iFrame[iFrame.length - 1].contentWindow || frame[iFrame.length - 1];
|
485
516
|
}
|
486
517
|
} else if (altKey === true) {
|
@@ -492,7 +523,7 @@
|
|
492
523
|
previewWindow = iFrame = false;
|
493
524
|
}
|
494
525
|
if (!options.previewAutoRefresh) {
|
495
|
-
refreshPreview();
|
526
|
+
refreshPreview();
|
496
527
|
}
|
497
528
|
if (options.previewInWindow) {
|
498
529
|
previewWindow.focus();
|
@@ -510,7 +541,7 @@
|
|
510
541
|
options.previewHandler( $$.val() );
|
511
542
|
} else if (options.previewParser && typeof options.previewParser === 'function') {
|
512
543
|
var data = options.previewParser( $$.val() );
|
513
|
-
writeInPreview(localize(data, 1) );
|
544
|
+
writeInPreview(localize(data, 1) );
|
514
545
|
} else if (options.previewParserPath !== '') {
|
515
546
|
$.ajax({
|
516
547
|
type: 'POST',
|
@@ -519,7 +550,7 @@
|
|
519
550
|
url: options.previewParserPath,
|
520
551
|
data: options.previewParserVar+'='+encodeURIComponent($$.val()),
|
521
552
|
success: function(data) {
|
522
|
-
writeInPreview( localize(data, 1) );
|
553
|
+
writeInPreview( localize(data, 1) );
|
523
554
|
}
|
524
555
|
});
|
525
556
|
} else {
|
@@ -536,25 +567,25 @@
|
|
536
567
|
}
|
537
568
|
return false;
|
538
569
|
}
|
539
|
-
|
570
|
+
|
540
571
|
function writeInPreview(data) {
|
541
572
|
if (options.previewInElement) {
|
542
573
|
$(options.previewInElement).html(data);
|
543
|
-
} else if (previewWindow && previewWindow.document) {
|
574
|
+
} else if (previewWindow && previewWindow.document) {
|
544
575
|
try {
|
545
576
|
sp = previewWindow.document.documentElement.scrollTop
|
546
577
|
} catch(e) {
|
547
578
|
sp = 0;
|
548
|
-
}
|
579
|
+
}
|
549
580
|
previewWindow.document.open();
|
550
581
|
previewWindow.document.write(data);
|
551
582
|
previewWindow.document.close();
|
552
583
|
previewWindow.document.documentElement.scrollTop = sp;
|
553
584
|
}
|
554
585
|
}
|
555
|
-
|
586
|
+
|
556
587
|
// set keys pressed
|
557
|
-
function keyPressed(e) {
|
588
|
+
function keyPressed(e) {
|
558
589
|
shiftKey = e.shiftKey;
|
559
590
|
altKey = e.altKey;
|
560
591
|
ctrlKey = (!(e.altKey && e.ctrlKey)) ? (e.ctrlKey || e.metaKey) : false;
|
@@ -586,7 +617,7 @@
|
|
586
617
|
}
|
587
618
|
if (e.keyCode === 9) { // Tab key
|
588
619
|
if (shiftKey == true || ctrlKey == true || altKey == true) {
|
589
|
-
return false;
|
620
|
+
return false;
|
590
621
|
}
|
591
622
|
if (caretOffset !== -1) {
|
592
623
|
get();
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: markitup-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-03-08 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|