.editorconfig000066400000000000000000000006371516067350300135470ustar00rootroot00000000000000# EditorConfig helps developers define and maintain consistent # coding styles between different editors and IDEs # editorconfig.org root = true [*] # Change these settings to your own preference indent_style = space indent_size = 4 # We recommend you to keep these unchanged end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true [*.md] trim_trailing_whitespace = false .gitignore000066400000000000000000000003451516067350300130560ustar00rootroot00000000000000/build /dist /node_modules /*.log /*.iws .idea/workspace.xml .idea/tasks.xml .idea/profiles_settings.xml .idea/inspectionProfiles/Project_Default.xml .idea/inspectionProfiles/profiles_settings.xml node_modules/.yarn-integrity .idea/000077500000000000000000000000001516067350300120445ustar00rootroot00000000000000.idea/codeStyleSettings.xml000066400000000000000000000004251516067350300162430ustar00rootroot00000000000000 .idea/misc.xml000066400000000000000000000002561516067350300135240ustar00rootroot00000000000000 .idea/modules.xml000066400000000000000000000004121516067350300142330ustar00rootroot00000000000000 .idea/onenote.iml000066400000000000000000000005201516067350300142130ustar00rootroot00000000000000 .idea/php.xml000066400000000000000000000003301516067350300133510ustar00rootroot00000000000000 .idea/vcs.xml000066400000000000000000000002471516067350300133640ustar00rootroot00000000000000 .ncurc.json000066400000000000000000000000601516067350300131430ustar00rootroot00000000000000{ "reject": [ "configstore" ] } .npmignore000066400000000000000000000002371516067350300130650ustar00rootroot00000000000000/.idea /artifacts /build /test /node_modules /*.iml /*.ipr /*.iws /.travis.yml /.scrutinizer.yml /Gruntfile.js /*.lock *.log /corifeus-boot.json /dist /secure .travis.yml000066400000000000000000000020231516067350300131720ustar00rootroot00000000000000language: node_js sudo: required cache: npm: false node_js: - lts/* env: matrix: - CXX=g++-4.8 global: secure: xR8HDjpnnX/O6ekhbRehaK8LOf0eWkn1IKzxI/OjJHKP1c7QpT3sCmNiewDrnZXHDhXK0o8+ixVB0k6K8tBOoqb3mFtXLMczCx7EhgqUgmp+J42PpSffS81knMzN7COJXWfkbxnwCcsah348/8TkWUx4WDn7iSC7XfBGZXoftpoOwcySRZ2yucmai6cNdOtao9oV9MliufHdOdZ5lOaDArZWu10Mmm4aiHRHuJbcmCsOEusO3TOjPC5D4gKh2Qt6RvV/syVju50vvbYdcKyD6xKsIaX5wGzZNzZmIjq+TjbAXYkMk5cfYXsnUiSnlZSWPF/DSOuM+CON5eQQgucQHQQCqVBeiRWICRth+2xfrEkqze3/wtx24wi4xPK+G+DHO2ur1lJGXqgjWeg/07v40lPRM3p2MIcz6Lh5wK/ZOWdttnOyplMlB4J7CHpPK9HaC/MxMDtsWoUlJzyzpKyRaUxPAMpkRznUmDwxGlJNEKmvVI46tCqSHpCatZIX0CeL2ptwSRDWadllrwvlcRgvZLkQjExF/SCgFgwO/9TV93MK/KJrM1iRsJ7qluUSvrmRVO9APf5iXqKqU21ZCDXGaS4HoS0cGxgDO2n6e4Xo1lK3xlosncoiuTkCJcn+eMqnqBn9lK/H9mFtPLnF+/yDJ5ID4S4pqbaUWCarR3YhCE8= addons: apt: sources: - ubuntu-toolchain-r-test packages: - dbus - gcc-4.8 - g++-4.8 - libglib2.0-dev before_script: - npm install -g node-gyp - npm install -g grunt-cli npm - npm install -g p3x-onenote Gruntfile.js000066400000000000000000000005131516067350300133600ustar00rootroot00000000000000module.exports = (grunt) => { const builder = require(`corifeus-builder`); const loader = new builder.loader(grunt); loader.js({ replacer: { type: 'p3x', npmio: true, nodejsinfo: false, }, }); grunt.registerTask('default', builder.config.task.build.js); } LICENSE000066400000000000000000000022601516067350300120710ustar00rootroot00000000000000 @license p3x-onenote v2021.4.101 📚 P3X OneNote Linux https://corifeus.com/onenote Copyright (c) 2021 Patrik Laszlo / P3X / Corifeus and contributors. MIT License Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. README.md000066400000000000000000000244371516067350300123550ustar00rootroot00000000000000[//]: #@corifeus-header [![NPM](https://nodei.co/npm/p3x-onenote.png?downloads=true&downloadRank=true)](https://www.npmjs.com/package/p3x-onenote/) [![Donate for Corifeus / P3X](https://img.shields.io/badge/Donate-Corifeus-003087.svg)](https://paypal.me/patrikx3) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) [![Corifeus @ Facebook](https://img.shields.io/badge/Facebook-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software) [![Build Status](https://api.travis-ci.com/patrikx3/onenote.svg?branch=master)](https://travis-ci.com/patrikx3/onenote) [![Uptime Robot ratio (30 days)](https://img.shields.io/uptimerobot/ratio/m780749701-41bcade28c1ea8154eda7cca.svg)](https://uptimerobot.patrikx3.com/) # 📚 P3X OneNote Linux v2021.4.101 **Bugs are evident™ - MATRIX️** # Description [//]: #@corifeus-header:end A Linux compatible version of OneNote ![Screenshot 1](https://cdn.corifeus.com/git/onenote/artifacts/screenshot/screenshot-2020.png) ## Warning ### Corporate login The corporate login is unstable, either it works or not. Only the personal account that I can provide some minimal support. #### Suspend/Sleep/Wake up I recognized, that after suspend/sleep and then wake up, the app is not saving the pages anymore. For now, the solution is, that after wake up, restart the app. #### Not working on SNAP on some versions Usually, on stable distros are working with SNAP, but usually non stable Linux distros could not work. Please, try using the `AppImage`, that is usually better than SNAP. #### Tray issues It is possible, that the tray is not working, it is an upstream issue! For me, on Linux Mint, is only working, if I am using the `AppImage`, and have `System Settings` -> `General` -> `Enable support for indicators`. Snap is working on Linux Mint as well, except the tray.... I only test Linux Mint, help is welcome! #### Error in auto-updater: Redirect was cancelled Sometimes, you get an `AppImage` error for update, just download the latest release and replace the `AppImage` from here: https://github.com/patrikx3/onenote/releases #### Rasberry and ARM is experimental I have no ARM computer to test it out, I could build `AppImage` on ARM, but I have no idea if has an error, it crashes or it works. # Downloadable installer ## Snap [![LINK](https://snapcraft.io/static/images/badges/en/snap-store-black.svg)](https://snapcraft.io/p3x-onenote#cory-non-external) ## AppImage https://github.com/patrikx3/onenote/releases After downloading the ```AppImage```, make it an executable. ```bash mkdir -p $HOME/opt mv ~/Downloads/p3x-onenote-a.b.c-x86_64.AppImage $HOME/opt/ chmod +x $HOME/opt/p3x-onenote-a.b.c-x86_64.AppImage # Then you can run it $HOME/opt/p3x-onenote-a.b.c-x86_64.AppImage & ``` The app can be found on [ElectronJs Apps](https://electronjs.org/apps/p3x-onenote) [Change log](changelog.md) ## If you are a NodeJs Ninja [You want to install via NPM...](artifacts/npm.md) # Original version https://github.com/peterforgacs/electron-onenote Props for Peter Forgacs! 😎 # Main Features P3X OneNote Linux is, actually, an independent browser window for the online OneNote. You can use this program without having to clutter your browser. The main functions are: * that is independent from any browser, as it works in it's own process * it provides a tray, that allows you to close your browser while it keeps running in the tray * the data is cached and is faster than always opening a new window * it allows you to sign in with the corporate or the personal login * when there is a new update, it auto updates itself (Only in the `AppImage` version.) * the program allows to use other Microsoft online applications, but the dedicated purpose is to use OneNote ## Verbose feature info * To show the menu, click ALT * Desktop menu * Icon * There is a bottom bar * It shows the current location * When you click on this bar, the location URL is copied into the clipboard * There is a new button on the Edit menu * Copy this location to the clipboard * This is the same function that is on the bottom bar when you click on it * Restart button (empty your cache, you can login again if there is an error) * Remember last notebook (as much Online Onenote allows ...) * Menu > Settings * Close to the tray * If checked, will minimize to the tray instead of quit * If un-checked, default quit close button behaviour (quit the app) * You are able to set a proxy in the settings menu. * There is now a menu called `Corporate home` * Given, I do not have a `Corporate` login, I cannot debug it at all. * If something is not working, the only way is to provide your login and I could probably fix it. Otherwise, I see nothing. * The OneNote language is controlled by Microsoft, and we try to work with Online OneNote, but we are getting a hard time, but the Electron UI is now able to use any language. * You can translate any language @ * https://github.com/patrikx3/onenote/tree/master/src/translation * Allows using multiple instances (with some quirks, as the config will not be synchronized using multiple instances at once, so it can provide wrong results - to make it to work, configure with 1 instance, exit, then use multiple instances). * Multiple instances is not recommended (it was requested and provided). # Issues ## Not loading the pages / freezes Sometimes, it is possible, that OneNote Online does not load properly or freezes, the solutions is to quit and start the program again. (I know, you won't like it at all! 😡) ## Online OneNote Change language Although the main page's language can be changed, it reverts back when an actual page is accessed. This is being investigated. https://github.com/patrikx3/onenote/issues/14 ## Electron problem 🐞 Since Electron v3, the tray left click is executing as the right click, Electron bug. https://github.com/patrikx3/onenote/issues/38 ## Fedora https://github.com/patrikx3/onenote/issues/3#issuecomment-312711801 # Development For file names do not use camelCase, but use kebab-case. Folder should be named as kebab-case as well. As you can see, all code filenames are using it like that, please do not change that. Please apply the `.editorconfig` settings in your IDE. If you try to build the app with AppImage, you have to change from `electron` `dependencies` to `devDependencies`, this is because it is created to be able to run this app from `NPM` instead of an `AppImage`. # URL links [P3X OneNote Linux playground](https://www.patrikx3.com/en/front/playground/13/p3x-linux-onenote#PG13) [Corifeus P3X OneNote Linux](https://corifeus.com/onenote/) [AlternativeTo OneNote Linux](https://alternativeto.net/software/p3x-onenote/) [NPM P3X OneNote](https://www.npmjs.com/package/p3x-onenote) [Snap Store](https://snapcraft.io/p3x-onenote) [Github.IO Page](https://patrikx3.github.io/onenote/) [//]: #@corifeus-footer --- 🙏 This is an open-source project. Star this repository, if you like it, or even donate to maintain the servers and the development. Thank you so much! Possible, this server, rarely, is down, please, hang on for 15-30 minutes and the server will be back up. All my domains ([patrikx3.com](https://patrikx3.com) and [corifeus.com](https://corifeus.com)) could have minor errors, since I am developing in my free time. However, it is usually stable. **Note about versioning:** Versions are cut in Major.Minor.Patch schema. Major is always the current year. Minor is either 4 (January - June) or 10 (July - December). Patch is incremental by every build. If there is a breaking change, it should be noted in the readme. --- [**P3X-ONENOTE**](https://corifeus.com/onenote) Build v2021.4.101 [![Donate for Corifeus / P3X](https://img.shields.io/badge/Donate-Corifeus-003087.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZVM4V6HVZJW6) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) [![Like Corifeus @ Facebook](https://img.shields.io/badge/LIKE-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software) ## P3X Sponsor [IntelliJ - The most intelligent Java IDE](https://www.jetbrains.com/?from=patrikx3) [![JetBrains](https://cdn.corifeus.com/assets/svg/jetbrains-logo.svg)](https://www.jetbrains.com/?from=patrikx3) [//]: #@corifeus-footer:end _config.yml000066400000000000000000000000351516067350300132110ustar00rootroot00000000000000theme: jekyll-theme-midnight artifacts/000077500000000000000000000000001516067350300130445ustar00rootroot00000000000000artifacts/arm.md000066400000000000000000000033341516067350300141500ustar00rootroot00000000000000[//]: #@corifeus-header # 📚 P3X OneNote Linux [//]: #@corifeus-header:end ```bash sudo apt-get install qemu-user qemu-user-static qemu-user-binfmt sudo apt-get remove --purge qemu-user qemu-user-static qemu-user-binfmt ``` [//]: #@corifeus-footer --- 🙏 This is an open-source project. Star this repository, if you like it, or even donate to maintain the servers and the development. Thank you so much! Possible, this server, rarely, is down, please, hang on for 15-30 minutes and the server will be back up. All my domains ([patrikx3.com](https://patrikx3.com) and [corifeus.com](https://corifeus.com)) could have minor errors, since I am developing in my free time. However, it is usually stable. **Note about versioning:** Versions are cut in Major.Minor.Patch schema. Major is always the current year. Minor is either 4 (January - June) or 10 (July - December). Patch is incremental by every build. If there is a breaking change, it should be noted in the readme. --- [**P3X-ONENOTE**](https://corifeus.com/onenote) Build v2021.4.101 [![Donate for Corifeus / P3X](https://img.shields.io/badge/Donate-Corifeus-003087.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZVM4V6HVZJW6) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) [![Like Corifeus @ Facebook](https://img.shields.io/badge/LIKE-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software) ## P3X Sponsor [IntelliJ - The most intelligent Java IDE](https://www.jetbrains.com/?from=patrikx3) [![JetBrains](https://cdn.corifeus.com/assets/svg/jetbrains-logo.svg)](https://www.jetbrains.com/?from=patrikx3) [//]: #@corifeus-footer:end artifacts/new-language.md000066400000000000000000000033201516067350300157360ustar00rootroot00000000000000[//]: #@corifeus-header # 📚 P3X OneNote Linux [//]: #@corifeus-header:end # New translation * `onenote/src/electron/app.js` * `onenote/src/electron/window/onenote/load.js` * `translation/en-US.js/menu.language` [//]: #@corifeus-footer --- 🙏 This is an open-source project. Star this repository, if you like it, or even donate to maintain the servers and the development. Thank you so much! Possible, this server, rarely, is down, please, hang on for 15-30 minutes and the server will be back up. All my domains ([patrikx3.com](https://patrikx3.com) and [corifeus.com](https://corifeus.com)) could have minor errors, since I am developing in my free time. However, it is usually stable. **Note about versioning:** Versions are cut in Major.Minor.Patch schema. Major is always the current year. Minor is either 4 (January - June) or 10 (July - December). Patch is incremental by every build. If there is a breaking change, it should be noted in the readme. --- [**P3X-ONENOTE**](https://corifeus.com/onenote) Build v2021.4.101 [![Donate for Corifeus / P3X](https://img.shields.io/badge/Donate-Corifeus-003087.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZVM4V6HVZJW6) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) [![Like Corifeus @ Facebook](https://img.shields.io/badge/LIKE-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software) ## P3X Sponsor [IntelliJ - The most intelligent Java IDE](https://www.jetbrains.com/?from=patrikx3) [![JetBrains](https://cdn.corifeus.com/assets/svg/jetbrains-logo.svg)](https://www.jetbrains.com/?from=patrikx3) [//]: #@corifeus-footer:end artifacts/npm.md000066400000000000000000000036711516067350300141670ustar00rootroot00000000000000[//]: #@corifeus-header # 📚 P3X OneNote Linux [//]: #@corifeus-header:end # NPM install If you know what you are doing and you are a Ninja, here you go: ```bash sudo npm install -g p3x-onenote --unsafe-perm=true --allow-root p3x-onenote & ``` ## Warning This installation is not supported at all. ### Note 🤔 Though, I am using it, but some distros are different and I only use Linux Mint and still, I can't support this way. 🤗 [//]: #@corifeus-footer --- 🙏 This is an open-source project. Star this repository, if you like it, or even donate to maintain the servers and the development. Thank you so much! Possible, this server, rarely, is down, please, hang on for 15-30 minutes and the server will be back up. All my domains ([patrikx3.com](https://patrikx3.com) and [corifeus.com](https://corifeus.com)) could have minor errors, since I am developing in my free time. However, it is usually stable. **Note about versioning:** Versions are cut in Major.Minor.Patch schema. Major is always the current year. Minor is either 4 (January - June) or 10 (July - December). Patch is incremental by every build. If there is a breaking change, it should be noted in the readme. --- [**P3X-ONENOTE**](https://corifeus.com/onenote) Build v2021.4.101 [![Donate for Corifeus / P3X](https://img.shields.io/badge/Donate-Corifeus-003087.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZVM4V6HVZJW6) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) [![Like Corifeus @ Facebook](https://img.shields.io/badge/LIKE-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software) ## P3X Sponsor [IntelliJ - The most intelligent Java IDE](https://www.jetbrains.com/?from=patrikx3) [![JetBrains](https://cdn.corifeus.com/assets/svg/jetbrains-logo.svg)](https://www.jetbrains.com/?from=patrikx3) [//]: #@corifeus-footer:end artifacts/onenote-icon-2018/000077500000000000000000000000001516067350300160315ustar00rootroot00000000000000artifacts/onenote-icon-2018/256x256.png000066400000000000000000000143671516067350300175130ustar00rootroot00000000000000PNG  IHDR\rfbKGD pHYs B(xtIME  %aXfIDATx{x;M rB(4d6$K>mkUjzϑ =jkjO{jj)zKnrQQP ${HRN6<>$ygf;w}wFX "߀Q" 5)Eʊ2P8f|.&L y2rKr7+ {\[_j ̖T@@@JB1V0Y !42o0M+9y3(,)\2J /m/ !) @1cũ^ӕ4%f~H=z3ϣ@1 P( jRa~)I<2' N ݐӥw-N]ybʲ2㆜=&K9M^@"P5!AROP!1bEh΀Q"$LT< & !5A"ǀqN n~E*&d%B31!4H} Ӥaxk;KGR*>f)z>~@1oũ 7_7%R`W{:EI.ϰ\4&)s vO "ٺtn<1/4HskPD^Ӥ^H.yr'@, A4E@ހB\`'@,H[: %oBt<);QL@htRy@-b'Rr:]~UMb!e S D1+=MS&MݯfH30M{ҙn'(/-%͎| US B#%4mVs;Df@z+.^v=?h% 6kp?M2B Nq;jH|* 7uqOU@W:]49N;04@.D邦W=H'-% xħウɃtj= 4`K&fkQ*fJH*=:3`~<0:@ղ J,{?ŝ0]q)nW^xD@ȇ)A"ϊ3@~vӽ@\ ,37xSP8_s)uk75]8lRKOyr$MUTcY | ξ7%/j y*yi Cӗ#ʥ%h E <\t)σ4PwEK2I#pm * q.»~Le ܋!)3yW/!oߟz ?0@4h 8w`~6\@ A2dDڸt 531>)Sɷ^c`7ЬaH#"ud*2g"spx=,1bARze mLIGژ4ICrf C X+uh}~!7R㑐kqC|8|>xxM"qX"%7oC%"1-!>zݛ3w.0ƹ($";gz'mωyB]܅!Ny EDZƄLL=k|2i7>@#w5hDmp/eiIf*#tA6rN0%$rbxx1DN 8HwȉU̺<z?)Zy:QT3 3& .=bCmr±ȟ 3PLRw찣ǞwvL4>|}45l spS:{ZF xߐ)]0E!{U]/xmmZS JM 3s[Qge:=C",KG&V[]L3fc?6ňP,Iv?jl3]<oߙBS*`LI,9ZQpW 9Eb_#t?'ɽ03Y]RgB( .a ^'@ȇEwxm[xT=bfG{kE:2yP(X2w5ξ~< 0!plZ]+M.>%.x;L4|} 26wyۮ[ hSGs]j+wbKY{؍%kw&;":Otb(vVm(;/ntdn;ە2"Kǡg`RљqL\,l[zc>~ ]]as{09<)*%e&GG Qh?ކڥƦsoI;nTGM|z~P* J?{ESbpou/'8*Z`+[,=kd2{EoL-qS+Yo ~xSJHMI`>|Kmi,^8@Z iJKmt>ߡ=Q񱥶ic0<9u/OoCJkߛ8obU:+R$Kˋ9ZkW5{*e8ѧ?m{1fj;'ރkg)ѪY^D ^o5{1쪶jvVu(S`kX]z"?=d~pH DsۏIӳYHbնWry7Ea9`Kn gNsYHbؕ[~^7 I ;һtT>)= ^6$]mZ-ۗ\3 ,$1쨫5/T[nŌgd .jVU"[{*P iF485h}36;&wn[V1RG4MKwn~aDHv؊-bP-abV_n! &,$1쨹 O8X]3 z[#0eTvtda|>-cp+1liݓo!t?=粐:ٴO˘u})|> xjm}($)mۧeL,&E L k-w{ܘxq_cR1,+6;.w|L§U8 Fi}oP uJL-fh:n6^i} Pya_&@>Z>9ԧed`6Ť[aW}gy9p0E@NyE ;30,xmho2FMˆI0ͱfipJT9hxf.}ZVYLRuMP\_aٜ4MAV~ęD6w嫱g u "j9|U;uh:heTݯ1/ן;0z_V"p@:ّR<pm Tf9@2wo rP?Iz8H41ا}0]6ho  ~&Mkjko@/y @6y՞@_%Q?q<@t/ n5G^BW{W.H6Kj7nCE\{k;*^n 47c]8pb _[!YJVaz=[oZ@cxWYow Ě)Qt t=6P+cE~s:w س^\!!L- DLֻk6h %)~ڗ-RwuNyq_tprKRoJh!Q(| !@kʲ2uOӔASRդ@!<0 OpU+>x\[nJ bXdKyO Ès@o057`j`8\$~2M-%b%AƠ(R31I$DHY!T.hwFߦQȗP5R3!zddqr?ȓ*J<ȨfH3O$e0(7A`_AF))03#Л@$gX.&&!I pf+R|F"K3 @*/-OC4E@3{`0beYqCd)4("R5`0bwCBfNO(KEr`ĸ i~R=Pg,NMP, #6dRėdd!B)4k&#1&4 JLFAF1 P( jR.!g_fX5]!&!AF1bؒ%BZw((2@  2v~{2 #1(4 d #d4L/4 LF1(44%fdd0(ƅ7Bvdd0aVuiwZAFb4PM _f0Af|=M ya0ȡ!@0|ӃL3e׭LIENDB`artifacts/onenote-icon-2018/onenote-icon.svg000066400000000000000000000027561516067350300211610ustar00rootroot00000000000000artifacts/onenote-icon-2019/000077500000000000000000000000001516067350300160325ustar00rootroot00000000000000artifacts/onenote-icon-2019/1024x1024.png000066400000000000000000000512771516067350300176410ustar00rootroot00000000000000PNG  IHDRH۱PLTEGpL`y"{!b{)s%sLr%$n%[c6'q)V+jdxaG_`X^b_db\dw2Kdu!zox}qc pr"tync{|v}m~l#bj{|sfzgi~ bk bj$a"|svyxhmk`]aed[i`Yb_cZ_޾^rqpWμ]vtR~lI_ݹ[aV˄$N%]ٰW̹\׺\؃#`d"OUƮVɩTÉDhKPFMEYѧS²X΃$CH@QATĥR?fUǚL|=UȏGJTśMS×KQB~>En6z=q8t:f3wv;j4{y;}>b1r`/n].kONх%SѲ_Ûڊ6~ϡaă*~&oɄ4FSr*BDgj(<\+ULtRNS3 /  &-1$,"';)96*@=ECHA5l`?r@%vcуfiO"IDATx`оol ] Gط A ÓN޺$.эM62 jC}ԏ*c~͆ 72@ d@//5խ@tU_6Do2%sBŋ8"pc^g4R8CI fN s#@ikT#ڹ @JFu`s%)eL d.;Ʋn PK`hPgؿ$@:Xd!ž.Z|$@=oehPs@@8-WWTx[@Ej$LMjCTx9<РK\1-xu=7M<>(1ep<°!4CJ$*p{(W@ \G? @Uw J @Pg@:pLj#G  4EH7u z i ؖ@{`$cC~@ۣ} `tR>Rؖ*G!SF%$&0=0j|t,$TP "0@$ E"`( CHDP ٩cA[{a<"'R@H)x EO <"'R@H)x EO <"'R@H)x EO <"'R@H)x;uh@@QA IM OSP`JL@ )(0E%"SP`JL@ )(0E%"(Y@mY(`J" )(H`J"(ס$F5@8`J_8Pw$(9[yP{qC%vDq|͢'H  R"ӕ1)YTd2_ILNrNC}sC рC`$"'ުmKHx, <^|(G``[P(p!@TF0O|WU6@FP&H 8@(dmf "Z#'*>( ͊j8 #'b6pc ]CWXc@tD0OL$aE<0ݨЂ,; L@A8N:L㲏eZ֯'JM/jr0a77&ewz"` @ q59WǪ?+ ð~MKT$K.H @k? mw6PH @.S??կ^:%B;H hsGtXGV^j#Yy CG_π=]|< XP埪sgz `p-(ū3+$Y;7XE/c 4! )Q|WU^3@/r?@wK;% u=`V3@ⲿS~Akw[`~4GGZg@KdP>|? VWD; '[ ›I{GgJ $8 .;U} Xe((@_FZ B@\?5=l둓n:E_pٺKo|hԭ &x"= bP_h}/ Ra'h[np7Gl~ T } P Nv_(kO5<~X2 ZKO6[}wmK"I*3Op(Ev2V@h8 `g/nP__kc㣾 ٜ:Jx5jT 8 Y?n?[s߮s28 .'h~~s@3@gWu_]ob;}h@"P#T$gtj&o̕L".0k?l@"@π o=F `5(@??b[[M.n: +}ǃČ @I~W.>{#^A uA tzO:`g ?:X7lmXr Y?O>o?;pYplP)ihy#F'~km.2YAeFҿ+Op0^@W@@@V쏛C #/ZNػ&(^ 9"AxRP"(.HIbZūTE`ѣcfM&?|?lҺUGku; f``T/0z ՟f&-Uv&@oѯBͽPP@ ^M/\蛻 0cD~OW?q7`h~ @Dr/#>7~-`T ȏ՟F1<1kt >x X0A@KgC9WV_Q$ Lc/Xoc0?a#Yo>Ku\*X@lwr췀OB B`;?Og{ gb(4?ϵ/o R0韼ӿ) fF1}@D_Q?xXr&?L@4<ߡ7Կ>k W[0v ` t;o_?\1+H@nz?qI O_SFs@"@WA@ӿoC /ȝc 4@ rO3 _+4]]D~_`?oZ> _6#69`UX>H!L˿',+Ag?^&}X q.1}[["' TpZ;ӿ 7ph=鎗~0[,( g2 >=WSS~˿GDX]2/<YMmz ݓJ2 ^ _>>3U\JWc-kNS_ s>T9RS!5XnX@3&!_m ?Sϸ _=t u\(n?axIp P߯{,kX|Sdc[=@5xo?5X6Wil@_ٰ]P_@F[׿:">Lxy¯/Y?3Ԩ 2'֟zge0S)il{[,X)Wk,/ Q?~cn\X6gP@a=: g[O)x?^$Cdz|g*ט h5[`$p+(m)@;?p(ԿC1ALױ@[KdlʪO\gy a`?J{L//QVeX 1 Gh!Pr1 @`4@t#P~t>i*66?{ЌF[lO/Ua8(aVdT8 \| 0jeQ zc~?`.PO1@?`+k2Ϩ?@?S`q)>.cJ?c1@2GHAԩeLPo e= ׿!7Y P8^mP~ ?^g@DZyw&Scy_x p0NWedpdV0""TXT o mIu+1j99sf`w̰=@I /c%I f$MYض?GgPMW?c:?KMH @rt,[-2M[1:`"`{߳@A[#(=1O˿@3bO}lq_1HNc`PԿ)З} @J˿m_=RoeohEBr,sP8;_Ȳ{?~D@Z?300[""<_`(xppMxVH@. @9AyHD@,^co @Ev@ p.;["./ Ha``-?V }q(oPNxQ{[#'8=Z)^g ?z ?,˿@3B@П"][A\7dHǕ@?EAS?Y/UA!=1)bO}BȲ[4#: y߃O,#  ?Bm' k?qW?YL@忡,L9:'d?Xh!h4`-z@Pgq$["%8c }8 fd  @q[whFBLx8 l,*WyY?4 `bǏGDմ @ߣC7dY7 7k$^-f<8A)0["%Y nH:o6??/{c$)GBr, ~ ՟"<˿@3i?mjGA"\˿@3X"R <SohF^8:$ӿ@/?U z'@<# >Ak0/ygPd Vڈ0F}Eh:]PhNp[ JL:ipg{9pu7i0`xqD=-:0`i_lxp/_oЊ)hԿA< @/BF;CY fDg`_  ahP$>/\⡦?,hЉJ3J ;f7i[-ZX?# qϿ@-}9Īh -ֿ@1]#]|?xhP$_;V0!HO~ P[oЎd +@?Z#!PAFP`\x,ǿ@3@ kKt?pkP71j( (i{Zt"-\ѿcb @+@ѿ.7s\ rDRҮ~9_?  /(EN_տoPK |1H#(s ^cѨ@/B@+?|WVb/d~ǿ@3"@^h?7,>E@w @gcEQ t;<8GN"J z ? +ޟQ?Ahzep ?,,?\](@7 DcCM&H,*ޟ9D R ; _r?x }O Zd !S%3?{w9,_<``  oЌ$ZpXdZ% oO?/]@%? 8?g9?-:d x?DhEVZ-zP/WG f %1r[4#% < chFH(cox c]-4G<Lȏ|x[>G@ }0>p7- p,ǿ@3Bpvo?YC} ?;DdA ,_>@)Q4_iY"/n @ON>d~iHug9-߼+P->QH1PL3Xq" ! ^"KE]:b?xAatmR3-vǮ^=u/yH u4#@A)c?K@_>'0LOPdSA!oE=ci2A6?_&} : @\/(lgHaDO"G/Pio61?O\R!"\Ϸ(Oci2S/)?U@'3ODŅpFoêo"K ..8GQZD_otZ])8/@_h|@tV)x0h8FOT 4?*DOS|ϿDu_Wc@d dof%8? 8N`OGw <.`1}14jn)8@v']o)8G;cǟشShbO(8@u(#/ $ (>|W @3]^6(x@_"(;&(8?@<@Dƽp!?a?"ck(2|<`y_ S)x$s?&K&ci)vO?(8Q&W6w@O|[=O#i>{ODƥ ?;ƎWW3?zg4}[ $`4v7U~ODŗ0Ö'xm?@`p?c?"FORq"\7BzOǁ yUu?u @?wKP(\m@\< @!_+Y)ǿ?;) |o( WP? GOf(¾Q"ԹH9pb"BN "֟j!P"3Әx{n;kqI8 =58@ G1?ſ%p!}=Ջ 4% _{?ϣ9ǿ osߣ3(XO%^@`wGA%R Q_@v7<ۿw$44%f(`!?ӣ/Hf.oҽ_ @0C};ĿՓ(A@׽?ѓ8?ŏ dVoD[Xx=U+K { P?oۿ 4 ;_"] <صA]5-'#)Pk%^kߣo% =3(9/!ێ Č/_nW@q5bK@ {;?-6J"+3!ۿ ?ݣߛl"3!SqyۿACݎgE#xk/h~?+c 08_~ۿ {_  ~8ǿq{v&,"knj ƿ=."| `C@A5|w:/kOO8|Q`Gvw;o!5('n `O%@p'|[S{* J$Hp?n }A5~f)2 ,3xJ@D{DoF@@l8v^H@,{b/ uI 跡~K >l< PK `]~yۡoN@.C=0'0 _fʼn s cA\*+D7t#J% FEbf$$!$`JV**vOWUQwnSܺ|0Z ?__˿IO>}N lgf .- Zߐ~-gd\6T*g|/Q\?Gr $ak\s?w+%-/]gsXHٛt ybZgk3@50>@ Ζ?ߏ~ՔO?&0} |.*g-"˿4i7d^T`R %u៭IՓ"@7|7P9[+!{R545S8~4 @Z/.s/& M]~<6l#w꯴_D^!~JOOPY+"*Iߖ@616+b[kV{[3[b('b @< к${@b]9~)B8K2 HOLXKN" @fO[7rWzB?gu GH/]`(BϔVJ@# 0O3@6TJ RmS+  56UU?t('@i#shFP. -?/HG / koϹW)?? KGlOH__To~o#@eb\`(Zb xnB-Gѯd2#_в``UBb^ Sq[@DGjLdдM48%??  @o-v rvXiPOO71  a`eH)h0 ( a[i>_hOb0tBX% -j /UUr ϥ*;G `p acշ(O@3{`\\3@D 0 -?=qG z l,O)vPK4x(6Sbw\ԥkU    ewB.T}`Mcll C ?藣??;X gb0f~vl ?Dbm$B  F;̈́jh58.\H$}W@v_ydoezEHf^.o_w  j_x/Hfti_+߯^5? ,L>S_?r` x\>?sHEq_  I3z?ƻd7;BaU?ۿ^.Tq4'|'~ow_? @2F/Aq\տ~.Xx_ /? GOߎ~=ʟ @ ZW|~Տ;c^2 Ayf @ R)'|__<diyw+/dS]C>7~gHf^ _6?2v4TO?w$3O+um?HnVhm^_? lEO~6 @2pbDN?OTkGO_ @Vim:$3 >?[z??2V4'}'~zHek:~2dz^WzO?O R6W=~_o/){W~?HvK)z~$;WkGO 2n~? @2pp$~NT~.HU? @2ptn?O?nS? @2p~C3i:o3 Av'H[?/ @ewgHnΏW =N@l0/1TnW* >re ܹ } ` `~`}! ! C @@@4k@@@?@dnv0 +EBZBqB  t1Hk`òK%]5{!|@CG(PE p:FS~`boi ,@'AC&nO]9X+ồ2wO\_lr+|`bt@4 6pCO6 M .sh36z.pKC0Xۅ2 ݞyx l>buݝ$x8x{#50?M\H`8|T>J|#񈵍 @PFZK[ck+W<#$?[^"z.P2wP3o G|/x-YיdYP3WLM~0i%7F#VTMjԴ C5x,FLFLqMUJt:iEm.a$tS5 tX*q]&XhG @x)X8߿3Mh(dElUIpR v]vMw26{;Іqe / 0+{Zns9G >&q< o}~Ru4="K |PR<P]n-$vj(@P?NQ=CmMwK / P`% NYn+G0R j ,%!0K 7λPj^rBN? sp G @__}pD7΀uy]7~ ( p+% :I?>5n8(!b+0J0 ip& m,_Y*$ rB?Np 7P$ /hCP P-py/y^ !P `(CBZfĚ+@WC@@ 68~b_x4Sp@ȉͿp<"_@9 qM^WtP(0__No/4ƕ?0vI~#W\0\X4OakS * !!E& l3>ܻ d„ȄT?? `3\G @UIP2B'DQ$Gk صd7a( .% #:2I$|{u) xڡ MxG?!@gLlə IDATxu\ww%nT$DQlPygg؅JKw-P~cwgf7p@!#+hv+hv+hv+hv+hv+hv+莕J;Fl I3 /x8qerk#$.,:q!6Ch>q5{"p8 Jxp^oe 6LdP-_F=3! +c| Y]yWFR漫%hʬq~sc),P6p#hZR"JFG|Ж ?Ի4F\ TJT,%lkXJ rBdv-j:fHofr/:P!.+śNU𪬡gLkSuceKi:5Dz^tF(3X wVFg . $J?7QYa7ŵ623#\CHLRV•OJ,ִ >߬5ٿ0~JVhs=yUtL 򪀱fӕeB.[R,H 8F 7 >'DAVzz|BFbz :XJdTf7 CkA~$J0@CZrH%,B* 鉄{~D.󣜞@atc&`OҮDNO?I5Q˒uqw)#k&~㪾hXQb2XSfVfbYּ7 k6%`wвo |Y>|78=^OR>bX)[1 # CK\=ZSP k G,Ҥ E{=,QwtdXA+jB8+j*͠:o2#&J1 P_ƹנ73?P}x578+>mc*L?R&Br} *˵4XLWwVDq`nk|M1MɀV4dB6m+g?5x|'`_/BDWnk()Opbd:EOXPx{B Kw#g\_v}Qies "4r<yk޲ Bw%5F-So|q 5yxT|g"%Wt2u6%^K#H: 1OcT߉a*bOw% u  UVLtf>CuQcfݣGoa:o44$(G-iYu!cLQUhmK ,S37 +Dž{tBHX}-{!)s:=&r_R%ϊF`1ղa1A%; =NX {SƬ5Ϗ^#"'0qHM!C־1ߞ41.N"/[uc;)rM5^!ӱ:VΛ ,vFpczs(@T41\3_0̐0,&k~3ZܣrR1y;yYң|<keIum566|/u`|D#7yWlN9Wdux&m ?b3㉊wYU\#(b)neuE&70-[V3QtN 3ZYA%Z2|ēcN P~+6&&_ZzϞ |7Ik e6+nkb]ucѻ|ڂ]BAR"!z2\1|y\;Vda^51*Z\T1K<:<ni{=屴͸вf*YԡN+ ^dtDjP/NgN̜tIfp8ƨ 4^x#,H%wO弫oުh_l~7p&H<+c܋#e{ /Kf{X^b?sZ&"+eEU8n /OS"Ͽj~}&s/!b5x:fYI ')qJIZv2qB#ܳȮ:;թ UW!/kWUuvUoohB}Y0'oKlkbYEgOƒ7k'Myƒ|QmM;$JT%W=SS@;GaeTwt/Pڶ[Z2U"Ig =Z.#UIof5%=*@Cb^^gGL*c\($il\_=BJ=q’O73)h˜*?!T\5mJW.gUU9 N]oiQMA&5}W=Be \(- B=AI1kDQ EV`)f6]%A~]gmd9o6TȋRhY!i>}jJ#B_8/3-[}+ 76K伫rzX2es mًX)z-ѿ޴.2*7j\u8o}y&lj cKk M{Q@lZivk>kcM&+h<)L|͘,ĸ[!$-P H~%8F !d:Ma 3-`OrQ/uqÂٝh{iͅo L@4e0R|NDz3SHoAs%3q[kC]Dd8yyĴ;>)Nq\/{/>x܄?M̦;QXĕDžfӕ-gS"+ՆK*ݧ:qtlH}9Kd 5AFD>)I &|clf/t`*sB"rUڣe+BPk#4NޠcCгƓ4K8w4-&AV΍5FIH{yJdD^7̤ۡ4Ib &(^tckf<*JqҊ+L2鬚|Msq6aL1}MpG5]q W缩-ZI.1%7r 4o/,ˤJ 51z^'Y7R|"\5FJ_m{t\hS<(i=ɉ*lٿ/k]5v?v3|Q-LY=^#࿃$;s ֒*OgܗQskDEhmk1^Sj2Ɠ\T|-$'/rT%]ndd F+S`X@_'Ik /nsrLpңGJc#BIx6U9 ۓxV(LQvzqrk##A~ȉt;)chօ,5ryo@H<ᦸ^>PͱotDž!q;|G,t QZK@{c2YYBBX/ZKYpgh g,E7ɧ)zkE?BHTUBcٞoٛrIA%kbq8o.|Ǵvc;"?AD^!tVN9DžXz(n鋮vr&$÷kfHildLG>^pr%%Iu.ǴW&s8DxP{~{8]sEՕ|Rk/L+CH]SzT:f1?-]e>+}~8BHFGXyyotVCyK=Bw ]Gk -Y&^R0gi3i9Q,պ8bTE̱E-77]5eTPu^W{'!XRch9vɞ^>b&BtriZ]o>B(?0FA"|x;2IX"δ,F 7lV*}>3F!'2"eckt0R_oP+=LoabgRԃ$BYfq: wL :>#'D;g{Ft4j1%>_{mMLN!Fr,NgMlvxyobkk#5 ,1%2JDi9MP896J3@!6pS|q[ֿq?k=4bq͜K49*sF - 5br%d ZMkiZ0wȿrzi:CO*nEI5dOm=-v*,3!i>6qZwX3ι0ړƯ:QFcS>"ӕ߰[$ x7^AIuOﺮ:isMa*1)lv֏9>>v]FE"yo-I<²}YsAoa6~:bmM ?!$BV!yK s"?:%y}8,7,%ϰX./z>uhhe=;4'5!\LK vX4!K2XOv&9sWr%RB. Cn@O{Vgҹ|*j#Sj؁ےm p5?[Ĥ}f+r}y!E_Lg*g zzO?CsR oamMH}VlT׺+-jZ(܇9}R?!x~p` LfYK{)y1|Y2rf\Pu^#IF[xs%9>ctbЄ&&* hl6Ep+:{>vAabMmzpY ²XRqۍ7EP? J8jy{Ed2Ίk/ ]=ˆ,~! ro|hmd?? {'Ɍ9G8ڄá) \5TOTjjLӃwei\WTh9[tjlv4^^l_eGGG,^LYy=̈\_Lig;/L"fuqљT2iח}Z?{CT-tIuAߤ`u>ȐPomd Z{݆%w~S6 e>ty>0ә#5me\|*gl0q UO:P$ $a UA~QRjlv IxσFp3O[>+Ureu2qOǴ̐RJ9fjK%5nv;pA|=q.J5=ޖ8yYt9}Qh]%5uN ո;?5[rǖO@)/t`_0h MGJiJY?nBt&Z2*6Kh5 7R$Y_WiA]IӘ~) Tb) !=OWֿ-樥͒U>c4qZOp˛&~v?|+E"]d D>bB#y ˳=TWuYOq~-bDƓ>tef*8K*.%t0ݝQ_,Ҳ! Vh7S۰ 0l6J{^<~1σslחFwA%jƞNP7Lm"~,?<8FV,͘W5mUMsy=tN|ZO^cUB}'6|Yze^fc=†G51Ltldx}ޛb6ح/k )͉Wn/]=2ƠDUzN}sG}cImOhe%m4BwfXr9B> IDAT7shݧtm/^(!?pɧYuyq uZy u?fLmɧeC;ڢ[K"0q².yLda*2"ν46^ԛԧYm!u1(Zv. d_q$_]IS͜][3~{y+sNu/ )U2_/Blm+ZT#Dv\G ޳T΍8=,z#uK#ښ{ьޟ3_p]tcPX tF.Ԥմ&`M٫(iXhcU]rQ?DQ}ѝ@bsVW'yIi%mM i-aO[93OYSbD]8BhDwbeD|F"DR_d8U1nŶY׏W>WXPْWOq_~a]qӕ_}4{XOILՆ̐2>!"BHwÙm̲$m3b1ٻ'c >=zzwwF}haN?LTQWu#+Ԟۖ0a"Ƿ42^X]S 2mEOoO4T4S*>~/Mfn{'+v!,|2ݱr0!0dƺ]X;|yfɳBhuB`zH|;F:&bj iA.LV ?5zvՎ̦+[Q/JBof&Icblj\/Bմ1+CwlӞGE鏓wZoʙO8ㄕ 5ſpʁaypXYik6L`\|4-=2!G w$O>8ހHW@JAJAJAJAJAJA:1|/] @;ȕ\ @;߻֡ߐH$U55"yJyjbbCHɧP4:/>8֟)QommrJAJv}Kݸq#ݻw͓ߢߘXF&,-ݧKKKu\wu}?J~[0.qqεuu={z^ W޽]>ݻwk*sڵk uzp;ckk;gΜW~P!/_rV[XX׾gUl=moo.}>uhM%$<}R7m~:ԡ0h4ZZZZZZPCKR:>v%k׭e/k7o,*"_ɓ>lذa奥U^^~ׯ_]to6uDX/ƌ)|ddd1 gUQQqݻva%3<<,-,vkKOB;s g``PQ^^YU5s 7 d2yCC- ͿfC6(`+ * #i6.-GJ8<Oڈ$Ҙ1ck,--=2"LSWWwqv!H˗/ɂ:Z""ded'MH訦}6ep00fn>JJiMM-O$O6 ֿUV555 `%M||xxs%jjj .vM`!!CWΟ?_]]}vU ૝>}ڵk!"Dokuu~~~'mm&)Iɼ+WTTT]|GYY۷֯D"5IQYUM!ݷOEY!7k$$$߿O$TGcD/^ڳwY0;7;%9e䈑ao-[]ǻ. =_,#?=]ݧO۷@_ ݻ.]5Djkksttܳg_~mըQ6Xxq\B99c"+##edYvԨ5k-Y!t oooPhW޼uk.؟'ny555H;vlWWh;]`~,-,_ѧݿwfz(^kCH4402#7jnn{^tLLee%B#jj[6oZn=]>8ҞwY>R_zLP_=feZ4ƇWeBҟ 9xA'!>~߾}7$$d͖͛l`0wXaRrk׬^z݊_Wdeeݺ>pp=zh[[ZZZhh T*u(ի޹sc!Jnѣ{z8p#6o'k=~A/֭]C-Zp კ(a?|k++F{;'O<}/,,!ɑBKK 98ao_<5Jguu˗O<1;vl۶ !FR+**B1vvuM缼nO0au cNSS`H @ p^4 )**f].w[Y#}<}ڡL]aI+W,Q7u`psѻ/kF9Dsڒ 3Kyhea- y/{)ViW'3]J,y+8!D|q 5cUnWH+ĚctY{s:)̛7ӳHQIbûb޽}ZrBh%7nHH:FQQkcoA/BH$PLMLgfzx#n݊"L&BFegg:uH"IKKO2׎!k+kMM t̽$%%EP:AQ())~ yV3Se˖r:a`ʕEEErrr˖-}vEyESs˗}q͏ލJOO߶}ׅ/YzU#?gϞ89?oB(++x6ZmuFޡx-pmb0^Iw|\E6n8mCN:BoleiM'..z6^WNNy~]O>|3׮g귽n!N<(As h444'89oؾOss<ϟ;K ,<?lذ$F+++^#SR,-BBBGu󦦖'Ȩ ;zDGGW.\-Wynu󞞩bIJJ:ׯ)+` !v ߼q}_{cc|< &遡͛N>:㼽kKRl)Ia 4nhZyv˒7ѥԵ.{>NU -+nB)WδI5T|x_BK=}m]SDIOe8Μ)j>e˖sz2)1 !8ښb"MJ"EEDc: kĈ9<ȘK/Ҭ../_t HHHx7 rrr~D77CCC'%%5wΜ.: H& &͙;kXz`qiZ݅i5 vڛ|q:#\gԞRUAF[(r%ΛR yGP}y3VYD_g,/(F|BĐѷrEI%ulVzmjbΞ=cnnAR Lƹ^z2?={D"͟9UՊ i鵵5>>>s Zutttdr/&&~K/!.ԩp\\=Ņd&%% 33 O/(PQV c/4РОœ\\yy(rYYٚ6 ???Fa>`v7%240tsr+MYׁOs# qho_̘Yl)֟]u=d&.-\[H$AD?=nmE>+F\q>;q\jj׭]WP/**:wzo;{^]BhO<ۨH5U˗ h_D۲yKm]9sB';t萋 //-;ݻwwa_aa}C۷w7yͺkJ_ zx? xɕ< xݘ}E&siliiyADTJXXXB\<&6#'m׹g&BhM_i욵ƹ8766 %Ĺ3kiiR222D"557c46v1\LMLL_F 練D?Gy? RN?ʲr:D"SgMfe!QGW_Otsr)F۹kMKKٵs q|jBlΘ&>+v! GH ƪ6d謹Ho~fHi:B_YNPDYMqvׯEDDJKjkkgt/YWGJ}nMaÆݻwҢɞ  32r)"AArIIP!%$$Ξ;lGyرctW[ZZbiaOOO=wD$.Y!χ Ƌꁠ`II p(Q]իW7n --Cpݻ>pí<]<2$[|)}}=}}wnus0fΜΝd2QK<}I dPXxxw~9Qb7i)QU,&ܣ`BQsdD^貎dCޫcTxY6RAnW>;i/.Xp5kױX,Y z;_֑ IDAT͇ aSݿdVҥKOTLLMMUk3fIK}o=1z_ӧ:C":򝁡QrhW.u9H|5&YZZ4 `_{:[jjJ }^|vǏc+!GOӴ&}rلE u,MtsݷoV2p ?Ӵte%JC>8ϏL&Ϛr%t^ v|p:J55CE&x\c tz^u7*jD""ȕ>8 Wr% Wr% Wr% W?3:?8q|{^*O WЎg9?wvCߣmC+(7o<3!2r%,x0:hPOeKo9|x5o\I@@ :Qzl[:eܹs* ~dddW|H`ƍ7oM[I57B6"W͡#/D|ŧ:_(]t/_|vKCCǏLLL:oB`ҒAJ>;׹|q syCӣ $BeeeyyyEEÉDb?n7_^t!fj8Cc u9sB/;yK&:1P7o.\Νr-//?rOx$l?6 4钲SdrNNoKqvr"9Iv(x=cmz|[^MogZfff=THNN\ɏpp6k~gwdm>ѐ+`[Kp eeeeeeFmŅB6o^_dqAH8;8;9r$eKlݺ !$$$o?ȹNcBmذa07K99.\{~~\sPP#Bp=RWWOII.++DϧAHHHZZF]]}c.9r$'7!9EPPddDJJʯpqvnhh}vrJ2Bh.KCvwCKKXTT/p…… q ^xCd2!5h[122}%MM͊A#((x#GlhhwQVV%޿udNy~4bþ_5oUVVaz22x!=_f׏qrʡt];wy^޵s^^^ ^^^l6ϝP?~H[GEE+**vWGK[;#= 999gϞR̞tYc?oo۷ \];i}־UJQTdP]{^)Y}wBم,ٵW*4SM5s"5s?3Ιs>oHHÒ%!s5~DG;-4nnnvffPuu߃UAAAo2 $ost]. ֭ЎOİX,G_VZ%+++PLJȒ۷^b;MΝ;&VT0J={%%'3!OCu$*j(QTT\v.NJJf<۷Wߞ%BS5Ugдqޯ ={VSS.>zKJڹ+1)`^7UXX1ӧ>d]|yrf?ܱcE=wRR?'fkτ۷o׿%(Bhi)PWS#֕۱c=l54t-yh%''Ϟ8_竩}1;;)O jlmxq2oL,(<|i~ ּS~~~AaAL Uݻv͞x->~z||li͛7-td0vv9bjj*pWod5\.'0oZ~zS\II%pJ?:IRuΜ? FX'Jh]#nڝ?s%z϶O)(PAh\ ]Ej8l E mKJNvuu@rgϞݧOǏKKKgd+(*7o֯_A-! SZi~ãUT2eĉ 44T@?P(o=ܳw &LH&)vlD; vsp?ylݧO Frss_O?77فsmהk)***~6g\===9997&}#docijjoӔ-̍{4{jh&W#3tuuW\F"MSXPGFmos~;g`xupqv3G [ZspI,_O.Nk #z>>TƟ#___㖗<~ypJ3/0Mp>: #ִ^ 99/<]\\D;'!ɱ]o#@)s}pY񐢐5d(eq$@Ɵ=KJJ,**$ҾZp ޽{]¬Sjhh())OE?޺‚'O[N},X0Do>}~7֕+hQy9TSoi-fEKϼ<7MJNL\_={VpFSG<uHԑ }-ى?!:1Ѣ!%Vڲ^w@f-ێ%ܺohhVRjjꔩSxEjTWW?u~̵_v9svtѢE 9]\\—W0PTT4oՋ0s澽{%K睚.KKK?|۱7! HO8+DDYIA5˴GN4ʪ{'O`6!C^~ՌPw33?!س^,+4tIaa}nrSs2fğD_s1-Zt;"`gAaA=򻴴+g͎9!8ؔD A5bوS'O εf0FjJb3=== t…YVEyE!yKez 9Rl`dٽk!YYEEΟ;wCIIvvDI2"$]2a„ &4oP<ݱB$]OJ d@6\#u%7צE_+~%b"JSǻm۶CCzz-~lvuk/!(!vY[[[t..M/\pY2V\ѼȲ*pVshɲ*tIhyٳ gOJJӂH k:tqK&NXN郭AqI_])y 7-GU/0 $5 (J߇V"˭xV  'J޼|~&SVVvԩC 1СCf|Bx{_:6Y >d2t9sLw9xsTUT=x:MK;9RX\\1=BSdzX5Xee3) 1cGC.m;w~[n޲eV`SCm#e]i7lS&kG"n}4en*U?ўw\6mx֭5+W>clذ5_+*\~|smR}EM,"1c|Kvڄ8߸zIbNl7o`0a$|dY\ LUGUg`*=3Eԡsk:gź`$OL~wQK~x-|6w}Q/%\IQ%J|W_NXzK$J?X,{tpHM}V!oƍ5)4TYY9,,lΜ9#"V\e憎oիWk!7 L^5Cʞa#cؓ&(lF%J *ƒ䄄ė/_˗_}x?;v֭{C{%}fٻeIV5q6uaҸv*BK+J+Qөs߃^$ՕJ{&ˋU"ַ常֍ŋN^^މmw|W._&G{Aݺy߬VVRή%W"ojW\QWWXwر;wlQ۶o2eqQE`֓\SS{m6o䕫V_8(ؼe lYE@ь ?O7nlϞ=7Q"BIIB ;vv6m̟/t Ț52~ys}ݚ*뛓d2m[9͉D$!P"E!ӕ;z}C=t[W:b:{|7/(|ix{o}sUw77-->_:t(**|.a04MFFFSKʪתUFYw[W\ӧ޽{KHcmlֽ'޺=-rEa*3krՆN({ٵhNMN@uuL=}Yrwn;;dg=v,Դ[5v$Kz~X@"4-+ET0!Au%"0Sbr7y YbӧOijh88:ֻS՟?fX!Kqi>_Z޽w{ر'Oe}||(o|0N#`Ndz@miʤC/H;>g^^7Wg2 :u0UjFMlRΐ(M,~_E~c"㊪_8%%' \|Qy+;Z7/?IEEO>|Z[K˓dРC ^ޞ-yo۾mر\.cǎAAAp/,4Fu7_+e;U> )w*_=P^ &-Y;~ͫWi`hhjնȭ—u}1gϝʊŋ)))YqI|s"m3Q"//_PP`u q3(((oۅHz IDAT%nno[}GG{2핹ٗ=w-\"~~S(ׯmokgn~H45,-,&LЪfeeo"bhBp|2_/,(ֲk ,֗՜E;t$k׶lټ{.~Ƚog~w(hVg޿hfu )^2hqOVwRfþ̖/_27J(3"DIBݳgϋ^/ VѓBHD_W%NFFFeeEϞl6ٳϞ=[1P[ ŰNC>Ĵ[)Ek*~uI֓GЊ <+Al2j(Q"[WTΦyAKRO6皚ZDIYeә wRr.p!윜'KPME^5SSUgBAȢITkJ Ǐmmmi4ZJ^nȏ"**+I`E !00pϞ=fϪߜ &J,J0QX˖^ZZ(UUUI)(!:6Hp_ | +22gK>J>J61Uj 4BHMW"H?#~,l9yFPU-1o+WLLJ=]%e,0\8G@=9L}$䩓+Wz,Yҷo_BhB```6)#IĹ 'J%xzmYV,D .!QHS3096Du?^GƵSߢ~[S!}!]ir+WlJCb8r/EMUX[܀YwQPPؽkhڈt qCұ|F;F#\I>}D'~$GKth6oώ?}j0%h"t}ta=;H:P5SLUI{$U[.$kI"Pш?>C@} =zbZuGPS°I!@!B!jC0WB!B!i-ׯt?/|B!B5JZEْ!B!B́spB!B! 1pB!B`] B!B!+A!B!s%!B!B_P 6pxǸ\.rϟ?K2dP;GO-B#JJJ !B!!H$BPT*P(%JC03$9BGtCD!BdHRT2,(!6DJJ aB-H< B!\ B! %_P(t QB$;B7+8B!H$)Х DpBH*h{n B!BHRB]b VB{H< B!$5/NH$ 1"B?z-B# !B!r%ҥBC=H".B!a] B!B- ީM/2BCsU}w8~MLͯ[F$/B!BJ+GF B}Ixh9:\G֫kcU5~X!BN*B y J(ZPPEﻯ_Br*gq[hl"B!BZ$wEwmj.|˼nu%kt紫y̶څB!P"~%+1ъʴ@JJk׮˖-sκ]reժU/_7o^HHh]UUw^sss?~1cD{NܻG߈|ϕ`B!P">X ***Lhff&鈾HII6mÇmll򲲲D~˗忤F0JB!Bm .QTEE#F;v֭[̕p\26hcc]vڵ~z H$Qÿu%!B6gTo񅆚@NNmjj*񨚚ڡCwޝ⢫۵k@nnq UWW@ddifΜ9hР~|Ν;wﮣQTTHH={LHH?0m4MMMMMMuuu99/^ݻ̺tB\'GFFN4iڴi}~H,Y$,, ݻׯ_?==QF}H͔ lOA z6B!B5Ju%Ul.]}v.3uR(xiFF9r#?|pnjs1~u-[ .\dll}XhwСäIo߾zꆢrpp9s݌3ˆL:D<гg3g߿ƍÇ?~<\~ӧ~~~7o477?~dd͛z())ݻw|߿O~~~aa!eǎ;wڵÇFFFԈ r{^S\t?27n=z?1d2gϞ~iiix̙3JJJ͔DM qgƏrcbb&MD3&\.W@gϐł#=p2J_m%B!B}Mu%H >--^z%$$ݒUWW7:::33s:::>|HťKRRRh4A:tСC>D"͘1cĕEFٷo_Kزe{_gffv+WDDDٳ׬Y#[鉕P"~~py?)@n.ځqD񳍄bG!BV+AgkkqWQQqź\zF__֖lٲf._|ƌ J^^FUWW?~`N<`0JKKckkK"㓒f#G_IMMMOOo+&LhѢHFqȑgϞ@^^ޝ;wM9.j:~D\Y\טsq 2u_c;*=`] B!B}]ɲ.uE6vm)YYӧO+++&&&fĉ򞞞FRΝ ޼yɓg͚N8ѷo_ qꥬhѢ+((899=zfuԉ&*** ??Ɔc׮]My|w``M6m0aBIIIǎ)EM$(*ӄ %G!B!Ԧ/K{*)**"6/(B"+ooׯ_Ŷ՛(iHs[ B!BJ0$VWW/]tΜ9(J`] B!B-~%+== vk&&J,~%/^tuuUUU޽{pp`dqZjlC+y Z5uTUUնn#B!$f_JS!ĥK077C(c?пxl#DjÇܹs oniiY[[&;;;""۷/źrJ݇*++oݺUZZJt5.^heemB!JB֮J222/_ݻwoذ˙cƌx ,,,33qttvZ݇M>{{F!Bg ~%!Ըvݯ$..\RZZ?h``pA###pΝZ&Н;wՍ>ƍB!º뺒֖t _3d۷oۻ =zuKKKqB!PJB֮@\\\Cl߾D"@߾}I$Dos皙)**;vLh'/֭ڵKOOJ:884tD6DxѣGpuGkjjݻ&8爈33+VTWW nse۷o[ZZRT}}QFIKKYf76B!BmWsp~+8JB"QEhDq5Ɉ#~w_~JJJ<ػweˈ܊>uttFill\PPWTT4o}?yٳgSL/T^^ޭ[7~;p999}3#K.ݳgϧOH$ O>#6m7ox/^|QN=zŋ-[&üy9D*++|3~B!Wvݯ#{{ϝ;ӧOM|iWVRR4iRAA555MI;˽y&hVB]]]?}'J@^^~ٲe)*4{lxÅ333D B!j_ BHu۷,--wann^Z3MD+x&IJJ6pUUÇ... r0xQSV70XtiݟUjjjKB!+A[{+xC*++# q8dT0`~"99hVB511?zm6xf  2d&FB!PDnIA4ޯFEEE~_U[[{С .ld}[Ž^ -222}ZϞ=DEEX,7nOh555IOOf߿y۷:t)22R0B! 4N#08\5J P<>Z"Unbb"8Q{TohvdȐ!}MNNՓ'OׯBr[+vZ``;wJw]\\ Y,ӃF9uT]]]ii邂b&^dɂ N8tҾ}&$$uE!B6ԑX“L&x噑O8'QD1#H<.?x<qn! m#ԚYdIii'Oz|]Ս:u/d29>>˗ ,z?cƌ&%%5agg={]r;A!BH_-xO<oB)//ٳg悉]773g$$$TWWTUU----cǎU`8g!BGdTeI5$]?2,xx@QbBB;CꎴM#f̘Q\\ԩ|dddZJ$7YXX=Ꚛz1KKK@ZZ`̚5ؽ{ے"B!B]jNo&/uOp#bQW"0BjDTwt}="辡SN3g /..yfnnܹsǏ߬O>ݺu[reuư7oK,tss;wݻwn:`BP]]%"""..nѢEuo߾1cƄz*22SN=QYY9w܈QFu%///** BCC[B!r%eo-]n;? RcJW]+uVLLLtt/\ܿxxxnF"Ν;7k֬M6x3gÇ|g͚bc```mm-++Ʀv!C}NOOۻ;wNLL\|իMLL͛7k֬N: F"''GPC%hhhܼys۶mt:SNC 300WB!đWW9\ף~%&zd-ŋĨup,Unjj*8Q{upTUU%"B!BgE-֕ BJy@ЮJB!B?z(6ޯ<{F&H". @`%IąB!BJHkߐ[$S!ĥW/nj:DۿG$B!B`] j֕Vu%!B JP+A!BeXWu%`] B!B-j|۵kWBB !AAAÇo7C߾}/_ܡCITu!Ih͛#͛k'YYY;wla0Hl#5:8=tI֒!BHbɕj]IvvԩSǍw YY٬|SNرc+Yf툭7\Wht}m^^:PO#!BJBCC}}}zիWvE\M5rneeռ=7ϻw^󈡮L&d Tj=FCju%!BXddddffNLDNӯ\wލ7~ѣG>}uֶ_F!up>|0bĈܓ'O\֭[p#F}?8<1~̙-[>}:77w…>>>?nQ :8!BLu%tttttttrr///"Wbݹ\ӧTܹs_~$iԨQ$JR(7o@׮]:ɓ'544ƌs.h"YYY%%ӧ[:99@x<^xxܹs555SSSlDrrrp8>|<9s̢E޽w^DRu%ǎqvv33h }\ºB!P[&~%;v|=%N#F+++ikkXTTDP444h4 b2ܡCBٽ{u۷p{+V˵ ߹qCZZ5>>Ǐ666c%urss^C]t%no۶mqbWR>fݻ'MLLwJKKq޺!j!WB!jĺN^T}||H$?A 濼zhVV[[guuu`:::QVVV qqqۡCAGX,Vuu5$;X۶m6l&O~:֥FRo޼)+++ի,Ybnn޻wx$D KGG';;Ç"':88F:8!BXh 69s`TUU6lؕ+W޾}ۿRÆ `2l6{ǎJTVV>|уFq8z~bfׯeddlll"##lvQQʪٳ^^^r.]:o<~1էO.^񪪪4srri4Ö-[jjj8Ν;wX,MWZodۖI_oLL͛7իW:uvvvo߾%f6}ɓIVZ.\6dȐֈ+A!Beb+ggg={]F{tСwˤ͛7>Bج^Zho\.wÆ AAAZZZ_[7nܧOƌrvl2Xrexx}NFu =<<D"ֱٳ7otuu333uuuΝ;ϟ?x***#G:uTNNNh4.ܸq`tUUU___ii؂cll{wnnnpՄOO^z=|bzjذa|_`¿p>}4}uY[[kjj?~Ȉdnڴk׮mRRRn޼'+++"9a(++l(++WTT`?rrrEEE T*%hdee>pD"yyyx2UUU333ϭ|ٳ3KIIR`aaq"FB!8+A ºJo] ݺu533ՕF%$$ <8==}ʔ)@mm-y;D077Ą+))۷btRQQqi[[[]]]߿077$vUYYyȑ2߿֭[?nddDyzEPdee;tPZZrrr^zՋd;vĉxN277'H!$&&@lDjG&''?{F3JL 911K..~))) iӦIKK*ڧOѣG߻wu=!B +A֕Ittw襤LLLbbb޿z!Td2(rBkx͟?ٳgvvv&>t萿@]]sϟ?/"~dro>"~XSNm Bcccڀ={+O)++#nteee"(???"Od2l6QZB |/_LKK "HVVVׯ777:!HD Di N'f@MMMRRRFW_Iq~MNPCѣGrrrk֬!xbKK7R(SSSr Ɍ"dgg7a„Ǐ߸qCNNnʔ)MYYYlٲJR(___YYYKt rĉUVh4]#ԻO "TC"T=J4%~xD!jHt:]~w_=/aTs.\r J`M\TmCKY|5R"hjB|~t 4qW8f͚ uuu>{yĿ`B!i 50D_",mI֕VJڑgϞuܙH͛7$B!^u% }|[&Laϣo\nNN~ºB!P[&\W"x["-苷91<$I|JP `] B!B-E'x1pCiq$+-jvB!B'\W@gÚ?Ȯl V-ZV[o*VZ[mrݰVڪu[ōֽE(("( !$Tk|?OfNfμ!zzٷ}||>}jiixbPܮ]p+#F9;;ڵi ZzuHH_PPPUUӾ{n///[[۾}^vi<}U9~_VVV-//O۷ooccs#""zڵ:0-'ONmݺ>S8lmmܤt/_񱲲p˖-666C-++#TOOO+6tѣ...NNN={y󦹹yYY_u_511QvO?~|ܹi'O۷\.'#Glܸ166h޼yBp„ /--oU94H''ݻ/?lӦMzzzvvv=FEE]r%&&gϞ555>$" /(Ns )..>{ ѣG\rÇ_rENw…" ͛74ȕi:WDDl``0cƌL;;Lwu?~P ?~<'aÆݾ}~ŋr8ݻ9sp;wQ.]T94+yLMM,Y,HїYUVnnṉgΜٲeǍ9up]駟?^"$''; }A]])nhh0xtRLLLݻgee|`3MJbbbܹaÆ'OxB%%%C ۷ nعzj׮]CCCGX,}ܜyѺuj"suuXZZyfooox 04+_jjjnܸqر+V/7;;cǎ::#/1c {?...tccci˖-%%%nnn!io&&&@.OޥKEݿ_n@«CL'N\t)%%%%%?􌏏W <<<:tI˗_zu׮]͜6''G@Dzrڵkǎѣ7p@\DWWuܸqW^%E_n۶m.߯YFzL@@K}??[n?> '[[s}wǏoȓ'O޼y3===...$$DUBL'OvᘘTUU=yD f BJؘΜ9S\\y'NbŊlD>lذ/^\pA" BU~JD"skݻ'F7rS__aPXUU/͛geeկ_˗kNAcCnz~~~-"E_cΝ;goo߽{\| FQTTDD,5 <ۛ;;:taԨQ˗/OOO 433 ]\^r%fJɥ$IH?kVDtauǎU.h%"M[ 0u1%},i98z%Т Wl[Dc@KJ͐++5A P PJ͐++5A P PJ͐++5Aج\I_w"JOȕ WlhdDȕ+5Aج\6~݈kg[0J@M+6nH$,3H$eX,&ՙ?jFВ3AEu[OXkF]Dre:X-p timȕ Wl&+}#:9hB`Wʕ׬Mtimȕ Wl&+ćiUU5u$XDiJ J@M+6k4Wr$Ģ?8<6ŒM0M[Wpti:h݃l~mJh.x)Kr-ڨ HngDD$s 땀``3Eȕr%cVL IDAT6ȕ)+A+A P PJ͐++5A P PJ͐++5A P PJ4+pj5X$;;{ĉ/^$"ssҿaPPÇUR:̟?fݺu.7"`3J@)J޽;`N:n߾ͻe7oeggGDDk"-@،q,-+M[,SN1c_|l|EbXGGtQmmm^^ޫR5wQ84Y,Jlncc3tв2"JMM\n]@@?왝=d}FDD̜9>$ŋ %wa Yݣ=׭[fii)o4+sNFFFDDw/_cee%A% W\aee5k,~gƠ5k}Dtҥ=zٍ5"##o̙󎏏ρƌ2:"Olmm;&{"Pܮ]pDgϞq]xyŋU2u`WWWٞ {ss!C344ɓ' ݺu0a|ܠ$whZ*sM:t`oovZ Figg֭b+6spx<ޅ ,,,6o4fgg;88$&&>~999)))vJMM-))?~Z?>i`4777&dѣG\rÇ_r}YD|/%%%SN2wcǎ/۷`ћ7owvv^hCll짟~zGΝ;7++K$fff^~k֬![ܿk׮gihh{nzz8iҤ߿lԩ7o477/++믕UrԩK޿ 'OLNNvpp?>M4iӦMkӿCRûvJLLy OF,2`…ƍDX:+qttԩӤI^۽{?qpp]lsӁH$ڽ{u]]]񪪪tuu=<<`/ J :88 <8==]%Hmfee[PP0nܸ={tҥi!!!fff<zљ5k֩Sح[7"rrrzyxK.\f7S]3G5eee%-R"幹~vؑʲd=z$a4a„gϞ@*3;FFu'v֭SN/^e&N);j\.7//O ?ٳgZ>rɓ7oLOO ifOSSS3/Zn]]]ͼ~9s;n̤=3Gmۖ䔕=}YdҤIcǎUg~{h WһwoDWYeaaQ__/]FꫯʊTؕtj*<!!/766 x>}kժUvvvm۶e ۷o_nM>>>>>9/^8881??O>MUXٳ홣 bccmfkkˤ'^r%ǎ[rsd"Ν;m۶uss/'vmddԽ{:ܾ}v9uԁyxxHVv ƴi>cKKO>yBǴiӌkֈݻw[[[[[[_zÇ+V066={lz`9 k gr\"zme|>\rx'N|l?ʎ9r3Ν;}S4^IȀRiiiM~ݸqy=ydfM"5kIʺ߲e˖-[(''3KmV./]e%z%aÆ5]ӧ̷F,"266޶mlʰW^?_qB²|ݻ]]]?.8}ӧ7Lo5} 6lذAY%LJ=M6Mn3f03;SNNNNT柌ts ooc/IM<|P$5%$??m۶FFF̦SUU42&]&3Ý71);C__yallt%V^WSScمu͙9n"200 yw9¬Lsrr駟E_>((X Hw|]v%%%W]Qaaa>,--8qbFFFel༺jHQFᩩѣGI:\ [ii鯿* kkk/_ަMΝ;k$5J"""Ǝ+cKKKEDC eOf]Ç4͜B[8pɓr)kkO*[i/{Ξ=,fLR {%KFsggg0۷>(DGرᄈٲe˞={T"Uz%###cccxEUUUcǎ0`;nKX4@,X]v:uȈ$+p8?cvv"=z333/_ά5G}cǎK.=<***77WQv e,-----+**UW333[x'OΟ?W_Vg=z4Xo3KYXX>yDv׮]H$܊1c^zСgϞmٲ%''g̘1{---}W_}ѣ ebbccckjjܤIVQxKs%otɁ2++j˿M7\I3wKRͬآ ǒ\gnnܐ\8qbSN]lq\===Àhʔ)?4iRqqsڶm~~~KHO~ekk}fee5=A\\\xx-[\\\֮]+ ?o>OJY.\pQQQnݒNttt>Ӈkn^^^|?wwx33/^߿̙:::ݻwOJJ˭(<-ZrJ===???#u؆,0YxH"!$?64#]:v쨭rA$/s)+RPP?͏.ek ,(,,lЀi0WjJ$y54os m>~LPv,( GGPwsӦ56WJ@MԲ^.54P|zZ""‚?&A/^PvTP@DDϞ efR6DDOPΔFDDKׯQa!C. Z:9L:M땀J@T^ YC\.54UVCZQm-ѣGP9Q^q8djJDDCm[!kkbLp'Uiڴyt쬬PFs%}ۛ^~L>WْJ69\6m^uFz|hW_&hĤѦEM+F5ttl@m݃3=!W WjJT\mL̨˼ .[0WjJT=86-zukS#h +5Qz%(W^' n. PJs%emq@ې+5Ar%u 5]hr%&ȕJWWn-ͻyCD,&H"XL"@`Fs%׫+'?LH$$لL69\6m^u{HѥktweDDii6ꂷ±$עJ~QI8K 땀``3mȕ!Wj\ J+A P PJ͐++5A P PJ͐++5A P PJʹ+ϟ2eqǎW\SJh&W积ߪU+77+Wj"922r̙rs]bVgCLӹׯ}׮]߽{7.XKcӧO?{۹sJ6CLӹ)SL6/h׮i޽ ՞TEcjժG቉X,VyA[+6h$---===""B] XZZ޻w###.۷ot i,W2zhkk뀀#GDݻw[N__uСs>r:|1bXM8qŊ$>>>==}ذa{?xD"IIIa&f``3WBDAAAcWaÆ(-{{{++>I,HEEE=z};v8&&f֭?~|A+6TVVJ7:ukeeX 6spC͜^ƞgm6sp4xh98e`!WjJ͐++5A P PJ͕tomB\ PJ͕%B\ r%fJȴg bC`3D"dl1\"0b5QyIvj-i?3d[Q%m@$+QKt{Mچ\ r%fײ>*O h>ТW̕Tg>Bqcƒ%"Kt7rRRD_X. Pc+ϕoސ~_H(D"pHXDX"+h."Ժ$2) nd#mUo1s8D~ti:h݃#fNݖii6ꂷD-ڨ HnDJDnɰ^ +6iڄ\ 0+5AL\ r%@`3J@)J@M+6CB`3J@)J@M+6CB`3J@)J@M+6t#GT[dd̙3U{jx]ɕ憇M6M ߹st5jtܹs 9$J4+:tロuΝqƩsP9 J)SzxI\ƌ3^7ׯK7srrԞ={aȕi4WYYYnlllkk;zhv*\I^^Ǎ׺ukKKaÆ1ҹD"ݭW^7nDDT__޵kTG! r%f͕8;;K$6 °0ggvڅ7=֭[=<O>n"w><**o߾ߗܹCD7otwwa&555#:O>SL)//oŋz=a„7r%f͕㏳f d޽믿&&&rȑ;v={6--ڵkD4gΜgϚB\ _f_=sL˗߿w^"zʕ+\2f̘k2innnՋvZϞ={l޸qԔ\/]djjo>͛nݺW~WoA!J4#FiӦ{111Dd``0cƌL;;; ~XhM֭Lr)"r=ګW/fgϞgΜqqq122":.[__ĉԤH$.]x<:Zȕi4Wbjjzȑŋs88 &={arK$u%**bbb&LG9j(V4+122_6mDD[ne4iW_}խ[͛7_3fL۶myW{zz b%>}thhy׮]!"Xvڢ"33ٳg[YYg+6TVVJ7j}H"D$RKDر͒DDŭ\KAAf0Xȏ.[_G -o<Z <L ƞ- +6CB`3J@)J@M+6CB`3J@)J@M+6CB`Fs%=} x PJ͕p5++5Aجqd@m=}9L .[2J@M+6nH$ H`XLD¼盶ѩsکi-ڨ z qĒF-ڨ HnD6)\0-vYFxm!"J3$/iYmϕȾQ~aDt[ՁV!Wjp,ɵh."JO[VHKmz%& +ϕ\(Y}UHH""$b@`Fs%3J>ȟ8" -+WApti:h݃h*5DI4WҴEu[OXkF]Drs%3JH-+5z%f:+"J@m+6S8W\ !Wj\ r%r%&ȕ!WJ!Wj\ r%r%&ȕ!WJ!Wj\ r%r%&ȕi!WrҥbȑiiiСC,>|Xٱs522=ԩSە4˕dggO8ŋxyiiP CLӹQFeeeݻwwywӕ"##ϟsh&Wrt)%%po-r%f\E) KD"ѬY)S0-s)))Y`A||>}Ʊc$&&yyyt0G,7myL:uƌ_|ٯ_7XNnrD^ui4Wٳɓ'6N>ٳՇ xd +W𰲲5kl'?KAA|U>sP(VQQј1c\\\ϟ_WWSKKŋQAAȑ#oݺED555~cTa% JܹuֹYZZ2(#Fsvv޵kgϞիwrr2Әkmm=nܸ7,T`3Wdttt ˗_x_-)):u=%%eܹǎozرc-,,m&(|}}333_~5k͛eee_X,2dHAA… Ǎ'nZ__s]ݿA땤ʵڵ+55dDǏϝ;Jv;wL6m޼yD?~7~ϟRA^ Fs%BP%mXDm6+++OOO`ܸq{ҥc###WZiKrr@ 7o377_lYttQ׮]khhp8"(++9;;';i WRWWg``дUUUzxxQnǏWTT*ݺuѡC @DAAA~~~oX*r%f͕899eeeD"|"R UZZ*NOlڴwiX//ХKʞEXRR"wT^^^VVK%%%=>}Y[4+qpplϪUG<ի]v b=5;vСs?V^^^ǎ;aBȕi4W<(w 2D__uLT,,,ꫯ"##?ҥKܹlHo+++={ֿ==UV-Y?[I޽{K$7}kҤIcǎ%˗_zu׮]rQO.XҥKˢEF33r>=zRA+6hDOO/22?)//߸q}V^MD;w?|Ν;G͚5R(0&&&Glz, ŋKTE"ƍBaEEҥKPLLL޽i1bDtt43Ex7,T`3J(44tϞ=[noڷo,_< &|󍩩gϜ9#mwvv>|g}vܹfN=uT;;;浞^\\{ݿ3fQXX͛ bccmfkk뛝MDiii;w߿KqF";v={{{{{77իWUTT 6f;v 5k̞={РA/^tsszΜ9} h۶-ثW9s{<}߼TPJ8 ;$I"y!&ZCdxC/^;wǣBBBT-%"bVk)((Px?͏. -WQs%rZn}۷,4_vVUJR8ZQ++ izxhfh^ r%r%&ȕ!WJ!Wj\ r%r%&ȕ!WJ!Wj\ Yl` Wj\ Yu!"J\ r%fJww>0+O'[#6\ \ȕ WlƕݐH$: (H`XLD9ћک/xmF]S8ZQ\D/N& Bzh46J@M+6ϕȾW|DD4DsՁV!Wj\ +J>|}Mچ\ r%f .DGG?)/'"X,!b/Rȕ Wlhŋ35.ZZ*s)۴E{[L! G=8hDI 4WҴEu[OXkF]Drs%?2-+5z%fJ PJ͚{?.PJ͐++5A P PJ͐++5A P PJ͐++5Ar%Ϟ=SxISQQQ'N566xkU \K~~~Mw077/--m{N:+Ar%3gΔ`駟zYWWw0SN)))۷o766տtm\ӧ]?~|֭*4`7ʕlܸ155Uv䧟~={2u3f|vvv~K8qɓ tcgD,X@$̙3###\OD999 4h Yf9;;GGGK?Ν;]]]S WiӦ:ۯ]iȰ|; Figg-"Olmm; !Wl133;}7>ٳg?~\D ʵD __ׯ߾}{͚5[III+W~M/^|ʕݻKBrrrtuu^z});{qq Ν;GD .Ȉ?~NNۍ7A̕{ڮ , ={,\ё.[L,$,,lٲe׮]khhp8"(++9;;|jcc3w6m!က`9B &n_bŸqׯK/wܹ⟮_J̕?~<~u;dk׮=y_5~x!o>~'H֜?611i޼U*iӦ"?4o|X3yxxxxxhH_gҺ9R2^u;9J˗/O0AwSJJ;ѠA)S ! 2|N:]remڴС۷?OR̝;788^ߦMֱcǦM;vޮ]VZ]pAW +ׯߦMf̘aoo;n8OOOuj.XrU*ՙ3g\]]ׯ ;v?hooo>9wi>>>NNN!!!B1ϝ;ϓ'O{=777gg~_Z@q7lذVZZJ244ڵkqqqΝϤMO✜ڷo?k֬'Ol2**Jڵk?SDDěo٠Acǎ}''O.={|'N >}>>l`~РAȰ6mZff˗3eʔ͝ujcǎիW9rNiѢE^-[hѢ˗+VѣGFFFHHfk׮MKK &33ǏԩSgZ[SSSSSS7nʕ+\RM|%L5k궟>}:77wfffvvv:z;:: !:uԤIƍ !/]$ХK!o;l0!Dǎ/_\TTTJo񆗗{ϟ-GT_~^^^!!!*VItt̙3F+;wƍ 8aÆлwo7nXYY]zUkQlll.]࠻UP >\Pcffr_~ӳ_QAq77k׮T5ԠA{ZZlcc#-ԬYV#-}饗̄jW*lgg'-XYY=~R?f\u좰ݽ[%cǎBTVZ !ԩo穩zEկ_%??_sJ;vÇ7n\XXhjjuII=Ν;~~~?|1U.tռ6XuEEE~!C4۝4HJJrss3 [YBBn8::FFFvM133sΝ]v?~|I>x`ԩ/^trr~֬"{wE33u޽[p}b177?)S>{K>˨KZ-ƨ |%/ҥK'M7dgggee>|8...((HTFFFfffΙ3ت_hDaccsƍ|SSݻϜ93//066V BU}J۷… ܹ#8{+WSN}w-[,MLLT* t#fZEXZZmٲSl?Kffmf4?T|%L!_YյaÆ ,077777ߵkױc[nݾ}1cT 0 :t޽7~Ɋ+ܹS~}oo;vh=RVGզM@77ӧO'Nx?!DppSԝ;::N8M6;w[VoVڵz-=Sb9|ƍ]]]㏏>_ڋJșBzӪZ?R$^ݻBwW"UH"UQbQxN?.$D``2͕@ TJș+LfTCW@ȕDJ'J\ \ 9+Ļ U rV\IA͸Tȕ@OȕJZtUwz5 P( \ \ 93\Ѽ\Q(*JEsz3Wo^HdN= y͑bGPU=8Z7v`DJ'JYr%1ZU(ȕ@Oȕ̕a<@OȕUz{p=!W@ȕD rF%b<@OȕJΕ\}bvc!W=!W@*3W8>++ g++ BRhO>:D)TJzEXnn;W{%j^ kOHNE"WPvŎ%cBTd{~zXca WDSB @OU{phzȕ@OȕJ{U rF%"W=!W@ȕDJ'JșLs%ǏWׯ_ԓ +qvv˞>}I&Bxi` ꫯ[Nݾjժ;99M6͐$443vB33(777}ڪ@ѣey޽KLLܽ{G}ty!/lٲ_~… ؼy>.ȕ3Jtz> R+IOOaw~_FF:uJvڈggg;;qmݺU+Jً+B٥ !BCC,XЧOl!DDDDTTɓ'˗/7w}wzCovuu>}J%v/^ܹsg__^5v~߾}Fý{lmm͛_xQt;;;jHHHllt;vl޼MnܸѵkW''mN0!""B]ܹsϝ;wȑ@'''??ӧOK>|qРA3\Sȕ&Wi޽7n355]fMI3&55gϞ=s̤I XcU`\IJJʅ Ο?o޽[}ǡX7npss;t͛#"">+V####$$.^ح[7!ݻw֭+שSedޱcv9iҤׯT>}ѻvR蘚ڸqkצO\PƍVVVW^Blٲ%44CBPu%::z̙NNNVVV#F"-/r%TsErEDm)#C ~ǥٱcGJӱcGCTVTd<^kժ%-;99p9;;>Hڵ˖lٲO?ݱcGfͤuu666>u떗ҲzEկ_Ez֭[՟4111<<|رBJժUơuseTw/dDG嬬,uP(/bҤIaaa˖-KIIIMM]|5ZYYyxx۷Ok>v'Nر㯿ٳg֭6o\TTo߾]|B!=b.gϞ111-Cҷo߅ JgϞrJ߆|0_ 9o$$$;߿aÆݻw,XЬY_oʕ++*0L81<<_`ANM 6<}t׮]|ɓ'iF.IppSy[FYڵB;[& ѴrYfo믿nݺ=444**q?֭[,Y"5լYS7GGlj'iӦs}'NإK}RQڴi6}hFr%L0B?lZ-wޕdP_Bx}l=xxHNN֜J7n|3|-ZHT7)}tHՖ|s%0:c ۾}ǏJ={ׯ_?cWdJ aރS޽B4jhƮ8x9{^/Jj>(믿6p%TXj1F] ߃3{pP rVJ,yvh= =8ރ@ʟ+eZȕ@Oȕ Jty}*aJ'JYeJP0'JY߃*==8\ Jx+ gJP"\ 9#W1'JY%J>4΢rK++ g+IɎ`DJ'JșBPT-'d;IsOTBVu S6 yPFZ7G]ƫ@uԽ_z5/r7^R RڪZa`5+v,i."2O(4c0 +0_ 9+|%I'DzF|%+ g{*\ \ 9{pȕTiJ'J\ \ 9#W++ g2͕?~2{3L$ igg!?]Ʊcz/R&M7oڵ;p@OW͑+ g+j^.+n{<׾}ڷo/*vhѢ_ݻ/tuuB,^wٲeIKBIKZ-ƨ mr`JLLLLMMMMM+rcҲK.8?ٱctDQf?^^^yA)ȕ3WrΝ;;;;7l֭[Bŋ7l~ƌB(i'OI'NhժUzwbB5_InniӼ]]]CBBBHHS֭&M/^ܹsg__^ѣG#GtuuYpb…}_ԭ[߾}{k׮-Kׯo֬s۶mO:%5٭XG^^^ћ6mܹsƍ-[ƍ񉉉War&\ĉ铚z}ݺuiiiaaa%<`˗'%%yzzΜ9S+[=8ӦMyf\\͛7URӧk׮o^n?Í7:y戈KѳfR(oV˖-/mn 2DؠAk׮)/^+$$СCeȕ3J⋴ ._\ѼyݻgϞׯ_/[n}7YYY*J+x@ W@+9p@~~4MMM[n-M$ѬYH5HGgƍ"55]ܪ(󕘙 8psСz֭[߼yɓB۷oo۶,֪USN3g,((HMMnvڨQ;u1nܸΝ;'$$L4=2d޼y7n(**ڳgŋẉͻw>s̼؜|\ 93\WRi|8 !88X4mtɒ%aaaxYc{Fd\8pYfΝ[pҥK՛̙sٳg߹sGRYZZzTr%{%3PH.-O|%\T1=ʕ+G~葋˔)SBBB4vԩSNƪњ̵eTwJP*+7nܸq] W@Qރt[ԫnȕTm5+v,i."9#WR++ gϕx{ݦ WR++ gzMG&ի)o0* gϕr`DJ'JYr%fJ rVT1 rVc<@Ox9#W1'J=!W@ȕD rVɹ+X̮a,J'JYeJ'Wz}0"r%r%TsErEPT*GR(J)T+ x͑bGP=uD^͋a ]IH \>>VSjjj_ySNL6mر7ox֭>|VcvgϞejѢEk֬)eEIˡ/^,GAjh^( JRRG+pppptt_|!* 6o߾>|XU*U5_,ZLLLͽ|||u6bĈz=o?ehѢ.]3&%%ϟx>֭[/YDZ 5559rd޽ygΜo iK!7olڴi)YZZvEZz~+AHx+|xxxxvZjuiÇ;::4(??_cv7n|aJzdɒ3f̚5vRJ4iKFON6յB}.\PQPP/;W*v8q{aeeu !Dhh ~Hwhٸqr[ԩS;vtqqiܸ Fqد_M6͘1>++ؒ4i"pvvNHHСCN/dܸq>>>yȕ3W"pppС֭[5k֌9R];"##oߞ2y޽{߿>XbE=222BBBvرz#G?ԩS+9s\rEZݹsɓ''OJ_~姟~ڿ*Pk׮ŝ;w>B333))AgLKKBM6۷ T*Br͚5uHKKڵk۶m.]z}uvvv҂ǏOJ~\EEE/_nܸ3e\|0}t?\ݨ!>|njj{;99I &]o߾ffffW^:G{.i䨭[+o>VVVIIIZU6Bgj-X鹹M6Jݶm۽{JYVȕf[WsJ ň#qMҬ jRR٭[7L'ET+J܄&L;wnu/}.]{!DuԮ][ݕΝ; 7oן۹sgBB¿֭[w5,,Ah -[[n~~~FF ==]+|嗽{4i/>¢[n_|,yyyAAA%Tȑk\ɓ'OL`33͛p~iJ={4338p㳳 ̙ӡCk׮]/իٳN`qܹwFl2;)V#g/cMܺu4ȥKVZfccsƍZH977ܼ{3g+,,)KUFGz!D:uz9$,,l=zpss[bŞ={փ---O:5jԨ6mM>kc]ڵ{۵kwQ%v:v옻{֭۷o?f!g}6~N: 6j񮮮;wvuuU&L8p@vN\JU'NҥKpp}JJˁO>t萔㏓K.?111{-td={V̙eC;w5kVpp o.ݐSNӦM5jf͚1cL:zƌ۶m;s);vy___''h)TGN)oO޳jib WR++ g++ BRhoٱ~իos0@i)vt:]GaZȕ@Oȕ Jty}*aJ'JYeJP0'JY߃*==8\ Jx+ gJP"\ 9#W1'JY%J>4΢rK++ g+IɎ`DJ'JșBPT-'d;IsOTBVu S6 yPFZ7G]ƫ@uԽ_z5/r7^R RڪZa`5+v,i."2O(4c0 +0_ 9+|%I'DzF|%+ g{*\ \ 9{pȕTiJ'J\ \ 9#W++ g2͕\zwvvvz̮QfɕiF1--r_]zzf>f̘J?JA1Wo\~4hPua\ɕ+WO͖׬YR:={90炄\ 9cڵkYYYcǎvvv0`3)***ŕJ*WՅ+ V* 6o߾R:&͛\+ gr̕xzzm޼YĉZW^~߿/oҤܹs'L0l0ξO7nOLL)44> J+*2Xd۷o葴ۨQ#i5"""**JZ>ydPPx Ϙ1CcooooooccS~#G:99>}Z&L )((2"W@+y7l0nܸ>}\vMjLNN0`˓<==gΜ):::FDD !ըQ_״i233/_gϞ)S$$$HGٳ7n"J:tuViu͚5#G,}ݺuiiiaaaBK.edd4jhʕk׮MKK |nHTT?ܼyqիW/Z~...RHGM2ɩҺ9R2^uҫy1l\Z=lmm/]0vkPoѢEk~~YBBe)G$=*@P1"::zǏdii$++K>tA-Zhqqq#FX|SNx񢓓k֬>|x-tU (v,i.B;wnŊ999111999}ٸqfTiCƍ?Si ssݻϜ93//0666''Ҫ 6_dȐ!111~~~͚5;x`AAPxׯnɓ'BytE!??_PHGIV^o_tG1_ 9|%;vqqqYfͮ]ԩӴi%K9;;[Th0`o*XΝ;ޱciGXDQN^z9R 6 ޽Ԙٽ{w''S^ҥKK.ݺu?^~'iӦsu7ߜ:ujϞ=SRR*#)4jBC!EZ޽-䴅J%TJR U(R RXBy$Їgdi<e'G,s% JP}+ gr2aJP}0_ 9#W++ gJP"r%r%7vJ6r%r%9#WR++ gϕx{ݦ WR++ g++ BRhiѳIGjJv+[/ yPFZ7G]ƫ@uW<ڿ++ gʕ*aJ'JYeJP0'JY߃*==8\ Jx+ gJP"\ 9#W1'JY%JOwa,J'JYeJ%Wz}0"r%r%TsErEPT*L>w$^J^JTZnn;W{%j^ kHxdJ*T \++M:;;dkVhiiciNZR7~u7խ[W}ÇBc !T*tϮ矛7o>}tjEHxWKŰs%kݼy^^{5''IIIB++GI%͛/5jj;ʭO>vT?YOvbC%B/]!ptt,KN$??Ĉ˗/}KZ-ƨ |%NNNSN(**8p֭[=*tҪU}]!Df~G!wܩ>ƍAAAiii[l)**z30!BCCO8q1!>d4HJu…իW2Dѷo߅ ޹sGq+WytR:+ gDm̘1֭oO5ׇn\=RI*uizCxL:G.^u J~ӫy1(GpVJIsږ^D/2^WɹDʸlno0^ +6kx%gfIp`WlA=C`r%r%'ȕ!W:!Wz\ r%r%'ȕ1W2jԨUV\O>dyyy͜gNJJJZ6˕N2E(ZZZzzz.[Uf׊3|Ak׮1cka`ȕ1W2xSN޼yyz̙P.vZWWZ(467o===~j={_j>݉'Nf{I!Wl\ɠAΝ;'ˉH*}IKKczP"1bik-j\ɔ)SNpBgggkk~-\eRTMdnn>lذfsTTT^Rȕ1WeaaIDΝׯ4rʀHg5QQQ|ѣ[C(j $===BatttQQ\.+(( :ܼy{MD~Zk_ m+zjNNٳK$;;ׯ3OtQffҥK\h1e#y˗/3)))qqq#FHJJ׿5~xue|#Gvvvvvv:tz*mڴ˫K. ,P*k׮?x𠝝Ç̙3}qqq;vlYY:޺uK(=z`36J(,,9ydXXXhhӧܹs={m4pE?QRRҶmێ=_=x𠮮r/^֭[\\ KMM%cǎ S*~嗒?k׮yxx5*{aڵkҤIm1988yzz_JrԨQÇDϟ0aBsλᄏnݺ1cƜt܆/#Jؘ+!A1#'O ͭP'o}"wܙ,YRܶm---\%K._, t̙ͤ3y|Cq8k׮Q^Zqٯ r%\.y\UUNDqqq=zرcѺvFFF\.WJOOdFFF "//oΝcƌaB+QQQ}%"gg砠 &k׮ &?~&&fҤI꾞W r%f,͕ |ST*եKNT*8d޽6l;rH+#A-//OTŅ RRRV򜜜3 njrJ;̐ B"=:!!ҥKDTTTy'Çfz B،"ƍ@ |2XT~_ts%AvܙֵkիWoܸP(Q/HSkT*M233߾;''۷oQppg}6jԨΝ;Jlll~~رcH.O6BM͑#G>裐 WW 0w 377ܹszzz޽WZ5qD''zu=y<^RR҉'/_\ QeesDČШD,3f$Tv!"麷 *l"H=.LǎcF{mu1>Jѣo w]xlA< r%f +y OOlذs_\]]MkRW_9;;ƍv222fΜS``iN0T78 R)GA*%~Ӟ4=78ЎiIf*J@'JCجfJ7ÎW+6kydf;r%r%'ȕ8Pnߐ+=A  J͐++=A،@-ܹs8;;/ZH]bmmmoo7QEE3P(pႮ>|x)|M$00G&K͛x3uԩiG<_u$33G_Ul+6coõ/2 {!?_t{Ξ=믫'-++;tPn݆ vȑFs:tYJKK^YjӦM2V_.Zۛy:gΜ0VA،"211p8D\T>|\_TTIKK 8K.ݷoߥK4 ~\xd2cccǏܺukIIɶmۈhΜ9G.**:~z)7nLKK۵k}J+b /^p8?\R{z/Zkcȕ7W2l0fy1%Grcƌ 2669sCh֭-rttر)SB";to21K,9qDVVktA"p\}%}pE622޻w/?~Ek{ذa_|GDDprssR5ovM8ܜ~+W?󺺺7iߐ+6coȑ#RT*\)qvvfܹsgvvvvvvJ`ԩLY>|LgIB7f?j@aaa]]>ג2WBD}Qyy9k+&Nk۷oge|ݻw߰a?>}z8]HSÑ;2bu+ӊC،>>>JcccDqzz8&FFF|ٲeQQQ?xմe8Κ5k.\(J;LJ=yddd Js'Nl޼yL?bŊ4[.`?߿j]C،=ztBB3EQQѩSh̘1+Wd.V/_|MfbR)KKK׬Yӷo_ccݻw߿|ՔRӧ׬YcUd6ΕQhhh>}v<պhܸq_~;tkK(%%snnnuuu̬lsu݊ߏi~!Wl2Jzjժ':99EFFG}`SSSf˗ DdeexbGGǞ={$&&lnnީS(w96Ε0V\)HZw47رc&Lxd?1믿&]vxxxxxx;V#F̛7/""޽{ZQs,_%66V.ʦhǐ+63|z4*xPJA*)lODAXЃgH*-ôWo`X/eچAr%*@FۏWWl\ \ r%fȕNȕ Wl\UPnߐ+=AجoB}C`Jl I͞&ڠ+=A،DrHT6-ќ*oh/̼>s8=>8fȕNh'ȕ!W:= Wl\ z\ Y+JLӝMӝ[`(ȕ Wl֚EVr%'ȕq4h^)ʦ% ^]*X#&R(H 3/R{<:G.^u J~ӫy18$_uNu%Z$BEDy|ZRC E+1ּREsJ@O0^ WRy^J+=x%f/tJ7J@O+6{ WҾ!Wz\ r%r%'ȕ!W:!Wz\ {s%SL ˖-k%3 Wz\ Ks%7o߿{zzzaaO?k\ r%1A IDATf'+FFFJiI5jL2u 0Oׯ_V]<fj9uvccի999gn'\Gu9>>ڵk'M4͛!!!{.3geرeeeD7tP''ݻ߹s~ Wz\ +v횇Y?d2__윜'O=z)?vزe.^8`>,--7Xv-DqmذK.-"9s=VVVW㕀``36J\.󸪪ݝ̦O.nݺr-f;88ѠA|||(,,D8f̘ cc3g:t8NnnT*uuunȕ Wl\[^^3Ņ RRRJJJxoի뙗!fff33Gѝ;wongggggPYYT*ݻoذޮ Wz\ s%\.7!!իW{yy]zuǎ>>>͜}|||NNN;wѼ\122R*MK*7ĔȔsi9uv{4bbB`˕4QtO@`̕@;z\ Y l\۷;~„6r%'ȕ5+W-m]504J@O+6k0J:uΝ;JTT*JejjjJa4_s0WJŴF%QӧOoǩ##E˫ =}pgΝǏ/ZQ x%'جA_X,V?~|W+=x%fO6r%'ȕ=>8ڸBȕ Wl\ \ r%fȕNȕ Wl\ \ r%fȕNȕ Wl\ \ r%f/+zIS^^%<w}ٲeͿ"_91 J@O+6{\ٳg̘y}J^uኊĄ3gNXXX3'&'NL:CSȕ WlB5kdffjv޽{֬Y<O׫LLL|~>}='RUAAAO[JJJ***?=4\ r%f/+ԩÇ%LGɾ}lB(**jŊǏ'Pgggoo8***))yi&//.],X^˖-򲷷9sڵk>>rݻWVVfaaѥKgȕ Wl W"b1󸙹Cn666̃ݻ;w|) NODJO>%%%J) ӦMرc/_ޱcfV\ r%f r%]Տ+y^666:JqM/uyaaaΝ5tppHLL,-----}ClmmKKKu-t999[xqJ;\ r%f J}רyч]v8q_߿{3fʕ'˗/߼y4&&f̙r… Ddmm]PPP($ٳg˭}}}=zk}p@Op`QTNNN*JP(Jߊ܊6Pn~ D"''k3up8DG)^zmܸ֯_cF*2eJ>}V^ݹs_~111&&&k>4_G7ȕ@imKJ Q/""JDJ|B&=#֯[߿+BBB~ѯ2D\6*DiRc[a+ ƹY{ִΝ;L r%'ȕ5+Q f:~26kn M۷ \@`122ٳ5=^wx>8'Y\\.W( B.+ʺzC JJkllLDθ0~ Wz\ 3+Q񂃃ۼz`Hȕ Wl WQVV4W@U\ r%f Jzu֭FB4WҴֶĆnPtw޹rʵkjkk RT(666]'i^2?hZbKQex%fff} ̕dk׮ݽ{0Cx%'L}pԏ˫ܹsm]A0WzJʹGX^.;n8"*--m!Wz\ Yr%%mW504J' 6k\~ކ [E0J@O+6k\IYfq Jy شDszq(eWJ$uJR)HaCmSohQe&9[I*%)HE}p@Op`Wrt#+Ჹx%'ج<8sW3K\IJ@O0^  J^>8ȕoȕ Wl\ \ r%fȕNȕ WlfTYY\1lT" RWh{Oo*hm]4!8O~\hC LIaa!֮F%B@zJ^hh@O0^ r% r%fȕNh'ȕ!W:= Wl\ z\ r% r%fȕNh'ȕ!W:= Wl\ z\ r% r%fȕNh'ȕq4h^)ʦ%-[ncdZWWd)J7^l"2~|57U1T{yf%Y;uxc[iguhm]4WbXO9D3>u.>hkk˥?O9`"2G|gd5|e=0&o`[|r _箧AhmKJ Q/"6WFR-׍o7)lkE:a&O+161L:{_OKCx%fϕtr1W}GjuQ|pR_mxDt-މM+,F-iYi|ip>ח{$BKGgg$rW?w7{< rܯ_7^>o'̕3![iSV_+WgoW?["y$W?Jξ#Dto$ ߑc0J +u;p?O;)(K8=r ώ$4OY}ncy Ĭ t}`hk/.3|n/yՇ1'܅5gD7W^m?/D|w|]Η2|Ž~a.鵒ȕ+W۾s]˗D{ vr6st7|G W-}SI"J߼!{9yYcOk]V)Uwp:@EQu6e~e5Tٺul (Dd5kRԘsUMD|]{_'{YڙQq]n7,!Wl,Gb_ YڙY5i県n*wrBTwz梫#RLL-###3Kz2S3GfΫɀa}fVꒌ[n -2%߫{]]L=[g{gJvjf%>8fʕ4 626z=9Yޮ/8[h–_^T31ē˔5$_B~ vPYۃfGI]EWnig:="[rJ%iY "ztlfݠ!WlfJoTKȫKdť"DnͲp?)ʩ 3Dz 9 NV-L%5ڇRT /uW$2Lyt}{kVygJ2q{ BNS|ReLypoV?Q q~uT>8| {)ͻ߇mx#,S"zclIӤ2go~|בu[GOS=ψE~}uGMۍV aX}B`3q`=OMSU:wy53%(kudJ2jT`3J'tiT"===)p۷$iS;==D"6V Imee] 78MsMKZ(y鰼=T%ϗ**DqlCy'S{\]F%ۃJ:t.Ϥs Ae~`-K{bB{=}phx=``3J@'J͐+@O+6CtB{=A  `3J@'J͐+@O+6CtB{=AhcϞ@F>{84ޝ 4De9?\M*.7tZ=@`y=xLq=}J֘צ9K:}H){}H6]&2*8s^ mm*KI / vмKohBDN4rEC_Ǩc\ߙ:D%֞l=;#% 4+3KK++]:=!\2|EQEg [(4<~x:|NrBEuQ=KE_mj׾h{q_ xq u~/qVZWY [4z"}gM*8N YY|`3{&cҋxybωieH<}6EǕ|o9jG&q+,J;ul˙)q[InNy,~Ғ--<"9HVx?<ȓSwO/j!߿=q%yiDvB5wO_ܦbƏ?7tKMq#kIȨ8k~Um ES)uϞxε.Z/kQ{ŕ2H?"%"0k:$uqVyYԴՋ۫W.~\=9{hz.Gn#ɹ;i|b~dph/ * eHfO\7n|by79imC {x {Ϸt# & zRQ{-Uu4}ߩWCġ]vWۘqG8aIǵ |1;OF4v%]tEs-)tkr6&qF[['XmEHk>ٻ?/j?mя8cޅTu}6یҶs@H1Y((w,.825vz-r>5VsmG*0c7HQ~iW##>pvXMZQ(vkF?˄[J0$*Wv꒾~Ha#n8ۢ"vcG )f_*4Vd|qp s{DONάJ /JHfTޥYz}&'OI&"E?%ҺﺐQKŹEpnZ;E0(nl[  .xLӨ:uYRMLg|$7/ˢ+UDD`$6f[r=fʥJ̅9ؔe굶ʉHt{ˀKdbI剈r);I*R# B="VPMDOʙ{Xl¨+}>_|g3MkjV)˦o IDATDwaeɔ~⋻4juݩ{|(ww0cC>[{cG7jxzm3&ʱKG^qSL^s}]\9:`Ϡ!1[hd$华`ClL=<]mZۄw >LKkC'6_$5| `01?&hJԌ)!#3c7V8wzZR=ǬbȠeg\&4=ܳ/n+r˥('6trL{&{[',_f_5yGo{$a:5\Im]4A,jŏZH]F/T4;y[ŐmA 6,~HZڤ7{Dee#BM(* frLUNDx$KRW5VR8rs[VlA:J"׊J'g^j׶6Rk̦145_*=omsm3$-2CE'%9` O8rC-䱢ƙ<wz #wgyF]q4s~dLMKޒDE 8ĩfy valV MD˘|,E\n |nĆ'C1;[d<\AR=daIS>P>U/ .z -'{TqiN#7lv\8E~)Bs~^j] oio?Oc-uw_ex &59>ؙH+%W6Pdžyg H͗ FWeDˉ/yomoSm pe1CݝݍWJmzF7=(j4yqӿV0`g%)WR|WɏF-Ǩ jrM]=uO9>MkHۑJ&1Õ͹K[fK. WՉ+B"X}?nʊ_=$⺯$Ÿkn^q]ϐ{_ؘzJm vST*,ނ 1ݢEDD>l9 ?JgAD$*:3#|WM;\[3bd>|;fY$FHKlm,IҎrE1=nHu:by rK'_˳eD$q DD\Q3ܾ{"DssPy򥟦)'|[rlvzZ,C%JnlS%?l2" mŇ_C$4B5Y'k&ؽe/" 4܂/]}qևr-Hëryv^,.49yɷ3]?N,K:z[X$w'Tʙp:9 &9bͦ{/_`覭uM~sG3O5w & vPR%&"~wl\窏`9d̑jDJƥj)6"4/uj9siwqɂ+4sZO 6REK'KݣWx{uS祟:/xǕycͯeқdK+ܧoj7f w|<ysGL\=.DR7C%C&"Yݕ$-o5+k[*CI,,c9Qze7EBW=[ykTv*;$eHƇ#8t.v|ajY=:D)e@V>=e{ޤт>v[oη _EI\vyŽ8sי{?L>/#j\GR" #" _mܡޜ]"!c87[JI#H;|iyo?g gWKYQҥr2'mAx}7 5'8uZ,چGz{֜.犵I.EBZ躎g_Aqeo͵$xP#.)Fm,u_\J9I∕v#*2RMYOU6y'%1o{YD_zsv8c r*Wɢ-85)R4z=te<=uS= eۆ|8UD\G.ӡ.H#j/@͟C<_kMN v|q)Ϥsā wj:isq/X#j( MWn?4ͫWHö!?Ps/>x1QO<0efUr5|iлS*>Y0jt,Ӯ_.ߣ;f4GzJetejV~>ʉi,#؟! .8^RZKk/&:y\D8F7JWF$GkR⼅k zp嬏mD7g (b~@ϑx"kk[LfU755}os 1nKtE iRuhpBQ4Dx\d(I1.2m H(qcy-rј0V3䟼]"jnT"ʖϒ RR3LUMyw8qS~sOL/Æ;PJ͕}]ήԌM8x|{ \y1tm}׃,H8$xRM`5f9D9ө\u=K}O>7]2v#w6@*i2vInA7gEE|4lzcfÄ1p@[8@Rq`h4Sq~zsCPF֯̄"7~`ѫ ٵ0sy_w\uRFT4a%(G CNwjN* . M-E2QDe`+@c 14Q4 25Ko/P4mRx8~Rhj&*c-cFRk&;KQx/U|g:3\V˿󪮲cS=ܙ q)a&,9) W qw#{;:Hg4I=5mr+.joqJYyKXݶ鹙ͤ!#w\okd~6po~#YTΊdG-$'Q uq™lׄatw|1=}$ް;lZp9 SL\Z6vz`Hr ui2y /8!#\1]DP8{=VGrCyu;o/ξf q%i}gD?qOQ{ZH^ydک)^GiDKLA*4 DS I륔37۸| =UoVk2ڠ &SĤ֒v>l֨Ћ[ )U]3 >;?|PQo}J&L !a?tͯ߆ @alt<ږ;\d{s;"Y@-mbEGeVhlڷ|VYkA?w|EV7lÄz".&DN+'6 R\)_U{?ײ\]?Qԗj75- CNZ R{3E󣜃>2/  t<06>Asg 9+ŽI4)eI7 Lݾ߭ӼZm"}Ry]cf@ +kЫf}$Mi ,(TxU)8lA{2^>޻{Wޝ Cڋ)#qҌ:O;@QQCI][ͱ.mv2C͋o4imyG)2eqBK 8"Q6 hlep{XaY5pHȲjQEX]O&yZT ~`=|n41yʮw[V!pBW.EÕ)W?eo%e/+dHw+j*WOX6+IKgzfVr!ʶiv]S搊<*?&"c/r{*(D\pDoK䡀1d(e 4cL藭F&Am@R[C\*5|SQXk<\XO;I#]$M3sȿLTf60n| DƁ%H(n1$sI6*h ߷ۣyutwGVhT4Bkݽ^E๊lCZpA^CVUoVEɷ*wo-,t"9b`EyUL_U{\aRB DȍvP6{ZYhC:٫nVC]5zRuk'W RQЪ-Y,S!p!u!qa La\іgƇ')w('*pM,$X^@nն)iI2NQsm;1rK20HWD,1X-]w,)@ E`r#o5W 궗M(*SC;k3YWܰ4:'D5}2o;n͉Ry6՝㝚fW RE,ߐ*ntީ7:ɮ$OQ% `q_&PoX\ZCƛS9_cwMskcEujs=OrQXg4I?CLeȑLtSO Ik2RtS+ DEo|Ȫ=ɤd^w$63mOm@4ŽSV&ykwf`6sk_ym ۪H,[٤Q~Kzm0BswI )SX F-WaZ G 7@m,Lڮ ,| 4/9e7 n6VnCPFqm0#Q*55G\)$7YujLUb"f k>',%]2<7G/(e"%nPoP\&F3ˎ 1q4LChDv0 Oe`t{c[4Rv(DRq93 ISW)NQ.I%m r-!CG,;[Z՗ק0<>6~r/,Q!/hxmyEflmw~4v.D3{ m"mu )|u85|hWo 0c魰.y /&瓒gW3 dŎD";E/Ͼ`CṆxƕ&%vL_TR3;%; '%6O_ HIJQ ɪu{w4+.xg@x$ˌxEN ǟ<o:byJqnZ]r}@S|,ady^(Afʃ e6^ c$' !p6.A^<>Ħ\oNIhp) Y2F!8CSr+s%C9sq$# I,I9i (ƋgֵY209bw(.oW#U{Dfzw"#Qv5Vf*C@]QlʋS׭uē7Hx"o2hV-꘽E8)896`A'z0޷b<>cY-/go%=Ǣ2}'IBD;=Q Q= W>mɿco_.Qռw]:i,WWQ"5VӍ[KnC49.'8!}H.\ sBEVn_=-!T2FGeFwHxD}bz{XTT#TmVnm{ܩI2jX $ o?4촴 zw2؜KЬ&hA- h! cǾYo;jpBQǨD7ν۳uoT!QD?H?3Nr v tF@7gHcH sB?^$P0f8zI$Pe(sng:!38b@tIx#9 = NsDa.D[!%&%,o\l m#X70FLpHusm<ɇ?'jab"*4e_;7: Y唱A&pzZBY0f^X(X`V]ryqeZ0Gmpv*9uT)sbĦx!ɻiX'hVEq Cgd&\A)sd~/Iڛ{WK)h,o3C׏ΰr6ZxL +4kETrLqI ^N%fw tyZ{H/OOF3̸)EA_ؕ +c8 Hj8sVLYt$ܡo6KvW0p(ܮ͋&Mɑrd>`]Uy-1 Qsᲆ.Z$&DGg9y{Av hgoPeNr]^y H%N.ܖ˪KgU 2b8q۲E:ðQoSN6wkRdHI`@K:di/.'N!U )h g[=W%5-Wԫ>MY 2Wu|oM銢gߴ/@<+nz Qoi/z!?O $~ڠBw^:e];%;X&Fz,Ċ*8Hry ޭ8 QAPx) 5vt.>PO̙qɥq?24iD 9BڛcRqN.X23bEf64 B Cm@,u{n ѥ4&p~|g D7_i)*yp4u'=lzc,76oWJ #&7~X~P 0v^r7%ji+Q\PxlWP0r8 ]qi7ZQࣼ'Hs=ZW\hQK^̯eH X3,]Q!8$q7?tPffkz ,d3Ӽ8w!8 exȞwq]^:?i14S_?>8{*-!5 #~O9 J N8ASd3/^z)Sg_{S# {>|zy[~&.9iwr)aɣmsplD(䫷me;7CȀ&uژxU#N` IYql\=ݔ7_I0 f'<//V'-w{:eH4kN87~F'~(ꄭ_P/O+巫ʽMN\ysl95ƺ; RMZ!Jԍvg/x^k?pm9s* ƝHB,gMT{.'AKMcFw3V~{8Cġxm/!uT/6>M$r4M;}J R% V)lT<&ّ wZg`Ѡ|6KsHR(*׭Y9ɨު4>c^W2`lw)n8q}m4]3M| NsJiR4"58qi9Iy~}G L惘ʫ^h-.53>=bnɞU@*G;O'~﷟شƀ-bsܬ2JHX擷|o-6>Y~HBS}ZS6V$~F(j{·Rk; j=ضC`\`aP1ݐWv01/r,u),Y=07ez}ȂE!QݖΦ(xgw0EQV:5IOv]?lw]BpNaGhf*vtشn% DY^EE#.?:DV# ~# @(]ޅC-P9$zل7?r4$ d[ 6XB H%K|{]m }'Fxm{> =9ՃXB9nbSDQ*9ۛBS E"v )]kn"@&e3椊qZ<l@\]^œ&ebGzfiO?~J\wIRlS2,1V/WI`fui$wg@zF5ګq&E JueӍ@ܰ_n^>Qw70ҹ7ĺ""Дڑl[!#G! ޯwiBg]M{UA3޿$~=3x/7,-fO vDAD>Os߼bHrp.8(ˈOݝX>VB4wUʲnTNZ~S>hNٱr;&xoWDZg^ԽBDu4JH_]E ^|c$ٿ[ps\9K=r!^ꖳ,ig-6߾a,|9uEkG_=@5P ө= HsSߜx<{s\\[?wu9̘hGMѨD|pCIHsߙO"vDAD JomwvSc󕐱203nrX~\ŎKAl USKGpQ3j%q@*;mDkIENDB`bin/000077500000000000000000000000001516067350300116345ustar00rootroot00000000000000bin/p3x-onenote.js000077500000000000000000000025011516067350300143520ustar00rootroot00000000000000#!/usr/bin/env node //const os = require('os'); //const process = require('process'); //const cores = os.cpus().length < 4 ? 4 : os.cpus().length; //process.env.UV_THREADPOOL_SIZE = cores; //console.debug(`P3X sets UV_THREADPOOL_SIZE to ${cores} thread pool`) if (!require('fs').existsSync(`${__dirname}/../node_modules`)) { require('child_process').execSync(`cd ${__dirname}/.. && npm install --only=prod`, { stdio: 'inherit' }); } const utils = require('corifeus-utils'); const path = require('path'); const mz = require('mz'); const start = async() => { try { const desktopEntry = `${process.env.HOME}/.local/share/applications/p3x-onenote-cli.desktop`; const exists = await utils.fs.ensureFile(desktopEntry, `[Desktop Entry] Version=1.0 Type=Application Name=P3X Onenote Icon=${path.resolve(__dirname + '/../src/electron/images/128x128.png')} Exec=${__filename} Comment=https://www.patrikx3.com Categories=Office; Terminal=false `) if (!exists) { await mz.fs.chmod(desktopEntry , '0755'); await utils.childProcess.exec('gtk-update-icon-cache || true'); } await utils.childProcess.exec(`${__dirname}/../node_modules/.bin/electron ${path.resolve(__dirname + '/../')}`, true); } catch (e) { console.error(e); throw e; } } start(); changelog.md000066400000000000000000000156711516067350300133470ustar00rootroot00000000000000[//]: #@corifeus-header # 📚 P3X OneNote Linux [//]: #@corifeus-header:end ## Change log ### v2021.4.101 * BUGFIX: Proxy settings was not loading on runing, only during setting the proxy (https://github.com/patrikx3/onenote/issues/128) ### v2020.10.189 * BUGFIX: The bookmarks editor title was wrong, showing adding. ### v2020.10.187 * FEATURE: Add bookmarks menu. ### v2020.10.179 * BUILD: Removed 32 bit version in Linux. ### v2020.10.178 * BUGFIX: Fix button order by using Material Design Specs. ### v2020.10.164 * BUGFIX: Build problem. ### v2020.10.159 * BUGFIX: French build fix. ### v2020.10.157 * FEATURE: Added French language. ### v2020.10.155 * BUILD: Fix newer build from `electron-builder`. ### v2020.10.132 * CHORE: Updated deps. ### v2020.10.123 * BUGFIX: Adds new translations for portuguese (https://github.com/patrikx3/onenote/pull/114) ### v2020.10.111 * BUGFIX: About blank fix (not full solution) ### v2020.10.109 * FEATURE: Back/forward button ### v2020.10.107 * FEATURE: Back/forward button ### v2020.10.105 * FEATURE: Tuned bottom toolbar ### v2020.10.103 * FEATURE: Since menu is not always showing, on the bottom toolbar is always showing a donate button. ### v2020.10.101 * FEATURE: GUI align layout on confirm popup (reverse button order) * FEATURE: The menu is initial hidden, you can enable by clicking ALT. ### v2020.4.200 * FEATURE: disable all AngularJs/AngularJs Material animations. ### v2020.4.197 * BUGFIX: Remove Fontawesome and jQuery, as we are not using. ### v2020.4.185 * CORE: update deps ### v2020.4.167 * BUGFIX: Minor translation fix, based on [Github Pull 100](https://github.com/patrikx3/onenote/pull/100) ### v2020.4.157 * FEATURE: Takes care of [Github Issue #97](https://github.com/patrikx3/onenote/issues/97) - Option to Disable Internal / External Popup ### v2020.4.154 * FEATURE: Added ARM version. ### v2020.4.131 * CHORE: Update NPM packages. ### v2020.4.119 * BUG: The set proxy menu was not working. ### v2020.4.115 * FEATURE: Added Spanish translation. ### v2020.4.109 * CHORE: Upgrade to Electron v8. ### v2020.4.100 * FEAT: Ability to hide the main menu (in tray mode only). ### v2019.10.318 * FEAT: Portuguese locale in the GUI enhance. ### v2019.10.317 * FEAT: Portuguese locale in the GUI. ### v2019.10.301 * Bugfix: configstore error ### v2019.10.211 * CHORE: Upgraded Electron v4 to v6 finally and using just 1 icon 🙌 ### v2019.10.202 * Bugfix: Build error. ### v2019.10.230 * Bugfix: Electron v6 was generating twice icons so I reverted to v4.2.8 ### v2019.10.127 * CHORE: Upgraded Electron v4 to v6. ### v2019.10.117 * BUGFIX: DISABLE_WAYLAND fix * https://github.com/patrikx3/onenote/issues/70 * https://github.com/patrikx3/onenote/pull/71 ### v2019.4.122 * BUGFIX: configstore v5 is not working with SNAP, had to revert to configstore v4 * https://github.com/patrikx3/onenote/issues/68 ### v2019.4.115 * BUGFIX: The cursor sometimes hidden * https://github.com/patrikx3/onenote/issues/67 ### v2019.4.114 * BUGFIX: Since the `Language` menu shift from the `Check updates` `Help` to `View`. ### v2019.4.108 * CHORE: Revert to Electron v4, as showing 2 icons with the hack. ### v2019.4.104 * CHORE: Upgraded to Electron v5 * BUGFIX: Electron was not working sandbox, I worked it out with a script in `src/build/after-pack.js` ### v2019.4.101 * BUGFIX: Minor translation issue. ### v2019.4.42 * BUGFIX: Revert Electron to v4.2.1 as there is an SUID permission, https://github.com/patrikx3/onenote/issues/63 ### v2019.4.39 * FEATURE: New `OneNote 2019` icon * FEATURE: German translation, able to try to guess `Online Onenote` language, but not always working ... ### v2019.4.33 FEATURE: Added in the `Action` menu to go to any URL. ### v2019.4.32 FEATURE: The link chooser was missing the cancel button. ### v2019.4.31 CHORE: Updated all dependencies. ### v2019.4.26 FEATURE: the Electron GUI color (you can check in the `Set Proxy` theme) is switched form blue to purple ### v2019.4.24 FEATURE: Allows using multiple instances (with some quirks, as the config will not be synchronized, so it can provide wrong settings) ### v2019.4.21 FEATURE: Reverted added emoji in the title (notebook) ### v2019.4.19 FEATURE: Added emoji in the title (notebook) ### v2019.4.17 FEATURE: The settings tray menu is a checkbox now (it was a button and different labels). ### v2019.4.12 BUGFIX: the tray was giving a "tray was already destroyed" error ### v2019.4.8 FEATURE: for all links in P3X OneNote is left for the user to decide how the links are handled - as internal or external ### v2019.4.7 * BUGFIX: the tray was showing all the time, now, it only shown if the close button behavior is happening by minimize to the tray ### v2019.02.17 * BUGFIX: Added info, that not every case can be handled. * BUGFIX: On the sidebar on notebooks it was opening a new window, it is quite hacky, but is supposed to be working. ### v2019.02.16 * BUGFIX: On the sidebar on notebooks it was opening a new window, it is quite hacky, but is supposed to be working. ### v2019.02.04 * BUGFIX: Donation button was Hungarian, now is supposed to be automatically by browser locale. ### v2019.02.02 * FEATURE: Disable/enable main timer on window blur/focus * CHORE: upgrade to Electron 4.0.4 ### v2019.01.24 * CHORE: upgrade to Electron 4.0.2 ### v2019.01.18 * BUGFIX: it was saving the window position and size, but it is not correct, because the user could change 2 monitors to 1 monitor and could save incorrect positions, so I disabled this option [//]: #@corifeus-footer --- 🙏 This is an open-source project. Star this repository, if you like it, or even donate to maintain the servers and the development. Thank you so much! Possible, this server, rarely, is down, please, hang on for 15-30 minutes and the server will be back up. All my domains ([patrikx3.com](https://patrikx3.com) and [corifeus.com](https://corifeus.com)) could have minor errors, since I am developing in my free time. However, it is usually stable. **Note about versioning:** Versions are cut in Major.Minor.Patch schema. Major is always the current year. Minor is either 4 (January - June) or 10 (July - December). Patch is incremental by every build. If there is a breaking change, it should be noted in the readme. --- [**P3X-ONENOTE**](https://corifeus.com/onenote) Build v2021.4.101 [![Donate for Corifeus / P3X](https://img.shields.io/badge/Donate-Corifeus-003087.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QZVM4V6HVZJW6) [![Contact Corifeus / P3X](https://img.shields.io/badge/Contact-P3X-ff9900.svg)](https://www.patrikx3.com/en/front/contact) [![Like Corifeus @ Facebook](https://img.shields.io/badge/LIKE-Corifeus-3b5998.svg)](https://www.facebook.com/corifeus.software) ## P3X Sponsor [IntelliJ - The most intelligent Java IDE](https://www.jetbrains.com/?from=patrikx3) [![JetBrains](https://cdn.corifeus.com/assets/svg/jetbrains-logo.svg)](https://www.jetbrains.com/?from=patrikx3) [//]: #@corifeus-footer:end onenote.iml000066400000000000000000000007131516067350300132370ustar00rootroot00000000000000 package.json000066400000000000000000000060321516067350300133530ustar00rootroot00000000000000{ "name": "p3x-onenote", "version": "2021.4.101", "description": "📚 P3X OneNote Linux", "main": "src/electron/app.js", "corifeus": { "snap": true, "prefix": "p3x-", "publish": true, "type": "p3x", "code": "Linux", "nodejs": "v14.15.4", "reponame": "onenote", "build": true, "opencollective": false, "install-appimage-launcher": "sudo add-apt-repository ppa:appimagelauncher-team/stable && sudo apt install -y appimagelauncher" }, "bin": { "p3x-onenote": "bin/p3x-onenote.js" }, "scripts": { "test": "grunt", "build": "electron-builder --x64 build/dist", "build-test": "electron-builder build/dist -p always", "postinstall": "opencollective postinstall", "start": "node ./node_modules/.bin/electron ./src/electron/app.js", "publish-electron": "rm -rf dist && electron-builder -p onTagOrDraft --linux", "publish-electron-arm": "rm -rf dist && electron-builder --armv7l --arm64 --linux --publish=always", "publish-electron-arm-test": "rm -rf dist && electron-builder --armv7l --arm64 --linux", "publish-electron-snap": "electron-builder --linux snap -p never", "publish-electron-yml": "node ./node_modules/corifeus-builder/src/utils/appimage/post-build.js" }, "repository": { "type": "git", "url": "git+https://github.com/patrikx3/onenote.git" }, "keywords": [ "onenote", "linux" ], "author": "Patrik Laszlo ", "license": "MIT", "bugs": { "url": "https://github.com/patrikx3/onenote/issues" }, "homepage": "https://corifeus.com/onenote", "dependencies": { "@fortawesome/fontawesome-free": "^5.15.1", "angular": "^1.8.2", "angular-animate": "^1.8.2", "angular-aria": "^1.8.2", "angular-material": "^1.2.2", "angular-messages": "^1.8.2", "configstore": "^4.0.0", "corifeus-utils": "^2020.10.142", "electron-updater": "^4.3.5", "opencollective": "^1.0.3", "semver": "^7.3.4", "fontsource-roboto": "^3.1.5", "electron": "^11.1.1" }, "devDependencies": { "corifeus-builder": "^2020.10.152", "electron-builder": "^22.9.1" }, "engines": { "node": ">=12.13.0" }, "build": { "afterAllArtifactBuild": "./node_modules/corifeus-builder/src/utils/appimage/after-all-artifact-build.js", "publish": [ { "provider": "github", "owner": "patrikx3", "repo": "onenote" } ], "appId": "p3x.onenote", "copyright": "MIT", "productName": "P3X OneNote", "linux": { "category": "Office", "icon": "./src/electron/images/", "target": [ "AppImage" ] }, "snap": { "environment": { "DISABLE_WAYLAND": 1 } } } }scripts/000077500000000000000000000000001516067350300125535ustar00rootroot00000000000000scripts/start-local.cmd000066400000000000000000000000601516067350300154610ustar00rootroot00000000000000.\node_modules\.bin\electron.cmd --no-sandbox . scripts/start-local.sh000077500000000000000000000001761516067350300153430ustar00rootroot00000000000000#!/usr/bin/env bash DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" ./node_modules/.bin/electron --no-sandbox $DIR/.. src/000077500000000000000000000000001516067350300116535ustar00rootroot00000000000000src/electron/000077500000000000000000000000001516067350300134665ustar00rootroot00000000000000src/electron/app.js000066400000000000000000000073071516067350300146130ustar00rootroot00000000000000const configstore = require('configstore'); const pkg = require('../../package.json'); const conf = new configstore(pkg.name); const {app} = require('electron'); app.allowRendererProcessReuse = true let translationKey = conf.get('lang') if (translationKey === undefined) { translationKey = 'en-US' conf.set('lang', translationKey) } const path = require('path') const langTranslations = { 'en-US': require('../translation/en-US'), 'de-DE': require('../translation/de-DE'), 'pt-BR': require('../translation/pt-BR'), 'es-ES': require('../translation/es-ES'), 'fr-FR': require('../translation/fr-FR'), } const translation = langTranslations[translationKey] global.p3x = { onenote: { pkg: pkg, lang: translation, translationKey: translationKey, translations: undefined, title: translation.title, conf: conf, disableHide: true, allowMultiple: false, optionToDisableInternalExternalPopup: false, iconFile: path.resolve(`${__dirname}/images/128x128.png`), tray: undefined, window: { onenote: undefined, }, action: undefined, menus: undefined, mainMenu: undefined, setVisible: undefined, bookmarksEditMode: false, createWindow: { onenote: undefined, }, isVisible: () => { return global.p3x.onenote.window.onenote.isVisible() && global.p3x.onenote.window.onenote.isFocused() } } } global.p3x.onenote.translations = langTranslations // configuration global.p3x.onenote.disableHide = conf.get('disable-hide') if (global.p3x.onenote.disableHide === undefined) { conf.set('disable-hide', true) global.p3x.onenote.disableHide = true; } // configuration global.p3x.onenote.optionToDisableInternalExternalPopup = conf.get('option-to-disable-internal-external-popup') if (global.p3x.onenote.optionToDisableInternalExternalPopup === undefined) { conf.set('option-to-disable-internal-external-popup', false) global.p3x.onenote.optionToDisableInternalExternalPopup = false; } // configuration global.p3x.onenote.allowMultiple = conf.get('allow-multiple') if (global.p3x.onenote.allowMultiple === undefined) { conf.set('allow-multiple', false) global.p3x.onenote.allowMultiple = false; } // loading global.p3x.onenote.action = require('./main/action'); global.p3x.onenote.menus = require('./main/menus'); global.p3x.onenote.mainMenu = require('./main/create/menu') global.p3x.onenote.mainTray = require('./main/create/tray') global.p3x.onenote.setVisible = require('./main/set-visible') global.p3x.onenote.createWindow.onenote = require('./main/create/window/onenote') if (global.p3x.onenote.allowMultiple === false) { const semver = require('semver') if (semver.gt(process.versions.electron === undefined ? '4.0.0' : process.versions.electron, '3.0.0')) { const gotTheLock = app.requestSingleInstanceLock() app.on('second-instance', (event, commandLine, workingDirectory) => { // Someone tried to run a second instance, we should focus our window. global.p3x.onenote.setVisible(true); //global.p3x.onenote.window.onenote.webContents.reload(); }) if (!gotTheLock) { app.quit() return } } else { const isSecondInstance = app.makeSingleInstance((commandLine, workingDirectory) => { global.p3x.onenote.setVisible(true); //global.p3x.onenote.window.onenote.webContents.reload(); }) if (isSecondInstance) { return app.quit() } } } // app and ipc main events and configuration require('./main/ipc-main') require('./main/app-events') src/electron/images/000077500000000000000000000000001516067350300147335ustar00rootroot00000000000000src/electron/images/128x128.png000066400000000000000000000171551516067350300164070ustar00rootroot00000000000000PNG  IHDR6zTXtRaw profile type exifxڵW#rD1 6 v-@NT{}b4r&\Xo{xϿ%8o<}|ڐϛr_nh0hϞ>H뼋wCu]RK~joM?DXi& ޯ=Aw\L4| 0ǧ`Ǒl'vl)8Kx!js=]E(kgT8 _8WUlL;l5\ul㢛n0|z?|8JȾ.?rP g Lϱo= Wy:n2]O^f&r#4dQFm&01eYfm9@WZ*viλkWkxJOqh)$ Wϩl$E 2ot1\i^#To^)|Ɯ.Mok zbp>sHd5yM.UqխsOn!w5iϡqďV4O3D$#pk՟: ,I̠G曇_V|po>9ˣad9&d#mU-2VdV&~/ Lm%}I@Е[rSB}Ï=a# ]k@?~3$rurPa W7@6=j OL tQC{2kBXl`R.ݢj}O7:dnTkBS('öt6#@ᶘ< !y!%SFU2'aDՠ)-?Œy;%4A+,?0K}\<-vh0u1 . }~+$ZYܱ]NJ=w> (f"V=D O‡JBm:fII~J|ns*Igy05!iui_ޮP롲[cL"VF8IHxl+Ρ~!Aw21`*n BYw=Zj.+bG !E: >InDZѿ\6qj׶xTӢ#D;Pa4b5Aea_/2j] .׹?vAuXntx9xlI蜒C d]OH(Y,1L jҖ|")i6vHKܞ(phi;*}m |\(h Ӕ(s_.֢1>ŕHfwHd >tڪQQð~*Lhijk)d4u)q&ɐfߦXև<'aS%Ѡ(Iư\NH]# JT0@˔}b q3!~mJ;tE# gCb>>wkRE ľKV(jЏJ+;P&2f>/MvR"hAݩۏF<\0s;ƌ"zҕ6p(( ~ q 0)%p&E TQIkE$#S"&.DADcbLeW2fϚώ5(p,yv$1("@ɨƊC Zlfg GRjZ"i,-$n]jX|Vs Im^u(u".T`ITD9 UJ^KNR%p(1QGiLMn0DkHnh~@t]3zo8ή5ډuP&㪹qP]J y:G!0"xp c rRVR?Df|{sm}]%c~F,\o'躙)ˆH!k38P+d -畺U$zE[(5')Į CP65R:RhS=U*+'9GhAcbG@FES,RH$"l')%v!ĭ#P4JÉ$BΜ? ]=qޙ87fy ltXsZAP Y*ɼ-"(!7G eT DD%y`VAVFD/̤Yו[ġ(Q0$^YhDU.۹Aȩ}D3]rf3Lֻ@F"Lҩ@cFCOD[:({ -G`߶td֚j c݋|3?*L־]EXB=7S~c#MwUvaBZBb>| Sua QXXx"!\լ2":!7q$Q@ƪZ"\h5]81sٙ r/j(VQxx~]Scʛqu6%?|vjFlUhtpV-\NNq5`2RZL2un\Z6{ZP.܍d˘lrb)v[~80ͨO]WA LoP5-Dѝ85qܑF ^2S2O6滼1ߤ.oM{)m2&_%iTM]|I@W}8U:kYOl:ڦ$̢ݣ*۞4~}-. Rg'rKuS1Q)>eS&(?(wߋVY?Q;$iFagFlXxJty ">I,ȢSS֪b9A(L(G.StsHx1.!ovd6@L: HYT8e~E reImJޅP(+;]jKMԄ>:~#Kmg:\*l/=$RdVN9]:Iů- }DڣB<; }#ZH~&03k3cWb c7rߤ0J\֧ZvQ L-#rzPFѶ:yD-Ŏp!j$2 8A-dqK8- <o]'pUdyn Z՛2={X?X_+A[N+$S U*LЫz7&&`L$R g@UomQSiV`R7;:ʯoW J7*˶o(2{O@g섍ҳR&iD2DjRYv(%V eaBYrX̖zv)a{Ӽxl׭+JW_mz]' [>mtrme-]\*?5tu@@E.qERr nzzgigN  P@N~{sgZWq)[zگ~0rֈV U#USyMno3G6g_gHtUE2s/R$t7ڨT>vb^ƺ쬻'sjEn6z=q8t:f3wv;j4{y;}>b1r`/n].kONх%SѲ_Ûڊ6~ϡaă*~&oɄ4FSr*BDgj(<\إaatRNS@fbKGDH pHYs  tIME 3,IDATxOU0jxqBZ˥e\h Bn-*Dn/ -)%@>_-"Rx3sYm:B撒bŊ+VXW$6G7m~3K?[%` X{y=yB„@ v]"K ;99911֧(7>sBa߻ŒHvp $ G'qO=[QYYYNNNKKMi``|]>7j9-5_]}&(5b`ď>Jbeܔ 4Wx$wA q&__7B㙂 + ^`/|1Zp$ G5ޛ}ߘbߕ*7B=hNjnw,-\L=_i>|17cIC *R}_fwY]U; gC|SUZ/.Ȋͧ ?r.hSxy@n)Y1nV AuWbS P|60O="t h7]&+׫N8ݺK62eS2J@(RDUk .&%ҙO귶 NЙOXe~.nӥuJf"st.(*"M O=* vӥ^/x%6]QYu ?&=u<j̏hݥ |0y GU'`*]8>w@ λT,d1جCPN6 .iD`ϡw*@}2_ NgxݍA+++;'@uzA h.*n[6T_ %젱Oز*n|wm*&Ю9nS~٧M)*pp7;h)ܺKaLW\yULv.Fo[>z8Qq@ST=PNOT=pmv-L=tC U]~>R}Q7Swݣ&VQ A[=`o]&`DR_toa|oܬ-,~N qꋛOo$|P$!j#`zRO؄@{z*`fR\Ɨ_<7`Y_~񇧫ӳT݃o<}ɥe)waW@B[<[y|yj!q.|m!0o/, /RϋB\3̓)[02P)0eE[ :&GwA 2RZO( ƍ#IRSڞ_p@؍vK7, ?^H^N@3&C};jdԘx' ]>A4ߊ+VXSmh\IENDB`src/electron/images/256x256.png000066400000000000000000000077041516067350300164120ustar00rootroot00000000000000PNG  IHDRkXTPLTE`y"{!b{)s%sLr%$n%[c6'q)V+jdxaG_`X^b_db\dw2Kdu!zox}qc pr"tync{|v}m~l#bj{|sfzgi~ bk bj$a"|svyxhmk`]aed[i`Yb_cZ_޾^rqpWμ]vtR~lI_ݹ[aV˄$N%]ٰW̹\׺\؃#`d"OUƮVɩTÉDhKPFMEYѧS²X΃$CH@QATĥR?fUǚL|=UȏGJTśMS×KQB~>En6z=q8t:f3wv;j4{y;}>b1r`/n].kONх%SѲ_Ûڊ6~ϡaă*~&oɄ4FSr*BDgj(<\ZtRNS@fbKGDH pHYs  tIME | @IDATxSU_L3?uTDb!!!yH"VʋQW^T MF'$IӦәNw=gw˽|p{}ݽB( BP( BP( BP( B\+ [6@ @x#43&C @ @ @ Qdц>G |^}L&#@'P @7uUUUQ AJ OHuΟCLoz:~g7 XQ#_!`?{VO&aR+ھtmwjcgi 9 5UTQ)#"/~RLE"w23+ޏ!}$0$$pmH@)y/Eדy_֫$Koh0W176T6t$>  ,4 HW~b?'gl ^oYai00ILBU39C,SzO~f<룛F`k_57KBWtF'&hI`\ϴ0;t䀱x 7Oi?HM>'E7i[좓@I (IozeoZ7  5Oc3Ctl W\bO4?0LgA lkO||X|T+Ih_rAR%?SK> >$?Wg9Z/#eS `R AL~g K~)ZXs@DY o2 nVqS~b˖n@= ZyvfS86E=I/pe?51k @y+0~gH߾ %'2h9Х!}Zri'9rpXK^#U_r <ݨ{Oss_rp[g`ᒓ@3 r!p0+5k= @|7"(+t07v7 Y-dO#@ r˧V~v%D @~A46$= *?46=RBs_P@z3@z#J~f^lwȣr@ݽ&`[O@g_ 9M *~cֽ<aVb4E-_\ r?@m`_i =ɵP$?*ͺ@+P%?h`&?2L<aOE!hQ_w8U7g!paaE?(~pCk_b_yأ{?@ߕ}Ib ?< @BSS`ߥ{?@K_>P)I~ ' ,}_VZ_p ^ upk0^*$?@[3yX/naJ*w`^i3 $D. M/%LQJ~C#sS @^݈.pBAֽuFFWfg<%Ov@g YR>HA/=/ }ʲ4zw>z|1x^΍>o[bo[!qF.GY<}PEU2`X) n5j?J_ZX$PM_MS@|Z%2S3Cd S Y}dFF.u,O3 _oڂ͕L--+c1c LWs^ѥ!xݠەVL MN :]7o]N[ˮ5K:";YOwV|.î5338xPI2=ĿM`ȃzy⾡ e;R`ҋjP}tM^< @{U3uP=M5}x>!jn&WtVwfdjjjoo$SO1F'! ^@7uvU%~BRjO>%}L̾_P]Lى`7eH>^S81OĕIu@xQ~0~6rB? `FЯ@~PBi NY P( BP( BP( BP(jCo&޺IENDB`src/electron/lib/000077500000000000000000000000001516067350300142345ustar00rootroot00000000000000src/electron/lib/remove-cookies.js000066400000000000000000000025021516067350300175200ustar00rootroot00000000000000const { remote } = require('electron') const removeCookies = async(webview) => { //let session = webview.getWebContents().session; let session = remote.webContents.fromId(webview.getWebContentsId()).session try { const cookies = await session.cookies.get({}); for (var i = cookies.length - 1; i >= 0; i--) { const cookie = cookies[i]; let domain = cookie.domain; if (domain.startsWith('.')) { domain = domain.substring(1); } const url = "http" + (cookie.secure ? "s" : "") + "://" + domain + cookie.path; console.info(` cookie.domain: ${cookie.domain} cookie.hostOnly: ${cookie.hostOnly} cookie.httpOnly: ${cookie.httpOnly} cookie.name: ${cookie.name} cookie.path: ${cookie.path} cookie.secure: ${cookie.secure} cookie.session: ${cookie.session} cookie.value: ${cookie.value} url: ${url} `); try { await session.cookies.remove(url, name) console.log('cookie delete : ', cookie.name); } catch(error) { alert(error.message); console.error(error); } } webview.reload(); } catch(error) { alert(error.message); console.error(error); } } module.exports = removeCookies; src/electron/main/000077500000000000000000000000001516067350300144125ustar00rootroot00000000000000src/electron/main/action.js000066400000000000000000000027231516067350300162310ustar00rootroot00000000000000const {shell, app} = require('electron') const action = { setProxy: require('./actions/set-proxy'), restart: () => { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'restart' }) }, home: () => { global.p3x.onenote.window.onenote.show(); global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'home' }) }, corporate: () => { global.p3x.onenote.window.onenote.show(); global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'corporate' }) }, toggleVisible: () => { if (global.p3x.onenote.window.onenote === undefined) { return; } global.p3x.onenote.setVisible(!global.p3x.onenote.isVisible()); }, quit: function () { app.isQuiting = true; app.quit(); }, github: () => { shell.openExternal('https://github.com/patrikx3/onenote') }, patrik: () => { shell.openExternal('https://patrikx3.com') }, p3x: () => { shell.openExternal('https://github.com/patrikx3') }, corifeus: () => { shell.openExternal('https://corifeus.com') }, npm: () => { shell.openExternal('https://www.npmjs.com/~patrikx3') }, download: () => { shell.openExternal('https://github.com/patrikx3/onenote/releases') }, } module.exports = action; src/electron/main/actions/000077500000000000000000000000001516067350300160525ustar00rootroot00000000000000src/electron/main/actions/set-proxy.js000066400000000000000000000002151516067350300203600ustar00rootroot00000000000000const setProxy = () => { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action-set-proxy') } module.exports = setProxy;src/electron/main/app-events.js000066400000000000000000000012201516067350300170250ustar00rootroot00000000000000const {app} = require('electron') app.on('ready', global.p3x.onenote.createWindow.onenote); app.on('window-all-closed', function () { // if (process.platform !== 'darwin') { app.quit(); // } }); app.on('activate', function () { if (global.p3x.onenote.window.onenote === null) { global.p3x.onenote.createWindow.onenote(); } }); //FIXME: webview new-window changed app.on('web-contents-created', function (webContentsCreatedEvent, contents) { if (contents.getType() === 'webview') { contents.on('new-window', function (newWindowEvent, url) { newWindowEvent.preventDefault(); }); } }); src/electron/main/create/000077500000000000000000000000001516067350300156555ustar00rootroot00000000000000src/electron/main/create/menu.js000066400000000000000000000255661516067350300171750ustar00rootroot00000000000000const {dialog, Menu, shell} = require('electron') const menus = require('../menus'); const action = require('../action'); const mainTray = require('./tray') function mainMenu() { const copyLocation = { label: global.p3x.onenote.lang.label.copyLocation, click: () => { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'get-location' }) } } const minimizationBehaviorLabel = !global.p3x.onenote.disableHide ? global.p3x.onenote.lang.label.disableHide.no : global.p3x.onenote.lang.label.disableHide.yes const languageCheckbox = []; for (let trans of Object.keys(global.p3x.onenote.lang.menu.language.translations)) { const transLabel = global.p3x.onenote.lang.menu.language.translations[trans] const transMenu = ((trans) => { return { label: transLabel, type: 'radio', checked: global.p3x.onenote.conf.get('lang') === trans, click: () => { global.p3x.onenote.conf.set('lang', trans) global.p3x.onenote.lang = global.p3x.onenote.translations[trans] mainMenu() mainTray() global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-language', { translation: trans, }) } } })(trans) languageCheckbox.push(transMenu) } const bookmarksMenu = [ { label: global.p3x.onenote.lang.bookmarks.add, click: () => { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action-bookmark-add', { edit: false, }) } }, ] const bookmarks = global.p3x.onenote.conf.get('bookmarks') || [] if (bookmarks.length > 0) { bookmarksMenu.push({ label: global.p3x.onenote.lang.bookmarks.edit, type: 'checkbox', checked: global.p3x.onenote.bookmarksEditMode, click: () => { global.p3x.onenote.bookmarksEditMode = !global.p3x.onenote.bookmarksEditMode } }) bookmarksMenu.push({ type: 'separator' }) } for(let bookmarkIndex in bookmarks) { const bookmark = bookmarks[bookmarkIndex] const thisBookmarkIndex = bookmarkIndex bookmarksMenu.push({ label: bookmark.title, click: () => { if (global.p3x.onenote.bookmarksEditMode !== true) { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action-bookmark-open', bookmark) } else { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action-bookmark-add', { edit: true, index: thisBookmarkIndex, model: bookmark, }) } } }) } const template = [ { label: global.p3x.onenote.title, submenu: menus.default(), }, { label: global.p3x.onenote.lang.bookmarks.title, submenu: bookmarksMenu }, { label: p3x.onenote.lang.menu.action, submenu: [ copyLocation, { label: global.p3x.onenote.lang.label.openUrl, click: () => { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action-open-url') } } ] }, { label: global.p3x.onenote.lang.label.settings, submenu: [ { label: global.p3x.onenote.lang.label.disableHide.checkbox, type: 'checkbox', checked: !global.p3x.onenote.disableHide, click: () => { global.p3x.onenote.disableHide = !global.p3x.onenote.disableHide; global.p3x.onenote.conf.set('disable-hide', global.p3x.onenote.disableHide); const message = global.p3x.onenote.disableHide ? global.p3x.onenote.lang.label.disableHide.message.yes : global.p3x.onenote.lang.label.disableHide.message.no dialog.showMessageBox(global.p3x.onenote.window.onenote, { type: 'info', title: global.p3x.onenote.lang.dialog.minimizationBehavior.title, message: message, buttons: [global.p3x.onenote.lang.button.ok] }) mainMenu() mainTray() } }, { label: global.p3x.onenote.lang.label.allowMultiple.checkbox, type: 'checkbox', checked: global.p3x.onenote.allowMultiple, click: () => { global.p3x.onenote.allowMultiple = !global.p3x.onenote.allowMultiple; global.p3x.onenote.conf.set('allow-multiple', global.p3x.onenote.allowMultiple); const message = global.p3x.onenote.allowMultiple ? global.p3x.onenote.lang.label.allowMultiple.message.yes : global.p3x.onenote.lang.label.allowMultiple.message.no dialog.showMessageBox(global.p3x.onenote.window.onenote, { type: 'info', title: global.p3x.onenote.lang.dialog.info, message: message, buttons: [global.p3x.onenote.lang.button.ok] }) mainMenu() mainTray() } }, { label: global.p3x.onenote.lang.label.optionToDisableInternalExternalPopup, type: 'checkbox', checked: global.p3x.onenote.optionToDisableInternalExternalPopup, click: () => { global.p3x.onenote.optionToDisableInternalExternalPopup = !global.p3x.onenote.optionToDisableInternalExternalPopup; global.p3x.onenote.conf.set('option-to-disable-internal-external-popup', global.p3x.onenote.optionToDisableInternalExternalPopup); mainMenu() mainTray() } }, { label: global.p3x.onenote.lang.label.setProxy, click: action.setProxy, } ], }, { label: global.p3x.onenote.lang.menu.language.label, submenu: languageCheckbox, }, { label: global.p3x.onenote.lang.label.edit, submenu: [ copyLocation, {type: 'separator'}, { label: p3x.onenote.lang.menu.role.edit.undo, role: 'undo' }, { label: p3x.onenote.lang.menu.role.edit.redo, role: 'redo' }, {type: 'separator'}, { label: p3x.onenote.lang.menu.role.edit.cut, role: 'cut' }, { label: p3x.onenote.lang.menu.role.edit.copy, role: 'copy' }, { label: p3x.onenote.lang.menu.role.edit.paste, role: 'paste' }, { label: p3x.onenote.lang.menu.role.edit.pasteandmatchstyle, role: 'pasteandmatchstyle' }, { label: p3x.onenote.lang.menu.role.edit.delete, role: 'delete' }, { label: p3x.onenote.lang.menu.role.edit.selectall, role: 'selectall' } ] }, { label: global.p3x.onenote.lang.label.view, submenu: [ { label: p3x.onenote.lang.menu.role.view.reload, role: 'reload' }, { label: p3x.onenote.lang.menu.role.view.forcereload, role: 'forcereload' }, { label: p3x.onenote.lang.menu.role.view.toggledevtools, role: 'toggledevtools' }, {type: 'separator'}, { label: p3x.onenote.lang.menu.role.view.resetzoom, role: 'resetzoom' }, { label: p3x.onenote.lang.menu.role.view.zoomin, role: 'zoomin' }, { label: p3x.onenote.lang.menu.role.view.zoomout, role: 'zoomout' }, {type: 'separator'}, { label: p3x.onenote.lang.menu.role.view.togglefullscreen, role: 'togglefullscreen' } ] }, { label: global.p3x.onenote.lang.menu.help.title, role: 'help', submenu: [ { label: global.p3x.onenote.lang.label.download, click: action.download }, { label: 'GitHub', click: action.github }, { label: global.p3x.onenote.lang.label.developer, click: action.patrik }, { label: 'P3X', click: action.p3x }, { label: 'Corifeus', click: action.corifeus }, { label: 'NPM', click: action.npm }, ] }, { label: global.p3x.onenote.lang.label.donate, click: () => { shell.openExternal('https://paypal.me/patrikx3') } }, ] if (process.env.APPIMAGE !== undefined) { template[6].submenu.push({type: 'separator'}) template[6].submenu.push({ label: global.p3x.onenote.lang.menu.help.checkUpdates, click: () => { const {autoUpdater} = require("electron-updater"); autoUpdater.checkForUpdatesAndNotify(); } }, ) } const menu = Menu.buildFromTemplate(template) Menu.setApplicationMenu(menu) } module.exports = mainMenu; src/electron/main/create/tray.js000066400000000000000000000017271516067350300172010ustar00rootroot00000000000000const {Menu, Tray} = require('electron') const menus = require('../menus'); const action = require('../action'); const destroyTray = () => { if (global.p3x.onenote.tray !== undefined) { global.p3x.onenote.tray.destroy() global.p3x.onenote.tray = undefined } } function mainTray() { destroyTray(); if (!global.p3x.onenote.disableHide) { global.p3x.onenote.tray = new Tray(global.p3x.onenote.iconFile) global.p3x.onenote.tray.setToolTip(`${global.p3x.onenote.title} v${global.p3x.onenote.pkg.version}`) const click = () => { console.info('tray on click is executed - if not shown in console. this click is not executed.') action.toggleVisible() } global.p3x.onenote.tray.on('click', click) const menu = menus.default() const contextMenu = Menu.buildFromTemplate(menu) global.p3x.onenote.tray.setContextMenu(contextMenu) } } module.exports = mainTray; src/electron/main/create/window/000077500000000000000000000000001516067350300171645ustar00rootroot00000000000000src/electron/main/create/window/onenote.js000066400000000000000000000125741516067350300212020ustar00rootroot00000000000000const {BrowserWindow, app} = require('electron'); function createWindow() { global.p3x.onenote.window.onenote = new BrowserWindow({ icon: global.p3x.onenote.iconFile, title: `${global.p3x.onenote.title} v${global.p3x.onenote.pkg.version}`, backgroundColor: 'black', autoHideMenuBar: true, webPreferences: { enableRemoteModule: true, worldSafeExecuteJavaScript: true, nodeIntegration: true, contextIsolation: false, webviewTag: true, } }); global.p3x.onenote.setVisible(true); global.p3x.onenote.window.onenote.loadURL(`file://${__dirname}/../../../window/onenote/index.html`); global.p3x.onenote.window.onenote.on('minimize', function (event) { //event.preventDefault() //global.p3x.onenote.setVisible(false, true); }); global.p3x.onenote.window.onenote.on('close', function (event) { if (!app.isQuiting) { if (!global.p3x.onenote.disableHide) { event.preventDefault() global.p3x.onenote.setVisible(false); } } return false; }); global.p3x.onenote.window.onenote.on('focus', () => { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'focus' }) }) global.p3x.onenote.window.onenote.on('focus', function () { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-window-state', { action: 'focus' }) global.p3x.onenote.mainMenu(); global.p3x.onenote.mainTray() }); global.p3x.onenote.window.onenote.on('blur', function () { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-window-state', { action: 'blur' }) global.p3x.onenote.mainMenu(); global.p3x.onenote.mainTray() }); global.p3x.onenote.window.onenote.on('hide', function () { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-window-state', { action: 'blur' }) }); //const windowBounds = global.p3x.onenote.conf.get('window-bounds'); const maximized = global.p3x.onenote.conf.get('maximized'); if (maximized === true) { global.p3x.onenote.window.onenote.maximize() } /* else if (windowBounds !== null && windowBounds !== undefined) { global.p3x.onenote.window.onenote.setBounds(windowBounds); } global.p3x.onenote.window.onenote.on('close', () => { if (global.p3x.onenote.conf.get('maximized') !== true) { global.p3x.onenote.conf.set('window-bounds', global.p3x.onenote.window.onenote.getBounds()) } }) */ global.p3x.onenote.window.onenote.on('maximize', () => { global.p3x.onenote.conf.set('maximized', true) }) global.p3x.onenote.window.onenote.on('unmaximize', () => { global.p3x.onenote.conf.set('maximized', false) /* const windowBounds = global.p3x.onenote.conf.get('window-bounds'); if (windowBounds !== null && windowBounds !== undefined) { global.p3x.onenote.window.onenote.setBounds(windowBounds); } */ }) const {autoUpdater} = require("electron-updater"); autoUpdater.on('checking-for-update', () => { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'toast', message: global.p3x.onenote.lang.updater["checking-for-update"] }) }) autoUpdater.on('update-available', (info) => { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'toast', message: global.p3x.onenote.lang.updater["update-available"] }) }) let firstCheck = true autoUpdater.on('update-not-available', (info) => { if (firstCheck) { firstCheck = false return } global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'toast', message: global.p3x.onenote.lang.updater["update-not-available"] }) }) autoUpdater.on('error', (error) => { console.error(error) global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'toast', error: error, message: global.p3x.onenote.lang.updater["error"]({ errorMessage: error.message.split('\n')[0] }) }) }) /* autoUpdater.on('download-progress', (progressObj) => { /* let log_message = "Download speed: " + progressObj.bytesPerSecond; log_message = log_message + ' - Downloaded ' + progressObj.percent + '%'; log_message = log_message + ' (' + progressObj.transferred + "/" + progressObj.total + ')'; */ /* global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'toast', message: p3x.onenote.lang.updater["download-progress"]({ progressObj: progressObj, }) }) }) */ autoUpdater.on('update-downloaded', (info) => { global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'toast', message: p3x.onenote.lang.updater["update-downloaded"], }) }); autoUpdater.checkForUpdatesAndNotify(); } module.exports = createWindow; src/electron/main/ipc-main.js000066400000000000000000000021501516067350300164430ustar00rootroot00000000000000const {ipcMain} = require('electron') ipcMain.on('did-finish-load', function () { const toWebview = global.p3x.onenote.conf.get('webview-onenote'); global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-onload-user', toWebview); }); ipcMain.on('p3x-onenote-save', function (event, data) { global.p3x.onenote.conf.set('webview-onenote', data); //global.p3x.onenote.conf.set('window-bounds', global.p3x.onenote.window.onenote.getBounds()); }) ipcMain.on('p3x-onenote-action-bookmark-result', function (event, data) { //console.log('p3x-onenote-action-bookmark-result', data) const bookmarks = global.p3x.onenote.conf.get('bookmarks') || [] if (data.opts.edit !== true) { bookmarks.push(data.model) } else { if (data.delete === true) { bookmarks.splice(data.opts.index, 1); } else { bookmarks[data.opts.index] = data.model } } global.p3x.onenote.conf.set('bookmarks', bookmarks) global.p3x.onenote.mainMenu(); global.p3x.onenote.mainTray() }) ipcMain.on('p3x-debug', (event, data) => { console.log(data) }) src/electron/main/menus.js000066400000000000000000000022431516067350300161000ustar00rootroot00000000000000const action = require('./action') const menus = { default: () => { let visible = false; if (global.p3x.onenote.window.onenote !== undefined) { visible = global.p3x.onenote.isVisible() ? true : false; } let menus = [ { label: global.p3x.onenote.lang.label.personalHome, click: action.home }, { label: global.p3x.onenote.lang.label.corporateHome, click: action.corporate }, { label: global.p3x.onenote.lang.label.clearCache, click: action.restart }, { type: 'separator' }, { label: global.p3x.onenote.lang.label.quit, click: action.quit } ] if (!global.p3x.onenote.disableHide) { const hideMenu = { label: visible ? global.p3x.onenote.lang.label.hide : global.p3x.onenote.lang.label.show, click: action.toggleVisible } menus.splice(3, 0, hideMenu); } return menus; } } module.exports = menus; src/electron/main/set-visible.js000066400000000000000000000020351516067350300171760ustar00rootroot00000000000000function setVisible(visible = true, force = false) { if (visible === null) { visible = true; } /* else { mainWindow.webContents.send('p3x-onenote-action', { action: 'focus-save' }) } */ if (global.p3x.onenote.window.onenote !== undefined) { if (visible || (global.p3x.onenote.window.onenote.isMinimized() && !force)) { visible = true; global.p3x.onenote.window.onenote.show(); } else { global.p3x.onenote.window.onenote.minimize() if (!global.p3x.onenote.disableHide) { global.p3x.onenote.window.onenote.hide(); } } } global.p3x.onenote.conf.set('visible', visible); global.p3x.onenote.mainMenu(); global.p3x.onenote.mainTray() if (visible || force) { global.p3x.onenote.window.onenote.focus(); global.p3x.onenote.window.onenote.webContents.send('p3x-onenote-action', { action: 'focus' }) } } module.exports = setVisible;src/electron/window/000077500000000000000000000000001516067350300147755ustar00rootroot00000000000000src/electron/window/onenote/000077500000000000000000000000001516067350300164445ustar00rootroot00000000000000src/electron/window/onenote/action/000077500000000000000000000000001516067350300177215ustar00rootroot00000000000000src/electron/window/onenote/action/load-proxy.js000066400000000000000000000014111516067350300223520ustar00rootroot00000000000000const { remote } = require('electron') const loadProxy = async () => { //console.log('load proxy'); await new Promise(resolve => { let timeout const exec = () => { if (p3x.onenote.domReady !== true) { clearTimeout(timeout) timeout = setTimeout(exec, 250) } else { resolve() } } exec() }) const webview = global.p3x.onenote.webview; // const session = webview.getWebContents().session; const session = remote.webContents.fromId(webview.getWebContentsId()).session const proxy = global.p3x.onenote.data.proxy.trim(); await session.setProxy({ proxyRules: proxy }) webview.reload(); } module.exports = loadProxy; src/electron/window/onenote/action/multi-action/000077500000000000000000000000001516067350300223265ustar00rootroot00000000000000src/electron/window/onenote/action/multi-action/get-location.js000066400000000000000000000010431516067350300252470ustar00rootroot00000000000000let text module.exports = () => { var copy = function (e) { e.preventDefault(); if (e.clipboardData) { e.clipboardData.setData('text/plain', text); } else if (window.clipboardData) { window.clipboardData.setData('Text', text); } } text = global.p3x.onenote.webview.src window.addEventListener('copy', copy); document.execCommand('copy'); window.removeEventListener('copy', copy); global.p3x.onenote.toast.action(global.p3x.onenote.lang.label.copyLocationCopied) }src/electron/window/onenote/action/multi-action/toast.js000066400000000000000000000002001516067350300240060ustar00rootroot00000000000000const toast = (data) => { global.p3x.onenote.toast.action({ message: data.message }) } module.exports = toastsrc/electron/window/onenote/action/multi-actions.js000066400000000000000000000037201516067350300230510ustar00rootroot00000000000000const { remote } = require('electron') const multiActions = (data) => { const webview = global.p3x.onenote.webview; switch (data.action) { /* case 'focus-save': //console.log('focus-save') webview.getWebContents().executeJavaScript(`window.p3xOnenoteActiveElement = document.activeElement; window.p3xIframe = document.getElementById('sdx_ow_iframe'); window.p3xIframeDoc = window.p3xIframe.contentDocument || window.p3xIframe.contentWindow.document; console.log(window.p3xIframeDoc.activeElement);`) break; */ case 'focus': // webview.openDevTools(); if (webview !== undefined) { webview.focus() /* webview.getWebContents().executeJavaScript(`var a = 'foo'; Promise.resolve(a);`).then(result => { console.log(result) }).catch(e => console.error(e)) */ //webview.getWebContents().executeJavaScript(`console.log(window.p3xOnenoteActiveElement)`) //document.activeElement } break; case 'restart': //const session = webview.getWebContents().session; const session = remote.webContents.fromId(webview.getWebContentsId()).session session.clearStorageData(() => { //console.log('storage cleared'); webview.reload(); }) break; case 'home': webview.src = global.p3x.onenote.url.notebooks break; case 'corporate': webview.src = 'https://www.onenote.com/notebooks?auth=2&auth_upn=my_corporate_email_address' break; case 'get-location': require('./multi-action/get-location')() break; case 'toast': require('./multi-action/toast')(data) break; } } module.exports = multiActions; src/electron/window/onenote/action/set-proxy.js000066400000000000000000000016211516067350300222310ustar00rootroot00000000000000const {ipcRenderer} = require('electron'); module.exports = async (data) => { let valueProxy = ''; let cancelled = false; try { valueProxy = await global.p3x.onenote.prompt.setProxy(); valueProxy = valueProxy === undefined ? '' : valueProxy.trim(); } catch (e) { if (e !== undefined) { console.error(e); } else { cancelled = true; } } finally { if (!cancelled) { global.p3x.onenote.data.proxy = valueProxy; if (valueProxy === '') { global.p3x.onenote.toast.setProxy.clear() } else { global.p3x.onenote.toast.setProxy.set(valueProxy) } //console.log('set-proxy', global.p3x.onenote.data.proxy) ipcRenderer.send('p3x-onenote-save', global.p3x.onenote.data); require('./load-proxy')() } } } src/electron/window/onenote/angular.js000066400000000000000000000034611516067350300204370ustar00rootroot00000000000000const {shell} = require('electron'); require('angular/angular'); require('angular-aria'); require('angular-animate'); require('angular-messages'); require('angular-material'); global.p3x.onenote.ng = angular.module('p3x-onenote', [ 'ngMaterial', 'ngMessages' ]); require('./angular/prompt'); require('./angular/toast'); global.p3x.onenote.ng.config(($mdAriaProvider, $mdThemingProvider) => { $mdAriaProvider.disableWarnings(); $mdThemingProvider.theme('default').primaryPalette('purple').accentPalette('blue')//.warnPalette('amber'); }) global.p3x.onenote.ng.run((p3xOnenotePrompt, p3xOnenoteToast, $rootScope, $animate, $mdMedia) => { $animate.enabled(false) global.p3x.onenote.prompt = p3xOnenotePrompt; global.p3x.onenote.toast = p3xOnenoteToast; global.p3x.onenote.root = $rootScope $rootScope.$mdMedia = $mdMedia p3x.onenote.toast.action(p3x.onenote.lang.slow) $rootScope.p3x = { onenote: { go: (action) => { global.p3x.onenote.webview[action === 'back' ? 'goBack' : 'goForward']() }, canGo: (action) => { if (action === 'back') { return global.p3x.onenote.webview && global.p3x.onenote.webview.canGoBack() } return global.p3x.onenote.webview && global.p3x.onenote.webview.canGoForward() }, lang: global.p3x.onenote.lang, location: undefined, copyLocation: require('./action/multi-action/get-location'), donate: () => { shell.openExternal('https://paypal.me/patrikx3') } } } }) angular.element(document).ready(() => { const bootstrapElement = document.getElementById('p3x-onenote-bootstrap'); angular.bootstrap(bootstrapElement, ['p3x-onenote']); }) src/electron/window/onenote/angular/000077500000000000000000000000001516067350300200755ustar00rootroot00000000000000src/electron/window/onenote/angular/prompt/000077500000000000000000000000001516067350300214165ustar00rootroot00000000000000src/electron/window/onenote/angular/prompt/index.js000066400000000000000000000202411516067350300230620ustar00rootroot00000000000000global.p3x.onenote.ng.factory('p3xOnenotePrompt', ($mdDialog) => { return new function () { this.setProxy = () => { const confirm = $mdDialog.prompt() .title(p3x.onenote.lang.label.setProxy) .textContent(p3x.onenote.lang.dialog.setProxy.info) .placeholder(p3x.onenote.lang.dialog.setProxy.placeholder) .ariaLabel(p3x.onenote.lang.dialog.setProxy.placeholder) .initialValue(global.p3x.onenote.data.proxy) //.targetEvent(ev) //.required(true) .cancel(p3x.onenote.lang.button.cancel) .ok(p3x.onenote.lang.button.save) return $mdDialog.show(confirm) } this.goToUrl = () => { const confirm = $mdDialog.prompt() .title(p3x.onenote.lang.label.openUrl) .textContent(p3x.onenote.lang.dialog.openUrl.info) .placeholder(p3x.onenote.lang.dialog.openUrl.placeholder) .ariaLabel(p3x.onenote.lang.dialog.openUrl.placeholder) //.initialValue(global.p3x.onenote.data.proxy) //.targetEvent(ev) //.required(true) .cancel(p3x.onenote.lang.button.cancel) .ok(p3x.onenote.lang.button.go) return $mdDialog.show(confirm) } this.configureLanguge = (opts) => { return $mdDialog.show({ template: `

