29
30:- module(markitup,
31 [ markitup//1
32 ]). 33:- use_module(library(http/http_dispatch)). 34:- use_module(library(http/html_head)). 35:- use_module(library(http/http_parameters)). 36:- use_module(library(http/html_write)). 37:- use_module(library(http/js_write)). 38:- use_module(library(option)). 39:- use_module(library(debug)). 40:- use_module(markdown). 41:- use_module(wiki).
48:- http_handler(root('markitup/preview/markdown'), preview_markdown, []). 49:- http_handler(root('markitup/preview/pldoc'), preview_pldoc, []). 50
51:- html_resource(js('markitup/jquery.markitup.js'),
52 [ requires([ jquery
53 ])
54 ]). 55:- html_resource(js('markitup/sets/markdown/set.js'),
56 [ requires([ js('markitup/jquery.markitup.js'),
57 js('markitup/skins/markitup/style.css'),
58 js('markitup/sets/markdown/style.css')
59 ])
60 ]). 61:- html_resource(markdown,
62 [ virtual(true),
63 requires([ js('markitup/sets/markdown/set.js')
64 ])
65 ]). 66:- html_resource(js('markitup/sets/pldoc/set.js'),
67 [ requires([ js('markitup/jquery.markitup.js'),
68 js('markitup/skins/markitup/style.css'),
69 js('markitup/sets/pldoc/style.css')
70 ])
71 ]). 72:- html_resource(pldoc,
73 [ virtual(true),
74 requires([ js('markitup/sets/pldoc/set.js')
75 ])
76 ]).
82markitup(Options) -->
83 { option(markup(Language), Options, markdown),
84 option(id(Id), Options, markdown),
85 option(name(Name), Options, Id),
86 option(cols(Cols), Options, 80),
87 option(rows(Rows), Options, 20),
88 option(value(Content), Options, []),
89 option(preview(Preview), Options, false)
90 },
91 html_requires(Language),
92 html(textarea([id(Id), name(Name), cols(Cols), rows(Rows)], Content)),
93 js_script({|javascript(Id,Language,Preview)||
94 $(document).ready(function() {
95 $("#"+Id).markItUp(eval(Language+"_settings"));
96 if ( eval(Preview) ) {
97 $('a[title="Preview"]').trigger("mouseup");
98 }
99 });
100 |}).
109preview_markdown(Request) :-
110 http_parameters(Request,
111 [ data(Data, [optional(true), default('')])
112 ]),
113 debug(markitup(preview), 'Preview:~n~w~n', [Data]),
114 open_atom_stream(Data, In),
115 markdown_dom(stream(In), DOM),
116 phrase(html(DOM), Tokens),
117 format('Content-type: text/html; charset=UTF-8\n\n'),
118 print_html(Tokens).
126preview_pldoc(Request) :-
127 http_parameters(Request,
128 [ data(Data, [optional(true), default('')])
129 ]),
130 debug(markitup(preview), 'Preview:~n~w~n', [Data]),
131 atom_codes(Data, Codes),
132 wiki_file_codes_to_dom(Codes, '/', DOM), 133 phrase(page(plain, [], [\html_requires(pldoc)|DOM]), Tokens),
134 format('Content-type: text/html; charset=UTF-8\n\n'),
135 print_html(Tokens).
136
137
138 141
142open_atom_stream(Atom, Stream) :-
143 atom_to_memory_file(Atom, MF),
144 open_memory_file(MF, read, Stream,
145 [ free_on_close(true)
146 ])
Wrapper for markItUp ajax markup editor