written 0.0.5 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/LICENSE +8 -0
  4. data/README.md +63 -0
  5. data/Rakefile +17 -27
  6. data/lib/written.rb +0 -8
  7. data/lib/written/app/assets/images/written/placeholder.png +0 -0
  8. data/lib/written/app/assets/javascripts/written.coffee +2 -0
  9. data/lib/written/app/assets/javascripts/written/core/content.coffee +53 -35
  10. data/lib/written/app/assets/javascripts/written/core/cursor.coffee +33 -12
  11. data/lib/written/app/assets/javascripts/written/core/document.coffee +16 -11
  12. data/lib/written/app/assets/javascripts/written/core/extensions/string.coffee +9 -0
  13. data/lib/written/app/assets/javascripts/written/core/extensions/text.coffee +2 -0
  14. data/lib/written/app/assets/javascripts/written/core/history.coffee +2 -0
  15. data/lib/written/app/assets/javascripts/written/core/observer.coffee +6 -2
  16. data/lib/written/app/assets/javascripts/written/core/stringify.coffee +15 -0
  17. data/lib/written/app/assets/javascripts/written/parsers/block.coffee +69 -0
  18. data/lib/written/app/assets/javascripts/written/parsers/block/code.coffee +79 -15
  19. data/lib/written/app/assets/javascripts/written/parsers/block/heading.coffee +60 -5
  20. data/lib/written/app/assets/javascripts/written/parsers/block/image.coffee +103 -9
  21. data/lib/written/app/assets/javascripts/written/parsers/block/olist.coffee +94 -12
  22. data/lib/written/app/assets/javascripts/written/parsers/block/paragraph.coffee +63 -5
  23. data/lib/written/app/assets/javascripts/written/parsers/block/quote.coffee +92 -0
  24. data/lib/written/app/assets/javascripts/written/parsers/block/ulist.coffee +93 -12
  25. data/lib/written/app/assets/javascripts/written/parsers/inline.coffee +81 -0
  26. data/lib/written/app/assets/javascripts/written/parsers/inline/code.coffee +57 -0
  27. data/lib/written/app/assets/javascripts/written/parsers/inline/italic.coffee +40 -7
  28. data/lib/written/app/assets/javascripts/written/parsers/inline/link.coffee +43 -13
  29. data/lib/written/app/assets/javascripts/written/parsers/inline/list.coffee +27 -0
  30. data/lib/written/app/assets/javascripts/written/parsers/inline/strong.coffee +41 -7
  31. data/lib/written/app/assets/javascripts/written/parsers/parsers.coffee +21 -107
  32. data/lib/written/app/assets/javascripts/written/polyfills/CustomElements/CustomElements.js +32 -0
  33. data/lib/written/app/assets/javascripts/written/polyfills/CustomElements/base.js +40 -0
  34. data/lib/written/app/assets/javascripts/written/polyfills/CustomElements/boot.js +124 -0
  35. data/lib/written/app/assets/javascripts/written/polyfills/CustomElements/observe.js +318 -0
  36. data/lib/written/app/assets/javascripts/written/polyfills/CustomElements/register.js +369 -0
  37. data/lib/written/app/assets/javascripts/written/polyfills/CustomElements/traverse.js +86 -0
  38. data/lib/written/app/assets/javascripts/written/polyfills/CustomElements/upgrade.js +130 -0
  39. data/lib/written/app/assets/javascripts/written/polyfills/MutationObserver/MutationObserver.js +575 -0
  40. data/lib/written/app/assets/javascripts/written/polyfills/WeakMap/WeakMap.js +49 -0
  41. data/lib/written/app/assets/javascripts/written/polyfills/base.coffee +10 -0
  42. data/lib/written/app/assets/javascripts/written/polyfills/dom.js +104 -0
  43. data/lib/written/app/assets/javascripts/written/uploaders/aws.coffee +125 -0
  44. data/lib/written/app/assets/stylesheets/written.scss +80 -11
  45. data/lib/written/version.rb +1 -1
  46. data/test/server/app/assets/javascripts/application.coffee +20 -2
  47. data/test/server/app/assets/stylesheets/application.scss +2 -2
  48. data/test/server/app/assets/stylesheets/prism.css +0 -1
  49. data/test/server/app/views/posts/show.html.erb +10 -3
  50. metadata +26 -20
  51. data/lib/written/app/assets/javascripts/written/core/ext.coffee +0 -109
  52. data/lib/written/app/assets/javascripts/written/core/extensions.coffee +0 -2
  53. data/lib/written/document.rb +0 -42
  54. data/lib/written/node.rb +0 -21
  55. data/lib/written/nodes/code.rb +0 -65
  56. data/lib/written/nodes/heading.rb +0 -15
  57. data/lib/written/nodes/image.rb +0 -14
  58. data/lib/written/nodes/ordered_list.rb +0 -18
  59. data/lib/written/nodes/unordered_list.rb +0 -19
  60. data/lib/written/parsers.rb +0 -11
  61. data/lib/written/parsers/base.rb +0 -26
  62. data/lib/written/parsers/code.rb +0 -60
  63. data/lib/written/parsers/heading.rb +0 -19
  64. data/lib/written/parsers/image.rb +0 -19
  65. data/lib/written/parsers/link.rb +0 -12
  66. data/lib/written/parsers/list.rb +0 -33
  67. data/lib/written/parsers/word.rb +0 -16
