rails-bootstrap-markdown 0.0.2 → 1.0.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 +7 -0
- data/README.md +3 -3
- data/app/assets/javascripts/bootstrap-markdown.js +61 -54
- data/app/assets/stylesheets/bootstrap-markdown.css.scss +22 -24
- data/lib/rails-bootstrap-markdown/version.rb +1 -1
- metadata +8 -15
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b27bac04a913814ecb58b4abbb151d3e8aac8acb
|
4
|
+
data.tar.gz: 1f18da19cced94651de9f54d38a46e40ae18ae6d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6ef374aaeba24702f1797416d7f1dc329842d934921edf829527f152f4b4236e2566a43ad8737646f8b4f780dfb95844e8b7c2588acf97bf446fb63da91de205
|
7
|
+
data.tar.gz: 265fc5fb77cf588995e50a95980822f1f6e798cce7c7a7a50726f9a0cb4d210bdde2baf7d76926f7d2e1c4bf973ed68b367b94804032d636a91b1b07a0ac52d1
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Rails::Bootstrap::Markdown
|
2
2
|
|
3
|
-
A rails gem for [Bootstrap Markdown](http://toopay.github.io/bootstrap-markdown/), rewritten to SCSS for use with [bootstrap-sass](https://github.com/thomas-mcdonald/bootstrap-sass)
|
3
|
+
A rails gem for [Bootstrap Markdown](http://toopay.github.io/bootstrap-markdown/), rewritten to SCSS for use with [bootstrap-sass](https://github.com/thomas-mcdonald/bootstrap-sass).
|
4
4
|
|
5
5
|
3rd party libraries included:
|
6
6
|
|
@@ -16,7 +16,7 @@ Add this line to your application's Gemfile:
|
|
16
16
|
|
17
17
|
And then execute:
|
18
18
|
|
19
|
-
$ bundle
|
19
|
+
$ bundle install
|
20
20
|
|
21
21
|
Or install it yourself as:
|
22
22
|
|
@@ -33,7 +33,7 @@ Or install it yourself as:
|
|
33
33
|
### Javascript
|
34
34
|
|
35
35
|
```
|
36
|
-
//=
|
36
|
+
//= require bootstrap-markdown
|
37
37
|
```
|
38
38
|
|
39
39
|
## Contributing
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/* ===================================================
|
2
|
-
* bootstrap-markdown.js
|
2
|
+
* bootstrap-markdown.js v2.1.0
|
3
3
|
* http://github.com/toopay/bootstrap-markdown
|
4
4
|
* ===================================================
|
5
5
|
* Copyright 2013 Taufan Aditya
|
@@ -33,7 +33,6 @@
|
|
33
33
|
this.$ns = 'bootstrap-markdown'
|
34
34
|
this.$element = $(element)
|
35
35
|
this.$editable = {el:null, type:null,attrKeys:[], attrValues:[], content:null}
|
36
|
-
this.$cloneEditor = {el:null, type:null,attrKeys:[], attrValues:[], content:null}
|
37
36
|
this.$options = $.extend(true, {}, $.fn.markdown.defaults, options)
|
38
37
|
this.$oldContent = null
|
39
38
|
this.$isPreview = false
|
@@ -86,22 +85,32 @@
|
|
86
85
|
|
87
86
|
for (z=0;z<buttons.length;z++) {
|
88
87
|
var button = buttons[z],
|
88
|
+
buttonToggle = '',
|
89
89
|
buttonHandler = ns+'-'+button.name,
|
90
90
|
btnText = button.btnText ? button.btnText : '',
|
91
|
-
btnClass = button.btnClass ? button.btnClass : 'btn'
|
91
|
+
btnClass = button.btnClass ? button.btnClass : 'btn',
|
92
|
+
tabIndex = button.tabIndex ? button.tabIndex : '-1'
|
93
|
+
|
94
|
+
if (button.toggle == true) {
|
95
|
+
buttonToggle = ' data-toggle="button"'
|
96
|
+
}
|
92
97
|
|
93
98
|
// Attach the button object
|
94
99
|
btnGroupContainer.append('<button class="'
|
95
100
|
+btnClass
|
96
|
-
+' btn-
|
101
|
+
+' btn-default btn-sm" title="'
|
97
102
|
+button.title
|
103
|
+
+'" tabindex="'
|
104
|
+
+tabIndex
|
98
105
|
+'" data-provider="'
|
99
106
|
+ns
|
100
107
|
+'" data-handler="'
|
101
108
|
+buttonHandler
|
102
|
-
+'"
|
109
|
+
+'"'
|
110
|
+
+buttonToggle
|
111
|
+
+'><span class="'
|
103
112
|
+button.icon
|
104
|
-
+'"></
|
113
|
+
+'"></span> '
|
105
114
|
+btnText
|
106
115
|
+'</button>')
|
107
116
|
|
@@ -183,7 +192,7 @@
|
|
183
192
|
if (this.$editor == null) {
|
184
193
|
// Create the panel
|
185
194
|
var editorHeader = $('<div/>', {
|
186
|
-
'class': 'md-header'
|
195
|
+
'class': 'md-header btn-toolbar'
|
187
196
|
})
|
188
197
|
|
189
198
|
// Build the main buttons
|
@@ -292,8 +301,8 @@
|
|
292
301
|
var options = this.$options,
|
293
302
|
callbackContent = options.onPreview(this), // Try to get the content from callback
|
294
303
|
container = this.$textarea,
|
304
|
+
afterContainer = container.next(),
|
295
305
|
replacementContainer = $('<div/>',{'class':'md-preview','data-provider':'markdown-preview'}),
|
296
|
-
cloneEditor = this.$cloneEditor,
|
297
306
|
content
|
298
307
|
|
299
308
|
// Give flag that tell the editor enter preview mode
|
@@ -301,18 +310,6 @@
|
|
301
310
|
// Disable all buttons
|
302
311
|
this.disableButtons('all').enableButtons('cmdPreview')
|
303
312
|
|
304
|
-
// Save the editor
|
305
|
-
cloneEditor.el = container
|
306
|
-
cloneEditor.type = container.prop('tagName').toLowerCase()
|
307
|
-
cloneEditor.content = container.val()
|
308
|
-
|
309
|
-
$(container[0].attributes).each(function(){
|
310
|
-
cloneEditor.attrKeys.push(this.nodeName)
|
311
|
-
cloneEditor.attrValues.push(this.nodeValue)
|
312
|
-
})
|
313
|
-
|
314
|
-
this.$cloneEditor = cloneEditor
|
315
|
-
|
316
313
|
if (typeof callbackContent == 'string') {
|
317
314
|
// Set the content based by callback content
|
318
315
|
content = callbackContent
|
@@ -321,9 +318,19 @@
|
|
321
318
|
content = (typeof markdown == 'object') ? markdown.toHTML(container.val()) : container.val()
|
322
319
|
}
|
323
320
|
|
324
|
-
// Build preview element
|
321
|
+
// Build preview element
|
325
322
|
replacementContainer.html(content)
|
326
|
-
|
323
|
+
|
324
|
+
if (afterContainer && afterContainer.attr('class') == 'md-footer') {
|
325
|
+
// If there is footer element, insert the preview container before it
|
326
|
+
replacementContainer.insertBefore(afterContainer)
|
327
|
+
} else {
|
328
|
+
// Otherwise, just append it after textarea
|
329
|
+
container.parent().append(replacementContainer)
|
330
|
+
}
|
331
|
+
|
332
|
+
// Hide the last-active textarea
|
333
|
+
container.hide()
|
327
334
|
|
328
335
|
// Attach the editor instances
|
329
336
|
replacementContainer.data('markdown',this)
|
@@ -335,26 +342,17 @@
|
|
335
342
|
// Give flag that tell the editor quit preview mode
|
336
343
|
this.$isPreview = false
|
337
344
|
|
338
|
-
//
|
339
|
-
var container = this.$editor.find('div[data-provider="markdown-preview"]')
|
340
|
-
cloneEditor = this.$cloneEditor,
|
341
|
-
oldElement = $('<'+cloneEditor.type+'/>')
|
345
|
+
// Obtain the preview container
|
346
|
+
var container = this.$editor.find('div[data-provider="markdown-preview"]')
|
342
347
|
|
343
|
-
|
344
|
-
|
345
|
-
})
|
346
|
-
|
347
|
-
// Set the editor content
|
348
|
-
oldElement.val(cloneEditor.content)
|
349
|
-
|
350
|
-
// Set the editor data
|
351
|
-
container.replaceWith(oldElement)
|
348
|
+
// Remove the preview container
|
349
|
+
container.remove()
|
352
350
|
|
353
351
|
// Enable all buttons
|
354
352
|
this.enableButtons('all')
|
355
353
|
|
356
354
|
// Back to the editor
|
357
|
-
this.$textarea
|
355
|
+
this.$textarea.show()
|
358
356
|
this.__setListener()
|
359
357
|
|
360
358
|
return this
|
@@ -365,7 +363,7 @@
|
|
365
363
|
}
|
366
364
|
|
367
365
|
, getContent: function() {
|
368
|
-
return
|
366
|
+
return this.$textarea.val()
|
369
367
|
}
|
370
368
|
|
371
369
|
, setContent: function(content) {
|
@@ -548,12 +546,25 @@
|
|
548
546
|
setTimeout(function(){
|
549
547
|
that.setSelection(nextTab.start,nextTab.end)
|
550
548
|
},500)
|
549
|
+
|
550
|
+
blocked = true
|
551
551
|
} else {
|
552
|
-
//
|
553
|
-
|
552
|
+
// The next tab memory contains nothing...
|
553
|
+
// check the cursor position to determine tab action
|
554
|
+
var cursor = this.getSelection()
|
555
|
+
|
556
|
+
if (cursor.start == cursor.end && cursor.end == this.getContent().length) {
|
557
|
+
// The cursor already reach the end of the content
|
558
|
+
blocked = false
|
559
|
+
|
560
|
+
} else {
|
561
|
+
// Put the cursor to the end
|
562
|
+
this.setSelection(this.getContent().length,this.getContent().length)
|
563
|
+
|
564
|
+
blocked = true
|
565
|
+
}
|
554
566
|
}
|
555
567
|
|
556
|
-
blocked = true
|
557
568
|
break
|
558
569
|
|
559
570
|
case 13: // enter
|
@@ -603,11 +614,6 @@
|
|
603
614
|
editor = this.$editor,
|
604
615
|
editable = this.$editable
|
605
616
|
|
606
|
-
// Force to quit preview mode
|
607
|
-
if (this.$isPreview) {
|
608
|
-
this.hidePreview()
|
609
|
-
}
|
610
|
-
|
611
617
|
if (editor.hasClass('active') || this.$element.parent().length == 0) {
|
612
618
|
editor.removeClass('active')
|
613
619
|
|
@@ -672,7 +678,7 @@
|
|
672
678
|
data: [{
|
673
679
|
name: 'cmdBold',
|
674
680
|
title: 'Bold',
|
675
|
-
icon: '
|
681
|
+
icon: 'glyphicon glyphicon-bold',
|
676
682
|
callback: function(e){
|
677
683
|
// Give/remove ** surround the selection
|
678
684
|
var chunk, cursor, selected = e.getSelection(), content = e.getContent()
|
@@ -701,7 +707,7 @@
|
|
701
707
|
},{
|
702
708
|
name: 'cmdItalic',
|
703
709
|
title: 'Italic',
|
704
|
-
icon: '
|
710
|
+
icon: 'glyphicon glyphicon-italic',
|
705
711
|
callback: function(e){
|
706
712
|
// Give/remove * surround the selection
|
707
713
|
var chunk, cursor, selected = e.getSelection(), content = e.getContent()
|
@@ -730,7 +736,7 @@
|
|
730
736
|
},{
|
731
737
|
name: 'cmdHeading',
|
732
738
|
title: 'Heading',
|
733
|
-
icon: '
|
739
|
+
icon: 'glyphicon glyphicon-font',
|
734
740
|
callback: function(e){
|
735
741
|
// Append/remove ### surround the selection
|
736
742
|
var chunk, cursor, selected = e.getSelection(), content = e.getContent(), pointer, prevChar
|
@@ -766,7 +772,7 @@
|
|
766
772
|
data: [{
|
767
773
|
name: 'cmdUrl',
|
768
774
|
title: 'URL/Link',
|
769
|
-
icon: '
|
775
|
+
icon: 'glyphicon glyphicon-globe',
|
770
776
|
callback: function(e){
|
771
777
|
// Give [] surround the selection and prepend the link
|
772
778
|
var chunk, cursor, selected = e.getSelection(), content = e.getContent(), link
|
@@ -792,7 +798,7 @@
|
|
792
798
|
},{
|
793
799
|
name: 'cmdImage',
|
794
800
|
title: 'Image',
|
795
|
-
icon: '
|
801
|
+
icon: 'glyphicon glyphicon-picture',
|
796
802
|
callback: function(e){
|
797
803
|
// Give ![] surround the selection and prepend the image link
|
798
804
|
var chunk, cursor, selected = e.getSelection(), content = e.getContent(), link
|
@@ -824,7 +830,7 @@
|
|
824
830
|
data: [{
|
825
831
|
name: 'cmdList',
|
826
832
|
title: 'List',
|
827
|
-
icon: '
|
833
|
+
icon: 'glyphicon glyphicon-list',
|
828
834
|
callback: function(e){
|
829
835
|
// Prepend/Give - surround the selection
|
830
836
|
var chunk, cursor, selected = e.getSelection(), content = e.getContent()
|
@@ -873,10 +879,11 @@
|
|
873
879
|
name: 'groupUtil',
|
874
880
|
data: [{
|
875
881
|
name: 'cmdPreview',
|
882
|
+
toggle: true,
|
876
883
|
title: 'Preview',
|
877
884
|
btnText: 'Preview',
|
878
|
-
btnClass: 'btn btn-
|
879
|
-
icon: '
|
885
|
+
btnClass: 'btn btn-primary btn-sm',
|
886
|
+
icon: 'glyphicon glyphicon-search',
|
880
887
|
callback: function(e){
|
881
888
|
// Check the preview mode and toggle based on this flag
|
882
889
|
var isPreview = e.$isPreview,content
|
@@ -986,4 +993,4 @@
|
|
986
993
|
})
|
987
994
|
})
|
988
995
|
|
989
|
-
}(window.jQuery);
|
996
|
+
}(window.jQuery);
|
@@ -1,62 +1,60 @@
|
|
1
1
|
/**
|
2
|
-
* Bootstrap-Markdown.
|
3
|
-
*
|
4
|
-
* Converted to SCSS by Danny Tatom @dannytatom
|
2
|
+
* Bootstrap-Markdown.less
|
5
3
|
*
|
6
4
|
* @author Taufan Aditya @taufanaditya
|
7
5
|
* @copyright 2013 Taufan Aditya
|
8
6
|
*/
|
9
7
|
|
10
|
-
@import "bootstrap/variables";
|
11
|
-
@import "bootstrap/mixins";
|
8
|
+
@import "bootstrap/variables"; // Point this into your bootstrap variables
|
9
|
+
@import "bootstrap/mixins"; // Point this into your bootstrap variables
|
10
|
+
|
11
|
+
// Hover state
|
12
|
+
$color: $input-border-focus;
|
13
|
+
$color-rgba: rgba(red($color), green($color), blue($color), .6);
|
12
14
|
|
13
15
|
.md-editor {
|
14
16
|
display: block;
|
15
|
-
border: 1px solid $
|
17
|
+
border: 1px solid $table-border-color;
|
16
18
|
|
17
19
|
.md-header, .md-footer {
|
18
20
|
display: block;
|
19
21
|
padding: 6px 4px;
|
20
|
-
background: $
|
22
|
+
background: $panel-default-heading-bg;
|
21
23
|
}
|
22
24
|
|
23
25
|
.md-preview {
|
24
|
-
background: $
|
25
|
-
border-top: 1px dashed $
|
26
|
-
border-bottom: 1px dashed $
|
26
|
+
background: $panel-bg;
|
27
|
+
border-top: 1px dashed $table-border-color;
|
28
|
+
border-bottom: 1px dashed $table-border-color;
|
27
29
|
min-height: 10px;
|
28
30
|
}
|
29
31
|
|
30
32
|
textarea {
|
31
|
-
font-family: $
|
32
|
-
font-size: $
|
33
|
+
font-family: $font-family-monospace;
|
34
|
+
font-size: $font-size-base;
|
33
35
|
outline: 0;
|
34
|
-
outline: thin dotted
|
36
|
+
outline: thin dotted \9; /* IE6-9 */
|
35
37
|
margin: 0;
|
36
38
|
display: block;
|
37
39
|
padding: 0;
|
38
40
|
width: 100%;
|
39
41
|
border: 0;
|
40
|
-
border-top: 1px dashed $
|
41
|
-
border-bottom: 1px dashed $
|
42
|
+
border-top: 1px dashed $table-border-color;
|
43
|
+
border-bottom: 1px dashed $table-border-color;
|
42
44
|
border-radius: 0;
|
43
45
|
box-shadow: none;
|
44
|
-
background: $
|
46
|
+
background: $input-bg-disabled;
|
45
47
|
|
46
48
|
&:focus {
|
47
49
|
box-shadow: none;
|
48
|
-
background: $
|
50
|
+
background: $input-bg;
|
49
51
|
}
|
50
52
|
}
|
51
53
|
|
52
|
-
// Hover state
|
53
54
|
&.active {
|
54
|
-
|
55
|
-
|
56
|
-
border-color: rgba(82,168,236,.8);
|
55
|
+
border-color: $color;
|
57
56
|
outline: 0;
|
58
|
-
outline: thin dotted \9; /* IE6-9 */
|
59
57
|
|
60
|
-
@include
|
58
|
+
@include box-shadow("inset 0 1px 1px rgba(0, 0, 0, 0.75), 0 0 0 8px rgba(#{$color-rgba})")
|
61
59
|
}
|
62
|
-
}
|
60
|
+
}
|
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-bootstrap-markdown
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Danny Tatom
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-10-26 00:00:00.000000000 Z
|
13
12
|
dependencies: []
|
14
13
|
description:
|
15
14
|
email:
|
@@ -32,32 +31,26 @@ files:
|
|
32
31
|
- rails-bootstrap-markdown.gemspec
|
33
32
|
homepage: http://github.com/dannytatom/rails-bootstrap-markdown
|
34
33
|
licenses: []
|
34
|
+
metadata: {}
|
35
35
|
post_install_message:
|
36
36
|
rdoc_options: []
|
37
37
|
require_paths:
|
38
38
|
- lib
|
39
39
|
required_ruby_version: !ruby/object:Gem::Requirement
|
40
|
-
none: false
|
41
40
|
requirements:
|
42
|
-
- -
|
41
|
+
- - '>='
|
43
42
|
- !ruby/object:Gem::Version
|
44
43
|
version: '0'
|
45
|
-
segments:
|
46
|
-
- 0
|
47
|
-
hash: -2957847032896564447
|
48
44
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
45
|
requirements:
|
51
|
-
- -
|
46
|
+
- - '>='
|
52
47
|
- !ruby/object:Gem::Version
|
53
48
|
version: '0'
|
54
|
-
segments:
|
55
|
-
- 0
|
56
|
-
hash: -2957847032896564447
|
57
49
|
requirements: []
|
58
50
|
rubyforge_project:
|
59
|
-
rubygems_version:
|
51
|
+
rubygems_version: 2.0.2
|
60
52
|
signing_key:
|
61
|
-
specification_version:
|
53
|
+
specification_version: 4
|
62
54
|
summary: A Rails gem for Bootstrap Markdown
|
63
55
|
test_files: []
|
56
|
+
has_rdoc:
|