# Provides basic build rules for building minified JS and vulcanized HTML.
#
# Targets
# =======
#   core_js: Builds res/js/core.js.
#
#   elements_html: Builds res/vul/elements.html.
#
#   clean_webtools: Cleans out core.js and elements.html.
#
# Usage
# =====
#  Add the following to your Makefile:
#
#    include ../webtools/webtools.mk
#
#  And define the following:
#
#  BOWER_DIR: The bower directory.
#
#  CORE_SOURCE_FILES: a list of source files that make up core.js.
#     These files should be either present in the project or brought into
#     $(BOWER_DIR) via bower. This makefile runs bower on the local directory
#     to bring in dependencies.
#
#  VULCANIZE1: If defined then this presumes vulcanize 1.0 or later is installed
#     and uses the new command line flags. This can be removed once all projects
#     have moved to vulcanize 1.x.

# Get the directory of this makefile to refer to common resources relative to this.
WEBTOOLS_DIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST))))

##### core_js ####

# The core_js target builds res/js/core.js from the concatenated source file
# listed in CORE_SOURCE_FILES. The result is minified.
.PHONY: core_js
core_js: node_modules/lastupdate res/js/core.js res/common

# The debug_core_js target does the same thing as core_js, but the file isn't
# minified.
debug_core_js: res/js/core-debug.js
	cp res/js/core-debug.js res/js/core.js

res/js/core.js: res/js/core-debug.js ./node_modules/.bin/uglifyjs
	./node_modules/.bin/uglifyjs res/js/core-debug.js -o res/js/core.js

res/js/core-debug.js: Makefile $(BOWER_DIR)/lastupdate $(CORE_SOURCE_FILES)
	-mkdir res/js
	awk 'FNR==1{print ""}{print}' $(CORE_SOURCE_FILES) > res/js/core-debug.js

$(BOWER_DIR)/lastupdate: bower.json ./node_modules/.bin/bower
	./node_modules/.bin/bower update
	ln -sf ../../$(BOWER_DIR) res/imp/bower_components
	touch $(BOWER_DIR)/lastupdate

res/common:
	ln -sfr $(WEBTOOLS_DIR)/../res res/common

#### elements_html ####

# The elements_html target builds a vulcanized res/vul/elements.html from
# elements.html.
elements_html: core_js res/vul/elements.html

# The debug_elements_html target just copies elements.html into res/vul/elements.html.
debug_elements_html:
	-mkdir res/vul
	cp elements.html res/vul/elements.html
	ln -sf ../../$(BOWER_DIR) res/imp/bower_components

res/vul/elements.html: res/imp/*.html elements.html ./node_modules/.bin/vulcanize
	-mkdir res/vul
	./node_modules/.bin/vulcanize --inline-css --inline-scripts --strip-comments --abspath=./ elements.html | ./node_modules/.bin/html-minifier -o res/vul/elements.html --minify-js --remove-comments --collapse-whitespace --conservative-collapse

#### clean_webtools ####

clean_webtools:
	-rm res/vul/elements.html
	-rm res/js/core.js
	-rm res/js/core-debug.js

#### Rules to npm install needed tools ####

./node_modules/.bin/vulcanize:
	npm install vulcanize --save-dev

./node_modules/.bin/bower:
	npm install bower --save-dev

./node_modules/.bin/uglifyjs:
	npm install uglify-js --save-dev

#### npm install dependencies ####

node_modules/lastupdate: package.json
	npm install
	touch node_modules/lastupdate

