adamh-html_namespacing 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Manifest +1 -1
- data/README.rdoc +3 -0
- data/Rakefile +1 -1
- data/ext/html_namespacing/html_namespacing.c +85 -215
- data/html_namespacing.gemspec +3 -3
- data/lib/html_namespacing/plugin/rails.rb +5 -1
- data/test/c_extension_test.rb +4 -2
- metadata +3 -3
data/Manifest
CHANGED
data/README.rdoc
CHANGED
@@ -175,6 +175,9 @@ gain access to this method.
|
|
175
175
|
<tt>:javascript_root</tt>: Root of namespaced JavaScript files, if you are
|
176
176
|
using <tt>html_namespacing_javascript_tag()</tt> (see below).
|
177
177
|
|
178
|
+
<tt>:template_formats</tt>: If set (to an Array), apply HTML namespacing
|
179
|
+
under the given (String) formats. Default is <tt>['html']</tt>.
|
180
|
+
|
178
181
|
<tt>:javascript_optional_suffix</tt>: optional suffix for your JavaScript
|
179
182
|
files, if you are using <tt>html_namespacing_javascript_tag()</tt>. For
|
180
183
|
instance, if <tt>:javascript_optional_suffix</tt> is <tt>'compressed'</tt> and
|
data/Rakefile
CHANGED
@@ -22,56 +22,10 @@ static const char* const IGNORE_TAGS[] = {
|
|
22
22
|
NULL
|
23
23
|
};
|
24
24
|
|
25
|
-
/*
|
26
|
-
* Returns the first power of 2 which is >= the given length.
|
27
|
-
*/
|
28
25
|
static int
|
29
|
-
|
26
|
+
determine_alloc_size_of_at_least(int i)
|
30
27
|
{
|
31
|
-
|
32
|
-
|
33
|
-
while (j < i) {
|
34
|
-
j <<= 1;
|
35
|
-
}
|
36
|
-
|
37
|
-
return j;
|
38
|
-
}
|
39
|
-
|
40
|
-
/*
|
41
|
-
* Returns the number of bytes in the first utf-8 character of *utf8.
|
42
|
-
*/
|
43
|
-
static size_t
|
44
|
-
utf8_char_bytes(const char *utf8)
|
45
|
-
{
|
46
|
-
size_t i;
|
47
|
-
const unsigned char *u;
|
48
|
-
|
49
|
-
if (utf8[0] < 0x80) {
|
50
|
-
return 1;
|
51
|
-
}
|
52
|
-
|
53
|
-
u = (const unsigned char *) utf8;
|
54
|
-
|
55
|
-
for (i = 1; i < 6; i++) {
|
56
|
-
if ((u[i] & 0xc0) != 0x80) {
|
57
|
-
return i;
|
58
|
-
}
|
59
|
-
}
|
60
|
-
|
61
|
-
return -1;
|
62
|
-
}
|
63
|
-
|
64
|
-
/*
|
65
|
-
* Copies num_bytes bytes from *src_p to *dest_p, doing no bounds checking.
|
66
|
-
*
|
67
|
-
* Advances *dest_p and *src_p by num_bytes.
|
68
|
-
*/
|
69
|
-
static void
|
70
|
-
copy_n_bytes_and_advance(char **dest_p, const char **src_p, size_t num_bytes)
|
71
|
-
{
|
72
|
-
memcpy(*dest_p, *src_p, num_bytes);
|
73
|
-
*dest_p += num_bytes;
|
74
|
-
*src_p += num_bytes;
|
28
|
+
return i + 1024;
|
75
29
|
}
|
76
30
|
|
77
31
|
/*
|
@@ -119,57 +73,6 @@ ensure_string_length(
|
|
119
73
|
return 0;
|
120
74
|
}
|
121
75
|
|
122
|
-
/*
|
123
|
-
* Tries to copy a single utf8 character to dest, possibly reallocating.
|
124
|
-
*
|
125
|
-
* Arguments:
|
126
|
-
* - dest: Beginning of destination string. May be reallocated during copy.
|
127
|
-
* - dest_len: Amount of memory allocated to dest. May be increased during
|
128
|
-
* copy.
|
129
|
-
* - dest_p: Pointer to end of destination string (potentially 1 past the
|
130
|
-
* allocated length of dest).
|
131
|
-
* - src_p: Source string. Will be advanced.
|
132
|
-
*
|
133
|
-
* Returns:
|
134
|
-
* - 0 on success. dest may be changed; dest_p will be incremented; src_p
|
135
|
-
* will be incremented.
|
136
|
-
* - ENOMEM if reallocation failed. dest, dest_p, and src_p will remain
|
137
|
-
* unchanged.
|
138
|
-
*/
|
139
|
-
static int
|
140
|
-
append_next_utf8_char(
|
141
|
-
char **dest,
|
142
|
-
size_t *dest_len,
|
143
|
-
char **dest_p,
|
144
|
-
const char **src_p,
|
145
|
-
HtmlNamespacingAllocationStrategy allocation_strategy)
|
146
|
-
{
|
147
|
-
size_t c_num_utf8_bytes;
|
148
|
-
size_t dest_p_offset;
|
149
|
-
size_t new_dest_len;
|
150
|
-
char *new_dest;
|
151
|
-
int rv;
|
152
|
-
|
153
|
-
c_num_utf8_bytes = utf8_char_bytes(*src_p);
|
154
|
-
new_dest = *dest;
|
155
|
-
dest_p_offset = *dest_p - *dest;
|
156
|
-
new_dest_len = dest_p_offset + c_num_utf8_bytes;
|
157
|
-
|
158
|
-
rv = ensure_string_length(
|
159
|
-
&new_dest, dest_len, new_dest_len, allocation_strategy);
|
160
|
-
if (rv == ENOMEM) {
|
161
|
-
return ENOMEM;
|
162
|
-
}
|
163
|
-
if (new_dest != *dest) {
|
164
|
-
*dest = new_dest;
|
165
|
-
*dest_p = new_dest + dest_p_offset;
|
166
|
-
}
|
167
|
-
|
168
|
-
copy_n_bytes_and_advance(dest_p, src_p, c_num_utf8_bytes);
|
169
|
-
|
170
|
-
return 0;
|
171
|
-
}
|
172
|
-
|
173
76
|
/*
|
174
77
|
* Tries to copy s into dest, possibly reallocating.
|
175
78
|
*
|
@@ -191,15 +94,14 @@ append_string(
|
|
191
94
|
size_t *dest_len,
|
192
95
|
char **dest_p,
|
193
96
|
const char *s,
|
97
|
+
size_t len,
|
194
98
|
HtmlNamespacingAllocationStrategy allocation_strategy)
|
195
99
|
{
|
196
|
-
int len;
|
197
100
|
int rv;
|
198
101
|
size_t dest_p_offset;
|
199
102
|
size_t new_dest_len;
|
200
103
|
char *new_dest;
|
201
104
|
|
202
|
-
len = strlen(s);
|
203
105
|
new_dest = *dest;
|
204
106
|
dest_p_offset = *dest_p - *dest;
|
205
107
|
new_dest_len = dest_p_offset + len;
|
@@ -220,63 +122,6 @@ append_string(
|
|
220
122
|
return 0;
|
221
123
|
};
|
222
124
|
|
223
|
-
static int
|
224
|
-
append_next_chars_until(
|
225
|
-
char **dest,
|
226
|
-
size_t *dest_len,
|
227
|
-
char **dest_p,
|
228
|
-
const char **src_p,
|
229
|
-
const char *until_chars,
|
230
|
-
HtmlNamespacingAllocationStrategy allocation_strategy)
|
231
|
-
{
|
232
|
-
size_t num_bytes;
|
233
|
-
size_t dest_p_offset;
|
234
|
-
size_t new_dest_len;
|
235
|
-
char *new_dest;
|
236
|
-
int rv;
|
237
|
-
|
238
|
-
num_bytes = strcspn(*src_p, until_chars);
|
239
|
-
new_dest = *dest;
|
240
|
-
dest_p_offset = *dest_p - *dest;
|
241
|
-
new_dest_len = dest_p_offset + num_bytes;
|
242
|
-
|
243
|
-
rv = ensure_string_length(
|
244
|
-
&new_dest, dest_len, new_dest_len, allocation_strategy);
|
245
|
-
if (rv == ENOMEM) {
|
246
|
-
return ENOMEM;
|
247
|
-
}
|
248
|
-
if (new_dest != *dest) {
|
249
|
-
*dest = new_dest;
|
250
|
-
*dest_p = new_dest + dest_p_offset;
|
251
|
-
}
|
252
|
-
|
253
|
-
copy_n_bytes_and_advance(dest_p, src_p, num_bytes);
|
254
|
-
|
255
|
-
return 0;
|
256
|
-
}
|
257
|
-
|
258
|
-
static int
|
259
|
-
append_end_of_string(
|
260
|
-
char **dest,
|
261
|
-
size_t *dest_len,
|
262
|
-
char **dest_p,
|
263
|
-
HtmlNamespacingAllocationStrategy allocation_strategy)
|
264
|
-
{
|
265
|
-
int rv;
|
266
|
-
const char *end = "\0";
|
267
|
-
|
268
|
-
rv = append_next_utf8_char(
|
269
|
-
dest, dest_len, dest_p, &end, allocation_strategy);
|
270
|
-
|
271
|
-
if (rv == 0) {
|
272
|
-
/* We don't add the length of '\0' */
|
273
|
-
*dest_len -= 1;
|
274
|
-
*dest_p -= 1;
|
275
|
-
}
|
276
|
-
|
277
|
-
return rv;
|
278
|
-
}
|
279
|
-
|
280
125
|
enum {
|
281
126
|
PARSE_NORMAL,
|
282
127
|
PARSE_OPEN_TAG,
|
@@ -351,20 +196,38 @@ add_namespace_to_html_with_length_and_allocation_strategy(
|
|
351
196
|
HtmlNamespacingAllocationStrategy allocation_strategy)
|
352
197
|
{
|
353
198
|
|
354
|
-
#define APPEND_NEXT_CHAR() \
|
355
|
-
if (*html && append_next_utf8_char(&r, &r_len, &r_p, &html, allocation_strategy) != 0) goto error/*;*/
|
356
199
|
#define APPEND_STRING(s) \
|
357
|
-
|
200
|
+
do { \
|
201
|
+
if (append_string(&r, &r_len, &r_p, s, strlen(s), allocation_strategy) != 0) goto error; \
|
202
|
+
} while (0)/*;*/
|
358
203
|
#define APPEND_END_OF_STRING() \
|
359
|
-
|
360
|
-
|
361
|
-
|
204
|
+
do { \
|
205
|
+
if (append_string(&r, &r_len, &r_p, "", 1, allocation_strategy) != 0) goto error; \
|
206
|
+
r_len -= 1; \
|
207
|
+
r_p -= 1; \
|
208
|
+
} while (0)/*;*/
|
209
|
+
#define COPY_TO_HERE() \
|
210
|
+
do { \
|
211
|
+
if (append_string(&r, &r_len, &r_p, html_first_uncopied_p, html_p - html_first_uncopied_p, allocation_strategy) != 0) goto error; \
|
212
|
+
html_first_uncopied_p = html_p; \
|
213
|
+
} while (0)/*;*/
|
214
|
+
#define ADVANCE(n) \
|
215
|
+
do { \
|
216
|
+
if (html_p + n <= html + html_len) { \
|
217
|
+
html_p += n; \
|
218
|
+
} else { \
|
219
|
+
html_p = html + html_len; \
|
220
|
+
} \
|
221
|
+
} while (0)/*;*/
|
222
|
+
#define ADVANCE_UNTIL_ONE_OF_THESE_CHARS(chars) \
|
223
|
+
ADVANCE(strcspn(html_p, chars))/*;*/
|
362
224
|
|
363
225
|
unsigned int state;
|
364
226
|
char *r; /* Start of retval */
|
365
227
|
char *r_p; /* Pointer in retval */
|
366
228
|
size_t r_len; /* Length of retval */
|
367
|
-
const char *
|
229
|
+
const char *html_first_uncopied_p;
|
230
|
+
const char *html_p;
|
368
231
|
const char *open_tag_name = NULL;
|
369
232
|
size_t open_tag_name_len = 0;
|
370
233
|
size_t num_chars_remaining;
|
@@ -373,13 +236,13 @@ add_namespace_to_html_with_length_and_allocation_strategy(
|
|
373
236
|
int open_tag_had_class_attribute;
|
374
237
|
const char *open_tag_attribute_value;
|
375
238
|
|
376
|
-
r_len =
|
239
|
+
r_len = determine_alloc_size_of_at_least(html_len);
|
377
240
|
r = allocation_strategy.malloc(sizeof(char) * r_len);
|
378
241
|
if (!r) {
|
379
242
|
return ENOMEM;
|
380
243
|
}
|
381
244
|
|
382
|
-
|
245
|
+
html_first_uncopied_p = html_p = html;
|
383
246
|
state = PARSE_NORMAL;
|
384
247
|
r_p = r;
|
385
248
|
num_tags_open = 0;
|
@@ -388,63 +251,70 @@ add_namespace_to_html_with_length_and_allocation_strategy(
|
|
388
251
|
open_tag_attribute_value = NULL;
|
389
252
|
|
390
253
|
while (1) {
|
391
|
-
num_chars_remaining = html_len - (
|
254
|
+
num_chars_remaining = html_len - (html_p - html);
|
392
255
|
if (num_chars_remaining <= 0) break;
|
393
256
|
|
394
257
|
switch (state) {
|
395
258
|
case PARSE_NORMAL:
|
396
|
-
if (*
|
397
|
-
|
259
|
+
if (*html_p == '<') {
|
260
|
+
ADVANCE(1);
|
398
261
|
if (num_chars_remaining >= 9
|
399
|
-
&& 0 == strncmp("![CDATA[",
|
262
|
+
&& 0 == strncmp("![CDATA[", html_p, 8)) {
|
400
263
|
state = PARSE_CDATA;
|
401
|
-
} else if (num_chars_remaining >= 2 &&
|
264
|
+
} else if (num_chars_remaining >= 2 && html_p[0] == '/') {
|
402
265
|
state = PARSE_CLOSE_TAG;
|
403
266
|
} else if (num_chars_remaining >= 4
|
404
|
-
&& 0 == strncmp("!--",
|
267
|
+
&& 0 == strncmp("!--", html_p, 3)) {
|
405
268
|
state = PARSE_COMMENT;
|
406
269
|
} else if (num_chars_remaining >= 9
|
407
|
-
&& 0 == strncmp("!DOCTYPE",
|
270
|
+
&& 0 == strncmp("!DOCTYPE", html_p, 8)) {
|
408
271
|
state = PARSE_DOCTYPE;
|
409
272
|
} else if (num_chars_remaining >= 5
|
410
|
-
&& 0 == strncmp("?xml",
|
273
|
+
&& 0 == strncmp("?xml", html_p, 4)) {
|
411
274
|
state = PARSE_XML_DECL;
|
412
275
|
} else {
|
413
|
-
open_tag_name =
|
276
|
+
open_tag_name = html_p;
|
414
277
|
state = PARSE_OPEN_TAG_NAME;
|
415
278
|
}
|
416
279
|
} else {
|
417
|
-
|
280
|
+
ADVANCE_UNTIL_ONE_OF_THESE_CHARS("<");
|
418
281
|
}
|
419
282
|
break;
|
420
283
|
case PARSE_OPEN_TAG_NAME:
|
421
|
-
|
422
|
-
open_tag_name_len =
|
284
|
+
ADVANCE_UNTIL_ONE_OF_THESE_CHARS(WHITE_SPACE ">/");
|
285
|
+
open_tag_name_len = html_p - open_tag_name;
|
423
286
|
state = PARSE_OPEN_TAG;
|
424
287
|
break;
|
425
288
|
case PARSE_OPEN_TAG:
|
426
|
-
if (*
|
289
|
+
if (*html_p == '/' || *html_p == '>') {
|
427
290
|
if (num_tags_open == 0 && !open_tag_had_class_attribute
|
428
291
|
&& !should_ignore_tag(open_tag_name, open_tag_name_len)) {
|
429
|
-
|
430
|
-
|
431
|
-
|
292
|
+
COPY_TO_HERE();
|
293
|
+
if (*html_p == '/' && char_is_whitespace(*(html_p - 1))) {
|
294
|
+
/* We're in an empty tag with a trailing space */
|
295
|
+
APPEND_STRING("class=\"");
|
296
|
+
APPEND_STRING(ns);
|
297
|
+
APPEND_STRING("\" ");
|
298
|
+
} else {
|
299
|
+
APPEND_STRING(" class=\"");
|
300
|
+
APPEND_STRING(ns);
|
301
|
+
APPEND_STRING("\"");
|
302
|
+
}
|
432
303
|
}
|
433
304
|
|
434
305
|
open_tag_had_class_attribute = 0;
|
435
306
|
open_tag_attribute_value = NULL;
|
436
307
|
|
437
|
-
if (*
|
438
|
-
APPEND_STRING(" ");
|
308
|
+
if (*html_p == '/') {
|
439
309
|
state = PARSE_EMPTY_TAG;
|
440
310
|
} else {
|
441
311
|
num_tags_open++;
|
442
312
|
state = PARSE_NORMAL;
|
443
313
|
}
|
444
|
-
|
445
|
-
} else if (!char_is_whitespace(*
|
314
|
+
ADVANCE(1);
|
315
|
+
} else if (!char_is_whitespace(*html_p)) {
|
446
316
|
if (num_chars_remaining >= 5
|
447
|
-
&& 0 == strncmp(
|
317
|
+
&& 0 == strncmp(html_p, "class", 5)) {
|
448
318
|
open_tag_attribute_is_class_attribute = 1;
|
449
319
|
open_tag_had_class_attribute = 1;
|
450
320
|
} else {
|
@@ -452,68 +322,67 @@ add_namespace_to_html_with_length_and_allocation_strategy(
|
|
452
322
|
}
|
453
323
|
state = PARSE_OPEN_TAG_ATTRIBUTE_NAME;
|
454
324
|
} else {
|
455
|
-
|
325
|
+
ADVANCE(1);
|
456
326
|
}
|
457
327
|
break;
|
458
328
|
case PARSE_OPEN_TAG_ATTRIBUTE_NAME:
|
459
|
-
|
329
|
+
ADVANCE_UNTIL_ONE_OF_THESE_CHARS("=");
|
330
|
+
ADVANCE(1);
|
460
331
|
state = PARSE_OPEN_TAG_ATTRIBUTE_EQUALS;
|
461
|
-
APPEND_NEXT_CHAR();
|
462
332
|
break;
|
463
333
|
case PARSE_OPEN_TAG_ATTRIBUTE_EQUALS:
|
464
|
-
|
465
|
-
open_tag_attribute_value =
|
334
|
+
ADVANCE_UNTIL_ONE_OF_THESE_CHARS("'\"");
|
335
|
+
open_tag_attribute_value = html_p;
|
466
336
|
state = PARSE_OPEN_TAG_ATTRIBUTE_VALUE;
|
467
|
-
|
337
|
+
ADVANCE(1);
|
468
338
|
break;
|
469
339
|
case PARSE_OPEN_TAG_ATTRIBUTE_VALUE:
|
470
|
-
|
340
|
+
ADVANCE_UNTIL_ONE_OF_THESE_CHARS("'\"");
|
471
341
|
/* open_tag_attribute_value is either ' or " */
|
472
|
-
while (*
|
473
|
-
|
474
|
-
|
342
|
+
while (*html_p != *open_tag_attribute_value) {
|
343
|
+
ADVANCE(1);
|
344
|
+
ADVANCE_UNTIL_ONE_OF_THESE_CHARS("'\"");
|
475
345
|
}
|
476
346
|
if (open_tag_attribute_is_class_attribute
|
477
347
|
&& num_tags_open == 0) {
|
348
|
+
COPY_TO_HERE();
|
478
349
|
APPEND_STRING(" ");
|
479
350
|
APPEND_STRING(ns);
|
480
351
|
}
|
481
352
|
open_tag_attribute_is_class_attribute = 0;
|
482
353
|
state = PARSE_OPEN_TAG;
|
483
|
-
|
354
|
+
ADVANCE(1);
|
484
355
|
break;
|
485
356
|
case PARSE_CLOSE_TAG:
|
486
|
-
|
357
|
+
ADVANCE_UNTIL_ONE_OF_THESE_CHARS(">");
|
487
358
|
num_tags_open--;
|
488
359
|
open_tag_attribute_value = NULL;
|
489
360
|
state = PARSE_NORMAL;
|
490
|
-
|
361
|
+
ADVANCE(1);
|
491
362
|
break;
|
492
363
|
case PARSE_EMPTY_TAG:
|
493
364
|
case PARSE_XML_DECL:
|
494
365
|
case PARSE_DOCTYPE:
|
495
|
-
|
366
|
+
ADVANCE_UNTIL_ONE_OF_THESE_CHARS(">");
|
367
|
+
ADVANCE(1);
|
496
368
|
state = PARSE_NORMAL;
|
497
|
-
APPEND_NEXT_CHAR();
|
498
369
|
break;
|
499
370
|
case PARSE_COMMENT:
|
500
|
-
|
501
|
-
|
502
|
-
if (*
|
503
|
-
&& 0 == strncmp("->",
|
504
|
-
|
505
|
-
APPEND_NEXT_CHAR();
|
371
|
+
ADVANCE(1); /* at least one */
|
372
|
+
ADVANCE_UNTIL_ONE_OF_THESE_CHARS("-");
|
373
|
+
if (*html_p == '-' && num_chars_remaining >= 3
|
374
|
+
&& 0 == strncmp("->", html_p, 2)) {
|
375
|
+
ADVANCE(2);
|
506
376
|
state = PARSE_NORMAL;
|
507
377
|
}
|
508
378
|
/* else loop... */
|
509
379
|
break;
|
510
380
|
case PARSE_CDATA:
|
511
|
-
|
512
|
-
|
513
|
-
if (*
|
514
|
-
&& 0 == strncmp("]>",
|
515
|
-
|
516
|
-
APPEND_NEXT_CHAR();
|
381
|
+
ADVANCE(1); /* at least one */
|
382
|
+
ADVANCE_UNTIL_ONE_OF_THESE_CHARS("]");
|
383
|
+
if (*html_p == ']' && num_chars_remaining >= 3
|
384
|
+
&& 0 == strncmp("]>", html_p, 2)) {
|
385
|
+
ADVANCE(2);
|
517
386
|
state = PARSE_NORMAL;
|
518
387
|
}
|
519
388
|
/* else loop... */
|
@@ -523,6 +392,7 @@ add_namespace_to_html_with_length_and_allocation_strategy(
|
|
523
392
|
}
|
524
393
|
}
|
525
394
|
|
395
|
+
COPY_TO_HERE();
|
526
396
|
APPEND_END_OF_STRING();
|
527
397
|
|
528
398
|
if (state != PARSE_NORMAL
|
data/html_namespacing.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{html_namespacing}
|
5
|
-
s.version = "0.1.
|
5
|
+
s.version = "0.1.2"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Adam Hooper"]
|
9
|
-
s.date = %q{2009-
|
9
|
+
s.date = %q{2009-08-10}
|
10
10
|
s.description = %q{Inserts "class=" attributes within snippets of HTML so CSS and JavaScript can use automatic scopes}
|
11
11
|
s.email = %q{adam@adamhooper.com}
|
12
12
|
s.extensions = ["ext/html_namespacing/extconf.rb"]
|
13
13
|
s.extra_rdoc_files = ["README.rdoc"]
|
14
|
-
s.files = ["README.rdoc", "Rakefile", "test/c_extension_test.rb", "test/test_helper.rb", "ext/html_namespacing/extconf.rb", "ext/html_namespacing/html_namespacing.h", "ext/html_namespacing/html_namespacing.c", "ext/html_namespacing/html_namespacing_ext.c", "lib/html_namespacing.rb", "lib/html_namespacing/plugin.rb", "lib/html_namespacing/plugin/dom_scan_jquery.compressed.js", "lib/html_namespacing/plugin/rails.rb", "lib/html_namespacing/plugin/dom_scan_jquery.js", "lib/html_namespacing/plugin/sass.rb", "
|
14
|
+
s.files = ["README.rdoc", "Rakefile", "test/c_extension_test.rb", "test/test_helper.rb", "ext/html_namespacing/extconf.rb", "ext/html_namespacing/html_namespacing.h", "ext/html_namespacing/html_namespacing.c", "ext/html_namespacing/html_namespacing_ext.c", "lib/html_namespacing.rb", "lib/html_namespacing/plugin.rb", "lib/html_namespacing/plugin/dom_scan_jquery.compressed.js", "lib/html_namespacing/plugin/rails.rb", "lib/html_namespacing/plugin/dom_scan_jquery.js", "lib/html_namespacing/plugin/sass.rb", "html_namespacing.gemspec", "Manifest"]
|
15
15
|
s.has_rdoc = true
|
16
16
|
s.homepage = %q{http://github.com/adamh/html_namespacing}
|
17
17
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Html_namespacing", "--main", "README.rdoc"]
|
@@ -31,6 +31,10 @@ module HtmlNamespacing
|
|
31
31
|
@options[:javascript_optional_suffix]
|
32
32
|
end
|
33
33
|
|
34
|
+
def self.template_formats
|
35
|
+
@formats ||= Set.new(@options[:template_formats] || ['html'])
|
36
|
+
end
|
37
|
+
|
34
38
|
module Helpers
|
35
39
|
def html_namespacing_javascript_tag(framework)
|
36
40
|
files = html_namespacing_files
|
@@ -108,7 +112,7 @@ module HtmlNamespacing
|
|
108
112
|
|
109
113
|
view.html_namespacing_rendered_paths << path_without_format_and_extension if view.respond_to?(:html_namespacing_rendered_paths)
|
110
114
|
|
111
|
-
if format
|
115
|
+
if HtmlNamespacing::Plugin::Rails.template_formats.include?(format)
|
112
116
|
add_namespace_to_html(html, view)
|
113
117
|
else
|
114
118
|
html
|
data/test/c_extension_test.rb
CHANGED
@@ -24,14 +24,16 @@ class CExtensionTest < Test::Unit::TestCase
|
|
24
24
|
self.define_test('nil everything', nil, nil, nil)
|
25
25
|
self.define_test('plain text', 'hello', 'X', 'hello')
|
26
26
|
self.define_test('regular tag', '<div>hello</div>', 'X', '<div class="X">hello</div>')
|
27
|
-
self.define_test('empty tag', '<div/>', 'X', '<div class="X"
|
27
|
+
self.define_test('empty tag', '<div/>', 'X', '<div class="X"/>')
|
28
|
+
self.define_test('empty tag with " />"', '<div />', 'X', '<div class="X" />')
|
29
|
+
self.define_test('empty tag with " />" and class', '<div class="A" />', 'X', '<div class="A X" />')
|
28
30
|
self.define_test('nested tag', '<div><div>hello</div></div>', 'X', '<div class="X"><div>hello</div></div>')
|
29
31
|
self.define_test('two tags', '<div>hello</div><div>goodbye</div>', 'X', '<div class="X">hello</div><div class="X">goodbye</div>')
|
30
32
|
self.define_test('existing class= tag with double-quotes', '<div class="foo">bar</div>', 'baz', '<div class="foo baz">bar</div>')
|
31
33
|
self.define_test('existing class= tag with single-quotes', "<div class='foo'>bar</div>", 'baz', "<div class='foo baz'>bar</div>")
|
32
34
|
self.define_test('other attributes are ignored', '<div id="id" class="foo" style="display:none;">bar</div>', 'baz', '<div id="id" class="foo baz" style="display:none;">bar</div>')
|
33
35
|
self.define_test('works with utf-8', '<div class="𝞪">𝟂</div>', '𝞺', '<div class="𝞪 𝞺">𝟂</div>')
|
34
|
-
self.define_test('empty tag with existing class=', '<span class="foo"/>', 'bar', '<span class="foo bar"
|
36
|
+
self.define_test('empty tag with existing class=', '<span class="foo"/>', 'bar', '<span class="foo bar"/>')
|
35
37
|
self.define_test('works with newlines in tag', "<div\n\nclass\n\n=\n\n'foo'\n\n>bar</div>", 'baz', "<div\n\nclass\n\n=\n\n'foo baz'\n\n>bar</div>")
|
36
38
|
self.define_test('works with "\'" within \'"\' attributes', '<div title="Adam\'s House" class="foo">bar</div>', 'baz', '<div title="Adam\'s House" class="foo baz">bar</div>')
|
37
39
|
self.define_test('ignores XML prolog', '<?xml version="1.0"?><div>foo</div>', 'X', '<?xml version="1.0"?><div class="X">foo</div>')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adamh-html_namespacing
|
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
|
- Adam Hooper
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-08-10 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -36,8 +36,8 @@ files:
|
|
36
36
|
- lib/html_namespacing/plugin/rails.rb
|
37
37
|
- lib/html_namespacing/plugin/dom_scan_jquery.js
|
38
38
|
- lib/html_namespacing/plugin/sass.rb
|
39
|
-
- Manifest
|
40
39
|
- html_namespacing.gemspec
|
40
|
+
- Manifest
|
41
41
|
has_rdoc: true
|
42
42
|
homepage: http://github.com/adamh/html_namespacing
|
43
43
|
licenses:
|