From 0885e8fd9ca738a8f4079781256608241c30f351 Mon Sep 17 00:00:00 2001 From: eduveks Date: Fri, 3 Dec 2021 19:27:36 +0000 Subject: [PATCH] =?UTF-8?q?Est=C3=A1=20=C3=A9=20a=20minha=20primeira=20ver?= =?UTF-8?q?s=C3=A3o.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 24 + .netuno.json | 110 ++++ README-pt_PT.md | 75 +++ README.md | 75 +++ config/_development.js | 3 + config/_production.js | 3 + config/icon.png | Bin 0 -> 69831 bytes config/sample.json | 53 ++ public/images/logo-main.png | Bin 0 -> 12273 bytes public/images/logo.png | Bin 0 -> 22354 bytes public/styles/main.css | 13 + server/actions/action/saved.js | 4 + server/actions/banner/saved.js | 5 + server/actions/banner_action/saved.js | 4 + server/actions/configuration/saved.js | 3 + server/actions/content/saved.js | 4 + server/actions/content_action/saved.js | 4 + server/actions/dictionary/saved.js | 3 + server/actions/functionality/saved.js | 5 + server/actions/language/saved.js | 3 + server/actions/listing/saved.js | 4 + server/actions/listing_item/saved.js | 4 + server/actions/page/saved.js | 4 + server/core/Cluar.js | 511 ++++++++++++++++++ server/core/CluarCustomData.js | 4 + server/core/_config.js | 22 + server/core/_init.js | 5 + server/core/_request_close.js | 0 server/core/_request_end.js | 0 server/core/_request_error.js | 17 + server/core/_request_start.js | 2 + server/core/_request_url.js | 14 + server/core/_service_config.js | 13 + server/core/_service_end.js | 0 server/core/_service_error.js | 5 + server/core/_service_start.js | 0 server/package.json | 7 + server/setup/001-language.js | 31 ++ server/setup/002-page_status.js | 27 + server/setup/003-content_type.js | 51 ++ server/setup/004-banner_type.js | 35 ++ server/setup/005-functionality_type.js | 35 ++ server/setup/_end.js | 22 + server/setup/_schema-form-01-action.js | 184 +++++++ server/setup/_schema-form-02-banner.js | 339 ++++++++++++ server/setup/_schema-form-03-banner_action.js | 123 +++++ server/setup/_schema-form-04-banner_type.js | 92 ++++ server/setup/_schema-form-05-configuration.js | 122 +++++ ..._schema-form-06-configuration_parameter.js | 92 ++++ server/setup/_schema-form-07-contact.js | 184 +++++++ server/setup/_schema-form-08-content.js | 308 +++++++++++ .../setup/_schema-form-09-content_action.js | 123 +++++ server/setup/_schema-form-10-content_type.js | 92 ++++ server/setup/_schema-form-11-dictionary.js | 122 +++++ .../setup/_schema-form-12-dictionary_entry.js | 92 ++++ server/setup/_schema-form-13-functionality.js | 215 ++++++++ .../_schema-form-14-functionality_type.js | 92 ++++ server/setup/_schema-form-15-language.js | 153 ++++++ server/setup/_schema-form-16-listing.js | 277 ++++++++++ server/setup/_schema-form-17-listing_item.js | 278 ++++++++++ server/setup/_schema-form-18-listing_type.js | 92 ++++ server/setup/_schema-form-19-page.js | 401 ++++++++++++++ server/setup/_schema-form-20-page_status.js | 92 ++++ server/setup/_start.js | 0 server/templates/dashboard.html | 24 + server/templates/dev/dashboard.html | 31 ++ server/templates/scripts.html | 1 + server/templates/scripts_dev.html | 0 server/templates/scripts_login.html | 0 server/templates/styles.html | 1 + server/templates/styles_dev.html | 1 + server/templates/styles_login.html | 0 storage/filesystem/private/info.txt | 4 + storage/filesystem/public/info.txt | 2 + storage/filesystem/server/info.txt | 4 + test.md | 3 + ui/.babelrc | 9 + ui/.gitignore | 18 + ui/README.md | 24 + ui/package.json | 36 ++ ui/src/components/MyButton/index.jsx | 17 + .../containers/DashboardContainer/index.jsx | 88 +++ .../containers/DashboardContainer/index.less | 8 + ui/src/index.jsx | 42 ++ ui/src/styles/main.less | 4 + ui/webpack.config.js | 81 +++ website/.gitignore | 43 ++ website/README.md | 68 +++ website/build.sh | 19 + website/config-overrides.js | 21 + website/package.json | 50 ++ website/public/favicon.ico | Bin 0 -> 15406 bytes website/public/images/logo.png | Bin 0 -> 12676 bytes website/public/index.html | 115 ++++ website/public/manifest.json | 15 + website/public/robots.txt | 3 + website/src/App.js | 206 +++++++ website/src/App.test.js | 9 + website/src/common/Analytics.js | 63 +++ website/src/common/Builder.js | 40 ++ website/src/common/Cluar.js | 132 +++++ website/src/common/CluarCustomData.js | 6 + website/src/common/LangRouter.js | 67 +++ website/src/common/serviceWorker.js | 141 +++++ website/src/components/Actions/Item/index.js | 15 + .../src/components/Actions/Item/index.less | 39 ++ website/src/components/Actions/index.js | 20 + website/src/components/Actions/index.less | 10 + website/src/components/Banner/index.js | 38 ++ website/src/components/Banner/index.less | 155 ++++++ website/src/components/Content/index.js | 114 ++++ website/src/components/Content/index.less | 121 +++++ website/src/components/Cookies/index.js | 34 ++ website/src/components/Cookies/index.less | 29 + website/src/components/Dictionary/index.js | 18 + website/src/components/Dictionary/index.less | 0 website/src/components/Listing/Item/index.js | 37 ++ .../src/components/Listing/Item/index.less | 1 + website/src/components/Listing/index.js | 44 ++ website/src/components/Listing/index.less | 36 ++ .../functionality/ContactForm/index.js | 96 ++++ .../functionality/ContactForm/index.less | 25 + .../src/components/functionality/Map/index.js | 110 ++++ .../components/functionality/Map/index.less | 60 ++ website/src/config/config-dev.json | 11 + website/src/config/config-prod.json | 11 + website/src/index.js | 34 ++ website/src/pages/NotFound/index.js | 12 + website/src/pages/NotFound/index.less | 3 + website/src/setupTests.js | 5 + website/src/styles/App.less | 317 +++++++++++ website/src/styles/index.less | 22 + website/src/styles/variables.less | 52 ++ 133 files changed, 7542 insertions(+) create mode 100644 .gitignore create mode 100644 .netuno.json create mode 100644 README-pt_PT.md create mode 100644 README.md create mode 100644 config/_development.js create mode 100644 config/_production.js create mode 100644 config/icon.png create mode 100644 config/sample.json create mode 100644 public/images/logo-main.png create mode 100644 public/images/logo.png create mode 100644 public/styles/main.css create mode 100644 server/actions/action/saved.js create mode 100644 server/actions/banner/saved.js create mode 100644 server/actions/banner_action/saved.js create mode 100644 server/actions/configuration/saved.js create mode 100644 server/actions/content/saved.js create mode 100644 server/actions/content_action/saved.js create mode 100644 server/actions/dictionary/saved.js create mode 100644 server/actions/functionality/saved.js create mode 100644 server/actions/language/saved.js create mode 100644 server/actions/listing/saved.js create mode 100644 server/actions/listing_item/saved.js create mode 100644 server/actions/page/saved.js create mode 100644 server/core/Cluar.js create mode 100644 server/core/CluarCustomData.js create mode 100644 server/core/_config.js create mode 100644 server/core/_init.js create mode 100644 server/core/_request_close.js create mode 100644 server/core/_request_end.js create mode 100644 server/core/_request_error.js create mode 100644 server/core/_request_start.js create mode 100644 server/core/_request_url.js create mode 100644 server/core/_service_config.js create mode 100644 server/core/_service_end.js create mode 100644 server/core/_service_error.js create mode 100644 server/core/_service_start.js create mode 100644 server/package.json create mode 100644 server/setup/001-language.js create mode 100644 server/setup/002-page_status.js create mode 100644 server/setup/003-content_type.js create mode 100644 server/setup/004-banner_type.js create mode 100644 server/setup/005-functionality_type.js create mode 100644 server/setup/_end.js create mode 100644 server/setup/_schema-form-01-action.js create mode 100644 server/setup/_schema-form-02-banner.js create mode 100644 server/setup/_schema-form-03-banner_action.js create mode 100644 server/setup/_schema-form-04-banner_type.js create mode 100644 server/setup/_schema-form-05-configuration.js create mode 100644 server/setup/_schema-form-06-configuration_parameter.js create mode 100644 server/setup/_schema-form-07-contact.js create mode 100644 server/setup/_schema-form-08-content.js create mode 100644 server/setup/_schema-form-09-content_action.js create mode 100644 server/setup/_schema-form-10-content_type.js create mode 100644 server/setup/_schema-form-11-dictionary.js create mode 100644 server/setup/_schema-form-12-dictionary_entry.js create mode 100644 server/setup/_schema-form-13-functionality.js create mode 100644 server/setup/_schema-form-14-functionality_type.js create mode 100644 server/setup/_schema-form-15-language.js create mode 100644 server/setup/_schema-form-16-listing.js create mode 100644 server/setup/_schema-form-17-listing_item.js create mode 100644 server/setup/_schema-form-18-listing_type.js create mode 100644 server/setup/_schema-form-19-page.js create mode 100644 server/setup/_schema-form-20-page_status.js create mode 100644 server/setup/_start.js create mode 100644 server/templates/dashboard.html create mode 100644 server/templates/dev/dashboard.html create mode 100644 server/templates/scripts.html create mode 100644 server/templates/scripts_dev.html create mode 100644 server/templates/scripts_login.html create mode 100644 server/templates/styles.html create mode 100644 server/templates/styles_dev.html create mode 100644 server/templates/styles_login.html create mode 100644 storage/filesystem/private/info.txt create mode 100644 storage/filesystem/public/info.txt create mode 100644 storage/filesystem/server/info.txt create mode 100644 test.md create mode 100644 ui/.babelrc create mode 100644 ui/.gitignore create mode 100644 ui/README.md create mode 100644 ui/package.json create mode 100644 ui/src/components/MyButton/index.jsx create mode 100644 ui/src/containers/DashboardContainer/index.jsx create mode 100644 ui/src/containers/DashboardContainer/index.less create mode 100644 ui/src/index.jsx create mode 100644 ui/src/styles/main.less create mode 100644 ui/webpack.config.js create mode 100644 website/.gitignore create mode 100644 website/README.md create mode 100755 website/build.sh create mode 100644 website/config-overrides.js create mode 100644 website/package.json create mode 100644 website/public/favicon.ico create mode 100644 website/public/images/logo.png create mode 100644 website/public/index.html create mode 100644 website/public/manifest.json create mode 100644 website/public/robots.txt create mode 100644 website/src/App.js create mode 100644 website/src/App.test.js create mode 100644 website/src/common/Analytics.js create mode 100644 website/src/common/Builder.js create mode 100644 website/src/common/Cluar.js create mode 100644 website/src/common/CluarCustomData.js create mode 100644 website/src/common/LangRouter.js create mode 100644 website/src/common/serviceWorker.js create mode 100644 website/src/components/Actions/Item/index.js create mode 100644 website/src/components/Actions/Item/index.less create mode 100644 website/src/components/Actions/index.js create mode 100644 website/src/components/Actions/index.less create mode 100644 website/src/components/Banner/index.js create mode 100644 website/src/components/Banner/index.less create mode 100644 website/src/components/Content/index.js create mode 100644 website/src/components/Content/index.less create mode 100644 website/src/components/Cookies/index.js create mode 100644 website/src/components/Cookies/index.less create mode 100644 website/src/components/Dictionary/index.js create mode 100644 website/src/components/Dictionary/index.less create mode 100644 website/src/components/Listing/Item/index.js create mode 100644 website/src/components/Listing/Item/index.less create mode 100644 website/src/components/Listing/index.js create mode 100644 website/src/components/Listing/index.less create mode 100644 website/src/components/functionality/ContactForm/index.js create mode 100644 website/src/components/functionality/ContactForm/index.less create mode 100644 website/src/components/functionality/Map/index.js create mode 100644 website/src/components/functionality/Map/index.less create mode 100644 website/src/config/config-dev.json create mode 100644 website/src/config/config-prod.json create mode 100644 website/src/index.js create mode 100644 website/src/pages/NotFound/index.js create mode 100644 website/src/pages/NotFound/index.less create mode 100644 website/src/setupTests.js create mode 100644 website/src/styles/App.less create mode 100644 website/src/styles/index.less create mode 100644 website/src/styles/variables.less diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..47b201a --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ + +node_modules/ +.DS_Store +*.log +.idea/ +.metadata/ +.vscode +package-lock.json + +/trash/* + +.Trash + +*~* +*#* + +config/_development.json +config/_production.json + +dbs/ + +public/scripts/main.* + +storage/database/ diff --git a/.netuno.json b/.netuno.json new file mode 100644 index 0000000..27134b5 --- /dev/null +++ b/.netuno.json @@ -0,0 +1,110 @@ +{ + "name": "cluar", + "description": "A ready to use solution for content management and multilingual websites using Netuno, ReactJS and Ant Design.", + "type": "app", + "config": { + "development": { + "cron": {"jobs": []}, + "settings": { + "public": {}, + "website": { + "origin": "http://localhost:3000" + }, + "uglifyjs": false + }, + "cors": [{ + "origin": "*", + "enabled": true + }], + "smtp": {}, + "name": "cluar", + "setup": { + "schema": { + "execution": true, + "auto_create": true + }, + "scripts": {"execution": true}, + "enabled": true + }, + "language": "en_GB", + "firebase": { + "app_name": "", + "database_url": "", + "key_file": "", + "listener_secret": "" + }, + "locale": "en_GB", + "remote": {}, + "commands": [ + { + "path": "ui", + "command": "npm run watch", + "enabled": true + }, + { + "path": "website", + "command": "npm start", + "enabled": true + } + ], + "db": {"default": { + "password": "", + "engine": "h2", + "port": "", + "host": "", + "name": "cluar", + "username": "" + }} + }, + "production": { + "cron": {"jobs": []}, + "settings": { + "public": {}, + "uglifyjs": false + }, + "cors": [{ + "origin": "*", + "enabled": true + }], + "smtp": {}, + "name": "cluar", + "setup": { + "schema": { + "execution": true, + "auto_create": true + }, + "scripts": {"execution": true}, + "enabled": true + }, + "language": "en_GB", + "firebase": { + "app_name": "", + "database_url": "", + "key_file": "", + "listener_secret": "" + }, + "locale": "en_GB", + "remote": {}, + "commands": [ + { + "path": "ui", + "command": "npm run watch", + "enabled": false + }, + { + "path": "website", + "command": "npm start", + "enabled": false + } + ], + "db": {"default": { + "password": "", + "engine": "h2", + "port": "", + "host": "", + "name": "cluar", + "username": "" + }} + } + } +} \ No newline at end of file diff --git a/README-pt_PT.md b/README-pt_PT.md new file mode 100644 index 0000000..1fbfdec --- /dev/null +++ b/README-pt_PT.md @@ -0,0 +1,75 @@ +# Netuno CLUAR + +Uma solução pronta para gestão de conteúdos e websites multilíngue utilizando [Netuno](https://www.netuno.org/), [ReactJS](https://reactjs.org/) e [Ant Design](https://ant.design/). + +## Requisito + +### Plataforma Netuno + +[Siga os passos aqui](https://doc.netuno.org/docs/en/installation/) + +## Instalação Automática da Aplicação + +``` +./netuno app github=netuno-org/cluar +``` + +Em seguida, crie o config.json no website, por exemplo: + +``` +cp apps/cluar/website/src/config/config-dev.json apps/cluar/website/src/config/config.json +``` + +Inicie o servidor Netuno: + +``` +./netuno server app=cluar +``` + +> Pode demorar porque é a primeira vez e a instalação do NPM será executada nas pastas `ui` e` website` dentro da pasta raiz do aplicativo. + +Não é obrigatório, mas é recomendado renomar a pasta da aplicação `(Netuno Root directory)/apps/cluar/` para o nome desejado, e não esqueça do parâmetro `name` nas configurações: + +`config/_development.json` + +`config/_production.json` + +> Lembre-se de iniciar o servidor Netuno com seu novo nome de aplicativo. + +## Clone e Instalação Manual + +Crie uma nova app com o Netuno denominada `cluar` executando (no diretório raíz do Netuno) + +`./netuno app name=cluar` + +e selecionando as configurações desejadas (tipo de base de dados, nome da base de dados e idioma da aplicação). + +Depois clone este projeto para o diretório `(Netuno Root directory)/apps/cluar/`. + +Depois instale as dependências NPM excutando + +`npm install` + +no diretório `cluar/website/`. + +## Configuração Manual + +Copie o ficheiro de amostra de configuração de serviços executando o seguinte + +`cp config/sample.json config/_development.json` (certifique-se do parâmetro `name`) + +`cp website/src/config/config-dev.json website/src/config/config.json` + +e modifique de acordo com a configuração do seu ambiente local. + +## Execução + +No diretório raíz do Netuno execute + +`./netuno server app=cluar` + +que irá iniciar o servidor de backend e depois execute no diretório `(cluar app directory)/website/` o seguinte + +`npm run start` + +para iniciar o servidor de frontend. diff --git a/README.md b/README.md new file mode 100644 index 0000000..02dafee --- /dev/null +++ b/README.md @@ -0,0 +1,75 @@ +# CLUAR CMS + +A ready to use solution for content management and multilingual websites using [Netuno](https://www.netuno.org/), [ReactJS](https://reactjs.org/) and [Ant Design](https://ant.design/). + +## Requirement + +#### Netuno Platform + +[Follow the steps here](https://doc.netuno.org/docs/en/installation/) + +## Automatic Application Install + +``` +./netuno app github=netuno-org/cluar +``` + +Then load the config.json in the website, example: + +``` +cp apps/cluar/website/src/config/config-dev.json apps/cluar/website/src/config/config.json +``` + +Start the Netuno Server: + +``` +./netuno server app=cluar +``` + +> May take while because is the first time and NPM Install will run to `ui` and `website` folder inside the application root folder. + +Is not required, but is recommended to rename the app folder `(Netuno Root directory)/apps/cluar/` to your desired name, and do not forget the `name` parameter in the configurations: + +`config/_development.json` + +`config/_production.json` + +> Remember to start the Netuno Server with your new app name. + +## Manual Clone and Setup + +Create an app with Netuno named `cluar` by running (in the Netuno root directory) + +`./netuno app name=cluar` + +and selecting the desired configurations (database type, database name and app language). + +Then clone this project to the newly created `(Netuno Root directory)/apps/cluar/` directory. + +Then install the NPM dependencies by running + +`npm install` + +in the `cluar/website/` directory. + +## Manual Configuration + +You'll need to copy the sample service config file by running + +`cp config/sample.json config/_development.json` (be sure the `name` parameter) + +`cp website/src/config/config-dev.json website/src/config/config.json` + +and modifying to match your local environment configuration. + +## Running + +In the Netuno root directory run + +`./netuno server app=cluar` + +to start the backend server and then in the `(cluar app directory)/website/` run + +`npm run start` + +to start the frontend server. diff --git a/config/_development.js b/config/_development.js new file mode 100644 index 0000000..9b3a150 --- /dev/null +++ b/config/_development.js @@ -0,0 +1,3 @@ +/* + * Development dynamic configurations is here. + */ diff --git a/config/_production.js b/config/_production.js new file mode 100644 index 0000000..3f91075 --- /dev/null +++ b/config/_production.js @@ -0,0 +1,3 @@ +/* + * Production dynamic configurations is here. + */ diff --git a/config/icon.png b/config/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..193a76be68e723b132ed4eaf1e161868accef539 GIT binary patch literal 69831 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 literal 0 HcmV?d00001 diff --git a/config/sample.json b/config/sample.json new file mode 100644 index 0000000..fdb183e --- /dev/null +++ b/config/sample.json @@ -0,0 +1,53 @@ +{ + "cron": {"jobs": []}, + "settings": { + "public": {}, + "website": { + "origin": "http://localhost:3000" + }, + "uglifyjs": false + }, + "cors": [{ + "origin": "*", + "enabled": true + }], + "smtp": {}, + "name": "cluar", + "setup": { + "schema": { + "execution": true, + "auto_create": true + }, + "scripts": {"execution": true}, + "enabled": true + }, + "language": "en_GB", + "firebase": { + "app_name": "", + "database_url": "", + "key_file": "", + "listener_secret": "" + }, + "locale": "en_GB", + "remote": {}, + "commands": [ + { + "path": "ui", + "command": "npm run watch", + "enabled": true + }, + { + "path": "website", + "command": "npm start", + "enabled": true + } + ], + "db": {"default": { + "password": "", + "engine": "h2", + "port": "", + "host": "", + "name": "cluar", + "username": "" + }} +} \ No newline at end of file diff --git a/public/images/logo-main.png b/public/images/logo-main.png new file mode 100644 index 0000000000000000000000000000000000000000..558fa179e40a98aab7aa37977ae770c21e62ea12 GIT binary patch literal 12273 zcmb_?i9eL>_kSxT+mPMxG@i1H8T}de%-Hmxv%A1=Q`(o-q$%-hO4u^n24gtmMvSv zjvYn2ZP~Kzzu@=uE+O!~`t{z=EnD`lA44BH6}NSzO_?dt1asJwRVj|S{u}8TG=kTdrNLD@-X<;dXt`kzHYU#dyQ`s%iam&)q=+7vt7aa z;F(#Ba!L@v=F0pfOAAC|36RorH<0R*7cMHhWI0@vM*lQTfl*z-U^UW$Ngl8!;5}@8 zr}ME3%fx0i#E@W`e8Dt#|0d^lE)f1O-*7|V#l*9rJ^5}9^Wpcwn8ST6LY#_U@{h+B zdwS5!C4m4f0s$g|XYZOyrDJasV|W!1zZ9s)N)2?F*CLyV4|Ls#(>Y9k%-5Kbg*gfa z(-aKm`HW?S-yzO07MdG2)j}i!aUEPl1gboai%JTa*<~qy-xpCQ8O5NNm6#3M(rp6H$tkh4S|38s2{>}0SJ93OC+BnByykfyp1u6=zf6n@` zoM5SnI$N}7c?hB%1uJb8Xd)6x9_?T(`&g>dN8{Q$#}S-(L8oe0hg;8BC*qWAGN8)* zK{aHIqvg&knIQpB76~( zobu_+?AH-F31;hvTs)R^pDOz^4aKX5Fx6oD!(a~cC&*2xoUUp45XMBBKL@)m+tyJ8 z9i^zBnccgXv=$g`DY=HVV9c2CEn6jFE1;8R@?M8|0=Y?TD&XV7(RzIg z#7!**0@Z_+n~;ddN`THm-i%KU2{3;M(iZen+D95x2OFTAc7^FwXva}xb-t%<^PKqz z(T+6@BV&Y!jHnSYdZ5XKutflgdk+4BA&202g1scgYmx>-koC!B(|AkinMjpbPPk8Y z1RfsME=E%^u|+H1N5)v<0)&X|TZqiBBfH0gLb8S@ho*1wWn1B}TVMn?*bN94Pbe7GEX{&3eu_##JqzdoESp| zIn`fkDE!z2rJsthMqv1E#(A#2yKa!_Gdtr{zP`TW5ugy&bC$MUyG~iVZd)H!Ds~Jn zt^dOJKtK^aGHLgSNS*;qTL0~{Iw854greMHyI=b(xr>tZ7x|*9rNltb5m@h0l#)&R zH$DM9Q3Ld)AatJu(?f-@HRD9?rp!CEoz8y83E?Xw?uD5M7WDKl4a#~gYmt3O@coCu ziFu<&w%~i3zb*3)Fgxkztmh-!QB>gr0Z6-`ik~s+9vtJUjtev?Pdlb1W&MN(#juz4 zDo#?oy=3{QsK(?OYdr>qwpY%c>He#GHGYdq()Kzzp^5lD{Qkt8J@`WcGc>(HZtF~* zoK& z35CwgTC(s1&etL7{Ga((9*mxV@s1t&6Xn9(%^e+ARwnZ&_g3c6B=gsZP??Yl7%@*BTB11cMJZB zgz{;Mp3_>a4rQOz1qAl7n{i7cZZ;Odxz!8ZBun#F~ z&3l(TF3eb+38j$iU{pz)c8PT|YeF21I3m5us2Nd^&bD;amxwV?H3`tG=~QNALl+zr zyh;epIIbKlR!hwp=iCvo>=juZznEe&eVqKwsz?&n=KB3b=)!6*%hCq%;-tgqA20$c zsylZ*pH*}nPDK%!IU@?=LFT1_iU&SMH3sgJo%Yb_tS-pCSdjURwhzHQGr&4IDE8B83&Cg^dWE zG!XH|iXI45J`k|2JM78M4UhV0wunxTNLBl}s!qhjbz7QDrU3T8Gj5Q-RYUwIgR97u z{ib5x3%UbL6mliV)EIG7(<-{5gPh~S9u>p|ghznN?C1{QxU*qj0TA7EvnzE8nYD%y zG6!!VW8xE(g~!ehVXZybL>)$WEIEZYBIS)$TJ>XxT3Vqbav@bMtFsLq7WycOOsF2j zDa{{Y-U-_VPJDO9St}KH8Y+GA@`3zkwAQx{17J-44>_++o7i=kchpjLd<;*YUT3ZA zPszh7^Y0ptrG0b7ZTx|l)oS@T&cFGue_|QQjmsS+f9r(!e-D}i<$e3S+=Ho{Ij9)NITe#g6vUKBUA{75~n~!n&$Q#M6R5M z5mE;;#98fWb`uL)P0`!8$aB$#`!?QYr?*Gq1=oF0?q(Bzn%cV%I@*P)*;cOtOv=me2? z4qoR`;>qPZtO=KS1-MekwinM?uLR(^@nwTmRQ{R7QqDfe-aQm8=G>hOqV7{ybX5j~ zqME#@PxPLChg{ikaQQG2C&9?r>|_Mzlv%iM!#UC3y|^ButU|`#Y1uRgW6M2a`ijgI5gU)3b2=3%kr$( zQNjsUs7BYPUiS2ZY`NRn9l%f?ft{zA=yuW{TkJ!vdOr2SS&MvnlIY)_hrr%fk%6^! zFbL(uHO_fT<%I_CWJaA&{TlnSK**^tM4zhB(4sz9_M7rS5J<{9Ya^WoIzmq zRC4TtYKtOr7Z^$Q81nr^;Sf1YYB21ku0QbKab+z}F$Z#^O~zhZpt0ZHy4^?@J;%+g`Al+6l|fyb?Dvn*)jMXvWw@_{>$vkwVu0oX?!0CgT>C0f0Un zuw}*)t`pTmX7^Gm&qrQ`_&TlsOwN;=>IJ$Kwq^P>AEL{J%x01T^U3jS`K2jon2q7N z=AE}fpXg5AKcAl?7Hb$a7^z)ECJVUX{2>@YwzXoi2N|OtY}z6gWVGf|bY@2e!bsD4A81#4z+uHc{+AU=5t#L|RTgJfE7A4PpRWzv^wI zO|$!^u5&sb-#*^nL^iWi(5h{Z>u*(r#gI^hOkC|V*6!ZA1sdQLh=il`#^BkF-%>Ts z1OT(`Fm+bY5)NBEWQ*46u{Ro*64qkW%uHFR+zK;R3<;Ut@!JH7*{7B^{BhQ&Myrr3 z`$kUItJ*VbNj7Hi*l=PUa?zYifiM|I>Ky9VrdtFPOnvcS4MrMT=aIcN3ST=mtU>>_ zA+YhJJmy=`(&F$ ztp3eP5RhcS42sQr`wYjomT47^NgH`*t>ho@e-&w|LJ=*@IsQqSpF>m~V8I2Z0qk~` zZMr1>g4O0}oWYvdmOHd)52Jd7{i~$&W>K@ZZhnM`KoEAwh8gb+!QnP>;-^RZgqO-s#@^n z#D}BSWHV<4S$HA9Yq`5BaVW`!>?$E z>UW!3pzOg;xm|KaC#d)ja!CL)CzRI0iDBrflS6aos@^On_11kD$wFXv`{le@gqeE$ z^6RZJMukv4Du(o^0~sUAEgOvtZb4whYF;jG6|`p|IKrmB^gQIs{ofnwxP0ybPMCeX zw|iuJkWpc^=+OJyOO>LTIrn)upYqYrgaZH}f31>lZCyTjjNDZF=sve{@`_fnk$3%? z7UQ3wU1;VV(_NKDbepMif&cnOx2qZ|We$YQ#swc?z2rIs*Cp1D{)How_6-}L5ge(a zs!0R#x47T-Yk}7o3V$LuRTBv*+^+7@?G5OE9VuF>eWWHR^iE2q(E_`ORaEf{7*RG5T;UeD0{5mHO;3-@;YQ>y0_109HzRtEj7}Fa$r*VWN)oxgCq4y z`Cj$LhWF#U3B6&*=Tng1iunDt@qM>Gs)V7eRo%G%UOv zv}ApgJg#}RJL1XVQCDrl@xuz|;EX>JHC+Z{R@xvK{L(BY{Z?Q(?lo^Wr9ZCULrW<< z6*rR)*IFopq85LmAu zE})jrE;;wJeDmXxe)ajiXIr*dwY9Q_>-sL`{aTZKa~jB8xedI#QL^w zKrXaU#pR^IM)Rkq&{Z9dbx!s3{FKeXTcq3GaI;uNrKG`Ib_-aTfja8lHHipf08T{; zHm8xyJDbq=44(wFcMe89fRgB{rKZLkUqvnZfSd-(YjsWIZcil_lt@i)YO z00#C|L)1KDHL{D1;+=7=eO%;;YHeu5h&0+w{hSh@J zO7NEVp%V{BO#y`TY&wK1x+u9eH1-^hTTL32Grx2ct+uK zXP=t^UFlI6gWn?mpPN8xkH;l`J|GRQm|uFmz!UDbn~5Qt9sBK<-uwpQPZD`;;Yx(j zf`(Ff11u}{Z%@jpgY+A4%Lqa~u7n4|_r132myykn?gQ`i0e)!(@=(_$ zLcyshA?^1@!c9dZjK-za7oxQdmC7O?@^0&T0=ti1yFxo92zO@3f6t95`e(8dxibHK zSm2RL;mtU0!Q2c4R>tp|%1(`#DGT8m%U0VIb_Vh1hGPjSr8NWHx@1b#|ro^UM)np z`)2`ul(?XoMsX!Xm(ER&4s3J*FMl)Kcqcd@ytIjW6B!?TB(iogK_Dq`&p%tMC)bcM zF2A9sl28RWl+6cKlW=2eR2hg1_a?Ii0@$R_$o3y#Pq37KnU-o#Tli`cYvRZi+6nrd z{Eo5H^}#UeDWG~lSfe^lj9JM?|DT;D*#g!yN;Y%&R9HFrP9yp8E!+wz@YSny1jip= zL+lBeWq{-qyZUV;>EAYFOct>+KYl-AcIN1kO47{d*3)B4C89&`LXEvaRQ<8wPV=jO z#Ro|#Krn?unsCx28(ZMaq7!lmB*)HoKUi8>E#2?351M{eQ zcdq}5>&C>6rJLG?XtYkp^wEB9ZtVQodc$#DREWmH3VsQv$@r(_Cp`UKge?CQ&KV>; zmTpEoss4BF$t$jNa9#%VX(ni_#Tcbp8{0p~<@J8Ibgq}-CnI&tzx$vkGLq}O>f!j? zAcYp2iKA;>i85J=ax;ExGVRcB4zdzuACJq0uKpQ(`R>C}7d31(=w=5hZ0uNHQ_K~D>BmDE+>|K zO8^qWU}WtMwCmS!>$I?_ND|`-dyw zPHJd?clR+hqsD;afWyed%nAJ{ufHQQu7yX9}*-T|E+}M6J67U=GE}-O&QL@6NzAJwi#ost*LN-$v zc(d38quL239SGw~ELoGtsC>6x|L^dq;l(ZQ+bs768PPGLRlmqU83%9mCnBmd*RYUG zUems^WL9u*^j3c0TZ2wC(_Hy_*X`rXkj)anH&x(RZLbz#Gh_Fv?tojF6?h+aHMRt^2)0AGMr>FK?Sj8HCXRw^;FFhdN16H8D^CKNsG zwB%Pz&OPa%8T;)vv9^zO!tU;ox@ueuf`bfxX3G?C3qR9ipZHgawF4~QELZY3d^4uL zkZ^NQ#=Q5+Mctags^of*uceSWO{i}5llVH=pQxUh{;|up3dS&=Sb`nh1UDP>C9RgN z)&Hbj7^E^sJIZ(UJ7+-e9Xvm1Ag~JJ46lA-mnO)W`=KYU4@9hTSw)fmjZ@>6j4CGh zC`8qET=*5%hu$Nwx>IG7E2xz)ySr-3`u$N|^Wglb@lzL}*J%^6`Y$WtuA9U3-Uqnt zafPryP_Z4}4QpO#pEA)(hz1u9x`U%nAGyRJ^B)rdwSs3!lA8{0oTfM0GTkT<=SeoJ zE(H|9@z#Pug6V<-YQmD=Ewb>3AhMZA2=*GWOv85{LXR0X)`CD4Q~GR~Ud=+~z+q4* zi|;{CQb&E&OJjJG$z`QwRHRdtf~8W?y<+9}6U>vqE7!wS?nz zIPV+4?SV71^~)YhL!1i^o*Dl))d#U2>c$=cUU>&jbL+E%D+3| zRIaUt#lrn+&r@>FnE*da4?p+?oZw9o9tl(qnu&x4O5IjI*Y{c zAL1P#*Z;RlK6!xoZN!a!!PFEXtL3YW7-HkAUPd}5xJJjJ5^E;^Ot3*o49*}|F7T1v zp{w5^8fM-LPU$ZPr$oAzKxb6NgUoFUv480GvV1=muoB>{NzaEq`NDX>ar%hDQkB=NF!Y=sIi)`q1e$CJcMO!pSh6WM`4G`31x+|jU z-S*`LmgP~2XRLYhH=~4IB~|ZM34aedT3`G0aXX9vzne7vcuzC@T|ev27l_rYs>ihP zYWp;erz~6`dB6-*Yk|uxz+g7*eRVIspUsXztu%v^%&lJ59Os;64|`o|AQO7*FaSZ! zS2SN$2+HK`)p?xg(j`N_7>Uanq#$D=ajkOo%exj-3TvLUT?0Be=T-~PkqZQWG)vp*739yM6H-7$mWT@AjZjoOiH4{90x>> zP8^ABF@4%pYHbYvuG7k9K~HjyvtSu4Tn#gbSF ze~5QvQd`7UG?n3kTrkp00Tk+RxJ2cj_hMW2p>j`c^vxkS{SKo}fX5(Lwj^w)D>M^K z<%MT*SnFF~^bGLEAIS3GaMV6AIer>2j`z1A07Q&Nc_h-~4XK~A6EmNjUPz!E{ux3-fvVi)~wrym?9r+qoF;SqHzsg3bYgCeMV z?#?q%$TN`HeD9Xl7xxYneZou~QQCf~$I$Y%exK8o29ekRGf;^0m@%&ElB()(t70bJ z&VJ5X3sATT3SzxiGNEGJY*^eKYiU>n!3%dc!*fQgpp@==O&Y;+jY7SDl8>>_LbhR`n=jRRb0$%ARR^jHfu}+7S zPRCiywQ=wdw(&&Tei)%}gXdu>6F+|hMiu?^oR!OdYr2j8Q6;08oy^Cf9}LFYX)Ea> z67$IF)4mRx3@ub+yP*@qxFF|O+2*xA{G@@*Nz%DkxKr0DB~8?iS6H2nZ91KZ&F8RA zJNWSrgt^~`W?p9{Y)wq%eLscP>7t`ntW38Y?B1h4xl9u+?g9DEOO)E|?sRHPJhA+d zwR(_Q_fvXsT92^7>C?rISx%0Gzj1BDJ3)!{tO0yHFy5($I3hldwQ%Y&bOMzp^7ZnO z{y&0e;g}R}{2p00ZX#bdOstynK=)2x2wa5V%sJ^e4&9E`_C>Iaw!+kFP#B9f%gcrK!Z|3ws8M&$2&4m{Jl<1DvBBa5G*&H#4dS?zb^4sKJB${6vMo#8yR~#?JYM-?B>&uzPhnA@>K$NbZ-h>Dft)| zxpihD*fHy{uy<1*#_5#Z--QN(v1>Y2@xf>v4~JqAa8CskPy(Y_OsB;hE4*sf$){aj z6FD-N9113NyiO_>tKbp1+hbZBl=5`C!*v*NOzM72YA_9j@KBsa#vr<}Qr&_&vtw4L z$A8&GsEHn!{wRGAKPo(U`TV5+3y046VpdQZ4=x;(E#Q^HWP}+ zMlU9})JbrYbC8%ys^lL09$>^e%zoO=J=85G_RO;m^9FzugR2Ce6Wmm|no8Rb zNR>lVA!{+fLNq`K*!%W^BnA0)qC6!MQZm?6k2k|j+o)li+>A?H9TY$YJL$)Az#^yy zl>Do1GIM~{mB3AO*&vwANEK#Mt{$(nMVFuv`;1J zI51`I0aR>vGF9~}BXMNv*?IL@&Vh-mN(OQ(e<}R?YRi`0b%J|fKd;0uD=r8hn%c_0 z7=NVU;jUApR~}Zqp>I9z1(m@Oa%W+hFBTB{>{vJ_ALALRHXTCW*T7MqiHS!|ra_P1 z_B+~5b{~cxB`7yEP#Sja*Tp&tJ(NUi-*Pj(+!)zCUpLm*^kd+gm4r(BWxj_yToSgu zj6N5z)tOOlDpnS>Pc~?uGb55Wqtam<2`*xY(JR7FF=1LTluvBi-jErcqSSi)Bk~Mk zu|s9C%WttuWwE;A({)Ipnm)%i)L~+EIuGkG0haPOgo&K-I`}v~9!$bRksyT!bpMn< zQNa*%g;QUH4t~XMJ^|70pvu9Kzp%P(v-7VZj^RqT)8O7z8E-;}yOk~{-GOQNcCwzQ zRn@8Q!P#G0d}1OqS}=gbSFDTsWk)pg&js!`Oo}ZgYhSbSkvPp+vf15sVq}*`WLHgv zq72F{qu{{PwQus>pt}#tmaDAOI25m*$dZ;+}mSf)q;Va~v7WHBYSB&A=NSpADa|ZI)%SPQ8_2KG1^AJfMe68_{-D67*(o zdx^8fBYVUb+rL(PZw2c-@_{Q&RqmsT_SNl;5xZGN6*FO9n(%R7>q^mr1wEv@fUAGI zJ!Vo%bJD5saq4ypyr;X>e#E9>S?YA0(_w%oL#QV)i`_?4X>@=4P~LOD!0ICK3VIzP zEaPw7j;-fd`KMt(8Nvl0_9EWCw z0izAY*uWiX^5qp)U>**1epP230cH{nQkX4JRBQxsH~FmlTaLX03p4pc%O@jt+HhuJ z%M%VRi#=O$2?GoytBIQ^p18YGKP#{(G@K@}Kro7`s5pW0$xxus!2yjX)t6O#nWg}+ zG_t%x9rR$PEC3IZ)}~4^Od0=;-{sGI3k*uUAj!cge$q-Vx-%ZXdsaSPV#aO)D#Y7w zS`(yMPIu|h_rS`$=;j?5SjCHN>{hA>Z&Ub(+3j%=Z@AT+j%N~KeH@yVy`6$4!ev;2v=Gbh=V$Tjpla z(hG+YR2C{e%DzTtBn?gW@hsvjX3dNngSNM()VjZw1~P%nJ@;NYDlo3PY#DM3W3^5ea&uGl}$ zuTuEio4apZ+%-JywH_}(;$OCZEY4~uz{uICwKc0ByW4i& zW1Vzz{lO9@eZb@G55fL$)X%R<4sno0>7zN5Klm~0$K97uTOFLPbFH_kGU9&}$MYok zPVSQcHV_DL$Jn+l(M+$Zj@>!^tIG!Kr$OT!2PYcWFSU)~$lKL=b%0%35iZzC!kedS zrp@BFW;_WMC9C=yJFc8|&s7lKf50hrfbnU%5wANmJyvna4QNi_Qg^dgc+Sl->SpHe zI#j1?D?c6!ddN)q!1bIFiR?0R|B?cf02Sy1N7m*Mo41#lpOav(^2#d|jf5Ps=)lJE zDn9NL%xf?Y=B?_ssFPJUMHVjKulQaObV?vR0$0biR*7a>@D3<{S~hIGD&hY2a*mro zyAbsA)#M7#!zXpcHL=y62TN$KxJyiN5XgqMJQ6E0Z53zYyt1;?zE=4$BImDPeU5;r z8n?Zs(~A`oD$F~v9_4QJUZ1o%oT<*_Wn@jed)(tA<5{upZ>>Y?F$Q^@(Y}KLC<3@wm3(EJxl-x_`-^hKzfvfymj@de+YYqoo F`yZxhIz<2g literal 0 HcmV?d00001 diff --git a/public/images/logo.png b/public/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9a03917c19d2434eaeb9ac358dbbeb8281d3aefa GIT binary patch literal 22354 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 a.getInt("sorter") - b.getInt("sorter")) + + /* + * + * ADD PAGE + * + */ + let parentLink = "" + if (dbPage.getInt("parent_id") > 0) { + const dbParentPage = _db.findFirst( + "page", + _val.map() + .set("where", _val.map().set("id", dbPage.getInt("parent_id"))) + ) + parentLink = dbParentPage.getString("link") + } + pages.getValues(dbPage.getString("language")) + .add( + _val.map() + .set("parent", parentLink) + .set("link", dbPage.getString("link")) + .set("title", dbPage.getString("title")) + .set("description", dbPage.getString("description")) + .set("keywords", dbPage.getString("keywords")) + .set("menu", dbPage.getBoolean("menu")) + .set("menu_title", dbPage.getString("menu_title")) + .set("sorter", dbPage.getInt("sorter")) + .set("structure", structure) + ) + } + data.set("pages", pages) + + CluarCustomData(data) + + /* + * + * DATA FILE + * + */ + const file = _app.file(`${Cluar.base()}/cluarData.js`) + file.output().print(`window.cluarData = ${data.toJSON(4)};`) + + if (_app.settings.getBoolean("uglifyjs") == true) { + const osUglifyJS = _os.init() + osUglifyJS.directory(_app.folder(Cluar.base())) + const osUglifyJSResult = osUglifyJS.command(`uglifyjs -o cluarData.js -- cluarData.js`) + if (osUglifyJSResult.output() != '' && osUglifyJSResult.error() != '') { + _log.error(`UglifyJS failed:\n\tOutput: ${osUglifyJSResult.output()}\n\tError: ${osUglifyJSResult.error()}`) + } + } + + /* + * + * SITEMAP & ROBOTS + * + */ + const origin = _app.settings.getValues("website").getString("origin") + const xml = _xml.create() + const document = xml.builder().newDocument() + const tagURLSet = document.createElement("urlset") + const attrNS = document.createAttribute("xmlns") + attrNS.setValue("http://www.sitemaps.org/schemas/sitemap/0.9") + tagURLSet.setAttributeNode(attrNS) + const attrNews = document.createAttribute("xmlns:news") + attrNews.setValue("http://www.google.com/schemas/sitemap-news/0.9") + tagURLSet.setAttributeNode(attrNews) + const attrXHTML = document.createAttribute("xmlns:xhtml") + attrXHTML.setValue("http://www.w3.org/1999/xhtml") + tagURLSet.setAttributeNode(attrXHTML) + const attrMobile = document.createAttribute("xmlns:mobile") + attrMobile.setValue("http://www.sitemaps.org/schemas/sitemap/0.9") + tagURLSet.setAttributeNode(attrMobile) + const attrImage = document.createAttribute("xmlns:image") + attrImage.setValue("http://www.google.com/schemas/sitemap-image/1.1") + tagURLSet.setAttributeNode(attrImage) + const attrVideo = document.createAttribute("xmlns:video") + attrVideo.setValue("http://www.google.com/schemas/sitemap-video/1.1") + tagURLSet.setAttributeNode(attrVideo) + for (const language of languages) { + if (pages.getValues(language.getString("code")) == null) { + continue + } + for (const page of pages.getValues(language.getString("code"))) { + const tagURL = document.createElement("url") + const tagLoc = document.createElement("loc") + tagLoc.appendChild(document.createTextNode(origin +"/"+ language.getString("locale") + page.getString("link"))) + tagURL.appendChild(tagLoc) + const tagChangeFreq = document.createElement("changefreq") + tagChangeFreq.appendChild(document.createTextNode("daily")) + tagURL.appendChild(tagChangeFreq) + let priority = "0.5" + if (page.getString("link") == '/') { + priority = "1.0" + } else if (page.getString("parent") == '') { + priority = "0.7" + } + const tagPriority = document.createElement("priority") + tagPriority.appendChild(document.createTextNode(priority)) + tagURL.appendChild(tagPriority) + tagURLSet.appendChild(tagURL) + } + } + document.appendChild(tagURLSet) + xml.save(document, _app.file(`${Cluar.base()}/sitemap.xml`)) + if (!_app.file(`${Cluar.base()}/robots.txt`).exists()) { + const output = _app.file(`${Cluar.base()}/robots.txt`).output() + .println('User-agent: *') + .println('Allow: /') + .println(`Sitemap: ${origin}/sitemap.xml`) + .close() + } + } + + static publishImage(section, fileName) { + if (fileName == "") { + return; + } + const folder = _app.folder(`${Cluar.base()}/images/${section}`) + if (!folder.exists()) { + folder.mkdir() + } + _storage.database(section, "image", fileName) + .file() + .copy(`${folder.path()}/${fileName}`, true) + } + + static actionDataItemProcessWithAnImage() { + const section = _dataItem.getTable() + + const folder = _app.folder(`${Cluar.base()}/images/${section}`) + + if (!folder.exists()) { + folder.mkdir() + } + + if (_dataItem.getValues().has("image:old")) { + _app.file(`${folder.path()}/${_dataItem.getValues().getString("image:old")}`).delete() + } + + if (_dataItem.getValues().has("image:new")) { + _storage.database(section, "image", _dataItem.getValues().getString("image:new")) + .file() + .copy(`${folder.path()}/${_dataItem.getValues().getString("image:new")}`) + } + } + + static actions(section, id) { + const dbActions = _db.query(` + SELECT + action.title, + action.content, + action.indication, + action.link + FROM action + INNER JOIN ${section}_action ON ${section}_action.action_id = action.id + WHERE + action.active = true + AND ${section}_action.active = TRUE + AND ${section}_action.${section}_id = ${id} + ORDER BY ${section}_action.sorter + `) + const actions = _val.list() + for (const dbAction of dbActions) { + actions.add( + _val.map() + .set("title", dbAction.getString("title")) + .set("content", dbAction.getString("content")) + .set("indication", dbAction.getString("indication")) + .set("link", dbAction.getString("link")) + .set("sorter", dbAction.getInt("sorter")) + ) + } + return actions + } +} diff --git a/server/core/CluarCustomData.js b/server/core/CluarCustomData.js new file mode 100644 index 0000000..1feeccd --- /dev/null +++ b/server/core/CluarCustomData.js @@ -0,0 +1,4 @@ + +const CluarCustomData = (data) => { + +} diff --git a/server/core/_config.js b/server/core/_config.js new file mode 100644 index 0000000..b433ddd --- /dev/null +++ b/server/core/_config.js @@ -0,0 +1,22 @@ + +_config.set("_lang", _config.get("_lang:default")) + +if (_env.is("dev") + && (_url.equals("/") || _url.equals("/Index.netuno"))) { + _config + .set("_login:user", "dev") + .set("_login:pass", "dev") + .set("_login:auto", _req.getString("action") != "logout") +} + +/** + * DISABLE BROWSER CACHE + */ + +if (_url.download.isDownloadable()) { + if (_env.is("dev") && _url.indexOf("/public/scripts/main.js") > 0) { + _header.noCache() + } else { + _header.cache(2628000) + } +} diff --git a/server/core/_init.js b/server/core/_init.js new file mode 100644 index 0000000..1cbfacb --- /dev/null +++ b/server/core/_init.js @@ -0,0 +1,5 @@ + +/** + * FIREBASE - Set your listeners + */ +// _firebase.listener("my-test", _header.baseURL() + "/services/firebase/listener/my-test.netuno") diff --git a/server/core/_request_close.js b/server/core/_request_close.js new file mode 100644 index 0000000..e69de29 diff --git a/server/core/_request_end.js b/server/core/_request_end.js new file mode 100644 index 0000000..e69de29 diff --git a/server/core/_request_error.js b/server/core/_request_error.js new file mode 100644 index 0000000..9bab7f2 --- /dev/null +++ b/server/core/_request_error.js @@ -0,0 +1,17 @@ + +if (!_out.isClosed()) { + _out.print( + "### SERVER ERROR ###" + ) + /* + // Is insecure but the code below will print errors with more details... + _out.print( + "SERVER ERROR # " + + _error.data().getString("file") + +":"+ + _error.data().getString("line") + +" # "+ + _error.data().getString("message") + ) + */ +} diff --git a/server/core/_request_start.js b/server/core/_request_start.js new file mode 100644 index 0000000..4577349 --- /dev/null +++ b/server/core/_request_start.js @@ -0,0 +1,2 @@ + +_config.set("_script:_request_end", true) diff --git a/server/core/_request_url.js b/server/core/_request_url.js new file mode 100644 index 0000000..d726c92 --- /dev/null +++ b/server/core/_request_url.js @@ -0,0 +1,14 @@ + +// _log.info(_url.url()) + +/** + * ALLOW CORS + */ +/* +_header.response.set("Access-Control-Allow-Origin", "https://www.netuno.org") +_header.response.set("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,OPTIONS") +_header.response.set("Access-Control-Allow-Headers", "content-type,x-requested-with,authorization") +_header.response.set("Access-Control-Allow-Credentials", true) +*/ + +_url.to(_url.request()) diff --git a/server/core/_service_config.js b/server/core/_service_config.js new file mode 100644 index 0000000..a94daa7 --- /dev/null +++ b/server/core/_service_config.js @@ -0,0 +1,13 @@ + +/** + * When service need public access... + */ +if (_env.is("dev")) { + _service.allow() +} + +/* +if (_service.path == 'samples/my-service') { + _service.allow() +} +*/ diff --git a/server/core/_service_end.js b/server/core/_service_end.js new file mode 100644 index 0000000..e69de29 diff --git a/server/core/_service_error.js b/server/core/_service_error.js new file mode 100644 index 0000000..38bcefe --- /dev/null +++ b/server/core/_service_error.js @@ -0,0 +1,5 @@ + +/* +// Print error: +_log.fatal("Service "+ _service.path, _error.data().get("throwable")) +*/ \ No newline at end of file diff --git a/server/core/_service_start.js b/server/core/_service_start.js new file mode 100644 index 0000000..e69de29 diff --git a/server/package.json b/server/package.json new file mode 100644 index 0000000..b5811cf --- /dev/null +++ b/server/package.json @@ -0,0 +1,7 @@ +{ + "name": "server", + "version": "1.0.0", + "description": "Server modules dependencies.", + "author": "netuno.org", + "license": "ISC" +} diff --git a/server/setup/001-language.js b/server/setup/001-language.js new file mode 100644 index 0000000..a30bba2 --- /dev/null +++ b/server/setup/001-language.js @@ -0,0 +1,31 @@ + + +// ----------------------------------------------------------- +// +// LANGUAGE +// +// ----------------------------------------------------------- +// +// CODE GENERATED AUTOMATICALLY +// + + +_db.insertIfNotExists( + "language", + _val.init() + .set("uid", "b6804103-2f6c-4184-a431-0c8b94ea7322") + .set("code", "PT") + .set("locale", "pt") + .set("description", "Portugu\u00EAs") + .set("default", true) +); + +_db.insertIfNotExists( + "language", + _val.init() + .set("uid", "dd9ca34e-3f70-461d-a42d-234651233658") + .set("code", "EN") + .set("locale", "en") + .set("description", "English") + .set("default", false) +); diff --git a/server/setup/002-page_status.js b/server/setup/002-page_status.js new file mode 100644 index 0000000..e63bf05 --- /dev/null +++ b/server/setup/002-page_status.js @@ -0,0 +1,27 @@ + + +// ----------------------------------------------------------- +// +// PAGE_STATUS +// +// ----------------------------------------------------------- +// +// CODE GENERATED AUTOMATICALLY +// + + +_db.insertIfNotExists( + "page_status", + _val.init() + .set("uid", "e24a0cdf-c860-48f2-b597-689f165fd110") + .set("code", "published") + .set("description", "Publicada") +); + +_db.insertIfNotExists( + "page_status", + _val.init() + .set("uid", "b0389f50-4dc3-4be1-ad1e-070573a3f999") + .set("code", "draft") + .set("description", "Rascunho") +); diff --git a/server/setup/003-content_type.js b/server/setup/003-content_type.js new file mode 100644 index 0000000..c9e9a18 --- /dev/null +++ b/server/setup/003-content_type.js @@ -0,0 +1,51 @@ + + +// ----------------------------------------------------------- +// +// CONTENT_TYPE +// +// ----------------------------------------------------------- +// +// CODE GENERATED AUTOMATICALLY +// + + +_db.insertIfNotExists( + "content_type", + _val.init() + .set("uid", "5d68fe7f-bfc9-424b-98bc-50c0bfe96f2f") + .set("code", "text") + .set("description", "Texto") +); + +_db.insertIfNotExists( + "content_type", + _val.init() + .set("uid", "6638fba0-ce12-4f99-be1f-a407eea2eeab") + .set("code", "image-left") + .set("description", "Imagem \u00E0 Esquerda") +); + +_db.insertIfNotExists( + "content_type", + _val.init() + .set("uid", "03a63665-e41d-4549-bd4c-85063c978968") + .set("code", "image-right") + .set("description", "Imagem \u00E0 Direita") +); + +_db.insertIfNotExists( + "content_type", + _val.init() + .set("uid", "b01f00ae-7179-4a21-bb7b-b9ac6efb94db") + .set("code", "image-top") + .set("description", "Imagem no Topo") +); + +_db.insertIfNotExists( + "content_type", + _val.init() + .set("uid", "b79a8510-482c-43a6-9f00-3f7eb093b347") + .set("code", "image-bottom") + .set("description", "Imagem Embaixo") +); diff --git a/server/setup/004-banner_type.js b/server/setup/004-banner_type.js new file mode 100644 index 0000000..e02dba8 --- /dev/null +++ b/server/setup/004-banner_type.js @@ -0,0 +1,35 @@ + + +// ----------------------------------------------------------- +// +// BANNER_TYPE +// +// ----------------------------------------------------------- +// +// CODE GENERATED AUTOMATICALLY +// + + +_db.insertIfNotExists( + "banner_type", + _val.init() + .set("uid", "d7ca6e7d-08a7-4ec0-8d16-9e3f09cd657c") + .set("code", "default") + .set("description", "Padr\u00E3o") +); + +_db.insertIfNotExists( + "banner_type", + _val.init() + .set("uid", "fa15255a-a309-4ef5-bf72-935fd4e1c1a7") + .set("code", "secondary") + .set("description", "P\u00E1gina secund\u00E1ria") +); + +_db.insertIfNotExists( + "banner_type", + _val.init() + .set("uid", "beb0dcb5-b445-4a44-b038-522c4c544c01") + .set("code", "default-sub-banner") + .set("description", "Padr\u00E3o com Destaque") +); diff --git a/server/setup/005-functionality_type.js b/server/setup/005-functionality_type.js new file mode 100644 index 0000000..62f3c8f --- /dev/null +++ b/server/setup/005-functionality_type.js @@ -0,0 +1,35 @@ + + +// ----------------------------------------------------------- +// +// FUNCTIONALITY_TYPE +// +// ----------------------------------------------------------- +// +// CODE GENERATED AUTOMATICALLY +// + + +_db.insertIfNotExists( + "functionality_type", + _val.init() + .set("uid", "2d35fd56-0256-4fc5-a685-8eccf02f17d3") + .set("code", "contact-form") + .set("description", "Formul\u00E1rio de Contacto") +); + +_db.insertIfNotExists( + "functionality_type", + _val.init() + .set("uid", "f16671f5-39a3-483a-b6d0-8e71f4720d3d") + .set("code", "budget-request") + .set("description", "Pedido de Or\u00E7amento") +); + +_db.insertIfNotExists( + "functionality_type", + _val.init() + .set("uid", "a1d26bda-57cd-4ba1-9aa3-868714260b01") + .set("code", "map") + .set("description", "Mapa") +); diff --git a/server/setup/_end.js b/server/setup/_end.js new file mode 100644 index 0000000..45915e6 --- /dev/null +++ b/server/setup/_end.js @@ -0,0 +1,22 @@ +// _core : Cluar + +if (_db.query(`SELECT * FROM page`).size() == 0) { + _db.insertIfNotExists( + "page", + _val.init() + .set("uid", "5002a742-e092-4c0b-8536-546bd1319c7f") + .set("language_id", "dd9ca34e-3f70-461d-a42d-234651233658") + .set("parent_id", null) + .set("link", "/") + .set("title", "Home") + .set("status_id", "e24a0cdf-c860-48f2-b597-689f165fd110") + .set("description", "") + .set("social_description", "") + .set("keywords", "") + .set("social_image", "") + .set("menu", true) + .set("menu_title", "") + .set("sorter", 0) + ); + Cluar.build(); +} diff --git a/server/setup/_schema-form-01-action.js b/server/setup/_schema-form-01-action.js new file mode 100644 index 0000000..06af8e9 --- /dev/null +++ b/server/setup/_schema-form-01-action.js @@ -0,0 +1,184 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "A\u00E7\u00E3o") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "action") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "e431bb06-50f4-4618-abf8-c7a608a9101d") +) +_form.createComponentIfNotExists( + "e431bb06-50f4-4618-abf8-c7a608a9101d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Conte\u00FAdo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "content") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "texthtml") + .set("uid", "85919046-2971-4cd7-87b9-314ff8b58870") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 4) +) +_form.createComponentIfNotExists( + "e431bb06-50f4-4618-abf8-c7a608a9101d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Indica\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "indication") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "56082061-c15b-4d9c-977b-b2258bf1d105") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 5) +) +_form.createComponentIfNotExists( + "e431bb06-50f4-4618-abf8-c7a608a9101d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Idioma") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "language_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"language:description\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "48365411-b801-4de3-93a7-16f4afd652d1") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "e431bb06-50f4-4618-abf8-c7a608a9101d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Liga\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "link") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "47c46f5b-cb22-40eb-ad8a-7edc84d455d3") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 6) +) +_form.createComponentIfNotExists( + "e431bb06-50f4-4618-abf8-c7a608a9101d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "title") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "a307c5e4-3c1c-42b7-8f0b-12320acc2a40") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) diff --git a/server/setup/_schema-form-02-banner.js b/server/setup/_schema-form-02-banner.js new file mode 100644 index 0000000..d33a41a --- /dev/null +++ b/server/setup/_schema-form-02-banner.js @@ -0,0 +1,339 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Estandarte") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "banner") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757") +) +_form.createComponentIfNotExists( + "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Conte\u00FAdo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "content") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "texthtml") + .set("uid", "cc0d30ec-f38c-4198-81d5-b2343f84e989") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 7) +) +_form.createComponentIfNotExists( + "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "image") + .set("uid", "f267dd86-29a8-4de0-88ad-b676771db65a") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) +_form.createComponentIfNotExists( + "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem Alt") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image_alt") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textarea") + .set("uid", "be21b649-b8f3-41fb-a986-db2bbc9b8b6e") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 5) +) +_form.createComponentIfNotExists( + "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image_title") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "41005c54-4028-48c2-a861-6d0403a83d82") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 4) +) +_form.createComponentIfNotExists( + "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "P\u00E1gina") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "page_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"page:language_id,title\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "4fe6c98c-4657-4617-a637-1e4db09b9bd8") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Posi\u00E7\u00E3o X") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "position_x") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "8b2aeed8-6abb-4bf4-ac10-357f7e304fb8") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 9) +) +_form.createComponentIfNotExists( + "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Posi\u00E7\u00E3o Y") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "position_y") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "1f913571-f07c-4804-9513-270ed01c2c6b") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 2) + .set("y", 9) +) +_form.createComponentIfNotExists( + "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Ordem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "sorter") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textnum") + .set("uid", "946720ec-6ba9-4660-9200-70f6a668fd54") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 8) +) +_form.createComponentIfNotExists( + "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "title") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "43746ebb-6d2f-40e7-9013-026b7b9527cd") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 6) +) +_form.createComponentIfNotExists( + "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Tipo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "type_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"banner_type:description\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "a05cdf06-4759-471b-bd9f-17b33f8b279e") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-03-banner_action.js b/server/setup/_schema-form-03-banner_action.js new file mode 100644 index 0000000..533938b --- /dev/null +++ b/server/setup/_schema-form-03-banner_action.js @@ -0,0 +1,123 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "A\u00E7\u00E3o") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "banner_action") + .set("parent_uid", "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "25b3d049-5020-404c-b275-ddd94d45854d") +) +_form.createComponentIfNotExists( + "25b3d049-5020-404c-b275-ddd94d45854d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "A\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "action_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"action:language_id,title\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "84a94889-bd12-46f3-a840-847e3b6ccce9") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) +_form.createComponentIfNotExists( + "25b3d049-5020-404c-b275-ddd94d45854d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Estandarte") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "banner_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"banner:title\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "3f2bba47-4de6-4033-9dd0-a987078fd319") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "25b3d049-5020-404c-b275-ddd94d45854d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Ordem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "sorter") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textnum") + .set("uid", "6730f8b7-e86d-4c5b-ad3c-40b271094551") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) diff --git a/server/setup/_schema-form-04-banner_type.js b/server/setup/_schema-form-04-banner_type.js new file mode 100644 index 0000000..5b69d37 --- /dev/null +++ b/server/setup/_schema-form-04-banner_type.js @@ -0,0 +1,92 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Tipo") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "banner_type") + .set("parent_uid", "f8a5b285-d7ba-4ec6-9c7d-ba1ca75f0757") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "24446fbd-870d-4ba1-9547-61ffde717ea4") +) +_form.createComponentIfNotExists( + "24446fbd-870d-4ba1-9547-61ffde717ea4", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "C\u00F3digo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "code") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "7aca44f5-880e-4e77-a4bd-5f2d7ba790b4") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "24446fbd-870d-4ba1-9547-61ffde717ea4", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Descri\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "description") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "708df9bb-4907-4183-89ed-f169785d8e71") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-05-configuration.js b/server/setup/_schema-form-05-configuration.js new file mode 100644 index 0000000..c924d97 --- /dev/null +++ b/server/setup/_schema-form-05-configuration.js @@ -0,0 +1,122 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Configura\u00E7\u00E3o") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "configuration") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "67c60baf-b667-4341-9f41-7e5039f14b13") +) +_form.createComponentIfNotExists( + "67c60baf-b667-4341-9f41-7e5039f14b13", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Idioma") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "language_id") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"language:description\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "e2d15094-ec51-4222-9559-6a8a7795ea5d") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "67c60baf-b667-4341-9f41-7e5039f14b13", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Par\u00E2metro") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "parameter_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"configuration_parameter:description\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "1e758e70-b8dc-4912-842b-5102591dbd39") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) +_form.createComponentIfNotExists( + "67c60baf-b667-4341-9f41-7e5039f14b13", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Valor") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "value") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textarea") + .set("uid", "3967f33e-1e55-4d2a-b84a-c9e3a1e2b3f9") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) diff --git a/server/setup/_schema-form-06-configuration_parameter.js b/server/setup/_schema-form-06-configuration_parameter.js new file mode 100644 index 0000000..aa93616 --- /dev/null +++ b/server/setup/_schema-form-06-configuration_parameter.js @@ -0,0 +1,92 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Par\u00E2metro") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "configuration_parameter") + .set("parent_uid", "67c60baf-b667-4341-9f41-7e5039f14b13") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "5617ebed-9f41-4a31-a118-e616768b7465") +) +_form.createComponentIfNotExists( + "5617ebed-9f41-4a31-a118-e616768b7465", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "C\u00F3digo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "code") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "f877ef38-1323-4298-a975-07b3dc987b97") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "5617ebed-9f41-4a31-a118-e616768b7465", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Descri\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "description") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "1b1f115c-68ca-4cf6-be7b-bf9ac3842f81") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-07-contact.js b/server/setup/_schema-form-07-contact.js new file mode 100644 index 0000000..82d5643 --- /dev/null +++ b/server/setup/_schema-form-07-contact.js @@ -0,0 +1,184 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Contacto") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "contact") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "80fe7d91-d01c-4275-abf6-4b2814d5eb33") +) +_form.createComponentIfNotExists( + "80fe7d91-d01c-4275-abf6-4b2814d5eb33", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Email") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "email") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "email") + .set("uid", "8d4acbcd-df5e-4eef-9a71-fa99f180063a") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) +_form.createComponentIfNotExists( + "80fe7d91-d01c-4275-abf6-4b2814d5eb33", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Mensagem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "message") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textarea") + .set("uid", "3a608868-8ede-496d-8aeb-ed0aa4c303f5") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 4) +) +_form.createComponentIfNotExists( + "80fe7d91-d01c-4275-abf6-4b2814d5eb33", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Momento") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "moment") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"DEFAULT_CURRENT\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"true\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "datetime") + .set("uid", "95bb995e-cbff-42f8-bd02-98d6777b74c4") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 5) +) +_form.createComponentIfNotExists( + "80fe7d91-d01c-4275-abf6-4b2814d5eb33", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Nome") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "name") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "48b46cf3-904e-441f-ad94-90bbb7f80cad") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "80fe7d91-d01c-4275-abf6-4b2814d5eb33", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "subject") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "c75badc5-4807-468e-aee9-d437ae758f68") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) diff --git a/server/setup/_schema-form-08-content.js b/server/setup/_schema-form-08-content.js new file mode 100644 index 0000000..dd5d3b4 --- /dev/null +++ b/server/setup/_schema-form-08-content.js @@ -0,0 +1,308 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Conte\u00FAdo") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "content") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "3ed92a11-c243-4bdb-a542-bb22abca638d") +) +_form.createComponentIfNotExists( + "3ed92a11-c243-4bdb-a542-bb22abca638d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Conte\u00FAdo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "content") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "texthtml") + .set("uid", "d1d0388a-37d4-49d4-8159-8d82c0db69cb") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 7) +) +_form.createComponentIfNotExists( + "3ed92a11-c243-4bdb-a542-bb22abca638d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "image") + .set("uid", "554ca80d-0f44-4a78-bcd8-97893edbc730") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) +_form.createComponentIfNotExists( + "3ed92a11-c243-4bdb-a542-bb22abca638d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem Alt") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image_alt") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textarea") + .set("uid", "22f3466a-19eb-4a17-8004-aa2d7f987413") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 5) +) +_form.createComponentIfNotExists( + "3ed92a11-c243-4bdb-a542-bb22abca638d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Largura M\u00E1xima da Imagem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image_max_width") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textnum") + .set("uid", "5cceccb9-0264-4ff8-9811-0809cfa08171") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 5) +) +_form.createComponentIfNotExists( + "3ed92a11-c243-4bdb-a542-bb22abca638d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image_title") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "d5202e9a-ece8-45bf-90ee-300b2fccb9d4") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 4) +) +_form.createComponentIfNotExists( + "3ed92a11-c243-4bdb-a542-bb22abca638d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "P\u00E1gina") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "page_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"page:language_id,title\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "c94c29c2-85c0-4bac-8ecf-b818edd45565") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "3ed92a11-c243-4bdb-a542-bb22abca638d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Ordem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "sorter") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textnum") + .set("uid", "c1d97178-6f79-4237-b5de-f8ecee74dce2") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 8) +) +_form.createComponentIfNotExists( + "3ed92a11-c243-4bdb-a542-bb22abca638d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "title") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "ee0eb90d-14db-4951-bee9-c8f3e8cd9033") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 6) +) +_form.createComponentIfNotExists( + "3ed92a11-c243-4bdb-a542-bb22abca638d", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Tipo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "type_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"content_type:description\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "b08f10fd-fb79-4081-8543-2c4c78b3cfaf") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-09-content_action.js b/server/setup/_schema-form-09-content_action.js new file mode 100644 index 0000000..39c454e --- /dev/null +++ b/server/setup/_schema-form-09-content_action.js @@ -0,0 +1,123 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "A\u00E7\u00E3o") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "content_action") + .set("parent_uid", "3ed92a11-c243-4bdb-a542-bb22abca638d") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "407e5448-e290-4f69-92cf-704ac2def08c") +) +_form.createComponentIfNotExists( + "407e5448-e290-4f69-92cf-704ac2def08c", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "A\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "action_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"action:language_id,title\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "b0f0c550-eb9d-48f8-b094-fdcb60bf5cf0") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) +_form.createComponentIfNotExists( + "407e5448-e290-4f69-92cf-704ac2def08c", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Conte\u00FAdo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "content_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"content:page_id,title\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "352c834c-8c33-4d05-81cc-0e29c7048316") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "407e5448-e290-4f69-92cf-704ac2def08c", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Ordem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "sorter") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textnum") + .set("uid", "74e6d9c2-cf21-45c4-9013-2d6ab4e5fb91") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) diff --git a/server/setup/_schema-form-10-content_type.js b/server/setup/_schema-form-10-content_type.js new file mode 100644 index 0000000..1ba8c7e --- /dev/null +++ b/server/setup/_schema-form-10-content_type.js @@ -0,0 +1,92 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Tipo") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "content_type") + .set("parent_uid", "3ed92a11-c243-4bdb-a542-bb22abca638d") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "a2097bd8-cfaa-4e02-a2e9-f1626864f60e") +) +_form.createComponentIfNotExists( + "a2097bd8-cfaa-4e02-a2e9-f1626864f60e", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "C\u00F3digo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "code") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "e773f9ec-d6e5-44fb-a1f3-6d5897ee976b") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "a2097bd8-cfaa-4e02-a2e9-f1626864f60e", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Descri\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "description") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "0d3e6c75-15b6-4d2c-86d8-fd1ff46ab3d6") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-11-dictionary.js b/server/setup/_schema-form-11-dictionary.js new file mode 100644 index 0000000..1b35878 --- /dev/null +++ b/server/setup/_schema-form-11-dictionary.js @@ -0,0 +1,122 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Dicion\u00E1rio") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "dictionary") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "d2cfcdaf-b308-4e99-bfc1-b1a5df0b3090") +) +_form.createComponentIfNotExists( + "d2cfcdaf-b308-4e99-bfc1-b1a5df0b3090", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Chave") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "entry_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"dictionary_entry:description\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "898acf76-67b0-47a0-8d39-c4252b7aa9da") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) +_form.createComponentIfNotExists( + "d2cfcdaf-b308-4e99-bfc1-b1a5df0b3090", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Idioma") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "language_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"language:description\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "f275d942-a381-4273-97a0-0a5c1b8f1715") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "d2cfcdaf-b308-4e99-bfc1-b1a5df0b3090", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Valor") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "value") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "texthtml") + .set("uid", "f8852180-14a1-4fb9-85e1-6292bea647cd") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) diff --git a/server/setup/_schema-form-12-dictionary_entry.js b/server/setup/_schema-form-12-dictionary_entry.js new file mode 100644 index 0000000..594c39f --- /dev/null +++ b/server/setup/_schema-form-12-dictionary_entry.js @@ -0,0 +1,92 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Entrada") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "dictionary_entry") + .set("parent_uid", "d2cfcdaf-b308-4e99-bfc1-b1a5df0b3090") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "44450cdb-eece-4485-9fc7-0a38da700beb") +) +_form.createComponentIfNotExists( + "44450cdb-eece-4485-9fc7-0a38da700beb", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "C\u00F3digo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "code") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "a8933232-eddf-408c-81eb-802109d3e420") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "44450cdb-eece-4485-9fc7-0a38da700beb", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Descri\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "description") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "3849a376-2052-4bfc-b867-072e5e60fcb5") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-13-functionality.js b/server/setup/_schema-form-13-functionality.js new file mode 100644 index 0000000..b5e7911 --- /dev/null +++ b/server/setup/_schema-form-13-functionality.js @@ -0,0 +1,215 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Funcionalidade") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "functionality") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "62b515ac-e376-4859-9b47-03558601a872") +) +_form.createComponentIfNotExists( + "62b515ac-e376-4859-9b47-03558601a872", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Conte\u00FAdo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "content") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "texthtml") + .set("uid", "217e236f-4a16-44e0-baad-fa995c8f574b") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 4) +) +_form.createComponentIfNotExists( + "62b515ac-e376-4859-9b47-03558601a872", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "image") + .set("uid", "2e3e3f7a-4ff8-4310-9205-cb65a9b96e3c") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 5) +) +_form.createComponentIfNotExists( + "62b515ac-e376-4859-9b47-03558601a872", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "P\u00E1gina") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "page_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"page:language_id,title\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "992f3db6-e508-44ea-b179-ea80ab32424f") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "62b515ac-e376-4859-9b47-03558601a872", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Ordem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "sorter") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textnum") + .set("uid", "e310c0e2-6abd-46a0-a57e-d5fddb13e6bb") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 6) +) +_form.createComponentIfNotExists( + "62b515ac-e376-4859-9b47-03558601a872", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "title") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "6176e2ca-6644-4a85-a4b9-352d8594c809") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) +_form.createComponentIfNotExists( + "62b515ac-e376-4859-9b47-03558601a872", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Tipo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "type_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"functionality_type:description\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "44e6afcc-7451-4e4e-8563-26cc2a4472de") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-14-functionality_type.js b/server/setup/_schema-form-14-functionality_type.js new file mode 100644 index 0000000..2e6ab30 --- /dev/null +++ b/server/setup/_schema-form-14-functionality_type.js @@ -0,0 +1,92 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Tipo") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "functionality_type") + .set("parent_uid", "62b515ac-e376-4859-9b47-03558601a872") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "80e8f4dc-e626-4b3d-9b69-5a733789c41e") +) +_form.createComponentIfNotExists( + "80e8f4dc-e626-4b3d-9b69-5a733789c41e", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "C\u00F3digo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "code") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "57657c48-7af7-4981-9e12-eb287a53084b") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "80e8f4dc-e626-4b3d-9b69-5a733789c41e", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Descri\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "description") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "0af67d9c-3f84-4cd1-b519-d3225ab68a0b") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-15-language.js b/server/setup/_schema-form-15-language.js new file mode 100644 index 0000000..e9125e0 --- /dev/null +++ b/server/setup/_schema-form-15-language.js @@ -0,0 +1,153 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Idioma") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "language") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "a9d53c5e-4d74-4616-8d5e-244f719cc5b8") +) +_form.createComponentIfNotExists( + "a9d53c5e-4d74-4616-8d5e-244f719cc5b8", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "C\u00F3digo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "code") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "cc1d5a25-664a-4ae6-a1ad-6f97cffa3755") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "a9d53c5e-4d74-4616-8d5e-244f719cc5b8", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Padr\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "default") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"DEFAULT\":{\"default\":\"true\",\"type\":\"BOOLEAN\",\"value\":\"true\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "checkbox") + .set("uid", "f60c0d5a-6c4c-4f82-a4ba-bec0130c5e87") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 4) +) +_form.createComponentIfNotExists( + "a9d53c5e-4d74-4616-8d5e-244f719cc5b8", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Descri\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "description") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "0b2d04b9-c0c8-431a-a24f-5cf850589ea9") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) +_form.createComponentIfNotExists( + "a9d53c5e-4d74-4616-8d5e-244f719cc5b8", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Localiza\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "locale") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "6e2b571e-e843-43d8-8c19-f297c6e7becc") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-16-listing.js b/server/setup/_schema-form-16-listing.js new file mode 100644 index 0000000..73b4acc --- /dev/null +++ b/server/setup/_schema-form-16-listing.js @@ -0,0 +1,277 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Listagem") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "listing") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "033ca390-bda9-42ce-9867-7e234bfc6df2") +) +_form.createComponentIfNotExists( + "033ca390-bda9-42ce-9867-7e234bfc6df2", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Conte\u00FAdo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "content") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "texthtml") + .set("uid", "976fe96b-dea9-459b-acce-58cf99f9cd45") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 4) +) +_form.createComponentIfNotExists( + "033ca390-bda9-42ce-9867-7e234bfc6df2", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "image") + .set("uid", "1137ac3f-de6f-4d13-b969-5ae80a9b77ec") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 5) +) +_form.createComponentIfNotExists( + "033ca390-bda9-42ce-9867-7e234bfc6df2", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem Alt") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image_alt") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textarea") + .set("uid", "ccda29b4-7894-4c91-aba3-2d02eb89a822") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 7) +) +_form.createComponentIfNotExists( + "033ca390-bda9-42ce-9867-7e234bfc6df2", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image_title") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "737a5c6e-0423-4a59-a101-2d1de2d3668b") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 6) +) +_form.createComponentIfNotExists( + "033ca390-bda9-42ce-9867-7e234bfc6df2", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "P\u00E1gina") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "page_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"page:language_id,title\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "cfac852a-b35f-45a1-95d7-c9627f0f54ee") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "033ca390-bda9-42ce-9867-7e234bfc6df2", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Ordem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "sorter") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textnum") + .set("uid", "cd09b5cf-c414-4770-87b6-c25ee79274f9") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 8) +) +_form.createComponentIfNotExists( + "033ca390-bda9-42ce-9867-7e234bfc6df2", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "title") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "171a66b2-da44-4f23-bdd3-6fb306714131") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) +_form.createComponentIfNotExists( + "033ca390-bda9-42ce-9867-7e234bfc6df2", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Tipo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "type_id") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"listing_type:description\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "d8866f5a-5e7f-4409-ba25-d3a784b40bf7") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-17-listing_item.js b/server/setup/_schema-form-17-listing_item.js new file mode 100644 index 0000000..7bc4102 --- /dev/null +++ b/server/setup/_schema-form-17-listing_item.js @@ -0,0 +1,278 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Item") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "listing_item") + .set("parent_uid", "033ca390-bda9-42ce-9867-7e234bfc6df2") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "fcd6e4d2-019d-469a-8b7e-d61008a7574c") +) +_form.createComponentIfNotExists( + "fcd6e4d2-019d-469a-8b7e-d61008a7574c", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Conte\u00FAdo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "content") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "texthtml") + .set("uid", "789d7bf7-589f-4a38-aae1-d10286ee464c") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) +_form.createComponentIfNotExists( + "fcd6e4d2-019d-469a-8b7e-d61008a7574c", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "image") + .set("uid", "9a18909e-e916-4bf4-b85a-2fa31bcedff5") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 4) +) +_form.createComponentIfNotExists( + "fcd6e4d2-019d-469a-8b7e-d61008a7574c", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem Alt") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image_alt") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textarea") + .set("uid", "fd1430fc-71cb-4c5f-9da7-0f7a294bc759") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 6) +) +_form.createComponentIfNotExists( + "fcd6e4d2-019d-469a-8b7e-d61008a7574c", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "image_title") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "0dad43d4-01b5-4d34-86e0-97634de533f8") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 5) +) +_form.createComponentIfNotExists( + "fcd6e4d2-019d-469a-8b7e-d61008a7574c", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "URL") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "link") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "8bb8bc46-e55c-46ee-985a-f8c55c3f41d7") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 8) +) +_form.createComponentIfNotExists( + "fcd6e4d2-019d-469a-8b7e-d61008a7574c", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Listagem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "listing_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"listing:page_id,title,type_id\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "45975276-137c-4597-8827-8fd6aa57a3ce") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "fcd6e4d2-019d-469a-8b7e-d61008a7574c", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Ordem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "sorter") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textnum") + .set("uid", "da2f5666-a55e-4fb9-a4c5-f90d46d72b04") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 7) +) +_form.createComponentIfNotExists( + "fcd6e4d2-019d-469a-8b7e-d61008a7574c", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "title") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "d7fe8f9b-a11a-4bcc-ae9c-81e2b6898f4d") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-18-listing_type.js b/server/setup/_schema-form-18-listing_type.js new file mode 100644 index 0000000..5a6b6b8 --- /dev/null +++ b/server/setup/_schema-form-18-listing_type.js @@ -0,0 +1,92 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Tipo") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "listing_type") + .set("parent_uid", "033ca390-bda9-42ce-9867-7e234bfc6df2") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "4e7b1b9b-522f-4ea9-bbab-444625419a26") +) +_form.createComponentIfNotExists( + "4e7b1b9b-522f-4ea9-bbab-444625419a26", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "C\u00F3digo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "code") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "85044e64-acb0-44d4-b77e-f27d99a53fde") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "4e7b1b9b-522f-4ea9-bbab-444625419a26", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Descri\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "description") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "7822e124-c514-4766-baa0-cf15cbe1e276") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_schema-form-19-page.js b/server/setup/_schema-form-19-page.js new file mode 100644 index 0000000..baf5887 --- /dev/null +++ b/server/setup/_schema-form-19-page.js @@ -0,0 +1,401 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "P\u00E1gina") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "page") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "e6c40643-e58a-40aa-b430-7a003ec65246") +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Descri\u00E7\u00E3o ") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "description") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textarea") + .set("uid", "f316476d-4e73-4992-a3ac-756cb78e90dd") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 6) +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Palavras-Chave") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "keywords") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textarea") + .set("uid", "7b2a858d-363c-4a0a-bea8-77060eb1b4e6") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 7) +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Idioma") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "language_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"language:description\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "6de296ef-9c9d-4f31-88c1-724b4b3a55fc") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Liga\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "link") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "0f459afe-f8e4-4a63-9f42-947bb4ce6310") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 3) +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Menu") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "menu") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"DEFAULT\":{\"default\":\"true\",\"type\":\"BOOLEAN\",\"value\":\"true\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "checkbox") + .set("uid", "8c8bc1c2-9d85-45e0-b337-3737bcc26dfb") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 9) +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Menu T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "menu_title") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "4b343c09-9526-4c2d-8140-057a00fe105a") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 2) + .set("y", 9) +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Pai") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "parent_id") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"page:language_id,title\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "5c704654-ef1f-4b7e-8355-981cdafd3c03") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Descri\u00E7\u00E3o para as Redes Sociais") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "social_description") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textarea") + .set("uid", "b7436b06-2cf2-4ea7-9a49-1104de655708") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 6) +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Imagem para as Redes Sociais") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "social_image") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "image") + .set("uid", "4b5ff20a-9ec4-4597-9945-9db7757d76d6") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", false) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 8) +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Ordem") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "sorter") + .set("notnull", false) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "textnum") + .set("uid", "fd801ce6-6f65-455d-87e8-415690e83a35") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", false) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 10) +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Estado") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "status_id") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MAX_COLUMN_LENGTH\":{\"default\":\"0\",\"type\":\"INTEGER\",\"value\":\"0\"},\"COLUMN_SEPARATOR\":{\"default\":\" - \",\"type\":\"LINK_SEPARATOR\",\"value\":\" - \"},\"LINK\":{\"default\":\"\",\"type\":\"LINK\",\"value\":\"page_status:description\"},\"SERVICE\":{\"default\":\"com/Select.netuno\",\"type\":\"STRING\",\"value\":\"com/Select.netuno\"},\"ONLY_ACTIVES\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "select") + .set("uid", "88b60a46-63c0-4255-a857-2d6adfb78a5d") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 5) +) +_form.createComponentIfNotExists( + "e6c40643-e58a-40aa-b430-7a003ec65246", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "T\u00EDtulo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "title") + .set("notnull", true) + .set("primarykey", false) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "a7345f62-e84c-4b14-9e98-f4c4a3350200") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 4) +) diff --git a/server/setup/_schema-form-20-page_status.js b/server/setup/_schema-form-20-page_status.js new file mode 100644 index 0000000..4f79eb2 --- /dev/null +++ b/server/setup/_schema-form-20-page_status.js @@ -0,0 +1,92 @@ +/** + * + * CODE GENERATED AUTOMATICALLY + * + * THIS FILE SHOULD NOT BE EDITED BY HAND + * + */ + +_form.createIfNotExists( + _val.init() + .set("big", false) + .set("control_active", true) + .set("control_group", false) + .set("control_user", false) + .set("description", "") + .set("displayname", "Estado") + .set("export_id", false) + .set("export_json", true) + .set("export_lastchange", false) + .set("export_uid", true) + .set("export_xls", true) + .set("export_xml", true) + .set("firebase", "") + .set("name", "page_status") + .set("parent_uid", "e6c40643-e58a-40aa-b430-7a003ec65246") + .set("reorder", 0) + .set("report", false) + .set("show_id", true) + .set("uid", "814c194a-1d3a-4ea4-9855-bbad176f2c36") +) +_form.createComponentIfNotExists( + "814c194a-1d3a-4ea4-9855-bbad176f2c36", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "C\u00F3digo") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "code") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "781ab6ce-d9fd-4998-a268-dd8db79f1e52") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 1) +) +_form.createComponentIfNotExists( + "814c194a-1d3a-4ea4-9855-bbad176f2c36", + _val.init() + .set("colspan", 0) + .set("description", "") + .set("displayname", "Descri\u00E7\u00E3o") + .set("firebase", "") + .set("group_id", 0) + .set("height", 0) + .set("max", 0) + .set("min", 0) + .set("name", "description") + .set("notnull", true) + .set("primarykey", true) + .set("properties", "{\"MASK_REVERSE\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK_SELECTONFOCUS\":{\"default\":\"false\",\"type\":\"BOOLEAN\",\"value\":\"false\"},\"MASK\":{\"default\":\"\",\"type\":\"STRING\",\"value\":\"\"}}") + .set("rowspan", 0) + .set("tdheight", 0) + .set("tdwidth", 0) + .set("type", "text") + .set("uid", "9f0c284b-70b1-4aad-82c1-32b88a140f09") + .set("user_id", 0) + .set("whenedit", true) + .set("whenexport", true) + .set("whenfilter", true) + .set("whennew", true) + .set("whenresult", true) + .set("whenview", true) + .set("width", 0) + .set("x", 1) + .set("y", 2) +) diff --git a/server/setup/_start.js b/server/setup/_start.js new file mode 100644 index 0000000..e69de29 diff --git a/server/templates/dashboard.html b/server/templates/dashboard.html new file mode 100644 index 0000000..85a67fa --- /dev/null +++ b/server/templates/dashboard.html @@ -0,0 +1,24 @@ + +
+
+ +
+

+ _{&lang=netuno.main.dashboard.title} +

+
+ + +
+

+ _{&lang=netuno.main.dashboard.welcome_netuno} +

+

_{&lang=netuno.main.dashboard.you_not_form}

+

_{&lang=netuno.main.dashboard.you_can_start_by_clicking_top_bar}

+
+ +
+
+
+ +
diff --git a/server/templates/dev/dashboard.html b/server/templates/dev/dashboard.html new file mode 100644 index 0000000..6d3b631 --- /dev/null +++ b/server/templates/dev/dashboard.html @@ -0,0 +1,31 @@ + +
diff --git a/server/templates/scripts.html b/server/templates/scripts.html new file mode 100644 index 0000000..12fb56d --- /dev/null +++ b/server/templates/scripts.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/templates/scripts_dev.html b/server/templates/scripts_dev.html new file mode 100644 index 0000000..e69de29 diff --git a/server/templates/scripts_login.html b/server/templates/scripts_login.html new file mode 100644 index 0000000..e69de29 diff --git a/server/templates/styles.html b/server/templates/styles.html new file mode 100644 index 0000000..9698d22 --- /dev/null +++ b/server/templates/styles.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/templates/styles_dev.html b/server/templates/styles_dev.html new file mode 100644 index 0000000..9698d22 --- /dev/null +++ b/server/templates/styles_dev.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/server/templates/styles_login.html b/server/templates/styles_login.html new file mode 100644 index 0000000..e69de29 diff --git a/storage/filesystem/private/info.txt b/storage/filesystem/private/info.txt new file mode 100644 index 0000000..0b8da6f --- /dev/null +++ b/storage/filesystem/private/info.txt @@ -0,0 +1,4 @@ + +Secure data files comes here... + +Only accessible for logged users! diff --git a/storage/filesystem/public/info.txt b/storage/filesystem/public/info.txt new file mode 100644 index 0000000..55f3ca4 --- /dev/null +++ b/storage/filesystem/public/info.txt @@ -0,0 +1,2 @@ + +Public storage files comes here... diff --git a/storage/filesystem/server/info.txt b/storage/filesystem/server/info.txt new file mode 100644 index 0000000..33a81aa --- /dev/null +++ b/storage/filesystem/server/info.txt @@ -0,0 +1,4 @@ + +Secure data files comes here... + +Only accessible through server side! diff --git a/test.md b/test.md new file mode 100644 index 0000000..afc27c4 --- /dev/null +++ b/test.md @@ -0,0 +1,3 @@ + +# Test Branch + diff --git a/ui/.babelrc b/ui/.babelrc new file mode 100644 index 0000000..59da6a9 --- /dev/null +++ b/ui/.babelrc @@ -0,0 +1,9 @@ +{ + "presets": [ + "@babel/preset-env", + "@babel/preset-react" + ], + "plugins": [ + ["import", { "libraryName": "antd", "style": true } ] + ] +} diff --git a/ui/.gitignore b/ui/.gitignore new file mode 100644 index 0000000..ae15f2b --- /dev/null +++ b/ui/.gitignore @@ -0,0 +1,18 @@ + +node_modules/ + +.DS_Store +*.log +.idea/ +.metadata/ +.vscode +package-lock.json +yarn.lock + +.Trash + +*~* +*#* + + + diff --git a/ui/README.md b/ui/README.md new file mode 100644 index 0000000..2605aa2 --- /dev/null +++ b/ui/README.md @@ -0,0 +1,24 @@ + +### Install Packages + +`npm install` + +### Watch changes and auto recompile + +`npm run watch` + +### Installation requirements + +On Windows with an Administrator terminal, run: + +``` +npm install --global --production windows-build-tools +npm install --global node-gyp +``` + +With others Python version, then configure the Python 2.7 path: + +``` +node-gyp --python /path/to/python2.7 +npm config set python /path/to/executable/python2.7 +``` diff --git a/ui/package.json b/ui/package.json new file mode 100644 index 0000000..c226ade --- /dev/null +++ b/ui/package.json @@ -0,0 +1,36 @@ +{ + "name": "public", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "webpack --mode production", + "watch": "webpack --mode development --watch" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "@babel/core": "^7.9.0", + "@babel/plugin-proposal-object-rest-spread": "^7.9.0", + "@babel/preset-env": "^7.9.0", + "@babel/preset-react": "^7.9.4", + "babel-loader": "^8.1.0", + "babel-plugin-import": "^1.13.0", + "less": "^3.11.1", + "less-loader": "^5.0.0", + "css-loader": "^3.4.2", + "style-loader": "^1.1.3", + "prop-types": "^15.7.2", + "react": "^16.13.1", + "react-dom": "^16.13.1", + "webpack": "^4.42.1", + "webpack-cli": "^3.3.11" + }, + "dependencies": { + "antd": "^4.1.0", + "chart.js": "^2.9.3", + "react-chartjs-2": "^2.9.0" + } +} diff --git a/ui/src/components/MyButton/index.jsx b/ui/src/components/MyButton/index.jsx new file mode 100644 index 0000000..1b0d9ed --- /dev/null +++ b/ui/src/components/MyButton/index.jsx @@ -0,0 +1,17 @@ +import React from "react"; +import PropTypes from "prop-types"; +import Button from 'antd/lib/button'; + +const MyButton = ({ buttonRef, text, click }) => ( +
+); + +MyButton.propTypes = { + buttonRef: PropTypes.shape({ current: PropTypes.instanceOf(Element) }), + text: PropTypes.string.isRequired, + click: PropTypes.func.isRequired +}; + +export default MyButton; diff --git a/ui/src/containers/DashboardContainer/index.jsx b/ui/src/containers/DashboardContainer/index.jsx new file mode 100644 index 0000000..e1b453c --- /dev/null +++ b/ui/src/containers/DashboardContainer/index.jsx @@ -0,0 +1,88 @@ +import React, { Component } from "react"; + +import MyButton from "../../components/MyButton/index.jsx"; + +import "./index.less"; + +export default class DashboardContainer extends Component { + constructor(props) { + super(props); + this.state = { + counter: 0 + }; + this.button = React.createRef(); + this.click = this.click.bind(this); + } + + componentWillMount() { + /* + // Basic sample of the service call: + fetch('/services/my-test.netuno', { + credentials: 'include' + }).then((response) => { + return response.json(); + }).then((json) => { + // json...; + }); + */ + + /* + // Better sample of the recommended way to call services: + const fail = ()=> { + this.setState({ loading: false }); + notification["error"]({ + message: 'Error', + description: 'Data loading error...', + style: { + marginTop: 100, + } + }); + }; + netuno.service({ + url: '/services/my-data-service', + method: 'POST', + credentials: 'include', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + param1: 'value1', + param2: 'value2' + }), + success: (response)=> { + console.log(response); + if (response.json) { + this.setState({ + loading: false, + data: response.json + }); + } else { + fail(); + } + }, + fail: ()=> { + fail(); + } + }); + */ + } + + componentDidUpdate(prevProps, prevState, snapshot) { + $(this.button.current).fadeOut(250).fadeIn(250); + } + + click() { + this.setState({ counter: this.state.counter + 1 }); + } + + render() { + const { counter } = this.state; + return ( +
+
+ +
+
+ ); + } +} diff --git a/ui/src/containers/DashboardContainer/index.less b/ui/src/containers/DashboardContainer/index.less new file mode 100644 index 0000000..da3b33f --- /dev/null +++ b/ui/src/containers/DashboardContainer/index.less @@ -0,0 +1,8 @@ + +.my-dashboard { + width: 100%; + &__button { + padding: 80px; + text-align: center; + } +} diff --git a/ui/src/index.jsx b/ui/src/index.jsx new file mode 100644 index 0000000..b20d443 --- /dev/null +++ b/ui/src/index.jsx @@ -0,0 +1,42 @@ +import React from "react"; +import ReactDOM from "react-dom"; +import DashboardContainer from "./containers/DashboardContainer/index.jsx"; + +const dashboardDiv = document.getElementById("app-dashboard"); + +const dashboardContainer = dashboardDiv ? ReactDOM.render(, dashboardDiv) : false; + +netuno.addNavigationLoad(() => { + $('[netuno-navigation]').find('a').on('netuno:click', (e)=> { + const link = $(e.target); + if (dashboardContainer && link.is('[netuno-navigation-dashboard]')) { + // Menu > Dashboard > Clicked! + } + }); +}); + +netuno.addContentLoad((container) => { + // When any content is loaded dinamically this is executed... + if (container.is('[netuno-form-search="YOUR_FORM_NAME"]')) { + // When search page is loaded... + } else if (container.is('[netuno-form-edit="YOUR_FORM_NAME"]')) { + // When form edit is loaded... + } +}); + +netuno.addPageLoad(() => { + // When page is loaded... + let modal = $('#app-dashboard-modal-form'); + modal.on('hidden.bs.modal', ()=> { + modal.find('[netuno-form-edit]').empty(); + }); + $('#app-dashboard-modal-form-button').on('click', ()=> { + modal.modal('show'); + netuno.loadFormEdit(modal.find('[netuno-form]')); + }); + modal.find('[netuno-form]').on('netuno:save', ()=> { + modal.modal('hide'); + }); +}); + + diff --git a/ui/src/styles/main.less b/ui/src/styles/main.less new file mode 100644 index 0000000..f441dd6 --- /dev/null +++ b/ui/src/styles/main.less @@ -0,0 +1,4 @@ + +/*** GLOBAL CSS ***/ + +@import '~antd/dist/antd'; diff --git a/ui/webpack.config.js b/ui/webpack.config.js new file mode 100644 index 0000000..b0a83b7 --- /dev/null +++ b/ui/webpack.config.js @@ -0,0 +1,81 @@ + +const path = require('path'); + +module.exports = { + entry: [ './src/index.jsx', './src/styles/main.less' ], + devtool: "source-map", + output: { + path: __dirname +'/../public/scripts', + filename: 'main.js' + }, + module: { + rules: [ + { + test: /\.jsx$/, + include: [ + path.resolve(__dirname, 'src') + ], + exclude: /node_modules/, + use: [{ + loader: 'babel-loader' + }] + }, + { + test: /\.js$/, + include: [ + path.resolve(__dirname, 'src') + ], + exclude: /node_modules/, + use: [{ + loader: 'babel-loader' + }] + }, + { + test: /\.less$/, + include: [ + path.resolve(__dirname, 'src') + ], + exclude: /node_modules/, + use: [ + { + loader: 'style-loader' // creates style nodes from JS strings + }, + { + loader: 'css-loader', // translates CSS into CommonJ, + options: { + sourceMap: true/*, + modules: { + mode: 'local', + localIdentName: "[local]___[hash:base64:5]", + context: path.resolve(__dirname, 'src'), + hashPrefix: 'app', + }*/ + } + }, + { + loader: 'less-loader', // compiles Less to CSS + options: { + modifyVars: { + 'primary-color': '#5b5ce1', + 'link-color': '#5b5ce1', + 'border-radius-base': '5px' + }, + javascriptEnabled: true + } + } + ] + }, + { + test: /\.css$/, + include: [ + path.resolve(__dirname, 'src') + ], + exclude: /node_modules/, + use: [ + 'style-loader', + 'css-loader' + ] + } + ] + } +}; diff --git a/website/.gitignore b/website/.gitignore new file mode 100644 index 0000000..ba989fd --- /dev/null +++ b/website/.gitignore @@ -0,0 +1,43 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +package-lock.json +yarn.lock + +*~* +*#* + +src/config/config.json + +build/cluarData.js +public/cluarData.js + +public/sitemap.xml + +public/images/banner/ +public/images/content/ +public/images/functionality/ +public/images/listing/ +public/images/listing_item/ + diff --git a/website/README.md b/website/README.md new file mode 100644 index 0000000..9c40dcd --- /dev/null +++ b/website/README.md @@ -0,0 +1,68 @@ +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `yarn start` + +Runs the app in the development mode.
+Open [http://localhost:3000](http://localhost:3000) to view it in the browser. + +The page will reload if you make edits.
+You will also see any lint errors in the console. + +### `yarn test` + +Launches the test runner in the interactive watch mode.
+See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `yarn build` + +Builds the app for production to the `build` folder.
+It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.
+Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `yarn eject` + +**Note: this is a one-way operation. Once you `eject`, you can’t go back!** + +If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. + +You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). + +### Code Splitting + +This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting + +### Analyzing the Bundle Size + +This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size + +### Making a Progressive Web App + +This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app + +### Advanced Configuration + +This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration + +### Deployment + +This section has moved here: https://facebook.github.io/create-react-app/docs/deployment + +### `yarn build` fails to minify + +This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify diff --git a/website/build.sh b/website/build.sh new file mode 100755 index 0000000..8c5999f --- /dev/null +++ b/website/build.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +if [ -f "build/cluarData.js" ]; then + mv build/cluarData.js .cluarData.js +fi + +cp src/config-prod.json src/config.json + +rsync -av build/images/ public/images/ + +yarn install + +yarn build + +cp src/config-dev.json src/config.json + +if [ -f ".cluarData.js" ]; then + mv .cluarData.js build/cluarData.js +fi diff --git a/website/config-overrides.js b/website/config-overrides.js new file mode 100644 index 0000000..5e2ce83 --- /dev/null +++ b/website/config-overrides.js @@ -0,0 +1,21 @@ +const { override, fixBabelImports, addLessLoader } = require('customize-cra'); + +module.exports = override( + fixBabelImports('import', { + libraryName: 'antd', + libraryDirectory: 'es', + style: true, + }), + addLessLoader({ + lessOptions: { + javascriptEnabled: true, + modifyVars: { + '@primary-color': '#5b5ce1', + '@layout-header-background': '#ffffff', + '@font-size-base': '16px', + '@border-radius-base': '20px' + }, + }, + }), +); + diff --git a/website/package.json b/website/package.json new file mode 100644 index 0000000..6df9b0d --- /dev/null +++ b/website/package.json @@ -0,0 +1,50 @@ +{ + "name": "cluar", + "version": "0.1.0", + "private": true, + "dependencies": { + "@animated-burgers/burger-slip": "^1.1.2", + "@ant-design/icons": "^4.2.1", + "@netuno/service-client": "^1.0.10", + "@testing-library/jest-dom": "^4.2.4", + "@testing-library/react": "^9.3.2", + "@testing-library/user-event": "^7.1.2pm i", + "antd": "^4.4.1", + "babel-plugin-import": "^1.13.0", + "classnames": "^2.2.6", + "customize-cra": "^1.0.0", + "import": "0.0.6", + "less-loader": "^6.2.0", + "react": "^16.13.1", + "react-app-rewired": "^2.1.6", + "react-dom": "^16.13.1", + "react-ga": "^3.3.0", + "react-map-gl": "^5.2.7", + "react-router-dom": "^5.2.0", + "react-scripts": "3.4.1", + "react-scroll-parallax": "^2.3.4", + "sal.js": "^0.8.1", + "sprintf-js": "^1.1.2" + }, + "scripts": { + "start": "react-app-rewired start", + "build": "react-app-rewired build", + "test": "react-app-rewired test", + "eject": "react-app-rewired eject" + }, + "eslintConfig": { + "extends": "react-app" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/website/public/favicon.ico b/website/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6e87c31c13014bef33aeb16fc68c5c0f56325bc7 GIT binary patch literal 15406 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 literal 0 HcmV?d00001 diff --git a/website/public/images/logo.png b/website/public/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..875776a8f635a9506dbc91a423ab134a045db1be GIT binary patch literal 12676 zcmch830zI<`u{FM=6P0~otdpQ4_njTYwcyM$WTJ;Fy;*ZHS>H$fl-GJ{An7!n|e5F&&)YVzfW4^Hz^sD$<` z_vI|`&4Rzg$H!A>X6EPTH^C2`pz(4sgK3&JgAg+W5r7o}?*I=UslUL(+w`jhR_QJG zQhWNSH6A8fiBg%y*T;enH2rLXyXQBt9^PNv1RQ4OFZDEoCqP=0J}vZIqVdsqFVXyy z<=<}qWs^ewO}MA8m)j?e6>>ABo6=qB;o}X~!ru-6uC=lGwp^z!?(W}Kd;3V112euj zMCWSn*#VwPGkc}C#@9=(lq?4)ntrv$+s9t{hd+N{J6Qg0vyWQ!Pxfl>{KWxEfAv3E zs=f1Vsi%=KlwBREUObP&s zU}82*2{C{rcpL-^A?Wi`8vsp()JOVtF#-!9L;xeRVN!^~LYQ#+vQDE=s{;Pjs&7#i zG8#9HmyJdNPDlABe_Wr!Ff+U~DzzK9;cY)jY%)c{5HL*;0%QWrH&MuiDvg)B6ogLg zE_G3wd3v~fI^4!aIK{);N9rM0PGK$hz`_Y?wL&O|P!z^gQUQTbqyUv-N`Z{VRRRS> z(X@iVqzI(^x}Vj^eYLRC?*E*Y3XL4d_(M5LiYQ2kQVJ9_p%g$W3>U~KB_Tj%IF4fo zrlO_tuhQ(i)PNbJZhw}l)k*;*61Yl+tE5T+Ler1{lS^rV6oM22g`7rYgj_0BV!&1{ z7=%C!P)VvyKMVfXi;h}Qy7_*-NFosU0VDu^zHFNJZ|?tbdya=1xDw%;XyNoZD6;^w z0p}Aqj^bag&rtg--5gmp@Q(LqMKF~7^Syb0x<}z!>iENHUmYLb2BaXfQ6rFO}m3(Q4T1HKm;RVXo`Xu z7$ZnTEMZ6*XCNIrBq+g(8A>d|U=m?5nm|w%f=HSqIGVsk-|v7?2}ENcJ7A0yVI)c+ zA_)tNDFnepsF>2B6)Z+z2_}JX2nVW*IF6rZa2lsER01qUa0!g!93zo%C{Ry_Rwzah3?!m3kqCw;RzyP> z%uzUSGY1U9nD5U3J47gjW4H*xFpd>NIE)Z52ZSIT4703`9kdu`Q3m2Tln|4+2n9#c zA`XHW3_%$Ytz(B65{XHIW)U&TLLwF@DMBS89DKqMQliTaG0ws$#S$1KK_L)6k`g00 zN{e7%I)v(oIVxsJl0iuAS_~GkoEYLT3C6GlEum3})1eg$Nf30rVle7*yFchc61WRjM1wuqK3~; ztiy7g26PUTATS`C#c=?77$;Z+M3f;hM)JMoIKz-EN0T6{Nf7`Dq=ghoA{@v}l#uAq ziV!1^_!EV|Kz$CTVFEyz0R$mt#S%^jN=TTaF_0A^l+-#*1knV*G0oBh1)!)4B_t+> z#VictxEN3e3b7*KF@Q}G2nq0t4$DDiODK>*6h_jB1O{XW;13iOO907Wy0VsnC=BGB zh=BoyfhH7(g3JRH1Zo*97VAJF1uTFGiiUyjfqO9sMrj5n2vm%5VzJIMXcUG4D-sYZ z0k~iQv?!8g7?u>F94MLJ#{&eGVPLUHA_7z^0Yn7B5*!DC5pe`366uH_4da0Q#GDA^ zC`E#FqG=Wtk=!ii7>BUy?g0c1#sgaABoNC$RBoQMQB0O4x&rU<|h z7z8u~DGY%MA^zT1fOQcZW)N0_(+J3S62k$rp%O$4gCijw5dtT1N!M51Rr4+jB8LAJ6W$0@+P zkc2=n5rK)tI()_8EZ}MaX8`rmfFC6g3(745stAq({?cIw18M{Tf&65}z|CTY29=Ox zKwacODvNO)z5;E61ja;SZ4pEfkdR`8ra(ml#0mh3>8Lo278epRpkJC`a52~SqNAK z#1h9Kl+uwO5*kng$U!Yw2o`iOER1jn$XS*F0Ht;9V89(l3{n)qAP{~87SSApAQXg? zBxsqw*GeK0Ga!pZ5GXmIvSBF5Fcc)egaqXgY}2uW<0Pb5gaG3~)Hw;t&>R6lC=Ee? zC3I=Ui3nOuX*)hjjKcuBppt>^4!1(t*(Jc$KYf6O1U;$_v6rW{*CktEvq$pIhQVFSKKdcvws^qjBhXfD| zp36Sz1=1fDDCIIKI7flfxQ>daTQ3}R&=4gBvcRq{vIy{SA_omBCe^}P`oppaT8gU( zsZ5~4s89Zq0)OFBfdUA`Xt@H#Wk2jMLWV=ITtxsIwGXOV-~VkJNmNb|DjWrR$-omY zO#TOYkt$T{dP?gr>3`@i3ROyF1giDdf2;L5d`4Xvz zixN!N&G>)cA_|6-3ZOo)2n_EqM5YkPWH>1xU=-9OC8dz6z)b6ZSOlmY5kSBqOo-t^ zga(t&A2sGL6W7n1e#8#B#$&nC>rd$NlzK_Q%K@dAw*_D2rExcrdV0F4<)21^X3ISk zUuN##0B+)=G5KRQ`cM6(PVw@=XPk|KfT77ICNwJS~wb9Dq#;{!-$g!9r9J znAgg2(Ah&ul)%1v|69iV-^b_Q+VNu}=fC1i*F^n?aE2fgAd}G!Y7d3R&l^nkb>i$3 z4}PXIv;WC-pTD!8!N6(Z_371yP#35DXa<3I9YQcV|2M;QFaw7a1n3CCBhHuNMk!!i zAXS2g8@Zg6!w`5g@L3zpe>zOproksS{ONVp*Gu3XnfBwimvi9Dx7T}055PKJ;N{(& z1y6)LUO)a6Ry5ncu zmfM_JI8Ea;?{WGjr&srLE6r6EzWtZo&=YhU-mjmYfnLWMJ*m3zlIpa39#v)YT&vRa zUqxj%Tv~MI{p$R}hl39!9VkKlmMmQ=W?8l{GE8W|=kq)Bz!z38WW$CHqj^1h_3CB7 z16L38tijd3JaBb`J`Y@-$us#|i~kEE{*`i{RE}7FxE2J zVTNAQ$YhI7&C_E?MtWpwLZ5A{8lay-l-2|dp!f+@0d}KKc4^*!B-FG|(SZ)O9rq4? zsaQxUH@)E*@Z5_%OS^G_7-!E6^fBZN-?vatT!{QiQyJI$n`KPP8H>c@^ zyX07}DCkzuss8A_au2&WPI+PboTeB{-u0&0vDW3OpRi^y8D5m9pyA;c^GgHb%>Y2LytJr^E6l;>(dB48lZ&2oqJmVqv z(C!2EK3o>o-EG&}-Q3`b9c+;u*ltZ|sC8Xu%ap5$o`Os*7>~6A^D+M zp_4-MD}roO^w!Db*`xuX*VvH3yAu@b{I(_F;=Q^uf2#pZsNSk!7xmYeKcC+|?RkFF zpp4?&<j;G*Md z%muZMb7w-N(oGyWeieX)-_jrMfgUsk!Tt1AdCG z#G~^mnl|3<>YUZ5x}2}8)8iUi;P@BCQ3mE+%wLz$;iofK6$Ew6?yvu_xoux#iv%EUDLgHj<~Wp#MS#!MxVDXr4IcRt^R6D zRcBA{sjs3xD9;#Dhi<=5JX6wR$SeP9qfFC5O^cQucBxpD-O!qlDL8Pf@+B{$5TcZh3KRR@0@I`AO6IWh^_Jf32_k(6^%&uMr-Iwsf3zgoXHs8YqPK&*N}gM|_uYwqeWcgsB{!zJ z-dSbr$^~?DO|c!fal!M;Q)UWB8SR~xP?1YJ?)&KKm>P69qxS(}%7@y-yKQ~i(nsvb z8B{{|_8B_oIlRbe#^MypG^B8Au-m%HgF83dZEf=GofkBB$AnDZK{-{lUD?<^Z=T!0ypiW!OVf+$HEqeZWzCc0 z%3rk03E7wS!N1d7WidQsQ-hx8Qc*_RFss&-gzgUG;?=Uq`V1S#j;G+v2FFqHM-3fo z{q4Q2wr_I@@it$G=kzPNWA*UPnyBNUax1HMD^Iozwpi=y__{hYYgt5H+l_}yVvI6R zlq`C;_|(4Gh_)^5`?XD9MwmbCFwYEi-UVH9p_f)oeOp zv!!PHwfP&X5|$R{C$x6(o|bG;-Xo$!ekXS1Fo!H&sp$5^A(!3^dO9uBA~Xjm>OJ$? z-kxZ)S@wdqeP#J30e0cxL2qVUnRD8#U36^PrnXaCTBw`o$D?)eL}OX+qPDJ2UX_!N z*~9^F=e;{~puxdzmYsofU@jUrZ%0aG_{N};SDBY1^20h#FnqEmKVZfqyr$5k$MV+M z)+_2g6io@Mf_FGQD_hl_7;K{9L1WIg7?r+dPhII_)M@_!L&WX`#PiRqK2>C1A1R#G z$6EgTkTJak@Ae^&jGFZF(1xp-u1$gEAyGZ9o#XEbR##;X3auK_)H>q2(djcTV{{!JU44; z+Pf9V_J+s~W{2`q_)jhwPuw+Me@}3^WmNxws!D?eCE2Fs%|Bbeir$gZk~Zp@(~X}q z^EZ%V03eMEEcXWO58T(%cgV{lcLA~P7&zd<+v3v1C(?Qn1nwC#=EW5pQZR6myUWVJJ zE)@GuDO}dCdHI0@Z@u-42>z4Uk^M7U9Byc)Z+sFi`JmnqbDUpPXf?@y`1K?jd0CK7 zUs_$_Fv-e**BcsscBNBTj;+m@nZtAK-G^0{XYk*q9y%7g-fPzfaq^OwN@U{Mm7e3O z?3U;s%-vyTmMVG?m3{DH%o1|b(D!R-%ZbLWwo?idLlPa9&Uw+0Kd!9hqeqyvzhwB< z?)>!ifkp|3{LgisZk2E-A|=0PR|hXMp9e=)RoNSd+<>5%wb3I!9?l^;m-Uw_A?B}&vlI#JpSd%H7qHivhec5lD%UeE;*%^xkrT;B&>|tTAebQ=NOCU zzMWA%Arhs zSYD%v8-CE7^I3K@*Oh zlg+-TN<|qv-bL^#9WG>SPMA6LR>QDl_5DD9qnG1MKfZsTbaYcwmBrHNJC@5!K8$^P zUT(UK8^@c$GfCR1aL9eTU&AH`A9%fS?(#FG6W6y-wphE>eZtZSZ^)Jf!ygtK(Uz&R z6irccFXmn47nSAJrzZq-J1}NRhSfW3!607Hy=i-Qb~t&Gua`M6jwrv{A$5IOefrL> zACt3hc1rE-d?mm+Ec2&3PdYzbjLR-J6)Wsk53ih|p0g=qW=h<%iP0k$B>A_`W2}xD zKU3R8%HMmGjnQjvUvG5XMl*595c}O&*y}+pVc~9?Q$LGk@*~k_Y69hGk<#W-;@Qk*2(mmFw?Uw+w{YmUQX`m$*T#l1P=o{ z`~_!Mp4suhf0uz{;Mh?6Tlm`bg>m6F{f1U#2b(=px*K=h(c0Lqtx9y$&24V{FA25n z8)pZYCxl5IdPl!~A-+;obk6kh^j`gsr6tF9Ts&p-=;)?{_M1<3<&P_;+pHB$XO4UP zp4Tm+Dz>L{kHdn^f+yYsJ$+sz{dTSF%J~Zioi@(M*qe}Ms2Ozs|NHj(ger5Py-gvIJ(D**-&im{G~nr$ zQ)#=#CwPRP8rguJ8L{Nez`V4+Z#ko*7B{R2Q;X+iW3jp>UuXMty^~6(mt|fn-FBtj zOT6oLJ|^~%@vOU>Hs$&cn?D6j9REgHkk&O{Hm7Od;x6O%v;GsB3^IoqROK5tTiRXJ zuSC7jWJUGZIQnn^T{=}YC(Xo5)BU~EhRw|v5^qN1Cz}U<%sjT+CFzc*dw)GX`Ik{P6&;!rLhS8+iHt89_xR%mtJki}MtLs25qNCwy!i>4R!x)KHa^12 z+Lf4@92q*#dR-t~lT;q*uX^$%>}i&<|4-4fmeI2Py8BorU2|wX`N+DY&VIf; z_tCA)hQXybw^XMNou6u{9{!AOowUv3gCOU{q(yee_563gyJWVxC51_{dum>46t%t8 zIjiv}-x%fXGLHx!i(g+f?h>xAzrAkf`2m%VQ9ft$u@Nh;uDO1&OYHQS9cDqeUSG}6 zRzqErHobf1KdEhvZm!D`;BDUB7u7740jmv+?Q^ZFQ0zvPga5InguyK2VZ zIGej;t(9r346n~_i?p2oK!5)PM?oRsxc+YIwb-yXQD@s?f6**EJ-&L}#2LK%M%mX2 zySVmpiftCeRW;;}y;N=1`Z#fURWE1zik$_mod`I)tylH)Z9dx~W%4dt;yQe+wHL?i zs&|Q2GxeW-|l2uhlDLJ#b+npQI-#STy`&_s`90I zkAUiPsz|+2vje)$+TiDuJ++5A-*vF(=$%QG>)osy(|R<`3anjurt=vI$?9ba|1r|7 zpwME@s#TWHmKJ3+)Hz#U+L_s3>RyrB)7Z9P{G*R`5s|`Gp|vZF4PRHp92v6FY-5+? zrBC;aIb)V}qLW=+=}0@n-#fdltUd1jLReBAQ?uDC&2Qd|-7@#5>jSy%%I+wRVnc^pA*qYit@A)U-Ix`w3;1UN`2#WtGgLuG+Ni z8g_1UwK_ODGFdK^GFf4x%!jKj^Aak589HKnOY?%Q*Yeg>m-eW8>=>J=?wi^gP|jFB z>R7rocw4u_F{Zgl+?baJCDBv&!j{tl-rt_)Jn4a29*8dGhy?NQ{ru%nt-h5b(xn@SwxHl?qRUPH#e3NKgGtsIjy;-&Ze zw5iG?lasR=E4N&3jQ%iTN^F%V+T-wtnVr_HKpcaV2*X1fsXcsHlX4KvQ3Oi$dF#jJHWUG&8Gt^1tu zyn$?GHZmHFvnpEe574Xpt$E7uK6hQ0Pc=N;ODz#<=T}vHp8uHmm42l~w58RSw{Nf1 z9bakW^VFEnH+aZe+gCWb+5cj{KYmbS*kPq%;m?WFUm)#Wi&{oLQ*Shmsd=?}z$YQM z=M==p-cKtD+@`sF;OIGDCkb0vdSe^#p>45%*s$6_{rndp5T)0`2%EVV)l)ZQ30p*!oB;y z>~rOA?ejjp=8aPGO?vf;SU!2BcC@E!K=fZ6`2BCp4F5FnQ>U~VYhD@N+V;NN814U) Nm?E)dPm33?{(r4@(%%38 literal 0 HcmV?d00001 diff --git a/website/public/index.html b/website/public/index.html new file mode 100644 index 0000000..75cf204 --- /dev/null +++ b/website/public/index.html @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/website/public/manifest.json b/website/public/manifest.json new file mode 100644 index 0000000..337383a --- /dev/null +++ b/website/public/manifest.json @@ -0,0 +1,15 @@ +{ + "short_name": "Netuno CLUAR", + "name": "Netuno CLUAR App", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#ffffff", + "background_color": "#ffffff" +} diff --git a/website/public/robots.txt b/website/public/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/website/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/website/src/App.js b/website/src/App.js new file mode 100644 index 0000000..06ed796 --- /dev/null +++ b/website/src/App.js @@ -0,0 +1,206 @@ +import React, { useState, useEffect } from 'react'; +import { Layout, Menu, Row, Col } from 'antd'; +import { GlobalOutlined, PhoneOutlined, HomeOutlined, MailOutlined } from '@ant-design/icons'; +import Burger from '@animated-burgers/burger-slip'; +import '@animated-burgers/burger-slip/dist/styles.css'; +import classNames from 'classnames'; +import { + BrowserRouter as Router, + Switch, + Route, + Link, + Redirect +} from "react-router-dom"; + +import Analytics from './common/Analytics'; +import Cluar from './common/Cluar'; +import Builder from './common/Builder'; +import Cookies from './components/Cookies'; +import NotFound from './pages/NotFound'; + +import './styles/App.less'; + +const { Header, Content, Footer } = Layout; +const { SubMenu } = Menu; + +export default () => { + + const storageLocale = window.localStorage.getItem('locale'); + if (storageLocale == null) { + window.localStorage.setItem('locale', Cluar.currentLanguage().locale); + } else { + Cluar.changeLanguage(storageLocale); + } + + const [burgerMenu, setBurgerMenu] = useState(false); + const [activeMenu, setActiveMenu] = useState('main'); + const [locale, setLocale] = useState(Cluar.currentLanguage().locale); + + const handleMenuClick = (selectMenu) => { + setBurgerMenu(false); + if (selectMenu) { + setActiveMenu(selectMenu); + } + window.scrollTo(0, 0); + }; + + const menuLanguages = []; + const menu = []; + const subMenuKeys = []; + const routes = []; + for (const language of Cluar.languages()) { + if (!Cluar.pages()[language.code]) { + continue; + } + if (language.code !== Cluar.currentLanguage().code) { + menuLanguages.push( + { + Cluar.changeLanguage(language.locale); + window.localStorage.setItem('locale', Cluar.currentLanguage().locale); + window.location.href = `/${language.locale}/`; + }}>{language.description} + ); + } + + const buildMenu = (page) => { + if (page.menu && language.code === Cluar.currentLanguage().code) { + const key = `${page.link}`; + if (Cluar.pages()[language.code].find((p) => p.menu && p.parent === page.link)) { + subMenuKeys.push(key); + return ( + handleMenuClick(key)}> + {page.title} + + }> + { Cluar.pages()[language.code].filter((p) => p.menu && p.parent === page.link).map((p) => buildMenu(p))} + + ); + } else { + return ( + + handleMenuClick(key)}> + {page.title} + + + ); + } + } + return null; + }; + + const subroutes = []; + for (const page of Cluar.pages()[language.code]) { + if (page.menu && page.parent === "" && language.code === Cluar.currentLanguage().code) { + menu.push( + buildMenu(page) + ); + } + subroutes.push( + { + return ; + }} /> + ); + } + routes.push( + + {subroutes} + + ); + } + + useEffect(() => { + }, []); + + return ( + + { Analytics.init() && } +
+ +
+
+ handleMenuClick('/')}> + logo + +
+
+ + {menu} + +
+
+ + {menu} + +
+
+ { setBurgerMenu(!burgerMenu); }} /> +
+ + } title={Cluar.currentLanguage().code}> + {menuLanguages} + + +
+ + + { + return ; + }} /> + {routes} + + + +
+ + +
+ logo +
+ + + + + +
+ +
+ +

+
+ +

+
+ +
+
+ +
+
+
+ ); +} diff --git a/website/src/App.test.js b/website/src/App.test.js new file mode 100644 index 0000000..4db7ebc --- /dev/null +++ b/website/src/App.test.js @@ -0,0 +1,9 @@ +import React from 'react'; +import { render } from '@testing-library/react'; +import App from './App'; + +test('renders learn react link', () => { + const { getByText } = render(); + const linkElement = getByText(/learn react/i); + expect(linkElement).toBeInTheDocument(); +}); diff --git a/website/src/common/Analytics.js b/website/src/common/Analytics.js new file mode 100644 index 0000000..869da3e --- /dev/null +++ b/website/src/common/Analytics.js @@ -0,0 +1,63 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import ReactGA from 'react-ga'; +import { Route } from 'react-router-dom'; + +import config from '../config/config'; + +class Analytics extends Component { + componentDidMount() { + this.logPageChange( + this.props.location.pathname, + this.props.location.search + ); + } + + componentDidUpdate({ location: prevLocation }) { + const { location: { pathname, search } } = this.props; + const isDifferentPathname = pathname !== prevLocation.pathname; + const isDifferentSearch = search !== prevLocation.search; + + if (isDifferentPathname || isDifferentSearch) { + this.logPageChange(pathname, search); + } + } + + logPageChange(pathname, search = '') { + const page = pathname + search; + const { location } = window; + ReactGA.set({ + page, + location: `${location.origin}${page}`, + ...this.props.options + }); + ReactGA.pageview(page); + } + + render () { + return null; + } + + static RouteTracker() { + return ; + } + + static init(options = {}) { + let isGAEnabled = false; + if (config.analytics && config.analytics !== ''){ + ReactGA.initialize(config.analytics); + isGAEnabled = true; + } + return isGAEnabled; + }; +} + +Analytics.propTypes = { + location: PropTypes.shape({ + pathname: PropTypes.string, + search: PropTypes.string + }).isRequired, + options: PropTypes.object +}; + +export default Analytics; \ No newline at end of file diff --git a/website/src/common/Builder.js b/website/src/common/Builder.js new file mode 100644 index 0000000..43d89c3 --- /dev/null +++ b/website/src/common/Builder.js @@ -0,0 +1,40 @@ +import React, { useEffect } from 'react'; + +import sal from 'sal.js'; + +import Banner from '../components/Banner'; +import Content from '../components/Content'; +import Listing from '../components/Listing'; +import ContactForm from '../components/functionality/ContactForm'; +import Map from '../components/functionality/Map'; +import config from '../config/config.json'; + +export default ({ page }) => { + + useEffect(() => { + sal(); + document.getElementsByTagName('meta')["keywords"].content = page.keywords; + document.getElementsByTagName('meta')["description"].content = page.description; + document.title = page.title + ' | ' + config.website.name; + }, []); + + const components = []; + for (const item of page.structure) { + if (item.section === 'banner') { + components.push(); + } else if (item.section === 'content') { + components.push(); + } else if (item.section === 'listing') { + components.push(); + } else if (item.section === 'functionality') { + if (item.type === 'map') { + components.push(); + } else if (item.type === 'contact-form') { + components.push(); + } + } + } + return
+ {components} +
; +} diff --git a/website/src/common/Cluar.js b/website/src/common/Cluar.js new file mode 100644 index 0000000..e952580 --- /dev/null +++ b/website/src/common/Cluar.js @@ -0,0 +1,132 @@ + +import CluarCustomData from './CluarCustomData'; + +import config from '../config/config'; + +let data = null; +let currentLanguage = null; +let customData = null; + +export default class Cluar { + static init() { + data = window.cluarData; + currentLanguage = Cluar.defaultLanguage(); + customData = new CluarCustomData(data); + } + + static customData() { + return customData; + } + + static defaultLanguage() { + return data.languages.find((e) => e.default === true); + } + + static currentLanguage(codeOrLocale) { + return currentLanguage; + } + + static changeLanguage(codeOrLocale) { + currentLanguage = data.languages.find((e) => e.code === codeOrLocale || e.locale === codeOrLocale); + } + + static languages() { + return data.languages; + } + + static pages() { + return data.pages; + } + + static configuration(parameter) { + let value = data.configuration[Cluar.currentLanguage().code] ? data.configuration[Cluar.currentLanguage().code][parameter] : null; + if (!value) { + value = data.configuration['GENERIC'] ? data.configuration['GENERIC'][parameter] : null; + } + if (value) { + return value; + } + return parameter; + } + + static configurationNumber(parameter) { + const value = Cluar.configuration(parameter); + if (value && value.match(/^-?\d+\.?\d*$/)) { + return parseFloat(value); + } else { + return 0; + } + } + + static plainDictionary(entry) { + let value = data.dictionary[Cluar.currentLanguage().code] ? data.dictionary[Cluar.currentLanguage().code][entry] : null; + if (value) { + return (value).replace(/<\/?p[^>]*>/g, "") + } + return entry; + } + + static dictionary(entry) { + let value = data.dictionary[Cluar.currentLanguage().code] ? data.dictionary[Cluar.currentLanguage().code][entry] : null; + if (value) { + return value; + } + return entry; + } + + static banner(type) { + const i = data.banners.find((e) => e.type === type && e.language === Cluar.currentLanguage().code); + if (i) { + return i; + } + return { type, language: Cluar.currentLanguage().code, title: type, content: type, image: null }; + } + + static content(type) { + const i = data.contents.find((e) => e.type === type && e.language === Cluar.currentLanguage().code); + if (i) { + return i; + } + return { type, language: Cluar.currentLanguage().code, title: type, content: type }; + } + + static api(path, settings) { + const success = settings.onSuccess ? settings.onSuccess : () => { }; + const fail = settings.onFail ? settings.onFail : () => { }; + const configs = { + method: settings.method ? settings.method : 'POST', + credentials: 'include', + headers: { + "Content-Type": 'application/json', + "Accept": 'application/json' + } + }; + if (settings.data) { + configs.body = JSON.stringify(settings.data); + } + fetch(config.cluar.api + path, configs).then( + (response) => { + if (response.ok) { + if (response.status === 204) { + return success(); + } else { + const contentType = response.headers.get("Content-Type"); + if (contentType && contentType.toLowerCase().indexOf("application/json") === 0) { + return response.json().then((data) => { + success({ json: data }); + }); + } else { + return response.text().then((text) => { + success({ text: text }); + }); + } + } + } else { + return fail({ response: response }); + } + } + ).catch((e) => { + fail({ error: e }); + }); + } +} diff --git a/website/src/common/CluarCustomData.js b/website/src/common/CluarCustomData.js new file mode 100644 index 0000000..06fc647 --- /dev/null +++ b/website/src/common/CluarCustomData.js @@ -0,0 +1,6 @@ + +export default class CluarCustomData { + constructor(data) { + this.data = data; + } +} diff --git a/website/src/common/LangRouter.js b/website/src/common/LangRouter.js new file mode 100644 index 0000000..f38ded2 --- /dev/null +++ b/website/src/common/LangRouter.js @@ -0,0 +1,67 @@ +import React, { useState, useEffect } from 'react'; +import { + BrowserRouter as Router, + Switch, + Route, + Redirect +} from "react-router-dom"; + +import App from './App'; +import Cluar from './Cluar'; +import NotFound from '../pages/NotFound'; + +export default () => { + + const defaultLanguage = Cluar.defaultLanguage(); + + const [locale, setLocale] = useState(defaultLanguage.locale); + + const storageLocale = window.localStorage.getItem('locale'); + if (storageLocale == null) { + window.localStorage.setItem('locale', locale); + } else { + Cluar.changeLanguage(storageLocale); + } + + const handleChangeLocale = (newLocale) => { + Cluar.changeLanguage(newLocale); + console.log('newLocale = ', newLocale); + window.localStorage.setItem('locale', newLocale); + setLocale(newLocale); + }; + + const routes = []; + + for (const language of Cluar.languages()) { + routes.push( { + handleChangeLocale(language.locale); + return ; + } + } />); + } + + return + + { + return ; + }} /> + + + XPTO + + + HOME + + + {routes} + { + return ; + }} /> + + ; +}; diff --git a/website/src/common/serviceWorker.js b/website/src/common/serviceWorker.js new file mode 100644 index 0000000..b04b771 --- /dev/null +++ b/website/src/common/serviceWorker.js @@ -0,0 +1,141 @@ +// This optional code is used to register a service worker. +// register() is not called by default. + +// This lets the app load faster on subsequent visits in production, and gives +// it offline capabilities. However, it also means that developers (and users) +// will only see deployed updates on subsequent visits to a page, after all the +// existing tabs open on the page have been closed, since previously cached +// resources are updated in the background. + +// To learn more about the benefits of this model and instructions on how to +// opt-in, read https://bit.ly/CRA-PWA + +const isLocalhost = Boolean( + window.location.hostname === 'localhost' || + // [::1] is the IPv6 localhost address. + window.location.hostname === '[::1]' || + // 127.0.0.0/8 are considered localhost for IPv4. + window.location.hostname.match( + /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ + ) +); + +export function register(config) { + if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { + // The URL constructor is available in all browsers that support SW. + const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); + if (publicUrl.origin !== window.location.origin) { + // Our service worker won't work if PUBLIC_URL is on a different origin + // from what our page is served on. This might happen if a CDN is used to + // serve assets; see https://github.com/facebook/create-react-app/issues/2374 + return; + } + + window.addEventListener('load', () => { + const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; + + if (isLocalhost) { + // This is running on localhost. Let's check if a service worker still exists or not. + checkValidServiceWorker(swUrl, config); + + // Add some additional logging to localhost, pointing developers to the + // service worker/PWA documentation. + navigator.serviceWorker.ready.then(() => { + console.log( + 'This web app is being served cache-first by a service ' + + 'worker. To learn more, visit https://bit.ly/CRA-PWA' + ); + }); + } else { + // Is not localhost. Just register service worker + registerValidSW(swUrl, config); + } + }); + } +} + +function registerValidSW(swUrl, config) { + navigator.serviceWorker + .register(swUrl) + .then(registration => { + registration.onupdatefound = () => { + const installingWorker = registration.installing; + if (installingWorker == null) { + return; + } + installingWorker.onstatechange = () => { + if (installingWorker.state === 'installed') { + if (navigator.serviceWorker.controller) { + // At this point, the updated precached content has been fetched, + // but the previous service worker will still serve the older + // content until all client tabs are closed. + console.log( + 'New content is available and will be used when all ' + + 'tabs for this page are closed. See https://bit.ly/CRA-PWA.' + ); + + // Execute callback + if (config && config.onUpdate) { + config.onUpdate(registration); + } + } else { + // At this point, everything has been precached. + // It's the perfect time to display a + // "Content is cached for offline use." message. + console.log('Content is cached for offline use.'); + + // Execute callback + if (config && config.onSuccess) { + config.onSuccess(registration); + } + } + } + }; + }; + }) + .catch(error => { + console.error('Error during service worker registration:', error); + }); +} + +function checkValidServiceWorker(swUrl, config) { + // Check if the service worker can be found. If it can't reload the page. + fetch(swUrl, { + headers: { 'Service-Worker': 'script' }, + }) + .then(response => { + // Ensure service worker exists, and that we really are getting a JS file. + const contentType = response.headers.get('content-type'); + if ( + response.status === 404 || + (contentType != null && contentType.indexOf('javascript') === -1) + ) { + // No service worker found. Probably a different app. Reload the page. + navigator.serviceWorker.ready.then(registration => { + registration.unregister().then(() => { + window.location.reload(); + }); + }); + } else { + // Service worker found. Proceed as normal. + registerValidSW(swUrl, config); + } + }) + .catch(() => { + console.log( + 'No internet connection found. App is running in offline mode.' + ); + }); +} + +export function unregister() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.ready + .then(registration => { + registration.unregister(); + }) + .catch(error => { + console.error(error.message); + }); + } +} diff --git a/website/src/components/Actions/Item/index.js b/website/src/components/Actions/Item/index.js new file mode 100644 index 0000000..1ac855c --- /dev/null +++ b/website/src/components/Actions/Item/index.js @@ -0,0 +1,15 @@ +import React from 'react'; + +import './index.less'; + +export default ({ section, type, title, content, indication, link }) => { + return ( +
  • +
    window.location = link}> + { title !== '' ?

    {title}

    : null} + { content.replace(/ /g,'') !== '' ?

    : null } + { indication !== '' ? {indication} : null} +

    +
  • + ); +} diff --git a/website/src/components/Actions/Item/index.less b/website/src/components/Actions/Item/index.less new file mode 100644 index 0000000..54761dd --- /dev/null +++ b/website/src/components/Actions/Item/index.less @@ -0,0 +1,39 @@ +@import "../../../styles/variables.less"; + +.actions__item { + width: 280px; + padding: 15px; + margin: 0 0 20px 0; + @media only screen and (max-width: @header-mobile-width) { + margin: 0; + } + border: @actions-item-border-width solid @actions-item-border-color; + border-radius: @actions-item-border-radius; + transition: all .1s ease-in; + background-color: @actions-item-background; + color: @actions-item-text-color; + font-weight: 600; + &:hover { + cursor: pointer; + background-color: @actions-item-background-hover; + color: @actions-item-text-color-hover; + a { + color: @actions-item-link-color-hover; + } + } + + h4 { + color: @actions-item-text-color; + font-size: 1.2em; + margin-bottom: 0.2em; + } + p { + font-size: 1.0em; + margin-bottom: 0.5em; + } + a { + text-transform: uppercase; + font-size: 1.0em; + color: @actions-item-link-color; + } +} diff --git a/website/src/components/Actions/index.js b/website/src/components/Actions/index.js new file mode 100644 index 0000000..96449be --- /dev/null +++ b/website/src/components/Actions/index.js @@ -0,0 +1,20 @@ +import React from 'react'; + +import Item from './Item'; + +import './index.less'; + +export default ({ section, type, actions }) => { + const list = []; + for (const action of actions) { + list.push(); + } + if (list.length === 0) { + return null; + } + return ( +
      + {list} +
    + ); +} diff --git a/website/src/components/Actions/index.less b/website/src/components/Actions/index.less new file mode 100644 index 0000000..07b64a5 --- /dev/null +++ b/website/src/components/Actions/index.less @@ -0,0 +1,10 @@ +.actions { + list-style-type: none; + margin: 0; + padding: 0 0 0 20px; + @media only screen and (max-width: 800px) { + padding: 0 0 0 0; + display: flex; + flex-wrap: wrap; + } +} diff --git a/website/src/components/Banner/index.js b/website/src/components/Banner/index.js new file mode 100644 index 0000000..f5d7e3d --- /dev/null +++ b/website/src/components/Banner/index.js @@ -0,0 +1,38 @@ +import React from 'react'; +import { Row, Col } from 'antd'; + +import Actions from '../Actions'; +import Cluar from '../../common/Cluar'; + +import './index.less'; + +export default ({ section, type, image, image_title, image_alt, title, content, position, actions }) => { + let backgroundPositionX = position.x !== "" ? position.x : "50%"; + let backgroundPositionY = position.y !== "" ? position.y : "50%"; + + return ( +
    +
    + + < Col lg={18} sm={(type === 'default-sub-banner') ? (24) : (18)} xs={(type === 'default-sub-banner') ? (24) : (18)}> +
    +

    {title}

    +
    +
    + + + + +
    +
    + {Cluar.plainDictionary('text-sub-banner')} +
    +
    +
    +
    + ); +} diff --git a/website/src/components/Banner/index.less b/website/src/components/Banner/index.less new file mode 100644 index 0000000..11e5033 --- /dev/null +++ b/website/src/components/Banner/index.less @@ -0,0 +1,155 @@ +@import "../../styles/variables.less"; + +.banner { + &__sub-banner { + display: none; + position: absolute; + bottom: 0; + left: 0; + background-color: @banner-sub-banner-bg; + padding: 15px 0; + width: 100% !important; + text-align: center; + font-weight: bold; + font-size: 1.3em; + letter-spacing: .025em; + box-shadow: @banner-sub-banner-box-shadow; + color: @banner-sub-banner-color; + @media only screen and (max-width: @header-mobile-width) { + font-size: 1.2em; + } + } + + &__default-sub-banner { + padding-bottom: calc(1.8em + 30px) !important; + .banner__sub-banner { + display: block; + } + > div > div > div { + p { + margin-bottom: 0; + &:nth-last-child(1) { + margin-bottom: 1em; + } + } + } + @media only screen and (max-width: @header-mobile-width) { + > div > div > div { + margin: auto; + } + } + } + + &__default, &__default-sub-banner { + min-height: 600px; + height: calc(100vh - @header-size); + @media only screen and (max-width: @header-mobile-width) { + height: calc(100vh - @header-size-mobile); + } + .banner__darken-bg { + display: none; + } + } + &__secondary { + position: relative; + height: calc(40vh - @header-size); + text-align: left; + @media only screen and (max-width: @header-mobile-width) { + height: calc(30vh - @header-size-mobile); + } + div:nth-child(1) { + z-index: 2; + h2 { + text-shadow: 0 0 10px @banner-secondary-text-shadow; + } + } + .banner__darken-bg { + width: 100%; + height: 100%; + background-color: @banner-secondary-darken-bg-color; + position: absolute; + z-index: 1; + } + @media only screen and (max-width: @header-mobile-width) { + height: calc(33vh - @header-size-mobile) !important; + } + } + > div { + display: flex; + align-items: center; + justify-content: center; + text-align: left; + padding: 0 50px; + width: 100%; + background-color: #777; + background-size: cover; + background-attachment: fixed; + background-repeat: no-repeat; + + @media only screen and (max-width: @header-mobile-width) { + height: calc(100vh - @header-size-mobile); + min-height: unset; + text-align: center; + padding: 0; + } + > div { + width: 100%; + > div { + > div { + width: calc(80% - 40px); + height: auto; + > h1 { + margin-bottom: 0; + font-weight: 200; + font-size: 3.5em; + color: #fff; + letter-spacing: .01em; + @media only screen and (max-width: @header-mobile-width) { + font-size: 2em; + line-height: 1.2em; + margin-bottom: 10px; + } + } + @media only screen and (max-width: @header-mobile-width) { + width: 80%; + } + > div { + > p { + font-size: 1.4em; + color: #fff; + @media only screen and (max-width: @header-mobile-width) { + font-size: 1.5em; + line-height: 1.5em; + } + } + } + } + } + .actions { + position: relative; + display: inline-block; + padding-left: 0; + text-align: center; + .actions__item { + h4 { + font-size: 1.0em; + margin-bottom: 0.1em; + } + p { + font-size: 1.1em; + margin-bottom: 0.1em; + } + a { + font-size: 1em + } + &:hover { + h4 { + color: #000000; + } + } + } + } + } + } +} + \ No newline at end of file diff --git a/website/src/components/Content/index.js b/website/src/components/Content/index.js new file mode 100644 index 0000000..e0fafe5 --- /dev/null +++ b/website/src/components/Content/index.js @@ -0,0 +1,114 @@ +import React from 'react'; +import { Row, Col, Button } from 'antd'; + +import Actions from '../Actions'; +import Cluar from '../../common/Cluar'; + +import './index.less'; + +export default ({section, type, title, content, image, image_title, image_alt, image_max_width, actions}) => { + let layout = null; + const imageStyle = {}; + if (image_max_width > 0) { + imageStyle["maxWidth"] = `${image_max_width}px`; + } + if (type === 'text') { + layout = ( +
    +
    +

    { title }

    + { title ?
    : null } +
    +
    +
    + ); + } else if (type === 'image-left') { + layout = ( +
    + + +
    + { +
    + + +
    +

    { title }

    +
    +
    +
    + +
    +
    + ); + } else if (type === 'image-right') { + layout = ( +
    + + +
    +

    { title }

    +
    +
    +
    + + +
    + { +
    + +
    +
    + ); + } else if (type === 'image-top') { + layout = ( +
    +
    + { +
    +
    +

    { title }

    +
    +
    +
    + ); + } else if (type === 'image-bottom') { + layout = ( +
    +
    +

    { title }

    +
    +
    +
    + { +
    +
    + ); + } else if (type === 'image') { + layout = ( +
    +
    + { +
    +
    + ); + } else { + layout = ( +
    +
    + { +
    +
    +

    { title }

    +
    +
    +
    + ); + } + return ( +
    + { layout } + +
    + ); +} diff --git a/website/src/components/Content/index.less b/website/src/components/Content/index.less new file mode 100644 index 0000000..902c0e5 --- /dev/null +++ b/website/src/components/Content/index.less @@ -0,0 +1,121 @@ +@import "../../styles/variables.less"; + +.content { + margin: auto; + max-width: 80%; + padding: 50px 60px 50px; + display: flex; + @media only screen and (max-width: 800px) { + padding: 20px 0; + margin: 20px auto; + flex-wrap: wrap; + } + + > div { + width: 100%; + } + + > ul.actions { + width: 300px; + @media only screen and (max-width: 800px) { + width: 100%; + } + } + + .image { + width: 100%; + height: auto; + img { + display: block; + margin-left: auto; + margin-right: auto; + } + } + + .text { + > h1 { + font-size: 2em; + font-weight: normal; + letter-spacing: .01em; + } + &__title-border { + height: 4px; + width: 8vw; + margin-top: -1em; + margin-bottom: 1em; + background: rgb(255,255,255); + background: linear-gradient(90deg, @primary-color 0%, @secondary-color 100%); + } + > div { + font-size: 1.2em; + > ul { + margin-left: 40px !important; + } + } + } + + &__text { + + } + + &__image-left { + + } + &__image-right { + + } + &__image-top { + + } + &__image-bottom { + + } + + &__text-service { + > h1 { + font-size: 2em; + font-weight: normal; + letter-spacing: .01em; + } + &__title-border { + height: 4px; + width: 8vw; + margin-top: -1em; + margin-bottom: 1em; + background: rgb(255,255,255); + } + .ant-btn { + height: 50px; + min-width: 190px; + > span { + text-transform: uppercase; + letter-spacing: .05em; + font-size: 1.2em; + padding: 0 20px; + } + } + } + + .actions__item { + background-color: @primary-color; + text-align: center; + border-color: @primary-color; + h4 { + color: #ffffff; + } + a { + color: @secondary-color; + } + &:hover { + cursor: pointer; + background-color: @secondary-color; + color: #000000; + h4 { + color: #000000; + } + a { + color: @primary-color; + } + } + } +} diff --git a/website/src/components/Cookies/index.js b/website/src/components/Cookies/index.js new file mode 100644 index 0000000..7cd687e --- /dev/null +++ b/website/src/components/Cookies/index.js @@ -0,0 +1,34 @@ + +import React, { useState } from 'react'; +import { Button } from 'antd'; + +import Cluar from '../../common/Cluar'; + +import './index.less'; + +export default () => { + const [acceptedCookies, setAcceptedCookies] = useState(sessionStorage.getItem('cookies-accepted')); + const onClick = () => { + sessionStorage.setItem('cookies-accepted', '1'); + setAcceptedCookies('1'); + } + if (acceptedCookies === '1') { + return null; + } + return ( +
    +
    +
    +

    + {Cluar.currentLanguage().locale == 'pt' && <>Utilizamos cookies no nosso website para lhe proporcionar a experiência mais relevante, para mais informações consulte a nossa política de cookies e privacidade. } + {Cluar.currentLanguage().locale == 'en' && <>We use cookies to provide you the best experience, check our cookies and privacy policy. } +

    + +
    +
    +
    + ) +} diff --git a/website/src/components/Cookies/index.less b/website/src/components/Cookies/index.less new file mode 100644 index 0000000..544abeb --- /dev/null +++ b/website/src/components/Cookies/index.less @@ -0,0 +1,29 @@ +.cookies { + position: absolute; + height: 100px; + background-color: #777777; + &--popup { + position: fixed; + z-index: 10000; + width: 100%; + height: auto; + bottom: 0; + background-color: #fff; + box-shadow: 0 -1px 10px 0 rgba(172, 171, 171, 0.3); + &__content { + color: rgba(0, 0, 0, 0.85); + padding: 20px 50px; + display: flex; + justify-content: space-between; + p { + margin-bottom: 0; + } + @media only screen and (max-width: 768px) { + display: block; + p { + margin-bottom: 1em; + } + } + } + } +} diff --git a/website/src/components/Dictionary/index.js b/website/src/components/Dictionary/index.js new file mode 100644 index 0000000..47f0b03 --- /dev/null +++ b/website/src/components/Dictionary/index.js @@ -0,0 +1,18 @@ +import React from 'react'; + +import Cluar from '../../common/Cluar'; + +import './index.less'; + +export default (props) => { + let value = Cluar.dictionary(props.entry); + if (props.oneLine) { + value = (value).replace(/<\/?p[^>]*>/g, ""); + return ( + + ) + } + return ( +
    + ); +} diff --git a/website/src/components/Dictionary/index.less b/website/src/components/Dictionary/index.less new file mode 100644 index 0000000..e69de29 diff --git a/website/src/components/Listing/Item/index.js b/website/src/components/Listing/Item/index.js new file mode 100644 index 0000000..3c92b62 --- /dev/null +++ b/website/src/components/Listing/Item/index.js @@ -0,0 +1,37 @@ +import React from 'react'; +import { Col } from 'antd'; + +import './index.less'; + +export default ({ section, type, image, image_title, image_alt, title, content, link }) => { + let layout = null; + if (type === 'YOUR-CUSTOM-TYPE-HERE') { + layout = ( +
  • +
    +

    {title}

    + { +
    +
    +
  • + ); + } else if(type === 'OTHER-CUSTOM-TYPE-HERE') { + layout = ( + + {title}
    + + ); + } else { + layout = ( +
  • +
    +

    {title}

    +
    +
    +
  • + ); + } + return ( + layout + ); +} diff --git a/website/src/components/Listing/Item/index.less b/website/src/components/Listing/Item/index.less new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/website/src/components/Listing/Item/index.less @@ -0,0 +1 @@ + diff --git a/website/src/components/Listing/index.js b/website/src/components/Listing/index.js new file mode 100644 index 0000000..00270c4 --- /dev/null +++ b/website/src/components/Listing/index.js @@ -0,0 +1,44 @@ +import React from 'react'; +import { Row } from 'antd'; + +import Item from './Item'; + +import './index.less'; + +export default ({section, type, image, image_title, image_alt, title, content, items}) => { + const children = []; + for (const item of items) { + children.push(); + } + + let listLayout = ( +
    +

    { title }

    +
    +
    +
      + { children } +
    +
    + ); + + if (type === 'YOUR-CUSTOM-TYPE-HERE') { + listLayout = ( + + { children } + + ); + } else if (type === 'OTHER-CUSTOM-TYPE-HERE') { + listLayout = ( + + { children } + + ); + } + + return ( +
    + { listLayout } +
    + ); +} diff --git a/website/src/components/Listing/index.less b/website/src/components/Listing/index.less new file mode 100644 index 0000000..928a1c2 --- /dev/null +++ b/website/src/components/Listing/index.less @@ -0,0 +1,36 @@ +@import "../../styles/variables.less"; + +.listing { + margin: auto; + max-width: 80%; + padding: 50px 60px 0; + display: flex; + @media only screen and (max-width: 800px) { + padding: 20px 0; + margin: 20px auto; + flex-wrap: wrap; + } + &__title-border { + height: 4px; + width: 8vw; + margin-top: -1em; + margin-bottom: 1em; + background: rgb(255,255,255); + background: linear-gradient(90deg, @primary-color 0%, @secondary-color 100%); + } + + > div > h1 { + font-size: 2em; + font-weight: normal; + letter-spacing: .01em; + } + > div > div { + font-size: 1.2em; + } + + > div > ul { + list-style-type: none; + margin: 0; + padding: 0; + } +} diff --git a/website/src/components/functionality/ContactForm/index.js b/website/src/components/functionality/ContactForm/index.js new file mode 100644 index 0000000..813dac1 --- /dev/null +++ b/website/src/components/functionality/ContactForm/index.js @@ -0,0 +1,96 @@ +import React, { useState } from 'react'; +import { Row, Col, Form, Input, Button, notification } from 'antd'; + +import Cluar from '../../../common/Cluar'; + +import './index.less'; + +const { TextArea } = Input; + +const validateMessages = { + required: '${label} é de preenchimento obrigatório!', + types: { + email: '${label} não é um email válido!' + } +}; + +const layout = { + rowGutter: { gutter: [25, 0] }, + labelCol: {span: 'hide'} +}; + +export default ({ title }) => { + const [ loading, setLoading ] = useState(false); + const handleFinish = (values)=> { + values.contactForm.locale = window.localStorage.getItem('locale'); + setLoading(true); + const fail = () => { + setLoading(false); + notification.error({ + message: title , + description: Cluar.dictionary('contact-fail'), + top: 100 + }); + }; + Cluar.api('contact', { + data: values.contactForm, + onSuccess: (data) => { + if (data.json && data.json.result === true) { + setLoading(false); + notification.success({ + message: title , + description: Cluar.dictionary('contact-success'), + top: 100 + }); + } else { + fail(); + } + }, + onFail: (data) => { + console.log("ContactForm failed:", data); + fail(); + } + }); + }; + return ( +
    +
    +
    +

    {title}

    + + + + + + + + + + + + + + + + + + + + + + +