Compare commits

..

3 Commits

Author SHA1 Message Date
MirnaM
59723410b6 Update README 2019-04-30 09:47:50 +02:00
MirnaM
51ed3551c7 Use default postgres port 2019-04-30 09:19:52 +02:00
MirnaM
58177a8cce Add dockerfile 2019-04-30 09:06:46 +02:00
13 changed files with 194 additions and 1440 deletions

48
Dockerfile Normal file
View File

@@ -0,0 +1,48 @@
#
# example Dockerfile for https://docs.docker.com/engine/examples/postgresql_service/
#
FROM ubuntu:16.04
# Add the PostgreSQL PGP key to verify their Debian packages.
# It should be the same key as https://www.postgresql.org/media/keys/ACCC4CF8.asc
RUN apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8
# Add PostgreSQL's repository. It contains the most recent stable release
# of PostgreSQL, ``9.3``.
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main" > /etc/apt/sources.list.d/pgdg.list
# Install ``python-software-properties``, ``software-properties-common`` and PostgreSQL 9.3
# There are some warnings (in red) that show up during the build. You can hide
# them by prefixing each apt-get statement with DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y python-software-properties software-properties-common postgresql-9.3 postgresql-client-9.3 postgresql-contrib-9.3
# Note: The official Debian and Ubuntu images automatically ``apt-get clean``
# after each ``apt-get``
# Run the rest of the commands as the ``postgres`` user created by the ``postgres-9.3`` package when it was ``apt-get installed``
USER postgres
# Create a PostgreSQL role named ``docker`` with ``docker`` as the password and
# then create a database `docker` owned by the ``docker`` role.
# Note: here we use ``&&\`` to run commands one after the other - the ``\``
# allows the RUN command to span multiple lines.
RUN /etc/init.d/postgresql start &&\
psql --command "CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" &&\
createdb -O docker marketalerts
# Adjust PostgreSQL configuration so that remote connections to the
# database are possible.
RUN echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/9.3/main/pg_hba.conf
# And add ``listen_addresses`` to ``/etc/postgresql/9.3/main/postgresql.conf``
RUN echo "listen_addresses='*'" >> /etc/postgresql/9.3/main/postgresql.conf
# Expose the PostgreSQL port
EXPOSE 5432
# Add VOLUMEs to allow backup of config, logs and databases
VOLUME ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"]
# Set the default command to run when starting the container
CMD ["/usr/lib/postgresql/9.3/bin/postgres", "-D", "/var/lib/postgresql/9.3/main", "-c", "config_file=/etc/postgresql/9.3/main/postgresql.conf"]

View File

@@ -3,10 +3,8 @@
The purpose of this project is to build a web application that enables subscribing to notifications when new products are published on various ad based marketplaces. The MVP will be only based on OLX.ba The purpose of this project is to build a web application that enables subscribing to notifications when new products are published on various ad based marketplaces. The MVP will be only based on OLX.ba
Run postgres image with:
ENV: docker run --name pg_test -d -p 5432:5432 marketalerts
JAWSDB_URL='mysql://sq4dlf9mz49avli0:gqy5vzmzyhp0837x@tuy8t6uuvh43khkk.cbetxkdyhwsb.us-east-1.rds.amazonaws.com:3306/rxhzg1550441ftqk'
Run with: Run with:
$ npm start $ npm start

View File

