UrlEscapeCodes: New Url Escape Codes Table Goodie (#4088)
* UrlEscapeCodes: Goodie initialzied * UrlEscapeCodes: Front end created * UrlEscapeCodes: Adds testsmaster
parent
3c784f2582
commit
9005c0c1fd
|
@ -0,0 +1,44 @@
|
||||||
|
package DDG::Goodie::UrlEscapeCodes;
|
||||||
|
# ABSTRACT: Shows URL Escape Codes
|
||||||
|
|
||||||
|
use DDG::Goodie;
|
||||||
|
use YAML::XS 'LoadFile';
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
zci answer_type => 'url_escape_codes';
|
||||||
|
|
||||||
|
zci is_cached => 1;
|
||||||
|
|
||||||
|
triggers start => 'url escape', 'url escaping', 'url escape codes', 'url escape characters',
|
||||||
|
'url escape sequences';
|
||||||
|
|
||||||
|
my $url_escape_codes = LoadFile(share('data.yml'));
|
||||||
|
|
||||||
|
handle remainder => sub {
|
||||||
|
return unless $_ eq '';
|
||||||
|
|
||||||
|
return '',
|
||||||
|
structured_answer => {
|
||||||
|
id => 'url_escape_codes',
|
||||||
|
name => 'URL Escape Codes',
|
||||||
|
data => {
|
||||||
|
title => 'URL Escape Codes',
|
||||||
|
table => $url_escape_codes
|
||||||
|
},
|
||||||
|
meta => {
|
||||||
|
sourceName => 'december.com',
|
||||||
|
sourceUrl => 'http://www.december.com/html/spec/esccodes.html'
|
||||||
|
},
|
||||||
|
templates => {
|
||||||
|
group => 'list',
|
||||||
|
item => 0,
|
||||||
|
options => {
|
||||||
|
content => 'DDH.url_escape_codes.content',
|
||||||
|
moreAt => 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
1;
|
|
@ -0,0 +1,18 @@
|
||||||
|
<table class='record__body url_escape_codes'>
|
||||||
|
<thead>
|
||||||
|
<tr class='record__row'>
|
||||||
|
{{#each table.header}}
|
||||||
|
<th class='tx--bold' title='{{ key }}'>{{ abbr }}</th>
|
||||||
|
{{/each}}
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{{#each table.body}}
|
||||||
|
<tr class='record__row'>
|
||||||
|
{{#each ../table.header}}
|
||||||
|
<td class='record__cell' title='{{ this.key }}'>{{ get_value ../this this.abbr }}</td>
|
||||||
|
{{/each}}
|
||||||
|
</tr>
|
||||||
|
{{/each}}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
|
@ -0,0 +1,51 @@
|
||||||
|
---
|
||||||
|
header:
|
||||||
|
- key: Character
|
||||||
|
abbr: Char
|
||||||
|
- key: 'Escape Code'
|
||||||
|
abbr: 'Esc Code'
|
||||||
|
body:
|
||||||
|
- Char: 'SPACE'
|
||||||
|
'Esc Code': '%20'
|
||||||
|
- Char: '<'
|
||||||
|
'Esc Code': '%3C'
|
||||||
|
- Char: '>'
|
||||||
|
'Esc Code': '%3E'
|
||||||
|
- Char: '#'
|
||||||
|
'Esc Code': '%23'
|
||||||
|
- Char: '%'
|
||||||
|
'Esc Code': '%25'
|
||||||
|
- Char: '{'
|
||||||
|
'Esc Code': '%7B'
|
||||||
|
- Char: '}'
|
||||||
|
'Esc Code': '%7D'
|
||||||
|
- Char: '|'
|
||||||
|
'Esc Code': '%7C'
|
||||||
|
- Char: '\'
|
||||||
|
'Esc Code': '%5C'
|
||||||
|
- Char: '^'
|
||||||
|
'Esc Code': '%5E'
|
||||||
|
- Char: '~'
|
||||||
|
'Esc Code': '%7E'
|
||||||
|
- Char: '['
|
||||||
|
'Esc Code': '%5B'
|
||||||
|
- Char: ']'
|
||||||
|
'Esc Code': '%5D'
|
||||||
|
- Char: '`'
|
||||||
|
'Esc Code': '%60'
|
||||||
|
- Char: ';'
|
||||||
|
'Esc Code': '%3B'
|
||||||
|
- Char: '/'
|
||||||
|
'Esc Code': '%2F'
|
||||||
|
- Char: '?'
|
||||||
|
'Esc Code': '%3F'
|
||||||
|
- Char: ':'
|
||||||
|
'Esc Code': '%3A'
|
||||||
|
- Char: '@'
|
||||||
|
'Esc Code': '%40'
|
||||||
|
- Char: '='
|
||||||
|
'Esc Code': '%3D'
|
||||||
|
- Char: '&'
|
||||||
|
'Esc Code': '%26'
|
||||||
|
- Char: '$'
|
||||||
|
'Esc Code': '%24'
|
|
@ -0,0 +1,3 @@
|
||||||
|
.zci--url_escape_codes .c-list__content.chomp {
|
||||||
|
max-height: 14em;
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
DDH.url_escape_codes = DDH.url_escape_codes || {};
|
||||||
|
|
||||||
|
DDH.url_escape_codes.build = function(ops) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Spice.registerHelper('get_value', function(obj, key) {
|
||||||
|
if (obj) {
|
||||||
|
if (key in obj) {
|
||||||
|
return obj[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
});
|
||||||
|
};
|
|
@ -0,0 +1,90 @@
|
||||||
|
#!/usr/bin/env perl
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Test::More;
|
||||||
|
use Test::Deep;
|
||||||
|
use DDG::Test::Goodie;
|
||||||
|
use YAML::XS 'LoadFile';
|
||||||
|
|
||||||
|
zci answer_type => 'url_escape_codes';
|
||||||
|
zci is_cached => 1;
|
||||||
|
|
||||||
|
my $url_escape_codes = LoadFile('share/goodie/url_escape_codes/data.yml');
|
||||||
|
|
||||||
|
sub build_structured_answer {
|
||||||
|
my $result = {
|
||||||
|
title => 'URL Escape Codes',
|
||||||
|
table => $url_escape_codes
|
||||||
|
};
|
||||||
|
|
||||||
|
# Check if type of header data is an Array
|
||||||
|
isa_ok($result->{table}->{header}, 'ARRAY');
|
||||||
|
|
||||||
|
# Check if type of body data is an Array
|
||||||
|
isa_ok($result->{table}->{body}, 'ARRAY');
|
||||||
|
|
||||||
|
# Check if each Header Hash has required keys
|
||||||
|
for (my $i = 0; $i < $#{$result->{table}->{header}}; $i++) {
|
||||||
|
cmp_deeply(
|
||||||
|
$result->{table}->{header}->[$i],
|
||||||
|
{
|
||||||
|
key => ignore(),
|
||||||
|
abbr => ignore()
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if each Body Hash has required keys
|
||||||
|
for (my $i = 0; $i < $#{$result->{table}->{body}}; $i++) {
|
||||||
|
cmp_deeply(
|
||||||
|
$result->{table}->{body}->[$i],
|
||||||
|
{
|
||||||
|
Char => ignore(),
|
||||||
|
'Esc Code' => ignore()
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if title is correct or not
|
||||||
|
is($result->{title}, 'URL Escape Codes');
|
||||||
|
|
||||||
|
return '',
|
||||||
|
structured_answer => {
|
||||||
|
id => 'url_escape_codes',
|
||||||
|
name => 'URL Escape Codes',
|
||||||
|
data => {
|
||||||
|
title => 'URL Escape Codes',
|
||||||
|
table => $url_escape_codes
|
||||||
|
},
|
||||||
|
meta => {
|
||||||
|
sourceName => 'december.com',
|
||||||
|
sourceUrl => 'http://www.december.com/html/spec/esccodes.html'
|
||||||
|
},
|
||||||
|
templates => {
|
||||||
|
group => 'list',
|
||||||
|
item => 0,
|
||||||
|
options => {
|
||||||
|
content => 'DDH.url_escape_codes.content',
|
||||||
|
moreAt => 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
sub build_test { test_zci(build_structured_answer(@_)) }
|
||||||
|
|
||||||
|
ddg_goodie_test(
|
||||||
|
[qw( DDG::Goodie::UrlEscapeCodes )],
|
||||||
|
'url escape' => build_test(),
|
||||||
|
'url escaping' => build_test(),
|
||||||
|
'url escape codes' => build_test(),
|
||||||
|
'url escape characters' => build_test(),
|
||||||
|
'url escape sequences' => build_test(),
|
||||||
|
'url encoder' => undef,
|
||||||
|
'url decoder' => undef,
|
||||||
|
'convert url escape' => undef,
|
||||||
|
'dont run for this' => undef
|
||||||
|
);
|
||||||
|
|
||||||
|
done_testing;
|
Loading…
Reference in New Issue