{"id":15498836,"url":"https://github.com/eapo/anima","last_synced_at":"2026-03-05T06:01:24.118Z","repository":{"id":195649805,"uuid":"253108903","full_name":"eapo/anima","owner":"eapo","description":"Community Network Resource Mapping toolkit","archived":false,"fork":false,"pushed_at":"2020-04-11T22:43:27.000Z","size":819,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-10T05:38:42.812Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://anima.collaborativesociety.foundation","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eapo.png","metadata":{"files":{"readme":"README.html","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2020-04-04T22:17:03.000Z","updated_at":"2020-04-11T22:43:29.000Z","dependencies_parsed_at":"2023-09-19T04:06:31.951Z","dependency_job_id":null,"html_url":"https://github.com/eapo/anima","commit_stats":null,"previous_names":["eapo/anima"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/eapo/anima","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eapo%2Fanima","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eapo%2Fanima/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eapo%2Fanima/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eapo%2Fanima/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eapo","download_url":"https://codeload.github.com/eapo/anima/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eapo%2Fanima/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30111779,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T03:40:26.266Z","status":"ssl_error","status_checked_at":"2026-03-05T03:39:15.902Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-02T08:48:30.139Z","updated_at":"2026-03-05T06:01:23.895Z","avatar_url":"https://github.com/eapo.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 id=\"oilerplate\"\u003eßoilerplate\u003c/h1\u003e\n\u003cp\u003eA modular framework for NodeJS based applications.\u003c/p\u003e\n\u003ch2 id=\"whatkindofsorceryisthis\"\u003eWhat kind of sorcery is this?\u003c/h2\u003e\n\u003cp\u003eOn one hand the \u003ccode\u003eß\u003c/code\u003e object, with the modular loader mechanism. The code is defined in the boilerplate/loader folder.\u003cbr /\u003e\nOn the other hand the boilerplate for your application - the stack you start with, that will be customized. Defined by modules that are loaded with the boilerplate loader.  \u003c/p\u003e\n\u003ch2 id=\"whatisitgoodforwhyshouldineedthiswhyamireadingthis\"\u003eWhat is it good for? Why should I need this? Why am I reading this?\u003c/h2\u003e\n\u003cp\u003eOn one hand this is a method to reduce complexity, to organize code, to put it to a reuseable form, to create your own modules, to have a structure.\nOn the other hand a starting point with some common features already implemented. Several stacks exist already, and it is not too difficoult to start a new stack.\u003c/p\u003e\n\u003cp\u003eYou may need something like that if you have several projects that have some common code, and you don't want to re-implement everything all the time.\u003c/p\u003e\n\u003ch3 id=\"iusuallysaytheboilervariableoritcanbecalledeszettipaststorsharpsaglobalvariable\"\u003eß - I usually say \"the boiler-variable\", or it can be called Eszett (IPA: [ɛsˈtsɛt]) or \"Sharp S\" - a global variable.\u003c/h3\u003e\n\u003cp\u003eYes, yes, I know, global variables are bad, and pollute the scope. Yes, so we pollute the scope with this special character, never used anywhere else as far as I know.\nWe attach functions and some objects to that variable, and this will run a modular structure to build up our project(s).\u003c/p\u003e\n\u003ch3 id=\"theboilerplateitselfisamodularstructuretostartaprojectwith\"\u003eThe boilerplate itself is a modular structure to start a project with.\u003c/h3\u003e\n\u003cp\u003eThe first implementation of a full stack, \u003ccode\u003e@ng-modules\u003c/code\u003e used MongoDB, Express, AngularJS, NodeJS, Passport, and some others. It is now outdated.\n\u003ccode\u003e@codepad-modules\u003c/code\u003e implements codepad, a collaborative browser based online IDE that we use.\nFrontend \u003ccode\u003e@vue-modules\u003c/code\u003e along with the \u003ccode\u003e@server-modules\u003c/code\u003e backend is a modern Vue based fullstack. \u003ccode\u003e@vuekit-modules\u003c/code\u003e is a minimal non-webpacked version to try things quickly.\nThe list goes on, so for the actual list you should check what 'factory' modules we provide. \u003c/p\u003e\n\u003cp\u003eTake a look at the modules to get the idea how things can be achived. Once the whole thing is started you actually have something you can extend, override, and build further.\nAs a core concept, you can override any part of the code, by design its just a skeleton.\u003c/p\u003e\n\u003cp\u003eTo explain the philosophy a bit better, a project get's unique as files are added and eventually re-defined.\u003cbr /\u003e\nThere are two kinds of modules, custom modules with priority and factory modules that have parent folders starting with the \u003ccode\u003e@\u003c/code\u003e character.\nA project may have a module in both of these folders, in that case if a file is present in a custom module, it has priority over the factory module. \nIt can even happen that functionality is split up in two stack folders. Functionality is then built up by the module loader system, honoring your priority modules.\u003c/p\u003e\n\u003cp\u003eLet me give you an example. In a project instance we have a \u003ccode\u003emodules\u003c/code\u003e folder containing the \u003ccode\u003eapp\u003c/code\u003e module, which also has a symlinked file in \u003ccode\u003e@vue-modules\u003c/code\u003e, called \u003ccode\u003eindex.html\u003c/code\u003e.\nIn that case this file defines the index page for the project, and the one from our project overrides the default. Every function, every hook, every frontend file, everything can be customized.\u003c/p\u003e\n\u003cp\u003eNote: CWD is a module itself as well.\u003c/p\u003e\n\u003ch2 id=\"gettingstarted\"\u003eGetting Started\u003c/h2\u003e\n\u003cp\u003eDownload / mount / Clone the git repo into folder where you want to start your project. We usually use \u003ccode\u003e/srv/codepad-project\u003c/code\u003e, since we are working with codepad. \u003c/p\u003e\n\u003cp\u003eYou can make, no, you should make the boilerplate folder readonly, and create at least one \u003ccode\u003emodules\u003c/code\u003e folder to put your own modules and override existing modules or parts of existing modules.\nIt is not recommended to modify the boilerplate content in your project! Any file that is placed properly outside of the boilerplate folder in the project folder, will override the file while loading.\u003c/p\u003e\n\u003cp\u003eSo, an example of the structure would be:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e/srv/codepad-project  # the project folder (CWD)\n/srv/codepad-project/boilerplate   # the readonly folder (BPD)\n/srv/codepad-project/@somestack-modules   # contains symlinks to the readonly modules used\n/srv/codepad-project/mycustom-modules   # the custom modules for the project (with priority over @-modules)\n/srv/codepad-project/configs   # the project configuration files (initially generated automatically)\n/srv/codepad-project/var/debug   # runtime files, and a debug folder where the boot process can be debugged\n...\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"runningtheinstaller\"\u003eRunning the installer\u003c/h2\u003e\n\u003cp\u003eWell, I use red Hat based systems so if you know what DNF is, you can run the installer.\nYou will need NodeJS and npm of course. There are some npm.sh files in the modules, these will install the node_modules of the ß-modules.\nNOTE: \u003ccode\u003emodules\u003c/code\u003e are ßoilerplat modules, and \u003ccode\u003enode_modules\u003c/code\u003e are npm packaged modules. Unfortunatley npm has no standard for example for location of publicly visible files in a web project. Some npm modules use a \u003ccode\u003e/dist\u003c/code\u003e folder, while some others use some different folder, so we need to crate wrapper modules to define express routes, or our stack might use possibly webpack. The point is, \u003ccode\u003enode_modules\u003c/code\u003e are not to be confused with ß-modules.\u003c/p\u003e\n\u003cp\u003eYou can start your project with \u003ccode\u003epush.sh\u003c/code\u003e, an advanced script that uses system scope, \u003ccode\u003eß start\u003c/code\u003e or the most simple \u003ccode\u003enode server.js\u003c/code\u003e - pre-defined constants or variables can be added there.\u003c/p\u003e\n\u003ch2 id=\"whatmodulesareused\"\u003eWhat modules are used.\u003c/h2\u003e\n\u003cp\u003eIn addition to the modules folder, all folders in the working directory that have 'modules' in their name will be considered as a set of modules. (Except \u003ccode\u003enode_modules\u003c/code\u003e)\nThey are processed sequentially, however if a modules folder is prefixed with \u003ccode\u003e@\u003c/code\u003e it will be considered a boilerplate factory module, and has lower priority as the other modules. \nA module-condition.js file if present, has to evalute to true. A list of modules is printed into \u003ccode\u003e/var/boilerplate/debug\u003c/code\u003e \u003c/p\u003e\n\u003ch2 id=\"otherspecialcharacters\"\u003eOther special characters\u003c/h2\u003e\n\u003cp\u003eif you see this:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eł(some_vairable, or_two_variables); // mostly same as console.log\nŁ(that, or_what, something); // extended logs with info on where it happened\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eDon't panik. These two are just logging functions, mainly used in development.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eđ(err); // not so fatal, log and continiue\nĐ(error); // fatal error, log and throw\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eDon't panik either. These two are the determinator and the detonator functions, that handle errors.\u003c/p\u003e\n\u003ch2 id=\"license\"\u003eLicense\u003c/h2\u003e\n\u003cp\u003eThis project is licensed under the MIT License - see the \u003ca href=\"LICENSE.md\"\u003eLICENSE.md\u003c/a\u003e file for details.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/README.EN.md?line=1\"\u003e\u003ccode\u003eREADME.EN.md:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003e/global\u003c/code\u003e folder in a module should contain simple scripts to attach values to the global \u003ccode\u003eß\u003c/code\u003e namespace.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/boot.js?line=9\"\u003e\u003ccode\u003eboot.js:9\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003e/local\u003c/code\u003e may contain pre-defined code which is loaded before libs are loaded. Factory should not have any local folder, it is project-specific code.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/boot.js?line=11\"\u003e\u003ccode\u003eboot.js:11\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eAfter the global \u003ccode\u003eß\u003c/code\u003e values are set, libs and hooks are loaded.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/boot.js?line=13\"\u003e\u003ccode\u003eboot.js:13\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"theobject\"\u003eTHE ß object\u003c/h2\u003e\n\u003cp\u003eThe boilerplate module framework uses a \"ß namespace\" to store constants and references to functions across it's modules.\u003cbr /\u003e\nThis namespace is attached to the \u003ccode\u003eß\u003c/code\u003e primary global variable, visible in the global scope. Frequently used node modules can be attached directly.\u003cbr /\u003e\nYou can pre-create the ß variable in your server.js file before loading the boilerplate, to pre-define functions variables and constants.  \u003c/p\u003e\n\u003cp\u003eA custom \u003ccode\u003eserver.js\u003c/code\u003e with debug-mode may look like this.    \u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e// Pre-declare ß so constants and functions can be attached.  \nglobal.ß = {};  \n// Set the DEBUG constant to true  \nß.DEBUG = true;  \n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cbr /\u003e\nThe entry point to boot the framework is then: \u003ccode\u003erequire(\"./boilerplate\");\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/bp.js?line=5\"\u003e\u003ccode\u003ebp.js:5\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eWe can debug the namespace by writing a  debug file. \u003ccode\u003eß.debug_namespace\u003c/code\u003e will by default write the file to  \u003ccode\u003eß.VAR /debug/boiler-namespace.txt\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/bp.js?line=43\"\u003e\u003ccode\u003ebp.js:43\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eTo use the \u003ccode\u003eß\u003c/code\u003e namespace in files outside of the framework, we export it in es5 and es6 formats. Arrays dont work, but objects do.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/bp.js?line=62\"\u003e\u003ccode\u003ebp.js:62\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eBy convention, uppercase variables are considered exportable-constants\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/bp.js?line=78\"\u003e\u003ccode\u003ebp.js:78\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003euncaughtException\u003c/code\u003e handler, determinator \u003ccode\u003eđ\u003c/code\u003e and detonator \u003ccode\u003eĐ\u003c/code\u003e functions, as well as the calling sourcefile field of the logging function \u003ccode\u003eŁ\u003c/code\u003e has file paths converted to ansi links by default in non-production mode.\u003cbr /\u003e\n   Conversation takes place and can be customized by pre-defining boilerplate constants and functions.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/det.js?line=21\"\u003e\u003ccode\u003edet.js:21\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"loggingthrowing\"\u003eLogging, Throwing\u003c/h2\u003e\n\u003ch3 id=\"catchedexceptions\"\u003eCatched exceptions\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003euncaughtException\u003c/code\u003e is captured and displayed with enhanced formatting.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/det.js?line=94\"\u003e\u003ccode\u003edet.js:94\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eleadnull is a superglobal function. Usage: \u003ccode\u003eł(obj, 'foo.bar')\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/det.js?line=108\"\u003e\u003ccode\u003edet.js:108\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e// Demonstration of the leadnull ł function  \n\nvar a = {};  \na.b = {};  \na.b.c = {};  \na.b.c.d = {};  \n\na.b.c.d.value = \"Hello ł\";  \n\nlet test1 = ł(a, \"b.c.d.value\");  \nlet test2 = ł(a, \"b.x.d.value\");  \n\nlet a3 = \"String\";  \nlet bx = false;  \nlet test3 = ł(a3, \"b.x.d.value\");  \nlet test4 = ł(a, bx);  \n\nŁ(a.b.c.d.value, test1, test2, test3, test4);  \n\n/* returns  \n\n┠─ Hello ł   // correct access of nested objects  \n┠─ Hello ł   // access the correct object via ł  \n┠─ undefined // access an undefined object at ł  \n┠─ null      // wrong first argument  \n┠─ null      // wrong second argument  \n\nWrong use of ł, first argument is not an object in at Object.\u0026lt;anonymous\u0026gt; (/srv/codepad-project/demo.js:33:13)  \nWrong use of ł, second argument is not a string in at Object.\u0026lt;anonymous\u0026gt; (/srv/codepad-project/demo.js:34:13)  \n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/det.js?line=110\"\u003e\u003ccode\u003edet.js:110\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch3 id=\"supergloballoggingfunctiontobeusedduringdevelopment\"\u003eSuperglobal Logging \u003ccode\u003eŁ\u003c/code\u003e function to be used during development\u003c/h3\u003e\n\u003cp\u003ePlace temporary \u003ccode\u003econsole.log()\u003c/code\u003e-like function with short special character, they can be tracked down easyly within the project.\u003cbr /\u003e\n\u003ccode\u003eŁ()\u003c/code\u003e is an enhanced \u003ccode\u003econsole.log\u003c/code\u003e that prints it's arguments in seperate lines, and indicates when and where it has been called from.\u003cbr /\u003e\nIt is very useful while development, to analize objects and variables in the code. Production-ready code should not contain this logging helper.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/det.js?line=182\"\u003e\u003ccode\u003edet.js:182\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch3 id=\"globaldeterminatorandthedetonatorerrorhandlers\"\u003eGlobal  determinator \u003ccode\u003eđ\u003c/code\u003e and the detonator \u003ccode\u003eĐ\u003c/code\u003e error-handlers.\u003c/h3\u003e\n\u003cp\u003eShould the determinator function \u003ccode\u003eđ(err);\u003c/code\u003e recieve an error as argument, it will log the error, then execution will continiue.\u003cbr /\u003e\nOn the other hand the detonator \u003ccode\u003eĐ(err);\u003c/code\u003e will log the error and exit the current process.\u003cbr /\u003e\nBoth functions can be part of production-ready code, but encountering them indicates an error.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/det.js?line=201\"\u003e\u003ccode\u003edet.js:201\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eIn async functions we can \u003ccode\u003eawait\u003c/code\u003e for \u003ccode\u003eß\u003c/code\u003e variables to be defined.\u003cbr /\u003e\n   \u003ccode\u003eawait ß.isDefined('boilerplate_variable');\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/es2017.js?line=1\"\u003e\u003ccode\u003ees2017.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eß.spawn_command\u003c/code\u003e will execute a single bash command via \u003ccode\u003echild_process.spawn\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/exec.js?line=5\"\u003e\u003ccode\u003eexec.js:5\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"moduledirforking\"\u003eModule dir forking\u003c/h2\u003e\n\u003cp\u003eA js file can be executed, or better said forked:\u003cbr /\u003e\n\u003ccode\u003eß.fork_file(file, name, argv, option)\u003c/code\u003e this will call \u003ccode\u003echild_process.fork()\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/fork.js?line=5\"\u003e\u003ccode\u003efork.js:5\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe fork folder in a module is a folder containing js files to be forked at startup.\u003cbr /\u003e\nIt will fork all the files in this folder, first in all the custom modules, then in the '@-modules' while honoring custom modules with priority in case of name collision.\u003cbr /\u003e\nEach forked process will have it's PID, stderr and stdout in files at \u003ccode\u003eß.VAR /debug\u003c/code\u003e\u003cbr /\u003e\n\u003ccode\u003e\n/fork  \n\u003c/code\u003e\u003cbr /\u003e\nA module may define additional folders containing files to be forked.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/fork.js?line=104\"\u003e\u003ccode\u003efork.js:104\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eß.fs\u003c/code\u003e is reference to the \u003ca href=\"https://github.com/jprichardson/node-fs-extra\"\u003efs-extra\u003c/a\u003e package\u003cbr /\u003e\nInstead of \u003ccode\u003efs = require('fs');\u003c/code\u003e you can use \u003ccode\u003eß.fs\u003c/code\u003e directly, use \u003ccode\u003emkdirp\u003c/code\u003e, and \u003ccode\u003ereadJson\u003c/code\u003e and other handy functions.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/fs.js?line=1\"\u003e\u003ccode\u003efs.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eß.path\u003c/code\u003e is the native path\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/fs.js?line=5\"\u003e\u003ccode\u003efs.js:5\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003efs.isDirSync\u003c/code\u003e and \u003ccode\u003efs.isFileSync\u003c/code\u003e are some extra function to check if they exists for real. The only argument is the path. Works with symlinked paths.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/fs.js?line=12\"\u003e\u003ccode\u003efs.js:12\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003efs.inPathsSync\u003c/code\u003e will give all entries, \u003ccode\u003efs.inFilesSync\u003c/code\u003e all files and \u003ccode\u003efs.inDirsSync\u003c/code\u003e all folder.\u003cbr /\u003e\nFirst argument is the path, second is the function to be called on each result items. The processor function works with a single argument, the result itself.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/fs.js?line=29\"\u003e\u003ccode\u003efs.js:29\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eß.fs.traverse_path_process_files\u003c/code\u003e is a recursive sync function that will process all files starting with the given path.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/fs.js?line=82\"\u003e\u003ccode\u003efs.js:82\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"modulehooks\"\u003eModule hooks\u003c/h2\u003e\n\u003cp\u003eHooks are similar to lib-functions, however, multiple hooks from multiple modules are called when calling \u003ccode\u003eß.run_hook\u003c/code\u003e.\u003cbr /\u003e\nHooks are defined with \u003ccode\u003emodule.exports = function(arguments)\u003c/code\u003e within js files with the naming schema \u003ccode\u003emodule/hooks/hookname.function-name.js\u003c/code\u003e\u003cbr /\u003e\nThe hookname is the reference for the call, the function-name should be a descriptive custom name, programatically not used.\u003cbr /\u003e\nAs always, hooks definied within the project-modules take precedence over @boilerplate-modules. Hooks may have multiple arguments.\u003cbr /\u003e\nA development-debug log is generated in the \u003ccode\u003eß.VAR\u003c/code\u003e directory.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/hook.js?line=7\"\u003e\u003ccode\u003ehook.js:7\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"constants\"\u003eConstants\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eß.DEBUG\u003c/code\u003e is a boolean constant\u003cbr /\u003e\n\u003ccode\u003eß.HOSTNAME\u003c/code\u003e should be the FQDN hostname\u003cbr /\u003e\n\u003ccode\u003eß.MRD\u003c/code\u003e is the module root directory\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/init.js?line=1\"\u003e\u003ccode\u003einit.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eß.CWD\u003c/code\u003e stands for the Current Work Directory and refers to the project root.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/init.js?line=20\"\u003e\u003ccode\u003einit.js:20\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eß.NAME\u003c/code\u003e is a project name, by default the parent folder name of \u003ccode\u003eCWD\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/init.js?line=23\"\u003e\u003ccode\u003einit.js:23\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eß.BPD\u003c/code\u003e is the Boilerplate Directory\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/init.js?line=33\"\u003e\u003ccode\u003einit.js:33\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eCWD\u003c/code\u003e should contain a \u003ccode\u003e/version\u003c/code\u003e file containing the build number as string. This should be incremented in every build.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/init.js?line=36\"\u003e\u003ccode\u003einit.js:36\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"lablibbuiltinlogging\"\u003eLablib - builtin logging\u003c/h2\u003e\n\u003cp\u003eThere are six builtin logging functions in the ß namespace, that have ansi colors when colorised-logging is enabled in development.\u003cbr /\u003e\nThese logs are written to the console, and a file.   \u003c/p\u003e\n\u003cp\u003eApplication-logic logs that may be used by admins.  \u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eß.log()\u003c/code\u003e a gray logmessage\u003cbr /\u003e\n\u003ccode\u003eß.msg()\u003c/code\u003e logs a green message\u003cbr /\u003e\n\u003ccode\u003eß.ntc()\u003c/code\u003e a yellow notice\u003cbr /\u003e\n\u003ccode\u003eß.err()\u003c/code\u003e red error message    \u003c/p\u003e\n\u003cp\u003eDevelopment-logic logs, to be used in programming.  \u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eß.error()\u003c/code\u003e red error that does not appear in application logs\u003cbr /\u003e\n\u003ccode\u003eß.debug()\u003c/code\u003e only if debug mode is enabled, logs with a blue line\u003cbr /\u003e\n\u003ccode\u003eß.logfs()\u003c/code\u003e logs to the filesystem only, to the var/debug folder  \u003c/p\u003e\n\u003cp\u003eThe variable \u003ccode\u003eß.LOGPATH\u003c/code\u003e can be set to any folder accessible by the application. Each of the ß logging functions will append an enty here.\u003cbr /\u003e\nColoring is disabled in production, so that syslog and other logging tools can process logs without noise.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/lablib.js?line=14\"\u003e\u003ccode\u003elablib.js:14\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"modulelibs\"\u003eModule libs\u003c/h2\u003e\n\u003cp\u003eEach module may have a \u003ccode\u003e/lib\u003c/code\u003e folder with js files, each file containing a single function automatically exposed on the \u003ccode\u003eß.lib\u003c/code\u003e namespace.\u003cbr /\u003e\nSuch a function should be defined with \u003ccode\u003emodule.exports = function(arguments) {}\u003c/code\u003e\u003cbr /\u003e\nThese are then named by their filename and can be referred with \u003ccode\u003eß.lib.modulename.functionname\u003c/code\u003e (namespaced with module names) or \u003ccode\u003eß.lib.functionname\u003c/code\u003e (direct lib namespace)\u003cbr /\u003e\nlib-function files in \u003ccode\u003e@-modules\u003c/code\u003e have lower precedence over custom modules, thus if defined with priority, they will be overridden.\u003cbr /\u003e\nThe function-defining js files may contain private local variables and functions, and any number of arguments.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/lib.js?line=7\"\u003e\u003ccode\u003elib.js:7\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"moduledirloading\"\u003eModule dir loading\u003c/h2\u003e\n\u003cp\u003eThere is a command to \u003ccode\u003erequire()\u003c/code\u003e all files in a dir of all modules.\u003cbr /\u003e\nThis is done by passing a 'dir' name as an argument to \u003ccode\u003eß.load();\u003c/code\u003e.\u003cbr /\u003e\nIt will load all the files in this, first in all the custom modules, then in the '@-modules' while honoring custom modules with priority.\u003cbr /\u003e\nSome folders that are loaded by the framework:\u003cbr /\u003e\n\u003ccode\u003e\n/init  \n/server  \n/routes (via server/server.js)  \n/start  \n/debug (only if debug mode is on)  \n\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/load.js?line=5\"\u003e\u003ccode\u003eload.js:5\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eby default the logger object is the console, but we can use other loggers too, eg files.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/logger.js?line=2\"\u003e\u003ccode\u003elogger.js:2\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"oilerplateglobalmodulesjs\"\u003eßoilerplate/global/modules.js\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eß.modules\u003c/code\u003e contains all the modules that we use\u003cbr /\u003e\nVia \u003ccode\u003eUSE_MODULENAME = false\u003c/code\u003e, we can de-activate modules, and/or query if the module is used.\u003cbr /\u003e\n   However, it is rather recommended to create module sets, that means folders containing modules (or symlinks to modules).\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/modules.js?line=4\"\u003e\u003ccode\u003emodules.js:4\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eCWD\u003c/code\u003e itself is a primary module with priority.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/modules.js?line=14\"\u003e\u003ccode\u003emodules.js:14\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eß.load_modules(modules_root)\u003c/code\u003e will load all modules located in that directory. loaded modules will be added to 'ß.modules' and processed at all further steps of the boilerplate-loader\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/modules.js?line=64\"\u003e\u003ccode\u003emodules.js:64\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eModule folders either have priority or not. If there is no @ character prefixing the directory, it has priority, therefore 'factory' libs should be prefixed with @ and can be symlinks.\u003cbr /\u003e\n           Module folders are are \u003ccode\u003emodules\u003c/code\u003e or folders that end with \u003ccode\u003e*-modules\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/modules.js?line=73\"\u003e\u003ccode\u003emodules.js:73\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003ethe \u003ccode\u003eß.debug_modules()\u003c/code\u003e function will write two files, so that the loaded modules can be debugged.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/modules.js?line=101\"\u003e\u003ccode\u003emodules.js:101\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eresolve the path for a npm node_module with \u003ccode\u003eß.resolve_node_module_path(node_module [,paths])\u003c/code\u003e\u003cbr /\u003e\nWhile processing all arguments will be joined together and appended to the \u003ccode\u003enode_module\u003c/code\u003e we are looking for.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/modules.js?line=178\"\u003e\u003ccode\u003emodules.js:178\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eyou may specify your superglobal node modules, like underscore, or async.js in the \u003ccode\u003enode_modules.js\u003c/code\u003e file in your project-root (\u003ccode\u003eCWD\u003c/code\u003e).\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/node_modules.js?line=6\"\u003e\u003ccode\u003enode_modules.js:6\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"oilerplatetimestampfunctions\"\u003eßoilerplate timestamp functions\u003c/h2\u003e\n\u003cp\u003eSimple date functions\u003cbr /\u003e\n\u003ccode\u003eß.now()\u003c/code\u003e returns yyyy-mm-dd hh:mm:ss format\u003cbr /\u003e\n\u003ccode\u003eß.date()\u003c/code\u003e returns yyyy-mm-dd format\u003cbr /\u003e\n\u003ccode\u003eß.time()\u003c/code\u003e returns dd hh:mm:ss format\u003cbr /\u003e\n\u003ccode\u003eß.DATE\u003c/code\u003e and \u003ccode\u003eß.TIME\u003c/code\u003e are constant stamps created at bootup\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/now.js?line=3\"\u003e\u003ccode\u003enow.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eas an application we write our pid to a file\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/pid.js?line=11\"\u003e\u003ccode\u003epid.js:11\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe signal \u003ccode\u003eSIGUSR1\u003c/code\u003e will restart the server process.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/process.js?line=15\"\u003e\u003ccode\u003eprocess.js:15\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"moduledirloading-1\"\u003eModule dir loading\u003c/h2\u003e\n\u003cp\u003eThe framework has internal methods for sh, js file and command execution.  \u003c/p\u003e\n\u003cp\u003eTo execute bash files in modules pass a 'filename' as an argument to \u003ccode\u003eß.exec();\u003c/code\u003e.\u003cbr /\u003e\nIt will run files matching this filename, first in all the custom modules, then in the '@-modules' while honoring custom modules with priority.\u003cbr /\u003e\nNote that the implementation contains both sync and async elements, and does not return any values, but logs into the \u003ccode\u003evar\u003c/code\u003e folder.\u003cbr /\u003e\nThese methods are used in the installation process for example. The following files get executed in each of the modules, if they exists:  \u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003einstall.sh  \ndnf.sh  \nnpm.sh  \n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/spawn.js?line=3\"\u003e\u003ccode\u003espawn.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eß.spawn_command\u003c/code\u003e will execute a single bash command via \u003ccode\u003echild_process.spawn\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/spawn.js?line=23\"\u003e\u003ccode\u003espawn.js:23\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eß.bash_file\u003c/code\u003e will execute a single bash file via \u003ccode\u003echild_process.spawn\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/spawn.js?line=59\"\u003e\u003ccode\u003espawn.js:59\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"symlinks\"\u003esymlinks\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eß.link\u003c/code\u003e is a function to symlink a source path to a destination path. it will check if this is a legal command, and return if not.\u003cbr /\u003e\nUnderlying directories will be created.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/symlink.js?line=5\"\u003e\u003ccode\u003esymlink.js:5\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003eß.uplink\u003c/code\u003e function will symlink everything that a folder has to a new real folder\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/boilerplate/loader/symlink.js?line=25\"\u003e\u003ccode\u003esymlink.js:25\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch1 id=\"modulesdocumentation\"\u003eModule's Documentation\u003c/h1\u003e\n\u003ch2 id=\"thecodepadprojectmodule\"\u003eThe codepad-project module\u003c/h2\u003e\n\u003ch4 id=\"\"\u003e \u003c/h4\u003e\n\u003cp\u003eEntry point of the admin area\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/var/vue/en/src/admin.js?line=2\"\u003e\u003ccode\u003eadmin.js:2\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eSocketio will only connect if a passport user is logged in. Override possible.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/var/vue/en/src/admin.js?line=16\"\u003e\u003ccode\u003eadmin.js:16\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eUPDATE this.\u003cem\u003evm.$socket.emit has to be replaced with this.\u003c/em\u003evm.$socket.client.emit\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/var/vue/en/src/disabled_store.js?line=10\"\u003e\u003ccode\u003edisabled_store.js:10\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eEntry point of the frontend is main.js\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/var/vue/en/src/main.js?line=2\"\u003e\u003ccode\u003emain.js:2\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eSocketio will only connect if a passport user is logged in. Override possible.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/var/vue/en/src/main.js?line=15\"\u003e\u003ccode\u003emain.js:15\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eUse a /static file in a template\u003cbr /\u003e\n\u003cimg :src=\"$app.uri('/some.svg')\" height=\"200px\"\u003e  \u003c/p\u003e\n\u003cp\u003eUse an asset file in a template\u003cbr /\u003e\n\u003cimg :src=\"require('@/assets/some.svg')\" height=\"200px\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/var/vue/en/src/main.js?line=59\"\u003e\u003ccode\u003emain.js:59\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eEntry point of the admin area\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/var/vue/hu/src/admin.js?line=2\"\u003e\u003ccode\u003eadmin.js:2\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eSocketio will only connect if a passport user is logged in. Override possible.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/var/vue/hu/src/admin.js?line=16\"\u003e\u003ccode\u003eadmin.js:16\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eUPDATE this.\u003cem\u003evm.$socket.emit has to be replaced with this.\u003c/em\u003evm.$socket.client.emit\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/var/vue/hu/src/disabled_store.js?line=10\"\u003e\u003ccode\u003edisabled_store.js:10\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eEntry point of the frontend is main.js\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/var/vue/hu/src/main.js?line=2\"\u003e\u003ccode\u003emain.js:2\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eSocketio will only connect if a passport user is logged in. Override possible.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/var/vue/hu/src/main.js?line=15\"\u003e\u003ccode\u003emain.js:15\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eUse a /static file in a template\u003cbr /\u003e\n\u003cimg :src=\"$app.uri('/some.svg')\" height=\"200px\"\u003e  \u003c/p\u003e\n\u003cp\u003eUse an asset file in a template\u003cbr /\u003e\n\u003cimg :src=\"require('@/assets/some.svg')\" height=\"200px\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/var/vue/hu/src/main.js?line=59\"\u003e\u003ccode\u003emain.js:59\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eEntry point of the admin area\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/var/vue/src/admin.js?line=2\"\u003e\u003ccode\u003eadmin.js:2\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eSocketio will only connect if a passport user is logged in. Override possible.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/var/vue/src/admin.js?line=16\"\u003e\u003ccode\u003eadmin.js:16\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eUPDATE this.\u003cem\u003evm.$socket.emit has to be replaced with this.\u003c/em\u003evm.$socket.client.emit\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/var/vue/src/disabled_store.js?line=10\"\u003e\u003ccode\u003edisabled_store.js:10\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eEntry point of the frontend is main.js\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/var/vue/src/main.js?line=2\"\u003e\u003ccode\u003emain.js:2\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eSocketio will only connect if a passport user is logged in. Override possible.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/var/vue/src/main.js?line=15\"\u003e\u003ccode\u003emain.js:15\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eUse a /static file in a template\u003cbr /\u003e\n\u003cimg :src=\"$app.uri('/some.svg')\" height=\"200px\"\u003e  \u003c/p\u003e\n\u003cp\u003eUse an asset file in a template\u003cbr /\u003e\n\u003cimg :src=\"require('@/assets/some.svg')\" height=\"200px\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/var/vue/src/main.js?line=59\"\u003e\u003ccode\u003emain.js:59\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\n@admin-modules\n - admin\n - ansi\n - logs\n@javascript-modules\n - async\n - clouddata\n - clouddir\n - csvloader\n - devel_iframe\n - googleapis\n - jest\n - mikrotik\n - mime\n - moment\n - ping\n - rclone\n@server-modules\n - admin\n - api\n - cors\n - favicon\n - logging\n - mongodb\n - mongoose\n - multilanguage\n - nodemailer\n - passport\n - passport_admin\n - passport_facebook\n - passport_google\n - passport_hash\n - readme\n - server\n - session\n - socketio\n - user_profile\n - verify\n@vue-modules\n - app\n - bootstrap-vue\n - fontawesome5\n - jsoneditor\n - login\n - multilanguage\n - socketio\n - vue\n - vueinclude\n - vuetify\n - vuex\nanima-modules\n - app\nanswers\n - 2020-04-05\nboilerplate\n - .gitignore\n - LICENSE.md\n - NOTES.md\n - README.EN.md\n - README.HU.md\n - cli.js\n - cli.sh\n - index.js\n - install\n - install-defaults.sh\n - install.sh\n - loader\n - publishlib.sh\n - pushlib.sh\n - start.sh\nconfig\n - admin-passports.json\n - admin-passwords.json\n - connect-mongodb-session.json\n - mongodb.json\n - passport_facebook.json\n - passport_google.json\nvar\n - app\n - await\n - boilerplate.es5.js\n - boilerplate.es6.js\n - boilerplate.sh\n - codepad-project.modules.json\n - debug\n - debuglog.js\n - https-server.port\n - leadnull.js\n - leadtoval.js\n - log\n - project.log\n - project.pid\n - push.log\n - vue\n\u003c/pre\u003e\n\u003ch2 id=\"theappmodule\"\u003eThe app module\u003c/h2\u003e\n\u003ch4 id=\"animamodulesapp\"\u003e/anima-modules/app\u003c/h4\u003e\n\u003cpre\u003e\nhooks\n - post_session_data.update.js\ninit\n - load_questions.js\nlib\n - update_data.js\nvue\n - about.vue\n - assets\n - form.vue\n - main.vue\n - navigation.vue\n\u003c/pre\u003e\n\u003ch2 id=\"theappmodule-1\"\u003eThe @app module\u003c/h2\u003e\n\u003ch4 id=\"vuemodulesapp\"\u003e/@vue-modules/app\u003c/h4\u003e\n\u003cp\u003eEntry point of the frontend is main.js\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/app/vue/main.js?line=2\"\u003e\u003ccode\u003emain.js:2\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eSocketio will only connect if a passport user is logged in. Override possible.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/app/vue/main.js?line=15\"\u003e\u003ccode\u003emain.js:15\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eUse a /static file in a template\u003cbr /\u003e\n\u003cimg :src=\"$app.uri('/some.svg')\" height=\"200px\"\u003e  \u003c/p\u003e\n\u003cp\u003eUse an asset file in a template\u003cbr /\u003e\n\u003cimg :src=\"require('@/assets/some.svg')\" height=\"200px\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/app/vue/main.js?line=59\"\u003e\u003ccode\u003emain.js:59\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\nglobal\n - languages.js\n - main.js\n - pages.js\nvue\n - App.vue\n - app-functions.js\n - en.html\n - hu.html\n - index.html\n - main.js\n - main.vue\n - navigation.vue\n\u003c/pre\u003e\n\u003ch2 id=\"theadminmodule\"\u003eThe @admin module\u003c/h2\u003e\n\u003ch4 id=\"adminmodulesadmin\"\u003e/@admin-modules/admin\u003c/h4\u003e\n\u003cp\u003eThe admin page will be available on the \u003ccode\u003e/admin\u003c/code\u003e uri.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@admin-modules/admin/global/pages.js?line=1\"\u003e\u003ccode\u003epages.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eEntry point of the admin area\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@admin-modules/admin/vue/admin.js?line=2\"\u003e\u003ccode\u003eadmin.js:2\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eSocketio will only connect if a passport user is logged in. Override possible.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@admin-modules/admin/vue/admin.js?line=16\"\u003e\u003ccode\u003eadmin.js:16\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\nglobal\n - pages.js\nhooks\n - adminsocket.messages.js\nvue\n - Admin.vue\n - admin.html\n - admin.js\n - components\n\u003c/pre\u003e\n\u003ch2 id=\"theadminmodule-1\"\u003eThe @admin module\u003c/h2\u003e\n\u003ch4 id=\"servermodulesadmin\"\u003e/@server-modules/admin\u003c/h4\u003e\n\u003cpre\u003e\nexpress\n - admin.js\nglobal\n - rewrites.js\nindex\n - admin-index.js\npost-routes\n - admin.js\n\u003c/pre\u003e\n\u003ch2 id=\"theansimodule\"\u003eThe @ansi module\u003c/h2\u003e\n\u003ch4 id=\"adminmodulesansi\"\u003e/@admin-modules/ansi\u003c/h4\u003e\n\u003cpre\u003e\nlib\n - html.js\n\u003c/pre\u003e\n\u003ch2 id=\"thelogsmodule\"\u003eThe @logs module\u003c/h2\u003e\n\u003ch4 id=\"adminmoduleslogs\"\u003e/@admin-modules/logs\u003c/h4\u003e\n\u003cpre\u003e\nglobal\n - logfile.js\nhooks\n - socket.sendlog.js\nlib\n - get_log_page.js\n - send_log.js\n - send_logline.js\n - send_logs.js\npublic\n - app.logsController.js\n - logs.ejs\nroutes\n - logs.js\nstart\n - logwatch.js\n\u003c/pre\u003e\n\u003ch2 id=\"theasyncmodule\"\u003eThe @async module\u003c/h2\u003e\n\u003ch4 id=\"javascriptmodulesasync\"\u003e/@javascript-modules/async\u003c/h4\u003e\n\u003cp\u003echeck https://caolan.github.io/async/v3/\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@javascript-modules/async/global/async.js?line=1\"\u003e\u003ccode\u003easync.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\nglobal\n - async.js\n\u003c/pre\u003e\n\u003ch2 id=\"theclouddatamodule\"\u003eThe @clouddata module\u003c/h2\u003e\n\u003ch4 id=\"javascriptmodulesclouddata\"\u003e/@javascript-modules/clouddata\u003c/h4\u003e\n\u003cp\u003eß.CLOUDDIR is a an external source that can be used in the project, eg google drive or anything rclone can import. The clouddata module imports json files.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@javascript-modules/clouddata/init/clouddata.js?line=1\"\u003e\u003ccode\u003eclouddata.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe clouddir is scanned and files attached to ß.CLOUDDIR in objects based on their path\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@javascript-modules/clouddata/lib/build.js?line=1\"\u003e\u003ccode\u003ebuild.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\ninit\n - clouddata.js\nlib\n - build.js\n\u003c/pre\u003e\n\u003ch2 id=\"theclouddirmodule\"\u003eThe @clouddir module\u003c/h2\u003e\n\u003ch4 id=\"javascriptmodulesclouddir\"\u003e/@javascript-modules/clouddir\u003c/h4\u003e\n\u003cp\u003eß.CLOUDDIR is a an external source that can be used in the project, eg google drive or anything rclone can import. Clouddir lists and serves files.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@javascript-modules/clouddir/init/clouddir.js?line=1\"\u003e\u003ccode\u003eclouddir.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe clouddir is scanned and files attached to ß.CLOUDDIR in objects based on their path\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@javascript-modules/clouddir/lib/build.js?line=1\"\u003e\u003ccode\u003ebuild.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\nexpress\n - serve-clouddir.js\ninit\n - clouddir.js\nlib\n - build.js\nroutes\n - clouddir.js\n\u003c/pre\u003e\n\u003ch2 id=\"thecsvloadermodule\"\u003eThe @csvloader module\u003c/h2\u003e\n\u003ch4 id=\"javascriptmodulescsvloader\"\u003e/@javascript-modules/csvloader\u003c/h4\u003e\n\u003cpre\u003e\ninit\n - csvtojson.js\nlib\n - csvtojson.js\n - csvtostring.js\n - csvtostringSync.js\n\u003c/pre\u003e\n\u003ch2 id=\"thedevel_iframemodule\"\u003eThe @devel_iframe module\u003c/h2\u003e\n\u003ch4 id=\"javascriptmodulesdevel_iframe\"\u003e/@javascript-modules/devel_iframe\u003c/h4\u003e\n\u003cpre\u003e\nroutes\n - devel.js\nstart\n - devel.js\n\u003c/pre\u003e\n\u003ch2 id=\"thejestmodule\"\u003eThe @jest module\u003c/h2\u003e\n\u003ch4 id=\"javascriptmodulesjest\"\u003e/@javascript-modules/jest\u003c/h4\u003e\n\u003cpre\u003e\n\u003c/pre\u003e\n\u003ch2 id=\"themikrotikmodule\"\u003eThe @mikrotik module\u003c/h2\u003e\n\u003ch4 id=\"javascriptmodulesmikrotik\"\u003e/@javascript-modules/mikrotik\u003c/h4\u003e\n\u003cpre\u003e\nrouteros_scripts\n - enable-https.ros.sh\n\u003c/pre\u003e\n\u003ch2 id=\"themimemodule\"\u003eThe @mime module\u003c/h2\u003e\n\u003ch4 id=\"javascriptmodulesmime\"\u003e/@javascript-modules/mime\u003c/h4\u003e\n\u003cpre\u003e\nlib\n - detect.js\n\u003c/pre\u003e\n\u003ch2 id=\"themomentmodule\"\u003eThe @moment module\u003c/h2\u003e\n\u003ch4 id=\"javascriptmodulesmoment\"\u003e/@javascript-modules/moment\u003c/h4\u003e\n\u003cpre\u003e\nglobal\n - moment.js\n\u003c/pre\u003e\n\u003ch2 id=\"thepingmodule\"\u003eThe @ping module\u003c/h2\u003e\n\u003ch4 id=\"javascriptmodulesping\"\u003e/@javascript-modules/ping\u003c/h4\u003e\n\u003cpre\u003e\ninit\n - ping.js\nstart\n - ping.js\n\u003c/pre\u003e\n\u003ch2 id=\"therclonemodule\"\u003eThe @rclone module\u003c/h2\u003e\n\u003ch4 id=\"javascriptmodulesrclone\"\u003e/@javascript-modules/rclone\u003c/h4\u003e\n\u003cpre\u003e\n\u003c/pre\u003e\n\u003ch2 id=\"theapimodule\"\u003eThe @api module\u003c/h2\u003e\n\u003ch4 id=\"servermodulesapi\"\u003e/@server-modules/api\u003c/h4\u003e\n\u003cpre\u003e\nexpress\n - api.js\nglobal\n - rewrites.js\npost-routes\n - api.js\n\u003c/pre\u003e\n\u003ch2 id=\"thecorsmodule\"\u003eThe @cors module\u003c/h2\u003e\n\u003ch4 id=\"servermodulescors\"\u003e/@server-modules/cors\u003c/h4\u003e\n\u003cp\u003eThe cors module will allow express to use our API endpoints from several origings, eg. build and development.\u003cbr /\u003e\nThe default configs use https and the development webpack hot module replacement uses our default port 9000.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/cors/express/cors.js?line=1\"\u003e\u003ccode\u003ecors.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\nexpress\n - cors.js\n\u003c/pre\u003e\n\u003ch2 id=\"thefaviconmodule\"\u003eThe @favicon module\u003c/h2\u003e\n\u003ch4 id=\"servermodulesfavicon\"\u003e/@server-modules/favicon\u003c/h4\u003e\n\u003cp\u003eIf the project CWD contains a favicon.ico, it will be served as favicon, otherwise a default icon from the module is used.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/favicon/start/favicon.js?line=3\"\u003e\u003ccode\u003efavicon.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\nstart\n - favicon.js\nstatic\n - favicon.ico\n\u003c/pre\u003e\n\u003ch2 id=\"theloggingmodule\"\u003eThe @logging module\u003c/h2\u003e\n\u003ch4 id=\"servermoduleslogging\"\u003e/@server-modules/logging\u003c/h4\u003e\n\u003cp\u003eLogging via morgan logger. By default we trust the proxy, and log to \u003ccode\u003eVAR\u003c/code\u003e log folder to a file marked with the startup date and time.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/logging/express/morgan.js?line=3\"\u003e\u003ccode\u003emorgan.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\nexpress\n - morgan.js\n\u003c/pre\u003e\n\u003ch2 id=\"themongodbmodule\"\u003eThe @mongodb module\u003c/h2\u003e\n\u003ch4 id=\"servermodulesmongodb\"\u003e/@server-modules/mongodb\u003c/h4\u003e\n\u003cpre\u003e\n\u003c/pre\u003e\n\u003ch2 id=\"themongoosemodule\"\u003eThe @mongoose module\u003c/h2\u003e\n\u003ch4 id=\"servermodulesmongoose\"\u003e/@server-modules/mongoose\u003c/h4\u003e\n\u003cp\u003eIf there is no config file for mongodb, the first startup will create one automatically.\u003cbr /\u003e\nSeperate debug config - if exists - will be used in debug mode.\u003cbr /\u003e\nThe default host is 127.0.0.1\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/mongoose/lib/config_mongodb.js?line=3\"\u003e\u003ccode\u003econfig_mongodb.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eMongodb is integrated with the mongoose module. In the init folder:\u003cbr /\u003e\n   \u003ccode\u003eß.lib.mongoose.define('name'); // name is a collection name we define\u003c/code\u003e\u003cbr /\u003e\n   To keep the conventions we use the default common naming casings.\u003cbr /\u003e\n   \u003ccode\u003eß[nameModel]\u003c/code\u003e The model\u003cbr /\u003e\n   \u003ccode\u003ename_model + '/keys'\u003c/code\u003e Scripts folder in modules to add keys to the model:\u003cbr /\u003e\n   \u003ccode\u003eß[nameSchema]\u003c/code\u003e The Schema\u003cbr /\u003e\n   \u003ccode\u003ename_model + '/methods'\u003c/code\u003e Scripts folder in modules to add methods the the model\u003cbr /\u003e\n   \u003ccode\u003eß[Name]\u003c/code\u003e The mongoose model using name and nameSchema.\u003cbr /\u003e\n   \u003ccode\u003eß.mongoose_collections\u003c/code\u003e The array of collections we use\u003cbr /\u003e\n   \u003ccode\u003eß.USE_DB_NAME\u003c/code\u003e Constant for reference of used databases.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/mongoose/lib/define.js?line=2\"\u003e\u003ccode\u003edefine.js:2\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eAt startup, a backup script is generated.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/mongoose/start/db.js?line=3\"\u003e\u003ccode\u003edb.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\nglobal\n - mongoose.js\ninit\n - mongoose.js\nlib\n - config_mongodb.js\n - define.js\nmongo-scripts\n - dropall.js\n - showall.js\nstart\n - db.js\n\u003c/pre\u003e\n\u003ch2 id=\"themultilanguagemodule\"\u003eThe @multilanguage module\u003c/h2\u003e\n\u003ch4 id=\"servermodulesmultilanguage\"\u003e/@server-modules/multilanguage\u003c/h4\u003e\n\u003cp\u003eThe language module can be used to create multilingual page versions, with inline translations.\u003cbr /\u003e\nThis has been implemented for simple bilingual apps, where english and other languages shall be supported.\u003cbr /\u003e\nThe locale specific versions are then rendered for each language in the build process.  \u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003eß.DEFAULT_LANG\u003c/code\u003e variable defines what language should be used, in a fallback to a default.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/multilanguage/global/default.js?line=1\"\u003e\u003ccode\u003edefault.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eWe guess the language the user prefers by the request accepted languages list.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/multilanguage/lib/lang.js?line=1\"\u003e\u003ccode\u003elang.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eA string or document might be processed by the language module.\u003cbr /\u003e\n   The process will then discard irrelevant language chunks, and select the selected ones for the specific language.    \u003c/p\u003e\n\u003cp\u003eThe following string will be rendered as 'Hello world' in english and hungarian languages.\u003cbr /\u003e\n   \u003ccode\u003e##\u0026amp;en Hello World! ##\u0026amp;hu Hello Világ! ##\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/multilanguage/lib/process.js?line=1\"\u003e\u003ccode\u003eprocess.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003euser.lang\u003c/code\u003e is stored in the user database.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/multilanguage/user_model/keys/language-keys.js?line=1\"\u003e\u003ccode\u003elanguage-keys.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\nglobal\n - default.js\nlib\n - lang.js\n - process.js\n - translate.js\npre-routes\n - sessionlang.js\nroutes\n - get-data-file.js\n - post-lang.js\nuser_model\n - keys\n\u003c/pre\u003e\n\u003ch2 id=\"themultilanguagemodule-1\"\u003eThe @multilanguage module\u003c/h2\u003e\n\u003ch4 id=\"vuemodulesmultilanguage\"\u003e/@vue-modules/multilanguage\u003c/h4\u003e\n\u003cp\u003eWe create seperate webpack packers so that we have all languages statically translated.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/multilanguage/fork/vue-build-languages.js?line=1\"\u003e\u003ccode\u003evue-build-languages.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eeach language will have it's own src folder for the vue build process\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/multilanguage/init/vue-init-languages.js?line=1\"\u003e\u003ccode\u003evue-init-languages.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eExpress middleware to make sure the right index page is served when requesting\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/multilanguage/pre-index/index-pages.js?line=1\"\u003e\u003ccode\u003eindex-pages.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eEach nlanguage needs a vue-cli webpack configuration as well.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/multilanguage/start/vue-config.js?line=1\"\u003e\u003ccode\u003evue-config.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\nfork\n - vue-build-languages.js\ninit\n - language-pages.js\n - vue-init-languages.js\npre-index\n - index-pages.js\nstart\n - vue-config.js\nvue\n - components\n\u003c/pre\u003e\n\u003ch2 id=\"thenodemailermodule\"\u003eThe @nodemailer module\u003c/h2\u003e\n\u003ch4 id=\"servermodulesnodemailer\"\u003e/@server-modules/nodemailer\u003c/h4\u003e\n\u003cp\u003eThe nodemailer module allows to send mail from the backend, via localhost port 25 by default.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/nodemailer/init/transporter.js?line=3\"\u003e\u003ccode\u003etransporter.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\ninit\n - transporter.js\n\u003c/pre\u003e\n\u003ch2 id=\"thepassportmodule\"\u003eThe @passport module\u003c/h2\u003e\n\u003ch4 id=\"servermodulespassport\"\u003e/@server-modules/passport\u003c/h4\u003e\n\u003cp\u003eWhen the user changes the languge, his preference is saved\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/passport/hooks/update_user_lang.set_session.js?line=1\"\u003e\u003ccode\u003eupdate_user_lang.set_session.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThis module defines the User mongo database;\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/passport/init/user.js?line=3\"\u003e\u003ccode\u003euser.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe lib-function \u003ccode\u003eß.lib.passport.isLoggedIn(req, res, next)\u003c/code\u003e checks if the user is authenticated or not.\u003cbr /\u003e\n   It can be used as express middleware.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/passport/lib/isLoggedIn.js?line=3\"\u003e\u003ccode\u003eisLoggedIn.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe local strategy is responsible for the email-password based login.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/passport/passport/local.js?line=3\"\u003e\u003ccode\u003elocal.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003epost-delete-account.json\u003c/code\u003e requests deletes the user completley from the User database.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/passport/routes/post-delete-account.js?line=3\"\u003e\u003ccode\u003epost-delete-account.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003epost-email.json\u003c/code\u003e request checks if the given email address is a valid SMTP reciever.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/passport/routes/post-email.js?line=3\"\u003e\u003ccode\u003epost-email.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003epost-login.json\u003c/code\u003e request is responsible to log users in via email, password, and rem payload.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/passport/routes/post-login.js?line=3\"\u003e\u003ccode\u003epost-login.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003epost-logout.json\u003c/code\u003e route destroys the user session.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/passport/routes/post-logout.js?line=3\"\u003e\u003ccode\u003epost-logout.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003epost-password-update.json\u003c/code\u003e request\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/passport/routes/post-password-update.js?line=3\"\u003e\u003ccode\u003epost-password-update.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\nexpress\n - passport.js\nglobal\n - passport.js\nhooks\n - update_user_lang.set_session.js\ninit\n - serialization.js\n - user.js\nlib\n - create_user.js\n - delete.js\n - ensure_user.js\n - get_password.js\n - isLoggedIn.js\n - login.js\n - login_delay.js\npassport\n - local.js\nroutes\n - logout.js\n - post-delete-account.js\n - post-email.js\n - post-login.js\n - post-logout.js\n - post-password-update.js\nstart\n - socketio_user.js\nuser_model\n - keys\n - methods\n\u003c/pre\u003e\n\u003ch2 id=\"thepassport_adminmodule\"\u003eThe @passport_admin module\u003c/h2\u003e\n\u003ch4 id=\"servermodulespassport_admin\"\u003e/@server-modules/passport_admin\u003c/h4\u003e\n\u003cp\u003eThe hook function for \u003ccode\u003esocket.emit('admin-delete-user', id)\u003c/code\u003e deletes the appropriate user by the given id.\u003cbr /\u003e\n   If the id belongs to an admin then it won't be removed, otherwise the user will be deleted.\u003cbr /\u003e\n   In the end updated users are emitted back via \u003ccode\u003esocket.emit('users', data)\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/passport_admin/hooks/adminsocket.delete-user.js?line=3\"\u003e\u003ccode\u003eadminsocket.delete-user.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe hook function for \u003ccode\u003esocket.emit('get-users', arg)\u003c/code\u003e finds the appropriate user/users by the given argument and emits these users back via \u003ccode\u003esocket.emit('users', data)\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/passport_admin/hooks/adminsocket.get-users.js?line=3\"\u003e\u003ccode\u003eadminsocket.get-users.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe hook function for \u003ccode\u003esocket.emit('admin-save-user-profile', data)\u003c/code\u003e updates the given user profile, billing and shipping informations on the profile page.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/passport_admin/hooks/adminsocket.save-user-profile.js?line=3\"\u003e\u003ccode\u003eadminsocket.save-user-profile.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe hook function for \u003ccode\u003esocket.emit('admin-save-user', data)\u003c/code\u003e saves and updates the given user datas.\u003cbr /\u003e\n   This searches for the user by \u003ccode\u003edata._id\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/passport_admin/hooks/adminsocket.save-user.js?line=3\"\u003e\u003ccode\u003eadminsocket.save-user.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe lib-function \u003ccode\u003eß.lib.passport_admin.check_if_admin(id)\u003c/code\u003e checks if the user with the given passport id has admin-level permissions on the website.\u003cbr /\u003e\nThose id's can be set in the \u003ccode\u003econfig/admin-passports.json\u003c/code\u003e file or, in debug mode if the file exists \u003ccode\u003econfig/admin-passports.debug.json\u003c/code\u003e is used.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/passport_admin/lib/check_if_admin.js?line=3\"\u003e\u003ccode\u003echeck_if_admin.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe lib-function \u003ccode\u003eß.lib.passport_admin.isLoggedInAdmin(req, res, next)\u003c/code\u003e checks whether the authenticated user is either admin or not.\u003cbr /\u003e\n   If the user is not authenticated as admin then redirect to the login page, or inform about the failure.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/passport_admin/lib/isLoggedInAdmin.js?line=3\"\u003e\u003ccode\u003eisLoggedInAdmin.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe lib-function \u003ccode\u003eß.lib.admin.is_master_password(password)\u003c/code\u003e checks whether the given password is listed in the passwords config file \u003ccode\u003econfig/admin-passwords.json\u003c/code\u003e.\u003cbr /\u003e\n   Note that there is no username associated with the password, the admin user has access right to every passport id account.\u003cbr /\u003e\n   The password listed here should be very hard to guess.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/passport_admin/lib/is_master_password.js?line=3\"\u003e\u003ccode\u003eis_master_password.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\nhooks\n - adminsocket.delete-user.js\n - adminsocket.get-users.js\n - adminsocket.save-user-profile.js\n - adminsocket.save-user.js\n - session.is_admin.js\nlib\n - check_if_admin.js\n - isLoggedInAdmin.js\n - is_master_password.js\n\u003c/pre\u003e\n\u003ch2 id=\"thepassport_facebookmodule\"\u003eThe @passport_facebook module\u003c/h2\u003e\n\u003ch4 id=\"servermodulespassport_facebook\"\u003e/@server-modules/passport_facebook\u003c/h4\u003e\n\u003cp\u003eThe lib function \u003ccode\u003eß.lib.passport_facebook.config_auth()\u003c/code\u003e loads or sets the appropriate facebook passport config file.\u003cbr /\u003e\n   The settings can be set in \u003ccode\u003econfig/passport_facebook.json\u003c/code\u003e or \u003ccode\u003econfig/passport_facebook.debug.json\u003c/code\u003e.\u003cbr /\u003e\n   To get passport-facebook to work, there needs to be a facebook app, and the config shall contains the secret-app-ID, the app-secret, and which data fields are required by the app.\u003cbr /\u003e\n   Under the hood, we use \u003ca href=\"https://github.com/jaredhanson/passport-facebook\"\u003epassport-facebook\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/passport_facebook/lib/config_auth.js?line=3\"\u003e\u003ccode\u003econfig_auth.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\nlib\n - config_auth.js\npassport\n - facebook.js\nroutes\n - auth-facebook-callback.js\n - auth-facebook.js\n - connect-facebook-callback.js\n - connect-facebook.js\n - unlink-facebook.js\nuser_model\n - keys\n\u003c/pre\u003e\n\u003ch2 id=\"thepassport_googlemodule\"\u003eThe @passport_google module\u003c/h2\u003e\n\u003ch4 id=\"servermodulespassport_google\"\u003e/@server-modules/passport_google\u003c/h4\u003e\n\u003cp\u003eThe lib function \u003ccode\u003eß.lib.passport_google.config_auth()\u003c/code\u003e loads or sets the appropriate google passport file.\u003cbr /\u003e\n   The settings can be set in \u003ccode\u003e/config/passport_google.json\u003c/code\u003e or in \u003ccode\u003e/config/passport_google.debug.json\u003c/code\u003e.\u003cbr /\u003e\n   To get passport-google to work, you should have a clientID, clientSecret and the callbackURL. These can be obtained from \u003ca href=\"https://console.developers.google.com/\"\u003eGoogle Developers Console\u003c/a\u003e.\u003cbr /\u003e\n   We use \u003ca href=\"https://github.com/jaredhanson/passport-google-oauth\"\u003epassport-google-oauth\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/passport_google/lib/config_auth.js?line=3\"\u003e\u003ccode\u003econfig_auth.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\nlib\n - config_auth.js\npassport\n - google.js\nroutes\n - auth-google-callback.js\n - auth-google.js\n - connect-google-callback.js\n - connect-google.js\n - unlink-google.js\nuser_model\n - keys\n\u003c/pre\u003e\n\u003ch2 id=\"thepassport_hashmodule\"\u003eThe @passport_hash module\u003c/h2\u003e\n\u003ch4 id=\"servermodulespassport_hash\"\u003e/@server-modules/passport_hash\u003c/h4\u003e\n\u003cp\u003eThe \u003ccode\u003epost-email-request.json\u003c/code\u003e request creates a new user if ncessery, and sends out an email.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/passport_hash/routes/post-email-request.js?line=3\"\u003e\u003ccode\u003epost-email-request.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\nhooks\n - user_registration.send_hash.js\nlib\n - hash.js\n - okey_today.js\n - send.js\n - verify.js\npassport\n - hash.js\nroutes\n - hash.js\n - post-email-request.js\n - post-email-update.js\n\u003c/pre\u003e\n\u003ch2 id=\"thereadmemodule\"\u003eThe @readme module\u003c/h2\u003e\n\u003ch4 id=\"servermodulesreadme\"\u003e/@server-modules/readme\u003c/h4\u003e\n\u003cp\u003eThe README for the project is served under the \u003ccode\u003e/README.html\u003c/code\u003e url.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/readme/routes/readme.js?line=7\"\u003e\u003ccode\u003ereadme.js:7\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThis module generates a readme automatically from comments that are marked with the \u003ccode\u003e@DOC\u003c/code\u003e tag at start.\u003cbr /\u003e\n   Both, single-line and multiline comments are supported. When the project is started source files are parsed and marked document comment blocks extracted.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/readme/start/autodoc.js?line=3\"\u003e\u003ccode\u003eautodoc.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\nroutes\n - readme.js\nstart\n - autodoc.js\nstatic\n - github-markdown.css\n\u003c/pre\u003e\n\u003ch2 id=\"theservermodule\"\u003eThe @server module\u003c/h2\u003e\n\u003ch4 id=\"servermodulesserver\"\u003e/@server-modules/server\u003c/h4\u003e\n\u003cp\u003eStatic assets like css files can be placed in any module or the project root, in a /static folder\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/server/express/serve_static.js?line=3\"\u003e\u003ccode\u003eserve_static.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eData representing assets like json files can be placed in any module or the project root, in a /data folder\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/server/express/serve_static.js?line=8\"\u003e\u003ccode\u003eserve_static.js:8\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"express\"\u003eExpress\u003c/h2\u003e\n\u003cp\u003eExpress is used by default in development mode, with the default Cache-Control max-age 0.\u003cbr /\u003e\nIf the \u003ccode\u003eß.STATIC_OPTIONS\u003c/code\u003e is \u003ccode\u003eundefined\u003c/code\u003e at inicialization, it will set max-age to 24h if production env. var is set.\u003cbr /\u003e\nTherefore, it is recommended to use \u003ccode\u003eß.STATIC_OPTIONS\u003c/code\u003e for express static server routes.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/server/global/app.js?line=6\"\u003e\u003ccode\u003eapp.js:6\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eWe set the number of spaces for indentation to two in nn-production mode for better readability\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/server/global/app.js?line=23\"\u003e\u003ccode\u003eapp.js:23\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003eserver\u003c/code\u003e module uses express as https server\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/server/server/https-server.js?line=35\"\u003e\u003ccode\u003ehttps-server.js:35\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\ncert\n - localhost-cert-config.txt\n - localhost.crt\n - localhost.csr\n - localhost.key\n - localhost.org.pem\n - make-cert.sh\nexpress\n - app-api.js\n - bodyparser.js\n - compression.js\n - ejs.js\n - serve_static.js\n - static.js\nglobal\n - app.js\ninit\n - await-https-server.js\nlib\n - load_credentials.js\n - requestRulesMatch.js\n - rewrites.js\n - serve_files.js\n - serve_static.js\npost-index\n - 404.js\n - 500.js\nroutes\n - restart_server_process.js\nserver\n - export-boilerplate-variables.js\n - https-server.js\n\u003c/pre\u003e\n\u003ch2 id=\"thesessionmodule\"\u003eThe @session module\u003c/h2\u003e\n\u003ch4 id=\"servermodulessession\"\u003e/@server-modules/session\u003c/h4\u003e\n\u003cp\u003eThe session data can be accessed by the frontend on the \u003ccode\u003esession.json\u003c/code\u003e uri.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/session/routes/session.js?line=3\"\u003e\u003ccode\u003esession.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\nglobal\n - sessionMiddleware.js\nhooks\n - load_app.session.js\n - load_socketio_complete.init_sessionMiddleware.js\n - socket.session-data.js\nlib\n - config_mongodb.js\n - update_user.js\nroutes\n - post-session-data.js\n - session.js\n\u003c/pre\u003e\n\u003ch2 id=\"thesocketiomodule\"\u003eThe @socketio module\u003c/h2\u003e\n\u003ch4 id=\"servermodulessocketio\"\u003e/@server-modules/socketio\u003c/h4\u003e\n\u003cpre\u003e\nhooks\n - load_server.socketio.js\n\u003c/pre\u003e\n\u003ch2 id=\"thesocketiomodule-1\"\u003eThe @socketio module\u003c/h2\u003e\n\u003ch4 id=\"vuemodulessocketio\"\u003e/@vue-modules/socketio\u003c/h4\u003e\n\u003cpre\u003e\nhooks\n - socket.hello_socket_io.js\nvue\n - assets\n - components\n\u003c/pre\u003e\n\u003ch2 id=\"theuser_profilemodule\"\u003eThe @user_profile module\u003c/h2\u003e\n\u003ch4 id=\"servermodulesuser_profile\"\u003e/@server-modules/user_profile\u003c/h4\u003e\n\u003cpre\u003e\nhooks\n - update_profile.with_object.js\nlib\n - update.js\nroutes\n - post_update_user_profile.js\nuser_model\n - keys\n - methods\n\u003c/pre\u003e\n\u003ch2 id=\"theverifymodule\"\u003eThe @verify module\u003c/h2\u003e\n\u003ch4 id=\"servermodulesverify\"\u003e/@server-modules/verify\u003c/h4\u003e\n\u003cp\u003eThe verify module's email-verify checks the validation of email addresses via SMTP connection.\u003cbr /\u003e\nIt fails if there is no domain, or no address that can recieve a message.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@server-modules/verify/lib/email.js?line=3\"\u003e\u003ccode\u003eemail.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\nlib\n - email.js\n\u003c/pre\u003e\n\u003ch2 id=\"thebootstrapvuemodule\"\u003eThe @bootstrap-vue module\u003c/h2\u003e\n\u003ch4 id=\"vuemodulesbootstrapvue\"\u003e/@vue-modules/bootstrap-vue\u003c/h4\u003e\n\u003cpre\u003e\nvue\n - components\n\u003c/pre\u003e\n\u003ch2 id=\"thefontawesome5module\"\u003eThe @fontawesome5 module\u003c/h2\u003e\n\u003ch4 id=\"vuemodulesfontawesome5\"\u003e/@vue-modules/fontawesome5\u003c/h4\u003e\n\u003cpre\u003e\ninit\n - vuetify-fa.js\n\u003c/pre\u003e\n\u003ch2 id=\"thejsoneditormodule\"\u003eThe @jsoneditor module\u003c/h2\u003e\n\u003ch4 id=\"vuemodulesjsoneditor\"\u003e/@vue-modules/jsoneditor\u003c/h4\u003e\n\u003cpre\u003e\n\u003c/pre\u003e\n\u003ch2 id=\"theloginmodule\"\u003eThe @login module\u003c/h2\u003e\n\u003ch4 id=\"vuemoduleslogin\"\u003e/@vue-modules/login\u003c/h4\u003e\n\u003cpre\u003e\nvue\n - assets\n - components\n\u003c/pre\u003e\n\u003ch2 id=\"thevuemodule\"\u003eThe @vue module\u003c/h2\u003e\n\u003ch4 id=\"vuemodulesvue\"\u003e/@vue-modules/vue\u003c/h4\u003e\n\u003cp\u003evue build runs as a forked process\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vue/fork/vue-build.js?line=1\"\u003e\u003ccode\u003evue-build.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003evue inspect is disabled by default, but can be enabled for analisation\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vue/fork/vue-inspect.js?line=17\"\u003e\u003ccode\u003evue-inspect.js:17\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003evue serve runs as a forked process\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vue/fork/vue-serve.js?line=1\"\u003e\u003ccode\u003evue-serve.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003ewe create a \u003ccode\u003eß.vue_modules\u003c/code\u003e object, which is a subset of \u003ccode\u003eß.modules\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vue/global/vue-modules.js?line=1\"\u003e\u003ccode\u003evue-modules.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe built files will reside in \u003ccode\u003eß.VAR/app\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vue/index/index.js?line=3\"\u003e\u003ccode\u003eindex.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe vue source tree is built up at the init stage\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vue/init/vue-init.js?line=1\"\u003e\u003ccode\u003evue-init.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eWe need our detagger, a fake module for webpack. It will expose our \u003ccode\u003eß.lib.multilanguage.process\u003c/code\u003e function.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vue/init/vue-init.js?line=4\"\u003e\u003ccode\u003evue-init.js:4\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe vue source tree contains symlinks to the real files of the project - based on the modules used.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vue/lib/uplink_source_tree.js?line=1\"\u003e\u003ccode\u003euplink_source_tree.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eBased on \u003ccode\u003eß.vue_modules\u003c/code\u003e we create a subset of node modules for vue\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vue/lib/uplink_source_tree.js?line=38\"\u003e\u003ccode\u003euplink_source_tree.js:38\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003esrc\u003c/code\u003e folder is actually a unified version of all vue folders\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vue/lib/uplink_source_tree.js?line=41\"\u003e\u003ccode\u003euplink_source_tree.js:41\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe default index build is a single-language, but has hot reload for development. It will work with symlinks to the original sourcefiles. Push needed if the file-structure changes.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vue/start/vue-config.js?line=1\"\u003e\u003ccode\u003evue-config.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003eŁ\u003c/code\u003e debug function has been implemented for the vue frontend!\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vue/start/vue-debuglog.js?line=1\"\u003e\u003ccode\u003evue-debuglog.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe most important variables are also exported vie the vue-cli env file\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vue/start/vue-env.js?line=3\"\u003e\u003ccode\u003evue-env.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eUPDATE this.\u003cem\u003evm.$socket.emit has to be replaced with this.\u003c/em\u003evm.$socket.client.emit\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vue/vue/disabled_store.js?line=10\"\u003e\u003ccode\u003edisabled_store.js:10\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\nfork\n - vue-build.js\n - vue-inspect.js\n - vue-serve.js\nglobal\n - var-vue.js\n - vue-modules.js\nindex\n - index.js\ninit\n - await-vue-build.js\n - vue-init.js\nlib\n - uplink_source_tree.js\nstart\n - vue-config.js\n - vue-debuglog.js\n - vue-env.js\n - vue-files.js\n - vue-leadtoval.js\nvue\n - assets\n - components\n - disabled_store.js\n - router.js\n\u003c/pre\u003e\n\u003ch2 id=\"thevueincludemodule\"\u003eThe @vueinclude module\u003c/h2\u003e\n\u003ch4 id=\"vuemodulesvueinclude\"\u003e/@vue-modules/vueinclude\u003c/h4\u003e\n\u003cp\u003eAt the project boot process the var/vue-include folder is processed, txt, html, csv files are pre-processed.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vueinclude/lib/build.js?line=3\"\u003e\u003ccode\u003ebuild.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eclouddir html files are prepared for vue, by parsing the html and by stripping tags and putting them into a preformatted-html template.  \u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eß.vueinclude_html_parser_options\u003c/code\u003e - use options from \u003ca href=\"https://www.npmjs.com/package/node-html-parser\"\u003enode-html-parser\u003c/a\u003e\u003cbr /\u003e\n\u003ccode\u003eß.vueinclude_striptags_allowed_tags\u003c/code\u003e and \u003ccode\u003eß.vueinclude_striptags_tag_replacement\u003c/code\u003e - use options from \u003ca href=\"https://www.npmjs.com/package/striptags\"\u003estriptags\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vueinclude/lib/html.js?line=10\"\u003e\u003ccode\u003ehtml.js:10\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eclouddir txt files are prepared for vue\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vueinclude/lib/txt.js?line=3\"\u003e\u003ccode\u003etxt.js:3\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\ninit\n - vueinclude.js\nlib\n - build.js\n - html.js\n - txt.js\n - vue.js\nroutes\n - build.js\nstart\n - vue-include.js\nvue\n - vue-include\n - vue-include.vue\n\u003c/pre\u003e\n\u003ch2 id=\"thevuetifymodule\"\u003eThe @vuetify module\u003c/h2\u003e\n\u003ch4 id=\"vuemodulesvuetify\"\u003e/@vue-modules/vuetify\u003c/h4\u003e\n\u003cp\u003eVuetify is a UI liberary.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vuetify/routes/vuetify.js?line=5\"\u003e\u003ccode\u003evuetify.js:5\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\nroutes\n - vuetify.js\nvue\n - assets\n - components\n - plugins\n\u003c/pre\u003e\n\u003ch2 id=\"thevuexmodule\"\u003eThe @vuex module\u003c/h2\u003e\n\u003ch4 id=\"vuemodulesvuex\"\u003e/@vue-modules/vuex\u003c/h4\u003e\n\u003cp\u003ewe create a \u003ccode\u003eß.vuex_modules\u003c/code\u003e object, which is a subset of \u003ccode\u003eß.modules\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vuex/global/vuex-modules.js?line=1\"\u003e\u003ccode\u003evuex-modules.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe vuex source tree is built up at the init stage\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vuex/init/vuex-init.js?line=1\"\u003e\u003ccode\u003evuex-init.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe vue source tree contains symlinks to the real files of the project - based on the modules used.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vuex/lib/uplink_source_tree.js?line=1\"\u003e\u003ccode\u003euplink_source_tree.js:1\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eBased on \u003ccode\u003eß.vuex_modules\u003c/code\u003e we create a subset of node modules for vue\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vuex/lib/uplink_source_tree.js?line=46\"\u003e\u003ccode\u003euplink_source_tree.js:46\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe \u003ccode\u003esrc\u003c/code\u003e folder is actually a unified version of all vue folders\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://anima.d250.hu:9001/p/@vue-modules/vuex/lib/uplink_source_tree.js?line=49\"\u003e\u003ccode\u003euplink_source_tree.js:49\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\nglobal\n - vuex-modules.js\ninit\n - vuex-init.js\nlib\n - create_store_file.js\n - uplink_source_tree.js\nvuex\n - server.js\n - socket.js\n\u003c/pre\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feapo%2Fanima","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feapo%2Fanima","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feapo%2Fanima/lists"}