@@ -1,6 +1,10 @@
{ {
"development": { "development": {
"use_env_variable": "JAWSDB_URL" "username": "docker",
"password": "docker",
"database": "marketalerts",
"port": "5432",
"dialect": "postgres"
}, },
"test": { "test": {
"use_env_variable": "JAWSDB_URL" "use_env_variable": "JAWSDB_URL"

View File

@@ -1,8 +1,23 @@
const db = require('../models/index'); const db = require('../models/index');
const { currentRERequest } = require('../helpers/url'); const { currentRERequest } = require('../helpers/url');
const { regions } = require('../helpers/codes');
const gradovi = regions(); const gradovi = [
{"ime":" Sarajevo","id":"sarajevo"},
{"ime":" Unsko-sanski","id":"unskosanski"},
{"ime":" Posavski","id":"posavski"},
{"ime":" Tuzlanski","id":"tuzlanski"},
{"ime":" Zeničko-dobojski","id":"zenickodobojski"},
{"ime":" Bosansko-podrinjski","id":"bosanskopodrinjski"},
{"ime":" Srednjobosanski","id":"srednjobosanski"},
{"ime":" Hercegovačko-neretvanski","id":"hercegovackoneretvanski"},
{"ime":" Zapadno-hercegovački","id":"zapadnohercegovacki"},
{"ime":" Livanjski","id":"livanjski"},
{"ime":" Banjalučka","id":"banjalučka"},
{"ime":" Dobojsko-Bijeljinska","id":"dobojskobijeljinska"},
{"ime":" Sarajevsko-Zvornička","id":"sarajevskozvornicka"},
{"ime":" Trebinjsko-Fočanska","id":"trebinjskofocanska"},
{"ime":"Distrikt Brčko","id":"distriktbrcko"},
];
const getGrad = (req,res) => { const getGrad = (req,res) => {
@@ -14,11 +29,10 @@ const getGrad = (req,res) => {
} }
const postGrad = async (req, res) => { const postGrad = async (req, res) => {
const request = await currentRERequest(req); let request = await currentRERequest(req);
const nextStep = req.query.nextStep || `/mjesto/${request.uniqueId}`;
request.city = req.body.grad; request.city = req.body.grad;
await request.save(); await request.save();
res.redirect(nextStep) res.send("Result is " + JSON.stringify(request));
} }
module.exports = { module.exports = {

View File

@@ -1,26 +0,0 @@
const db = require('../models/index');
const { currentRERequest } = require('../helpers/url');
const { places } = require('../helpers/codes');
const getMjesto = async (req,res) => {
let request = await currentRERequest(req);
const mjesta = places(request.city);
const nextStep = req.query.nextStep || '/';
res.render('mjesto', {
nextStep,
mjesta
});
}
const postMjesto = async (req, res) => {
let request = await currentRERequest(req);
request.place = req.body.mjesto;
console.log("AAA ", req.body);
await request.save();
res.send("Result is " + JSON.stringify(request));
}
module.exports = {
getMjesto,
postMjesto
};

View File

@@ -1,893 +0,0 @@
const geographies = [
{
"ime":" Sarajevo",
"id":"sarajevo",
"olxid": "9",
"mjesta":[
{
"ime":"Hadžići",
"id":"hadii",
"olxid":"3817"
},
{
"ime":"Ilidža",
"id":"ilida",
"olxid":"3879"
},
{
"ime":"Ilijaš",
"id":"ilija",
"olxid":"3892"
},
{
"ime":"Sarajevo - Centar",
"id":"sarajevocentar",
"olxid":"3812"
},
{
"ime":"Sarajevo-Novi Grad",
"id":"sarajevonovigrad",
"olxid":"3969"
},
{
"ime":"Sarajevo-Novo Sarajevo",
"id":"sarajevonovosarajevo",
"olxid":"5896"
},
{
"ime":"Sarajevo-Stari Grad",
"id":"sarajevostarigrad",
"olxid":"4048"
},
{
"ime":"Trnovo",
"id":"trnovo",
"olxid":"4063"
},
{
"ime":"Vogošća",
"id":"vogoa",
"olxid":"4126"
}
]
},
{
"ime":" Unsko-sanski",
"id":"unskosanski",
"olxid": "9",
"mjesta":[
{
"ime":"Bihać",
"id":"biha",
"olxid":"75"
},
{
"ime":"Bosanska Krupa",
"id":"bosanskakrupa",
"olxid":"373"
},
{
"ime":"Bosanski Petrovac",
"id":"bosanskipetrovac",
"olxid":"504"
},
{
"ime":"Bužim",
"id":"buim",
"olxid":"374"
},
{
"ime":"Cazin",
"id":"cazin",
"olxid":"857"
},
{
"ime":"Ključ",
"id":"klju",
"olxid":"2362"
},
{
"ime":"Sanski Most",
"id":"sanskimost",
"olxid":"3738"
},
{
"ime":"Velika Kladuša",
"id":"velikakladua",
"olxid":"5122"
}
]
},
{
"ime":" Posavski",
"id":"posavski",
"olxid": "15",
"mjesta":[
{
"ime":"Domaljevac",
"id":"domaljevac",
"olxid":"6144"
},
{
"ime":"Odžak",
"id":"odak",
"olxid":"424"
},
{
"ime":"Orašje",
"id":"oraje",
"olxid":"3252"
},
{
"ime":"Šamac",
"id":"amac",
"olxid":"540"
}
]
},
{
"ime":" Tuzlanski",
"id":"tuzlanski",
"olxid": "15",
"mjesta":[
{
"ime":"Banovići",
"id":"banovii",
"olxid":"2"
},
{
"ime":"Doboj-Istok",
"id":"dobojistok",
"olxid":"1090"
},
{
"ime":"Gradačac",
"id":"gradaac",
"olxid":"1854"
},
{
"ime":"Gračanica",
"id":"graanica",
"olxid":"1826"
},
{
"ime":"Kalesija",
"id":"kalesija",
"olxid":"2129"
},
{
"ime":"Kladanj",
"id":"kladanj",
"olxid":"2319"
},
{
"ime":"Lukavac",
"id":"lukavac",
"olxid":"2840"
},
{
"ime":"Sapna",
"id":"sapna",
"olxid":"5699"
},
{
"ime":"Srebrenik",
"id":"srebrenik",
"olxid":"4391"
},
{
"ime":"Teočak",
"id":"teoak",
"olxid":"5010"
},
{
"ime":"Tuzla",
"id":"tuzla",
"olxid":"4944"
},
{
"ime":"Čelić",
"id":"eli",
"olxid":"2801"
},
{
"ime":"Živinice",
"id":"ivinice",
"olxid":"5774"
}
]
},
{
"ime":" Zeničko-dobojski",
"id":"zenickodobojski",
"olxid": "15",
"mjesta":[
{
"ime":"Breza",
"id":"breza",
"olxid":"704"
},
{
"ime":"Doboj-Jug",
"id":"dobojjug",
"olxid":"1122"
},
{
"ime":"Kakanj",
"id":"kakanj",
"olxid":"2022"
},
{
"ime":"Maglaj",
"id":"maglaj",
"olxid":"2941"
},
{
"ime":"Olovo",
"id":"olovo",
"olxid":"1925"
},
{
"ime":"Tešanj",
"id":"teanj",
"olxid":"4594"
},
{
"ime":"Usora",
"id":"usora",
"olxid":"1087"
},
{
"ime":"Vareš",
"id":"vare",
"olxid":"5037"
},
{
"ime":"Visoko",
"id":"visoko",
"olxid":"5171"
},
{
"ime":"Zavidovići",
"id":"zavidovii",
"olxid":"5548"
},
{
"ime":"Zenica",
"id":"zenica",
"olxid":"4571"
},
{
"ime":"Žepče",
"id":"epe",
"olxid":"2940"
}
]
},
{
"ime":" Bosansko-podrinjski",
"id":"bosanskopodrinjski",
"olxid": "15",
"mjesta":[
{
"ime":"Foča",
"id":"foa",
"olxid":"1289"
},
{
"ime":"Goražde",
"id":"gorade",
"olxid":"1588"
},
{
"ime":"Pale",
"id":"pale",
"olxid":"3546"
}
]
},
{
"ime":" Srednjobosanski",
"id":"srednjobosanski",
"olxid": "6",
"mjesta":[
{
"ime":"Bugojno",
"id":"bugojno",
"olxid":"732"
},
{
"ime":"Busovača",
"id":"busovaa",
"olxid":"810"
},
{
"ime":"Dobretići",
"id":"dobretii",
"olxid":"4151"
},
{
"ime":"Donji Vakuf",
"id":"donjivakuf",
"olxid":"1160"
},
{
"ime":"Fojnica",
"id":"fojnica",
"olxid":"1407"
},
{
"ime":"Gornji Vakuf - Uskoplje",
"id":"gornjivakufuskoplje",
"olxid":"1775"
},
{
"ime":"Jajce",
"id":"jajce",
"olxid":"1960"
},
{
"ime":"Kiseljak",
"id":"kiseljak",
"olxid":"2237"
},
{
"ime":"Kreševo",
"id":"kreevo",
"olxid":"2608"
},
{
"ime":"Novi Travnik",
"id":"novitravnik",
"olxid":"3477"
},
{
"ime":"Travnik",
"id":"travnik",
"olxid":"4678"
},
{
"ime":"Vitez",
"id":"vitez",
"olxid":"5422"
}
]
},
{
"ime":" Hercegovačko-neretvanski",
"id":"hercegovackoneretvanski",
"olxid": "7",
"mjesta":[
{
"ime":"Grad Mostar",
"id":"gradmostar",
"olxid":"3017"
},
{
"ime":"Jablanica",
"id":"jablanica",
"olxid":"1930"
},
{
"ime":"Konjic",
"id":"konjic",
"olxid":"2169"
},
{
"ime":"Neum",
"id":"neum",
"olxid":"3111"
},
{
"ime":"Prozor",
"id":"prozor",
"olxid":"3421"
},
{
"ime":"Ravno",
"id":"ravno",
"olxid":"4769"
},
{
"ime":"Stolac",
"id":"stolac",
"olxid":"4439"
},
{
"ime":"Čapljina",
"id":"apljina",
"olxid":"947"
},
{
"ime":"Čitluk",
"id":"itluk",
"olxid":"1009"
}
]
},
{
"ime":" Zapadno-hercegovački",
"id":"zapadnohercegovacki",
"olxid": "8",
"mjesta":[
{
"ime":"Grude",
"id":"grude",
"olxid":"1892"
},
{
"ime":"Ljubuški",
"id":"ljubuki",
"olxid":"2905"
},
{
"ime":"Posušje",
"id":"posuje",
"olxid":"3268"
},
{
"ime":"Široki Brijeg",
"id":"irokibrijeg",
"olxid":"2708"
}
]
},
{
"ime":" Livanjski",
"id":"livanjski",
"olxid": "10",
"mjesta":[
{
"ime":"Bosansko Grahovo",
"id":"bosanskograhovo",
"olxid":"560"
},
{
"ime":"Drvar",
"id":"drvar",
"olxid":"4640"
},
{
"ime":"Glamoč",
"id":"glamo",
"olxid":"1533"
},
{
"ime":"Kupres",
"id":"kupres",
"olxid":"2635"
},
{
"ime":"Livno",
"id":"livno",
"olxid":"2741"
},
{
"ime":"Tomislavgrad",
"id":"tomislavgrad",
"olxid":"1228"
}
]
},
{
"ime":" Banjalučka",
"id":"banjalučka",
"olxid": "14",
"mjesta":[
{
"ime":"Banja Luka",
"id":"banjaluka",
"olxid":"21"
},
{
"ime":"Gradiška",
"id":"gradika",
"olxid":"305"
},
{
"ime":"Istočni Drvar",
"id":"istonidrvar",
"olxid":"4662"
},
{
"ime":"Jezero",
"id":"jezero",
"olxid":"1965"
},
{
"ime":"Kneževo",
"id":"kneevo",
"olxid":"4147"
},
{
"ime":"Kostajnica",
"id":"kostajnica",
"olxid":"6142"
},
{
"ime":"Kotor Varoš",
"id":"kotorvaro",
"olxid":"2574"
},
{
"ime":"Kozarska Dubica",
"id":"kozarskadubica",
"olxid":"244"
},
{
"ime":"Krupa na uni",
"id":"krupanauni",
"olxid":"382"
},
{
"ime":"Kupres ",
"id":"kupres",
"olxid":"2654"
},
{
"ime":"Laktaši",
"id":"laktai",
"olxid":"2671"
},
{
"ime":"Mrkonjić Grad",
"id":"mrkonjigrad",
"olxid":"3073"
},
{
"ime":"Novi Grad",
"id":"novigrad",
"olxid":"444"
},
{
"ime":"Oštra Luka",
"id":"otraluka",
"olxid":"3737"
},
{
"ime":"Petrovac",
"id":"petrovac",
"olxid":"515"
},
{
"ime":"Prijedor",
"id":"prijedor",
"olxid":"3287"
},
{
"ime":"Prnjavor",
"id":"prnjavor",
"olxid":"3358"
},
{
"ime":"Ribnik",
"id":"ribnik",
"olxid":"2365"
},
{
"ime":"Srbac",
"id":"srbac",
"olxid":"4271"
},
{
"ime":"Čelinac",
"id":"elinac",
"olxid":"979"
},
{
"ime":"Šipovo",
"id":"ipovo",
"olxid":"4509"
}
]
},
{
"ime":" Dobojsko-Bijeljinska",
"id":"dobojskobijeljinska",
"olxid": "15",
"mjesta":[
{
"ime":"Bijeljina",
"id":"bijeljina",
"olxid":"123"
},
{
"ime":"Bosanski Brod",
"id":"bosanskibrod",
"olxid":"421"
},
{
"ime":"Derventa",
"id":"derventa",
"olxid":"1030"
},
{
"ime":"Doboj",
"id":"doboj",
"olxid":"1088"
},
{
"ime":"Donji Žabar",
"id":"donjiabar",
"olxid":"3254"
},
{
"ime":"Lopare",
"id":"lopare",
"olxid":"2800"
},
{
"ime":"Lukavac",
"id":"lukavac",
"olxid":"6029"
},
{
"ime":"Modriča",
"id":"modria",
"olxid":"2996"
},
{
"ime":"Pelagićevo",
"id":"pelagievo",
"olxid":"1856"
},
{
"ime":"Petrovo",
"id":"petrovo",
"olxid":"1827"
},
{
"ime":"Stanari",
"id":"stanari",
"olxid":"1148"
},
{
"ime":"Teslić",
"id":"tesli",
"olxid":"4549"
},
{
"ime":"Tešanj",
"id":"teanj",
"olxid":"4636"
},
{
"ime":"Travnik",
"id":"travnik",
"olxid":"4692"
},
{
"ime":"Tuzla",
"id":"tuzla",
"olxid":"4966"
},
{
"ime":"Ugljevik",
"id":"ugljevik",
"olxid":"5009"
},
{
"ime":"Vukosavlje",
"id":"vukosavlje",
"olxid":"3197"
},
{
"ime":"Šamac",
"id":"amac",
"olxid":"539"
}
]
},
{
"ime":" Sarajevsko-Zvornička",
"id":"sarajevskozvornicka",
"olxid": "16",
"mjesta":[
{
"ime":"Bratunac",
"id":"bratunac",
"olxid":"595"
},
{
"ime":"Han Pijesak",
"id":"hanpijesak",
"olxid":"1904"
},
{
"ime":"Ilijaš",
"id":"ilija",
"olxid":"3947"
},
{
"ime":"Istočni Stari Grad",
"id":"istonistarigrad",
"olxid":"4049"
},
{
"ime":"Kasindo",
"id":"kasindo",
"olxid":"3880"
},
{
"ime":"Kladanj",
"id":"kladanj",
"olxid":"2325"
},
{
"ime":"Lukavica",
"id":"lukavica",
"olxid":"3971"
},
{
"ime":"Milići",
"id":"milii",
"olxid":"6143"
},
{
"ime":"Olovo",
"id":"olovo",
"olxid":"3221"
},
{
"ime":"Osmaci",
"id":"osmaci",
"olxid":"2128"
},
{
"ime":"Pale",
"id":"pale",
"olxid":"3978"
},
{
"ime":"Rogatica",
"id":"rogatica",
"olxid":"3529"
},
{
"ime":"Rudo",
"id":"rudo",
"olxid":"3648"
},
{
"ime":"Sarajevo-Novi Grad",
"id":"sarajevonovigrad",
"olxid":"6069"
},
{
"ime":"Sokolac",
"id":"sokolac",
"olxid":"4183"
},
{
"ime":"Srebrenica",
"id":"srebrenica",
"olxid":"4310"
},
{
"ime":"Trnovo",
"id":"trnovo",
"olxid":"4067"
},
{
"ime":"Ustiprača",
"id":"ustipraa",
"olxid":"1593"
},
{
"ime":"Višegrad",
"id":"viegrad",
"olxid":"5259"
},
{
"ime":"Vlasenica",
"id":"vlasenica",
"olxid":"5456"
},
{
"ime":"Zvornik",
"id":"zvornik",
"olxid":"5684"
},
{
"ime":"Šekovići",
"id":"ekovii",
"olxid":"4475"
},
{
"ime":"Žepa",
"id":"epa",
"olxid":"1906"
}
]
},
{
"ime":" Trebinjsko-Fočanska",
"id":"trebinjskofocanska",
"olxid": "17",
"mjesta":[
{
"ime":"Berkovići",
"id":"berkovii",
"olxid":"4441"
},
{
"ime":"Bileća",
"id":"bilea",
"olxid":"183"
},
{
"ime":"Foča",
"id":"foa",
"olxid":"1287"
},
{
"ime":"Gacko",
"id":"gacko",
"olxid":"1462"
},
{
"ime":"Istočni Mostar",
"id":"istonimostar",
"olxid":"3038"
},
{
"ime":"Kalinovik",
"id":"kalinovik",
"olxid":"2164"
},
{
"ime":"Ljubinje",
"id":"ljubinje",
"olxid":"2884"
},
{
"ime":"Nevesinje",
"id":"nevesinje",
"olxid":"3138"
},
{
"ime":"Trebinje",
"id":"trebinje",
"olxid":"4766"
},
{
"ime":"Čajniče",
"id":"ajnie",
"olxid":"911"
}
]
},
{
"ime":"Distrikt Brčko",
"id":"distriktbrcko",
"olxid": "12",
"mjesta":[
{
"ime":"Brčko",
"id":"brko",
"olxid":"12"
}
]
}
]
const regions = () => {
return geographies.map( (g) => ({ ime: g.ime, id: g.id, olxid: g.olxid }) );
}
const places = (regionId) => {
for (geo of geographies) {
if(geo.id === regionId) {
return geo.mjesta;
}
}
return null;
}
module.exports = {
regions,
places
}

View File

@@ -1,18 +0,0 @@
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.addColumn(
'RealEstateRequests',
'place',
Sequelize.STRING
);
},
down: (queryInterface, Sequelize) => {
return queryInterface.removeColumn(
'RealEstateRequests',
'place'
);
}
};

View File

@@ -12,7 +12,6 @@ module.exports = (sequelize, DataTypes) => {
}, },
email: DataTypes.STRING, email: DataTypes.STRING,
city: DataTypes.STRING, city: DataTypes.STRING,
place: DataTypes.STRING,
}, {}); }, {});
RealEstateRequest.associate = function(models) { RealEstateRequest.associate = function(models) {
// associations can be defined here // associations can be defined here

View File

@@ -1,25 +0,0 @@
<div class="row center-align">
<h2>U kojem mjestu tražite nekretninu?</h2>
</div>
<form method="POST" id="form-mjesto">
<div class="row center-align">
<ul class="collection with-header">
<% for(const mjesto of mjesta) { %>
<li class="collection-item" > <div id="<%= mjesto.id %>" ><%= mjesto.ime %><a href="#!" class="secondary-content"><i class="material-icons">send</i></a></div></li>
<% } %>
</ul>
<input type="hidden" name="mjesto" id="mjesto" />
</div>
</form>
<script>
$(document).ready( () => {
$(".collection-item").click( (e) => {
const clickedId = $(e.target).attr("id");
$("#mjesto").val(clickedId);
$("#form-mjesto").submit();
});
});
</script>

View File

@@ -1,7 +1,6 @@
const dobrodosli = require('./app/controllers/dobrodosli').getDobrodosli; const dobrodosli = require('./app/controllers/dobrodosli').getDobrodosli;
const { getVrstaNekretnine, postVrstaNekretnine} = require('./app/controllers/vrsta_nekretnine'); const { getVrstaNekretnine, postVrstaNekretnine} = require('./app/controllers/vrsta_nekretnine');
const { getGrad, postGrad } = require('./app/controllers/grad'); const { getGrad, postGrad } = require('./app/controllers/grad');
const { getMjesto, postMjesto } = require('./app/controllers/mjesto');
let express = require("express"); let express = require("express");
const path = require("path"); const path = require("path");
@@ -118,10 +117,6 @@ app.post('/vrstanekretnine', postVrstaNekretnine);
app.get('/grad/:request_id', getGrad); app.get('/grad/:request_id', getGrad);
app.post('/grad/:request_id', postGrad); app.post('/grad/:request_id', postGrad);
app.get('/mjesto/:request_id', getMjesto);
app.post('/mjesto/:request_id', postMjesto);
app.use('/assets', express.static('./app/public')) app.use('/assets', express.static('./app/public'))
app.listen(port, () => console.log(`Example app listening on port ${port}!`)); app.listen(port, () => console.log(`Example app listening on port ${port}!`));

188
package-lock.json generated
View File

@@ -239,6 +239,11 @@
"isarray": "^1.0.0" "isarray": "^1.0.0"
} }
}, },
"buffer-writer": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz",
"integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw=="
},
"bytes": { "bytes": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
@@ -473,11 +478,6 @@
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
}, },
"denque": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/denque/-/denque-1.4.0.tgz",
"integrity": "sha512-gh513ac7aiKrAgjiIBWZG0EASyDF9p4JMWwKA8YU5s9figrL5SRNEMT6FDynsegakuhWd1wVqTvqvqAoDxw7wQ=="
},
"depd": { "depd": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
@@ -519,6 +519,11 @@
"domelementtype": "1" "domelementtype": "1"
} }
}, },
"dotenv": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz",
"integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g=="
},
"dottie": { "dottie": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.1.tgz", "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.1.tgz",
@@ -787,14 +792,6 @@
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
}, },
"generate-function": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
"integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
"requires": {
"is-property": "^1.0.2"
}
},
"generic-pool": { "generic-pool": {
"version": "3.5.0", "version": "3.5.0",
"resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.5.0.tgz", "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.5.0.tgz",
@@ -954,11 +951,6 @@
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
"integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
}, },
"is-property": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
"integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ="
},
"is-stream": { "is-stream": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
@@ -1062,11 +1054,6 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
}, },
"long": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
},
"lru-cache": { "lru-cache": {
"version": "4.1.5", "version": "4.1.5",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
@@ -1182,9 +1169,9 @@
"integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
}, },
"moment-timezone": { "moment-timezone": {
"version": "0.5.23", "version": "0.5.25",
"resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.23.tgz", "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.25.tgz",
"integrity": "sha512-WHFH85DkCfiNMDX5D3X7hpNH3/PUhjTGcD0U1SgfBGZxJ3qUmJh5FdvaFjcClxOvB3rzdfj4oRffbI38jEnC1w==", "integrity": "sha512-DgEaTyN/z0HFaVcVbSyVCUU6HeFdnNC3vE4c9cgu2dgMTvjBUBdBzWfasTBmAW45u5OIMeCJtU8yNjM22DHucw==",
"requires": { "requires": {
"moment": ">= 2.9.0" "moment": ">= 2.9.0"
} }
@@ -1194,39 +1181,6 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}, },
"mysql2": {
"version": "1.6.5",
"resolved": "https://registry.npmjs.org/mysql2/-/mysql2-1.6.5.tgz",
"integrity": "sha512-zedaOOyb3msuuZcJJnxIX/EGOpmljDG7B+UevRH5lqcv+yhy9eCwkArBz8/AO+/rlY3/oCsOdG8R5oD6k0hNfg==",
"requires": {
"denque": "^1.4.0",
"generate-function": "^2.3.1",
"iconv-lite": "^0.4.24",
"long": "^4.0.0",
"lru-cache": "^4.1.3",
"named-placeholders": "^1.1.2",
"seq-queue": "^0.0.5",
"sqlstring": "^2.3.1"
},
"dependencies": {
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
}
}
},
"named-placeholders": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz",
"integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==",
"requires": {
"lru-cache": "^4.1.3"
}
},
"negotiator": { "negotiator": {
"version": "0.6.1", "version": "0.6.1",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
@@ -1373,6 +1327,11 @@
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
}, },
"packet-reader": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz",
"integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ=="
},
"parse5": { "parse5": {
"version": "3.0.3", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
@@ -1416,6 +1375,85 @@
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
}, },
"pg": {
"version": "7.10.0",
"resolved": "https://registry.npmjs.org/pg/-/pg-7.10.0.tgz",
"integrity": "sha512-aE6FZomsyn3OeGv1oM50v7Xu5zR75c15LXdOCwA9GGrfjXsQjzwYpbcTS6OwEMhYfZQS6m/FVU/ilPLiPzJDCw==",
"requires": {
"buffer-writer": "2.0.0",
"packet-reader": "1.0.0",
"pg-connection-string": "0.1.3",
"pg-pool": "^2.0.4",
"pg-types": "~2.0.0",
"pgpass": "1.x",
"semver": "4.3.2"
},
"dependencies": {
"semver": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz",
"integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c="
}
}
},
"pg-connection-string": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-0.1.3.tgz",
"integrity": "sha1-2hhHsglA5C7hSSvq9l1J2RskXfc="
},
"pg-int8": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
"integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="
},
"pg-pool": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-2.0.6.tgz",
"integrity": "sha512-hod2zYQxM8Gt482q+qONGTYcg/qVcV32VHVPtktbBJs0us3Dj7xibISw0BAAXVMCzt8A/jhfJvpZaxUlqtqs0g=="
},
"pg-types": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.0.1.tgz",
"integrity": "sha512-b7y6QM1VF5nOeX9ukMQ0h8a9z89mojrBHXfJeSug4mhL0YpxNBm83ot2TROyoAmX/ZOX3UbwVO4EbH7i1ZZNiw==",
"requires": {
"pg-int8": "1.0.1",
"postgres-array": "~2.0.0",
"postgres-bytea": "~1.0.0",
"postgres-date": "~1.0.4",
"postgres-interval": "^1.1.0"
}
},
"pgpass": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz",
"integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=",
"requires": {
"split": "^1.0.0"
}
},
"postgres-array": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
"integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="
},
"postgres-bytea": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz",
"integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU="
},
"postgres-date": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.4.tgz",
"integrity": "sha512-bESRvKVuTrjoBluEcpv2346+6kgB7UlnqWZsnbnCccTNq/pqfj1j6oBaN5+b/NrDXepYUT/HKadqv3iS9lJuVA=="
},
"postgres-interval": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz",
"integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
"requires": {
"xtend": "^4.0.0"
}
},
"proto-list": { "proto-list": {
"version": "1.2.4", "version": "1.2.4",
"resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
@@ -1594,15 +1632,10 @@
"statuses": "~1.4.0" "statuses": "~1.4.0"
} }
}, },
"seq-queue": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
"integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4="
},
"sequelize": { "sequelize": {
"version": "4.43.0", "version": "4.43.2",
"resolved": "https://registry.npmjs.org/sequelize/-/sequelize-4.43.0.tgz", "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-4.43.2.tgz",
"integrity": "sha512-GkwGFVREKBf/ql6W6RXwXy1fzb/HOk0lmOBbcQrJMvJtB65Jfg7CUh+sENh0deuWk5s79JedgZJ/yEjvtzHXaQ==", "integrity": "sha512-EA3V1AsxVjf2EtGbdEoa9Fe5rSAqy5g4OsX0VwtU6iMezTjIYTCXV8o6mG7i6u3lu4Zc7JWZ6XwhS0k79pT/EQ==",
"requires": { "requires": {
"bluebird": "^3.5.0", "bluebird": "^3.5.0",
"cls-bluebird": "^2.1.0", "cls-bluebird": "^2.1.0",
@@ -1702,10 +1735,13 @@
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
}, },
"sqlstring": { "split": {
"version": "2.3.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
"integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
"requires": {
"through": "2"
}
}, },
"sshpk": { "sshpk": {
"version": "1.16.1", "version": "1.16.1",
@@ -1790,6 +1826,11 @@
"terraformer": "~1.0.5" "terraformer": "~1.0.5"
} }
}, },
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
},
"timers-ext": { "timers-ext": {
"version": "0.1.7", "version": "0.1.7",
"resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz",
@@ -1997,6 +2038,11 @@
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
"integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
}, },
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
"integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
},
"y18n": { "y18n": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",

View File

@@ -22,14 +22,15 @@
"aws-sdk": "^2.422.0", "aws-sdk": "^2.422.0",
"cheerio": "^1.0.0-rc.2", "cheerio": "^1.0.0-rc.2",
"compression": "^1.7.4", "compression": "^1.7.4",
"dotenv": "^7.0.0",
"ejs": "^2.6.1", "ejs": "^2.6.1",
"express": "^4.16.4", "express": "^4.16.4",
"express-ejs-layouts": "^2.5.0", "express-ejs-layouts": "^2.5.0",
"express-layout": "^0.1.0", "express-layout": "^0.1.0",
"mysql2": "^1.6.4",
"node-fetch": "^2.3.0", "node-fetch": "^2.3.0",
"pg": "^7.10.0",
"react-step-wizard": "^5.1.0", "react-step-wizard": "^5.1.0",
"sequelize": "^4.42.0", "sequelize": "^4.43.2",
"sequelize-cli": "^5.4.0" "sequelize-cli": "^5.4.0"
} }
} }

