├── apps ├── cb_admin │ ├── log │ │ └── .gitignore │ ├── ebin │ │ └── .gitignore │ ├── rebar │ ├── priv │ │ ├── lang │ │ │ └── .gitignore │ │ ├── static │ │ │ ├── favicon.ico │ │ │ ├── chicago-boss.png │ │ │ ├── news.js │ │ │ ├── lang.js │ │ │ └── stylesheets │ │ │ │ ├── application.css │ │ │ │ └── application_orig.css │ │ ├── cb_admin.routes │ │ ├── init │ │ │ └── cb_admin_01_news.erl │ │ └── rebar │ │ │ └── boss_plugin.erl │ ├── src │ │ ├── test │ │ │ ├── eunit │ │ │ │ └── .gitignore │ │ │ └── functional │ │ │ │ └── cb_admin_test.erl │ │ ├── view │ │ │ ├── lang │ │ │ │ ├── shared │ │ │ │ │ ├── _lang_right_submenu.html │ │ │ │ │ └── _lang_left_submenu.html │ │ │ │ ├── delete.html │ │ │ │ ├── big_red_button.html │ │ │ │ ├── create.html │ │ │ │ └── show.html │ │ │ ├── admin │ │ │ │ ├── access_denied.html │ │ │ │ ├── layouts │ │ │ │ │ ├── shared │ │ │ │ │ │ ├── _alerts.html │ │ │ │ │ │ ├── _main_menu.html │ │ │ │ │ │ └── _sidebar.html │ │ │ │ │ └── admin.html │ │ │ │ ├── splash.html │ │ │ │ └── index.html │ │ │ ├── model │ │ │ │ ├── delete.html │ │ │ │ ├── upload.html │ │ │ │ ├── create.html │ │ │ │ ├── edit.html │ │ │ │ ├── show.html │ │ │ │ └── model.html │ │ │ ├── upgrade │ │ │ │ └── upgrade.html │ │ │ └── routes │ │ │ │ └── index.html │ │ ├── mail │ │ │ ├── cb_admin_incoming_mail_controller.erl │ │ │ └── cb_admin_outgoing_mail_controller.erl │ │ ├── cb_admin.app.src │ │ ├── controller │ │ │ ├── cb_admin_routes_controller.erl │ │ │ ├── cb_admin_upgrade_controller.erl │ │ │ ├── cb_admin_admin_controller.erl │ │ │ ├── cb_admin_lang_controller.erl │ │ │ └── cb_admin_model_controller.erl │ │ └── lib │ │ │ ├── cb_admin_lib.erl │ │ │ └── cb_admin_model_lib.erl │ ├── .gitignore │ ├── rebar.cmd │ ├── start-server.bat │ ├── init-dev.sh │ ├── rebar.config │ ├── boss.config │ ├── README.md │ ├── LICENSE │ └── init.sh └── draw │ ├── rebar │ ├── priv │ ├── static │ │ ├── favicon.ico │ │ ├── chicago-boss.png │ │ ├── style.css │ │ └── drawings.js │ ├── draw.routes │ ├── init │ │ └── draw_01_news.erl │ └── rebar │ │ └── boss_plugin.erl │ ├── rebar.cmd │ ├── src │ ├── controller │ │ └── draw_draw_controller.erl │ ├── mail │ │ ├── draw_incoming_mail_controller.erl │ │ └── draw_outgoing_mail_controller.erl │ ├── draw.app.src │ ├── view │ │ ├── lib │ │ │ ├── filter_modules │ │ │ │ └── draw_custom_filters.erl │ │ │ ├── tag_modules │ │ │ │ └── draw_custom_tags.erl │ │ │ └── README │ │ └── draw │ │ │ ├── index.html │ │ │ └── test.html │ └── websocket │ │ ├── draw_websocket_test_websocket.erl │ │ └── draw_draw_protocol_websocket.erl │ ├── start-server.bat │ ├── init-dev.sh │ ├── rebar.config │ ├── Makefile │ ├── README.md │ ├── init.sh │ └── boss.config ├── rebar ├── rebar.cmd ├── .gitignore ├── rel_vsn.sh ├── fix_vsn.sh ├── rebar.config ├── rel ├── vars.config ├── files │ ├── vm.args │ ├── erl │ ├── start_erl.cmd │ ├── install_upgrade.escript │ ├── draw.cmd │ ├── sys.config │ ├── nodetool │ └── draw └── reltool.config ├── Makefile └── README.md /apps/cb_admin/log/.gitignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/cb_admin/ebin/.gitignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/cb_admin/rebar: -------------------------------------------------------------------------------- 1 | ../../rebar -------------------------------------------------------------------------------- /apps/cb_admin/priv/lang/.gitignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/cb_admin/src/test/eunit/.gitignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /rebar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mihawk/draw/HEAD/rebar -------------------------------------------------------------------------------- /apps/draw/rebar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mihawk/draw/HEAD/apps/draw/rebar -------------------------------------------------------------------------------- /apps/cb_admin/.gitignore: -------------------------------------------------------------------------------- 1 | ebin/*.beam 2 | ebin/*.app 3 | log/*.log 4 | erl_crash.dump 5 | -------------------------------------------------------------------------------- /rebar.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | setlocal 3 | set rebarscript=%~f0 4 | escript.exe "%rebarscript:.cmd=%" %* 5 | -------------------------------------------------------------------------------- /apps/draw/priv/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mihawk/draw/HEAD/apps/draw/priv/static/favicon.ico -------------------------------------------------------------------------------- /apps/draw/rebar.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | setlocal 3 | set rebarscript=%~f0 4 | escript.exe "%rebarscript:.cmd=%" %* 5 | -------------------------------------------------------------------------------- /apps/cb_admin/rebar.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | setlocal 3 | set rebarscript=%~f0 4 | escript.exe "%rebarscript:.cmd=%" %* 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ebin/*.beam 2 | ebin/boss.app 3 | log/* 4 | deps 5 | erl_crash.dump 6 | *~ 7 | #*# 8 | .*# 9 | *# 10 | -------------------------------------------------------------------------------- /apps/cb_admin/priv/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mihawk/draw/HEAD/apps/cb_admin/priv/static/favicon.ico -------------------------------------------------------------------------------- /apps/draw/priv/static/chicago-boss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mihawk/draw/HEAD/apps/draw/priv/static/chicago-boss.png -------------------------------------------------------------------------------- /apps/cb_admin/priv/static/chicago-boss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mihawk/draw/HEAD/apps/cb_admin/priv/static/chicago-boss.png -------------------------------------------------------------------------------- /rel_vsn.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cat rel/reltool.config | grep "{rel" | grep draw | awk -F',' '{print $3}' | sed 's/ //g' | sed 's/"//g' 4 | -------------------------------------------------------------------------------- /apps/draw/src/controller/draw_draw_controller.erl: -------------------------------------------------------------------------------- 1 | -module(draw_draw_controller, [Req]). 2 | -compile(export_all). 3 | 4 | index('GET', []) -> 5 | ok. 6 | 7 | -------------------------------------------------------------------------------- /apps/draw/start-server.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | FOR /F "tokens=*" %%i in ('"rebar.cmd boss c=start_dev_cmd ^| findstr werl"') do set myvar=%%i 3 | START "Erlang Window" %myvar% 4 | -------------------------------------------------------------------------------- /apps/cb_admin/start-server.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | FOR /F "tokens=*" %%i in ('"rebar.cmd boss c=start_dev_cmd ^| findstr werl"') do set myvar=%%i 3 | START "Erlang Window" %myvar% 4 | -------------------------------------------------------------------------------- /apps/cb_admin/src/view/lang/shared/_lang_right_submenu.html: -------------------------------------------------------------------------------- 1 |
(Access denied)
8 | 9 | 10 | -------------------------------------------------------------------------------- /apps/cb_admin/src/cb_admin.app.src: -------------------------------------------------------------------------------- 1 | {application, cb_admin, [ 2 | {description, "Chicago Boss Admin Interface"}, 3 | {vsn, "0.7.1"}, 4 | {modules, []}, 5 | {registered, []}, 6 | {applications, [kernel, stdlib]}, 7 | {env, []} 8 | ]}. 9 | -------------------------------------------------------------------------------- /apps/draw/src/draw.app.src: -------------------------------------------------------------------------------- 1 | {application, draw, [ 2 | {description, "My Awesome Web Framework"}, 3 | {vsn, "0.0.2"}, 4 | {modules, []}, 5 | {registered, []}, 6 | {applications, [kernel, stdlib, crypto, boss]}, 7 | {env, []} 8 | ]}. 9 | -------------------------------------------------------------------------------- /apps/draw/src/view/lib/filter_modules/draw_custom_filters.erl: -------------------------------------------------------------------------------- 1 | -module(draw_custom_filters). 2 | -compile(export_all). 3 | 4 | % put custom filters in here, e.g. 5 | % 6 | % my_reverse(Value) -> 7 | % lists:reverse(binary_to_list(Value)). 8 | % 9 | % "foo"|my_reverse => "foo" 10 | -------------------------------------------------------------------------------- /apps/cb_admin/src/view/admin/layouts/shared/_alerts.html: -------------------------------------------------------------------------------- 1 | {% if boss_flash %} 2 | {% for flash in boss_flash %} 3 |This action cannot be undone
7 | 10 |This action cannot be undone
7 | 10 |Choose a CSV file with these columns:
7 |{{ attr }}
10 | If you can read this and still possess all ten fingers, Chicago Boss was set up successfully.
11 |Beginner's guide: "An Evening With Chicago Boss"
Full API documentation at chicagoboss.org
Local model documentation at /doc
Administrative interface at {% url controller="index" %}
Internationalization Command Center at {% url controller="lang" %}
Mailing list at Chicago Boss Google Group
See the loaded routes here 36 | 37 |
| Url/Special | 25 |Application | 26 |Controller | 27 |Action | 28 |Params | 29 |
|---|---|---|---|---|
| {{ route.url }} | 35 |{{ route.application }} | 36 |{{ route.controller }} | 37 |{{ route.action }} | 38 |{{ route.params }} | 39 |
Back to the {{ record.id }} detail page
6 | {% if errors %} 7 |Applications: 43 | {% for app in applications %} 44 | {% ifequal app this_application %} 45 | {{ app }} 46 | {% else %} 47 | {{ app }} 48 | {% endifequal %} 49 | {% endfor %} 50 |
51 | {% endif %} 52 |The Big Red Button fills in all the blanks in your language files with the Google Translate API.
53 |Language files that will be created or updated:
58 || Language | Status |
|---|
Language files that will be unaffected: 63 | {% for lang in languages %} 64 | {% if not lang.untranslated_strings|length %} 65 | {{ lang.code }} 66 | {% endif %} 67 | {% endfor %} 68 |
69 | 70 | {% endblock %} 71 | -------------------------------------------------------------------------------- /apps/cb_admin/src/lib/cb_admin_model_lib.erl: -------------------------------------------------------------------------------- 1 | -module(cb_admin_model_lib). 2 | -export([encode_csv_value/1, parse_csv/1]). 3 | 4 | encode_csv_value(Val) when is_binary(Val) -> 5 | encode_csv_value(binary_to_list(Val)); 6 | encode_csv_value(Val) when is_atom(Val) -> 7 | encode_csv_value(atom_to_list(Val)); 8 | encode_csv_value({_, _, _} = Val) -> 9 | encode_csv_value(erlydtl_filters:date(calendar:now_to_datetime(Val), "F d, Y H:i:s")); 10 | encode_csv_value({{_, _, _}, {_, _, _}} = Val) -> 11 | encode_csv_value(erlydtl_filters:date(Val, "F d, Y H:i:s")); 12 | encode_csv_value(Val) -> 13 | encode_csv_value(Val, []). 14 | 15 | encode_csv_value([], Acc) -> 16 | [$"|lists:reverse([$"|Acc])]; 17 | encode_csv_value([$"|T], Acc) -> 18 | encode_csv_value(T, [$", $" | Acc]); 19 | encode_csv_value([H|T], Acc) -> 20 | encode_csv_value(T, [H|Acc]). 21 | 22 | 23 | % Taken from http://blog.vmoroz.com/2011/01/csv-in-erlang.html 24 | parse_csv(Data) when is_binary(Data) -> parse_csv(binary_to_list(Data)); 25 | parse_csv(Data) -> parse(Data, [], [], []). 26 | 27 | parse([$\r|Data], Field, Fields, Lines) -> parse_r(Data, Field, Fields, Lines); 28 | parse([$\n|Data], Field, Fields, Lines) -> parse(Data, [], [], [[Field|Fields]|Lines]); 29 | parse([$,|Data], Field, Fields, Lines) -> parse(Data, [], [Field|Fields], Lines); 30 | parse([$"|Data], [], Fields, Lines) -> parse_q(Data, [], Fields, Lines); 31 | parse([C|Data], Field, Fields, Lines) -> parse(Data, [C|Field], Fields, Lines); 32 | parse([], [], [], Lines) -> lists:reverse( 33 | [lists:reverse( 34 | [lists:reverse(F) || F <- L] 35 | ) || L <- Lines] 36 | ); 37 | parse([], Field, Fields, Lines) -> parse([], [], [], [[Field|Fields]|Lines]). 38 | 39 | parse_r([$\n|_] = Data, Field, Fields, Lines) -> parse(Data, Field, Fields, Lines). 40 | 41 | parse_q([$"|Data], Field, Fields, Lines) -> parse_qq(Data, Field, Fields, Lines); 42 | parse_q([C|Data], Field, Fields, Lines) -> parse_q(Data, [C|Field], Fields, Lines). 43 | 44 | parse_qq([$"|Data], Field, Fields, Lines) -> parse_q(Data, [$"|Field], Fields, Lines); 45 | parse_qq([C|_] = Data, Field, Fields, Lines) 46 | when C == $,; C == $\r; C == $\n -> parse(Data, Field, Fields, Lines); 47 | parse_qq([], Field, Fields, Lines) -> parse([], Field, Fields, Lines). 48 | 49 | -------------------------------------------------------------------------------- /apps/draw/boss.config: -------------------------------------------------------------------------------- 1 | [{boss, [ 2 | {path, "../../deps/boss"}, 3 | {applications, [draw,cb_admin]}, 4 | {db_host, "192.168.188.81"}, 5 | {db_port, 1978}, 6 | {db_adapter, mock}, 7 | {log_dir, "log"}, 8 | {server, cowboy}, 9 | {port, 8001}, 10 | {session_adapter, mock}, 11 | {session_key, "_boss_session"}, 12 | {session_exp_time, 525600} 13 | ]}, 14 | { draw, [ 15 | {path, "../draw"}, 16 | {base_url, "/"} 17 | ]}, 18 | {cb_admin, [ 19 | {path, "../cb_admin"}, 20 | {allow_ip_blocks, ["127.0.0.1"]}, 21 | {base_url, "/admin"}, 22 | {model_modules, []}, 23 | {websocket_modules, []}, 24 | {controller_modules,[ 25 | cb_admin_admin_controller, 26 | cb_admin_incoming_mail_controller, 27 | cb_admin_lang_controller, 28 | cb_admin_model_controller, 29 | cb_admin_outgoing_mail_controller, 30 | cb_admin_routes_controller, 31 | cb_admin_upgrade_controller 32 | ]}, 33 | {view_modules,[ 34 | cb_admin_view_admin_access_denied_html, 35 | cb_admin_view_admin_index_html, 36 | cb_admin_view_admin_layouts_admin_html, 37 | cb_admin_view_admin_layouts_shared__alerts_html, 38 | cb_admin_view_admin_layouts_shared__main_menu_html, 39 | cb_admin_view_admin_layouts_shared__sidebar_html, 40 | cb_admin_view_admin_splash_html, 41 | cb_admin_view_lang_big_red_button_html, 42 | cb_admin_view_lang_create_html, 43 | cb_admin_view_lang_delete_html, 44 | cb_admin_view_lang_shared__lang_left_submenu_html, 45 | cb_admin_view_lang_shared__lang_right_submenu_html, 46 | cb_admin_view_lang_show_html, 47 | cb_admin_view_lib_tags, 48 | cb_admin_view_model_create_html, 49 | cb_admin_view_model_delete_html, 50 | cb_admin_view_model_edit_html, 51 | cb_admin_view_model_model_html, 52 | cb_admin_view_model_show_html, 53 | cb_admin_view_model_upload_html, 54 | cb_admin_view_routes_index_html, 55 | cb_admin_view_upgrade_upgrade_html 56 | ]} 57 | ]} 58 | ]. 59 | -------------------------------------------------------------------------------- /apps/cb_admin/src/view/lang/create.html: -------------------------------------------------------------------------------- 1 | {% extends "admin/layouts/admin.html" %} 2 | {% block title %}Create a language file{% endblock %} 3 | 4 | {% block left_submenu %} 5 | {% include "lang/shared/_lang_left_submenu.html" with new_language="true" %} 6 | {% endblock %} 7 | 8 | {% block right_submenu %} 9 | {% include "lang/shared/_lang_right_submenu.html" %} 10 | {% endblock %} 11 | 12 | {% block meta_scripts %} 13 | 15 | 50 | {% endblock %} 51 | {% block body %} 52 | {% if applications %} 53 |Applications: 54 | {% for app in applications %} 55 | {% ifequal app this_application %} 56 | {{ app }} 57 | {% else %} 58 | {{ app }} 59 | {% endifequal %} 60 | {% endfor %} 61 |
62 | {% endif %} 63 || {{ attr }} | 48 | {% endfor %} 49 |||
|---|---|---|
| {{ attr_val }} | 54 | {% else %} 55 | {% if "_time" in attr_name %} 56 |{{ attr_val|date:"N j, Y, P" }} | 57 | {% else %} 58 |{{ attr_val|truncatewords:8 }} | 59 | {% endif %} 60 | {% endifequal %} 61 | {% endfor %} 62 |
21 | {% for model in models %} 22 | {% ifequal model this_model %} 23 | {{ model }} 24 | {% else %} 25 | {{ model }} 26 | {% endifequal %} 27 | {% if not forloop.last %} 28 | | 29 | {% endif %} 30 | {% endfor %} 31 |
32 | {% if this_model %} 33 |34 |
38 | 39 | {% endif %} 40 || {{ attr }} | 45 | {% endfor %} 46 |||||
|---|---|---|---|---|
| {{ record_id }} | 51 | {% for key, val, datatype in record %} 52 | {% if datatype == "id" %} 53 | {% else %} 54 | {% if datatype == "datetime" %} 55 |{{ val|date:"N j, Y, P" }} | 56 | {% else %} 57 | {% if datatype == "foreign_id" %} 58 |{{ val }} | 59 | {% else %} 60 | {% if datatype == "string" or datatype == "binary" %} 61 |{{ val|truncatewords:8 }} | 62 | {% else %} 63 |{{ val }} | 64 | {% endif %} 65 | {% endif %} 66 | {% endif %} 67 | {% endif %} 68 | {% endfor %} 69 |
75 | Pages: 76 | {% for page in pages %} 77 | {% ifequal page this_page %} 78 | {{ page }} 79 | {% else %} 80 | {{ page }} 81 | {% endifequal %} 82 | {% endfor %} 83 |
84 | {% endifnotequal %} 85 | {% endif %} 86 | {% if this_model %} 87 |Export as CSV - 88 | Bulk upload
89 | {% endif %} 90 | {% endblock %} 91 | -------------------------------------------------------------------------------- /apps/draw/src/view/draw/test.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |Applications: 50 | {% for app in applications %} 51 | {% ifequal app this_application %} 52 | {{ app }} 53 | {% else %} 54 | {{ app }} 55 | {% endifequal %} 56 | {% endfor %} 57 |
58 | {% endif %} 59 | 60 |75 |
93 | 94 | {% if this_lang %} 95 |{{ untranslated_messages|length }} untranslated messages: (Fill in the blanks with Google! EXPERIMENTAL FEATURE)
101 | 135 | {% else %} 136 | {% if this_lang %} 137 |{{ translated_messages|length }} translated messages:
148 || Original | Translation |
|---|---|
| {{ orig }} | {{ msg }} | 156 |
Last modified: {{ last_modified|date:"N j, Y, P" }}
162 | {% endif %} 163 | {% else %} 164 | {% if this_lang %} 165 |