diff --git a/config/env/Settings.Dev.ts b/config/env/Settings.Dev.ts index ddff6c75..5171f261 100644 --- a/config/env/Settings.Dev.ts +++ b/config/env/Settings.Dev.ts @@ -2,6 +2,8 @@ import { EnvSettings } from "./EnvSettings"; export class Settings_Dev extends EnvSettings { ENTRYSCAPE_DATASETS_PATH="admin.dataportal.se" + // ENTRYSCAPE_DATASETS_PATH="sandbox.admin.dataportal.se" + ENTRYSCAPE_SPECS_PATH="editera.dataportal.se" ENTRYSCAPE_TERMS_PATH="editera.dataportal.se" ENTRYSCAPE_ORG_STATS_URL="https://admin.dataportal.se/charts/orgData.json" diff --git a/server/index.ts b/server/index.ts index 6729b08c..f7c1fb55 100644 --- a/server/index.ts +++ b/server/index.ts @@ -121,6 +121,7 @@ var csp_headers = { ], 'frame-ancestors': ['https://dev.digg.se','https://digg.se','https://www.digg.se'], 'connect-src': ['*'], + 'frame-src' : ["'self'", "https://www.youtube.com/"] }; app.use('/', function(req, res, done) { csp.header(csp_headers, res); diff --git a/src/components/Breadcrumb/Breadcrumb.tsx b/src/components/Breadcrumb/Breadcrumb.tsx index cdf30d53..c45fbb05 100644 --- a/src/components/Breadcrumb/Breadcrumb.tsx +++ b/src/components/Breadcrumb/Breadcrumb.tsx @@ -7,85 +7,97 @@ import { useQuery } from '@apollo/client'; import { gql } from 'apollo-boost'; import { Link } from 'react-router-dom'; let moment = require('moment'); +import Truncate from 'react-truncate'; -export interface BreadcrumbProps{ - connectedtagpath:string; - env: EnvSettings; +export interface BreadcrumbProps { + connectedtagpath: string; + env: EnvSettings; } const hasWindow = typeof window !== 'undefined'; const breadcrumbQuery = gql` query breadcrumbs($siteurl: String!, $paths: [String], $lang: String) { - tags(siteurl:$siteurl,connectedtagpathsor:$paths, lang: $lang) - { - connectedTagPath + tags(siteurl: $siteurl, connectedtagpathsor: $paths, lang: $lang) { + connectedTagPath title } } `; -export const Breadcrumb : React.FC = (props) => { +export const Breadcrumb: React.FC = (props) => { moment.locale(i18n.languages[0]); - let connectedtagpath = ''; + let connectedtagpath = ''; - if(props.connectedtagpath){ + if (props.connectedtagpath) { connectedtagpath = props.connectedtagpath; } - - let pathsplitted :string[] = connectedtagpath ? connectedtagpath.split('/') : []; - pathsplitted = pathsplitted.filter(function (x) { return x != ""; }); + + let pathsplitted: string[] = connectedtagpath + ? connectedtagpath.split('/') + : []; + pathsplitted = pathsplitted.filter(function (x) { + return x != ''; + }); var copy = [...pathsplitted]; - let path: string[] = [] + let path: string[] = []; - pathsplitted.forEach(element => { - path.push(`/${copy.join('/')}/`) + pathsplitted.forEach((element) => { + path.push(`/${copy.join('/')}/`); copy.pop(); - }); + }); - const {loading, error, data } = - useQuery<{ tags: Array }>(breadcrumbQuery,{ - variables:{ + const { loading, error, data } = useQuery<{ tags: Array }>( + breadcrumbQuery, + { + variables: { paths: path, - lang: i18n.languages[0] ?? "sv", - siteurl: props.env.CONTENTBACKEND_SITEURL - } - }); + lang: i18n.languages[0] ?? 'sv', + siteurl: props.env.CONTENTBACKEND_SITEURL, + }, + } + ); + + const breadcrumb = + !loading && data && data.tags + ? //sort the paths by most number of "/" + data.tags.sort((a, b) => { + let aNum = (a.connectedTagPath.match(/\//g) || []).length; + let bNum = (b.connectedTagPath.match(/\//g) || []).length; - const breadcrumb = !loading && data && data.tags? - //sort the paths by most number of "/" - data.tags.sort((a,b) => { - let aNum = (a.connectedTagPath.match(/\//g) || []).length; - let bNum = (b.connectedTagPath.match(/\//g) || []).length; + if (aNum > bNum) return 1; + if (aNum < bNum) return -1; + return 0; + }) + : []; - if(aNum > bNum) return 1; - if(aNum < bNum) return -1; - return 0; - }) - : - []; - - return( -
- {loading && ( -
    -
  • -
- )} - {!loading && data && data!.tags && ( -
    -
  • - {i18n.t('common|home-text')} -
  • - {data!.tags.map((n, index) => { - return ( -
  • - {n.title} -
  • - ); - })} -
- )} -
+ return ( +
+ {loading && ( +
    +
  • +
+ )} + {!loading && data && data!.tags && ( +
    +
  • + + {i18n.t('common|home-text')} + +
  • + {data!.tags.map((n, index) => { + return ( +
  • + {/* */} + + {n.title} + + {/* */} +
  • + ); + })} +
+ )} +
); }; diff --git a/src/components/Search/EntryScape.ts b/src/components/Search/EntryScape.ts index 1d014051..84411425 100644 --- a/src/components/Search/EntryScape.ts +++ b/src/components/Search/EntryScape.ts @@ -287,6 +287,8 @@ export class EntryScape { values['inScheme_resource'] = metadata.find(null, "http://www.w3.org/2004/02/skos/core#inScheme").map((f:any) => {return f.getValue()} ); + values['modified'] = metadata.find(null, "http://purl.org/dc/terms/modified").map((f:any) => {return f.getValue()} ); + //theme needs to be translated //if(values['theme_literal']) //values['theme_literal'] = i18next.t('facetvalues|'+values['theme_literal']); @@ -430,7 +432,7 @@ export class EntryScape { esQuery.sort('modified+asc'); break; case SearchSortOrder.modified_desc: - esQuery.sort('modified+desc'); + esQuery.sort('metadata.predicate.literal_s.3e2f60da+desc'); break; case SearchSortOrder.score_desc: esQuery.sort('score+desc'); @@ -543,7 +545,7 @@ export class EntryScape { }; - + if(hitSpecification.pathResolver) hit.url = hitSpecification.pathResolver(child); diff --git a/src/pages/DetailPages/DataServicePage.tsx b/src/pages/DetailPages/DataServicePage.tsx index f41b9b06..9a251787 100644 --- a/src/pages/DetailPages/DataServicePage.tsx +++ b/src/pages/DetailPages/DataServicePage.tsx @@ -143,7 +143,9 @@ export class DataServicePage extends React.Component< run: function(node, data, items, entry) { var v = entry.getMetadata().findFirstValue(null, 'dcterms:license'); if (v.indexOf("http://creativecommons.org/") === 0) { + var variant; + if (v === "http://creativecommons.org/publicdomain/zero/1.0/") { variant = "Creative Commons"; } else if (v.indexOf("http://creativecommons.org/licenses/") === 0) { diff --git a/src/pages/DetailPages/DataSetPage.tsx b/src/pages/DetailPages/DataSetPage.tsx index 7db935c3..f7e76e64 100644 --- a/src/pages/DetailPages/DataSetPage.tsx +++ b/src/pages/DetailPages/DataSetPage.tsx @@ -292,6 +292,13 @@ export class DataSetPage extends React.Component< } }, }, + { + block: 'costIndicator2', + extends: 'template', + template: '{{#ifprop "schema:offers"}}' + + 'Avgift{{/ifprop}}', + }, + { block: 'distributionList2', extends: 'list', @@ -375,15 +382,18 @@ export class DataSetPage extends React.Component< robotsIndex={true} lang={i18n.languages[0]} socialMeta={{ - socialDescription : entry.description, - socialTitle : entry.title, - socialUrl : entry && entry.title - ? `${this.props.env.CANONICAL_URL}/${ - i18n.languages[0] - }/${i18n.t('routes|datasets|path')}/${ - this.props.match.params.cid - }_${this.props.match.params.eid}/${slugify(entry.title)}` - : '' + socialDescription: entry.description, + socialTitle: entry.title, + socialUrl: + entry && entry.title + ? `${this.props.env.CANONICAL_URL}/${ + i18n.languages[0] + }/${i18n.t('routes|datasets|path')}/${ + this.props.match.params.cid + }_${this.props.match.params.eid}/${slugify( + entry.title + )}` + : '', }} canonicalUrl={ entry && entry.title @@ -433,8 +443,8 @@ export class DataSetPage extends React.Component< {/* Left column */} {/* Left column */}
- {/* Title */} -

{entry.title}

+ {/* Title */} +

{entry.title}

{/* Publisher */}