w2tags 0.9.3
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +340 -0
- data/LICENSE +6 -0
- data/MIT-LICENSE +18 -0
- data/Manifest.txt +95 -0
- data/README.rdoc +264 -0
- data/Rakefile +23 -0
- data/VERSION +1 -0
- data/bin/w2tags +143 -0
- data/doc/ERB.HOT.rdoc +82 -0
- data/doc/FAQ.rdoc +81 -0
- data/doc/HAML.rdoc +310 -0
- data/doc/HOT.rdoc +137 -0
- data/doc/History.rdoc +757 -0
- data/doc/W2TAGS.rdoc +150 -0
- data/example/common.hot +11 -0
- data/example/from_readme.erb +78 -0
- data/example/from_readme.w2erb +64 -0
- data/example/from_w2tags.erb +32 -0
- data/example/from_w2tags.w2erb +32 -0
- data/example/rails_basic.hot +10 -0
- data/hot/erb.hot +156 -0
- data/hot/erb_form.hot +42 -0
- data/hot/erb_head.hot +15 -0
- data/hot/erb_jquery.hot +8 -0
- data/hot/erb_merb.hot +12 -0
- data/hot/erb_table.hot +43 -0
- data/hot/html.hot +31 -0
- data/hot/jquery.hot +88 -0
- data/hot/nvelocity.hot +23 -0
- data/hot/rails/sc_zebra.hot +10 -0
- data/hot/rails/scaffold.hot +15 -0
- data/hot/vm.hot +9 -0
- data/hot/vm2.hot +34 -0
- data/hot/vm_crud.hot +34 -0
- data/hot/vm_popup.hot +74 -0
- data/hot/xul.hot +114 -0
- data/lib/w2tags/block/plain_text.rb +57 -0
- data/lib/w2tags/block/remark.rb +37 -0
- data/lib/w2tags/block/sass.rb +66 -0
- data/lib/w2tags/merb_hook.rb +15 -0
- data/lib/w2tags/parser.rb +975 -0
- data/lib/w2tags/rails_hook.rb +15 -0
- data/lib/w2tags/sinatra_hook.rb +50 -0
- data/lib/w2tags.rb +100 -0
- data/plugins//w2tags//README +2 -0
- data/plugins//w2tags//generators//w2scaffold//USAGE +29 -0
- data/plugins//w2tags//generators//w2scaffold//templates//controller.rb +85 -0
- data/plugins//w2tags//generators//w2scaffold//templates//functional_test.rb +45 -0
- data/plugins//w2tags//generators//w2scaffold//templates//helper.rb +2 -0
- data/plugins//w2tags//generators//w2scaffold//templates//helper_test.rb +4 -0
- data/plugins//w2tags//generators//w2scaffold//templates//layout.html.erb +17 -0
- data/plugins//w2tags//generators//w2scaffold//templates//style.css +54 -0
- data/plugins//w2tags//generators//w2scaffold//templates//view_edit.html.erb +18 -0
- data/plugins//w2tags//generators//w2scaffold//templates//view_edit.html.w2erb +17 -0
- data/plugins//w2tags//generators//w2scaffold//templates//view_index.html.erb +24 -0
- data/plugins//w2tags//generators//w2scaffold//templates//view_index.html.w2erb +14 -0
- data/plugins//w2tags//generators//w2scaffold//templates//view_new.html.erb +17 -0
- data/plugins//w2tags//generators//w2scaffold//templates//view_new.html.w2erb +16 -0
- data/plugins//w2tags//generators//w2scaffold//templates//view_show.html.erb +10 -0
- data/plugins//w2tags//generators//w2scaffold//templates//view_show.html.w2erb +9 -0
- data/plugins//w2tags//generators//w2scaffold//w2scaffold_generator.rb +106 -0
- data/plugins//w2tags//install.rb +1 -0
- data/spec/spec_helper.rb +17 -0
- data/spec/w2tags_spec.rb +8 -0
- data/tasks/ann.rake +81 -0
- data/tasks/bones.rake +21 -0
- data/tasks/gem.rake +126 -0
- data/tasks/git.rake +41 -0
- data/tasks/manifest.rake +49 -0
- data/tasks/notes.rake +28 -0
- data/tasks/post_load.rake +39 -0
- data/tasks/rdoc.rake +51 -0
- data/tasks/rubyforge.rake +57 -0
- data/tasks/setup.rb +268 -0
- data/tasks/spec.rake +55 -0
- data/tasks/svn.rake +48 -0
- data/tasks/test.rake +38 -0
- data/test/enlightning.hot +3 -0
- data/test/feature.hot +28 -0
- data/test/parser_test.rb +203 -0
- data/test/tricky.hot +8 -0
- data/test/vars.hot +30 -0
- data/test/w2tags_basic_usability.rb +187 -0
- data/test/w2tags_enlightning.rb +42 -0
- data/test/w2tags_form.rb +32 -0
- data/test/w2tags_hot.rb +85 -0
- data/test/w2tags_hot_var.rb +115 -0
- data/test/w2tags_no_parsing.rb +37 -0
- metadata +163 -0
data/doc/HAML.rdoc
ADDED
@@ -0,0 +1,310 @@
|
|
1
|
+
== W2TAGS mimics HAML command
|
2
|
+
|
3
|
+
w2tags mimics HAML command, these are my decission to make it easy for
|
4
|
+
users that already use HAML templating engines, but not all command implemented.
|
5
|
+
|
6
|
+
To new users on HAML, I think is not hard to understand of the HAML command,
|
7
|
+
I'll explain basic of W2TAGS HAML like command on w2tags.
|
8
|
+
|
9
|
+
Rule of W2TAGS HAML like command are:
|
10
|
+
|
11
|
+
* begin with token ( /[ \t]*TOKEN/ ) of command
|
12
|
+
* indentations to make tag have a block of children-tag, or children-tag are
|
13
|
+
element of tag with more spaces than parent tag.
|
14
|
+
* Auto closing will be added (from previouse tag) if indentations less spaces.
|
15
|
+
* Tags-Formating (%) have character that will represent an ID(#), CLASS(.),
|
16
|
+
Attribute({}), Ruby Code(=), and Ruby String(==) or I call it Key-Variable.
|
17
|
+
|
18
|
+
List of HAML command. This list are the HAML command that token begin with:
|
19
|
+
|
20
|
+
% Tag formating
|
21
|
+
# div formating with attribute id
|
22
|
+
. div formating with attribute class
|
23
|
+
\ line text / no parsing
|
24
|
+
- translate to Ruby code
|
25
|
+
= translate to Ruby code
|
26
|
+
== translate to Ruby String
|
27
|
+
-# block remark / comment not include on result
|
28
|
+
-! block not parse
|
29
|
+
|
30
|
+
For details implementation, you must see on each explanation of these command below.
|
31
|
+
|
32
|
+
=== % Tag Formating
|
33
|
+
|
34
|
+
==== Basic syntax ( %TAG )
|
35
|
+
|
36
|
+
%ul
|
37
|
+
%li List
|
38
|
+
%li New
|
39
|
+
|
40
|
+
result:
|
41
|
+
|
42
|
+
<ul>
|
43
|
+
<li>List</li>
|
44
|
+
<li>New</li>
|
45
|
+
</ul>
|
46
|
+
|
47
|
+
==== Tag with ID ( %TAG#ID )
|
48
|
+
|
49
|
+
%ul#menu
|
50
|
+
|
51
|
+
result:
|
52
|
+
|
53
|
+
<ul id="menu">
|
54
|
+
</ul>
|
55
|
+
|
56
|
+
==== Tag with CLASS ( %TAG.CLASS )
|
57
|
+
|
58
|
+
%ul.main_side
|
59
|
+
|
60
|
+
result:
|
61
|
+
|
62
|
+
<ul class="main_side">
|
63
|
+
</ul>
|
64
|
+
|
65
|
+
==== Tag with ID CLASS ( %TAG#ID.CLASS )
|
66
|
+
|
67
|
+
%ul#menu.main_side
|
68
|
+
|
69
|
+
result:
|
70
|
+
|
71
|
+
<ul id="menu" class="main_side">
|
72
|
+
</ul>
|
73
|
+
|
74
|
+
==== Tag with Attributes
|
75
|
+
|
76
|
+
this implementations is difference, on w2tags you type (inside "{}") it
|
77
|
+
just like regular attribute must be type.
|
78
|
+
|
79
|
+
%li.hot{line="1"} List
|
80
|
+
|
81
|
+
result:
|
82
|
+
|
83
|
+
<li line="1" class="hot">List</li>
|
84
|
+
|
85
|
+
==== Tag with Shortcut to Ruby code (=)
|
86
|
+
|
87
|
+
%div= @value
|
88
|
+
|
89
|
+
result:
|
90
|
+
|
91
|
+
<div><%= @value %></div>
|
92
|
+
|
93
|
+
==== Tag with Shortcut to Ruby String (==)
|
94
|
+
|
95
|
+
%div== #{@value}
|
96
|
+
|
97
|
+
result:
|
98
|
+
|
99
|
+
<div><%= "#{@value}" %></div>
|
100
|
+
|
101
|
+
==== Rule of Combination
|
102
|
+
|
103
|
+
Combination of ID, CLASS, Attribute, and "Ruby", just follow from left to the right order,
|
104
|
+
you can have all of this or you can ommit some of this, you can check example below:
|
105
|
+
|
106
|
+
Source:
|
107
|
+
|
108
|
+
%div#menu.content.light/
|
109
|
+
%div#id.class1.class2{row="1"}/
|
110
|
+
%div#id.class1/
|
111
|
+
%div#id.class2/
|
112
|
+
%div#id{row="1"}/
|
113
|
+
%div#id/
|
114
|
+
%div.class1.class2{row="1"}/
|
115
|
+
%div.class2.class1{row="1"}/
|
116
|
+
%div.class1{row="1"}/
|
117
|
+
%div.class2{row="1"}/
|
118
|
+
%div.class1/
|
119
|
+
%div.class2/
|
120
|
+
%div{row="1"}/
|
121
|
+
|
122
|
+
Same as:
|
123
|
+
|
124
|
+
#menu.content.light/
|
125
|
+
#id.class1.class2{row="1"}/
|
126
|
+
#id.class1/
|
127
|
+
#id.class2/
|
128
|
+
#id{row="1"}/
|
129
|
+
#id/
|
130
|
+
.class1.class2{row="1"}/
|
131
|
+
.class2.class1{row="1"}/
|
132
|
+
.class1{row="1"}/
|
133
|
+
.class2{row="1"}/
|
134
|
+
.class1/
|
135
|
+
.class2/
|
136
|
+
%div{row="1"}/
|
137
|
+
|
138
|
+
Result:
|
139
|
+
|
140
|
+
<div id="menu" class="content light"/>
|
141
|
+
<div id="id" class="class1 class2" row="1"/>
|
142
|
+
<div id="id" class="class1"/>
|
143
|
+
<div id="id" class="class2"/>
|
144
|
+
<div id="id" row="1"/>
|
145
|
+
<div id="id"/>
|
146
|
+
<div class="class1 class2" row="1"/>
|
147
|
+
<div class="class2 class1" row="1"/>
|
148
|
+
<div class="class1" row="1"/>
|
149
|
+
<div class="class2" row="1"/>
|
150
|
+
<div class="class1"/>
|
151
|
+
<div class="class2"/>
|
152
|
+
<div row="1"/>
|
153
|
+
|
154
|
+
Source:
|
155
|
+
|
156
|
+
%div#menu.content.light= Harsojo
|
157
|
+
%div#id.class1.class2{row="1"}= Harsojo
|
158
|
+
%div#id.class1= Harsojo
|
159
|
+
%div#id.class2= Harsojo
|
160
|
+
%div#id{row="1"}= Harsojo
|
161
|
+
%div#id= Harsojo
|
162
|
+
%div.class1.class2{row="1"}= Harsojo
|
163
|
+
%div.class2.class1{row="1"}= Harsojo
|
164
|
+
%div.class1{row="1"}= Harsojo
|
165
|
+
%div.class2{row="1"}= Harsojo
|
166
|
+
%div.class1= Harsojo
|
167
|
+
%div.class2= Harsojo
|
168
|
+
%div{row="1"}= Harsojo
|
169
|
+
|
170
|
+
result:
|
171
|
+
|
172
|
+
<div id="menu" class="content light"><%= Harsojo %></div>
|
173
|
+
<div id="id" class="class1 class2" row="1"><%= Harsojo %></div>
|
174
|
+
<div id="id" class="class1"><%= Harsojo %></div>
|
175
|
+
<div id="id" class="class2"><%= Harsojo %></div>
|
176
|
+
<div id="id" row="1"><%= Harsojo %></div>
|
177
|
+
<div id="id"><%= Harsojo %></div>
|
178
|
+
<div class="class1 class2" row="1"><%= Harsojo %></div>
|
179
|
+
<div class="class2 class1" row="1"><%= Harsojo %></div>
|
180
|
+
<div class="class1" row="1"><%= Harsojo %></div>
|
181
|
+
<div class="class2" row="1"><%= Harsojo %></div>
|
182
|
+
<div class="class1"><%= Harsojo %></div>
|
183
|
+
<div class="class2"><%= Harsojo %></div>
|
184
|
+
<div row="1"><%= Harsojo %></div>
|
185
|
+
|
186
|
+
Source:
|
187
|
+
|
188
|
+
%div#menu.content.light== Harsojo
|
189
|
+
%div#id.class1.class2{row="1"}== Harsojo
|
190
|
+
%div#id.class1== Harsojo
|
191
|
+
%div#id.class2== Harsojo
|
192
|
+
%div#id{row="1"}== Harsojo
|
193
|
+
%div#id== Harsojo
|
194
|
+
%div.class1.class2{row="1"}== Harsojo
|
195
|
+
%div.class2.class1{row="1"}== Harsojo
|
196
|
+
%div.class1{row="1"}== Harsojo
|
197
|
+
%div.class2{row="1"}== Harsojo
|
198
|
+
%div.class1== Harsojo
|
199
|
+
%div.class2== Harsojo
|
200
|
+
%div{row="1"}== Harsojo
|
201
|
+
|
202
|
+
result:
|
203
|
+
|
204
|
+
<div id="menu" class="content light"><%= "Harsojo" %></div>
|
205
|
+
<div id="id" class="class1 class2" row="1"><%= "Harsojo" %></div>
|
206
|
+
<div id="id" class="class1"><%= "Harsojo" %></div>
|
207
|
+
<div id="id" class="class2"><%= "Harsojo" %></div>
|
208
|
+
<div id="id" row="1"><%= "Harsojo" %></div>
|
209
|
+
<div id="id"><%= "Harsojo" %></div>
|
210
|
+
<div class="class1 class2" row="1"><%= "Harsojo" %></div>
|
211
|
+
<div class="class2 class1" row="1"><%= "Harsojo" %></div>
|
212
|
+
<div class="class1" row="1"><%= "Harsojo" %></div>
|
213
|
+
<div class="class2" row="1"><%= "Harsojo" %></div>
|
214
|
+
<div class="class1"><%= "Harsojo" %></div>
|
215
|
+
<div class="class2"><%= "Harsojo" %></div>
|
216
|
+
<div row="1"><%= "Harsojo" %></div>
|
217
|
+
|
218
|
+
=== # or . Shortcut for DIV Tag
|
219
|
+
As you can see on the example above, alot of command begin with "%div" and it spoted
|
220
|
+
as duplicated and need to refactor :(, luckly you can ommit that tag ("%div"),
|
221
|
+
to just write id or class as a HAML command.
|
222
|
+
|
223
|
+
==== # div formating with attribute id
|
224
|
+
|
225
|
+
#main
|
226
|
+
%ul#menu.main_side
|
227
|
+
%li.hot{line="1"} List
|
228
|
+
%li.hot{line="2"} New
|
229
|
+
|
230
|
+
result:
|
231
|
+
|
232
|
+
<div id="main">
|
233
|
+
<ul id="menu" class="main_side">
|
234
|
+
<li line="1" class="hot">List</li>
|
235
|
+
<li line="2" class="hot">New</li>
|
236
|
+
</ul>
|
237
|
+
</div>
|
238
|
+
|
239
|
+
==== . div formating with attribute class
|
240
|
+
|
241
|
+
.content
|
242
|
+
%ul#menu.main_side
|
243
|
+
%li.hot{line="1"} List
|
244
|
+
%li.hot{line="2"} New
|
245
|
+
|
246
|
+
result:
|
247
|
+
|
248
|
+
<div class="content">
|
249
|
+
<ul id="menu" class="main_side">
|
250
|
+
<li line="1" class="hot">List</li>
|
251
|
+
<li line="2" class="hot">New</li>
|
252
|
+
</ul>
|
253
|
+
</div>
|
254
|
+
|
255
|
+
==== Other Sample for Shortcut of DIV
|
256
|
+
|
257
|
+
#menu.content.light/
|
258
|
+
#id.class1.class2{row="1"}/
|
259
|
+
#id.class1/
|
260
|
+
#id.class2/
|
261
|
+
#id{row="1"}/
|
262
|
+
#id/
|
263
|
+
.class1.class2{row="1"}/
|
264
|
+
.class2.class1{row="1"}/
|
265
|
+
.class1{row="1"}/
|
266
|
+
.class2{row="1"}/
|
267
|
+
.class1/
|
268
|
+
.class2/
|
269
|
+
|
270
|
+
result:
|
271
|
+
|
272
|
+
<div id="menu" class="content light"/>
|
273
|
+
<div id="id" class="class1 class2" row="1"/>
|
274
|
+
<div id="id" class="class1"/>
|
275
|
+
<div id="id" class="class2"/>
|
276
|
+
<div id="id" row="1"/>
|
277
|
+
<div id="id"/>
|
278
|
+
<div class="class1 class2" row="1"/>
|
279
|
+
<div class="class2 class1" row="1"/>
|
280
|
+
<div class="class1" row="1"/>
|
281
|
+
<div class="class2" row="1"/>
|
282
|
+
<div class="class1"/>
|
283
|
+
<div class="class2"/>
|
284
|
+
|
285
|
+
=== \ line text / no parsing
|
286
|
+
|
287
|
+
when line text begin with \, \ will be ommited and the rest of line will become
|
288
|
+
a plain text no parsing to this line.
|
289
|
+
|
290
|
+
=== - translate to Ruby code
|
291
|
+
|
292
|
+
this is a shortcut that after "-", it put inside of "<% %>"
|
293
|
+
|
294
|
+
=== = translate to Ruby code
|
295
|
+
|
296
|
+
this is a shortcut that after "=", it put inside of "<%= %>"
|
297
|
+
|
298
|
+
==== == translate to Ruby String
|
299
|
+
|
300
|
+
this is a shortcut that after "=", it put inside of "<%=\" \"%>"
|
301
|
+
|
302
|
+
=== -# block remark / comment not include on result
|
303
|
+
|
304
|
+
line inside block of indentation (children of) will become a remark / comment
|
305
|
+
the result does not have this block
|
306
|
+
|
307
|
+
=== -! block not parse
|
308
|
+
|
309
|
+
line inside block of indentation (children-tag) will not be parse, this is usefull
|
310
|
+
for some block no need to parse ex: javascript.
|
data/doc/HOT.rdoc
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
== HOT Files
|
2
|
+
by Widi Harsojo, wharsojo.wordpress.com
|
3
|
+
|
4
|
+
code generate by w2tags are so useable because of the rule translation combine
|
5
|
+
with HOT files, in this section I'll explain some of the feature inside it, so
|
6
|
+
you will understand how HOT file is working.
|
7
|
+
|
8
|
+
== PARAMETERS VARIABLE (MAX:9)
|
9
|
+
|
10
|
+
$*, $0 - $9. When you invoke HOT command like this "-all_params one;two;three;four"
|
11
|
+
you are invoking HOT command with 4 parameters ($0,$1,$2,$3), and the translation will
|
12
|
+
be done like sample below:
|
13
|
+
|
14
|
+
>>_all_params
|
15
|
+
<div>$*</div>
|
16
|
+
-magic $*
|
17
|
+
$1
|
18
|
+
$0
|
19
|
+
|
20
|
+
>>_magic
|
21
|
+
<magic>$0</magic>
|
22
|
+
|
23
|
+
$* meaning: this variable will be fill-in after all parameters got fill-in, as example
|
24
|
+
we supply 4 parameters and parameters fill in to variable only two ($0 = "one", $1 = "two")
|
25
|
+
the rest will go to variable $* = "three;four"
|
26
|
+
|
27
|
+
!hot!test
|
28
|
+
-all_params one;two;three;four
|
29
|
+
|
30
|
+
<div>three;four</div>
|
31
|
+
<magic>three</magic>
|
32
|
+
<magic>four</magic>
|
33
|
+
two
|
34
|
+
one
|
35
|
+
|
36
|
+
remember passing paramter to HOT doesn't mean that variable must start from
|
37
|
+
zero, its only a guide that you can have multiple params to pass in correct order
|
38
|
+
see sample after change the HOT but the result still the same
|
39
|
+
|
40
|
+
>>_all_params
|
41
|
+
<div>$*</div>
|
42
|
+
-magic $*
|
43
|
+
$4
|
44
|
+
$3
|
45
|
+
|
46
|
+
>>_magic
|
47
|
+
<magic>$4</magic>
|
48
|
+
|
49
|
+
== PARAMETERS VARIABLE translate to RUBY CODE ( =$0 )
|
50
|
+
|
51
|
+
some time it need a block of ruby code / ruby string code inside attribute of tag
|
52
|
+
but it must be simple and easy to remember the command and this is how the implementation
|
53
|
+
|
54
|
+
>>_form
|
55
|
+
%form{action="=$0"}
|
56
|
+
|
57
|
+
-form edit
|
58
|
+
|
59
|
+
<form action="<%= edit %>">
|
60
|
+
</form>
|
61
|
+
|
62
|
+
== PARAMETERS VARIABLE translate to RUBY STRING CODE ( ==$0 )
|
63
|
+
|
64
|
+
>>_form2
|
65
|
+
%form{action="==$0"}
|
66
|
+
|
67
|
+
-form edit/1
|
68
|
+
|
69
|
+
<form action="<%= "edit/1" %>">
|
70
|
+
</form>
|
71
|
+
|
72
|
+
== PARAMETERS VARIABLE INTERPOLATION
|
73
|
+
|
74
|
+
you can do interpolation on variable
|
75
|
+
|
76
|
+
>>_all_params
|
77
|
+
<div>$*</div>
|
78
|
+
-magic $*
|
79
|
+
$4
|
80
|
+
$3
|
81
|
+
|
82
|
+
>>_magic
|
83
|
+
<magic> $4.upcase.reverse~ </magic>
|
84
|
+
|
85
|
+
!hot!test
|
86
|
+
-all_params one;two;three;four
|
87
|
+
|
88
|
+
<div>three;four</div>
|
89
|
+
<magic> EERHT </magic>
|
90
|
+
<magic> RUOF </magic>
|
91
|
+
two
|
92
|
+
one
|
93
|
+
|
94
|
+
== PARAMETERS VARIABLE DEFAULT OR COMBINE WITH
|
95
|
+
|
96
|
+
default mean that is params not supply it will use the default
|
97
|
+
|
98
|
+
combine mean that is params not supply it will empty params var inside "~ ~$0"
|
99
|
+
but if it supply, param var will be replace and remove char "~"
|
100
|
+
|
101
|
+
test.hot
|
102
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
103
|
+
>>_all_default
|
104
|
+
-default_var $*
|
105
|
+
-inside_var $*
|
106
|
+
|
107
|
+
>>_default_var
|
108
|
+
%div{ key="~1~$1" } title 1
|
109
|
+
%div{ key="~2~$2" } title 2
|
110
|
+
%div{ key="~3~$3" } title 3
|
111
|
+
|
112
|
+
>>_inside_var
|
113
|
+
%div{ ~att="$1"~} title 1
|
114
|
+
%div{ ~att="$2"~} title 2
|
115
|
+
%div{ ~att="$3"~} title 3
|
116
|
+
|
117
|
+
params.w2erb
|
118
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
119
|
+
!hot!test
|
120
|
+
-all_default one;two
|
121
|
+
|
122
|
+
params.erb
|
123
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
124
|
+
<div key="one">title 1</div>
|
125
|
+
<div key="two">title 2</div>
|
126
|
+
<div key="3">title 3</div>
|
127
|
+
<div att="one">title 1</div>
|
128
|
+
<div att="two">title 2</div>
|
129
|
+
<div>title 3</div>
|
130
|
+
|
131
|
+
== VARIABLE SET IN SOURCE BUT USE ONLY on HOT
|
132
|
+
|
133
|
+
* &myvar=value_of_var
|
134
|
+
* @myvar=one;two;three
|
135
|
+
|
136
|
+
on @myvar, it can set multiple time and it will have uniq value
|
137
|
+
to reset the value, use value with prefix with ";"
|