markdown-toolbar 0.0.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.
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ .DS_Store
5
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in markdown-toolbar.gemspec
4
+ gemspec
data/README.rdoc ADDED
@@ -0,0 +1,29 @@
1
+ = Markdown Toolbar
2
+
3
+ Markdown Toolbar is an lightweight helper buttons that appear over textarea
4
+
5
+
6
+ == Installation
7
+
8
+ In <b>Rails 3.1</b>, add this to your Gemfile and run the +bundle+ command.
9
+
10
+ gem "markdown-toolbar"
11
+
12
+ Alternatively, you can install it as a plugin.
13
+
14
+ rails plugin install git://github.com/fuksito/markdown-toolbar.git
15
+
16
+
17
+ == Getting Started
18
+
19
+ Markdown Toolbar requires you to add such lines to your application.js
20
+
21
+ //= require jquery-fieldselection
22
+ //= require markdown-toolbar
23
+
24
+ and to application.css
25
+ *= require markdown-toolbar
26
+
27
+ Then you can add toolbar to any textarea by adding a class +markdown-toolbar+ to it
28
+
29
+ <%= f.text_area :text, :size => '90x30', :class => "markdown-toolbar" %>
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,5 @@
1
+ module Markdown
2
+ module Toolbar
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ require "markdown-toolbar/version"
2
+
3
+ module Markdown
4
+ module Toolbar
5
+ # Your code goes here...
6
+ end
7
+ end
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "markdown-toolbar/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "markdown-toolbar"
7
+ s.version = Markdown::Toolbar::VERSION
8
+ s.authors = ["Vitaliy Yanchuk"]
9
+ s.email = ["fuksito@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{ Wrapper to help add markdown syntax into textarea }
12
+ s.description = %q{ Helps with markdown editing }
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ s.require_paths = ["lib"]
18
+
19
+ s.add_development_dependency 'rails', '~> 3.1.0'
20
+ s.rubyforge_project = s.name
21
+ end
data/vendor/.DS_Store ADDED
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,83 @@
1
+ /*
2
+ * jQuery plugin: fieldSelection - v0.1.0 - last change: 2006-12-16
3
+ * (c) 2006 Alex Brem <alex@0xab.cd> - http://blog.0xab.cd
4
+ */
5
+
6
+ (function() {
7
+
8
+ var fieldSelection = {
9
+
10
+ getSelection: function() {
11
+
12
+ var e = this.jquery ? this[0] : this;
13
+
14
+ return (
15
+
16
+ /* mozilla / dom 3.0 */
17
+ ('selectionStart' in e && function() {
18
+ var l = e.selectionEnd - e.selectionStart;
19
+ return { start: e.selectionStart, end: e.selectionEnd, length: l, text: e.value.substr(e.selectionStart, l) };
20
+ }) ||
21
+
22
+ /* exploder */
23
+ (document.selection && function() {
24
+
25
+ e.focus();
26
+
27
+ var r = document.selection.createRange();
28
+ if (r == null) {
29
+ return { start: 0, end: e.value.length, length: 0 }
30
+ }
31
+
32
+ var re = e.createTextRange();
33
+ var rc = re.duplicate();
34
+ re.moveToBookmark(r.getBookmark());
35
+ rc.setEndPoint('EndToStart', re);
36
+
37
+ return { start: rc.text.length, end: rc.text.length + r.text.length, length: r.text.length, text: r.text };
38
+ }) ||
39
+
40
+ /* browser not supported */
41
+ function() {
42
+ return { start: 0, end: e.value.length, length: 0 };
43
+ }
44
+
45
+ )();
46
+
47
+ },
48
+
49
+ replaceSelection: function() {
50
+
51
+ var e = this.jquery ? this[0] : this;
52
+ var text = arguments[0] || '';
53
+
54
+ return (
55
+
56
+ /* mozilla / dom 3.0 */
57
+ ('selectionStart' in e && function() {
58
+ e.value = e.value.substr(0, e.selectionStart) + text + e.value.substr(e.selectionEnd, e.value.length);
59
+ return this;
60
+ }) ||
61
+
62
+ /* exploder */
63
+ (document.selection && function() {
64
+ e.focus();
65
+ document.selection.createRange().text = text;
66
+ return this;
67
+ }) ||
68
+
69
+ /* browser not supported */
70
+ function() {
71
+ e.value += text;
72
+ return this;
73
+ }
74
+
75
+ )();
76
+
77
+ }
78
+
79
+ };
80
+
81
+ jQuery.each(fieldSelection, function(i) { jQuery.fn[i] = this; });
82
+
83
+ })();
@@ -0,0 +1,97 @@
1
+ $ ->
2
+ for textarea in $(".markdown-toolbar")
3
+ new MarkdownToolbar $(textarea)
4
+
5
+
6
+ class MarkdownToolbar
7
+ constructor: (@textarea) ->
8
+ this.add_toolbar()
9
+
10
+ add_toolbar: ->
11
+ @textarea.before "<div class='markdown-toolbar-panel'><div class='mdt_buttons'></div></div>"
12
+ @panel = @textarea.prev ".markdown-toolbar-panel"
13
+
14
+ @panel.css "width", @textarea.css('width')
15
+
16
+ @textarea.css "margin-top", 0
17
+
18
+ for pos_type in ["margin", "padding"]
19
+ for pos in ['left', 'right']
20
+ @panel.css "#{pos_type}-#{pos}", @textarea.css("#{pos_type}-#{pos}")
21
+
22
+ this.fill_buttons()
23
+
24
+ add_button: (button_id, title, tagStart, tagEnd) ->
25
+ $(".mdt_buttons", @panel).append "<div class='mdt_button mdt_button_#{button_id}' title='#{title}'></div>"
26
+ $(".mdt_button_#{button_id}", @panel).bind 'click', (event) =>
27
+ switch button_id
28
+ when "bold", "italic", "heading_2", "heading_3"
29
+ this.perform_insert_tag(button_id, tagStart, tagEnd)
30
+ when "list_numbers", "list_bullets"
31
+ this.perform_insert_list(button_id)
32
+ when "image"
33
+ this.perform_insert_image()
34
+ when "link"
35
+ this.perform_insert_link()
36
+
37
+ perform_insert_tag: (button_id, tagStart, tagEnd = '') ->
38
+ the_text = this.selected_text()
39
+ the_text ||= "#{button_id} text"
40
+ lines = the_text.split("\n")
41
+ final_text = ""
42
+ i = 0
43
+ for line in lines
44
+ i++
45
+ final_text += "#{tagStart}#{line}#{tagEnd}"
46
+ final_text += "\n" if i < lines.length
47
+
48
+ @textarea.replaceSelection( final_text , true )
49
+
50
+ perform_insert_list: (button_id) ->
51
+ the_text = this.selected_text()
52
+ the_text ||= "Apple\nBananna\nOrange"
53
+ lines = the_text.split("\n")
54
+ final_text = ""
55
+ i = 0
56
+ tagStart = "-"
57
+ for line in lines
58
+ i++
59
+ tagStart = "#{i}." if button_id == 'list_numbers'
60
+ final_text += "#{tagStart} #{line}"
61
+ final_text += "\n" if i < lines.length
62
+
63
+ @textarea.replaceSelection( final_text , true )
64
+
65
+ perform_insert_image: ->
66
+ the_text = this.selected_text()
67
+ if the_text.length > 0 && (the_text.substr(0,7) == 'http://' || the_text.substr(0,7) == 'https:/')
68
+ the_text = "[alt text](#{the_text})"
69
+ else
70
+ the_text = "![alt text](http://path/to/img.jpg)"
71
+
72
+ @textarea.replaceSelection( the_text , true )
73
+
74
+ perform_insert_link: ->
75
+ the_text = this.selected_text()
76
+ if the_text.length > 0
77
+ if the_text.substr(0,7) == 'http://' || the_text.substr(0,7) == 'https:/'
78
+ the_text = "[#{the_text}](#{the_text})"
79
+ else
80
+ the_text = "[#{the_text}](http://...)"
81
+ else
82
+ the_text = "[example link](http://example.com/)"
83
+
84
+ @textarea.replaceSelection( the_text , true )
85
+
86
+ selected_text: ->
87
+ @textarea.getSelection().text
88
+
89
+ fill_buttons: ->
90
+ this.add_button "bold", "Bold", "**", "**"
91
+ this.add_button "italic", "Italic", "*", "*"
92
+ this.add_button "heading_2", "Sub title", "\n## ", " ##\n"
93
+ this.add_button "heading_3", "Sub-sub title", "\n### ", " ###\n"
94
+ this.add_button "list_bullets", "Bulleted list"
95
+ this.add_button "list_numbers", "Numbered list"
96
+ this.add_button "image", "Insert Image"
97
+ this.add_button "link", "Insert Link"
@@ -0,0 +1,38 @@
1
+ .markdown-toolbar-panel {
2
+ height:20px;
3
+ border:1px solid #aaa;
4
+ background: #fafafa;
5
+ }
6
+ .markdown-toolbar-panel {
7
+ margin-bottom:0;
8
+ border-bottom:0;
9
+ }
10
+ .markdown-upload-panel {
11
+ margin-top:0;
12
+ border-top:0;
13
+ padding:5px;
14
+ }
15
+
16
+ .mdt_buttons {
17
+ width:auto;
18
+ display:inline-block;
19
+ margin-top:2px;
20
+ margin-bottom:2px;
21
+ }
22
+
23
+ .mdt_button {
24
+ width:16px;
25
+ height:16px;
26
+ cursor:pointer;
27
+ display:inline-block;
28
+ float:left;
29
+ margin-left:2px;
30
+ }
31
+ <% %w{ bold italic strike list_bullets list_numbers heading_2 heading_3 link image}.each_with_index do |button, index| %>
32
+ .mdt_button_<%= button %> {
33
+ background: url('/assets/text_<%= button %>.png');
34
+ &:active{
35
+ background-position: 1px 1px;
36
+ }
37
+ }
38
+ <% end %>
metadata ADDED
@@ -0,0 +1,91 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: markdown-toolbar
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Vitaliy Yanchuk
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-08-29 00:00:00 +03:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rails
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: 3.1.0
25
+ type: :development
26
+ version_requirements: *id001
27
+ description: " Helps with markdown editing "
28
+ email:
29
+ - fuksito@gmail.com
30
+ executables: []
31
+
32
+ extensions: []
33
+
34
+ extra_rdoc_files: []
35
+
36
+ files:
37
+ - .gitignore
38
+ - Gemfile
39
+ - README.rdoc
40
+ - Rakefile
41
+ - lib/markdown-toolbar.rb
42
+ - lib/markdown-toolbar/version.rb
43
+ - markdown-toolbar.gemspec
44
+ - vendor/.DS_Store
45
+ - vendor/assets/.DS_Store
46
+ - vendor/assets/images/.DS_Store
47
+ - vendor/assets/images/markdown-toolbar.png
48
+ - vendor/assets/images/text_bold.png
49
+ - vendor/assets/images/text_heading_1.png
50
+ - vendor/assets/images/text_heading_2.png
51
+ - vendor/assets/images/text_heading_3.png
52
+ - vendor/assets/images/text_image.png
53
+ - vendor/assets/images/text_italic.png
54
+ - vendor/assets/images/text_link.png
55
+ - vendor/assets/images/text_list_bullets.png
56
+ - vendor/assets/images/text_list_numbers.png
57
+ - vendor/assets/images/text_strike.png
58
+ - vendor/assets/images/text_underline.png
59
+ - vendor/assets/javascripts/jquery-fieldselection.js
60
+ - vendor/assets/javascripts/markdown-toolbar.coffee
61
+ - vendor/assets/stylesheets/markdown-toolbar.scss.erb
62
+ has_rdoc: true
63
+ homepage: ""
64
+ licenses: []
65
+
66
+ post_install_message:
67
+ rdoc_options: []
68
+
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: "0"
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ none: false
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: "0"
83
+ requirements: []
84
+
85
+ rubyforge_project: markdown-toolbar
86
+ rubygems_version: 1.6.2
87
+ signing_key:
88
+ specification_version: 3
89
+ summary: Wrapper to help add markdown syntax into textarea
90
+ test_files: []
91
+