UrlEscapeCodes: New Url Escape Codes Table Goodie (#4088)

* UrlEscapeCodes: Goodie initialzied

* UrlEscapeCodes: Front end created

* UrlEscapeCodes: Adds tests
master
Manraj Singh 2017-04-14 01:36:15 +05:30 committed by Zaahir Moolla
parent 3c784f2582
commit 9005c0c1fd
6 changed files with 220 additions and 0 deletions

View File

@ -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;

View File

@ -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>

View File

@ -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'

View File

@ -0,0 +1,3 @@
.zci--url_escape_codes .c-list__content.chomp {
max-height: 14em;
}

View File

@ -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 '';
});
};

90
t/UrlEscapeCodes.t Normal file
View File

@ -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;