12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- -module(mad_static).
- %-author('Yuri Artemev').
- -export([
- main/2,
- app/1
- ]).
- -define(NODE(Bin), "node_modules/.bin/" ++ Bin).
- main(_Config, ["min"]) ->
- {ok,[SysConfig]} = file:consult("sys.config"),
- N4U = proplists:get_value(n4u,SysConfig,[]),
- AppName = proplists:get_value(app,N4U,sample),
- Minify = proplists:get_value(minify,N4U,[]),
- Command = lists:concat(["uglify -s ", string:join(erlang:element(2, Minify),", "),
- " -o ", erlang:element(1, Minify), "/", AppName, ".min.js"]),
- io:format("Minify: ~p~n",[Command]),
- case sh:run(Command) of
- {_,0,_} -> {ok,static};
- {_,_,_} -> mad:info("minifyjs not installed. try `npm install -g uglify`~n"), {error,minifier}
- end;
- main(Config, ["watch"]) ->
- case mad_utils:get_value(static, Config, []) of
- [] -> {ok,static};
- SC ->
- Port = mad_utils:get_value(assets_port, SC, 3000),
- install_deps(), serve_static(Port)
- end;
- main(Config, _Params) ->
- case mad_utils:get_value(static, Config, []) of
- [] -> {ok,static};
- SC ->
- Files = mad_utils:get_value(files, SC, []),
- install_deps(), compile_static(Files)
- end.
- install_deps() ->
- case filelib:is_dir("node_modules/mincer-erl") of
- true -> {ok,static};
- _ ->
- case sh:oneliner("npm install mincer-erl") of
- {_,0,_} -> {ok,static};
- {_,_,_} -> mad:info("error while installing mincer-erl~n"), {error,install}
- end
- end.
- % FIXME exit
- serve_static(Port) ->
- PortStr = integer_to_list(Port),
- Res = sh:oneliner([?NODE("mincer-erl-serve"), "-p " ++ PortStr]),
- case Res of
- {_,0,_} -> {ok,static};
- {_,_,_} -> mad:info("error while serving assets~n"), {error,assests} end.
- compile_static(Files) ->
- Res = sh:oneliner([?NODE("mincer-erl-compile")] ++ Files),
- case Res of
- {_,0,_} -> {ok,static};
- {_,_,_} -> mad:info("error while compiling assets~n"), {error,compile} end.
- app([]) -> app(["sample"]);
- app(Params) ->
- [Name] = Params,
- mad_repl:load(),
- Apps = ets:tab2list(filesystem),
- [ case string:str(File,"priv/web") of
- 1 -> Relative = unicode:characters_to_list(Name ++ string:replace(string:substr(File, 9), "sample", Name, all), utf8),
- mad:info("Create File: ~p~n",[Relative]),
- filelib:ensure_dir(Relative),
- BinNew = string:replace(Bin, "sample", Name, all),
- file:write_file(Relative, BinNew);
- _ -> skip
- end || {File,Bin} <- Apps, erlang:is_list(File) ], {ok,Name}.
|