${p3x.onenote.lang.menu.language.dialog.label}

${p3x.onenote.lang.menu.language.dialog.personal} ${p3x.onenote.lang.menu.language.dialog.corporate} ${p3x.onenote.lang.button.cancel}
`, controller: function ($mdDialog, $scope) { $scope.exit = (answer) => { $mdDialog.hide(answer); } $scope.cancel = $mdDialog.cancel } }); } this.redirect = (opts) => { return $mdDialog.show({ template: `

${p3x.onenote.lang.label.promptRedirectUrlTitle}

${p3x.onenote.lang.dialog.redirect.url({url: opts.url})}
${p3x.onenote.lang.button.cancel} ${p3x.onenote.lang.dialog.redirect.urlExternal} ${p3x.onenote.lang.dialog.redirect.urlInternal}
`, controller: function ($mdDialog, $scope) { $scope.exit = (answer) => { $mdDialog.hide(answer); } $scope.cancel = $mdDialog.cancel } }); } this.bookmarks = (opts) => { let deleteButton = '' let title if (opts.edit === true) { deleteButton = ` ${p3x.onenote.lang.button.delete} ` title = p3x.onenote.lang.bookmarks.edit } else { title = p3x.onenote.lang.bookmarks.add } return $mdDialog.show({ template: `

