From aef027c4b98ca4ded605b20c3d5ac6cc47eb3ce6 Mon Sep 17 00:00:00 2001 From: Olivier BERT Date: Tue, 2 Apr 2019 15:31:34 +0200 Subject: [PATCH] Accessibility: added roles and aria labels for many icons and icon links (server list, tags, users, roles, attributes, ...) There is still much work to be done. But we are on the road. Ideally, and in order to avoid code dupplicates, we should have some utility functions to generate a proper and accessible yes/no icon, an accessible icon link, etc. This would prevent the code from being filled with "aria-label" tags, since the "title" and "aria-label" properties are nearly always the same. --- .../Elements/Events/View/row_attribute.ctp | 4 +-- app/View/Elements/Events/View/row_object.ctp | 2 +- .../Elements/TagCollections/index_row.ctp | 2 +- app/View/Elements/Users/userIndexTable.ctp | 6 ++-- app/View/Elements/eventdiscussion.ctp | 4 +-- app/View/Elements/galaxyQuickView.ctp | 6 ++-- app/View/Elements/galaxyQuickViewMini.ctp | 4 +-- .../ListTopBar/element_embedded.ctp | 3 +- .../ListTopBar/element_group.ctp | 3 +- .../ListTopBar/element_simple.ctp | 3 +- app/View/Events/proposal_event_index.ctp | 4 +-- app/View/Feeds/preview_index.ctp | 2 +- app/View/Galaxies/index.ctp | 4 +-- app/View/News/index.ctp | 2 +- app/View/Noticelists/index.ctp | 4 +-- app/View/ObjectTemplates/index.ctp | 2 +- app/View/Organisations/index.ctp | 2 +- app/View/Regexp/admin_index.ctp | 4 +-- app/View/Roles/admin_index.ctp | 11 ++++--- app/View/Roles/index.ctp | 5 +-- app/View/Servers/index.ctp | 31 ++++++++++--------- app/View/Tags/index.ctp | 12 +++---- app/View/Taxonomies/index.ctp | 2 +- app/View/Templates/index.ctp | 4 +-- app/View/Warninglists/index.ctp | 2 +- app/View/Whitelists/admin_index.ctp | 4 +-- 26 files changed, 69 insertions(+), 63 deletions(-) diff --git a/app/View/Elements/Events/View/row_attribute.ctp b/app/View/Elements/Events/View/row_attribute.ctp index 96ebb3ee9..f236614c9 100644 --- a/app/View/Elements/Events/View/row_attribute.ctp +++ b/app/View/Elements/Events/View/row_attribute.ctp @@ -357,7 +357,7 @@ - + - + diff --git a/app/View/Elements/Events/View/row_object.ctp b/app/View/Elements/Events/View/row_object.ctp index b3bd47ab3..27d85a240 100644 --- a/app/View/Elements/Events/View/row_object.ctp +++ b/app/View/Elements/Events/View/row_object.ctp @@ -116,7 +116,7 @@ ', + '', $baseurl, h($object['id']) ); diff --git a/app/View/Elements/TagCollections/index_row.ctp b/app/View/Elements/TagCollections/index_row.ctp index 703057529..fe9cadcf7 100644 --- a/app/View/Elements/TagCollections/index_row.ctp +++ b/app/View/Elements/TagCollections/index_row.ctp @@ -44,7 +44,7 @@ echo $this->Form->postLink('', array('action' => 'delete', $item['TagCollection']['id']), array('class' => 'fa fa-trash', 'title' => __('Delete')), __('Are you sure you want to delete "%s"?', $item['TagCollection']['name'])); } echo sprintf( - '', + '', $baseurl, h($item['TagCollection']['id']), __('Download configuration'), diff --git a/app/View/Elements/Users/userIndexTable.ctp b/app/View/Elements/Users/userIndexTable.ctp index a3dc84bcf..5e2bd1df7 100644 --- a/app/View/Elements/Users/userIndexTable.ctp +++ b/app/View/Elements/Users/userIndexTable.ctp @@ -87,11 +87,11 @@ ?> Html->link('', array('admin' => true, 'action' => 'edit', $user['User']['id']), array('class' => 'fa fa-edit', 'title' => __('Edit'))); - echo $this->Form->postLink('', array('admin' => true, 'action' => 'delete', $user['User']['id']), array('class' => 'fa fa-trash', 'title' => __('Delete')), __('Are you sure you want to delete # %s? It is highly recommended to never delete users but to disable them instead.', $user['User']['id'])); + echo $this->Html->link('', array('admin' => true, 'action' => 'edit', $user['User']['id']), array('class' => 'fa fa-edit', 'title' => __('Edit'), 'aria-label' => __('Edit'))); + echo $this->Form->postLink('', array('admin' => true, 'action' => 'delete', $user['User']['id']), array('class' => 'fa fa-trash', 'title' => __('Delete'), 'aria-label' => __('Delete')), __('Are you sure you want to delete # %s? It is highly recommended to never delete users but to disable them instead.', $user['User']['id'])); endif; ?> - Html->link('', array('admin' => true, 'action' => 'view', $user['User']['id']), array('class' => 'fa fa-eye', 'title' => __('View'))); ?> + Html->link('', array('admin' => true, 'action' => 'view', $user['User']['id']), array('class' => 'fa fa-eye', 'title' => __('View'), 'aria-label' => __('View'))); ?> Form->postLink('', array('controller' => 'posts', 'action' => 'delete', h($post['id']), h($context)), array('class' => 'fa fa-trash', 'title' => __('Delete')), __('Are you sure you want to delete this post?')); } else { ?> - + Html->link('', array('controller' => 'posts', 'action' => 'edit', h($post['id']), h($context)), array('class' => 'fa fa-edit', 'title' => __('Edit'))); echo $this->Form->postLink('', array('controller' => 'posts', 'action' => 'delete', h($post['id']), h($context)), array('class' => 'fa fa-trash', 'title' => 'Delete'), __('Are you sure you want to delete this post?')); ?> - +   - + + -   - +   + Form->create(false, array('url' => $baseurl . '/galaxy_clusters/detach/' . ucfirst(h($target_id)) . '/' . h($target_type) . '/' . $cluster['tag_id'], 'style' => 'display: inline-block; margin: 0px;')); diff --git a/app/View/Elements/galaxyQuickViewMini.ctp b/app/View/Elements/galaxyQuickViewMini.ctp index cba6d10fa..7d3f77709 100644 --- a/app/View/Elements/galaxyQuickViewMini.ctp +++ b/app/View/Elements/galaxyQuickViewMini.ctp @@ -66,8 +66,8 @@   -   - +   + Form->create(false, array('url' => $baseurl . '/galaxy_clusters/detach/' . ucfirst(h($target_id)) . '/' . h($target_type) . '/' . h($cluster['tag_id']), 'style' => 'display: inline-block; margin: 0px;')); diff --git a/app/View/Elements/genericElements/ListTopBar/element_embedded.ctp b/app/View/Elements/genericElements/ListTopBar/element_embedded.ctp index 0846d2c1f..7e7026311 100644 --- a/app/View/Elements/genericElements/ListTopBar/element_embedded.ctp +++ b/app/View/Elements/genericElements/ListTopBar/element_embedded.ctp @@ -30,7 +30,7 @@ } $dataFields = implode(' ', $dataFields); echo sprintf( - '
  • %s%s%s
  • ', + '
  • %s%s%s
  • ', empty($data['class']) ? '' : h($data['class']), empty($data['active']) ? '' : 'background-blue', // Change the default class for highlighted/active toggles here empty($data['id']) ? '' : 'id="' . h($data['id']) . '"', @@ -38,6 +38,7 @@ empty($onClick) ? '' : $onClick, // pass $data['onClick'] for the function name to call and $data['onClickParams'] for the parameter list empty($dataFields) ? '' : $dataFields, empty($data['title']) ? '' : sprintf('title="%s"', h($data['title'])), + !empty($data['text']) ? '' : !empty($data['title']) ? sprintf('aria-label="%s"', h($data['title'])) : '', empty($data['fa-icon']) ? '' : sprintf('', $data['fa-icon']), // this has to be sanitised beforehand! empty($data['html']) ? '' : $data['html'], // this has to be sanitised beforehand! empty($data['text']) ? '' : h($data['text']) diff --git a/app/View/Elements/genericElements/ListTopBar/element_group.ctp b/app/View/Elements/genericElements/ListTopBar/element_group.ctp index 4bda25b21..b24956da7 100644 --- a/app/View/Elements/genericElements/ListTopBar/element_group.ctp +++ b/app/View/Elements/genericElements/ListTopBar/element_group.ctp @@ -18,11 +18,12 @@ } } echo sprintf( - '%s%s%s ', + '%s%s%s ', empty($data['class']) ? '' : h($data['class']), empty($data['active']) ? 'btn-inverse' : 'btn-primary', // Change the default class for highlighted/active toggles here empty($data['id']) ? '' : 'id="' . h($data['id']) . '"', empty($data['title']) ? '' : sprintf('title="%s"', h($data['title'])), + !empty($data['text']) ? '' : !empty($data['title']) ? sprintf('aria-label="%s"', h($data['title'])) : '', empty($data['fa-icon']) ? '' : sprintf('', $data['fa-icon']), // this has to be sanitised beforehand! empty($data['html']) ? '' : $data['html'], // this has to be sanitised beforehand! empty($data['text']) ? '' : h($data['text']), diff --git a/app/View/Elements/genericElements/ListTopBar/element_simple.ctp b/app/View/Elements/genericElements/ListTopBar/element_simple.ctp index 6ac5832ed..f68719e7f 100644 --- a/app/View/Elements/genericElements/ListTopBar/element_simple.ctp +++ b/app/View/Elements/genericElements/ListTopBar/element_simple.ctp @@ -34,7 +34,7 @@ } $dataFields = implode(' ', $dataFields); echo sprintf( - '%s%s%s', + '%s%s%s', empty($data['class']) ? '' : h($data['class']), empty($data['active']) ? 'btn-inverse' : 'btn-primary', // Change the default class for highlighted/active toggles here empty($data['id']) ? '' : 'id="' . h($data['id']) . '"', @@ -42,6 +42,7 @@ empty($onClick) ? '' : $onClick, // pass $data['onClick'] for the function name to call and $data['onClickParams'] for the parameter list empty($dataFields) ? '' : $dataFields, empty($data['title']) ? '' : sprintf('title="%s"', h($data['title'])), + !empty($data['text']) ? '' : !empty($data['title']) ? sprintf('aria-label="%s"', h($data['title'])) : '', empty($data['fa-icon']) ? '' : sprintf( ' ', empty($data['fa-source']) ? 'fas' : h($data['fa-source']), diff --git a/app/View/Events/proposal_event_index.ctp b/app/View/Events/proposal_event_index.ctp index 0eed4be36..1e6e8d1df 100755 --- a/app/View/Events/proposal_event_index.ctp +++ b/app/View/Events/proposal_event_index.ctp @@ -42,11 +42,11 @@ - " class = "icon-ok" title = ""> + " class = "icon-ok" title = "" aria-label = ""> - " class = "icon-remove" title = ""> + " class = "icon-remove" title = "" aria-label = "">   diff --git a/app/View/Feeds/preview_index.ctp b/app/View/Feeds/preview_index.ctp index 1705e0865..723b49c07 100644 --- a/app/View/Feeds/preview_index.ctp +++ b/app/View/Feeds/preview_index.ctp @@ -70,7 +70,7 @@ Form->postLink('', '/feeds/getEvent/' . $id . '/' . $uuid, array('class' => 'fa fa-arrow-circle-down', 'title' => __('Fetch the event')), __('Are you sure you want to fetch and save this event on your instance?', $this->Form->value('Feed.id'))); ?> - + diff --git a/app/View/Galaxies/index.ctp b/app/View/Galaxies/index.ctp index 27208062a..cf8257ce3 100644 --- a/app/View/Galaxies/index.ctp +++ b/app/View/Galaxies/index.ctp @@ -55,8 +55,8 @@ ); $row .= sprintf( '%s%s', - $this->Form->postLink('', array('action' => 'delete', $item['Galaxy']['id']), array('class' => 'fa fa-trash', 'title' => __('Delete')), sprintf(__('Are you sure you want to delete the Galaxy (%s)?'), $item['Galaxy']['name'])), - $this->Html->link('', array('action' => 'view', $item['Galaxy']['id']), array('class' => 'fa fa-eye', 'title' => __('View'))) + $this->Form->postLink('', array('action' => 'delete', $item['Galaxy']['id']), array('class' => 'fa fa-trash', 'title' => __('Delete'), 'aria-label' => __('Delete')), sprintf(__('Are you sure you want to delete the Galaxy (%s)?'), $item['Galaxy']['name'])), + $this->Html->link('', array('action' => 'view', $item['Galaxy']['id']), array('class' => 'fa fa-eye', 'title' => __('View'), 'aria-label' => __('View'))) ); echo $row; } diff --git a/app/View/News/index.ctp b/app/View/News/index.ctp index b39a3a4e0..11630e864 100644 --- a/app/View/News/index.ctp +++ b/app/View/News/index.ctp @@ -19,7 +19,7 @@ echo nl2br(preg_replace('#https?:\/\/[^\s]*#i', '$0', $message)); if ($isSiteAdmin): ?> -
    +
    Form->postLink('', array('action' => 'delete', $newsItem['News']['id']), array('class' => 'fa fa-trash', 'title' => __('Delete')), __('Are you sure you want to delete news item # %s?', $newsItem['News']['id'])); endif; diff --git a/app/View/Noticelists/index.ctp b/app/View/Noticelists/index.ctp index b824d1c20..0f9581ddf 100644 --- a/app/View/Noticelists/index.ctp +++ b/app/View/Noticelists/index.ctp @@ -60,10 +60,10 @@ } else { $onClick = 'disabled'; } - $input = ''; + $input = ''; echo '' . $input . ''; $actions = ''; - $actions .= ''; + $actions .= ''; echo '' . $actions . ''; echo ''; diff --git a/app/View/ObjectTemplates/index.ctp b/app/View/ObjectTemplates/index.ctp index 3e819c971..86f9f98bf 100644 --- a/app/View/ObjectTemplates/index.ctp +++ b/app/View/ObjectTemplates/index.ctp @@ -112,7 +112,7 @@ foreach ($list as $template): ?> - ' class = "fa fa-eye" title = ""> + ' class = "fa fa-eye" title = "" aria-label = ""> Form->postLink('', array('action' => 'update', $template['ObjectTemplate']['name'], 1), array('class' => 'fa fa-sync', 'title' => 'Force update'), __('Are you sure you want to force an update for template # %s?', $template['ObjectTemplate']['id'])); diff --git a/app/View/Organisations/index.ctp b/app/View/Organisations/index.ctp index c723a0246..9ae73f3ff 100644 --- a/app/View/Organisations/index.ctp +++ b/app/View/Organisations/index.ctp @@ -135,7 +135,7 @@ foreach ($orgs as $org): ?> - ' class = "fa fa-edit" title = "" + ' class = "fa fa-edit" title = "" aria-label = ""> Form->postLink('', array('admin' => true, 'action' => 'delete', $org['Organisation']['id']), array('class' => 'fa fa-trash', 'title' => __('Delete')), __('Are you sure you want to delete %s?', $org['Organisation']['name'])); ?> diff --git a/app/View/Regexp/admin_index.ctp b/app/View/Regexp/admin_index.ctp index 5f7b4b44a..e415c6ce2 100644 --- a/app/View/Regexp/admin_index.ctp +++ b/app/View/Regexp/admin_index.ctp @@ -31,8 +31,8 @@ foreach ($list as $item):?>     - Html->link('', array('admin' => true, 'action' => 'edit', $item['Regexp']['id']), array('class' => 'fa fa-edit', 'title' => __('Edit')));?> - Form->postLink('', array('admin' => true, 'action' => 'delete', $item['Regexp']['id']), array('class' => 'fa fa-trash', 'title' => __('Delete')), __('Are you sure you want to delete %s?', h($item['Regexp']['regexp'])));?> + Html->link('', array('admin' => true, 'action' => 'edit', $item['Regexp']['id']), array('class' => 'fa fa-edit', 'title' => __('Edit'), 'aria-label' => __('Edit')));?> + Form->postLink('', array('admin' => true, 'action' => 'delete', $item['Regexp']['id']), array('class' => 'fa fa-trash', 'title' => __('Delete'), 'aria-label' => __('Delete')), __('Are you sure you want to delete %s?', h($item['Regexp']['regexp'])));?> diff --git a/app/View/Roles/admin_index.ctp b/app/View/Roles/admin_index.ctp index c652a929e..7490cb4e7 100644 --- a/app/View/Roles/admin_index.ctp +++ b/app/View/Roles/admin_index.ctp @@ -37,16 +37,17 @@ foreach ($list as $item): ?> Html->link(h($item['Role']['id']), array('admin' => true, 'action' => 'edit', $item['Role']['id'])); ?>  - > + >   -   +     $flags) { $flagName = Inflector::Humanize(substr($k, 5)); echo sprintf( - ' ', + ' ', ($item['Role'][$k]) ? 'icon-ok' : '', + ($item['Role'][$k]) ? __('Yes') : __('No'), sprintf( __('%s permission %s'), h($flagName), @@ -75,8 +76,8 @@ foreach ($list as $item): ?> ?> - Html->link('', array('admin' => true, 'action' => 'edit', $item['Role']['id']), array('class' => 'fa fa-edit', 'title' => __('Edit'))); ?> - Form->postLink('', array('admin' => true, 'action' => 'delete', $item['Role']['id']), array('class' => 'fa fa-trash', 'title' => __('Delete')), __('Are you sure you want to delete %s?', $item['Role']['name'])); ?> + Html->link('', array('admin' => true, 'action' => 'edit', $item['Role']['id']), array('class' => 'fa fa-edit', 'title' => __('Edit'), 'aria-label' => __('Edit'))); ?> + Form->postLink('', array('admin' => true, 'action' => 'delete', $item['Role']['id']), array('class' => 'fa fa-trash', 'title' => __('Delete'), 'aria-label' => __('Delete')), __('Are you sure you want to delete %s?', $item['Role']['name'])); ?> diff --git a/app/View/Roles/index.ctp b/app/View/Roles/index.ctp index 46c3c4e89..fe323235b 100644 --- a/app/View/Roles/index.ctp +++ b/app/View/Roles/index.ctp @@ -33,15 +33,16 @@ foreach ($list as $item): ?>   -
    +     $flags) { $flagName = Inflector::Humanize(substr($k, 5)); echo sprintf( - ' ', + ' ', ($item['Role'][$k]) ? 'icon-ok' : '', + ($item['Role'][$k]) ? __('Granted') : __('Not granted'), sprintf( __('%s permission %s'), h($flagName), diff --git a/app/View/Servers/index.ctp b/app/View/Servers/index.ctp index 0752850e2..1d2c31da2 100644 --- a/app/View/Servers/index.ctp +++ b/app/View/Servers/index.ctp @@ -70,9 +70,10 @@ foreach ($servers as $server): ?> - - " data-toggle="popover" title="Distribution List" data-content=""> () - " data-toggle="popover" title="Distribution List" data-content=""> () + + + " data-toggle="popover" title="Distribution List" data-content=""> () + " data-toggle="popover" title="Distribution List" data-content=""> () '; + echo ''; } ?> - - + +       - - + + ', $baseurl . '/servers/previewIndex/' . h($server['Server']['id']), __('Explore'), 'fa fa-search'); + echo sprintf('', $baseurl . '/servers/previewIndex/' . h($server['Server']['id']), __('Explore'), __('Explore'), 'fa fa-search'); if ($server['Server']['pull']) { - echo sprintf('', $baseurl . '/servers/pull/' . h($server['Server']['id']) . '/update', __('Pull updates to events that already exist locally'), 'fa fa-sync'); - echo sprintf('', $baseurl . '/servers/pull/' . h($server['Server']['id']) . '/full', __('Pull all'), 'fa fa-arrow-circle-down'); + echo sprintf('', $baseurl . '/servers/pull/' . h($server['Server']['id']) . '/update', __('Pull updates to events that already exist locally'), __('Pull updates'), 'fa fa-sync'); + echo sprintf('', $baseurl . '/servers/pull/' . h($server['Server']['id']) . '/full', __('Pull all'), __('Pull all'), 'fa fa-arrow-circle-down'); } if ($server['Server']['push']) { - echo sprintf('', $baseurl . '/servers/push/' . h($server['Server']['id']) . '/full', __('Push all'), 'fa fa-arrow-circle-up'); + echo sprintf('', $baseurl . '/servers/push/' . h($server['Server']['id']) . '/full', __('Push all'), __('Push all'), 'fa fa-arrow-circle-up'); } if ($server['Server']['caching_enabled']) { - echo sprintf('', $baseurl . '/servers/cache/' . h($server['Server']['id']), __('Cache instance'), 'fa fa-memory'); + echo sprintf('', $baseurl . '/servers/cache/' . h($server['Server']['id']), __('Cache instance'), __('Cache instance'), 'fa fa-memory'); } $mayModify = ($isSiteAdmin); if ($mayModify) { - echo sprintf('', $baseurl . '/servers/edit/' . h($server['Server']['id']), __('Edit'), 'fa fa-edit'); - echo $this->Form->postLink('', array('action' => 'delete', $server['Server']['id']), array('class' => 'fa fa-trash', 'title' => __('Delete')), __('Are you sure you want to delete # %s?', $server['Server']['id'])); + echo sprintf('', $baseurl . '/servers/edit/' . h($server['Server']['id']), __('Edit'), __('Edit'), 'fa fa-edit'); + echo $this->Form->postLink('', array('action' => 'delete', $server['Server']['id']), array('class' => 'fa fa-trash', 'title' => __('Delete'), 'aria-label' => __('Delete')), __('Are you sure you want to delete # %s?', $server['Server']['id'])); } ?> diff --git a/app/View/Tags/index.ctp b/app/View/Tags/index.ctp index 231c6816f..bc9737560 100644 --- a/app/View/Tags/index.ctp +++ b/app/View/Tags/index.ctp @@ -79,8 +79,8 @@ foreach ($list as $k => $item): ?>   - - + + " class="tag" style="background-color: ;color:TextColour->getTextColour($item['Tag']['colour']); ?>" title=""> @@ -116,13 +116,13 @@ foreach ($list as $k => $item): ?> element('sparkline', array('id' => $item['Tag']['id'], 'csv' => isset($csv[$k]) ? $csv[$k] : $emptyDate)); ?> - /> + /> - Html->link('', array('controller' => 'tags', 'action' => 'viewGraph', $item['Tag']['id']), array('class' => 'fa fa-share-alt', 'title' => __('View graph')));?> - Html->link('', array('action' => 'edit', $item['Tag']['id']), array('class' => 'fa fa-edit', 'title' => __('Edit')));?> - Form->postLink('', array('action' => 'delete', $item['Tag']['id']), array('class' => 'fa fa-trash', 'title' => __('Delete')), __('Are you sure you want to delete "%s"?', $item['Tag']['name']));?> + Html->link('', array('controller' => 'tags', 'action' => 'viewGraph', $item['Tag']['id']), array('class' => 'fa fa-share-alt', 'title' => __('View graph'), 'aria-label' => __('View graph')));?> + Html->link('', array('action' => 'edit', $item['Tag']['id']), array('class' => 'fa fa-edit', 'title' => __('Edit'), 'aria-label' => __('Edit')));?> + Form->postLink('', array('action' => 'delete', $item['Tag']['id']), array('class' => 'fa fa-trash', 'title' => __('Delete'), 'aria-label' => __('Delete')), __('Are you sure you want to delete "%s"?', $item['Tag']['name']));?> } } ?> - ' class = "fa fa-eye" title = ""> + ' class = "fa fa-eye" title = "" aria-label = ""> '">  - Html->link('', array('action' => 'edit', $item['Template']['id']), array('class' => 'fa fa-edit', 'title' => 'Edit'));?> - Form->postLink('', array('action' => 'delete', $item['Template']['id']), array('class' => 'fa fa-trash', 'title' => 'Delete'), __('Are you sure you want to delete Template #' . $item['Template']['id'] . '?'));?> + Html->link('', array('action' => 'edit', $item['Template']['id']), array('class' => 'fa fa-edit', 'title' => 'Edit', 'aria-label' => 'Edit'));?> + Form->postLink('', array('action' => 'delete', $item['Template']['id']), array('class' => 'fa fa-trash', 'title' => 'Delete', 'aria-label' => 'Delete'), __('Are you sure you want to delete Template #' . $item['Template']['id'] . '?'));?> $item): ?> /> - ' class = "fa fa-eye" title = ""> + ' class = "fa fa-eye" title = "" aria-label = "">     - Html->link('', array('admin' => true, 'action' => 'edit', $item['Whitelist']['id']), array('class' => 'fa fa-edit', 'title' => __('Edit')));?> - Form->postLink('', array('admin' => true, 'action' => 'delete', $item['Whitelist']['id']), array('class' => 'fa fa-trash', 'title' => __('Delete')), __('Are you sure you want to delete "%s"?', $item['Whitelist']['name']));?> + Html->link('', array('admin' => true, 'action' => 'edit', $item['Whitelist']['id']), array('class' => 'fa fa-edit', 'title' => __('Edit'), 'aria-label' => __('Edit')));?> + Form->postLink('', array('admin' => true, 'action' => 'delete', $item['Whitelist']['id']), array('class' => 'fa fa-trash', 'title' => __('Delete'), 'aria-label' => __('Delete')), __('Are you sure you want to delete "%s"?', $item['Whitelist']['name']));?>