jekyll-scholar 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -39,7 +39,7 @@ default configuration is as follows:
39
39
  details_layout: bibtex.html
40
40
  details_link: Details
41
41
 
42
- query: "@*"
42
+ query: "@*"
43
43
 
44
44
  You can use any style that ships with
45
45
  [CiteProc-Ruby](https://github.com/inukshuk/citeproc-ruby) by name (e.g.,
@@ -153,6 +153,27 @@ following blog post:
153
153
 
154
154
  {% bibliography %}
155
155
 
156
+ For longer quotes, Jekyll-Scholar provides a `quote` tag:
157
+
158
+ {% quote derrida:purveyor %}
159
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit,
160
+ sed do eiusmod tempor.
161
+
162
+ Lorem ipsum dolor sit amet, consectetur adipisicing.
163
+ {% endquote %}
164
+
165
+ For example, this could be rendered as:
166
+
167
+ <blockquote>
168
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,<br/>
169
+ sed do eiusmod tempor.</p>
170
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing.</p>
171
+ <cite>
172
+ <a href="#derrida:purveyor">(Derrida, 1975)</a>
173
+ </cite>
174
+ </blockquote>
175
+
176
+
156
177
  ### Detail Pages
157
178
 
158
179
  If your layouts directory contains a layout file for bibliography details
@@ -177,8 +198,8 @@ of your BibTeX entry. Here is an example of a details page layout:
177
198
  <head></head>
178
199
  <body>
179
200
  <h1>{{ page.entry.title }}</h1>
180
- <h2>{{ page.entry.author }}</h2>
181
- <p>{{ page.entry.abstract }}</p>
201
+ <h2>{{ page.entry.author }}</h2>
202
+ <p>{{ page.entry.abstract }}</p>
182
203
  </body>
183
204
  </html>
184
205
 
@@ -2,7 +2,7 @@ Feature: Citations
2
2
  As a scholar who likes to blog
3
3
  I want to reference cool papers and books from my bibliography
4
4
 
5
- @tags
5
+ @tags @cite
6
6
  Scenario: A Simple Citation
7
7
  Given I have a scholar configuration with:
8
8
  | key | value |
@@ -29,7 +29,7 @@ Feature: Citations
29
29
  And the "_site/scholar.html" file should exist
30
30
  And I should see "Flanagan" in "_site/scholar.html"
31
31
 
32
- @tags
32
+ @tags @cite
33
33
  Scenario: Missing references
34
34
  Given I have a scholar configuration with:
35
35
  | key | value |
@@ -55,3 +55,32 @@ Feature: Citations
55
55
  Then the _site directory should exist
56
56
  And the "_site/scholar.html" file should exist
57
57
  And I should see "missing reference" in "_site/scholar.html"
58
+
59
+ @tags @quote
60
+ Scenario: A Simple Block-Quote
61
+ Given I have a scholar configuration with:
62
+ | key | value |
63
+ | source | ./_bibliography |
64
+ | bibliography | my_references |
65
+ And I have a "_bibliography" directory
66
+ And I have a file "_bibliography/my_references.bib":
67
+ """
68
+ @book{ruby,
69
+ title = {The Ruby Programming Language},
70
+ author = {Flanagan, David and Matsumoto, Yukihiro},
71
+ year = {2008},
72
+ publisher = {O'Reilly Media}
73
+ }
74
+ """
75
+ And I have a page "scholar.html":
76
+ """
77
+ ---
78
+ ---
79
+ {% quote ruby %}
80
+ We <3 Ruby
81
+ {% endquote %}
82
+ """
83
+ When I run jekyll
84
+ Then the _site directory should exist
85
+ And the "_site/scholar.html" file should exist
86
+ And I should see "<blockquote><p>We <3 Ruby</p><cite><a .*#ruby.+\(Flanagan" in "_site/scholar.html"
@@ -35,3 +35,43 @@ Feature: BibTeX
35
35
  Then the _site directory should exist
36
36
  And the "_site/bibliography/ruby.html" file should exist
37
37
  And I should see "The Ruby Programming Language" in "_site/bibliography/ruby.html"
38
+
39
+ @tags @details
40
+ Scenario: Links to Detail Pages are Generated Automatically
41
+ Given I have a scholar configuration with:
42
+ | key | value |
43
+ | source | ./_bibliography |
44
+ | bibliogaphy | references |
45
+ | details_layout | details.html |
46
+ And I have a "_bibliography" directory
47
+ And I have a file "_bibliography/references.bib":
48
+ """
49
+ @book{ruby,
50
+ title = {The Ruby Programming Language},
51
+ author = {Flanagan, David and Matsumoto, Yukihiro},
52
+ year = {2008},
53
+ publisher = {O'Reilly Media}
54
+ }
55
+ """
56
+ And I have a "_layouts" directory
57
+ And I have a file "_layouts/details.html":
58
+ """
59
+ ---
60
+ ---
61
+ <html>
62
+ <head></head>
63
+ <body>
64
+ {{ page.entry.title }}
65
+ </body>
66
+ </html>
67
+ """
68
+ And I have a page "scholar.html":
69
+ """
70
+ ---
71
+ ---
72
+ {% bibliography %}
73
+ """
74
+ When I run jekyll
75
+ Then the _site directory should exist
76
+ And the "_site/scholar.html" file should exist
77
+ And I should see "<a href=\"/bibliography/ruby.html\">" in "_site/scholar.html"
@@ -12,23 +12,22 @@ module Jekyll
12
12
  end
13
13
 
14
14
  def render(context)
15
- @site = context.registers[:site]
16
- config.merge!(site.config['scholar'] || {})
15
+ set_context_to context
17
16
 
18
- references = entries.map do |e|
19
- reference = CiteProc.process e.to_citeproc, :style => config['style'],
17
+ references = entries.map do |entry|
18
+ reference = CiteProc.process entry.to_citeproc, :style => config['style'],
20
19
  :locale => config['locale'], :format => 'html'
21
-
22
- reference = "<span id='#{e.key}'>#{reference}</span>"
23
-
20
+
21
+ reference = content_tag :span, reference, :id => entry.key
22
+
24
23
  if generate_details?
25
- reference << "<a href='#{details_link_for(e)}'>#{config['details_link']}</a>"
24
+ reference << link_to(details_link_for(entry), config['details_link'])
26
25
  end
27
-
28
- "<li>#{reference}</li>"
26
+
27
+ content_tag :li, reference
29
28
  end
30
29
 
31
- "<ol>\n#{references.join("\n")}\n</ol>"
30
+ content_tag :ol, references.join("\n")
32
31
  end
33
32
 
34
33
  end
@@ -4,7 +4,7 @@ module Jekyll
4
4
  class CiteTag < Liquid::Tag
5
5
  include Scholar::Utilities
6
6
 
7
- attr_reader :key, :pages, :config
7
+ attr_reader :key, :pages
8
8
 
9
9
  def initialize(tag_name, arguments, tokens)
10
10
  super
@@ -14,18 +14,8 @@ module Jekyll
14
14
  end
15
15
 
16
16
  def render(context)
17
- config.merge!(context.registers[:site].config['scholar'] || {})
18
-
19
- entry = bibliography[key]
20
-
21
- if entry
22
- c = CiteProc.process entry.to_citeproc, :style => config['style'],
23
- :locale => config['locale'], :format => 'html', :mode => :citation
24
-
25
- "<a href='##{entry.key}'>#{c}</a>"
26
- else
27
- "(missing reference)"
28
- end
17
+ set_context_to context
18
+ cite key
29
19
  end
30
20
 
31
21
  end
@@ -0,0 +1,34 @@
1
+ module Jekyll
2
+ class Scholar
3
+
4
+ class QuoteTag < Liquid::Block
5
+ include Scholar::Utilities
6
+
7
+ attr_reader :key, :pages
8
+
9
+ def initialize(tag_name, arguments, tokens)
10
+ super
11
+
12
+ @config = Scholar.defaults.dup
13
+ @key = arguments.strip.split(/\s+/)[0]
14
+ end
15
+
16
+ def render(context)
17
+ set_context_to context
18
+
19
+ quote = super.strip.gsub(/\n\n/, '</p><p>').gsub(/\n/, '<br/>')
20
+ quote = content_tag :p, quote
21
+
22
+ citation = cite(key)
23
+
24
+ quote << content_tag(:cite, citation)
25
+
26
+ content_tag :blockquote, quote
27
+ end
28
+
29
+ end
30
+
31
+ end
32
+ end
33
+
34
+ Liquid::Template.register_tag('quote', Jekyll::Scholar::QuoteTag)
@@ -53,14 +53,56 @@ module Jekyll
53
53
  [name, 'html'].join('.')
54
54
  end
55
55
 
56
- def details_link_for(entry)
57
- [site.source, details_path, details_file_for(entry)].join('/')
56
+ def details_link_for(entry, base = base_url)
57
+ [base, details_path, details_file_for(entry)].join('/')
58
+ end
59
+
60
+ def base_url
61
+ @base_url ||= site.config['baseurl'] || site.config['base_url'] || nil
58
62
  end
59
63
 
60
64
  def details_path
61
65
  config['details_dir']
62
66
  end
63
67
 
68
+ def cite(key)
69
+ entry = bibliography[key]
70
+
71
+ if bibliography.key?(key)
72
+ citation = CiteProc.process entry.to_citeproc, :style => config['style'],
73
+ :locale => config['locale'], :format => 'html', :mode => :citation
74
+
75
+ link_to "##{entry.key}", citation.join
76
+ else
77
+ "(missing reference)"
78
+ end
79
+ end
80
+
81
+ def content_tag(name, content_or_attributes, attributes = {})
82
+ if content_or_attributes.is_a?(Hash)
83
+ content, attributes = nil, content_or_attributes
84
+ else
85
+ content = content_or_attributes
86
+ end
87
+
88
+ attributes = attributes.map { |k,v| %Q(#{k}="#{v}") }
89
+
90
+ if content.nil?
91
+ "<#{[name, attributes].flatten.compact.join(' ')}/>"
92
+ else
93
+ "<#{[name, attributes].flatten.compact.join(' ')}>#{content}</#{name}>"
94
+ end
95
+ end
96
+
97
+ def link_to(href, content, attributes = {})
98
+ content_tag :a, content || href, attributes.merge(:href => href)
99
+ end
100
+
101
+ def set_context_to(context)
102
+ @site = context.registers[:site]
103
+ config.merge!(site.config['scholar'] || {})
104
+ end
105
+
64
106
  end
65
107
 
66
108
  end
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  class Scholar
3
- VERSION = '0.0.5'.freeze
3
+ VERSION = '0.0.6'.freeze
4
4
  end
5
5
  end
@@ -11,4 +11,5 @@ require 'jekyll/scholar/utilities'
11
11
  require 'jekyll/scholar/converters/bibtex'
12
12
  require 'jekyll/scholar/tags/bibliography'
13
13
  require 'jekyll/scholar/tags/cite'
14
+ require 'jekyll/scholar/tags/quote'
14
15
  require 'jekyll/scholar/generators/details'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-scholar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-04-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: jekyll
16
- requirement: &70227972382420 !ruby/object:Gem::Requirement
16
+ requirement: &70290593823440 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0.10'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70227972382420
24
+ version_requirements: *70290593823440
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: citeproc-ruby
27
- requirement: &70227972381880 !ruby/object:Gem::Requirement
27
+ requirement: &70290593822900 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 0.0.6
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70227972381880
35
+ version_requirements: *70290593822900
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bibtex-ruby
38
- requirement: &70227972380880 !ruby/object:Gem::Requirement
38
+ requirement: &70290593821840 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 2.0.5
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70227972380880
46
+ version_requirements: *70290593821840
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rake
49
- requirement: &70227972379520 !ruby/object:Gem::Requirement
49
+ requirement: &70290593820240 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0.9'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70227972379520
57
+ version_requirements: *70290593820240
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rdoc
60
- requirement: &70227972376480 !ruby/object:Gem::Requirement
60
+ requirement: &70290593817500 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '3.11'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70227972376480
68
+ version_requirements: *70290593817500
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: redgreen
71
- requirement: &70227972391080 !ruby/object:Gem::Requirement
71
+ requirement: &70290593832100 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '1.2'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70227972391080
79
+ version_requirements: *70290593832100
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: shoulda
82
- requirement: &70227972390320 !ruby/object:Gem::Requirement
82
+ requirement: &70290593831400 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '2.11'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70227972390320
90
+ version_requirements: *70290593831400
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: rr
93
- requirement: &70227972389840 !ruby/object:Gem::Requirement
93
+ requirement: &70290593830920 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '1.0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70227972389840
101
+ version_requirements: *70290593830920
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: cucumber
104
- requirement: &70227972389320 !ruby/object:Gem::Requirement
104
+ requirement: &70290593830400 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - =
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '1.1'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *70227972389320
112
+ version_requirements: *70290593830400
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: RedCloth
115
- requirement: &70227972388780 !ruby/object:Gem::Requirement
115
+ requirement: &70290593829840 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ~>
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: '4.2'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *70227972388780
123
+ version_requirements: *70290593829840
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: rdiscount
126
- requirement: &70227972388160 !ruby/object:Gem::Requirement
126
+ requirement: &70290593829260 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ~>
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: '1.6'
132
132
  type: :development
133
133
  prerelease: false
134
- version_requirements: *70227972388160
134
+ version_requirements: *70290593829260
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: redcarpet
137
- requirement: &70227972387500 !ruby/object:Gem::Requirement
137
+ requirement: &70290593828580 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ~>
@@ -142,7 +142,7 @@ dependencies:
142
142
  version: '1.9'
143
143
  type: :development
144
144
  prerelease: false
145
- version_requirements: *70227972387500
145
+ version_requirements: *70290593828580
146
146
  description: A set of jekyll extensions for academic blogging.
147
147
  email: http://sylvester.keil.or.at
148
148
  executables: []
@@ -168,6 +168,7 @@ files:
168
168
  - lib/jekyll/scholar/generators/details.rb
169
169
  - lib/jekyll/scholar/tags/bibliography.rb
170
170
  - lib/jekyll/scholar/tags/cite.rb
171
+ - lib/jekyll/scholar/tags/quote.rb
171
172
  - lib/jekyll/scholar/utilities.rb
172
173
  - lib/jekyll/scholar/version.rb
173
174
  homepage: http://github.com/inukshuk/jekyll-scholar