@@ -1,12 +1,14 @@
1
1
  <h1>Editor tests</h1>
2
- <div id='Editor' contenteditable=true># Hello World!
2
+ <div id='Editor' contenteditable=true># Hello *World*!
3
3
  1. this is a list
4
+ 2. this is another list
5
+ 3. this is another list
4
6
  - this is **a** list
5
7
  3. this is [a](http://google.com) *list*. It's special, isn't **it**?
6
8
  test *boo* and them *some* or **some!!** a
7
9
 
8
10
 
9
- ![an](image)
11
+ ![an *image* is worth a **thousand** words](image)
10
12
 
11
13
  ~~~javascript
12
14
  var test = "hello"
@@ -14,4 +16,9 @@ var test = "hello"
14
16
  ~~~ruby
15
17
  var test = "hello"
16
18
  ~~~
17
- Hello</div>
19
+ Hello
20
+
21
+ > a quote
22
+ > on multiline
23
+
24
+ The End</div>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: written
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pier-Olivier Thibault
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-02 00:00:00.000000000 Z
11
+ date: 2016-05-09 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Written is a rich Markdown editor for the web.
14
14
  email: pothibo@gmail.com
@@ -19,42 +19,48 @@ files:
19
19
  - ".gitignore"
20
20
  - Gemfile
21
21
  - Gemfile.lock
22
+ - LICENSE
23
+ - README.md
22
24
  - Rakefile
23
25
  - lib/written.rb
26
+ - lib/written/app/assets/images/written/placeholder.png
24
27
  - lib/written/app/assets/javascripts/written.coffee
25
28
  - lib/written/app/assets/javascripts/written/core/content.coffee
26
29
  - lib/written/app/assets/javascripts/written/core/cursor.coffee
27
30
  - lib/written/app/assets/javascripts/written/core/document.coffee
28
- - lib/written/app/assets/javascripts/written/core/ext.coffee
29
- - lib/written/app/assets/javascripts/written/core/extensions.coffee
31
+ - lib/written/app/assets/javascripts/written/core/extensions/string.coffee
32
+ - lib/written/app/assets/javascripts/written/core/extensions/text.coffee
30
33
  - lib/written/app/assets/javascripts/written/core/history.coffee
31
34
  - lib/written/app/assets/javascripts/written/core/observer.coffee
35
+ - lib/written/app/assets/javascripts/written/core/stringify.coffee
36
+ - lib/written/app/assets/javascripts/written/parsers/block.coffee
32
37
  - lib/written/app/assets/javascripts/written/parsers/block/code.coffee
33
38
  - lib/written/app/assets/javascripts/written/parsers/block/heading.coffee
34
39
  - lib/written/app/assets/javascripts/written/parsers/block/image.coffee
35
40
  - lib/written/app/assets/javascripts/written/parsers/block/olist.coffee
36
41
  - lib/written/app/assets/javascripts/written/parsers/block/paragraph.coffee
42
+ - lib/written/app/assets/javascripts/written/parsers/block/quote.coffee
37
43
  - lib/written/app/assets/javascripts/written/parsers/block/ulist.coffee
44
+ - lib/written/app/assets/javascripts/written/parsers/inline.coffee
45
+ - lib/written/app/assets/javascripts/written/parsers/inline/code.coffee
38
46
  - lib/written/app/assets/javascripts/written/parsers/inline/italic.coffee
39
47
  - lib/written/app/assets/javascripts/written/parsers/inline/link.coffee
48
+ - lib/written/app/assets/javascripts/written/parsers/inline/list.coffee
40
49
  - lib/written/app/assets/javascripts/written/parsers/inline/strong.coffee
41
50
  - lib/written/app/assets/javascripts/written/parsers/parsers.coffee
51
+ - lib/written/app/assets/javascripts/written/polyfills/CustomElements/CustomElements.js
52
+ - lib/written/app/assets/javascripts/written/polyfills/CustomElements/base.js
53
+ - lib/written/app/assets/javascripts/written/polyfills/CustomElements/boot.js
54
+ - lib/written/app/assets/javascripts/written/polyfills/CustomElements/observe.js
55
+ - lib/written/app/assets/javascripts/written/polyfills/CustomElements/register.js
56
+ - lib/written/app/assets/javascripts/written/polyfills/CustomElements/traverse.js
57
+ - lib/written/app/assets/javascripts/written/polyfills/CustomElements/upgrade.js
58
+ - lib/written/app/assets/javascripts/written/polyfills/MutationObserver/MutationObserver.js
59
+ - lib/written/app/assets/javascripts/written/polyfills/WeakMap/WeakMap.js
60
+ - lib/written/app/assets/javascripts/written/polyfills/base.coffee
61
+ - lib/written/app/assets/javascripts/written/polyfills/dom.js
62
+ - lib/written/app/assets/javascripts/written/uploaders/aws.coffee
42
63
  - lib/written/app/assets/stylesheets/written.scss
43
- - lib/written/document.rb
44
- - lib/written/node.rb
45
- - lib/written/nodes/code.rb
46
- - lib/written/nodes/heading.rb
47
- - lib/written/nodes/image.rb
48
- - lib/written/nodes/ordered_list.rb
49
- - lib/written/nodes/unordered_list.rb
50
- - lib/written/parsers.rb
51
- - lib/written/parsers/base.rb
52
- - lib/written/parsers/code.rb
53
- - lib/written/parsers/heading.rb
54
- - lib/written/parsers/image.rb
55
- - lib/written/parsers/link.rb
56
- - lib/written/parsers/list.rb
57
- - lib/written/parsers/word.rb
58
64
  - lib/written/railtie.rb
59
65
  - lib/written/version.rb
60
66
  - test/javascript/assertions/assert.coffee
@@ -97,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
103
  version: '0'
98
104
  requirements: []
99
105
  rubyforge_project:
100
- rubygems_version: 2.4.5.1
106
+ rubygems_version: 2.5.1
101
107
  signing_key:
102
108
  specification_version: 4
103
109
  summary: HTML and Ruby Markdown Editor
@@ -1,109 +0,0 @@
1
- String::toHTML = ->
2
- el = document.createElement('div')
3
- el.innerHTML = this
4
- if el.children.length > 1
5
- el.children
6
- else
7
- el.children[0]
8
-
9
- Text::toString = ->
10
- @textContent
11
-
12
- HTMLOListElement::toString = HTMLUListElement::toString = ->
13
- texts = Array.prototype.slice.call(@children).map (li) ->
14
- li.textContent
15
- texts.join("\n")
16
-
17
- HTMLDivElement::toString = ->
18
- if @classList.contains('image')
19
- @lastChild.textContent
20
- else
21
- @textContent
22
-
23
- HTMLPreElement::toString = ->
24
- if @textContent[@textContent.length - 1] == '\n'
25
- @textContent.substr(0, @textContent.length - 1)
26
- else
27
- @textContent
28
-
29
- HTMLElement::toString = ->
30
- if @nodeName == 'FIGURE'
31
- (@querySelector('figcaption') || this).textContent
32
- else
33
- @textContent
34
-
35
- HTMLHeadingElement::toString = HTMLParagraphElement::toString = ->
36
- @textContent
37
-
38
- HTMLElement::offset = (node, walker) ->
39
- offset = 0
40
-
41
- while walker.nextNode()
42
- if walker.currentNode != node
43
- offset += walker.currentNode.length
44
- else
45
- break
46
-
47
- offset
48
-
49
- HTMLOListElement::offset = HTMLUListElement::offset = (node, walker) ->
50
- offset = 0
51
- li = this.firstElementChild
52
-
53
- while walker.nextNode()
54
- if !li.contains(walker.currentNode)
55
- newList = walker.currentNode
56
- while newList? && !(newList instanceof HTMLLIElement)
57
- newList = newList.parentElement
58
- li = newList
59
- offset++
60
-
61
- if walker.currentNode != node
62
- offset += walker.currentNode.length
63
- else
64
- break
65
-
66
- offset
67
-
68
- HTMLElement::getRange = (offset, walker) ->
69
- range = document.createRange()
70
-
71
- if !@firstChild?
72
- range.setStart(this, 0)
73
- else
74
- while walker.nextNode()
75
- if walker.currentNode.length < offset
76
- offset -= walker.currentNode.length
77
- continue
78
-
79
- range.setStart(walker.currentNode, offset)
80
- break
81
-
82
- range.collapse(true)
83
- range
84
-
85
-
86
- HTMLOListElement::getRange = HTMLUListElement::getRange = (offset, walker) ->
87
- range = document.createRange()
88
- if !@firstChild?
89
- range.setStart(this, 0)
90
- return
91
-
92
- li = this.firstElementChild
93
-
94
- while walker.nextNode()
95
- if !li.contains(walker.currentNode)
96
- newList = walker.currentNode
97
- while newList? && !(newList instanceof HTMLLIElement)
98
- newList = newList.parentElement
99
- li = newList
100
- offset--
101
-
102
- if walker.currentNode.length < offset
103
- offset -= walker.currentNode.length
104
- continue
105
- range.setStart(walker.currentNode, offset)
106
- break
107
-
108
- range.collapse(true)
109
- range
@@ -1,2 +0,0 @@
1
- Written.Extensions = []
2
-
@@ -1,42 +0,0 @@
1
- require 'written/parsers'
2
- require 'written/node'
3
-
4
- module Written
5
- class Document
6
-
7
- attr_reader :nodes
8
-
9
- def initialize(content)
10
- @nodes = content.lines.map do |text|
11
- Node.new(text.chomp)
12
- end
13
- end
14
-
15
- def parsers
16
- [
17
- Written::Parsers::Code,
18
- Written::Parsers::Heading,
19
- Written::Parsers::Image,
20
- Written::Parsers::List,
21
- Written::Parsers::Word,
22
- Written::Parsers::Link
23
- ]
24
- end
25
-
26
- def parse!
27
- parsers.each do |parser|
28
- parser.parse!(self)
29
- end
30
- end
31
-
32
- def to_html
33
- @nodes.map do |node|
34
- if node.instance_of?(Written::Node)
35
- "<p>#{node.to_s}</p>"
36
- else
37
- node.to_s
38
- end
39
- end.join
40
- end
41
- end
42
- end
data/lib/written/node.rb DELETED
@@ -1,21 +0,0 @@
1
- module Written
2
- module Nodes
3
- autoload :Image, 'written/nodes/image'
4
- autoload :UnorderedList, 'written/nodes/unordered_list'
5
- autoload :OrderedList, 'written/nodes/ordered_list'
6
- autoload :Code, 'written/nodes/code'
7
- autoload :Heading, 'written/nodes/heading'
8
- end
9
-
10
- class Node
11
- attr_accessor :content
12
-
13
- def initialize(content)
14
- @content = content || String.new
15
- end
16
-
17
- def to_s
18
- @content
19
- end
20
- end
21
- end
@@ -1,65 +0,0 @@
1
- require 'cgi'
2
-
3
- module Written
4
- module Nodes
5
- class Code < Node
6
-
7
- attr_reader :offset
8
-
9
- attr_accessor :title, :block
10
-
11
- def initialize(data)
12
-
13
- @offset = data.offset(0)[0]
14
- @language = (data[3] || "").strip
15
- @block = nil
16
- @title = nil
17
-
18
- @content = data[4]
19
-
20
- end
21
-
22
- def block?
23
- @block == true
24
- end
25
-
26
- def content=(new_content)
27
- if new_content.is_a?(Array)
28
- @content = CGI::escapeHTML(new_content.join("\n"))
29
- else
30
- @content = new_content
31
- end
32
- end
33
-
34
- def code_element
35
- str = "<code"
36
-
37
- unless @language.nil?
38
- str << " class='language-#{@language}'>"
39
- end
40
-
41
- str << @content
42
- str << "</code>"
43
- str
44
- end
45
-
46
- def to_s
47
-
48
- str = String.new
49
-
50
- unless @title.nil?
51
- str << "<header>#{@title}</header>"
52
- end
53
-
54
- str << code_element
55
-
56
- if block?
57
- return "<pre>#{str}</pre>"
58
- else
59
- return str
60
- end
61
- end
62
- end
63
- end
64
- end
65
-
@@ -1,15 +0,0 @@
1
- module Written
2
- module Nodes
3
- class Heading < Node
4
- def initialize(size, content)
5
- @size = size
6
- @content = content
7
- end
8
-
9
- def to_s
10
- "<h#{@size}>#{@content}</h#{@size}>"
11
- end
12
- end
13
- end
14
- end
15
-
@@ -1,14 +0,0 @@
1
- module Written
2
- module Nodes
3
- class Image < Node
4
- def initialize(title, src)
5
- @title = title
6
- @src = src
7
- end
8
-
9
- def to_s
10
- "<figure><img src='#{@src}' /><figcaption>#{@title}</figcaption></figure>"
11
- end
12
- end
13
- end
14
- end
@@ -1,18 +0,0 @@
1
- module Written
2
- module Nodes
3
- class OrderedList < Node
4
-
5
- def initialize(text)
6
- @content = "<li>#{text}</li>"
7
- end
8
-
9
- def append(text)
10
- @content << "<li>#{text}</li>"
11
- end
12
-
13
- def to_s
14
- "<ol>#{@content}</ol>"
15
- end
16
- end
17
- end
18
- end
@@ -1,19 +0,0 @@
1
- module Written
2
- module Nodes
3
- class UnorderedList < Node
4
-
5
- def initialize(text)
6
- @content = "<li>#{text}</li>"
7
- end
8
-
9
- def append(text)
10
- @content << "<li>#{text}</li>"
11
- end
12
-
13
- def to_s
14
- "<ul>#{@content}</ul>"
15
- end
16
- end
17
- end
18
- end
19
-
@@ -1,11 +0,0 @@
1
- module Written
2
- module Parsers
3
- autoload :Base, 'written/parsers/base'
4
- autoload :Word, 'written/parsers/word'
5
- autoload :List, 'written/parsers/list'
6
- autoload :Image, 'written/parsers/image'
7
- autoload :Code, 'written/parsers/code'
8
- autoload :Heading, 'written/parsers/heading'
9
- autoload :Link, 'written/parsers/link'
10
- end
11
- end