diff --git a/src/components/Router.js b/src/components/Router.js index fb337f9d5c430a365e9e875381287cdd2af73b63..5d14a77cdd9d35bf475dd3634723bcebc18acbba 100644 --- a/src/components/Router.js +++ b/src/components/Router.js @@ -1,4 +1,6 @@ +const Container = require('./views/Container'); const Header = require('./views/header'); +const Menu = require('./views/menu'); const Main = require('./views/main'); const Footer = require('./views/footer'); const Search = require('./views/search'); @@ -19,7 +21,7 @@ const Router = async function (state) { if (status === 200) { state.main.doc = data; //Just to avoid extra ajax calls but we can have multiple relationships here - if(state.main.doc.record_type_s || state.main.doc.record_type_s === 'Person') { + if (state.main.doc.record_type_s || state.main.doc.record_type_s === 'Person') { //Removing orcid.org to have better matches state.main.doc.id = state.main.doc.id.replace("https://orcid.org/", ""); //state.main.doc.id = encodeURIComponent(state.main.doc.id); @@ -34,9 +36,9 @@ const Router = async function (state) { state.main.related = res.data.docs || []; } } - app.innerHTML = [Header(state), Search(state), ViewDoc(state), Footer(state)].join(''); + app.innerHTML = [Header(state), Menu(state), Container([Search(state), ViewDoc(state)]), Footer(state)].join(''); } else { - app.innerHTML = [Header(state), Search(state), ViewError(state), Footer(state)].join(''); + app.innerHTML = [Header(state), Menu(state), Container([Search(state), ViewError(state)]), Footer(state)].join(''); } } if (verb === '#search/') { @@ -55,13 +57,13 @@ const Router = async function (state) { state.main.docs = data.docs; state.main.numFound = data.numFound; state.main.searchText = searchText; - app.innerHTML = [Header(state), Search(state), Main(state), Footer(state)].join(''); + app.innerHTML = [Header(state), Menu(state), Container([Search(state), Main(state)]), Footer(state)].join(''); const input = document.getElementById('text-to-search'); if (input) { input.value = searchText; } } else { - app.innerHTML = [Header(state), Search(state), ViewError(state), Footer(state)].join(''); + app.innerHTML = [Header(state), Menu(state), Container([Search(state), ViewError(state)]), Footer(state)].join(''); } } } else { @@ -70,9 +72,9 @@ const Router = async function (state) { state.main.docs = data.docs; state.main.numFound = data.numFound; state.main.searchText = ''; - app.innerHTML = [Header(state), Search(state), Main(state), Footer(state)].join(''); + app.innerHTML = [Header(state), Menu(state), Container([Search(state), Main(state)]), Footer(state)].join(''); } else { - app.innerHTML = [Header(state), Search(state), ViewError(state), Footer(state)].join(''); + app.innerHTML = [Header(state), Menu(state), Container([Search(state), ViewError(state)]), Footer(state)].join(''); } } }; diff --git a/src/components/SolrService.js b/src/components/SolrService.js index 42d50174cb6f1d0b36a74415607787327fe7ca52..1567a103fa8f116845afc39cfd5468d61b0e5f03 100644 --- a/src/components/SolrService.js +++ b/src/components/SolrService.js @@ -16,7 +16,6 @@ const SolrService = { get: async function (config, data) { try { let param = `get?id=`; - //Twice encoded, once for html one for solr data = encodeURIComponent(`${data}`); const req = await axios.get(`${config.api}/${param}${data}`); if (req.data) { @@ -31,9 +30,6 @@ const SolrService = { search: async function (config, {start: start, page: page, searchParam: searchParam, text: text}) { try { let param = `select?q=`; - //Twice encoded, once for html one for solr - //let data = encodeURIComponent(`${text}`); - //data = encodeURIComponent(`${text}`); if (text === '' || !text) { text = '*'; } diff --git a/src/components/views/Container.js b/src/components/views/Container.js new file mode 100644 index 0000000000000000000000000000000000000000..5d165a5c9f9a81660f6e55519c1c8ab62e06aa0f --- /dev/null +++ b/src/components/views/Container.js @@ -0,0 +1,7 @@ +const Container = function (data) { + const html = `<div class="content-inside">`; + const endhtml = `</div>`; + return [html, ...data, endhtml].join(''); +}; + +module.exports = Container; \ No newline at end of file diff --git a/src/components/views/Footer.js b/src/components/views/Footer.js index 2def709121a52ccfe303c3d250becea4f1492a7c..8906e5910fdd606eef8ea9ba58128ed81033053f 100644 --- a/src/components/views/Footer.js +++ b/src/components/views/Footer.js @@ -1,17 +1,17 @@ const Footer = function (data) { - return ''/* + return ` <footer class="footer"> <div class="container"> <div class="row"> <div class="col-md-10"> <div class="copyright"> - <p class="font-weight-light small">© copyright</p> + <p class="font-weight-light small">© ${data.footer.text}</p> </div> </div> </div> </div> </footer> - `*/ + ` }; module.exports = Footer; \ No newline at end of file diff --git a/src/components/views/Main.js b/src/components/views/Main.js index c1ff76e24a7b0cd340dda79970986462bb3f50ac..d312824611b65aa1baff4c1516d9f839d7423ff7 100644 --- a/src/components/views/Main.js +++ b/src/components/views/Main.js @@ -3,13 +3,21 @@ const ListDocs = require('./ListDocs'); const Pagination = require('./Pagination'); const Main = function (data) { - let html = ''; + let html = `<div class="maincontent-body"> +<div><br/></div> + +`; html = [ListDocs(data), Pagination(data)].join(''); - html += `<div class="container"> - <div class="text-center"> - <p>Results: ${data.main.numFound}</p> - </div>`; + html += ` + <div class="container"> + <div class="text-center"> + <p>Results: ${data.main.numFound}</p> + </div> + </div> + <div><br/></div> + </div> +`; return html; }; diff --git a/src/components/views/Menu.js b/src/components/views/Menu.js new file mode 100644 index 0000000000000000000000000000000000000000..29f42301b97a8c36c1972111147705f558bf501c --- /dev/null +++ b/src/components/views/Menu.js @@ -0,0 +1,19 @@ +const Menu = function (data) { + return ` +<nav class="navbar navbar-expand-lg navbar-dark bg-black"> + <a class="navbar-brand" style="visibility: hidden" href="">Data Portal</a> + <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> + <span class="navbar-toggler-icon"></span> + </button> + <div class="collapse navbar-collapse" id="navbarNav"> + <ul class="navbar-nav"> + <li class="nav-item active"> + <a class="nav-link" href="/">Home <span class="sr-only">(current)</span></a> + </li> + </ul> + </div> +</nav> + ` +}; + +module.exports = Menu; \ No newline at end of file diff --git a/src/components/views/Search.js b/src/components/views/Search.js index e495f329961ffa75de11666cb79aa7b01bb7e6b3..f2d1ff0a64247f6554e097c8d48cdf04e967227f 100644 --- a/src/components/views/Search.js +++ b/src/components/views/Search.js @@ -1,6 +1,7 @@ const Search = function (data) { return ` - <div class=""> + <div class="container"> + <div class="row"><br/></div> <div class="row no-gutters align-items-center"> <div class="col-md-2"></div> <div class="col-md-8"> diff --git a/src/index.js b/src/index.js index b950518e5108fbf02b349142124880fabb7f2431..5ad51be1fc742f567457b5276ac20aac1c357d32 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,3 @@ -import * as $ from 'jquery'; -//import 'bootstrap/dist/css/bootstrap.min.css'; import 'bootstrap'; import './styles/styles.scss'; import './images/logo.svg'; @@ -45,6 +43,9 @@ let state = { {display: "SubDoc", field: "contactPoint", fieldName: 'Contact Point', template: '${item.name} ${item.email}'}, ] }, + footer:{ + text: '2019 University of Technology Sydney' + }, config: config }; diff --git a/src/styles/styles.scss b/src/styles/styles.scss index 42081db222fcffd27b54a88ac2c79f40694ec810..6948c55b87810601e5ddb573a7a09eeb5a42bca0 100644 --- a/src/styles/styles.scss +++ b/src/styles/styles.scss @@ -6,7 +6,7 @@ $over-color: black; $navbar-light-color: rgba($over-color, .5) !default; $navbar-light-hover-color: rgba($over-color, .7) !default; $navbar-light-active-color: rgba($over-color, .9) !default; -$background-color: #ebebeb; +$background-color: #000000; $search-header-background-image: none; /*url("../assets/images/search-header-bg.jpg"); /*url("../assets/images/devon-divine-1348025-unsplash.jpg");*/ diff --git a/src/styles/theme.scss b/src/styles/theme.scss index 6942f36ef3d8163ea702a0a0f923523e2b3c8f54..1cccca20b892a72631080ed1ee289bb2b266c6e9 100644 --- a/src/styles/theme.scss +++ b/src/styles/theme.scss @@ -1,3 +1,7 @@ +.bg-black{ + background-color: $background-color; +} + [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { display: none !important; } diff --git a/webpack.config.js b/webpack.config.js index 6ec2d1a60b4d2138497bf1bf0f245a0096b109ed..a62febd3230638df113fb60b19f0b47b26e6c7ec 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,3 +1,4 @@ +const webpack = require('webpack'); const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); @@ -13,9 +14,15 @@ module.exports = { // optimization: { // minimizer: [new UglifyJsPlugin()] // }, - plugins: [new HtmlWebpackPlugin({ - title:'Data Portal', - template: 'src/index.html'})],//Keep this file as is. We should manage html in JS + plugins: [new webpack.ProvidePlugin({ // inject ES5 modules as global vars + $: 'jquery', + jQuery: 'jquery', + 'window.jQuery': 'jquery', + Tether: 'tether' + }), new HtmlWebpackPlugin({ + title: 'Data Portal', + template: 'src/index.html' + })],//Keep this file as is. We should manage html in JS devServer: { contentBase: path.join(__dirname, 'dist'), port: 9000,