View File

@@ -1,389 +0,0 @@
<!DOCTYPE>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.4.0.js"></script>
</head>
<body>
<select name="kanton" id="kanton" class="drop-select" onchange="pronadji_gradove()">
<option value="">Iz svih lokacija</option>
<option value="" disabled="">Federacija BiH</option>
<option value="9">&nbsp;Sarajevo</option>
<option value="3">&nbsp;Tuzlanski</option>
<option value="4">&nbsp;Zeničko-Dobojski</option>
<option value="1">&nbsp;Unsko-Sanski</option>
<option value="2">&nbsp;Posavski</option>
<option value="5">&nbsp;Bosansko-podrinjski</option>
<option value="6">&nbsp;Srednjobosanski</option>
<option value="7">&nbsp;Hercegovačko-Neretvanski</option>
<option value="8">&nbsp;Zapadno-Hercegovački</option>
<option value="10">&nbsp;Livanjski</option>
<option value="" disabled="">Republika Srpska</option>
<option value="14">&nbsp;Banjalučka</option>
<option value="15">&nbsp;Dobojsko-Bijeljinska</option>
<option value="16">&nbsp;Sarajevsko-Zvornička</option>
<option value="17">&nbsp;Trebinjsko-Fočanska</option>
<option value="12">Disktrikt Brčko</option>
</select>
<div style="height:40px;">
<span class="drop-container" style="width: 168px;">
<span class="drop-label">Mjesto</span><span class="drop-arrow"></span>
<select name="unskosanski" id="unskosanski" class="drop-select" onchange="stavi_grad()">
<option value="0">Mjesto</option>
<option value="75">Bihać</option>
<option value="373">Bosanska Krupa</option>
<option value="504">Bosanski Petrovac</option>
<option value="374">Bužim</option>
<option value="857">Cazin</option>
<option value="2362">Ključ</option>
<option value="3738">Sanski Most</option>
<option value="5122">Velika Kladuša</option>
</select>
</span>
</div>
<div style="height:40px;">
<span class="drop-container" style="width: 168px;">
<span class="drop-label">Mjesto</span><span class="drop-arrow"></span>
<select name="posavski" id="posavski" class="drop-select" onchange="stavi_grad()">
<option value="0">Mjesto</option>
<option value="6144">Domaljevac</option>
<option value="424">Odžak</option>
<option value="3252">Orašje</option>
<option value="540">Šamac</option>
</select>
</span>
</div>
<div style="height:40px;">
<span class="drop-container" style="width: 168px;">
<span class="drop-label">Mjesto</span><span class="drop-arrow"></span>
<select name="tuzlanski" id="tuzlanski" class="drop-select" onchange="stavi_grad()">
<option value="0">Mjesto</option>
<option value="2">Banovići</option>
<option value="1090">Doboj-Istok</option>
<option value="1854">Gradačac</option>
<option value="1826">Gračanica</option>
<option value="2129">Kalesija</option>
<option value="2319">Kladanj</option>
<option value="2840">Lukavac</option>
<option value="5699">Sapna</option>
<option value="4391">Srebrenik</option>
<option value="5010">Teočak</option>
<option value="4944">Tuzla</option>
<option value="2801">Čelić</option>
<option value="5774">Živinice</option>
</select>
</span>
</div>
<div style="height:40px;">
<span class="drop-container" style="width: 168px;">
<span class="drop-label">Mjesto</span><span class="drop-arrow"></span>
<select name="zenickodobojski" id="zenickodobojski" class="drop-select" onchange="stavi_grad()">
<option value="0">Mjesto</option>
<option value="704">Breza</option>
<option value="1122">Doboj-Jug</option>
<option value="2022">Kakanj</option>
<option value="2941">Maglaj</option>
<option value="1925">Olovo</option>
<option value="4594">Tešanj</option>
<option value="1087">Usora</option>
<option value="5037">Vareš</option>
<option value="5171">Visoko</option>
<option value="5548">Zavidovići</option>
<option value="4571">Zenica</option>
<option value="2940">Žepče</option>
</select>
</span>
</div>
<div style="height:40px;">
<span class="drop-container" style="width: 168px;">
<span class="drop-label">Mjesto</span><span class="drop-arrow"></span>
<select name="" id="bosanskopodrinjski" class="drop-select" onchange="stavi_grad()">
<option value="0">Mjesto</option>
<option value="1289">Foča</option>
<option value="1588">Goražde</option>
<option value="3546">Pale</option>
</select>
</span>
</div>
<div style="height:40px;">
<span class="drop-container" style="width: 168px;">
<span class="drop-label">Mjesto</span><span class="drop-arrow"></span>
<select name="" id="srednjobosanski" class="drop-select" onchange="stavi_grad()">
<option value="0">Mjesto</option>
<option value="732">Bugojno</option>
<option value="810">Busovača</option>
<option value="4151">Dobretići</option>
<option value="1160">Donji Vakuf</option>
<option value="1407">Fojnica</option>
<option value="1775">Gornji Vakuf - Uskoplje</option>
<option value="1960">Jajce</option>
<option value="2237">Kiseljak</option>
<option value="2608">Kreševo</option>
<option value="3477">Novi Travnik</option>
<option value="4678">Travnik</option>
<option value="5422">Vitez</option>
</select>
</span>
</div>
<div style="height:40px;">
<span class="drop-container" style="width: 168px;">
<span class="drop-label">Mjesto</span><span class="drop-arrow"></span>
<select name="" id="hercegovackoneretvanski" class="drop-select" onchange="stavi_grad()">
<option value="0">Mjesto</option>
<option value="3017">Grad Mostar</option>
<option value="1930">Jablanica</option>
<option value="2169">Konjic</option>
<option value="3111">Neum</option>
<option value="3421">Prozor</option>
<option value="4769">Ravno</option>
<option value="4439">Stolac</option>
<option value="947">Čapljina</option>
<option value="1009">Čitluk</option>
</select>
</span>
</div>
<div style="height:40px;">
<span class="drop-container" style="width: 168px;">
<span class="drop-label">Mjesto</span><span class="drop-arrow"></span>
<select name="" id="zapadnohercegovacki" class="drop-select" onchange="stavi_grad()">
<option value="0">Mjesto</option>
<option value="1892">Grude</option>
<option value="2905">Ljubuški</option>
<option value="3268">Posušje</option>
<option value="2708">Široki Brijeg</option>
</select>
</span>
</div>
<div style="height:40px;">
<span class="drop-container" style="width: 168px;">
<span class="drop-label">Mjesto</span><span class="drop-arrow"></span>
<select name="" id="sarajevo" class="drop-select" onchange="stavi_grad()">
<option value="0">Mjesto</option>
<option value="3817">Hadžići</option>
<option value="3879">Ilidža</option>
<option value="3892">Ilijaš</option>
<option value="3812">Sarajevo - Centar</option>
<option value="3969">Sarajevo-Novi Grad</option>
<option value="5896">Sarajevo-Novo Sarajevo</option>
<option value="4048">Sarajevo-Stari Grad</option>
<option value="4063">Trnovo</option>
<option value="4126">Vogošća</option>
</select>
</span>
</div>
<div style="height:40px;">
<span class="drop-container" style="width: 168px;">
<span class="drop-label">Mjesto</span><span class="drop-arrow"></span>
<select name="" id="livanjski" class="drop-select" onchange="stavi_grad()">
<option value="0">Mjesto</option>
<option value="560">Bosansko Grahovo</option>
<option value="4640">Drvar</option>
<option value="1533">Glamoč</option>
<option value="2635">Kupres</option>
<option value="2741">Livno</option>
<option value="1228">Tomislavgrad</option>
</select>
</span>
</div>
<div style="height:40px;">
<span class="drop-container" style="width: 168px;">
<span class="drop-label">Mjesto</span><span class="drop-arrow"></span>
<select name="" id="grad11" class="drop-select" onchange="stavi_grad()">
<option value="0">Mjesto</option>
<option value="645">distriktbrcko</option>
</select>
</span>
</div>
<div style="height:40px;">
<span class="drop-container" style="width: 168px;">
<span class="drop-label">Mjesto</span><span class="drop-arrow"></span>
<select name="" id="banjalučka" class="drop-select" onchange="stavi_grad()">
<option value="0">Mjesto</option>
<option value="21">Banja Luka</option>
<option value="305">Gradiška</option>
<option value="4662">Istočni Drvar</option>
<option value="1965">Jezero</option>
<option value="4147">Kneževo</option>
<option value="6142">Kostajnica</option>
<option value="2574">Kotor Varoš</option>
<option value="244">Kozarska Dubica</option>
<option value="382">Krupa na uni</option>
<option value="2654">Kupres </option>
<option value="2671">Laktaši</option>
<option value="3073">Mrkonjić Grad</option>
<option value="444">Novi Grad</option>
<option value="3737">Oštra Luka</option>
<option value="515">Petrovac</option>
<option value="3287">Prijedor</option>
<option value="3358">Prnjavor</option>
<option value="2365">Ribnik</option>
<option value="4271">Srbac</option>
<option value="979">Čelinac</option>
<option value="4509">Šipovo</option>
</select>
</span>
</div>
<div style="height:40px;">
<span class="drop-container" style="width: 168px;">
<span class="drop-label">Mjesto</span><span class="drop-arrow"></span>
<select name="" id="dobojskobijeljinska" class="drop-select" onchange="stavi_grad()">
<option value="0">Mjesto</option>
<option value="123">Bijeljina</option>
<option value="421">Bosanski Brod</option>
<option value="1030">Derventa</option>
<option value="1088">Doboj</option>
<option value="3254">Donji Žabar</option>
<option value="2800">Lopare</option>
<option value="6029">Lukavac</option>
<option value="2996">Modriča</option>
<option value="1856">Pelagićevo</option>
<option value="1827">Petrovo</option>
<option value="1148">Stanari</option>
<option value="4549">Teslić</option>
<option value="4636">Tešanj</option>
<option value="4692">Travnik</option>
<option value="4966">Tuzla</option>
<option value="5009">Ugljevik</option>
<option value="3197">Vukosavlje</option>
<option value="539">Šamac</option>
</select>
</span>
</div>
<div style="height:40px;">
<span class="drop-container" style="width: 168px;">
<span class="drop-label">Mjesto</span><span class="drop-arrow"></span>
<select name="" id="sarajevskozvornicka" class="drop-select" onchange="stavi_grad()">
<option value="0">Mjesto</option>
<option value="595">Bratunac</option>
<option value="1904">Han Pijesak</option>
<option value="3947">Ilijaš</option>
<option value="4049">Istočni Stari Grad</option>
<option value="3880">Kasindo</option>
<option value="2325">Kladanj</option>
<option value="3971">Lukavica</option>
<option value="6143">Milići</option>
<option value="3221">Olovo</option>
<option value="2128">Osmaci</option>
<option value="3978">Pale</option>
<option value="3529">Rogatica</option>
<option value="3648">Rudo</option>
<option value="6069">Sarajevo-Novi Grad</option>
<option value="4183">Sokolac</option>
<option value="4310">Srebrenica</option>
<option value="4067">Trnovo</option>
<option value="1593">Ustiprača</option>
<option value="5259">Višegrad</option>
<option value="5456">Vlasenica</option>
<option value="5684">Zvornik</option>
<option value="4475">Šekovići</option>
<option value="1906">Žepa</option>
</select>
</span>
</div>
<div style="height:40px;">
<span class="drop-container" style="width: 168px;">
<span class="drop-label">Mjesto</span><span class="drop-arrow"></span>
<select name="" id="trebinjskofocanska" class="drop-select" onchange="stavi_grad()">
<option value="0">Mjesto</option>
<option value="4441">Berkovići</option>
<option value="183">Bileća</option>
<option value="1287">Foča</option>
<option value="1462">Gacko</option>
<option value="3038">Istočni Mostar</option>
<option value="2164">Kalinovik</option>
<option value="2884">Ljubinje</option>
<option value="3138">Nevesinje</option>
<option value="4766">Trebinje</option>
<option value="911">Čajniče</option>
</select>
</span>
</div>
<script>
const stavi_grad = () => {};
const gradovi = [
{"ime":" Sarajevo","id":"sarajevo"},
{"ime":" Unsko-sanski","id":"unskosanski"},
{"ime":" Posavski","id":"posavski"},
{"ime":" Tuzlanski","id":"tuzlanski"},
{"ime":" Zeničko-dobojski","id":"zenickodobojski"},
{"ime":" Bosansko-podrinjski","id":"bosanskopodrinjski"},
{"ime":" Srednjobosanski","id":"srednjobosanski"},
{"ime":" Hercegovačko-neretvanski","id":"hercegovackoneretvanski"},
{"ime":" Zapadno-hercegovački","id":"zapadnohercegovacki"},
{"ime":" Livanjski","id":"livanjski"},
{"ime":" Banjalučka","id":"banjalučka"},
{"ime":" Dobojsko-Bijeljinska","id":"dobojskobijeljinska"},
{"ime":" Sarajevsko-Zvornička","id":"sarajevskozvornicka"},
{"ime":" Trebinjsko-Fočanska","id":"trebinjskofocanska"},
{"ime":"Distrikt Brčko","id":"distriktbrcko"},
];
for (let grad of gradovi) {
const mjesta = [];
$('#' + grad.id).children().each( function() {
const mjesto = $(this).text();
mjesta.push( {
ime: mjesto,
id: mjesto.toLowerCase().replace(/[^a-z]/g,''),
olxid: $(this).val()
});
});
grad.mjesta = mjesta;
}
console.log(JSON.stringify(gradovi));
</script>
</body>
</html>