omf_web 0.9.9 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +31 -0
- data/bin/omf_web_server.rb +157 -0
- data/doc/screenshot2.png +0 -0
- data/doc/widget_detail.png +0 -0
- data/example/demo/data_sources/downloads.rb +2 -1
- data/example/simple/README.md +12 -13
- data/example/simple/create_waveform.rb +29 -0
- data/example/simple/introduction.md +17 -0
- data/example/simple/sample.sq3 +0 -0
- data/example/simple/sample.sql +1008 -0
- data/example/simple/simple.yaml +62 -0
- data/example/simple/simple_dynamic.yaml +66 -0
- data/lib/irods4r/file.rb +15 -14
- data/lib/irods4r/icommands.rb +18 -18
- data/lib/irods4r.rb +9 -9
- data/lib/omf-web/config.ru +41 -16
- data/lib/omf-web/content/git_repository.rb +32 -31
- data/lib/omf-web/content/irods_repository.rb +34 -33
- data/lib/omf-web/content/repository.rb +48 -44
- data/lib/omf-web/data_source_proxy.rb +33 -22
- data/lib/omf-web/rack/session_authenticator.rb +48 -12
- data/lib/omf-web/rack/tab_mapper.rb +30 -36
- data/lib/omf-web/rack/websocket_handler.rb +26 -25
- data/lib/omf-web/session_store.rb +16 -13
- data/lib/omf-web/theme/abstract_page.rb +26 -22
- data/lib/omf-web/theme/bright/page.rb +84 -34
- data/lib/omf-web/theme/bright/stacked_renderer.rb +20 -19
- data/lib/omf-web/theme.rb +14 -9
- data/lib/omf-web/thin/runner.rb +38 -36
- data/lib/omf-web/thin/server.rb +255 -0
- data/lib/omf-web/version.rb +1 -1
- data/lib/omf-web/widget/data_widget.rb +6 -6
- data/lib/omf-web/widget/text/maruku/helpers.rb +33 -30
- data/lib/omf-web/widget/text/maruku/input/parse_block.rb +117 -117
- data/lib/omf-web/widget/text/maruku/output/to_html.rb +155 -154
- data/lib/omf-web/widget/text/maruku.rb +17 -16
- data/omf_web.gemspec +6 -2
- data/sample.sq3 +0 -0
- data/share/htdocs/graph/js/gauge.js +524 -0
- data/share/htdocs/vendor/VERSION_MAP.yaml +3 -3
- data/share/htdocs/vendor/backbone-1.0.0/backbone.js +1571 -0
- data/share/htdocs/vendor/d3-3.0/LICENSE.brewer.txt +38 -0
- data/share/htdocs/vendor/d3-3.0/colorbrewer.js +1 -0
- data/share/htdocs/vendor/d3-3.0/d3.js +8810 -0
- data/share/htdocs/vendor/d3-3.0/d3.min.js +5 -0
- data/share/htdocs/vendor/geo_json/Readme.txt +71 -0
- data/share/htdocs/vendor/geo_json/regions.json +41 -0
- data/share/htdocs/vendor/geo_json/switzerland.json +24 -0
- data/share/htdocs/vendor/geo_json/world.json +497 -0
- data/share/htdocs/vendor/nv_d3/js/nv.d3.js +8801 -4447
- data/share/htdocs/vendor/spin/jquery.spin.js +46 -0
- data/share/htdocs/vendor/spin/spin.js +349 -0
- data/share/htdocs/vendor/spin/spin.min.js +1 -0
- data/share/htdocs/vendor/underscore-1.4.4/underscore.js +1227 -0
- metadata +63 -48
- data/example/simple/data_sources/gimi31.sq3 +0 -0
- data/example/simple/data_sources/ping_source.rb +0 -56
- data/example/simple/simple_viz_server.rb +0 -39
- data/example/simple/widgets/charts_tab.yaml +0 -38
- data/share/.DS_Store +0 -0
- data/share/htdocs/.DS_Store +0 -0
- data/share/htdocs/vendor/backbone-0.5.3/backbone.js +0 -1158
- data/share/htdocs/vendor/underscore-1.2.1/underscore.js +0 -958
@@ -2,17 +2,17 @@
|
|
2
2
|
# Copyright (C) 2006 Andrea Censi <andrea (at) rubyforge.org>
|
3
3
|
#
|
4
4
|
# This file is part of Maruku.
|
5
|
-
#
|
5
|
+
#
|
6
6
|
# Maruku is free software; you can redistribute it and/or modify
|
7
7
|
# it under the terms of the GNU General Public License as published by
|
8
8
|
# the Free Software Foundation; either version 2 of the License, or
|
9
9
|
# (at your option) any later version.
|
10
|
-
#
|
10
|
+
#
|
11
11
|
# Maruku is distributed in the hope that it will be useful,
|
12
12
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
13
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
14
|
# GNU General Public License for more details.
|
15
|
-
#
|
15
|
+
#
|
16
16
|
# You should have received a copy of the GNU General Public License
|
17
17
|
# along with Maruku; if not, write to the Free Software
|
18
18
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
@@ -25,7 +25,7 @@ begin
|
|
25
25
|
require 'rexml/formatters/default'
|
26
26
|
$rexml_new_version = true
|
27
27
|
rescue LoadError
|
28
|
-
$rexml_new_version = false
|
28
|
+
$rexml_new_version = false
|
29
29
|
end
|
30
30
|
|
31
31
|
class String
|
@@ -40,13 +40,13 @@ end
|
|
40
40
|
# This module groups all functions related to HTML export.
|
41
41
|
module MaRuKu; module Out; module HTML
|
42
42
|
include REXML
|
43
|
-
|
43
|
+
|
44
44
|
# Render as an HTML fragment (no head, just the content of BODY). (returns a string)
|
45
45
|
def to_html(context={})
|
46
46
|
Thread.current['maruku_context'] = context
|
47
47
|
indent = context[:indent] || -1
|
48
48
|
ie_hack = context[:ie_hack] || true
|
49
|
-
|
49
|
+
|
50
50
|
div = Element.new 'dummy'
|
51
51
|
children_to_html.each do |e|
|
52
52
|
div << e
|
@@ -56,10 +56,10 @@ module MaRuKu; module Out; module HTML
|
|
56
56
|
if @doc.footnotes_order.size > 0
|
57
57
|
div << render_footnotes
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
doc = Document.new(nil,{:respect_whitespace =>:all})
|
61
61
|
doc << div
|
62
|
-
|
62
|
+
|
63
63
|
# REXML Bug? if indent!=-1 whitespace is not respected for 'pre' elements
|
64
64
|
# containing code.
|
65
65
|
xml =""
|
@@ -80,45 +80,45 @@ module MaRuKu; module Out; module HTML
|
|
80
80
|
xml.gsub!(/\A<dummy\s*\/>/,'')
|
81
81
|
xml
|
82
82
|
end
|
83
|
-
|
83
|
+
|
84
84
|
# Render to a complete HTML document (returns a string)
|
85
85
|
def to_html_document(context={})
|
86
86
|
indent = context[:indent] || -1
|
87
87
|
ie_hack = context[:ie_hack] ||true
|
88
88
|
doc = to_html_document_tree
|
89
|
-
xml = ""
|
90
|
-
|
89
|
+
xml = ""
|
90
|
+
|
91
91
|
# REXML Bug? if indent!=-1 whitespace is not respected for 'pre' elements
|
92
92
|
# containing code.
|
93
93
|
doc.write(xml,indent,transitive=true,ie_hack);
|
94
|
-
|
94
|
+
|
95
95
|
Xhtml11_mathml2_svg11 + xml
|
96
96
|
end
|
97
|
-
|
98
|
-
unless defined? Xhtml10strict
|
99
|
-
Xhtml10strict =
|
97
|
+
|
98
|
+
unless defined? Xhtml10strict
|
99
|
+
Xhtml10strict =
|
100
100
|
"<?xml version='1.0' encoding='utf-8'?>
|
101
101
|
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
|
102
102
|
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>\n"
|
103
|
-
|
103
|
+
|
104
104
|
Xhtml11strict_mathml2 = '<?xml version="1.0" encoding="utf-8"?>
|
105
105
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN"
|
106
106
|
"http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd" [
|
107
107
|
<!ENTITY mathml "http://www.w3.org/1998/Math/MathML">
|
108
108
|
]>
|
109
109
|
'
|
110
|
-
|
111
|
-
Xhtml11_mathml2_svg11 =
|
110
|
+
|
111
|
+
Xhtml11_mathml2_svg11 =
|
112
112
|
'<?xml version="1.0" encoding="utf-8"?>
|
113
113
|
<!DOCTYPE html PUBLIC
|
114
114
|
"-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN"
|
115
115
|
"http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">
|
116
116
|
'
|
117
117
|
end
|
118
|
-
|
119
|
-
|
118
|
+
|
119
|
+
|
120
120
|
def xml_newline() Text.new("\n") end
|
121
|
-
|
121
|
+
|
122
122
|
|
123
123
|
=begin maruku_doc
|
124
124
|
Attribute: title
|
@@ -198,22 +198,22 @@ Example:
|
|
198
198
|
def to_html_document_tree
|
199
199
|
doc = Document.new(nil,{:respect_whitespace =>:all})
|
200
200
|
# doc << XMLDecl.new
|
201
|
-
|
201
|
+
|
202
202
|
root = Element.new('html', doc)
|
203
203
|
root.add_namespace('http://www.w3.org/1999/xhtml')
|
204
204
|
root.add_namespace('svg', "http://www.w3.org/2000/svg" )
|
205
205
|
lang = self.attributes[:lang] || 'en'
|
206
206
|
root.attributes['xml:lang'] = lang
|
207
|
-
|
207
|
+
|
208
208
|
root << xml_newline
|
209
209
|
head = Element.new 'head', root
|
210
|
-
|
210
|
+
|
211
211
|
#<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
|
212
212
|
me = Element.new 'meta', head
|
213
213
|
me.attributes['http-equiv'] = 'Content-type'
|
214
|
-
# me.attributes['content'] = 'text/html;charset=utf-8'
|
215
|
-
me.attributes['content'] = 'application/xhtml+xml;charset=utf-8'
|
216
|
-
|
214
|
+
# me.attributes['content'] = 'text/html;charset=utf-8'
|
215
|
+
me.attributes['content'] = 'application/xhtml+xml;charset=utf-8'
|
216
|
+
|
217
217
|
METAS.each do |m|
|
218
218
|
if value = self.attributes[m.to_sym]
|
219
219
|
meta = Element.new 'meta', head
|
@@ -221,8 +221,8 @@ Example:
|
|
221
221
|
meta.attributes['content'] = value.to_s
|
222
222
|
end
|
223
223
|
end
|
224
|
-
|
225
|
-
|
224
|
+
|
225
|
+
|
226
226
|
self.attributes.each do |k,v|
|
227
227
|
if k.to_s =~ /\Ameta-(.*)\Z/
|
228
228
|
meta = Element.new 'meta', head
|
@@ -230,21 +230,21 @@ Example:
|
|
230
230
|
meta.attributes['content'] = v.to_s
|
231
231
|
end
|
232
232
|
end
|
233
|
-
|
234
233
|
|
235
|
-
|
234
|
+
|
235
|
+
|
236
236
|
# Create title element
|
237
237
|
doc_title = self.attributes[:title] || self.attributes[:subject] || ""
|
238
238
|
title = Element.new 'title', head
|
239
239
|
title << Text.new(doc_title)
|
240
|
-
|
240
|
+
|
241
241
|
add_css_to(head)
|
242
|
-
|
243
|
-
|
242
|
+
|
243
|
+
|
244
244
|
root << xml_newline
|
245
|
-
|
245
|
+
|
246
246
|
body = Element.new 'body'
|
247
|
-
|
247
|
+
|
248
248
|
children_to_html.each do |e|
|
249
249
|
body << e
|
250
250
|
end
|
@@ -253,15 +253,15 @@ Example:
|
|
253
253
|
if @doc.footnotes_order.size > 0
|
254
254
|
body << render_footnotes
|
255
255
|
end
|
256
|
-
|
257
|
-
# When we are rendering a whole document, we add a signature
|
258
|
-
# at the bottom.
|
256
|
+
|
257
|
+
# When we are rendering a whole document, we add a signature
|
258
|
+
# at the bottom.
|
259
259
|
if get_setting(:maruku_signature)
|
260
|
-
body << maruku_html_signature
|
260
|
+
body << maruku_html_signature
|
261
261
|
end
|
262
|
-
|
262
|
+
|
263
263
|
root << body
|
264
|
-
|
264
|
+
|
265
265
|
doc
|
266
266
|
end
|
267
267
|
|
@@ -273,12 +273,12 @@ Example:
|
|
273
273
|
link.attributes['type'] = 'text/css'
|
274
274
|
link.attributes['rel'] = 'stylesheet'
|
275
275
|
link.attributes['href'] = css
|
276
|
-
head << link
|
276
|
+
head << link
|
277
277
|
head << xml_newline
|
278
278
|
end
|
279
279
|
end
|
280
280
|
end
|
281
|
-
|
281
|
+
|
282
282
|
# returns "st","nd","rd" or "th" as appropriate
|
283
283
|
def day_suffix(day)
|
284
284
|
s = {
|
@@ -301,8 +301,8 @@ Example:
|
|
301
301
|
day_suffix(t.day)+
|
302
302
|
t.strftime(", %Y")
|
303
303
|
end
|
304
|
-
|
305
|
-
def maruku_html_signature
|
304
|
+
|
305
|
+
def maruku_html_signature
|
306
306
|
div = Element.new 'div'
|
307
307
|
div.attributes['class'] = 'maruku_signature'
|
308
308
|
Element.new 'hr', div
|
@@ -316,7 +316,7 @@ Example:
|
|
316
316
|
span << Text.new(nice_date+".")
|
317
317
|
div
|
318
318
|
end
|
319
|
-
|
319
|
+
|
320
320
|
def render_footnotes()
|
321
321
|
div = Element.new 'div'
|
322
322
|
div.attributes['class'] = 'footnotes'
|
@@ -327,7 +327,7 @@ Example:
|
|
327
327
|
if f
|
328
328
|
li = f.wrap_as_element('li')
|
329
329
|
li.attributes['id'] = "#{get_setting(:doc_prefix)}fn:#{num}"
|
330
|
-
|
330
|
+
|
331
331
|
a = Element.new 'a'
|
332
332
|
a.attributes['href'] = "\##{get_setting(:doc_prefix)}fnref:#{num}"
|
333
333
|
a.attributes['rev'] = 'footnote'
|
@@ -348,17 +348,17 @@ Example:
|
|
348
348
|
def to_html_linebreak; Element.new 'br' end
|
349
349
|
|
350
350
|
# renders children as html and wraps into an element of given name
|
351
|
-
#
|
351
|
+
#
|
352
352
|
# Sets 'id' if meta is set
|
353
353
|
def wrap_as_element(name, attributes_to_copy=[])
|
354
354
|
m = create_html_element(name, attributes_to_copy)
|
355
355
|
children_to_html.each do |e| m << e; end
|
356
|
-
|
356
|
+
|
357
357
|
# m << Comment.new( "{"+self.al.to_md+"}") if not self.al.empty?
|
358
358
|
# m << Comment.new( @attributes.inspect) if not @attributes.empty?
|
359
359
|
m
|
360
360
|
end
|
361
|
-
|
361
|
+
|
362
362
|
=begin maruku_doc
|
363
363
|
Attribute: id
|
364
364
|
Scope: element
|
@@ -386,21 +386,21 @@ Output: HTML
|
|
386
386
|
|
387
387
|
It is copied as a standard HTML attribute.
|
388
388
|
=end
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
389
|
+
|
390
|
+
|
391
|
+
|
392
|
+
|
393
|
+
|
394
394
|
unless defined? HTML4Attributes
|
395
395
|
HTML4Attributes = {}
|
396
396
|
end
|
397
|
-
|
397
|
+
|
398
398
|
coreattrs = [:id, :class, :style, :title]
|
399
399
|
i18n = [:lang, 'xml:lang'.to_sym]
|
400
400
|
events = [
|
401
|
-
:onclick, :ondblclick, :onmousedown, :onmouseup, :onmouseover,
|
401
|
+
:onclick, :ondblclick, :onmousedown, :onmouseup, :onmouseover,
|
402
402
|
:onmousemove, :onmouseout,
|
403
|
-
:onkeypress, :onkeydown, :onkeyup]
|
403
|
+
:onkeypress, :onkeydown, :onkeyup]
|
404
404
|
attrs = coreattrs + i18n + events
|
405
405
|
cellhalign = [:align, :char, :charoff]
|
406
406
|
cellvalign = [:valign]
|
@@ -408,32 +408,32 @@ It is copied as a standard HTML attribute.
|
|
408
408
|
['body', attrs + [:onload, :onunload]],
|
409
409
|
['address', attrs],
|
410
410
|
['div', attrs],
|
411
|
-
['a', attrs+[:charset, :type, :name, :rel, :rev, :accesskey, :shape, :coords, :tabindex,
|
411
|
+
['a', attrs+[:charset, :type, :name, :rel, :rev, :accesskey, :shape, :coords, :tabindex,
|
412
412
|
:onfocus,:onblur]],
|
413
413
|
['img', attrs + [:longdesc, :name, :height, :width, :alt] ],
|
414
414
|
['p', attrs],
|
415
|
-
[['h1','h2','h3','h4','h5','h6'], attrs],
|
415
|
+
[['h1','h2','h3','h4','h5','h6'], attrs],
|
416
416
|
[['pre'], attrs],
|
417
417
|
[['q', 'blockquote'], attrs+[:cite]],
|
418
418
|
[['ins','del'], attrs+[:cite,:datetime]],
|
419
419
|
[['ol','ul','li'], attrs],
|
420
420
|
['table',attrs+[:summary, :width, :frame, :rules, :border, :cellspacing, :cellpadding]],
|
421
|
-
['caption',attrs],
|
421
|
+
['caption',attrs],
|
422
422
|
[['colgroup','col'],attrs+[:span, :width]+cellhalign+cellvalign],
|
423
423
|
[['thead','tbody','tfoot'], attrs+cellhalign+cellvalign],
|
424
424
|
[['td','td','th'], attrs+[:abbr, :axis, :headers, :scope, :rowspan, :colspan, :cellvalign, :cellhalign]],
|
425
|
-
|
425
|
+
|
426
426
|
# altri
|
427
427
|
[['em','code','strong','hr','span','dl','dd','dt'], attrs]
|
428
428
|
].each do |el, a| [*el].each do |e| HTML4Attributes[e] = a end end
|
429
|
-
|
430
|
-
|
429
|
+
|
430
|
+
|
431
431
|
def create_html_element(name, attributes_to_copy=[])
|
432
432
|
m = Element.new name
|
433
|
-
if atts = HTML4Attributes[name] then
|
433
|
+
if atts = HTML4Attributes[name] then
|
434
434
|
atts.each do |att|
|
435
|
-
if v = @attributes[att] then
|
436
|
-
m.attributes[att.to_s] = v.to_s
|
435
|
+
if v = @attributes[att] then
|
436
|
+
m.attributes[att.to_s] = v.to_s
|
437
437
|
end
|
438
438
|
end
|
439
439
|
else
|
@@ -442,24 +442,24 @@ It is copied as a standard HTML attribute.
|
|
442
442
|
m
|
443
443
|
end
|
444
444
|
|
445
|
-
|
445
|
+
|
446
446
|
def to_html_ul
|
447
447
|
if @attributes[:toc]
|
448
448
|
# render toc
|
449
449
|
html_toc = @doc.toc.to_html
|
450
450
|
return html_toc
|
451
451
|
else
|
452
|
-
add_ws wrap_as_element('ul')
|
452
|
+
add_ws wrap_as_element('ul')
|
453
453
|
end
|
454
454
|
end
|
455
|
-
|
456
|
-
|
455
|
+
|
456
|
+
|
457
457
|
def to_html_paragraph
|
458
458
|
#add_ws wrap_as_element('p')
|
459
459
|
dt = Element.new 'p'
|
460
460
|
dt.attributes['class'] = 'drop-target'
|
461
461
|
dt.attributes['line_no'] = Thread.current['line_no']
|
462
|
-
dt.attributes['delegate'] = 'plan' # should most likely go into the js column handler
|
462
|
+
dt.attributes['delegate'] = 'plan' # should most likely go into the js column handler
|
463
463
|
p = wrap_as_element('p')
|
464
464
|
p.attributes['class'] = 'content'
|
465
465
|
[Text.new("\n"), p, dt, Text.new("\n")]
|
@@ -485,7 +485,7 @@ by Maruku, to have the same results in both HTML and LaTeX.
|
|
485
485
|
# nil if not applicable, else string
|
486
486
|
def section_number
|
487
487
|
return nil if not get_setting(:use_numbered_headers)
|
488
|
-
|
488
|
+
|
489
489
|
n = @attributes[:section_number]
|
490
490
|
if n && (not n.empty?)
|
491
491
|
n.join('.')+". "
|
@@ -493,7 +493,7 @@ by Maruku, to have the same results in both HTML and LaTeX.
|
|
493
493
|
nil
|
494
494
|
end
|
495
495
|
end
|
496
|
-
|
496
|
+
|
497
497
|
# nil if not applicable, else SPAN element
|
498
498
|
def render_section_number
|
499
499
|
# if we are bound to a section, add section number
|
@@ -506,11 +506,11 @@ by Maruku, to have the same results in both HTML and LaTeX.
|
|
506
506
|
nil
|
507
507
|
end
|
508
508
|
end
|
509
|
-
|
509
|
+
|
510
510
|
def to_html_header_orig
|
511
|
-
element_name = "h#{self.level}"
|
511
|
+
element_name = "h#{self.level}"
|
512
512
|
h = wrap_as_element element_name
|
513
|
-
|
513
|
+
|
514
514
|
if span = render_section_number
|
515
515
|
h.insert_before(h.children.first, span)
|
516
516
|
end
|
@@ -518,9 +518,9 @@ by Maruku, to have the same results in both HTML and LaTeX.
|
|
518
518
|
end
|
519
519
|
|
520
520
|
def to_html_header
|
521
|
-
element_name = "h#{self.level}"
|
521
|
+
element_name = "h#{self.level}"
|
522
522
|
h = wrap_as_element element_name
|
523
|
-
|
523
|
+
|
524
524
|
if span = render_section_number
|
525
525
|
h.insert_before(h.children.first, span)
|
526
526
|
end
|
@@ -535,7 +535,7 @@ by Maruku, to have the same results in both HTML and LaTeX.
|
|
535
535
|
source = source.gsub(/'/,''') # IE bug
|
536
536
|
Text.new(source, true, nil, true )
|
537
537
|
end
|
538
|
-
|
538
|
+
|
539
539
|
=begin maruku_doc
|
540
540
|
Attribute: html_use_syntax
|
541
541
|
Scope: global, document, element
|
@@ -552,8 +552,8 @@ Examples:
|
|
552
552
|
require 'maruku'
|
553
553
|
{:lang=ruby html_use_syntax=true}
|
554
554
|
|
555
|
-
and
|
556
|
-
|
555
|
+
and
|
556
|
+
|
557
557
|
<div style="text-align:center">Div</div>
|
558
558
|
{:lang=html html_use_syntax=true}
|
559
559
|
|
@@ -570,16 +570,16 @@ and
|
|
570
570
|
=end
|
571
571
|
|
572
572
|
$syntax_loaded = false
|
573
|
-
def to_html_code;
|
573
|
+
def to_html_code;
|
574
574
|
source = self.raw_code
|
575
575
|
|
576
|
-
lang = self.attributes[:lang] || @doc.attributes[:code_lang]
|
576
|
+
lang = self.attributes[:lang] || @doc.attributes[:code_lang]
|
577
577
|
|
578
578
|
lang = 'xml' if lang=='html'
|
579
579
|
|
580
580
|
use_syntax = get_setting :html_use_syntax
|
581
|
-
|
582
|
-
element =
|
581
|
+
|
582
|
+
element =
|
583
583
|
if use_syntax && lang
|
584
584
|
begin
|
585
585
|
if not $syntax_loaded
|
@@ -589,78 +589,78 @@ and
|
|
589
589
|
$syntax_loaded = true
|
590
590
|
end
|
591
591
|
convertor = Syntax::Convertors::HTML.for_syntax lang
|
592
|
-
|
592
|
+
|
593
593
|
# eliminate trailing newlines otherwise Syntax crashes
|
594
594
|
source = source.gsub(/\n*\Z/,'')
|
595
|
-
|
595
|
+
|
596
596
|
html = convertor.convert( source )
|
597
597
|
html = html.gsub(/\'/,''') # IE bug
|
598
598
|
html = html.gsub(/'/,''') # IE bug
|
599
|
-
# html = html.gsub(/&/,'&')
|
600
|
-
|
599
|
+
# html = html.gsub(/&/,'&')
|
600
|
+
|
601
601
|
code = Document.new(html, {:respect_whitespace =>:all}).root
|
602
602
|
code.name = 'code'
|
603
603
|
code.attributes['class'] = lang
|
604
604
|
code.attributes['lang'] = lang
|
605
|
-
|
605
|
+
|
606
606
|
pre = Element.new 'pre'
|
607
607
|
pre << code
|
608
608
|
pre
|
609
609
|
rescue LoadError => e
|
610
610
|
maruku_error "Could not load package 'syntax'.\n"+
|
611
611
|
"Please install it, for example using 'gem install syntax'."
|
612
|
-
to_html_code_using_pre(source)
|
612
|
+
to_html_code_using_pre(source)
|
613
613
|
rescue Object => e
|
614
614
|
maruku_error"Error while using the syntax library for code:\n#{source.inspect}"+
|
615
615
|
"Lang is #{lang} object is: \n"+
|
616
|
-
self.inspect +
|
616
|
+
self.inspect +
|
617
617
|
"\nException: #{e.class}: #{e.message}\n\t#{e.backtrace.join("\n\t")}"
|
618
|
-
|
618
|
+
|
619
619
|
tell_user("Using normal PRE because the syntax library did not work.")
|
620
620
|
to_html_code_using_pre(source)
|
621
621
|
end
|
622
622
|
else
|
623
623
|
to_html_code_using_pre(source)
|
624
624
|
end
|
625
|
-
|
625
|
+
|
626
626
|
color = get_setting(:code_background_color)
|
627
627
|
if color != Globals[:code_background_color]
|
628
628
|
element.attributes['style'] = "background-color: #{color};"
|
629
629
|
end
|
630
630
|
add_ws element
|
631
631
|
end
|
632
|
-
|
632
|
+
|
633
633
|
=begin maruku_doc
|
634
634
|
Attribute: code_background_color
|
635
635
|
Scope: global, document, element
|
636
636
|
Summary: Background color for code blocks.
|
637
637
|
|
638
638
|
The format is either a named color (`green`, `red`) or a CSS color
|
639
|
-
of the form `#ff00ff`.
|
639
|
+
of the form `#ff00ff`.
|
640
640
|
|
641
|
-
* for **HTML output**, the value is put straight in the `background-color` CSS
|
641
|
+
* for **HTML output**, the value is put straight in the `background-color` CSS
|
642
642
|
property of the block.
|
643
643
|
|
644
644
|
* for **LaTeX output**, if it is a named color, it must be a color accepted
|
645
645
|
by the LaTeX `color` packages. If it is of the form `#ff00ff`, Maruku
|
646
|
-
defines a color using the `\color[rgb]{r,g,b}` macro.
|
646
|
+
defines a color using the `\color[rgb]{r,g,b}` macro.
|
647
647
|
|
648
648
|
For example, for `#0000ff`, the macro is called as: `\color[rgb]{0,0,1}`.
|
649
649
|
|
650
650
|
=end
|
651
|
-
|
652
|
-
|
651
|
+
|
652
|
+
|
653
653
|
def to_html_code_using_pre(source)
|
654
654
|
pre = create_html_element 'pre'
|
655
655
|
code = Element.new 'code', pre
|
656
656
|
s = source
|
657
|
-
|
657
|
+
|
658
658
|
# s = s.gsub(/&/,'&')
|
659
659
|
s = Text.normalize(s)
|
660
660
|
s = s.gsub(/\'/,''') # IE bug
|
661
661
|
s = s.gsub(/'/,''') # IE bug
|
662
662
|
|
663
|
-
if get_setting(:code_show_spaces)
|
663
|
+
if get_setting(:code_show_spaces)
|
664
664
|
# 187 = raquo
|
665
665
|
# 160 = nbsp
|
666
666
|
# 172 = not
|
@@ -669,7 +669,7 @@ of the form `#ff00ff`.
|
|
669
669
|
end
|
670
670
|
|
671
671
|
text = Text.new(s, respect_ws=true, parent=nil, raw=true )
|
672
|
-
|
672
|
+
|
673
673
|
if lang = self.attributes[:lang]
|
674
674
|
code.attributes['lang'] = lang
|
675
675
|
code.attributes['class'] = lang
|
@@ -678,21 +678,21 @@ of the form `#ff00ff`.
|
|
678
678
|
pre
|
679
679
|
end
|
680
680
|
|
681
|
-
def to_html_inline_code;
|
681
|
+
def to_html_inline_code;
|
682
682
|
pre = create_html_element 'code'
|
683
683
|
source = self.raw_code
|
684
|
-
pre << source2html(source)
|
685
|
-
|
684
|
+
pre << source2html(source)
|
685
|
+
|
686
686
|
color = get_setting(:code_background_color)
|
687
687
|
if color != Globals[:code_background_color]
|
688
688
|
pre.attributes['style'] = "background-color: #{color};"+(pre.attributes['style']||"")
|
689
689
|
end
|
690
|
-
|
690
|
+
|
691
691
|
pre
|
692
692
|
end
|
693
693
|
|
694
694
|
def add_class_to(el, cl)
|
695
|
-
el.attributes['class'] =
|
695
|
+
el.attributes['class'] =
|
696
696
|
if already = el.attributes['class']
|
697
697
|
already + " " + cl
|
698
698
|
else
|
@@ -702,10 +702,10 @@ of the form `#ff00ff`.
|
|
702
702
|
|
703
703
|
def add_class_to_link(a)
|
704
704
|
return # not ready yet
|
705
|
-
|
705
|
+
|
706
706
|
# url = a.attributes['href']
|
707
707
|
# return if not url
|
708
|
-
#
|
708
|
+
#
|
709
709
|
# if url =~ /^#/
|
710
710
|
# add_class_to(a, 'maruku-link-samedoc')
|
711
711
|
# elsif url =~ /^http:/
|
@@ -713,11 +713,11 @@ of the form `#ff00ff`.
|
|
713
713
|
# else
|
714
714
|
# add_class_to(a, 'maruku-link-local')
|
715
715
|
# end
|
716
|
-
#
|
716
|
+
#
|
717
717
|
# puts a.attributes['class']
|
718
718
|
end
|
719
|
-
|
720
|
-
|
719
|
+
|
720
|
+
|
721
721
|
def to_html_immediate_link
|
722
722
|
a = create_html_element 'a'
|
723
723
|
url = self.url
|
@@ -727,11 +727,11 @@ of the form `#ff00ff`.
|
|
727
727
|
add_class_to_link(a)
|
728
728
|
a
|
729
729
|
end
|
730
|
-
|
730
|
+
|
731
731
|
def to_html_link
|
732
732
|
a = wrap_as_element 'a'
|
733
733
|
id = self.ref_id
|
734
|
-
|
734
|
+
|
735
735
|
if ref = @doc.refs[id]
|
736
736
|
url = ref[:url]
|
737
737
|
title = ref[:title]
|
@@ -747,12 +747,13 @@ of the form `#ff00ff`.
|
|
747
747
|
# add_class_to_link(a)
|
748
748
|
return a
|
749
749
|
end
|
750
|
-
|
750
|
+
|
751
751
|
def to_html_im_link
|
752
752
|
if url = self.url
|
753
753
|
title = self.title
|
754
754
|
a = wrap_as_element 'a'
|
755
755
|
a.attributes['href'] = url
|
756
|
+
a.attributes['xhref'] = url # BUG ALERT: Strange behaviour of jquery's replaceWith related to href
|
756
757
|
a.attributes['title'] = title if title
|
757
758
|
return a
|
758
759
|
else
|
@@ -761,12 +762,12 @@ of the form `#ff00ff`.
|
|
761
762
|
return wrap_as_element('span')
|
762
763
|
end
|
763
764
|
end
|
764
|
-
|
765
|
+
|
765
766
|
def add_ws(e)
|
766
767
|
[Text.new("\n"), e, Text.new("\n")]
|
767
768
|
end
|
768
769
|
##### Email address
|
769
|
-
|
770
|
+
|
770
771
|
def obfuscate(s)
|
771
772
|
res = ''
|
772
773
|
s.each_byte do |char|
|
@@ -774,7 +775,7 @@ of the form `#ff00ff`.
|
|
774
775
|
end
|
775
776
|
res
|
776
777
|
end
|
777
|
-
|
778
|
+
|
778
779
|
def to_html_email_address
|
779
780
|
email = self.email
|
780
781
|
a = create_html_element 'a'
|
@@ -783,7 +784,7 @@ of the form `#ff00ff`.
|
|
783
784
|
#"mailto:"+obfuscate(email),false,nil,true))
|
784
785
|
# Sorry, for the moment it doesn't work
|
785
786
|
a.attributes['href'] = "mailto:#{email}"
|
786
|
-
|
787
|
+
|
787
788
|
a << Text.new(obfuscate(email),false,nil,true)
|
788
789
|
a
|
789
790
|
end
|
@@ -797,7 +798,7 @@ of the form `#ff00ff`.
|
|
797
798
|
url = ref[:url]
|
798
799
|
title = ref[:title]
|
799
800
|
a.attributes['src'] = url.to_s
|
800
|
-
a.attributes['alt'] = children_to_s
|
801
|
+
a.attributes['alt'] = children_to_s
|
801
802
|
else
|
802
803
|
maruku_error"Could not find id = #{id.inspect} for\n #{self.inspect}"
|
803
804
|
tell_user "Could not create image with ref_id = #{id.inspect};"+
|
@@ -807,7 +808,7 @@ of the form `#ff00ff`.
|
|
807
808
|
raise "IMAGE: #{url}"
|
808
809
|
return a
|
809
810
|
end
|
810
|
-
|
811
|
+
|
811
812
|
def to_html_im_image
|
812
813
|
if not url = self.url
|
813
814
|
maruku_error "Image with no url: #{self.inspect}"
|
@@ -822,7 +823,7 @@ of the form `#ff00ff`.
|
|
822
823
|
title = self.title
|
823
824
|
a = create_html_element 'img'
|
824
825
|
a.attributes['src'] = url.to_s
|
825
|
-
a.attributes['alt'] = children_to_s
|
826
|
+
a.attributes['alt'] = children_to_s
|
826
827
|
return a
|
827
828
|
end
|
828
829
|
|
@@ -836,7 +837,7 @@ If true, raw HTML is discarded from the output.
|
|
836
837
|
|
837
838
|
def to_html_raw_html
|
838
839
|
return [] if get_setting(:filter_html)
|
839
|
-
|
840
|
+
|
840
841
|
raw_html = self.raw_html
|
841
842
|
if rexml_doc = @parsed_html
|
842
843
|
root = rexml_doc.root
|
@@ -849,9 +850,9 @@ If true, raw HTML is discarded from the output.
|
|
849
850
|
#div << Text.new(s)
|
850
851
|
return div
|
851
852
|
end
|
852
|
-
|
853
|
+
|
853
854
|
# copies the @children array (FIXME is it deep?)
|
854
|
-
elements = root.to_a
|
855
|
+
elements = root.to_a
|
855
856
|
return elements
|
856
857
|
else # invalid
|
857
858
|
# Creates red box with offending HTML
|
@@ -871,28 +872,28 @@ If true, raw HTML is discarded from the output.
|
|
871
872
|
abbr.attributes['title'] = self.title if self.title
|
872
873
|
abbr
|
873
874
|
end
|
874
|
-
|
875
|
+
|
875
876
|
def to_html_footnote_reference
|
876
877
|
id = self.footnote_id
|
877
|
-
|
878
|
+
|
878
879
|
# save the order of used footnotes
|
879
880
|
order = @doc.footnotes_order
|
880
|
-
|
881
|
+
|
881
882
|
if order.include? id
|
882
883
|
# footnote has already been used
|
883
884
|
return []
|
884
885
|
end
|
885
|
-
|
886
|
+
|
886
887
|
if not @doc.footnotes[id]
|
887
888
|
return []
|
888
889
|
end
|
889
|
-
|
890
|
+
|
890
891
|
# take next number
|
891
892
|
order << id
|
892
|
-
|
893
|
-
#num = order.size;
|
893
|
+
|
894
|
+
#num = order.size;
|
894
895
|
num = order.index(id) + 1
|
895
|
-
|
896
|
+
|
896
897
|
sup = Element.new 'sup'
|
897
898
|
sup.attributes['id'] = "#{get_setting(:doc_prefix)}fnref:#{num}"
|
898
899
|
a = Element.new 'a'
|
@@ -900,15 +901,15 @@ If true, raw HTML is discarded from the output.
|
|
900
901
|
a.attributes['href'] = "\##{get_setting(:doc_prefix)}fn:#{num}"
|
901
902
|
a.attributes['rel'] = 'footnote'
|
902
903
|
sup << a
|
903
|
-
|
904
|
+
|
904
905
|
sup
|
905
906
|
end
|
906
|
-
|
907
|
+
|
907
908
|
## Definition lists ###
|
908
909
|
def to_html_definition_list() add_ws wrap_as_element('dl') end
|
909
910
|
def to_html_definition() children_to_html end
|
910
911
|
def to_html_definition_term() add_ws wrap_as_element('dt') end
|
911
|
-
def to_html_definition_data() add_ws wrap_as_element('dd') end
|
912
|
+
def to_html_definition_data() add_ws wrap_as_element('dd') end
|
912
913
|
|
913
914
|
# FIXME: Ugly code
|
914
915
|
def to_html_table
|
@@ -922,28 +923,28 @@ If true, raw HTML is discarded from the output.
|
|
922
923
|
rows << @children.slice(i, num_columns)
|
923
924
|
i += num_columns
|
924
925
|
end
|
925
|
-
|
926
|
+
|
926
927
|
table = create_html_element 'table'
|
927
928
|
thead = Element.new 'thead'
|
928
929
|
tr = Element.new 'tr'
|
929
930
|
array_to_html(head).each do |x| tr<<x end
|
930
931
|
thead << tr
|
931
932
|
table << thead
|
932
|
-
|
933
|
+
|
933
934
|
tbody = Element.new 'tbody'
|
934
935
|
rows.each do |row|
|
935
936
|
tr = Element.new 'tr'
|
936
|
-
array_to_html(row).each_with_index do |x,i|
|
937
|
-
x.attributes['style'] ="text-align: #{align[i].to_s};"
|
938
|
-
tr<<x
|
937
|
+
array_to_html(row).each_with_index do |x,i|
|
938
|
+
x.attributes['style'] ="text-align: #{align[i].to_s};"
|
939
|
+
tr<<x
|
939
940
|
end
|
940
|
-
|
941
|
+
|
941
942
|
tbody << tr << Text.new("\n")
|
942
943
|
end
|
943
944
|
table << tbody
|
944
945
|
table
|
945
946
|
end
|
946
|
-
|
947
|
+
|
947
948
|
def to_html_head_cell; wrap_as_element('th') end
|
948
949
|
def to_html_cell
|
949
950
|
if @attributes[:scope]
|
@@ -952,22 +953,22 @@ If true, raw HTML is discarded from the output.
|
|
952
953
|
wrap_as_element('td')
|
953
954
|
end
|
954
955
|
end
|
955
|
-
|
956
|
-
def to_html_entity
|
956
|
+
|
957
|
+
def to_html_entity
|
957
958
|
MaRuKu::Out::Latex.need_entity_table
|
958
|
-
|
959
|
+
|
959
960
|
entity_name = self.entity_name
|
960
|
-
|
961
|
+
|
961
962
|
if (e = MaRuKu::Out::Latex::ENTITY_TABLE[entity_name]) && e.html_num
|
962
963
|
entity_name = e.html_num
|
963
964
|
end
|
964
|
-
|
965
|
+
|
965
966
|
# Fix for Internet Explorer
|
966
967
|
if entity_name == 'apos'
|
967
968
|
entity_name = 39
|
968
969
|
end
|
969
970
|
|
970
|
-
|
971
|
+
|
971
972
|
if entity_name.kind_of? Fixnum
|
972
973
|
# Entity.new(entity_name)
|
973
974
|
Text.new('&#%d;' % [entity_name], false, nil, true)
|
@@ -993,7 +994,7 @@ If true, raw HTML is discarded from the output.
|
|
993
994
|
# puts "init: #{res.inspect}"
|
994
995
|
first_header = true
|
995
996
|
array.each do |c|
|
996
|
-
method = c.kind_of?(MDElement) ?
|
997
|
+
method = c.kind_of?(MDElement) ?
|
997
998
|
"to_html_#{c.node_type}" : "to_html"
|
998
999
|
|
999
1000
|
if not c.respond_to?(method)
|
@@ -1001,7 +1002,7 @@ If true, raw HTML is discarded from the output.
|
|
1001
1002
|
next
|
1002
1003
|
end
|
1003
1004
|
|
1004
|
-
|
1005
|
+
|
1005
1006
|
Thread.current['line_no'] = c.line_no if c.respond_to? :line_no
|
1006
1007
|
h = c.send(method)
|
1007
1008
|
# puts "HHHHH: #{h.inspect} e: #{e.inspect}"
|