mastalk 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/.travis.yml +4 -0
- data/Gemfile +3 -0
- data/README.md +174 -0
- data/Rakefile +4 -0
- data/lib/mastalk/extensions.rb +45 -0
- data/lib/mastalk/snippets/action_item.html.erb +5 -0
- data/lib/mastalk/snippets/add_action.html.erb +5 -0
- data/lib/mastalk/snippets/callout.html.erb +5 -0
- data/lib/mastalk/snippets/collabsible_section.html.erb +5 -0
- data/lib/mastalk/snippets/collapsable.html.erb +5 -0
- data/lib/mastalk/snippets/collapsible_header.html.erb +9 -0
- data/lib/mastalk/snippets/how.html.erb +5 -0
- data/lib/mastalk/snippets/no.html.erb +3 -0
- data/lib/mastalk/snippets/ticks.html.erb +5 -0
- data/lib/mastalk/snippets/video.html.erb +9 -0
- data/lib/mastalk/snippets/why.html.erb +5 -0
- data/lib/mastalk/snippets/yes.html.erb +3 -0
- data/mastalk.gemspec +19 -0
- data/spec/mastalk_spec.rb +84 -0
- data/spec/spec_helper.rb +1 -0
- metadata +23 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 220cf96953a354bbaf66f95e548280ea2f50608b
|
4
|
+
data.tar.gz: bedca3b3cbdaa206841548a6f419dc92ce54cc38
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc5650ba5306081a15c26257ac9b9c6c717e9580f3977414220a61766b56dfed9ad6fa549faae5ef5f95220d738881f49d80c09d914a64e5d1a40eb989f64c8c
|
7
|
+
data.tar.gz: e268d79c98be558d3f0aa2f5da4f75a9bc67d08bb3f918a688904a552b8171d7e5addddf5ecab6f0b290fe9f819148ff6c845b2adc38bce39a11352d745605ec
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,174 @@
|
|
1
|
+
# MAStalk [![Build Status](https://travis-ci.org/moneyadviceservice/mastalk.svg)](https://travis-ci.org/moneyadviceservice/mastalk)
|
2
|
+
|
3
|
+
The Money Advice Service's Markdown extension language.
|
4
|
+
|
5
|
+
## Usage
|
6
|
+
|
7
|
+
```
|
8
|
+
gem install mastalk
|
9
|
+
```
|
10
|
+
|
11
|
+
```
|
12
|
+
Mastalk::Document.new("markdown").to_html
|
13
|
+
```
|
14
|
+
|
15
|
+
## Components
|
16
|
+
|
17
|
+
### Add Action
|
18
|
+
`.add-action` box
|
19
|
+
|
20
|
+
```
|
21
|
+
^[Help to Buy schemes FAQs](/en/articles/help-to-buy-schemes-faqs)^
|
22
|
+
```
|
23
|
+
|
24
|
+
Outputs:
|
25
|
+
|
26
|
+
```
|
27
|
+
<div class="add-action">
|
28
|
+
<p><a href="/en/articles/help-to-buy-schemes-faqs">Help to Buy schemes FAQs</a></p>
|
29
|
+
</div>
|
30
|
+
```
|
31
|
+
|
32
|
+
|
33
|
+
### Callout
|
34
|
+
|
35
|
+
`.callout`
|
36
|
+
|
37
|
+
```
|
38
|
+
$=callout
|
39
|
+
# Budgeting tips
|
40
|
+
In 1985, average first-time buyers needed a deposit of 5% to buy a home - in 2012, this had increased to 20%
|
41
|
+
*Source: HMS Treasury*
|
42
|
+
=$
|
43
|
+
```
|
44
|
+
|
45
|
+
Outputs:
|
46
|
+
|
47
|
+
```
|
48
|
+
<div class="callout">
|
49
|
+
<h3>Budgeting tips</h3>
|
50
|
+
<p>In 1985, average first-time buyers needed a deposit of 5% to buy a home - in 2012, this had increased to 20%
|
51
|
+
<br><strong>Source: HM Treasury </strong>
|
52
|
+
</p>
|
53
|
+
</div>
|
54
|
+
```
|
55
|
+
|
56
|
+
### Collapsible header
|
57
|
+
|
58
|
+
```
|
59
|
+
$=
|
60
|
+
# Before you borrow
|
61
|
+
=$
|
62
|
+
|
63
|
+
$-
|
64
|
+
Find out if you need to borrow money and whether you can afford it. Learn how to work out the true cost of borrowing.
|
65
|
+
|
66
|
+
Taking control of debt
|
67
|
+
|
68
|
+
Where to get free debt advice, how to speak to the people you owe money to, and tips to help you pay back your debts in the right order.
|
69
|
+
-$
|
70
|
+
```
|
71
|
+
|
72
|
+
Outputs:
|
73
|
+
|
74
|
+
```
|
75
|
+
<div class="collapsible is-on">
|
76
|
+
<button class="unstyled-button">
|
77
|
+
<span class="icon icon--toggle"></span>
|
78
|
+
<span class="visually-hidden js-collapsable-hidden">hide </span>
|
79
|
+
Before you borrow
|
80
|
+
</button>
|
81
|
+
</div>
|
82
|
+
|
83
|
+
<div class="collapsible-section is-on" aria-hidden="false">
|
84
|
+
<p>Find out if you need to borrow money and whether you can afford it. Learn how to work out the true cost of borrowing.</p>
|
85
|
+
<p>Taking control of debt</p>
|
86
|
+
<p>Where to get free debt advice, how to speak to the people you owe money to, and tips to help you pay back your debts in the right order.</p>
|
87
|
+
</div>
|
88
|
+
|
89
|
+
```
|
90
|
+
|
91
|
+
### Ticks
|
92
|
+
|
93
|
+
```
|
94
|
+
$yes-no
|
95
|
+
[y] You should do this
|
96
|
+
[y] and then do this
|
97
|
+
[y] and finally this
|
98
|
+
[n] You should not do this
|
99
|
+
[n] or this
|
100
|
+
[n] and definitely not do this
|
101
|
+
$end
|
102
|
+
```
|
103
|
+
|
104
|
+
Outputs:
|
105
|
+
|
106
|
+
```
|
107
|
+
<ul class="yes-no">
|
108
|
+
<li class="yes">You should do this</li>
|
109
|
+
<li class="yes">and then do this</li>
|
110
|
+
<li class="yes">and finally this</li>
|
111
|
+
<li class="no">You should not do this</li>
|
112
|
+
<li class="no">or this</li>
|
113
|
+
<li class="no">and definitely not do this</li>
|
114
|
+
</ul>
|
115
|
+
```
|
116
|
+
|
117
|
+
### Video
|
118
|
+
|
119
|
+
`.video-wrapper`
|
120
|
+
|
121
|
+
```
|
122
|
+
({5n1nixLSrQI})
|
123
|
+
|
124
|
+
```
|
125
|
+
|
126
|
+
Outputs:
|
127
|
+
|
128
|
+
```
|
129
|
+
<iframe
|
130
|
+
frameborder="0"
|
131
|
+
height="413"
|
132
|
+
width="680"
|
133
|
+
src= "https://www.youtube.com/embed/5n1nixLSrQI"
|
134
|
+
title="Video">
|
135
|
+
</iframe>
|
136
|
+
```
|
137
|
+
|
138
|
+
### Action Item
|
139
|
+
|
140
|
+
`.action-item`
|
141
|
+
|
142
|
+
```
|
143
|
+
$action
|
144
|
+
## Header
|
145
|
+
$collapsable
|
146
|
+
$why
|
147
|
+
### Why?
|
148
|
+
Your 'Cash ISA allowance
|
149
|
+
$why
|
150
|
+
$how
|
151
|
+
### How?
|
152
|
+
If you already have an ISA
|
153
|
+
$how
|
154
|
+
$collapsable
|
155
|
+
$item
|
156
|
+
```
|
157
|
+
|
158
|
+
Outputs:
|
159
|
+
```
|
160
|
+
<div class="action-item">
|
161
|
+
<h2 id="header" role="heading" aria-level="2">Header</h2>
|
162
|
+
<div class="collapsable">
|
163
|
+
<div class="why">
|
164
|
+
<h3 id="why" role="heading" aria-level="3">Why?</h3>
|
165
|
+
<p>Your ‘Cash ISA allowance</p>
|
166
|
+
</div>
|
167
|
+
<div class="how">
|
168
|
+
<h3 id="how" role="heading" aria-level="3">How?</h3>
|
169
|
+
<p>If you already have an ISA</p>
|
170
|
+
</div>
|
171
|
+
</div>
|
172
|
+
</div>
|
173
|
+
```
|
174
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'erb'
|
2
|
+
|
3
|
+
module Mastalk
|
4
|
+
# Extension DSL for adding new
|
5
|
+
# mastalk snippets.
|
6
|
+
#
|
7
|
+
# Add new snippets in the form:
|
8
|
+
# # start_tag, end_tag, new_line_ending
|
9
|
+
#
|
10
|
+
# <p>replacement html <%= body %></p>
|
11
|
+
module Extensions
|
12
|
+
SNIPPETS_FOLDER=File.join(File.dirname(__FILE__), 'snippets')
|
13
|
+
@@extensions = []
|
14
|
+
|
15
|
+
def extension(start, stop = nil, new_line = false, &block)
|
16
|
+
re_start = Regexp.escape(start)
|
17
|
+
re_stop = stop == '$' ? stop : Regexp.escape(stop || start)
|
18
|
+
regex = Regexp.new("#{re_start}(.*)(#{re_stop})", new_line ? 0 : Regexp::MULTILINE)
|
19
|
+
@@extensions << [regex, block]
|
20
|
+
end
|
21
|
+
|
22
|
+
def extensions
|
23
|
+
return @@extensions unless @@extensions.empty?
|
24
|
+
|
25
|
+
Dir.foreach(SNIPPETS_FOLDER) do |file|
|
26
|
+
next if file == '.' || file == '..'
|
27
|
+
content = File.read(File.join(SNIPPETS_FOLDER, file))
|
28
|
+
start, stop, new_line = args(content)
|
29
|
+
extension(start, stop, new_line == 'false') do |body|
|
30
|
+
ERB.new(remove_syntax_from(content)).result(binding)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
@@extensions
|
35
|
+
end
|
36
|
+
|
37
|
+
def args(content)
|
38
|
+
content.match(/#(.*)\n\n/m).captures.first.split(',').map(&:strip)
|
39
|
+
end
|
40
|
+
|
41
|
+
def remove_syntax_from(content)
|
42
|
+
content.split(/#(.*)\n\n/).last
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/mastalk.gemspec
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
lib = File.expand_path('../lib', __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = 'mastalk'
|
6
|
+
s.version = '0.1.2'
|
7
|
+
s.date = '2014-10-31'
|
8
|
+
s.summary = 'mastalk'
|
9
|
+
s.description = 'Mastalk markdown extension language'
|
10
|
+
s.authors = ['Douglas Roper']
|
11
|
+
s.email = 'dougdroper@gmail.com'
|
12
|
+
s.files = `git ls-files`.split($/)
|
13
|
+
s.homepage = 'https://github.com/moneyadviceservice/mastalk'
|
14
|
+
s.license = 'MIT'
|
15
|
+
|
16
|
+
s.add_runtime_dependency 'kramdown', '~> 1.5.0', '>= 1.5.0'
|
17
|
+
s.add_development_dependency 'rspec', '~> 3.1.0', '>= 3.1.0'
|
18
|
+
s.add_development_dependency 'rake', '~> 10.3.2', '>= 10.3.2'
|
19
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Mastalk::Document do
|
4
|
+
|
5
|
+
context 'Without mastalk syntax' do
|
6
|
+
let(:context) { "###test\nwith markdown" }
|
7
|
+
let(:expected) { "<h3 id=\"test\">test</h3>\n<p>with markdown</p>\n" }
|
8
|
+
|
9
|
+
subject { Mastalk::Document.new(context) }
|
10
|
+
|
11
|
+
it 'kramdown behaviour with no tags' do
|
12
|
+
expect(Mastalk::Document.new('test').to_html).to eq("<p>test</p>\n")
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'converts to html' do
|
16
|
+
expect(subject.to_html).to eq(expected)
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'multiline' do
|
20
|
+
let(:expected) { "<h3 id=\"test\">TEST</h3>\n\n<p>with other stuff</p>\n\n" }
|
21
|
+
let(:context) { "### TEST\r\n\r\nwith other stuff\r\n\r\n " }
|
22
|
+
|
23
|
+
it 'converts to html' do
|
24
|
+
expect(subject.to_html).to eq(expected)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
subject { Mastalk::Document.new(source) }
|
30
|
+
|
31
|
+
let(:expected) { "<div class=\"test\">test</div>\n" }
|
32
|
+
|
33
|
+
context 'custom extension' do
|
34
|
+
let(:source) { '$Etest$E' }
|
35
|
+
|
36
|
+
it 'pre-processes custom tags' do
|
37
|
+
subject.extension('$E') { |body| "<div class='test'>#{body}</div>" }
|
38
|
+
expect(subject.to_html).to eq(expected)
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'multi line' do
|
42
|
+
let(:source) { '$Etest$E$Shello$FIN' }
|
43
|
+
let(:expected) { "<div class=\"test\">test</div>\n<div class=\"test2\">hello</div>\n" }
|
44
|
+
|
45
|
+
it 'processes multi line' do
|
46
|
+
subject.extension('$E') { |body| "<div class='test'>#{body}</div>" }
|
47
|
+
subject.extension('$S', '$FIN') { |body| "<div class='test2'>#{body}</div>" }
|
48
|
+
expect(subject.to_html).to eq(expected)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'extension with start and stop' do
|
54
|
+
let(:source) { '$STARTtest$END' }
|
55
|
+
|
56
|
+
it 'pre-processes custom tags' do
|
57
|
+
subject.extension('$START', '$END') { |body| "<div class='test'>#{body}</div>" }
|
58
|
+
expect(subject.to_html).to eq(expected)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context 'extension with other extensions inside' do
|
63
|
+
let(:source) { "$why\n###header\nbody\n$why" }
|
64
|
+
|
65
|
+
let(:expected) { "<div class=\"why\">\n <h3 id=\"header\">header</h3>\n<p>body</p>\n\n</div>\n" }
|
66
|
+
|
67
|
+
it 'parses nested structures' do
|
68
|
+
expect(subject.to_html).to eq(expected)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
context 'with newline as end' do
|
73
|
+
let(:source) { "$yes-no\n [y] yes \n [n] no \n $end $why\n###header\nbody\n$why" }
|
74
|
+
|
75
|
+
let(:expected) do
|
76
|
+
"<ul class=\"yes-no\">\n \n<li class=\"yes\">yes</li>\n\n<li class=\"no\">no</li>\n\n\n</ul>\n<div class=\"why\">
|
77
|
+
<h3 id=\"header\">header</h3>\n<p>body</p>\n\n</div>\n"
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'pre-processes custom tags' do
|
81
|
+
expect(subject.to_html).to eq(expected)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require_relative '../lib/mastalk'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mastalk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Douglas Roper
|
@@ -76,8 +76,29 @@ executables: []
|
|
76
76
|
extensions: []
|
77
77
|
extra_rdoc_files: []
|
78
78
|
files:
|
79
|
+
- ".gitignore"
|
80
|
+
- ".travis.yml"
|
81
|
+
- Gemfile
|
82
|
+
- README.md
|
83
|
+
- Rakefile
|
79
84
|
- lib/mastalk.rb
|
80
|
-
|
85
|
+
- lib/mastalk/extensions.rb
|
86
|
+
- lib/mastalk/snippets/action_item.html.erb
|
87
|
+
- lib/mastalk/snippets/add_action.html.erb
|
88
|
+
- lib/mastalk/snippets/callout.html.erb
|
89
|
+
- lib/mastalk/snippets/collabsible_section.html.erb
|
90
|
+
- lib/mastalk/snippets/collapsable.html.erb
|
91
|
+
- lib/mastalk/snippets/collapsible_header.html.erb
|
92
|
+
- lib/mastalk/snippets/how.html.erb
|
93
|
+
- lib/mastalk/snippets/no.html.erb
|
94
|
+
- lib/mastalk/snippets/ticks.html.erb
|
95
|
+
- lib/mastalk/snippets/video.html.erb
|
96
|
+
- lib/mastalk/snippets/why.html.erb
|
97
|
+
- lib/mastalk/snippets/yes.html.erb
|
98
|
+
- mastalk.gemspec
|
99
|
+
- spec/mastalk_spec.rb
|
100
|
+
- spec/spec_helper.rb
|
101
|
+
homepage: https://github.com/moneyadviceservice/mastalk
|
81
102
|
licenses:
|
82
103
|
- MIT
|
83
104
|
metadata: {}
|