written 0.0.5 → 0.1.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.
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