//https://stackoverflow.com/questions/40764596/using-react-router-with-cdn-and-without-webpack-or-browserify const Router = window.ReactRouterDOM.BrowserRouter; const Link = window.ReactRouterDOM.Link; const NavLink = window.ReactRouterDOM.NavLink; //const Prompt = window.ReactRouterDOM.Prompt; const Switch = window.ReactRouterDOM.Switch; const Route = window.ReactRouterDOM.Route; //const Redirect = window.ReactRouterDOM.Redirect; const BrowserRouter = window.ReactRouterDOM.BrowserRouter; class Hoved extends React.Component { constructor(props) { super(props); this.state = { prosjekter:[], images:[], descriptions:[], awards:[], contact:[], publications:[], menuopen:false } this.toggleMenyHvisIkkeVid = this.toggleMenyHvisIkkeVid.bind(this); this.toggleMeny = this.toggleMeny.bind(this); this.lukkMeny = this.lukkMeny.bind(this); } componentDidMount() { window.gapi.load("client", this.initClient); /* fetch("/data/projects.tsv") .then( response => {return response.text() }) .then( data => { this.setState({ prosjekter: dataTilArray(data) }); }); fetch("/data/awards.tsv") .then( response => {return response.text() }) .then( data => { this.setState({ awards: dataTilArray(data) }); }); */ } lastProjects() { window.gapi.client.load("sheets", "v4", () => { window.gapi.client.sheets.spreadsheets.values .get({ spreadsheetId: "1lUrLXIh37zHRKQLWdhEt3pr9WtMCHsFIEEBddxfc4O0", range: "projects!A:H", }) .then( response => { const data = response.result.values; this.setState({ prosjekter: data }); } ); }); } lastImages() { window.gapi.client.load("sheets", "v4", () => { window.gapi.client.sheets.spreadsheets.values .get({ spreadsheetId: "1lUrLXIh37zHRKQLWdhEt3pr9WtMCHsFIEEBddxfc4O0", range: "images!A:F", }) .then( response => { const data = response.result.values; this.setState({ images: data }); } ); }); } lastDescriptions() { window.gapi.client.load("sheets", "v4", () => { window.gapi.client.sheets.spreadsheets.values .get({ spreadsheetId: "1lUrLXIh37zHRKQLWdhEt3pr9WtMCHsFIEEBddxfc4O0", range: "descriptions!A:D", }) .then( response => { const data = response.result.values; this.setState({ descriptions: data }); } ); }); } lastAwards() { window.gapi.client.load("sheets", "v4", () => { window.gapi.client.sheets.spreadsheets.values .get({ spreadsheetId: "1lUrLXIh37zHRKQLWdhEt3pr9WtMCHsFIEEBddxfc4O0", range: "awards!A:C", }) .then( response => { const data = response.result.values; this.setState({ awards: data }); } ); }); } lastPublications() { window.gapi.client.load("sheets", "v4", () => { window.gapi.client.sheets.spreadsheets.values .get({ spreadsheetId: "1lUrLXIh37zHRKQLWdhEt3pr9WtMCHsFIEEBddxfc4O0", range: "publications!A:F", }) .then( response => { const data = response.result.values; this.setState({ publications: data }); } ); }); } lastContact() { window.gapi.client.load("sheets", "v4", () => { window.gapi.client.sheets.spreadsheets.values .get({ spreadsheetId: "1lUrLXIh37zHRKQLWdhEt3pr9WtMCHsFIEEBddxfc4O0", range: "contact!A:E", }) .then( response => { const data = response.result.values; this.setState({ contact: data }); } ); }); } initClient = () => { // 2. Initialize the JavaScript client library. window.gapi.client .init({ apiKey: "AIzaSyBkik3aO3MngLMz-S60lcwrt8Ds4KqhYgU", // Your API key will be automatically added to the Discovery Document URLs. discoveryDocs: ["https://sheets.googleapis.com/$discovery/rest?version=v4"], }) .then(() => { // 3. Initialize and make the API request. this.lastProjects(); this.lastImages(); this.lastDescriptions(); this.lastAwards(); this.lastPublications(); this.lastContact(); }); }; render() { let innhold = ""; let prosjekter = this.state.prosjekter; let awards = this.state.awards; let publications = this.state.publications; let images = this.state.images; let descriptions = this.state.descriptions; let contact = this.state.contact; let utvalgBuilt = []; let utvalgUnbuilt = []; let utvalgCompetition = []; let utvalgAll = []; if (prosjekter.length) { for(let i=1; i
{images.length ? : null}
{images.length && descriptions.length && } {prosjekter.length && images.length && } {prosjekter.length && images.length && } {prosjekter.length && images.length && } {prosjekter.length && images.length && } {
}
{} {} {awards.length && } {} {awards.length && } {prosjekter.length && images.length && descriptions.length && ( )}> }
); } toggleMenyHvisIkkeVid(e) { if (window.innerWidth < 1801 || window.innerHeight < 1200) { this.setState({ menuopen: !this.state.menuopen }); } } toggleMeny(e) { this.setState({ menuopen: !this.state.menuopen }); } lukkMeny(e) { this.setState({ menuopen: false }); } } class Forside extends React.Component { constructor(props) { super(props); let bilder = this.props.bilder; let slides = []; for (let i = 1; i < bilder.length; i++) { if (bilder[i][3]) { slides.push(bilder[i][1]); } } //hent ut nyhetsdataene let desc = this.props.descriptions; let nyheter = []; for (let i = 1; i < desc.length; i++) { if (desc[i][0] == "news") { if (desc[i][1] == "avsnitt" && nyheter["avsnitt2"]) { nyheter["avsnitt3"] = } else if (desc[i][1] == "avsnitt" && nyheter["avsnitt"]) { nyheter["avsnitt2"] = } else if (desc[i][1] == "avsnitt") { nyheter[desc[i][1]] = } else { nyheter[desc[i][1]] = desc[i][3]; } } } if (Object.keys(nyheter).length) { this.state = { nyhetsynlig: true, } } else { this.state = { nyhetsynlig: false, } } this.slides = slides; this.nyheter = nyheter; } componentDidMount() { document.title = "Hølmebakk Øymo"; } render() { let nyheter = this.nyheter; return ( {this.state.nyhetsynlig &&

NEWS

{nyheter["overskrift"]}

{nyheter["avsnitt"]}

{nyheter["avsnitt2"] &&

{nyheter["avsnitt2"]}

} {nyheter["avsnitt3"] &&

{nyheter["avsnitt3"]}

}

{nyheter["dato"]}

NEWS

{nyheter["overskrift"]}

{nyheter["avsnitt"]}

{nyheter["avsnitt2"] &&

{nyheter["avsnitt2"]}

} {nyheter["avsnitt3"] &&

{nyheter["avsnitt3"]}

}

{nyheter["dato"]}

}
); } } class Prosjekterside extends React.Component { constructor(props) { super(props); } componentDidMount() { document.title = this.props.filter + " - Hølmebakk Øymo"; } componentWillUnmount() { document.body.onkeydown = null; } componentDidUpdate() { document.title = this.props.filter + " - Hølmebakk Øymo"; } render() { let ps = this.props.prosjektliste; let filter = this.props.filter; let bilder = this.props.bilder; let bildeindex = []; for (let i=1; i
{ps[i][1]}

{ps[i][1]}{ps[i][3]} {ps[i][4]}

); } return (
{kort}
); } } class Prosjektside extends React.Component { constructor(props) { super(props); let dette = this.props.prosjekt; let p = this.props.prosjektliste.find(pro => dette === pro[0]); let bilder = this.props.bilder; let descriptions = this.props.descriptions; let fakta = []; let tekst = []; tekst.push(

{p[1]}
{p[3]} {p[4]}

); for (let i=1; i{descriptions[i][3]}

); } if (descriptions[i][1] == "avsnitt") { tekst.push(

{descriptions[i][3]}

); } } } let bildeindex = []; bildeindex['photos'] = []; bildeindex['drawings'] = []; bildeindex['map'] = []; for (let i=1; i { if (this.state.nummer > 0) { this.setState({ nummer: this.state.nummer-1 }); } else { if (this.state.utvalg == "drawings" && this.bildeindex["photos"].length) { this.setState({ utvalg: "photos", nummer: this.bildeindex["photos"].length-1 }); } else if (this.state.utvalg == "text") { this.setState({ utvalg: "drawings", nummer: this.bildeindex["drawings"].length-1 }); } } /*this.setState({ forrige: true });//lager markering/animasjon ved endring setTimeout(() => { this.setState({ forrige: false }); }, 100);*/ } nesteBilde = () => { if (this.state.nummer != this.bildeindex[this.state.utvalg].length-1) { this.setState({ nummer: this.state.nummer+1 }); } else { if (this.state.utvalg == "photos") { this.setState({ utvalg: "drawings", nummer: 0 }); } else if (this.state.utvalg == "drawings") { this.setState({ utvalg: "text", nummer: 0 }); } } /*this.setState({ neste: true });//lager markering/animasjon ved endring setTimeout(() => { this.setState({ neste: false }); }, 100);*/ } apenUtvalg(u) { this.setState({ utvalg: u, nummer: 0 }); } render() { let p = this.p; let nr = this.state.nummer; let utvalg = this.state.utvalg; let bildeindex = this.bildeindex; let visProsjektmeny = true; if ((window.innerWidth < 1801 || window.innerHeight < 1200) && window.innerWidth > 1000 && this.props.menuopen) { visProsjektmeny = false; } let fhake = ""; let nhake = ""; if (this.state.forrige) { fhake = } else { fhake = } if (this.state.neste) { nhake = } else { nhake = } return (
{ utvalg == "photos" || utvalg == "drawings" ?
{
}
:
{this.tekst}
{this.fakta}
} { visProsjektmeny &&
{fhake} {nhake}
{ bildeindex['photos'].length ? : null } { bildeindex['drawings'].length ? : null } { bildeindex['map'].length ? : null } { !bildeindex['photos'].length &&
 
} { !bildeindex['drawings'].length &&
 
} { !bildeindex['map'].length &&
 
}

{p[1]}

{p[3]} {p[4]}

}
); } } class Prosjektkart extends React.Component { constructor(props) { super(props); } componentDidMount() { document.title = "Project map - Hølmebakk Øymo"; const s = document.createElement('script'); s.type = 'text/javascript'; s.async = true; s.defer = true; s.src = "https://maps.googleapis.com/maps/api/js?key=AIzaSyBOqF0qwjBMVVSsriD-cgjywJxYXQfT6sY&callback=initMap"; this.instance.appendChild(s); } render() { return (
(this.instance = e)} /> ); } } function hentKartsteder() { return [ ["Vøringfossen", 60.42657, 7.25146, "/?a=projects&b=voringsfossen"], ["Krokstien 23", 65.455675, 12.193471, "/?a=projects&b=bronnoysund"], ["Jektvik Ferry Quay Area",66.62432,13.28641, "/?a=projects&b=jektvik"], ["Strømbu",61.92163,10.05304, "/?a=projects&b=strombu"], ["Bjerkebæk Visitors Center",61.12286,10.46956, "/?a=projects&b=bjerkebaek"], ["City Block",63.432640,10.397793, "/?a=projects&b=cityblock"], ["Sohlbergplassen Viewpoint",61.88036,10.18544, "/?a=projects&b=sohlbergplassen"], ["Mortuary at Asker Crematorium",59.843210,10.434864, "/?a=projects&b=mortuary"], ]; } function setMarkers(map) { // Hentes av Google sitt kartskript og setter merker på hagekartet. let hager = hentKartsteder(); for (var i = 0; i < hager.length; i++) { var hage = hager[i]; var marker = new google.maps.Marker({ position: {lat: hage[1], lng: hage[2]}, map: map, label: hage[0].split(" ")[0], title: hage[0], url: hage[3] }); google.maps.event.addListener(marker, 'click', function() { window.location.href = this.url; }); } } function initMap() { document.getElementById('map').setAttribute("style", "width:100%; height:100vh;position:relative;"); var map = new google.maps.Map(document.getElementById('map'), { zoom: 4.8, center: {lat: 63.448260, lng: 17} }); setMarkers(map); } class Studioside extends React.Component { constructor(props) { super(props); } componentDidMount() { document.title = this.props.sub.charAt(0).toUpperCase() + this.props.sub.slice(1) + " - - Hølmebakk Øymo"; } componentDidUpdate() { document.title = this.props.sub.charAt(0).toUpperCase() + this.props.sub.slice(1) + " - - Hølmebakk Øymo"; } render() { let publications = this.props.publications; if (publications && publications.length) { var pubrader = []; for (let i=0; i{publications[i][j]}; rad.push(celle); } pubrader.push({rad}); } } let contact = this.props.contact; if (contact && contact.length) { var conrader = []; for (let i=1; i

{contact[i][0]}
{contact[i][1]}

{contact[i][2]}
{contact[i][3]}

{contact[i][4]}

); } } let descriptions = this.props.descriptions; if (descriptions && descriptions.length) { var descrader = []; descrader.push(); for (let i=1; i{descriptions[i][3]}

); } } } return ( {(this.props.sub == "contact" || !this.props.sub.length) &&

Contact

Sofies gate 70
0168 Oslo
Norway

+47 22 46 76 00

post@holmebakkoymo.no
applications@holmebakkoymo.no

{conrader &&
{conrader}
}
} {this.props.sub == "about" && descrader && descrader.length &&
{descrader}
} {this.props.sub == "awards" &&

Prizes, awards and nominations

Competition prizes and mentiones

} {this.props.sub == "publications" && pubrader &&

Publications

{pubrader}
} {this.props.sub == "exhibitions" &&

Exhibitions and Media

}
); } } /* Feilsiden */ class PageNotFound extends React.Component{ componentDidMount() { document.title = "Page Not Found (404)"; } render() { return (

Page not found (404)

Sorry, we couldn't find the page you requested. Please try another adress/URL.

); } } class Slideshow extends React.Component { constructor(props) { super(props); this.state = { slide: 0, slideBilde: [ "/code/gray1100px.jpg" ], } let s = this.props.slides; shuffleArray(s); this.slides = s; } componentDidMount() { this.skiftSlide();//fiks overgang på første this.timer = setTimeout(() => this.skiftSlide(), 1750);//1.5, men kompenserer med 250 pga. lastetid this.timer = setTimeout(() => this.skiftSlide(), 4250); this.timer = setTimeout(() => this.startCarousel(), 4250); } componentWillUnmount() { clearTimeout(this.timer); clearInterval(this.carouselInterval); } startCarousel() { //console.log("start karusell"); this.carouselInterval = setInterval(() => { this.skiftSlide(); }, 4000); } skiftSlide() { //console.log("i transition", this.state.slide); let nr = this.state.slide; if (nr == this.slides.length) nr = 0; fetch("/images_1100px/" + this.slides[nr]) .then(response => response.blob()) .then(images => { this.setState({ slideBilde: URL.createObjectURL(images), slide:nr+1 }); //console.log(this.slides[nr], nr); //window.setTimeout(console.log("test"),5000); }) }; render() { return (
); } } /* Skriver ut inndata som en enkel tabell */ class AwardsTable extends React.Component { constructor(props) { super(props); } render() { let data = this.props.data.slice(); let type = this.props.type; let utvalg = []; for (let i=0; i{data[0][j]}; rad.push(celle); } rader.push({rad}); //innhold for (let i=0; i{utvalg[i][j]}; rad.push(celle); } rader.push({rad}); } return ( {rader}
); } } function kommaLinjeskift(s) { s = s.split(","); s = s.map(e =>
  • {e}
  • ); return
      {s}
    ; } /* Gjør rå csv-tekst om til en todimensjonal array. */ function dataTilArray(data) { let d = data; d = d.split("\n"); d = d.map(e => e.split("\t")); return d; } /* lånt funksjon for å "stokke" array */ function shuffleArray(array) { for (let i = array.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [array[i], array[j]] = [array[j], array[i]]; } } /* setter inn et svg-ikon */ function lagIkon(ikon, stroke="#666", fill="#666", strokeWidth="10") { let ikonStyle = {stroke:stroke, fill:fill, strokeWidth:strokeWidth}; let s2 = {stroke:stroke, fill:"none", strokeWidth:"2"}; let s3 = {stroke:stroke, fill:"none", strokeWidth:"3"}; let s4 = {stroke:stroke, fill:"none", strokeWidth:"4"}; let s5 = {stroke:stroke, fill:"none", strokeWidth:"5"}; let s7 = {stroke:stroke, fill:"none", strokeWidth:"7"}; let s10 = {stroke:stroke, fill:"none", strokeWidth:"10"}; let s15 = {stroke:stroke, fill:"none", strokeWidth:"15"}; let s20 = {stroke:stroke, fill:"none", strokeWidth:"20"}; if (ikon == "firkant") { return ; } if (ikon == "blyant") { return ; } if (ikon == "folk") { return ; } if (ikon == "hake") { let pStyle = {stroke:stroke, fill:"none", strokeWidth:"20"}; return ; } if (ikon == "hoyde") { return ; } if (ikon == "lastned") { return ; } if (ikon == "lukk") { return ; } if (ikon == "minus") { return ; } if (ikon == "nedhake") { return ; } if (ikon == "opphake") { return ; } if (ikon == "venstrehake") { return ; } if (ikon == "hoyrehake") { return ; } if (ikon == "pluss") { return ; } if (ikon == "severdighet") { return ; } if (ikon == "sok") { return ; } /* linjer - data/hamburgermeny */ if (ikon == "linjer") { return } if (ikon == "tekst") { return ; } if (ikon == "turbin") { return ; } if (ikon == "venstreblyant") { return ; } } /* ulike sorteringsfunksjoner */ function sorterTallFallende(liste,par) { liste.sort(function(a,b) { let valA = parseFloat(a); let valB = parseFloat(b); if(!a[par] || isNaN(parseFloat(a[par]))) return 1; if(!b[par] || isNaN(parseFloat(b[par]))) return -1; return b[par] - a[par]; }); } function sorterTallStigende(liste,par) { liste.sort(function(a,b) { let valA = parseFloat(a); let valB = parseFloat(b); if(!a[par] || isNaN(parseFloat(a[par]))) return 1; if(!b[par] || isNaN(parseFloat(b[par]))) return -1; return a[par] - b[par]; }); } function sorterTekstAlfabetisk(liste,par) { liste.sort(function(a,b) { if(!a[par]) return 1; if(!b[par]) return -1; return a[par] > b[par] ? 1 : -1; }); } function sorterTekstMotsattAlfabetisk(liste,par) { liste.sort(function(a,b) { if(!a[par]) return 1; if(!b[par]) return -1; return a[par] < b[par] ? 1 : -1; }); } function sorterHøyMiddelsLav(liste,par) { liste.sort(function(a,b) { let valA = 0; let valB = 0; if(a[par] == "Lav") { valA = 1; } else if (a[par] == "Middels") { valA = 2; } else if (a[par] == "Høy") { valA = 3; } if(b[par] == "Lav") { valB = 1; } else if (b[par] == "Middels") { valB = 2; } else if (b[par] == "Høy") { valB = 3; } return valB - valA; }); } function sorterGodMiddelsDårlig(liste,par) { liste.sort(function(a,b) { let valA = 0; let valB = 0; if(a[par] == "Dårlig") { valA = 1; } else if (a[par] == "Middels") { valA = 2; } else if (a[par] == "God") { valA = 3; } if(b[par] == "Dårlig") { valB = 1; } else if (b[par] == "Middels") { valB = 2; } else if (b[par] == "God") { valB = 3; } return valB - valA; }); } function sorterArraystørrelse(liste,par) { liste.sort(function(a,b) { return a[par].length < b[par].length ? 1 : -1; }); } ReactDOM.render(, document.getElementById('root'));