diff --git a/README.md b/README.md index 81673110a7cae2b8924ff595449a87fbe1d5f5a2..d1d22e82b44d1b8076e7642b186f821d93c868bb 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,57 @@ <a name="logo"/> <div align="center"> -<a href="http://www.dynare.org/" target="_blank"> -<img src="https://git.dynare.org/uploads/-/system/group/avatar/46/dbkgd_ws.png?width=64" alt="Dynare Logo"></img> +<a href="https://git.dynare.org/Dynare/electronapp" target="_blank"> +<img src="https://git.dynare.org/uploads/-/system/project/avatar/126/dynareApp.jpg?width=64" width="64" height="64" alt="dynareApp Logo"></img> </a> </div> +# dynareApp -dynareApp is a standalone multiplatform GUI for Dynare using the electronjs platform. +dynareApp (formerly electronApp) is a standalone application providing a Graphical User Interface (GUI) for Dynare that embeds a Dynare code editor, an output console and graphical reporting of results. It offers a standalone unified Dynare user experience with graphically enhanced functionalities. dynareApp jointly uses several technologies. The interface is rendered using web technologies whereas the computations are performed using [Dynare](http://www.dynare.org/) and a numerical computing environment such as [MatLab](https://www.mathworks.com/products/matlab.html?s_tid=hp_products_matlab). In more details, it is written in [Node.js](https://nodejs.org/en/) using the [Electron](https://www.electronjs.org/) framework. + + +# License +Most of the source files are covered by the GNU General Public Licence version +3 or later. Please read the attached LICENSE file. + +# Installing dynareApp + +## Standard install process + +[Node.js](https://nodejs.org/en/) is required to run the dynareApp with [npm](https://www.npmjs.com/) as the default package manager for the project. The [Electron](https://www.electronjs.org/) software framework as well as the [Electron Forge](https://www.electronforge.io/) project manager are also required. A fresh install of [Dynare](https://www.dynare.org/) and a Dynare compatible version of [MATLAB](https://www.mathworks.com/products/matlab.html) are also required. + +Note that the provided `package.json` file will install all the necessary dependencies, including Electron and Electron Forge once NodeJS and npm are available in the system. The user will still need to install Dynare and Matlab separately. + +To run the development version of the dynareApp, follow these steps: +- Download and install NodeJS and npm, +- Download dynareApp source, +- cd to the dynareApp directory and run `npm install` to install required dependencies, +- From the Dynare directory, copy the preprocessor binary from `/matlab/preprocessor64` to the dynareApp `src/assets/preprocessor` directory +- Edit the `src/assets/dynareapp.JSON` file and enter the path to your Matlab binary path and the Dynare install directory path +- In dynareApp directory run `npm start` to run the app + +## Issue with sqlite3 + +During install there might be an issue with the sqlite3 binaries and the above standard install process might fail. In that case it might be useful to compile the sqlite3 binaries from source. The following procedure can be followed: + + +- cd to the dynareApp directory and `run npm install` to install required dependencies as usual, +- In the newly created `/node_module` directory, erase all electron related folders such as `electron`, `electron-debug`, `electron-installer-common`, etc. +- Build sqlite3 from source by typing `npm install sqlite3 --build-from-source` +- Reinstall electron by typing `npm install electron` +- From the Dynare directory, copy the preprocessor binary from `/matlab/preprocessor64` to the dynareApp `src/assets/preprocessor` directory +- Edit the `src/assets/dynareapp.JSON` file and enter the path to your Matlab binary path and the Dynare install directory path +- In dynareApp directory run `npm start` to run the app + +# Building a distributable + +dynareApp uses Electron Forge as a project manager. To build a distributable for the current system, simply `cd`to the main app directory and type `electron-forge make`. A new distributable will be available under `/out`. + +If the above way of making the build results in buiding errors, use the following command to build: +`npm run make -- --targets @electron-forge/maker-zip` +This will build the executable and also make a zip of it. A new distributable and its zip file will be available under `/out`. + + +# Documentation + +A small user guide (common with the Dynare webApp) for the perfect-foresight and stochastic simulation modules can be found under `/doc` or by following [webApp_doc_latest.pdf](https://git.dynare.org/Dynare/electronapp/-/blob/master/doc/webApp_doc_latest.pdf) \ No newline at end of file diff --git a/doc/webApp_doc_latest.pdf b/doc/webApp_doc_latest.pdf new file mode 100644 index 0000000000000000000000000000000000000000..66c1696cf326bfc1a6dbfb613f92d98d1c75c011 Binary files /dev/null and b/doc/webApp_doc_latest.pdf differ diff --git a/src/assets/doc/dynareApp.html b/src/assets/doc/dynareApp.html deleted file mode 100644 index 4b9fe92b0a26a9f6fa4fe003476309531900766f..0000000000000000000000000000000000000000 --- a/src/assets/doc/dynareApp.html +++ /dev/null @@ -1,1053 +0,0 @@ -<html> - <head> - <meta charset="UTF-8"> - <meta name = "viewport" content = "width = device-width, initial-scale = 1, maximum-scale = 1"> - <style id="style"> -@font-face { - font-family: 'Lato'; - src: url('file:///Applications/Boostnote.app/Contents/Resources/app/resources/fonts/Lato-Regular.woff2') format('woff2'), /* Modern Browsers */ - url('file:///Applications/Boostnote.app/Contents/Resources/app/resources/fonts/Lato-Regular.woff') format('woff'), /* Modern Browsers */ - url('file:///Applications/Boostnote.app/Contents/Resources/app/resources/fonts/Lato-Regular.ttf') format('truetype'); - font-style: normal; - font-weight: normal; - text-rendering: optimizeLegibility; -} -@font-face { - font-family: 'Lato'; - src: url('file:///Applications/Boostnote.app/Contents/Resources/app/resources/fonts/Lato-Black.woff2') format('woff2'), /* Modern Browsers */ - url('file:///Applications/Boostnote.app/Contents/Resources/app/resources/fonts/Lato-Black.woff') format('woff'), /* Modern Browsers */ - url('file:///Applications/Boostnote.app/Contents/Resources/app/resources/fonts/Lato-Black.ttf') format('truetype'); - font-style: normal; - font-weight: 700; - text-rendering: optimizeLegibility; -} -@font-face { - font-family: 'Material Icons'; - font-style: normal; - font-weight: 400; - src: local('Material Icons'), - local('MaterialIcons-Regular'), - url('file:///Applications/Boostnote.app/Contents/Resources/app/resources/fonts/MaterialIcons-Regular.woff2') format('woff2'), - url('file:///Applications/Boostnote.app/Contents/Resources/app/resources/fonts/MaterialIcons-Regular.woff') format('woff'), - url('file:///Applications/Boostnote.app/Contents/Resources/app/resources/fonts/MaterialIcons-Regular.ttf') format('truetype'); -} -html, -body, -div, -span, -applet, -object, -iframe, -h1, -h2, -h3, -h4, -h5, -h6, -p, -blockquote, -pre, -a, -abbr, -acronym, -address, -big, -cite, -code, -del, -dfn, -em, -img, -ins, -kbd, -q, -s, -samp, -small, -strike, -strong, -sub, -sup, -tt, -var, -dl, -dt, -dd, -ol, -ul, -li, -fieldset, -form, -label, -legend, -table, -caption, -tbody, -tfoot, -thead, -tr, -th, -td { - margin: 0; - padding: 0; - border: 0; - outline: 0; - font-weight: inherit; - font-style: inherit; - font-family: inherit; - font-size: 100%; - vertical-align: baseline; -} -body { - line-height: 1; - color: #000; - background: #fff; -} -ol, -ul { - list-style: none; -} -table { - border-collapse: separate; - border-spacing: 0; - vertical-align: middle; -} -caption, -th, -td { - text-align: left; - font-weight: normal; - vertical-align: middle; -} -a img { - border: none; -} -body { - font-size: 16px; - padding: 15px; - font-family: helvetica, arial, sans-serif; - line-height: 1.6; - overflow-x: hidden; - background-color: #fff; -} -body .katex-display > .katex { - white-space: nowrap; -} -body .katex { - white-space: initial; -} -body .katex .katex-html { - display: -webkit-inline-box; - display: -moz-inline-box; - display: -webkit-inline-flex; - display: -ms-inline-flexbox; - display: inline-box; - display: inline-flex; -} -body .katex .mfrac>.vlist>span:nth-child(2) { - top: 0 !important; -} -body .katex-error { - background-color: #f2dede; - color: #a64444; - padding: 5px; - margin: -5px; - border-radius: 5px; -} -body .flowchart-error, -body .sequence-error .chart-error { - background-color: #f2dede; - color: #a64444; - padding: 5px; - border-radius: 5px; - -webkit-box-pack: left; - -moz-box-pack: left; - -o-box-pack: left; - -ms-flex-pack: left; - -webkit-justify-content: left; - justify-content: left; -} -li label.taskListItem { - margin-left: -1.8em; -} -li label.taskListItem.checked { - text-decoration: line-through; - opacity: 0.5; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; - filter: alpha(opacity=50); -} -li.taskListItem.checked { - text-decoration: line-through; - opacity: 0.5; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; - filter: alpha(opacity=50); -} -div.math-rendered { - text-align: center; -} -.math-failed { - background-color: rgba(255,0,0,0.1); - color: #d90000; - padding: 5px; - margin: 5px 0; - border-radius: 5px; -} -sup { - position: relative; - top: -0.4em; - font-size: 0.8em; - vertical-align: top; -} -sub { - position: relative; - bottom: -0.4em; - font-size: 0.8em; - vertical-align: top; -} -a { - color: #2bac8f; - text-decoration: none; - padding: 5px; - border-radius: 5px; - margin: -5px; - -webkit-transition: 0.1s; - -moz-transition: 0.1s; - -o-transition: 0.1s; - -ms-transition: 0.1s; - transition: 0.1s; -} -a img { - vertical-align: sub; -} -a:hover { - color: #2eb899; - text-decoration: underline; - background-color: rgba(255,201,92,0.3); -} -a:visited { - color: #2bac8f; -} -hr { - border-top: none; - border-bottom: solid 1px #d0d0d0; - margin: 15px 0; -} -h1, -h2, -h3, -h4, -h5, -h6 { - font-weight: bold; - word-wrap: break-word; -} -h1 { - font-size: 2.55em; - padding-bottom: 0.3em; - line-height: 1.2em; - border-bottom: solid 1px #d0d0d0; - margin: 1em 0 0.44em; -} -h1:first-child { - margin-top: 0; -} -h2 { - font-size: 1.75em; - padding-bottom: 0.3em; - line-height: 1.225em; - border-bottom: solid 1px #d0d0d0; - margin: 1em 0 0.57em; -} -h2:first-child { - margin-top: 0; -} -h3 { - font-size: 1.5em; - line-height: 1.43em; - margin: 1em 0 0.66em; -} -h4 { - font-size: 1.25em; - line-height: 1.4em; - margin: 1em 0 0.8em; -} -h5 { - font-size: 1em; - line-height: 1.4em; - margin: 1em 0 1em; -} -h6 { - font-size: 1em; - line-height: 1.4em; - margin: 1em 0 1em; - color: #777; -} -p { - line-height: 1.6em; - margin: 0 0 1em; - white-space: pre-line; - word-wrap: break-word; -} -img { - max-width: 100%; -} -strong, -b { - font-weight: bold; -} -em, -i { - font-style: italic; -} -s, -del, -strike { - text-decoration: line-through; -} -u { - text-decoration: underline; -} -blockquote { - border-left: solid 4px #3fb399; - margin: 0 0 1em; - padding: 0 25px; -} -ul { - list-style-type: disc; - padding-left: 2em; - margin-bottom: 1em; -} -ul li { - display: list-item; -} -ul li.taskListItem { - list-style: none; -} -ul li.taskListItem>input { - margin-left: -1.6em; -} -ul li.taskListItem>p { - margin-left: -1.8em; -} -ul li p { - margin: 0; -} -ul>li>ul, -ul>li>ol { - margin: 0; -} -ul>li>ul { - list-style-type: circle; -} -ul>li>ul>li>ul { - list-style-type: square; -} -ol { - list-style-type: decimal; - padding-left: 2em; - margin-bottom: 1em; -} -ol li { - display: list-item; -} -ol li p { - margin: 0; -} -ol>li>ul, -ol>li>ol { - margin: 0; -} -code { - padding: 0.2em 0.4em; - background-color: #f7f7f7; - border-radius: 3px; - font-size: 1em; - text-decoration: none; - margin-right: 2px; -} -pre { - padding: 0.5rem !important; - border: solid 1px #d1d1d1; - border-radius: 5px; - overflow-x: auto; - margin: 0 0 1rem; - display: -webkit-box; - display: -moz-box; - display: -webkit-flex; - display: -ms-flexbox; - display: box; - display: flex; - line-height: 1.4em; -} -pre code { - background-color: inherit; - margin: 0; - padding: 0; - border: none; - border-radius: 0; -} -pre.CodeMirror { - height: initial; - -webkit-box-lines: multiple; - -moz-box-lines: multiple; - -o-box-lines: multiple; - -webkit-flex-wrap: wrap; - -ms-flex-wrap: wrap; - flex-wrap: wrap; -} -pre.CodeMirror>code { - -webkit-box-flex: 1; - -moz-box-flex: 1; - -o-box-flex: 1; - box-flex: 1; - -webkit-flex: 1; - -ms-flex: 1; - flex: 1; - overflow-x: auto; -} -pre.mermaid svg { - max-width: 100% !important; -} -pre>span.filename { - margin: -0.5rem 100% 0.5rem -0.5rem; - padding: 0.125rem 0.375rem; - background-color: #777; - color: #fff; -} -pre>span.filename:empty { - display: none; -} -pre>span.lineNumber { - display: none; - font-size: 1em; - padding: 0.5rem 0; - margin: -0.5rem 0.5rem -0.5rem -0.5rem; - border-right: 1px solid; - text-align: right; - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} -pre>span.lineNumber.CodeMirror-gutters { - position: initial; - top: initial; - left: initial; - min-height: 0 !important; -} -pre>span.lineNumber>span { - display: block; - padding: 0 0.5em 0; -} -table { - display: block; - width: 100%; - margin: 0 0 1em; - overflow-x: auto; -} -table thead tr { - background-color: #fff; -} -table thead th { - border-style: solid; - padding: 6px 13px; - line-height: 1.6; - border-width: 1px 0 2px 1px; - border-color: #d0d0d0; - font-weight: bold; -} -table thead th:last-child { - border-right: solid 1px #d0d0d0; -} -table tbody tr:nth-child(2n + 1) { - background-color: #f9f9f9; -} -table tbody tr:nth-child(2n) { - background-color: #fff; -} -table tbody td { - border-style: solid; - padding: 6px 13px; - line-height: 1.6; - border-width: 0 0 1px 1px; - border-color: #d0d0d0; -} -table tbody td:last-child { - border-right: solid 1px #d0d0d0; -} -kbd { - background-color: #fafbfc; - border: solid 1px #d0d0d0; - border-bottom-color: #888; - border-radius: 3px; - -webkit-box-shadow: inset 0 -1px 0 #959da5; - box-shadow: inset 0 -1px 0 #959da5; - display: inline-block; - font-size: 0.8em; - line-height: 1; - padding: 3px 5px; -} -.admonition.note, -.admonition.hint, -.admonition.danger, -.admonition.caution, -.admonition.error, -.admonition.attention { - -webkit-box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 1px 5px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.2); - box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 1px 5px 0 rgba(0,0,0,0.12), 0 3px 1px -2px rgba(0,0,0,0.2); - position: relative; - margin: 1.5625em 0; - padding: 0 1.2rem; - border-left: 0.4rem solid #448aff; - border-radius: 0.2rem; - overflow: auto; -} -html .admonition>:last-child { - margin-bottom: 1.2rem; -} -.admonition .admonition { - margin: 1em 0; -} -.admonition p { - margin-top: 0.5em; -} -.admonition.note>.admonition-title:before, -.admonition.hint>.admonition-title:before, -.admonition.danger>.admonition-title:before, -.admonition.caution>.admonition-title:before, -.admonition.error>.admonition-title:before, -.admonition.attention>.admonition-title:before { - position: absolute; - left: 1.2rem; - font-family: "Material Icons"; - font-weight: normal; - font-style: normal; - font-size: 24px; - display: inline-block; - line-height: 1; - text-transform: none; - letter-spacing: normal; - word-wrap: normal; - white-space: nowrap; - direction: ltr; -/* Support for all WebKit browsers. */ - -webkit-font-smoothing: antialiased; -/* Support for Safari and Chrome. */ - text-rendering: optimizeLegibility; -/* Support for Firefox. */ - -moz-osx-font-smoothing: grayscale; -/* Support for IE. */ - font-feature-settings: 'liga'; -} -.admonition.note>.admonition-title, -.admonition.hint>.admonition-title, -.admonition.danger>.admonition-title, -.admonition.caution>.admonition-title, -.admonition.error>.admonition-title, -.admonition.attention>.admonition-title { - margin: 0 -1.2rem; - padding: 0.8rem 1.2rem 0.8rem 4rem; - border-bottom: 0.1rem solid rgba(68,138,255,0.1); - background-color: rgba(68,138,255,0.1); - font-weight: 700; -} -.admonition>.admonition-title:last-child { - margin-bottom: 0; -} -.admonition.note { - border-left-color: #0288d1; -} -.admonition.note>.admonition-title { - border-bottom-color: 0.1rem solid rgba(2,136,209,0.2); - background-color: rgba(2,136,209,0.2); -} -.admonition.note>.admonition-title:before { - color: #0288d1; - content: "note"; -} -.admonition.hint { - border-left-color: #009688; -} -.admonition.hint>.admonition-title { - border-bottom-color: 0.1rem solid rgba(0,150,136,0.2); - background-color: rgba(0,150,136,0.2); -} -.admonition.hint>.admonition-title:before { - color: #009688; - content: "info_outline"; -} -.admonition.danger { - border-left-color: #c2185b; -} -.admonition.danger>.admonition-title { - border-bottom-color: 0.1rem solid rgba(194,24,91,0.2); - background-color: rgba(194,24,91,0.2); -} -.admonition.danger>.admonition-title:before { - color: #c2185b; - content: "block"; -} -.admonition.caution { - border-left-color: #ffa726; -} -.admonition.caution>.admonition-title { - border-bottom-color: 0.1rem solid rgba(255,167,38,0.2); - background-color: rgba(255,167,38,0.2); -} -.admonition.caution>.admonition-title:before { - color: #ffa726; - content: "warning"; -} -.admonition.error { - border-left-color: #d32f2f; -} -.admonition.error>.admonition-title { - border-bottom-color: 0.1rem solid rgba(211,47,47,0.2); - background-color: rgba(211,47,47,0.2); -} -.admonition.error>.admonition-title:before { - color: #d32f2f; - content: "error_outline"; -} -.admonition.attention { - border-left-color: #455a64; -} -.admonition.attention>.admonition-title { - border-bottom-color: 0.1rem solid rgba(69,90,100,0.2); - background-color: rgba(69,90,100,0.2); -} -.admonition.attention>.admonition-title:before { - color: #455a64; - content: "priority_high"; -} -dl { - margin: 2rem 0; - padding: 0; - display: -webkit-box; - display: -moz-box; - display: -webkit-flex; - display: -ms-flexbox; - display: box; - display: flex; - width: 100%; - -webkit-box-lines: multiple; - -moz-box-lines: multiple; - -o-box-lines: multiple; - -webkit-flex-wrap: wrap; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -webkit-box-align: start; - -moz-box-align: start; - -o-box-align: start; - -ms-flex-align: start; - -webkit-align-items: flex-start; - align-items: flex-start; - border-bottom: 1px solid #d0d0d0; - background-color: #fff; -} -dt { - border-top: 1px solid #d0d0d0; - font-weight: bold; - text-align: right; - overflow: hidden; - -webkit-flex-basis: 20%; - flex-basis: 20%; - padding: 0.4rem 0.9rem; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -dd { - border-top: 1px solid #d0d0d0; - -webkit-flex-basis: 80%; - flex-basis: 80%; - padding: 0.4rem 0.9rem; - min-height: 2.5rem; - background-color: #fff; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -dd + dd { - margin-left: 20%; -} -pre.fence { - -webkit-box-lines: multiple; - -moz-box-lines: multiple; - -o-box-lines: multiple; - -webkit-flex-wrap: wrap; - -ms-flex-wrap: wrap; - flex-wrap: wrap; -} -pre.fence .chart, -pre.fence .flowchart, -pre.fence .mermaid, -pre.fence .sequence { - display: -webkit-box; - display: -moz-box; - display: -webkit-flex; - display: -ms-flexbox; - display: box; - display: flex; - -webkit-box-pack: center; - -moz-box-pack: center; - -o-box-pack: center; - -ms-flex-pack: center; - -webkit-justify-content: center; - justify-content: center; - background-color: #fff; - max-width: 100%; - -webkit-box-flex: 1; - -moz-box-flex: 1; - -o-box-flex: 1; - -ms-box-flex: 1; - box-flex: 1; - -webkit-flex-grow: 1; - flex-grow: 1; -} -pre.fence .chart canvas, -pre.fence .flowchart canvas, -pre.fence .mermaid canvas, -pre.fence .sequence canvas, -pre.fence .chart svg, -pre.fence .flowchart svg, -pre.fence .mermaid svg, -pre.fence .sequence svg { - max-width: 100% !important; -} -pre.fence .gallery { - width: 100%; - height: 50vh; -} -pre.fence .gallery .carousel .carousel-main img { - min-width: auto; - max-width: 100%; - min-height: auto; - max-height: 100%; -} -pre.fence .gallery .carousel .carousel-footer::-webkit-scrollbar-corner { - background-color: transparent; -} -pre.fence .gallery .carousel .carousel-main, -pre.fence .gallery .carousel .carousel-footer { - background-color: #fff; -} -pre.fence .gallery .carousel .prev, -pre.fence .gallery .carousel .next { - color: #333; - background-color: rgba(0,0,0,0.3); -} -body[data-theme="dark"] { - color: #f9f9f9; - border-color: #444b59; - background-color: #2c3033; -} -body[data-theme="dark"] a:hover { - background-color: rgba(90,214,186,0.2) !important; -} -body[data-theme="dark"] code { - color: #ea6730; - border-color: #3d4450; - background-color: #363a3e; -} -body[data-theme="dark"] pre { - border-color: #474f5c; -} -body[data-theme="dark"] pre code { - background-color: transparent; -} -body[data-theme="dark"] label.taskListItem { - background-color: #2c3033; -} -body[data-theme="dark"] table thead tr { - background-color: #282b2e; -} -body[data-theme="dark"] table thead th { - border-color: #444b59; -} -body[data-theme="dark"] table thead th:last-child { - border-right: solid 1px #444b59; -} -body[data-theme="dark"] table tbody tr:nth-child(2n + 1) { - background-color: #2c3033; -} -body[data-theme="dark"] table tbody tr:nth-child(2n) { - background-color: #282b2e; -} -body[data-theme="dark"] table tbody td { - border-color: #444b59; -} -body[data-theme="dark"] table tbody td:last-child { - border-right: solid 1px #444b59; -} -body[data-theme="dark"] kbd { - background-color: #444b59; - color: #f9f9f9; -} -body[data-theme="dark"] dl { - border-color: #444b59; - background-color: #282b2e; -} -body[data-theme="dark"] dt { - border-color: #444b59; -} -body[data-theme="dark"] dd { - border-color: #444b59; - background-color: #2c3033; -} -body[data-theme="dark"] pre.fence .gallery .carousel-main, -body[data-theme="dark"] pre.fence .gallery .carousel-footer { - background-color: #2c3033; -} -body[data-theme="dark"] pre.fence .gallery .prev, -body[data-theme="dark"] pre.fence .gallery .next { - color: #ddd; - background-color: #3a404c; -} -body[data-theme="solarized-dark"] { - color: #93a1a1; - border-color: #444b59; - background-color: #073642; -} -body[data-theme="solarized-dark"] table thead tr { - background-color: #06313b; -} -body[data-theme="solarized-dark"] table thead th { - border-color: #444b59; -} -body[data-theme="solarized-dark"] table thead th:last-child { - border-right: solid 1px #444b59; -} -body[data-theme="solarized-dark"] table tbody tr:nth-child(2n + 1) { - background-color: #073642; -} -body[data-theme="solarized-dark"] table tbody tr:nth-child(2n) { - background-color: #06313b; -} -body[data-theme="solarized-dark"] table tbody td { - border-color: #444b59; -} -body[data-theme="solarized-dark"] table tbody td:last-child { - border-right: solid 1px #444b59; -} -body[data-theme="solarized-dark"] dl { - border-color: #444b59; - background-color: #06313b; -} -body[data-theme="solarized-dark"] dt { - border-color: #444b59; -} -body[data-theme="solarized-dark"] dd { - border-color: #444b59; - background-color: #073642; -} -body[data-theme="solarized-dark"] pre.fence .gallery .carousel-main, -body[data-theme="solarized-dark"] pre.fence .gallery .carousel-footer { - background-color: #073642; -} -body[data-theme="solarized-dark"] pre.fence .gallery .prev, -body[data-theme="solarized-dark"] pre.fence .gallery .next { - color: #93a1a1; - background-color: #002b36; -} -body[data-theme="monokai"] { - color: #f8f8f2; - border-color: #444b59; - background-color: #272822; -} -body[data-theme="monokai"] table thead tr { - background-color: #23241f; -} -body[data-theme="monokai"] table thead th { - border-color: #444b59; -} -body[data-theme="monokai"] table thead th:last-child { - border-right: solid 1px #444b59; -} -body[data-theme="monokai"] table tbody tr:nth-child(2n + 1) { - background-color: #272822; -} -body[data-theme="monokai"] table tbody tr:nth-child(2n) { - background-color: #23241f; -} -body[data-theme="monokai"] table tbody td { - border-color: #444b59; -} -body[data-theme="monokai"] table tbody td:last-child { - border-right: solid 1px #444b59; -} -body[data-theme="monokai"] kbd { - background-color: #1e2127; -} -body[data-theme="monokai"] dl { - border-color: #444b59; - background-color: #23241f; -} -body[data-theme="monokai"] dt { - border-color: #444b59; -} -body[data-theme="monokai"] dd { - border-color: #444b59; - background-color: #272822; -} -body[data-theme="monokai"] pre.fence .gallery .carousel-main, -body[data-theme="monokai"] pre.fence .gallery .carousel-footer { - background-color: #272822; -} -body[data-theme="monokai"] pre.fence .gallery .prev, -body[data-theme="monokai"] pre.fence .gallery .next { - color: #fff; - background-color: #373831; -} -body[data-theme="dracula"] { - color: #f8f8f2; - border-color: #444b59; - background-color: #282a36; -} -body[data-theme="dracula"] table thead tr { - background-color: #242631; -} -body[data-theme="dracula"] table thead th { - border-color: #444b59; -} -body[data-theme="dracula"] table thead th:last-child { - border-right: solid 1px #444b59; -} -body[data-theme="dracula"] table tbody tr:nth-child(2n + 1) { - background-color: #282a36; -} -body[data-theme="dracula"] table tbody tr:nth-child(2n) { - background-color: #242631; -} -body[data-theme="dracula"] table tbody td { - border-color: #444b59; -} -body[data-theme="dracula"] table tbody td:last-child { - border-right: solid 1px #444b59; -} -body[data-theme="dracula"] kbd { - background-color: #1e2127; -} -body[data-theme="dracula"] dl { - border-color: #444b59; - background-color: #242631; -} -body[data-theme="dracula"] dt { - border-color: #444b59; -} -body[data-theme="dracula"] dd { - border-color: #444b59; - background-color: #282a36; -} -body[data-theme="dracula"] pre.fence .gallery .carousel-main, -body[data-theme="dracula"] pre.fence .gallery .carousel-footer { - background-color: #282a36; -} -body[data-theme="dracula"] pre.fence .gallery .prev, -body[data-theme="dracula"] pre.fence .gallery .next { - color: #f8f8f2; - background-color: #44475a; -} -/*# sourceMappingURL=browser/components/markdown.css.map */ - -body { - font-family: 'Lato','helvetica','arial','sans-serif'; - font-size: 14px; - false -} -@media print { - body { - padding-bottom: initial; - } -} -code { - font-family: 'Monaco','Consolas','Monaco','Menlo','Ubuntu Mono','Consolas','source-code-pro','monospace'; - background-color: rgba(0,0,0,0.04); -} -.lineNumber { - display: block !important; - font-family: 'Monaco','Consolas','Monaco','Menlo','Ubuntu Mono','Consolas','source-code-pro','monospace'; -} - -.clipboardButton { - color: rgba(147,147,149,0.8);; - fill: rgba(147,147,149,1);; - border-radius: 50%; - margin: 0px 10px; - border: none; - background-color: transparent; - outline: none; - height: 15px; - width: 15px; - cursor: pointer; -} - -.clipboardButton:hover { - transition: 0.2s; - color: #939395; - fill: #939395; - background-color: rgba(0,0,0,0.1); -} - -h1, h2 { - border: none; -} - -h1 { - padding-bottom: 4px; - margin: 1em 0 8px; -} - -h2 { - padding-bottom: 0.2em; - margin: 1em 0 0.37em; -} - -body p { - white-space: normal; -} - -@media print { - body[data-theme="default"] { - color: #000; - background-color: #fff; - } - .clipboardButton { - display: none - } -} - - -</style> - <link rel="stylesheet" href="css/dracula.css"><link rel="stylesheet" href="css/katex.min.css"><link rel="stylesheet" href="css/codemirror.css"><link rel="stylesheet" href="css/main.min.css"> - </head> - <body><h1 id="DynareApp-Documentation" data-line="0">DynareApp Documentation</h1> -<p data-line="2">DynareApp is a standalone graphical version of Dynare written in Javascript in the Electron software framework. It is distributed as a standalone application for Windows, OS X and Linux.</p> -<h2 id="Developer-information" data-line="5">Developer information</h2> -<h3 id="Program-structure" data-line="7">Program structure</h3> -<p data-line="9">root<br /> -|–out/<br /> -|–src/<br /> -| |–assets/<br /> -| | |–data/<br /> -| | |–dynareapp.JSON<br /> -| | |–media/<br /> -| | |–modfiles/<br /> -| | |–preprocessor/<br /> -| |–appModules.js<br /> -| |–background.html<br /> -| |–index.html<br /> -| |–index.js<br /> -| |–renderer.js<br /> -| |–static/<br /> -| | |–css/<br /> -| | |–fonts/<br /> -| | |–js/</p> -<p data-line="28">As all Electron projects, DynareApp is organized as a browser process and renderer processes. The main browser process is in the file <code>/src/index.js</code>. On top of of the usual Electron organization, because of DynareApp specificities that require that the numerical computing environment (i.e. Matlab) has to be called and active in the background, there is a renderer for the active visible window that users see and a renderer for a background hidden window running the numerical comupting environment. The visible renderer is in <code>/src/rendere.js</code> while the hidden is inside <code>/src/background.html</code>. Finally, many common function are stored in an app module file inside <code>src/appModules.js</code> and then required when necessary.</p> -<h3 id="Running-the-development-version" data-line="30">Running the development version</h3> -<ul> -<li data-line="32"><code>cd</code> to the main app directory</li> -<li data-line="33">type <code>npm start</code></li> -</ul> -<h3 id="Building-distributables" data-line="35">Building distributables</h3> -<p data-line="37">DynareApp uses Electron Forge as a project manager. To build a distributable for the current system, simply <code>cd</code>to the main app directory and type <code>electron-forge make</code>. A new distributable will be available under <code>/out</code></p> -</body> - </html> \ No newline at end of file