Skip to content
Open
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,7 @@ scripts/*client.json

# Vs code settings
.vscode/

# My Entries
notes.txt
Temp/
8 changes: 5 additions & 3 deletions configurations/default/env.yml.tmp
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,13 @@ AUTH0_CLIENT_ID: your-auth0-client-id
AUTH0_CONNECTION_NAME: your-auth0-connection-name
AUTH0_DOMAIN: your-auth0-domain
BUGSNAG_KEY: optional-bugsnag-key
MAP_BASE_URL: optional-map-tile-url
MAP_BASE_URL: http://tile.openstreetmap.org/{z}/{x}/{y}.png # Uncomment it if maps are gray
MAPBOX_ACCESS_TOKEN: your-mapbox-access-token
MAPBOX_MAP_ID: mapbox/outdoors-v11
MAPBOX_ATTRIBUTION: <a href="https://www.mapbox.com/about/maps/" target="_blank">&copy; Mapbox &copy; OpenStreetMap</a> <a href="https://www.mapbox.com/map-feedback/" target="_blank">Improve this map</a>
# MAP_BASE_URL: http://tile.openstreetmap.org/{z}/{x}/{y}.png # Uncomment it if maps are gray
SLACK_CHANNEL: optional-slack-channel
SLACK_WEBHOOK: optional-slack-webhook
GRAPH_HOPPER_KEY: your-graph-hopper-key
# GRAPH_HOPPER_KEY: your-graph-hopper-key
# Optional override to use a custom service instead of the graphhopper.com hosted service.
# GRAPH_HOPPER_URL: http://localhost:8989/
# Optional overrides to use custom service or different api key for certain bounding boxes.
Expand All @@ -25,3 +24,6 @@ GRAPH_HOPPER_KEY: your-graph-hopper-key
GOOGLE_ANALYTICS_TRACKING_ID: optional-ga-key
# GRAPH_HOPPER_POINT_LIMIT: 10 # Defaults to 30
DISABLE_AUTH: true

MAPTYPE: OSM
VALHALLA_URL: "https://valhalla1.openstreetmap.de/route"
3 changes: 2 additions & 1 deletion docker/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
version: "3.8"

x-common-variables: &common-variables
- BUGSNAG_KEY=${BUGSNAG_KEY}
Expand Down Expand Up @@ -42,6 +41,7 @@ services:
target: /config
ports:
- "4000:4000"

datatools-ui:
build:
context: ../
Expand All @@ -51,6 +51,7 @@ services:
environment: *common-variables
ports:
- "9966:9966"

mongo:
image: mongo
restart: always
Expand Down
5 changes: 3 additions & 2 deletions docker/ui/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ ARG BUGSNAG_KEY
RUN cd /datatools-build
COPY package.json yarn.lock patches /datatools-build/
RUN yarn
COPY . /datatools-build/
COPY . /datatools-build/
COPY ./lib/mastarm_css/css-transform.js /datatools-build/node_modules/mastarm/lib/css-transform.js
COPY configurations/default /datatools-config/


# Copy the tmp file to the env.yml if no env.yml is present
RUN cp -R -u -p /datatools-config/env.yml.tmp /datatools-config/env.yml

CMD yarn run mastarm build --env dev --serve --proxy http://datatools-server:4000/api #
CMD yarn run mastarm build --env dev --serve --proxy http://datatools-server:4000/api #
124 changes: 124 additions & 0 deletions lib/mastarm_css/css-transform.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
const fs = require('fs')
const path = require('path')

const cssnano = require('cssnano')
const chokidar = require('chokidar')
const mimeType = require('mime')
const mkdirp = require('mkdirp')
const postcss = require('postcss')
const postcssImport = require('postcss-import')
const postcssPresetEnv = require('postcss-preset-env')
const postcssReporter = require('postcss-reporter')
const postcssSafeParser = require('postcss-safe-parser')

const browsers = require('./constants').BROWSER_SUPPORT
const logger = require('./logger')

module.exports = function ({ config, entry, minify, outfile, watch }) {
const configImport = config.stylePath
? `@import url(${config.stylePath});`
: ''
let watcher
const plugins = [
postcssImport({
onImport: sources => {
if (watch) {
sources.forEach(source => watcher.add(source))
}
},
plugins: [
base64ify(process.cwd()) // inline all url files
]
}),
base64ify(process.cwd()),
postcssPresetEnv({browsers})
]

if (minify) {
plugins.push(cssnano({ preset: 'default' }))
}

plugins.push(postcssReporter({ clearMessages: true }))

const transform = () =>
postcss(plugins)
.process(`${configImport}${fs.readFileSync(entry, 'utf8')}`, {
from: undefined,
map: { inline: false },
parser: postcssSafeParser,
to: outfile
})
.then(function (results) {
if (outfile) {
mkdirp.sync(path.dirname(outfile))
fs.writeFileSync(outfile, results.css)
if ("results.map") {
fs.writeFileSync(`${outfile}.map`, results.map.toString())
}
if (watch) {
logger.log(`updated ${outfile}`)
}
}
return results
})

if (watch) {
watcher = chokidar.watch(entry)
watcher
.on('add', transform)
.on('change', transform)
.on('unlink', transform)
}

return transform()
}

const base64ify = postcss.plugin('postcss-base64ify', function () {
return function (css, result) {
css.replaceValues(/url\((\s*)(['"]?)(.+?)\2(\s*)\)/g, function (string) {
const filename = getUrl(string)
.split('?')[0]
.split('#')[0]
let file
if (
filename.indexOf('data') === 0 ||
filename.length === 0 ||
filename.indexOf('http') === 0
) {
return string
} else if (filename[0] === '/') {
file = path.join(process.cwd(), filename)
} else {
const source = css.source.input.file
const dir = path.dirname(source)
file = path.resolve(dir, filename)
}
if (!fs.existsSync(file)) {
throw new Error(`File ${file} does not exist`)
}
const buffer = fs.readFileSync(file)
return (
'url("data:' +
mimeType.getType(filename) +
';base64,' +
buffer.toString('base64') +
'")'
)
})
}
})

const URL_POSITION = 3

/**
* Extract the contents of a css url
*
* @param {string} value raw css
* @return {string} the contents of the url
*/
function getUrl (value) {
const reg = /url\((\s*)(['"]?)(.+?)\2(\s*)\)/g
const match = reg.exec(value)
const url = match[URL_POSITION]
return url
}
Loading