From 486cbb33f5f07dec3e08df9c7701d8ffe6eca568 Mon Sep 17 00:00:00 2001 From: "Toavina A." Date: Tue, 10 Dec 2024 19:59:59 +0300 Subject: [PATCH] 62 - Improve the system mobile view (#32) * Get the lighthouse logo and update the fjelltopp logo * Fix margins, descriptions text align to justify and more ... * View all button in /home is now #212121 * No padding between subscribe to updates and footer * Categories margin are a bit off * Categories margin are a bit off * Updates for the search bar, order by dropdown, number of datasets found * Dataset tabs and manage button look's messy * Resource description better * Hides resources list * Resource buttons are off * Requires more cleaning * Removed second drop down arrow * Removed a few classes in dms-main.css * Fix facets not showing on mobile * Fix container's mobile padding * Cleaned up * Cleaned up * Fix officedocs and pdf view icons * Mention lighthouse in footer funding comment * Darker promoted backgrounds * Fix review #1 * Fix review #2 * cleaning * cleaning * Fixing review #3 * Fix review #3 * Fix review #3 * Fix review #3 * Fix form control appearance * Fix file uploader * Update file input component * Improve formatting of resource form --------- Co-authored-by: toavina Co-authored-by: Jonathan S Berry --- ckanext/dms/assets/FileInputComponent.css | 4 + ckanext/dms/assets/css/dms-main.css | 284 +------------ ckanext/dms/assets/css/dms.css | 398 +++++++++++++++++- ckanext/dms/public/images/fjelltopp.png | Bin 23826 -> 16474 bytes ckanext/dms/public/images/lighthouse.png | Bin 0 -> 14133 bytes .../components/FileInputComponent/src/App.js | 1 - .../FileInputComponent/src/FileUploader.js | 11 +- ckanext/dms/react/package.json | 2 +- ckanext/dms/react/yarn.lock | 30 +- ckanext/dms/schemas/dataset.yaml | 4 - ckanext/dms/templates/footer.html | 3 +- ckanext/dms/templates/package/read_base.html | 2 + .../dms/templates/package/resource_edit.html | 2 + .../dms/templates/package/resource_read.html | 3 + ckanext/dms/templates/package/search.html | 2 + .../package/snippets/resource_form.html | 48 +++ .../dms/templates/snippets/package_item.html | 5 +- .../dms/templates/snippets/search_form.html | 15 + 18 files changed, 476 insertions(+), 338 deletions(-) mode change 100644 => 100755 ckanext/dms/public/images/fjelltopp.png create mode 100755 ckanext/dms/public/images/lighthouse.png create mode 100644 ckanext/dms/templates/package/resource_read.html create mode 100644 ckanext/dms/templates/scheming/package/snippets/resource_form.html create mode 100644 ckanext/dms/templates/snippets/search_form.html diff --git a/ckanext/dms/assets/FileInputComponent.css b/ckanext/dms/assets/FileInputComponent.css index fc708aa..8ecc4ce 100644 --- a/ckanext/dms/assets/FileInputComponent.css +++ b/ckanext/dms/assets/FileInputComponent.css @@ -16,3 +16,7 @@ #FileInputComponent .field-url-input-group{ margin-bottom: 30px; } + +#FileInputComponent .btn.btn-danger { + padding: 6px 12px; +} diff --git a/ckanext/dms/assets/css/dms-main.css b/ckanext/dms/assets/css/dms-main.css index ed856d6..26a79ea 100644 --- a/ckanext/dms/assets/css/dms-main.css +++ b/ckanext/dms/assets/css/dms-main.css @@ -3435,12 +3435,6 @@ input[type="reset"].btn-block, input[type="button"].btn-block { width: 100%; } -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} .fade.in { opacity: 1; } @@ -6056,137 +6050,7 @@ button.close { border-color: transparent; border-style: solid; } -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: none; - max-width: 276px; - padding: 1px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-style: normal; - font-weight: 400; - line-height: 1.42857143; - line-break: auto; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - white-space: normal; - font-size: 14px; - background-color: #ffffff; - background-clip: padding-box; - border: 1px solid #cccccc; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover > .arrow { - border-width: 11px; -} -.popover > .arrow, -.popover > .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover > .arrow:after { - content: ""; - border-width: 10px; -} -.popover.top > .arrow { - bottom: -11px; - left: 50%; - margin-left: -11px; - border-top-color: #999999; - border-top-color: rgba(0, 0, 0, 0.25); - border-bottom-width: 0; -} -.popover.top > .arrow:after { - bottom: 1px; - margin-left: -10px; - content: " "; - border-top-color: #ffffff; - border-bottom-width: 0; -} -.popover.right > .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-right-color: #999999; - border-right-color: rgba(0, 0, 0, 0.25); - border-left-width: 0; -} -.popover.right > .arrow:after { - bottom: -10px; - left: 1px; - content: " "; - border-right-color: #ffffff; - border-left-width: 0; -} -.popover.bottom > .arrow { - top: -11px; - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999999; - border-bottom-color: rgba(0, 0, 0, 0.25); -} -.popover.bottom > .arrow:after { - top: 1px; - margin-left: -10px; - content: " "; - border-top-width: 0; - border-bottom-color: #ffffff; -} -.popover.left > .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999999; - border-left-color: rgba(0, 0, 0, 0.25); -} -.popover.left > .arrow:after { - right: 1px; - bottom: -10px; - content: " "; - border-right-width: 0; - border-left-color: #ffffff; -} -.popover-title { - padding: 8px 14px; - margin: 0; - font-size: 14px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0; -} -.popover-content { - padding: 9px 14px; -} + .carousel { position: relative; } @@ -10298,35 +10162,8 @@ h4 small { .activity .load-less { margin-bottom: 15px; } -.popover { - width: 300px; -} -.popover .popover-title { - font-weight: bold; - margin-bottom: 0; -} -.popover p.about { - margin: 0 0 10px 0; -} -.popover .popover-close { - float: right; - text-decoration: none; -} -.popover .popover-content { - font-size: 14px; - line-height: 1.42857143; - color: #444444; - word-break: break-all; -} -.popover .popover-content dl { - margin: 0; -} -.popover .popover-content dl dd { - margin-left: 0; - margin-bottom: 10px; -} .activity .item .icon { - background-color: #999999; + background-color: #999999;transition: opacity 0.15s linear; } .activity .item.failure .icon { background-color: #b95252; @@ -10423,36 +10260,7 @@ br.line-height2 { .js .dropdown.open .dropdown-menu { display: block; } -#followee-filter .btn:before, -#followee-filter .btn:after { - display: table; - content: " "; -} -#followee-filter .btn:after { - clear: both; -} -#followee-filter .btn:before, -#followee-filter .btn:after { - display: table; - content: " "; -} -#followee-filter .btn:after { - clear: both; -} -#followee-filter .btn span, -#followee-filter .btn strong { - line-height: 1.5; -} -#followee-filter .btn span { - font-weight: normal; -} -#followee-filter .btn strong { - margin: 0 5px; - white-space: nowrap; - max-width: 90px; - overflow: hidden; - text-overflow: ellipsis; -} + .dashboard-context { position: relative; margin-bottom: 20px; @@ -10473,92 +10281,6 @@ br.line-height2 { height: 21px; background: transparent url("../../../base/images/dashboard-followee-related.png"); } -.popover-followee .popover-title { - display: none; -} -.popover-followee .popover-content { - padding: 0; - border-radius: 3px; -} -.popover-followee .empty { - padding: 10px; -} -.popover-followee .popover-header { - background-color: whiteSmoke; - padding: 5px; - border-bottom: 1px solid #cccccc; - border-radius: 3px 3px 0 0; -} -.popover-followee .popover-header:before, -.popover-followee .popover-header:after { - display: table; - content: " "; -} -.popover-followee .popover-header:after { - clear: both; -} -.popover-followee .popover-header:before, -.popover-followee .popover-header:after { - display: table; - content: " "; -} -.popover-followee .popover-header:after { - clear: both; -} -.popover-followee .popover-header .input-group { - margin-bottom: 0; -} -.popover-followee .popover-header .input-group-addon, -.popover-followee .popover-header input { - margin: 0; -} -.popover-followee .popover-header .input-group-addon { - padding: 4px 8px 4px 12px; - border-right-width: 0; - border-radius: 100px 0 0 100px; -} -.popover-followee .popover-header input { - padding: 4px 12px 4px 8px; - font-size: 13px; - width: 227px; - border-radius: 0 100px 100px 0; -} -.popover-followee .nav { - padding: 0; - margin: 0; - max-height: 205px; - overflow: auto; - border-radius: 0 0 3px 3px; -} -.popover-followee .nav li { - float: none; -} -.popover-followee .nav li a { - display: block; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - padding: 7px 10px 7px 15px; - margin: 0; - border-radius: 0; -} -.popover-followee .nav li a i { - background-color: #b30006; - color: #ffffff; - margin-right: 11px; - padding: 3px 5px; - line-height: 1; - border-radius: 100px; - -webkit-box-shadow: inset 0 1px 2x rgba(0, 0, 0, 0.2); - box-shadow: inset 0 1px 2x rgba(0, 0, 0, 0.2); -} -.popover-followee .nav li a:hover i { - background-color: #000; -} -.popover-followee .nav li.active a i { - color: #b30006; - background-color: #ffffff; -} .dashboard-me { padding: 15px 15px 0 15px; } diff --git a/ckanext/dms/assets/css/dms.css b/ckanext/dms/assets/css/dms.css index 72bf091..3f65c79 100644 --- a/ckanext/dms/assets/css/dms.css +++ b/ckanext/dms/assets/css/dms.css @@ -1,6 +1,4 @@ /* This file overwrites css from the base ckan theme */ - - body { background: #fff; font-family: 'Inter', serif; @@ -96,25 +94,30 @@ p.small { .promoted-background { width: 100%; - background-image: url("/images/small_piling_documents.png"); + background: linear-gradient(90deg, rgba(1, 1, 1, 0.7), rgba(0, 0, 0, 0.5)), url("/images/small_piling_documents.png"); background-size: cover; background-repeat: no-repeat; + background-position: center; color: #FFFFFF; } @media only screen and (min-width: 468px) { .promoted-background { - background: linear-gradient(0deg, rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.4)), url("/images/medium_piling_documents.png"); + background: linear-gradient(90deg, rgba(1, 1, 1, 0.7), rgba(0, 0, 0, 0.5)), url("/images/medium_piling_documents.png"); background-size: cover; background-repeat: no-repeat; + background-position: center; + } } @media only screen and (min-width: 992px) { .promoted-background { - background: linear-gradient(0deg, rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.4)), url("/images/web_piling_docs.png"); + background: linear-gradient(90deg, rgba(1, 1, 1, 0.7), rgba(0, 0, 0, 0.5)), url("/images/web_piling_docs.png"); background-size: cover; background-repeat: no-repeat; + background-position: center; + } } @@ -215,10 +218,6 @@ p.small { } } -@media (max-width: 769px) { - -} - .masthead .site-search input { width: 180px; height: 40px; @@ -619,7 +618,7 @@ a.tag:hover { color: #990005; } -.add-category{ +.add-category { margin-bottom: 32px; } @@ -628,8 +627,9 @@ a.tag:hover { color: #505050; } -.btn{ - padding: 10px 40px; +.btn.btn-primary, +.btn.btn-danger{ + padding: 10px 40px; } .btn-primary, @@ -720,7 +720,7 @@ a.tag:hover { } .recently-updated .view-all-btn{ - background-color: #990005; + background-color: #212121; } .module-narrow .nav-item > a, .module-narrow .nav-aside li a{ @@ -734,4 +734,374 @@ a.tag:hover { .navbar-toggler .fa.fa-bars { color: #990005 !important; font-size: 22px; -} \ No newline at end of file +} + +.select2-container { + border: none; + box-shadow: none; + padding: 7px 0px; +} + + +/* updates*/ +@media only screen and (max-width: 767px) { + .primary { + padding: 2%; + } + .module-content { + padding: 2%; + } + .box .wrapper, + .wrapper { + border: none; + box-shadow: none; + } + + .input-group-btn .btn.btn-default.btn-lg, + .input-group-btn .btn.btn-default.btn-lg:hover { + background-color: white; + color: #990005; + padding-right: 12px; + padding-left: 12px; + border-left: none; + } + .control-order-by { + width: 100%; + text-align: center; + } + #field-order-by { + background-color: #dddddd; + color: black; + width: auto; + } + .show-filters { + width: 100%; + margin-bottom: 16px; + } + .search-form .search-input-group, + .form-group { + margin-bottom: 20px; + } + #dataset-search-form h1 { + font-weight: 400; + margin-top: 20px; + margin-bottom: 0; + text-align: center; + } + .page_primary_action .btn.btn-primary { + margin-bottom: 0; + width:100%; + } + + .context-info .description { + text-align: justify; + } + + .search-form { + margin-bottom: 0; + } + .dataset-item { + margin-top: 30px; + .dataset-content div:last-child { + text-align: justify; + } + } + .dataset-item .modified { + font-weight: 700; + } + .dataset-resources .badge.badge-default { + font-weight: 400; + padding: 4px; + } + .main { + + } + + .subscribe { + .container { + padding: 0; + } + .highlight-box { + border-radius: 0; + margin-bottom: 0; + } + } + + .category-box { + display: flex; + align-items: center; + padding: 1rem; + margin-bottom: 10px; + + .media-image { + width: 60px; + height: 60px; + object-fit: contain; + } + + .group-text { + margin-left: 1rem; + display: flex; + flex-direction: column; + justify-content: center; + .desc { + height: auto; + } + } + + } + + .page-header { + padding: 0; + .content_action { + float: none; + width: 100%; + } + .nav-tabs { + margin: 0; + width: 100%; + } + a.btn:first-child { + width: 100%; + border: #dddddd thin solid; + } + } + .page-header.module-content { + padding: 0; + } + article .nav-tabs { + margin: 0; + li { + width: 100%; + a { + margin: 0; + } + } + } + + .module-resource div.prose.notes { + text-align: justify; + blockquote { + padding: 0; + border: none; + } + } + + .module-resource .actions { + float: none; + top: 0; + right: 0; + ul { + padding: 0; + margin-bottom: 30px; + li { width: 100%; } + li a, li div.btn-group { width: 100% } + } + } + .container { + padding-right: 30px; + padding-left: 30px; + } + + .main.package-page-main .secondary { + order: 0; + .context-info { + .module-content h1.heading { + display: none; + } + .nums:before { + display: none; + content: none; + } + } + } + + .main.resource-page-main { + .wrapper { + flex-direction: column; + } + .primary { + order: 2; + width: 100%; + } + .module-resource { + order: 1; + width: 100%; + } + .secondary { + order: 3; + width: 100%; + padding-right: 15px; + padding-left: 15px; + .module-content { + margin-top: 16px; + padding: 0; + .btn.btn-light.btn-sm { + width: 100%; + border: #EDE8E8 thin solid; + } + } + + .context-info { + .module-content h1.heading { + display: none; + } + .nums:before { + display: none; + content: none; + } + .nums { + margin-top: 16px; + margin-bottom: 16px; + } + } + } + .module-resource, + .primary, + .secondary { + margin-bottom: 1rem; + } + } +} + + +/* Fix dropdown with bootstrap 5 */ +.dropdown-toggle::after { + content: none; +} + +i.fa.icon.fa-windows { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; +} + +i.fa.icon.fa-file-pdf-o::before { + content: "\f1c1"; +} + +/* aside is buggy for > 768, < 992 */ +@media only screen and (min-width: 768px) and (max-width: 991px) { + .main { + .wrapper::before { + display: none; + } + aside.secondary { + order: 0; + width: 100%; + padding: 30px; + .context-info .image img { + width: 20%; + height: 20%; + } + } + } + + .main.package-page-search { + aside.secondary { + padding: 0; + } + } + + .main.package-page-main, .main.resource-page-main { + + .wrapper { + flex-direction: column; + } + .primary { + order: 2; + width: 100%; + } + .module-resource { + order: 1; + width: 100%; + } + .secondary { + order: 3; + width: 100%; + padding-right: 30px; + padding-left: 30px; + .module-content { + margin-top: 16px; + padding: 0; + .btn.btn-light.btn-sm { + width: 100%; + border: #EDE8E8 thin solid; + } + } + + .context-info { + .module-content h1.heading { + display: none; + } + .nums:before { + display: none; + content: none; + } + .nums { + margin-top: 16px; + margin-bottom: 16px; + } + } + } + + .module-resource, + .primary, + .secondary + { + margin-bottom: 1rem; + } + #package-info { + margin-bottom: 2rem; + } + } +} + +/* showing filters for the resolution (same as mobile) */ +@media (max-width: 991px) { + + .js .main .secondary .filters { + display: none; + position: fixed; + overflow: auto; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 1000; + padding: 10px; + background-color: #000000; + background-color: rgba(0, 0, 0, 0.5); + } + .js body.filters-modal .secondary .filters { + display: block; + } + .js .main .secondary .filters > div { + background-color: #fff; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + overflow: hidden; + } + .js .main .secondary .filters > div .module-footer { + display: none; + } + .js body.filters-modal .secondary .filters .hide-filters { + display: inline-block; + position: absolute; + top: 14px; + right: 17px; + opacity: 0.6; + } + .js body.filters-modal .secondary .filters .hide-filters i { + font-size: 18px; + } + .js .show-filters.btn { + display: inline-block; + } + .filter-list { + margin-top: 26px; + } + .module h1 { + margin-top: 26px; + } +} diff --git a/ckanext/dms/public/images/fjelltopp.png b/ckanext/dms/public/images/fjelltopp.png old mode 100644 new mode 100755 index 8b9afba1468bdd93e9a38fe029cf949f68b16aa3..74fe38869a5ea3de505b3a45edf76e7cd4caab71 GIT binary patch literal 16474 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 T;mbhZImkf&nqKL7+}-~JuyVLp literal 23826 zcmYg&2RzmP_x~NCLb@MihO%Ym+OslpLu6-*r z$ie1)?4$mnsQf67qCDN^ms>^)O&yQ;4IdG+j-I{AZ2pMzPUldwgsH#0e)rB*t|Tjt z`^67lJiD^qDNBkpYf%<@X38b+9*aRrGFmT+_ZnX4aw7e-%dmb+c&Ijf?k3Y2(dk z>5opmyrqwnRg|wNt2|7)p1^38<`o<=q&ta~g5%b|P3fB*`?r|y6qRNbmagb785j;1 zF7dtOL?rzFI^ZSWX+_s_l!u@vFO5BZiA@}mQ4d=UQxDsOD7RNfsQl^IQ07MV24_m+ zhd|3+92+LwH}0Yd-2>S}mD@#?*#FEn1uuc<*^Lle82o6 zj{#5cP534?Dn~aopdtyl3oG#!(gagpgItESh+q5D zE;f;88rqEu59GtGdF_z@UikWM~45kmV$P4@bVG&bfVXoVTxi@fA%~S9AXGeJdSY- zbvY#LW3ePTym6a6S0jYRsN*m-c}tk8A0yWkQ)|@G62w;b`Etq5iEXXu&o)E$xyx-g z|8Smz7oMGcyoJV13c+jPMe;6@v<9@JiE!d$4zaIeA%#@M*5Jo0Ta&_YVWBp!^(=HF zv;Lo)`rW4o$`hx3$dwN>d^7V$OGn!w6A*HxVVxx?%z@kG_f0AJFw_f~Zuemop>TpNu z^brWQWv|4CEMlKK6(ttynXPDc*rDq^m5)C2{+;-6h^!zeAkCMN@IZ+dnLgb$M5(b-r2nkVe3xgHSpq5c z*bXF{+?5Za$#eAow3FMiR27`XjuEbuYvOg!jPUdt7$P*!a;88 zaTiq^clA#i8BbP%uyr7H~^Ee6`XN(0jB!vXg>S=H#*l7+{1j1WY^kTAL)MzF$P zSSb0?)=5ryY?+Ni3Efskbvmg3>Q|jg#tU?#N7sW1x9}cNLI@pZl3R8GX zF$Hu6vM5I3yT9!NWLk&9i4>`U6JM6td;lQ_*-Gb2PoF0u!y5vD1iYh@1pGo8~gi5Ks~D^;`p6&e*3>UvNzy zG=!jbwGKNcpvgId|8IA(xXE);MO?*jW+_HLjYqXh_u8vnxey$4d$uTeIWl@=^{!=M z#=T!73jOJF#2&9dxo!!*|2hRt6a_R>kwVaSr_hjduEK3OYh*`a@OXFr z`;HYBAVmj17FYhZ!}Z|bI=4`M?Wva8UV`ZK2Maa^n7!TN9`^e<=9r>tV-?JX!-aSM z?1y<2XXxof3xKD||9{t7h9ABplGD7&F_-W$h5~F4x<^AOmaC0n zOF&1ev};W^Burdq7lpT6$~2h{n0skBD}(?3QAmA?{SW0<;QMAiQsq0>=`X{g!%}S* z>oI}YZ_LyV9E4K|a^>F@kq} zZ{Bj#dE_fdx z4Jz&bRNmI1Ww-XXYo@NFma1<0WS*@M%&2deUnYoc=!yDk9|UuTR3br*ds3USVJfz1 zDN!U>WmIaBNpl}H;gH` zdrDsK{^#<&wNXW&o!Q`04dqFYoFLr7U|NR7$o}?B5F0)py}$i&Ek5m1LPUvIr!VVm zJB4e0GVU7tOOYV><}AlQbqu82=o5$W)Zb14QrRd}$NupmcwwPgKDZqX^RQX8%(7*J zZQfknm&ZF>)`Fi|2i=DW!fDRMJ&!W!xs1@{?L!_Y+hv(ePy91RITrDJ12GCMg`8;T zg2RlssKl&+S;-P~@3 ztYMJH?0kyqM&GBHQ;hPKQOKsM()Hh~b3Y2zG5k4kfMj$x*5zk`WkbH;vO#S5dmGTr zE@ynn!j27`7!^f|M!tjntQ8H`Q8u-f`mND&eLjNTze+{#QDhCwubtAuTHFp~mD}0i zo+0?yg%a8@MyT;*D@FzFul#6twC8X9prhC$a&9G*HtdI0^SK8|Y-&`LEo|!`%1>V3 z_h~pvwR;gGjgdzC8{73t#Qt816LD+}zR$rA_x*xn2~`R_iV{|B7yd??VxKd?uwv*b z>eEE8Y3;-mu=M=(gmo0h$g)+(o$}G0Zb)Kkbkr)G$cN$YHpvHjQdHFig=X6=VzD0; z9Rq&x0az!%7FdE0UJHrK{Cp1uXAd6Q-DHGaIJ&prJ42=bUX#h`5Ckdcq}-Sun_3UoAy~#yhc%qdU!c4A^hWq#L(JQx}lM6<* zo&H*O=S&n!?ki_fuYsvP^0(I8O0kgc+qtHoGtf_eU-N`q@d~me)%$irptxm^UG>mD zUp`ithl-s7gfzN6;>2ibweNxH!}|E$QOgB>2{?y`CzZiR#k=A zQ&iiZ!#vpCMcmgx^tJwsz^&JXd)Dy%b<>T}fSLLimzjzth8pgWV1^)jU-<_M;|4V6 znvEmwY{;5Zq7>n^eYo`=oj)wo>47Avb|@yzn#=c|jzk$rTnc*;)dGo3nw7%$f`v9( zF@2%gwu@GIg@2C!g1~L$xyOsw@FY=*)y=3nlba?jH9bhmgmMRxpn@ z%lv<6o9~1q84JSgK|DXD4mB~2vFyt2?D(jE20aU3JftMAs(XzkHR0sIq`fG$+NXc$ zi=}DA>wc3@eE#&a-X}OaUGiM?izpIrxup9YMsiyreab3f+r>O|ePRD^mo6c93$S4& zN$6K-aOT+jJpsrxlG9L-T_}I$rke%c1#{hmR~}4~CJ=F`nExBI0k}Ce0e2a9e|Vf! zvd;yy)dj#Rs;D}l@f0Vbm=2eR5oPv^CZe7`cD+9Qefz^uX}%ZS8*Z2e z!nUe$lTebj|7s3c&{1`~CZ7BYu8n=}Vr}T3&3H$X@m4>u+n`yKjEyI0E1TMK=5w=` z_TV~`yGB8$T6Z!5$bTesU-qzfvE)C+N0rVD9!XZ1E<`vHaEPx@<1 zt3k&l81ckiVrp{Gu^Y#no2n@w)PR%g_-=GZYUZP;LeJ%0ZuS-XJDXv#)9l<4RbAcp0cusB55(sQx{1WX-uE)uywc**z&HIRT1>}cA}2NA za8|E}TC?FXtoEmmrLTXQRC{2de8dUgyP3F2o&|{Sx>GwBGN+~N;e&zrn{M*RfeVM_ zLmeeS-Gl&q-p61IifIZ|@e#S8XE99&#hMYS|=aUqirNuU}sbDe1!$k@kc z#m2ttdsU*Q4|lgfY%x*AQ|TPpkvn83^ibhzmaHS4BC^mjvN(zp?U8wBycx`DbmLvN zR#IjW@i};D=sOBRQhKcgT1?{9%m(KY$nUm?E@DKvnWv!>%=~%T3gDwxAkaqbVhAhsWlUJc=6jq zc_%vj4%(lNkOCY%mcecG5$0Z@>z5z3@UYZmhO!^?GH%pOh1Wd4-WF2r;sK18q1|F6 z_UAHeOO|+n{H3ma$`+P9382@JJ$of+=sAWT8xZ6-Nkk;%0m071+`pn5JH2a()U%i4 zzOV=DUixqMy`#sjR^p{0&e)|3t{^v|#4_gXIeIY7&BJ``IulNmO_!wXuGlNano!CT zsuv%ceV6}$>P!rS18%|Im7r?dmbeR|o>SY~3`GVU%+)^vOVx+xnDJk5N7o6$Fpp1s zU-wXN`=p0QP;b8vneFQZ+vE5U=@8)RwRH{cVm$Msx(1_aA6V zo?R``eZ7&>Vc=es$OB}B&*!6~PwmcUz+e_#xGC)Sd!d~SR}oB2Pv)An&?rUsQxDSk zn}C92$@^3%Yy=Bf#Zb)4q1NLgRQJ@bUP+c+e3#)2HRz&K@etta-CyPomU=iGn5B8xngaBJTNuD-qfqQ{wV zmH@_3JjlA5jFu)Pvxu@g{m(;~` ztHJDWWa)h*lm<}V-TrH38nIc#=Y@-UT>ztEpC}AVdrJ{Qx2G<_vpJWuLZaU1H39x7 zD6e}-p;`?Y9Q?#CxVUM@gL~t00_V=1dZ(XaMa|pxG5%5zzzJ@_q3rer58gjwM=I}a zCT1`AN|Zl4^vhYWeuxcw7m#^uh*|2+k$BCgnrXp$(zKKtu7Mc% z84O=a-AFruMr-kZBP0Doc#oUxbXQ|)4MKq^AlX7~bgB!kHDCoAlmdKD@|vy$=$J#Y~^TJ84+RZj2$okeHDl!*uvr&yZSG~HnBLiq^?S|L!J<# zVQB{EU2xDHV*bfQ{H9YC8KDq|Qr)LMD82D&Xy7>TlVZq4f>lv;YJ)wquG!aMSGz3T z-5vAqW|fQ!d#`XY$@BV8wq9|Sim-M(oe01@!nknJEv0KYC2N69CY2OgNmsHBdU-;> z;dl^58u_5=dv-#i|3WK=9j9lSjtVyA|C?Dy+csIn6GLEQ@}8D0^UNP+XMC=0jY+OA z==E&`{QKr*?l2aIURXe2JSzxdS2I9t0v;%o^3lXgHODs%*st&kl9)ba*d9cScTiE1 z(u@8Z|fcVGKp~>RI*;AG{xw@MSX$W)_us292Q-a=X1QYR^cZ zVx^wE-;$Eaqtf(?4Yon0@MT_5&0f<^YCN|t(EXO z`3zFb-5smSY;t?dd%zx=5AIA&Je9oHezA=mImYc>a&Q_N9;0R<5B3YPYrb@yJ%u@; zMVHMGhsC|e6o>IJrRWEUF8B|l_a)+)N74XyL_`qxSSCj!zV<9+XG`7uZ$-!K6-?1Gt4udO{iyIVQj7Fvh4IEa~UAb0jm>^V}N~ z=cP)T%tzg+oE1+;wi^T7l_wvoZRGVfvfLLcwO1Q)xWky8fTmDsFNt`Z49uq~m=D1H z;UK`O%(pkv0yC#qdoVtLE;7f3O+fwh?EYZ@X@(g1_<3iH@kcq;>C*44j zh%Qez^uSbk()v6F2i(`FN70P@GA#SrtIe&;0sL~q(`+y{wrv@2odHFKTNUf;cL6K;BPwMC3wzUX4#ItPc9186d!G;FY994EE;B*2TYavI`K8lm$xtmnB<7NgI6$vp}tAW zCe+UlUIMNsz1X_;Aa_yt|FkiCXLe) zjlP_QeoGt6{O##DOasR*%O;te0{pb`DDOR5)}2385xi6R+6_eaP(H+?HFsvlOg%0( z;SfS2RMs+^$La`N7C^f^d{WfQqbiWUVe*+q0wDPnK=NS4&)`mC*O{z%m_QC|{fl1z5M5P=Mv(%k3l|Tdi-YtDLguM=mykyVc~ZmM&e$g73?jn-)SB~0Rl~z zGn8GKhI@wT2ZXZ{K|zAmGE8hQ_$QSCgO0{6JJ;SKX}X`$EN5N+XvpH?*OSYW<| zK^;a7^QFoD)&g{NN2Y8A6&Qom1|}xn#OygP9}LsO``)a${ybVX#m7Xw$L!l)ho36q z`!TCwk)x+2&pgH`#+sX&hpN`2J1~*h)j{?-U-|EYPw)w%{s_C~*rJ7>&lf(0BkgDL zc+u%=brX6&&Xkm+%-KfHj8b9EqV8+m#l+m+3efvtf5!5108y%;Jck%yxaKKeXv@=7 z3o3i#B`vx9Z_st_;}MHYbR?(@YHl)}G5FNa+2}Kc-QuR4L_eq`$IIoyQT0rSqsA2g z=J~!^omBMgK|zBGQyv#)N7EViB)m1u_K6iGah(QJ+`TGHZEay;+#DRt6!NNzbKaxc&d_V5uAI!i{O172Eni>axdyChf(xq=HP7lNhs0yqN|i3=CP#?oz~|JeLkd!N2vdkZ{h_#;kK1B zQ5UX~XFXx^##IUzP&G{oqU^3t4s562a46CD*E^JF^N~9>6A;q7Wmzu%(7mM5PL=k# z8;gSr=toOmPj$TKztJ6nnfp)aO6Jcr2UCCo7zkaR0Lzb9xk#zKa*X5lyyQM9rZ9IO zZ=U-Jsv|E^M5-toI52`}P6R@T{{?8Z-DFP|FfP(mG((dam=|uzH&V3z2oXENK2#(Oe)Hn2QvF97* zUvhenPl{H(IsD`q3J--(j2zT?efz0eq;SwON?5^>@AA{9a3NzGg)KvhTodhTEQ5rg zadA;5>~kq8Ycp;!QOtz_y(BYA1Ec}tZnjrq)W$eXSn9oY7MRDqHfisxguD0#I+j&= zQFxn8WZ?pEa|FBdS0@qx#{+#cp#ejuy@IgowVrF8)zv>OXz5eCpCD5je0%2sby;UD zrbR3$A%un=hblNWE=cVk7`T|#4uVQZL^_{++ zdAc)Bk=Cg^T4h|liX{Q*8C@V@XI;c>c=Ap|GRS2Wrs2i0R?#NEq-SylI=Ot|k)ul< zx(Xsv%|i(WZ))+5L1}nYm3ipZyU77lgtVm<_;72 z1d!Al)N5Y}GDC;^@t_%3ryO>6IFVV;th^A=zA$~ZTCpCP>{KzolfHRd78EOX(OnSoygp>;$bd46!Y^3|X zXQ(_XD?B%_oTo?Okgw1=@1%fzszd8XoJO?vsE3=05A{W!o)uBL6%ZVhgv`s*=9+{RCP%!ceXUg!dAdL zc%>DtDYH**W7V@eBvJQ{^PkJimxRH>j_&e4pb_CRH_?*KkC`iwBNrEo{suxidgk5D zCvpX?!{hZaqtLZ2+j9U8T8P+Jru^j^Zv)u<%?E29&0Myqh8w`juUyjV%Eg^8pk5VS z9V$3rCP=6A-=2zmZr^AWnjkj*soQUmeAMa!Vfmrctntw55fblSRGODwE?xf6-v#XW z-!NwB-h2J2+?i!9O&L3fx8FXNVEt$X7`(X7NUhzqHKnQc)JF2!CP@OL$C-UQAlGQQ!=&Ubh z|6N0f@F9sUWwSrYU#}#`N96tHVus$7Y}~}HwoxEO>2Nc95iFa2_jOl(nPi$)8nEtv zblS!ypA`0x(!*`sT!m~Sg7amzivzdfRf6(2XxZnCb>Ah|Mb%C6-d{;Pus$(}c)HW= zm-ohD{nm&Cwb1EZ{NkndEdxBy0-&v&+gz{}+A)smq6lck@%>J&Ha&|k$GcHJExxt7 zns^gTG_y?J1xwjIqHld(OdnhSP79Ruz<)})HD{V_EddReA?%HpWil-QYCunytU%-s zA+fXpa`pG|kK1?@nM%c(rJZslAo&%CNQR zo&`WFgFtS(I2pb3`g0`U30MGmI3S8aQuVy4j~o;x3m$(aTaWGNIxwXN2Zgt8VoAa*&zHn8R~Ni#$qEFqenRetQrRc){s0F~N{@xKS$f;;Jo5N9iTnVc zzPG>7$XMqylL@%oNG3qQH6QTKGs^e6t?~e&xbc^EI5uM42S3X4!ZxU4#~>oa<4K}u zR-3Y+K!RN4^oQ1k(}02IX3CAnbLeM>V&zA%-F_^e8$s0!B$$S&AKOE3t6dr~Ly(hyBUHkkdI}c2+6);7{Z*cIS&DEo!Klk`Zs`2^r6o+?fy`m?A zgq(;GD=WrQW+LjX(pls`AO`qVD@_qAt~2K22Z#i*UOH{>rNMt!e~g$-s&|tdEhEWm zIH+CK5$lz(o~!&R;MCSHwL10c%M$AYqV-Q#7){#r+_2PP#h<0hPBHD3b*hh!kFXZv zb(bm&jZ2Q~aKz`AfDjruHXs!i!ULCtnorKJDf03Bv&4h|oY8MNt@9t8((0gflq-;- zY-Xd~BT@6tq!cma>9pR%0Ho64e|L%-H58!`?`5i_yc>o*$)#c4Grdr;oto!!i7 zQwcA23OCf;{#)0$;?$6P@*tWa80?sL=%2G!&R?6FUrPmLOTI|ptSE1_ol&d3sLdZzW<|HVLYYXZfkZ5DhjY7$ z{4l03uFl|zm1NugD0sW|30})=d8DE)t4PI+mMk13(Tn?Gq>-Pb_4Re>-ERq6EYXFz zw}31-zpNb-#Z10(`$Z*Q#6PP8lVsh@vH?#5Y?OG8@omdonhqa9-tb{Fl38U_jGKey zxOb{CWv5hr<5=}PwO+?WUW38pSCnWrKykxiYszO+yV4BwD&%x%{+=l~^UQgM6hVf{ zOL*IQSYna1f{k`bR?U2Zg{{YdF0kQ_srM|=%iE%2`-jyVxvpNFJ^!RHFZ#UPICnCE z-_8)wtL4frmB>EG(wa}#O;F7g%+ZrAijiFQI2mNOMq4FuUU0~>d{}#TLvK$bF>8rX zOHOAo^TC#q7g5b^Qa3Gzw3y-YrYtaFnl7DR@o5;Xp5KljBH!#kRsb+GJ)oFT6!1$; z<0~z6KeLG?Bydi>e@-zpS`wb(BbKMm7))8<;2wD2F`wH+d3vZnZA7IyqtmNVVqK!h zfZy!nwYutA0PyGncFze^3f>exSF_?VJqTvEt^g=2?6>()N}rSR&@4Aoy4`k!=g`MQ zu(0MqIJP-_mVPes_&8m(Y>nti<=GHT7JgL>@HXEROm#pAcDp317 zADDTpir09@ix@CldD?*^PmvcQ53kK17~tN(mH8;NB=ysdon>+ zy@!Wb7{A}12ILWFvc%`I0N-rB=@bTwrh3DP2+8lFgY(NU4PF%+C7aREHP)frrBIh) z{l+c)A&yx6>b+N`e#dKSp}<`RHrX^SAVK2)lIsiZ;A!^-0JvbszXtRKCt@J&eEO&J z4wMD0j7!mtnl&ODD>GQC&wFV3#YEsL`r3dUQS#L>n=|uAo6n<|sowz*UGA-c?<$y5 z#X|thS0ClJmh0_1Fj?7SQd4-g|9$TlD~F_HJ(!3>&Q{;EF!VjA*edvNzAph$GA zz>ZY5i(!~>AbSKP{+wcReR_ z3AuryZI@$`X_t>@pYbp&{27o?CE*MfCl~cx+TKP3%&LcN(Q^DPZ%7!4AS>8%zstBc zG1oKlw|mg8X0Dco-+l2d9=`3Q)V0r7cU zlo-I-*cjgVSgPNp=#J@R1(&*U&lVQ?0g~Oqv;d{~hkzkUVBpVgQS-0!NBOGlPuc+B z`8R0+R^TEVQBQgNRls;CLfLNpAI*h^bU6)6yq1Yb+-Xgeku}3#9_y3|-1b(p>m`d@ z_1Fah5`q75Ca(>mSKD-X?Bnn9idtsXzw3yx(B;Tnhp(>tq2k#*C<#LU8+6bL(UX+R zkEz}CIPtyL-V^b=ZW$Q46HZnDOGU#&X#qj;)oz&iU1AB4zCuB%{ce*FbDVeU^bknG z{cl4DKot2ywy<+QC27lq8n`CEH@d<@sm&n(r-AGO#V_$dv10Ns>HpQZlSo$3{|hb! zXFC2*Xs!dI^blRoM)(3`>Aiql#{Y!oPMXzuRfDp=;NO1CA6}9JwKDJQ`$QEAI`>gH8EhX81DH^yvPB!DWZ?24*5&2V^k&t`mBS_qQ+WP$eb;>#G zMB=-xoN4p-Jpp1M=TRsVjl$kv-f~jMk`-(;QjtDbz2qz;ZV1dP0j2DJUN$%;0By2d zKylfx;>t6M#020}ck+*6q%@%apGn#tg8`@}I?6WU&R?Rb6U_+TgVnZ2V5Ps$I1(ay zAbNpx)T(Qd=+yy$ZUw`zyqYdHc7;@da6d50LJE3y1_Gtd{Za zU#f?$07C#b5sMuK>hhyQPeuMGdI-9li3K3#WD`%!z6u-tpBN1R)un~46v&-vaTFF)llLw++tgW0RyjC)4P$Go-w5I+RYm^{$*q`p+oj`AT z#^w>fiTgIxy@9_Q3OU|VnH`z`vV@LfRA&WoL%#e>rZr{)>I3-PrA;V2aZzZylwm$I zYXQ)6I36IIe{{w~$CiWtzHb9cy=`6=!9-FB_7BHq4{nhp_K#EIJRaCILirqzw-L@$cht;sUXL^rMue44WZ5t&U-UdOl+rMRZp?l*Cu3S{FNt6Oc|l)b|~(hBB?RyL0{ z2oqS->oGwJ1luB6?e{fKD?-Z*i9{^G|3u+6pXH~I%|ack$c7kdubF4tHPSQdJrI8+ zQkT57KG1*WRV=#-+}^nkXVW!rrWor7>NIncCzU+~b86mZ_^Jie`mko zVnYYRIGAK+0f`bcn2~>tmee&Ha(r9eyNEGu*prKPVV2uHpq%zE>hIU9@KPP$^9o?g zMoWsaJ9XpLMXK~5wZrnsivogW z_Luy}iD7}sqlVtRc{|d(4b%dSLbqc*DGSh;5%1JmmgN`jHkRh$*cOkNMz72Z&eZyn z-M`kQ%Ne;2uO*u{<7Sg=SFwPYUX;U@Tt^J3H9Ri@4YzkxX%=j7w={E9d}z#=c=Noi zRkV48HYE0CUe-ggM7!)+xInE)f4B4N8^VDS`jW*UdLQ0A?}sJNmp%*d&oh5UwRl)? zUmT&M%Cnay7!oi1=!GMCfQSk(v;18+8SXOBG>#y2ZR*02iGR>df}_A~KzSCqzO7&K z#8LQwg*Md$Rw)xRfY9P#{Q4+*faylxXEAC+%0S?dKn7Uu9p!Bs-xCL(T_~Ty->9#cERsCN_>27&T|_Z3{5$k zx!iZUq7k49qdF}mGA1nrdlh_puV0_M2oz?PALfplMQu^x!xEbZ%crE4eFHOHus|%f z@dLA0FWe(9IY7s+52OdW&xAL&zC!r6t=&}2t|q2JDW5ws@ewF1W1QW5$i}}mfR~w!BMWa3UyI|&Is;V!1sKV; zRFQO|MeZbpD?7U9;PT>cO+kEOcfiDdbcw46SHY>&aCv2ZJFX?nQl3)Z(SHwDGLO*Y~GfuO-qv0+*sPYMm+v(ihlz_?;pdO@6-ef znIw{hw+zJ25xj^O@NfQ7Al8$3P?3nv0Odo48Ro3ZZq5UU@RFuHBB3Fu4s6=0Oc`qB z`>ld{Sf!g%RW6QM_v&D}j>Tj1$M>E7)o|^vaQ}iWrM$rWbxO7-6&m8~zE9arx)b9E zE~YM$TBI@srWOqGXB4VcnVNdym_$T|lM^ohnW)rY zDj6R59{CCLnA4Z&69qy-6yYx5tv4h;U;5X%AG1vl>f`NHO^q4oa$4SftY~>iZa8m; zH_WS0-SR4kDRXdVVI_Bl9KC;ctGOn|4J6^{z_JMG`-1bdsxo$b(7zmrO9#QwB4^$QvRjdib7FF9fF1pX=j%sFljS5C(y+Yf^ zY4aDzhjofIU82|Vw&9LVI@pwhhuqWWd{i4YoJMvn1)VLpI#k{A{y^G<9;)T)E-yi0 zu3fX2p=!luA+*LSjXciy2`>^V_40*>EMe7;TMgj0~>e?qJ(ly#C z)#@FR>jQs(xpMRH;*ZxzUA*2%u9E+f_2^4STpae}$yoKweRt~X6a^2X^RnFj!N3-F z4jE!)7i#U^f`)T#F@30-ZpSGaKLfkwGKDdU=)L*Tw*pq_bIcUhSVTTvBERINN5pp-(KWx6vzOi=SlBZhq@api?5wm!m%nlI| z*N3y=cv~$PAnHly4$+4dA)_5iqbDDVP)en&EM9eR^R4oxZxenueox~AD0pDR<^$aV z060%fe%j&|?BXHV@gi6bU<{1tdMJUlsBt-BVL&t(2}C+cz(Y1&?U|}4w|eMuo)(eq zNn(FW8Z#6Nh7ESFdNY})&VWKhg2d-iK=faoeN((|?IY3qiY(49+dTL^F_X|DlhA93 zVU?p=lK>$$3|P<1qq=oL?^A}ujt`l+dCg45H=i3#--n{RzY76rNftdb8OI)=9%`HJ z3=f}psg;34YKA;-ip?9jFOsOw1&RL{!IGC|5Y?|mm z-2Wxb7OK^nKp>{Qv%d=vf%-2qVd!d!5b!P?P*yi5gQB8KOr%+^!dgUC&fc1Gdk_9J zD{5q1l5D!~9kyhH-j9i@E1k9ZbTIdm4+A&(IGzGpIxxNLZFQQ6P8I3@r?SgH#ss?A zhs#%KuV%UEsdM#%g>jy}M3cfE*>p0xk6-$$-wk=Vq=4`YbZzpfi@^-THcMlTF+X$C zR*U`O4NW#ljqc)|0$0=h({GJL2leh1%lW=>V9x6o*~5E2jN!z>uYaKuyxv1at?4@m4GIhi84}t^ z-kSF8(_YG4sx>HKa?K80UGvRe(XB3?_Fa!?M~E5u{hE??#8qu$`VR z3vjctr>iNN!qoajRgxCybSfIfln4}paC#f{QEI~~41`!g&chvwL6YUVd<&d|0F~Z9 z1sanUV7H)SS^c*jrd!Hy3#sGFuU$C^y96*5DYTKqb5Jb#0lngi4%WZVc*{xrc4rp+ z$qpsvBK25_;rAmwe0x+uU`t)8R`f&lFu3Rb)K8xeEj;N8OPdtE(NW9w!3I2=1%1)= zr|HEr6en-3T&`jmZ6-8n`-)vW{i_9Bd)M!`>D#CT^Bel+J(AQt1rzKRN8)wA?eb=S zIg5%4+X8%E_B2}5LYq@F8v41EgYJ6rmIv~6oak{ObZSi>h!+qVsK1pRJpJi~PlS1R zm9l|Nr&c<;*9Oi3?`%55;uj90nI;rMy7#5?ipVvl-hY3MDQ5B!YT$ZD79Gt#w}f%? zJWdJz5zN~-d+1%-3pF1rH#4PAdxeFw18+LIeLhQ2YB57kTYn^$=rWC&#zX9f*B9Ts zsZQ$KzZW{H+)sICrwH4e^4^Prcwpz1Lcg zA0(4^umes_c)==JL6ng&JZsnW^wD2WyZGlxMyV+m!bdoKamy6Mj0&b1l(FlpFB z-x+T~clGA@eH$UB59dCltcH*^{o@BEe(WF7S;g@~an z%}~bJLJNgr%9ec_OST!yP_hey!TSt4?>X-|&ivu~Ece;&z0Y$$_frzHdN*&!?SPAS zlHoWSM6>Zr_b2>ZjW25`oSCCQ(=CJKwo#VKGuL^|T3npbP}WD-vi7LaH4qhM8(zxq z8_-kJ5BlTB^G?p$>5x03J3fqNqL{&cRjp-)BE+v)RhJ-4zSv~_B=XhcJ6 zIwo%xIZ>!;LF&eQ``cG;mRqN^o8R!8Y^5}hUu%_}a1Q#kGHYZncE!=df^3LNTq#nR zy)Q5BR<~fDMHsme^XFQYY-irN4%gEZT8k!9hK$e zkBNVTMy??iT6m{3PQ|))a?|4S>Xwx=&H=PV1Bk2tNJ+Ygey*mhLi`oS-hl9wyp%xg zO7qZ)%&FM%gb1AI-1+YdDuqB7;b;o#kd+HzZxr%G+GX3$W=*Fzkq^0(#)B`udNO;6 zvPS7y`?yNc^X6bahPq~~hPDU2Pkm#;fld*iT-0Vg&qfMo5>lUu_!gO3(|+ySY^8sU0k4gIW8-obz>b}xKIbsfX8q?OZ~RH7-^;7%-YHVwEpSIm z)2Zcy9NALHp284kw+oF{>c1@s;(Cwx=6P#cD(hbZD%x87mvNb z`>1CmkgigZsxm47K$qt_ia^`BaFLfe=DxG2KKNxhQpz1~&^Fq`y$NKE+*b9^DBHU% zLFcbXJLbvr=HVB2TUGTT0D-d@sPs_!UPU<&cFuK9b*3F#r>K?Y%MdU^DjeK%>ERtL zh|fG+b>*8dSekmxldV94_{x#|TG{&eQAq?nT$O{Vw5DwG<7lz+Sk3a^xUe6J^cjow zqivTmKqJVc2GuTq_!;RV0*x`+9jKt{LSy*5GBH~wi^>?C~ z+D2iTVX`!A4^&WiH@FHbq2mx|Eq7|<>#Y_mjnSZsG9>ADzkxHLd73009sV%%tyjCX zaC~0zK2^ouZ)Bp9OAX;TAULt4AMs3it?ws2#tm_=Ca3z_I#v_0PlfJv$Rat&%>GS* zX+YrqQ)o-xi5P2<{13GtIs_?(F>Pf-4!^X!sP4vJpo_RgNNb5HJ*XN#^^A6A|9Aw* z1QnJS@XNpYyMzXDILK9a3FS6otLm2C^MVa2OlzS=h(wQm6e#dSFx1)i4ab%dojNV= z5^DHe3rNj1AJhr>>g0A&ndYFuvmMBRi9HQS5m6uH%-b(BvRT3`)+%K#g&HgbOy>d0 z*OqQGpGdyjcUe-7?-MuzU;!_%B1r7y4>AdeXsh`4+^QF!{8#*(UNYc4f=4J=DqCtV zNK(sTRX;u&qk?};QCupHp*&e;V*HwrffvaGw~czlhM$YL|3MZ1UbsNA&udt|_w~84 z>s@vE3i-^a<^KV8{^j2i$N|d6$ebH#e`yGKp40k$NeE%>pxv_)G+$H9@-9_>PVkyY z6yh%(9X~{IxT>-SoY54XrelEMn>^)FW!pFnJS}gDGo!DnO3zAZWMS=$2rRH<{dudSd8DplbpZ4*$F#~RSML)Yey1eD z&bxYe_G;LaS`_6tI1beib;a#gEl>yi z-d=SqJriocnB%3B!ft+_%8Fhf;nl+Iu@^Gk?#@2Z_2XsklkYXWtWK0C6Mjg6^n{9B z5GJyQTL0w%K_#p+1`*A8ME`Nc+)r^MSCHcj2ibx3J?5f}Xn-34S%*M_cd=ewb#xAt z5SOj*XohJ*O%xP|RrtE0pX&@iR;d|P9B0k%tw|M=m@}tj1&7?x14v8b<&k^XOBH$j zoS6aM=&yLM2ZQmFmy%Mjbu0w~32AP0m`M_RkwBn*|MxO1jB&t^?dkxosVTi8FVt~FN%1Nom9f&uZ2`DhpL@2k>b?`j zQsU^BIRTJTNHbE=HNsuHGLfR|-QJ8VjA{^=+ELVC+NdZZ>K)XidA?&|w4R%_1~R7C z=T4LGB$bdFFQ;E~h-hOFJ}1@osja%w7bt&Z*g;+&T|&zgw+o^Dm6qTG9kogLmztqC zYN37eYiyl3-PvfkwLdPdM}T&clwyui6Y`Vt7>s!=>9qo%d4{c%jxeyS{dSVX+QZx{ zA8?j7-j=es15K<^_K_u5kG3BjqYALI4BCjv4FZO%Y^wl*Ug=ZB78sil>kRH8Zix}i zUF=*&gAtnjsKh-yUy=v?AF7>+%co^roHGOO$4NXb#qK;+?)mam{?C+EYULX znn?=p=2cZe!s}Gg(Gcqf2Jrc zr)ga?>qy$TH8EWEFjH}6nlc{5DiY%g-pM*j8`diNNc}Nv0Qn$pCvbsS*|)2^a=!6W zO;K6$`bhXo@YJpk$$__+2g#4ELLY;j*s~H<`|a_3X_W)6J~U`fcWrKMNFn>MDWuHa zO<96mJpy*|8Xow{Z0o2`*bAOPf=6Gq8lc`0`6fj9A47T>qoScctEn>XO^i1<2@GQC z=W8rYBp?Aw2Ct@$6z3nM6`^l&%293ULudH90nI~f@*)R%k4AYkty7%tVM7ayeun6r zXkI$U?|Iv;=Ll2C#_3`CwG_SyET*_k(B(Fou_5HJcn!^12Uk%gC_6z)K+Vh)qa2?5 z*CDI5BJLZ1#YQBti#v3hQM<;6Ys58=MAJBP`*8iat4*4_n7cf#PL)oo_dI(6m6PX^ zpYZ(kL4}9Tl}%Q75^foa5l5vhe-crZAzJ;EL{4+KVD1s^vfOW~9bmfC-zyOL794;x4KVSjAHcVU z$bxiLM=y5ZCB4?)if^NcGqY3w?-=Yq+#&v}La(gO`#?XJ9c10GLD@uESjV^Wd_T=7 z(xE&^fe2!w`v2_^p?Qsr51}7$5#AeuKQXYxdlEl8wJY=I11cWR*CfN-GuEme286cb1hRG~ zk9OIBG^U^SbDI}|JKp+HjZ(Nopi{S)&6Lc(3Wp4NN}nwpzF7{Wgm_r#$EL5N@-&ko z49Z&RIv|N}!CSn`8sp;)jYRttVe+C4`)|q}@wSwk$zp?x*#4gCL5(Nl!z}Tw);1DQg zDYWl82H?clA7ZIzukiu_om!RXg{YO@dR(b1$L5Fh+nWLN8->CJw$ba0!xWK!-6U>y zW8w<=k_!f+&~b3P6Q`q_5(@0&KQ4siGWpf&*2mrONqJL%*rZL~xunc^uXSkZ-#bU9 zb_jN}Uy{LJBR_3{a?l6O%Xk7$wV~#OYY-R1-Y>guKZi$8qMZ0d>ff&$V*IDab)<} zb(v$ATz3Yh)vOu{5k`BqAxMqJLaBlyfl<4@_{z}v0R<<#(`it79-d4^@xR+wz&A4_ zHeJV1v$o6G!m21=2Vrl<`KkKQWZtxN6~FsD`Cy8D&S_t6tg;MUTJpPh0jCGWAkds! zuqmpI57fzuCqL-4N6|4nmCN0AP#GPH@G;fiZ&Pp4FZ!})*wTOh=kE#IOlM^XwQ>pa zlWr>DO3V#^$-%nDBexdU8mGSgvyY4EsefA8=2IT`=*ZU0q;usEaV2jab(P78cS28+ z{EnGoa|W(B+t>Bk{z_kr2tVNMiKORHp2B;+&WBbNZ7l?LzJoK9R>d}W@kZV%&nMx-TzWWi%GFf{Ft_Sg;5AY5GU9PbdfbJC~nSf@z_cg#{| z!L?^FHmqVU(6zG+G&&0ysVo-%rLvQNo1*-ggl7Pe&Z#S^Od=KA-kC;fxipu+as+oGF;U9pG(N~ z>c3~gGVQJAr8RqH#Z^?ahu>qW=PW5y6;@dy32zo=EPSfGZdr7jbT+G8g9I_gnC<7^ z;GCd^(aN2gkVvZQht{~!@w{l^2ZW!!doOC;67#qdj5KrGCb(Lu$2)YdYtf5RB(u8o zPm>yyc-ssC9O)Rq=dicpLL&LkgJ^8sPak_#j?Z2lLw8HF5a zuy2@#KUPvoUUt-}I zKu!wt<0-hh&b&pb3o{p1pU--#|6+7y8mt{WLW$}ILt9~r`wh30AUx0U6_d1llggo8VqQiM8v zxC J^Um8m_+N&B$Q1wp diff --git a/ckanext/dms/public/images/lighthouse.png b/ckanext/dms/public/images/lighthouse.png new file mode 100755 index 0000000000000000000000000000000000000000..090f1abf44e949bbf6ada3b523cc0ecbcead00b8 GIT binary patch literal 14133 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 literal 0 HcmV?d00001 diff --git a/ckanext/dms/react/components/FileInputComponent/src/App.js b/ckanext/dms/react/components/FileInputComponent/src/App.js index 7886e72..2ef604a 100644 --- a/ckanext/dms/react/components/FileInputComponent/src/App.js +++ b/ckanext/dms/react/components/FileInputComponent/src/App.js @@ -1,5 +1,4 @@ import React, { useState, useEffect } from 'react'; -import axios from 'axios'; import ProgressBar from './ProgressBar'; import DisplayUploadedFile from './DisplayUploadedFile'; import UrlUploader from './UrlUploader'; diff --git a/ckanext/dms/react/components/FileInputComponent/src/FileUploader.js b/ckanext/dms/react/components/FileInputComponent/src/FileUploader.js index 584fa66..6843b4a 100644 --- a/ckanext/dms/react/components/FileInputComponent/src/FileUploader.js +++ b/ckanext/dms/react/components/FileInputComponent/src/FileUploader.js @@ -9,11 +9,13 @@ export default function FileUploader({ setUploadError }) { - const getAuthToken = () => - axios.post( + const getAuthToken = () => { + const csrf_field = $('meta[name=csrf_field_name]').attr('content'); + const csrf_token = $('meta[name='+ csrf_field +']').attr('content'); + return axios.post( '/api/3/action/authz_authorize', { scopes: `obj:${orgId}/${datasetName}/*:write` }, - { withCredentials: true } + { withCredentials: true, headers: {'X-CSRFToken': csrf_token} } ) .then(res => res.data.result.token) .catch(error => { @@ -23,6 +25,8 @@ export default function FileUploader({ }); throw error; }); + } + const uploadFile = (client, file) => client.upload(file, orgId, datasetName, progress => setUploadProgress({ @@ -43,6 +47,7 @@ export default function FileUploader({ setUploadProgress({ loaded: 0, total: 1 }); const file = data.open(inputFile); const authToken = await getAuthToken(); + console.log(authToken); const client = new Client(lfsServer, authToken, ['basic']); await uploadFile(client, file); setUploadProgress({ loaded: 100, total: 100 }); diff --git a/ckanext/dms/react/package.json b/ckanext/dms/react/package.json index 0f6a762..0f2d198 100644 --- a/ckanext/dms/react/package.json +++ b/ckanext/dms/react/package.json @@ -3,7 +3,7 @@ "@babel/core": "^7.12.16", "@babel/preset-env": "^7.12.16", "@babel/preset-react": "^7.12.13", - "axios": "^0.28.0", + "axios": "^0.21.1", "babel-loader": "^8.2.2", "bluebird": "^3.7.2", "core-js": "^3.9.1", diff --git a/ckanext/dms/react/yarn.lock b/ckanext/dms/react/yarn.lock index 9ebe05f..cd3c917 100644 --- a/ckanext/dms/react/yarn.lock +++ b/ckanext/dms/react/yarn.lock @@ -2740,15 +2740,6 @@ axios@^0.21.1: dependencies: follow-redirects "^1.10.0" -axios@^0.28.0: - version "0.28.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.28.1.tgz#2a7bcd34a3837b71ee1a5ca3762214b86b703e70" - integrity sha512-iUcGA5a7p0mVb4Gm/sy+FSECNkPFT4y7wt6OM/CDpO/OnNCvSs3PoMG8ibrC9jRoGYU0gUK5pXVC4NPXq6lHRQ== - dependencies: - follow-redirects "^1.15.0" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - axobject-query@^2.0.2: version "2.2.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" @@ -3620,7 +3611,7 @@ colorette@^1.2.1: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: +combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -5312,11 +5303,6 @@ follow-redirects@^1.10.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.2.tgz#dd73c8effc12728ba5cf4259d760ea5fb83e3147" integrity sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA== -follow-redirects@^1.15.0: - version "1.15.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" - integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== - for-each@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -5360,15 +5346,6 @@ fork-ts-checker-webpack-plugin@3.1.1: tapable "^1.0.0" worker-rpc "^0.1.0" -form-data@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" - integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -9312,11 +9289,6 @@ proxy-addr@~2.0.5: forwarded "~0.1.2" ipaddr.js "1.9.1" -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" diff --git a/ckanext/dms/schemas/dataset.yaml b/ckanext/dms/schemas/dataset.yaml index b7082fc..0cd9b3b 100644 --- a/ckanext/dms/schemas/dataset.yaml +++ b/ckanext/dms/schemas/dataset.yaml @@ -87,10 +87,6 @@ dataset_fields: resource_fields: -- field_name: url - label: URL - preset: resource_url_upload - - field_name: name label: Name form_placeholder: eg. Malawi HTC Scale Up Plan diff --git a/ckanext/dms/templates/footer.html b/ckanext/dms/templates/footer.html index a784382..f216c6c 100644 --- a/ckanext/dms/templates/footer.html +++ b/ckanext/dms/templates/footer.html @@ -17,12 +17,13 @@

{% trans %}An open source CKAN project, built for the MoH by Fjelltopp - with generous funding from UNAIDS.{% endtrans %}

+ with generous funding from Lighthouse and UNAIDS.{% endtrans %}

{% endblock %} {% endblock %} diff --git a/ckanext/dms/templates/package/read_base.html b/ckanext/dms/templates/package/read_base.html index 3354a3f..688bd9d 100644 --- a/ckanext/dms/templates/package/read_base.html +++ b/ckanext/dms/templates/package/read_base.html @@ -1,5 +1,7 @@ {% ckan_extends %} +{% block maintag %}
{% endblock %} + {% block content_primary_nav %} {{ h.build_nav_icon(dataset_type ~ '.read', _('Dataset'), id=pkg.id if is_activity_archive else pkg.name, icon='sitemap') }} {{ h.build_nav_icon(dataset_type ~ '.groups', _('Categories'), id=pkg.id if is_activity_archive else pkg.name, icon='users') }} diff --git a/ckanext/dms/templates/package/resource_edit.html b/ckanext/dms/templates/package/resource_edit.html index cb482bd..63db889 100644 --- a/ckanext/dms/templates/package/resource_edit.html +++ b/ckanext/dms/templates/package/resource_edit.html @@ -1,5 +1,7 @@ {% extends "package/resource_edit_base.html" %} +{% block maintag %}
{% endblock %} + {% block subtitle %}{{ _('Edit') }} {{ g.template_title_delimiter }} {{ h.resource_display_name(res) }} {{ g.template_title_delimiter }} {{ h.dataset_display_name(pkg) }}{% endblock %} {% block form %} diff --git a/ckanext/dms/templates/package/resource_read.html b/ckanext/dms/templates/package/resource_read.html new file mode 100644 index 0000000..3b25596 --- /dev/null +++ b/ckanext/dms/templates/package/resource_read.html @@ -0,0 +1,3 @@ +{% ckan_extends %} + +{% block maintag %}
{% endblock %} \ No newline at end of file diff --git a/ckanext/dms/templates/package/search.html b/ckanext/dms/templates/package/search.html index ae316fe..a48dd5e 100755 --- a/ckanext/dms/templates/package/search.html +++ b/ckanext/dms/templates/package/search.html @@ -6,6 +6,8 @@ {% block subtitle %}{{ _(dataset_type.title()) }}{% endblock %} +{% block maintag %}