${title}

${p3x.onenote.lang.validation.required}
${p3x.onenote.lang.validation.required}
${p3x.onenote.lang.validation.url}
${p3x.onenote.lang.button.cancel} ${deleteButton} ${p3x.onenote.lang.button.save}
`, controller: function ($mdDialog, $scope) { $scope.model = { title: undefined, url: undefined, } if (opts.model) { $scope.model = opts.model } $scope.submit = () => { if ($scope.urlForm.$valid) { $mdDialog.hide({ opts: opts, model: $scope.model, }); } } $scope.delete = () => { $mdDialog.hide({ delete: true, opts: opts, model: $scope.model, }); } $scope.exit = (answer) => { $mdDialog.hide(answer); } $scope.cancel = $mdDialog.cancel } }); } } }) src/electron/window/onenote/angular/toast/000077500000000000000000000000001516067350300212275ustar00rootroot00000000000000src/electron/window/onenote/angular/toast/index.js000066400000000000000000000017321516067350300226770ustar00rootroot00000000000000global.p3x.onenote.ng.factory('p3xOnenoteToast', ($mdToast) => { const toast = (options) => { if (typeof options === 'string') { options = { message: options, } } const template = '' + options.message + '' $mdToast.show({ controller: function ($scope, $mdToast) { $scope.closeToast = function() { $mdToast.hide(); }; }, template: template, hideDelay: 5000, position: 'bottom right' }); } return new function () { this.action = toast; this.setProxy = new function () { this.clear = () => toast(p3x.onenote.lang.dialog.setProxy.clear) this.set = (value) => toast(p3x.onenote.lang.dialog.setProxy.set(value)) } } }) src/electron/window/onenote/event/000077500000000000000000000000001516067350300175655ustar00rootroot00000000000000src/electron/window/onenote/event/handler.js000066400000000000000000000126471516067350300215520ustar00rootroot00000000000000const electron = require('electron'); const shell = electron.shell; const ipc = electron.ipcRenderer; const handler = (options) => { const {webview} = options; /* webview.addEventListener('did-stop-loading', function(event) { // webview.insertCSS(window.cssData); }); */ // const allowedUrlRegex = /^((https?:\/\/((onedrive\.live\.com\/((redir\?resid\=)|((redir|edit).aspx\?)))|((www\.)?onenote\.com)|(login\.)|(g\.live\.))|(about\:blank)))/i // const allowedUrlRegex2 = /^https?:\/\/d\.docs\.live\.net\/([a-z0-9]{16})\//i //const disalledUrl = /^((https?:\/\/))/i let windowInterval const generateInterval = () => { windowInterval = setInterval(() => { //console.log(webview.src, global.p3x.onenote.root.p3x.onenote.location) /* ipc.send('p3x-debug', { 'new-window': webview.src, allowed: allowedUrlRegex.test(webview.src) }) */ /* if (!allowedUrlRegex.test(webview.src)) { p3x.onenote.ui.overlay.show({ message: p3x.onenote.lang.label.disallowedContent }) } else { p3x.onenote.ui.overlay.hide() } */ let timeout const exec = () => { if (global.p3x.onenote.root === undefined) { clearTimeout(timeout) timeout = setTimeout(exec, 250) } else { if (global.p3x.onenote.root.p3x.onenote.location !== webview.src) { global.p3x.onenote.root.p3x.onenote.location = webview.src global.p3x.onenote.data.url = webview.src global.p3x.onenote.root.$digest() ipc.send('p3x-onenote-save', global.p3x.onenote.data); } } } exec() }, p3x.onenote.wrongUrlTimeout) } generateInterval() ipc.on('p3x-onenote-window-state', function (event, data) { clearInterval(windowInterval) if (data.action === 'focus') { generateInterval() } }) /* webview.addEventListener('did-stop-loading', function(event) { // webview.insertCSS(p3x.onenote.hackCss); }); webview.addEventListener('will-navigate', function(event, url) { ipc.send('p3x-debug', { 'will-navigate': event, url: url, }); }); webview.addEventListener('will-redirect', function(event, url) { ipc.send('p3x-debug', { 'will-redirect': event, url: url, }); }); */ webview.addEventListener('did-navigate', function (event, url) { /* ipc.send('p3x-debug', { 'did-navigate': event, url: url, }); */ global.p3x.onenote.data.url = webview.src; ipc.send('p3x-onenote-save', global.p3x.onenote.data); let timeout const exec = () => { if (global.p3x.onenote.root === undefined) { clearTimeout(timeout) timeout = setTimeout(exec, 250) } else { global.p3x.onenote.root.p3x.onenote.location = webview.src global.p3x.onenote.root.$digest() } } exec() }); webview.addEventListener("dom-ready", event => { //TODO Remove this once https://github.com/electron/electron/issues/14474 is fixed webview.blur(); webview.focus(); p3x.onenote.domReady = true if (process.env.NODE_ENV === 'debug') { webview.openDevTools() } }); webview.addEventListener('new-window', function (event) { event.preventDefault() //p3x.onenote.toast.action(p3x.onenote.lang.label.unknownLink) if (event.url.trim().startsWith('about:blank')) { //webview.src = event.url; return } if (global.p3x.onenote.conf.get('option-to-disable-internal-external-popup') === true) { webview.src = event.url } else { global.p3x.onenote.prompt.redirect({url: event.url}).then((answer) => { if (answer === 'internal') { webview.src = event.url; } else { shell.openExternal(event.url) } }) } //; /* ipc.send('p3x-debug', { 'new-window': event.url, allowed: allowedUrlRegex.test(event.url) }) */ //console.log(event.url) /* if (allowedUrlRegex2.test(event.url)) { // https://onedrive.live.com/redir?resid=3B992A1F2BEDFFA7%21955&page=Edit const urlParts = event.url.match(allowedUrlRegex2) /* ipc.send('p3x-debug', { urlParts: urlParts }) */ /* p3x.onenote.toast.action(p3x.onenote.lang.redirecting) webview.src = `https://onedrive.live.com/redir?resid=${urlParts[1]}%21955&page=Edit`; } else */ /* if (allowedUrlRegex.test(event.url) || allowedUrlRegex2.test(event.url)) { p3x.onenote.toast.action(p3x.onenote.lang.redirecting) webview.src = event.url; } else { shell.openExternal(event.url); } */ }); } module.exports = handler src/electron/window/onenote/hack.css000066400000000000000000000000671516067350300200670ustar00rootroot00000000000000:root .BreadcrumbItem { display: none !important; }src/electron/window/onenote/index.html000066400000000000000000000047161516067350300204510ustar00rootroot00000000000000
{{ $root.p3x.onenote.lang.label.back }} {{ $root.p3x.onenote.lang.label.forward }}
{{ $root.p3x.onenote.lang.label.donate }}
{{ $root.p3x.onenote.lang.label.copyLocation }}  {{ $root.p3x.onenote.location }}
src/electron/window/onenote/ipc/000077500000000000000000000000001516067350300172175ustar00rootroot00000000000000src/electron/window/onenote/ipc/handler.js000066400000000000000000000065321516067350300212000ustar00rootroot00000000000000const {ipcRenderer} = require('electron'); const setProxy = require('../action/set-proxy'); const multiActions = require('../action/multi-actions'); const handler = (options) => { const {webview} = options; ipcRenderer.on('p3x-onenote-onload-user', function (event, data) { if (data !== null && data !== undefined) { global.p3x.onenote.data = data; } //console.log('p3x-onenote-onload-user', data) if (typeof (global.p3x.onenote.data) === 'object' && global.p3x.onenote.data.hasOwnProperty('url') && !global.p3x.onenote.data.url.startsWith('about:blank')) { webview.src = global.p3x.onenote.data.url; } else { webview.src = 'https://www.onenote.com/notebooks' } if (global.p3x.onenote.data.proxy.trim() !== '') { require('../action/load-proxy')(); } }) ipcRenderer.on('p3x-onenote-action', function (event, data) { multiActions(data); }) ipcRenderer.on('p3x-onenote-action-set-proxy', (event, data) => { setProxy(data); }) ipcRenderer.on('p3x-onenote-language', async (event, data) => { global.p3x.onenote.lang = global.p3x.onenote.translations[data.translation] global.p3x.onenote.toast.action(global.p3x.onenote.lang.menu.language.alert) global.p3x.onenote.root.p3x.onenote.lang = global.p3x.onenote.lang let type = ''; let cancelled = false; try { type = await global.p3x.onenote.prompt.configureLanguge(data); type = type === undefined ? '' : type.trim(); } catch (e) { if (e !== undefined) { console.error(e); } else { cancelled = true; } } finally { if (!cancelled) { if (type === 'corporate') { global.p3x.onenote.webview.src = 'https://www.onenote.com/notebooks?auth=2&auth_upn=my_corporate_email_address&omkt=' + data.translation } else { global.p3x.onenote.webview.src = 'https://www.onenote.com/notebooks?omkt=' + data.translation } } } }) ipcRenderer.on('p3x-onenote-action-open-url', async (event, data) => { let url = ''; let cancelled = false; try { url = await global.p3x.onenote.prompt.goToUrl(); url = url === undefined ? '' : url.trim(); if (!url.startsWith('http')) { url = 'https://' + url } } catch (e) { if (e !== undefined) { console.error(e); } else { cancelled = true; } } finally { if (!cancelled) { global.p3x.onenote.webview.src = url } } }) ipcRenderer.on('p3x-onenote-action-bookmark-open', (event, data) => { global.p3x.onenote.webview.src = data.url }) ipcRenderer.on('p3x-onenote-action-bookmark-add', async (event, data) => { try { const result = await global.p3x.onenote.prompt.bookmarks(data); ipcRenderer.send('p3x-onenote-action-bookmark-result', result); } catch (e) { if (e !== undefined) { alert(e.message) console.error(e); } } }) } module.exports = handler src/electron/window/onenote/load.js000066400000000000000000000043641516067350300177300ustar00rootroot00000000000000const {ipcRenderer} = require('electron'); /* const fs = require('fs') fs.readFile(__dirname + '/hack.css', 'utf-8', function(err, data) { if (err) { ipc.send('p3x-debug', { 'messsage': 'hack.css is not working', error: err, }); } p3x.onenote.hackCss = data; }); */ const configstore = require('configstore'); const pkg = require('../../../../package.json'); const conf = new configstore(pkg.name); let translationKey = conf.get('lang') const langTranslations = { 'en-US': require('../../../translation/en-US'), 'de-DE': require('../../../translation/de-DE'), 'pt-BR': require('../../../translation/pt-BR'), 'es-ES': require('../../../translation/es-ES'), 'fr-FR': require('../../../translation/fr-FR'), } const translation = langTranslations[translationKey] global.p3x = { onenote: { conf: conf, domReady: false, url: { /* https://www.onenote.com/notebooks?omkt=en-US https://www.onenote.com/notebooks?omkt=de-DE https://www.onenote.com/notebooks?omkt=hu-HU */ notebooks: 'https://www.onenote.com/notebooks', }, ui: {}, hackCss: undefined, ng: undefined, webview: undefined, pkg: require('../../../../package'), translations: langTranslations, lang: translation, data: { url: 'about:blank', proxy: '', }, prompt: undefined, toast: undefined, root: undefined, wrongUrlTimeout: 1000, wrongUrlMaxAllowed: 5, } } document.title = `${global.p3x.onenote.lang.title} v${global.p3x.onenote.pkg.version}`; window.p3xOneNoteOnLoad = function () { const webview = document.getElementById("p3x-onenote-webview"); global.p3x.onenote.webview = webview; webview.focus() global.p3x.onenote.webview.addEventListener("dom-ready", function () { //require('./core/overlay') require('./angular') }) const ipcHandler = require('./ipc/handler'); ipcHandler({ webview: webview, }) const eventHandler = require('./event/handler'); eventHandler({ webview: webview, }) ipcRenderer.send('did-finish-load'); } src/electron/window/onenote/style.css000066400000000000000000000022601516067350300203160ustar00rootroot00000000000000:root { --p3x-onenote-navbar-bg: #7719aa; --p3x-onenote-navbar-color: white; --p3x-onenote-bottom-bar-height: 20px; --p3x-onenote-bottom-bar-font-size: 12px; } body { background-color: white; padding: 0; margin: 0; overflow: hidden; } /* md-dialog md-dialog-actions { display: block !important; } md-dialog md-dialog-actions button { float: right !important; } */ body * { transition: none !important; } #p3x-onenote-bottom-bar { cursor: pointer; position: fixed; bottom: 0px; left: 0px; width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; height: var(--p3x-onenote-bottom-bar-height); font-size: var(--p3x-onenote-bottom-bar-font-size); font-family: Roboto; line-height: var(--p3x-onenote-bottom-bar-height); background-color: var(--p3x-onenote-navbar-bg); color: var(--p3x-onenote-navbar-color); } #p3x-onenote-webview { position: fixed; top: 0px; left: 0px; overflow: hidden; width: 100%; height: calc(100% - var(--p3x-onenote-bottom-bar-height)); } .md-toast-content { z-index: 110; } .p3x-onenote-toast-default .md-toast-content { } src/translation/000077500000000000000000000000001516067350300142115ustar00rootroot00000000000000src/translation/de-DE.js000066400000000000000000000126301516067350300154270ustar00rootroot00000000000000const translation = { title: 'P3X OneNote', label: { donate: 'Spenden', allowMultiple: { checkbox: 'Mehrere App-Instanzen erlauben (möglicherweise mit Quirks)', message: { yes: 'Nutzung mehrerer Instanzen aktiv (möglicherweise mit Quirks).', no: 'Nutzung mehrerer Instanzen deaktiviert (keine Quirks).' } }, disableHide: { //yes: 'Set the close button behaviour that will minimize to the tray instead of quitting', //no: 'Set the close button behaviour as to really quit the app', checkbox: 'Schließen-Knopf Einstellung', message: { yes: 'Schließen-Knopf beendet die Anwendung.', no: 'Schließen-Knopf minimiert die Anwendung.', } }, optionToDisableInternalExternalPopup: 'Deshabilitar ventana emergente interna / externa (alle link intern)', settings: 'Einstellungen', setProxy: 'Proxy-Einstellungen', openUrl: 'URL öffnen', promptRedirectUrlTitle: 'Umleiten zu URL', edit: 'Bearbeiten', view: 'Anzeigen', download: 'Download', developer: 'Patrik Laszlo', personalHome: 'Persönlich', corporateHome: 'Business', clearCache: 'Abmelden und danach diese Menüoption aktiveren, um den Cache zu leeren', quit: 'Beenden', show: 'Maximieren', hide: 'Minimieren', copyLocation: 'Speicherort in Zwischenablage kopieren', copyLocationCopied: 'Speicherort in Zwischenablage kopiert.', //disallowedContent: 'Disallowed content! If not working, hang on, it will reset to the default home. (Max 5 seconds).', //unknownLink: 'Hang on, it might change while loading to the destination. If this is not a OneNote page, free to click on the P3X OneNote menu home' back: 'Zurück', forward: 'Nach vorne', }, dialog: { info: 'Info', openUrl: { info: 'Sie können zu jeder gewünschten URL gelangen', placeholder: 'Eine valide URL', }, minimizationBehavior: { title: 'Minimieren Einstellungen', }, setProxy: { placeholder: 'Proxy-Einstellungen', info: 'Um den Proxy-Cache zu leeren, nutzen Sie einen leeren String.', clear: 'Der Proxy ist deaktiviert.', set: (value) => { return `Proxyserver-Adresse ist ${value}` } }, redirect: { url: (opts) => { return `${opts.url}` }, urlExternal: 'Extern', urlInternal: 'Intern', } }, button: { yes: 'Ja', no: 'Nein', ok: 'OK', cancel: 'Abbrechen', save: 'Speichern', clear: 'Neu', go: 'Los', delete: 'Löschen', }, menu: { action: 'Bearbeiten', role: { edit: { undo: 'Rückgängig', redo: 'Wiederherstellen', cut: 'Ausschneiden', copy: 'Kopieren', paste: 'Einfügen', pasteandmatchstyle: 'Einfügen und Stil beibehalten', delete: 'Löschen', selectall: 'Alles auswählen', }, view: { reload: 'Neu laden', forcereload: 'Neu laden erzwingen', toggledevtools: 'Umschalten Entwicklertools', resetzoom: 'Zoom Normal', zoomin: 'Vergrößern', zoomout: 'Verkleinern', togglefullscreen: 'Vollbild', } }, help: { title: 'Hilfe', checkUpdates: 'Auf Updates prüfen' }, language: { label: 'Sprache / Language', alert: 'Sprache auf Deutsch eingestellt.', dialog: { label: 'Versuchen Sie, die Online OneNote-Sprache zu konfigurieren?', corporate: 'Korporativ', personal: 'Persönlich', }, translations: { 'en-US': 'Englisch / English', 'de-DE': 'Deutsch / German', 'pt-BR': 'Portuguese / Português', 'es-ES': 'Español / Spanish', 'fr-FR': 'Français / French', }, }, }, redirecting: 'Einen Moment, es wird zu einem neuen Notebook umgeleitet. Dies kann eine Weile dauern...', slow: 'Einen Moment, das Laden von OneNote kann eine Weile dauern...', updater: { 'checking-for-update': 'Prüfen auf neue Updates ...', 'update-available': 'Aktuellste Version wird geladen ...', 'update-not-available': 'Version ist aktuell.', error: (opts) => { return `Error in auto-updater: ${opts.errorMessage}` }, 'download-progress': (opts) => { return 'Heruntergeladen ' + opts.progressObj.percent + '%' }, 'update-downloaded': 'Aktuellste Version geladen. Neustarten um den Updatevorgang abzuschließen.' }, bookmarks: { title: 'Lesezeichen', add: 'Lesezeichen hinzufügen', edit: 'Lesezeichen bearbeiten', form: { title: 'Titel', url: 'URL' } }, validation: { required: 'Erforderlich', url: 'Ungültige URL', }, }; module.exports = translation; src/translation/en-US.js000066400000000000000000000120721516067350300155000ustar00rootroot00000000000000const translation = { title: 'P3X OneNote', label: { hideMenu: 'Hide main menu', donate: 'Donate', allowMultiple: { checkbox: 'Allow multiple instances (with some quirks)', message: { yes: 'Now you can use multiple instance with some quirks.', no: 'Now, it allows only one instance, no quirks' } }, disableHide: { //yes: 'Set the close button behaviour that will minimize to the tray instead of quitting', //no: 'Set the close button behaviour as to really quit the app', checkbox: 'Close to the tray', message: { yes: 'The close button really closes the app.', no: 'The close button, instead of quitting, it minimizes the app to the tray.', } }, optionToDisableInternalExternalPopup: 'Disable Internal / External Popup (all link internal)', settings: 'Settings', setProxy: 'Set proxy', openUrl: 'Open an URL', promptRedirectUrlTitle: 'Redirect to url', edit: 'Edit', view: 'View', download: 'Download', developer: 'Patrik Laszlo', personalHome: 'Personal home', corporateHome: 'Corporate home', clearCache: 'First sign off, then click this menu option to clear the cache', quit: 'Quit', show: 'Show', hide: 'Hide', copyLocation: 'Copy this location to the clipboard', copyLocationCopied: 'The location is copied to the clipboard.', //disallowedContent: 'Disallowed content! If not working, hang on, it will reset to the default home. (Max 5 seconds).', //unknownLink: 'Hang on, it might change while loading to the destination. If this is not a OneNote page, free to click on the P3X OneNote menu home', back: 'Back', forward: 'Forward', }, dialog: { info: 'Info', openUrl: { info: 'You can go to any URL you wish', placeholder: 'a valid URL', }, minimizationBehavior: { title: 'Minimization behavior', }, setProxy: { placeholder: 'Proxy setting', info: 'To clear the proxy, use an empty string.', clear: 'The proxy is turned off.', set: (value) => { return `The proxy is set as ${value}` } }, redirect: { url: (opts) => { return `${opts.url}` }, urlExternal: 'External', urlInternal: 'Internal', } }, button: { yes: 'Yes', no: 'No', ok: 'OK', cancel: 'Cancel', save: 'Save', clear: 'Clear', go: 'Go', delete: 'Delete', }, menu: { action: 'Action', role: { edit: { undo: 'Undo', redo: 'Redo', cut: 'Cut', copy: 'Copy', paste: 'Paste', pasteandmatchstyle: 'Paste and match style', delete: 'Delete', selectall: 'Select all', }, view: { reload: 'Reload', forcereload: 'Force reload', toggledevtools: 'Toggle development tools', resetzoom: 'Reset Zoom', zoomin: 'Zoom In', zoomout: 'Zoom out', togglefullscreen: 'Toggle full screen', } }, help: { title: 'Help', checkUpdates: 'Check updates' }, language: { label: 'Language', alert: 'Language set to english.', dialog: { label: 'Try to configure Online OneNote language?', corporate: 'Corporate', personal: 'Personal', }, translations: { 'en-US': 'English', 'de-DE': 'Deutsch / German', 'pt-BR': 'Português / Portuguese', 'es-ES': 'Español / Spanish', 'fr-FR': 'Français / French', } }, }, redirecting: 'Hang on, redirecting to a new notebook. It takes some time...', slow: 'Hang on, loading OneNote takes some time...', updater: { 'checking-for-update': 'Checking for update ...', 'update-available': 'Downloading latest release ...', 'update-not-available': 'No new update.', error: (opts) => { return `Error in auto-updater: ${opts.errorMessage}` }, 'download-progress': (opts) => { return 'Downloaded ' + opts.progressObj.percent + '%' }, 'update-downloaded': 'Update downloaded. You may restart the app to update.' }, bookmarks: { title: 'Bookmarks', add: 'Add bookmark', edit: 'Edit bookmarks', form: { title: 'Title', url: 'URL' } }, validation: { required: 'Required', url: 'Invalid url', }, }; module.exports = translation; src/translation/es-ES.js000066400000000000000000000127601516067350300154710ustar00rootroot00000000000000const translation = { title: 'P3X OneNote', label: { hideMenu: 'Esconder Menú Principal', donate: 'Donar', allowMultiple: { checkbox: 'Permitir múltiples instancias (podría haber algún comportamiento extraño)', message: { yes: 'Puedes usar múltiples instancias, con algún comportamiento extraño.', no: 'Una sola instancia permitida, sin comportamientos extraños.', } }, disableHide: { //yes: 'Configurar el cierre de manera que la aplicación se minimice a la barra de tareas', //no: 'Configurar el botónn de cierre de manera que se quite la aplicación', checkbox: 'Minimizar a la barra de tareas', message: { yes: 'El botón de cierre cerrará directamente la aplicación.', no: 'El botón de cierre, en vez de cerrar la aplicación, la minimizará a la barra de tareas.', } }, optionToDisableInternalExternalPopup: 'Deaktivieren Sie das interne / externe Popup (Toda enlace interna)', settings: 'Configuración', setProxy: 'Configuración del proxy', openUrl: 'Abrir URL', promptRedirectUrlTitle: 'Redireccionar a la URL', edit: 'Editar', view: 'Ver', download: 'Bajar', developer: 'Patrik Laszlo', personalHome: 'Home Personal', corporateHome: 'Home Corporativo', clearCache: 'Salga primero y después haga click en esta opción del menú para borrar la caché.', quit: 'Quitar', show: 'Mostrar', hide: 'Esconder', copyLocation: 'Copiar esta dirección al portapapeles', copyLocationCopied: 'Dirección copiada al portapapeles.', //disallowedContent: '¡Contenido no permitido!.Si no funciona, espere. Se reseteará al home por defecto. (Máx 5 segundos).', //unknownLink: 'Espere, cambiará mientras carga el destino. Si esto no es una página de OneNote, haga clic en el menú dentro de P3X OneNote home' back: 'Espalda', forward: 'Adelante', }, dialog: { info: 'Info', openUrl: { info: 'Puede ir a cualquier URL que desee.', placeholder: 'Inserte una URL válida', }, minimizationBehavior: { title: 'Comportamiento al minimizar', }, setProxy: { placeholder: 'Configuración del proxy', info: 'Para limpiar el proxy, introduzca una cadena vacía.', clear: 'Proxy apagado.', set: (value) => { return `Proxy configurado como ${value}` } }, redirect: { url: (opts) => { return `${opts.url}` }, urlExternal: 'Externa', urlInternal: 'Interna', } }, button: { yes: 'Si', no: 'No', ok: 'OK', cancel: 'Cancelar', save: 'Salvar', clear: 'Limpiar', go: 'Ir', delete: 'Eliminar', }, menu: { action: 'Acción', role: { edit: { undo: 'Deshacer', redo: 'Rehacer', cut: 'Cortar', copy: 'Copiar', paste: 'Pegar', pasteandmatchstyle: 'Pegar con el mismo estilo', delete: 'Borrar', selectall: 'Seleccionar todo', }, view: { reload: 'Recargar', forcereload: 'Fozar recarga', toggledevtools: 'Conmutar herramientas de desarrollo', resetzoom: 'Resetear Zoom', zoomin: 'Aumentar zoom', zoomout: 'Disminuir zoom', togglefullscreen: 'Cambiar a pantalla completa', } }, help: { title: 'Ayuda', checkUpdates: 'Revisar actualizaciones' }, language: { label: 'Lenguaje / Language', alert: 'Idioma configurado para español.', dialog: { label: '¿Configurar el lenguaje en la herramienta en línea de Onenote?', corporate: 'Corporativo', personal: 'Personal', }, translations: { 'en-US': 'Inglés / English', 'de-DE': 'Alemán / German', 'pt-BR': 'Português / Portuguese', 'es-ES': 'Español / Spanish', 'fr-FR': 'Français / French', } }, }, redirecting: 'Espere... redireccionando a una nueva libreta. Tardará un poco...', slow: 'Espere, cargar OneNote tarda un poco...', updater: { 'checking-for-update': 'Buscando actualizaciones...', 'update-available': 'Bajando la última release ...', 'update-not-available': 'No existen nuevas actualizaciones.', error: (opts) => { return `Error en el auto-updater: ${opts.errorMessage}` }, 'download-progress': (opts) => { return 'Bajado ' + opts.progressObj.percent + '%' }, 'update-downloaded': 'Actualización bajada. Reinicie la aplicación para actualizar.' }, bookmarks: { title: 'Marcadores', add: 'Añadir marcador', edit: 'Editar marcadores', form: { title: 'Título', url: 'URL' } }, validation: { required: 'Necesaria', url: 'URL invalida', }, }; module.exports = translation; src/translation/fr-FR.js000066400000000000000000000130611516067350300154640ustar00rootroot00000000000000const translation = { title: 'P3X OneNote', label: { hideMenu: 'Cacher le menu principal', donate: 'Faire un don', allowMultiple: { checkbox: 'Autoriser plusieurs instances (avec quelques bizarreries)', message: { yes: 'Vous pouvez maintenant utiliser plusieurs instances avec quelques bizarreries.', no: 'Une seule instance est possible, pas de bizarreries.' } }, disableHide: { //yes: 'Set the close button behaviour that will minimize to the tray instead of quitting', //no: 'Set the close button behaviour as to really quit the app', checkbox: 'Fermeture dans la barre des tâches', message: { yes: 'Le bouton de fermeture quitte l\'application.', no: 'Le bouton de fermeture réduit l\'application dans la barre des tâches.', } }, optionToDisableInternalExternalPopup: 'Désactiver les popups interne et externe', settings: 'Paramètres', setProxy: 'Sélection du proxy', openUrl: 'Ouvrir une URL', promptRedirectUrlTitle: 'Redirige vers l\'URL', edit: 'Edition', view: 'Affichage', download: 'Télécharger', developer: 'Patrik Laszlo', personalHome: 'Compte personnel', corporateHome: 'Compte professionnel', clearCache: 'Premièrement déconnectez-vous, puis sélectionnez cette option pour nettoyer le cache', quit: 'Quitter', show: 'Afficher', hide: 'Cacher', copyLocation: 'Copier cette emplacement', copyLocationCopied: 'Cette emplacement a été copié dans le presse-papier.', //disallowedContent: 'Disallowed content! If not working, hang on, it will reset to the default home. (Max 5 seconds).', //unknownLink: 'Hang on, it might change while loading to the destination. If this is not a OneNote page, free to click on the P3X OneNote menu home', back: 'Reculer', forward: 'Avancer', }, dialog: { info: 'Info', openUrl: { info: 'Il est possible d\'aller sur n\'importe quelle URL', placeholder: 'Une URL valide', }, minimizationBehavior: { title: 'Comportement pour le bouton de fermeture', }, setProxy: { placeholder: 'Paramètre du proxy', info: 'Pour supprimer le proxy, utilisez un champ vide.', clear: 'Le proxy est désactivé', set: (value) => { return `Le paramètre du proxy est : ${value}` } }, redirect: { url: (opts) => { return `${opts.url}` }, urlExternal: 'Externe', urlInternal: 'Interne', } }, button: { yes: 'Oui', no: 'Non', ok: 'OK', cancel: 'Annuler', save: 'Sauvegarder', clear: 'Nettoyer', go: 'Aller à', delete: 'Supprimer', }, menu: { action: 'Action', role: { edit: { undo: 'Annuler', redo: 'Rétablir', cut: 'Couper', copy: 'Copier', paste: 'Coller', pasteandmatchstyle: 'Coller en gardant le style d\'origine', delete: 'Supprimer', selectall: 'Tout sélectionner', }, view: { reload: 'Actualiser', forcereload: 'Forcer l\'actualisation', toggledevtools: 'Afficher les outils de développement', resetzoom: 'Réintialiser le zoom', zoomin: 'Zoomer', zoomout: 'Dézoomer', togglefullscreen: 'Activer le mode plein écran', } }, help: { title: 'Aide', checkUpdates: 'Rechercher des mises à jour' }, language: { label: 'Langue / Language', alert: 'Langue paramétrée à Français.', dialog: { label: 'Essayer de configurer la langue de OneNote en ligne ?', corporate: 'Entreprise', personal: 'Personnel', }, translations: { 'en-US': 'English', 'de-DE': 'Deutsch / German', 'pt-BR': 'Português / Portuguese', 'es-ES': 'Español / Spanish', 'fr-FR': 'Français / French', } }, }, redirecting: 'Veuillez patienter, redirection en cours ...', slow: 'Veuillez patienter, le chargement de OneNote peut être lent ...', updater: { 'checking-for-update': 'Recherche de mise à jour ...', 'update-available': 'Téléchargement des dernière mises à jour ...', 'update-not-available': 'Pas de nouvelles mise à jour.', error: (opts) => { return `Erreur dans la mise à jour automatique : ${opts.errorMessage}` }, 'download-progress': (opts) => { return 'Téléchargé ' + opts.progressObj.percent + '%' }, 'update-downloaded': 'Mise à jour terminée. Vous devez rédemarrer l\'application pour finir la mise à jour.' }, bookmarks: { title: 'Favoris', add: 'Ajouter un marque-page', edit: 'Modifier les favoris', form: { title: 'Titre', url: 'URL' } }, validation: { required: 'Obligatoire', url: 'URL invalide', }, }; module.exports = translation; src/translation/pt-BR.js000066400000000000000000000127021516067350300154750ustar00rootroot00000000000000const translation = { title: 'P3X OneNote', label: { hideMenu: 'Mostrar menu principal', donate: 'Doar', allowMultiple: { checkbox: 'Permitir múltiplas instâncias (com algumas pecularidades)', message: { yes: 'Agora você pode utilizar múltiplas instâncias com algumas peculiaridades.', no: 'Agora, é permitido somente uma instância, sem peculiaridades' } }, disableHide: { yes: 'Defina o comportamento do botão Fechar que irá minimizar para a bandeja em vez de sair', no: 'Defina o comportamento do botão Fechar para realmente sair da aplicação', checkbox: 'Fechar bandeja', message: { yes: 'O botão de fechar realmente fecha o app.', no: 'O botão de fechar, ao invés de sair, minimiza o app na bandeja.', } }, optionToDisableInternalExternalPopup: 'Desativar pop-up interno / externo (todos link interno)', settings: 'Configurações', setProxy: 'Definir um proxy', openUrl: 'Abrir uma URL', promptRedirectUrlTitle: 'Redirecionar para URL', edit: 'Editar', view: 'Ver', download: 'Baixar', developer: 'Patrik Laszlo', personalHome: 'Página pessoal', corporateHome: 'Negócios', clearCache: 'Primeiro saia, depois clique nessa opção para limpar o cache', quit: 'Sair', show: 'Mostrar', hide: 'Esconder', copyLocation: 'Copiar para área de transferência', copyLocationCopied: 'A localização foi copiada para a área de transferência.', disallowedContent: 'Conteúdo desabilitado! Se não estiver funcionando, espere, ele será redefinido para o padrão. (Máximo de 5 segundos).', unknownLink: 'Espere um pouco, pode mudar durante o carregamento para o destino. Se esta não for uma página do OneNote, sinta-se livre para clicar na página inicial do P3X no menu', back: 'Voltar', forward: 'Prosseguir', }, dialog: { info: 'Informações', openUrl: { info: 'Você pode ir para qualquer URL que deseja', placeholder: 'uma URL válida', }, minimizationBehavior: { title: 'Comportamento de minimização', }, setProxy: { placeholder: 'Configurações de proxy', info: 'Para limpar o proxy, deixe em branco.', clear: 'O proxy é desligado.', set: (value) => { return `O proxy é definido como ${value}` } }, redirect: { url: (opts) => { return `${opts.url}` }, urlExternal: 'Externo', urlInternal: 'Interno', } }, button: { yes: 'Sim', no: 'Não', ok: 'OK', cancel: 'Cancelar', save: 'Salvar', clear: 'Limpar', go: 'Ir', delete: 'Excluir', }, menu: { action: 'Ação', role: { edit: { undo: 'Desfazer', redo: 'Refazer', cut: 'Cortar', copy: 'Copiar', paste: 'Colar', pasteandmatchstyle: 'Colar com o mesmo estilo', delete: 'Deletar', selectall: 'Selecionar tudo', }, view: { reload: 'Recarregar', forcereload: 'Forçar recarregamento', toggledevtools: 'Alternar ferramentas de desenvolvimento', resetzoom: 'Resetar zoom', zoomin: 'Aumentar zoom', zoomout: 'Diminuir zoom', togglefullscreen: 'Tela cheia', } }, help: { title: 'Ajuda', checkUpdates: 'Verificar atualizações' }, language: { label: 'Idioma / Language', alert: 'Idioma definido para português.', dialog: { label: 'Tentar configurar idioma do OneNote Online?', corporate: 'Corporativo', personal: 'Pessoal', }, translations: { 'en-US': 'English', 'de-DE': 'Deutsch / German', 'pt-BR': 'Português / Portuguese', 'es-ES': 'Español / Spanish', 'fr-FR': 'Français / French', } }, }, redirecting: 'Aguarde, redirecionando para um novo caderno. Isso leva algum tempo...', slow: 'Aguarde, o carregamento do OneNote leva algum tempo...', updater: { 'checking-for-update': 'Verificando atualizações ...', 'update-available': 'Baixando última atualização ...', 'update-not-available': 'Nenhuma atualização.', error: (opts) => { return `Erro no atualizador: ${opts.errorMessage}` }, 'download-progress': (opts) => { return 'Baixado ' + opts.progressObj.percent + '%' }, 'update-downloaded': 'Atualização baixada. Você precisa reiniciar o app para fazer efeito.' }, bookmarks: { title: 'Favoritas', add: 'Adicionar favorito', edit: 'Editar favoritos', form: { title: 'Título', url: 'URL' } }, validation: { required: 'Requeridas', url: 'URL inválida', }, }; module.exports = translation;