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,26 +0,0 @@
1
- module Written::Parsers
2
- class Base
3
- class << self
4
- private :new
5
- end
6
-
7
- def self.parse!(document)
8
- i = 0
9
- while !document.nodes[i].nil? do
10
- node = new(document, document.nodes[i], i).parse!
11
- i = document.nodes.index(node) + 1
12
- end
13
- end
14
-
15
- def initialize(document, node, index)
16
- @document = document
17
- @node = node
18
- @index = index
19
- end
20
-
21
- def parse!
22
- return @node
23
- end
24
-
25
- end
26
- end
@@ -1,60 +0,0 @@
1
- module Written::Parsers
2
- class Code < Base
3
- OPENING_TAG = /((~{3,})([a-z]+)?)(.+)?/i
4
- attr_accessor :open
5
-
6
- def parse!
7
-
8
- unless @node.instance_of?(Written::Node)
9
- return @node
10
- end
11
-
12
- while m = OPENING_TAG.match(@node.content)
13
- node = Written::Nodes::Code.new(m)
14
- @node.content.slice!(m.offset(1)[0], m[1].size)
15
- close(node, m[2].size)
16
- end
17
-
18
- return @node
19
- end
20
-
21
- def close(node, tildeCount)
22
- regex = Regexp.new("(~{#{tildeCount},})", Regexp::IGNORECASE)
23
-
24
- if match = regex.match(node.content)
25
- @node.content.slice!(node.offset, match.offset(1)[1])
26
- node.content.slice!(match.offset(0)[0], node.content.length - match.offset(0)[0])
27
- node.content.lstrip!
28
- @node.content.insert(node.offset, node.to_s)
29
-
30
- elsif node.offset == 0
31
- extract_siblings(node, regex)
32
- @node = node
33
- end
34
- end
35
-
36
- def extract_siblings(node, regex)
37
- i = @index + 1
38
- nodes = []
39
- node.title = (node.content || "").strip
40
-
41
- while !(n = @document.nodes[i]).nil?
42
- match = regex.match(n.content)
43
- @document.nodes.delete_at(i)
44
- if match.nil?
45
- nodes.push n
46
- else
47
- break
48
- end
49
- end
50
-
51
- node.content = nodes
52
- node.block = true
53
-
54
- @document.nodes[@index] = node
55
-
56
- return node
57
- end
58
-
59
- end
60
- end
@@ -1,19 +0,0 @@
1
- module Written::Parsers
2
- class Heading < Base
3
- RULE = /^(\#{1,6} )(.+)/i
4
-
5
- def parse!
6
-
7
- unless @node.instance_of?(Written::Node)
8
- return @node
9
- end
10
-
11
- if match = RULE.match(@node.content)
12
- size = match[1].length - 1
13
- @node = Written::Nodes::Heading.new(size, match[2])
14
- @document.nodes[@index] = @node
15
- end
16
- return @node
17
- end
18
- end
19
- end
@@ -1,19 +0,0 @@
1
- module Written::Parsers
2
- class Image < Base
3
- RULE = /^(!{1}\[([^\]]+)\])(\(([^\s]+)?\))$/i
4
-
5
- def parse!
6
-
7
- unless @node.instance_of?(Written::Node)
8
- return @node
9
- end
10
-
11
- if match = RULE.match(@node.content)
12
- @node = Written::Nodes::Image.new(match[2], match[4])
13
- @document.nodes[@index] = @node
14
- end
15
- return @node
16
- end
17
- end
18
- end
19
-
@@ -1,12 +0,0 @@
1
- module Written::Parsers
2
- class Link < Base
3
- RULE = /!{0}(\[([^\]]+)\])(\(([^\)]+)\))/i
4
-
5
- def parse!
6
- while match = RULE.match(@node.content) do
7
- @node.content.gsub! match[0], "<a href='#{match[4]}'>#{match[2]}</a>"
8
- end
9
- return @node
10
- end
11
- end
12
- end
@@ -1,33 +0,0 @@
1
- module Written::Parsers
2
- class List < Base
3
- UL = /^(-\s)(.+)?$/i
4
- OL = /^(\d+\.\s)(.+)?$/i
5
-
6
- def parse!
7
-
8
- unless @node.instance_of?(Written::Node)
9
- return @node
10
- end
11
-
12
- if match = UL.match(@node.content)
13
- list! match, Written::Nodes::UnorderedList
14
- elsif match = OL.match(@node.content)
15
- list! match, Written::Nodes::OrderedList
16
- end
17
- return @node
18
- end
19
-
20
- def list!(match, tag)
21
- previous_node = @document.nodes[@index - 1]
22
- if previous_node.nil? || !previous_node.instance_of?(tag)
23
- @node = tag.new(match[2])
24
- @document.nodes[@index] = @node
25
- else
26
- @index -= 1
27
- @document.nodes.delete(@node)
28
- previous_node.append(match[2])
29
- @node = previous_node
30
- end
31
- end
32
- end
33
- end
@@ -1,16 +0,0 @@
1
- module Written::Parsers
2
- class Word < Base
3
- RULE = /((\*{1,2})([^\*]+)(\*{1,2}))/i
4
-
5
- def parse!
6
- while match = RULE.match(@node.content) do
7
- if match[2].length == 1
8
- @node.content.gsub! match[0], "<em>#{match[3]}</em>"
9
- elsif match[2].length == 2
10
- @node.content.gsub! match[0], "<strong>#{match[3]}</strong>"
11
- end
12
- end
13
- return @node
14
- end
15
- end
16
- end