aboutsummaryrefslogtreecommitdiffstats
path: root/web
diff options
context:
space:
mode:
Diffstat (limited to 'web')
-rw-r--r--web/cobrands/bathnes/_colours.scss9
-rw-r--r--web/cobrands/bathnes/js.js11
-rw-r--r--web/cobrands/bexley/_colours.scss8
-rw-r--r--web/cobrands/bexley/assets.js26
-rw-r--r--web/cobrands/bexley/base.scss2
-rw-r--r--web/cobrands/bexley/layout.scss47
-rw-r--r--web/cobrands/borsetshire/_colours.scss4
-rw-r--r--web/cobrands/borsetshire/js.js21
-rw-r--r--web/cobrands/bristol/_colours.scss6
-rw-r--r--web/cobrands/bristol/base.scss8
-rw-r--r--web/cobrands/bristol/layout.scss4
-rw-r--r--web/cobrands/bromley/_colours.scss4
-rw-r--r--web/cobrands/bromley/_fonts.scss2
-rw-r--r--web/cobrands/bromley/base.scss95
-rw-r--r--web/cobrands/bromley/images/container-images/battery-bag.pngbin0 -> 29477 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/battery-bag@2x.pngbin0 -> 71701 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/electricals-batteries-textiles.pngbin0 -> 59568 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/electricals-batteries-textiles@2x.pngbin0 -> 150269 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/food-communal.pngbin0 -> 7849 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/food-communal@2x.pngbin0 -> 16195 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/food-green-caddy.pngbin0 -> 8049 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/food-green-caddy@2x.pngbin0 -> 11300 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/garden-waste-bin.pngbin0 -> 9341 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/garden-waste-bin@2x.pngbin0 -> 22666 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/kerbside-black-box-paper.pngbin0 -> 14826 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/kerbside-black-box-paper@2x.pngbin0 -> 27076 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/kerbside-green-box-mix.pngbin0 -> 16691 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/kerbside-green-box-mix@2x.pngbin0 -> 28446 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/large-communal-black.pngbin0 -> 11981 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/large-communal-black@2x.pngbin0 -> 24266 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/refuse-black-sack.pngbin0 -> 8294 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/refuse-black-sack@2x.pngbin0 -> 14643 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/small-communal-mix.pngbin0 -> 10385 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/small-communal-mix@2x.pngbin0 -> 18125 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/small-communal-paper.pngbin0 -> 10419 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/small-communal-paper@2x.pngbin0 -> 17600 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/textile-bag.pngbin0 -> 39911 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/textile-bag@2x.pngbin0 -> 97071 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/weee-bag.pngbin0 -> 26358 bytes
-rw-r--r--web/cobrands/bromley/images/container-images/weee-bag@2x.pngbin0 -> 62025 bytes
-rw-r--r--web/cobrands/bromley/images/logo-societyworks.pngbin0 -> 3987 bytes
-rw-r--r--web/cobrands/bromley/images/logo-societyworks.svg1
-rw-r--r--web/cobrands/bromley/images/logo-veolia.pngbin0 -> 2546 bytes
-rw-r--r--web/cobrands/bromley/images/logo-veolia.svg1
-rw-r--r--web/cobrands/bromley/images/waste.pngbin0 -> 42227 bytes
-rw-r--r--web/cobrands/bromley/layout.scss9
-rw-r--r--web/cobrands/bromley/map.js2
-rw-r--r--web/cobrands/buckinghamshire/_colours.scss4
-rw-r--r--web/cobrands/buckinghamshire/assets.js32
-rw-r--r--web/cobrands/buckinghamshire/base.scss29
-rw-r--r--web/cobrands/buckinghamshire/layout.scss7
-rw-r--r--web/cobrands/cheshireeast/_colours.scss6
-rw-r--r--web/cobrands/cheshireeast/assets.js30
-rw-r--r--web/cobrands/cheshireeast/base.scss15
-rw-r--r--web/cobrands/cheshireeast/layout.scss8
-rw-r--r--web/cobrands/eastherts/_colours.scss5
-rw-r--r--web/cobrands/eastherts/layout.scss4
-rw-r--r--web/cobrands/eastsussex/assets.js41
-rw-r--r--web/cobrands/fiksgatami/_colours.scss2
-rw-r--r--web/cobrands/fixamingata/_colours.scss11
-rw-r--r--web/cobrands/fixamingata/base.scss23
-rw-r--r--web/cobrands/fixamingata/layout.scss59
-rw-r--r--web/cobrands/fixmystreet-uk-councils/alloy.js104
-rw-r--r--web/cobrands/fixmystreet-uk-councils/council_validation_rules.js2
-rw-r--r--web/cobrands/fixmystreet-uk-councils/roadworks.js82
-rw-r--r--web/cobrands/fixmystreet.com/_colours.scss2
-rw-r--r--web/cobrands/fixmystreet.com/base.scss1
-rw-r--r--web/cobrands/fixmystreet.com/layout.scss35
-rw-r--r--web/cobrands/fixmystreet/assets.js193
-rw-r--r--web/cobrands/fixmystreet/fixmystreet.js87
-rw-r--r--web/cobrands/fixmystreet/offline.js52
-rw-r--r--web/cobrands/fixmystreet/staff.js98
-rw-r--r--web/cobrands/greenwich/_colours.scss4
-rw-r--r--web/cobrands/greenwich/base.scss4
-rw-r--r--web/cobrands/hackney/_colours.scss51
-rw-r--r--web/cobrands/hackney/assets.js246
-rw-r--r--web/cobrands/hackney/base.scss222
-rw-r--r--web/cobrands/hackney/hackney-search-icon.pngbin0 -> 464 bytes
-rw-r--r--web/cobrands/hackney/images/hackney-logo-white.pngbin0 -> 18214 bytes
-rw-r--r--web/cobrands/hackney/layout.scss143
-rw-r--r--web/cobrands/hart/_colours.scss5
-rw-r--r--web/cobrands/highwaysengland/_colours.scss6
-rw-r--r--web/cobrands/highwaysengland/assets.js6
-rw-r--r--web/cobrands/highwaysengland/base.scss1
-rw-r--r--web/cobrands/hounslow/_colours.scss6
-rw-r--r--web/cobrands/hounslow/assets.js32
-rw-r--r--web/cobrands/isleofwight/_colours.scss7
-rw-r--r--web/cobrands/isleofwight/assets.js37
-rw-r--r--web/cobrands/lincolnshire/_colours.scss6
-rw-r--r--web/cobrands/northamptonshire/_colours.scss4
-rw-r--r--web/cobrands/northamptonshire/assets.js419
-rw-r--r--web/cobrands/oxfordshire/_colours.scss5
-rw-r--r--web/cobrands/oxfordshire/assets.js257
-rw-r--r--web/cobrands/oxfordshire/base.scss47
-rw-r--r--web/cobrands/oxfordshire/layout.scss18
-rw-r--r--web/cobrands/peterborough/_colours.scss6
-rw-r--r--web/cobrands/peterborough/assets.js95
-rw-r--r--web/cobrands/peterborough/base.scss26
-rw-r--r--web/cobrands/peterborough/layout.scss8
-rwxr-xr-xweb/cobrands/rutland/_colours.scss2
-rw-r--r--web/cobrands/sass/_admin.scss16
-rw-r--r--web/cobrands/sass/_base.scss45
-rw-r--r--web/cobrands/sass/_layout.scss21
-rw-r--r--web/cobrands/sass/_search-help.scss78
-rw-r--r--web/cobrands/sass/_waste.scss165
-rw-r--r--web/cobrands/stevenage/_colours.scss3
-rw-r--r--web/cobrands/tfl/_colours.scss8
-rw-r--r--web/cobrands/tfl/assets.js2
-rw-r--r--web/cobrands/tfl/base.scss21
-rw-r--r--web/cobrands/tfl/layout.scss6
-rw-r--r--web/cobrands/warwickshire/_colours.scss6
-rw-r--r--web/cobrands/warwickshire/base.scss32
-rw-r--r--web/cobrands/warwickshire/layout.scss12
-rw-r--r--web/cobrands/westminster/_colours.scss7
-rw-r--r--web/cobrands/westminster/base.scss21
-rw-r--r--web/cobrands/westminster/layout.scss4
-rw-r--r--web/js/dropzone.js.patch287
-rw-r--r--web/js/loading-attribute-polyfill.js213
-rw-r--r--web/js/map-OpenLayers.js57
-rw-r--r--web/js/map-OpenStreetMap.js45
-rw-r--r--web/js/map-bing-ol.js67
-rw-r--r--web/js/map-fms.js46
-rw-r--r--web/js/map-google.js2
-rw-r--r--web/js/map-mastermap.js5
-rw-r--r--web/vendor/accessible-autocomplete.min.js1
-rw-r--r--web/vendor/dropzone.min.js67
-rw-r--r--web/vendor/govuk-frontend/govuk-frontend-3.5.0.min.css3
-rwxr-xr-xweb/vendor/html5sortable.min.js1
128 files changed, 3071 insertions, 1025 deletions
diff --git a/web/cobrands/bathnes/_colours.scss b/web/cobrands/bathnes/_colours.scss
index 0340b3eda..9021a0562 100644
--- a/web/cobrands/bathnes/_colours.scss
+++ b/web/cobrands/bathnes/_colours.scss
@@ -18,9 +18,11 @@ $site-width: 60em;
@import "pattern-lib/colours";
-$primary: #00728F;
+$primary: $bathnes-primary;
$primary_b: #0b0b0c;
-$primary_text: #0b0c0c;
+$primary_text: #fff;
+$primary_link_color: $primary_text;
+$primary_link_hover_color: rgba($primary_text, 0.8);
$base_bg: white;
$base_fg: #0b0c0c;
@@ -40,3 +42,6 @@ $front_main_background: $bathnes-primary;
$menu-image: 'menu-black';
$header-top-border: false;
+
+$search-help-background: #fff3f3;
+$search-help-header-font-size-desktop: 1.25em;
diff --git a/web/cobrands/bathnes/js.js b/web/cobrands/bathnes/js.js
new file mode 100644
index 000000000..f76da5cd5
--- /dev/null
+++ b/web/cobrands/bathnes/js.js
@@ -0,0 +1,11 @@
+fixmystreet.roadworks.config = {
+ tag_top: 'h3',
+ colon: true,
+ text_after: "<p>If you think this issue needs immediate attention you can continue your report below</p>"
+};
+
+fixmystreet.roadworks.filter = function(feature) {
+ var category = $('select#form_category').val(),
+ categories = ['Damage to pavement', 'Damage to road', 'Faded road markings', 'Damaged Railing, manhole, or drain cover'];
+ return OpenLayers.Util.indexOf(categories, category) != -1;
+};
diff --git a/web/cobrands/bexley/_colours.scss b/web/cobrands/bexley/_colours.scss
index 615ef65a4..4b78a39f7 100644
--- a/web/cobrands/bexley/_colours.scss
+++ b/web/cobrands/bexley/_colours.scss
@@ -40,9 +40,9 @@ $primary_text: $text_black;
$base_bg: $white;
$base_fg: $text_black;
-$nav_background_colour: $fuchsia;
-$nav_colour: $white;
-$nav_hover_background_colour: darken($fuchsia, 10%);
+$nav_background_colour: $white;
+$nav_colour: $text_black;
+$nav_hover_background_colour: $fuchsia_lt;
$col_click_map: $aqua;
@@ -51,3 +51,5 @@ $header-top-border: false;
$heading-font: Lato, sans-serif;
$body-font: Lato, sans-serif;
$meta-font: $body-font;
+
+$search-help-background: #fff3f3;
diff --git a/web/cobrands/bexley/assets.js b/web/cobrands/bexley/assets.js
index 541d47ea4..db2384195 100644
--- a/web/cobrands/bexley/assets.js
+++ b/web/cobrands/bexley/assets.js
@@ -21,18 +21,10 @@ var defaults = {
strategy_class: OpenLayers.Strategy.FixMyStreet
};
-var streetlight_select = $.extend({
- label: "${Unit_No}",
- labelOutlineColor: "white",
- labelOutlineWidth: 3,
- labelYOffset: 65,
- fontSize: '15px',
- fontWeight: 'bold'
-}, fixmystreet.assets.style_default_select.defaultStyle);
-
var streetlight_stylemap = new OpenLayers.StyleMap({
'default': fixmystreet.assets.style_default,
- 'select': new OpenLayers.Style(streetlight_select)
+ 'hover': fixmystreet.assets.style_default_hover,
+ 'select': fixmystreet.assets.construct_named_select_style("${Unit_No}")
});
var labeled_defaults = $.extend(true, {}, defaults, {
@@ -45,18 +37,8 @@ var labeled_defaults = $.extend(true, {}, defaults, {
UnitID: 'Unit_ID'
},
actions: {
- asset_found: function(asset) {
- var id = asset.attributes[this.fixmystreet.feature_code] || '';
- if (id !== '') {
- var asset_name = this.fixmystreet.asset_item;
- $('.category_meta_message').html('You have selected ' + asset_name + ' <b>' + id + '</b>');
- } else {
- $('.category_meta_message').html(this.fixmystreet.asset_item_message);
- }
- },
- asset_not_found: function() {
- $('.category_meta_message').html(this.fixmystreet.asset_item_message);
- }
+ asset_found: fixmystreet.assets.named_select_action_found,
+ asset_not_found: fixmystreet.assets.named_select_action_not_found
}
});
diff --git a/web/cobrands/bexley/base.scss b/web/cobrands/bexley/base.scss
index 7132f33ab..0f72a2e34 100644
--- a/web/cobrands/bexley/base.scss
+++ b/web/cobrands/bexley/base.scss
@@ -39,7 +39,7 @@ small {
.mobile-map-banner {
font-size: 0.89em;
}
-#front-main a#geolocate_link {
+a#geolocate_link {
font-size: 0.89em;
}
#front_stats div {
diff --git a/web/cobrands/bexley/layout.scss b/web/cobrands/bexley/layout.scss
index 948b01443..c18574bd5 100644
--- a/web/cobrands/bexley/layout.scss
+++ b/web/cobrands/bexley/layout.scss
@@ -6,6 +6,10 @@ body.twothirdswidthpage .content .sticky-sidebar aside {
top: 10em;
}
+#site-header {
+ border-top: 7px solid $fuchsia;
+}
+
#site-logo {
width: 208px;
height: 80px;
@@ -18,10 +22,47 @@ body.twothirdswidthpage .content .sticky-sidebar aside {
color: $fuchsia_lt;
}
+.frontpage {
+ .nav-menu--main {
+ margin: 3em 0 0 0;
+ }
+}
+
.nav-menu--main {
- span {
- background-color: $nav_hover_background_colour;
- }
+ a {
+ &:hover,
+ &:active,
+ &:focus {
+ color: $text_black;
+ }
+ }
+ a.report-a-problem-btn,
+ span.report-a-problem-btn,
+ span {
+ background-color: $nav_hover_background_colour;
+ color: $text_black;
+ border-radius: 0;
+ &:hover {
+ color: $fuchsia;
+ cursor: pointer;
+ }
+ }
+ a[href='/auth'] {
+ position: absolute;
+ top: 0;
+ right: 1em;
+ .frontpage & {
+ right: 0;
+ }
+ background-color: $fuchsia;
+ color: $white;
+ padding: 0 0.75em;
+ &:hover,
+ &:active,
+ &:focus {
+ color: $white;
+ }
+ }
}
.general-notes {
diff --git a/web/cobrands/borsetshire/_colours.scss b/web/cobrands/borsetshire/_colours.scss
index 45936ddb9..5cdda2401 100644
--- a/web/cobrands/borsetshire/_colours.scss
+++ b/web/cobrands/borsetshire/_colours.scss
@@ -34,3 +34,7 @@ $mappage-header-height: 5em; // 3em #site-logo plus 1em padding top and bottom
$body-font: Cabin, "Calibri", "Gill Sans", "Gill Sans MT", sans-serif;
$meta-font: $body-font;
$heading-font: $body-font;
+
+$search-help-alignment: left;
+$search-help-background: #fff3f3;
+$search-help-header-font-size-desktop: 1.25em;
diff --git a/web/cobrands/borsetshire/js.js b/web/cobrands/borsetshire/js.js
index 2888a9548..6c0da398e 100644
--- a/web/cobrands/borsetshire/js.js
+++ b/web/cobrands/borsetshire/js.js
@@ -4,27 +4,8 @@
return;
}
- function set_redirect(form) {
- var e = form.username.value;
- if (e == 'inspector@example.org') {
- form.r.value = 'my/planned';
- } else if (e == 'cs@example.org') {
- form.r.value = 'reports';
- } else if (e == 'super@example.org') {
- form.r.value = 'admin';
- }
- }
-
- $('#demo-user-list button').click(function(){
- var form = document.forms.general_auth;
- form.username.value = $(this).data('email');
- form.password_sign_in.value = 'password';
- set_redirect(form);
- form.submit();
- });
-
$('form[name=general_auth]').on('submit', function() {
- set_redirect(this);
+ fixmystreet.borsetshire.set_redirect(this);
});
})();
diff --git a/web/cobrands/bristol/_colours.scss b/web/cobrands/bristol/_colours.scss
index cd87161a8..c4ff28f9f 100644
--- a/web/cobrands/bristol/_colours.scss
+++ b/web/cobrands/bristol/_colours.scss
@@ -33,3 +33,9 @@ $header-top-border: false;
$col_click_map: $g1;
$col_click_map_dark: darken($g1, 10%);
+
+$search-help-alignment: left;
+$search-help-background: #fff3f3;
+$search-help-header-font-weight: normal;
+$search-help-header-font-size-desktop: 1.25em;
+$search-help-margin-desktop: -1em -1em 0 -1em;
diff --git a/web/cobrands/bristol/base.scss b/web/cobrands/bristol/base.scss
index 836b27009..bce22f3a3 100644
--- a/web/cobrands/bristol/base.scss
+++ b/web/cobrands/bristol/base.scss
@@ -109,10 +109,6 @@ dl dt {
}
}
-a#geolocate_link {
- color: $b3;
-}
-
label {
@extend %bold-font;
}
@@ -122,3 +118,7 @@ label {
color: $g7 !important;
font-weight: bold !important;
}
+
+b, strong {
+ @extend %bold-font;
+}
diff --git a/web/cobrands/bristol/layout.scss b/web/cobrands/bristol/layout.scss
index 07b39b08b..c2ba57afe 100644
--- a/web/cobrands/bristol/layout.scss
+++ b/web/cobrands/bristol/layout.scss
@@ -54,10 +54,6 @@ body.frontpage, body.twothirdswidthpage, body.fullwidthpage, body.authpage {
}
}
- a#geolocate_link {
- color: $b3;
- }
-
h1 {
font-size: 3em;
}
diff --git a/web/cobrands/bromley/_colours.scss b/web/cobrands/bromley/_colours.scss
index 9528f5403..1edec0e9b 100644
--- a/web/cobrands/bromley/_colours.scss
+++ b/web/cobrands/bromley/_colours.scss
@@ -9,6 +9,8 @@ $bromley_dark_green: #505050;
$primary: $bromley_blue;
$primary_b: #ffffff;
$primary_text: #ffffff;
+$primary_link_color: $primary_text;
+$primary_link_hover_color: rgba($primary_text, 0.8);
$link-color: $bromley_green;
$link-hover-color: $bromley_green;
@@ -28,3 +30,5 @@ $header-top-border-width: 4px;
// Override the container width to match Bromley' site, which is wider
$container-max-width: 1200px;
+
+$search-help-header-font-size-desktop: 1.25em;
diff --git a/web/cobrands/bromley/_fonts.scss b/web/cobrands/bromley/_fonts.scss
index b54d10542..cf3b85148 100644
--- a/web/cobrands/bromley/_fonts.scss
+++ b/web/cobrands/bromley/_fonts.scss
@@ -7,4 +7,4 @@
}
$body-font: Arial,'Helvetica Neue',Helvetica,sans-serif;
$meta-font: $body-font;
-$heading-font: 'Gill Sans condensed', 'Gill Sans','Trebuchet MS',Calibri,sans-serif;
+$heading-font: $body-font;
diff --git a/web/cobrands/bromley/base.scss b/web/cobrands/bromley/base.scss
index 3791f1d16..abb93d30b 100644
--- a/web/cobrands/bromley/base.scss
+++ b/web/cobrands/bromley/base.scss
@@ -14,6 +14,11 @@
text-indent: -999999px;
z-index:2;
}
+body.waste #site-logo {
+ width: 129px;
+ background: none;
+ text-indent: 0;
+}
#nav-link {
top: 7px;
@@ -74,6 +79,15 @@ a:active {
color: $link-visited-color;
}
+// Want main text links to be bold
+.content a {
+ font-weight: bold;
+}
+// Except in list items
+.item-list a {
+ font-weight: normal;
+}
+
// The map page header looks a bit high for some reason
.big-green-banner {
top: 0;
@@ -434,3 +448,84 @@ body.mappage {
}
}
}
+
+@import "../sass/waste";
+
+// Waste style overrides
+.waste {
+ [class^="govuk-heading-"],
+ .govuk-fieldset__heading {
+ font-family: $heading-font;
+ color: darken($bromley_blue, 10%);
+ }
+
+ .govuk-heading-xl {
+ font-size: 2.2em;
+ margin-bottom: 1em;
+ }
+
+ .govuk-heading-l {
+ font-size: 1.4375em;
+ }
+
+ .govuk-heading-m {
+ font-size: 1.125em;
+ }
+
+ .govuk-summary-list {
+ border-top-color: $bromley_blue;
+ }
+
+ .govuk-button {
+ background-color: $bromley_green;
+ box-shadow: 0 2px 0 darken($bromley_green, 10%);
+ &:hover {
+ //don't override focus as gov.uk is good at that
+ background-color: darken($bromley_green, 10%);
+ }
+ }
+
+ .govuk-button--secondary {
+ background-color: $base_bg;
+ box-shadow: 0 2px 0 darken($base_bg, 10%);
+ &:hover {
+ background-color: darken($base_bg, 5%);
+ box-shadow: 0 2px 0 darken($base_bg, 15%);
+ }
+ }
+}
+
+.bromley-waste-credits {
+ margin-top: 6em;
+ margin-bottom: 1em;
+
+ p {
+ font-size: 0.875em;
+ color: #666;
+ margin-bottom: 0;
+ }
+
+ a {
+ display: inline-block;
+ height: 0;
+ padding-top: 40px;
+ overflow: hidden;
+ margin-right: 1.5em;
+ margin-top: 0.5em;
+
+ &[href*="veolia"] {
+ width: 160px;
+ background: transparent none 0 0 no-repeat;
+ @include svg-background-image('/cobrands/bromley/images/logo-veolia');
+ background-size: 160px 40px;
+ }
+
+ &[href*="societyworks"] {
+ width: 193px;
+ background: transparent none 0 0 no-repeat;
+ @include svg-background-image('/cobrands/bromley/images/logo-societyworks');
+ background-size: 193px 40px;
+ vertical-align: -4px;
+ }
+ }
+}
diff --git a/web/cobrands/bromley/images/container-images/battery-bag.png b/web/cobrands/bromley/images/container-images/battery-bag.png
new file mode 100644
index 000000000..8f9c75d74
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/battery-bag.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/battery-bag@2x.png b/web/cobrands/bromley/images/container-images/battery-bag@2x.png
new file mode 100644
index 000000000..16131bf35
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/battery-bag@2x.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/electricals-batteries-textiles.png b/web/cobrands/bromley/images/container-images/electricals-batteries-textiles.png
new file mode 100644
index 000000000..268726215
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/electricals-batteries-textiles.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/electricals-batteries-textiles@2x.png b/web/cobrands/bromley/images/container-images/electricals-batteries-textiles@2x.png
new file mode 100644
index 000000000..579295009
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/electricals-batteries-textiles@2x.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/food-communal.png b/web/cobrands/bromley/images/container-images/food-communal.png
new file mode 100644
index 000000000..51dc74042
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/food-communal.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/food-communal@2x.png b/web/cobrands/bromley/images/container-images/food-communal@2x.png
new file mode 100644
index 000000000..6720b14fd
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/food-communal@2x.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/food-green-caddy.png b/web/cobrands/bromley/images/container-images/food-green-caddy.png
new file mode 100644
index 000000000..9483fe19c
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/food-green-caddy.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/food-green-caddy@2x.png b/web/cobrands/bromley/images/container-images/food-green-caddy@2x.png
new file mode 100644
index 000000000..db3b71ed5
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/food-green-caddy@2x.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/garden-waste-bin.png b/web/cobrands/bromley/images/container-images/garden-waste-bin.png
new file mode 100644
index 000000000..3c88a9035
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/garden-waste-bin.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/garden-waste-bin@2x.png b/web/cobrands/bromley/images/container-images/garden-waste-bin@2x.png
new file mode 100644
index 000000000..3b5803d7b
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/garden-waste-bin@2x.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/kerbside-black-box-paper.png b/web/cobrands/bromley/images/container-images/kerbside-black-box-paper.png
new file mode 100644
index 000000000..b9befa604
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/kerbside-black-box-paper.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/kerbside-black-box-paper@2x.png b/web/cobrands/bromley/images/container-images/kerbside-black-box-paper@2x.png
new file mode 100644
index 000000000..a01ef8a9a
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/kerbside-black-box-paper@2x.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/kerbside-green-box-mix.png b/web/cobrands/bromley/images/container-images/kerbside-green-box-mix.png
new file mode 100644
index 000000000..108cf0d59
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/kerbside-green-box-mix.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/kerbside-green-box-mix@2x.png b/web/cobrands/bromley/images/container-images/kerbside-green-box-mix@2x.png
new file mode 100644
index 000000000..764f26f7b
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/kerbside-green-box-mix@2x.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/large-communal-black.png b/web/cobrands/bromley/images/container-images/large-communal-black.png
new file mode 100644
index 000000000..d9e030038
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/large-communal-black.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/large-communal-black@2x.png b/web/cobrands/bromley/images/container-images/large-communal-black@2x.png
new file mode 100644
index 000000000..4f06dc47b
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/large-communal-black@2x.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/refuse-black-sack.png b/web/cobrands/bromley/images/container-images/refuse-black-sack.png
new file mode 100644
index 000000000..0ecd7956b
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/refuse-black-sack.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/refuse-black-sack@2x.png b/web/cobrands/bromley/images/container-images/refuse-black-sack@2x.png
new file mode 100644
index 000000000..e880b1c4e
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/refuse-black-sack@2x.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/small-communal-mix.png b/web/cobrands/bromley/images/container-images/small-communal-mix.png
new file mode 100644
index 000000000..f19b7991d
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/small-communal-mix.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/small-communal-mix@2x.png b/web/cobrands/bromley/images/container-images/small-communal-mix@2x.png
new file mode 100644
index 000000000..0118142ba
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/small-communal-mix@2x.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/small-communal-paper.png b/web/cobrands/bromley/images/container-images/small-communal-paper.png
new file mode 100644
index 000000000..28da47315
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/small-communal-paper.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/small-communal-paper@2x.png b/web/cobrands/bromley/images/container-images/small-communal-paper@2x.png
new file mode 100644
index 000000000..17790b663
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/small-communal-paper@2x.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/textile-bag.png b/web/cobrands/bromley/images/container-images/textile-bag.png
new file mode 100644
index 000000000..f89fda6a7
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/textile-bag.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/textile-bag@2x.png b/web/cobrands/bromley/images/container-images/textile-bag@2x.png
new file mode 100644
index 000000000..0b69f2d0c
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/textile-bag@2x.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/weee-bag.png b/web/cobrands/bromley/images/container-images/weee-bag.png
new file mode 100644
index 000000000..1837fbecc
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/weee-bag.png
Binary files differ
diff --git a/web/cobrands/bromley/images/container-images/weee-bag@2x.png b/web/cobrands/bromley/images/container-images/weee-bag@2x.png
new file mode 100644
index 000000000..adbdd963d
--- /dev/null
+++ b/web/cobrands/bromley/images/container-images/weee-bag@2x.png
Binary files differ
diff --git a/web/cobrands/bromley/images/logo-societyworks.png b/web/cobrands/bromley/images/logo-societyworks.png
new file mode 100644
index 000000000..e6cdde1d1
--- /dev/null
+++ b/web/cobrands/bromley/images/logo-societyworks.png
Binary files differ
diff --git a/web/cobrands/bromley/images/logo-societyworks.svg b/web/cobrands/bromley/images/logo-societyworks.svg
new file mode 100644
index 000000000..baf03d2dc
--- /dev/null
+++ b/web/cobrands/bromley/images/logo-societyworks.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="193" height="40" viewBox="0 0 193 40"><g fill="none"><path fill="#3B3F44" d="M53.036 10.658c-.097.17-.227.32-.382.439a.824.824 0 01-.512.146 1.241 1.241 0 01-.597-.175l-.728-.4a5.945 5.945 0 00-.93-.396 3.675 3.675 0 00-1.183-.175 2.536 2.536 0 00-1.707.507c-.378.338-.585.83-.562 1.34-.007.333.12.655.353.892.258.257.56.464.89.61.409.187.829.345 1.259.472.47.142.954.3 1.445.474.494.177.976.384 1.445.618.457.23.875.53 1.24.89.378.384.68.839.888 1.338.245.602.365 1.249.353 1.9a6.238 6.238 0 01-.424 2.31 5.328 5.328 0 01-1.226 1.874 5.706 5.706 0 01-1.983 1.26 7.4 7.4 0 01-2.678.458 8.441 8.441 0 01-1.675-.172 10.009 10.009 0 01-1.654-.482 9.454 9.454 0 01-1.494-.739 6.45 6.45 0 01-1.223-.953l1.212-1.932a.972.972 0 01.375-.357c.158-.09.337-.136.519-.135.261.006.515.088.731.235.248.154.523.325.834.51.338.204.693.376 1.06.515.454.162.933.24 1.414.232a2.676 2.676 0 001.728-.496c.44-.394.67-.976.618-1.568a1.488 1.488 0 00-.353-1.014 2.63 2.63 0 00-.89-.65 7.721 7.721 0 00-1.252-.45 37.316 37.316 0 01-1.438-.435 10.218 10.218 0 01-1.438-.586 4.54 4.54 0 01-1.254-.917 4.327 4.327 0 01-.887-1.428 5.662 5.662 0 01-.354-2.096 5.053 5.053 0 011.572-3.653 5.758 5.758 0 011.898-1.192 6.977 6.977 0 012.576-.447 9.553 9.553 0 011.58.129 8.14 8.14 0 012.745.978c.382.222.738.486 1.06.79l-.971 1.93zm8.774 1.375c.9-.012 1.794.14 2.639.448a5.677 5.677 0 013.37 3.328 7.3 7.3 0 01.473 2.696 7.413 7.413 0 01-.474 2.72 5.858 5.858 0 01-1.326 2.058 5.831 5.831 0 01-2.043 1.302 7.346 7.346 0 01-2.639.455 7.458 7.458 0 01-2.656-.455 6.008 6.008 0 01-2.062-1.302 5.833 5.833 0 01-1.337-2.058 7.412 7.412 0 01-.47-2.72 7.3 7.3 0 01.47-2.696c.295-.765.75-1.46 1.337-2.037a5.983 5.983 0 012.062-1.29c.85-.308 1.75-.46 2.656-.449zm0 10.209a2.158 2.158 0 001.943-.91c.416-.616.62-1.544.62-2.795 0-1.252-.204-2.177-.62-2.788a2.157 2.157 0 00-1.943-.918 2.226 2.226 0 00-1.975.91c-.416.612-.624 1.542-.624 2.788 0 1.252.208 2.18.624 2.795.45.629 1.2.977 1.975.918zm17.731-7.03a2.062 2.062 0 01-.328.331.715.715 0 01-.453.121.98.98 0 01-.506-.135l-.507-.298a3.96 3.96 0 00-.66-.296 2.74 2.74 0 00-.938-.135 2.628 2.628 0 00-1.201.256 2.23 2.23 0 00-.838.711c-.235.354-.4.749-.489 1.163-.11.51-.162 1.03-.157 1.55 0 1.21.232 2.134.713 2.788a2.249 2.249 0 001.933.974 2.71 2.71 0 001.045-.163 3.11 3.11 0 00.653-.356l.496-.355a.911.911 0 01.567-.171.782.782 0 01.68.327l1.1 1.351c-.357.42-.771.786-1.231 1.088a6.07 6.07 0 01-1.327.658c-.44.156-.896.267-1.359.33-.44.06-.885.09-1.33.09a5.722 5.722 0 01-2.215-.438 5.396 5.396 0 01-1.858-1.273 6.106 6.106 0 01-1.27-2.048 7.649 7.649 0 01-.466-2.777 7.83 7.83 0 01.406-2.55c.257-.76.669-1.46 1.21-2.054a5.567 5.567 0 011.978-1.37 6.908 6.908 0 012.725-.497 6.672 6.672 0 012.614.473c.76.324 1.449.796 2.026 1.387l-1.013 1.319zm6.638-6.497c.002.291-.06.578-.182.843a2.226 2.226 0 01-.498.707c-.215.2-.464.36-.736.474a2.312 2.312 0 01-.896.174 2.144 2.144 0 01-.865-.174 2.427 2.427 0 01-.711-.474 2.193 2.193 0 01-.487-.707 2.033 2.033 0 01-.178-.843c-.002-.295.059-.588.178-.86a2.24 2.24 0 01.487-.707c.205-.201.446-.362.711-.474a2.19 2.19 0 01.865-.17 2.336 2.336 0 011.632.644c.21.202.38.442.498.708.121.27.183.563.182.86zm-.438 3.44v12.56h-3.774v-12.56h3.774zm8.194-.122c.772-.01 1.54.12 2.267.388a4.924 4.924 0 011.749 1.13 5.174 5.174 0 011.147 1.818c.287.779.427 1.605.413 2.436.004.238-.007.475-.035.71a1.11 1.11 0 01-.13.427.52.52 0 01-.258.22 1.224 1.224 0 01-.413.06h-7.157c.119 1.066.434 1.819.948 2.291.542.487 1.25.742 1.973.71.378.008.754-.045 1.116-.156a5.93 5.93 0 00.829-.355l.671-.355c.198-.103.418-.157.64-.156a.765.765 0 01.672.327l1.078 1.35a5.51 5.51 0 01-1.239 1.086 6.279 6.279 0 01-1.367.657 7.336 7.336 0 01-1.4.33c-.443.059-.89.089-1.336.09a6.901 6.901 0 01-2.449-.43 5.667 5.667 0 01-1.997-1.283 6.081 6.081 0 01-1.354-2.13 7.98 7.98 0 01-.497-2.942c-.003-.818.141-1.629.427-2.394a5.78 5.78 0 013.148-3.331 6.238 6.238 0 012.554-.498zm.074 2.6a2.223 2.223 0 00-1.655.615 3.22 3.22 0 00-.79 1.776h4.638c0-.297-.038-.592-.116-.877a2.087 2.087 0 00-.37-.757 1.887 1.887 0 00-.676-.543 2.275 2.275 0 00-1.031-.214zm12.009 10.407a4.602 4.602 0 01-1.605-.256 3.076 3.076 0 01-1.888-1.88 4.399 4.399 0 01-.244-1.501V14.97h-1.077a.728.728 0 01-.503-.186.693.693 0 01-.212-.547v-1.452l2.029-.386.75-3.037a.756.756 0 01.836-.575h1.99v3.637h3.097v2.546h-3.098v6.18c-.007.25.069.496.216.702.145.19.378.295.62.28a1.245 1.245 0 00.607-.137l.198-.094a.505.505 0 01.212-.042.442.442 0 01.276.077.9.9 0 01.215.245l1.156 1.754a5.258 5.258 0 01-1.658.835 6.647 6.647 0 01-1.917.27zm10.825 3.483a1.063 1.063 0 01-1.19.73h-2.815l2.424-5.095-5.018-11.473h3.324c.241-.014.48.055.677.194.16.117.283.277.355.461l2.062 5.421c.19.49.349.993.475 1.503.078-.259.167-.51.266-.762.1-.252.188-.507.28-.765l1.868-5.397a.939.939 0 01.379-.468c.182-.121.395-.186.613-.187h3.034l-6.734 15.838z"/><path fill="#9E9A98" d="M125.203 7.163h1.954c.187-.007.371.05.522.161.134.1.232.24.28.4l3.593 12.2c.064.222.125.458.178.716.053.258.103.519.152.795.054-.276.11-.544.167-.802.053-.242.118-.48.195-.716l4.094-12.2a.876.876 0 01.283-.382.776.776 0 01.515-.18h.68a.807.807 0 01.519.162c.13.103.229.242.283.4l4.069 12.207c.159.479.288.966.387 1.46.05-.271.092-.53.134-.772.037-.233.09-.462.156-.688l3.608-12.2a.751.751 0 01.273-.39.79.79 0 01.514-.17h1.834l-5.427 17.552h-2.11l-4.41-13.387a7.207 7.207 0 01-.24-.884c-.043.164-.079.322-.118.472-.039.15-.074.286-.113.412l-4.43 13.387h-2.129l-5.413-17.553zm28.956 4.87a6.309 6.309 0 012.428.449c.7.285 1.328.722 1.841 1.279.52.58.917 1.26 1.165 2a8.662 8.662 0 010 5.249 5.669 5.669 0 01-1.165 1.994c-.512.555-1.14.99-1.84 1.272a6.914 6.914 0 01-4.858 0 5.111 5.111 0 01-1.848-1.272 5.637 5.637 0 01-1.175-1.994 8.52 8.52 0 010-5.248 5.64 5.64 0 011.175-2.001 5.172 5.172 0 011.848-1.28 6.309 6.309 0 012.429-.447zm0 10.995c1.21 0 2.115-.407 2.715-1.222.6-.815.898-1.952.896-3.411 0-1.467-.3-2.61-.896-3.43-.597-.82-1.502-1.229-2.715-1.229a3.772 3.772 0 00-1.6.316c-.447.206-.837.52-1.133.914-.32.433-.55.926-.68 1.45a8.738 8.738 0 000 3.908 4.09 4.09 0 00.669 1.482c.3.388.689.7 1.133.906.507.223 1.057.33 1.61.316zm8.117 1.688V12.24h1.185a.651.651 0 01.465.137.864.864 0 01.173.468l.139 1.946a5.638 5.638 0 011.493-2.036 3.163 3.163 0 012.084-.72 3.18 3.18 0 01.883.115c.256.075.503.185.733.328l-.268 1.637a.345.345 0 01-.36.31 1.69 1.69 0 01-.5-.12 3.064 3.064 0 00-.94-.115 2.565 2.565 0 00-1.808.666 5.039 5.039 0 00-1.212 1.932v7.93h-2.067zM173.865 6.83v10.525h.556c.136.004.271-.018.399-.064.133-.068.253-.16.352-.273l3.878-4.165c.105-.118.224-.224.353-.315a.849.849 0 01.483-.124h1.953l-4.527 4.82a3.28 3.28 0 01-.331.355 1.958 1.958 0 01-.37.28c.143.095.275.207.391.334.123.132.234.276.331.429l4.78 6.084h-1.931a.894.894 0 01-.451-.107 1.176 1.176 0 01-.353-.319l-4.019-5.04a.937.937 0 00-.352-.334 1.43 1.43 0 00-.543-.078h-.6v5.878h-2.157V6.83h2.158zm17.01 7.747a.477.477 0 01-.449.266.853.853 0 01-.416-.131c-.152-.087-.34-.187-.566-.298a5.53 5.53 0 00-.796-.304 3.867 3.867 0 00-1.096-.139 3.26 3.26 0 00-.985.139 2.373 2.373 0 00-.751.382c-.197.151-.359.344-.473.564-.113.219-.17.462-.167.708-.01.288.088.57.274.79.202.224.443.409.711.546.329.164.672.3 1.025.404.38.117.771.244 1.173.376.402.13.794.283 1.174.442.368.156.712.36 1.025.606.296.246.538.55.711.893.194.394.288.83.274 1.269a4.008 4.008 0 01-.302 1.57c-.202.478-.51.905-.904 1.247a4.273 4.273 0 01-1.458.832 6.034 6.034 0 01-2 .301 6.25 6.25 0 01-2.336-.418 5.967 5.967 0 01-1.779-1.063l.509-.822a.77.77 0 01.23-.244.667.667 0 01.357-.085.82.82 0 01.462.17c.16.113.356.237.59.375.267.154.548.28.84.376.4.124.816.181 1.234.17.377.008.752-.047 1.11-.163.29-.094.559-.244.79-.443.203-.175.364-.395.47-.641a2.04 2.04 0 00.152-.776 1.293 1.293 0 00-.273-.843 2.325 2.325 0 00-.712-.57 5.744 5.744 0 00-1.028-.412c-.384-.117-.779-.24-1.18-.354a12.417 12.417 0 01-1.182-.443 4.035 4.035 0 01-1.017-.663 2.797 2.797 0 01-.712-.928 3.009 3.009 0 01-.274-1.34 3.252 3.252 0 01.292-1.353 3.31 3.31 0 01.854-1.137 4.18 4.18 0 011.376-.783 5.48 5.48 0 011.86-.29 5.894 5.894 0 012.185.382c.623.24 1.193.602 1.675 1.063l-.498.772z"/><path fill="#FFD877" d="M33.792 25.93V19.094l.03-.032-.03-.028-3.364-15.645L14.442 0 0 14.052V20.978l3.365 15.644L19.343 40l14.453-14.052-.029-.028.025.01zM11.53 21.356l4.477-4.352 6.291 1.333.101.473-4.467 4.352-6.29-1.333-.112-.473z"/><path fill="#3B3F44" d="M16.013 10.211l-5.694 5.606 1.326 6.256 6.293 1.348 5.693-5.605-1.325-6.256-6.293-1.349zM14.447 0l15.98 3.416 3.365 15.82.03.029-14.462 14.23L3.376 30.08.011 14.26l.018-.018L0 14.213 14.447 0z"/></g></svg> \ No newline at end of file
diff --git a/web/cobrands/bromley/images/logo-veolia.png b/web/cobrands/bromley/images/logo-veolia.png
new file mode 100644
index 000000000..c4fd283d3
--- /dev/null
+++ b/web/cobrands/bromley/images/logo-veolia.png
Binary files differ
diff --git a/web/cobrands/bromley/images/logo-veolia.svg b/web/cobrands/bromley/images/logo-veolia.svg
new file mode 100644
index 000000000..9bd4f073b
--- /dev/null
+++ b/web/cobrands/bromley/images/logo-veolia.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="160" height="40" viewBox="0 0 160 40"><path fill="#ED1C24" d="M17.555 39.304C9.293 37.994 2.9 31.937 1.203 23.816.87 22.224.76 19.277.973 17.65 2.112 8.888 8.634 2.19 17.426.746c1.705-.28 5.114-.202 6.743.155 6.965 1.524 12.409 6.38 14.608 13.028.666 2.015.967 3.9.967 6.07 0 9.139-6.26 16.941-15.27 19.033-1.424.33-5.531.492-6.92.272zm2.02-8.845c-1.019-1.188-2.58-3.67-3.057-4.86-.433-1.082-.48-1.342-.481-2.737-.003-1.394.038-1.63.421-2.461.755-1.635 2.129-2.549 3.845-2.559 2.51-.014 4.356 2.142 4.344 5.075-.007 1.922-1.011 4.17-3.006 6.73l-1.153 1.479 1.114-.101a13.75 13.75 0 008.563-4.073c1.233-1.256 1.86-2.15 2.614-3.723.992-2.075 1.292-3.433 1.298-5.873.003-1.643-.06-2.315-.32-3.348C32.085 7.335 25.645 2.84 18.862 3.611 13.14 4.262 8.37 8.432 6.972 14.008c-.464 1.855-.459 4.888.013 6.651 1.42 5.304 5.643 9.247 10.934 10.207.578.105 1.308.197 1.62.204l.57.013-.535-.624zm77.501.988c-1.414-.26-3.139-.84-4.028-1.354-2.125-1.227-3.51-3.533-3.988-6.644-.214-1.39-.082-4.44.247-5.726.582-2.275 1.778-4.058 3.512-5.234 1.731-1.175 5.331-1.84 8.31-1.537 3.045.311 4.882 1.06 6.428 2.623 1.153 1.165 1.77 2.33 2.246 4.233.438 1.755.47 5.459.062 7.036-.89 3.441-2.936 5.51-6.329 6.398-1.56.41-4.795.512-6.46.205zm4.984-3.72c1.103-.49 1.595-.935 2.116-1.913.634-1.189.897-2.527.897-4.567 0-4.752-1.672-6.824-5.5-6.818-1.768.003-2.768.315-3.704 1.157-1.26 1.133-1.8 2.83-1.8 5.66 0 3.922 1.222 6.107 3.776 6.75.988.249 3.395.095 4.215-.27zM54.445 30.92c-.075-.193-1.993-4.54-4.262-9.66-2.269-5.121-4.125-9.366-4.125-9.434 0-.067.848-.122 1.885-.122 1.69 0 1.953.035 2.533.34.359.19.815.599 1.025.918.207.317 1.456 3.12 2.774 6.23 1.318 3.108 2.443 5.742 2.5 5.851.062.12 1.07-2.215 2.49-5.764 1.313-3.28 2.528-6.173 2.701-6.428.173-.256.606-.619.962-.806.59-.311.833-.341 2.736-.341h2.089l-4.032 8.919c-2.218 4.905-4.196 9.134-4.396 9.397-.617.81-1.372 1.091-3.164 1.176-1.56.074-1.581.071-1.716-.276zm20.756-.009c-2.753-.52-5.079-2.952-5.972-6.244-.458-1.69-.456-4.94.004-6.569.712-2.519 2.165-4.531 3.963-5.49 1.664-.887 2.22-.958 7.584-.968l4.845-.01v3.524l-4.188.073-4.188.074-.967.476c-.675.332-1.09.654-1.377 1.068-.405.584-.805 1.802-.805 2.45v.333l5.542.039 5.542.038v3.377l-5.542.038-5.542.039v.319c0 .175.108.704.24 1.174.325 1.161 1.12 2.052 2.223 2.49.79.312 1.09.336 4.987.387l4.148.055v3.5l-4.882-.017c-2.685-.01-5.212-.08-5.615-.156zm43.288-.12c-.578-.15-1.33-.417-1.672-.592-.884-.45-2.006-1.63-2.427-2.547-.662-1.446-.712-2.093-.718-9.268l-.005-6.754h1.541c1.333 0 1.611.044 2.056.322.982.616.946.366 1.027 7.24l.074 6.239.367.653c.264.47.572.758 1.096 1.027.714.367.806.376 4.295.423l3.565.049v3.5l-4.075-.008c-3.495-.007-4.223-.047-5.124-.283zm12.02-8.774c.04-8.624.055-9.086.32-9.477.465-.686 1.037-.889 2.694-.956l1.505-.06v9.053c0 9.99.032 9.635-.924 10.219-.39.237-.742.286-2.053.287h-1.583l.041-9.066zm6.944 8.894c.042-.107 1.783-4.126 3.871-8.93 4.25-9.783 4.284-9.842 5.738-10.217 1.023-.264 3.582-.28 3.787-.024.116.145 7.959 18.101 8.34 19.094.087.227-.08.25-1.834.25-2.857 0-3.311-.289-4.427-2.812l-.672-1.52-3.919-.039-3.918-.039-.15.396c-.083.217-.44.999-.795 1.736-.514 1.072-.768 1.429-1.265 1.773-.606.42-.672.432-2.726.478-1.7.039-2.09.01-2.03-.146zm13.68-7.94c-1.12-2.688-2.656-6.231-2.74-6.321-.089-.096-1.17 2.278-2.744 6.028l-.2.477h2.88c2.247 0 2.864-.04 2.804-.183z"/></svg> \ No newline at end of file
diff --git a/web/cobrands/bromley/images/waste.png b/web/cobrands/bromley/images/waste.png
new file mode 100644
index 000000000..3ffef5ccb
--- /dev/null
+++ b/web/cobrands/bromley/images/waste.png
Binary files differ
diff --git a/web/cobrands/bromley/layout.scss b/web/cobrands/bromley/layout.scss
index f2e6c41c8..dc4c361ab 100644
--- a/web/cobrands/bromley/layout.scss
+++ b/web/cobrands/bromley/layout.scss
@@ -11,6 +11,11 @@ body.fullwidthpage, body.twothirdswidthpage, body.authpage {
float: left;
}
}
+body.waste #site-logo {
+ width: 334px;
+ height: 114px;
+ float: left;
+}
body.mappage {
.bromley-header {
@@ -165,3 +170,7 @@ footer,
}
}
}
+
+.bromley-waste-credits {
+ margin-bottom: 0;
+}
diff --git a/web/cobrands/bromley/map.js b/web/cobrands/bromley/map.js
index 0753907cc..056dee0b9 100644
--- a/web/cobrands/bromley/map.js
+++ b/web/cobrands/bromley/map.js
@@ -1 +1 @@
-fixmystreet.maps.tile_base = [ [ "", "a-" ], "https://{S}fix.bromley.gov.uk/tilma" ];
+fixmystreet.maps.tile_base = '//{S}tilma.mysociety.org/bromley';
diff --git a/web/cobrands/buckinghamshire/_colours.scss b/web/cobrands/buckinghamshire/_colours.scss
index cf328b673..7350e8f33 100644
--- a/web/cobrands/buckinghamshire/_colours.scss
+++ b/web/cobrands/buckinghamshire/_colours.scss
@@ -55,6 +55,10 @@ $col_click_map_dark: darken($bucks_charcoal, 10%);
$header-top-border-width: 0;
$header-top-border: 0;
+$search-help-alignment: left;
+$search-help-background: #fff3f3;
+$search-help-header-font-size-desktop: 1.25em;
+
@mixin bucks-button {
background-color: $bucks_button_bg;
border: 0;
diff --git a/web/cobrands/buckinghamshire/assets.js b/web/cobrands/buckinghamshire/assets.js
index e11bf1a28..f15c78504 100644
--- a/web/cobrands/buckinghamshire/assets.js
+++ b/web/cobrands/buckinghamshire/assets.js
@@ -40,18 +40,10 @@ fixmystreet.assets.add(defaults, {
asset_item: 'grit bin'
});
-var streetlight_select = $.extend({
- label: "${feature_id}",
- labelOutlineColor: "white",
- labelOutlineWidth: 3,
- labelYOffset: 65,
- fontSize: '15px',
- fontWeight: 'bold'
-}, fixmystreet.assets.style_default_select.defaultStyle);
-
var streetlight_stylemap = new OpenLayers.StyleMap({
'default': fixmystreet.assets.style_default,
- 'select': new OpenLayers.Style(streetlight_select)
+ 'hover': fixmystreet.assets.style_default_hover,
+ 'select': fixmystreet.assets.construct_named_select_style("${feature_id}")
});
var streetlight_code_to_type = {
@@ -68,21 +60,15 @@ var streetlight_code_to_type = {
var labeled_defaults = $.extend(true, {}, defaults, {
select_action: true,
+ feature_code: 'feature_id',
stylemap: streetlight_stylemap,
+ construct_asset_name: function(id) {
+ var code = id.replace(/[O0-9]+[A-Z]*/g, '');
+ return {id: id, name: streetlight_code_to_type[code] || 'street light'};
+ },
actions: {
- asset_found: function(asset) {
- var id = asset.attributes.feature_id || '';
- if (id !== '') {
- var code = id.replace(/[0-9]/g, '');
- var asset_name = streetlight_code_to_type[code] || this.fixmystreet.asset_item;
- $('.category_meta_message').html('You have selected ' + asset_name + ' <b>' + id + '</b>');
- } else {
- $('.category_meta_message').html('You can pick a <b class="asset-spot">' + this.fixmystreet.asset_item + '</b> from the map &raquo;');
- }
- },
- asset_not_found: function() {
- $('.category_meta_message').html('You can pick a <b class="asset-spot">' + this.fixmystreet.asset_item + '</b> from the map &raquo;');
- }
+ asset_found: fixmystreet.assets.named_select_action_found,
+ asset_not_found: fixmystreet.assets.named_select_action_not_found
}
});
diff --git a/web/cobrands/buckinghamshire/base.scss b/web/cobrands/buckinghamshire/base.scss
index 0c7bb4bc2..aefe76945 100644
--- a/web/cobrands/buckinghamshire/base.scss
+++ b/web/cobrands/buckinghamshire/base.scss
@@ -5,10 +5,6 @@
@import "../sass/base";
-.dev-site-notice {
- display: none;
-}
-
.container {
padding: 0 20px;
}
@@ -106,26 +102,15 @@ dl dt {
}
#postcodeForm {
- margin-top: 1em;
+ margin: 1em 0 0 0;
+ padding: 0;
background: #fff;
+
div input#sub {
@include bucks-button();
box-shadow: 0;
}
}
- a#geolocate_link {
- background: transparent;
- color: $bucks_links;
- padding: 0;
- font-size: 1em;
- &:hover,
- &:active,
- &:focus {
- background: transparent;
- color: $link-hover-color;
- text-decoration: underline;
- }
- }
}
.btn-primary, .green-btn, .btn--primary {
@@ -141,7 +126,13 @@ dl dt {
}
a#geolocate_link {
- color: $b3;
+ color: $bucks_links;
+
+ &:hover,
+ &:active,
+ &:focus {
+ color: $link-hover-color;
+ }
}
label {
diff --git a/web/cobrands/buckinghamshire/layout.scss b/web/cobrands/buckinghamshire/layout.scss
index 5df31f9e2..bea2fadc0 100644
--- a/web/cobrands/buckinghamshire/layout.scss
+++ b/web/cobrands/buckinghamshire/layout.scss
@@ -90,19 +90,14 @@ body.twothirdswidthpage .content .sticky-sidebar aside {
background-color: white;
text-align: left;
padding-top: 40px;
+ padding-bottom: 0;
#postcodeForm {
- margin-top: 0;
-
div {
margin: 0;
}
}
- a#geolocate_link {
- color: $b3;
- }
-
h1 {
font-size: 2.5em;
}
diff --git a/web/cobrands/cheshireeast/_colours.scss b/web/cobrands/cheshireeast/_colours.scss
index 363214bd0..2dbc353c9 100644
--- a/web/cobrands/cheshireeast/_colours.scss
+++ b/web/cobrands/cheshireeast/_colours.scss
@@ -27,6 +27,7 @@ $col_button_hover: $green;
$primary: $white;
$primary_b: $green;
$primary_text: $text_black;
+$primary_link_decoration: none;
$base_bg: $white;
$base_fg: $text_black;
@@ -42,3 +43,8 @@ $header-top-border: false;
$heading-font: 'Open Sans', sans-serif;
$body-font: 'Open Sans', sans-serif;
$meta-font: $body-font;
+
+$search-help-alignment: left;
+$search-help-background: #fff3f3;
+$search-help-header-font-size-desktop: 1.25em;
+$search-help-margin-desktop: 0;
diff --git a/web/cobrands/cheshireeast/assets.js b/web/cobrands/cheshireeast/assets.js
index bca654af7..f54af471f 100644
--- a/web/cobrands/cheshireeast/assets.js
+++ b/web/cobrands/cheshireeast/assets.js
@@ -20,18 +20,10 @@ var defaults = {
strategy_class: OpenLayers.Strategy.FixMyStreet
};
-var streetlight_select = $.extend({
- label: "${feature_id}",
- labelOutlineColor: "white",
- labelOutlineWidth: 3,
- labelYOffset: 65,
- fontSize: '15px',
- fontWeight: 'bold'
-}, fixmystreet.assets.style_default_select.defaultStyle);
-
var streetlight_stylemap = new OpenLayers.StyleMap({
'default': fixmystreet.assets.style_default,
- 'select': new OpenLayers.Style(streetlight_select)
+ 'hover': fixmystreet.assets.style_default_hover,
+ 'select': fixmystreet.assets.construct_named_select_style("${feature_id}")
});
var labeled_defaults = $.extend(true, {}, defaults, {
@@ -39,19 +31,10 @@ var labeled_defaults = $.extend(true, {}, defaults, {
stylemap: streetlight_stylemap,
asset_type: 'spot',
asset_id_field: 'central_as',
+ feature_code: 'feature_id',
actions: {
- asset_found: function(asset) {
- var id = asset.attributes.feature_id || '';
- if (id !== '') {
- var asset_name = this.fixmystreet.asset_item;
- $('.category_meta_message').html('You have selected ' + asset_name + ' <b>' + id + '</b>');
- } else {
- $('.category_meta_message').html(this.fixmystreet.asset_item_message);
- }
- },
- asset_not_found: function() {
- $('.category_meta_message').html(this.fixmystreet.asset_item_message);
- }
+ asset_found: fixmystreet.assets.named_select_action_found,
+ asset_not_found: fixmystreet.assets.named_select_action_not_found
}
});
@@ -60,8 +43,7 @@ fixmystreet.assets.add(labeled_defaults, {
filter_key: 'feature_gr',
filter_value: 'LCOL',
asset_group: 'Street lights',
- asset_item: 'street light',
- asset_item_message: 'You can pick a <b class="asset-spot">street light</b> from the map &raquo;'
+ asset_item: 'street light'
});
fixmystreet.assets.add(defaults, {
diff --git a/web/cobrands/cheshireeast/base.scss b/web/cobrands/cheshireeast/base.scss
index 8e771f0ad..b4174c100 100644
--- a/web/cobrands/cheshireeast/base.scss
+++ b/web/cobrands/cheshireeast/base.scss
@@ -90,15 +90,12 @@ a,
background-color: #ecf3ec;
}
-#front-main a#geolocate_link {
- color: #2e3191;
- background: transparent;
+a#geolocate_link {
border-bottom: 1px solid #a6a7da;
- padding: 0;
- margin-top: 0.5em;
- font-size: inherit;
+ padding: 0; // remove padding so that border-bottom looks like an underline
+ margin: 0 0 1em 0;
+
&:hover {
- background: transparent;
border-bottom: 1px solid #2e3191;
transition: border-color 0.5s;
}
@@ -115,6 +112,10 @@ a,
}
}
+.search-help__header {
+ line-height: 1.3;
+}
+
/* Header/footer */
#site-logo {
diff --git a/web/cobrands/cheshireeast/layout.scss b/web/cobrands/cheshireeast/layout.scss
index 71861e13f..ad5c6580b 100644
--- a/web/cobrands/cheshireeast/layout.scss
+++ b/web/cobrands/cheshireeast/layout.scss
@@ -29,11 +29,9 @@ body.frontpage .content {
margin: 0;
width: 30em;
}
-#front-main a#geolocate_link {
- color: #2e3191;
- &:hover {
- text-decoration: none;
- }
+
+a#geolocate_link {
+ margin-top: 1em;
}
.ce-footer {
diff --git a/web/cobrands/eastherts/_colours.scss b/web/cobrands/eastherts/_colours.scss
index 84ef39bd1..f365c28e6 100644
--- a/web/cobrands/eastherts/_colours.scss
+++ b/web/cobrands/eastherts/_colours.scss
@@ -35,3 +35,8 @@ $container-max-width: 70.5em; // match 1128px row width in East Herts template
$eh-header-height: 84px + 16px + 16px;
$eh-nav-height: 48px;
$mappage-header-height: $eh-header-height + $eh-nav-height;
+
+$search-help-alignment: left;
+$search-help-background: #fff3f3;
+$search-help-header-font-size-desktop: 1.25em;
+$search-help-margin-desktop: 0;
diff --git a/web/cobrands/eastherts/layout.scss b/web/cobrands/eastherts/layout.scss
index 964feb5ca..d5fb3fc0d 100644
--- a/web/cobrands/eastherts/layout.scss
+++ b/web/cobrands/eastherts/layout.scss
@@ -116,10 +116,6 @@
}
}
- a#geolocate_link {
- color: $eh_green;
- }
-
h1 {
font-size: 2.5em;
}
diff --git a/web/cobrands/eastsussex/assets.js b/web/cobrands/eastsussex/assets.js
index 296c8ede4..6f5304cd0 100644
--- a/web/cobrands/eastsussex/assets.js
+++ b/web/cobrands/eastsussex/assets.js
@@ -72,18 +72,10 @@ fixmystreet.assets.add(defaults, {
asset_item: 'street light',
asset_category: ["Burning By Day", "Intermittent", "Lamp Dim", "Lamp Flashing", "Lamp Obscured", "Lamp Out", "Missing Number", "Noisy Column", "Vandalism" ],
select_action: true,
+ feature_code: 'Name',
actions: {
- asset_found: function(asset) {
- var id = asset.attributes.Name || '';
- if (id !== '') {
- $('.category_meta_message').html('You have selected <b>' + id + '</b>');
- } else {
- $('.category_meta_message').html('You can pick a <b class="asset-spot">' + this.fixmystreet.asset_item + '</b> from the map &raquo;');
- }
- },
- asset_not_found: function() {
- $('.category_meta_message').html('You can pick a <b class="asset-spot">' + this.fixmystreet.asset_item + '</b> from the map &raquo;');
- }
+ asset_found: fixmystreet.assets.named_select_action_found,
+ asset_not_found: fixmystreet.assets.named_select_action_not_found
}
});
@@ -106,22 +98,19 @@ fixmystreet.assets.add(defaults, {
asset_item: 'drain',
asset_category: ["Blocked Drain", "Culvert", "Broken Drain Cover", "Smell", "Sunken Drain", "Missing Drain Cover"],
select_action: true,
+ construct_selected_asset_message: function(asset) {
+ var last_clean = asset.attributes.Gully_Last_Clean_Date__c || '';
+ var next_clean = asset.attributes.Gully_Next_Clean_Date__c || '';
+ if (last_clean !== '' || next_clean !== '') {
+ var message = '';
+ if (last_clean) { message += '<b>Last Cleaned</b>: ' + last_clean; }
+ if (next_clean) { message += ' <b>Next Clean</b>: ' + next_clean; }
+ return message;
+ }
+ },
actions: {
- asset_found: function(asset) {
- var last_clean = asset.attributes.Gully_Last_Clean_Date__c || '';
- var next_clean = asset.attributes.Gully_Next_Clean_Date__c || '';
- if (last_clean !== '' || next_clean !== '') {
- var message = '';
- if (last_clean) { message += '<b>Last Cleaned</b>: ' + last_clean; }
- if (next_clean) { message += ' <b>Next Clean</b>: ' + next_clean; }
- $('.category_meta_message').html(message);
- } else {
- $('.category_meta_message').html('You can pick a <b class="asset-spot">' + this.fixmystreet.asset_item + '</b> from the map &raquo;');
- }
- },
- asset_not_found: function() {
- $('.category_meta_message').html('You can pick a <b class="asset-spot">' + this.fixmystreet.asset_item + '</b> from the map &raquo;');
- }
+ asset_found: fixmystreet.assets.named_select_action_found,
+ asset_not_found: fixmystreet.assets.named_select_action_not_found
}
});
diff --git a/web/cobrands/fiksgatami/_colours.scss b/web/cobrands/fiksgatami/_colours.scss
index 907065d36..cd5ed0c47 100644
--- a/web/cobrands/fiksgatami/_colours.scss
+++ b/web/cobrands/fiksgatami/_colours.scss
@@ -7,6 +7,8 @@ $bg: #1a4f7f;
$primary: #99bfe1;
$primary_b: #000000;
$primary_text: #222222;
+$primary_link_color: $primary_text;
+$primary_link_hover_color: rgba($primary_text, 0.8);
$base_bg: $bg;
$base_fg: #fff;
diff --git a/web/cobrands/fixamingata/_colours.scss b/web/cobrands/fixamingata/_colours.scss
index dbdd92e5b..74f39c9f6 100644
--- a/web/cobrands/fixamingata/_colours.scss
+++ b/web/cobrands/fixamingata/_colours.scss
@@ -2,19 +2,24 @@
$menu-image: 'menu-black';
-$primary: #00b1da;
-$primary_b: #0087a6;
+$primary: #087FA0;
+$primary_b: #087FA0;
$primary_text: #222;
+$primary_link_color: $primary_text;
+$primary_link_hover_color: rgba($primary_text, 0.8);
$base_bg: #eee url(images/tile.jpg) 0 0 repeat;
$base_fg: $primary_text;
$nav_background_colour: #eee;
$nav_colour: $primary_text;
-$nav_hover_background_colour: #20bbdf;
+$nav_hover_background_colour: $nav_background_colour;
$header-top-border: false;
$col_click_map: #00BD08;
$high-dpi-screen: '-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi';
+
+$link-color: #0000CC;
+$link-hover-color: #0000CC;
diff --git a/web/cobrands/fixamingata/base.scss b/web/cobrands/fixamingata/base.scss
index a708483bc..eeba74951 100644
--- a/web/cobrands/fixamingata/base.scss
+++ b/web/cobrands/fixamingata/base.scss
@@ -37,3 +37,26 @@
margin: 1em 0 0.5em;
}
}
+
+#pc-hint {
+ color: #444;
+}
+
+/* This together with resp-iframe below gives us a responsive
+ iframe for the video on the councils page that keeps the
+ correct width/height ratio when the page is resized.
+*/
+.resp-iframe-container {
+ position: relative;
+ overflow: hidden;
+ padding-top: 56.25%;
+}
+
+.resp-iframe {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border: 0;
+}
diff --git a/web/cobrands/fixamingata/layout.scss b/web/cobrands/fixamingata/layout.scss
index 6cf0dd47e..a0d5622fb 100644
--- a/web/cobrands/fixamingata/layout.scss
+++ b/web/cobrands/fixamingata/layout.scss
@@ -122,26 +122,23 @@ body.mappage {
.content footer .tablewrapper { background: #fff; }
-#front-main {
- a#geolocate_link {
+a#geolocate_link {
+ background: url(images/locate-me.png) $left 0 no-repeat;
+ height: 34px;
+ padding-#{$left}: 24px;
+ margin-top: 0.25em;
+ @media ($high-dpi-screen) {
+ background-image: url(images/locate-me@2.png);
+ background-size: 22px 34px;
+ }
+ &:hover {
+ text-decoration:underline;
background: url(images/locate-me.png) $left 0 no-repeat;
- height: 34px;
- padding-#{$left}: 24px;
- margin-top: 0.25em;
- font-size: 1em;
+
@media ($high-dpi-screen) {
background-image: url(images/locate-me@2.png);
background-size: 22px 34px;
}
- &:hover {
- text-decoration:underline;
- background: url(images/locate-me.png) $left 0 no-repeat;
-
- @media ($high-dpi-screen) {
- background-image: url(images/locate-me@2.png);
- background-size: 22px 34px;
- }
- }
}
}
@@ -149,4 +146,36 @@ body.mappage {
a {
border-radius: 5px;
}
+ span {
+ color: $primary_text;
+ font-weight: bold;
+ }
+ span.report-a-problem-btn {
+ display: none;
+ }
+ a.report-a-problem-btn {
+ display: none;
+ }
+}
+
+.mappage {
+ .nav-menu--main {
+ span.report-a-problem-btn {
+ display: block;
+ }
+ a.report-a-problem-btn {
+ display: block;
+ border-width: 1px;
+ border-color: $primary_text;
+ border-style: solid;
+ }
+ }
+}
+
+body.twothirdswidthpage {
+ .content {
+ aside {
+ background:#fff;
+ }
+ }
}
diff --git a/web/cobrands/fixmystreet-uk-councils/alloy.js b/web/cobrands/fixmystreet-uk-councils/alloy.js
index ace0062de..a06c197fe 100644
--- a/web/cobrands/fixmystreet-uk-councils/alloy.js
+++ b/web/cobrands/fixmystreet-uk-councils/alloy.js
@@ -3,6 +3,8 @@
OpenLayers.Protocol.Alloy = OpenLayers.Class(OpenLayers.Protocol.HTTP, {
currentRequests: [],
+ tileSize: 512,
+ resolution: 2.388657133579254,
abort: function() {
if (this.currentRequests.length) {
for (var j = 0; j < this.currentRequests.length; j++) {
@@ -55,16 +57,13 @@ OpenLayers.Protocol.Alloy = OpenLayers.Class(OpenLayers.Protocol.HTTP, {
getTileCoord: function(bounds, maxExtent, map, reverse) {
var origin = new OpenLayers.LonLat(maxExtent.left, maxExtent.top);
- // hard code this number as we want to avoid fetching asset groups
- // which happens at more zoomed out levels
- var resolution = 2.388657133579254;
var adjustX = reverse ? 0.5 : 0;
var adjustY = reverse ? 0 : 0.5;
- var xFromOrigin = Math.floor((bounds[0] - origin.lon) / resolution + adjustX);
- var yFromOrigin = Math.floor((bounds[1] - origin.lat) / resolution + adjustY);
- var tileCoordX = Math.floor(xFromOrigin / 512);
- var tileCoordY = Math.floor(yFromOrigin / 512) * -1;
+ var xFromOrigin = Math.floor((bounds[0] - origin.lon) / this.resolution + adjustX);
+ var yFromOrigin = Math.floor((bounds[1] - origin.lat) / this.resolution + adjustY);
+ var tileCoordX = Math.floor(xFromOrigin / this.tileSize);
+ var tileCoordY = Math.floor(yFromOrigin / this.tileSize) * -1;
if (reverse) {
tileCoordX -= 1;
@@ -88,13 +87,18 @@ OpenLayers.Strategy.Alloy = OpenLayers.Class(OpenLayers.Strategy.FixMyStreet, {
this.failCount = 0;
this.layer.destroyFeatures();
},
+ // allow sub classes to override the remote projection for converting the geometry
+ // of the features
+ getRemoteProjection: function() {
+ return this.layer.projection;
+ },
merge: function(resp) {
this.count++;
// This if/else clause lifted from OpenLayers.Strategy.BBOX
if (resp.success()) {
var features = resp.features;
if(features && features.length > 0) {
- var remote = this.layer.projection;
+ var remote = this.getRemoteProjection();
var local = this.layer.map.getProjectionObject();
if(!local.equals(remote)) {
var geom;
@@ -133,4 +137,88 @@ fixmystreet.alloy_defaults = {
strategy_class: OpenLayers.Strategy.Alloy
};
+/* for Alloy V2 */
+OpenLayers.Format.AlloyV2 = OpenLayers.Class(OpenLayers.Format.GeoJSON, {
+ read: function(json, type, filter) {
+ var results = null;
+ var obj = null;
+ if (typeof json == "string") {
+ obj = OpenLayers.Format.JSON.prototype.read.apply(this, [json, filter]);
+ } else {
+ obj = json;
+ }
+
+ if(!obj) {
+ OpenLayers.Console.error("Bad JSON: " + json);
+ } else {
+ results = [];
+ for(var i=0, len=obj.results.length; i<len; ++i) {
+ try {
+ results.push(this.parseFeature(obj.results[i]));
+ } catch(err) {
+ results = null;
+ OpenLayers.Console.error(err);
+ }
+ }
+ }
+ return results;
+ }
+});
+
+OpenLayers.Protocol.AlloyV2 = OpenLayers.Class(OpenLayers.Protocol.Alloy, {
+ tileSize: 128,
+ resolution: 4.777314267158508,
+ getURL: function(coords, options) {
+ return OpenLayers.String.format(options.base, {'layerid': options.layerid, 'styleid': options.styleid, 'z': 16, 'x': coords[0], 'y': coords[1]});
+ }
+});
+
+OpenLayers.Strategy.AlloyV2 = OpenLayers.Class(OpenLayers.Strategy.Alloy, {
+ initialize: function(name, options) {
+ this.remote = new OpenLayers.Projection("EPSG:4326");
+ OpenLayers.Strategy.Alloy.prototype.initialize.apply(this, arguments);
+ },
+ // the layer uses EPSG:3857 for generating the tile location but the features
+ // use EPSG:4326
+ getRemoteProjection: function() {
+ return this.remote;
+ }
+});
+
+fixmystreet.alloyv2_defaults = {
+ format_class: OpenLayers.Format.AlloyV2,
+ srsName: "EPSG:3857",
+ strategy_class: OpenLayers.Strategy.AlloyV2
+};
+
+fixmystreet.alloy_add_layers = function(defaults, layers) {
+ $.each(layers, function(index, layer) {
+ if ( layer.categories ) {
+ var options = {
+ http_options: {
+ layerid: layer.layerid || layer.layer
+ },
+ asset_type: layer.asset_type || "spot",
+ asset_category: layer.categories,
+ asset_item: layer.item_name || layer.layer_name.toLowerCase()
+ };
+ // Alloy v2
+ if (layer.styleid) {
+ options.http_options.styleid = layer.styleid;
+ }
+ // Alloy v1
+ if (layer.version) {
+ options.http_options.layerVersion = layer.version;
+ }
+ if (layer.max_resolution) {
+ options.max_resolution = layer.max_resolution;
+ }
+ if (layer.snap_threshold || layer.snap_threshold === 0) {
+ options.snap_threshold = layer.snap_threshold;
+ }
+ fixmystreet.assets.add(defaults, options);
+ }
+ });
+};
+
})();
diff --git a/web/cobrands/fixmystreet-uk-councils/council_validation_rules.js b/web/cobrands/fixmystreet-uk-councils/council_validation_rules.js
index 171f200ff..98a3a68a5 100644
--- a/web/cobrands/fixmystreet-uk-councils/council_validation_rules.js
+++ b/web/cobrands/fixmystreet-uk-councils/council_validation_rules.js
@@ -23,6 +23,8 @@ body_validation_rules = {
'Buckinghamshire Council': confirm_validation_rules,
'Cheshire East Council': confirm_validation_rules,
'Hounslow Borough Council': confirm_validation_rules,
+ 'Isle of Wight Council': confirm_validation_rules,
+ 'Island Roads': confirm_validation_rules,
'Lincolnshire County Council': confirm_validation_rules,
'Northamptonshire County Council': {
title: {
diff --git a/web/cobrands/fixmystreet-uk-councils/roadworks.js b/web/cobrands/fixmystreet-uk-councils/roadworks.js
new file mode 100644
index 000000000..a3eec7b1f
--- /dev/null
+++ b/web/cobrands/fixmystreet-uk-councils/roadworks.js
@@ -0,0 +1,82 @@
+/* Using this file, you also need to include the JavaScript file
+ * OpenLayers.Projection.OrdnanceSurvey.js for the 27700 conversion, and an
+ * OpenLayers build that includes OpenLayers.Layer.SphericalMercator and
+ * OpenLayers.Format.GeoJSON.
+ */
+
+(function(){
+
+var roadworks_defaults = {
+ http_options: {
+ url: "https://tilma.mysociety.org/streetmanager.php"
+ },
+ srsName: "EPSG:27700",
+ format_class: OpenLayers.Format.GeoJSON,
+ strategy_class: OpenLayers.Strategy.FixMyStreet,
+ stylemap: fixmystreet.assets.stylemap_invisible,
+ non_interactive: true,
+ always_visible: true,
+ nearest_radius: 100,
+ road: true,
+ all_categories: true,
+ actions: {
+ found: function(layer, feature) {
+ $(".js-roadworks-message-" + layer.id).remove();
+ if (!fixmystreet.roadworks.filter || fixmystreet.roadworks.filter(feature)) {
+ fixmystreet.roadworks.display_message(feature);
+ return true;
+ }
+ },
+ not_found: function(layer) {
+ $(".js-roadworks-message-" + layer.id).remove();
+ }
+ }
+};
+
+fixmystreet.roadworks = {};
+
+// fixmystreet.map.layers[5].getNearestFeature(new OpenLayers.Geometry.Point(-0.835614, 51.816562).transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:3857")), 10)
+
+fixmystreet.roadworks.config = {};
+
+fixmystreet.roadworks.display_message = function(feature) {
+ var attr = feature.attributes,
+ start = new Date(attr.start_date).toDateString(),
+ end = new Date(attr.end_date).toDateString(),
+ summary = attr.summary,
+ desc = attr.description;
+
+ var config = this.config,
+ summary_heading_text = config.summary_heading_text || 'Summary',
+ tag_top = config.tag_top || 'p',
+ colon = config.colon ? ':' : '';
+
+ var $msg = $('<div class="js-roadworks-message js-roadworks-message-' + feature.layer.id + ' box-warning"><' + tag_top + '>Roadworks are scheduled near this location, so you may not need to report your issue.</' + tag_top + '></div>');
+ var $dl = $("<dl></dl>").appendTo($msg);
+ $dl.append("<dt>Dates" + colon + "</dt>");
+ var $dates = $("<dd></dd>").appendTo($dl);
+ $dates.text(start + " until " + end);
+ if (config.extra_dates_text) {
+ $dates.append('<br>' + config.extra_dates_text);
+ }
+ $dl.append("<dt>" + summary_heading_text + colon + "</dt>");
+ $dl.append($("<dd></dd>").text(summary));
+ if (desc) {
+ $dl.append("<dt>Description" + colon + "</dt>");
+ $dl.append($("<dd></dd>").text(desc));
+ }
+ if (attr.promoter) {
+ $dl.append("<dt>Responsibility</dt>");
+ $dl.append($("<dd></dd>").text(attr.promoter));
+ }
+
+ if (config.text_after) {
+ $dl.append(config.text_after);
+ }
+
+ $msg.prependTo('#js-post-category-messages');
+};
+
+fixmystreet.assets.add(roadworks_defaults);
+
+})();
diff --git a/web/cobrands/fixmystreet.com/_colours.scss b/web/cobrands/fixmystreet.com/_colours.scss
index d28cf11e2..b0de8eacb 100644
--- a/web/cobrands/fixmystreet.com/_colours.scss
+++ b/web/cobrands/fixmystreet.com/_colours.scss
@@ -3,6 +3,8 @@
$primary: #FFD000;
$primary_b: #F3B11E; // For the box around the front page postcode form only
$primary_text: #222;
+$primary_link_color: $primary_text;
+$primary_link_hover_color: rgba($primary_text, 0.8);
// Tiled main body background
$base_bg: #272727 url(images/tile.jpg) 0 0 repeat;
diff --git a/web/cobrands/fixmystreet.com/base.scss b/web/cobrands/fixmystreet.com/base.scss
index f261e677d..475d4dc4e 100644
--- a/web/cobrands/fixmystreet.com/base.scss
+++ b/web/cobrands/fixmystreet.com/base.scss
@@ -176,7 +176,6 @@ svg|g.site-logo__svg {
border-bottom: none;
}
-
$mysoc-footer-background-color: #222;
$mysoc-footer-text-color: #acacac;
$mysoc-footer-site-name-text-color: #fff;
diff --git a/web/cobrands/fixmystreet.com/layout.scss b/web/cobrands/fixmystreet.com/layout.scss
index f6d7c9096..852b0857f 100644
--- a/web/cobrands/fixmystreet.com/layout.scss
+++ b/web/cobrands/fixmystreet.com/layout.scss
@@ -152,23 +152,30 @@ body.fullwidthpage {
}
}
}
- a#geolocate_link {
- font-family: $body-font;
- background: url(images/locate-me.png) $left 0 no-repeat;
- height: 34px;
- padding-#{$left}: 24px;
- margin-top: 0.25em;
- @media ($high-dpi-screen) {
- background-image: url(images/locate-me@2.png);
- background-size: 22px 34px;
- }
- }
- a#geolocate_link.loading {
- background: url("/cobrands/fixmystreet/images/spinner-yellow.gif") 100% 33% no-repeat
- }
}
}
+a#geolocate_link {
+ font-family: $body-font;
+ background: url(images/locate-me.png) $left 0 no-repeat;
+ height: 34px;
+ padding-#{$left}: 24px;
+ margin-top: 0.25em;
+
+ @media ($high-dpi-screen) {
+ background-image: url(images/locate-me@2.png);
+ background-size: 22px 34px;
+ }
+
+ &.loading {
+ background: url("/cobrands/fixmystreet/images/spinner-yellow.gif") 100% 33% no-repeat
+ }
+}
+
+.search-help__header {
+ font-family: inherit;
+}
+
body.frontpage {
#site-logo {
margin: 2em 0;
diff --git a/web/cobrands/fixmystreet/assets.js b/web/cobrands/fixmystreet/assets.js
index 204ceb85d..00dec0542 100644
--- a/web/cobrands/fixmystreet/assets.js
+++ b/web/cobrands/fixmystreet/assets.js
@@ -24,12 +24,13 @@ OpenLayers.Layer.VectorAsset = OpenLayers.Class(OpenLayers.Layer.Vector, {
$(fixmystreet).on('assets:unselected', this.checkSelected.bind(this));
$(fixmystreet).on('report_new:category_change', this.changeCategory.bind(this));
$(fixmystreet).on('report_new:category_change', this.update_layer_visibility.bind(this));
+ $(fixmystreet).on('inspect_form:asset_change', this.update_layer_visibility.bind(this));
},
- relevant: function() {
- var category = $('select#form_category').val(),
- group = $('select#category_group').val(),
- layer = this.fixmystreet,
+ relevant: function(category, group) {
+ category = category || $('#inspect_form_category').val() || $('#form_category').val();
+ group = group || $('#inspect_category_group').val() || $('#category_group').val();
+ var layer = this.fixmystreet,
relevant;
if (layer.relevant) {
relevant = layer.relevant({category: category, group: group});
@@ -106,7 +107,13 @@ OpenLayers.Layer.VectorAsset = OpenLayers.Class(OpenLayers.Layer.Vector, {
if (!this.inRange && this.resolutions) {
var firstVisibleResolution = this.resolutions[0];
var zoomLevel = fixmystreet.map.getZoomForResolution(firstVisibleResolution);
- fixmystreet.map.zoomTo(zoomLevel);
+ if (window.selected_problem_id) {
+ var feature = fixmystreet.maps.get_marker_by_id(window.selected_problem_id);
+ var center = feature.geometry.getBounds().getCenterLonLat();
+ fixmystreet.map.setCenter(center, zoomLevel);
+ } else {
+ fixmystreet.map.zoomTo(zoomLevel);
+ }
}
},
@@ -119,6 +126,9 @@ OpenLayers.Layer.VectorAsset = OpenLayers.Class(OpenLayers.Layer.Vector, {
if (!fixmystreet.map) {
return;
}
+ if (!this.getVisibility()) {
+ return;
+ }
var feature = fixmystreet.assets.selectedFeature();
if (feature) {
this.setAttributeFields(feature);
@@ -130,13 +140,19 @@ OpenLayers.Layer.VectorAsset = OpenLayers.Class(OpenLayers.Layer.Vector, {
return;
}
// Set the extra fields to the value of the selected feature
+ var $mobile_display = $('#change_asset_mobile').text('');
$.each(this.fixmystreet.attributes, function(field_name, attribute_name) {
var $field = $("#form_" + field_name);
+ var $inspect_fields = $('[id^=category_][id$=form_' + field_name + ']');
+ var value;
if (typeof attribute_name === 'function') {
- $field.val(attribute_name.apply(feature));
+ value = attribute_name.apply(feature);
} else {
- $field.val(feature.attributes[attribute_name]);
+ value = feature.attributes[attribute_name];
}
+ $field.val(value);
+ $inspect_fields.val(value);
+ $mobile_display.append(field_name + ': ' + value + '<br>');
});
},
@@ -179,6 +195,18 @@ OpenLayers.Layer.VectorAsset = OpenLayers.Class(OpenLayers.Layer.Vector, {
return (f1.attributes[asset_id_field] == f2.attributes[asset_id_field]);
},
+ construct_selected_asset_message: function(asset) {
+ var id = asset.attributes[this.fixmystreet.feature_code] || '';
+ if (id === '') {
+ return;
+ }
+ var data = { id: id, name: this.fixmystreet.asset_item };
+ if (this.fixmystreet.construct_asset_name) {
+ data = this.fixmystreet.construct_asset_name(id) || data;
+ }
+ return 'You have selected ' + data.name + ' <b>' + data.id + '</b>';
+ },
+
find_matching_feature: function(feature, layer) {
if (!layer) {
return false;
@@ -308,7 +336,6 @@ var fault_popup = null;
*/
function init_asset_layer(layer, pins_layer) {
layer.update_layer_visibility();
- fixmystreet.map.addLayer(layer);
if (layer.fixmystreet.asset_category || layer.fixmystreet.asset_group) {
fixmystreet.map.events.register( 'zoomend', layer, check_zoom_message_visibility);
}
@@ -372,6 +399,7 @@ function asset_selected(e) {
// Keep track of selection in case layer is reloaded or hidden etc.
selected_feature = feature.clone();
+ selected_feature.layer = feature.layer;
// Hide the normal markers layer to keep things simple, but
// move the green marker to the point of the click to stop
@@ -392,6 +420,11 @@ function asset_selected(e) {
}
function asset_unselected(e) {
+ if (selected_feature.layer !== this) {
+ // The selected feature has already changed to something in a different
+ // layer, so we don't want to mess that up by clearing it
+ return;
+ }
fixmystreet.markers.setVisibility(true);
selected_feature = null;
this.clearAttributeFields();
@@ -402,14 +435,15 @@ function check_zoom_message_visibility() {
if (this.fixmystreet.non_interactive && !this.fixmystreet.display_zoom_message) {
return;
}
- var select = this.fixmystreet.asset_group ? 'category_group' : 'form_category';
- var category = $("select#" + select).val() || '',
- prefix = category.replace(/[^a-z]/gi, ''),
- id = "category_meta_message_" + prefix,
- $p = $('#' + id);
if (this.relevant()) {
+ var select = this.fixmystreet.asset_group ? 'category_group' : 'form_category',
+ category = $("select#" + select).val() || '',
+ prefix = category.replace(/[^a-z]/gi, ''),
+ id = "category_meta_message_" + prefix,
+ $p = $('.category_meta_message'),
+ message;
if ($p.length === 0) {
- $p = $("<p>").prop("id", id).prop('class', 'category_meta_message');
+ $p = $("<p>").prop('class', 'category_meta_message');
if ($('html').hasClass('mobile')) {
$p.click(function() {
$("#mob_ok").trigger('click');
@@ -417,32 +451,56 @@ function check_zoom_message_visibility() {
}
$p.prependTo('#js-post-category-messages');
}
+ $p.prop('id', id);
if (this.getVisibility() && this.inRange) {
- if (typeof this.fixmystreet.asset_item_message !== 'undefined') {
- $p.html(this.fixmystreet.asset_item_message);
- } else {
- $p.html('You can pick a <b class="asset-' + this.fixmystreet.asset_type + '">' + this.fixmystreet.asset_item + '</b> from the map &raquo;');
- }
+ message = get_asset_pick_message.call(this);
} else {
- $p.html('Zoom in to pick a ' + this.fixmystreet.asset_item + ' from the map');
+ message = 'Zoom in to pick a ' + this.fixmystreet.asset_item + ' from the map';
}
+ $p.html(message);
+ } else {
+ update_message_display.call(this, null);
+ }
+}
- } else if (this.fixmystreet.asset_group) {
- prefix = this.fixmystreet.asset_group.replace(/[^a-z]/gi, '');
- id = "category_meta_message_" + prefix;
- $p = $('#' + id);
- $p.remove();
+function get_asset_pick_message() {
+ var message;
+ if (typeof this.fixmystreet.asset_item_message !== 'undefined') {
+ message = this.fixmystreet.asset_item_message;
+ message = message.replace('ITEM', this.fixmystreet.asset_item);
+ } else {
+ message = 'You can pick a <b class="asset-' + this.fixmystreet.asset_type + '">' + this.fixmystreet.asset_item + '</b> from the map &raquo;';
+ }
+ return message;
+}
+
+/* This doesn't just use the class because e.g. an unselect event
+ * can fire after a category change event, and that would then
+ * update the new message using the text of the unselected layer. */
+function update_message_display(message) {
+ if (this.fixmystreet.asset_group) {
+ _update_message(message, this.fixmystreet.asset_group);
} else {
$.each(this.fixmystreet.asset_category, function(i, c) {
- var prefix = c.replace(/[^a-z]/gi, ''),
- id = "category_meta_message_" + prefix,
- $p = $('#' + id);
- $p.remove();
+ _update_message(message, c);
});
}
}
+function _update_message(message, c) {
+ var prefix = c.replace(/[^a-z]/gi, ''),
+ id = "category_meta_message_" + prefix,
+ $p = $('#' + id);
+ if (message) {
+ $p.html(message);
+ } else {
+ $p.remove();
+ }
+}
+
+var lastVisible = 0;
+
function layer_visibilitychanged() {
if (this.fixmystreet.road) {
if (!this.getVisibility()) {
@@ -453,7 +511,7 @@ function layer_visibilitychanged() {
}
return;
} else if (!this.getVisibility()) {
- asset_unselected.call(this);
+ this.get_select_control().unselectAll();
this.asset_not_found(); // as trigger won't call on non-visible layers
}
@@ -477,12 +535,13 @@ function layer_visibilitychanged() {
visible++;
}
}
- if (visible === 2 || visible === 0) {
- // We're either switching WFS layers (so going 1->2->1 or 1->0->1)
- // or switching off WFS layer (so going 1->0). Either way, we want
- // to show the marker again.
+ if (visible === 0 || visible > lastVisible) {
+ // We're either switching WFS layers (so going 1->2->1 or 1->0->1 or
+ // even 1->2->3->2) or switching off WFS layer (so going 1->0).
+ // Whichever way, we want to show the marker again.
fixmystreet.markers.setVisibility(true);
}
+ lastVisible = visible;
if (!this.fixmystreet.non_interactive) {
this.select_nearest_asset();
}
@@ -514,15 +573,7 @@ function get_asset_stylemap() {
return new OpenLayers.StyleMap({
'default': fixmystreet.assets.style_default,
'select': fixmystreet.assets.style_default_select,
- 'hover': new OpenLayers.Style({
- fillColor: "#55BB00",
- fillOpacity: 0.8,
- strokeColor: "#000000",
- strokeOpacity: 1,
- strokeWidth: 2,
- pointRadius: 8,
- cursor: 'pointer'
- })
+ 'hover': fixmystreet.assets.style_default_hover
});
}
@@ -789,6 +840,16 @@ fixmystreet.assets = {
pointRadius: 6
}),
+ style_default_hover: new OpenLayers.Style({
+ fillColor: "#55BB00",
+ fillOpacity: 0.8,
+ strokeColor: "#000000",
+ strokeOpacity: 1,
+ strokeWidth: 2,
+ pointRadius: 8,
+ cursor: 'pointer'
+ }),
+
style_default_select: new OpenLayers.Style({
externalGraphic: pin_prefix + "pin-spot.png",
fillColor: "#55BB00",
@@ -805,6 +866,30 @@ fixmystreet.assets = {
graphicOpacity: 1.0
}),
+ construct_named_select_style: function(label) {
+ var f = $.extend({
+ label: label,
+ labelOutlineColor: "white",
+ labelOutlineWidth: 3,
+ labelYOffset: 65,
+ fontSize: '15px',
+ fontWeight: 'bold'
+ }, fixmystreet.assets.style_default_select.defaultStyle);
+ return new OpenLayers.Style(f);
+ },
+ named_select_action_found: function(asset) {
+ var fn = this.fixmystreet.construct_selected_asset_message || this.construct_selected_asset_message;
+ var message = fn.call(this, asset);
+ if (!message) {
+ message = get_asset_pick_message.call(this);
+ }
+ update_message_display.call(this, message);
+ },
+ named_select_action_not_found: function() {
+ var message = get_asset_pick_message.call(this);
+ update_message_display.call(this, message);
+ },
+
selectedFeature: function() {
return selected_feature;
},
@@ -815,6 +900,14 @@ fixmystreet.assets = {
}
options = $.extend(true, {}, default_options, options);
+
+ var cls = construct_layer_class(options);
+ var staff_report_page = ((fixmystreet.page == 'report' || fixmystreet.page == 'reports') && fixmystreet.staff_set_up);
+ if (staff_report_page && cls === OpenLayers.Layer.VectorNearest) {
+ // Only care about asset layers on report page when staff
+ return;
+ }
+
var asset_layer = this.add_layer(options);
this.add_controls([asset_layer], options);
return asset_layer;
@@ -860,8 +953,10 @@ fixmystreet.assets = {
},
init: function() {
- if (fixmystreet.page != 'new' && fixmystreet.page != 'around') {
+ var staff_report_page = ((fixmystreet.page == 'report' || fixmystreet.page == 'reports') && fixmystreet.staff_set_up);
+ if (fixmystreet.page != 'new' && fixmystreet.page != 'around' && !staff_report_page) {
// We only want to show asset markers when making a new report
+ // or if an inspector is editing a report
return;
}
@@ -884,13 +979,19 @@ fixmystreet.assets = {
return hide_assets;
})(fixmystreet.maps.display_around);
- var pins_layer = fixmystreet.map.getLayersByName("Pins")[0];
+ var asset_layer;
for (var i = 0; i < fixmystreet.assets.layers.length; i++) {
- var asset_layer = fixmystreet.assets.layers[i];
+ asset_layer = fixmystreet.assets.layers[i];
var controls = asset_layer.controls || [];
for (var j = 0; j < controls.length; j++) {
fixmystreet.map.addControl(controls[j]);
}
+ fixmystreet.map.addLayer(asset_layer);
+ }
+
+ var pins_layer = fixmystreet.map.getLayersByName("Pins")[0];
+ for (i = 0; i < fixmystreet.assets.layers.length; i++) {
+ asset_layer = fixmystreet.assets.layers[i];
init_asset_layer(asset_layer, pins_layer);
}
}
diff --git a/web/cobrands/fixmystreet/fixmystreet.js b/web/cobrands/fixmystreet/fixmystreet.js
index cd98b233b..15856f4ce 100644
--- a/web/cobrands/fixmystreet/fixmystreet.js
+++ b/web/cobrands/fixmystreet/fixmystreet.js
@@ -316,7 +316,11 @@ $.extend(fixmystreet.set_up, {
errorElement: 'div',
errorClass: 'form-error',
errorPlacement: function( error, element ) {
- element.before( error );
+ if (element.parent().hasClass('segmented-control')) {
+ element.parent().before( error );
+ } else {
+ element.before( error );
+ }
},
submitHandler: function(form) {
if (form.submit_problem) {
@@ -470,7 +474,7 @@ $.extend(fixmystreet.set_up, {
$.each(data.disable_form.questions, function(_, question) {
if (question.message && question.code) {
$('#form_' + question.code).on('change.category', function() {
- $(fixmystreet).trigger('report_new:category_change');
+ $(fixmystreet).trigger('report_new:category_change', { skip_duplicates: true } );
});
}
});
@@ -655,11 +659,23 @@ $.extend(fixmystreet.set_up, {
} else {
fixmystreet.resize_to.desktop_page();
}
+ $('#form_service').val(type);
last_type = type;
}).resize();
},
dropzone: function($context) {
+ if ('Dropzone' in window) {
+ Dropzone.autoDiscover = false;
+ } else {
+ return;
+ }
+
+ // we don't want to create this if we're offline (e.g using the inspector
+ // panel to add a photo) as the server side bit does not work.
+ if (!navigator.onLine) {
+ return;
+ }
// Pass a jQuery element, eg $('.foobar'), into this function
// to limit all the selectors to that element. Handy if you want
@@ -670,12 +686,6 @@ $.extend(fixmystreet.set_up, {
$context = $(document);
}
- if ('Dropzone' in window) {
- Dropzone.autoDiscover = false;
- } else {
- return;
- }
-
var forms = $('[for="form_photo"], .js-photo-label', $context).closest('form');
forms.each(function() {
// Internal $context is the individual form with the photo upload inside
@@ -705,7 +715,7 @@ $.extend(fixmystreet.set_up, {
resizeWidth: 2048,
resizeHeight: 2048,
resizeQuality: 0.6,
- acceptedFiles: 'image/jpeg,image/pjpeg,image/gif,image/tiff,image/png',
+ acceptedFiles: 'image/jpeg,image/pjpeg,image/gif,image/tiff,image/png,.png,.tiff,.tif,.gif,.jpeg,.jpg',
dictDefaultMessage: default_message,
dictCancelUploadConfirmation: translation_strings.upload_cancel_confirmation,
dictInvalidFileType: translation_strings.upload_invalid_file_type,
@@ -887,10 +897,16 @@ $.extend(fixmystreet.set_up, {
.prependTo('#sub_map_links');
}
- $('#toggle-fullscreen').off('click').on('click', function() {
+ $('#toggle-fullscreen').off('click').on('click', function(e) {
+ e.preventDefault();
var btnClass = $('html').hasClass('map-fullscreen') ? 'expand' : 'compress';
var text = $(this).data(btnClass + '-text');
+ // Inspector form asset changing
+ if ($('html').hasClass('map-fullscreen') && $('.btn--change-asset').hasClass('asset-spot')) {
+ $('.btn--change-asset').click();
+ }
+
$('html').toggleClass('map-fullscreen only-map');
$(this).html(text).attr('class', btnClass);
@@ -1083,16 +1099,16 @@ $.extend(fixmystreet.set_up, {
});
},
- reporting_hide_phone_email: function() {
- $('#form_username_register').on('keyup change', function() {
- var username = $(this).val();
- if (/^[^a-z]+$/i.test(username)) {
- $('#js-hide-if-username-phone').hide();
- $('#js-hide-if-username-email').show();
- } else {
- $('#js-hide-if-username-phone').show();
- $('#js-hide-if-username-email').hide();
- }
+ reporting_required_phone_email: function() {
+ var fem = $('#form_email');
+ var fph = $('#form_phone');
+ $('#update_method_email').on('change', function() {
+ fem.prop('required', true);
+ fph.prop('required', false);
+ });
+ $('#update_method_phone').on('change', function() {
+ fem.prop('required', false);
+ fph.prop('required', true);
});
},
@@ -1117,7 +1133,7 @@ $.extend(fixmystreet.set_up, {
e.preventDefault();
var form = $('<form/>').attr({ method:'post', action:"/alert/subscribe" });
form.append($('<input name="alert" value="Subscribe me to an email alert" type="hidden" />'));
- $(this).closest('.js-alert-list').find('input[type=email], input[type=text], input[type=hidden], input[type=radio]:checked').each(function() {
+ $(this).closest('.js-alert-list').find('textarea, input[type=email], input[type=text], input[type=hidden], input[type=radio]:checked').each(function() {
var $v = $(this);
$('<input/>').attr({ name:$v.attr('name'), value:$v.val(), type:'hidden' }).appendTo(form);
});
@@ -1310,6 +1326,20 @@ fixmystreet.update_pin = function(lonlat, savePushState) {
}
};
+(function() { // fetch_reporting_data closure
+
+function re_select(group, category) {
+ var cat_in_group = $("#form_category optgroup[label=\"" + group + "\"] option[value=\"" + category + "\"]");
+ if (cat_in_group.length) {
+ cat_in_group.prop({selected:true});
+ return true;
+ } else if ($("#form_category option[value=\"" + category + "\"]").length) {
+ $("#form_category").val(category);
+ return true;
+ }
+ return false;
+}
+
fixmystreet.fetch_reporting_data = function() {
$.getJSON('/report/new/ajax', {
latitude: $('#fixmystreet\\.latitude').val(),
@@ -1364,16 +1394,12 @@ fixmystreet.fetch_reporting_data = function() {
}
$('#form_category_row').html(data.category);
- var cat_in_group = $("#form_category optgroup[label=\"" + old_category_group + "\"] option[value=\"" + old_category + "\"]");
- if (cat_in_group.length) {
- cat_in_group.prop({selected:true});
- } else if ($("#form_category option[value=\"" + old_category + "\"]").length) {
- $("#form_category").val(old_category);
- } else if (filter_category !== undefined && $("#form_category option[value='" + filter_category + "']").length) {
+ var reselected = re_select(old_category_group, old_category);
+ if (!reselected && filter_category !== undefined) {
// If the category filter appears on the map and the user has selected
// something from it, then pre-fill the category field in the report,
// if it's a value already present in the drop-down.
- $("#form_category").val(filter_category);
+ re_select(old_category_group, filter_category);
}
fixmystreet.set_up.category_groups(old_category_group);
@@ -1408,6 +1434,8 @@ fixmystreet.fetch_reporting_data = function() {
});
};
+})(); // fetch_reporting_data closure
+
fixmystreet.display = {
begin_report: function(lonlat, saveHistoryState) {
lonlat = fixmystreet.maps.begin_report(lonlat);
@@ -1531,6 +1559,9 @@ fixmystreet.display = {
$twoColReport = $reportPage.find('.two_column_sidebar'),
$sideReport = $reportPage.find('#side-report');
+ // Set this from report page in case change asset used and therefore relevant() function
+ fixmystreet.bodies = fixmystreet.utils.csv_to_array($reportPage.find('#js-map-data').data('bodies'))[0];
+
if ($sideReport.length) {
$('#side').hide(); // Hide the list of reports
$('#side-form').hide(); // And the form
diff --git a/web/cobrands/fixmystreet/offline.js b/web/cobrands/fixmystreet/offline.js
index 908326a69..c6609fe1a 100644
--- a/web/cobrands/fixmystreet/offline.js
+++ b/web/cobrands/fixmystreet/offline.js
@@ -28,6 +28,23 @@ fixmystreet.offlineBanner = (function() {
$('.top_banner--offline').slideUp();
}
+ // Compare two typed arrays for equality
+ function isEqual(view1, view2) {
+ for (var i=0; i != view1.byteLength; i++) {
+ if (view1[i] != view2[i]) return false;
+ }
+ return true;
+ }
+
+ // Create a Uint8Array of a string
+ function makeView(str) {
+ var view = new Uint8Array(str.length);
+ for (var i=0; i<str.length; i++) {
+ view[i] = str.charCodeAt(i);
+ }
+ return view;
+ }
+
return {
make: function(offline) {
fixmystreet.offlineData.getFormsLength().then(function(num) {
@@ -61,7 +78,13 @@ fixmystreet.offlineBanner = (function() {
}
function postForm(url, data) {
- return $.ajax({ url: url, data: data, type: 'POST' }).done(nextForm);
+ return $.ajax({
+ url: url,
+ contentType: data.contentType,
+ data: data.text,
+ type: 'POST',
+ processData: false
+ }).done(nextForm);
}
$(document).on('click', '#oFN', function(e) {
@@ -83,8 +106,23 @@ fixmystreet.offlineBanner = (function() {
if (!token) {
return nextForm();
}
- var param = form[1].replace(/&token=[^&]*/, '&token=' + token);
- return postForm(form[0], param).fail(nextForm);
+
+ var tokenView = makeView(token);
+ var tokenName = makeView('name="token"\r\n\r\n');
+
+ // Make a typed array to update the request body with
+ // This only works because tokens are always the same length
+ var curView = new Uint8Array(form[1].text);
+
+ // Find the spot at which the token is in the buffer
+ var idxS = curView.findIndex(function isToken(element, i, array) {
+ var sl = array.slice(i, i+tokenName.byteLength);
+ return isEqual(sl, tokenName);
+ });
+ // Replace the old token with the new one in the right spot
+ curView.set(tokenView, idxS + tokenName.byteLength);
+
+ return postForm(form[0], form[1]).fail(nextForm);
});
});
});
@@ -302,6 +340,14 @@ fixmystreet.offline = (function() {
$('.moderate-display.segmented-control, .shadow-wrap, #update_form, #report-cta, .mysoc-footer, .nav-wrapper').hide();
$('.js-back-to-report-list').attr('href', '/my/planned');
+ // On iOS we want to hide the photo fields on the offline inspector
+ // form because including a photo entirely breaks the form submission.
+ if (/iPad|iPhone|iPod/.test(navigator.platform) ||
+ (/Mac/.test(navigator.userAgent) && 'ontouchend' in document)) // iPadOS 13 pretends to be a desktop Mac
+ {
+ $("#form_photos, label[for=form_photo]").hide();
+ }
+
// Refill form with saved data if there is any
fixmystreet.offlineData.getForms().then(function(forms) {
var savedForm;
diff --git a/web/cobrands/fixmystreet/staff.js b/web/cobrands/fixmystreet/staff.js
index a504f641e..ec85dbb8d 100644
--- a/web/cobrands/fixmystreet/staff.js
+++ b/web/cobrands/fixmystreet/staff.js
@@ -1,4 +1,16 @@
fixmystreet.staff_set_up = {
+ action_scheduled_raise_defect: function() {
+ $("#report_inspect_form").find('[name=state]').on('change', function() {
+ if ($(this).val() !== "action scheduled") {
+ $("#js-inspect-action-scheduled").addClass("hidden");
+ $('#raise_defect_yes').prop('required', false);
+ } else {
+ $("#js-inspect-action-scheduled").removeClass("hidden");
+ $('#raise_defect_yes').prop('required', true);
+ }
+ });
+ },
+
list_item_actions: function() {
$('#js-reports-list').on('click', ':submit', function(e) {
e.preventDefault();
@@ -137,6 +149,10 @@ fixmystreet.staff_set_up = {
document.getElementById('side-inspect').scrollIntoView();
}
+ // make sure dropzone is set up, otherwise loading problem with
+ // JS leaves this uninitialized.
+ fixmystreet.set_up.dropzone($inspect_form);
+
function updateTemplates(opts) {
opts.category = opts.category || $inspect_form.find('[name=category]').val();
opts.state = opts.state || $inspect_form.find('[name=state]').val();
@@ -185,6 +201,7 @@ fixmystreet.staff_set_up = {
populateSelect($priorities, priorities_data, 'priorities_type_format');
updateTemplates({'category': category});
$priorities.val(curr_pri);
+ update_change_asset_button();
});
function state_change(state) {
@@ -212,9 +229,9 @@ fixmystreet.staff_set_up = {
var $checkbox = $(this);
var toggle_public_update = function() {
if ($checkbox.prop('checked')) {
- $('#public_update').parents('p').show();
+ $('#public_update_form_fields').show();
} else {
- $('#public_update').parents('p').hide();
+ $('#public_update_form_fields').hide();
}
};
$checkbox.on('change', function() {
@@ -242,21 +259,60 @@ fixmystreet.staff_set_up = {
// triage pages may not show geolocation button
if (el) {
fixmystreet.geolocate(el, function(pos) {
- var latlon = new OpenLayers.LonLat(pos.coords.longitude, pos.coords.latitude);
- var bng = latlon.clone().transform(
- new OpenLayers.Projection("EPSG:4326"),
- new OpenLayers.Projection("EPSG:27700") // TODO: Handle other projections
- );
- $("#problem_northing").text(bng.lat.toFixed(1));
- $("#problem_easting").text(bng.lon.toFixed(1));
- $("#problem_latitude").text(latlon.lat.toFixed(6));
- $("#problem_longitude").text(latlon.lon.toFixed(6));
- $inspect_form.find("input[name=latitude]").val(latlon.lat);
- $inspect_form.find("input[name=longitude]").val(latlon.lon);
+ var lonlat = new OpenLayers.LonLat(pos.coords.longitude, pos.coords.latitude);
+ fixmystreet.maps.update_pin_input_fields(lonlat);
});
}
}
+ function get_value_and_group(slr) {
+ var elt = $(slr)[0];
+ var group = $(elt.options[elt.selectedIndex]).closest('optgroup').prop('label');
+ return { 'value': $(elt).val(), 'group': group || '' };
+ }
+
+ function update_change_asset_button() {
+ var category = get_value_and_group('#category'); // The inspect form category dropdown only
+ var found = false;
+ if (fixmystreet.assets) {
+ for (var i = 0; i < fixmystreet.assets.layers.length; i++) {
+ var layer = fixmystreet.assets.layers[i];
+ if ((layer.fixmystreet.asset_category || layer.fixmystreet.asset_group) && layer.relevant(category.value, category.group)) {
+ found = true;
+ break;
+ }
+ }
+ }
+ if (found) {
+ $('.btn--change-asset').show();
+ } else {
+ $('.btn--change-asset').hide();
+ }
+ }
+ if ( $('.btn--change-asset').length ) {
+ update_change_asset_button();
+ }
+
+ $('.btn--change-asset').on('click', function(e) {
+ e.preventDefault();
+ $(this).toggleClass('asset-spot');
+ if ($(this).hasClass('asset-spot')) {
+ var v = get_value_and_group('#category');
+ $('#inspect_form_category').val(v.value);
+ $('#inspect_category_group').val(v.group);
+ if ($('html').hasClass('mobile')) {
+ $('#toggle-fullscreen').trigger('click');
+ $('html, body').animate({ scrollTop: 0 }, 500);
+ $('#map_box').append('<div id="change_asset_mobile"/>');
+ }
+ } else {
+ $('#inspect_form_category').val('');
+ $('#inspect_category_group').val('');
+ $('#change_asset_mobile').remove();
+ }
+ $(fixmystreet).trigger('inspect_form:asset_change');
+ });
+
// Make the "Provide an update" form toggleable, hidden by default.
// (Inspectors will normally just use the #public_update box instead).
$('.js-provide-update').on('click', function(e) {
@@ -335,6 +391,21 @@ fixmystreet.staff_set_up = {
});
},
+ open311_category_edit: function() {
+ var protect_input = document.getElementById('open311_protect');
+ if (!protect_input) {
+ return;
+ }
+ protect_input.addEventListener('change', function() {
+ var cat = document.getElementById('category');
+ cat.readOnly = !this.checked;
+ cat.required = this.checked;
+ if (!this.checked) {
+ cat.value = cat.getAttribute('value');
+ }
+ });
+ },
+
shortlist_listener: function() {
$('#fms_shortlist_all').on('click', function() {
var features = [];
@@ -364,6 +435,7 @@ $(fixmystreet).on('display:report', function() {
fixmystreet.staff_set_up.response_templates();
if ($("#report_inspect_form").length) {
fixmystreet.staff_set_up.report_page_inspect();
+ fixmystreet.staff_set_up.action_scheduled_raise_defect();
}
});
diff --git a/web/cobrands/greenwich/_colours.scss b/web/cobrands/greenwich/_colours.scss
index 973767a2d..41c3891e3 100644
--- a/web/cobrands/greenwich/_colours.scss
+++ b/web/cobrands/greenwich/_colours.scss
@@ -24,3 +24,7 @@ $col_big_numbers: $primary;
$col_click_map: $greenwich_red;
$container-max-width: 990px;
+
+$search-help-alignment: left;
+$search-help-background: #fff3f3;
+$search-help-header-font-size-desktop: 1.25em;
diff --git a/web/cobrands/greenwich/base.scss b/web/cobrands/greenwich/base.scss
index 0f990c865..bfbb0a62a 100644
--- a/web/cobrands/greenwich/base.scss
+++ b/web/cobrands/greenwich/base.scss
@@ -28,6 +28,10 @@
background-color: $greenwich_light_grey;
}
+#front-main #postcodeForm {
+ margin-top: 1em;
+}
+
label[for=pc] {
color: $greenwich_dark_red;
}
diff --git a/web/cobrands/hackney/_colours.scss b/web/cobrands/hackney/_colours.scss
new file mode 100644
index 000000000..464733a40
--- /dev/null
+++ b/web/cobrands/hackney/_colours.scss
@@ -0,0 +1,51 @@
+/* COLOURS */
+
+$menu-image: 'menu-black';
+
+// Primary
+$white: #fff;
+$green: #00b341;
+$grey: #666664;
+
+
+// Secondary
+$yellow: #ffc845;
+$blue: #0072ce;
+$pale_green: #f2f7f0;
+$alt_green: #328b15;
+$light_green: #84bd00;
+$dark_green: #00664f;
+$teal :#1e98a7;
+$black: #000;
+$red: #be3a34;
+
+$primary: $green;
+$primary_b: #000;
+$primary_text: $black;
+
+$base_bg: $white;
+$base_fg: $black;
+
+$link-color: $blue;
+$link-visited_color: $dark-green;
+$link-hover-color: $green;
+
+$nav_background_colour: $black;
+$nav_colour: $white;
+$nav_hover_background_colour: $black;
+
+$col_click_map: $green;
+
+$header-top-border: false;
+
+$montserrat: 'Montserrat', Arial, sans-serif;
+
+$heading-font: $montserrat;
+$body-font: $montserrat;
+$meta-font: $montserrat;
+
+$search-help-alignment: left;
+$search-help-background: #fff3f3;
+$search-help-header-font-size-desktop: 1.25em;
+$search-help-margin: 0 -1em;
+$search-help-margin-desktop: 0 -1em;
diff --git a/web/cobrands/hackney/assets.js b/web/cobrands/hackney/assets.js
new file mode 100644
index 000000000..9941594f0
--- /dev/null
+++ b/web/cobrands/hackney/assets.js
@@ -0,0 +1,246 @@
+(function(){
+
+if (!fixmystreet.maps) {
+ return;
+}
+
+/** These layers are from the Hackney WFS feed, for non-Alloy categories: */
+var wfs_defaults = {
+ http_options: {
+ url: "https://map.hackney.gov.uk/geoserver/wfs",
+ params: {
+ SERVICE: "WFS",
+ VERSION: "1.1.0",
+ REQUEST: "GetFeature",
+ SRSNAME: "urn:ogc:def:crs:EPSG::27700"
+ }
+},
+ asset_type: 'spot',
+ max_resolution: 2.388657133579254,
+ asset_id_field: 'id',
+ attributes: {},
+ geometryName: 'geom',
+ srsName: "EPSG:27700",
+ strategy_class: OpenLayers.Strategy.FixMyStreet,
+ body: "Hackney Council",
+ asset_item: "item"
+};
+
+
+fixmystreet.assets.add(wfs_defaults, {
+ http_options: {
+ params: {
+ TYPENAME: "greenspaces:park_bin",
+ }
+ },
+ asset_category: "Overflowing bin",
+ attributes: {}
+});
+
+fixmystreet.assets.add(wfs_defaults, {
+ http_options: {
+ params: {
+ TYPENAME: "amenity:public_toilet",
+ }
+ },
+ asset_category: ["Public toilets", "Toilets"],
+ attributes: {}
+});
+
+fixmystreet.assets.add(wfs_defaults, {
+ http_options: {
+ params: {
+ TYPENAME: "parking:pay_display_machine_liberator",
+ }
+ },
+ asset_category: "Pay & Display Machines",
+ attributes: {}
+});
+
+fixmystreet.assets.add(wfs_defaults, {
+ http_options: {
+ params: {
+ TYPENAME: "recycling:estate_recycling_bin",
+ }
+ },
+ asset_category: "Bin Contamination",
+ attributes: {}
+});
+
+fixmystreet.assets.add(wfs_defaults, {
+ http_options: {
+ params: {
+ TYPENAME: "amenity:sport_facility",
+ }
+ },
+ asset_category: "Sport Area",
+ attributes: {}
+});
+
+fixmystreet.assets.add(wfs_defaults, {
+ http_options: {
+ params: {
+ TYPENAME: "greenspaces:park_bench",
+ }
+ },
+ asset_category: "Park Furniture (bench)",
+ attributes: {}
+});
+
+fixmystreet.assets.add(wfs_defaults, {
+ http_options: {
+ params: {
+ TYPENAME: "greenspaces:park_bin",
+ }
+ },
+ asset_category: "Park Furniture (bin)",
+ attributes: {}
+});
+
+fixmystreet.assets.add(wfs_defaults, {
+ http_options: {
+ params: {
+ TYPENAME: "greenspaces:park_picnic_bench",
+ }
+ },
+ asset_category: "Park Furniture (picnic bench)",
+ attributes: {}
+});
+
+fixmystreet.assets.add(wfs_defaults, {
+ http_options: {
+ params: {
+ TYPENAME: "transport:bike_hangar_scheme",
+ }
+ },
+ asset_category: "Cycle Hangars",
+ attributes: {}
+});
+
+fixmystreet.assets.add(wfs_defaults, {
+ http_options: {
+ params: {
+ TYPENAME: "greenspaces:park_bench",
+ }
+ },
+ asset_category: "Benches",
+ attributes: {}
+});
+
+
+/** These layers are served directly from Alloy: */
+
+// View all layers with something like:
+// curl https://tilma.staging.mysociety.org/resource-proxy/proxy.php\?https://hackney.assets/ | jq '.results[] | .layer.code, ( .layer.styles[] | { id, name } ) '
+var layers = [
+ {
+ "categories": ["Street Lighting", "Lamposts"],
+ "item_name": "street light",
+ "layer_name": "Street Lights",
+ "styleid": "5d308d57fe2ad8046c67cdb5",
+ "layerid": "layers_streetLightingAssets"
+ },
+ {
+ "categories": ["Illuminated Bollards", "Non-illuminated Bollards"],
+ "item_name": "bollard",
+ "layer_name": "Bollards",
+ "styleid": "5d308d57fe2ad8046c67cdb9",
+ "layerid": "layers_streetLightingAssets"
+ },
+ {
+ "categories": ["Benches"],
+ "item_name": "bench",
+ "layer_name": "Bench",
+ "styleid": "5e8b16f0ca31500f60b3f589",
+ "layerid": "layers_bench_5e8b15f0ca31500f60b3f568"
+ },
+ {
+ "categories": ["Potholes"],
+ "item_name": "road",
+ "layer_name": "Carriageway",
+ "styleid": "5d53d28bfe2ad80fc4573184",
+ "layerid": "layers_carriageway_5d53cc74fe2ad80c3403b77d"
+ },
+ {
+ "categories": ["Road Markings / Lines"],
+ "item_name": "road",
+ "layer_name": "Markings",
+ "styleid": "5d308dd7fe2ad8046c67da33",
+ "layerid": "layers_highwayAssets"
+ },
+ {
+ "categories": ["Pavement"],
+ "item_name": "pavement",
+ "layer_name": "Footways",
+ "styleid": "5d308dd6fe2ad8046c67da2a",
+ "layerid": "layers_highwayAssets"
+ },
+ {
+ "categories": ["Cycle Tracks"],
+ "item_name": "cycle track",
+ "layer_name": "Cycle Tracks",
+ "styleid": "5d308dd6fe2ad8046c67da29",
+ "layerid": "layers_highwayAssets"
+ },
+ {
+ "categories": ["Drains and gutters"],
+ "item_name": "drain",
+ "layer_name": "Gullies",
+ "styleid": "5d308dd6fe2ad8046c67da2e",
+ "layerid": "layers_highwayAssets"
+ },
+ {
+ "categories": ["Verges"],
+ "item_name": "verge",
+ "layer_name": "Verges",
+ "styleid": "5d308dd7fe2ad8046c67da36",
+ "layerid": "layers_highwayAssets"
+ },
+ {
+ "categories": ["Road Hump Fault / Damage"],
+ "item_name": "road hump",
+ "layer_name": "Traffic Calming",
+ "styleid": "5d308dd7fe2ad8046c67da35",
+ "layerid": "layers_highwayAssets"
+ },
+ {
+ "categories": ["Broken or Faulty Barrier Gates"],
+ "item_name": "barrier gate",
+ "layer_name": "Gates",
+ "styleid": "5d308dd6fe2ad8046c67da2c",
+ "layerid": "layers_highwayAssets"
+ },
+ {
+ "categories": ["Belisha Beacon"],
+ "item_name": "beacon",
+ "layer_name": "Belisha Beacon",
+ "styleid": "5d308d57fe2ad8046c67cdb6",
+ "layerid": "layers_streetLightingAssets"
+ },
+ {
+ "categories": ["Loose or Damaged Kerb Stones"],
+ "item_name": "kerb",
+ "layer_name": "Kerbs",
+ "styleid": "5d308dd6fe2ad8046c67da30",
+ "layerid": "layers_highwayAssets"
+ }
+];
+
+var hackney_defaults = $.extend(true, {}, fixmystreet.alloyv2_defaults, {
+ class: OpenLayers.Layer.NCCVectorAsset,
+ protocol_class: OpenLayers.Protocol.AlloyV2,
+ http_options: {
+ base: "https://tilma.staging.mysociety.org/resource-proxy/proxy.php?https://hackney.assets/${layerid}/${x}/${y}/${z}/cluster?styleIds=${styleid}"
+ },
+ non_interactive: false,
+ body: "Hackney Council",
+ attributes: {
+ asset_resource_id: function() {
+ return this.fid;
+ }
+ }
+});
+
+fixmystreet.alloy_add_layers(hackney_defaults, layers);
+
+})();
diff --git a/web/cobrands/hackney/base.scss b/web/cobrands/hackney/base.scss
new file mode 100644
index 000000000..4bc3fc8b1
--- /dev/null
+++ b/web/cobrands/hackney/base.scss
@@ -0,0 +1,222 @@
+@import "../sass/h5bp";
+@import "./_colours";
+@import "../sass/mixins";
+
+@import "../sass/base";
+
+
+#site-header {
+ box-shadow:
+ 0 0 0 6px $white,
+ 0 0 0 10px $dark-green,
+ 0 0 0 13px $white,
+ 0 0 0 16px $green,
+ 0 0 0 19px $white,
+ 0 0 0 21px $light-green;
+}
+
+#site-logo {
+ background: transparent url('images/hackney-logo-white.png') 0 50% no-repeat;
+ background-size: 200px 36px;
+ width: 200px;
+ &:focus {
+ outline: 4px solid $yellow;
+ }
+}
+
+.nav-menu--mysoc {
+ a {
+ color: $primary_text;
+ background-color: $primary;
+ }
+}
+
+#front-main {
+ background-color: $white;
+ margin: 0;
+ padding: 1em;
+ text-align: inherit;
+
+ h1 {
+ color: $black;
+ }
+
+ #postcodeForm {
+ margin: 0;
+ padding: 0;
+ background: transparent;
+ color: inherit;
+
+ div {
+ border: none;
+ background: transparent;
+ position: relative;
+ background: #fff;
+ box-shadow: 1px 1px 5px 1px rgba(104, 104, 104, 0.4);
+
+ input#pc {
+ box-sizing: border-box;
+ padding: 10px 22px;
+ }
+
+ input#sub {
+ width: 0;
+ padding-left: 50px;
+ overflow: hidden;
+ @include flex(0 0 auto);
+ background: $black url('hackney-search-icon.png') no-repeat 50% 50%;
+ background-size: 25px 25px;
+ color: $black;
+ &:hover,
+ &:focus {
+ background: $dark-green url('hackney-search-icon.png') no-repeat 50% 50%;
+ background-size: 25px 25px;
+ color: $dark_green;
+ }
+ &:focus {
+ outline: 4px solid $yellow;
+ }
+ }
+ }
+ }
+
+ a#geolocate_link {
+ background: transparent;
+ display: block;
+ padding: 0;
+ margin-top: 0.5em;
+ font-family: inherit;
+ font-size: 1em;
+ border-radius: 0;
+ color: $dark_green;
+
+ &:hover {
+ background: transparent;
+ text-decoration: underline;
+ }
+ }
+
+ .form-hint {
+ color: inherit;
+ }
+}
+
+.hackney-footer {
+ background-color: $dark_green;
+ color: #fff;
+ padding: 1em 0;
+}
+
+.hackney-footer__logo {
+ background: transparent url('images/hackney-logo-white.png') 0 50% no-repeat;
+ background-size: 200px 36px;
+ width: 200px;
+ height: 54px;
+ text-indent: -999999px;
+ display: inline-block;
+ &:focus {
+ outline: 4px solid $yellow;
+ }
+}
+
+a.platform-logo {
+ color: #fff;
+}
+
+#front_stats {
+ background-color: $dark_green;
+ color: #fff;
+}
+
+.green-btn,
+.btn {
+ border-radius: 4px;
+ font-size: 1.1875em;
+ font-weight: 400;
+ line-height: 1.4375em;
+ vertical-align: top;
+ display: inline-block;
+ position: relative;
+ border: 1px solid $dark_green;
+ box-shadow: inset #003d2f 0 -2px 0 0;
+ &:hover {
+ background: none;
+ background-color: #005a30;
+ color: #fff !important;
+ }
+
+ &:focus {
+ border-color:#ffdd00;
+ color:#0b0c0c !important;
+ background: none;
+ background-color:#ffdd00;
+ box-shadow: 0 2px 0#0b0c0c;
+ }
+}
+
+.btn--primary,
+.btn-primary,
+.green-btn {
+ background: $dark_green;
+ border: 2px solid transparent;
+ color: #ffffff;
+ box-shadow: 0 2px 0 #002d18;
+}
+
+textarea.form-control,
+.dropzone,
+input.form-control {
+ border: 2px solid #0b0c0c;
+ border-radius: 0;
+ box-shadow: none;
+ &:focus {
+ outline: 3px solid#ffdd00;
+ outline-offset: 0;
+ box-shadow: inset 0 0 0 2px;
+ }
+}
+
+label, legend, .label {
+ font-weight: 300;
+}
+
+.big-green-banner {
+ background-color: $dark_green;
+ text-transform: none;
+}
+
+div.form-error, p.form-error {
+ color: $red;
+ background-color: transparent;
+ padding: 0;
+ width: 100%;
+
+ a {
+ color: $red;
+ text-decoration: underline;
+ }
+}
+
+
+input.form-error, textarea.form-error,
+select.form-error {
+ border-color: $red;
+ border-radius: 0 !important;
+}
+
+.box-warning {
+ background-color: rgba(164, 214, 94, 0.5);
+}
+
+.dz-clickable:hover, .dz-drag-hover {
+ border-color: $light-green;
+}
+
+.dz-clickable:hover .dz-message u, .dz-drag-hover .dz-message u {
+ color: $green;
+}
+
+.sso-staff-sign-in {
+ font-size: 0.9em;
+ margin: 1em 0;
+}
diff --git a/web/cobrands/hackney/hackney-search-icon.png b/web/cobrands/hackney/hackney-search-icon.png
new file mode 100644
index 000000000..99305f24a
--- /dev/null
+++ b/web/cobrands/hackney/hackney-search-icon.png
Binary files differ
diff --git a/web/cobrands/hackney/images/hackney-logo-white.png b/web/cobrands/hackney/images/hackney-logo-white.png
new file mode 100644
index 000000000..3a41df786
--- /dev/null
+++ b/web/cobrands/hackney/images/hackney-logo-white.png
Binary files differ
diff --git a/web/cobrands/hackney/layout.scss b/web/cobrands/hackney/layout.scss
new file mode 100644
index 000000000..8b6fa6278
--- /dev/null
+++ b/web/cobrands/hackney/layout.scss
@@ -0,0 +1,143 @@
+@import "_colours";
+@import "../sass/layout";
+
+#main-nav {
+ display: block; // remove flex so nav touches top of parent
+ min-height: 0; // no vertical align, so no need for a height
+ margin-top: 0; // don't bother overlapping the border
+ height: auto;
+ margin-top: 0.5em;
+ .frontpage & {
+ margin-top: 1em;
+ }
+ .ie9 & {
+ position: static;
+ float: $right;
+
+ & > * {
+ position: static;
+ -ms-transform: none;
+ }
+ }
+
+ a {
+ font-weight: 600;
+ }
+}
+
+.nav-menu--mysoc {
+ padding: 0em 0.5em;
+ margin-#{$left}: 0.25em;
+ background-color: $primary;
+ @include border-radius(0 0 0.375em 0.375em);
+ a {
+ background-color: transparent;
+ color: $primary_text;
+ text-transform: uppercase;
+ font-size: 0.6875em;
+ padding: 1.3em 0.7em 1em;
+ &:hover {
+ color: #fff;
+ background-color: transparent;
+ }
+ }
+}
+
+body.frontpage {
+ #site-logo {
+ margin: 0.5em 0 0.5em;
+ width: 200px;
+ height: 54px;
+ background: transparent url('images/hackney-logo-white.png') 0 50% no-repeat;
+ background-size: 200px 36px;
+ }
+}
+
+#site-header {
+ padding: 4px 0;
+ margin-bottom: 2em;
+ .mappage & {
+ margin-bottom: 0;
+ }
+}
+
+#front-main {
+ background-color: $white;
+ padding: 50px 0;
+ border-bottom: 3px solid $light_green;
+ label {
+ font-size: 18px;
+ font-weight: 600;
+ }
+
+ h1 {
+ font-size: 40px;
+ font-weight: 600;
+ }
+
+ #postcodeForm {
+ overflow: visible;
+ margin: 0;
+
+ div {
+ margin: 0;
+ }
+ }
+
+ #front-main-container {
+ padding: 0 1em;
+ }
+}
+
+ol.big-numbers>li:before {
+ color: $dark_green;
+}
+
+.nav-menu--main span {
+ color: $light_green;
+ font-weight: 600;
+}
+
+#front_stats {
+ border-color: $dark_green;
+ big {
+ color: $dark_green;
+ }
+}
+
+.nav-menu--main a.report-a-problem-btn {
+ background-color: transparent;
+ color: white;
+ &:hover,
+ &:active,
+ &:focus {
+ background-color: transparent;
+ color: white;
+ }
+}
+
+#front-howto h2,
+#front-recently h2 {
+ font-weight: 600;
+}
+
+#front_stats {
+ background-color: transparent;
+}
+
+.big-green-banner {
+ background-color: $dark_green;
+}
+
+.footer-powered-by {
+ position: relative;
+ top: -40px;
+ right: 0;
+ text-align: right;
+
+}
+
+a.platform-logo {
+ text-align: left;
+
+} \ No newline at end of file
diff --git a/web/cobrands/hart/_colours.scss b/web/cobrands/hart/_colours.scss
index d79126bae..568ba66f1 100644
--- a/web/cobrands/hart/_colours.scss
+++ b/web/cobrands/hart/_colours.scss
@@ -8,6 +8,8 @@ $col_fixed_label: $hart_primary;
$primary_b: #000000;
$primary_text: #ffffff;
+$primary_link_color: $primary_text;
+$primary_link_hover_color: rgba($primary_text, 0.8);
$link-color: #369;
$link-hover-color: #369;
@@ -24,3 +26,6 @@ $mappage-header-height: 173px + 32px;
$header-top-border: false;
$container-max-width: 60em;
+
+$search-help-background: #fff3f3;
+$search-help-header-font-size-desktop: 1.25em;
diff --git a/web/cobrands/highwaysengland/_colours.scss b/web/cobrands/highwaysengland/_colours.scss
index 4b7d46453..d8b30aed6 100644
--- a/web/cobrands/highwaysengland/_colours.scss
+++ b/web/cobrands/highwaysengland/_colours.scss
@@ -40,3 +40,9 @@ $mappage-header-height: 5.75em;
$body-font: "proxima-nova", "Proxima Nova", Montserrat, Arial, sans-serif;
$heading-font: $body-font;
$meta-font: $body-font;
+
+$search-help-alignment: left;
+$search-help-background: #fff3f3;
+$search-help-header-font-size-desktop: 1.25em;
+$search-help-margin: 0 -1em;
+$search-help-margin-desktop: 0 -1em;
diff --git a/web/cobrands/highwaysengland/assets.js b/web/cobrands/highwaysengland/assets.js
index 8e50ed396..5943cdffd 100644
--- a/web/cobrands/highwaysengland/assets.js
+++ b/web/cobrands/highwaysengland/assets.js
@@ -61,9 +61,9 @@ fixmystreet.assets.add(defaults, {
no_asset_msg_id: '#js-not-he-road',
actions: {
found: function(layer, feature) {
- // If the road isn't in area 7 then we want to show the not found message.
+ // If the road is a DBFO road then we want to show the not found message.
fixmystreet.message_controller.road_found(layer, feature, function(feature) {
- if (feature.attributes.area_name === 'Area 7') {
+ if (feature.attributes.area_name.indexOf('DBFO') === -1) {
$('#js-top-message').show();
$('#form_category_row').show();
return true;
@@ -72,7 +72,7 @@ fixmystreet.assets.add(defaults, {
$('#form_category_row').hide();
return false;
}
- }, '#js-not-area7-road');
+ }, '#js-dbfo-road');
},
not_found: function(layer) {
fixmystreet.message_controller.road_not_found(layer);
diff --git a/web/cobrands/highwaysengland/base.scss b/web/cobrands/highwaysengland/base.scss
index 839c53ad8..72879d64a 100644
--- a/web/cobrands/highwaysengland/base.scss
+++ b/web/cobrands/highwaysengland/base.scss
@@ -201,5 +201,4 @@ p.form-error {
.olLayerGrid, .olBackBuffer {
opacity: 0.3;
- filter: grayscale(1);
}
diff --git a/web/cobrands/hounslow/_colours.scss b/web/cobrands/hounslow/_colours.scss
index 0a4476720..0fb3d985a 100644
--- a/web/cobrands/hounslow/_colours.scss
+++ b/web/cobrands/hounslow/_colours.scss
@@ -21,6 +21,8 @@ $primary: $purple;
//$primary: #dce6f2; // From bexley.gov.uk/services
$primary_b: #222;
$primary_text: $white;
+$primary_link_color: $primary_text;
+$primary_link_hover_color: rgba($primary_text, 0.8);
$base_bg: $white;
$base_fg: #222;
@@ -36,3 +38,7 @@ $header-top-border: false;
$heading-font: InfoText, Frutiger, Arial, sans-serif;
$body-font: Frutiger, Arial, sans-serif;
$meta-font: $body-font;
+
+$search-help-background: #fff3f3;
+$search-help-header-background: $red;
+$search-help-header-font-size-desktop: 1.25em; \ No newline at end of file
diff --git a/web/cobrands/hounslow/assets.js b/web/cobrands/hounslow/assets.js
index 603a56e85..2c7f5b754 100644
--- a/web/cobrands/hounslow/assets.js
+++ b/web/cobrands/hounslow/assets.js
@@ -114,20 +114,11 @@ fixmystreet.assets.add($.extend(true, {}, defaults, {
// asset_item: 'gulley'
// }));
-var streetlight_select = $.extend({
- label: "${FeatureId}",
- labelOutlineColor: "white",
- labelOutlineWidth: 3,
- labelYOffset: 65,
- fontSize: '15px',
- fontWeight: 'bold'
-}, fixmystreet.assets.style_default_select.defaultStyle);
-
// The label for street light markers should be everything after the final
// '/' in the feature's FeatureId attribute.
// This seems to be the easiest way to perform custom processing
// on style attributes in OpenLayers...
-var select_style = new OpenLayers.Style(streetlight_select);
+var select_style = fixmystreet.assets.construct_named_select_style("${FeatureId}");
select_style.createLiterals = function() {
var literals = Object.getPrototypeOf(this).createLiterals.apply(this, arguments);
if (literals.label && literals.label.split) {
@@ -138,6 +129,7 @@ select_style.createLiterals = function() {
var streetlight_stylemap = new OpenLayers.StyleMap({
'default': fixmystreet.assets.style_default,
+ 'hover': fixmystreet.assets.style_default_hover,
'select': select_style
});
@@ -145,19 +137,15 @@ var labeled_defaults = $.extend(true, {}, defaults, {
select_action: true,
stylemap: streetlight_stylemap,
feature_code: 'FeatureId',
- actions: {
- asset_found: function(asset) {
- var id = asset.attributes[this.fixmystreet.feature_code] || '';
- if (id !== '' && id.split) {
- var code = id.split("/").slice(-1)[0];
- $('.category_meta_message').html('You have selected column <b>' + code + '</b>');
- } else {
- $('.category_meta_message').html('You can pick a <b class="asset-spot">' + this.fixmystreet.asset_item + '</b> from the map &raquo;');
- }
- },
- asset_not_found: function() {
- $('.category_meta_message').html('You can pick a <b class="asset-spot">' + this.fixmystreet.asset_item + '</b> from the map &raquo;');
+ construct_asset_name: function(id) {
+ if (id.split) {
+ var code = id.split("/").slice(-1)[0];
+ return {id: code, name: 'column'};
}
+ },
+ actions: {
+ asset_found: fixmystreet.assets.named_select_action_found,
+ asset_not_found: fixmystreet.assets.named_select_action_not_found
}
});
diff --git a/web/cobrands/isleofwight/_colours.scss b/web/cobrands/isleofwight/_colours.scss
index 688eb66e0..e1334bcb1 100644
--- a/web/cobrands/isleofwight/_colours.scss
+++ b/web/cobrands/isleofwight/_colours.scss
@@ -11,9 +11,11 @@ $green: #75c044;
//Any 20% tint of the above
-$primary_text: #fff;
$primary: $cyan;
$primary_b: #222;
+$primary_text: #fff;
+$primary_link_color: $primary_text;
+$primary_link_hover_color: rgba($primary_text, 0.8);
$base_bg: #fff;
$base_fg: #222;
@@ -29,3 +31,6 @@ $header-top-border: false;
$body-font: Helvetica, Arial, sans-serif;
$heading-font: $body-font;
$meta-font: $body-font;
+
+$search-help-background: #fff3f3;
+$search-help-header-font-size-desktop: 1.25em;
diff --git a/web/cobrands/isleofwight/assets.js b/web/cobrands/isleofwight/assets.js
index 2710a9de7..cedd2293c 100644
--- a/web/cobrands/isleofwight/assets.js
+++ b/web/cobrands/isleofwight/assets.js
@@ -31,41 +31,10 @@ var defaults = {
var pin_prefix = fixmystreet.pin_prefix || document.getElementById('js-map-data').getAttribute('data-pin_prefix');
-var labeled_default = {
- fillColor: "#FFFF00",
- fillOpacity: 0.6,
- strokeColor: "#000000",
- strokeOpacity: 0.8,
- strokeWidth: 2,
- pointRadius: 6
-};
-
-var labeled_select = {
- externalGraphic: pin_prefix + "pin-spot.png",
- fillColor: "#55BB00",
- graphicWidth: 48,
- graphicHeight: 64,
- graphicXOffset: -24,
- graphicYOffset: -56,
- backgroundGraphic: pin_prefix + "pin-shadow.png",
- backgroundWidth: 60,
- backgroundHeight: 30,
- backgroundXOffset: -7,
- backgroundYOffset: -22,
- popupYOffset: -40,
- graphicOpacity: 1.0,
-
- label: "${asset_id}",
- labelOutlineColor: "white",
- labelOutlineWidth: 3,
- labelYOffset: 65,
- fontSize: '15px',
- fontWeight: 'bold'
-};
-
var labeled_stylemap = new OpenLayers.StyleMap({
- 'default': new OpenLayers.Style(labeled_default),
- 'select': new OpenLayers.Style(labeled_select)
+ 'default': fixmystreet.assets.style_default,
+ 'hover': fixmystreet.assets.style_default_hover,
+ 'select': fixmystreet.assets.construct_named_select_style("${asset_id}")
});
fixmystreet.assets.add($.extend(true, {}, defaults, {
diff --git a/web/cobrands/lincolnshire/_colours.scss b/web/cobrands/lincolnshire/_colours.scss
index 8d8ad2bf4..8e80d374a 100644
--- a/web/cobrands/lincolnshire/_colours.scss
+++ b/web/cobrands/lincolnshire/_colours.scss
@@ -49,3 +49,9 @@ $menu-image: 'menu-black';
$front_main_background: white;
// $header-top-border: false;
+
+$search-help-alignment: left;
+$search-help-header-color: $lincs-pop;
+$search-help-header-background: transparent;
+$search-help-header-font-size-desktop: 1.25em;
+$search-help-margin-desktop: -2em -2em 0 -2em;
diff --git a/web/cobrands/northamptonshire/_colours.scss b/web/cobrands/northamptonshire/_colours.scss
index 17c7822fb..bb2e0a654 100644
--- a/web/cobrands/northamptonshire/_colours.scss
+++ b/web/cobrands/northamptonshire/_colours.scss
@@ -30,3 +30,7 @@ $header-top-border: false;
$heading-font: PraterSansWeb, sans-serif;
$body-font: "Open Sans", Arial, "Helvetica Neue", Helvetica, sans-serif;
$meta-font: $body-font;
+
+$search-help-background: #fff3f3;
+$search-help-header-font-size-desktop: 1.25em;
+$search-help-header-font-family: inherit;
diff --git a/web/cobrands/northamptonshire/assets.js b/web/cobrands/northamptonshire/assets.js
index 2b6cdeb69..b08f48850 100644
--- a/web/cobrands/northamptonshire/assets.js
+++ b/web/cobrands/northamptonshire/assets.js
@@ -4,226 +4,13 @@ if (!fixmystreet.maps) {
return;
}
-var is_live = !fixmystreet.staging;
+var base_url = fixmystreet.staging ?
+ "https://tilma.staging.mysociety.org/resource-proxy/proxy.php?https://northants.staging/${layerid}/${x}/${y}/${z}/cluster" :
+ "https://tilma.mysociety.org/resource-proxy/proxy.php?https://northants.assets/${layerid}/${x}/${y}/${z}/cluster";
+
+var url_with_style = base_url + '?styleIds=${styleid}';
var layers = [
- /*
-{
- "layer_name": "Street Lights",
- "layer": 5,
- "version": "5.4-9.6-"
-},
-{
- "layer_name": "Street Lighting Nightscape",
- "layer": 9,
- "version": "9.6-"
-},
-{
- "layer_name": "Carriageways",
- "layer": 20,
- "version": "20.54-"
-},
-{
- "layer_name": "Road Heirarchy",
- "layer": 39,
- "version": "39.53-"
-},
-{
- "layer_name": "Posts",
- "layer": 59,
- "version": "59.133-"
-},
-{
- "layer_name": "Grips",
- "layer": 61,
- "version": "61.1-"
-},
-{
- "layer_name": "Traffic Monitoring",
- "layer": 62,
- "version": "62.2-"
-},
-{
- "layer_name": "Special Treatment",
- "layer": 64,
- "version": "64.1-"
-},
-{
- "layer_name": "Gully",
- "layer": 66,
- "version": "66.9-"
-},
-{
- "layer_name": "Channel",
- "layer": 68,
- "version": "68.2-"
-},
-{
- "layer_name": "Comms Cabinet",
- "layer": 69,
- "version": "69.1-"
-},
-{
- "layer_name": "Steps",
- "layer": 70,
- "version": "70.1-"
-},
-{
- "layer_name": "Step Handrail",
- "layer": 71,
- "version": "71.1-"
-},
-{
- "layer_name": "Tree Group",
- "layer": 74,
- "version": "74.1-"
-},
-{
- "layer_name": "Defects Ancillary Items",
- "layer": 171,
- "version": "171.33-"
-},
-{
- "layer_name": "Speed Limit",
- "layer": 172,
- "version": "172.33-"
-},
-{
- "layer_name": "PRoW Network",
- "layer": 173,
- "version": "173.1-"
-},
-{
- "layer_name": "Footway Schemes",
- "layer": 174,
- "version": "174.1-"
-},
-{
- "layer_name": "FINGER POST",
- "layer": 178,
- "version": "178.39-"
-},
-{
- "layer_name": "GAPS",
- "layer": 179,
- "version": "179.1-"
-},
-{
- "layer_name": "OBSTRUCTIONS",
- "layer": 182,
- "version": "182.2-"
-},
-{
- "layer_name": "STEPS",
- "layer": 184,
- "version": "184.2-"
-},
-{
- "layer_name": "Gate Types",
- "layer": 191,
- "version": "191.2-"
-},
-{
- "layer_name": "Gate Condition",
- "layer": 192,
- "version": "192.2-"
-},
-{
- "layer_name": "Bridge Type",
- "layer": 193,
- "version": "193.17-"
-},
-{
- "layer_name": "Bridge Condition",
- "layer": 194,
- "version": "194.17-"
-},
-{
- "layer_name": "PRoW Net By Type",
- "layer": 201,
- "version": "201.1-"
-},
-{
- "layer_name": "Finger Post Condition",
- "layer": 209,
- "version": "209.39-"
-},
-{
- "layer_name": "F Post Path Type",
- "layer": 210,
- "version": "210.39-"
-},
-{
- "layer_name": "AW_Sewer",
- "layer": 215,
- "version": "215.1-"
-},
-{
- "layer_name": "CCTV",
- "layer": 218,
- "version": "218.1-"
-},
-{
- "layer_name": "VMS",
- "layer": 219,
- "version": "219.1-"
-},
-{
- "layer_name": "Warning Signs",
- "layer": 220,
- "version": "220.1-"
-},
-{
- "layer_name": "Traffic Calming",
- "layer": 221,
- "version": "221.1-"
-},
-{
- "layer_name": "Bluetooth Counter",
- "layer": 222,
- "version": "222.1-"
-},
-{
- "layer_name": "Midblock",
- "layer": 223,
- "version": "223.1-"
-},
-{
- "layer_name": "Over Height",
- "layer": 224,
- "version": "224.1-"
-},
-{
- "layer_name": "RTI Display",
- "layer": 226,
- "version": "226.1-"
-},
-{
- "layer_name": "System Links",
- "layer": 227,
- "version": "227.1-"
-},
-{
- "layer_name": "CULVERTS (PRoW)",
- "layer": 229,
- "version": "229.1-"
-},
-{
- "layer_name": "PEDESTRIAN GUARDRAIL",
- "layer": 230,
- "version": "230.1-"
-},
-{
- "layer_name": "Traffic Signal Controller",
- "layer": 231,
- "version": "231.1-"
-},
-{
- "layer_name": "Traffic Signal Posts",
- "layer": 232,
- "version": "232.1-"
-},
- */
{
"categories": [
"Loose / Raised/Sunken",
@@ -234,119 +21,80 @@ var layers = [
],
"item_name": "drain",
"layer_name": "Gully",
- "layer": 66,
- "version": "66.80-",
+ "styleid": '5d480b8ffe2ad809d85a78ff',
"max_resolution": 0.5971642833948135
},
{
"categories": [ "Grit Bin - damaged/replacement", "Grit Bin - empty/refill" ],
"item_name": "grit bin",
"layer_name": "Grit Bins",
- "layer": 13,
- "version": "13.7-"
+ "styleid": '5d480942fe2ad809d85a78ad',
},
{
"categories": [ "Highway Bridges - Damaged/Unsafe" ],
"asset_type": 'area',
"item_name": 'bridge',
"layer_name": "Structures",
- "layer": 14,
- "version": "14.7-"
+ "styleid": '5d4809fffe2ad8059ce44bbe',
},
{
"categories": [ "Damaged / Missing / Facing Wrong Way", "Obscured by vegetation or Dirty" ],
"item_name": "sign",
"layer_name": "Signs",
- "layer": is_live ? 60 : 303,
- "version": is_live ? "60.2172-" : "303.1-"
+ "styleid": '5d480a8ffe2ad809d85a78d3',
},
{
"categories": [ "Shelter Damaged", "Sign/Pole Damaged" ],
"layer_name": "Bus Stop",
- "layer": 72,
- "version": "72.14-"
+ "styleid": '5d4812dffe2ad809d85a7a72',
},
{
+ "categories": [
+ "Fallen Tree",
+ "Restricted Visibility / Overgrown / Overhanging",
+ "Restricted Visibility"
+ ],
+ "layer_name": "Tree",
+ "styleid": '5d481376fe2ad8059ce44ef2',
+},
+{
+ "categories": [ "Safety Bollard - Damaged/Missing" ],
+ "layer_name": "Safety Bollard",
+ "styleid": "5d481446fe2ad8059ce44f02",
+},
+];
+
+var prow_assets = [
+{
"categories": [ "Bridge-Damaged/ Missing" ],
"item_name": "bridge or right of way",
"layer_name": "BRIDGES",
- "layer": 177,
- "version": "177.40-"
+ "styleid": "5d48161ffe2ad809d85a7add"
},
{
"categories": [ "Gate - Damaged/ Missing" ],
"item_name": "gate or right of way",
"layer_name": "GATE",
- "layer": 181,
- "version": "181.14-"
+ "styleid": "5d481906fe2ad8059ce450b4",
},
{
"categories": [ "Stile-Damaged/Missing" ],
"item_name": "stile or right of way",
"layer_name": "STILE",
- "layer": 185,
- "version": "185.10-"
+ "styleid": "5d481a05fe2ad8059ce45121",
},
{
"categories": [ "Sign/Waymarking - Damaged/Missing" ],
"item_name": "waymarking or right of way",
"layer_name": "WAYMARK POST",
- "layer": 187,
- "version": "187.10-"
-},
-{
- "categories": [
- "Damaged/Exposed Wiring / Vandalised",
- "Lamp/Bulb Failure",
- "Signal Failure",
- "Signal Failure all out",
- "Signal Stuck",
- "Signal Head Failure",
- "Request Timing Review",
- "Damaged Control box",
- "Signal Failure/Damaged - Toucan/Pelican"
- ],
- "item_name": "signal or crossing",
- "layer_name": "Midblock",
- "layer": 223,
- "version": "223.2-"
-},
-{
- "categories": [
- "Damaged/Exposed Wiring / Vandalised",
- "Lamp/Bulb Failure",
- "Signal Failure",
- "Signal Failure all out",
- "Signal Stuck",
- "Signal Head Failure",
- "Request Timing Review",
- "Damaged Control box",
- "Signal Failure/Damaged - Toucan/Pelican"
- ],
- "item_name": "signal or crossing",
- "layer_name": "TL Junction",
- "layer": 225,
- "version": "225.5-"
-},
-{
- "categories": [
- "Fallen Tree",
- "Restricted Visibility / Overgrown / Overhanging",
- "Restricted Visibility"
- ],
- "layer_name": "Tree",
- "layer": 307,
- "version": "307.7-",
- "snap_threshold": 0,
-},
-{
- "categories": [ "Safety Bollard - Damaged/Missing" ],
- "layer_name": "Safety Bollard",
- "layer": 233,
- "version": "233.28-"
+ "styleid": "5d481a4ffe2ad809d85a7b90&styleIds=5d481742fe2ad809d85a7b05"
},
];
+var highway_layer = 'layers_highwayAssetsCustom_5d4806b0fe2ad809d85a774f';
+var prow_asset_layer = 'layers_pRoWAssets_5d48157cfe2ad809d85a7abc';
+var signal_asset_layer = 'layers_nETCOM_5d483dd7fe2ad809d85a8fab';
+
// This is required so that the found/not found actions are fired on category
// select and pin move rather than just on asset select/not select.
OpenLayers.Layer.NCCVectorAsset = OpenLayers.Class(OpenLayers.Layer.VectorAsset, {
@@ -385,11 +133,12 @@ OpenLayers.Layer.NCCVectorNearest = OpenLayers.Class(OpenLayers.Layer.VectorNear
// default options for northants assets include
// a) checking for multiple assets in same location
// b) preventing submission unless an asset is selected
-var northants_defaults = $.extend(true, {}, fixmystreet.alloy_defaults, {
+var northants_defaults = $.extend(true, {}, fixmystreet.alloyv2_defaults, {
class: OpenLayers.Layer.NCCVectorAsset,
- protocol_class: OpenLayers.Protocol.Alloy,
+ protocol_class: OpenLayers.Protocol.AlloyV2,
http_options: {
- environment: is_live ? 26 : 28
+ base: url_with_style,
+ layerid: highway_layer
},
non_interactive: false,
body: "Northamptonshire County Council",
@@ -439,34 +188,49 @@ var northants_defaults = $.extend(true, {}, fixmystreet.alloy_defaults, {
}
});
-$.each(layers, function(index, layer) {
- if ( layer.categories ) {
- var options = {
- http_options: {
- layerid: layer.layer,
- layerVersion: layer.version,
- },
- asset_type: layer.asset_type || 'spot',
- asset_category: layer.categories,
- asset_item: layer.item_name || layer.layer_name.toLowerCase(),
- };
- if (layer.max_resolution) {
- options.max_resolution = layer.max_resolution;
- }
- if (layer.snap_threshold || layer.snap_threshold === 0) {
- options.snap_threshold = layer.snap_threshold;
- }
- fixmystreet.assets.add(northants_defaults, options);
- }
+fixmystreet.alloy_add_layers(northants_defaults, layers);
+
+var prow_defaults = $.extend(true, {}, northants_defaults, {
+ http_options: {
+ layerid: prow_asset_layer
+ }
+});
+
+fixmystreet.alloy_add_layers(prow_defaults, prow_assets);
+
+var signals_defaults = $.extend(true, {}, northants_defaults, {
+ http_options: {
+ layerid: signal_asset_layer
+ }
+});
+
+
+fixmystreet.assets.add(signals_defaults, {
+ http_options: {
+ layer_id: signal_asset_layer,
+ styleid: "5d484093fe2ad809d85a9139&styleIds=5d483f6cfe2ad8059ce464de",
+ },
+ asset_category: [
+ "Damaged/Exposed Wiring / Vandalised",
+ "Lamp/Bulb Failure",
+ "Signal Failure",
+ "Signal Failure all out",
+ "Signal Stuck",
+ "Signal Head Failure",
+ "Request Timing Review",
+ "Damaged Control box",
+ "Signal Failure/Damaged - Toucan/Pelican"
+ ],
+ asset_item: "signal or crossing"
});
// NCC roads layers which prevent report submission unless we have selected
// an asset.
-var northants_road_defaults = $.extend(true, {}, fixmystreet.alloy_defaults, {
- class: OpenLayers.Layer.NCCVectorNearest,
- protocol_class: OpenLayers.Protocol.Alloy,
+var northants_road_defaults = $.extend(true, {}, fixmystreet.alloyv2_defaults, {
+ protocol_class: OpenLayers.Protocol.AlloyV2,
http_options: {
- environment: is_live ? 26 : 28
+ base: url_with_style,
+ layerid: highway_layer
},
body: "Northamptonshire County Council",
road: true,
@@ -488,8 +252,8 @@ var northants_road_defaults = $.extend(true, {}, fixmystreet.alloy_defaults, {
fixmystreet.assets.add(northants_road_defaults, {
http_options: {
- layerid: 221,
- layerVersion: '221.4-',
+ // Traffic Calming
+ styleid: "5d481403fe2ad8059ce44efd",
},
no_asset_msg_id: '#js-not-an-asset',
asset_item: 'speed hump',
@@ -507,9 +271,9 @@ var barrier_style = new OpenLayers.Style({
});
fixmystreet.assets.add(northants_road_defaults, {
+ // Pedestrian Guardrail
http_options: {
- layerid: is_live ? 1068 : 230,
- layerVersion: is_live ? '1068.1-' : '230.4-',
+ styleid: "5d4813c1fe2ad8059ce44ef6",
},
stylemap: new OpenLayers.StyleMap({
'default': barrier_style
@@ -530,10 +294,10 @@ var highways_style = new OpenLayers.Style({
});
fixmystreet.assets.add(northants_road_defaults, {
- protocol_class: OpenLayers.Protocol.Alloy,
+ protocol_class: OpenLayers.Protocol.AlloyV2,
+ // Carriageways
http_options: {
- layerid: 20,
- layerVersion: '20.249-',
+ styleid: "5d480710fe2ad8059ce44a1d",
},
stylemap: new OpenLayers.StyleMap({
'default': highways_style
@@ -569,20 +333,20 @@ fixmystreet.assets.add(northants_road_defaults, {
function ncc_match_prow_type(f, styleId) {
return f &&
f.attributes &&
- f.attributes.layerStyleId &&
- f.attributes.layerStyleId == styleId;
+ f.attributes.styleId &&
+ f.attributes.styleId == styleId;
}
function ncc_prow_is_fp(f) {
- return ncc_match_prow_type(f, is_live ? 6190 : 1454);
+ return ncc_match_prow_type(f, '5d483b84fe2ad809d85a8dab' );
}
function ncc_prow_is_bw(f) {
- return ncc_match_prow_type(f, is_live ? 6192 : 1453);
+ return ncc_match_prow_type(f, '5d483b84fe2ad809d85a8dac');
}
function ncc_prow_is_boat(f) {
- return ncc_match_prow_type(f, is_live ? 6193: 1455);
+ return ncc_match_prow_type(f, '5d483b84fe2ad809d85a8dad');
}
var rule_footpath = new OpenLayers.Rule({
@@ -624,8 +388,9 @@ prow_style.addRules([rule_footpath, rule_boat, rule_bridleway]);
fixmystreet.assets.add(northants_road_defaults, {
http_options: {
- layerid: is_live ? 1110 : 310,
- layerVersion: is_live ? '1110.1-' : '310.1-',
+ // PRoW Network
+ base: base_url,
+ layerid: 'layers_pRoWType_5d483b2ffe2ad809d85a8d9a'
},
stylemap: new OpenLayers.StyleMap({
'default': prow_style
diff --git a/web/cobrands/oxfordshire/_colours.scss b/web/cobrands/oxfordshire/_colours.scss
index 7ef941660..535b3757a 100644
--- a/web/cobrands/oxfordshire/_colours.scss
+++ b/web/cobrands/oxfordshire/_colours.scss
@@ -14,6 +14,7 @@ $color-oxfordshire-link-blue: #0a549d;
$primary: $color-oxfordshire-bright-green;
$primary_b: $color-oxfordshire-dark-green;
$primary_text: #fff;
+$primary_link_decoration: none;
$link-color: $color-oxfordshire-link-blue;
$link-hover-color: $color-oxfordshire-bright-yellow;
@@ -41,3 +42,7 @@ $header-top-border: false;
$form-control-border-color: #525252;
$pin_prefix: '/cobrands/oxfordshire/images/';
+
+$search-help-alignment: left;
+$search-help-background: #fff3f3;
+$search-help-margin-desktop: -2em 0 0 0; \ No newline at end of file
diff --git a/web/cobrands/oxfordshire/assets.js b/web/cobrands/oxfordshire/assets.js
new file mode 100644
index 000000000..1e00bccc4
--- /dev/null
+++ b/web/cobrands/oxfordshire/assets.js
@@ -0,0 +1,257 @@
+(function(){
+
+if (!fixmystreet.maps) {
+ return;
+}
+
+var wfs_host = fixmystreet.staging ? 'tilma.staging.mysociety.org' : 'tilma.mysociety.org';
+var tilma_url = "https://" + wfs_host + "/mapserver/oxfordshire";
+var proxy_base_url = "https://" + wfs_host + "/proxy/occ/";
+
+var defaults = {
+ wfs_url: tilma_url,
+ asset_type: 'spot',
+ max_resolution: 4.777314267158508,
+ geometryName: 'msGeometry',
+ srsName: "EPSG:3857",
+ body: "Oxfordshire County Council",
+ strategy_class: OpenLayers.Strategy.FixMyStreet
+};
+
+var occ_default = $.extend({}, fixmystreet.assets.style_default.defaultStyle, {
+ fillColor: "#007258"
+});
+
+var occ_hover = new OpenLayers.Style({
+ pointRadius: 8,
+ cursor: 'pointer'
+});
+
+var occ_stylemap = new OpenLayers.StyleMap({
+ 'default': occ_default,
+ 'select': fixmystreet.assets.style_default_select,
+ 'hover': occ_hover
+});
+
+var occ_ownernames = [
+ "LocalAuthority", "CountyCouncil", 'ODS'
+];
+
+function occ_owns_feature(f) {
+ return f &&
+ f.attributes &&
+ f.attributes.maintained_by &&
+ OpenLayers.Util.indexOf(occ_ownernames, f.attributes.maintained_by) > -1;
+}
+
+function occ_does_not_own_feature(f) {
+ return !occ_owns_feature(f);
+}
+
+var owned_default_style = new OpenLayers.Style({
+ fillColor: "#868686",
+ fillOpacity: 0.6,
+ strokeColor: "#000000",
+ strokeOpacity: 0.6,
+ strokeWidth: 2,
+ pointRadius: 4,
+ title: 'Not maintained by Oxfordshire County Council. Maintained by ${maintained_by}.'
+});
+
+var rule_owned = new OpenLayers.Rule({
+ filter: new OpenLayers.Filter.FeatureId({
+ type: OpenLayers.Filter.Function,
+ evaluate: occ_owns_feature
+ }),
+ symbolizer: {
+ fillColor: "#007258",
+ pointRadius: 6,
+ title: ''
+ }
+});
+
+var rule_not_owned = new OpenLayers.Rule({
+ filter: new OpenLayers.Filter.FeatureId({
+ type: OpenLayers.Filter.Function,
+ evaluate: occ_does_not_own_feature
+ })
+});
+
+owned_default_style.addRules([rule_owned, rule_not_owned]);
+
+var owned_stylemap = new OpenLayers.StyleMap({
+ 'default': owned_default_style,
+ 'select': fixmystreet.assets.style_default_select,
+ 'hover': occ_hover
+});
+
+fixmystreet.assets.add(defaults, {
+ stylemap: occ_stylemap,
+ wfs_feature: "Trees",
+ asset_id_field: 'Ref',
+ attributes: {
+ feature_id: 'Ref'
+ },
+ asset_category: ["Trees"],
+ asset_item: 'tree'
+});
+
+fixmystreet.assets.add(defaults, {
+ select_action: true,
+ stylemap: occ_stylemap,
+ wfs_feature: "Traffic_Lights",
+ asset_id_field: 'Site',
+ attributes: {
+ feature_id: 'Site'
+ },
+ asset_category: ["Traffic Lights (permanent only)"],
+ asset_item: 'traffic light',
+ feature_code: 'Site',
+ actions: {
+ asset_found: fixmystreet.assets.named_select_action_found,
+ asset_not_found: fixmystreet.assets.named_select_action_not_found
+ }
+});
+
+var streetlight_select = $.extend({
+ label: "${UNITNO}",
+ fontColor: "#FFD800",
+ labelOutlineColor: "black",
+ labelOutlineWidth: 3,
+ labelYOffset: 69,
+ fontSize: '18px',
+ fontWeight: 'bold'
+}, fixmystreet.assets.style_default_select.defaultStyle);
+
+var streetlight_stylemap = new OpenLayers.StyleMap({
+ 'default': occ_default,
+ 'select': new OpenLayers.Style(streetlight_select),
+ 'hover': occ_hover
+});
+
+fixmystreet.assets.add(defaults, {
+ select_action: true,
+ stylemap: streetlight_stylemap,
+ wfs_feature: "Street_Lights",
+ asset_id_field: 'UNITID',
+ attributes: {
+ feature_id: 'UNITID',
+ column_no: 'UNITNO'
+ },
+ asset_category: ["Street lighting"],
+ asset_item: 'street light',
+ feature_code: 'UNITNO',
+ actions: {
+ asset_found: fixmystreet.assets.named_select_action_found,
+ asset_not_found: fixmystreet.assets.named_select_action_not_found
+ }
+});
+
+var owned_defaults = $.extend({}, defaults, {
+ stylemap: owned_stylemap,
+ select_action: true,
+ // have to do this by hand rather than using wfs_* options
+ // as the server does not like being POSTed xml with application/xml
+ // as the Content-Type which is what using those options results in.
+ http_options: {
+ headers: {
+ 'Content-Type': 'text/plain'
+ },
+ params: {
+ SERVICE: "WFS",
+ VERSION: "1.1.0",
+ REQUEST: "GetFeature",
+ SRSNAME: "urn:ogc:def:crs:EPSG::27700",
+ propertyName: 'id,maintained_by,msGeometry'
+ }
+ },
+ srsName: "EPSG:27700",
+ asset_id_field: 'id',
+ attributes: {
+ feature_id: 'id'
+ },
+ actions: {
+ asset_found: function(asset) {
+ var is_occ = occ_owns_feature(asset);
+ if (!is_occ) {
+ fixmystreet.message_controller.asset_not_found.call(this);
+ } else {
+ fixmystreet.message_controller.asset_found.call(this);
+ }
+ },
+ // Not a typo, asset selection is not mandatory
+ asset_not_found: fixmystreet.message_controller.asset_found
+ }
+});
+
+fixmystreet.assets.add(owned_defaults, {
+ http_options: {
+ url: proxy_base_url + 'drains/wfs',
+ params: {
+ TYPENAME: "junctions"
+ }
+ },
+ asset_category: ["Gully and Catchpits", 'Drainage'],
+ asset_item: 'drain'
+});
+
+fixmystreet.assets.add(owned_defaults, {
+ http_options: {
+ url: proxy_base_url + 'grit/wfs',
+ params: {
+ TYPENAME: "Grit_bins"
+ }
+ },
+ asset_category: ["Ice/Snow"],
+ asset_item: 'grit bin'
+});
+
+var road_occ_maintainable = 'Maintainable at Public Expense';
+
+function road_owned(f) {
+ return f &&
+ f.attributes &&
+ f.attributes.STREET_MAINTENANCE_RESPONSIBILITY_NAME &&
+ f.attributes.STREET_MAINTENANCE_RESPONSIBILITY_NAME.lastIndexOf(road_occ_maintainable, 0) === 0;
+}
+
+fixmystreet.assets.add(defaults, {
+ stylemap: fixmystreet.assets.stylemap_invisible,
+ wfs_feature: "OCCRoads",
+ propertyNames: ['TYPE1_2_USRN', 'STREET_MAINTENANCE_RESPONSIBILITY_NAME', 'msGeometry'],
+ srsName: "EPSG:27700",
+ usrn: {
+ attribute: 'TYPE1_2_USRN',
+ field: 'usrn'
+ },
+ non_interactive: true,
+ road: true,
+ no_asset_msg_id: '#js-not-a-road',
+ asset_item: 'road',
+ asset_type: 'road',
+ actions: {
+ found: function(layer, feature) {
+ fixmystreet.message_controller.road_found(layer, feature, road_owned, '#js-not-a-road');
+ },
+ not_found: fixmystreet.message_controller.road_not_found
+ },
+ asset_category: [
+ "Bridges",
+ "Carriageway Defect",
+ "Current Roadworks",
+ "Drainage",
+ "Gully and Catchpits",
+ "Highway Schemes",
+ "Ice/Snow",
+ "Manhole",
+ "Pavements",
+ "Pothole",
+ "Road Traffic Signs and Road Markings",
+ "Roads/highways",
+ "Street lighting",
+ "Traffic Lights (permanent only)",
+ "Trees"
+ ]
+});
+
+})();
diff --git a/web/cobrands/oxfordshire/base.scss b/web/cobrands/oxfordshire/base.scss
index 999321a7e..243e6aa52 100644
--- a/web/cobrands/oxfordshire/base.scss
+++ b/web/cobrands/oxfordshire/base.scss
@@ -99,29 +99,15 @@ a:not([class]):focus {
}
}
}
+}
- a#geolocate_link {
- padding: 0;
- background: transparent;
- font-size: inherit;
- color: $link-color;
- margin-top: 0.5em;
-
- &:hover {
- background-color: transparent;
- color: $link-hover-color;
- }
+a#geolocate_link {
+ padding: 0;
+ margin-top: 0.5em;
- &:focus {
- background-color: $color-oxfordshire-bright-yellow;
- outline: 2px solid $color-oxfordshire-bright-yellow;
- }
-
- &.loading {
- background: transparent url("/cobrands/fixmystreet/images/spinner-white.gif") 100% 50% no-repeat;
- padding: 0 1.5em 0 0;
- border: none;
- }
+ &.loading {
+ background: transparent url("/cobrands/fixmystreet/images/spinner-white.gif") 100% 50% no-repeat;
+ padding: 0 1.5em 0 0;
}
}
@@ -155,6 +141,13 @@ ol.big-numbers {
margin-bottom: 1em;
padding-bottom: 5px;
}
+
+ // Overloaded selector, to override `.content h2`
+ h2.search-help__header {
+ margin-bottom: 0;
+ padding-bottom: 1rem;
+ font-size: 1em;
+ }
}
dd, p {
@@ -166,16 +159,8 @@ dd, p {
padding: 1em;
margin: 0 -1em -1em -1em; // counteract 1em padding on sidebar without using .full-width which sets an explicit width
- h3 {
- font-weight: bold;
- font-size: 1em;
- margin: 0 0 0.5em 0;
- }
-
p {
- color: #666;
margin: 0 0 0.5em 0;
- font-size: 0.9em;
}
& > :last-child {
@@ -293,6 +278,10 @@ textarea {
color: $color-oxfordshire-link-blue;
}
+.asset-spot:before {
+ background-color: #007258;
+}
+
@media print {
body {
background-color: #fff !important;
diff --git a/web/cobrands/oxfordshire/layout.scss b/web/cobrands/oxfordshire/layout.scss
index 1b415903a..e6490910f 100644
--- a/web/cobrands/oxfordshire/layout.scss
+++ b/web/cobrands/oxfordshire/layout.scss
@@ -130,25 +130,17 @@ $mappage-header-height: 10em;
}
}
}
-
- a#geolocate_link {
- color: $color-oxfordshire-link-blue;
-
- &:hover {
- color: $color-oxfordshire-bright-yellow;
- }
-
- &:focus {
- background-color: $color-oxfordshire-bright-yellow;
- outline: 2px solid $color-oxfordshire-bright-yellow;
- }
- }
}
.frontpage {
.content h2 {
font-size: 2em;
}
+
+ // Overloaded selector, to override `.content h2`
+ h2.search-help__header {
+ font-size: 20px;
+ }
}
#front_stats {
diff --git a/web/cobrands/peterborough/_colours.scss b/web/cobrands/peterborough/_colours.scss
index 8211d8835..9b2a0b6bb 100644
--- a/web/cobrands/peterborough/_colours.scss
+++ b/web/cobrands/peterborough/_colours.scss
@@ -44,3 +44,9 @@ $roboto: 'Roboto', Arial, sans-serif;
$heading-font: $roboto;
$body-font: $roboto;
$meta-font: $roboto;
+
+$search-help-alignment: left;
+$search-help-background: #fff3f3;
+$search-help-margin: 1em -1em 0 -1em;
+$search-help-margin-desktop: -2em -1em 0 -1em;
+$search-help-header-font-size-desktop: 1.25em;
diff --git a/web/cobrands/peterborough/assets.js b/web/cobrands/peterborough/assets.js
index b3cac5f6c..9470ea26f 100644
--- a/web/cobrands/peterborough/assets.js
+++ b/web/cobrands/peterborough/assets.js
@@ -51,6 +51,7 @@ OpenLayers.Layer.PeterboroughVectorAsset = OpenLayers.Class(OpenLayers.Layer.Vec
});
var NEW_TREE_CATEGORY_NAME = 'Request for tree to be planted';
+var UNKNOWN_LIGHT_CATEGORY_NAME = 'Problem with a light not shown on map';
var trees_defaults = $.extend(true, {}, defaults, {
class: OpenLayers.Layer.PeterboroughVectorAsset,
@@ -106,4 +107,98 @@ fixmystreet.assets.add(defaults, {
asset_item_message: ''
});
+var streetlight_stylemap = new OpenLayers.StyleMap({
+ 'default': fixmystreet.assets.style_default,
+ 'hover': fixmystreet.assets.style_default_hover,
+ 'select': fixmystreet.assets.construct_named_select_style("${UNITNO}")
+});
+
+var light_defaults = $.extend(true, {}, defaults, {
+ http_options: {
+ params: {
+ TYPENAME: "StreetLights"
+ }
+ },
+ asset_id_field: 'UNITID',
+ asset_type: 'spot',
+ asset_item: 'light'
+});
+
+fixmystreet.assets.add(light_defaults, {
+ class: OpenLayers.Layer.PeterboroughVectorAsset,
+ stylemap: streetlight_stylemap,
+ feature_code: 'UNITNO',
+ attributes: {
+ asset_details: function() {
+ var a = this.attributes;
+ return "street: " + a.FULLSTREET + "\n" +
+ "locality: " + a.LOCALITY + "\n" +
+ "unitno: " + a.UNITNO + "\n" +
+ "unitid: " + a.UNITID;
+ }
+ },
+ asset_group: 'Street lighting',
+ asset_category: 'Lighting enquiry',
+ relevant: function(options) {
+ return ( options.group === 'Street lighting' &&
+ options.category !== UNKNOWN_LIGHT_CATEGORY_NAME
+ ) || options.category === "Lighting enquiry";
+ },
+ select_action: true,
+ actions: {
+ asset_found: function(asset) {
+ fixmystreet.message_controller.asset_found.call(this, asset);
+ fixmystreet.assets.named_select_action_found.call(this, asset);
+ },
+ asset_not_found: function() {
+ fixmystreet.message_controller.asset_not_found.call(this);
+ fixmystreet.assets.named_select_action_not_found.call(this);
+ }
+ }
+});
+
+fixmystreet.assets.add(light_defaults, {
+ asset_category: UNKNOWN_LIGHT_CATEGORY_NAME,
+ disable_pin_snapping: true,
+ asset_item_message: ''
+});
+
+var bin_defaults = $.extend(true, {}, defaults, {
+ class: OpenLayers.Layer.PeterboroughVectorAsset,
+ select_action: true,
+ actions: {
+ asset_found: fixmystreet.message_controller.asset_found,
+ asset_not_found: fixmystreet.message_controller.asset_not_found
+ },
+ attributes: {
+ asset_details: function() {
+ var a = this.attributes;
+ return a.Reference + ", " + a.Location;
+ },
+ central_asset_id: 'OBJECTID'
+ },
+ asset_id_field: 'OBJECTID',
+ asset_type: 'spot'
+});
+
+fixmystreet.assets.add(bin_defaults, {
+ http_options: {
+ params: {
+ TYPENAME: 'LitterBins'
+ }
+ },
+ asset_category: 'Litter bin',
+ asset_item: 'litter bin'
+});
+
+fixmystreet.assets.add(bin_defaults, {
+ http_options: {
+ params: {
+ TYPENAME: 'DogBins'
+ }
+ },
+ asset_category: 'Dog bin',
+ asset_item: 'dog waste bin'
+});
+
})();
diff --git a/web/cobrands/peterborough/base.scss b/web/cobrands/peterborough/base.scss
index 67e199cca..9039cfd87 100644
--- a/web/cobrands/peterborough/base.scss
+++ b/web/cobrands/peterborough/base.scss
@@ -45,6 +45,7 @@ h1, h2 {
}
#postcodeForm {
background-color: #fff;
+ padding-bottom: 0;
div input#sub {
background-color: $link-color;
}
@@ -53,17 +54,6 @@ h1, h2 {
.form-hint {
color: $primary_b;
}
- a#geolocate_link {
- background-color: transparent;
- padding: 0;
- color: $link-color;
- &:hover,
- &:active,
- &:focus {
- background-color: transparent;
- text-decoration: underline
- }
- }
}
.btn-primary,
@@ -88,20 +78,6 @@ h1, h2 {
font-weight: 700;
}
-a,
-.fake-link {
- color: $link-color;
-
- &:visited {
- color: $link-visited-color;
- }
-
- &:hover,
- &:active {
- color: $link-hover-color;
- }
-}
-
.dz-clickable .dz-message u {
color: $link-color;
}
diff --git a/web/cobrands/peterborough/layout.scss b/web/cobrands/peterborough/layout.scss
index 62486ab35..de5c5f9a9 100644
--- a/web/cobrands/peterborough/layout.scss
+++ b/web/cobrands/peterborough/layout.scss
@@ -29,14 +29,6 @@ body.frontpage #front-main {
font-weight: normal;
font-size: 1.5em;
}
- a#geolocate_link {
- color: $link-color;
- &:hover,
- &:active,
- &:focus {
- color: $link-hover-color;
- }
- }
}
#postcodeForm .form-hint {
diff --git a/web/cobrands/rutland/_colours.scss b/web/cobrands/rutland/_colours.scss
index aabedb0f1..e81ce2554 100755
--- a/web/cobrands/rutland/_colours.scss
+++ b/web/cobrands/rutland/_colours.scss
@@ -14,6 +14,8 @@ $RCCbg: #F1F1F1;
$primary: $RCCGreen;
$primary_b: #000000;
$primary_text: #222222;
+$primary_link_color: $primary_text;
+$primary_link_hover_color: rgba($primary_text, 0.8);
$base_bg: $RCCbg;
$base_fg: #000;
diff --git a/web/cobrands/sass/_admin.scss b/web/cobrands/sass/_admin.scss
index 4ae019776..e78820ae9 100644
--- a/web/cobrands/sass/_admin.scss
+++ b/web/cobrands/sass/_admin.scss
@@ -43,22 +43,6 @@ $button_bg_col: #a1a1a1; // also search bar (tables)
text-align: center;
font-weight: bold;
}
- tr.filter-row td {
- display: none; /* TODO: reveal when filtering is implemented */
- padding: flip(4px 4px 4px 40px, 4px 40px 4px 4px);
- background-color: $button_bg_col;
- background-image: url('/cobrands/zurich/search-icon-white.png');
- background-position: flip(14px, right) center;
- background-repeat: no-repeat;
- border-bottom: 2px solid $table_border_color;
- }
- tr.filter-row td input[type=text] {
- background-color: #e1e1e1;
- width: 16em;
- @include border-radius(4px);
- border: none;
- padding: 3px 0.5em;
- }
tr.is-deleted {
background-color: #ffdddd;
img {
diff --git a/web/cobrands/sass/_base.scss b/web/cobrands/sass/_base.scss
index b52b75f43..b5830ebfd 100644
--- a/web/cobrands/sass/_base.scss
+++ b/web/cobrands/sass/_base.scss
@@ -11,6 +11,9 @@ $link-visited-color: $link-color !default;
$link-text-decoration: none !default;
$link-hover-text-decoration: underline !default;
+$primary_link_decoration: underline !default;
+$primary_link_hover_decoration: $primary_link_decoration !default;
+
$itemlist_item_background: #f6f6f6 !default;
$itemlist_item_background_hover: #e6e6e6 !default;
$col_big_numbers: #666 !default;
@@ -310,6 +313,9 @@ legend,
box-shadow: none;
color: #888888;
}
+ &[disabled] {
+ background-color: #eee;
+ }
}
select.form-control {
@@ -1966,6 +1972,15 @@ html.js #map .noscript {
}
}
+#change_asset_mobile {
+ position: absolute;
+ bottom: 3em;
+ #{$left}: 0.25em;
+ padding: 0.25em;
+ color: #fff;
+ background-color: black;
+}
+
.olControlAttribution {
bottom: 3.25em !important;
#{$right}: 0.25em !important;
@@ -2181,6 +2196,10 @@ label .muted {
margin-bottom: 0.5em;
}
+ dd:last-child {
+ margin-bottom: 0;
+ }
+
.btn, .btn-primary {
margin: 0.5em 0 1em 0;
@@ -2373,26 +2392,19 @@ label .muted {
}
}
}
- a#geolocate_link {
- @include inline-block;
- vertical-align:top;
- background:#1a1a1a;
- color:#C8C8C8;
- padding:0.5em;
- font-family: $meta-font;
- font-size: 0.8125em;
- @include border-radius(0 0 0.25em 0.25em);
+ a {
+ text-decoration: $primary_link_decoration;
&:hover {
- text-decoration:none;
- background:#2a2a2a;
+ text-decoration: $primary_link_hover_decoration;
}
}
- a#geolocate_link.loading {
- background: #1a1a1a url("/cobrands/fixmystreet/images/spinner-black.gif") flip(100%,0) 50% no-repeat;
- border-#{$right}: solid 0.5em #1a1a1a;
- padding-#{$right}: 1.5em;
- }
}
+
+a#geolocate_link {
+ display: inline-block;
+ padding: 0.5em;
+}
+
.no-js #geolocate_link {
display: none !important;
}
@@ -2817,3 +2829,4 @@ $nicetable-hover-background: rgba($primary, 0.15) !default;
@import "_autocomplete";
@import "_dashboard";
@import "_top-banner";
+@import "_search-help";
diff --git a/web/cobrands/sass/_layout.scss b/web/cobrands/sass/_layout.scss
index 02ded6fc1..8b3406d9d 100644
--- a/web/cobrands/sass/_layout.scss
+++ b/web/cobrands/sass/_layout.scss
@@ -13,6 +13,9 @@ $header-top-border: $header-top-border-width solid $primary !default;
$container-max-width: 60em !default;
+$primary_link_color: null !default;
+$primary_link_hover_color: null !default;
+
.internal-link-fixed-header {
display: block;
position: relative;
@@ -854,25 +857,11 @@ textarea.form-error {
}
}
a {
- color: inherit;
- text-decoration: underline;
- &:hover {
- text-decoration: none;
- }
- }
- a#geolocate_link {
- color: inherit;
- background:none;
- text-decoration: none;
- padding-bottom: 0;
+ color: $primary_link_color;
&:hover {
- text-decoration:underline;
- background:none;
+ color: $primary_link_hover_color;
}
}
- a#geolocate_link.loading {
- border-#{$right}: none;
- }
}
#front-howto {
diff --git a/web/cobrands/sass/_search-help.scss b/web/cobrands/sass/_search-help.scss
new file mode 100644
index 000000000..43bbf5a9e
--- /dev/null
+++ b/web/cobrands/sass/_search-help.scss
@@ -0,0 +1,78 @@
+$search-help-alignment: center !default;
+$search-help-background: transparent !default;
+$search-help-color: inherit !default;
+$search-help-margin: -1em -1em 0 -1em !default; // overlap .container padding
+$search-help-margin-desktop: -1em -1em -2em -1em !default; // overlap .content and .tablewrapper padding-bottoms
+$search-help-header-background: #DB3914 !default;
+$search-help-header-color: #fff !default;
+$search-help-header-font-weight: bold !default;
+$search-help-header-font-size: 1em !default;
+$search-help-header-font-size-desktop: $search-help-header-font-size !default;
+$search-help-header-font-family: null !default;
+
+.search-help {
+ margin: $search-help-margin;
+ background: $search-help-background;
+ color: $search-help-color;
+
+ // Override greedy `.tablewrapper > div` styles
+ .tablewrapper > & {
+ display: block;
+ width: auto;
+ }
+
+ @media (min-width: 48em) {
+ margin: $search-help-margin-desktop;
+ }
+}
+
+.search-help__header {
+ margin: 0;
+ text-align: $search-help-alignment;
+ background: $search-help-header-background;
+ color: $search-help-header-color;
+ font-family: $search-help-header-font-family;
+ font-weight: $search-help-header-font-weight;
+ font-size: $search-help-header-font-size;
+ padding: 1em; // IE8
+ padding: 1rem;
+
+ @media (min-width: 48em) {
+ font-size: $search-help-header-font-size-desktop;
+ }
+}
+
+.search-help__tips {
+ overflow: auto; // expand to include margin-bottom on last child
+
+ @media (min-width: 48em) {
+ @include flex-container();
+ @if ( $search-help-alignment == left ) {
+ @include justify-content(flex-start);
+ } @else if ( $search-help-alignment == right ) {
+ @include justify-content(flex-end);
+ } @else {
+ @include justify-content(center);
+ padding: 1em 0;
+ }
+ }
+
+ h3 {
+ margin-top: 0;
+ text-align: $search-help-alignment;
+ }
+}
+
+.search-help__tips__category {
+ margin: 1em;
+
+ @media (min-width: 48em) {
+ max-width: 20em;
+ }
+
+ ul {
+ margin-bottom: 0;
+ font-size: 0.875em;
+ margin-left: 1em;
+ }
+}
diff --git a/web/cobrands/sass/_waste.scss b/web/cobrands/sass/_waste.scss
new file mode 100644
index 000000000..70a73b255
--- /dev/null
+++ b/web/cobrands/sass/_waste.scss
@@ -0,0 +1,165 @@
+body.waste {
+ label, legend {
+ margin-top: 0; font-weight: normal !important;
+ } /* from base/h5bp */
+
+ input[type="text"].govuk-input--width-2 {
+ max-width: 5.4ex;
+ }
+
+ input[type="text"].govuk-input--width-4 {
+ max-width: 9ex;
+ }
+
+ input[type="text"].govuk-input {
+ font-size: 16px;
+ font-size: 1rem;
+ line-height: 1.25;
+ padding: 5px;
+ @media (min-width: 40.0625em) {
+ font-size: 19px; font-size: 1.1875rem; line-height: 1.31579;
+ }
+ }
+}
+
+.waste__collections,
+.waste__summary {
+ .govuk-summary-list {
+ font-size: 1em;
+ padding-bottom: 0.66em;
+ background-color: white;
+ }
+
+ .govuk-summary-list__row {
+ background-color: white;
+ }
+
+ .govuk-heading-m {
+ margin-bottom: 10px;
+ }
+
+ .govuk-summary-list__key--sub {
+ padding-top: 10px;
+ font-weight: normal !important; /* Ugh */
+ }
+}
+
+.waste-service-image {
+ max-width: 100%;
+ max-height: 140px;
+ height: auto;
+ margin-bottom: 1em;
+}
+
+.waste__summary {
+ .govuk-button--secondary {
+ font-size: 1em;
+ }
+ .govuk-summary-list__key {
+ vertical-align: middle;
+ }
+}
+
+.govuk-select {
+ width: auto;
+ min-width: 5em;
+}
+
+.waste__address {
+ font-size: 1.125em;
+ margin-bottom: 2em;
+}
+
+.waste__address__title {
+ font-weight: normal;
+}
+
+.waste__address__property {
+ font-weight: bold;
+}
+
+.aside-services {
+ ul ul {
+ margin-top: 0.4em;
+ }
+}
+.waste {
+ .govuk-fieldset__heading {
+ font-size: 1.4375rem;
+ font-weight: bold;
+ }
+}
+
+.waste-panel-toggle {
+ position: relative;
+ top: -1em;
+ margin-bottom: 0;
+ z-index: 1;
+}
+
+.waste-services-launch-panel {
+ margin-bottom: 3em;
+ opacity: 1;
+ transform: translateY(0);
+ transition: all 200ms ease-out;
+ z-index: inherit;
+ position: relative;
+ max-width: 100%;
+ .js &.hidden-js {
+ display: block;
+ opacity: 0;
+ transform: translateY(-100%);
+ transition: all 200ms ease-in;
+ position: absolute;
+ }
+}
+
+.waste-service-name.govuk-heading-m {
+ margin-top: 1.5em;
+ border-bottom: 1px solid #808080;
+ padding-bottom: 0.5em;
+}
+
+.waste-service-descriptor {
+ font-family: $body-font;
+ display: block;
+ width: 100%;
+ margin-bottom: 0.5em;
+ padding: 0 0 0.25em 0;
+ border: 0;
+ border-bottom: 1px solid #e9e9e9;
+ -webkit-appearance: none;
+ background: transparent;
+ font-size: inherit;
+ text-align: left;
+ white-space: normal;
+ line-height: 1.5;
+ .content & {
+ font-weight: normal;
+ }
+}
+
+.waste-service-link,
+input[type="submit"].waste-service-link {
+ color: $link-color;
+ &:hover,
+ &:focus {
+ text-decoration: underline;
+ }
+ &:visited {
+ color: $link-color;
+ }
+}
+
+.waste-service-name-link {
+ .waste & {
+ cursor: pointer;
+ margin-top: 0.5em;
+ margin-bottom: 0;
+ font-size: 1rem;
+ }
+}
+
+.text-centered {
+ text-align: center;
+}
diff --git a/web/cobrands/stevenage/_colours.scss b/web/cobrands/stevenage/_colours.scss
index 0bedded8a..bdbe7281b 100644
--- a/web/cobrands/stevenage/_colours.scss
+++ b/web/cobrands/stevenage/_colours.scss
@@ -16,3 +16,6 @@ $nav_hover_background_colour: #444;
$col_click_map: #00BD08;
$container-max-width: 984px; // to match Stevenage header width
+
+$search-help-background: #fff3f3;
+$search-help-margin-desktop: -2em -2em 0 -2em;
diff --git a/web/cobrands/tfl/_colours.scss b/web/cobrands/tfl/_colours.scss
index 1cffc3f55..3e232b443 100644
--- a/web/cobrands/tfl/_colours.scss
+++ b/web/cobrands/tfl/_colours.scss
@@ -33,6 +33,7 @@ $primary_b: $johnston-black;
$primary_text: $johnston-black;
$link-color: $beck-blue;
+$link-text-decoration: 'underline';
$link-hover-color: $blue-dark;
$base_bg: $white;
@@ -49,6 +50,11 @@ $col_fixed_label_dark: #4B8304;
$header-top-border: false;
+$search-help-alignment: left;
+$search-help-background: $red-light;
+$search-help-header-background: $red;
+$search-help-margin-desktop: -1em -1em 0em -1em;
+
@mixin tflbutton {
background: $beck-blue;
border-radius: 22.5px;
@@ -73,4 +79,4 @@ $header-top-border: false;
background-color: $white;
box-shadow: none;
padding: 0.4em;
-} \ No newline at end of file
+}
diff --git a/web/cobrands/tfl/assets.js b/web/cobrands/tfl/assets.js
index ad58c5c8a..ae7ba2ae5 100644
--- a/web/cobrands/tfl/assets.js
+++ b/web/cobrands/tfl/assets.js
@@ -64,6 +64,7 @@ var tlrn_categories = [
"Mobile Crane Operation",
"Other (TfL)",
"Pavement Defect (uneven surface / cracked paving slab)",
+ "Pavement Overcrowding",
"Pothole",
"Pothole (minor)",
"Roadworks",
@@ -71,6 +72,7 @@ var tlrn_categories = [
"Single Light out (street light)",
"Standing water",
"Street Light - Equipment damaged, pole leaning",
+ "Streetspace Feedback",
"Unstable hoardings",
"Unstable scaffolding",
"Worn out road markings"
diff --git a/web/cobrands/tfl/base.scss b/web/cobrands/tfl/base.scss
index 9c573f331..2625596d5 100644
--- a/web/cobrands/tfl/base.scss
+++ b/web/cobrands/tfl/base.scss
@@ -55,10 +55,6 @@ h3 {
line-height: 1.238095238em; //26px
}
-a, .fake-link {
- text-decoration: underline;
-}
-
.btn--primary,
.btn,
.green-btn {
@@ -138,18 +134,6 @@ input.form-error, textarea.form-error {
}
}
}
- a#geolocate_link {
- color: $beck-blue;
- font-family: $heading-font;
- text-decoration: underline;
- font-size: 1.125em;
- background: transparent;
- &:hover,
- &:active,
- &:focus {
- background: transparent;
- }
- }
h2 {
font-style: normal;
font-family: $body-font;
@@ -158,6 +142,11 @@ input.form-error, textarea.form-error {
}
}
+a#geolocate_link {
+ font-family: $heading-font;
+ font-size: 1.125em;
+}
+
.item-list__heading {
font-family: $body-font;
}
diff --git a/web/cobrands/tfl/layout.scss b/web/cobrands/tfl/layout.scss
index 8e3c6b5d8..751a71672 100644
--- a/web/cobrands/tfl/layout.scss
+++ b/web/cobrands/tfl/layout.scss
@@ -66,12 +66,6 @@ h1 {
#postcodeForm div {
margin: 0;
}
- a#geolocate_link {
- color: $beck-blue;
- font-family: $heading-font;
- text-decoration: underline;
- font-size: 1.125em;
- }
}
.frontpage .content {
diff --git a/web/cobrands/warwickshire/_colours.scss b/web/cobrands/warwickshire/_colours.scss
index aac759179..760d919a4 100644
--- a/web/cobrands/warwickshire/_colours.scss
+++ b/web/cobrands/warwickshire/_colours.scss
@@ -32,3 +32,9 @@ $header-top-border: false;
$mappage-header-height: 5em;
$container-max-width: 78em;
+
+$search-help-alignment: left;
+$search-help-background: #fff3f3;
+$search-help-margin-desktop: 1em -1em 0 -1em;
+$search-help-header-background: $warwickshire-red;
+$search-help-header-font-size-desktop: 1.25em;
diff --git a/web/cobrands/warwickshire/base.scss b/web/cobrands/warwickshire/base.scss
index 224346195..53bae8431 100644
--- a/web/cobrands/warwickshire/base.scss
+++ b/web/cobrands/warwickshire/base.scss
@@ -79,31 +79,21 @@
}
}
}
+}
- a#geolocate_link {
- padding: 0;
- background: transparent;
- font-size: 1em;
- color: $link-color;
- margin-top: 0.5em;
-
- &:hover {
- background-color: transparent;
- color: $link-hover-color;
- }
-
- &:focus {
- outline: 3px solid $warwickshire-yellow;
- }
+a#geolocate_link {
+ padding: 0;
+ margin-top: 0.5em;
- &.loading,
- &.loading:hover {
- background: transparent url("/cobrands/warwickshire/images/spinner-f6f6f6-333333.gif") 100% 50% no-repeat;
- padding: 0 1.5em 0 0;
- border: none;
- }
+ &:focus {
+ outline: 3px solid $warwickshire-yellow;
}
+ &.loading,
+ &.loading:hover {
+ background: transparent url("/cobrands/warwickshire/images/spinner-f6f6f6-333333.gif") 100% 50% no-repeat;
+ padding: 0 1.5em 0 0;
+ }
}
.box-warning {
diff --git a/web/cobrands/warwickshire/layout.scss b/web/cobrands/warwickshire/layout.scss
index ac360f16d..fdf3524cd 100644
--- a/web/cobrands/warwickshire/layout.scss
+++ b/web/cobrands/warwickshire/layout.scss
@@ -43,18 +43,6 @@
margin: 1.5em 0 0.5em 0;
}
}
-
- a#geolocate_link {
- color: $link-color;
-
- &:hover {
- color: $link-hover-color;
- }
-
- &:focus {
- outline: 3px solid $warwickshire-yellow;
- }
- }
}
.site-footer__section {
diff --git a/web/cobrands/westminster/_colours.scss b/web/cobrands/westminster/_colours.scss
index be1779daa..8850593c2 100644
--- a/web/cobrands/westminster/_colours.scss
+++ b/web/cobrands/westminster/_colours.scss
@@ -35,4 +35,9 @@ $meta-font: $body-font;
$mappage-header-height: 4.5em;
-$high-dpi-screen: '-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi'; \ No newline at end of file
+$high-dpi-screen: '-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi';
+
+$search-help-alignment: left;
+$search-help-background: #fff3f3;
+$search-help-margin: 0 -1em;
+$search-help-margin-desktop: 1em -1em 0 -1em;
diff --git a/web/cobrands/westminster/base.scss b/web/cobrands/westminster/base.scss
index c67a67f6d..01b7760e8 100644
--- a/web/cobrands/westminster/base.scss
+++ b/web/cobrands/westminster/base.scss
@@ -82,27 +82,16 @@ body.frontpage {
}
}
- a#geolocate_link {
- background: transparent;
- display: block;
- padding: 0;
- margin-top: 0.5em;
- font-family: inherit;
- font-size: 1em;
- border-radius: 0;
- color: $westminster_blue;
-
- &:hover {
- background: transparent;
- text-decoration: underline;
- }
- }
-
.form-hint {
color: inherit;
}
}
+a#geolocate_link {
+ padding: 0;
+ margin-top: 0.5em;
+}
+
#front-howto h2,
#front-recently h2 {
font-weight: bold;
diff --git a/web/cobrands/westminster/layout.scss b/web/cobrands/westminster/layout.scss
index 94483a523..6e5c30ced 100644
--- a/web/cobrands/westminster/layout.scss
+++ b/web/cobrands/westminster/layout.scss
@@ -36,10 +36,6 @@
}
}
-#front-main a#geolocate_link {
- color: $westminster-blue;
-}
-
body.mappage {
#site-header {
box-sizing: border-box; // count padding as part of height, so border-bottom is visible
diff --git a/web/js/dropzone.js.patch b/web/js/dropzone.js.patch
index b325b45d8..60a82709a 100644
--- a/web/js/dropzone.js.patch
+++ b/web/js/dropzone.js.patch
@@ -1,17 +1,92 @@
---- dropzone.5.1.1.js 2017-06-30 09:46:43.000000000 +0100
-+++ dropzone.exiffixes.js 2017-06-30 18:25:27.000000000 +0100
-@@ -1175,9 +1175,7 @@
- };
- if ((typeof EXIF !== "undefined" && EXIF !== null) && fixOrientation) {
- loadExif = function(callback) {
+--- dropzone.5.1.1.js 2020-06-30 15:56:05.557790000 +0100
++++ dropzone.exiffixes.js 2020-06-30 16:40:22.794951100 +0100
+@@ -26,7 +26,7 @@
+ */
+
+ (function() {
+- var Dropzone, Emitter, ExifRestore, camelize, contentLoaded, detectVerticalSquash, drawImageIOSFix, noop, without,
++ var Dropzone, Emitter, camelize, contentLoaded, detectVerticalSquash, drawImageIOSFix, noop, without,
+ slice = [].slice,
+ extend1 = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+ hasProp = {}.hasOwnProperty;
+@@ -1123,7 +1123,7 @@
+ };
+
+ Dropzone.prototype.resizeImage = function(file, width, height, resizeMethod, callback) {
+- return this.createThumbnail(file, width, height, resizeMethod, false, (function(_this) {
++ return this.createThumbnail(file, width, height, resizeMethod, true, (function(_this) {
+ return function(dataUrl, canvas) {
+ var resizeMimeType, resizedDataURL;
+ if (canvas === null) {
+@@ -1134,9 +1134,6 @@
+ resizeMimeType = file.type;
+ }
+ resizedDataURL = canvas.toDataURL(resizeMimeType, _this.options.resizeQuality);
+- if (resizeMimeType === 'image/jpeg' || resizeMimeType === 'image/jpg') {
+- resizedDataURL = ExifRestore.restore(file.dataURL, resizedDataURL);
+- }
+ return callback(Dropzone.dataURItoBlob(resizedDataURL));
+ }
+ };
+@@ -1164,23 +1161,17 @@
+ Dropzone.prototype.createThumbnailFromUrl = function(file, width, height, resizeMethod, fixOrientation, callback, crossOrigin) {
+ var img;
+ img = document.createElement("img");
++
++ // FixOrientation not needed anymore with browsers handling imageOrientation
++ fixOrientation = (getComputedStyle(document.body)['imageOrientation'] == 'from-image') ? false : fixOrientation;
++
+ if (crossOrigin) {
+ img.crossOrigin = crossOrigin;
+ }
+ img.onload = (function(_this) {
+ return function() {
+- var loadExif;
+- loadExif = function(callback) {
+- return callback(1);
+- };
+- if ((typeof EXIF !== "undefined" && EXIF !== null) && fixOrientation) {
+- loadExif = function(callback) {
- return EXIF.getData(img, function() {
- return callback(EXIF.getTag(this, 'Orientation'));
- });
-+ return callback(EXIF.getData(img));
- };
- }
- return loadExif(function(orientation) {
-@@ -1601,7 +1599,7 @@
+- };
+- }
+- return loadExif(function(orientation) {
++ var orientation = fixOrientation ? EXIF.getData(img) : 1;
++
+ var canvas, ctx, ref, ref1, ref2, ref3, resizeInfo, thumbnail;
+ file.width = img.width;
+ file.height = img.height;
+@@ -1212,23 +1203,23 @@
+ break;
+ case 6:
+ ctx.rotate(0.5 * Math.PI);
+- ctx.translate(0, -canvas.height);
++ ctx.translate(0, -canvas.width);
+ break;
+ case 7:
+ ctx.rotate(0.5 * Math.PI);
+- ctx.translate(canvas.width, -canvas.height);
++ ctx.translate(canvas.height, -canvas.width);
+ ctx.scale(-1, 1);
+ break;
+ case 8:
+ ctx.rotate(-0.5 * Math.PI);
+- ctx.translate(-canvas.width, 0);
++ ctx.translate(-canvas.height, 0);
+ }
+ drawImageIOSFix(ctx, img, (ref = resizeInfo.srcX) != null ? ref : 0, (ref1 = resizeInfo.srcY) != null ? ref1 : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, (ref2 = resizeInfo.trgX) != null ? ref2 : 0, (ref3 = resizeInfo.trgY) != null ? ref3 : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);
+ thumbnail = canvas.toDataURL("image/png");
+ if (callback != null) {
+ return callback(thumbnail, canvas);
+ }
+- });
++
+ };
+ })(this);
+ if (callback != null) {
+@@ -1601,7 +1592,7 @@
return results;
};
@@ -20,31 +95,165 @@
Dropzone.isBrowserSupported = function() {
var capableBrowser, j, len, ref, regex;
-@@ -1904,6 +1902,27 @@
- var array, ato, buf, imageData, mae, separatePoint;
- imageData = resizedFileBase64.replace('data:image/jpeg;base64,', '');
- buf = this.decode64(imageData);
-+
-+ // Certain browsers (I'm looking at you, Safari) 'helpfully' provide their
-+ // own EXIF data in the JPEG returned from HTMLCanvasElement.toDataURL.
-+ // Dropzone doesn't take this into account when restoring the original
-+ // file's EXIF, meaning the final uploaded file has two sets of EXIF.
-+ // Certain JPEG tools (I'm looking at you, jhead) don't really handle this
-+ // very well, either ignoring the duplicate EXIF, picking the wrong one
-+ // or refusing to process the file entirely.
-+ // Seems like the best way out of this mess is to make sure the uploaded
-+ // JPEG only ever has one EXIF header. In this case, we want to keep the
-+ // EXIF from the original file.
-+ // This little loop inspects the new JPEG from the toDataURL call and
-+ // strips out any existing EXIF headers (technically any APP1 headers,
-+ // but same difference in this case).
-+ for (var i = 0; i < buf.length; i++) {
-+ if (buf[i] === 255 && buf[i+1] === 225) {
-+ var length = buf[i + 2] * 256 + buf[i + 3] + 2;
-+ buf.splice(i, length);
-+ }
-+ }
-+
- separatePoint = buf.indexOf(255, 3);
- mae = buf.slice(0, separatePoint);
- ato = buf.slice(separatePoint);
+@@ -1828,161 +1819,6 @@
+ return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);
+ };
+
+- ExifRestore = (function() {
+- function ExifRestore() {}
+-
+- ExifRestore.KEY_STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+-
+- ExifRestore.encode64 = function(input) {
+- var chr1, chr2, chr3, enc1, enc2, enc3, enc4, i, output;
+- output = '';
+- chr1 = void 0;
+- chr2 = void 0;
+- chr3 = '';
+- enc1 = void 0;
+- enc2 = void 0;
+- enc3 = void 0;
+- enc4 = '';
+- i = 0;
+- while (true) {
+- chr1 = input[i++];
+- chr2 = input[i++];
+- chr3 = input[i++];
+- enc1 = chr1 >> 2;
+- enc2 = (chr1 & 3) << 4 | chr2 >> 4;
+- enc3 = (chr2 & 15) << 2 | chr3 >> 6;
+- enc4 = chr3 & 63;
+- if (isNaN(chr2)) {
+- enc3 = enc4 = 64;
+- } else if (isNaN(chr3)) {
+- enc4 = 64;
+- }
+- output = output + this.KEY_STR.charAt(enc1) + this.KEY_STR.charAt(enc2) + this.KEY_STR.charAt(enc3) + this.KEY_STR.charAt(enc4);
+- chr1 = chr2 = chr3 = '';
+- enc1 = enc2 = enc3 = enc4 = '';
+- if (!(i < input.length)) {
+- break;
+- }
+- }
+- return output;
+- };
+-
+- ExifRestore.restore = function(origFileBase64, resizedFileBase64) {
+- var image, rawImage, segments;
+- if (!origFileBase64.match('data:image/jpeg;base64,')) {
+- return resizedFileBase64;
+- }
+- rawImage = this.decode64(origFileBase64.replace('data:image/jpeg;base64,', ''));
+- segments = this.slice2Segments(rawImage);
+- image = this.exifManipulation(resizedFileBase64, segments);
+- return 'data:image/jpeg;base64,' + this.encode64(image);
+- };
+-
+- ExifRestore.exifManipulation = function(resizedFileBase64, segments) {
+- var aBuffer, exifArray, newImageArray;
+- exifArray = this.getExifArray(segments);
+- newImageArray = this.insertExif(resizedFileBase64, exifArray);
+- aBuffer = new Uint8Array(newImageArray);
+- return aBuffer;
+- };
+-
+- ExifRestore.getExifArray = function(segments) {
+- var seg, x;
+- seg = void 0;
+- x = 0;
+- while (x < segments.length) {
+- seg = segments[x];
+- if (seg[0] === 255 & seg[1] === 225) {
+- return seg;
+- }
+- x++;
+- }
+- return [];
+- };
+-
+- ExifRestore.insertExif = function(resizedFileBase64, exifArray) {
+- var array, ato, buf, imageData, mae, separatePoint;
+- imageData = resizedFileBase64.replace('data:image/jpeg;base64,', '');
+- buf = this.decode64(imageData);
+- separatePoint = buf.indexOf(255, 3);
+- mae = buf.slice(0, separatePoint);
+- ato = buf.slice(separatePoint);
+- array = mae;
+- array = array.concat(exifArray);
+- array = array.concat(ato);
+- return array;
+- };
+-
+- ExifRestore.slice2Segments = function(rawImageArray) {
+- var endPoint, head, length, seg, segments;
+- head = 0;
+- segments = [];
+- while (true) {
+- if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 218) {
+- break;
+- }
+- if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 216) {
+- head += 2;
+- } else {
+- length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3];
+- endPoint = head + length + 2;
+- seg = rawImageArray.slice(head, endPoint);
+- segments.push(seg);
+- head = endPoint;
+- }
+- if (head > rawImageArray.length) {
+- break;
+- }
+- }
+- return segments;
+- };
+-
+- ExifRestore.decode64 = function(input) {
+- var base64test, buf, chr1, chr2, chr3, enc1, enc2, enc3, enc4, i, output;
+- output = '';
+- chr1 = void 0;
+- chr2 = void 0;
+- chr3 = '';
+- enc1 = void 0;
+- enc2 = void 0;
+- enc3 = void 0;
+- enc4 = '';
+- i = 0;
+- buf = [];
+- base64test = /[^A-Za-z0-9\+\/\=]/g;
+- if (base64test.exec(input)) {
+- console.warning('There were invalid base64 characters in the input text.\n' + 'Valid base64 characters are A-Z, a-z, 0-9, \'+\', \'/\',and \'=\'\n' + 'Expect errors in decoding.');
+- }
+- input = input.replace(/[^A-Za-z0-9\+\/\=]/g, '');
+- while (true) {
+- enc1 = this.KEY_STR.indexOf(input.charAt(i++));
+- enc2 = this.KEY_STR.indexOf(input.charAt(i++));
+- enc3 = this.KEY_STR.indexOf(input.charAt(i++));
+- enc4 = this.KEY_STR.indexOf(input.charAt(i++));
+- chr1 = enc1 << 2 | enc2 >> 4;
+- chr2 = (enc2 & 15) << 4 | enc3 >> 2;
+- chr3 = (enc3 & 3) << 6 | enc4;
+- buf.push(chr1);
+- if (enc3 !== 64) {
+- buf.push(chr2);
+- }
+- if (enc4 !== 64) {
+- buf.push(chr3);
+- }
+- chr1 = chr2 = chr3 = '';
+- enc1 = enc2 = enc3 = enc4 = '';
+- if (!(i < input.length)) {
+- break;
+- }
+- }
+- return buf;
+- };
+-
+- return ExifRestore;
+-
+- })();
+-
+-
+ /*
+ * contentloaded.js
+ *
diff --git a/web/js/loading-attribute-polyfill.js b/web/js/loading-attribute-polyfill.js
new file mode 100644
index 000000000..f11397985
--- /dev/null
+++ b/web/js/loading-attribute-polyfill.js
@@ -0,0 +1,213 @@
+/*
+ * Loading attribute polyfill - https://github.com/mfranzke/loading-attribute-polyfill
+ * @license Copyright(c) 2019 by Maximilian Franzke
+ * Credits for the initial kickstarter / script to @Sora2455, and supported by @cbirdsong, @eklingen, @DaPo, @nextgenthemes, @diogoterremoto, @dracos, @Flimm, @TomS- and @vinyfc93 - many thanks for that !
+ */
+/*
+ * A minimal and dependency-free vanilla JavaScript loading attribute polyfill.
+ * Supports standard's functionality and tests for native support upfront.
+ * Elsewhere the functionality gets emulated with the support of noscript wrapper tags.
+ * Use an IntersectionObserver polyfill in case of IE11 support necessary.
+ *
+ * MS - Removed iframe/picture/srcset parts, unneeded at present, and added external API
+ */
+
+(function () {
+ 'use strict';
+
+ var config = {
+ // Start download if the item gets within 256px in the Y axis
+ rootMargin: '256px 0px',
+ threshold: 0.01
+ };
+
+ // Device/browser capabilities object
+ var capabilities = {
+ loading: 'loading' in HTMLImageElement.prototype,
+ scrolling: 'onscroll' in window
+ };
+
+ // Nodelist foreach polyfill / source: https://stackoverflow.com/a/46929259
+ if (
+ typeof NodeList !== 'undefined' &&
+ NodeList.prototype &&
+ !NodeList.prototype.forEach
+ ) {
+ // Yes, there's really no need for `Object.defineProperty` here
+ NodeList.prototype.forEach = Array.prototype.forEach;
+ }
+
+ // Define according to browsers support of the IntersectionObserver feature (missing e.g. on IE11 or Safari 11)
+ var intersectionObserver;
+
+ if ('IntersectionObserver' in window) {
+ intersectionObserver = new IntersectionObserver(onIntersection, config);
+ }
+
+ // On using a browser w/o requestAnimationFrame support (IE9, Opera Mini), just run the passed function
+ var rAFWrapper;
+
+ if ('requestAnimationFrame' in window) {
+ rAFWrapper = window.requestAnimationFrame;
+ } else {
+ rAFWrapper = function (func) {
+ func();
+ };
+ }
+
+ /**
+ * Put the source back where it belongs - now that the elements content is attached to the document, it will load now
+ * @param {Object} lazyItem Current item to be restored after lazy loading.
+ */
+ function restoreSource(lazyItem) {
+ lazyItem.setAttribute('src', lazyItem.getAttribute('data-lazy-src'));
+ lazyItem.removeAttribute('data-lazy-src'); // Not using delete .dataset here for compatibility down to IE9
+ }
+
+ /**
+ * Handle IntersectionObservers callback
+ * @param {Object} entries Target elements Intersection observed changes
+ * @param {Object} observer IntersectionObserver instance reference
+ */
+ function onIntersection(entries, observer) {
+ entries.forEach(function (entry) {
+ // Mitigation for EDGE lacking support of .isIntersecting until v15, compare to e.g. https://github.com/w3c/IntersectionObserver/issues/211#issuecomment-309144669
+ if (entry.intersectionRatio === 0) {
+ return;
+ }
+
+ // If the item is visible now, load it and stop watching it
+ var lazyItem = entry.target;
+
+ observer.unobserve(lazyItem);
+
+ restoreSource(lazyItem);
+ });
+ }
+
+ /**
+ * Handle printing the page
+ */
+ function onPrinting() {
+ if (typeof window.matchMedia === 'undefined') {
+ return;
+ }
+
+ var mediaQueryList = window.matchMedia('print');
+
+ mediaQueryList.addListener(function (mql) {
+ if (mql.matches) {
+ document
+ .querySelectorAll('img[loading="lazy"][data-lazy-src]')
+ .forEach(function (lazyItem) {
+ restoreSource(lazyItem);
+ });
+ }
+ });
+ }
+
+ /**
+ * Get and prepare the HTML code depending on feature detection,
+ * and if not scrolling supported, because it's a Google or Bing Bot
+ * @param {String} lazyAreaHtml Noscript inner HTML code that src-urls need to get rewritten
+ */
+ function getAndPrepareHTMLCode(noScriptTag) {
+ // The contents of a <noscript> tag are treated as text to JavaScript
+ var lazyAreaHtml = noScriptTag.textContent || noScriptTag.innerHTML;
+
+ var getImageWidth = lazyAreaHtml.match(/width=['"](\d+)['"]/) || false;
+ var temporaryImageWidth = getImageWidth[1] || 1;
+ var getImageHeight = lazyAreaHtml.match(/height=['"](\d+)['"]/) || false;
+ var temporaryImageHeight = getImageHeight[1] || 1;
+
+ var temporaryImage =
+ 'data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 ' +
+ temporaryImageWidth +
+ ' ' +
+ temporaryImageHeight +
+ '%27%3E%3C/svg%3E';
+
+ if (!capabilities.loading && capabilities.scrolling) {
+ // Check for IntersectionObserver support
+ if (typeof intersectionObserver === 'undefined') {
+ // Attach abandonned attribute 'lazyload' to the HTML tags on browsers w/o IntersectionObserver being available
+ lazyAreaHtml = lazyAreaHtml.replace(
+ /(?:\r\n|\r|\n|\t| )src=/g,
+ ' lazyload="1" src='
+ );
+ } else {
+ // Temporarily replace a expensive resource load with a simple one by storing the actual source for later and point src to a temporary replacement (data URI)
+ lazyAreaHtml = lazyAreaHtml
+ .replace(
+ /(?:\r\n|\r|\n|\t| )src=/g,
+ ' src="' + temporaryImage + '" data-lazy-src='
+ );
+ }
+ }
+
+ return lazyAreaHtml;
+ }
+
+ /**
+ * Retrieve the elements from the 'lazy load' <noscript> tag and prepare them for display
+ * @param {Object} noScriptTag noscript HTML tag that should get initially transformed
+ */
+ function prepareElement(noScriptTag) {
+ // Sticking the noscript HTML code in the innerHTML of a new <div> tag to 'load' it after creating that <div>
+ var lazyArea = document.createElement('div');
+
+ lazyArea.innerHTML = getAndPrepareHTMLCode(noScriptTag);
+
+ // Move all children out of the element
+ while (lazyArea.firstChild) {
+ if (
+ !capabilities.loading &&
+ capabilities.scrolling &&
+ typeof intersectionObserver !== 'undefined' &&
+ lazyArea.firstChild.tagName &&
+ lazyArea.firstChild.tagName.toLowerCase() === 'img'
+ ) {
+ // Observe the item so that loading could start when it gets close to the viewport
+ intersectionObserver.observe(lazyArea.firstChild);
+ }
+
+ noScriptTag.parentNode.insertBefore(lazyArea.firstChild, noScriptTag);
+ }
+
+ // Remove the empty element - not using .remove() here for IE11 compatibility
+ noScriptTag.parentNode.removeChild(noScriptTag); // Preferred .removeChild over .remove here for IE
+ }
+
+ /* Add a function we can call externally */
+ fixmystreet.loading_recheck = function() {
+ var lazyLoadAreas = document.querySelectorAll('noscript.loading-lazy');
+ lazyLoadAreas.forEach(prepareElement);
+ };
+
+ /**
+ * Get all the <noscript> tags on the page and setup the printing
+ */
+ function prepareElements() {
+ fixmystreet.loading_recheck();
+
+ // Bind for someone printing the page
+ onPrinting();
+ }
+
+ // If the page has loaded already, run setup - if it hasn't, run as soon as it has.
+ // Use requestAnimationFrame as this will propably cause repaints
+ // document.readyState values: https://www.w3schools.com/jsref/prop_doc_readystate.asp
+ if (/comp|inter/.test(document.readyState)) {
+ rAFWrapper(prepareElements);
+ } else if ('addEventListener' in document) {
+ document.addEventListener('DOMContentLoaded', function () {
+ rAFWrapper(prepareElements);
+ });
+ } else {
+ document.attachEvent('onreadystatechange', function () {
+ if (document.readyState === 'complete') {
+ prepareElements();
+ }
+ });
+ }
+})();
diff --git a/web/js/map-OpenLayers.js b/web/js/map-OpenLayers.js
index 182cd79a1..ada51cbc0 100644
--- a/web/js/map-OpenLayers.js
+++ b/web/js/map-OpenLayers.js
@@ -132,20 +132,32 @@ $.extend(fixmystreet.utils, {
new OpenLayers.Projection("EPSG:4326")
);
- var lat = transformedLonlat.lat.toFixed(6);
- var lon = transformedLonlat.lon.toFixed(6);
-
- document.getElementById('fixmystreet.latitude').value = lat;
- document.getElementById('fixmystreet.longitude').value = lon;
-
+ fixmystreet.maps.update_pin_input_fields(transformedLonlat);
$(fixmystreet).trigger('maps:update_pin', [ lonlat ]);
+ var lat = transformedLonlat.lat.toFixed(6);
+ var lon = transformedLonlat.lon.toFixed(6);
return {
'url': { 'lon': lon, 'lat': lat },
'state': { 'lon': lonlat.lon, 'lat': lonlat.lat }
};
},
+ update_pin_input_fields: function(lonlat) {
+ var bng = lonlat.clone().transform(
+ new OpenLayers.Projection("EPSG:4326"),
+ new OpenLayers.Projection("EPSG:27700") // TODO: Handle other projections
+ );
+ var lat = lonlat.lat.toFixed(6);
+ var lon = lonlat.lon.toFixed(6);
+ $("#problem_northing").text(bng.lat.toFixed(1));
+ $("#problem_easting").text(bng.lon.toFixed(1));
+ $("#problem_latitude").text(lat);
+ $("#problem_longitude").text(lon);
+ $("input[name=latitude]").val(lat);
+ $("input[name=longitude]").val(lon);
+ },
+
display_around: function() {
// Required after changing the size of the map element
fixmystreet.map.updateSize();
@@ -278,9 +290,12 @@ $.extend(fixmystreet.utils, {
// pin_moved_callback is called with a new EPSG:4326 OpenLayers.LonLat if
// the user drags the pin and confirms its new location.
admin_drag: function(pin_moved_callback, confirm_change) {
+ if (fixmystreet.maps.admin_drag_control) {
+ return;
+ }
confirm_change = confirm_change || false;
var original_lonlat;
- var drag = new OpenLayers.Control.DragFeatureFMS( fixmystreet.markers, {
+ var drag = fixmystreet.maps.admin_drag_control = new OpenLayers.Control.DragFeatureFMS( fixmystreet.markers, {
onStart: function(feature, e) {
// Keep track of where the feature started, so we can put it
// back if the user cancels the operation.
@@ -627,17 +642,9 @@ $.extend(fixmystreet.utils, {
// Not actually on the inspect report page
return;
}
- fixmystreet.maps.admin_drag(function(lonlat) {
- var bng = lonlat.clone().transform(
- new OpenLayers.Projection("EPSG:4326"),
- new OpenLayers.Projection("EPSG:27700") // TODO: Handle other projections
- );
- $("#problem_northing").text(bng.y.toFixed(1));
- $("#problem_easting").text(bng.x.toFixed(1));
- $("#problem_latitude").text(lonlat.y.toFixed(6));
- $("#problem_longitude").text(lonlat.x.toFixed(6));
- $("input[name=latitude]").val(lonlat.y.toFixed(6));
- $("input[name=longitude]").val(lonlat.x.toFixed(6));
+ fixmystreet.maps.admin_drag(function(geom) {
+ var lonlat = new OpenLayers.LonLat(geom.x, geom.y);
+ fixmystreet.maps.update_pin_input_fields(lonlat);
},
false);
}
@@ -958,6 +965,8 @@ $.extend(fixmystreet.utils, {
);
} else if (layer_options.matrixIds) {
layer = new fixmystreet.map_type(layer_options);
+ } else if (fixmystreet.layer_options[i].map_type) {
+ layer = new fixmystreet.layer_options[i].map_type(fixmystreet.layer_name, layer_options);
} else {
layer = new fixmystreet.map_type(fixmystreet.layer_name, layer_options);
}
@@ -1278,6 +1287,9 @@ OpenLayers.Format.FixMyStreet = OpenLayers.Class(OpenLayers.Format.JSON, {
var reports_list;
if (typeof(obj.reports_list) != 'undefined' && (reports_list = document.getElementById('js-reports-list'))) {
reports_list.innerHTML = obj.reports_list;
+ if (fixmystreet.loading_recheck) {
+ fixmystreet.loading_recheck();
+ }
if ( $('.item-list--reports').data('show-old-reports') ) {
$('#show_old_reports_wrapper').removeClass('hidden');
} else {
@@ -1318,8 +1330,13 @@ OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {
// If we are looking at an individual report, and the report was
// ajaxed into the DOM from the all reports page, then clicking
// the map background should take us back to the all reports list.
- if ($('.js-back-to-report-list').length) {
- $('.js-back-to-report-list').trigger('click');
+ var asset_button_clicked = $('.btn--change-asset').hasClass('asset-spot');
+ if (asset_button_clicked) {
+ return true;
+ }
+ var back_link = $('.js-back-to-report-list');
+ if (back_link.length) {
+ back_link.trigger('click');
return true;
}
diff --git a/web/js/map-OpenStreetMap.js b/web/js/map-OpenStreetMap.js
index 9ed3a2ee3..46aba1c91 100644
--- a/web/js/map-OpenStreetMap.js
+++ b/web/js/map-OpenStreetMap.js
@@ -7,6 +7,13 @@ fixmystreet.maps.config = function() {
new OpenLayers.Control.PermalinkFMS('map'),
new OpenLayers.Control.PanZoomFMS({id: 'fms_pan_zoom' })
];
+
+ if (OpenLayers.Layer.BingAerial) {
+ fixmystreet.layer_options = [
+ { map_type: fixmystreet.map_type },
+ { map_type: OpenLayers.Layer.BingAerial }
+ ];
+ }
};
// http://www.openstreetmap.org/openlayers/OpenStreetMap.js (added maxResolution)
@@ -34,7 +41,7 @@ OpenLayers.Layer.OSM.Mapnik = OpenLayers.Class(OpenLayers.Layer.OSM, {
options = OpenLayers.Util.extend({
/* Below line added to OSM's file in order to allow minimum zoom level */
maxResolution: 156543.03390625/Math.pow(2, options.zoomOffset || 0),
- numZoomLevels: 19,
+ numZoomLevels: 20,
buffer: 0
}, options);
var newArguments = [name, url, options];
@@ -45,40 +52,6 @@ OpenLayers.Layer.OSM.Mapnik = OpenLayers.Class(OpenLayers.Layer.OSM, {
});
/**
- * Class: OpenLayers.Layer.OSM.MapQuestOpen
- *
- * Inherits from:
- * - <OpenLayers.Layer.OSM>
- */
-OpenLayers.Layer.OSM.MapQuestOpen = OpenLayers.Class(OpenLayers.Layer.OSM, {
- /**
- * Constructor: OpenLayers.Layer.OSM.MapQuestOpen
- *
- * Parameters:
- * name - {String}
- * options - {Object} Hashtable of extra options to tag onto the layer
- */
- initialize: function(name, options) {
- var url = [
- "https://otile1-s.mqcdn.com/tiles/1.0.0/map/${z}/${x}/${y}.png",
- "https://otile2-s.mqcdn.com/tiles/1.0.0/map/${z}/${x}/${y}.png",
- "https://otile3-s.mqcdn.com/tiles/1.0.0/map/${z}/${x}/${y}.png",
- "https://otile4-s.mqcdn.com/tiles/1.0.0/map/${z}/${x}/${y}.png"
- ];
- options = OpenLayers.Util.extend({
- /* Below line added to OSM's file in order to allow minimum zoom level */
- maxResolution: 156543.03390625/Math.pow(2, options.zoomOffset || 0),
- numZoomLevels: 19,
- buffer: 0
- }, options);
- var newArguments = [name, url, options];
- OpenLayers.Layer.OSM.prototype.initialize.apply(this, newArguments);
- },
-
- CLASS_NAME: "OpenLayers.Layer.OSM.MapQuestOpen"
-});
-
-/**
* Class: OpenLayers.Layer.OSM.CycleMap
*
* Inherits from:
@@ -101,7 +74,7 @@ OpenLayers.Layer.OSM.CycleMap = OpenLayers.Class(OpenLayers.Layer.OSM, {
options = OpenLayers.Util.extend({
/* Below line added to OSM's file in order to allow minimum zoom level */
maxResolution: 156543.03390625/Math.pow(2, options.zoomOffset || 0),
- numZoomLevels: 19,
+ numZoomLevels: 20,
buffer: 0
}, options);
var newArguments = [name, url, options];
diff --git a/web/js/map-bing-ol.js b/web/js/map-bing-ol.js
index 4e01ff58b..c44cf96f8 100644
--- a/web/js/map-bing-ol.js
+++ b/web/js/map-bing-ol.js
@@ -10,10 +10,30 @@ fixmystreet.maps.config = function() {
if ( fixmystreet.page == 'report' ) {
fixmystreet.controls.push( new OpenLayers.Control.PermalinkFMS('key-tool-problems-nearby', '/around') );
}
- fixmystreet.map_type = OpenLayers.Layer.Bing;
};
+(function() {
+ $(function(){
+ $('#map_layer_toggle').click(function(e) {
+ e.preventDefault();
+ var $this = $(this);
+ if ($this.text() == translation_strings.map_aerial) {
+ $this.text(translation_strings.map_roads);
+ fixmystreet.map.setBaseLayer(fixmystreet.map.layers[1]);
+ } else {
+ $this.text(translation_strings.map_aerial);
+ fixmystreet.map.setBaseLayer(fixmystreet.map.layers[0]);
+ }
+ });
+ // If page loaded with Aerial as starting, rather than default road
+ if ($('#map_layer_toggle').text() == translation_strings.map_roads) {
+ fixmystreet.map.setBaseLayer(fixmystreet.map.layers[1]);
+ }
+ });
+})();
+
OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
+ tile_base: '//t{S}.ssl.ak.dynamic.tiles.virtualearth.net/comp/ch/${id}?mkt=en-US&it=G,L&src=t&shading=hill&og=969&n=z',
attributionTemplate: '${logo}${copyrights}',
setMap: function() {
@@ -35,7 +55,8 @@ OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
},
updateAttribution: function() {
- var copyrights = '&copy; 2011 <a href="https://www.bing.com/maps/">Microsoft</a>. &copy; AND, Navteq';
+ var year = (new Date()).getFullYear();
+ var copyrights = '&copy; ' + year + ' <a href="https://www.bing.com/maps/">Microsoft</a>, HERE';
var logo = '<a href="https://www.bing.com/maps/"><img border=0 src="//dev.virtualearth.net/Branding/logo_powered_by.png"></a>';
this._updateAttribution(copyrights, logo);
},
@@ -45,7 +66,7 @@ OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
options = OpenLayers.Util.extend({
/* Below line added to OSM's file in order to allow minimum zoom level */
maxResolution: 156543.03390625/Math.pow(2, options.zoomOffset || 0),
- numZoomLevels: 19,
+ numZoomLevels: 20,
sphericalMercator: true,
buffer: 0
}, options);
@@ -89,13 +110,41 @@ OpenLayers.Layer.Bing = OpenLayers.Class(OpenLayers.Layer.XYZ, {
},
get_urls: function(bounds, z) {
- return [
- "//ecn.t0.tiles.virtualearth.net/tiles/r${id}.png?g=6570",
- "//ecn.t1.tiles.virtualearth.net/tiles/r${id}.png?g=6570",
- "//ecn.t2.tiles.virtualearth.net/tiles/r${id}.png?g=6570",
- "//ecn.t3.tiles.virtualearth.net/tiles/r${id}.png?g=6570"
- ];
+ var urls = [];
+ for (var i=0; i<4; i++) {
+ urls.push(this.tile_base.replace('{S}', i));
+ }
+ return urls;
},
CLASS_NAME: "OpenLayers.Layer.Bing"
});
+
+OpenLayers.Layer.BingAerial = OpenLayers.Class(OpenLayers.Layer.Bing, {
+ tile_base: '//t{S}.ssl.ak.dynamic.tiles.virtualearth.net/comp/ch/${id}?mkt=en-US&it=A,G,L&src=t&og=969&n=z',
+
+ setMap: function() {
+ OpenLayers.Layer.Bing.prototype.setMap.apply(this, arguments);
+ this.map.events.register("moveend", this, this.updateAttribution);
+ },
+
+ updateAttribution: function() {
+ var z = this.map.getZoom() + this.zoomOffset;
+ var year = (new Date()).getFullYear();
+ var copyrights = '&copy; ' + year + ' <a href="https://www.bing.com/maps/">Microsoft</a>, HERE, ';
+ if (z >= 13) {
+ copyrights += 'Maxar, CNES Distribution Airbus DS';
+ } else {
+ copyrights += 'Earthstar Geographics SIO';
+ }
+ var logo = '<a href="https://www.bing.com/maps/"><img border=0 src="//dev.virtualearth.net/Branding/logo_powered_by.png"></a>';
+ this._updateAttribution(copyrights, logo);
+ },
+
+ CLASS_NAME: "OpenLayers.Layer.BingAerial"
+});
+
+fixmystreet.layer_options = [
+ { map_type: OpenLayers.Layer.Bing },
+ { map_type: OpenLayers.Layer.BingAerial }
+];
diff --git a/web/js/map-fms.js b/web/js/map-fms.js
index ac27cfbce..bb51467a7 100644
--- a/web/js/map-fms.js
+++ b/web/js/map-fms.js
@@ -1,11 +1,4 @@
-fixmystreet.maps.tile_base = [ [ '', 'a-', 'b-', 'c-' ], '//{S}tilma.mysociety.org/oml' ];
-
-fixmystreet.maps.config = (function(original) {
- return function(){
- original();
- fixmystreet.map_type = OpenLayers.Layer.BingUK;
- };
-})(fixmystreet.maps.config);
+fixmystreet.maps.tile_base = '//{S}tilma.mysociety.org/oml';
OpenLayers.Layer.BingUK = OpenLayers.Class(OpenLayers.Layer.Bing, {
uk_bounds: [
@@ -38,41 +31,48 @@ OpenLayers.Layer.BingUK = OpenLayers.Class(OpenLayers.Layer.Bing, {
var logo = '';
var c = this.map.getCenter();
var in_uk = c ? this.in_uk(c) : true;
+ var year = (new Date()).getFullYear();
if (z >= 16 && in_uk) {
- copyrights = 'Contains Highways England and Ordnance Survey data &copy; Crown copyright and database right 2016';
+ copyrights = 'Contains Highways England and Ordnance Survey data &copy; Crown copyright and database right ' + year;
} else {
logo = '<a href="https://www.bing.com/maps/"><img border=0 src="//dev.virtualearth.net/Branding/logo_powered_by.png"></a>';
if (in_uk) {
- copyrights = '&copy; 2016 <a href="https://www.bing.com/maps/">Microsoft</a>. &copy; AND, Navteq, Highways England, Ordnance Survey';
+ copyrights = '&copy; ' + year + ' <a href="https://www.bing.com/maps/">Microsoft</a>, HERE, Highways England, Ordnance Survey';
} else {
- copyrights = '&copy; 2016 <a href="https://www.bing.com/maps/">Microsoft</a>. &copy; AND, Navteq, Ordnance Survey';
+ copyrights = '&copy; ' + year + ' <a href="https://www.bing.com/maps/">Microsoft</a>, HERE, Ordnance Survey';
}
}
this._updateAttribution(copyrights, logo);
},
+ tile_prefix: [ '', 'a-', 'b-', 'c-' ],
+
get_urls: function(bounds, z) {
- var urls;
+ var urls = [], i;
var in_uk = this.in_uk(bounds.getCenterLonLat());
if (z >= 16 && in_uk) {
urls = [];
- for (var i=0; i< fixmystreet.maps.tile_base[0].length; i++) {
- urls.push( fixmystreet.maps.tile_base[1].replace('{S}', fixmystreet.maps.tile_base[0][i]) + "/${z}/${x}/${y}.png" );
+ for (i=0; i< this.tile_prefix.length; i++) {
+ urls.push( fixmystreet.maps.tile_base.replace('{S}', this.tile_prefix[i]) + "/${z}/${x}/${y}.png" );
+ }
+ } else if (z > 11 && in_uk) {
+ var type = 'g=8702&lbl=l1&productSet=mmOS&key=' + fixmystreet.key;
+ var tile_base = "//ecn.t{S}.tiles.virtualearth.net/tiles/r${id}?" + type;
+ for (i=0; i<4; i++) {
+ urls.push(tile_base.replace('{S}', i));
}
} else {
- var type = '';
- if (z > 11 && in_uk) {
- type = '&productSet=mmOS&key=' + fixmystreet.key;
+ for (i=0; i<4; i++) {
+ urls.push(this.tile_base.replace('{S}', i));
}
- urls = [
- "//ecn.t0.tiles.virtualearth.net/tiles/r${id}.png?g=6570" + type,
- "//ecn.t1.tiles.virtualearth.net/tiles/r${id}.png?g=6570" + type,
- "//ecn.t2.tiles.virtualearth.net/tiles/r${id}.png?g=6570" + type,
- "//ecn.t3.tiles.virtualearth.net/tiles/r${id}.png?g=6570" + type
- ];
}
return urls;
},
CLASS_NAME: "OpenLayers.Layer.BingUK"
});
+
+fixmystreet.layer_options = [
+ { map_type: OpenLayers.Layer.BingUK },
+ { map_type: OpenLayers.Layer.BingAerial }
+];
diff --git a/web/js/map-google.js b/web/js/map-google.js
index fc515b9dd..801fed210 100644
--- a/web/js/map-google.js
+++ b/web/js/map-google.js
@@ -156,7 +156,7 @@ fixmystreet.maps = {};
};
if (!fixmystreet.zoomToBounds) {
map_args.minZoom = 13;
- map_args.maxZoom = 18;
+ map_args.maxZoom = 19;
}
fixmystreet.map = new google.maps.Map(document.getElementById("map"), map_args);
diff --git a/web/js/map-mastermap.js b/web/js/map-mastermap.js
index bb9adf532..663ccbdfb 100644
--- a/web/js/map-mastermap.js
+++ b/web/js/map-mastermap.js
@@ -23,3 +23,8 @@ OpenLayers.Layer.MasterMap = OpenLayers.Class(OpenLayers.Layer.BingUK, {
CLASS_NAME: "OpenLayers.Layer.MasterMap"
});
+
+fixmystreet.layer_options = [
+ { map_type: OpenLayers.Layer.MasterMap },
+ { map_type: OpenLayers.Layer.BingAerial }
+];
diff --git a/web/vendor/accessible-autocomplete.min.js b/web/vendor/accessible-autocomplete.min.js
index 9eafe639f..d0780cb77 100644
--- a/web/vendor/accessible-autocomplete.min.js
+++ b/web/vendor/accessible-autocomplete.min.js
@@ -1,2 +1 @@
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.accessibleAutocomplete=t():e.accessibleAutocomplete=t()}(this,function(){return function(e){function t(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:o})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="/",t(t.s=1)}([function(e,t,n){!function(){"use strict";function t(){}function n(e,n){var o,r,l,i,u=T;for(i=arguments.length;i-- >2;)D.push(arguments[i]);for(n&&null!=n.children&&(D.length||D.push(n.children),delete n.children);D.length;)if((r=D.pop())&&void 0!==r.pop)for(i=r.length;i--;)D.push(r[i]);else!0!==r&&!1!==r||(r=null),(l="function"!=typeof e)&&(null==r?r="":"number"==typeof r?r=String(r):"string"!=typeof r&&(l=!1)),l&&o?u[u.length-1]+=r:u===T?u=[r]:u.push(r),o=l;var s=new t;return s.nodeName=e,s.children=u,s.attributes=null==n?void 0:n,s.key=null==n?void 0:n.key,void 0!==A.vnode&&A.vnode(s),s}function o(e,t){for(var n in t)e[n]=t[n];return e}function r(e,t){return n(e.nodeName,o(o({},e.attributes),t),arguments.length>2?[].slice.call(arguments,2):e.children)}function l(e){!e.__d&&(e.__d=!0)&&1==V.push(e)&&(A.debounceRendering||setTimeout)(i)}function i(){var e,t=V;for(V=[];e=t.pop();)e.__d&&N(e)}function u(e,t,n){return"string"==typeof t||"number"==typeof t?void 0!==e.splitText:"string"==typeof t.nodeName?!e._componentConstructor&&s(e,t.nodeName):n||e._componentConstructor===t.nodeName}function s(e,t){return e.__n===t||e.nodeName.toLowerCase()===t.toLowerCase()}function a(e){var t=o({},e.attributes);t.children=e.children;var n=e.nodeName.defaultProps;if(void 0!==n)for(var r in n)void 0===t[r]&&(t[r]=n[r]);return t}function p(e,t){var n=t?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e);return n.__n=e,n}function c(e){e.parentNode&&e.parentNode.removeChild(e)}function d(e,t,n,o,r){if("className"===t&&(t="class"),"key"===t);else if("ref"===t)n&&n(null),o&&o(e);else if("class"!==t||r)if("style"===t){if(o&&"string"!=typeof o&&"string"!=typeof n||(e.style.cssText=o||""),o&&"object"==typeof o){if("string"!=typeof n)for(var l in n)l in o||(e.style[l]="");for(var l in o)e.style[l]="number"==typeof o[l]&&!1===L.test(l)?o[l]+"px":o[l]}}else if("dangerouslySetInnerHTML"===t)o&&(e.innerHTML=o.__html||"");else if("o"==t[0]&&"n"==t[1]){var i=t!==(t=t.replace(/Capture$/,""));t=t.toLowerCase().substring(2),o?n||e.addEventListener(t,h,i):e.removeEventListener(t,h,i),(e.__l||(e.__l={}))[t]=o}else if("list"!==t&&"type"!==t&&!r&&t in e)f(e,t,null==o?"":o),null!=o&&!1!==o||e.removeAttribute(t);else{var u=r&&t!==(t=t.replace(/^xlink\:?/,""));null==o||!1===o?u?e.removeAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase()):e.removeAttribute(t):"function"!=typeof o&&(u?e.setAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase(),o):e.setAttribute(t,o))}else e.className=o||""}function f(e,t,n){try{e[t]=n}catch(e){}}function h(e){return this.__l[e.type](A.event&&A.event(e)||e)}function m(){for(var e;e=j.pop();)A.afterMount&&A.afterMount(e),e.componentDidMount&&e.componentDidMount()}function _(e,t,n,o,r,l){P++||(q=null!=r&&void 0!==r.ownerSVGElement,B=null!=e&&!("__preactattr_"in e));var i=v(e,t,n,o,l);return r&&i.parentNode!==r&&r.appendChild(i),--P||(B=!1,l||m()),i}function v(e,t,n,o,r){var l=e,i=q;if(null==t&&(t=""),"string"==typeof t)return e&&void 0!==e.splitText&&e.parentNode&&(!e._component||r)?e.nodeValue!=t&&(e.nodeValue=t):(l=document.createTextNode(t),e&&(e.parentNode&&e.parentNode.replaceChild(l,e),b(e,!0))),l.__preactattr_=!0,l;if("function"==typeof t.nodeName)return I(e,t,n,o);if(q="svg"===t.nodeName||"foreignObject"!==t.nodeName&&q,(!e||!s(e,String(t.nodeName)))&&(l=p(String(t.nodeName),q),e)){for(;e.firstChild;)l.appendChild(e.firstChild);e.parentNode&&e.parentNode.replaceChild(l,e),b(e,!0)}var u=l.firstChild,a=l.__preactattr_||(l.__preactattr_={}),c=t.children;return!B&&c&&1===c.length&&"string"==typeof c[0]&&null!=u&&void 0!==u.splitText&&null==u.nextSibling?u.nodeValue!=c[0]&&(u.nodeValue=c[0]):(c&&c.length||null!=u)&&y(l,c,n,o,B||null!=a.dangerouslySetInnerHTML),O(l,t.attributes,a),q=i,l}function y(e,t,n,o,r){var l,i,s,a,p=e.childNodes,d=[],f={},h=0,m=0,_=p.length,y=0,g=t?t.length:0;if(0!==_)for(var O=0;O<_;O++){var w=p[O],C=w.__preactattr_,E=g&&C?w._component?w._component.__k:C.key:null;null!=E?(h++,f[E]=w):(C||(void 0!==w.splitText?!r||w.nodeValue.trim():r))&&(d[y++]=w)}if(0!==g)for(var O=0;O<g;O++){s=t[O],a=null;var E=s.key;if(null!=E)h&&void 0!==f[E]&&(a=f[E],f[E]=void 0,h--);else if(!a&&m<y)for(l=m;l<y;l++)if(void 0!==d[l]&&u(i=d[l],s,r)){a=i,d[l]=void 0,l===y-1&&y--,l===m&&m++;break}(a=v(a,s,n,o))&&a!==e&&(O>=_?e.appendChild(a):a!==p[O]&&(a===p[O+1]?c(p[O]):e.insertBefore(a,p[O]||null)))}if(h)for(var O in f)void 0!==f[O]&&b(f[O],!1);for(;m<=y;)void 0!==(a=d[y--])&&b(a,!1)}function b(e,t){var n=e._component;n?k(n):(null!=e.__preactattr_&&e.__preactattr_.ref&&e.__preactattr_.ref(null),!1!==t&&null!=e.__preactattr_||c(e),g(e))}function g(e){for(e=e.lastChild;e;){var t=e.previousSibling;b(e,!0),e=t}}function O(e,t,n){var o;for(o in n)t&&null!=t[o]||null==n[o]||d(e,o,n[o],n[o]=void 0,q);for(o in t)"children"===o||"innerHTML"===o||o in n&&t[o]===("value"===o||"checked"===o?e[o]:n[o])||d(e,o,n[o],n[o]=t[o],q)}function w(e){var t=e.constructor.name;(U[t]||(U[t]=[])).push(e)}function C(e,t,n){var o,r=U[e.name];if(e.prototype&&e.prototype.render?(o=new e(t,n),M.call(o,t,n)):(o=new M(t,n),o.constructor=e,o.render=E),r)for(var l=r.length;l--;)if(r[l].constructor===e){o.__b=r[l].__b,r.splice(l,1);break}return o}function E(e,t,n){return this.constructor(e,n)}function x(e,t,n,o,r){e.__x||(e.__x=!0,(e.__r=t.ref)&&delete t.ref,(e.__k=t.key)&&delete t.key,!e.base||r?e.componentWillMount&&e.componentWillMount():e.componentWillReceiveProps&&e.componentWillReceiveProps(t,o),o&&o!==e.context&&(e.__c||(e.__c=e.context),e.context=o),e.__p||(e.__p=e.props),e.props=t,e.__x=!1,0!==n&&(1!==n&&!1===A.syncComponentUpdates&&e.base?l(e):N(e,1,r)),e.__r&&e.__r(e))}function N(e,t,n,r){if(!e.__x){var l,i,u,s=e.props,p=e.state,c=e.context,d=e.__p||s,f=e.__s||p,h=e.__c||c,v=e.base,y=e.__b,g=v||y,O=e._component,w=!1;if(v&&(e.props=d,e.state=f,e.context=h,2!==t&&e.shouldComponentUpdate&&!1===e.shouldComponentUpdate(s,p,c)?w=!0:e.componentWillUpdate&&e.componentWillUpdate(s,p,c),e.props=s,e.state=p,e.context=c),e.__p=e.__s=e.__c=e.__b=null,e.__d=!1,!w){l=e.render(s,p,c),e.getChildContext&&(c=o(o({},c),e.getChildContext()));var E,I,M=l&&l.nodeName;if("function"==typeof M){var S=a(l);i=O,i&&i.constructor===M&&S.key==i.__k?x(i,S,1,c,!1):(E=i,e._component=i=C(M,S,c),i.__b=i.__b||y,i.__u=e,x(i,S,0,c,!1),N(i,1,n,!0)),I=i.base}else u=g,E=O,E&&(u=e._component=null),(g||1===t)&&(u&&(u._component=null),I=_(u,l,c,n||!v,g&&g.parentNode,!0));if(g&&I!==g&&i!==O){var D=g.parentNode;D&&I!==D&&(D.replaceChild(I,g),E||(g._component=null,b(g,!1)))}if(E&&k(E),e.base=I,I&&!r){for(var T=e,L=e;L=L.__u;)(T=L).base=I;I._component=T,I._componentConstructor=T.constructor}}if(!v||n?j.unshift(e):w||(m(),e.componentDidUpdate&&e.componentDidUpdate(d,f,h),A.afterUpdate&&A.afterUpdate(e)),null!=e.__h)for(;e.__h.length;)e.__h.pop().call(e);P||r||m()}}function I(e,t,n,o){for(var r=e&&e._component,l=r,i=e,u=r&&e._componentConstructor===t.nodeName,s=u,p=a(t);r&&!s&&(r=r.__u);)s=r.constructor===t.nodeName;return r&&s&&(!o||r._component)?(x(r,p,3,n,o),e=r.base):(l&&!u&&(k(l),e=i=null),r=C(t.nodeName,p,n),e&&!r.__b&&(r.__b=e,i=null),x(r,p,1,n,o),e=r.base,i&&e!==i&&(i._component=null,b(i,!1))),e}function k(e){A.beforeUnmount&&A.beforeUnmount(e);var t=e.base;e.__x=!0,e.componentWillUnmount&&e.componentWillUnmount(),e.base=null;var n=e._component;n?k(n):t&&(t.__preactattr_&&t.__preactattr_.ref&&t.__preactattr_.ref(null),e.__b=t,c(t),w(e),g(t)),e.__r&&e.__r(null)}function M(e,t){this.__d=!0,this.context=t,this.props=e,this.state=this.state||{}}function S(e,t,n){return _(n,e,{},!1,t,!1)}var A={},D=[],T=[],L=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,V=[],j=[],P=0,q=!1,B=!1,U={};o(M.prototype,{setState:function(e,t){var n=this.state;this.__s||(this.__s=o({},n)),o(n,"function"==typeof e?e(n,this.props):e),t&&(this.__h=this.__h||[]).push(t),l(this)},forceUpdate:function(e){e&&(this.__h=this.__h||[]).push(e),N(this,2)},render:function(){}});var R={h:n,createElement:n,cloneElement:r,Component:M,render:S,rerender:i,options:A};e.exports=R}()},function(e,t,n){e.exports=n(2)},function(e,t,n){"use strict";function o(e){if(!e.element)throw new Error("element is not defined");if(!e.id)throw new Error("id is not defined");if(!e.source)throw new Error("source is not defined");Array.isArray(e.source)&&(e.source=s(e.source)),(0,l.render)((0,l.createElement)(u.default,e),e.element)}var r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},l=n(0),i=n(3),u=function(e){return e&&e.__esModule?e:{default:e}}(i),s=function(e){return function(t,n){n(e.filter(function(e){return-1!==e.toLowerCase().indexOf(t.toLowerCase())}))}};o.enhanceSelectElement=function(e){if(!e.selectElement)throw new Error("selectElement is not defined");if(!e.source){var t=[].filter.call(e.selectElement.options,function(t){return t.value||e.preserveNullOptions});e.source=t.map(function(e){return e.textContent||e.innerText})}if(e.onConfirm=e.onConfirm||function(t){var n=[].filter.call(e.selectElement.options,function(e){return(e.textContent||e.innerText)===t})[0];n&&(n.selected=!0)},e.selectElement.value||void 0===e.defaultValue){var n=e.selectElement.options[e.selectElement.options.selectedIndex];e.defaultValue=n.textContent||n.innerText}void 0===e.name&&(e.name=""),void 0===e.id&&(void 0===e.selectElement.id?e.id="":e.id=e.selectElement.id),void 0===e.autoselect&&(e.autoselect=!0);var l=document.createElement("span");e.selectElement.parentNode.insertBefore(l,e.selectElement),o(r({},e,{element:l})),e.selectElement.style.display="none",e.selectElement.id=e.selectElement.id+"-select"},e.exports=o},function(e,t,n){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t){}function l(e,t){if(e)return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){"function"!=typeof t&&null!==t||(e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t))}function u(){return!(!navigator.userAgent.match(/(iPod|iPhone|iPad)/g)||!navigator.userAgent.match(/AppleWebKit/g))}function s(e){return e>47&&e<58||32===e||8===e||e>64&&e<91||e>95&&e<112||e>185&&e<193||e>218&&e<223}function a(e){return y?{onInput:e}:b?{onChange:e}:void 0}t.__esModule=!0,t.default=void 0;var p,c,d=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},f=n(0),h=n(4),m=o(h),_=n(5),v=o(_),y=!0,b=!1,g={13:"enter",27:"escape",32:"space",38:"up",40:"down"},O=function(){var e=document.createElement("x");return e.style.cssText="pointer-events:auto","auto"===e.style.pointerEvents}(),w=(c=p=function(e){function t(n){r(this,t);var o=l(this,e.call(this,n));return o.elementReferences={},o.state={focused:null,hovered:null,menuOpen:!1,options:n.defaultValue?[n.defaultValue]:[],query:n.defaultValue,selected:null},o.handleComponentBlur=o.handleComponentBlur.bind(o),o.handleKeyDown=o.handleKeyDown.bind(o),o.handleUpArrow=o.handleUpArrow.bind(o),o.handleDownArrow=o.handleDownArrow.bind(o),o.handleEnter=o.handleEnter.bind(o),o.handlePrintableKey=o.handlePrintableKey.bind(o),o.handleOptionBlur=o.handleOptionBlur.bind(o),o.handleOptionClick=o.handleOptionClick.bind(o),o.handleOptionFocus=o.handleOptionFocus.bind(o),o.handleOptionMouseDown=o.handleOptionMouseDown.bind(o),o.handleOptionMouseEnter=o.handleOptionMouseEnter.bind(o),o.handleOptionMouseOut=o.handleOptionMouseOut.bind(o),o.handleOptionTouchEnd=o.handleOptionTouchEnd.bind(o),o.handleInputBlur=o.handleInputBlur.bind(o),o.handleInputChange=o.handleInputChange.bind(o),o.handleInputFocus=o.handleInputFocus.bind(o),o.pollInputElement=o.pollInputElement.bind(o),o.getDirectInputChanges=o.getDirectInputChanges.bind(o),o}return i(t,e),t.prototype.componentDidMount=function(){this.pollInputElement()},t.prototype.componentWillUnmount=function(){clearTimeout(this.$pollInput)},t.prototype.pollInputElement=function(){var e=this;this.getDirectInputChanges(),this.$pollInput=setTimeout(function(){e.pollInputElement()},100)},t.prototype.getDirectInputChanges=function(){var e=this.elementReferences[-1];e.value!==this.state.query&&this.handleInputChange({target:{value:e.value}})},t.prototype.componentDidUpdate=function(e,t){var n=this.state.focused,o=null===n,r=t.focused!==n;r&&!o&&this.elementReferences[n].focus();var l=-1===n,i=r&&null===t.focused;if(l&&i){var u=this.elementReferences[n];u.setSelectionRange(0,u.value.length)}},t.prototype.hasAutoselect=function(){return!u()&&this.props.autoselect},t.prototype.templateInputValue=function(e){var t=this.props.templates&&this.props.templates.inputValue;return t?t(e):e},t.prototype.templateSuggestion=function(e){var t=this.props.templates&&this.props.templates.suggestion;return t?t(e):e},t.prototype.handleComponentBlur=function(e){var t=this.state,n=t.options,o=t.query,r=t.selected,l=void 0;this.props.confirmOnBlur?(l=e.query||o,this.props.onConfirm(n[r])):l=o,this.setState({focused:null,menuOpen:e.menuOpen||!1,query:l,selected:null})},t.prototype.handleOptionBlur=function(e,t){var n=this.state,o=n.focused,r=n.menuOpen,l=n.options,i=n.selected,s=null===e.relatedTarget,a=e.relatedTarget===this.elementReferences[-1],p=o!==t&&-1!==o;if(s||!p&&!a){var c=r&&u();this.handleComponentBlur({menuOpen:c,query:this.templateInputValue(l[i])})}},t.prototype.handleInputBlur=function(e){var t=this.state,n=t.focused,o=t.menuOpen,r=t.options,l=t.query,i=t.selected;if(-1===n){var s=o&&u(),a=u()?l:this.templateInputValue(r[i]);this.handleComponentBlur({menuOpen:s,query:a})}},t.prototype.handleInputChange=function(e){var t=this,n=this.props,o=n.minLength,r=n.source,l=n.showAllValues,i=this.hasAutoselect(),u=e.target.value,s=0===u.length,a=this.state.query.length!==u.length,p=u.length>=o;this.setState({query:u}),l||!s&&a&&p?r(u,function(e){var n=e.length>0;t.setState({menuOpen:n,options:e,selected:i&&n?0:-1})}):!s&&p||this.setState({menuOpen:!1,options:[]})},t.prototype.handleInputClick=function(e){this.handleInputChange(e)},t.prototype.handleInputFocus=function(e){this.setState({focused:-1})},t.prototype.handleOptionFocus=function(e){this.setState({focused:e,hovered:null,selected:e})},t.prototype.handleOptionMouseEnter=function(e,t){this.setState({hovered:t})},t.prototype.handleOptionMouseOut=function(e,t){this.setState({hovered:null})},t.prototype.handleOptionTouchEnd=function(e,t){this.handleOptionClick(e,t)},t.prototype.handleOptionClick=function(e,t){var n=this.state.options[t],o=this.templateInputValue(n);this.props.onConfirm(n),this.setState({focused:-1,menuOpen:!1,query:o,selected:-1})},t.prototype.handleOptionMouseDown=function(e){e.preventDefault()},t.prototype.handleUpArrow=function(e){e.preventDefault();var t=this.state,n=t.menuOpen,o=t.selected;-1!==o&&n&&this.handleOptionFocus(o-1)},t.prototype.handleDownArrow=function(e){var t=this;if(e.preventDefault(),this.props.showAllValues&&!1===this.state.menuOpen)e.preventDefault(),this.props.source("",function(e){t.setState({menuOpen:!0,options:e,selected:0,focused:0,hovered:null})});else if(!0===this.state.menuOpen){var n=this.state,o=n.menuOpen,r=n.options,l=n.selected,i=l!==r.length-1,u=i&&o;u&&this.handleOptionFocus(l+1)}},t.prototype.handleSpace=function(e){var t=this;this.props.showAllValues&&!1===this.state.menuOpen&&(e.preventDefault(),this.props.source("",function(e){t.setState({menuOpen:!0,options:e})}))},t.prototype.handleEnter=function(e){this.state.menuOpen&&(e.preventDefault(),this.state.selected>=0&&this.handleOptionClick(e,this.state.selected))},t.prototype.handlePrintableKey=function(e){var t=this.elementReferences[-1];e.target===t||t.focus()},t.prototype.handleKeyDown=function(e){switch(g[e.keyCode]){case"up":this.handleUpArrow(e);break;case"down":this.handleDownArrow(e);break;case"space":this.handleSpace(e);break;case"enter":this.handleEnter(e);break;case"escape":this.handleComponentBlur({query:this.state.query});break;default:s(e.keyCode)&&this.handlePrintableKey(e)}},t.prototype.render=function(){var e=this,t=this.props,n=t.cssNamespace,o=t.displayMenu,r=t.id,l=t.minLength,i=t.name,u=t.placeholder,s=t.required,p=t.showAllValues,c=this.state,h=c.focused,_=c.hovered,y=c.menuOpen,b=c.options,g=c.query,w=c.selected,C=this.hasAutoselect(),E=-1===h,x=0===b.length,N=0!==g.length,I=g.length>=l,k=this.props.showNoOptionsFound&&E&&x&&N&&I,M=n+"__wrapper",S=n+"__input",A=null!==h,D=A?" "+S+"--focused":"",T=this.props.showAllValues?" "+S+"--show-all-values":" "+S+"--default",L=n+"__dropdown-arrow-down",V=-1!==h&&null!==h,j=n+"__menu",P=j+"--"+o,q=y||k,B=j+"--"+(q?"visible":"hidden"),U=n+"__option",R=n+"__hint",F=this.templateInputValue(b[w]),W=F&&0===F.toLowerCase().indexOf(g.toLowerCase()),K=W&&C?g+F.substr(g.length):"",H=O&&K;return(0,f.createElement)("div",{className:M,onKeyDown:this.handleKeyDown},(0,f.createElement)(m.default,{length:b.length,queryLength:g.length,minQueryLength:l,selectedOption:this.templateInputValue(b[w])}),H&&(0,f.createElement)("span",null,(0,f.createElement)("input",{className:R,readonly:!0,tabIndex:"-1",value:K})),(0,f.createElement)("input",d({"aria-activedescendant":!!V&&r+"__option--"+h,"aria-expanded":y,"aria-owns":r+"__listbox",autoComplete:"off",className:""+S+D+T,id:r,onClick:function(t){return e.handleInputClick(t)},onBlur:this.handleInputBlur},a(this.handleInputChange),{onFocus:this.handleInputFocus,name:i,placeholder:u,ref:function(t){e.elementReferences[-1]=t},role:"combobox",type:"text",required:s,value:g})),p&&(0,f.createElement)(v.default,{className:L}),(0,f.createElement)("ul",{className:j+" "+P+" "+B,id:r+"__listbox",role:"listbox"},b.map(function(t,n){var o=-1===h?w===n:h===n,l=o&&null===_?" "+U+"--focused":"",i=n%2?" "+U+"--odd":"";return(0,f.createElement)("li",{"aria-selected":h===n,className:""+U+l+i,dangerouslySetInnerHTML:{__html:e.templateSuggestion(t)},id:r+"__option--"+n,key:n,onBlur:function(t){return e.handleOptionBlur(t,n)},onClick:function(t){return e.handleOptionClick(t,n)},onMouseDown:e.handleOptionMouseDown,onMouseEnter:function(t){return e.handleOptionMouseEnter(t,n)},onMouseOut:function(t){return e.handleOptionMouseOut(t,n)},onTouchEnd:function(t){return e.handleOptionTouchEnd(t,n)},ref:function(t){e.elementReferences[n]=t},role:"option",tabIndex:"-1"})}),k&&(0,f.createElement)("li",{className:U+" "+U+"--no-results"},"No results found")))},t}(f.Component),p.defaultProps={autoselect:!1,cssNamespace:"autocomplete",defaultValue:"",displayMenu:"inline",minLength:0,name:"input-autocomplete",placeholder:"",onConfirm:function(){},confirmOnBlur:!0,showNoOptionsFound:!0,showAllValues:!1,required:!1},c);t.default=w},function(e,t,n){"use strict";function o(e,t){}function r(e,t){if(e)return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){"function"!=typeof t&&null!==t||(e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t))}t.__esModule=!0,t.default=void 0;var i=n(0),u=function(e){function t(){var n,l,i;o(this,t);for(var u=arguments.length,s=Array(u),a=0;a<u;a++)s[a]=arguments[a];return n=l=r(this,e.call.apply(e,[this].concat(s))),l.state={bump:!1},i=n,r(l,i)}return l(t,e),t.prototype.componentWillReceiveProps=function(e){e.queryLength!==this.props.queryLength&&this.setState(function(e){return{bump:!e.bump}})},t.prototype.render=function(){var e=this.props,t=e.length,n=e.queryLength,o=e.minQueryLength,r=e.selectedOption,l=this.state.bump,u={result:1===t?"result":"results",is:1===t?"is":"are"},s=n<o,a=0===t,p=r?(0,i.createElement)("span",null,r," (1 of ",t,") is selected."):null,c=null;return c=s?(0,i.createElement)("span",null,"Type in ",o," or more characters for results."):a?(0,i.createElement)("span",null,"No search results."):(0,i.createElement)("span",null,t," ",u.result," ",u.is," available. ",p),(0,i.createElement)("div",{"aria-atomic":"true","aria-live":"polite",role:"status",style:{border:"0",clip:"rect(0 0 0 0)",height:"1px",marginBottom:"-1px",marginRight:"-1px",overflow:"hidden",padding:"0",position:"absolute",whiteSpace:"nowrap",width:"1px"}},c,(0,i.createElement)("span",null,l?",":",,"))},t}(i.Component);t.default=u},function(e,t,n){"use strict";function o(e,t){}function r(e,t){if(e)return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function l(e,t){"function"!=typeof t&&null!==t||(e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t))}t.__esModule=!0,t.default=void 0;var i=n(0),u=function(e){function t(){return o(this,t),r(this,e.apply(this,arguments))}return l(t,e),t.prototype.render=function(){return(0,i.createElement)("svg",{version:"1.1",xmlns:"http://www.w3.org/2000/svg",className:this.props.className},(0,i.createElement)("g",{stroke:"none",fill:"none","fill-rule":"evenodd"},(0,i.createElement)("polygon",{fill:"#000000",points:"0 0 22 0 11 17"})))},t}(i.Component);t.default=u}])});
-//# sourceMappingURL=accessible-autocomplete.min.js.map \ No newline at end of file
diff --git a/web/vendor/dropzone.min.js b/web/vendor/dropzone.min.js
index dd326fc51..901bd08ee 100644
--- a/web/vendor/dropzone.min.js
+++ b/web/vendor/dropzone.min.js
@@ -1 +1,66 @@
-(function(){var a={};window.EXIF=a;function b(f,d){var l="";for(var e=d;e<d+4;e++){l+=String.fromCharCode(f.getUint8(e))}if(l!="Exif"){return false}var j,m=d+6;if(f.getUint16(m)==18761){j=false}else{if(f.getUint16(m)==19789){j=true}else{return false}}if(f.getUint16(m+2,!j)!=42){return false}var c=f.getUint32(m+4,!j);if(c<8){return false}var p=m+c,h=f.getUint16(p,!j),o={},k,g;for(g=0;g<h;g++){k=p+g*12+2;if(f.getUint16(k,!j)==274){return parseInt(f.getUint16(k+8,!j),10)}}return false}a.getData=function(l){if((l instanceof Image||l instanceof HTMLImageElement)&&!l.complete){return false}var k=l.src;if(k.match(/^http/)){var d=document.createElement("canvas"),q=d.getContext("2d");d.width=l.width;d.height=l.height;q.drawImage(l,0,0);k=d.toDataURL("image/jpeg")}var m=k.replace(/^data\:([^\;]+)\;base64,/gmi,"");var j=atob(m);var n=j.length;var e=new ArrayBuffer(n);var o=new Uint8Array(e);for(var h=0;h<n;h++){o[h]=j.charCodeAt(h)}var p=new DataView(e);if((p.getUint8(0)!=255)||(p.getUint8(1)!=216)){return false}var f=2,c=e.byteLength,g;while(f<c){if(p.getUint8(f)!=255){return false}g=p.getUint8(f+1);if(g==225){return b(p,f+4)}else{f+=2+p.getUint16(f+2)}}}})();(function(){var g,i,f,c,d,b,e,l,k,j=[].slice,a=function(p,n){for(var m in n){if(h.call(n,m)){p[m]=n[m]}}function o(){this.constructor=p}o.prototype=n.prototype;p.prototype=new o();p.__super__=n.prototype;return p},h={}.hasOwnProperty;l=function(){};i=(function(){function m(){}m.prototype.addEventListener=m.prototype.on;m.prototype.on=function(o,n){this._callbacks=this._callbacks||{};if(!this._callbacks[o]){this._callbacks[o]=[]}this._callbacks[o].push(n);return this};m.prototype.emit=function(){var p,s,r,q,o,n;q=arguments[0],p=2<=arguments.length?j.call(arguments,1):[];this._callbacks=this._callbacks||{};r=this._callbacks[q];if(r){for(o=0,n=r.length;o<n;o++){s=r[o];s.apply(this,p)}}return this};m.prototype.removeListener=m.prototype.off;m.prototype.removeAllListeners=m.prototype.off;m.prototype.removeEventListener=m.prototype.off;m.prototype.off=function(s,q){var t,r,p,o,n;if(!this._callbacks||arguments.length===0){this._callbacks={};return this}r=this._callbacks[s];if(!r){return this}if(arguments.length===1){delete this._callbacks[s];return this}for(p=o=0,n=r.length;o<n;p=++o){t=r[p];if(t===q){r.splice(p,1);break}}return this};return m})();g=(function(o){var p,m;a(n,o);n.prototype.Emitter=i;n.prototype.events=["drop","dragstart","dragend","dragenter","dragover","dragleave","addedfile","addedfiles","removedfile","thumbnail","error","errormultiple","processing","processingmultiple","uploadprogress","totaluploadprogress","sending","sendingmultiple","success","successmultiple","canceled","canceledmultiple","complete","completemultiple","reset","maxfilesexceeded","maxfilesreached","queuecomplete"];n.prototype.defaultOptions={url:null,method:"post",withCredentials:false,timeout:30000,parallelUploads:2,uploadMultiple:false,maxFilesize:256,paramName:"file",createImageThumbnails:true,maxThumbnailFilesize:10,thumbnailWidth:120,thumbnailHeight:120,thumbnailMethod:"crop",resizeWidth:null,resizeHeight:null,resizeMimeType:null,resizeQuality:0.8,resizeMethod:"contain",filesizeBase:1000,maxFiles:null,params:{},headers:null,clickable:true,ignoreHiddenFiles:true,acceptedFiles:null,acceptedMimeTypes:null,autoProcessQueue:true,autoQueue:true,addRemoveLinks:false,previewsContainer:null,hiddenInputContainer:"body",capture:null,renameFilename:null,renameFile:null,forceFallback:false,dictDefaultMessage:"Drop files here to upload",dictFallbackMessage:"Your browser does not support drag'n'drop file uploads.",dictFallbackText:"Please use the fallback form below to upload your files like in the olden days.",dictFileTooBig:"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",dictInvalidFileType:"You can't upload files of this type.",dictResponseError:"Server responded with {{statusCode}} code.",dictCancelUpload:"Cancel upload",dictCancelUploadConfirmation:"Are you sure you want to cancel this upload?",dictRemoveFile:"Remove file",dictRemoveFileConfirmation:null,dictMaxFilesExceeded:"You can not upload any more files.",dictFileSizeUnits:{tb:"TB",gb:"GB",mb:"MB",kb:"KB",b:"b"},init:function(){return l},accept:function(r,q){return q()},fallback:function(){var v,r,q,s,u,t;this.element.className=this.element.className+" dz-browser-not-supported";u=this.element.getElementsByTagName("div");for(r=0,q=u.length;r<q;r++){v=u[r];if(/(^| )dz-message($| )/.test(v.className)){s=v;v.className="dz-message";continue}}if(!s){s=n.createElement('<div class="dz-message"><span></span></div>');this.element.appendChild(s)}t=s.getElementsByTagName("span")[0];if(t){if(t.textContent!=null){t.textContent=this.options.dictFallbackMessage}else{if(t.innerText!=null){t.innerText=this.options.dictFallbackMessage}}}return this.element.appendChild(this.getFallbackForm())},resize:function(s,u,q,w){var v,t,r;v={srcX:0,srcY:0,srcWidth:s.width,srcHeight:s.height};t=s.width/s.height;if((u==null)&&(q==null)){u=v.srcWidth;q=v.srcHeight}else{if(u==null){u=q*t}else{if(q==null){q=u/t}}}u=Math.min(u,v.srcWidth);q=Math.min(q,v.srcHeight);r=u/q;if(v.srcWidth>u||v.srcHeight>q){if(w==="crop"){if(t>r){v.srcHeight=s.height;v.srcWidth=v.srcHeight*r}else{v.srcWidth=s.width;v.srcHeight=v.srcWidth/r}}else{if(w==="contain"){if(t>r){q=u/t}else{u=q*t}}else{throw new Error("Unknown resizeMethod '"+w+"'")}}}v.srcX=(s.width-v.srcWidth)/2;v.srcY=(s.height-v.srcHeight)/2;v.trgWidth=u;v.trgHeight=q;return v},transformFile:function(r,q){if((this.options.resizeWidth||this.options.resizeHeight)&&r.type.match(/image.*/)){return this.resizeImage(r,this.options.resizeWidth,this.options.resizeHeight,this.options.resizeMethod,q)}else{return q(r)}},previewTemplate:'<div class="dz-preview dz-file-preview">\n <div class="dz-image"><img data-dz-thumbnail /></div>\n <div class="dz-details">\n <div class="dz-size"><span data-dz-size></span></div>\n <div class="dz-filename"><span data-dz-name></span></div>\n </div>\n <div class="dz-progress"><span class="dz-upload" data-dz-uploadprogress></span></div>\n <div class="dz-error-message"><span data-dz-errormessage></span></div>\n <div class="dz-success-mark">\n <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n <title>Check</title>\n <defs></defs>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n <path d="M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" stroke-opacity="0.198794158" stroke="#747474" fill-opacity="0.816519475" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>\n </g>\n </svg>\n </div>\n <div class="dz-error-mark">\n <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n <title>Error</title>\n <defs></defs>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n <g id="Check-+-Oval-2" sketch:type="MSLayerGroup" stroke="#747474" stroke-opacity="0.198794158" fill="#FFFFFF" fill-opacity="0.816519475">\n <path d="M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" sketch:type="MSShapeGroup"></path>\n </g>\n </g>\n </svg>\n </div>\n</div>',drop:function(q){return this.element.classList.remove("dz-drag-hover")},dragstart:l,dragend:function(q){return this.element.classList.remove("dz-drag-hover")},dragenter:function(q){return this.element.classList.add("dz-drag-hover")},dragover:function(q){return this.element.classList.add("dz-drag-hover")},dragleave:function(q){return this.element.classList.remove("dz-drag-hover")},paste:l,reset:function(){return this.element.classList.remove("dz-started")},addedfile:function(s){var w,u,t,B,x,v,r,q,C,A,z,D,y;if(this.element===this.previewsContainer){this.element.classList.add("dz-started")}if(this.previewsContainer){s.previewElement=n.createElement(this.options.previewTemplate.trim());s.previewTemplate=s.previewElement;this.previewsContainer.appendChild(s.previewElement);q=s.previewElement.querySelectorAll("[data-dz-name]");for(w=0,B=q.length;w<B;w++){r=q[w];r.textContent=s.name}C=s.previewElement.querySelectorAll("[data-dz-size]");for(u=0,x=C.length;u<x;u++){r=C[u];r.innerHTML=this.filesize(s.size)}if(this.options.addRemoveLinks){s._removeLink=n.createElement('<a class="dz-remove" href="javascript:undefined;" data-dz-remove>'+this.options.dictRemoveFile+"</a>");s.previewElement.appendChild(s._removeLink)}z=(function(E){return function(F){F.preventDefault();F.stopPropagation();if(s.status===n.UPLOADING){return n.confirm(E.options.dictCancelUploadConfirmation,function(){return E.removeFile(s)})}else{if(E.options.dictRemoveFileConfirmation){return n.confirm(E.options.dictRemoveFileConfirmation,function(){return E.removeFile(s)})}else{return E.removeFile(s)}}}})(this);A=s.previewElement.querySelectorAll("[data-dz-remove]");y=[];for(t=0,v=A.length;t<v;t++){D=A[t];y.push(D.addEventListener("click",z))}return y}},removedfile:function(q){var r;if(q.previewElement){if((r=q.previewElement)!=null){r.parentNode.removeChild(q.previewElement)}}return this._updateMaxFilesReachedClass()},thumbnail:function(t,v){var s,q,u,r;if(t.previewElement){t.previewElement.classList.remove("dz-file-preview");u=t.previewElement.querySelectorAll("[data-dz-thumbnail]");for(s=0,q=u.length;s<q;s++){r=u[s];r.alt=t.name;r.src=v}return setTimeout(((function(w){return function(){return t.previewElement.classList.add("dz-image-preview")}})(this)),1)}},error:function(t,w){var r,q,v,u,s;if(t.previewElement){t.previewElement.classList.add("dz-error");if(typeof w!=="String"&&w.error){w=w.error}u=t.previewElement.querySelectorAll("[data-dz-errormessage]");s=[];for(r=0,q=u.length;r<q;r++){v=u[r];s.push(v.textContent=w)}return s}},errormultiple:l,processing:function(q){if(q.previewElement){q.previewElement.classList.add("dz-processing");if(q._removeLink){return q._removeLink.textContent=this.options.dictCancelUpload}}},processingmultiple:l,uploadprogress:function(v,s,u){var r,q,x,w,t;if(v.previewElement){w=v.previewElement.querySelectorAll("[data-dz-uploadprogress]");t=[];for(r=0,q=w.length;r<q;r++){x=w[r];if(x.nodeName==="PROGRESS"){t.push(x.value=s)}else{t.push(x.style.width=s+"%")}}return t}},totaluploadprogress:l,sending:l,sendingmultiple:l,success:function(q){if(q.previewElement){return q.previewElement.classList.add("dz-success")}},successmultiple:l,canceled:function(q){return this.emit("error",q,"Upload canceled.")},canceledmultiple:l,complete:function(q){if(q._removeLink){q._removeLink.textContent=this.options.dictRemoveFile}if(q.previewElement){return q.previewElement.classList.add("dz-complete")}},completemultiple:l,maxfilesexceeded:l,maxfilesreached:l,queuecomplete:l,addedfiles:l};p=function(){var s,t,q,r,u,v,w;v=arguments[0],u=2<=arguments.length?j.call(arguments,1):[];for(s=0,q=u.length;s<q;s++){r=u[s];for(t in r){w=r[t];v[t]=w}}return v};function n(t,r){var q,u,s;this.element=t;this.version=n.version;this.defaultOptions.previewTemplate=this.defaultOptions.previewTemplate.replace(/\n*/g,"");this.clickableElements=[];this.listeners=[];this.files=[];if(typeof this.element==="string"){this.element=document.querySelector(this.element)}if(!(this.element&&(this.element.nodeType!=null))){throw new Error("Invalid dropzone element.")}if(this.element.dropzone){throw new Error("Dropzone already attached.")}n.instances.push(this);this.element.dropzone=this;q=(s=n.optionsForElement(this.element))!=null?s:{};this.options=p({},this.defaultOptions,q,r!=null?r:{});if(this.options.forceFallback||!n.isBrowserSupported()){return this.options.fallback.call(this)}if(this.options.url==null){this.options.url=this.element.getAttribute("action")}if(!this.options.url){throw new Error("No URL provided.")}if(this.options.acceptedFiles&&this.options.acceptedMimeTypes){throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.")}if(this.options.acceptedMimeTypes){this.options.acceptedFiles=this.options.acceptedMimeTypes;delete this.options.acceptedMimeTypes}if(this.options.renameFilename!=null){this.options.renameFile=(function(v){return function(w){return v.options.renameFilename.call(v,w.name,w)}})(this)}this.options.method=this.options.method.toUpperCase();if((u=this.getExistingFallback())&&u.parentNode){u.parentNode.removeChild(u)}if(this.options.previewsContainer!==false){if(this.options.previewsContainer){this.previewsContainer=n.getElement(this.options.previewsContainer,"previewsContainer")}else{this.previewsContainer=this.element}}if(this.options.clickable){if(this.options.clickable===true){this.clickableElements=[this.element]}else{this.clickableElements=n.getElements(this.options.clickable,"clickable")}}this.init()}n.prototype.getAcceptedFiles=function(){var t,r,q,u,s;u=this.files;s=[];for(r=0,q=u.length;r<q;r++){t=u[r];if(t.accepted){s.push(t)}}return s};n.prototype.getRejectedFiles=function(){var t,r,q,u,s;u=this.files;s=[];for(r=0,q=u.length;r<q;r++){t=u[r];if(!t.accepted){s.push(t)}}return s};n.prototype.getFilesWithStatus=function(r){var u,s,q,v,t;v=this.files;t=[];for(s=0,q=v.length;s<q;s++){u=v[s];if(u.status===r){t.push(u)}}return t};n.prototype.getQueuedFiles=function(){return this.getFilesWithStatus(n.QUEUED)};n.prototype.getUploadingFiles=function(){return this.getFilesWithStatus(n.UPLOADING)};n.prototype.getAddedFiles=function(){return this.getFilesWithStatus(n.ADDED)};n.prototype.getActiveFiles=function(){var t,r,q,u,s;u=this.files;s=[];for(r=0,q=u.length;r<q;r++){t=u[r];if(t.status===n.UPLOADING||t.status===n.QUEUED){s.push(t)}}return s};n.prototype.init=function(){var s,t,q,w,u,r,v;if(this.element.tagName==="form"){this.element.setAttribute("enctype","multipart/form-data")}if(this.element.classList.contains("dropzone")&&!this.element.querySelector(".dz-message")){this.element.appendChild(n.createElement('<div class="dz-default dz-message"><span>'+this.options.dictDefaultMessage+"</span></div>"))}if(this.clickableElements.length){v=(function(x){return function(){if(x.hiddenFileInput){x.hiddenFileInput.parentNode.removeChild(x.hiddenFileInput)}x.hiddenFileInput=document.createElement("input");x.hiddenFileInput.setAttribute("type","file");if((x.options.maxFiles==null)||x.options.maxFiles>1){x.hiddenFileInput.setAttribute("multiple","multiple")}x.hiddenFileInput.className="dz-hidden-input";if(x.options.acceptedFiles!=null){x.hiddenFileInput.setAttribute("accept",x.options.acceptedFiles)}if(x.options.capture!=null){x.hiddenFileInput.setAttribute("capture",x.options.capture)}x.hiddenFileInput.style.visibility="hidden";x.hiddenFileInput.style.position="absolute";x.hiddenFileInput.style.top="0";x.hiddenFileInput.style.left="0";x.hiddenFileInput.style.height="0";x.hiddenFileInput.style.width="0";document.querySelector(x.options.hiddenInputContainer).appendChild(x.hiddenFileInput);return x.hiddenFileInput.addEventListener("change",function(){var A,B,z,y;B=x.hiddenFileInput.files;if(B.length){for(z=0,y=B.length;z<y;z++){A=B[z];x.addFile(A)}}x.emit("addedfiles",B);return v()})}})(this);v()}this.URL=(u=window.URL)!=null?u:window.webkitURL;r=this.events;for(t=0,q=r.length;t<q;t++){s=r[t];this.on(s,this.options[s])}this.on("uploadprogress",(function(x){return function(){return x.updateTotalUploadProgress()}})(this));this.on("removedfile",(function(x){return function(){return x.updateTotalUploadProgress()}})(this));this.on("canceled",(function(x){return function(y){return x.emit("complete",y)}})(this));this.on("complete",(function(x){return function(y){if(x.getAddedFiles().length===0&&x.getUploadingFiles().length===0&&x.getQueuedFiles().length===0){return setTimeout((function(){return x.emit("queuecomplete")}),0)}}})(this));w=function(x){x.stopPropagation();if(x.preventDefault){return x.preventDefault()}else{return x.returnValue=false}};this.listeners=[{element:this.element,events:{dragstart:(function(x){return function(y){return x.emit("dragstart",y)}})(this),dragenter:(function(x){return function(y){w(y);return x.emit("dragenter",y)}})(this),dragover:(function(x){return function(z){var y;try{y=z.dataTransfer.effectAllowed}catch(A){}z.dataTransfer.dropEffect="move"===y||"linkMove"===y?"move":"copy";w(z);return x.emit("dragover",z)}})(this),dragleave:(function(x){return function(y){return x.emit("dragleave",y)}})(this),drop:(function(x){return function(y){w(y);return x.drop(y)}})(this),dragend:(function(x){return function(y){return x.emit("dragend",y)}})(this)}}];this.clickableElements.forEach((function(x){return function(y){return x.listeners.push({element:y,events:{click:function(z){if((y!==x.element)||(z.target===x.element||n.elementInside(z.target,x.element.querySelector(".dz-message")))){x.hiddenFileInput.click()}return true}}})}})(this));this.enable();return this.options.init.call(this)};n.prototype.destroy=function(){var q;this.disable();this.removeAllFiles(true);if((q=this.hiddenFileInput)!=null?q.parentNode:void 0){this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput);this.hiddenFileInput=null}delete this.element.dropzone;return n.instances.splice(n.instances.indexOf(this),1)};n.prototype.updateTotalUploadProgress=function(){var t,u,s,r,v,x,q,w;q=0;x=0;t=this.getActiveFiles();if(t.length){v=this.getActiveFiles();for(s=0,r=v.length;s<r;s++){u=v[s];q+=u.upload.bytesSent;x+=u.upload.total}w=100*q/x}else{w=100}return this.emit("totaluploadprogress",w,x,q)};n.prototype._getParamName=function(q){if(typeof this.options.paramName==="function"){return this.options.paramName(q)}else{return""+this.options.paramName+(this.options.uploadMultiple?"["+q+"]":"")}};n.prototype._renameFile=function(q){if(typeof this.options.renameFile!=="function"){return q.name}return this.options.renameFile(q)};n.prototype.getFallbackForm=function(){var r,q,t,s;if(r=this.getExistingFallback()){return r}t='<div class="dz-fallback">';if(this.options.dictFallbackText){t+="<p>"+this.options.dictFallbackText+"</p>"}t+='<input type="file" name="'+(this._getParamName(0))+'" '+(this.options.uploadMultiple?'multiple="multiple"':void 0)+' /><input type="submit" value="Upload!"></div>';q=n.createElement(t);if(this.element.tagName!=="FORM"){s=n.createElement('<form action="'+this.options.url+'" enctype="multipart/form-data" method="'+this.options.method+'"></form>');s.appendChild(q)}else{this.element.setAttribute("enctype","multipart/form-data");this.element.setAttribute("method",this.options.method)}return s!=null?s:q};n.prototype.getExistingFallback=function(){var v,t,r,q,u,s;t=function(z){var y,x,w;for(x=0,w=z.length;x<w;x++){y=z[x];if(/(^| )fallback($| )/.test(y.className)){return y}}};u=["div","form"];for(r=0,q=u.length;r<q;r++){s=u[r];if(v=t(this.element.getElementsByTagName(s))){return v}}};n.prototype.setupEventListeners=function(){var v,u,r,q,w,t,s;t=this.listeners;s=[];for(r=0,q=t.length;r<q;r++){v=t[r];s.push((function(){var x,y;x=v.events;y=[];for(u in x){w=x[u];y.push(v.element.addEventListener(u,w,false))}return y})())}return s};n.prototype.removeEventListeners=function(){var v,u,r,q,w,t,s;t=this.listeners;s=[];for(r=0,q=t.length;r<q;r++){v=t[r];s.push((function(){var x,y;x=v.events;y=[];for(u in x){w=x[u];y.push(v.element.removeEventListener(u,w,false))}return y})())}return s};n.prototype.disable=function(){var t,r,q,u,s;this.clickableElements.forEach(function(v){return v.classList.remove("dz-clickable")});this.removeEventListeners();u=this.files;s=[];for(r=0,q=u.length;r<q;r++){t=u[r];s.push(this.cancelUpload(t))}return s};n.prototype.enable=function(){this.clickableElements.forEach(function(q){return q.classList.add("dz-clickable")});return this.setupEventListeners()};n.prototype.filesize=function(y){var r,u,t,v,s,q,x,w;s=0;q="b";if(y>0){w=["tb","gb","mb","kb","b"];for(u=t=0,v=w.length;t<v;u=++t){x=w[u];r=Math.pow(this.options.filesizeBase,4-u)/10;if(y>=r){s=y/Math.pow(this.options.filesizeBase,4-u);q=x;break}}s=Math.round(10*s)/10}return"<strong>"+s+"</strong> "+this.options.dictFileSizeUnits[q]};n.prototype._updateMaxFilesReachedClass=function(){if((this.options.maxFiles!=null)&&this.getAcceptedFiles().length>=this.options.maxFiles){if(this.getAcceptedFiles().length===this.options.maxFiles){this.emit("maxfilesreached",this.files)}return this.element.classList.add("dz-max-files-reached")}else{return this.element.classList.remove("dz-max-files-reached")}};n.prototype.drop=function(s){var r,q;if(!s.dataTransfer){return}this.emit("drop",s);r=s.dataTransfer.files;this.emit("addedfiles",r);if(r.length){q=s.dataTransfer.items;if(q&&q.length&&(q[0].webkitGetAsEntry!=null)){this._addFilesFromItems(q)}else{this.handleFiles(r)}}};n.prototype.paste=function(s){var q,r;if((s!=null?(r=s.clipboardData)!=null?r.items:void 0:void 0)==null){return}this.emit("paste",s);q=s.clipboardData.items;if(q.length){return this._addFilesFromItems(q)}};n.prototype.handleFiles=function(u){var t,r,q,s;s=[];for(r=0,q=u.length;r<q;r++){t=u[r];s.push(this.addFile(t))}return s};n.prototype._addFilesFromItems=function(r){var v,u,s,q,t;t=[];for(s=0,q=r.length;s<q;s++){u=r[s];if((u.webkitGetAsEntry!=null)&&(v=u.webkitGetAsEntry())){if(v.isFile){t.push(this.addFile(u.getAsFile()))}else{if(v.isDirectory){t.push(this._addFilesFromDirectory(v,v.name))}else{t.push(void 0)}}}else{if(u.getAsFile!=null){if((u.kind==null)||u.kind==="file"){t.push(this.addFile(u.getAsFile()))}else{t.push(void 0)}}else{t.push(void 0)}}}return t};n.prototype._addFilesFromDirectory=function(q,u){var t,s,r;t=q.createReader();s=function(v){return typeof console!=="undefined"&&console!==null?typeof console.log==="function"?console.log(v):void 0:void 0};r=(function(v){return function(){return t.readEntries(function(x){var z,y,w;if(x.length>0){for(y=0,w=x.length;y<w;y++){z=x[y];if(z.isFile){z.file(function(A){if(v.options.ignoreHiddenFiles&&A.name.substring(0,1)==="."){return}A.fullPath=u+"/"+A.name;return v.addFile(A)})}else{if(z.isDirectory){v._addFilesFromDirectory(z,u+"/"+z.name)}}}r()}return null},s)}})(this);return r()};n.prototype.accept=function(r,q){if(r.size>this.options.maxFilesize*1024*1024){return q(this.options.dictFileTooBig.replace("{{filesize}}",Math.round(r.size/1024/10.24)/100).replace("{{maxFilesize}}",this.options.maxFilesize))}else{if(!n.isValidFile(r,this.options.acceptedFiles)){return q(this.options.dictInvalidFileType)}else{if((this.options.maxFiles!=null)&&this.getAcceptedFiles().length>=this.options.maxFiles){q(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}",this.options.maxFiles));return this.emit("maxfilesexceeded",r)}else{return this.options.accept.call(this,r,q)}}}};n.prototype.addFile=function(q){q.upload={progress:0,total:q.size,bytesSent:0,filename:this._renameFile(q)};this.files.push(q);q.status=n.ADDED;this.emit("addedfile",q);this._enqueueThumbnail(q);return this.accept(q,(function(r){return function(s){if(s){q.accepted=false;r._errorProcessing([q],s)}else{q.accepted=true;if(r.options.autoQueue){r.enqueueFile(q)}}return r._updateMaxFilesReachedClass()}})(this))};n.prototype.enqueueFiles=function(t){var s,r,q;for(r=0,q=t.length;r<q;r++){s=t[r];this.enqueueFile(s)}return null};n.prototype.enqueueFile=function(q){if(q.status===n.ADDED&&q.accepted===true){q.status=n.QUEUED;if(this.options.autoProcessQueue){return setTimeout(((function(r){return function(){return r.processQueue()}})(this)),0)}}else{throw new Error("This file can't be queued because it has already been processed or was rejected.")}};n.prototype._thumbnailQueue=[];n.prototype._processingThumbnail=false;n.prototype._enqueueThumbnail=function(q){if(this.options.createImageThumbnails&&q.type.match(/image.*/)&&q.size<=this.options.maxThumbnailFilesize*1024*1024){this._thumbnailQueue.push(q);return setTimeout(((function(r){return function(){return r._processThumbnailQueue()}})(this)),0)}};n.prototype._processThumbnailQueue=function(){var q;if(this._processingThumbnail||this._thumbnailQueue.length===0){return}this._processingThumbnail=true;q=this._thumbnailQueue.shift();return this.createThumbnail(q,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,true,(function(r){return function(s){r.emit("thumbnail",q,s);r._processingThumbnail=false;return r._processThumbnailQueue()}})(this))};n.prototype.removeFile=function(q){if(q.status===n.UPLOADING){this.cancelUpload(q)}this.files=k(this.files,q);this.emit("removedfile",q);if(this.files.length===0){return this.emit("reset")}};n.prototype.removeAllFiles=function(u){var s,r,q,t;if(u==null){u=false}t=this.files.slice();for(r=0,q=t.length;r<q;r++){s=t[r];if(s.status!==n.UPLOADING||u){this.removeFile(s)}}return null};n.prototype.resizeImage=function(r,s,q,t,u){return this.createThumbnail(r,s,q,t,false,(function(v){return function(z,w){var x,y;if(w===null){return u(r)}else{x=v.options.resizeMimeType;if(x==null){x=r.type}y=w.toDataURL(x,v.options.resizeQuality);if(x==="image/jpeg"||x==="image/jpg"){y=f.restore(r.dataURL,y)}return u(n.dataURItoBlob(y))}}})(this))};n.prototype.createThumbnail=function(t,u,q,v,s,w){var r;r=new FileReader;r.onload=(function(x){return function(){t.dataURL=r.result;if(t.type==="image/svg+xml"){if(w!=null){w(r.result)}return}return x.createThumbnailFromUrl(t,u,q,v,s,w)}})(this);return r.readAsDataURL(t)};n.prototype.createThumbnailFromUrl=function(u,v,q,w,t,x,s){var r;r=document.createElement("img");if(s){r.crossOrigin=s}r.onload=(function(y){return function(){var z;z=function(A){return A(1)};if((typeof EXIF!=="undefined"&&EXIF!==null)&&t){z=function(A){return A(EXIF.getData(r))}}return z(function(B){var C,I,D,G,F,E,H,A;u.width=r.width;u.height=r.height;H=y.options.resize.call(y,u,v,q,w);C=document.createElement("canvas");I=C.getContext("2d");C.width=H.trgWidth;C.height=H.trgHeight;if(B>4){C.width=H.trgHeight;C.height=H.trgWidth}switch(B){case 2:I.translate(C.width,0);I.scale(-1,1);break;case 3:I.translate(C.width,C.height);I.rotate(Math.PI);break;case 4:I.translate(0,C.height);I.scale(1,-1);break;case 5:I.rotate(0.5*Math.PI);I.scale(1,-1);break;case 6:I.rotate(0.5*Math.PI);I.translate(0,-C.height);break;case 7:I.rotate(0.5*Math.PI);I.translate(C.width,-C.height);I.scale(-1,1);break;case 8:I.rotate(-0.5*Math.PI);I.translate(-C.width,0)}e(I,r,(D=H.srcX)!=null?D:0,(G=H.srcY)!=null?G:0,H.srcWidth,H.srcHeight,(F=H.trgX)!=null?F:0,(E=H.trgY)!=null?E:0,H.trgWidth,H.trgHeight);A=C.toDataURL("image/png");if(x!=null){return x(A,C)}})}})(this);if(x!=null){r.onerror=x}return r.src=u.dataURL};n.prototype.processQueue=function(){var r,t,q,s;t=this.options.parallelUploads;q=this.getUploadingFiles().length;r=q;if(q>=t){return}s=this.getQueuedFiles();if(!(s.length>0)){return}if(this.options.uploadMultiple){return this.processFiles(s.slice(0,t-q))}else{while(r<t){if(!s.length){return}this.processFile(s.shift());r++}}};n.prototype.processFile=function(q){return this.processFiles([q])};n.prototype.processFiles=function(t){var s,r,q;for(r=0,q=t.length;r<q;r++){s=t[r];s.processing=true;s.status=n.UPLOADING;this.emit("processing",s)}if(this.options.uploadMultiple){this.emit("processingmultiple",t)}return this.uploadFiles(t)};n.prototype._getFilesWithXhr=function(s){var q,r;return r=(function(){var u,t,w,v;w=this.files;v=[];for(u=0,t=w.length;u<t;u++){q=w[u];if(q.xhr===s){v.push(q)}}return v}).call(this)};n.prototype.cancelUpload=function(w){var r,v,u,s,q,t,x;if(w.status===n.UPLOADING){v=this._getFilesWithXhr(w.xhr);for(u=0,q=v.length;u<q;u++){r=v[u];r.status=n.CANCELED}w.xhr.abort();for(s=0,t=v.length;s<t;s++){r=v[s];this.emit("canceled",r)}if(this.options.uploadMultiple){this.emit("canceledmultiple",v)}}else{if((x=w.status)===n.ADDED||x===n.QUEUED){w.status=n.CANCELED;this.emit("canceled",w);if(this.options.uploadMultiple){this.emit("canceledmultiple",[w])}}}if(this.options.autoProcessQueue){return this.processQueue()}};m=function(){var q,r;r=arguments[0],q=2<=arguments.length?j.call(arguments,1):[];if(typeof r==="function"){return r.apply(this,q)}return r};n.prototype.uploadFile=function(q){return this.uploadFiles([q])};n.prototype.uploadFiles=function(L){var K,O,I,r,aa,M,v,R,Y,q,J,u,X,W,F,V,G,z,y,x,U,Z,S,N,T,P,E,D,C,B,A,s,H,w,t,Q,ab;ab=new XMLHttpRequest();for(X=0,G=L.length;X<G;X++){I=L[X];I.xhr=ab}Z=m(this.options.method,L);t=m(this.options.url,L);ab.open(Z,t,true);ab.timeout=m(this.options.timeout,L);ab.withCredentials=!!this.options.withCredentials;s=null;aa=(function(ac){return function(){var ad,ae,af;af=[];for(ad=0,ae=L.length;ad<ae;ad++){I=L[ad];af.push(ac._errorProcessing(L,s||ac.options.dictResponseError.replace("{{statusCode}}",ab.status),ab))}return af}})(this);w=(function(ac){return function(am){var ae,ai,ag,ak,aj,ah,af,ad,al;if(am!=null){ad=100*am.loaded/am.total;for(ai=0,ak=L.length;ai<ak;ai++){I=L[ai];I.upload.progress=ad;I.upload.total=am.total;I.upload.bytesSent=am.loaded}}else{ae=true;ad=100;for(ag=0,aj=L.length;ag<aj;ag++){I=L[ag];if(!(I.upload.progress===100&&I.upload.bytesSent===I.upload.total)){ae=false}I.upload.progress=ad;I.upload.bytesSent=I.upload.total}if(ae){return}}al=[];for(af=0,ah=L.length;af<ah;af++){I=L[af];al.push(ac.emit("uploadprogress",I,ad,I.upload.bytesSent))}return al}})(this);ab.onload=(function(ac){return function(ae){var af,ad;if(L[0].status===n.CANCELED){return}if(ab.readyState!==4){return}if(ab.responseType!=="arraybuffer"&&ab.responseType!=="blob"){s=ab.responseText;if(ab.getResponseHeader("content-type")&&~ab.getResponseHeader("content-type").indexOf("application/json")){try{s=JSON.parse(s)}catch(af){ae=af;s="Invalid JSON response from server."}}}w();if(!((200<=(ad=ab.status)&&ad<300))){return aa()}else{return ac._finished(L,s,ae)}}})(this);ab.onerror=(function(ac){return function(){if(L[0].status===n.CANCELED){return}return aa()}})(this);T=(P=ab.upload)!=null?P:ab;T.onprogress=w;R={Accept:"application/json","Cache-Control":"no-cache","X-Requested-With":"XMLHttpRequest"};if(this.options.headers){p(R,this.options.headers)}for(M in R){v=R[M];if(v){ab.setRequestHeader(M,v)}}r=new FormData();if(this.options.params){E=this.options.params;for(F in E){Q=E[F];r.append(F,Q)}}for(W=0,z=L.length;W<z;W++){I=L[W];this.emit("sending",I,ab,r)}if(this.options.uploadMultiple){this.emit("sendingmultiple",L,ab,r)}if(this.element.tagName==="FORM"){D=this.element.querySelectorAll("input, textarea, select, button");for(V=0,y=D.length;V<y;V++){q=D[V];J=q.getAttribute("name");u=q.getAttribute("type");if(q.tagName==="SELECT"&&q.hasAttribute("multiple")){C=q.options;for(U=0,x=C.length;U<x;U++){N=C[U];if(N.selected){r.append(J,N.value)}}}else{if(!u||((B=u.toLowerCase())!=="checkbox"&&B!=="radio")||q.checked){r.append(J,q.value)}}}}K=0;H=[];for(Y=S=0,A=L.length-1;0<=A?S<=A:S>=A;Y=0<=A?++S:--S){O=(function(ac){return function(ad,ae,af){return function(ag){r.append(ae,ag,af);if(++K===L.length){return ac.submitRequest(ab,r,L)}}}})(this);H.push(this.options.transformFile.call(this,L[Y],O(L[Y],this._getParamName(Y),L[Y].upload.filename)))}return H};n.prototype.submitRequest=function(s,r,q){return s.send(r)};n.prototype._finished=function(t,u,v){var s,r,q;for(r=0,q=t.length;r<q;r++){s=t[r];s.status=n.SUCCESS;this.emit("success",s,u,v);this.emit("complete",s)}if(this.options.uploadMultiple){this.emit("successmultiple",t,u,v);this.emit("completemultiple",t)}if(this.options.autoProcessQueue){return this.processQueue()}};n.prototype._errorProcessing=function(u,t,v){var s,r,q;for(r=0,q=u.length;r<q;r++){s=u[r];s.status=n.ERROR;this.emit("error",s,t,v);this.emit("complete",s)}if(this.options.uploadMultiple){this.emit("errormultiple",u,t,v);this.emit("completemultiple",u)}if(this.options.autoProcessQueue){return this.processQueue()}};return n})(i);g.version="5.1.1";g.options={};g.optionsForElement=function(m){if(m.getAttribute("id")){return g.options[c(m.getAttribute("id"))]}else{return void 0}};g.instances=[];g.forElement=function(m){if(typeof m==="string"){m=document.querySelector(m)}if((m!=null?m.dropzone:void 0)==null){throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.")}return m.dropzone};g.autoDiscover=true;g.discover=function(){var r,n,q,o,m,p;if(document.querySelectorAll){q=document.querySelectorAll(".dropzone")}else{q=[];r=function(w){var v,t,s,u;u=[];for(t=0,s=w.length;t<s;t++){v=w[t];if(/(^| )dropzone($| )/.test(v.className)){u.push(q.push(v))}else{u.push(void 0)}}return u};r(document.getElementsByTagName("div"));r(document.getElementsByTagName("form"))}p=[];for(o=0,m=q.length;o<m;o++){n=q[o];if(g.optionsForElement(n)!==false){p.push(new g(n))}else{p.push(void 0)}}return p};g.blacklistedBrowsers=[/opera.*(Windows Phone|Macintosh).*version\/12/i];g.isBrowserSupported=function(){var o,n,m,q,p;o=true;if(window.File&&window.FileReader&&window.FileList&&window.Blob&&window.FormData&&document.querySelector){if(!("classList" in document.createElement("a"))){o=false}else{q=g.blacklistedBrowsers;for(n=0,m=q.length;n<m;n++){p=q[n];if(p.test(navigator.userAgent)){o=false;continue}}}}else{o=false}return o};g.dataURItoBlob=function(n){var s,t,q,o,p,m,r;t=atob(n.split(",")[1]);m=n.split(",")[0].split(":")[1].split(";")[0];s=new ArrayBuffer(t.length);o=new Uint8Array(s);for(q=p=0,r=t.length;0<=r?p<=r:p>=r;q=0<=r?++p:--p){o[q]=t.charCodeAt(q)}return new Blob([s],{type:m})};k=function(r,n){var q,o,m,p;p=[];for(o=0,m=r.length;o<m;o++){q=r[o];if(q!==n){p.push(q)}}return p};c=function(m){return m.replace(/[\-_](\w)/g,function(n){return n.charAt(1).toUpperCase()})};g.createElement=function(m){var n;n=document.createElement("div");n.innerHTML=m;return n.childNodes[0]};g.elementInside=function(n,m){if(n===m){return true}while(n=n.parentNode){if(n===m){return true}}return false};g.getElement=function(o,m){var n;if(typeof o==="string"){n=document.querySelector(o)}else{if(o.nodeType!=null){n=o}}if(n==null){throw new Error("Invalid `"+m+"` option provided. Please provide a CSS selector or a plain HTML element.")}return n};g.getElements=function(s,n){var v,o,m,w,t,q,u,r,p;if(s instanceof Array){m=[];try{for(t=0,u=s.length;t<u;t++){o=s[t];m.push(this.getElement(o,n))}}catch(w){v=w;m=null}}else{if(typeof s==="string"){m=[];p=document.querySelectorAll(s);for(q=0,r=p.length;q<r;q++){o=p[q];m.push(o)}}else{if(s.nodeType!=null){m=[s]}}}if(!((m!=null)&&m.length)){throw new Error("Invalid `"+n+"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.")}return m};g.confirm=function(m,o,n){if(window.confirm(m)){return o()}else{if(n!=null){return n()}}};g.isValidFile=function(q,n){var o,p,m,s,r;if(!n){return true}n=n.split(",");s=q.type;o=s.replace(/\/.*$/,"");for(p=0,m=n.length;p<m;p++){r=n[p];r=r.trim();if(r.charAt(0)==="."){if(q.name.toLowerCase().indexOf(r.toLowerCase(),q.name.length-r.length)!==-1){return true}}else{if(/\/\*$/.test(r)){if(o===r.replace(/\/.*$/,"")){return true}}else{if(s===r){return true}}}}return false};if(typeof jQuery!=="undefined"&&jQuery!==null){jQuery.fn.dropzone=function(m){return this.each(function(){return new g(this,m)})}}if(typeof module!=="undefined"&&module!==null){module.exports=g}else{window.Dropzone=g}g.ADDED="added";g.QUEUED="queued";g.ACCEPTED=g.QUEUED;g.UPLOADING="uploading";g.PROCESSING=g.UPLOADING;g.CANCELED="canceled";g.ERROR="error";g.SUCCESS="success";b=function(q){var o,m,w,p,r,v,n,u,s,t;n=q.naturalWidth;v=q.naturalHeight;m=document.createElement("canvas");m.width=1;m.height=v;w=m.getContext("2d");w.drawImage(q,0,0);p=w.getImageData(1,0,1,v).data;t=0;r=v;u=v;while(u>t){o=p[(u-1)*4+3];if(o===0){r=u}else{t=u}u=(r+t)>>1}s=u/v;if(s===0){return 1}else{return s}};e=function(u,n,s,r,t,o,w,v,m,q){var p;p=b(n);return u.drawImage(n,s,r,t,o,w,v,m,q/p)};f=(function(){function m(){}m.KEY_STR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";m.encode64=function(p){var w,u,s,v,t,r,q,o,n;n="";w=void 0;u=void 0;s="";v=void 0;t=void 0;r=void 0;q="";o=0;while(true){w=p[o++];u=p[o++];s=p[o++];v=w>>2;t=(w&3)<<4|u>>4;r=(u&15)<<2|s>>6;q=s&63;if(isNaN(u)){r=q=64}else{if(isNaN(s)){q=64}}n=n+this.KEY_STR.charAt(v)+this.KEY_STR.charAt(t)+this.KEY_STR.charAt(r)+this.KEY_STR.charAt(q);w=u=s="";v=t=r=q="";if(!(o<p.length)){break}}return n};m.restore=function(n,r){var q,p,o;if(!n.match("data:image/jpeg;base64,")){return r}p=this.decode64(n.replace("data:image/jpeg;base64,",""));o=this.slice2Segments(p);q=this.exifManipulation(r,o);return"data:image/jpeg;base64,"+this.encode64(q)};m.exifManipulation=function(r,p){var q,n,o;n=this.getExifArray(p);o=this.insertExif(r,n);q=new Uint8Array(o);return q};m.getExifArray=function(p){var o,n;o=void 0;n=0;while(n<p.length){o=p[n];if(o[0]===255&o[1]===225){return o}n++}return[]};m.insertExif=function(o,v){var u,w,q,n,t,r;n=o.replace("data:image/jpeg;base64,","");q=this.decode64(n);for(var s=0;s<q.length;s++){if(q[s]===255&&q[s+1]===225){var p=q[s+2]*256+q[s+3]+2;q.splice(s,p)}}r=q.indexOf(255,3);t=q.slice(0,r);w=q.slice(r);u=t;u=u.concat(v);u=u.concat(w);return u};m.slice2Segments=function(o){var r,q,s,n,p;q=0;p=[];while(true){if(o[q]===255&o[q+1]===218){break}if(o[q]===255&o[q+1]===216){q+=2}else{s=o[q+2]*256+o[q+3];r=q+s+2;n=o.slice(q,r);p.push(n);q=r}if(q>o.length){break}}return p};m.decode64=function(r){var n,o,y,w,u,x,v,t,s,q,p;p="";y=void 0;w=void 0;u="";x=void 0;v=void 0;t=void 0;s="";q=0;o=[];n=/[^A-Za-z0-9\+\/\=]/g;if(n.exec(r)){console.warning("There were invalid base64 characters in the input text.\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\nExpect errors in decoding.")}r=r.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(true){x=this.KEY_STR.indexOf(r.charAt(q++));v=this.KEY_STR.indexOf(r.charAt(q++));t=this.KEY_STR.indexOf(r.charAt(q++));s=this.KEY_STR.indexOf(r.charAt(q++));y=x<<2|v>>4;w=(v&15)<<4|t>>2;u=(t&3)<<6|s;o.push(y);if(t!==64){o.push(w)}if(s!==64){o.push(u)}y=w=u="";x=v=t=s="";if(!(q<r.length)){break}}return o};return m})();d=function(p,t){var x,u,o,w,q,n,v,s,r;o=false;r=true;u=p.document;s=u.documentElement;x=(u.addEventListener?"addEventListener":"attachEvent");v=(u.addEventListener?"removeEventListener":"detachEvent");n=(u.addEventListener?"":"on");w=function(y){if(y.type==="readystatechange"&&u.readyState!=="complete"){return}(y.type==="load"?p:u)[v](n+y.type,w,false);if(!o&&(o=true)){return t.call(p,y.type||y)}};q=function(){var y,z;try{s.doScroll("left")}catch(z){y=z;setTimeout(q,50);return}return w("poll")};if(u.readyState!=="complete"){if(u.createEventObject&&s.doScroll){try{r=!p.frameElement}catch(m){}if(r){q()}}u[x](n+"DOMContentLoaded",w,false);u[x](n+"readystatechange",w,false);return p[x](n+"load",w,false)}};g._autoDiscoverFunction=function(){if(g.autoDiscover){return g.discover()}};d(window,g._autoDiscoverFunction)}).call(this); \ No newline at end of file
+(function(){function v(n,l){for(var m="",h=l;h<l+4;h++)m+=String.fromCharCode(n.getUint8(h));if("Exif"!=m)return!1;m=l+6;if(18761==n.getUint16(m))l=!1;else if(19789==n.getUint16(m))l=!0;else return!1;if(42!=n.getUint16(m+2,!l))return!1;h=n.getUint32(m+4,!l);if(8>h)return!1;m+=h;h=n.getUint16(m,!l);var q;for(q=0;q<h;q++){var v=m+12*q+2;if(274==n.getUint16(v,!l))return parseInt(n.getUint16(v+8,!l),10)}return!1}var y={};window.EXIF=y;y.getData=function(n){if((n instanceof Image||n instanceof HTMLImageElement)&&
+!n.complete)return!1;var l=n.src;if(l.match(/^http/)){l=document.createElement("canvas");var m=l.getContext("2d");l.width=n.width;l.height=n.height;m.drawImage(n,0,0);l=l.toDataURL("image/jpeg")}n=l.replace(/^data:([^;]+);base64,/gmi,"");l=atob(n);m=l.length;n=new ArrayBuffer(m);for(var h=new Uint8Array(n),q=0;q<m;q++)h[q]=l.charCodeAt(q);l=new DataView(n);if(255!=l.getUint8(0)||216!=l.getUint8(1))return!1;m=2;for(n=n.byteLength;m<n;){if(255!=l.getUint8(m))return!1;h=l.getUint8(m+1);if(225==h)return v(l,
+m+4);m+=2+l.getUint16(m+2)}}})();(function(){var v=[].slice,y=function(d,b){function r(){this.constructor=d}for(var k in b)n.call(b,k)&&(d[k]=b[k]);r.prototype=b.prototype;d.prototype=new r;d.__super__=b.prototype;return d},n={}.hasOwnProperty;var l=function(){};var m=function(){function d(){}d.prototype.addEventListener=d.prototype.on;d.prototype.on=function(b,d){this._callbacks=this._callbacks||{};this._callbacks[b]||(this._callbacks[b]=[]);this._callbacks[b].push(d);return this};d.prototype.emit=function(){var b,d;var k=arguments[0];
+var a=2<=arguments.length?v.call(arguments,1):[];this._callbacks=this._callbacks||{};if(b=this._callbacks[k]){var c=0;for(d=b.length;c<d;c++)k=b[c],k.apply(this,a)}return this};d.prototype.removeListener=d.prototype.off;d.prototype.removeAllListeners=d.prototype.off;d.prototype.removeEventListener=d.prototype.off;d.prototype.off=function(b,d){var k,a;if(!this._callbacks||0===arguments.length)return this._callbacks={},this;var c=this._callbacks[b];if(!c)return this;if(1===arguments.length)return delete this._callbacks[b],
+this;var g=k=0;for(a=c.length;k<a;g=++k){var f=c[g];if(f===d){c.splice(g,1);break}}return this};return d}();var h=function(d){function b(a,c){var g,f;this.element=a;this.version=b.version;this.defaultOptions.previewTemplate=this.defaultOptions.previewTemplate.replace(/\n*/g,"");this.clickableElements=[];this.listeners=[];this.files=[];"string"===typeof this.element&&(this.element=document.querySelector(this.element));if(!this.element||null==this.element.nodeType)throw Error("Invalid dropzone element.");
+if(this.element.dropzone)throw Error("Dropzone already attached.");b.instances.push(this);this.element.dropzone=this;a=null!=(f=b.optionsForElement(this.element))?f:{};this.options=r({},this.defaultOptions,a,null!=c?c:{});if(this.options.forceFallback||!b.isBrowserSupported())return this.options.fallback.call(this);null==this.options.url&&(this.options.url=this.element.getAttribute("action"));if(!this.options.url)throw Error("No URL provided.");if(this.options.acceptedFiles&&this.options.acceptedMimeTypes)throw Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.");
+this.options.acceptedMimeTypes&&(this.options.acceptedFiles=this.options.acceptedMimeTypes,delete this.options.acceptedMimeTypes);null!=this.options.renameFilename&&(this.options.renameFile=function(a){return function(c){return a.options.renameFilename.call(a,c.name,c)}}(this));this.options.method=this.options.method.toUpperCase();(g=this.getExistingFallback())&&g.parentNode&&g.parentNode.removeChild(g);!1!==this.options.previewsContainer&&(this.previewsContainer=this.options.previewsContainer?b.getElement(this.options.previewsContainer,
+"previewsContainer"):this.element);this.options.clickable&&(this.clickableElements=!0===this.options.clickable?[this.element]:b.getElements(this.options.clickable,"clickable"));this.init()}y(b,d);b.prototype.Emitter=m;b.prototype.events="drop dragstart dragend dragenter dragover dragleave addedfile addedfiles removedfile thumbnail error errormultiple processing processingmultiple uploadprogress totaluploadprogress sending sendingmultiple success successmultiple canceled canceledmultiple complete completemultiple reset maxfilesexceeded maxfilesreached queuecomplete".split(" ");
+b.prototype.defaultOptions={url:null,method:"post",withCredentials:!1,timeout:3E4,parallelUploads:2,uploadMultiple:!1,maxFilesize:256,paramName:"file",createImageThumbnails:!0,maxThumbnailFilesize:10,thumbnailWidth:120,thumbnailHeight:120,thumbnailMethod:"crop",resizeWidth:null,resizeHeight:null,resizeMimeType:null,resizeQuality:.8,resizeMethod:"contain",filesizeBase:1E3,maxFiles:null,params:{},headers:null,clickable:!0,ignoreHiddenFiles:!0,acceptedFiles:null,acceptedMimeTypes:null,autoProcessQueue:!0,
+autoQueue:!0,addRemoveLinks:!1,previewsContainer:null,hiddenInputContainer:"body",capture:null,renameFilename:null,renameFile:null,forceFallback:!1,dictDefaultMessage:"Drop files here to upload",dictFallbackMessage:"Your browser does not support drag'n'drop file uploads.",dictFallbackText:"Please use the fallback form below to upload your files like in the olden days.",dictFileTooBig:"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",dictInvalidFileType:"You can't upload files of this type.",
+dictResponseError:"Server responded with {{statusCode}} code.",dictCancelUpload:"Cancel upload",dictCancelUploadConfirmation:"Are you sure you want to cancel this upload?",dictRemoveFile:"Remove file",dictRemoveFileConfirmation:null,dictMaxFilesExceeded:"You can not upload any more files.",dictFileSizeUnits:{tb:"TB",gb:"GB",mb:"MB",kb:"KB",b:"b"},init:function(){return l},accept:function(a,c){return c()},fallback:function(){var a;this.element.className+=" dz-browser-not-supported";var c=this.element.getElementsByTagName("div");
+var g=0;for(a=c.length;g<a;g++){var f=c[g];if(/(^| )dz-message($| )/.test(f.className)){var e=f;f.className="dz-message"}}e||(e=b.createElement('<div class="dz-message"><span></span></div>'),this.element.appendChild(e));if(f=e.getElementsByTagName("span")[0])null!=f.textContent?f.textContent=this.options.dictFallbackMessage:null!=f.innerText&&(f.innerText=this.options.dictFallbackMessage);return this.element.appendChild(this.getFallbackForm())},resize:function(a,c,g,b){var e={srcX:0,srcY:0,srcWidth:a.width,
+srcHeight:a.height};var f=a.width/a.height;null==c&&null==g?(c=e.srcWidth,g=e.srcHeight):null==c?c=g*f:null==g&&(g=c/f);c=Math.min(c,e.srcWidth);g=Math.min(g,e.srcHeight);var x=c/g;if(e.srcWidth>c||e.srcHeight>g)if("crop"===b)f>x?(e.srcHeight=a.height,e.srcWidth=e.srcHeight*x):(e.srcWidth=a.width,e.srcHeight=e.srcWidth/x);else if("contain"===b)f>x?g=c/f:c=g*f;else throw Error("Unknown resizeMethod '"+b+"'");e.srcX=(a.width-e.srcWidth)/2;e.srcY=(a.height-e.srcHeight)/2;e.trgWidth=c;e.trgHeight=g;return e},
+transformFile:function(a,c){return(this.options.resizeWidth||this.options.resizeHeight)&&a.type.match(/image.*/)?this.resizeImage(a,this.options.resizeWidth,this.options.resizeHeight,this.options.resizeMethod,c):c(a)},previewTemplate:'<div class="dz-preview dz-file-preview">\n <div class="dz-image"><img data-dz-thumbnail /></div>\n <div class="dz-details">\n <div class="dz-size"><span data-dz-size></span></div>\n <div class="dz-filename"><span data-dz-name></span></div>\n </div>\n <div class="dz-progress"><span class="dz-upload" data-dz-uploadprogress></span></div>\n <div class="dz-error-message"><span data-dz-errormessage></span></div>\n <div class="dz-success-mark">\n <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n <title>Check</title>\n <defs></defs>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n <path d="M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" stroke-opacity="0.198794158" stroke="#747474" fill-opacity="0.816519475" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>\n </g>\n </svg>\n </div>\n <div class="dz-error-mark">\n <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n <title>Error</title>\n <defs></defs>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n <g id="Check-+-Oval-2" sketch:type="MSLayerGroup" stroke="#747474" stroke-opacity="0.198794158" fill="#FFFFFF" fill-opacity="0.816519475">\n <path d="M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" sketch:type="MSShapeGroup"></path>\n </g>\n </g>\n </svg>\n </div>\n</div>',
+drop:function(a){return this.element.classList.remove("dz-drag-hover")},dragstart:l,dragend:function(a){return this.element.classList.remove("dz-drag-hover")},dragenter:function(a){return this.element.classList.add("dz-drag-hover")},dragover:function(a){return this.element.classList.add("dz-drag-hover")},dragleave:function(a){return this.element.classList.remove("dz-drag-hover")},paste:l,reset:function(){return this.element.classList.remove("dz-started")},addedfile:function(a){var c;this.element===
+this.previewsContainer&&this.element.classList.add("dz-started");if(this.previewsContainer){a.previewElement=b.createElement(this.options.previewTemplate.trim());a.previewTemplate=a.previewElement;this.previewsContainer.appendChild(a.previewElement);var g=a.previewElement.querySelectorAll("[data-dz-name]");var f=0;for(c=g.length;f<c;f++){var e=g[f];e.textContent=a.name}g=a.previewElement.querySelectorAll("[data-dz-size]");f=0;for(c=g.length;f<c;f++)e=g[f],e.innerHTML=this.filesize(a.size);this.options.addRemoveLinks&&
+(a._removeLink=b.createElement('<a class="dz-remove" href="javascript:undefined;" data-dz-remove>'+this.options.dictRemoveFile+"</a>"),a.previewElement.appendChild(a._removeLink));g=function(c){return function(g){g.preventDefault();g.stopPropagation();return a.status===b.UPLOADING?b.confirm(c.options.dictCancelUploadConfirmation,function(){return c.removeFile(a)}):c.options.dictRemoveFileConfirmation?b.confirm(c.options.dictRemoveFileConfirmation,function(){return c.removeFile(a)}):c.removeFile(a)}}(this);
+c=a.previewElement.querySelectorAll("[data-dz-remove]");var p=[];e=0;for(f=c.length;e<f;e++){var x=c[e];p.push(x.addEventListener("click",g))}return p}},removedfile:function(a){var c;a.previewElement&&null!=(c=a.previewElement)&&c.parentNode.removeChild(a.previewElement);return this._updateMaxFilesReachedClass()},thumbnail:function(a,c){var g;if(a.previewElement){a.previewElement.classList.remove("dz-file-preview");var b=a.previewElement.querySelectorAll("[data-dz-thumbnail]");var e=0;for(g=b.length;e<
+g;e++){var p=b[e];p.alt=a.name;p.src=c}return setTimeout(function(c){return function(){return a.previewElement.classList.add("dz-image-preview")}}(this),1)}},error:function(a,c){var g;if(a.previewElement){a.previewElement.classList.add("dz-error");"String"!==typeof c&&c.error&&(c=c.error);var b=a.previewElement.querySelectorAll("[data-dz-errormessage]");var e=[];a=0;for(g=b.length;a<g;a++){var p=b[a];e.push(p.textContent=c)}return e}},errormultiple:l,processing:function(a){if(a.previewElement&&(a.previewElement.classList.add("dz-processing"),
+a._removeLink))return a._removeLink.textContent=this.options.dictCancelUpload},processingmultiple:l,uploadprogress:function(a,c,b){if(a.previewElement){var g=a.previewElement.querySelectorAll("[data-dz-uploadprogress]");var e=[];a=0;for(b=g.length;a<b;a++){var p=g[a];"PROGRESS"===p.nodeName?e.push(p.value=c):e.push(p.style.width=c+"%")}return e}},totaluploadprogress:l,sending:l,sendingmultiple:l,success:function(a){if(a.previewElement)return a.previewElement.classList.add("dz-success")},successmultiple:l,
+canceled:function(a){return this.emit("error",a,"Upload canceled.")},canceledmultiple:l,complete:function(a){a._removeLink&&(a._removeLink.textContent=this.options.dictRemoveFile);if(a.previewElement)return a.previewElement.classList.add("dz-complete")},completemultiple:l,maxfilesexceeded:l,maxfilesreached:l,queuecomplete:l,addedfiles:l};var r=function(){var a,c;var b=arguments[0];var f=2<=arguments.length?v.call(arguments,1):[];var e=0;for(c=f.length;e<c;e++){var p=f[e];for(a in p){var x=p[a];b[a]=
+x}}return b};b.prototype.getAcceptedFiles=function(){var a;var c=this.files;var b=[];var f=0;for(a=c.length;f<a;f++){var e=c[f];e.accepted&&b.push(e)}return b};b.prototype.getRejectedFiles=function(){var a;var c=this.files;var b=[];var f=0;for(a=c.length;f<a;f++){var e=c[f];e.accepted||b.push(e)}return b};b.prototype.getFilesWithStatus=function(a){var c;var b=this.files;var f=[];var e=0;for(c=b.length;e<c;e++){var p=b[e];p.status===a&&f.push(p)}return f};b.prototype.getQueuedFiles=function(){return this.getFilesWithStatus(b.QUEUED)};
+b.prototype.getUploadingFiles=function(){return this.getFilesWithStatus(b.UPLOADING)};b.prototype.getAddedFiles=function(){return this.getFilesWithStatus(b.ADDED)};b.prototype.getActiveFiles=function(){var a;var c=this.files;var g=[];var f=0;for(a=c.length;f<a;f++){var e=c[f];e.status!==b.UPLOADING&&e.status!==b.QUEUED||g.push(e)}return g};b.prototype.init=function(){var a,c;"form"===this.element.tagName&&this.element.setAttribute("enctype","multipart/form-data");this.element.classList.contains("dropzone")&&
+!this.element.querySelector(".dz-message")&&this.element.appendChild(b.createElement('<div class="dz-default dz-message"><span>'+this.options.dictDefaultMessage+"</span></div>"));if(this.clickableElements.length){var g=function(a){return function(){a.hiddenFileInput&&a.hiddenFileInput.parentNode.removeChild(a.hiddenFileInput);a.hiddenFileInput=document.createElement("input");a.hiddenFileInput.setAttribute("type","file");(null==a.options.maxFiles||1<a.options.maxFiles)&&a.hiddenFileInput.setAttribute("multiple",
+"multiple");a.hiddenFileInput.className="dz-hidden-input";null!=a.options.acceptedFiles&&a.hiddenFileInput.setAttribute("accept",a.options.acceptedFiles);null!=a.options.capture&&a.hiddenFileInput.setAttribute("capture",a.options.capture);a.hiddenFileInput.style.visibility="hidden";a.hiddenFileInput.style.position="absolute";a.hiddenFileInput.style.top="0";a.hiddenFileInput.style.left="0";a.hiddenFileInput.style.height="0";a.hiddenFileInput.style.width="0";document.querySelector(a.options.hiddenInputContainer).appendChild(a.hiddenFileInput);
+return a.hiddenFileInput.addEventListener("change",function(){var c;var b=a.hiddenFileInput.files;if(b.length){var e=0;for(c=b.length;e<c;e++){var f=b[e];a.addFile(f)}}a.emit("addedfiles",b);return g()})}}(this);g()}this.URL=null!=(a=window.URL)?a:window.webkitURL;var f=this.events;var e=0;for(c=f.length;e<c;e++)a=f[e],this.on(a,this.options[a]);this.on("uploadprogress",function(a){return function(){return a.updateTotalUploadProgress()}}(this));this.on("removedfile",function(a){return function(){return a.updateTotalUploadProgress()}}(this));
+this.on("canceled",function(a){return function(c){return a.emit("complete",c)}}(this));this.on("complete",function(a){return function(c){if(0===a.getAddedFiles().length&&0===a.getUploadingFiles().length&&0===a.getQueuedFiles().length)return setTimeout(function(){return a.emit("queuecomplete")},0)}}(this));var p=function(a){a.stopPropagation();return a.preventDefault?a.preventDefault():a.returnValue=!1};this.listeners=[{element:this.element,events:{dragstart:function(a){return function(c){return a.emit("dragstart",
+c)}}(this),dragenter:function(a){return function(c){p(c);return a.emit("dragenter",c)}}(this),dragover:function(a){return function(c){try{var b=c.dataTransfer.effectAllowed}catch(F){}c.dataTransfer.dropEffect="move"===b||"linkMove"===b?"move":"copy";p(c);return a.emit("dragover",c)}}(this),dragleave:function(a){return function(c){return a.emit("dragleave",c)}}(this),drop:function(a){return function(c){p(c);return a.drop(c)}}(this),dragend:function(a){return function(c){return a.emit("dragend",c)}}(this)}}];
+this.clickableElements.forEach(function(a){return function(c){return a.listeners.push({element:c,events:{click:function(e){(c!==a.element||e.target===a.element||b.elementInside(e.target,a.element.querySelector(".dz-message")))&&a.hiddenFileInput.click();return!0}}})}}(this));this.enable();return this.options.init.call(this)};b.prototype.destroy=function(){var a;this.disable();this.removeAllFiles(!0);null!=(a=this.hiddenFileInput)&&a.parentNode&&(this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput),
+this.hiddenFileInput=null);delete this.element.dropzone;return b.instances.splice(b.instances.indexOf(this),1)};b.prototype.updateTotalUploadProgress=function(){var a,c;var b=c=0;if(this.getActiveFiles().length){var f=this.getActiveFiles();var e=0;for(a=f.length;e<a;e++){var p=f[e];c+=p.upload.bytesSent;b+=p.upload.total}p=100*c/b}else p=100;return this.emit("totaluploadprogress",p,b,c)};b.prototype._getParamName=function(a){return"function"===typeof this.options.paramName?this.options.paramName(a):
+""+this.options.paramName+(this.options.uploadMultiple?"["+a+"]":"")};b.prototype._renameFile=function(a){return"function"!==typeof this.options.renameFile?a.name:this.options.renameFile(a)};b.prototype.getFallbackForm=function(){var a;if(a=this.getExistingFallback())return a;a='<div class="dz-fallback">';this.options.dictFallbackText&&(a+="<p>"+this.options.dictFallbackText+"</p>");a+='<input type="file" name="'+this._getParamName(0)+'" '+(this.options.uploadMultiple?'multiple="multiple"':void 0)+
+' /><input type="submit" value="Upload!"></div>';a=b.createElement(a);if("FORM"!==this.element.tagName){var c=b.createElement('<form action="'+this.options.url+'" enctype="multipart/form-data" method="'+this.options.method+'"></form>');c.appendChild(a)}else this.element.setAttribute("enctype","multipart/form-data"),this.element.setAttribute("method",this.options.method);return null!=c?c:a};b.prototype.getExistingFallback=function(){var a;var c=function(a){var c;var b=0;for(c=a.length;b<c;b++){var e=
+a[b];if(/(^| )fallback($| )/.test(e.className))return e}};var b=["div","form"];var f=0;for(a=b.length;f<a;f++){var e=b[f];if(e=c(this.element.getElementsByTagName(e)))return e}};b.prototype.setupEventListeners=function(){var a,c,b;var f=this.listeners;var e=[];var p=0;for(c=f.length;p<c;p++){var d=f[p];e.push(function(){var c=d.events;var e=[];for(a in c)b=c[a],e.push(d.element.addEventListener(a,b,!1));return e}())}return e};b.prototype.removeEventListeners=function(){var a,c,b;var f=this.listeners;
+var e=[];var p=0;for(c=f.length;p<c;p++){var d=f[p];e.push(function(){var c=d.events;var e=[];for(a in c)b=c[a],e.push(d.element.removeEventListener(a,b,!1));return e}())}return e};b.prototype.disable=function(){var a;this.clickableElements.forEach(function(a){return a.classList.remove("dz-clickable")});this.removeEventListeners();var c=this.files;var b=[];var f=0;for(a=c.length;f<a;f++){var e=c[f];b.push(this.cancelUpload(e))}return b};b.prototype.enable=function(){this.clickableElements.forEach(function(a){return a.classList.add("dz-clickable")});
+return this.setupEventListeners()};b.prototype.filesize=function(a){var c,b;var f=0;var e="b";if(0<a){var d=["tb","gb","mb","kb","b"];var k=c=0;for(b=d.length;c<b;k=++c){var r=d[k];var h=Math.pow(this.options.filesizeBase,4-k)/10;if(a>=h){f=a/Math.pow(this.options.filesizeBase,4-k);e=r;break}}f=Math.round(10*f)/10}return"<strong>"+f+"</strong> "+this.options.dictFileSizeUnits[e]};b.prototype._updateMaxFilesReachedClass=function(){return null!=this.options.maxFiles&&this.getAcceptedFiles().length>=
+this.options.maxFiles?(this.getAcceptedFiles().length===this.options.maxFiles&&this.emit("maxfilesreached",this.files),this.element.classList.add("dz-max-files-reached")):this.element.classList.remove("dz-max-files-reached")};b.prototype.drop=function(a){if(a.dataTransfer){this.emit("drop",a);var c=a.dataTransfer.files;this.emit("addedfiles",c);c.length&&((a=a.dataTransfer.items)&&a.length&&null!=a[0].webkitGetAsEntry?this._addFilesFromItems(a):this.handleFiles(c))}};b.prototype.paste=function(a){var c;
+if(null!=(null!=a?null!=(c=a.clipboardData)?c.items:void 0:void 0)&&(this.emit("paste",a),a=a.clipboardData.items,a.length))return this._addFilesFromItems(a)};b.prototype.handleFiles=function(a){var c;var b=[];var f=0;for(c=a.length;f<c;f++){var e=a[f];b.push(this.addFile(e))}return b};b.prototype._addFilesFromItems=function(a){var c,b;var f=[];var e=0;for(b=a.length;e<b;e++){var d=a[e];null!=d.webkitGetAsEntry&&(c=d.webkitGetAsEntry())?c.isFile?f.push(this.addFile(d.getAsFile())):c.isDirectory?f.push(this._addFilesFromDirectory(c,
+c.name)):f.push(void 0):null!=d.getAsFile?null==d.kind||"file"===d.kind?f.push(this.addFile(d.getAsFile())):f.push(void 0):f.push(void 0)}return f};b.prototype._addFilesFromDirectory=function(a,c){var b=a.createReader();var f=function(a){return"undefined"!==typeof console&&null!==console?"function"===typeof console.log?console.log(a):void 0:void 0};var e=function(a){return function(){return b.readEntries(function(b){var f;if(0<b.length){var g=0;for(f=b.length;g<f;g++){var d=b[g];d.isFile?d.file(function(b){if(!a.options.ignoreHiddenFiles||
+"."!==b.name.substring(0,1))return b.fullPath=c+"/"+b.name,a.addFile(b)}):d.isDirectory&&a._addFilesFromDirectory(d,c+"/"+d.name)}e()}return null},f)}}(this);return e()};b.prototype.accept=function(a,c){return a.size>1048576*this.options.maxFilesize?c(this.options.dictFileTooBig.replace("{{filesize}}",Math.round(a.size/1024/10.24)/100).replace("{{maxFilesize}}",this.options.maxFilesize)):b.isValidFile(a,this.options.acceptedFiles)?null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?
+(c(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}",this.options.maxFiles)),this.emit("maxfilesexceeded",a)):this.options.accept.call(this,a,c):c(this.options.dictInvalidFileType)};b.prototype.addFile=function(a){a.upload={progress:0,total:a.size,bytesSent:0,filename:this._renameFile(a)};this.files.push(a);a.status=b.ADDED;this.emit("addedfile",a);this._enqueueThumbnail(a);return this.accept(a,function(c){return function(b){b?(a.accepted=!1,c._errorProcessing([a],b)):(a.accepted=!0,c.options.autoQueue&&
+c.enqueueFile(a));return c._updateMaxFilesReachedClass()}}(this))};b.prototype.enqueueFiles=function(a){var c;var b=0;for(c=a.length;b<c;b++){var f=a[b];this.enqueueFile(f)}return null};b.prototype.enqueueFile=function(a){if(a.status===b.ADDED&&!0===a.accepted){if(a.status=b.QUEUED,this.options.autoProcessQueue)return setTimeout(function(a){return function(){return a.processQueue()}}(this),0)}else throw Error("This file can't be queued because it has already been processed or was rejected.");};b.prototype._thumbnailQueue=
+[];b.prototype._processingThumbnail=!1;b.prototype._enqueueThumbnail=function(a){if(this.options.createImageThumbnails&&a.type.match(/image.*/)&&a.size<=1048576*this.options.maxThumbnailFilesize)return this._thumbnailQueue.push(a),setTimeout(function(a){return function(){return a._processThumbnailQueue()}}(this),0)};b.prototype._processThumbnailQueue=function(){if(!this._processingThumbnail&&0!==this._thumbnailQueue.length){this._processingThumbnail=!0;var a=this._thumbnailQueue.shift();return this.createThumbnail(a,
+this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,!0,function(c){return function(b){c.emit("thumbnail",a,b);c._processingThumbnail=!1;return c._processThumbnailQueue()}}(this))}};b.prototype.removeFile=function(a){a.status===b.UPLOADING&&this.cancelUpload(a);this.files=q(this.files,a);this.emit("removedfile",a);if(0===this.files.length)return this.emit("reset")};b.prototype.removeAllFiles=function(a){var c;null==a&&(a=!1);var g=this.files.slice();var f=0;for(c=
+g.length;f<c;f++){var e=g[f];(e.status!==b.UPLOADING||a)&&this.removeFile(e)}return null};b.prototype.resizeImage=function(a,c,g,f,e){return this.createThumbnail(a,c,g,f,!0,function(c){return function(f,g){if(null===g)return e(a);f=c.options.resizeMimeType;null==f&&(f=a.type);g=g.toDataURL(f,c.options.resizeQuality);return e(b.dataURItoBlob(g))}}(this))};b.prototype.createThumbnail=function(a,c,b,f,e,d){var g=new FileReader;g.onload=function(p){return function(){a.dataURL=g.result;if("image/svg+xml"===
+a.type)null!=d&&d(g.result);else return p.createThumbnailFromUrl(a,c,b,f,e,d)}}(this);return g.readAsDataURL(a)};b.prototype.createThumbnailFromUrl=function(a,c,b,f,e,d,k){var g=document.createElement("img");e="from-image"==getComputedStyle(document.body).imageOrientation?!1:e;k&&(g.crossOrigin=k);g.onload=function(p){return function(){var k=e?EXIF.getData(g):1,r,h,l,x;a.width=g.width;a.height=g.height;var n=p.options.resize.call(p,a,c,b,f);var m=document.createElement("canvas");var t=m.getContext("2d");
+m.width=n.trgWidth;m.height=n.trgHeight;4<k&&(m.width=n.trgHeight,m.height=n.trgWidth);switch(k){case 2:t.translate(m.width,0);t.scale(-1,1);break;case 3:t.translate(m.width,m.height);t.rotate(Math.PI);break;case 4:t.translate(0,m.height);t.scale(1,-1);break;case 5:t.rotate(.5*Math.PI);t.scale(1,-1);break;case 6:t.rotate(.5*Math.PI);t.translate(0,-m.width);break;case 7:t.rotate(.5*Math.PI);t.translate(m.height,-m.width);t.scale(-1,1);break;case 8:t.rotate(-.5*Math.PI),t.translate(-m.height,0)}C(t,
+g,null!=(r=n.srcX)?r:0,null!=(h=n.srcY)?h:0,n.srcWidth,n.srcHeight,null!=(l=n.trgX)?l:0,null!=(x=n.trgY)?x:0,n.trgWidth,n.trgHeight);k=m.toDataURL("image/png");if(null!=d)return d(k,m)}}(this);null!=d&&(g.onerror=d);return g.src=a.dataURL};b.prototype.processQueue=function(){var a;var b=this.options.parallelUploads;var g=a=this.getUploadingFiles().length;if(!(a>=b)){var f=this.getQueuedFiles();if(0<f.length){if(this.options.uploadMultiple)return this.processFiles(f.slice(0,b-a));for(;g<b&&f.length;)this.processFile(f.shift()),
+g++}}};b.prototype.processFile=function(a){return this.processFiles([a])};b.prototype.processFiles=function(a){var c;var g=0;for(c=a.length;g<c;g++){var f=a[g];f.processing=!0;f.status=b.UPLOADING;this.emit("processing",f)}this.options.uploadMultiple&&this.emit("processingmultiple",a);return this.uploadFiles(a)};b.prototype._getFilesWithXhr=function(a){var b;var g=this.files;var f=[];var e=0;for(b=g.length;e<b;e++){var d=g[e];d.xhr===a&&f.push(d)}return f};b.prototype.cancelUpload=function(a){var c;
+if(a.status===b.UPLOADING){var g=this._getFilesWithXhr(a.xhr);var f=0;for(c=g.length;f<c;f++){var e=g[f];e.status=b.CANCELED}a.xhr.abort();a=0;for(f=g.length;a<f;a++)e=g[a],this.emit("canceled",e);this.options.uploadMultiple&&this.emit("canceledmultiple",g)}else if((e=a.status)===b.ADDED||e===b.QUEUED)a.status=b.CANCELED,this.emit("canceled",a),this.options.uploadMultiple&&this.emit("canceledmultiple",[a]);if(this.options.autoProcessQueue)return this.processQueue()};var k=function(){var a=arguments[0];
+var b=2<=arguments.length?v.call(arguments,1):[];return"function"===typeof a?a.apply(this,b):a};b.prototype.uploadFile=function(a){return this.uploadFiles([a])};b.prototype.uploadFiles=function(a){var c,g,f;var e=new XMLHttpRequest;var d=0;for(f=a.length;d<f;d++){var h=a[d];h.xhr=e}d=k(this.options.method,a);f=k(this.options.url,a);e.open(d,f,!0);e.timeout=k(this.options.timeout,a);e.withCredentials=!!this.options.withCredentials;var l=null;var m=function(b){return function(){var c;var f=[];var d=
+0;for(c=a.length;d<c;d++)h=a[d],f.push(b._errorProcessing(a,l||b.options.dictResponseError.replace("{{statusCode}}",e.status),e));return f}}(this);var n=function(b){return function(c){var e;if(null!=c){var f=100*c.loaded/c.total;var d=0;for(e=a.length;d<e;d++)h=a[d],h.upload.progress=f,h.upload.total=c.total,h.upload.bytesSent=c.loaded}else{c=!0;f=100;d=0;for(e=a.length;d<e;d++){h=a[d];if(100!==h.upload.progress||h.upload.bytesSent!==h.upload.total)c=!1;h.upload.progress=f;h.upload.bytesSent=h.upload.total}if(c)return}e=
+[];d=0;for(c=a.length;d<c;d++)h=a[d],e.push(b.emit("uploadprogress",h,f,h.upload.bytesSent));return e}}(this);e.onload=function(c){return function(d){var f;if(a[0].status!==b.CANCELED&&4===e.readyState){if("arraybuffer"!==e.responseType&&"blob"!==e.responseType&&(l=e.responseText,e.getResponseHeader("content-type")&&~e.getResponseHeader("content-type").indexOf("application/json")))try{l=JSON.parse(l)}catch(D){d=D,l="Invalid JSON response from server."}n();return 200<=(f=e.status)&&300>f?c._finished(a,
+l,d):m()}}}(this);e.onerror=function(c){return function(){if(a[0].status!==b.CANCELED)return m()}}(this);(null!=(g=e.upload)?g:e).onprogress=n;d={Accept:"application/json","Cache-Control":"no-cache","X-Requested-With":"XMLHttpRequest"};this.options.headers&&r(d,this.options.headers);for(u in d)(g=d[u])&&e.setRequestHeader(u,g);var q=new FormData;if(this.options.params){var u=this.options.params;for(w in u)g=u[w],q.append(w,g)}var w=0;for(u=a.length;w<u;w++)h=a[w],this.emit("sending",h,e,q);this.options.uploadMultiple&&
+this.emit("sendingmultiple",a,e,q);if("FORM"===this.element.tagName)for(d=this.element.querySelectorAll("input, textarea, select, button"),u=0,g=d.length;u<g;u++){f=d[u];w=f.getAttribute("name");var v=f.getAttribute("type");if("SELECT"===f.tagName&&f.hasAttribute("multiple")){var y=f.options;v=0;for(f=y.length;v<f;v++){var z=y[v];z.selected&&q.append(w,z.value)}}else(!v||"checkbox"!==(c=v.toLowerCase())&&"radio"!==c||f.checked)&&q.append(w,f.value)}var t=0;d=[];w=u=0;for(g=a.length-1;0<=g?u<=g:u>=
+g;w=0<=g?++u:--u)c=function(b){return function(c,d,f){return function(c){q.append(d,c,f);if(++t===a.length)return b.submitRequest(e,q,a)}}}(this),d.push(this.options.transformFile.call(this,a[w],c(a[w],this._getParamName(w),a[w].upload.filename)));return d};b.prototype.submitRequest=function(a,b,d){return a.send(b)};b.prototype._finished=function(a,c,d){var f;var e=0;for(f=a.length;e<f;e++){var g=a[e];g.status=b.SUCCESS;this.emit("success",g,c,d);this.emit("complete",g)}this.options.uploadMultiple&&
+(this.emit("successmultiple",a,c,d),this.emit("completemultiple",a));if(this.options.autoProcessQueue)return this.processQueue()};b.prototype._errorProcessing=function(a,c,d){var f;var e=0;for(f=a.length;e<f;e++){var g=a[e];g.status=b.ERROR;this.emit("error",g,c,d);this.emit("complete",g)}this.options.uploadMultiple&&(this.emit("errormultiple",a,c,d),this.emit("completemultiple",a));if(this.options.autoProcessQueue)return this.processQueue()};return b}(m);h.version="5.1.1";h.options={};h.optionsForElement=
+function(d){if(d.getAttribute("id"))return h.options[A(d.getAttribute("id"))]};h.instances=[];h.forElement=function(d){"string"===typeof d&&(d=document.querySelector(d));if(null==(null!=d?d.dropzone:void 0))throw Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.");return d.dropzone};h.autoDiscover=!0;h.discover=function(){var d;if(document.querySelectorAll)var b=
+document.querySelectorAll(".dropzone");else{b=[];var r=function(a){var c;var d=[];var e=0;for(c=a.length;e<c;e++){var h=a[e];/(^| )dropzone($| )/.test(h.className)?d.push(b.push(h)):d.push(void 0)}return d};r(document.getElementsByTagName("div"));r(document.getElementsByTagName("form"))}var k=[];var a=0;for(d=b.length;a<d;a++)r=b[a],!1!==h.optionsForElement(r)?k.push(new h(r)):k.push(void 0);return k};h.blacklistedBrowsers=[/opera.*(Windows Phone|Macintosh).*version\/12/i];h.isBrowserSupported=function(){var d;
+var b=!0;if(window.File&&window.FileReader&&window.FileList&&window.Blob&&window.FormData&&document.querySelector)if("classList"in document.createElement("a")){var r=h.blacklistedBrowsers;var k=0;for(d=r.length;k<d;k++){var a=r[k];a.test(navigator.userAgent)&&(b=!1)}}else b=!1;else b=!1;return b};h.dataURItoBlob=function(d){var b,h;var k=atob(d.split(",")[1]);var a=d.split(",")[0].split(":")[1].split(";")[0];d=new ArrayBuffer(k.length);var c=new Uint8Array(d);var g=b=0;for(h=k.length;0<=h?b<=h:b>=
+h;g=0<=h?++b:--b)c[g]=k.charCodeAt(g);return new Blob([d],{type:a})};var q=function(d,b){var h;var k=[];var a=0;for(h=d.length;a<h;a++){var c=d[a];c!==b&&k.push(c)}return k};var A=function(d){return d.replace(/[\-_](\w)/g,function(b){return b.charAt(1).toUpperCase()})};h.createElement=function(d){var b=document.createElement("div");b.innerHTML=d;return b.childNodes[0]};h.elementInside=function(d,b){if(d===b)return!0;for(;d=d.parentNode;)if(d===b)return!0;return!1};h.getElement=function(d,b){var h;
+"string"===typeof d?h=document.querySelector(d):null!=d.nodeType&&(h=d);if(null==h)throw Error("Invalid `"+b+"` option provided. Please provide a CSS selector or a plain HTML element.");return h};h.getElements=function(d,b){var h;if(d instanceof Array){var k=[];try{var a=0;for(h=d.length;a<h;a++){var c=d[a];k.push(this.getElement(c,b))}}catch(g){k=null}}else if("string"===typeof d)for(k=[],h=document.querySelectorAll(d),d=0,a=h.length;d<a;d++)c=h[d],k.push(c);else null!=d.nodeType&&(k=[d]);if(null==
+k||!k.length)throw Error("Invalid `"+b+"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.");return k};h.confirm=function(d,b,h){if(window.confirm(d))return b();if(null!=h)return h()};h.isValidFile=function(d,b){var h;if(!b)return!0;b=b.split(",");var k=d.type;var a=k.replace(/\/.*$/,"");var c=0;for(h=b.length;c<h;c++){var g=b[c];g=g.trim();if("."===g.charAt(0)){if(-1!==d.name.toLowerCase().indexOf(g.toLowerCase(),d.name.length-g.length))return!0}else if(/\/\*$/.test(g)){if(a===
+g.replace(/\/.*$/,""))return!0}else if(k===g)return!0}return!1};"undefined"!==typeof jQuery&&null!==jQuery&&(jQuery.fn.dropzone=function(d){return this.each(function(){return new h(this,d)})});"undefined"!==typeof module&&null!==module?module.exports=h:window.Dropzone=h;h.ADDED="added";h.QUEUED="queued";h.ACCEPTED=h.QUEUED;h.UPLOADING="uploading";h.PROCESSING=h.UPLOADING;h.CANCELED="canceled";h.ERROR="error";h.SUCCESS="success";var E=function(d){var b,h;var k=d.naturalHeight;var a=document.createElement("canvas");
+a.width=1;a.height=k;a=a.getContext("2d");a.drawImage(d,0,0);a=a.getImageData(1,0,1,k).data;var c=0;for(h=b=k;h>c;)d=a[4*(h-1)+3],0===d?b=h:c=h,h=b+c>>1;k=h/k;return 0===k?1:k};var C=function(d,b,h,k,a,c,g,f,e,l){var p=E(b);return d.drawImage(b,h,k,a,c,g,f,e,l/p)};h._autoDiscoverFunction=function(){if(h.autoDiscover)return h.discover()};(function(d,b){var h=!1;var k=!0;var a=d.document;var c=a.documentElement;var g=a.addEventListener?"addEventListener":"attachEvent";var f=a.addEventListener?"removeEventListener":
+"detachEvent";var e=a.addEventListener?"":"on";var l=function(c){if("readystatechange"!==c.type||"complete"===a.readyState)if(("load"===c.type?d:a)[f](e+c.type,l,!1),!h&&(h=!0))return b.call(d,c.type||c)};var m=function(){try{c.doScroll("left")}catch(B){setTimeout(m,50);return}return l("poll")};if("complete"!==a.readyState){if(a.createEventObject&&c.doScroll){try{k=!d.frameElement}catch(B){}k&&m()}a[g](e+"DOMContentLoaded",l,!1);a[g](e+"readystatechange",l,!1);return d[g](e+"load",l,!1)}})(window,
+h._autoDiscoverFunction)}).call(this);
diff --git a/web/vendor/govuk-frontend/govuk-frontend-3.5.0.min.css b/web/vendor/govuk-frontend/govuk-frontend-3.5.0.min.css
new file mode 100644
index 000000000..9c526ac39
--- /dev/null
+++ b/web/vendor/govuk-frontend/govuk-frontend-3.5.0.min.css
@@ -0,0 +1,3 @@
+.govuk-link{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
+
+/*! Copyright (c) 2011 by Margaret Calvert & Henrik Kubel. All rights reserved. The font has been customised for exclusive use on gov.uk. This cut is not commercially available. */@font-face{font-family:GDS Transport;src:url(/assets/fonts/light-94a07e06a1-v2.woff2) format("woff2"),url(/assets/fonts/light-f591b13f7d-v2.woff) format("woff");font-weight:400;font-style:normal;font-display:fallback}@font-face{font-family:GDS Transport;src:url(/assets/fonts/bold-b542beb274-v2.woff2) format("woff2"),url(/assets/fonts/bold-affa96571d-v2.woff) format("woff");font-weight:700;font-style:normal;font-display:fallback}@media print{.govuk-link{font-family:sans-serif}}.govuk-link:focus{outline:3px solid rgba(0,0,0,0);background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none}.govuk-link:link{color:#1d70b8}.govuk-link:visited{color:#4c2c92}.govuk-link:hover{color:#003078}.govuk-link:active,.govuk-link:focus{color:#0b0c0c}@media print{.govuk-link[href^="/"]:after,.govuk-link[href^="http://"]:after,.govuk-link[href^="https://"]:after{content:" (" attr(href) ")";font-size:90%;word-wrap:break-word}}.govuk-link--muted:active,.govuk-link--muted:hover,.govuk-link--muted:link,.govuk-link--muted:visited{color:#626a6e}.govuk-link--muted:focus,.govuk-link--text-colour:active,.govuk-link--text-colour:focus,.govuk-link--text-colour:hover,.govuk-link--text-colour:link,.govuk-link--text-colour:visited{color:#0b0c0c}@media print{.govuk-link--text-colour:active,.govuk-link--text-colour:focus,.govuk-link--text-colour:hover,.govuk-link--text-colour:link,.govuk-link--text-colour:visited{color:#000}}.govuk-link--no-visited-state:link,.govuk-link--no-visited-state:visited{color:#1d70b8}.govuk-link--no-visited-state:hover{color:#003078}.govuk-link--no-visited-state:active,.govuk-link--no-visited-state:focus,.govuk-list{color:#0b0c0c}.govuk-list{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:16px;font-size:1rem;line-height:1.25;margin-top:0;margin-bottom:15px;padding-left:0;list-style-type:none}@media print{.govuk-list{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-list{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-list{font-size:14pt;line-height:1.15;color:#000}}@media (min-width:40.0625em){.govuk-list{margin-bottom:20px}}.govuk-list .govuk-list{margin-top:10px}.govuk-list>li{margin-bottom:5px}.govuk-list--bullet{padding-left:20px;list-style-type:disc}.govuk-list--number{padding-left:20px;list-style-type:decimal}.govuk-list--bullet>li,.govuk-list--number>li{margin-bottom:0}@media (min-width:40.0625em){.govuk-list--bullet>li,.govuk-list--number>li{margin-bottom:5px}}.govuk-template{background-color:#f3f2f1;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}@media screen{.govuk-template{overflow-y:scroll}}.govuk-template__body{margin:0;background-color:#fff}.govuk-heading-xl{color:#0b0c0c;font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:32px;font-size:2rem;line-height:1.09375;display:block;margin-top:0;margin-bottom:30px}@media print{.govuk-heading-xl{color:#000;font-family:sans-serif}}@media (min-width:40.0625em){.govuk-heading-xl{font-size:48px;font-size:3rem;line-height:1.04167}}@media print{.govuk-heading-xl{font-size:32pt;line-height:1.15}}@media (min-width:40.0625em){.govuk-heading-xl{margin-bottom:50px}}.govuk-heading-l{color:#0b0c0c;font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:24px;font-size:1.5rem;line-height:1.04167;display:block;margin-top:0;margin-bottom:20px}@media print{.govuk-heading-l{color:#000;font-family:sans-serif}}@media (min-width:40.0625em){.govuk-heading-l{font-size:36px;font-size:2.25rem;line-height:1.11111}}@media print{.govuk-heading-l{font-size:24pt;line-height:1.05}}@media (min-width:40.0625em){.govuk-heading-l{margin-bottom:30px}}.govuk-heading-m{color:#0b0c0c;font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:18px;font-size:1.125rem;line-height:1.11111;display:block;margin-top:0;margin-bottom:15px}@media print{.govuk-heading-m{color:#000;font-family:sans-serif}}@media (min-width:40.0625em){.govuk-heading-m{font-size:24px;font-size:1.5rem;line-height:1.25}}@media print{.govuk-heading-m{font-size:18pt;line-height:1.15}}@media (min-width:40.0625em){.govuk-heading-m{margin-bottom:20px}}.govuk-heading-s{color:#0b0c0c;font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:16px;font-size:1rem;line-height:1.25;display:block;margin-top:0;margin-bottom:15px}@media print{.govuk-heading-s{color:#000;font-family:sans-serif}}@media (min-width:40.0625em){.govuk-heading-s{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-heading-s{font-size:14pt;line-height:1.15}}@media (min-width:40.0625em){.govuk-heading-s{margin-bottom:20px}}.govuk-caption-xl{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:18px;font-size:1.125rem;line-height:1.11111;display:block;margin-bottom:5px;color:#626a6e}@media print{.govuk-caption-xl{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-caption-xl{font-size:27px;font-size:1.6875rem;line-height:1.11111}}@media print{.govuk-caption-xl{font-size:18pt;line-height:1.15}}.govuk-caption-l{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:18px;font-size:1.125rem;line-height:1.11111;display:block;margin-bottom:5px;color:#626a6e}@media print{.govuk-caption-l{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-caption-l{font-size:24px;font-size:1.5rem;line-height:1.25}}@media print{.govuk-caption-l{font-size:18pt;line-height:1.15}}@media (min-width:40.0625em){.govuk-caption-l{margin-bottom:0}}.govuk-caption-m{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:16px;font-size:1rem;line-height:1.25;display:block;color:#626a6e}@media print{.govuk-caption-m{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-caption-m{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-caption-m{font-size:14pt;line-height:1.15}}.govuk-body-l,.govuk-body-lead{color:#0b0c0c;font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:18px;font-size:1.125rem;line-height:1.11111;margin-top:0;margin-bottom:20px}@media print{.govuk-body-l,.govuk-body-lead{color:#000;font-family:sans-serif}}@media (min-width:40.0625em){.govuk-body-l,.govuk-body-lead{font-size:24px;font-size:1.5rem;line-height:1.25}}@media print{.govuk-body-l,.govuk-body-lead{font-size:18pt;line-height:1.15}}@media (min-width:40.0625em){.govuk-body-l,.govuk-body-lead{margin-bottom:30px}}.govuk-body,.govuk-body-m{color:#0b0c0c;font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:16px;font-size:1rem;line-height:1.25;margin-top:0;margin-bottom:15px}@media print{.govuk-body,.govuk-body-m{color:#000;font-family:sans-serif}}@media (min-width:40.0625em){.govuk-body,.govuk-body-m{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-body,.govuk-body-m{font-size:14pt;line-height:1.15}}@media (min-width:40.0625em){.govuk-body,.govuk-body-m{margin-bottom:20px}}.govuk-body-s{color:#0b0c0c;font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:14px;font-size:.875rem;line-height:1.14286;margin-top:0;margin-bottom:15px}@media print{.govuk-body-s{color:#000;font-family:sans-serif}}@media (min-width:40.0625em){.govuk-body-s{font-size:16px;font-size:1rem;line-height:1.25}}@media print{.govuk-body-s{font-size:14pt;line-height:1.2}}@media (min-width:40.0625em){.govuk-body-s{margin-bottom:20px}}.govuk-body-xs{color:#0b0c0c;font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:12px;font-size:.75rem;line-height:1.25;margin-top:0;margin-bottom:15px}@media print{.govuk-body-xs{color:#000;font-family:sans-serif}}@media (min-width:40.0625em){.govuk-body-xs{font-size:14px;font-size:.875rem;line-height:1.42857}}@media print{.govuk-body-xs{font-size:12pt;line-height:1.2}}@media (min-width:40.0625em){.govuk-body-xs{margin-bottom:20px}}.govuk-body-l+.govuk-heading-l,.govuk-body-lead+.govuk-heading-l{padding-top:5px}@media (min-width:40.0625em){.govuk-body-l+.govuk-heading-l,.govuk-body-lead+.govuk-heading-l{padding-top:10px}}.govuk-body+.govuk-heading-l,.govuk-body-m+.govuk-heading-l,.govuk-body-s+.govuk-heading-l,.govuk-list+.govuk-heading-l{padding-top:15px}@media (min-width:40.0625em){.govuk-body+.govuk-heading-l,.govuk-body-m+.govuk-heading-l,.govuk-body-s+.govuk-heading-l,.govuk-list+.govuk-heading-l{padding-top:20px}}.govuk-body+.govuk-heading-m,.govuk-body+.govuk-heading-s,.govuk-body-m+.govuk-heading-m,.govuk-body-m+.govuk-heading-s,.govuk-body-s+.govuk-heading-m,.govuk-body-s+.govuk-heading-s,.govuk-list+.govuk-heading-m,.govuk-list+.govuk-heading-s{padding-top:5px}@media (min-width:40.0625em){.govuk-body+.govuk-heading-m,.govuk-body+.govuk-heading-s,.govuk-body-m+.govuk-heading-m,.govuk-body-m+.govuk-heading-s,.govuk-body-s+.govuk-heading-m,.govuk-body-s+.govuk-heading-s,.govuk-list+.govuk-heading-m,.govuk-list+.govuk-heading-s{padding-top:10px}}.govuk-section-break{margin:0;border:0}.govuk-section-break--xl{margin-top:30px;margin-bottom:30px}@media (min-width:40.0625em){.govuk-section-break--xl{margin-top:50px;margin-bottom:50px}}.govuk-section-break--l{margin-top:20px;margin-bottom:20px}@media (min-width:40.0625em){.govuk-section-break--l{margin-top:30px;margin-bottom:30px}}.govuk-section-break--m{margin-top:15px;margin-bottom:15px}@media (min-width:40.0625em){.govuk-section-break--m{margin-top:20px;margin-bottom:20px}}.govuk-section-break--visible{border-bottom:1px solid #b1b4b6}.govuk-form-group{margin-bottom:20px}.govuk-form-group:after{content:"";display:block;clear:both}@media (min-width:40.0625em){.govuk-form-group{margin-bottom:30px}}.govuk-form-group .govuk-form-group:last-of-type{margin-bottom:0}.govuk-form-group--error{padding-left:15px;border-left:5px solid #d4351c}.govuk-form-group--error .govuk-form-group{padding:0;border:0}.govuk-grid-row{margin-right:-15px;margin-left:-15px}.govuk-grid-row:after{content:"";display:block;clear:both}.govuk-grid-column-one-quarter{box-sizing:border-box;width:100%;padding:0 15px}@media (min-width:40.0625em){.govuk-grid-column-one-quarter{width:25%;float:left}}.govuk-grid-column-one-third{box-sizing:border-box;width:100%;padding:0 15px}@media (min-width:40.0625em){.govuk-grid-column-one-third{width:33.3333%;float:left}}.govuk-grid-column-one-half{box-sizing:border-box;width:100%;padding:0 15px}@media (min-width:40.0625em){.govuk-grid-column-one-half{width:50%;float:left}}.govuk-grid-column-two-thirds{box-sizing:border-box;width:100%;padding:0 15px}@media (min-width:40.0625em){.govuk-grid-column-two-thirds{width:66.6666%;float:left}}.govuk-grid-column-three-quarters{box-sizing:border-box;width:100%;padding:0 15px}@media (min-width:40.0625em){.govuk-grid-column-three-quarters{width:75%;float:left}}.govuk-grid-column-full{box-sizing:border-box;width:100%;padding:0 15px}@media (min-width:40.0625em){.govuk-grid-column-full{width:100%;float:left}}.govuk-grid-column-one-quarter-from-desktop{box-sizing:border-box;padding:0 15px}@media (min-width:48.0625em){.govuk-grid-column-one-quarter-from-desktop{width:25%;float:left}}.govuk-grid-column-one-third-from-desktop{box-sizing:border-box;padding:0 15px}@media (min-width:48.0625em){.govuk-grid-column-one-third-from-desktop{width:33.3333%;float:left}}.govuk-grid-column-one-half-from-desktop{box-sizing:border-box;padding:0 15px}@media (min-width:48.0625em){.govuk-grid-column-one-half-from-desktop{width:50%;float:left}}.govuk-grid-column-two-thirds-from-desktop{box-sizing:border-box;padding:0 15px}@media (min-width:48.0625em){.govuk-grid-column-two-thirds-from-desktop{width:66.6666%;float:left}}.govuk-grid-column-three-quarters-from-desktop{box-sizing:border-box;padding:0 15px}@media (min-width:48.0625em){.govuk-grid-column-three-quarters-from-desktop{width:75%;float:left}}.govuk-grid-column-full-from-desktop{box-sizing:border-box;padding:0 15px}@media (min-width:48.0625em){.govuk-grid-column-full-from-desktop{width:100%;float:left}}.govuk-main-wrapper{display:block;padding-top:20px;padding-bottom:20px}@media (min-width:40.0625em){.govuk-main-wrapper{padding-top:40px;padding-bottom:40px}}.govuk-main-wrapper--auto-spacing:first-child,.govuk-main-wrapper--l{padding-top:30px}@media (min-width:40.0625em){.govuk-main-wrapper--auto-spacing:first-child,.govuk-main-wrapper--l{padding-top:50px}}.govuk-width-container{max-width:960px;margin-right:15px;margin-left:15px}@supports (margin:max(calc(0px))){.govuk-width-container{margin-right:max(15px,calc(15px + env(safe-area-inset-right)));margin-left:max(15px,calc(15px + env(safe-area-inset-left)))}}@media (min-width:40.0625em){.govuk-width-container{margin-right:30px;margin-left:30px}@supports (margin:max(calc(0px))){.govuk-width-container{margin-right:max(30px,calc(15px + env(safe-area-inset-right)));margin-left:max(30px,calc(15px + env(safe-area-inset-left)))}}}@media (min-width:1020px){.govuk-width-container{margin-right:auto;margin-left:auto}@supports (margin:max(calc(0px))){.govuk-width-container{margin-right:auto;margin-left:auto}}}.govuk-accordion{margin-bottom:20px}@media (min-width:40.0625em){.govuk-accordion{margin-bottom:30px}}.govuk-accordion__section{padding-top:15px}.govuk-accordion__section-header{padding-top:15px;padding-bottom:15px}.govuk-accordion__section-heading{margin-top:0;margin-bottom:0}.govuk-accordion__section-button{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:18px;font-size:1.125rem;line-height:1.11111;display:inline-block;margin-bottom:0;padding-top:15px}@media print{.govuk-accordion__section-button{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-accordion__section-button{font-size:24px;font-size:1.5rem;line-height:1.25}}@media print{.govuk-accordion__section-button{font-size:18pt;line-height:1.15}}.govuk-accordion__section-summary{margin-top:10px;margin-bottom:0}.govuk-accordion__section-content>:last-child{margin-bottom:0}.js-enabled .govuk-accordion{border-bottom:1px solid #b1b4b6}.js-enabled .govuk-accordion__section{padding-top:0}.js-enabled .govuk-accordion__section-content{display:none;padding-top:15px;padding-bottom:15px}@media (min-width:40.0625em){.js-enabled .govuk-accordion__section-content{padding-top:15px;padding-bottom:15px}}.js-enabled .govuk-accordion__section--expanded .govuk-accordion__section-content{display:block}.js-enabled .govuk-accordion__open-all{font-weight:400;font-size:14px;font-size:.875rem;line-height:1.14286;position:relative;z-index:1;margin:0;padding:0;border-width:0;color:#1d70b8;background:none;cursor:pointer;-webkit-appearance:none;font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (min-width:40.0625em){.js-enabled .govuk-accordion__open-all{font-size:16px;font-size:1rem;line-height:1.25}}@media print{.js-enabled .govuk-accordion__open-all{font-size:14pt;line-height:1.2;font-family:sans-serif}}.js-enabled .govuk-accordion__open-all:focus{outline:3px solid rgba(0,0,0,0);background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none}.js-enabled .govuk-accordion__open-all:link{color:#1d70b8}.js-enabled .govuk-accordion__open-all:visited{color:#4c2c92}.js-enabled .govuk-accordion__open-all:hover{color:#003078}.js-enabled .govuk-accordion__open-all:active,.js-enabled .govuk-accordion__open-all:focus{color:#0b0c0c}.js-enabled .govuk-accordion__open-all::-moz-focus-inner{padding:0;border:0}.js-enabled .govuk-accordion__section-header{position:relative;padding-right:40px;border-top:1px solid #b1b4b6;color:#1d70b8;cursor:pointer}@media (hover:none){.js-enabled .govuk-accordion__section-header:hover{border-top-color:#1d70b8;box-shadow:inset 0 3px 0 0 #1d70b8}}.js-enabled .govuk-accordion__section-button{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin-top:0;margin-bottom:0;margin-left:0;padding:0;border-width:0;color:inherit;background:none;text-align:left;cursor:pointer;-webkit-appearance:none}@media print{.js-enabled .govuk-accordion__section-button{font-family:sans-serif}}.js-enabled .govuk-accordion__section-button:focus{outline:3px solid rgba(0,0,0,0);color:#0b0c0c;background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none}.js-enabled .govuk-accordion__section-button::-moz-focus-inner{padding:0;border:0}.js-enabled .govuk-accordion__section-button:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0}.js-enabled .govuk-accordion__section-button:hover:not(:focus){text-decoration:underline}@media (hover:none){.js-enabled .govuk-accordion__section-button:hover{text-decoration:none}}.js-enabled .govuk-accordion__controls{text-align:right}.js-enabled .govuk-accordion__icon{position:absolute;top:50%;right:15px;width:16px;height:16px;margin-top:-8px}.js-enabled .govuk-accordion__icon:after,.js-enabled .govuk-accordion__icon:before{content:"";box-sizing:border-box;position:absolute;top:0;right:0;bottom:0;left:0;width:25%;height:25%;margin:auto;border:2px solid rgba(0,0,0,0);background-color:#0b0c0c}.js-enabled .govuk-accordion__icon:before{width:100%}.js-enabled .govuk-accordion__icon:after{height:100%}.js-enabled .govuk-accordion__section--expanded .govuk-accordion__icon:after{content:" ";display:none}.govuk-back-link{font-size:14px;font-size:.875rem;line-height:1.14286;font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;position:relative;margin-top:15px;margin-bottom:15px;padding-left:14px}@media (min-width:40.0625em){.govuk-back-link{font-size:16px;font-size:1rem;line-height:1.25}}@media print{.govuk-back-link{font-size:14pt;line-height:1.2;font-family:sans-serif}}.govuk-back-link:focus{outline:3px solid rgba(0,0,0,0);color:#0b0c0c;background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none}.govuk-back-link:active,.govuk-back-link:focus,.govuk-back-link:hover,.govuk-back-link:link,.govuk-back-link:visited{color:#0b0c0c}@media print{.govuk-back-link:active,.govuk-back-link:focus,.govuk-back-link:hover,.govuk-back-link:link,.govuk-back-link:visited{color:#000}}.govuk-back-link[href]{border-bottom:1px solid #0b0c0c;text-decoration:none}.govuk-back-link[href]:focus{border-bottom-color:rgba(0,0,0,0)}.govuk-back-link:before{display:block;width:0;height:0;-webkit-clip-path:polygon(0 50%,100% 100%,100% 0);clip-path:polygon(0 50%,100% 100%,100% 0);border-color:rgba(0,0,0,0);border-style:solid;border-width:5px 6px 5px 0;border-right-color:inherit;content:"";position:absolute;top:0;bottom:0;left:0;margin:auto}.govuk-breadcrumbs{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:14px;font-size:.875rem;line-height:1.14286;color:#0b0c0c;margin-top:15px;margin-bottom:10px}@media print{.govuk-breadcrumbs{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-breadcrumbs{font-size:16px;font-size:1rem;line-height:1.25}}@media print{.govuk-breadcrumbs{font-size:14pt;line-height:1.2;color:#000}}.govuk-breadcrumbs__list{margin:0;padding:0;list-style-type:none}.govuk-breadcrumbs__list:after{content:"";display:block;clear:both}.govuk-breadcrumbs__list-item{display:inline-block;position:relative;margin-bottom:5px;margin-left:10px;padding-left:15.655px;float:left}.govuk-breadcrumbs__list-item:before{content:"";display:block;position:absolute;top:0;bottom:0;left:-3.31px;width:7px;height:7px;margin:auto 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);border:solid;border-width:1px 1px 0 0;border-color:#626a6e}.govuk-breadcrumbs__list-item:first-child{margin-left:0;padding-left:0}.govuk-breadcrumbs__list-item:first-child:before{content:none;display:none}.govuk-breadcrumbs__link{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media print{.govuk-breadcrumbs__link{font-family:sans-serif}}.govuk-breadcrumbs__link:focus{outline:3px solid rgba(0,0,0,0);color:#0b0c0c;background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none}.govuk-breadcrumbs__link:active,.govuk-breadcrumbs__link:focus,.govuk-breadcrumbs__link:hover,.govuk-breadcrumbs__link:link,.govuk-breadcrumbs__link:visited{color:#0b0c0c}@media print{.govuk-breadcrumbs__link:active,.govuk-breadcrumbs__link:focus,.govuk-breadcrumbs__link:hover,.govuk-breadcrumbs__link:link,.govuk-breadcrumbs__link:visited{color:#000}}.govuk-button{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:16px;font-size:1rem;line-height:1.1875;box-sizing:border-box;display:inline-block;position:relative;width:100%;margin-top:0;margin-bottom:22px;padding:8px 10px 7px;border:2px solid rgba(0,0,0,0);border-radius:0;color:#fff;background-color:#00703c;box-shadow:0 2px 0 #002d18;text-align:center;vertical-align:top;cursor:pointer;-webkit-appearance:none}@media print{.govuk-button{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-button{font-size:19px;font-size:1.1875rem;line-height:1}}@media print{.govuk-button{font-size:14pt;line-height:19px}}@media (min-width:40.0625em){.govuk-button{margin-bottom:32px;width:auto}}.govuk-button:active,.govuk-button:hover,.govuk-button:link,.govuk-button:visited{color:#fff;text-decoration:none}.govuk-button::-moz-focus-inner{padding:0;border:0}.govuk-button:hover{background-color:#005a30}.govuk-button:active{top:2px}.govuk-button:focus{border-color:#fd0;outline:3px solid rgba(0,0,0,0);box-shadow:inset 0 0 0 1px #fd0}.govuk-button:focus:not(:active):not(:hover){border-color:#fd0;color:#0b0c0c;background-color:#fd0;box-shadow:0 2px 0 #0b0c0c}.govuk-button:before{content:"";display:block;position:absolute;top:-2px;right:-2px;bottom:-4px;left:-2px;background:rgba(0,0,0,0)}.govuk-button:active:before{top:-4px}.govuk-button--disabled,.govuk-button[disabled=disabled],.govuk-button[disabled]{opacity:.5}.govuk-button--disabled:hover,.govuk-button[disabled=disabled]:hover,.govuk-button[disabled]:hover{background-color:#00703c;cursor:default}.govuk-button--disabled:focus,.govuk-button[disabled=disabled]:focus,.govuk-button[disabled]:focus{outline:none}.govuk-button--disabled:active,.govuk-button[disabled=disabled]:active,.govuk-button[disabled]:active{top:0;box-shadow:0 2px 0 #002d18}.govuk-button--secondary{background-color:#f3f2f1;box-shadow:0 2px 0 #929191}.govuk-button--secondary,.govuk-button--secondary:active,.govuk-button--secondary:hover,.govuk-button--secondary:link,.govuk-button--secondary:visited{color:#0b0c0c}.govuk-button--secondary:hover{background-color:#dbdad9}.govuk-button--secondary:hover[disabled]{background-color:#f3f2f1}.govuk-button--warning{background-color:#d4351c;box-shadow:0 2px 0 #55150b}.govuk-button--warning,.govuk-button--warning:active,.govuk-button--warning:hover,.govuk-button--warning:link,.govuk-button--warning:visited{color:#fff}.govuk-button--warning:hover{background-color:#aa2a16}.govuk-button--warning:hover[disabled]{background-color:#d4351c}.govuk-button--start{font-weight:700;font-size:18px;font-size:1.125rem;line-height:1;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;min-height:auto;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}@media (min-width:40.0625em){.govuk-button--start{font-size:24px;font-size:1.5rem;line-height:1}}@media print{.govuk-button--start{font-size:18pt;line-height:1}}.govuk-button__start-icon{margin-left:5px;vertical-align:middle;-ms-flex-negative:0;flex-shrink:0;-ms-flex-item-align:center;align-self:center}@media (min-width:48.0625em){.govuk-button__start-icon{margin-left:10px}}.govuk-error-message{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:16px;font-size:1rem;line-height:1.25;display:block;margin-bottom:15px;clear:both;color:#d4351c}@media print{.govuk-error-message{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-error-message{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-error-message{font-size:14pt;line-height:1.15}}.govuk-fieldset{min-width:0;margin:0;padding:0;border:0}.govuk-fieldset:after{content:"";display:block;clear:both}@supports not (caret-color:auto){.govuk-fieldset,x:-moz-any-link{display:table-cell}}.govuk-fieldset__legend{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:16px;font-size:1rem;line-height:1.25;color:#0b0c0c;box-sizing:border-box;display:table;max-width:100%;margin-bottom:10px;padding:0;white-space:normal}@media print{.govuk-fieldset__legend{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-fieldset__legend{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-fieldset__legend{font-size:14pt;line-height:1.15;color:#000}}.govuk-fieldset__legend--xl{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:32px;font-size:2rem;line-height:1.09375;margin-bottom:15px}@media print{.govuk-fieldset__legend--xl{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-fieldset__legend--xl{font-size:48px;font-size:3rem;line-height:1.04167}}@media print{.govuk-fieldset__legend--xl{font-size:32pt;line-height:1.15}}.govuk-fieldset__legend--l{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:24px;font-size:1.5rem;line-height:1.04167;margin-bottom:15px}@media print{.govuk-fieldset__legend--l{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-fieldset__legend--l{font-size:36px;font-size:2.25rem;line-height:1.11111}}@media print{.govuk-fieldset__legend--l{font-size:24pt;line-height:1.05}}.govuk-fieldset__legend--m{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:18px;font-size:1.125rem;line-height:1.11111;margin-bottom:15px}@media print{.govuk-fieldset__legend--m{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-fieldset__legend--m{font-size:24px;font-size:1.5rem;line-height:1.25}}@media print{.govuk-fieldset__legend--m{font-size:18pt;line-height:1.15}}.govuk-fieldset__legend--s{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:16px;font-size:1rem;line-height:1.25}@media print{.govuk-fieldset__legend--s{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-fieldset__legend--s{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-fieldset__legend--s{font-size:14pt;line-height:1.15}}.govuk-fieldset__heading{margin:0;font-size:inherit;font-weight:inherit}.govuk-hint{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:16px;font-size:1rem;line-height:1.25;display:block;margin-bottom:15px;color:#626a6e}@media print{.govuk-hint{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-hint{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-hint{font-size:14pt;line-height:1.15}}.govuk-label:not(.govuk-label--m):not(.govuk-label--l):not(.govuk-label--xl)+.govuk-hint{margin-bottom:10px}.govuk-fieldset__legend:not(.govuk-fieldset__legend--m):not(.govuk-fieldset__legend--l):not(.govuk-fieldset__legend--xl)+.govuk-hint{margin-bottom:10px}.govuk-fieldset__legend+.govuk-hint{margin-top:-5px}.govuk-label{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:16px;font-size:1rem;line-height:1.25;color:#0b0c0c;display:block;margin-bottom:5px}@media print{.govuk-label{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-label{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-label{font-size:14pt;line-height:1.15;color:#000}}.govuk-label--xl{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:32px;font-size:2rem;line-height:1.09375;margin-bottom:15px}@media print{.govuk-label--xl{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-label--xl{font-size:48px;font-size:3rem;line-height:1.04167}}@media print{.govuk-label--xl{font-size:32pt;line-height:1.15}}.govuk-label--l{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:24px;font-size:1.5rem;line-height:1.04167;margin-bottom:15px}@media print{.govuk-label--l{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-label--l{font-size:36px;font-size:2.25rem;line-height:1.11111}}@media print{.govuk-label--l{font-size:24pt;line-height:1.05}}.govuk-label--m{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:18px;font-size:1.125rem;line-height:1.11111;margin-bottom:10px}@media print{.govuk-label--m{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-label--m{font-size:24px;font-size:1.5rem;line-height:1.25}}@media print{.govuk-label--m{font-size:18pt;line-height:1.15}}.govuk-label--s{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:16px;font-size:1rem;line-height:1.25}@media print{.govuk-label--s{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-label--s{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-label--s{font-size:14pt;line-height:1.15}}.govuk-label-wrapper{margin:0}.govuk-checkboxes__item{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:16px;font-size:1rem;line-height:1.25;display:block;position:relative;min-height:40px;margin-bottom:10px;padding-left:40px;clear:left}@media print{.govuk-checkboxes__item{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-checkboxes__item{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-checkboxes__item{font-size:14pt;line-height:1.15}}.govuk-checkboxes__item:last-child,.govuk-checkboxes__item:last-of-type{margin-bottom:0}.govuk-checkboxes__input{cursor:pointer;position:absolute;z-index:1;top:-2px;left:-2px;width:44px;height:44px;margin:0;opacity:0}.govuk-checkboxes__label{display:inline-block;margin-bottom:0;padding:8px 15px 5px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation}.govuk-checkboxes__label:before{content:"";box-sizing:border-box;position:absolute;top:0;left:0;width:40px;height:40px;border:2px solid;background:rgba(0,0,0,0)}.govuk-checkboxes__label:after{content:"";position:absolute;top:11px;left:9px;width:18px;height:7px;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg);border:solid;border-width:0 0 5px 5px;border-top-color:rgba(0,0,0,0);opacity:0;background:rgba(0,0,0,0)}.govuk-checkboxes__hint{display:block;padding-right:15px;padding-left:15px}.govuk-checkboxes__input:focus+.govuk-checkboxes__label:before{border-width:4px;box-shadow:0 0 0 3px #fd0}.govuk-checkboxes__input:checked+.govuk-checkboxes__label:after{opacity:1}.govuk-checkboxes__input:disabled,.govuk-checkboxes__input:disabled+.govuk-checkboxes__label{cursor:default}.govuk-checkboxes__input:disabled+.govuk-checkboxes__label{opacity:.5}.govuk-checkboxes__conditional{margin-bottom:15px;margin-left:18px;padding-left:33px;border-left:4px solid #b1b4b6}@media (min-width:40.0625em){.govuk-checkboxes__conditional{margin-bottom:20px}}.js-enabled .govuk-checkboxes__conditional--hidden{display:none}.govuk-checkboxes__conditional>:last-child{margin-bottom:0}.govuk-checkboxes--small .govuk-checkboxes__item{min-height:0;margin-bottom:0;padding-left:34px;float:left}.govuk-checkboxes--small .govuk-checkboxes__item:after{content:"";display:block;clear:both}.govuk-checkboxes--small .govuk-checkboxes__input{left:-10px}.govuk-checkboxes--small .govuk-checkboxes__label{margin-top:-2px;padding:13px 15px 13px 1px;float:left}@media (min-width:40.0625em){.govuk-checkboxes--small .govuk-checkboxes__label{padding:11px 15px 10px 1px}}.govuk-checkboxes--small .govuk-checkboxes__label:before{top:8px;width:24px;height:24px}.govuk-checkboxes--small .govuk-checkboxes__label:after{top:15px;left:6px;width:9px;height:3.5px;border-width:0 0 3px 3px}.govuk-checkboxes--small .govuk-checkboxes__hint{padding:0;clear:both}.govuk-checkboxes--small .govuk-checkboxes__conditional{margin-left:10px;padding-left:20px;clear:both}.govuk-checkboxes--small .govuk-checkboxes__item:hover .govuk-checkboxes__input:not(:disabled)+.govuk-checkboxes__label:before{box-shadow:0 0 0 10px #b1b4b6}.govuk-checkboxes--small .govuk-checkboxes__item:hover .govuk-checkboxes__input:focus+.govuk-checkboxes__label:before{box-shadow:0 0 0 3px #fd0,0 0 0 10px #b1b4b6}@media (hover:none),(pointer:coarse){.govuk-checkboxes--small .govuk-checkboxes__item:hover .govuk-checkboxes__input:not(:disabled)+.govuk-checkboxes__label:before{box-shadow:none}.govuk-checkboxes--small .govuk-checkboxes__item:hover .govuk-checkboxes__input:focus+.govuk-checkboxes__label:before{box-shadow:0 0 0 3px #fd0}}.govuk-character-count{margin-bottom:20px}@media (min-width:40.0625em){.govuk-character-count{margin-bottom:30px}}.govuk-character-count .govuk-form-group,.govuk-character-count .govuk-textarea{margin-bottom:5px}.govuk-character-count .govuk-textarea--error{padding:3px}.govuk-character-count__message{margin-top:0;margin-bottom:0}.govuk-character-count__message--disabled{visibility:hidden}.govuk-summary-list{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:16px;font-size:1rem;line-height:1.25;color:#0b0c0c;margin:0 0 20px}@media print{.govuk-summary-list{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-summary-list{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-summary-list{font-size:14pt;line-height:1.15;color:#000}}@media (min-width:40.0625em){.govuk-summary-list{display:table;width:100%;table-layout:fixed;margin-bottom:30px}}@media (max-width:40.0525em){.govuk-summary-list__row{margin-bottom:15px;border-bottom:1px solid #b1b4b6}}@media (min-width:40.0625em){.govuk-summary-list__row{display:table-row}}.govuk-summary-list__actions,.govuk-summary-list__key,.govuk-summary-list__value{margin:0}@media (min-width:40.0625em){.govuk-summary-list__actions,.govuk-summary-list__key,.govuk-summary-list__value{display:table-cell;padding-right:20px;padding-top:10px;padding-bottom:10px;border-bottom:1px solid #b1b4b6}}.govuk-summary-list__actions{margin-bottom:15px}@media (min-width:40.0625em){.govuk-summary-list__actions{width:20%;padding-right:0;text-align:right}}.govuk-summary-list__key,.govuk-summary-list__value{word-wrap:break-word;overflow-wrap:break-word}.govuk-summary-list__key{margin-bottom:5px;font-weight:700}@media (min-width:40.0625em){.govuk-summary-list__key{width:30%}}@media (max-width:40.0525em){.govuk-summary-list__value{margin-bottom:15px}}@media (min-width:40.0625em){.govuk-summary-list__value{width:50%}}@media (min-width:40.0625em){.govuk-summary-list__value:last-child{width:70%}}.govuk-summary-list__value>p{margin-bottom:10px}.govuk-summary-list__value>:last-child{margin-bottom:0}.govuk-summary-list__actions-list{width:100%;margin:0;padding:0}.govuk-summary-list__actions-list-item{display:inline;margin-right:10px;padding-right:10px}.govuk-summary-list__actions-list-item:not(:last-child){border-right:1px solid #b1b4b6}.govuk-summary-list__actions-list-item:last-child{margin-right:0;padding-right:0;border:0}@media (max-width:40.0525em){.govuk-summary-list--no-border .govuk-summary-list__row{border:0}}@media (min-width:40.0625em){.govuk-summary-list--no-border .govuk-summary-list__actions,.govuk-summary-list--no-border .govuk-summary-list__key,.govuk-summary-list--no-border .govuk-summary-list__value{padding-bottom:11px;border:0}}@media (max-width:40.0525em){.govuk-summary-list__row--no-border{border:0}}@media (min-width:40.0625em){.govuk-summary-list__row--no-border .govuk-summary-list__actions,.govuk-summary-list__row--no-border .govuk-summary-list__key,.govuk-summary-list__row--no-border .govuk-summary-list__value{padding-bottom:11px;border:0}}.govuk-input{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:16px;font-size:1rem;line-height:1.25;box-sizing:border-box;width:100%;height:40px;height:2.5rem;margin-top:0;padding:5px;border:2px solid #0b0c0c;border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media print{.govuk-input{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-input{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-input{font-size:14pt;line-height:1.15}}.govuk-input:focus{outline:3px solid #fd0;outline-offset:0;box-shadow:inset 0 0 0 2px}.govuk-input::-webkit-inner-spin-button,.govuk-input::-webkit-outer-spin-button{margin:0;-webkit-appearance:none}.govuk-input[type=number]{-moz-appearance:textfield}.govuk-input--error{border:4px solid #d4351c}.govuk-input--error:focus{border-color:#0b0c0c;box-shadow:none}.govuk-input--width-30{max-width:59ex}.govuk-input--width-20{max-width:41ex}.govuk-input--width-10{max-width:23ex}.govuk-input--width-5{max-width:10.8ex}.govuk-input--width-4{max-width:9ex}.govuk-input--width-3{max-width:7.2ex}.govuk-input--width-2{max-width:5.4ex}.govuk-date-input{font-size:0}.govuk-date-input:after{content:"";display:block;clear:both}.govuk-date-input__item{display:inline-block;margin-right:20px;margin-bottom:0}.govuk-date-input__label{display:block}.govuk-date-input__input{margin-bottom:0}.govuk-details{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:16px;font-size:1rem;line-height:1.25;color:#0b0c0c;margin-bottom:20px;display:block}@media print{.govuk-details{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-details{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-details{font-size:14pt;line-height:1.15;color:#000}}@media (min-width:40.0625em){.govuk-details{margin-bottom:30px}}.govuk-details__summary{display:inline-block;position:relative;margin-bottom:5px;padding-left:25px;color:#1d70b8;cursor:pointer}.govuk-details__summary:hover{color:#003078}.govuk-details__summary:focus{outline:3px solid rgba(0,0,0,0);color:#0b0c0c;background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none}.govuk-details__summary-text{text-decoration:underline}.govuk-details__summary:focus .govuk-details__summary-text{text-decoration:none}.govuk-details__summary::-webkit-details-marker{display:none}.govuk-details__summary:before{content:"";position:absolute;top:-1px;bottom:0;left:0;margin:auto;display:block;width:0;height:0;-webkit-clip-path:polygon(0 0,100% 50%,0 100%);clip-path:polygon(0 0,100% 50%,0 100%);border-color:rgba(0,0,0,0);border-style:solid;border-width:7px 0 7px 12.124px;border-left-color:inherit}.govuk-details[open]>.govuk-details__summary:before{display:block;width:0;height:0;-webkit-clip-path:polygon(0 0,50% 100%,100% 0);clip-path:polygon(0 0,50% 100%,100% 0);border-color:rgba(0,0,0,0);border-style:solid;border-width:12.124px 7px 0;border-top-color:inherit}.govuk-details__text{padding:15px 15px 15px 20px;border-left:5px solid #b1b4b6}.govuk-details__text p{margin-top:0;margin-bottom:20px}.govuk-details__text>:last-child{margin-bottom:0}.govuk-error-summary{color:#0b0c0c;padding:15px;margin-bottom:30px;border:5px solid #d4351c}@media print{.govuk-error-summary{color:#000}}@media (min-width:40.0625em){.govuk-error-summary{padding:20px;margin-bottom:50px}}.govuk-error-summary:focus{outline:3px solid #fd0}.govuk-error-summary__title{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:18px;font-size:1.125rem;line-height:1.11111;margin-top:0;margin-bottom:15px}@media print{.govuk-error-summary__title{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-error-summary__title{font-size:24px;font-size:1.5rem;line-height:1.25}}@media print{.govuk-error-summary__title{font-size:18pt;line-height:1.15}}@media (min-width:40.0625em){.govuk-error-summary__title{margin-bottom:20px}}.govuk-error-summary__body{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:16px;font-size:1rem;line-height:1.25}@media print{.govuk-error-summary__body{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-error-summary__body{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-error-summary__body{font-size:14pt;line-height:1.15}}.govuk-error-summary__body p{margin-top:0;margin-bottom:15px}@media (min-width:40.0625em){.govuk-error-summary__body p{margin-bottom:20px}}.govuk-error-summary__list{margin-top:0;margin-bottom:0}.govuk-error-summary__list a{font-weight:700}.govuk-error-summary__list a:active,.govuk-error-summary__list a:hover,.govuk-error-summary__list a:link,.govuk-error-summary__list a:visited{color:#d4351c}.govuk-error-summary__list a:focus{outline:3px solid rgba(0,0,0,0);color:#0b0c0c;background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none}.govuk-file-upload{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:16px;font-size:1rem;line-height:1.25;color:#0b0c0c;padding-top:5px;padding-bottom:5px}@media print{.govuk-file-upload{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-file-upload{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-file-upload{font-size:14pt;line-height:1.15;color:#000}}.govuk-file-upload:focus{margin-right:-5px;margin-left:-5px;padding-right:5px;padding-left:5px;outline:3px solid #fd0;box-shadow:inset 0 0 0 4px #0b0c0c}.govuk-file-upload:focus-within{margin-right:-5px;margin-left:-5px;padding-right:5px;padding-left:5px;outline:3px solid #fd0;box-shadow:inset 0 0 0 4px #0b0c0c}.govuk-file-upload--error{margin-right:-5px;margin-left:-5px;padding-right:5px;padding-left:5px;border:4px solid #d4351c}.govuk-file-upload--error:focus{border-color:#0b0c0c;box-shadow:none}.govuk-file-upload--error:focus-within{border-color:#0b0c0c;box-shadow:none}.govuk-footer{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:14px;font-size:.875rem;line-height:1.14286;padding-top:25px;padding-bottom:15px;border-top:1px solid #b1b4b6;color:#0b0c0c;background:#f3f2f1}@media print{.govuk-footer{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-footer{font-size:16px;font-size:1rem;line-height:1.25}}@media print{.govuk-footer{font-size:14pt;line-height:1.2}}@media (min-width:40.0625em){.govuk-footer{padding-top:40px;padding-bottom:25px}}.govuk-footer__link:active,.govuk-footer__link:hover,.govuk-footer__link:link,.govuk-footer__link:visited{color:#0b0c0c}.govuk-footer__link:focus{outline:3px solid rgba(0,0,0,0);color:#0b0c0c;background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none}.govuk-footer__section-break{margin:0 0 30px;border:0;border-bottom:1px solid #b1b4b6}@media (min-width:40.0625em){.govuk-footer__section-break{margin-bottom:50px}}.govuk-footer__meta{display:-webkit-box;display:-ms-flexbox;display:flex;margin-right:-15px;margin-left:-15px;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.govuk-footer__meta-item{margin-right:15px;margin-bottom:25px;margin-left:15px}.govuk-footer__meta-item--grow{-webkit-box-flex:1;-ms-flex:1;flex:1}@media (max-width:40.0525em){.govuk-footer__meta-item--grow{-ms-flex-preferred-size:320px;flex-basis:320px}}.govuk-footer__licence-logo{display:inline-block;margin-right:10px;vertical-align:top}@media (max-width:48.0525em){.govuk-footer__licence-logo{margin-bottom:15px}}.govuk-footer__licence-description{display:inline-block}.govuk-footer__copyright-logo{display:inline-block;min-width:125px;padding-top:112px;background-image:url(/assets/images/govuk-crest.png);background-repeat:no-repeat;background-position:50% 0;background-size:125px 102px;text-align:center;text-decoration:none;white-space:nowrap}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:2dppx),only screen and (min-resolution:192dpi){.govuk-footer__copyright-logo{background-image:url(/assets/images/govuk-crest-2x.png)}}.govuk-footer__inline-list{margin-top:0;margin-bottom:15px;padding:0}.govuk-footer__meta-custom{margin-bottom:20px}.govuk-footer__inline-list-item{display:inline-block;margin-right:15px;margin-bottom:5px}.govuk-footer__heading{margin-bottom:25px;padding-bottom:20px;border-bottom:1px solid #b1b4b6}@media (min-width:40.0625em){.govuk-footer__heading{margin-bottom:40px}}@media (max-width:40.0525em){.govuk-footer__heading{padding-bottom:10px}}.govuk-footer__navigation{display:-webkit-box;display:-ms-flexbox;display:flex;margin-right:-15px;margin-left:-15px;-ms-flex-wrap:wrap;flex-wrap:wrap}.govuk-footer__section{display:inline-block;margin-right:15px;margin-bottom:30px;margin-left:15px;vertical-align:top;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1}@media (max-width:48.0525em){.govuk-footer__section{-ms-flex-preferred-size:200px;flex-basis:200px}}@media (min-width:48.0625em){.govuk-footer__section:first-child:nth-last-child(2){-webkit-box-flex:2;-ms-flex-positive:2;flex-grow:2}}.govuk-footer__list{margin:0;padding:0;list-style:none;-webkit-column-gap:30px;-moz-column-gap:30px;column-gap:30px}@media (min-width:48.0625em){.govuk-footer__list--columns-2{-webkit-column-count:2;-moz-column-count:2;column-count:2}.govuk-footer__list--columns-3{-webkit-column-count:3;-moz-column-count:3;column-count:3}}.govuk-footer__list-item{margin-bottom:15px}@media (min-width:40.0625em){.govuk-footer__list-item{margin-bottom:20px}}.govuk-footer__list-item:last-child{margin-bottom:0}.govuk-header{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:14px;font-size:.875rem;line-height:1.14286;border-bottom:10px solid #fff;color:#fff;background:#0b0c0c}@media print{.govuk-header{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-header{font-size:16px;font-size:1rem;line-height:1.25}}@media print{.govuk-header{font-size:14pt;line-height:1.2}}.govuk-header__container--full-width{padding:0 15px;border-color:#1d70b8}.govuk-header__container--full-width .govuk-header__menu-button{right:15px}.govuk-header__container{position:relative;margin-bottom:-10px;padding-top:10px;border-bottom:10px solid #1d70b8}.govuk-header__container:after{content:"";display:block;clear:both}.govuk-header__logotype{display:inline-block;margin-right:5px}.govuk-header__logotype-crown{position:relative;top:-1px;margin-right:1px;fill:currentColor;vertical-align:top}.govuk-header__logotype-crown-fallback-image{width:36px;height:32px;border:0;vertical-align:middle}.govuk-header__product-name{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:18px;font-size:1.125rem;line-height:1;display:inline-table;padding-right:10px}@media print{.govuk-header__product-name{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-header__product-name{font-size:24px;font-size:1.5rem;line-height:1}}@media print{.govuk-header__product-name{font-size:18pt;line-height:1}}.govuk-header__link{text-decoration:none}.govuk-header__link:link,.govuk-header__link:visited{color:#fff}.govuk-header__link:hover{text-decoration:underline}.govuk-header__link:focus{outline:3px solid rgba(0,0,0,0);color:#0b0c0c;background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none}.govuk-header__link--homepage{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;display:inline-block;font-size:30px;line-height:1}@media print{.govuk-header__link--homepage{font-family:sans-serif}}.govuk-header__link--homepage:link,.govuk-header__link--homepage:visited{text-decoration:none}.govuk-header__link--homepage:active,.govuk-header__link--homepage:hover{margin-bottom:-1px;border-bottom:1px solid}.govuk-header__link--homepage:focus{margin-bottom:0;border-bottom:0}.govuk-header__link--service-name{display:inline-block;margin-bottom:10px;font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:18px;font-size:1.125rem;line-height:1.11111}@media print{.govuk-header__link--service-name{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-header__link--service-name{font-size:24px;font-size:1.5rem;line-height:1.25}}@media print{.govuk-header__link--service-name{font-size:18pt;line-height:1.15}}.govuk-header__content,.govuk-header__logo{box-sizing:border-box}.govuk-header__logo{margin-bottom:10px;padding-right:50px}@media (min-width:40.0625em){.govuk-header__logo{margin-bottom:10px}}@media (min-width:48.0625em){.govuk-header__logo{width:33.33%;padding-right:15px;float:left;vertical-align:top}}@media (min-width:48.0625em){.govuk-header__content{width:66.66%;padding-left:15px;float:left}}.govuk-header__menu-button{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:14px;font-size:.875rem;line-height:1.14286;display:none;position:absolute;top:20px;right:0;margin:0;padding:0;border:0;color:#fff;background:none}@media print{.govuk-header__menu-button{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-header__menu-button{font-size:16px;font-size:1rem;line-height:1.25}}@media print{.govuk-header__menu-button{font-size:14pt;line-height:1.2}}.govuk-header__menu-button:hover{text-decoration:underline}.govuk-header__menu-button:focus{outline:3px solid rgba(0,0,0,0);color:#0b0c0c;background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none}.govuk-header__menu-button:after{display:inline-block;width:0;height:0;-webkit-clip-path:polygon(0 0,50% 100%,100% 0);clip-path:polygon(0 0,50% 100%,100% 0);border-color:rgba(0,0,0,0);border-style:solid;border-width:8.66px 5px 0;border-top-color:inherit;content:"";margin-left:5px}@media (min-width:40.0625em){.govuk-header__menu-button{top:15px}}.govuk-header__menu-button--open:after{display:inline-block;width:0;height:0;-webkit-clip-path:polygon(50% 0,0 100%,100% 100%);clip-path:polygon(50% 0,0 100%,100% 100%);border-color:rgba(0,0,0,0);border-style:solid;border-width:0 5px 8.66px;border-bottom-color:inherit}.govuk-header__navigation{display:block;margin:0;padding:0;list-style:none}@media (min-width:40.0625em){.govuk-header__navigation{margin-bottom:10px}}.js-enabled .govuk-header__menu-button{display:block}@media (min-width:48.0625em){.js-enabled .govuk-header__menu-button{display:none}}.js-enabled .govuk-header__navigation{display:none}@media (min-width:48.0625em){.js-enabled .govuk-header__navigation{display:block}}.js-enabled .govuk-header__navigation--open{display:block}@media (min-width:48.0625em){.govuk-header__navigation--end{margin:0;padding:5px 0;text-align:right}}.govuk-header__navigation--no-service-name{padding-top:40px}.govuk-header__navigation-item{padding:10px 0;border-bottom:1px solid #2e3133}@media (min-width:48.0625em){.govuk-header__navigation-item{display:inline-block;margin-right:15px;padding:5px 0;border:0}}.govuk-header__navigation-item a{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:14px;font-size:.875rem;line-height:1.14286;white-space:nowrap}@media print{.govuk-header__navigation-item a{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-header__navigation-item a{font-size:16px;font-size:1rem;line-height:1.25}}@media print{.govuk-header__navigation-item a{font-size:14pt;line-height:1.2}}.govuk-header__navigation-item--active a:hover,.govuk-header__navigation-item--active a:link,.govuk-header__navigation-item--active a:visited{color:#1d8feb}.govuk-header__navigation-item--active a:focus{color:#0b0c0c}.govuk-header__navigation-item:last-child{margin-right:0}@media print{.govuk-header{border-bottom-width:0;color:#0b0c0c;background:rgba(0,0,0,0)}.govuk-header__logotype-crown-fallback-image{display:none}.govuk-header__link:link,.govuk-header__link:visited{color:#0b0c0c}.govuk-header__link:after{display:none}}.govuk-inset-text{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:16px;font-size:1rem;line-height:1.25;color:#0b0c0c;padding:15px;margin-top:20px;margin-bottom:20px;clear:both;border-left:10px solid #b1b4b6}@media print{.govuk-inset-text{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-inset-text{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-inset-text{font-size:14pt;line-height:1.15;color:#000}}@media (min-width:40.0625em){.govuk-inset-text{margin-top:30px;margin-bottom:30px}}.govuk-inset-text>:first-child{margin-top:0}.govuk-inset-text>:last-child,.govuk-inset-text>:only-child{margin-bottom:0}.govuk-panel{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:16px;font-size:1rem;line-height:1.25;box-sizing:border-box;margin-bottom:15px;padding:35px;border:5px solid rgba(0,0,0,0);text-align:center}@media print{.govuk-panel{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-panel{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-panel{font-size:14pt;line-height:1.15}}@media (max-width:40.0525em){.govuk-panel{padding:25px}}.govuk-panel--confirmation{color:#fff;background:#00703c}.govuk-panel__title{margin-top:0;margin-bottom:30px;font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:32px;font-size:2rem;line-height:1.09375}@media print{.govuk-panel__title{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-panel__title{font-size:48px;font-size:3rem;line-height:1.04167}}@media print{.govuk-panel__title{font-size:32pt;line-height:1.15}}.govuk-panel__title:last-child{margin-bottom:0}.govuk-panel__body{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:24px;font-size:1.5rem;line-height:1.04167}@media print{.govuk-panel__body{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-panel__body{font-size:36px;font-size:2.25rem;line-height:1.11111}}@media print{.govuk-panel__body{font-size:24pt;line-height:1.05}}.govuk-tag{display:inline-block;outline:2px solid rgba(0,0,0,0);outline-offset:-2px;color:#fff;background-color:#1d70b8;letter-spacing:1px;text-decoration:none;text-transform:uppercase;font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:14px;font-size:.875rem;line-height:1;padding:5px 8px 4px}@media print{.govuk-tag{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-tag{font-size:16px;font-size:1rem;line-height:1}}@media print{.govuk-tag{font-size:14pt;line-height:1}}.govuk-tag--inactive{background-color:#626a6e}.govuk-phase-banner{padding-top:10px;padding-bottom:10px;border-bottom:1px solid #b1b4b6}.govuk-phase-banner__content{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:14px;font-size:.875rem;line-height:1.14286;color:#0b0c0c;display:table;margin:0}@media print{.govuk-phase-banner__content{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-phase-banner__content{font-size:16px;font-size:1rem;line-height:1.25}}@media print{.govuk-phase-banner__content{font-size:14pt;line-height:1.2;color:#000}}.govuk-phase-banner__content__tag{margin-right:10px}.govuk-phase-banner__text{display:table-cell;vertical-align:baseline}.govuk-tabs{margin-top:5px;margin-bottom:20px}@media (min-width:40.0625em){.govuk-tabs{margin-top:5px;margin-bottom:30px}}.govuk-tabs__title{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:16px;font-size:1rem;line-height:1.25;color:#0b0c0c;margin-bottom:10px}@media print{.govuk-tabs__title{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-tabs__title{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-tabs__title{font-size:14pt;line-height:1.15;color:#000}}.govuk-tabs__list{padding:0;list-style:none;margin:0 0 20px}@media (min-width:40.0625em){.govuk-tabs__list{margin-bottom:30px}}.govuk-tabs__list-item{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:16px;font-size:1rem;line-height:1.25;margin-left:25px}@media print{.govuk-tabs__list-item{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-tabs__list-item{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-tabs__list-item{font-size:14pt;line-height:1.15}}.govuk-tabs__list-item:before{color:#0b0c0c;content:"\2014 ";margin-left:-25px;padding-right:5px}@media print{.govuk-tabs__list-item:before{color:#000}}.govuk-tabs__tab{display:inline-block;margin-bottom:10px}.govuk-tabs__tab:link{color:#1d70b8}.govuk-tabs__tab:visited{color:#4c2c92}.govuk-tabs__tab:hover{color:#003078}.govuk-tabs__tab:active{color:#0b0c0c}.govuk-tabs__tab:focus{outline:3px solid rgba(0,0,0,0);color:#0b0c0c;background-color:#fd0;box-shadow:0 -2px #fd0,0 4px #0b0c0c;text-decoration:none}.govuk-tabs__panel{margin-bottom:30px}@media (min-width:40.0625em){.govuk-tabs__panel{margin-bottom:50px}}@media (min-width:40.0625em){.js-enabled .govuk-tabs__list{margin-bottom:0;border-bottom:1px solid #b1b4b6}.js-enabled .govuk-tabs__list:after{content:"";display:block;clear:both}.js-enabled .govuk-tabs__title{display:none}.js-enabled .govuk-tabs__list-item{position:relative;margin-right:5px;margin-bottom:0;margin-left:0;padding:10px 20px;float:left;background-color:#f3f2f1;text-align:center}.js-enabled .govuk-tabs__list-item:before{content:none}.js-enabled .govuk-tabs__list-item--selected{position:relative;margin-top:-5px;margin-bottom:-1px;padding:14px 19px 16px;border:1px solid #b1b4b6;border-bottom:0;background-color:#fff}.js-enabled .govuk-tabs__list-item--selected .govuk-tabs__tab{text-decoration:none}.js-enabled .govuk-tabs__tab{margin-bottom:0}.js-enabled .govuk-tabs__tab:active,.js-enabled .govuk-tabs__tab:focus,.js-enabled .govuk-tabs__tab:hover,.js-enabled .govuk-tabs__tab:link,.js-enabled .govuk-tabs__tab:visited{color:#0b0c0c}}@media print and (min-width:40.0625em){.js-enabled .govuk-tabs__tab:active,.js-enabled .govuk-tabs__tab:focus,.js-enabled .govuk-tabs__tab:hover,.js-enabled .govuk-tabs__tab:link,.js-enabled .govuk-tabs__tab:visited{color:#000}}@media (min-width:40.0625em){.js-enabled .govuk-tabs__tab:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0}.js-enabled .govuk-tabs__panel{margin-bottom:0;padding:30px 20px;border:1px solid #b1b4b6;border-top:0}}@media (min-width:40.0625em) and (min-width:40.0625em){.js-enabled .govuk-tabs__panel{margin-bottom:0}}@media (min-width:40.0625em){.js-enabled .govuk-tabs__panel>:last-child{margin-bottom:0}.js-enabled .govuk-tabs__panel--hidden{display:none}}.govuk-radios__item{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:16px;font-size:1rem;line-height:1.25;display:block;position:relative;min-height:40px;margin-bottom:10px;padding-left:40px;clear:left}@media print{.govuk-radios__item{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-radios__item{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-radios__item{font-size:14pt;line-height:1.15}}.govuk-radios__item:last-child,.govuk-radios__item:last-of-type{margin-bottom:0}.govuk-radios__input{cursor:pointer;position:absolute;z-index:1;top:-2px;left:-2px;width:44px;height:44px;margin:0;opacity:0}.govuk-radios__label{display:inline-block;margin-bottom:0;padding:8px 15px 5px;cursor:pointer;-ms-touch-action:manipulation;touch-action:manipulation}.govuk-radios__label:before{content:"";box-sizing:border-box;position:absolute;top:0;left:0;width:40px;height:40px;border:2px solid;border-radius:50%;background:rgba(0,0,0,0)}.govuk-radios__label:after{content:"";position:absolute;top:10px;left:10px;width:0;height:0;border:10px solid;border-radius:50%;opacity:0;background:currentColor}.govuk-radios__hint{display:block;padding-right:15px;padding-left:15px}.govuk-radios__input:focus+.govuk-radios__label:before{border-width:4px;box-shadow:0 0 0 4px #fd0}.govuk-radios__input:checked+.govuk-radios__label:after{opacity:1}.govuk-radios__input:disabled,.govuk-radios__input:disabled+.govuk-radios__label{cursor:default}.govuk-radios__input:disabled+.govuk-radios__label{opacity:.5}@media (min-width:40.0625em){.govuk-radios--inline:after{content:"";display:block;clear:both}.govuk-radios--inline .govuk-radios__item{margin-right:20px;float:left;clear:none}}.govuk-radios--inline.govuk-radios--conditional .govuk-radios__item{margin-right:0;float:none}.govuk-radios__divider{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:16px;font-size:1rem;line-height:1.25;color:#0b0c0c;width:40px;margin-bottom:10px;text-align:center}@media print{.govuk-radios__divider{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-radios__divider{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-radios__divider{font-size:14pt;line-height:1.15;color:#000}}.govuk-radios__conditional{margin-bottom:15px;margin-left:18px;padding-left:33px;border-left:4px solid #b1b4b6}@media (min-width:40.0625em){.govuk-radios__conditional{margin-bottom:20px}}.js-enabled .govuk-radios__conditional--hidden{display:none}.govuk-radios__conditional>:last-child{margin-bottom:0}.govuk-radios--small .govuk-radios__item{min-height:0;margin-bottom:0;padding-left:34px;float:left}.govuk-radios--small .govuk-radios__item:after{content:"";display:block;clear:both}.govuk-radios--small .govuk-radios__input{left:-10px}.govuk-radios--small .govuk-radios__label{margin-top:-2px;padding:13px 15px 13px 1px;float:left}@media (min-width:40.0625em){.govuk-radios--small .govuk-radios__label{padding:11px 15px 10px 1px}}.govuk-radios--small .govuk-radios__label:before{top:8px;width:24px;height:24px}.govuk-radios--small .govuk-radios__label:after{top:15px;left:7px;border-width:5px}.govuk-radios--small .govuk-radios__hint{padding:0;clear:both;pointer-events:none}.govuk-radios--small .govuk-radios__conditional{margin-left:10px;padding-left:20px;clear:both}.govuk-radios--small .govuk-radios__divider{width:24px;margin-bottom:5px}.govuk-radios--small .govuk-radios__item:hover .govuk-radios__input:not(:disabled)+.govuk-radios__label:before{box-shadow:0 0 0 10px #b1b4b6}.govuk-radios--small .govuk-radios__item:hover .govuk-radios__input:focus+.govuk-radios__label:before{box-shadow:0 0 0 4px #fd0,0 0 0 10px #b1b4b6}@media (hover:none),(pointer:coarse){.govuk-radios--small .govuk-radios__item:hover .govuk-radios__input:not(:disabled)+.govuk-radios__label:before{box-shadow:none}.govuk-radios--small .govuk-radios__item:hover .govuk-radios__input:focus+.govuk-radios__label:before{box-shadow:0 0 0 4px #fd0}}.govuk-select{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:16px;font-size:1rem;line-height:1.25;box-sizing:border-box;max-width:100%;height:40px;height:2.5rem;padding:5px;border:2px solid #0b0c0c}@media print{.govuk-select{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-select{font-size:19px;font-size:1.1875rem;line-height:1.25}}@media print{.govuk-select{font-size:14pt;line-height:1.25}}.govuk-select:focus{outline:3px solid #fd0;outline-offset:0;box-shadow:inset 0 0 0 2px}.govuk-select:focus::-ms-value,.govuk-select option:active,.govuk-select option:checked{color:#fff;background-color:#1d70b8}.govuk-select--error{border:4px solid #d4351c}.govuk-select--error:focus{border-color:#0b0c0c;box-shadow:none}.govuk-skip-link{position:absolute!important;width:1px!important;height:1px!important;margin:0!important;overflow:hidden!important;clip:rect(0 0 0 0)!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important;white-space:nowrap!important;font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:14px;font-size:.875rem;line-height:1.14286;display:block;padding:10px 15px}.govuk-skip-link:active,.govuk-skip-link:focus{position:static!important;width:auto!important;height:auto!important;margin:inherit!important;overflow:visible!important;clip:auto!important;-webkit-clip-path:none!important;clip-path:none!important;white-space:inherit!important}@media print{.govuk-skip-link{font-family:sans-serif}}.govuk-skip-link:active,.govuk-skip-link:focus,.govuk-skip-link:hover,.govuk-skip-link:link,.govuk-skip-link:visited{color:#0b0c0c}@media print{.govuk-skip-link:active,.govuk-skip-link:focus,.govuk-skip-link:hover,.govuk-skip-link:link,.govuk-skip-link:visited{color:#000}}@media (min-width:40.0625em){.govuk-skip-link{font-size:16px;font-size:1rem;line-height:1.25}}@media print{.govuk-skip-link{font-size:14pt;line-height:1.2}}@supports (padding:max(calc(0px))){.govuk-skip-link{padding-right:max(15px,calc(15px + env(safe-area-inset-right)));padding-left:max(15px,calc(15px + env(safe-area-inset-left)))}}.govuk-skip-link:focus{outline:3px solid #fd0;background-color:#fd0}.govuk-table{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:16px;font-size:1rem;line-height:1.25;color:#0b0c0c;width:100%;margin-bottom:20px;border-spacing:0;border-collapse:collapse}@media print{.govuk-table{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-table{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-table{font-size:14pt;line-height:1.15;color:#000}}@media (min-width:40.0625em){.govuk-table{margin-bottom:30px}}.govuk-table__header{font-weight:700}.govuk-table__cell,.govuk-table__header{padding:10px 20px 10px 0;border-bottom:1px solid #b1b4b6;text-align:left;vertical-align:top}.govuk-table__cell--numeric{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-font-feature-settings:"tnum" 1;font-feature-settings:"tnum" 1;font-weight:400}@media print{.govuk-table__cell--numeric{font-family:sans-serif}}@supports (font-variant-numeric:tabular-nums){.govuk-table__cell--numeric{-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant-numeric:tabular-nums}}.govuk-table__cell--numeric,.govuk-table__header--numeric{text-align:right}.govuk-table__cell:last-child,.govuk-table__header:last-child{padding-right:0}.govuk-table__caption{font-weight:700;display:table-caption;text-align:left}.govuk-textarea{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;font-size:16px;font-size:1rem;line-height:1.25;box-sizing:border-box;display:block;width:100%;min-height:40px;margin-bottom:20px;padding:5px;resize:vertical;border:2px solid #0b0c0c;border-radius:0;-webkit-appearance:none}@media print{.govuk-textarea{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-textarea{font-size:19px;font-size:1.1875rem;line-height:1.25}}@media print{.govuk-textarea{font-size:14pt;line-height:1.25}}@media (min-width:40.0625em){.govuk-textarea{margin-bottom:30px}}.govuk-textarea:focus{outline:3px solid #fd0;outline-offset:0;box-shadow:inset 0 0 0 2px}.govuk-textarea--error{border:4px solid #d4351c}.govuk-textarea--error:focus{border-color:#0b0c0c;box-shadow:none}.govuk-warning-text{position:relative;margin-bottom:20px;padding:10px 0}@media (min-width:40.0625em){.govuk-warning-text{margin-bottom:30px}}.govuk-warning-text__assistive{position:absolute!important;width:1px!important;height:1px!important;margin:0!important;padding:0!important;overflow:hidden!important;clip:rect(0 0 0 0)!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important;border:0!important;white-space:nowrap!important}.govuk-warning-text__icon{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;display:inline-block;position:absolute;left:0;min-width:29px;min-height:29px;margin-top:-7px;border:3px solid #0b0c0c;border-radius:50%;color:#fff;background:#0b0c0c;font-size:30px;line-height:29px;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media print{.govuk-warning-text__icon{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-warning-text__icon{margin-top:-5px}}.govuk-warning-text__text{font-family:GDS Transport,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:700;font-size:16px;font-size:1rem;line-height:1.25;color:#0b0c0c;display:block;padding-left:45px}@media print{.govuk-warning-text__text{font-family:sans-serif}}@media (min-width:40.0625em){.govuk-warning-text__text{font-size:19px;font-size:1.1875rem;line-height:1.31579}}@media print{.govuk-warning-text__text{font-size:14pt;line-height:1.15;color:#000}}.govuk-clearfix:after{content:"";display:block;clear:both}.govuk-visually-hidden{padding:0!important;border:0!important}.govuk-visually-hidden,.govuk-visually-hidden-focusable{position:absolute!important;width:1px!important;height:1px!important;margin:0!important;overflow:hidden!important;clip:rect(0 0 0 0)!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important;white-space:nowrap!important}.govuk-visually-hidden-focusable:active,.govuk-visually-hidden-focusable:focus{position:static!important;width:auto!important;height:auto!important;margin:inherit!important;overflow:visible!important;clip:auto!important;-webkit-clip-path:none!important;clip-path:none!important;white-space:inherit!important}.govuk-\!-display-inline{display:inline!important}.govuk-\!-display-inline-block{display:inline-block!important}.govuk-\!-display-block{display:block!important}.govuk-\!-display-none{display:none!important}.govuk-\!-margin-0{margin:0!important}@media (min-width:40.0625em){.govuk-\!-margin-0{margin:0!important}}.govuk-\!-margin-top-0{margin-top:0!important}@media (min-width:40.0625em){.govuk-\!-margin-top-0{margin-top:0!important}}.govuk-\!-margin-right-0{margin-right:0!important}@media (min-width:40.0625em){.govuk-\!-margin-right-0{margin-right:0!important}}.govuk-\!-margin-bottom-0{margin-bottom:0!important}@media (min-width:40.0625em){.govuk-\!-margin-bottom-0{margin-bottom:0!important}}.govuk-\!-margin-left-0{margin-left:0!important}@media (min-width:40.0625em){.govuk-\!-margin-left-0{margin-left:0!important}}.govuk-\!-margin-1{margin:5px!important}@media (min-width:40.0625em){.govuk-\!-margin-1{margin:5px!important}}.govuk-\!-margin-top-1{margin-top:5px!important}@media (min-width:40.0625em){.govuk-\!-margin-top-1{margin-top:5px!important}}.govuk-\!-margin-right-1{margin-right:5px!important}@media (min-width:40.0625em){.govuk-\!-margin-right-1{margin-right:5px!important}}.govuk-\!-margin-bottom-1{margin-bottom:5px!important}@media (min-width:40.0625em){.govuk-\!-margin-bottom-1{margin-bottom:5px!important}}.govuk-\!-margin-left-1{margin-left:5px!important}@media (min-width:40.0625em){.govuk-\!-margin-left-1{margin-left:5px!important}}.govuk-\!-margin-2{margin:10px!important}@media (min-width:40.0625em){.govuk-\!-margin-2{margin:10px!important}}.govuk-\!-margin-top-2{margin-top:10px!important}@media (min-width:40.0625em){.govuk-\!-margin-top-2{margin-top:10px!important}}.govuk-\!-margin-right-2{margin-right:10px!important}@media (min-width:40.0625em){.govuk-\!-margin-right-2{margin-right:10px!important}}.govuk-\!-margin-bottom-2{margin-bottom:10px!important}@media (min-width:40.0625em){.govuk-\!-margin-bottom-2{margin-bottom:10px!important}}.govuk-\!-margin-left-2{margin-left:10px!important}@media (min-width:40.0625em){.govuk-\!-margin-left-2{margin-left:10px!important}}.govuk-\!-margin-3{margin:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-3{margin:15px!important}}.govuk-\!-margin-top-3{margin-top:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-top-3{margin-top:15px!important}}.govuk-\!-margin-right-3{margin-right:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-right-3{margin-right:15px!important}}.govuk-\!-margin-bottom-3{margin-bottom:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-bottom-3{margin-bottom:15px!important}}.govuk-\!-margin-left-3{margin-left:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-left-3{margin-left:15px!important}}.govuk-\!-margin-4{margin:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-4{margin:20px!important}}.govuk-\!-margin-top-4{margin-top:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-top-4{margin-top:20px!important}}.govuk-\!-margin-right-4{margin-right:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-right-4{margin-right:20px!important}}.govuk-\!-margin-bottom-4{margin-bottom:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-bottom-4{margin-bottom:20px!important}}.govuk-\!-margin-left-4{margin-left:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-left-4{margin-left:20px!important}}.govuk-\!-margin-5{margin:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-5{margin:25px!important}}.govuk-\!-margin-top-5{margin-top:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-top-5{margin-top:25px!important}}.govuk-\!-margin-right-5{margin-right:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-right-5{margin-right:25px!important}}.govuk-\!-margin-bottom-5{margin-bottom:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-bottom-5{margin-bottom:25px!important}}.govuk-\!-margin-left-5{margin-left:15px!important}@media (min-width:40.0625em){.govuk-\!-margin-left-5{margin-left:25px!important}}.govuk-\!-margin-6{margin:20px!important}@media (min-width:40.0625em){.govuk-\!-margin-6{margin:30px!important}}.govuk-\!-margin-top-6{margin-top:20px!important}@media (min-width:40.0625em){.govuk-\!-margin-top-6{margin-top:30px!important}}.govuk-\!-margin-right-6{margin-right:20px!important}@media (min-width:40.0625em){.govuk-\!-margin-right-6{margin-right:30px!important}}.govuk-\!-margin-bottom-6{margin-bottom:20px!important}@media (min-width:40.0625em){.govuk-\!-margin-bottom-6{margin-bottom:30px!important}}.govuk-\!-margin-left-6{margin-left:20px!important}@media (min-width:40.0625em){.govuk-\!-margin-left-6{margin-left:30px!important}}.govuk-\!-margin-7{margin:25px!important}@media (min-width:40.0625em){.govuk-\!-margin-7{margin:40px!important}}.govuk-\!-margin-top-7{margin-top:25px!important}@media (min-width:40.0625em){.govuk-\!-margin-top-7{margin-top:40px!important}}.govuk-\!-margin-right-7{margin-right:25px!important}@media (min-width:40.0625em){.govuk-\!-margin-right-7{margin-right:40px!important}}.govuk-\!-margin-bottom-7{margin-bottom:25px!important}@media (min-width:40.0625em){.govuk-\!-margin-bottom-7{margin-bottom:40px!important}}.govuk-\!-margin-left-7{margin-left:25px!important}@media (min-width:40.0625em){.govuk-\!-margin-left-7{margin-left:40px!important}}.govuk-\!-margin-8{margin:30px!important}@media (min-width:40.0625em){.govuk-\!-margin-8{margin:50px!important}}.govuk-\!-margin-top-8{margin-top:30px!important}@media (min-width:40.0625em){.govuk-\!-margin-top-8{margin-top:50px!important}}.govuk-\!-margin-right-8{margin-right:30px!important}@media (min-width:40.0625em){.govuk-\!-margin-right-8{margin-right:50px!important}}.govuk-\!-margin-bottom-8{margin-bottom:30px!important}@media (min-width:40.0625em){.govuk-\!-margin-bottom-8{margin-bottom:50px!important}}.govuk-\!-margin-left-8{margin-left:30px!important}@media (min-width:40.0625em){.govuk-\!-margin-left-8{margin-left:50px!important}}.govuk-\!-margin-9{margin:40px!important}@media (min-width:40.0625em){.govuk-\!-margin-9{margin:60px!important}}.govuk-\!-margin-top-9{margin-top:40px!important}@media (min-width:40.0625em){.govuk-\!-margin-top-9{margin-top:60px!important}}.govuk-\!-margin-right-9{margin-right:40px!important}@media (min-width:40.0625em){.govuk-\!-margin-right-9{margin-right:60px!important}}.govuk-\!-margin-bottom-9{margin-bottom:40px!important}@media (min-width:40.0625em){.govuk-\!-margin-bottom-9{margin-bottom:60px!important}}.govuk-\!-margin-left-9{margin-left:40px!important}@media (min-width:40.0625em){.govuk-\!-margin-left-9{margin-left:60px!important}}.govuk-\!-padding-0{padding:0!important}@media (min-width:40.0625em){.govuk-\!-padding-0{padding:0!important}}.govuk-\!-padding-top-0{padding-top:0!important}@media (min-width:40.0625em){.govuk-\!-padding-top-0{padding-top:0!important}}.govuk-\!-padding-right-0{padding-right:0!important}@media (min-width:40.0625em){.govuk-\!-padding-right-0{padding-right:0!important}}.govuk-\!-padding-bottom-0{padding-bottom:0!important}@media (min-width:40.0625em){.govuk-\!-padding-bottom-0{padding-bottom:0!important}}.govuk-\!-padding-left-0{padding-left:0!important}@media (min-width:40.0625em){.govuk-\!-padding-left-0{padding-left:0!important}}.govuk-\!-padding-1{padding:5px!important}@media (min-width:40.0625em){.govuk-\!-padding-1{padding:5px!important}}.govuk-\!-padding-top-1{padding-top:5px!important}@media (min-width:40.0625em){.govuk-\!-padding-top-1{padding-top:5px!important}}.govuk-\!-padding-right-1{padding-right:5px!important}@media (min-width:40.0625em){.govuk-\!-padding-right-1{padding-right:5px!important}}.govuk-\!-padding-bottom-1{padding-bottom:5px!important}@media (min-width:40.0625em){.govuk-\!-padding-bottom-1{padding-bottom:5px!important}}.govuk-\!-padding-left-1{padding-left:5px!important}@media (min-width:40.0625em){.govuk-\!-padding-left-1{padding-left:5px!important}}.govuk-\!-padding-2{padding:10px!important}@media (min-width:40.0625em){.govuk-\!-padding-2{padding:10px!important}}.govuk-\!-padding-top-2{padding-top:10px!important}@media (min-width:40.0625em){.govuk-\!-padding-top-2{padding-top:10px!important}}.govuk-\!-padding-right-2{padding-right:10px!important}@media (min-width:40.0625em){.govuk-\!-padding-right-2{padding-right:10px!important}}.govuk-\!-padding-bottom-2{padding-bottom:10px!important}@media (min-width:40.0625em){.govuk-\!-padding-bottom-2{padding-bottom:10px!important}}.govuk-\!-padding-left-2{padding-left:10px!important}@media (min-width:40.0625em){.govuk-\!-padding-left-2{padding-left:10px!important}}.govuk-\!-padding-3{padding:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-3{padding:15px!important}}.govuk-\!-padding-top-3{padding-top:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-top-3{padding-top:15px!important}}.govuk-\!-padding-right-3{padding-right:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-right-3{padding-right:15px!important}}.govuk-\!-padding-bottom-3{padding-bottom:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-bottom-3{padding-bottom:15px!important}}.govuk-\!-padding-left-3{padding-left:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-left-3{padding-left:15px!important}}.govuk-\!-padding-4{padding:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-4{padding:20px!important}}.govuk-\!-padding-top-4{padding-top:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-top-4{padding-top:20px!important}}.govuk-\!-padding-right-4{padding-right:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-right-4{padding-right:20px!important}}.govuk-\!-padding-bottom-4{padding-bottom:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-bottom-4{padding-bottom:20px!important}}.govuk-\!-padding-left-4{padding-left:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-left-4{padding-left:20px!important}}.govuk-\!-padding-5{padding:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-5{padding:25px!important}}.govuk-\!-padding-top-5{padding-top:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-top-5{padding-top:25px!important}}.govuk-\!-padding-right-5{padding-right:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-right-5{padding-right:25px!important}}.govuk-\!-padding-bottom-5{padding-bottom:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-bottom-5{padding-bottom:25px!important}}.govuk-\!-padding-left-5{padding-left:15px!important}@media (min-width:40.0625em){.govuk-\!-padding-left-5{padding-left:25px!important}}.govuk-\!-padding-6{padding:20px!important}@media (min-width:40.0625em){.govuk-\!-padding-6{padding:30px!important}}.govuk-\!-padding-top-6{padding-top:20px!important}@media (min-width:40.0625em){.govuk-\!-padding-top-6{padding-top:30px!important}}.govuk-\!-padding-right-6{padding-right:20px!important}@media (min-width:40.0625em){.govuk-\!-padding-right-6{padding-right:30px!important}}.govuk-\!-padding-bottom-6{padding-bottom:20px!important}@media (min-width:40.0625em){.govuk-\!-padding-bottom-6{padding-bottom:30px!important}}.govuk-\!-padding-left-6{padding-left:20px!important}@media (min-width:40.0625em){.govuk-\!-padding-left-6{padding-left:30px!important}}.govuk-\!-padding-7{padding:25px!important}@media (min-width:40.0625em){.govuk-\!-padding-7{padding:40px!important}}.govuk-\!-padding-top-7{padding-top:25px!important}@media (min-width:40.0625em){.govuk-\!-padding-top-7{padding-top:40px!important}}.govuk-\!-padding-right-7{padding-right:25px!important}@media (min-width:40.0625em){.govuk-\!-padding-right-7{padding-right:40px!important}}.govuk-\!-padding-bottom-7{padding-bottom:25px!important}@media (min-width:40.0625em){.govuk-\!-padding-bottom-7{padding-bottom:40px!important}}.govuk-\!-padding-left-7{padding-left:25px!important}@media (min-width:40.0625em){.govuk-\!-padding-left-7{padding-left:40px!important}}.govuk-\!-padding-8{padding:30px!important}@media (min-width:40.0625em){.govuk-\!-padding-8{padding:50px!important}}.govuk-\!-padding-top-8{padding-top:30px!important}@media (min-width:40.0625em){.govuk-\!-padding-top-8{padding-top:50px!important}}.govuk-\!-padding-right-8{padding-right:30px!important}@media (min-width:40.0625em){.govuk-\!-padding-right-8{padding-right:50px!important}}.govuk-\!-padding-bottom-8{padding-bottom:30px!important}@media (min-width:40.0625em){.govuk-\!-padding-bottom-8{padding-bottom:50px!important}}.govuk-\!-padding-left-8{padding-left:30px!important}@media (min-width:40.0625em){.govuk-\!-padding-left-8{padding-left:50px!important}}.govuk-\!-padding-9{padding:40px!important}@media (min-width:40.0625em){.govuk-\!-padding-9{padding:60px!important}}.govuk-\!-padding-top-9{padding-top:40px!important}@media (min-width:40.0625em){.govuk-\!-padding-top-9{padding-top:60px!important}}.govuk-\!-padding-right-9{padding-right:40px!important}@media (min-width:40.0625em){.govuk-\!-padding-right-9{padding-right:60px!important}}.govuk-\!-padding-bottom-9{padding-bottom:40px!important}@media (min-width:40.0625em){.govuk-\!-padding-bottom-9{padding-bottom:60px!important}}.govuk-\!-padding-left-9{padding-left:40px!important}@media (min-width:40.0625em){.govuk-\!-padding-left-9{padding-left:60px!important}}.govuk-\!-font-size-80{font-size:53px!important;font-size:3.3125rem!important;line-height:1.03774!important}@media (min-width:40.0625em){.govuk-\!-font-size-80{font-size:80px!important;font-size:5rem!important;line-height:1!important}}@media print{.govuk-\!-font-size-80{font-size:53pt!important;line-height:1.1!important}}.govuk-\!-font-size-48{font-size:32px!important;font-size:2rem!important;line-height:1.09375!important}@media (min-width:40.0625em){.govuk-\!-font-size-48{font-size:48px!important;font-size:3rem!important;line-height:1.04167!important}}@media print{.govuk-\!-font-size-48{font-size:32pt!important;line-height:1.15!important}}.govuk-\!-font-size-36{font-size:24px!important;font-size:1.5rem!important;line-height:1.04167!important}@media (min-width:40.0625em){.govuk-\!-font-size-36{font-size:36px!important;font-size:2.25rem!important;line-height:1.11111!important}}@media print{.govuk-\!-font-size-36{font-size:24pt!important;line-height:1.05!important}}.govuk-\!-font-size-27{font-size:18px!important;font-size:1.125rem!important;line-height:1.11111!important}@media (min-width:40.0625em){.govuk-\!-font-size-27{font-size:27px!important;font-size:1.6875rem!important;line-height:1.11111!important}}@media print{.govuk-\!-font-size-27{font-size:18pt!important;line-height:1.15!important}}.govuk-\!-font-size-24{font-size:18px!important;font-size:1.125rem!important;line-height:1.11111!important}@media (min-width:40.0625em){.govuk-\!-font-size-24{font-size:24px!important;font-size:1.5rem!important;line-height:1.25!important}}@media print{.govuk-\!-font-size-24{font-size:18pt!important;line-height:1.15!important}}.govuk-\!-font-size-19{font-size:16px!important;font-size:1rem!important;line-height:1.25!important}@media (min-width:40.0625em){.govuk-\!-font-size-19{font-size:19px!important;font-size:1.1875rem!important;line-height:1.31579!important}}@media print{.govuk-\!-font-size-19{font-size:14pt!important;line-height:1.15!important}}.govuk-\!-font-size-16{font-size:14px!important;font-size:.875rem!important;line-height:1.14286!important}@media (min-width:40.0625em){.govuk-\!-font-size-16{font-size:16px!important;font-size:1rem!important;line-height:1.25!important}}@media print{.govuk-\!-font-size-16{font-size:14pt!important;line-height:1.2!important}}.govuk-\!-font-size-14{font-size:12px!important;font-size:.75rem!important;line-height:1.25!important}@media (min-width:40.0625em){.govuk-\!-font-size-14{font-size:14px!important;font-size:.875rem!important;line-height:1.42857!important}}@media print{.govuk-\!-font-size-14{font-size:12pt!important;line-height:1.2!important}}.govuk-\!-font-weight-regular{font-weight:400!important}.govuk-\!-font-weight-bold{font-weight:700!important}.govuk-\!-width-full,.govuk-\!-width-three-quarters{width:100%!important}@media (min-width:40.0625em){.govuk-\!-width-three-quarters{width:75%!important}}.govuk-\!-width-two-thirds{width:100%!important}@media (min-width:40.0625em){.govuk-\!-width-two-thirds{width:66.66%!important}}.govuk-\!-width-one-half{width:100%!important}@media (min-width:40.0625em){.govuk-\!-width-one-half{width:50%!important}}.govuk-\!-width-one-third{width:100%!important}@media (min-width:40.0625em){.govuk-\!-width-one-third{width:33.33%!important}}.govuk-\!-width-one-quarter{width:100%!important}@media (min-width:40.0625em){.govuk-\!-width-one-quarter{width:25%!important}} \ No newline at end of file
diff --git a/web/vendor/html5sortable.min.js b/web/vendor/html5sortable.min.js
index 3a7241283..77bfdee9d 100755
--- a/web/vendor/html5sortable.min.js
+++ b/web/vendor/html5sortable.min.js
@@ -1,2 +1 @@
var sortable=function(){"use strict";function c(e,t,n){if(void 0===n)return e&&e.h5s&&e.h5s.data&&e.h5s.data[t];e.h5s=e.h5s||{},e.h5s.data=e.h5s.data||{},e.h5s.data[t]=n}var d=function(e,t){if(!(e instanceof NodeList||e instanceof HTMLCollection||e instanceof Array))throw new Error("You must provide a nodeList/HTMLCollection/Array of elements to be filtered.");return"string"!=typeof t?Array.from(e):Array.from(e).filter(function(e){return 1===e.nodeType&&e.matches(t)})},u=new Map,t=function(){function e(){this._config=new Map,this._placeholder=void 0,this._data=new Map}return Object.defineProperty(e.prototype,"config",{get:function(){var n={};return this._config.forEach(function(e,t){n[t]=e}),n},set:function(e){if("object"!=typeof e)throw new Error("You must provide a valid configuration object to the config setter.");var t=Object.assign({},e);this._config=new Map(Object.entries(t))},enumerable:!0,configurable:!0}),e.prototype.setConfig=function(e,t){if(!this._config.has(e))throw new Error("Trying to set invalid configuration item: "+e);this._config.set(e,t)},e.prototype.getConfig=function(e){if(!this._config.has(e))throw new Error("Invalid configuration item requested: "+e);return this._config.get(e)},Object.defineProperty(e.prototype,"placeholder",{get:function(){return this._placeholder},set:function(e){if(!(e instanceof HTMLElement)&&null!==e)throw new Error("A placeholder must be an html element or null.");this._placeholder=e},enumerable:!0,configurable:!0}),e.prototype.setData=function(e,t){if("string"!=typeof e)throw new Error("The key must be a string.");this._data.set(e,t)},e.prototype.getData=function(e){if("string"!=typeof e)throw new Error("The key must be a string.");return this._data.get(e)},e.prototype.deleteData=function(e){if("string"!=typeof e)throw new Error("The key must be a string.");return this._data.delete(e)},e}(),p=function(e){if(!(e instanceof HTMLElement))throw new Error("Please provide a sortable to the store function.");return u.has(e)||u.set(e,new t),u.get(e)};function a(e,t,n){if(e instanceof Array)for(var r=0;r<e.length;++r)a(e[r],t,n);else e.addEventListener(t,n),p(e).setData("event"+t,n)}function i(e,t){if(e instanceof Array)for(var n=0;n<e.length;++n)i(e[n],t);else e.removeEventListener(t,p(e).getData("event"+t)),p(e).deleteData("event"+t)}function l(e,t,n){if(e instanceof Array)for(var r=0;r<e.length;++r)l(e[r],t,n);else e.setAttribute(t,n)}function r(e,t){if(e instanceof Array)for(var n=0;n<e.length;++n)r(e[n],t);else e.removeAttribute(t)}var m=function(e){if(!e.parentElement||0===e.getClientRects().length)throw new Error("target element must be part of the dom");var t=e.getClientRects()[0];return{left:t.left+window.pageXOffset,right:t.right+window.pageXOffset,top:t.top+window.pageYOffset,bottom:t.bottom+window.pageYOffset}},h=function(n,r){var o;return void 0===r&&(r=0),function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];clearTimeout(o),o=setTimeout(function(){n.apply(void 0,e)},r)}},g=function(e,t){if(!(e instanceof HTMLElement&&(t instanceof NodeList||t instanceof HTMLCollection||t instanceof Array)))throw new Error("You must provide an element and a list of elements.");return Array.from(t).indexOf(e)},v=function(e){if(!(e instanceof HTMLElement))throw new Error("Element is not a node element.");return null!==e.parentNode},n=function(e,t,n){if(!(e instanceof HTMLElement&&e.parentElement instanceof HTMLElement))throw new Error("target and element must be a node");e.parentElement.insertBefore(t,"before"===n?e:e.nextElementSibling)},y=function(e,t){return n(e,t,"before")},E=function(e,t){return n(e,t,"after")},o=function(t,n,e){if(void 0===n&&(n=function(e,t){return e}),void 0===e&&(e=function(e){return e}),!(t instanceof HTMLElement)||!0==!t.isSortable)throw new Error("You need to provide a sortableContainer to be serialized.");if("function"!=typeof n||"function"!=typeof e)throw new Error("You need to provide a valid serializer for items and the container.");var r=c(t,"opts").items,o=d(t.children,r),i=o.map(function(e){return{parent:t,node:e,html:e.outerHTML,index:g(e,o)}});return{container:e({node:t,itemCount:i.length}),items:i.map(function(e){return n(e,t)})}},w=function(e,t,n){var r;if(void 0===n&&(n="sortable-placeholder"),!(e instanceof HTMLElement))throw new Error("You must provide a valid element as a sortable.");if(!(t instanceof HTMLElement)&&void 0!==t)throw new Error("You must provide a valid element as a placeholder or set ot to undefined.");return void 0===t&&(["UL","OL"].includes(e.tagName)?t=document.createElement("li"):["TABLE","TBODY"].includes(e.tagName)?(t=document.createElement("tr")).innerHTML='<td colspan="100"></td>':t=document.createElement("div")),"string"==typeof n&&(r=t.classList).add.apply(r,n.split(" ")),t},b=function(e){if(!(e instanceof HTMLElement))throw new Error("You must provide a valid dom element");var n=window.getComputedStyle(e);return["height","padding-top","padding-bottom"].map(function(e){var t=parseInt(n.getPropertyValue(e),10);return isNaN(t)?0:t}).reduce(function(e,t){return e+t})},s=function(e,t){if(!(e instanceof Array))throw new Error("You must provide a Array of HTMLElements to be filtered.");return"string"!=typeof t?e:e.filter(function(e){return e.querySelector(t)instanceof HTMLElement||e.shadowRoot&&e.shadowRoot.querySelector(t)instanceof HTMLElement}).map(function(e){return e.querySelector(t)||e.shadowRoot&&e.shadowRoot.querySelector(t)})},T=function(e){return e.composedPath&&e.composedPath()[0]||e.target},f=function(e,t,n){return{element:e,posX:n.pageX-t.left,posY:n.pageY-t.top}},L=function(e,t,n){if(!(e instanceof Event))throw new Error("setDragImage requires a DragEvent as the first argument.");if(!(t instanceof HTMLElement))throw new Error("setDragImage requires the dragged element as the second argument.");if(n||(n=f),e.dataTransfer&&e.dataTransfer.setDragImage){var r=n(t,m(t),e);if(!(r.element instanceof HTMLElement)||"number"!=typeof r.posX||"number"!=typeof r.posY)throw new Error("The customDragImage function you provided must return and object with the properties element[string], posX[integer], posY[integer].");e.dataTransfer.effectAllowed="copyMove",e.dataTransfer.setData("text/plain",T(e).id),e.dataTransfer.setDragImage(r.element,r.posX,r.posY)}},C=function(e,t){if(!0===e.isSortable){var n=p(e).getConfig("acceptFrom");if(null!==n&&!1!==n&&"string"!=typeof n)throw new Error('HTML5Sortable: Wrong argument, "acceptFrom" must be "null", "false", or a valid selector string.');if(null!==n)return!1!==n&&0<n.split(",").filter(function(e){return 0<e.length&&t.matches(e)}).length;if(e===t)return!0;if(void 0!==p(e).getConfig("connectWith")&&null!==p(e).getConfig("connectWith"))return p(e).getConfig("connectWith")===p(t).getConfig("connectWith")}return!1},M={items:null,connectWith:null,disableIEFix:null,acceptFrom:null,copy:!1,placeholder:null,placeholderClass:"sortable-placeholder",draggingClass:"sortable-dragging",hoverClass:!1,debounce:0,throttleTime:100,maxItems:0,itemSerializer:void 0,containerSerializer:void 0,customDragImage:null};var D,x,H,A,I,S,_,Y,O=function(e,t){if("string"==typeof p(e).getConfig("hoverClass")){var o=p(e).getConfig("hoverClass").split(" ");!0===t?(a(e,"mousemove",function(r,o){var i=this;if(void 0===o&&(o=250),"function"!=typeof r)throw new Error("You must provide a function as the first argument for throttle.");if("number"!=typeof o)throw new Error("You must provide a number as the second argument for throttle.");var a=null;return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=Date.now();(null===a||o<=n-a)&&(a=n,r.apply(i,e))}}(function(r){0===r.buttons&&d(e.children,p(e).getConfig("items")).forEach(function(e){var t,n;e!==r.target?(t=e.classList).remove.apply(t,o):(n=e.classList).add.apply(n,o)})},p(e).getConfig("throttleTime"))),a(e,"mouseleave",function(){d(e.children,p(e).getConfig("items")).forEach(function(e){var t;(t=e.classList).remove.apply(t,o)})})):(i(e,"mousemove"),i(e,"mouseleave"))}},P=function(e){i(e,"dragstart"),i(e,"dragend"),i(e,"dragover"),i(e,"dragenter"),i(e,"drop"),i(e,"mouseenter"),i(e,"mouseleave")},W=function(e,t){var n=e;return!0===p(t).getConfig("copy")&&(l(n=e.cloneNode(!0),"aria-copied","true"),e.parentElement.appendChild(n),n.style.display="none",n.oldDisplay=e.style.display),n},F=function(e){var t;(t=e).h5s&&delete t.h5s.data,r(e,"aria-dropeffect")},N=function(e){r(e,"aria-grabbed"),r(e,"aria-copied"),r(e,"draggable"),r(e,"role")};function j(e,t){if(t.composedPath)return t.composedPath().find(function(e){return e.isSortable});for(;!0!==e.isSortable;)e=e.parentElement;return e}function q(e,t){var n=c(e,"opts"),r=d(e.children,n.items).filter(function(e){return e.contains(t)||e.shadowRoot&&e.shadowRoot.contains(t)});return 0<r.length?r[0]:t}var z=function(e){var t=c(e,"opts"),n=d(e.children,t.items),r=s(n,t.handle);(l(e,"aria-dropeffect","move"),c(e,"_disabled","false"),l(r,"draggable","true"),!1===t.disableIEFix)&&("function"==typeof(document||window.document).createElement("span").dragDrop&&a(r,"mousedown",function(){if(-1!==n.indexOf(this))this.dragDrop();else{for(var e=this.parentElement;-1===n.indexOf(e);)e=e.parentElement;e.dragDrop()}}))},R=function(e){var t=c(e,"opts"),n=d(e.children,t.items),r=s(n,t.handle);c(e,"_disabled","false"),P(n),i(r,"mousedown"),i(e,"dragover"),i(e,"dragenter"),i(e,"drop")};function X(e,f){var i=String(f);return f=f||{},"string"==typeof e&&(e=document.querySelectorAll(e)),e instanceof HTMLElement&&(e=[e]),e=Array.prototype.slice.call(e),/serialize/.test(i)?e.map(function(e){var t=c(e,"opts");return o(e,t.itemSerializer,t.containerSerializer)}):(e.forEach(function(s){if(/enable|disable|destroy/.test(i))return X[i](s);["connectWith","disableIEFix"].forEach(function(e){f.hasOwnProperty(e)&&null!==f[e]&&console.warn('HTML5Sortable: You are using the deprecated configuration "'+e+'". This will be removed in an upcoming version, make sure to migrate to the new options when updating.')}),f=Object.assign({},M,p(s).config,f),p(s).config=f,c(s,"opts",f),s.isSortable=!0,R(s);var e,t=d(s.children,f.items);if(null!==f.placeholder&&void 0!==f.placeholder){var n=document.createElement(s.tagName);f.placeholder instanceof HTMLElement?n.appendChild(f.placeholder):n.innerHTML=f.placeholder,e=n.children[0]}p(s).placeholder=w(s,e,f.placeholderClass),c(s,"items",f.items),f.acceptFrom?c(s,"acceptFrom",f.acceptFrom):f.connectWith&&c(s,"connectWith",f.connectWith),z(s),l(t,"role","option"),l(t,"aria-grabbed","false"),O(s,!0),a(s,"dragstart",function(e){var t=T(e);if(!0!==t.isSortable&&(e.stopImmediatePropagation(),(!f.handle||t.matches(f.handle))&&"false"!==t.getAttribute("draggable"))){var n=j(t,e),r=q(n,t);S=d(n.children,f.items),A=S.indexOf(r),I=g(r,n.children),H=n,L(e,r,f.customDragImage),x=b(r),r.classList.add(f.draggingClass),l(D=W(r,n),"aria-grabbed","true"),n.dispatchEvent(new CustomEvent("sortstart",{detail:{origin:{elementIndex:I,index:A,container:H},item:D,originalTarget:t}}))}}),a(s,"dragenter",function(e){var t=T(e),n=j(t,e);n&&n!==_&&(Y=d(n.children,c(n,"items")).filter(function(e){return e!==p(s).placeholder}),n.dispatchEvent(new CustomEvent("sortenter",{detail:{origin:{elementIndex:I,index:A,container:H},destination:{container:n,itemsBeforeUpdate:Y},item:D,originalTarget:t}}))),_=n}),a(s,"dragend",function(e){if(D){D.classList.remove(f.draggingClass),l(D,"aria-grabbed","false"),"true"===D.getAttribute("aria-copied")&&"true"!==c(D,"dropped")&&D.remove(),D.style.display=D.oldDisplay,delete D.oldDisplay;var t=Array.from(u.values()).map(function(e){return e.placeholder}).filter(function(e){return e instanceof HTMLElement}).filter(v)[0];t&&t.remove(),s.dispatchEvent(new CustomEvent("sortstop",{detail:{origin:{elementIndex:I,index:A,container:H},item:D}})),x=D=_=null}}),a(s,"drop",function(e){if(C(s,D.parentElement)){e.preventDefault(),e.stopPropagation(),c(D,"dropped","true");var t=Array.from(u.values()).map(function(e){return e.placeholder}).filter(function(e){return e instanceof HTMLElement}).filter(v)[0];E(t,D),t.remove(),s.dispatchEvent(new CustomEvent("sortstop",{detail:{origin:{elementIndex:I,index:A,container:H},item:D}}));var n=p(s).placeholder,r=d(H.children,f.items).filter(function(e){return e!==n}),o=!0===this.isSortable?this:this.parentElement,i=d(o.children,c(o,"items")).filter(function(e){return e!==n}),a=g(D,Array.from(D.parentElement.children).filter(function(e){return e!==n})),l=g(D,i);I===a&&H===o||s.dispatchEvent(new CustomEvent("sortupdate",{detail:{origin:{elementIndex:I,index:A,container:H,itemsBeforeUpdate:S,items:r},destination:{index:l,elementIndex:a,container:o,itemsBeforeUpdate:Y,items:i},item:D}}))}});var o=h(function(t,e,n){if(D)if(f.forcePlaceholderSize&&(p(t).placeholder.style.height=x+"px"),-1<Array.from(t.children).indexOf(e)){var r=b(e),o=g(p(t).placeholder,e.parentElement.children),i=g(e,e.parentElement.children);if(x<r){var a=r-x,l=m(e).top;if(o<i&&n<l)return;if(i<o&&l+r-a<n)return}void 0===D.oldDisplay&&(D.oldDisplay=D.style.display),"none"!==D.style.display&&(D.style.display="none");var s=!1;try{s=m(e).top+e.offsetHeight/2<=n}catch(e){s=o<i}s?E(e,p(t).placeholder):y(e,p(t).placeholder),Array.from(u.values()).filter(function(e){return void 0!==e.placeholder}).forEach(function(e){e.placeholder!==p(t).placeholder&&e.placeholder.remove()})}else{var c=Array.from(u.values()).filter(function(e){return void 0!==e.placeholder}).map(function(e){return e.placeholder});-1!==c.indexOf(e)||t!==e||d(e.children,f.items).length||(c.forEach(function(e){return e.remove()}),e.appendChild(p(t).placeholder))}},f.debounce),r=function(e){var t=e.target,n=!0===t.isSortable?t:j(t,e);if(t=q(n,t),D&&C(n,D.parentElement)&&"true"!==c(n,"_disabled")){var r=c(n,"opts");parseInt(r.maxItems)&&d(n.children,c(n,"items")).length>=parseInt(r.maxItems)&&D.parentElement!==n||(e.preventDefault(),e.stopPropagation(),e.dataTransfer.dropEffect=!0===p(n).getConfig("copy")?"copy":"move",o(n,t,e.pageY))}};a(t.concat(s),"dragover",r),a(t.concat(s),"dragenter",r)}),e)}return X.destroy=function(e){var t,n,r,o;n=c(t=e,"opts")||{},r=d(t.children,n.items),o=s(r,n.handle),i(t,"dragover"),i(t,"dragenter"),i(t,"drop"),F(t),i(o,"mousedown"),P(r),N(r)},X.enable=function(e){z(e)},X.disable=function(e){var t,n,r,o;n=c(t=e,"opts"),r=d(t.children,n.items),o=s(r,n.handle),l(t,"aria-dropeffect","none"),c(t,"_disabled","true"),l(o,"draggable","false"),i(o,"mousedown")},X.__testing={_data:c,_removeItemEvents:P,_removeItemData:N,_removeSortableData:F},X}();
-//# sourceMappingURL=html5sortable.min.js.map