From 2e3e7097e69bc9ba0945e7b0c781a2c886ad67a1 Mon Sep 17 00:00:00 2001 From: Jon Schoning Date: Wed, 30 Jan 2019 20:54:47 -0600 Subject: [PATCH] init --- .dockerignore | 2 + .env | 3 + .gitignore | 30 + Dockerfile | 6 + LICENSE | 660 + Makefile | 67 + README.md | 89 + app/DevelMain.hs | 99 + app/devel.hs | 6 + app/main.hs | 5 + app/migration/Main.hs | 83 + changelog.md | 4 + config/favicon.ico | Bin 0 -> 198 bytes config/keter.yml | 70 + config/robots.txt | 1 + config/routes | 40 + config/settings.yml | 41 + config/test-settings.yml | 12 + docker-compose.yml | 16 + espial.cabal | 406 + package.yaml | 208 + purs/.gitignore | 11 + purs/Makefile | 28 + purs/README.md | 29 + purs/package-lock.json | 1280 ++ purs/package.json | 15 + purs/packages.dhall | 121 + purs/spago.dhall | 24 + purs/src/App.purs | 119 + purs/src/Component/AccountSettings.purs | 91 + purs/src/Component/Add.purs | 179 + purs/src/Component/BList.purs | 48 + purs/src/Component/BMark.purs | 247 + purs/src/Component/Markdown.purs | 15 + purs/src/Component/NList.purs | 75 + purs/src/Component/NNote.purs | 197 + purs/src/Component/RawHtml.js | 8 + purs/src/Component/RawHtml.purs | 62 + purs/src/Globals.js | 65 + purs/src/Globals.purs | 97 + purs/src/Main.purs | 63 + purs/src/Marked.js | 7 + purs/src/Marked.purs | 9 + purs/src/Model.purs | 53 + purs/src/Util.purs | 136 + purs/test/Main.purs | 9 + sample-bookmarks.json | 88 + sample-migrate.sh | 3 + src/Application.hs | 182 + src/Foundation.hs | 250 + src/Generic.hs | 20 + src/Handler/AccountSettings.hs | 50 + src/Handler/Add.hs | 67 + src/Handler/Archive.hs | 106 + src/Handler/Common.hs | 31 + src/Handler/Docs.hs | 9 + src/Handler/Edit.hs | 51 + src/Handler/Home.hs | 12 + src/Handler/Notes.hs | 134 + src/Handler/User.hs | 62 + src/Import.hs | 86 + src/Import/NoFoundation.hs | 34 + src/Model.hs | 569 + src/ModelCustom.hs | 60 + src/PathPiece.hs | 55 + src/Pretty.hs | 15 + src/Settings.hs | 150 + src/Settings/StaticFiles.hs | 18 + src/Types.hs | 13 + stack.yaml | 11 + static/css/main.css | 161 + static/css/popup.css | 35 + static/css/tachyons.min.css | 3 + static/css/tachyons.min.css.gz | Bin 0 -> 13711 bytes static/fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20335 bytes static/fonts/glyphicons-halflings-regular.svg | 229 + static/fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 41280 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23320 bytes static/images/bluepin.gif | Bin 0 -> 420 bytes static/js/app.js | 14152 ++++++++++++++++ static/js/app.js.gz | Bin 0 -> 76960 bytes static/js/app.min.js | 1 + static/js/app.min.js.gz | Bin 0 -> 48172 bytes static/js/html5shiv.min.js | 4 + static/js/html5shiv.min.js.gz | Bin 0 -> 1365 bytes static/js/js.cookie-2.2.0.min.js | 3 + static/js/js.cookie-2.2.0.min.js.gz | Bin 0 -> 920 bytes static/js/marked.min.js | 6 + static/js/marked.min.js.gz | Bin 0 -> 7720 bytes static/js/moment.min.js | 1 + static/js/moment.min.js.gz | Bin 0 -> 16794 bytes templates/change-password.hamlet | 18 + templates/default-layout-wrapper.hamlet | 37 + templates/default-layout.hamlet | 34 + templates/docs-search.hamlet | 86 + templates/homepage.hamlet | 1 + templates/login.hamlet | 20 + templates/note.hamlet | 6 + templates/notes.hamlet | 27 + templates/pager.hamlet | 13 + templates/popup-layout.hamlet | 16 + templates/search.hamlet | 14 + templates/user-settings.hamlet | 8 + templates/user.hamlet | 56 + test/Handler/CommonSpec.hs | 17 + test/Handler/HomeSpec.hs | 13 + test/Spec.hs | 1 + test/TestImport.hs | 72 + 108 files changed, 21946 insertions(+) create mode 100644 .dockerignore create mode 100644 .env create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 README.md create mode 100644 app/DevelMain.hs create mode 100644 app/devel.hs create mode 100644 app/main.hs create mode 100644 app/migration/Main.hs create mode 100644 changelog.md create mode 100644 config/favicon.ico create mode 100644 config/keter.yml create mode 100644 config/robots.txt create mode 100644 config/routes create mode 100644 config/settings.yml create mode 100644 config/test-settings.yml create mode 100644 docker-compose.yml create mode 100644 espial.cabal create mode 100644 package.yaml create mode 100644 purs/.gitignore create mode 100644 purs/Makefile create mode 100644 purs/README.md create mode 100644 purs/package-lock.json create mode 100644 purs/package.json create mode 100644 purs/packages.dhall create mode 100644 purs/spago.dhall create mode 100644 purs/src/App.purs create mode 100644 purs/src/Component/AccountSettings.purs create mode 100644 purs/src/Component/Add.purs create mode 100644 purs/src/Component/BList.purs create mode 100644 purs/src/Component/BMark.purs create mode 100644 purs/src/Component/Markdown.purs create mode 100644 purs/src/Component/NList.purs create mode 100644 purs/src/Component/NNote.purs create mode 100644 purs/src/Component/RawHtml.js create mode 100644 purs/src/Component/RawHtml.purs create mode 100644 purs/src/Globals.js create mode 100644 purs/src/Globals.purs create mode 100644 purs/src/Main.purs create mode 100644 purs/src/Marked.js create mode 100644 purs/src/Marked.purs create mode 100644 purs/src/Model.purs create mode 100644 purs/src/Util.purs create mode 100644 purs/test/Main.purs create mode 100644 sample-bookmarks.json create mode 100755 sample-migrate.sh create mode 100644 src/Application.hs create mode 100644 src/Foundation.hs create mode 100644 src/Generic.hs create mode 100644 src/Handler/AccountSettings.hs create mode 100644 src/Handler/Add.hs create mode 100644 src/Handler/Archive.hs create mode 100644 src/Handler/Common.hs create mode 100644 src/Handler/Docs.hs create mode 100644 src/Handler/Edit.hs create mode 100644 src/Handler/Home.hs create mode 100644 src/Handler/Notes.hs create mode 100644 src/Handler/User.hs create mode 100644 src/Import.hs create mode 100644 src/Import/NoFoundation.hs create mode 100644 src/Model.hs create mode 100644 src/ModelCustom.hs create mode 100644 src/PathPiece.hs create mode 100644 src/Pretty.hs create mode 100644 src/Settings.hs create mode 100644 src/Settings/StaticFiles.hs create mode 100644 src/Types.hs create mode 100644 stack.yaml create mode 100644 static/css/main.css create mode 100644 static/css/popup.css create mode 100644 static/css/tachyons.min.css create mode 100644 static/css/tachyons.min.css.gz create mode 100644 static/fonts/glyphicons-halflings-regular.eot create mode 100644 static/fonts/glyphicons-halflings-regular.svg create mode 100644 static/fonts/glyphicons-halflings-regular.ttf create mode 100644 static/fonts/glyphicons-halflings-regular.woff create mode 100644 static/images/bluepin.gif create mode 100644 static/js/app.js create mode 100644 static/js/app.js.gz create mode 100644 static/js/app.min.js create mode 100644 static/js/app.min.js.gz create mode 100644 static/js/html5shiv.min.js create mode 100644 static/js/html5shiv.min.js.gz create mode 100644 static/js/js.cookie-2.2.0.min.js create mode 100644 static/js/js.cookie-2.2.0.min.js.gz create mode 100644 static/js/marked.min.js create mode 100644 static/js/marked.min.js.gz create mode 100644 static/js/moment.min.js create mode 100644 static/js/moment.min.js.gz create mode 100644 templates/change-password.hamlet create mode 100644 templates/default-layout-wrapper.hamlet create mode 100644 templates/default-layout.hamlet create mode 100644 templates/docs-search.hamlet create mode 100644 templates/homepage.hamlet create mode 100644 templates/login.hamlet create mode 100644 templates/note.hamlet create mode 100644 templates/notes.hamlet create mode 100644 templates/pager.hamlet create mode 100644 templates/popup-layout.hamlet create mode 100644 templates/search.hamlet create mode 100644 templates/user-settings.hamlet create mode 100644 templates/user.hamlet create mode 100644 test/Handler/CommonSpec.hs create mode 100644 test/Handler/HomeSpec.hs create mode 100644 test/Spec.hs create mode 100644 test/TestImport.hs diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..7766c33 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +.stack +.stack-work diff --git a/.env b/.env new file mode 100644 index 0000000..a41ec6c --- /dev/null +++ b/.env @@ -0,0 +1,3 @@ +HUB_REPO=localhost +APPIMAGE=espial:espial +APPDATA=. \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..79e70eb --- /dev/null +++ b/.gitignore @@ -0,0 +1,30 @@ +dist* +static/tmp/ +static/combined/ +config/client_session_key.aes +*.hi +*.o +*.sqlite3 +*.sqlite3-shm +*.sqlite3-wal +.hsenv* +cabal-dev/ +.stack-work/ +yesod-devel/ +.cabal-sandbox +cabal.sandbox.config +.DS_Store +*.swp +*.keter +*~ +\#* +\.#* +test-project.cabal +bookmarks-*.json +TAGS +purs/dist +purs/output +purs/generated-docs +tmp +.cache +tags diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..28342be --- /dev/null +++ b/Dockerfile @@ -0,0 +1,6 @@ +#-*- mode:conf; -*- + +FROM jonschoning/espial:scratch +WORKDIR /app +COPY . . +CMD ./espial +RTS -T diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..cba6f6a --- /dev/null +++ b/LICENSE @@ -0,0 +1,660 @@ +### GNU AFFERO GENERAL PUBLIC LICENSE + +Version 3, 19 November 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. + + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + +### Preamble + +The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + +The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains +free software for all its users. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + +Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + +A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + +The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + +An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing +under this license. + +The precise terms and conditions for copying, distribution and +modification follow. + +### TERMS AND CONDITIONS + +#### 0. Definitions. + +"This License" refers to version 3 of the GNU Affero General Public +License. + +"Copyright" also means copyright-like laws that apply to other kinds +of works, such as semiconductor masks. + +"The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + +To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of +an exact copy. The resulting work is called a "modified version" of +the earlier work or a work "based on" the earlier work. + +A "covered work" means either the unmodified Program or a work based +on the Program. + +To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user +through a computer network, with no transfer of a copy, is not +conveying. + +An interactive user interface displays "Appropriate Legal Notices" to +the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +#### 1. Source Code. + +The "source code" for a work means the preferred form of the work for +making modifications to it. "Object code" means any non-source form of +a work. + +A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + +The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + +The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can +regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same +work. + +#### 2. Basic Permissions. + +All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, +without conditions so long as your license otherwise remains in force. +You may convey covered works to others for the sole purpose of having +them make modifications exclusively for you, or provide you with +facilities for running those works, provided that you comply with the +terms of this License in conveying all material for which you do not +control copyright. Those thus making or running the covered works for +you must do so exclusively on your behalf, under your direction and +control, on terms that prohibit them from making any copies of your +copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the +conditions stated below. Sublicensing is not allowed; section 10 makes +it unnecessary. + +#### 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + +When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such +circumvention is effected by exercising rights under this License with +respect to the covered work, and you disclaim any intention to limit +operation or modification of the work as a means of enforcing, against +the work's users, your or third parties' legal rights to forbid +circumvention of technological measures. + +#### 4. Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + +#### 5. Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these +conditions: + +- a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. +- b) The work must carry prominent notices stating that it is + released under this License and any conditions added under + section 7. This requirement modifies the requirement in section 4 + to "keep intact all notices". +- c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. +- d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + +A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + +#### 6. Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms of +sections 4 and 5, provided that you also convey the machine-readable +Corresponding Source under the terms of this License, in one of these +ways: + +- a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. +- b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the Corresponding + Source from a network server at no charge. +- c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. +- d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. +- e) Convey the object code using peer-to-peer transmission, + provided you inform other peers where the object code and + Corresponding Source of the work are being offered to the general + public at no charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + +A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, +family, or household purposes, or (2) anything designed or sold for +incorporation into a dwelling. In determining whether a product is a +consumer product, doubtful cases shall be resolved in favor of +coverage. For a particular product received by a particular user, +"normally used" refers to a typical or common use of that class of +product, regardless of the status of the particular user or of the way +in which the particular user actually uses, or expects or is expected +to use, the product. A product is a consumer product regardless of +whether the product has substantial commercial, industrial or +non-consumer uses, unless such uses represent the only significant +mode of use of the product. + +"Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to +install and execute modified versions of a covered work in that User +Product from a modified version of its Corresponding Source. The +information must suffice to ensure that the continued functioning of +the modified object code is in no case prevented or interfered with +solely because modification has been made. + +If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + +The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or +updates for a work that has been modified or installed by the +recipient, or for the User Product in which it has been modified or +installed. Access to a network may be denied when the modification +itself materially and adversely affects the operation of the network +or violates the rules and protocols for communication across the +network. + +Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + +#### 7. Additional Terms. + +"Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders +of that material) supplement the terms of this License with terms: + +- a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or +- b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or +- c) Prohibiting misrepresentation of the origin of that material, + or requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or +- d) Limiting the use for publicity purposes of names of licensors + or authors of the material; or +- e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or +- f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions + of it) with contractual assumptions of liability to the recipient, + for any liability that these contractual assumptions directly + impose on those licensors and authors. + +All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; the +above requirements apply either way. + +#### 8. Termination. + +You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + +#### 9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or run +a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + +#### 10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + +An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + +#### 11. Patents. + +A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + +A contributor's "essential patent claims" are all patent claims owned +or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + +A patent license is "discriminatory" if it does not include within the +scope of its coverage, prohibits the exercise of, or is conditioned on +the non-exercise of one or more of the rights that are specifically +granted under this License. You may not convey a covered work if you +are a party to an arrangement with a third party that is in the +business of distributing software, under which you make payment to the +third party based on the extent of your activity of conveying the +work, and under which the third party grants, to any of the parties +who would receive the covered work from you, a discriminatory patent +license (a) in connection with copies of the covered work conveyed by +you (or copies made from those copies), or (b) primarily for and in +connection with specific products or compilations that contain the +covered work, unless you entered into that arrangement, or that patent +license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + +#### 12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under +this License and any other pertinent obligations, then as a +consequence you may not convey it at all. For example, if you agree to +terms that obligate you to collect a royalty for further conveying +from those to whom you convey the Program, the only way you could +satisfy both those terms and this License would be to refrain entirely +from conveying the Program. + +#### 13. Remote Network Interaction; Use with the GNU General Public License. + +Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your +version supports such interaction) an opportunity to receive the +Corresponding Source of your version by providing access to the +Corresponding Source from a network server at no charge, through some +standard or customary means of facilitating copying of software. This +Corresponding Source shall include the Corresponding Source for any +work covered by version 3 of the GNU General Public License that is +incorporated pursuant to the following paragraph. + +Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + +#### 14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions +of the GNU Affero General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever +published by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future versions +of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + +Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + +#### 15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT +WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND +PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE +DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR +CORRECTION. + +#### 16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR +CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT +NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR +LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM +TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER +PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +#### 17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + +END OF TERMS AND CONDITIONS + +### How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + +To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively state +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper +mail. + +If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for +the specific requirements. + +You should also get your employer (if you work as a programmer) or +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. For more information on this, and how to apply and follow +the GNU AGPL, see . diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..4e6d308 --- /dev/null +++ b/Makefile @@ -0,0 +1,67 @@ +.PHONY: clean build + +all: build + +build: + @stack build + +build-fast: + @stack build --fast + +build-watch: + @stack build --file-watch --fast --ghc-options=-fno-code + +repl: + @stack ghci --test --bench --ghci-options=-fno-code --main-is=espial:exe:espial + +ghcid: + @ghcid -c "stack ghci --test --bench --ghci-options=-fno-code --main-is=espial:exe:espial" + +devel: + @yesod devel + +migrate-createdb: + @stack exec migration -- createdb --conn espial.sqlite3 + +serve: + @stack exec espial -- +RTS -T + +_ESPIAL_PS_ID = $$(docker-compose ps -q espial) +_LOCAL_INSTALL_PATH = $$(stack path | grep local-install-root | awk -e '{print $$2}') +_EKG_ASSETS_PATH = $$(find .stack-work -type d | grep ekg.*assets) + +docker-compose-build: build + @rm -Rf dist && mkdir -p dist + @cp $(_LOCAL_INSTALL_PATH)/bin/* dist + @cp -R static dist + @rm -Rf dist/static/tmp + @cp -R config dist + @mkdir -p dist/ekg/assets + @cp -R $(_EKG_ASSETS_PATH) dist/ekg + @docker-compose build espial +docker-compose-up: + @docker-compose up --no-deps --no-build espial +docker-compose-down: + @docker-compose down +docker-compose-up-d: + @docker-compose up --no-deps --no-build -d espial +docker-compose-pull: + @docker-compose pull espial +docker-compose-push: + @docker tag localhost/espial:espial $(HUB_REPO)/espial:espial + @docker-compose push espial +docker-espial-logs: + @docker logs -f --since `date -u +%FT%TZ` $(_ESPIAL_PS_ID) +docker-espial-shell: + @$(docker_espial) sh + + +_HUB_REPO = ${HUB_REPO} +ifeq ($(_HUB_REPO),) + _HUB_REPO := "localhost" +endif + +docker_espial = docker-compose exec espial + +clean: + @stack clean diff --git a/README.md b/README.md new file mode 100644 index 0000000..4fed7d3 --- /dev/null +++ b/README.md @@ -0,0 +1,89 @@ +# Espial + +Espial is an open-source, web-based bookmarking server. + +It allows mutiple accounts, but currently intended for self-host scenarios. + +The bookmarks are stored in a sqlite3 database, for ease of deployment & maintenence. + +The easist way for logged-in users to add bookmarks, is with the "bookmarklet", found on the Settings page. + +## demo server + +log in — username: demo password: demo + +https://esp.ae8.org/u:demo + +![jpg](https://i.imgur.com/2viEMQj.png) + +## Server Setup (from source) + +1. [Install Stack](https://haskell-lang.org/get-started) + - On POSIX systems, this is usually `curl -sSL https://get.haskellstack.org/ | sh` + +2. Build executables + + ``` + stack build + ``` + +3. Create the database + + ``` + stack exec migration -- createdb --conn espial.sqlite3 + ``` + +4. Create a user + + ``` + stack exec migration -- createuser --conn espial.sqlite3 --userName myusername --userPassword myuserpassword + ``` + +5. Import a bookmark file for a user (optional) + + ``` + stack exec migration -- importbookmarks --conn espial.sqlite3 --userName myusername --bookmarkFile sample-bookmarks.json + ``` + +6. Start a production server: + + ``` + stack exec espial -- +RTS -T + ``` + +see `config/settings.yml` for changing default run-time parameters / environment variables + +default app http port: `3000` + +default ekg http port: `8000` + +ssl: use reverse proxy + +## Development + +### Backend + +- Install the `yesod` command line tool: `stack install yesod-bin --install-ghc` + + +- Start a development server: + + ``` + yesod devel + ``` + +### Frontend + +- See `purs/` folder + +## Import Bookmark file format + +see `sample-bookmarks.json`, which contains a JSON array, each line containing a `FileBookmark` object. + +example: + +``` +[ {"href":"http://raganwald.com/2018/02/23/forde.html","description":"Forde's Tenth Rule, or, \"How I Learned to Stop Worrying and \u2764\ufe0f the State Machine\"","extended":"","time":"2018-02-26T22:57:20Z","shared":"yes","toread":"yes","tags":"raganwald"}, +, {"href":"http://downloads.haskell.org/~ghc/latest/docs/html/users_guide/flags.html","description":"7.6. Flag reference \u2014 Glasgow Haskell Compiler 8.2.2 User's Guide","extended":"-fprint-expanded-synonyms","time":"2018-02-26T21:52:02Z","shared":"yes","toread":"no","tags":"ghc haskell"}, +] +``` diff --git a/app/DevelMain.hs b/app/DevelMain.hs new file mode 100644 index 0000000..b327943 --- /dev/null +++ b/app/DevelMain.hs @@ -0,0 +1,99 @@ +-- | Running your app inside GHCi. +-- +-- To start up GHCi for usage with Yesod, first make sure you are in dev mode: +-- +-- > cabal configure -fdev +-- +-- Note that @yesod devel@ automatically sets the dev flag. +-- Now launch the repl: +-- +-- > cabal repl --ghc-options="-O0 -fobject-code" +-- +-- To start your app, run: +-- +-- > :l DevelMain +-- > DevelMain.update +-- +-- You can also call @DevelMain.shutdown@ to stop the app +-- +-- You will need to add the foreign-store package to your .cabal file. +-- It is very light-weight. +-- +-- If you don't use cabal repl, you will need +-- to run the following in GHCi or to add it to +-- your .ghci file. +-- +-- :set -DDEVELOPMENT +-- +-- There is more information about this approach, +-- on the wiki: https://github.com/yesodweb/yesod/wiki/ghci + +module DevelMain where + +import Prelude +import Application (getApplicationRepl, shutdownApp) + +import Control.Exception (finally) +import Control.Monad ((>=>)) +import Control.Concurrent +import Data.IORef +import Foreign.Store +import Network.Wai.Handler.Warp +import GHC.Word + +-- | Start or restart the server. +-- newStore is from foreign-store. +-- A Store holds onto some data across ghci reloads +update :: IO () +update = do + mtidStore <- lookupStore tidStoreNum + case mtidStore of + -- no server running + Nothing -> do + done <- storeAction doneStore newEmptyMVar + tid <- start done + _ <- storeAction (Store tidStoreNum) (newIORef tid) + return () + -- server is already running + Just tidStore -> restartAppInNewThread tidStore + where + doneStore :: Store (MVar ()) + doneStore = Store 0 + + -- shut the server down with killThread and wait for the done signal + restartAppInNewThread :: Store (IORef ThreadId) -> IO () + restartAppInNewThread tidStore = modifyStoredIORef tidStore $ \tid -> do + killThread tid + withStore doneStore takeMVar + readStore doneStore >>= start + + + -- | Start the server in a separate thread. + start :: MVar () -- ^ Written to when the thread is killed. + -> IO ThreadId + start done = do + (port, site, app) <- getApplicationRepl + forkIO (finally (runSettings (setPort port defaultSettings) app) + -- Note that this implies concurrency + -- between shutdownApp and the next app that is starting. + -- Normally this should be fine + (putMVar done () >> shutdownApp site)) + +-- | kill the server +shutdown :: IO () +shutdown = do + mtidStore <- lookupStore tidStoreNum + case mtidStore of + -- no server running + Nothing -> putStrLn "no Yesod app running" + Just tidStore -> do + withStore tidStore $ readIORef >=> killThread + putStrLn "Yesod app is shutdown" + +tidStoreNum :: Word32 +tidStoreNum = 1 + +modifyStoredIORef :: Store (IORef a) -> (a -> IO a) -> IO () +modifyStoredIORef store f = withStore store $ \ref -> do + v <- readIORef ref + f v >>= writeIORef ref diff --git a/app/devel.hs b/app/devel.hs new file mode 100644 index 0000000..a0e38e3 --- /dev/null +++ b/app/devel.hs @@ -0,0 +1,6 @@ +{-# LANGUAGE PackageImports #-} +import "espial" Application (develMain) +import Prelude (IO) + +main :: IO () +main = develMain diff --git a/app/main.hs b/app/main.hs new file mode 100644 index 0000000..4ffa93d --- /dev/null +++ b/app/main.hs @@ -0,0 +1,5 @@ +import Prelude (IO) +import Application (appMain) + +main :: IO () +main = appMain diff --git a/app/migration/Main.hs b/app/migration/Main.hs new file mode 100644 index 0000000..9adf2da --- /dev/null +++ b/app/migration/Main.hs @@ -0,0 +1,83 @@ +{-# OPTIONS_GHC -fno-warn-name-shadowing #-} + +module Main where + +import Types +import Model +import ModelCustom + +import qualified Database.Persist as P +import qualified Database.Persist.Sqlite as P + +import ClassyPrelude +import Lens.Micro + +import Options.Generic + +data MigrationOpts + = CreateDB { conn :: Text} + | CreateUser { conn :: Text + , userName :: Text + , userPassword :: Text + , userApiToken :: Maybe Text } + | DeleteUser { conn :: Text + , userName :: Text} + | ImportBookmarks { conn :: Text + , userName :: Text + , bookmarkFile :: FilePath} + | ImportNotes { conn :: Text + , userName :: Text + , noteDirectory :: FilePath} + | PrintMigrateDB { conn :: Text} + deriving (Generic, Show) + +instance ParseRecord MigrationOpts + +main :: IO () +main = do + args <- getRecord "Migrations" + case args of + PrintMigrateDB conn -> + P.runSqlite conn dumpMigration + + CreateDB conn -> do + let connInfo = P.mkSqliteConnectionInfo conn + & set P.fkEnabled False + P.runSqliteInfo connInfo runMigrations + + CreateUser conn uname upass utoken -> + P.runSqlite conn $ do + hash' <- liftIO (hashPassword upass) + void $ P.upsertBy + (UniqueUserName uname) + (User uname hash' utoken False False False) + [ UserPasswordHash P.=. hash' + , UserApiToken P.=. utoken + , UserPrivateDefault P.=. False + , UserArchiveDefault P.=. False + , UserPrivacyLock P.=. False + ] + pure () :: DB () + + DeleteUser conn uname -> + P.runSqlite conn $ do + muser <- P.getBy (UniqueUserName uname) + case muser of + Nothing -> liftIO (print (uname ++ "not found")) + Just (P.Entity uid _) -> do + P.deleteCascade uid + pure () :: DB () + + ImportBookmarks conn uname file -> + P.runSqlite conn $ do + muser <- P.getBy (UniqueUserName uname) + case muser of + Just (P.Entity uid _) -> insertFileBookmarks uid file + Nothing -> liftIO (print (uname ++ "not found")) + + ImportNotes conn uname dir -> + P.runSqlite conn $ do + muser <- P.getBy (UniqueUserName uname) + case muser of + Just (P.Entity uid _) -> insertDirFileNotes uid dir + Nothing -> liftIO (print (uname ++ "not found")) diff --git a/changelog.md b/changelog.md new file mode 100644 index 0000000..b860ecc --- /dev/null +++ b/changelog.md @@ -0,0 +1,4 @@ + +__v0.0.7__ + +init diff --git a/config/favicon.ico b/config/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..3f0bb6226f0ad242aaadfbd1aaf29f2d3a047e50 GIT binary patch literal 198 ocmZQzU<5(|0VXiLfq{WR42U&=SOAC>fEXlCYw-U+0|O-(029X{CjbBd literal 0 HcmV?d00001 diff --git a/config/keter.yml b/config/keter.yml new file mode 100644 index 0000000..d19e19b --- /dev/null +++ b/config/keter.yml @@ -0,0 +1,70 @@ +# After you've edited this file, remove the following line to allow +# `yesod keter` to build your bundle. +user-edited: false + +# A Keter app is composed of 1 or more stanzas. The main stanza will define our +# web application. See the Keter documentation for more information on +# available stanzas. +stanzas: + + # Your Yesod application. + - type: webapp + + # Name of your executable. You are unlikely to need to change this. + # Note that all file paths are relative to the keter.yml file. + # + # The path given is for Stack projects. If you're still using cabal, change + # to + # exec: ../dist/build/espial/espial + exec: ../dist/bin/espial + + # Command line options passed to your application. + args: [] + + hosts: + # You can specify one or more hostnames for your application to respond + # to. The primary hostname will be used for generating your application + # root. + - www.espial.com + + # Enable to force Keter to redirect to https + # Can be added to any stanza + requires-secure: false + + # Static files. + - type: static-files + hosts: + - static.espial.com + root: ../static + + # Uncomment to turn on directory listings. + # directory-listing: true + + # Redirect plain domain name to www. + - type: redirect + + hosts: + - espial.com + actions: + - host: www.espial.com + # secure: false + # port: 80 + + # Uncomment to switch to a non-permanent redirect. + # status: 303 + +# Use the following to automatically copy your bundle upon creation via `yesod +# keter`. Uses `scp` internally, so you can set it to a remote destination +# copy-to: user@host:/opt/keter/incoming/ + +# You can pass arguments to `scp` used above. This example limits bandwidth to +# 1024 Kbit/s and uses port 2222 instead of the default 22 +# copy-to-args: +# - "-l 1024" +# - "-P 2222" + +# If you would like to have Keter automatically create a PostgreSQL database +# and set appropriate environment variables for it to be discovered, uncomment +# the following line. +# plugins: +# postgres: true diff --git a/config/robots.txt b/config/robots.txt new file mode 100644 index 0000000..7d329b1 --- /dev/null +++ b/config/robots.txt @@ -0,0 +1 @@ +User-agent: * diff --git a/config/routes b/config/routes new file mode 100644 index 0000000..0fbfa95 --- /dev/null +++ b/config/routes @@ -0,0 +1,40 @@ +/static StaticR Static appStatic + +/favicon.ico FaviconR GET +/robots.txt RobotsR GET + +/auth AuthR Auth getAuth + +-- notes +!/#UserNameP/notes NotesR GET +!/#UserNameP/notes/add AddNoteViewR GET +!/#UserNameP/notes/#NtSlug NoteR GET +!/api/note/add AddNoteR POST +!/api/note/#Int64 DeleteNoteR DELETE + +-- user +/ HomeR GET +!/#UserNameP UserR GET +!/#UserNameP/#SharedP UserSharedR GET +!/#UserNameP/#FilterP UserFilterR GET +!/#UserNameP/#TagsP UserTagsR GET + +-- settings +/Settings AccountSettingsR GET +api/accountSettings EditAccountSettingsR POST + +-- settings/password +/Settings/Password ChangePasswordR GET POST + +-- add +/add AddViewR GET +api/add AddR POST + +-- edit +/bm/#Int64 DeleteR DELETE +/bm/#Int64/read ReadR POST +/bm/#Int64/star StarR POST +/bm/#Int64/unstar UnstarR POST + +-- doc +/docs/search DocsSearchR GET \ No newline at end of file diff --git a/config/settings.yml b/config/settings.yml new file mode 100644 index 0000000..f622e1f --- /dev/null +++ b/config/settings.yml @@ -0,0 +1,41 @@ +# Values formatted like "_env:ENV_VAR_NAME:default_value" can be overridden by the specified environment variable. +# See https://github.com/yesodweb/yesod/wiki/Configuration#overriding-configuration-values-with-environment-variables + +static-dir: "_env:STATIC_DIR:static" +host: "_env:HOST:*4" # any IPv4 host +port: "_env:PORT:3000" # NB: The port `yesod devel` uses is distinct from this value. Set the `yesod devel` port from the command line. +ip-from-header: "_env:IP_FROM_HEADER:false" + +# Default behavior: determine the application root from the request headers. +# Uncomment to set an explicit approot +#approot: "_env:APPROOT:http://localhost:3000" + +# By default, `yesod devel` runs in development, and built executables use +# production settings (see below). To override this, use the following: +# +# development: false + +# Optional values with the following production defaults. +# In development, they default to the inverse. +# +# detailed-logging: false +# should-log-all: false +# reload-templates: false +# mutable-static: false +# skip-combining: false +# auth-dummy-login : false + +# NB: If you need a numeric value (e.g. 123) to parse as a String, wrap it in single quotes (e.g. "_env:PGPASS:'123'") +# See https://github.com/yesodweb/yesod/wiki/Configuration#parsing-numeric-values-as-strings + +database: + # See config/test-settings.yml for an override during tests + database: "_env:SQLITE_DATABASE:espial.sqlite3" + # database: ":memory:" + poolsize: "_env:SQLITE_POOLSIZE:10" + +copyright: Insert copyright statement here +#analytics: UA-YOURCODE + +ekg-host: "_env:EKG_HOST:0.0.0.0" +ekg-port: "_env:EKG_PORT:8000" diff --git a/config/test-settings.yml b/config/test-settings.yml new file mode 100644 index 0000000..c983b71 --- /dev/null +++ b/config/test-settings.yml @@ -0,0 +1,12 @@ +database: + # NOTE: By design, this setting prevents the SQLITE_DATABASE environment variable + # from affecting test runs, so that we don't accidentally affect the + # production database during testing. If you're not concerned about that and + # would like to have environment variable overrides, you could instead use + # something like: + # + # database: "_env:SQLITE_DATABASE:espial_test.sqlite3" + # database: espial_test.sqlite3 + database: ":memory:" + +auth-dummy-login: true diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..0d326b9 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,16 @@ +version: '3' +services: + espial: + image: '$HUB_REPO/$APPIMAGE' + build: + context: dist + dockerfile: ../Dockerfile + ports: + - "3000:3000" + - "8000:8000" + volumes: + - '$APPDATA:/app/data' + environment: + - IP_FROM_HEADER=true + - SQLITE_DATABASE=/app/data/espial.sqlite3 + - ekg_datadir=ekg diff --git a/espial.cabal b/espial.cabal new file mode 100644 index 0000000..7f5d9a4 --- /dev/null +++ b/espial.cabal @@ -0,0 +1,406 @@ +-- This file has been generated from package.yaml by hpack version 0.28.2. +-- +-- see: https://github.com/sol/hpack +-- +-- hash: 417de4bead54d60a2c091ad91c61dc715571ef7421e702f157a3766daf4f4700 + +name: espial +version: 0.0.7 +synopsis: Espial is an open-source, web-based bookmarking server. +description: . + Espial is an open-source, web-based bookmarking server. + - Yesod + PureScript + sqlite3 + - multi-user (w/ privacy scopes) + - tags, stars, editing, deleting +category: Web +homepage: https://github.com/jonschoning/espial +bug-reports: https://github.com/jonschoning/espial/issues +author: Jon Schoning +maintainer: jonschoning@gmail.com +copyright: Copyright (c) 2018 Jon Schoning +license: AGPL-3 +license-file: LICENSE +build-type: Simple +cabal-version: >= 1.10 +extra-source-files: + changelog.md + config/favicon.ico + config/keter.yml + config/robots.txt + config/routes + config/settings.yml + config/test-settings.yml + purs/Makefile + purs/packages.dhall + purs/spago.dhall + purs/src/App.purs + purs/src/Component/AccountSettings.purs + purs/src/Component/Add.purs + purs/src/Component/BList.purs + purs/src/Component/BMark.purs + purs/src/Component/Markdown.purs + purs/src/Component/NList.purs + purs/src/Component/NNote.purs + purs/src/Component/RawHtml.js + purs/src/Component/RawHtml.purs + purs/src/Globals.js + purs/src/Globals.purs + purs/src/Main.purs + purs/src/Marked.js + purs/src/Marked.purs + purs/src/Model.purs + purs/src/Util.purs + purs/test/Main.purs + README.md + static/css/main.css + static/css/popup.css + static/css/tachyons.min.css + static/css/tachyons.min.css.gz + static/images/bluepin.gif + static/js/app.js + static/js/app.js.gz + static/js/app.min.js + static/js/app.min.js.gz + static/js/html5shiv.min.js + static/js/html5shiv.min.js.gz + static/js/js.cookie-2.2.0.min.js + static/js/js.cookie-2.2.0.min.js.gz + static/js/marked.min.js + static/js/marked.min.js.gz + static/js/moment.min.js + static/js/moment.min.js.gz + templates/change-password.hamlet + templates/default-layout-wrapper.hamlet + templates/default-layout.hamlet + templates/docs-search.hamlet + templates/homepage.hamlet + templates/login.hamlet + templates/note.hamlet + templates/notes.hamlet + templates/pager.hamlet + templates/popup-layout.hamlet + templates/search.hamlet + templates/user-settings.hamlet + templates/user.hamlet + +source-repository head + type: git + location: git://github.com/jonschoning/espial.git + +flag dev + description: Turn on development settings, like auto-reload templates. + manual: False + default: False + +flag library-only + description: Build for use with "yesod devel" + manual: False + default: False + +library + hs-source-dirs: + src + default-extensions: BangPatterns CPP ConstraintKinds DataKinds DeriveDataTypeable DeriveGeneric EmptyDataDecls FlexibleContexts FlexibleInstances GADTs GeneralizedNewtypeDeriving InstanceSigs KindSignatures LambdaCase MultiParamTypeClasses MultiWayIf NoImplicitPrelude OverloadedStrings PolyKinds PolymorphicComponents QuasiQuotes Rank2Types RankNTypes RecordWildCards ScopedTypeVariables StandaloneDeriving TemplateHaskell TupleSections TypeApplications TypeFamilies TypeOperators TypeSynonymInstances ViewPatterns + build-depends: + aeson >=1.4 + , attoparsec + , base >=4.8.2.0 && <4.9 || >=4.9.1.0 && <5 + , bcrypt >=0.0.8 + , bytestring >=0.9 && <0.11 + , case-insensitive + , classy-prelude >=1.4 && <1.6 + , classy-prelude-conduit >=1.4 && <1.6 + , classy-prelude-yesod >=1.4 && <1.6 + , conduit >=1.0 && <2.0 + , containers + , data-default + , directory >=1.1 && <1.4 + , ekg + , ekg-core + , entropy + , esqueleto + , fast-logger >=2.2 && <2.5 + , file-embed + , foreign-store + , hjsmin >=0.1 && <0.3 + , hscolour + , http-api-data >=0.3.4 + , http-client + , http-client-tls >=0.3 && <0.4 + , http-conduit >=2.3 && <2.4 + , http-types + , iso8601-time >=0.1.3 + , microlens + , monad-logger >=0.3 && <0.4 + , monad-metrics + , mtl + , parser-combinators + , persistent >=2.8 && <2.10 + , persistent-sqlite >=2.6.2 + , persistent-template >=2.5 && <2.9 + , pretty-show + , safe + , shakespeare >=2.0 && <2.1 + , template-haskell + , text >=0.11 && <2.0 + , time + , transformers >=0.2.2 + , unordered-containers + , vector + , wai + , wai-extra >=3.0 && <3.1 + , wai-logger >=2.2 && <2.4 + , wai-middleware-metrics + , warp >=3.0 && <3.3 + , yaml >=0.8 && <0.12 + , yesod >=1.6 && <1.7 + , yesod-auth >=1.6 && <1.7 + , yesod-core >=1.6 && <1.7 + , yesod-form >=1.6 && <1.7 + , yesod-static >=1.6 && <1.7 + if (flag(dev)) || (flag(library-only)) + ghc-options: -Wall -fwarn-tabs -O0 + cpp-options: -DDEVELOPMENT + else + ghc-options: -Wall -fwarn-tabs -O2 + exposed-modules: + Application + Foundation + Generic + Handler.AccountSettings + Handler.Add + Handler.Archive + Handler.Common + Handler.Docs + Handler.Edit + Handler.Home + Handler.Notes + Handler.User + Import + Import.NoFoundation + Model + ModelCustom + PathPiece + Pretty + Settings + Settings.StaticFiles + Types + other-modules: + Paths_espial + default-language: Haskell2010 + +executable espial + main-is: main.hs + hs-source-dirs: + app + default-extensions: BangPatterns CPP ConstraintKinds DataKinds DeriveDataTypeable DeriveGeneric EmptyDataDecls FlexibleContexts FlexibleInstances GADTs GeneralizedNewtypeDeriving InstanceSigs KindSignatures LambdaCase MultiParamTypeClasses MultiWayIf NoImplicitPrelude OverloadedStrings PolyKinds PolymorphicComponents QuasiQuotes Rank2Types RankNTypes RecordWildCards ScopedTypeVariables StandaloneDeriving TemplateHaskell TupleSections TypeApplications TypeFamilies TypeOperators TypeSynonymInstances ViewPatterns + ghc-options: -threaded -rtsopts -with-rtsopts=-N + build-depends: + aeson >=1.4 + , attoparsec + , base >=4.8.2.0 && <4.9 || >=4.9.1.0 && <5 + , bcrypt >=0.0.8 + , bytestring >=0.9 && <0.11 + , case-insensitive + , classy-prelude >=1.4 && <1.6 + , classy-prelude-conduit >=1.4 && <1.6 + , classy-prelude-yesod >=1.4 && <1.6 + , conduit >=1.0 && <2.0 + , containers + , data-default + , directory >=1.1 && <1.4 + , ekg + , ekg-core + , entropy + , espial + , esqueleto + , fast-logger >=2.2 && <2.5 + , file-embed + , foreign-store + , hjsmin >=0.1 && <0.3 + , hscolour + , http-api-data >=0.3.4 + , http-client + , http-client-tls >=0.3 && <0.4 + , http-conduit >=2.3 && <2.4 + , http-types + , iso8601-time >=0.1.3 + , microlens + , monad-logger >=0.3 && <0.4 + , monad-metrics + , mtl + , parser-combinators + , persistent >=2.8 && <2.10 + , persistent-sqlite >=2.6.2 + , persistent-template >=2.5 && <2.9 + , pretty-show + , safe + , shakespeare >=2.0 && <2.1 + , template-haskell + , text >=0.11 && <2.0 + , time + , transformers >=0.2.2 + , unordered-containers + , vector + , wai + , wai-extra >=3.0 && <3.1 + , wai-logger >=2.2 && <2.4 + , wai-middleware-metrics + , warp >=3.0 && <3.3 + , yaml >=0.8 && <0.12 + , yesod >=1.6 && <1.7 + , yesod-auth >=1.6 && <1.7 + , yesod-core >=1.6 && <1.7 + , yesod-form >=1.6 && <1.7 + , yesod-static >=1.6 && <1.7 + if flag(library-only) + buildable: False + other-modules: + DevelMain + Paths_espial + default-language: Haskell2010 + +executable migration + main-is: Main.hs + hs-source-dirs: + app/migration + default-extensions: BangPatterns CPP ConstraintKinds DataKinds DeriveDataTypeable DeriveGeneric EmptyDataDecls FlexibleContexts FlexibleInstances GADTs GeneralizedNewtypeDeriving InstanceSigs KindSignatures LambdaCase MultiParamTypeClasses MultiWayIf NoImplicitPrelude OverloadedStrings PolyKinds PolymorphicComponents QuasiQuotes Rank2Types RankNTypes RecordWildCards ScopedTypeVariables StandaloneDeriving TemplateHaskell TupleSections TypeApplications TypeFamilies TypeOperators TypeSynonymInstances ViewPatterns + ghc-options: -threaded -rtsopts -with-rtsopts=-N + build-depends: + aeson >=1.4 + , attoparsec + , base >=4.8.2.0 && <4.9 || >=4.9.1.0 && <5 + , bcrypt >=0.0.8 + , bytestring >=0.9 && <0.11 + , case-insensitive + , classy-prelude >=1.4 && <1.6 + , classy-prelude-conduit >=1.4 && <1.6 + , classy-prelude-yesod >=1.4 && <1.6 + , conduit >=1.0 && <2.0 + , containers + , data-default + , directory >=1.1 && <1.4 + , ekg + , ekg-core + , entropy + , espial + , esqueleto + , fast-logger >=2.2 && <2.5 + , file-embed + , foreign-store + , hjsmin >=0.1 && <0.3 + , hscolour + , http-api-data >=0.3.4 + , http-client + , http-client-tls >=0.3 && <0.4 + , http-conduit >=2.3 && <2.4 + , http-types + , iso8601-time >=0.1.3 + , microlens + , monad-logger >=0.3 && <0.4 + , monad-metrics + , mtl + , optparse-generic >=1.2.3 + , parser-combinators + , persistent >=2.8 && <2.10 + , persistent-sqlite >=2.6.2 + , persistent-template >=2.5 && <2.9 + , pretty-show + , safe + , shakespeare >=2.0 && <2.1 + , template-haskell + , text >=0.11 && <2.0 + , time + , transformers >=0.2.2 + , unordered-containers + , vector + , wai + , wai-extra >=3.0 && <3.1 + , wai-logger >=2.2 && <2.4 + , wai-middleware-metrics + , warp >=3.0 && <3.3 + , yaml >=0.8 && <0.12 + , yesod >=1.6 && <1.7 + , yesod-auth >=1.6 && <1.7 + , yesod-core >=1.6 && <1.7 + , yesod-form >=1.6 && <1.7 + , yesod-static >=1.6 && <1.7 + if flag(library-only) + buildable: False + other-modules: + Paths_espial + default-language: Haskell2010 + +test-suite test + type: exitcode-stdio-1.0 + main-is: Spec.hs + hs-source-dirs: + test + default-extensions: BangPatterns CPP ConstraintKinds DataKinds DeriveDataTypeable DeriveGeneric EmptyDataDecls FlexibleContexts FlexibleInstances GADTs GeneralizedNewtypeDeriving InstanceSigs KindSignatures LambdaCase MultiParamTypeClasses MultiWayIf NoImplicitPrelude OverloadedStrings PolyKinds PolymorphicComponents QuasiQuotes Rank2Types RankNTypes RecordWildCards ScopedTypeVariables StandaloneDeriving TemplateHaskell TupleSections TypeApplications TypeFamilies TypeOperators TypeSynonymInstances ViewPatterns + ghc-options: -Wall + build-depends: + aeson >=1.4 + , attoparsec + , base >=4.8.2.0 && <4.9 || >=4.9.1.0 && <5 + , bcrypt >=0.0.8 + , bytestring >=0.9 && <0.11 + , case-insensitive + , classy-prelude >=1.4 && <1.6 + , classy-prelude-conduit >=1.4 && <1.6 + , classy-prelude-yesod >=1.4 && <1.6 + , conduit >=1.0 && <2.0 + , containers + , data-default + , directory >=1.1 && <1.4 + , ekg + , ekg-core + , entropy + , espial + , esqueleto + , fast-logger >=2.2 && <2.5 + , file-embed + , foreign-store + , hjsmin >=0.1 && <0.3 + , hscolour + , hspec >=2.0.0 + , http-api-data >=0.3.4 + , http-client + , http-client-tls >=0.3 && <0.4 + , http-conduit >=2.3 && <2.4 + , http-types + , iso8601-time >=0.1.3 + , microlens + , monad-logger >=0.3 && <0.4 + , monad-metrics + , mtl + , parser-combinators + , persistent >=2.8 && <2.10 + , persistent-sqlite >=2.6.2 + , persistent-template >=2.5 && <2.9 + , pretty-show + , safe + , shakespeare >=2.0 && <2.1 + , template-haskell + , text >=0.11 && <2.0 + , time + , transformers >=0.2.2 + , unordered-containers + , vector + , wai + , wai-extra >=3.0 && <3.1 + , wai-logger >=2.2 && <2.4 + , wai-middleware-metrics + , warp >=3.0 && <3.3 + , yaml >=0.8 && <0.12 + , yesod >=1.6 && <1.7 + , yesod-auth >=1.6 && <1.7 + , yesod-core >=1.6 && <1.7 + , yesod-form >=1.6 && <1.7 + , yesod-static >=1.6 && <1.7 + , yesod-test + other-modules: + Handler.CommonSpec + Handler.HomeSpec + TestImport + Paths_espial + default-language: Haskell2010 diff --git a/package.yaml b/package.yaml new file mode 100644 index 0000000..c9be5a9 --- /dev/null +++ b/package.yaml @@ -0,0 +1,208 @@ +name: espial +synopsis: Espial is an open-source, web-based bookmarking server. +version: "0.0.7" +description: ! ' + + Espial is an open-source, web-based bookmarking server. + + - Yesod + PureScript + sqlite3 + + - multi-user (w/ privacy scopes) + + - tags, stars, editing, deleting +' +category: Web +author: Jon Schoning +maintainer: jonschoning@gmail.com +copyright: Copyright (c) 2018 Jon Schoning +license: AGPL-3 +license-file: LICENSE +homepage: https://github.com/jonschoning/espial +git: git://github.com/jonschoning/espial.git +bug-reports: https://github.com/jonschoning/espial/issues +extra-source-files: +- README.md +- changelog.md +- config/favicon.ico +- config/keter.yml +- config/robots.txt +- config/routes +- config/settings.yml +- config/test-settings.yml +- templates/** +- static/css/** +- static/images/** +- static/js/** +- purs/Makefile +- purs/packages.dhall +- purs/spago.dhall +- purs/src/** +- purs/src/**/Component/** +- purs/test/** + +default-extensions: +- BangPatterns +- CPP +- ConstraintKinds +- DataKinds +- DeriveDataTypeable +- DeriveGeneric +- EmptyDataDecls +- FlexibleContexts +- FlexibleInstances +- GADTs +- GeneralizedNewtypeDeriving +- InstanceSigs +- KindSignatures +- LambdaCase +- MultiParamTypeClasses +- MultiWayIf +- NoImplicitPrelude +- OverloadedStrings +- PolyKinds +- PolymorphicComponents +- QuasiQuotes +- Rank2Types +- RankNTypes +- RecordWildCards +- ScopedTypeVariables +- StandaloneDeriving +- TemplateHaskell +- TupleSections +- TypeApplications +- TypeFamilies +- TypeOperators +- TypeSynonymInstances +- ViewPatterns + +dependencies: + +# Due to a bug in GHC 8.0.1, we block its usage +# See: https://ghc.haskell.org/trac/ghc/ticket/12130 +- base >=4.8.2.0 && <4.9 || >=4.9.1.0 && <5 + +- yesod >=1.6 && <1.7 +- yesod-core >=1.6 && <1.7 +- yesod-auth >=1.6 && <1.7 +- yesod-static >=1.6 && <1.7 +- yesod-form >=1.6 && <1.7 +- classy-prelude >=1.4 && <1.6 +- classy-prelude-conduit >=1.4 && <1.6 +- classy-prelude-yesod >=1.4 && <1.6 +- bytestring >=0.9 && <0.11 +- text >=0.11 && <2.0 +- persistent >=2.8 && <2.10 +# - persistent-postgresql >=2.8 && <2.9 +- persistent-template >=2.5 && <2.9 +- template-haskell +- shakespeare >=2.0 && <2.1 +- hjsmin >=0.1 && <0.3 +# - monad-control >=0.3 && <1.1 +- wai-extra >=3.0 && <3.1 +- yaml >=0.8 && <0.12 +- http-client-tls >=0.3 && <0.4 +- http-conduit >=2.3 && <2.4 +- directory >=1.1 && <1.4 +- warp >=3.0 && <3.3 +- data-default +# - aeson >=0.6 && <1.4 +- conduit >=1.0 && <2.0 +- monad-logger >=0.3 && <0.4 +- fast-logger >=2.2 && <2.5 +- wai-logger >=2.2 && <2.4 +- file-embed +- safe +- unordered-containers +- containers +- vector +- time +- case-insensitive +- wai +- foreign-store + +- aeson >=1.4 +- attoparsec +- bcrypt >= 0.0.8 +- entropy +- ekg +- ekg-core +- esqueleto +- hscolour +- http-api-data >= 0.3.4 +- http-client +- http-types +- iso8601-time >=0.1.3 +- microlens +- monad-metrics +- mtl +- persistent-sqlite >=2.6.2 +- pretty-show +- transformers >= 0.2.2 +- wai-middleware-metrics +- parser-combinators + +# The library contains all of our application code. The executable +# defined below is just a thin wrapper. +library: + source-dirs: src + when: + - condition: (flag(dev)) || (flag(library-only)) + then: + ghc-options: + - -Wall + - -fwarn-tabs + - -O0 + cpp-options: -DDEVELOPMENT + else: + ghc-options: + - -Wall + - -fwarn-tabs + - -O2 + +# Runnable executable for our application +executables: + espial: + main: main.hs + source-dirs: app + ghc-options: + - -threaded + - -rtsopts + - -with-rtsopts=-N + dependencies: + - espial + when: + - condition: flag(library-only) + buildable: false + migration: + when: + - condition: flag(library-only) + buildable: false + main: Main.hs + source-dirs: + - app/migration + ghc-options: -threaded -rtsopts -with-rtsopts=-N + dependencies: + - espial + - optparse-generic >= 1.2.3 + +# Test suite +tests: + test: + main: Spec.hs + source-dirs: test + ghc-options: -Wall + dependencies: + - espial + - hspec >=2.0.0 + - yesod-test + +# Define flags used by "yesod devel" to make compilation faster +flags: + library-only: + description: Build for use with "yesod devel" + manual: false + default: false + dev: + description: Turn on development settings, like auto-reload templates. + manual: false + default: false diff --git a/purs/.gitignore b/purs/.gitignore new file mode 100644 index 0000000..f050c7b --- /dev/null +++ b/purs/.gitignore @@ -0,0 +1,11 @@ +/.psa* +/.psc* +/.psc-package/ +/.pulp-cache/ +/.purs* +/.spago +/bower_components/ +/generated-docs/ +/node_modules/ +/output/ +/tmp/ diff --git a/purs/Makefile b/purs/Makefile new file mode 100644 index 0000000..7bbb483 --- /dev/null +++ b/purs/Makefile @@ -0,0 +1,28 @@ +.PHONY: clean build + +all: build + +install: + spago install + +build: + @spago build + @spago bundle --to dist/app.js + @(cd dist && terser app.js -m -c -o app.min.js) + @rm -f dist/*.gz + @gzip -k dist/app.js + @gzip -k dist/app.min.js + @find dist -type f -printf "%kK\\t%h/%f\\n" | sort -k 2 + @cp dist/app.js ../static/js/app.js + @cp dist/app.js.gz ../static/js/app.js.gz + @cp dist/app.min.js ../static/js/app.min.js + @cp dist/app.min.js.gz ../static/js/app.min.js.gz + +docs: + @rm -Rf generated-docs + @purs docs ".spago/*/*/src/**/*.purs" --format html + +clean: + rm -f dist/* + +# inotifywait -m -r -q -e close_write --format '%T %w%f' --timefmt '%T' src | while read FILE; do echo $FILE; make; done diff --git a/purs/README.md b/purs/README.md new file mode 100644 index 0000000..34bf706 --- /dev/null +++ b/purs/README.md @@ -0,0 +1,29 @@ +## Development (Posix only) + +1. Install `purescript`, `purescript-spago`, `terser`: + +``` +npm install +``` + +2. (optional) working with .dhall files: + +``` +stack install dhall dhall-json +``` + +3. Download purescript libraries (1x only): + +``` +make install +``` + +4. build dist/app.min.js: + +``` +make +``` + +On a successful build, `make` will also update `../static/js/`, +since the `purs/` folder is opaque to the espial executable build process. + diff --git a/purs/package-lock.json b/purs/package-lock.json new file mode 100644 index 0000000..caad117 --- /dev/null +++ b/purs/package-lock.json @@ -0,0 +1,1280 @@ +{ + "name": "espial", + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "ansi-escapes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "app-cache-dir": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/app-cache-dir/-/app-cache-dir-0.3.1.tgz", + "integrity": "sha512-zJ/Gj1wEQ7Z9yuLID6XhAaSbWGkGVEwMkqcrv5/Jv0GCT19UpDKkyybq84SOWBi+WzT7Y3mihYXGtMnK7Z3DMQ==", + "dev": true, + "requires": { + "inspect-with-kind": "^1.0.2" + } + }, + "append-type": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/append-type/-/append-type-1.0.1.tgz", + "integrity": "sha512-ro+W6UHJuoA2NXqKHug9bmXDbPB3eCALjcJOsYjgI9cz9cjLFthvincBCWjk25VFzJmIUHd8saOWZZBuMycXrg==", + "dev": true + }, + "arch": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz", + "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "dev": true, + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "build-purescript": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/build-purescript/-/build-purescript-0.2.3.tgz", + "integrity": "sha512-oIBeOxbEHG8don4jqxCMhZxoXCqk21jIqN+a9U/8jiiwYOAS6KcssxcTklhE+LzEIsBx/hh8cObQ5Lupos/mVw==", + "dev": true, + "requires": { + "download-purescript-source": "^0.4.0", + "feint": "^1.0.2", + "graceful-fs": "^4.1.11", + "inspect-with-kind": "^1.0.4", + "is-plain-obj": "^1.1.0", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "once": "^1.4.0", + "rimraf": "^2.6.2", + "spawn-stack": "^0.5.0", + "zen-observable": "^0.6.1" + } + }, + "byline": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", + "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", + "dev": true + }, + "cancelable-pump": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/cancelable-pump/-/cancelable-pump-0.2.0.tgz", + "integrity": "sha1-hlZl1MI6aXiNS830mNt0DxsjDVc=", + "dev": true, + "requires": { + "pump": "^1.0.2" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "dev": true + }, + "clean-stack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.0.0.tgz", + "integrity": "sha512-VEoL9Qh7I8s8iHnV53DaeWSt8NJ0g3khMfK6NiCPB7H657juhro+cSw2O88uo3bo0c0X5usamtXk0/Of0wXa5A==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "dl-tar": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/dl-tar/-/dl-tar-0.6.0.tgz", + "integrity": "sha512-bh6sKubl/RzCNC6v6PEim13GDA0D0OEq8j1yqORFQrVnH8C1aaP2xb4BSRP8VxFPKYVvAi4zzDEBMr72z2M9Wg==", + "dev": true, + "requires": { + "cancelable-pump": "^0.2.0", + "graceful-fs": "^4.1.11", + "inspect-with-kind": "^1.0.4", + "is-plain-obj": "^1.1.0", + "is-stream": "^1.1.0", + "load-request-from-cwd-or-npm": "^2.0.1", + "tar-fs": "^1.16.0", + "tar-stream": "^1.5.5", + "zen-observable": "^0.6.1" + } + }, + "dl-tgz": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/dl-tgz/-/dl-tgz-0.6.0.tgz", + "integrity": "sha512-pkf0P6EwWfVmpbFTvgfrWOh9JvrCwW/bnx2i+M9ffKfKCP20B/3ZHRL/jGXL8nuZ+TQcI/rsasx1fzjf+expmQ==", + "dev": true, + "requires": { + "dl-tar": "^0.6.0", + "is-plain-obj": "^1.1.0", + "zen-observable": "^0.6.1" + } + }, + "download-or-build-purescript": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/download-or-build-purescript/-/download-or-build-purescript-0.0.9.tgz", + "integrity": "sha512-1SOq5zLZd2Nh1bmyQUhMlmZoUxuUMYYTHcyU8kR2Y9nRRiuogEWQcD2+SiJfEl5S6Ap+S4x2hVNP3bbQp0/80g==", + "dev": true, + "requires": { + "build-purescript": "^0.2.0", + "download-purescript": "0.5.0-0", + "execa": "^0.10.0", + "feint": "^1.0.2", + "graceful-fs": "^4.1.11", + "inspect-with-kind": "^1.0.4", + "is-plain-obj": "^1.1.0", + "once": "^1.4.0", + "prepare-write": "^0.3.1", + "spawn-stack": "^0.5.0", + "which": "^1.3.0", + "zen-observable": "^0.6.0" + }, + "dependencies": { + "prepare-write": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/prepare-write/-/prepare-write-0.3.1.tgz", + "integrity": "sha512-p4NqFH9qi2Qjkh8OxdUSbF32+OVp6j/Vu/RQC/v0Yar5nWdmLQvDm+uEjy9Z8c+HgqC0tS0eZRLHnn+AWAk3Hg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "inspect-with-kind": "^1.0.2", + "is-dir": "^1.0.0", + "mkdirp": "^0.5.1" + } + } + } + }, + "download-purescript": { + "version": "0.5.0-0", + "resolved": "https://registry.npmjs.org/download-purescript/-/download-purescript-0.5.0-0.tgz", + "integrity": "sha512-oBjNPPBBB/zcsIvn9VUgL+YnT9E3dSszwISKmPxU4ehIkAisysrII8pvQAoQRxSikppJhmajo/VYEpa5LD0whQ==", + "dev": true, + "requires": { + "dl-tgz": "^0.6.0", + "inspect-with-kind": "^1.0.4", + "is-plain-obj": "^1.1.0", + "zen-observable": "^0.6.1" + } + }, + "download-purescript-source": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/download-purescript-source/-/download-purescript-source-0.4.0.tgz", + "integrity": "sha512-Y+5VqajGu9uv63XbY7R27UZGplqxQkyYMg52nSBHQMOyML/2TIm4HmP3trTSM2lxFR4yCeKGQgPas35OERCFWg==", + "dev": true, + "requires": { + "dl-tgz": "^0.6.0", + "inspect-with-kind": "^1.0.4", + "is-plain-obj": "^1.1.0", + "zen-observable": "^0.6.1" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "executing-npm-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/executing-npm-path/-/executing-npm-path-0.1.0.tgz", + "integrity": "sha512-NG/Pw0xD4KBcb5ilpZa57n7U17obIvZX1TCBLdv9M7Jd3wSsfU8BtMSy+EFkx9hhJsnIBBEmaPQd12dXWaxlHA==", + "dev": true + }, + "feint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/feint/-/feint-1.0.2.tgz", + "integrity": "sha512-PC77rn63FAMGcmHEkuGh4AdofqI6/c/YGjyvLo60mGLcCOHUUzCnKFzoij062piVgBblkl/KlN1vHGVJsK88cg==", + "dev": true, + "requires": { + "append-type": "^1.0.1" + } + }, + "file-to-tar": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/file-to-tar/-/file-to-tar-0.3.1.tgz", + "integrity": "sha512-bFYkxQR2weH7Bgdj6Dxuo+0rRZagcqY0uuu2CcXUdrOp8TFfkGYEdHy3uSqLiwhkXCcFFDk0584bdIyyEvJKBA==", + "dev": true, + "requires": { + "cancelable-pump": "^0.4.0", + "graceful-fs": "^4.1.11", + "inspect-with-kind": "^1.0.4", + "is-plain-obj": "^1.1.0", + "is-stream": "^1.1.0", + "mkdirp": "^0.5.1", + "tar-fs": "^1.16.2", + "zen-observable": "^0.6.1" + }, + "dependencies": { + "cancelable-pump": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cancelable-pump/-/cancelable-pump-0.4.0.tgz", + "integrity": "sha512-7Yvp8ADC9exD0Kdq/Q35UD5wOiuXTTLp159gFHC+uMQvjRMllrsM6EUKnozmIe43yesLBiH/ni0KD69k07yzZQ==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "dev": true + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "inspect-with-kind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/inspect-with-kind/-/inspect-with-kind-1.0.5.tgz", + "integrity": "sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "install-purescript": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/install-purescript/-/install-purescript-0.4.0.tgz", + "integrity": "sha512-hXfy12CP/aSCxEhx75kA2jTsbUrkQYFwbolNIrFcFVaiSYc3GpEcAsLqSuijzMCtfxAq+2S6Uw5o6QrVVNVpwQ==", + "dev": true, + "requires": { + "app-cache-dir": "^0.3.0", + "arch": "^2.1.0", + "download-or-build-purescript": "^0.0.9", + "execa": "^0.10.0", + "feint": "1.0.2", + "file-to-tar": "^0.3.1", + "graceful-fs": "^4.1.11", + "inspect-with-kind": "^1.0.4", + "is-plain-obj": "^1.1.0", + "once": "^1.4.0", + "prepare-write": "^1.0.0", + "readdir-clean": "^1.0.0", + "rimraf": "^2.6.2", + "tar-to-file": "^0.4.0", + "tilde-path": "^2.0.0", + "truncated-list": "^1.0.1", + "zen-observable": "^0.6.1" + } + }, + "install-purescript-cli": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/install-purescript-cli/-/install-purescript-cli-0.3.0.tgz", + "integrity": "sha512-fxxJ2nnKfDHli530XVz7w5bd5I7UKODtVjMLJuvpOHPSqPfHgOPqHat2vjPTqaW5B4sHt3NYGopvt/fYPfwl2A==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "install-purescript": "^0.4.0", + "log-symbols": "^2.2.0", + "log-update": "^2.3.0", + "minimist": "^1.2.0", + "ms": "^2.1.1", + "neat-frame": "^1.0.1", + "neat-stack": "^1.0.0", + "once": "^1.4.0", + "platform-name": "^1.0.0", + "size-rate": "^0.1.0", + "tilde-path": "^2.0.0", + "tty-truncate": "^1.0.0", + "vertical-meter": "^1.0.0" + } + }, + "is-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-dir/-/is-dir-1.0.0.tgz", + "integrity": "sha1-QdN/SV/MrMBaR3jWboMCTCkro/8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "junk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-2.1.0.tgz", + "integrity": "sha1-9DG0t/By3FAKXxDOf07HGTDnATQ=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "load-from-cwd-or-npm": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/load-from-cwd-or-npm/-/load-from-cwd-or-npm-2.2.2.tgz", + "integrity": "sha512-Ox0Cl1RfKMKrwqhBqYADWeFspY28bhlaJVe08GJqYtVYoE0kyAnWBOnw3V/+HDoeWb7o33X/ZUcvamIlJ4O4Gg==", + "dev": true, + "requires": { + "inspect-with-kind": "^1.0.4", + "npm-cli-dir": "^2.0.1", + "optional": "^0.1.4", + "resolve-from-npm": "^2.0.4" + } + }, + "load-request-from-cwd-or-npm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/load-request-from-cwd-or-npm/-/load-request-from-cwd-or-npm-2.0.1.tgz", + "integrity": "sha512-RMDblVBrhyatt2KBScYzbPZrg2KGOryEdcAXIF3Jh3nqcE1awqUtJABwkPv1UrC802QFFxn/mn10m9dHN+fXrQ==", + "dev": true, + "requires": { + "load-from-cwd-or-npm": "^2.2.1" + } + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "neat-frame": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/neat-frame/-/neat-frame-1.0.2.tgz", + "integrity": "sha512-V1aFRKYLeHt8j+/Zcth3wRlQVd5jiWlXyT1McmW6dJvE08wxZXUp38pwFhoIMSr4f3N2UEcJvR1z0VKrSCwYsQ==", + "dev": true, + "requires": { + "inspect-with-kind": "^1.0.5", + "string-width": "^2.1.1", + "term-size": "^1.2.0", + "wrap-ansi": "^4.0.0" + }, + "dependencies": { + "wrap-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", + "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + } + } + } + }, + "neat-stack": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/neat-stack/-/neat-stack-1.0.1.tgz", + "integrity": "sha512-nl0eft4etsbFowZVP+1lNqZsNKb2SIC+PnAr/ODBln6RNVaJh0YYu8P3j8Iuh4XeIAgyWn3xCSizbTobRjocIA==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "clean-stack": "^2.0.0" + } + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "npm-cli-dir": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-cli-dir/-/npm-cli-dir-2.0.2.tgz", + "integrity": "sha512-ibO7mB5Na7yv4fFTi39y3dKeK0D51ttyldqqOZKR9GU0Qwr0FFycQhXIliwqzNCVRkNi/iTG0D9WIVt7pP+vGQ==", + "dev": true, + "requires": { + "npm-cli-path": "^2.0.1" + } + }, + "npm-cli-path": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/npm-cli-path/-/npm-cli-path-2.0.5.tgz", + "integrity": "sha512-Mdd8f1l0o7KUkL8Mty5XbaJVD6hQ/Kq10AFgyjhHg6d/0KHXc4p/O6hPWXSmoJ/RXyzPKIqDCXM1zq46i+Yfeg==", + "dev": true, + "requires": { + "executing-npm-path": "^0.1.0", + "real-executable-path": "^2.0.2", + "win-user-installed-npm-cli-path": "^2.0.2" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "optional": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/optional/-/optional-0.1.4.tgz", + "integrity": "sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "platform-name": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/platform-name/-/platform-name-1.0.0.tgz", + "integrity": "sha512-ZRbqJ30uRRKGKW2O1XnG/Ls1K/aBGlnyjq1Z0BbjqDPTNN+XZKFaugCsCm3/mq6XGR5DZNVdV75afpQEvNNY3Q==", + "dev": true, + "requires": { + "inspect-with-kind": "^1.0.4" + } + }, + "prepare-write": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/prepare-write/-/prepare-write-1.0.2.tgz", + "integrity": "sha512-3g6wGYFExqBDGw1P9oYrKbeSymmYcYIxiOlWzyIV4nOqrf5jiiFE8N7eU53a8UBtW8gsSwk2YQBz67VeDEafQA==", + "dev": true, + "requires": { + "inspect-with-kind": "^1.0.5", + "mkdirp": "^0.5.1" + } + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "purescript": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/purescript/-/purescript-0.12.1.tgz", + "integrity": "sha512-BdKS77/frDmy86PC0F8DnJ/hDobQGzXcJzq0hz0RpCSfvhBw4RMerBvhkpfTT/fn3NO7fHEl2AB4JMMfSkAjow==", + "dev": true, + "requires": { + "install-purescript-cli": "^0.4.0 || ^0.3.0" + } + }, + "purescript-spago": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/purescript-spago/-/purescript-spago-0.6.2.tgz", + "integrity": "sha512-Ayt7TWsuaiNj91QbsRxb2F8729Kl3vjBN87wYKEybdYhE2KdUaaaV5QOJ1SkDV1emh86iEZRB611KyQ15ae0sg==", + "dev": true + }, + "rate-map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/rate-map/-/rate-map-1.0.2.tgz", + "integrity": "sha512-fJ8x8KPEmMGT/LpoLqkbsbrLG1D26A0lzfhyNlVkO4ctvXiChulk0Y8iuZsJNd9RCK/wlqA/ihzU5vOwCR668g==", + "dev": true, + "requires": { + "append-type": "^1.0.1" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdir-clean": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/readdir-clean/-/readdir-clean-1.0.0.tgz", + "integrity": "sha512-9+/foOFyAlmXdMLIsrSm/aoBxnSQ+8fruH814Z3hm5xlwfKYP35qhdJH05KYSSd0RUw9cPEKqvgKdGNjn88aYg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "junk": "^2.1.0" + } + }, + "real-executable-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/real-executable-path/-/real-executable-path-2.0.2.tgz", + "integrity": "sha512-fRv44zvrzFeItoj/f/SNBqO/VWUHSZeqQ28oPOzd6weXaiRG6OVGu7UrHe6pY8JlXeoe/7gWYv6kOFHmHk4EFw==", + "dev": true, + "requires": { + "real-executable-path-callback": "^2.1.2" + } + }, + "real-executable-path-callback": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/real-executable-path-callback/-/real-executable-path-callback-2.1.2.tgz", + "integrity": "sha512-dyOgKEhLKNg9tgFPs354X5fQpaAsUT+3dTO3JYoNLdPhMmRDjwwre6zHw58biFMVeFx9yxwI6MC7iMDfxSuMJA==", + "dev": true, + "requires": { + "inspect-with-kind": "^1.0.4", + "is-plain-obj": "^1.1.0", + "which": "^1.3.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "resolve-from-npm": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/resolve-from-npm/-/resolve-from-npm-2.0.4.tgz", + "integrity": "sha512-JrwN+SRILVjq/mdPNd6bhoOvYMBFf0CYqvfAgaDGB9dWjyr3XDAe40O2WcxToYWMmbQabM4FM6hHVLcSxBPKOQ==", + "dev": true, + "requires": { + "inspect-with-kind": "^1.0.3", + "npm-cli-dir": "^2.0.2", + "resolve-from": "^4.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "size-rate": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/size-rate/-/size-rate-0.1.0.tgz", + "integrity": "sha512-Yinx2XAfbhJu+Pxz1TD3xFT6nPB54+wyRd4u82Kq+ZqzOtaODYS5/7QJtlOcRxJLUvNXMzJKGvJ/O1KyN/9+hQ==", + "dev": true, + "requires": { + "filesize": "^3.5.10", + "inspect-with-kind": "^1.0.2" + } + }, + "slice-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.0.0.tgz", + "integrity": "sha512-4j2WTWjp3GsZ+AOagyzVbzp4vWGtZ0hEZ/gDY/uTvm6MTxUfTUIsnMIFb1bn8o0RuXiqUw15H1bue8f22Vw2oQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", + "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "spawn-stack": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/spawn-stack/-/spawn-stack-0.5.0.tgz", + "integrity": "sha512-suwvBV2WNTOYe/TQBoAFrGbdRvo5t/pWYq/vNw24wbSmIJXr/eaadsF+92VyPm2dBYsYwBnsTLhQFCo3EdCA+Q==", + "dev": true, + "requires": { + "byline": "^5.0.0", + "execa": "^0.10.0", + "inspect-with-kind": "^1.0.4", + "zen-observable": "^0.6.1" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tar-fs": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", + "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", + "dev": true, + "requires": { + "chownr": "^1.0.1", + "mkdirp": "^0.5.1", + "pump": "^1.0.0", + "tar-stream": "^1.1.2" + } + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + } + }, + "tar-to-file": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/tar-to-file/-/tar-to-file-0.4.0.tgz", + "integrity": "sha512-DFRBSotqmgeMrU/H7z0VIMPv8taOheRUlAhi6Q+r5Xso9xoa5vez/Z3uvASSzuT1dwe2orAdENT7NXlAh1zwvA==", + "dev": true, + "requires": { + "cancelable-pump": "^0.4.0", + "graceful-fs": "^4.1.11", + "inspect-with-kind": "^1.0.4", + "is-plain-obj": "^1.1.0", + "is-stream": "^1.1.0", + "tar-fs": "^1.16.2", + "tar-stream": "^1.6.1", + "zen-observable": "^0.6.1" + }, + "dependencies": { + "cancelable-pump": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cancelable-pump/-/cancelable-pump-0.4.0.tgz", + "integrity": "sha512-7Yvp8ADC9exD0Kdq/Q35UD5wOiuXTTLp159gFHC+uMQvjRMllrsM6EUKnozmIe43yesLBiH/ni0KD69k07yzZQ==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "^0.7.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + } + } + }, + "terser": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.14.1.tgz", + "integrity": "sha512-NSo3E99QDbYSMeJaEk9YW2lTg3qS9V0aKGlb+PlOrei1X02r1wSBHCNX/O+yeTRFSWPKPIGj6MqvvdqV4rnVGw==", + "dev": true, + "requires": { + "commander": "~2.17.1", + "source-map": "~0.6.1", + "source-map-support": "~0.5.6" + } + }, + "tilde-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tilde-path/-/tilde-path-2.0.0.tgz", + "integrity": "sha512-3aDt7b/wBbxJjUTMiCW+uu7iqrB6F1DfxSL0qB4biSrP1+knIPveccs7thL34AkzPZ/0T7+oYXZDKiokMc1d6g==", + "dev": true + }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true + }, + "truncated-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/truncated-list/-/truncated-list-1.0.1.tgz", + "integrity": "sha512-aNcDZ1PfxAtUXXLEmy+m1D465lFv0VgWltGlTWuJuhPh+FGeOiHV9S2DYOD8IEgZU8yOInZBRHVcAts+xIYzew==", + "dev": true, + "requires": { + "inspect-with-kind": "^1.0.4" + } + }, + "tty-truncate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tty-truncate/-/tty-truncate-1.0.3.tgz", + "integrity": "sha512-zQH6DMwCBUHuS/3jIgvgZq14TaxujXZjifyOsamBmlVsLRzkm+vFoSW4oJCoD1PE3i6qY+bTjnsj3yqZn8l2JQ==", + "dev": true, + "requires": { + "ansi-regex": "^4.0.0", + "inspect-with-kind": "^1.0.5", + "slice-ansi": "^2.0.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", + "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", + "dev": true + }, + "string-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.0.0.tgz", + "integrity": "sha512-rr8CUxBbvOZDUvc5lNIJ+OC1nPVpz+Siw9VBtUjB9b6jZehZLFt0JMCZzShFHIsI8cbhm0EsNIfWJMFV3cu3Ew==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.0.0" + } + }, + "strip-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", + "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "dev": true, + "requires": { + "ansi-regex": "^4.0.0" + } + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "vertical-meter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vertical-meter/-/vertical-meter-1.0.0.tgz", + "integrity": "sha512-xvtone0DHRBrWSBVF2p3+/KSz/mzHvDZ7+HYB3g68hBpqIC3tIF8J1maf5osHPKHB/45iq2B+T4ju/mfxArd/Q==", + "dev": true, + "requires": { + "rate-map": "^1.0.1" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "win-user-installed-npm-cli-path": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/win-user-installed-npm-cli-path/-/win-user-installed-npm-cli-path-2.0.4.tgz", + "integrity": "sha512-i+fSInL3Li47P9gGcJabtgvl2+hLmZwMsh4664WWuI1F/pQPtv4XerrOyg8poxvDv4o/QwB60f20MKtIX/CCxQ==", + "dev": true + }, + "wrap-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "zen-observable": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.6.1.tgz", + "integrity": "sha512-DKjFTL7siVLIUMZOFZ0alqMEdTsXPUxoCZzrvB2tdWEVN/6606Qh1nCfSTCAOZMrtcPzzFI3BXmwBKLAew52NA==", + "dev": true + } + } +} diff --git a/purs/package.json b/purs/package.json new file mode 100644 index 0000000..036b9a4 --- /dev/null +++ b/purs/package.json @@ -0,0 +1,15 @@ +{ + "name": "espial", + "private": true, + "scripts": { + "make-install": "make install", + "make-watch": "inotifywait -m -r -q -e close_write --format '%T %w%f' --timefmt '%T' src | while read FILE; do echo $FILE; make; done", + "make": "make" + }, + "devDependencies": { + "purescript": "^0.12.1", + "purescript-spago": "^0.6.2", + "terser": "^3.14.1" + }, + "dependencies": {} +} diff --git a/purs/packages.dhall b/purs/packages.dhall new file mode 100644 index 0000000..8625d3c --- /dev/null +++ b/purs/packages.dhall @@ -0,0 +1,121 @@ +{- +Welcome to Spacchetti local packages! + +Below are instructions for how to edit this file for most use +cases, so that you don't need to know Dhall to use it. + +## Warning: Don't Move This Top-Level Comment! + +Due to how `dhall format` currently works, this comment's +instructions cannot appear near corresponding sections below +because `dhall format` will delete the comment. However, +it will not delete a top-level comment like this one. + +## Use Cases + +Most will want to do one or both of these options: +1. Override/Patch a package's dependency +2. Add a package not already in the default package set + +This file will continue to work whether you use one or both options. +Instructions for each option are explained below. + +### Overriding/Patching a package + +Purpose: +- Change a package's dependency to a newer/older release than the + default package set's release +- Use your own modified version of some dependency that may + include new API, changed API, removed API by + using your custom git repo of the library rather than + the package set's repo + +Syntax: +Replace the overrides' "{=}" (an empty record) with the following idea +The "//" or "⫽" means "merge these two records and + when they have the same value, use the one on the right:" +------------------------------- +let override = + { packageName = + upstream.packageName ⫽ { updateEntity1 = "new value", updateEntity2 = "new value" } + , packageName = + upstream.packageName ⫽ { version = "v4.0.0" } + , packageName = + upstream.packageName // { repo = "https://www.example.com/path/to/new/repo.git" } + } +------------------------------- + +Example: +------------------------------- +let overrides = + { halogen = + upstream.halogen ⫽ { version = "master" } + , halogen-vdom = + upstream.halogen-vdom ⫽ { version = "v4.0.0" } + } +------------------------------- + +### Additions + +Purpose: +- Add packages that aren't alread included in the default package set + +Syntax: +Replace the additions' "{=}" (an empty record) with the following idea: +------------------------------- +let additions = + { "package-name" = + mkPackage + [ "dependency1" + , "dependency2" + ] + "https://example.com/path/to/git/repo.git" + "tag ('v4.0.0') or branch ('master')" + , "package-name" = + mkPackage + [ "dependency1" + , "dependency2" + ] + "https://example.com/path/to/git/repo.git" + "tag ('v4.0.0') or branch ('master')" + , etc. + } +------------------------------- + +Example: +------------------------------- +let additions = + { benchotron = + mkPackage + [ "arrays" + , "exists" + , "profunctor" + , "strings" + , "quickcheck" + , "lcg" + , "transformers" + , "foldable-traversable" + , "exceptions" + , "node-fs" + , "node-buffer" + , "node-readline" + , "datetime" + , "now" + ] + "https://github.com/hdgarrood/purescript-benchotron.git" + "v7.0.0" + } +------------------------------- +-} + +let mkPackage = + https://raw.githubusercontent.com/spacchetti/spacchetti/20190105/src/mkPackage.dhall sha256:8e1c6636f8a089f972b21cde0cef4b33fa36a2e503ad4c77928aabf92d2d4ec9 + +let upstream = + https://raw.githubusercontent.com/spacchetti/spacchetti/20190105/src/packages.dhall sha256:38fc3e19c193bb006c773ac84fc4a2888e5dcc610d36e49a9bdef7ecc7e1f8c9 + +let overrides = {=} + +let additions = {=} + +in upstream ⫽ overrides ⫽ additions \ No newline at end of file diff --git a/purs/spago.dhall b/purs/spago.dhall new file mode 100644 index 0000000..347ba12 --- /dev/null +++ b/purs/spago.dhall @@ -0,0 +1,24 @@ +{ name = + "espial" +, dependencies = + [ "aff" + , "simple-json" + , "affjax" + , "argonaut" + , "arrays" + , "console" + , "debug" + , "effect" + , "either" + , "functions" + , "halogen" + , "prelude" + , "psci-support" + , "strings" + , "transformers" + , "web-html" + , "profunctor-lenses" + ] +, packages = + ./packages.dhall +} \ No newline at end of file diff --git a/purs/src/App.purs b/purs/src/App.purs new file mode 100644 index 0000000..15b3d58 --- /dev/null +++ b/purs/src/App.purs @@ -0,0 +1,119 @@ +module App where + +import Prelude + +import Affjax (Response, ResponseFormatError) +import Affjax (defaultRequest) as AX +import Affjax as Ax +import Affjax.RequestBody as AXReq +import Affjax.RequestHeader (RequestHeader(..)) +import Affjax.ResponseFormat as AXRes +import Data.Argonaut (Json) +import Data.Array ((:)) +import Data.Either (Either(..)) +import Data.FormURLEncoded (FormURLEncoded) +import Data.HTTP.Method (Method(..)) +import Data.Maybe (Maybe(..)) +import Data.MediaType.Common (applicationFormURLEncoded, applicationJSON) +import Effect.Aff (Aff) +import Effect.Class (liftEffect) +import Globals (app') +import Model (Bookmark, Bookmark'(..), Note, Note'(..), AccountSettings, AccountSettings'(..)) +import Simple.JSON as J +import Web.HTML (window) +import Web.HTML.Location (reload) +import Web.HTML.Window (location) + +data StarAction = Star | UnStar +instance showStar :: Show StarAction where + show Star = "star" + show UnStar = "unstar" + +toggleStar :: Int -> StarAction -> Aff Unit +toggleStar bid action = do + let path = "bm/" <> show bid <> "/" <> show action + void (fetchUrlEnc POST path Nothing AXRes.ignore) + +destroy :: Int -> Aff (Response (Either ResponseFormatError Unit)) +destroy bid = + fetchUrlEnc DELETE ("bm/" <> show bid) Nothing AXRes.ignore + +markRead :: Int -> Aff (Response (Either ResponseFormatError Unit)) +markRead bid = do + let path = "bm/" <> show bid <> "/read" + fetchUrlEnc POST path Nothing AXRes.ignore + +editBookmark :: Bookmark -> Aff (Response (Either ResponseFormatError Unit)) +editBookmark bm = do + fetchJson POST "api/add" (Just (Bookmark' bm)) AXRes.ignore + +editNote :: Note -> Aff (Response (Either ResponseFormatError Json)) +editNote bm = do + fetchJson POST "api/note/add" (Just (Note' bm)) AXRes.json + +destroyNote :: Int -> Aff (Response (Either ResponseFormatError Unit)) +destroyNote nid = do + fetchUrlEnc DELETE ("api/note/" <> show nid) Nothing AXRes.ignore + +editAccountSettings :: AccountSettings -> Aff (Response (Either ResponseFormatError Unit)) +editAccountSettings us = do + fetchJson POST "api/accountSettings" (Just (AccountSettings' us)) AXRes.ignore + +logout :: Unit -> Aff Unit +logout u = do + void (fetchUrl POST app.authRlogoutR [] Nothing AXRes.ignore) + liftEffect (window >>= location >>= reload) + where + app = app' u + +fetchJson + :: forall a b. + J.WriteForeign b + => Method + -> String + -> Maybe b + -> AXRes.ResponseFormat a + -> Aff (Response (Either ResponseFormatError a)) +fetchJson method path content rt = + fetchPath method path [ContentType applicationJSON] (AXReq.string <<< J.writeJSON <$> content) rt + +fetchUrlEnc + :: forall a. + Method + -> String + -> Maybe FormURLEncoded + -> AXRes.ResponseFormat a + -> Aff (Response (Either ResponseFormatError a)) +fetchUrlEnc method path content rt = + fetchPath method path [ContentType applicationFormURLEncoded] (AXReq.FormURLEncoded <$> content) rt + +fetchPath + :: forall a. + Method + -> String + -> Array RequestHeader + -> Maybe AXReq.RequestBody + -> AXRes.ResponseFormat a + -> Aff (Response (Either ResponseFormatError a)) +fetchPath method path headers content rt = + fetchUrl method ((app' unit).homeR <> path) headers content rt + +fetchUrl + :: forall a. + Method + -> String + -> Array RequestHeader + -> Maybe AXReq.RequestBody + -> AXRes.ResponseFormat a + -> Aff (Response (Either ResponseFormatError a)) +fetchUrl method url headers content rt = + Ax.request + AX.defaultRequest + { url = url + , method = Left method + , headers = RequestHeader app.csrfHeaderName app.csrfToken : headers + , content = content + , responseFormat = rt + } + where + app = app' unit diff --git a/purs/src/Component/AccountSettings.purs b/purs/src/Component/AccountSettings.purs new file mode 100644 index 0000000..7442d15 --- /dev/null +++ b/purs/src/Component/AccountSettings.purs @@ -0,0 +1,91 @@ +module Component.AccountSettings where + +import Prelude hiding (div) + +import App (editAccountSettings) +import Data.Lens (Lens', lens, use, (%=)) +import Data.Maybe (Maybe(..)) +import Effect.Aff (Aff) +import Globals (app') +import Halogen as H +import Halogen.HTML (HTML, div, input, text) +import Halogen.HTML.Elements (label) +import Halogen.HTML.Events (onChecked) +import Halogen.HTML.Events as HE +import Halogen.HTML.Properties (InputType(..), checked, for, id_, name, type_) +import Model (AccountSettings) +import Util (class_) +import Web.Event.Event (Event) + +type UState = + { us :: AccountSettings + } + +_us :: Lens' UState AccountSettings +_us = lens _.us (_ { us = _ }) + +data UQuery a + = UEditField EditField a + | USubmit Event a + +data EditField + = EarchiveDefault Boolean + | EprivateDefault Boolean + | EprivacyLock Boolean + + +-- | The bookmark component definition. +usetting :: AccountSettings -> H.Component HTML UQuery Unit Unit Aff +usetting u' = + H.component + { initialState: const (mkState u') + , render + , eval + , receiver: const Nothing + } + where + app = app' unit + + mkState u = + { us: u + } + + render :: UState -> H.ComponentHTML UQuery + render { us } = + div [ class_ "settings-form" ] + [ div [ class_ "fw7 mb2"] [ text "Account Settings" ] + , div [ class_ "flex items-center mb2" ] + [ input [ type_ InputCheckbox , class_ "pointer mr2" , id_ "archiveDefault", name "archiveDefault" + , checked (us.archiveDefault) , onChecked (editField EarchiveDefault) ] + , label [ for "archiveDefault", class_ "lh-copy" ] + [ text "Archive Non-Private Bookmarks (archive.li)" ] + ] + , div [ class_ "flex items-center mb2" ] + [ input [ type_ InputCheckbox , class_ "pointer mr2" , id_ "privateDefault", name "privateDefault" + , checked (us.privateDefault) , onChecked (editField EprivateDefault) ] + , label [ for "privateDefault", class_ "lh-copy" ] + [ text "Default new bookmarks to Private" ] + ] + , div [ class_ "flex items-center mb2" ] + [ input [ type_ InputCheckbox , class_ "pointer mr2" , id_ "privacyLock", name "privacyLock" + , checked (us.privacyLock) , onChecked (editField EprivacyLock) ] + , label [ for "privacyLock", class_ "lh-copy" ] + [ text "Privacy Lock (Private Account)" ] + ] + ] + where + editField :: forall a. (a -> EditField) -> a -> Maybe (UQuery Unit) + editField f = HE.input UEditField <<< f + + eval :: UQuery ~> H.ComponentDSL UState UQuery Unit Aff + eval (UEditField f next) = do + _us %= case f of + EarchiveDefault e -> _ { archiveDefault = e } + EprivateDefault e -> _ { privateDefault = e } + EprivacyLock e -> _ { privacyLock = e } + pure next + + eval (USubmit e next) = do + us <- use _us + void $ H.liftAff (editAccountSettings us) + pure next diff --git a/purs/src/Component/Add.purs b/purs/src/Component/Add.purs new file mode 100644 index 0000000..2818645 --- /dev/null +++ b/purs/src/Component/Add.purs @@ -0,0 +1,179 @@ +module Component.Add where + +import Prelude hiding (div) + +import App (destroy, editBookmark) +import Data.Array (drop, foldMap) +import Data.Lens (Lens', lens, use, (%=), (.=)) +import Data.Maybe (Maybe(..), maybe) +import Data.Monoid (guard) +import Data.String (null) +import Data.String (split) as S +import Data.String.Pattern (Pattern(..)) +import Data.Tuple (fst, snd) +import Effect.Aff (Aff) +import Effect.Class (liftEffect) +import Globals (app', closeWindow, mmoment8601) +import Halogen as H +import Halogen.HTML (HTML, br_, button, div, div_, form, input, label, p, span, table, tbody_, td, td_, text, textarea, tr_) +import Halogen.HTML.Events (onSubmit, onValueChange, onChecked, onClick) +import Halogen.HTML.Events as HE +import Halogen.HTML.Properties (autofocus, ButtonType(..), InputType(..), autocomplete, checked, for, id_, name, required, rows, title, type_, value) +import Model (Bookmark) +import Util (_curQuerystring, _loc, _lookupQueryStringValue, attr, class_) +import Web.Event.Event (Event, preventDefault) +import Web.HTML (window) +import Web.HTML.Location (setHref) + +data BQuery a + = BEditField EditField a + | BEditSubmit Event a + | BDeleteAsk Boolean a + | BDestroy a + +data EditField + = Eurl String + | Etitle String + | Edescription String + | Etags String + | Eprivate Boolean + | Etoread Boolean + +type BState = + { bm :: Bookmark + , edit_bm :: Bookmark + , deleteAsk :: Boolean + , destroyed :: Boolean + } + +_bm :: Lens' BState Bookmark +_bm = lens _.bm (_ { bm = _ }) + +_edit_bm :: Lens' BState Bookmark +_edit_bm = lens _.edit_bm (_ { edit_bm = _ }) + +addbmark :: Bookmark -> H.Component HTML BQuery Unit Unit Aff +addbmark b' = + H.component + { initialState: const (mkState b') + , render + , eval + , receiver: const Nothing + } + where + app = app' unit + + mkState b = + { bm: b + , edit_bm: b + , deleteAsk: false + , destroyed: false + } + + render :: BState -> H.ComponentHTML BQuery + render s@{ bm, edit_bm } = + div_ [ if not s.destroyed then display_edit else display_destroyed ] + where + display_edit = + form [ onSubmit (HE.input BEditSubmit) ] + [ table [ class_ "w-100" ] + [ tbody_ + [ tr_ + [ td [ class_ "w1" ] [ ] + , td_ $ guard (bm.bid > 0) [ display_exists ] + ] + , tr_ + [ td_ [ label [ for "url" ] [ text "URL" ] ] + , td_ [ input [ type_ InputUrl , id_ "url", class_ "w-100 mv1" , required true, name "url", autofocus (null bm.url) + , value (edit_bm.url) , onValueChange (editField Eurl)] ] + ] + , tr_ + [ td_ [ label [ for "title" ] [ text "title" ] ] + , td_ [ input [ type_ InputText , id_ "title", class_ "w-100 mv1" , name "title" + , value (edit_bm.title) , onValueChange (editField Etitle)] ] + ] + , tr_ + [ td_ [ label [ for "description" ] [ text "description" ] ] + , td_ [ textarea [ class_ "w-100 mt1 mid-gray" , id_ "description", name "description", rows 4 + , value (edit_bm.description) , onValueChange (editField Edescription)] ] + ] + , tr_ + [ td_ [ label [ for "tags" ] [ text "tags" ] ] + , td_ [ input [ type_ InputText , id_ "tags", class_ "w-100 mv1" , name "tags", autocomplete false, attr "autocapitalize" "off", autofocus (not $ null bm.url) + , value (edit_bm.tags) , onValueChange (editField Etags)] ] + ] + , tr_ + [ td_ [ label [ for "private" ] [ text "private" ] ] + , td_ [ input [ type_ InputCheckbox , id_ "private", class_ "private pointer" , name "private" + , checked (edit_bm.private) , onChecked (editField Eprivate)] ] + ] + , tr_ + [ td_ [ label [ for "toread" ] [ text "read later" ] ] + , td_ [ input [ type_ InputCheckbox , id_ "toread", class_ "toread pointer" , name "toread" + , checked (edit_bm.toread) , onChecked (editField Etoread)] ] + ] + , tr_ + [ td_ [ ] + , td_ [ input [ type_ InputSubmit , class_ "ph3 pv2 input-reset ba b--navy bg-transparent pointer f6 dib mt1 dim" + , value (if bm.bid > 0 then "update bookmark" else "add bookmark") ] ] + ] + ] + ] + ] + + display_exists = + div [ class_ "alert" ] + [ text "previously saved " + , span [ class_ "link f7 dib gray pr3" , title (maybe bm.time snd mmoment) ] + [ text (maybe " " fst mmoment) ] + , div [ class_ "edit_links dib ml1" ] + [ div [ class_ "delete_link di" ] + [ button ([ type_ ButtonButton, onClick (HE.input_ (BDeleteAsk true)), class_ "delete" ] <> guard s.deleteAsk [ attr "hidden" "hidden" ]) [ text "delete" ] + , span ([ class_ "confirm red" ] <> guard (not s.deleteAsk) [ attr "hidden" "hidden" ]) + [ button [ type_ ButtonButton, onClick (HE.input_ (BDeleteAsk false))] [ text "cancel / " ] + , button [ type_ ButtonButton, onClick (HE.input_ BDestroy), class_ "red" ] [ text "destroy" ] + ] + ] + ] + ] + + display_destroyed = p [ class_ "red"] [text "you killed this bookmark"] + + editField :: forall a. (a -> EditField) -> a -> Maybe (BQuery Unit) + editField f = HE.input BEditField <<< f + mmoment = mmoment8601 bm.time + toTextarea = + drop 1 + <<< foldMap (\x -> [br_, text x]) + <<< S.split (Pattern "\n") + + eval :: BQuery ~> H.ComponentDSL BState BQuery Unit Aff + eval (BDeleteAsk e next) = do + H.modify_ (_ { deleteAsk = e }) + pure next + eval (BDestroy next) = do + bid <- H.gets _.bm.bid + void $ H.liftAff (destroy bid) + H.modify_ (_ { destroyed = true }) + pure next + eval (BEditField f next) = do + _edit_bm %= case f of + Eurl e -> _ { url = e } + Etitle e -> _ { title = e } + Edescription e -> _ { description = e } + Etags e -> _ { tags = e } + Eprivate e -> _ { private = e } + Etoread e -> _ { toread = e } + pure next + eval (BEditSubmit e next) = do + H.liftEffect (preventDefault e) + edit_bm <- use _edit_bm + void $ H.liftAff (editBookmark edit_bm) + _bm .= edit_bm + loc <- liftEffect _loc + win <- liftEffect window + qs <- liftEffect _curQuerystring + case _lookupQueryStringValue qs "next" of + Just n -> liftEffect (setHref n loc) + _ -> liftEffect (closeWindow win) + pure next diff --git a/purs/src/Component/BList.purs b/purs/src/Component/BList.purs new file mode 100644 index 0000000..d991184 --- /dev/null +++ b/purs/src/Component/BList.purs @@ -0,0 +1,48 @@ +module Component.BList where + +import Prelude + +import Component.BMark (BMessage(..), BQuery, bmark) +import Model (Bookmark, BookmarkId) + +import Data.Array (filter) +import Data.Maybe (Maybe(..)) +import Effect.Aff (Aff) +import Halogen as H +import Halogen.HTML as HH +import Halogen.HTML.Events as HE + +type BSlot = BookmarkId + +data LQuery a = + HandleBMessage BSlot BMessage a + +blist :: Array Bookmark -> H.Component HH.HTML LQuery Unit Void Aff +blist st = + H.parentComponent + { initialState: const st + , render + , eval + , receiver: const Nothing + } + where + + render :: Array Bookmark -> H.ParentHTML LQuery BQuery BSlot Aff + render bms = + HH.div_ (map renderBookmark bms) + where + renderBookmark :: Bookmark -> H.ParentHTML LQuery BQuery BSlot Aff + renderBookmark b = + HH.slot + b.bid + (bmark b) + unit + (HE.input (HandleBMessage b.bid)) + + eval :: LQuery ~> H.ParentDSL (Array Bookmark) LQuery BQuery BSlot Void Aff + eval (HandleBMessage p BNotifyRemove next) = do + H.modify_ (removeBookmark p) + pure next + where + removeBookmark :: BookmarkId -> Array Bookmark -> Array Bookmark + removeBookmark bookmarkId = filter (\b -> b.bid /= bookmarkId) diff --git a/purs/src/Component/BMark.purs b/purs/src/Component/BMark.purs new file mode 100644 index 0000000..aa2c14a --- /dev/null +++ b/purs/src/Component/BMark.purs @@ -0,0 +1,247 @@ +module Component.BMark where + +import Prelude hiding (div) + +import App (StarAction(..), destroy, editBookmark, markRead, toggleStar) +import Data.Array (drop, foldMap) +import Data.Lens (Lens', lens, use, (%=), (.=)) +import Data.Maybe (Maybe(..), fromMaybe, isJust, maybe) +import Data.Monoid (guard) +import Data.Nullable (toMaybe) +import Data.String (null, split, take) as S +import Data.String.Pattern (Pattern(..)) +import Data.Tuple (fst, snd) +import Effect.Aff (Aff) +import Globals (app', mmoment8601) +import Halogen as H +import Halogen.HTML (HTML, a, br_, button, div, div_, form, input, label, span, text, textarea) +import Halogen.HTML.Events (onSubmit, onValueChange, onChecked, onClick) +import Halogen.HTML.Events as HE +import Halogen.HTML.Properties (ButtonType(..), InputType(..), autocomplete, checked, for, href, id_, name, required, rows, target, title, type_, value) +import Model (Bookmark) +import Util (class_, attr, fromNullableStr) +import Web.Event.Event (Event, preventDefault) + +-- | UI Events +data BQuery a + = BStar Boolean a + | BDeleteAsk Boolean a + | BDestroy a + | BEdit Boolean a + | BEditField EditField a + | BEditSubmit Event a + | BMarkRead a + +-- | FormField Edits +data EditField + = Eurl String + | Etitle String + | Edescription String + | Etags String + | Eprivate Boolean + | Etoread Boolean + +-- | Messages to parent +data BMessage + = BNotifyRemove + +type BState = + { bm :: Bookmark + , edit_bm :: Bookmark + , deleteAsk:: Boolean + , edit :: Boolean + } + +_bm :: Lens' BState Bookmark +_bm = lens _.bm (_ { bm = _ }) + +_edit_bm :: Lens' BState Bookmark +_edit_bm = lens _.edit_bm (_ { edit_bm = _ }) + +_edit :: Lens' BState Boolean +_edit = lens _.edit (_ { edit = _ }) + +bmark :: Bookmark -> H.Component HTML BQuery Unit BMessage Aff +bmark b' = + H.component + { initialState: const (mkState b') + , render + , eval + , receiver: const Nothing + } + where + app = app' unit + + mkState b = + { bm: b + , edit_bm: b + , deleteAsk: false + , edit: false + } + + render :: BState -> H.ComponentHTML BQuery + render s@{ bm, edit_bm } = + div [ id_ (show bm.bid) , class_ ("bookmark w-100 mw7 pa1 mb3" <> guard bm.private " private")] $ + star <> + if s.edit + then display_edit + else display + where + + star = + guard app.dat.isowner + [ div [ class_ ("star fl pointer" <> guard bm.selected " selected") ] + [ button [ class_ "moon-gray", onClick (HE.input_ (BStar (not bm.selected))) ] [ text "✭" ] ] + ] + + display = + [ div [ class_ "display" ] $ + [ a [ href bm.url, target "_blank", class_ ("link f5 lh-title" <> guard bm.toread " unread")] + [ text $ if S.null bm.title then "[no title]" else bm.title ] + , br_ + , a [ href bm.url , class_ "link f7 gray hover-blue" ] [ text bm.url ] + , a [ href (fromMaybe ("http://archive.is/" <> bm.url) (toMaybe bm.archiveUrl)) + , class_ ("link f7 gray hover-blue ml2" <> (guard (isJust (toMaybe bm.archiveUrl)) " green")) + , target "_blank", title "archive link"] + [ if isJust (toMaybe bm.archiveUrl) then text "☑" else text "☐" ] + , br_ + -- + , div [ class_ "description mt1 mid-gray" ] (toTextarea bm.description) + , div [ class_ "tags" ] $ + guard (not (S.null bm.tags)) + map (\tag -> a [ class_ ("link tag mr1" <> guard (S.take 1 tag == ".") " private") + , href (linkToFilterTag tag) ] + [ text tag ]) + (S.split (Pattern " ") bm.tags) + , a [ class_ "link f7 dib gray w4", title (maybe bm.time snd mmoment) , href (linkToFilterSingle bm.slug) ] + [ text (maybe " " fst mmoment) ] + ] + <> links + ] + + display_edit = + [ div [ class_ "edit_bookmark_form pa2 pt0 bg-white" ] $ + [ form [ onSubmit (HE.input BEditSubmit) ] + [ div_ [ text "url" ] + , input [ type_ InputUrl , class_ "url w-100 mb2 pt1 f7 edit_form_input" , required true , name "url" + , value (edit_bm.url) , onValueChange (editField Eurl) ] + , br_ + , div_ [ text "title" ] + , input [ type_ InputText , class_ "title w-100 mb2 pt1 f7 edit_form_input" , name "title" + , value (edit_bm.title) , onValueChange (editField Etitle) ] + , br_ + , div_ [ text "description" ] + , textarea [ class_ "description w-100 mb1 pt1 f7 edit_form_input" , name "description", rows 5 + , value (edit_bm.description) , onValueChange (editField Edescription) ] + , br_ + , div [ id_ "tags_input_box"] + [ div_ [ text "tags" ] + , input [ type_ InputText , class_ "tags w-100 mb1 pt1 f7 edit_form_input" , name "tags" + , autocomplete false, attr "autocapitalize" "off" + , value (edit_bm.tags) , onValueChange (editField Etags) ] + , br_ + ] + , div [ class_ "edit_form_checkboxes mv3"] + [ input [ type_ InputCheckbox , class_ "private pointer" , id_ "edit_private", name "private" + , checked (edit_bm.private) , onChecked (editField Eprivate) ] + , text " " + , label [ for "edit_private" , class_ "mr2" ] [ text "private" ] + , text " " + , input [ type_ InputCheckbox , class_ "toread pointer" , id_ "edit_toread", name "toread" + , checked (edit_bm.toread) , onChecked (editField Etoread) ] + , text " " + , label [ for "edit_toread" ] [ text "to-read" ] + , br_ + ] + , input [ type_ InputSubmit , class_ "mr1 pv1 ph2 dark-gray ba b--moon-gray bg-near-white pointer rdim" , value "save" ] + , text " " + , input [ type_ InputReset , class_ "pv1 ph2 dark-gray ba b--moon-gray bg-near-white pointer rdim" , value "cancel" + , onClick (HE.input_ (BEdit false)) ] + ] + ] + ] + + links = + guard app.dat.isowner + [ div [ class_ "edit_links di" ] + [ button [ type_ ButtonButton, onClick (HE.input_ (BEdit true)), class_ "edit light-silver hover-blue" ] [ text "edit  " ] + , div [ class_ "delete_link di" ] + [ button [ type_ ButtonButton, onClick (HE.input_ (BDeleteAsk true)), class_ ("delete light-silver hover-blue" <> guard s.deleteAsk " dn") ] [ text "delete" ] + , span ([ class_ ("confirm red" <> guard (not s.deleteAsk) " dn") ] ) + [ button [ type_ ButtonButton, onClick (HE.input_ (BDeleteAsk false))] [ text "cancel / " ] + , button [ type_ ButtonButton, onClick (HE.input_ BDestroy), class_ "red" ] [ text "destroy" ] + ] + ] + ] + , div [ class_ "read di" ] $ + guard bm.toread + [ text "  " + , button [ onClick (HE.input_ BMarkRead), class_ "mark_read" ] [ text "mark as read"] + ] + ] + + editField :: forall a. (a -> EditField) -> a -> Maybe (BQuery Unit) + editField f = HE.input BEditField <<< f + linkToFilterSingle slug = fromNullableStr app.userR <> "/b:" <> slug + linkToFilterTag tag = fromNullableStr app.userR <> "/t:" <> tag + mmoment = mmoment8601 bm.time + toTextarea input = + S.split (Pattern "\n") input + # foldMap (\x -> [br_, text x]) + # drop 1 + + eval :: BQuery ~> H.ComponentDSL BState BQuery BMessage Aff + + -- | Star + eval (BStar e next) = do + bm <- use _bm + H.liftAff (toggleStar bm.bid (if e then Star else UnStar)) + _bm %= _ { selected = e } + _edit_bm %= _ { selected = e } + pure next + + -- | Delete + eval (BDeleteAsk e next) = do + H.modify_ (_ { deleteAsk = e }) + pure next + + -- | Destroy + eval (BDestroy next) = do + bm <- use _bm + void $ H.liftAff (destroy bm.bid) + H.raise BNotifyRemove + pure next + + -- | Mark Read + eval (BMarkRead next) = do + bm <- use _bm + void (H.liftAff (markRead bm.bid)) + _bm %= _ { toread = false } + pure next + + -- | Start/Stop Editing + eval (BEdit e next) = do + bm <- use _bm + _edit_bm .= bm + _edit .= e + pure next + + -- | Update Form Field + eval (BEditField f next) = do + _edit_bm %= case f of + Eurl e -> _ { url = e } + Etitle e -> _ { title = e } + Edescription e -> _ { description = e } + Etags e -> _ { tags = e } + Eprivate e -> _ { private = e } + Etoread e -> _ { toread = e } + pure next + + -- | Submit + eval (BEditSubmit e next) = do + H.liftEffect (preventDefault e) + edit_bm <- use _edit_bm + void $ H.liftAff (editBookmark edit_bm) + _bm .= edit_bm + _edit .= false + pure next diff --git a/purs/src/Component/Markdown.purs b/purs/src/Component/Markdown.purs new file mode 100644 index 0000000..9d8b597 --- /dev/null +++ b/purs/src/Component/Markdown.purs @@ -0,0 +1,15 @@ +module Component.Markdown (component, MInput, MQuery, MOutput, module RHExt) where + +import Component.RawHtml as RH +import Component.RawHtml (Query(Receive)) as RHExt +import Effect.Aff (Aff) +import Foreign.Marked (marked) +import Halogen as H +import Halogen.HTML as HH + +type MInput = String +type MQuery = RH.Query String +type MOutput = RH.Output + +component :: H.Component HH.HTML MQuery MInput MOutput Aff +component = RH.mkComponent marked diff --git a/purs/src/Component/NList.purs b/purs/src/Component/NList.purs new file mode 100644 index 0000000..47ac15e --- /dev/null +++ b/purs/src/Component/NList.purs @@ -0,0 +1,75 @@ +module Component.NList where + +import Prelude hiding (div) + +import Data.Array (drop, foldMap) +import Data.Maybe (Maybe(..), maybe) +import Data.String (null, split, take) as S +import Data.String.Pattern (Pattern(..)) +import Data.Tuple (fst, snd) +import Effect.Aff (Aff) +import Globals (app', mmoment8601) +import Halogen as H +import Halogen.HTML (a, br_, div, text) +import Halogen.HTML as HH +import Halogen.HTML.Properties (href, id_, title) +import Model (Note, NoteSlug) +import Util (class_, fromNullableStr) + +data NLQuery a + = NLNop a + +type NLSlot = NoteSlug + +type NLState = + { notes :: Array Note + , cur :: Maybe NLSlot + , deleteAsk:: Boolean + , edit :: Boolean + } + + +nlist :: Array Note -> H.Component HH.HTML NLQuery Unit Void Aff +nlist st' = + H.component + { initialState: const (mkState st') + , render + , eval + , receiver: const Nothing + } + where + app = app' unit + + mkState notes' = + { notes: notes' + , cur: Nothing + , deleteAsk: false + , edit: false + } + + render :: NLState -> H.ComponentHTML NLQuery + render st@{ notes } = + HH.div_ (map renderNote notes) + where + renderNote :: Note -> H.ComponentHTML NLQuery + renderNote bm = + div [ id_ (show bm.id) , class_ ("note w-100 mw7 pa1 mb2")] $ + [ div [ class_ "display" ] $ + [ a [ href (linkToFilterSingle bm.slug), class_ ("link f5 lh-title")] + [ text $ if S.null bm.title then "[no title]" else bm.title ] + , br_ + , div [ class_ "description mt1 mid-gray" ] (toTextarea (S.take 200 bm.text)) + , a [ class_ "link f7 dib gray w4", title (maybe bm.created snd (mmoment bm)) , href (linkToFilterSingle bm.slug) ] + [ text (maybe " " fst (mmoment bm)) ] + ] + ] + + mmoment bm = mmoment8601 bm.created + linkToFilterSingle slug = fromNullableStr app.userR <> "/notes/" <> slug + toTextarea input = + S.split (Pattern "\n") input + # foldMap (\x -> [br_, text x]) + # drop 1 + + eval :: NLQuery ~> H.ComponentDSL NLState NLQuery Void Aff + eval (NLNop next) = pure next diff --git a/purs/src/Component/NNote.purs b/purs/src/Component/NNote.purs new file mode 100644 index 0000000..231c610 --- /dev/null +++ b/purs/src/Component/NNote.purs @@ -0,0 +1,197 @@ +module Component.NNote where + +import Prelude hiding (div) + +import App (destroyNote, editNote) +import Component.Markdown as Markdown +import Data.Array (drop, foldMap) +import Data.Either (Either(..)) +import Data.Lens (Lens', lens, use, (%=), (.=)) +import Data.Maybe (Maybe(..), maybe) +import Data.Monoid (guard) +import Data.String (null, split) as S +import Data.String.Pattern (Pattern(..)) +import Data.Tuple (fst, snd) +import Effect.Aff (Aff) +import Effect.Class (liftEffect) +import Globals (app', mmoment8601) +import Halogen as H +import Halogen.HTML (br_, button, div, form, input, label, p, span, text, textarea) +import Halogen.HTML as HH +import Halogen.HTML.Events (onChecked, onClick, onSubmit, onValueChange) +import Halogen.HTML.Events as HE +import Halogen.HTML.Properties (ButtonType(..), InputType(..), checked, for, id_, name, rows, title, type_, value) +import Model (Note) +import Util (_loc, class_, fromNullableStr) +import Web.Event.Event (Event, preventDefault) +import Web.HTML.Location (setHref) + +data NQuery a + = NNop a + | NEditField EditField a + | NEditSubmit Event a + | NEdit Boolean a + | NDeleteAsk Boolean a + | NDestroy a + +type NState = + { note :: Note + , edit_note :: Note + , deleteAsk :: Boolean + , edit :: Boolean + , destroyed :: Boolean + } + +_note :: Lens' NState Note +_note = lens _.note (_ { note = _ }) + +_edit_note :: Lens' NState Note +_edit_note = lens _.edit_note (_ { edit_note = _ }) + +_edit :: Lens' NState Boolean +_edit = lens _.edit (_ { edit = _ }) + +-- | FormField Edits +data EditField + = Etitle String + | Etext String + | EisMarkdown Boolean + +type NChildQuery = Markdown.MQuery + +nnote :: Note -> H.Component HH.HTML NQuery Unit Void Aff +nnote st' = + H.parentComponent + { initialState: const (mkState st') + , render + , eval + , receiver: const Nothing + } + where + app = app' unit + + mkState note' = + { note: note' + , edit_note: note' + , deleteAsk: false + , edit: note'.id <= 0 + , destroyed: false + } + + render :: NState -> H.ParentHTML NQuery NChildQuery Unit Aff + render st@{ note, edit_note } = + if st.destroyed + then display_destroyed + else + if st.edit + then renderNote_edit + else renderNote + where + + renderNote = + div [ id_ (show note.id) , class_ ("note w-100 mw7 pa1 mb2")] $ + [ div [ class_ "display" ] $ + [ div [ class_ ("link f5 lh-title")] + [ text $ if S.null note.title then "[no title]" else note.title ] + , br_ + , if note.isMarkdown + then div [ class_ "description mt1" ] [ HH.slot unit Markdown.component note.text absurd ] + else div [ class_ "description mt1 mid-gray" ] (toTextarea note.text) + , div [ class_ "link f7 dib gray w4", title (maybe note.created snd (mmoment note)) ] + [ text (maybe " " fst (mmoment note)) ] + ] + ] + <> -- | Render Action Links + [ div [ class_ "edit_links db mt3" ] + [ button [ type_ ButtonButton, onClick (HE.input_ (NEdit true)), class_ "edit light-silver hover-blue" ] [ text "edit  " ] + , div [ class_ "delete_link di" ] + [ button [ type_ ButtonButton, onClick (HE.input_ (NDeleteAsk true)), class_ ("delete light-silver hover-blue" <> guard st.deleteAsk " dn") ] [ text "delete" ] + , span ([ class_ ("confirm red" <> guard (not st.deleteAsk) " dn") ] ) + [ button [ type_ ButtonButton, onClick (HE.input_ (NDeleteAsk false))] [ text "cancel / " ] + , button [ type_ ButtonButton, onClick (HE.input_ NDestroy), class_ "red" ] [ text "destroy" ] + ] + ] + ] + ] + + renderNote_edit = + form [ onSubmit (HE.input NEditSubmit) ] + [ p [ class_ "mt2 mb1"] [ text "title:" ] + , input [ type_ InputText , class_ "title w-100 mb1 pt1 f7 edit_form_input" , name "title" + , value (edit_note.title) , onValueChange (editField Etitle) + ] + , br_ + , p [ class_ "mt2 mb1"] [ text "description:" ] + , textarea [ class_ "description w-100 mb1 pt1 f7 edit_form_input" , name "text", rows 30 + , value (edit_note.text) , onValueChange (editField Etext) + ] + , div [ class_ "edit_form_checkboxes mb3"] + [ input [ type_ InputCheckbox , class_ "is-markdown pointer" , id_ "edit_ismarkdown", name "ismarkdown" + , checked (edit_note.isMarkdown) , onChecked (editField EisMarkdown) ] + , text " " + , label [ for "edit_ismarkdown" , class_ "mr2" ] [ text "use markdown?" ] + , br_ + ] + , input [ type_ InputSubmit , class_ "mr1 pv1 ph2 dark-gray ba b--moon-gray bg-near-white pointer rdim" , value "save" ] + , text " " + , input [ type_ InputReset , class_ "pv1 ph2 dark-gray ba b--moon-gray bg-near-white pointer rdim" , value "cancel" + , onClick (HE.input_ (NEdit false)) + ] + ] + + display_destroyed = p [ class_ "red"] [text "you killed this note"] + + mmoment n = mmoment8601 n.created + editField :: forall a. (a -> EditField) -> a -> Maybe (NQuery Unit) + editField f = HE.input NEditField <<< f + toTextarea input = + S.split (Pattern "\n") input + # foldMap (\x -> [br_, text x]) + # drop 1 + + + eval :: NQuery ~> H.ParentDSL NState NQuery NChildQuery Unit Void Aff + eval (NNop next) = pure next + + -- | EditField + eval (NEditField f next) = do + _edit_note %= case f of + Etitle e -> _ { title = e } + Etext e -> _ { text = e } + EisMarkdown e -> _ { isMarkdown = e } + pure next + + -- | Delete + eval (NDeleteAsk e next) = do + H.modify_ (_ { deleteAsk = e }) + pure next + + -- | Destroy + eval (NDestroy next) = do + note <- use _note + void $ H.liftAff (destroyNote note.id) + H.modify_ (_ { destroyed = true }) + pure next + + -- | Start/Stop Editing + eval (NEdit e next) = do + note <- use _note + _edit_note .= note + _edit .= e + pure next + + -- | Submit + eval (NEditSubmit e next) = do + H.liftEffect (preventDefault e) + edit_note <- use _edit_note + res <- H.liftAff (editNote edit_note) + case res.body of + Left err -> pure next + Right r -> do + if (edit_note.id == 0) + then do + liftEffect (setHref (fromNullableStr app.noteR) =<< _loc) + else do + _note .= edit_note + _edit .= false + pure next diff --git a/purs/src/Component/RawHtml.js b/purs/src/Component/RawHtml.js new file mode 100644 index 0000000..047234c --- /dev/null +++ b/purs/src/Component/RawHtml.js @@ -0,0 +1,8 @@ +// use at your own risk! +exports.unsafeSetInnerHTML = function(element) { + return function(html) { + return function() { + element.innerHTML = html; + }; + }; +}; diff --git a/purs/src/Component/RawHtml.purs b/purs/src/Component/RawHtml.purs new file mode 100644 index 0000000..b416445 --- /dev/null +++ b/purs/src/Component/RawHtml.purs @@ -0,0 +1,62 @@ +module Component.RawHtml where + +import Prelude + +import Data.Foldable (for_) +import Data.Maybe (Maybe(..)) +import Effect (Effect) +import Effect.Aff (Aff) +import Globals (RawHTML(..)) +import Halogen as H +import Halogen.HTML as HH +import Halogen.HTML.Events as HE +import Halogen.HTML.Properties as HP +import Web.HTML (HTMLElement) + +foreign import unsafeSetInnerHTML :: HTMLElement -> RawHTML -> Effect Unit + +data Query i a + = SetInnerHTML a + | Receive (Input i) a + +type Input i = i + +type Output = Void + +type State i = + { elRef :: H.RefLabel + , inputval :: Input i + } + +component :: H.Component HH.HTML (Query String) (Input String) Output Aff +component = mkComponent RawHTML + +mkComponent :: forall i. (Input i -> RawHTML) -> H.Component HH.HTML (Query i) (Input i) Output Aff +mkComponent toRawHTML = H.lifecycleComponent + { initialState: \inputval -> { elRef: H.RefLabel "inputval", inputval } + , render + , eval + , receiver: HE.input Receive + , initializer: Just $ H.action SetInnerHTML + , finalizer: Nothing + } + where + render :: (State i) -> H.ComponentHTML (Query i) + render state = + HH.div + [ HP.ref state.elRef ] + [] + + eval :: (Query i) ~> H.ComponentDSL (State i) (Query i) Output Aff + eval = case _ of + SetInnerHTML a -> do + { elRef } <- H.get + mel <- H.getHTMLElementRef elRef + for_ mel \el -> do + { inputval } <- H.get + H.liftEffect (unsafeSetInnerHTML el (toRawHTML inputval)) + pure a + + Receive inputval a -> do + H.modify_ _ { inputval = inputval } + eval $ SetInnerHTML a diff --git a/purs/src/Globals.js b/purs/src/Globals.js new file mode 100644 index 0000000..bdf0955 --- /dev/null +++ b/purs/src/Globals.js @@ -0,0 +1,65 @@ +"use strict"; + +exports._app = function() { + return app; +} + +exports._closest = function(just, nothing, selector, el) { + var node = el.closest(selector); + if(node) { + return just(node); + } else { + return nothing; + } +} + +exports._innerHtml = function(el) { + return el.innerHTML; +} + +exports._setInnerHtml = function(content, el) { + el.innerHTML = content; + return el; +} + +exports._createFormData = function(formElement) { + return new FormData(formElement); +} + +exports._createFormString = function(formElement) { + return new URLSearchParams(new FormData(formElement)).toString() +} + +exports._createFormArray = function(formElement) { + return Array.from(new FormData(formElement)); +} + +exports._getDataAttribute = function(name, el) { + return el.dataset[name]; +} + +exports._setDataAttribute = function(name, value, el) { + return el.dataset[name] = value; +} + +exports._moment8601 = function(tuple, s) { + var m = moment(s, moment.ISO_8601); + var s1 = m.fromNow(); + var s2 = m.format('MMMM D YYYY, h:mm a') + " (" + m.format() + ") "; + return tuple(s1)(s2); +} + +exports._mmoment8601 = function(just, nothing, tuple, s) { + try { + var m = moment(s, moment.ISO_8601); + var s1 = m.fromNow(); + var s2 = m.format('MMMM D YYYY, h:mm a') + " (" + m.format() + ") "; + return just(tuple(s1)(s2)); + } catch (error) { + return nothing + } +} + +exports._closeWindow = function (window) { + window.close(); +}; diff --git a/purs/src/Globals.purs b/purs/src/Globals.purs new file mode 100644 index 0000000..f967339 --- /dev/null +++ b/purs/src/Globals.purs @@ -0,0 +1,97 @@ +module Globals where + +import Data.Function.Uncurried + +import Data.Maybe (Maybe(..)) +import Data.Nullable (Nullable, toMaybe) +import Data.Tuple (Tuple(..)) +import Effect (Effect) +import Model (Bookmark) +import Prelude (Unit, pure, ($)) +import Web.DOM (Element, Node) +import Web.HTML (HTMLElement, HTMLFormElement, Window) +import Web.XHR.FormData (FormData) +import Data.Newtype (class Newtype) + +type App = + { csrfHeaderName :: String + , csrfCookieName :: String + , csrfParamName :: String + , csrfToken :: String + , homeR :: String + , authRlogoutR :: String + , userR :: Nullable String + , noteR :: Nullable String + , dat :: AppData + } + +type AppData = + { bmarks :: Array Bookmark + , bmark :: Bookmark + , isowner :: Boolean + } + +foreign import _app :: Fn0 App + +app' :: Unit -> App +app' _ = runFn0 _app + +foreign import _closest :: forall a. Fn4 (a -> Maybe a) (Maybe a) String Node (Maybe Node) + +closest :: String -> Node -> Effect (Maybe Node) +closest selector node = pure $ runFn4 _closest Just Nothing selector node + +foreign import _moment8601 :: Fn2 (String -> String -> Tuple String String) String (Tuple String String) + +moment8601 :: String -> Effect (Tuple String String) +moment8601 s = pure $ runFn2 _moment8601 Tuple s + +foreign import _mmoment8601 :: forall a. Fn4 (a -> Maybe a) (Maybe a) (String -> String -> Tuple String String) String (Maybe (Tuple String String)) + +mmoment8601 :: String -> Maybe (Tuple String String) +mmoment8601 s = runFn4 _mmoment8601 Just Nothing Tuple s + +foreign import _innerHtml :: Fn1 HTMLElement String + +innerHtml :: HTMLElement -> Effect String +innerHtml n = pure $ runFn1 _innerHtml n + +foreign import _setInnerHtml :: Fn2 String HTMLElement HTMLElement + +setInnerHtml :: String -> HTMLElement -> Effect HTMLElement +setInnerHtml c n = pure $ runFn2 _setInnerHtml c n + +foreign import _createFormData :: Fn1 HTMLFormElement FormData + +createFormData :: HTMLFormElement -> FormData +createFormData f = runFn1 _createFormData f + +foreign import _createFormString :: Fn1 HTMLFormElement String + +createFormString :: HTMLFormElement -> String +createFormString f = runFn1 _createFormString f + + +foreign import _createFormArray :: Fn1 HTMLFormElement (Array (Array String)) + +createFormArray :: HTMLFormElement -> (Array (Array String)) +createFormArray f = runFn1 _createFormArray f + +foreign import _getDataAttribute :: Fn2 String Element (Nullable String) + +getDataAttribute :: String -> Element -> Effect (Maybe String) +getDataAttribute k n = pure $ toMaybe $ runFn2 _getDataAttribute k n + +foreign import _setDataAttribute :: Fn3 String String Element Unit + +setDataAttribute :: String -> String -> Element -> Effect Unit +setDataAttribute k v n = pure $ runFn3 _setDataAttribute k v n + +foreign import _closeWindow :: Fn1 Window Unit + +closeWindow :: Window -> Effect Unit +closeWindow win = pure $ runFn1 _closeWindow win + +newtype RawHTML = RawHTML String + +derive instance newtypeRawHTML :: Newtype RawHTML _ diff --git a/purs/src/Main.purs b/purs/src/Main.purs new file mode 100644 index 0000000..5b99659 --- /dev/null +++ b/purs/src/Main.purs @@ -0,0 +1,63 @@ +module Main where + +import Prelude + +import App (logout) +import Component.Add (addbmark) +import Component.BList (blist) +import Component.NList (nlist) +import Component.NNote (nnote) +import Component.AccountSettings (usetting) +import Data.Foldable (traverse_) +import Effect (Effect) +import Effect.Aff (Aff, launchAff) +import Effect.Class (liftEffect) +import Halogen.Aff as HA +import Halogen.VDom.Driver (runUI) +import Model (Bookmark, Note, AccountSettings) +import Web.DOM.Element (removeAttribute) +import Web.DOM.ParentNode (QuerySelector(..)) +import Web.Event.Event (Event, preventDefault) +import Web.HTML.HTMLElement (toElement) + +main :: Effect Unit +main = pure unit + +logoutE :: Event -> Effect Unit +logoutE e = void <<< launchAff <<< logout =<< preventDefault e + +renderBookmarks :: String -> Array Bookmark -> Effect Unit +renderBookmarks renderElSelector bmarks = do + HA.runHalogenAff do + HA.selectElement (QuerySelector renderElSelector) >>= traverse_ \el -> do + void $ runUI (blist bmarks) unit el + showFooter + +renderAddForm :: String -> Bookmark -> Effect Unit +renderAddForm renderElSelector bmark = do + HA.runHalogenAff do + HA.selectElement (QuerySelector renderElSelector) >>= traverse_ \el -> do + runUI (addbmark bmark) unit el + +renderNotes :: String -> Array Note -> Effect Unit +renderNotes renderElSelector notes = do + HA.runHalogenAff do + HA.selectElement (QuerySelector renderElSelector) >>= traverse_ \el -> do + void $ runUI (nlist notes) unit el + showFooter + +renderNote :: String -> Note -> Effect Unit +renderNote renderElSelector note = do + HA.runHalogenAff do + HA.selectElement (QuerySelector renderElSelector) >>= traverse_ \el -> do + void $ runUI (nnote note) unit el + +renderAccountSettings :: String -> AccountSettings -> Effect Unit +renderAccountSettings renderElSelector accountSettings = do + HA.runHalogenAff do + HA.selectElement (QuerySelector renderElSelector) >>= traverse_ \el -> do + void $ runUI (usetting accountSettings) unit el + +showFooter :: Aff Unit +showFooter = HA.selectElement (QuerySelector ".user_footer") >>= traverse_ \el -> + liftEffect $ removeAttribute "hidden" (toElement el) diff --git a/purs/src/Marked.js b/purs/src/Marked.js new file mode 100644 index 0000000..017e51b --- /dev/null +++ b/purs/src/Marked.js @@ -0,0 +1,7 @@ +exports.markedImpl = function(str) { + marked.setOptions({ + pedantic: false, + gfm: true + }); + return marked(str); +}; diff --git a/purs/src/Marked.purs b/purs/src/Marked.purs new file mode 100644 index 0000000..0aa0fea --- /dev/null +++ b/purs/src/Marked.purs @@ -0,0 +1,9 @@ +module Foreign.Marked where + +import Prelude +import Globals (RawHTML(..)) + +foreign import markedImpl :: String -> String + +marked :: String -> RawHTML +marked = RawHTML <<< markedImpl diff --git a/purs/src/Model.purs b/purs/src/Model.purs new file mode 100644 index 0000000..2bee44b --- /dev/null +++ b/purs/src/Model.purs @@ -0,0 +1,53 @@ +module Model where + +import Data.Nullable (Nullable) +import Simple.JSON as J + +type BookmarkId = Int +type TagId = Int + +type Bookmark = + { url :: String + , title :: String + , description :: String + , tags :: String + , private :: Boolean + , toread :: Boolean + , bid :: BookmarkId + , slug :: String + , selected :: Boolean + , time :: String + , archiveUrl :: Nullable String + } + +newtype Bookmark' = Bookmark' Bookmark +derive newtype instance bookmark_rfI :: J.ReadForeign Bookmark' +derive newtype instance bookmark_wfI :: J.WriteForeign Bookmark' + +type NoteId = Int +type NoteSlug = String + +type Note = + { id :: NoteId + , slug :: NoteSlug + , title :: String + , text :: String + , length :: Int + , isMarkdown :: Boolean + , created :: String + , updated :: String + } + +newtype Note' = Note' Note +derive newtype instance note_rfI :: J.ReadForeign Note' +derive newtype instance note_wfI :: J.WriteForeign Note' + +type AccountSettings = + { archiveDefault :: Boolean + , privateDefault :: Boolean + , privacyLock :: Boolean + } + +newtype AccountSettings' = AccountSettings' AccountSettings +derive newtype instance usersettings_rfI :: J.ReadForeign AccountSettings' +derive newtype instance usersettings_wfI :: J.WriteForeign AccountSettings' diff --git a/purs/src/Util.purs b/purs/src/Util.purs new file mode 100644 index 0000000..510056e --- /dev/null +++ b/purs/src/Util.purs @@ -0,0 +1,136 @@ +module Util where + +import Prelude + +import Control.Monad.Maybe.Trans (MaybeT(..)) +import Data.Array (filter, find, mapMaybe) +import Data.Foldable (for_) +import Data.Maybe (Maybe(..), fromJust, fromMaybe, maybe) +import Data.Nullable (Nullable, toMaybe) +import Data.String (Pattern(..), Replacement(..), drop, replaceAll, split, take) +import Data.Tuple (Tuple(..), fst, snd) +import Effect (Effect) +import Global.Unsafe (unsafeDecodeURIComponent) +import Halogen (ClassName(..)) +import Halogen.HTML as HH +import Halogen.HTML.Properties as HP +import Partial.Unsafe (unsafePartial) +import Web.DOM (Element, Node) +import Web.DOM.Document (toNonElementParentNode) +import Web.DOM.Element (fromNode, toParentNode) +import Web.DOM.NodeList (toArray) +import Web.DOM.NonElementParentNode (getElementById) +import Web.DOM.ParentNode (QuerySelector(..), querySelector, querySelectorAll) +import Web.HTML (HTMLDocument, Location, window) +import Web.HTML.HTMLDocument (body) as HD +import Web.HTML.HTMLDocument (toDocument) +import Web.HTML.HTMLElement (HTMLElement) +import Web.HTML.HTMLElement (fromElement) as HE +import Web.HTML.Location (search) +import Web.HTML.Window (document, location) + +-- Halogen + +class_ :: forall r i. String -> HP.IProp ( "class" :: String | r) i +class_ = HP.class_ <<< HH.ClassName + +attr :: forall r i. String -> String -> HP.IProp r i +attr a = HP.attr (HH.AttrName a) + +-- Util + +_queryBoth :: forall a. Tuple String Element -> Tuple String Element -> (Element -> Element -> Effect a) -> Effect Unit +_queryBoth (Tuple qa ea) (Tuple qb eb) f = do + ma <- _querySelector qa ea + mb <- _querySelector qb eb + for_ ma \a -> + for_ mb \b -> + f a b + +_queryBoth' :: forall a. Tuple String Element -> Tuple String Element -> (Element -> Array Node -> Effect a) -> Effect Unit +_queryBoth' (Tuple qa ea) (Tuple qb eb) f = do + ma <- _querySelector qa ea + bs <- _querySelectorAll qb eb + for_ ma \a -> + f a bs + +_queryBoth'' :: forall a. Tuple String Element -> Tuple String Element -> (Array Node -> Array Node -> Effect a) -> Effect a +_queryBoth'' (Tuple qa ea) (Tuple qb eb) f = do + as <- _querySelectorAll qa ea + bs <- _querySelectorAll qb eb + f as bs + +_querySelector :: String -> Element -> Effect (Maybe Element) +_querySelector s n = querySelector (QuerySelector s) (toParentNode n) + +_querySelectorAll :: String -> Element -> Effect (Array Node) +_querySelectorAll s n = toArray =<< querySelectorAll (QuerySelector s) (toParentNode n) + +_fromNode :: Node -> Element +_fromNode e = unsafePartial $ fromJust (fromNode e) + +_fromElement :: Element -> HTMLElement +_fromElement e = unsafePartial $ fromJust (HE.fromElement e) + +_getElementById :: String -> HTMLDocument -> Effect (Maybe Element) +_getElementById s = getElementById s <<< toNonElementParentNode <<< toDocument + +_doc :: Effect HTMLDocument +_doc = document =<< window + +_loc :: Effect Location +_loc = location =<< window + +type QueryStringArray = Array (Tuple String (Maybe String)) + +_curQuerystring :: Effect QueryStringArray +_curQuerystring = do + loc <- _loc + srh <- search loc + pure $ _parseQueryString srh + +_parseQueryString :: String -> QueryStringArray +_parseQueryString srh = do + let qs = let srh' = take 1 srh in if (srh' == "#" || srh' == "?") then drop 1 srh else srh + mapMaybe go $ (filter (_ /= "") <<< split (Pattern "&")) qs + where + decode = unsafeDecodeURIComponent <<< replaceAll (Pattern "+") (Replacement " ") + go kv = + case split (Pattern "=") kv of + [k] -> Just (Tuple (decode k) Nothing) + [k, v] -> Just (Tuple (decode k) (Just (decode v))) + _ -> Nothing + +_lookupQueryStringValue :: QueryStringArray -> String -> Maybe String +_lookupQueryStringValue qs k = do + join $ map snd $ find ((_ == k) <<< fst) qs + +_body :: Effect HTMLElement +_body = unsafePartial $ pure <<< fromJust =<< HD.body =<< _doc + +_mt :: forall a. Effect (Maybe a) -> MaybeT Effect a +_mt = MaybeT + +_mt_pure :: forall a. Maybe a -> MaybeT Effect a +_mt_pure = MaybeT <<< pure + +dummyAttr :: forall r i. HP.IProp r i +dummyAttr = HP.attr (HH.AttrName "data-dummy") "" + +whenP :: forall r i. Boolean -> HP.IProp r i -> HP.IProp r i +whenP b p = if b then p else dummyAttr + +maybeP :: forall a r i. Maybe a -> (a -> HP.IProp r i) -> HP.IProp r i +maybeP m p = maybe dummyAttr p m + +whenC :: Boolean -> ClassName -> ClassName +whenC b c = if b then c else ClassName "" + +whenH :: forall p i. Boolean -> (Unit -> HH.HTML p i) -> HH.HTML p i +whenH b k = if b then k unit else HH.text "" + +maybeH :: forall a p i. Maybe a -> (a -> HH.HTML p i) -> HH.HTML p i +maybeH m k = maybe (HH.text "") k m + +fromNullableStr :: Nullable String -> String +fromNullableStr = fromMaybe "" <<< toMaybe diff --git a/purs/test/Main.purs b/purs/test/Main.purs new file mode 100644 index 0000000..bbe367f --- /dev/null +++ b/purs/test/Main.purs @@ -0,0 +1,9 @@ +module Test.Main where + +import Prelude +import Effect (Effect) +import Effect.Console (log) + +main :: Effect Unit +main = do + log "You should add some tests." diff --git a/sample-bookmarks.json b/sample-bookmarks.json new file mode 100644 index 0000000..ec0a2fc --- /dev/null +++ b/sample-bookmarks.json @@ -0,0 +1,88 @@ +[{"href":"http://math.andrej.com/2012/11/08/how-to-implement-dependent-type-theory-i/","description":"How to implement dependent type theory I | Mathematics and Computation","extended":"","time":"2018-03-02T21:37:18Z","shared":"yes","toread":"no","tags":"dependenttypes"}, +{"href":"https://www.newyorker.com/magazine/2015/05/11/overkill-atul-gawande","description":"America\u2019s Epidemic of Unnecessary Care | The New Yorker","extended":"","time":"2018-03-02T19:26:55Z","shared":"yes","toread":"no","tags":"medicie health"}, +{"href":"https://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis","description":"Functional options for friendly APIs | Dave Cheney","extended":"","time":"2018-03-02T19:24:40Z","shared":"yes","toread":"no","tags":"functionaloptions golang"}, +{"href":"https://github.com/swagger-api/swagger-codegen/wiki/Swagger-Codegen-migration-(swagger-codegen-generators-repository)","description":"Swagger Codegen migration (swagger codegen generators repository) \u00b7 swagger-api/swagger-codegen Wiki","extended":"","time":"2018-03-02T16:06:09Z","shared":"yes","toread":"no","tags":"swagger-codegen"}, +{"href":"https://news.ycombinator.com/item?id=16493727","description":"LimeSDR Now Backed by the European Space Agency | Hacker News","extended":"","time":"2018-03-02T15:52:26Z","shared":"yes","toread":"no","tags":"sdr"}, +{"href":"http://www.tobiastoft.com/posts/an-intro-to-pen-plotters","description":"An intro to Pen Plotters \u2014 Hej.","extended":"","time":"2018-03-02T02:50:35Z","shared":"yes","toread":"no","tags":"penplotter"}, +{"href":"https://news.ycombinator.com/item?id=16493489","description":"Machine Learning Crash Course | Hacker News","extended":"","time":"2018-03-01T19:53:53Z","shared":"yes","toread":"no","tags":"machinelearning"}, +{"href":"https://developers.google.com/machine-learning/crash-course/","description":"Machine Learning Crash Course \u00a0|\u00a0 Google Developers","extended":"","time":"2018-03-01T19:23:58Z","shared":"yes","toread":"no","tags":"machinelearning"}, +{"href":"https://www.reaktor.com/blog/fear-trust-and-javascript/","description":"Fear, trust and JavaScript: When types and functional programming fail - Reaktor","extended":"","time":"2018-03-01T19:05:12Z","shared":"yes","toread":"no","tags":""}, +{"href":"http://jxv.io/blog/2018-02-28-A-Game-in-Haskell.html","description":"A Game in Haskell - Dino Rush","extended":"","time":"2018-03-01T13:33:10Z","shared":"yes","toread":"no","tags":"game"}, +{"href":"https://arstechnica.com/science/2018/02/signal-of-the-universes-first-stars-hints-at-odd-form-of-dark-matter/","description":"Simple telescope picks up hint of the Universe\u2019s first stars, dark matter | Ars Technica","extended":"","time":"2018-03-01T07:19:56Z","shared":"yes","toread":"no","tags":"darkmatter"}, +{"href":"https://blogs.scientificamerican.com/observations/a-potentially-game-changing-message-from-the-dawn-of-time/","description":"A Potentially Game-Changing Message from the Dawn of Time - Scientific American Blog Network","extended":"","time":"2018-03-01T07:19:51Z","shared":"yes","toread":"no","tags":"darkmatter"}, +{"href":"https://www.nature.com/articles/d41586-018-02616-8","description":"Astronomers detect light from the Universe\u2019s first stars","extended":"","time":"2018-03-01T07:19:48Z","shared":"yes","toread":"no","tags":"darkmatter"}, +{"href":"https://www.nature.com/articles/nature25791","description":"Possible interaction between baryons and dark-matter particles revealed by the first stars | Nature","extended":"","time":"2018-03-01T07:19:44Z","shared":"yes","toread":"no","tags":"darkmatter"}, +{"href":"https://www.theverge.com/2018/2/27/17054740/palantir-predictive-policing-tool-new-orleans-nopd","description":"Palantir has secretly been using New Orleans to test its predictive policing technology - The Verge","extended":"","time":"2018-03-01T03:40:47Z","shared":"yes","toread":"no","tags":"police"}, +{"href":"https://aaronweiss.us/posts/2018-02-26-reasoning-with-types-in-rust.html","description":"Aaron Weiss / Reasoning with Types in Rust","extended":"","time":"2018-03-01T01:46:51Z","shared":"yes","toread":"no","tags":"rust"}, +{"href":"https://www.washingtonpost.com/opinions/hope-hicks-says-she-lies-for-trump-thats-encouraging/2018/02/28/09e61982-1cc3-11e8-9de1-147dd2df3829_story.html","description":"Hope Hicks told the truth about lying for Trump. Now she\u2019s gone. - The Washington Post","extended":"","time":"2018-03-01T01:42:24Z","shared":"yes","toread":"no","tags":"hopehicks"}, +{"href":"https://www.0x0ff.info/wp-content/uploads/2014/02/cheat-sheet.png","description":"cheat-sheet.png (3508\u00d72479)","extended":"","time":"2018-02-28T22:06:47Z","shared":"yes","toread":"no","tags":""}, +{"href":"http://socialturkers.com/","description":"social turkers","extended":"socialturkers","time":"2018-02-28T21:33:27Z","shared":"yes","toread":"no","tags":"socialturkers"}, +{"href":"http://networkcultures.org/moneylab/2018/02/07/the-blockchain-as-a-modulator-of-existence/","description":"MoneyLab | The Blockchain as a Modulator of Existence","extended":"","time":"2018-02-28T21:20:52Z","shared":"yes","toread":"no","tags":"blockchain"}, +{"href":"http://neilmitchell.blogspot.com/2008/02/adding-data-files-using-cabal.html","description":"Neil Mitchell's Haskell Blog: Adding data files using Cabal","extended":"","time":"2018-02-28T21:14:53Z","shared":"yes","toread":"no","tags":"haskell"}, +{"href":"https://github.com/jkachmar/jkachmar-lambdaconf-cfp-2018/blob/master/commented-cfp.md","description":"jkachmar-lambdaconf-cfp-2018/commented-cfp.md at master \u00b7 jkachmar/jkachmar-lambdaconf-cfp-2018","extended":"","time":"2018-02-28T20:22:04Z","shared":"yes","toread":"no","tags":"lambdaconf"}, +{"href":"https://gist.github.com/jkachmar/f1e1544524820ad6eb49524a2327d3a8","description":"Servant EKG 0.12","extended":"","time":"2018-02-28T19:58:46Z","shared":"yes","toread":"no","tags":"jkachmar"}, +{"href":"https://gist.github.com/jkachmar/b3baedc4f3eacce3d6cc8cb790447eb7","description":"Esqueleto tests for SqlReadT","extended":"","time":"2018-02-28T19:58:29Z","shared":"yes","toread":"no","tags":"jkachmar"}, +{"href":"https://stackoverflow.com/questions/48954495/is-it-possible-to-get-all-contexts-of-a-traversable-lazily","description":"haskell - Is it possible to get all contexts of a Traversable lazily? - Stack Overflow","extended":"","time":"2018-02-28T19:50:16Z","shared":"yes","toread":"no","tags":"haskell"}, +{"href":"https://blog.github.com/2017-11-29-use-any-theme-with-github-pages/","description":"Use any theme with GitHub Pages | The GitHub Blog","extended":"","time":"2018-02-28T19:46:33Z","shared":"yes","toread":"no","tags":"theme"}, +{"href":"https://mtlynch.io/why-i-quit-google/","description":"Why I Quit Google to Work for Myself - Silly Bits","extended":"","time":"2018-02-28T19:44:38Z","shared":"yes","toread":"no","tags":"google"}, +{"href":"http://www.olioapps.com/blog/the-lost-art-of-the-makefile/","description":"The Lost Art of the Makefile","extended":"","time":"2018-02-28T19:22:19Z","shared":"yes","toread":"no","tags":"makefile"}, +{"href":"https://www.youtube.com/results?search_query=Politicon","description":"Politicon - YouTube","extended":"","time":"2018-02-28T17:04:12Z","shared":"yes","toread":"no","tags":"Politicon"}, +{"href":"https://politicon.com/about-politicon/","description":"\u00bb About Politicon","extended":"","time":"2018-02-28T17:03:48Z","shared":"yes","toread":"no","tags":"Politicon"}, +{"href":"https://www.facebook.com/TheYoungTurks/videos/10155481460764205/","description":"The Young Turks - Ben Shapiro, the self proclaimed free speech...","extended":"","time":"2018-02-28T17:00:37Z","shared":"yes","toread":"no","tags":"tyt"}, +{"href":"https://please.build/","description":"Please","extended":"","time":"2018-02-28T16:46:30Z","shared":"yes","toread":"no","tags":"please build"}, +{"href":"https://camdavidsonpilon.github.io/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/","description":"Bayesian Methods for Hackers","extended":"","time":"2018-02-28T16:38:26Z","shared":"yes","toread":"no","tags":"bayesian probability python statistics"}, +{"href":"https://www.tweag.io/posts/2018-02-28-bazel-haskell.html","description":"Tweag I/O - Build large polyglot projects with Bazel... now with Haskell support","extended":"","time":"2018-02-28T15:13:00Z","shared":"yes","toread":"no","tags":""}, +{"href":"http://www.parsonsmatt.org/2016/12/18/servant_in_yesod_-_yo_dawg.html","description":"Servant in Yesod - Yo Dawg","extended":"","time":"2018-02-27T21:21:53Z","shared":"yes","toread":"no","tags":"yesod"}, +{"href":"https://ghc.haskell.org/trac/ghc/ticket/9706","description":"#9706 (New block-structured heap organization for 64-bit) \u2013 GHC","extended":"","time":"2018-02-27T17:09:26Z","shared":"yes","toread":"no","tags":"ghc"}, +{"href":"https://github.com/Microsoft/WSL/issues/1671","description":"`stack ghc` painfully slow \u00b7 Issue #1671 \u00b7 Microsoft/WSL","extended":"","time":"2018-02-27T17:07:48Z","shared":"yes","toread":"no","tags":"ghc wsl"}, +{"href":"https://www.atlasobscura.com/articles/blankets-summer-hot","description":"Why Do We Sleep Under Blankets, Even on the Hottest Nights? - Atlas Obscura","extended":"","time":"2018-02-27T16:43:23Z","shared":"yes","toread":"no","tags":"blankets"}, +{"href":"http://www.leshatton.org/Documents/OO_IS698.pdf","description":"","extended":"","time":"2018-02-27T16:31:02Z","shared":"yes","toread":"no","tags":"oo OO_IS698"}, +{"href":"http://gameprogrammingpatterns.com/command.html","description":"Command \u00b7 Design Patterns Revisited \u00b7 Game Programming Patterns","extended":"","time":"2018-02-27T16:17:35Z","shared":"yes","toread":"yes","tags":"command"}, +{"href":"https://ericlippert.com/2015/05/04/wizards-and-warriors-part-three/","description":"Wizards and warriors, part three | Fabulous adventures in coding","extended":"","time":"2018-02-26T22:58:37Z","shared":"yes","toread":"no","tags":"ericlippert"}, +{"href":"https://ericlippert.com/2015/05/07/wizards-and-warriors-part-four/","description":"Wizards and warriors, part four | Fabulous adventures in coding","extended":"","time":"2018-02-26T22:58:36Z","shared":"yes","toread":"no","tags":"ericlippert"}, +{"href":"https://ericlippert.com/2015/05/11/wizards-and-warriors-part-five/","description":"Wizards and warriors, part five | Fabulous adventures in coding","extended":"","time":"2018-02-26T22:58:32Z","shared":"yes","toread":"no","tags":"ericlippert"}, +{"href":"https://ericlippert.com/2015/04/30/wizards-and-warriors-part-two/","description":"Wizards and warriors, part two | Fabulous adventures in coding","extended":"","time":"2018-02-26T22:58:23Z","shared":"yes","toread":"no","tags":"ericlippert"}, +{"href":"https://ericlippert.com/2015/04/27/wizards-and-warriors-part-one/","description":"Wizards and warriors, part one | Fabulous adventures in coding","extended":"","time":"2018-02-26T22:58:16Z","shared":"yes","toread":"no","tags":"ericlippert"}, +{"href":"https://news.ycombinator.com/item?id=16468280","description":"How I Learned to Stop Worrying and Love the State Machine | Hacker News","extended":"When I'm stuck on a software design problem, pick some random part of the program and see what happens if I make it first class.","time":"2018-02-26T22:57:38Z","shared":"yes","toread":"no","tags":"raganwald"}, +{"href":"http://raganwald.com/2018/02/23/forde.html","description":"Forde's Tenth Rule, or, \"How I Learned to Stop Worrying and \u2764\ufe0f the State Machine\"","extended":"","time":"2018-02-26T22:57:20Z","shared":"yes","toread":"yes","tags":"raganwald"}, +{"href":"http://downloads.haskell.org/~ghc/latest/docs/html/users_guide/flags.html","description":"7.6. Flag reference \u2014 Glasgow Haskell Compiler 8.2.2 User's Guide","extended":"-fprint-expanded-synonyms","time":"2018-02-26T21:52:02Z","shared":"yes","toread":"no","tags":""}, +{"href":"https://www.google.com/search?q=codetermination&oq=codetermination&aqs=chrome..69i57.1655j0j7&sourceid=chrome&ie=UTF-8","description":"codetermination - Google Search","extended":"","time":"2018-02-26T20:38:10Z","shared":"yes","toread":"no","tags":"codetermination"}, +{"href":"https://news.ycombinator.com/item?id=16463069","description":"Why can\u2019t women get pregnant without the menstrual cycle? (2016) | Hacker News","extended":"","time":"2018-02-26T13:24:34Z","shared":"yes","toread":"no","tags":""}, +{"href":"http://beej.us/guide/bgnet/html/multi/index.html","description":"Beej's Guide to Network Programming","extended":"","time":"2018-02-25T21:25:03Z","shared":"yes","toread":"no","tags":"beej network"}, +{"href":"https://github.com/mqtt/mqtt.github.io/wiki/Basic-Concepts","description":"Basic Concepts \u00b7 mqtt/mqtt.github.io Wiki","extended":"","time":"2018-02-25T21:23:13Z","shared":"yes","toread":"no","tags":"mqtt"}, +{"href":"http://mqtt.org/","description":"MQTT","extended":"","time":"2018-02-25T21:22:42Z","shared":"yes","toread":"no","tags":"mqtt"}, +{"href":"https://www.thethingsnetwork.org/docs/network/cli/quick-start.html","description":"Quick Start | The Things Network","extended":"","time":"2018-02-25T21:20:22Z","shared":"yes","toread":"no","tags":"ttn"}, +{"href":"https://www.thethingsnetwork.org/forum/t/chicago-illinois/351","description":"Chicago, Illinois - Communities / Find people from your city or area - The Things Network","extended":"","time":"2018-02-25T21:19:15Z","shared":"yes","toread":"no","tags":"chicago"}, +{"href":"https://www.thethingsnetwork.org/community/chicago/","description":"Chicago - The Things Network Community","extended":"","time":"2018-02-25T21:14:24Z","shared":"yes","toread":"no","tags":"lora"}, +{"href":"https://jozefg.bitbucket.io/posts/2015-01-08-modules.html","description":"C&C - A Crash Course on ML Modules","extended":"","time":"2018-02-25T19:50:12Z","shared":"yes","toread":"no","tags":"ml modules"}, +{"href":"https://defn.io/2018/02/25/web-app-from-scratch-01/","description":"Web application from scratch, Part I \u00b7 Bogdan Popa","extended":"","time":"2018-02-25T19:41:47Z","shared":"yes","toread":"no","tags":"pythom"}, +{"href":"https://news.ycombinator.com/item?id=16456792","description":"Overconfident Students, Dubious Employers | Hacker News","extended":"I'm always a little skeptical of these sorts of surveys because it's hard to tease out what people believe about themselves because it's true vs. what people believe about themselves because it's useful.\r\nI remember that when I was a new grad, there was a very large part of myself that held a realistic appraisal of my abilities and was therefore scared shitless about my ability to make it in the working world. I was very careful to never let that part of me out in interviews - or, for that matter, to anyone. Confidence only works if you keep up the illusion so thoroughly that it ceases to be an illusion.\r\n\r\nAnd it worked. I got a job at a financial software startup, and then was put in charge of projects that no new grad should ever have been put in charge of. I grew into the role. I left to go found a startup, which is also something that someone with 2 years of work experience had no business doing. That worked too - I may not have been qualified to found a startup, but when I folded it up, I was a lot more qualified as an engineer than most of my other peers with 4 years of work experience. So Google hired me to work on the front page of the search engine, and I grew into that role too.\r\n\r\nThe majority of my classmates let their accurate perceptions of what they were actually qualified to do govern what they applied to do, and as a result, many were still struggling to get into a career 10 years later. By that point, your self-perception has become reality, and it's much harder to convince potential employers to take the risk that you'll grow into the position. Then they wake up and realize that everybody's faking it and their new manager isn't actually all that much more skilled than them, but (barring a career reset like going to grad school) it's difficult to reset people's perceptions.","time":"2018-02-25T13:55:18Z","shared":"yes","toread":"no","tags":"hn"}, +{"href":"https://comminos.com/css/default.css","description":"","extended":"","time":"2018-02-25T04:25:50Z","shared":"yes","toread":"no","tags":"css"}, +{"href":"https://www.yesodweb.com/blog/2012/08/classy-prelude-good-bad-ugly","description":"ClassyPrelude: The good, the bad, and the ugly","extended":"","time":"2018-02-24T21:32:59Z","shared":"yes","toread":"no","tags":"classyprelude"}, +{"href":"https://medium.com/incerto/the-most-intolerant-wins-the-dictatorship-of-the-small-minority-3f1f83ce4e15","description":"The Most Intolerant Wins: The Dictatorship of the Small Minority","extended":"","time":"2018-02-24T19:24:12Z","shared":"yes","toread":"no","tags":"taleb"}, +{"href":"https://www.quora.com/Define-INFRINGED-as-it-is-used-in-the-second-amendment-What-is-unclear-about-this-If-lawmakers-want-to-infringe-upon-our-right-to-bear-arms-why-dont-they-follow-the-law-and-amend-the-Constitution","description":"Define 'INFRINGED' as it is used in the second amendment. What is unclear about this? If lawmakers want to infringe upon our right to bear arms, why don't they follow the law and amend the Constitution? - Quora","extended":"","time":"2018-02-24T18:09:32Z","shared":"yes","toread":"no","tags":"infringed"}, +{"href":"https://mitpress.mit.edu/books/functional-differential-geometry","description":"Functional Differential Geometry | The MIT Press","extended":"","time":"2018-02-24T18:02:29Z","shared":"yes","toread":"no","tags":"physics"}, +{"href":"https://mitpress.mit.edu/sites/default/files/titles/content/sicm_edition_2/book.html","description":"Structure and Interpretation of Classical Mechanics","extended":"","time":"2018-02-24T17:59:27Z","shared":"yes","toread":"no","tags":"sicp"}, +{"href":"https://www.nytimes.com/2018/02/23/opinion/brian-mast-assault-weapons-ban.html?mtrref=www.facebook.com&gwh=B320C7668EBB9993E9F5B4BC712DB4D7&gwt=pay&assetType=opinion","description":"","extended":"","time":"2018-02-24T16:57:13Z","shared":"yes","toread":"no","tags":""}, +{"href":"http://sqlite.org/lang_createtable.html#uniqueconst","description":"SQLite Query Language: CREATE TABLE","extended":"","time":"2018-02-24T04:26:51Z","shared":"yes","toread":"no","tags":"sqlite unique"}, +{"href":"http://cockpit-project.org/","description":"Cockpit Project \u2014 Cockpit Project","extended":"","time":"2018-02-24T00:04:00Z","shared":"yes","toread":"no","tags":""}, +{"href":"http://baatz.io/posts/haskell-in-a-startup/","description":"A founder's perspective on 4 years with Haskell","extended":"","time":"2018-02-23T20:38:27Z","shared":"yes","toread":"no","tags":"haskell"}, +{"href":"https://github.com/trending/haskell","description":"Trending Haskell repositories on GitHub today","extended":"","time":"2018-02-23T20:35:00Z","shared":"yes","toread":"no","tags":"trending github haskell"}, +{"href":"https://newrepublic.com/article/147111/zadie-smiths-book-essays-explores-means-human","description":"Zadie Smith\u2019s Book of Essays Explores What It Means to Be Human | New Republic","extended":"","time":"2018-02-23T20:33:55Z","shared":"yes","toread":"yes","tags":"zadiesmith lit"}, +{"href":"https://nymag.com/daily/intelligencer/2018/02/americas-opioid-epidemic.html","description":"Andrew Sullivan on the Opioid Epidemic in America","extended":"","time":"2018-02-23T19:11:10Z","shared":"yes","toread":"no","tags":"editorial"}, +{"href":"https://news.ycombinator.com/item?id=16445950","description":"The Poison We Pick | Hacker News","extended":"","time":"2018-02-23T19:11:02Z","shared":"yes","toread":"yes","tags":"editorial"}, +{"href":"https://ftalphaville.ft.com/2018/02/15/2198809/someone-is-wrong-on-the-internet-millennial-savings-edition/","description":"Someone is wrong on the internet, millennial savings edition | FT Alphaville","extended":"","time":"2018-02-23T19:10:15Z","shared":"yes","toread":"no","tags":"housing"}, +{"href":"https://speakerdeck.com/justinwoo/easy-json-deserialization-with-simple-json-and-record","description":"Easy JSON deserialization with Simple-JSON and Record // Speaker Deck","extended":"","time":"2018-02-23T07:19:52Z","shared":"yes","toread":"no","tags":"haskell"}, +{"href":"http://www.ikea.com/us/en/catalog/products/00103102/","description":"MARKUS Swivel chair - Glose black - IKEA","extended":"","time":"2018-02-23T05:23:13Z","shared":"yes","toread":"no","tags":"Ikea Markus"}, +{"href":"https://kono.store/products/kira-mechanical-keyboard","description":"Kira Mechanical Keyboard \u2013 Kono Store","extended":"","time":"2018-02-23T05:19:26Z","shared":"yes","toread":"no","tags":"kira"}, +{"href":"https://www.reddit.com/r/MechanicalKeyboards/comments/7zhhje/battlestation/","description":"Battlestation : MechanicalKeyboards","extended":"","time":"2018-02-23T05:15:59Z","shared":"yes","toread":"no","tags":"keyboard"}, +{"href":"https://soundcloud.com/jordanpetersonpodcast","description":"The Jordan B Peterson Podcast | Free Listening on SoundCloud","extended":"","time":"2018-02-23T05:13:37Z","shared":"yes","toread":"no","tags":"jordanpetersonpodcast"}, +{"href":"https://www.theatlantic.com/politics/archive/2018/02/what-i-saw-treating-the-victims-from-parkland-should-change-the-debate-on-guns/553937/","description":"The AR-15 Is Different: What I Learned Treating Parkland Victims - The Atlantic","extended":"","time":"2018-02-23T05:00:55Z","shared":"yes","toread":"no","tags":"ar15"}, +{"href":"https://jacobian.org/writing/python-environment-2018/","description":"My Python Development Environment, 2018 Edition \u00ab Jacob Kaplan-Moss","extended":"","time":"2018-02-22T22:50:41Z","shared":"yes","toread":"no","tags":"python"}, +{"href":"https://www.youtube.com/watch?v=F4VZPxLZUdA&=&t=1625s","description":"Building test check Generators - Gary Fredericks - YouTube","extended":"","time":"2018-02-22T22:45:33Z","shared":"yes","toread":"no","tags":"propertybasedtesting"}, +{"href":"https://keybase.io/docs/the_app/linux_expired_key","description":"Keybase","extended":"","time":"2018-02-22T22:23:28Z","shared":"yes","toread":"no","tags":"keybase"}, +{"href":"https://underscore.io/blog/posts/2017/06/02/uniting-church-and-state.html","description":"Uniting Church and State: FP and OO Together - Underscore","extended":"","time":"2018-02-22T20:57:05Z","shared":"yes","toread":"no","tags":"fpoo"}, +{"href":"https://www.cnn.com/2018/02/22/politics/cnn-town-hall-full-video-transcript/index.html","description":"CNN town hall: Students question lawmakers, NRA (full transcript, video) - CNNPolitics","extended":"","time":"2018-02-22T20:52:16Z","shared":"yes","toread":"no","tags":"cnn town hall sunrise"}, +{"href":"http://yourbasic.org/golang/your-basic-func/","description":"Your basic func | yourbasic.org","extended":"","time":"2018-02-22T20:19:55Z","shared":"yes","toread":"no","tags":"graph golang"}, +{"href":"https://operand.ca/2018/02/22/liberating-a-x200.html","description":"","extended":"","time":"2018-02-22T20:16:34Z","shared":"yes","toread":"no","tags":"thinkpad"}, +{"href":"https://arxiv.org/abs/1802.07228","description":"[1802.07228] The Malicious Use of Artificial Intelligence: Forecasting, Prevention, and Mitigation","extended":"","time":"2018-02-22T20:10:25Z","shared":"yes","toread":"no","tags":"malevolent"}] diff --git a/sample-migrate.sh b/sample-migrate.sh new file mode 100755 index 0000000..91707ea --- /dev/null +++ b/sample-migrate.sh @@ -0,0 +1,3 @@ +stack exec migration -- createdb --conn espial.sqlite3 +stack exec migration -- createuser --conn espial.sqlite3 --userName myusername --userPassword myuserpassword +stack exec migration -- importbookmarks --conn espial.sqlite3 --userName myusername --bookmarkFile sample-bookmarks.json diff --git a/src/Application.hs b/src/Application.hs new file mode 100644 index 0000000..ea4e315 --- /dev/null +++ b/src/Application.hs @@ -0,0 +1,182 @@ +{-# OPTIONS_GHC -fno-warn-orphans #-} + +module Application + ( getApplicationDev + , appMain + , develMain + , makeFoundation + , makeLogWare + -- * for DevelMain + , getApplicationRepl + , shutdownApp + -- * for GHCI + , handler + , db + ) where + +import Control.Monad.Logger (liftLoc, runLoggingT) +import Database.Persist.Sqlite + (createSqlitePool, sqlDatabase, sqlPoolSize) +import Import +import Yesod.Auth (getAuth) +import Language.Haskell.TH.Syntax (qLocation) +import Lens.Micro +import Network.HTTP.Client.TLS +import Network.Wai (Middleware) +import Network.Wai.Middleware.Autohead +import Network.Wai.Middleware.AcceptOverride +import Network.Wai.Middleware.Gzip +import Network.Wai.Middleware.MethodOverride +import Network.Wai.Handler.Warp + (Settings, defaultSettings, defaultShouldDisplayException, + runSettings, setHost, setOnException, setPort, getPort) +import Network.Wai.Middleware.RequestLogger + (Destination(Logger), IPAddrSource(..), OutputFormat(..), + destination, mkRequestLogger, outputFormat) +import System.Log.FastLogger + (defaultBufSize, newStdoutLoggerSet, toLogStr) + +import qualified Control.Monad.Metrics as MM +import qualified Network.Wai.Metrics as WM +import qualified System.Metrics as EKG +import qualified System.Remote.Monitoring as EKG + +-- Import all relevant handler modules here. +-- Don't forget to add new modules to your cabal file! +import Handler.Common +import Handler.Home +import Handler.User +import Handler.AccountSettings +import Handler.Add +import Handler.Edit +import Handler.Notes +import Handler.Docs + +mkYesodDispatch "App" resourcesApp + +makeFoundation :: AppSettings -> IO App +makeFoundation appSettings = do + appHttpManager <- getGlobalManager + appLogger <- newStdoutLoggerSet defaultBufSize >>= makeYesodLogger + store <- EKG.newStore + EKG.registerGcMetrics store + appMetrics <- MM.initializeWith store + appStatic <- + (if appMutableStatic appSettings + then staticDevel + else static) + (appStaticDir appSettings) + let mkFoundation appConnPool = App { ..} + tempFoundation = mkFoundation (error "connPool forced in tempFoundation") + logFunc = messageLoggerSource tempFoundation appLogger + pool <- + flip runLoggingT logFunc $ + createSqlitePool + (sqlDatabase (appDatabaseConf appSettings)) + (sqlPoolSize (appDatabaseConf appSettings)) + -- runLoggingT + -- (runSqlPool runMigrations pool) + -- logFunc + return (mkFoundation pool) + +makeApplication :: App -> IO Application +makeApplication foundation = do + logWare <- makeLogWare foundation + appPlain <- toWaiAppPlain foundation + let store = appMetrics foundation ^. MM.metricsStore + waiMetrics <- WM.registerWaiMetrics store + return (logWare (makeMiddleware waiMetrics appPlain)) + +makeMiddleware :: WM.WaiMetrics -> Middleware +makeMiddleware waiMetrics = + WM.metrics waiMetrics . + acceptOverride . + autohead . + gzip def {gzipFiles = GzipPreCompressed GzipIgnore} . + methodOverride + +makeLogWare :: App -> IO Middleware +makeLogWare foundation = + mkRequestLogger + def + { outputFormat = + if appDetailedRequestLogging (appSettings foundation) + then Detailed True + else Apache + (if appIpFromHeader (appSettings foundation) + then FromFallback + else FromSocket) + , destination = Logger (loggerSet (appLogger foundation)) + } + +-- | Warp settings for the given foundation value. +warpSettings :: App -> Settings +warpSettings foundation = + setPort (appPort (appSettings foundation)) $ + setHost (appHost (appSettings foundation)) $ + setOnException + (\_req e -> + when (defaultShouldDisplayException e) $ + messageLoggerSource + foundation + (appLogger foundation) + $(qLocation >>= liftLoc) + "yesod" + LevelError + (toLogStr $ "Exception from Warp: " ++ show e)) + defaultSettings + +-- | For yesod devel, return the Warp settings and WAI Application. +getApplicationDev :: IO (Settings, Application) +getApplicationDev = do + settings <- getAppSettings + foundation <- makeFoundation settings + wsettings <- getDevSettings (warpSettings foundation) + app <- makeApplication foundation + forkEKG foundation + return (wsettings, app) + +getAppSettings :: IO AppSettings +getAppSettings = loadYamlSettings [configSettingsYml] [] useEnv + +-- | main function for use by yesod devel +develMain :: IO () +develMain = develMainHelper getApplicationDev + +forkEKG :: App -> IO () +forkEKG foundation = + let settings = appSettings foundation in + for_ (appEkgHost settings) $ \ekgHost -> + for_ (appEkgPort settings) $ \ekgPort -> + EKG.forkServerWith + (appMetrics foundation ^. MM.metricsStore) + (encodeUtf8 ekgHost) + ekgPort + +-- | The @main@ function for an executable running this site. +appMain :: IO () +appMain = do + settings <- loadYamlSettingsArgs [configSettingsYmlValue] useEnv + foundation <- makeFoundation settings + app <- makeApplication foundation + forkEKG foundation + runSettings (warpSettings foundation) app + +getApplicationRepl :: IO (Int, App, Application) +getApplicationRepl = do + settings <- getAppSettings + foundation <- makeFoundation settings + wsettings <- getDevSettings (warpSettings foundation) + app1 <- makeApplication foundation + return (getPort wsettings, foundation, app1) + +shutdownApp :: App -> IO () +shutdownApp _ = return () + +-- | Run a handler +handler :: Handler a -> IO a +handler h = getAppSettings >>= makeFoundation >>= flip unsafeHandler h + +-- | Run DB queries +db :: ReaderT SqlBackend (HandlerFor App) a -> IO a +db = handler . runDB diff --git a/src/Foundation.hs b/src/Foundation.hs new file mode 100644 index 0000000..ac03a77 --- /dev/null +++ b/src/Foundation.hs @@ -0,0 +1,250 @@ +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE StandaloneDeriving #-} +{-# OPTIONS_GHC -fno-warn-unused-matches #-} + +module Foundation where + +import Import.NoFoundation +import Database.Persist.Sql (ConnectionPool, runSqlPool) +import Text.Hamlet (hamletFile) +import Text.Jasmine (minifym) +import PathPiece() + +-- import Yesod.Auth.Dummy + +import Yesod.Default.Util (addStaticContentExternal) +import Yesod.Core.Types +import Yesod.Auth.Message +import qualified Network.Wai as NW +import qualified Control.Monad.Metrics as MM +import qualified Data.CaseInsensitive as CI +import qualified Data.Text.Encoding as TE +import qualified Yesod.Core.Unsafe as Unsafe + +data App = App + { appSettings :: AppSettings + , appStatic :: Static -- ^ Settings for static file serving. + , appConnPool :: ConnectionPool -- ^ Database connection pool. + , appHttpManager :: Manager + , appLogger :: Logger + , appMetrics :: !MM.Metrics + } deriving (Typeable) + +mkYesodData "App" $(parseRoutesFile "config/routes") + +deriving instance Typeable Route +deriving instance Generic (Route App) + +-- YesodPersist + +instance YesodPersist App where + type YesodPersistBackend App = SqlBackend + runDB action = do + master <- getYesod + runSqlPool action (appConnPool master) + +instance YesodPersistRunner App where + getDBRunner = defaultGetDBRunner appConnPool + +-- Yesod + +instance Yesod App where + approot = ApprootRequest $ \app req -> + case appRoot (appSettings app) of + Nothing -> getApprootText guessApproot app req + Just root -> root + + makeSessionBackend _ = Just <$> defaultClientSessionBackend + 10080 -- min (7 days) + "config/client_session_key.aes" + + yesodMiddleware = metricsMiddleware . defaultYesodMiddleware . defaultCsrfMiddleware + + defaultLayout widget = do + req <- getRequest + master <- getYesod + urlrender <- getUrlRender + mmsg <- getMessage + musername <- maybeAuthUsername + muser <- (fmap.fmap) snd maybeAuthPair + mcurrentRoute <- getCurrentRoute + void $ mapM (incrementRouteEKG req) mcurrentRoute + pc <- widgetToPageContent $ do + setTitle "Espial" + addAppScripts + addStylesheet (StaticR css_tachyons_min_css) + addStylesheet (StaticR css_main_css) + $(widgetFile "default-layout") + withUrlRenderer $(hamletFile "templates/default-layout-wrapper.hamlet") + + addStaticContent ext mime content = do + master <- getYesod + let staticDir = appStaticDir (appSettings master) + addStaticContentExternal + minifym + genFileName + staticDir + (StaticR . flip StaticRoute []) + ext + mime + content + where + genFileName lbs = "autogen-" ++ base64md5 lbs + + shouldLogIO app _source level = + pure $ appShouldLogAll (appSettings app) || level == LevelWarn || level == LevelError + makeLogger = return . appLogger + + authRoute _ = Just (AuthR LoginR) + + isAuthorized (AuthR _) _ = pure Authorized + isAuthorized _ _ = pure Authorized + + defaultMessageWidget title body = do + setTitle title + toWidget [hamlet| +
+
+
+

#{title} + ^{body} + |] + + +isAuthenticated :: Handler AuthResult +isAuthenticated = maybeAuthId >>= \case + Just authId -> pure Authorized + _ -> pure $ AuthenticationRequired + +addAppScripts :: (MonadWidget m, HandlerSite m ~ App) => m () +addAppScripts = do + addScript (StaticR js_moment_min_js) + addScript (StaticR js_app_min_js) + + +-- popupLayout + +popupLayout :: Widget -> Handler Html +popupLayout widget = do + req <- getRequest + master <- getYesod + mmsg <- getMessage + musername <- maybeAuthUsername + pc <- widgetToPageContent $ do + addAppScripts + addStylesheet (StaticR css_tachyons_min_css) + addStylesheet (StaticR css_popup_css) + $(widgetFile "popup-layout") + withUrlRenderer $(hamletFile "templates/default-layout-wrapper.hamlet") + + +metricsMiddleware :: Handler a -> Handler a +metricsMiddleware handler = do + req <- getRequest + mcurrentRoute <- getCurrentRoute + void $ mapM (incrementRouteEKG req) mcurrentRoute + handler + + +incrementRouteEKG :: YesodRequest -> Route App -> Handler () +incrementRouteEKG req = MM.increment . (\r -> "route." <> r <> "." <> method) . pack . constrName + where method = decodeUtf8 $ NW.requestMethod $ reqWaiRequest req + +-- YesodAuth + +instance YesodAuth App where + type AuthId App = UserId + -- authHttpManager = getHttpManager + authPlugins _ = [dbAuthPlugin] + authenticate = authenticateCreds + loginDest = const HomeR + logoutDest = const HomeR + onLogin = maybeAuth >>= \case + Nothing -> cpprint ("onLogin: could not find user" :: Text) + Just (Entity _ uname) -> setSession userNameKey (userName uname) + onLogout = + deleteSession userNameKey + redirectToReferer = const True + +instance YesodAuthPersist App + +instance MM.MonadMetrics Handler where + getMetrics = pure . appMetrics =<< getYesod + +-- session keys + +maybeAuthUsername :: Handler (Maybe Text) +maybeAuthUsername = do + lookupSession userNameKey + +ultDestKey :: Text +ultDestKey = "_ULT" + +userNameKey :: Text +userNameKey = "_UNAME" + +-- dbAuthPlugin + +dbAuthPluginName :: Text +dbAuthPluginName = "db" + +dbAuthPlugin :: AuthPlugin App +dbAuthPlugin = AuthPlugin dbAuthPluginName dbDispatch dbLoginHandler + where + dbDispatch "POST" ["login"] = dbPostLoginR >>= sendResponse + dbDispatch _ _ = notFound + dbLoginHandler toParent = do + req <- getRequest + lookupSession ultDestKey >>= \case + Just dest | "logout" `isInfixOf` dest -> deleteSession ultDestKey + _ -> pure () + setTitle "Espial | Log In" + $(widgetFile "login") + +dbLoginR :: AuthRoute +dbLoginR = PluginR dbAuthPluginName ["login"] + +dbPostLoginR :: AuthHandler master TypedContent +dbPostLoginR = do + mresult <- runInputPostResult (dbLoginCreds + <$> ireq textField "username" + <*> ireq textField "password") + case mresult of + FormSuccess creds -> setCredsRedirect creds + _ -> loginErrorMessageI LoginR InvalidUsernamePass + +dbLoginCreds :: Text -> Text -> Creds master +dbLoginCreds username password = + Creds + { credsPlugin = dbAuthPluginName + , credsIdent = username + , credsExtra = [("password", password)] + } + +authenticateCreds :: + (MonadHandler m, HandlerSite m ~ App) + => Creds App + -> m (AuthenticationResult App) +authenticateCreds Creds {..} = do + muser <- + case credsPlugin of + p | p == dbAuthPluginName -> liftHandler $ runDB $ + join <$> mapM (authenticatePassword credsIdent) (lookup "password" credsExtra) + _ -> pure Nothing + case muser of + Nothing -> pure (UserError InvalidUsernamePass) + Just (Entity uid _) -> pure (Authenticated uid) + +-- Util + +instance RenderMessage App FormMessage where + renderMessage :: App -> [Lang] -> FormMessage -> Text + renderMessage _ _ = defaultFormMessage + +instance HasHttpManager App where + getHttpManager :: App -> Manager + getHttpManager = appHttpManager + +unsafeHandler :: App -> Handler a -> IO a +unsafeHandler = Unsafe.fakeHandlerGetLogger appLogger + diff --git a/src/Generic.hs b/src/Generic.hs new file mode 100644 index 0000000..6e35a45 --- /dev/null +++ b/src/Generic.hs @@ -0,0 +1,20 @@ +module Generic where + +import GHC.Generics +import ClassyPrelude.Yesod + +constrName :: (HasConstructor (Rep a), Generic a)=> a -> String +constrName = genericConstrName . from + +class HasConstructor (f :: * -> *) where + genericConstrName :: f x -> String + +instance HasConstructor f => HasConstructor (D1 c f) where + genericConstrName (M1 x) = genericConstrName x + +instance (HasConstructor x, HasConstructor y) => HasConstructor (x :+: y) where + genericConstrName (L1 l) = genericConstrName l + genericConstrName (R1 r) = genericConstrName r + +instance Constructor c => HasConstructor (C1 c f) where + genericConstrName x = conName x diff --git a/src/Handler/AccountSettings.hs b/src/Handler/AccountSettings.hs new file mode 100644 index 0000000..c019170 --- /dev/null +++ b/src/Handler/AccountSettings.hs @@ -0,0 +1,50 @@ +module Handler.AccountSettings where + +import Import +import qualified ClassyPrelude.Yesod as CP + +getAccountSettingsR :: Handler Html +getAccountSettingsR = do + (_, user) <- requireAuthPair + let accountSettingsEl = "accountSettings" :: Text + let accountSettings = toAccountSettingsForm user + defaultLayout $ do + $(widgetFile "user-settings") + toWidgetBody [julius| + app.userR = "@{UserR (UserNameP $ userName user)}"; + app.dat.accountSettings = #{ toJSON accountSettings } || []; + |] + toWidget [julius| + PS['Main'].renderAccountSettings('##{rawJS accountSettingsEl}')(app.dat.accountSettings)(); + |] + +postEditAccountSettingsR :: Handler () +postEditAccountSettingsR = do + userId <- requireAuthId + accountSettingsForm <- requireCheckJsonBody + runDB (updateUserFromAccountSettingsForm userId accountSettingsForm) + + +getChangePasswordR :: Handler Html +getChangePasswordR = do + void requireAuthId + req <- getRequest + defaultLayout $ + $(widgetFile "change-password") + +postChangePasswordR :: Handler Html +postChangePasswordR = do + userId <- requireAuthId + mauthuname <- maybeAuthUsername + mresult <- runInputPostResult ((,) <$> ireq textField "oldpassword" <*> ireq textField "newpassword") + case (mauthuname, mresult) of + (Just uname, FormSuccess (old, new)) -> do + muser <- runDB (authenticatePassword uname old) + case muser of + Just _ -> do + new' <- liftIO (hashPassword new) + void $ runDB (update userId [UserPasswordHash CP.=. new']) + setMessage "Password Changed Successfully" + _ -> setMessage "Incorrect Old Password" + _ -> setMessage "Missing Required Fields" + redirect ChangePasswordR diff --git a/src/Handler/Add.hs b/src/Handler/Add.hs new file mode 100644 index 0000000..3300390 --- /dev/null +++ b/src/Handler/Add.hs @@ -0,0 +1,67 @@ +module Handler.Add where + +import Import +import Handler.Archive +import Data.List (nub) + +-- View + +getAddViewR :: Handler Html +getAddViewR = do + userId <- requireAuthId + + murl <- lookupGetParam "url" + mformdb <- runDB (pure . fmap _toBookmarkForm =<< fetchBookmarkByUrl userId murl) + formurl <- bookmarkFormUrl + + let renderEl = "addForm" :: Text + + popupLayout $ do + toWidget [whamlet| +
+ |] + toWidgetBody [julius| + app.dat.bmark = #{ toJSON (fromMaybe formurl mformdb) }; + |] + toWidget [julius| + PS['Main'].renderAddForm('##{rawJS renderEl}')(app.dat.bmark)(); + |] + +bookmarkFormUrl :: Handler BookmarkForm +bookmarkFormUrl = do + Entity _ user <- requireAuth + BookmarkForm + <$> (lookupGetParam "url" >>= pure . fromMaybe "") + <*> (lookupGetParam "title") + <*> (lookupGetParam "description" >>= pure . fmap Textarea) + <*> (lookupGetParam "tags") + <*> (lookupGetParam "private" >>= pure . fmap parseChk <&> (<|> Just (userPrivateDefault user))) + <*> (lookupGetParam "toread" >>= pure . fmap parseChk) + <*> pure Nothing + <*> pure Nothing + <*> pure Nothing + <*> pure Nothing + <*> pure Nothing + where + parseChk s = s == "yes" || s == "on" + +-- API + +postAddR :: Handler () +postAddR = do + bookmarkForm <- requireCheckJsonBody + _handleFormSuccess bookmarkForm >>= \case + (Created, bid) -> sendStatusJSON created201 bid + (Updated, _) -> sendResponseStatus noContent204 () + +_handleFormSuccess :: BookmarkForm -> Handler (UpsertResult, Key Bookmark) +_handleFormSuccess bookmarkForm = do + (userId, user) <- requireAuthPair + bm <- liftIO $ _toBookmark userId bookmarkForm + (res, kbid) <- runDB (upsertBookmark mkbid bm tags) + whenM (shouldArchiveBookmark user kbid) $ + void $ async (archiveBookmarkUrl kbid (unpack (bookmarkHref bm))) + pure (res, kbid) + where + mkbid = BookmarkKey <$> _bid bookmarkForm + tags = maybe [] (nub . words) (_tags bookmarkForm) diff --git a/src/Handler/Archive.hs b/src/Handler/Archive.hs new file mode 100644 index 0000000..f992af1 --- /dev/null +++ b/src/Handler/Archive.hs @@ -0,0 +1,106 @@ +module Handler.Archive where + +import Import +import Data.Function ((&)) +import qualified Data.Attoparsec.ByteString.Char8 as AP +import qualified Data.ByteString as BS +import qualified Data.ByteString.Lazy as LBS +import qualified Data.ByteString.Char8 as BS8 +import qualified Network.HTTP.Client as NH +import qualified Network.HTTP.Client.TLS as NH +import qualified Network.HTTP.Types.Status as NH +import qualified Web.FormUrlEncoded as WH +import qualified Control.Monad.Metrics as MM + +shouldArchiveBookmark :: User -> Key Bookmark -> Handler Bool +shouldArchiveBookmark user kbid = do + runDB (get kbid) >>= \case + Nothing -> pure False + Just bm -> do + pure $ + (isNothing $ bookmarkArchiveHref bm) && + (bookmarkShared bm) + && not (_isArchiveBlacklisted bm) + && not (userPrivacyLock user) + && userArchiveDefault user + +archiveBookmarkUrl :: Key Bookmark -> String -> Handler () +archiveBookmarkUrl kbid url = + (_fetchArchiveSubmitInfo >>= \case + Left e -> do + MM.increment "archive.fetchSubmitId_noparse" + $(logError) (pack e) + Right submitInfo -> do + userId <- requireAuthId + let req = _buildArchiveSubmitRequest submitInfo url + MM.increment "archive.submit" + res <- liftIO $ NH.httpLbs req =<< NH.getGlobalManager + let status = NH.responseStatus res + MM.increment ("archive.submit_status_" <> (pack.show) (NH.statusCode status)) + let updateArchiveUrl = runDB . updateBookmarkArchiveUrl userId kbid . Just + headers = NH.responseHeaders res + case status of + s | s == NH.status200 -> + for_ (lookup "Refresh" headers >>= _parseRefreshHeaderUrl) updateArchiveUrl + s | s == NH.status302 -> + for_ (lookup "Location" headers) (updateArchiveUrl . decodeUtf8) + _ -> $(logError) (pack (show res))) + `catch` (\(e::SomeException) -> ($(logError) $ (pack.show) e) >> throwIO e) + +_isArchiveBlacklisted :: Bookmark -> Bool +_isArchiveBlacklisted (Bookmark {..}) = + [ "hulu" + , "livestream" + , "netflix" + , "skillsmatter" + , "twitch.tv" + , "vimeo" + , "youtu.be" + , "youtube" + , "archive." + ] & + any (`isInfixOf` bookmarkHref) + +_parseRefreshHeaderUrl :: ByteString -> Maybe Text +_parseRefreshHeaderUrl h = do + let u = BS8.drop 1 $ BS8.dropWhile (/= '=') h + if (not (null u)) + then Just $ decodeUtf8 u + else Nothing + +_buildArchiveSubmitRequest :: (String, String) -> String -> NH.Request +_buildArchiveSubmitRequest (action, submitId) href = + NH.parseRequest_ ("POST " <> action) & \r -> + r { NH.requestHeaders = + [ ("User-Agent", _archiveUserAgent) + , ("Content-Type", "application/x-www-form-urlencoded") + ] + , NH.requestBody = NH.RequestBodyLBS $ WH.urlEncodeAsForm (( + [ ("submitid" , submitId) + , ("url", href) + ]) :: [(String, String)]) + , NH.redirectCount = 0 + } + +_fetchArchiveSubmitInfo :: Handler (Either String (String , String)) +_fetchArchiveSubmitInfo = do + MM.increment "archive.fetchSubmitId" + res <- liftIO $ NH.httpLbs buildSubmitRequest =<< NH.getGlobalManager + MM.increment ("archive.fetchSubmitId_status_" <> (pack.show) (NH.statusCode (NH.responseStatus res))) + let body = LBS.toStrict (responseBody res) + action = _parseSubstring (AP.string "action=\"") (AP.notChar '"') body + submitId = _parseSubstring (AP.string "submitid\" value=\"") (AP.notChar '"') body + pure $ (,) <$> action <*> submitId + where + buildSubmitRequest = + NH.parseRequest_ "https://archive.li/" & \r -> + r {NH.requestHeaders = [("User-Agent", _archiveUserAgent)]} + +_archiveUserAgent :: ByteString +_archiveUserAgent = "espial" + +_parseSubstring :: AP.Parser ByteString -> AP.Parser Char -> BS.ByteString -> Either String String +_parseSubstring start inner res = do + (flip AP.parseOnly) res (skipAnyTill start >> AP.many1 inner) + where + skipAnyTill end = go where go = end *> pure () <|> AP.anyChar *> go diff --git a/src/Handler/Common.hs b/src/Handler/Common.hs new file mode 100644 index 0000000..0697981 --- /dev/null +++ b/src/Handler/Common.hs @@ -0,0 +1,31 @@ +-- | Common handler functions. +module Handler.Common where + +import Import + +import Data.FileEmbed (embedFile) +import Text.Read + +-- These handlers embed files in the executable at compile time to avoid a +-- runtime dependency, and for efficiency. + +getFaviconR :: Handler TypedContent +getFaviconR = do cacheSeconds $ 60 * 5 + --cacheSeconds $ 60 * 60 * 24 * 30 -- cache for a month + return $ TypedContent "image/x-icon" + $ toContent $(embedFile "config/favicon.ico") + +getRobotsR :: Handler TypedContent +getRobotsR = return $ TypedContent typePlain + $ toContent $(embedFile "config/robots.txt") + + +lookupPagingParams :: Handler (Maybe Int64, Maybe Int64) +lookupPagingParams = do + cq <- fmap parseMaybe (lookupGetParam "count") + cs <- fmap parseMaybe (lookupSession "count") + for_ cq (setSession "count" . (pack . show)) + pq <- fmap parseMaybe (lookupGetParam "page") + pure (cq <|> cs, pq) + where + parseMaybe x = readMaybe . unpack =<< x diff --git a/src/Handler/Docs.hs b/src/Handler/Docs.hs new file mode 100644 index 0000000..07d5ea0 --- /dev/null +++ b/src/Handler/Docs.hs @@ -0,0 +1,9 @@ +{-# OPTIONS_GHC -fno-warn-unused-matches #-} + +module Handler.Docs where + +import Import + +getDocsSearchR :: Handler Html +getDocsSearchR = popupLayout $ + $(widgetFile "docs-search") diff --git a/src/Handler/Edit.hs b/src/Handler/Edit.hs new file mode 100644 index 0000000..9a72765 --- /dev/null +++ b/src/Handler/Edit.hs @@ -0,0 +1,51 @@ +{-# OPTIONS_GHC -fno-warn-unused-matches #-} + +module Handler.Edit where + +import Database.Persist.Sql + +import Import + +-- routes + +deleteDeleteR :: Int64 -> Handler Html +deleteDeleteR bid = do + userId <- requireAuthId + runDB $ do + let k_bid = BookmarkKey bid + _ <- requireResource userId k_bid + deleteCascade k_bid + return "" + +postReadR :: Int64 -> Handler Html +postReadR bid = do + userId <- requireAuthId + runDB $ do + let k_bid = BookmarkKey bid + _ <- requireResource userId k_bid + update k_bid [BookmarkToRead =. False] + return "" + +postStarR :: Int64 -> Handler Html +postStarR bid = _setSelected bid True + +postUnstarR :: Int64 -> Handler Html +postUnstarR bid = _setSelected bid False + +-- common + +_setSelected :: Int64 -> Bool -> Handler Html +_setSelected bid selected = do + userId <- requireAuthId + runDB $ do + let k_bid = BookmarkKey bid + bm <- requireResource userId k_bid + update k_bid [BookmarkSelected =. selected] + pure "" + +requireResource :: UserId -> Key Bookmark -> DBM Handler Bookmark +requireResource userId k_bid = do + bmark <- get404 k_bid + if userId == bookmarkUserId bmark + then return bmark + else notFound diff --git a/src/Handler/Home.hs b/src/Handler/Home.hs new file mode 100644 index 0000000..4d65b65 --- /dev/null +++ b/src/Handler/Home.hs @@ -0,0 +1,12 @@ +{-# OPTIONS_GHC -fno-warn-unused-matches #-} + +module Handler.Home where + +import Import + +getHomeR :: Handler Html +getHomeR = do + musername <- maybeAuthUsername + case musername of + Nothing -> redirect (AuthR LoginR) + Just username -> redirect (UserR (UserNameP username)) diff --git a/src/Handler/Notes.hs b/src/Handler/Notes.hs new file mode 100644 index 0000000..dce51f6 --- /dev/null +++ b/src/Handler/Notes.hs @@ -0,0 +1,134 @@ +{-# OPTIONS_GHC -fno-warn-unused-matches #-} +module Handler.Notes where + +import Import +import Handler.Common (lookupPagingParams) +import qualified Data.Aeson as A +import qualified Data.Text as T + +getNotesR :: UserNameP -> Handler Html +getNotesR unamep@(UserNameP uname) = do + void requireAuthId + (limit', page') <- lookupPagingParams + let queryp = "query" :: Text + mquery <- lookupGetParam queryp + let limit = maybe 20 fromIntegral limit' + page = maybe 1 fromIntegral page' + mqueryp = fmap (\q -> (queryp, q)) mquery + (bcount, notes) <- + runDB $ + do Entity userId _ <- getBy404 (UniqueUserName uname) + getNoteList userId mquery limit page + req <- getRequest + mroute <- getCurrentRoute + defaultLayout $ do + let pager = $(widgetFile "pager") + search = $(widgetFile "search") + renderEl = "notes" :: Text + $(widgetFile "notes") + toWidgetBody [julius| + app.userR = "@{UserR unamep}"; + app.dat.notes = #{ toJSON notes } || []; + |] + toWidget [julius| + PS['Main'].renderNotes('##{rawJS renderEl}')(app.dat.notes)(); + |] + +getNoteR :: UserNameP -> NtSlug -> Handler Html +getNoteR unamep@(UserNameP uname) slug = do + void requireAuthId + let renderEl = "note" :: Text + note <- + runDB $ + do Entity userId _ <- getBy404 (UniqueUserName uname) + mnote <- getNote userId slug + maybe notFound pure mnote + defaultLayout $ do + addScript (StaticR js_marked_min_js) + $(widgetFile "note") + toWidgetBody [julius| + app.userR = "@{UserR unamep}"; + app.dat.note = #{ toJSON note } || []; + |] + toWidget [julius| + PS['Main'].renderNote('##{rawJS renderEl}')(app.dat.note)(); + |] + +getAddNoteViewR :: UserNameP -> Handler Html +getAddNoteViewR unamep@(UserNameP uname) = do + userId <- requireAuthId + let renderEl = "note" :: Text + note <- liftIO $ Entity (NoteKey 0) <$> _toNote userId (NoteForm Nothing Nothing Nothing Nothing Nothing Nothing Nothing) + defaultLayout $ do + addScript (StaticR js_marked_min_js) + $(widgetFile "note") + toWidgetBody [julius| + app.userR = "@{UserR unamep}"; + app.noteR = "@{NoteR unamep (noteSlug (entityVal note))}"; + app.dat.note = #{ toJSON note } || []; + |] + toWidget [julius| + PS['Main'].renderNote('##{rawJS renderEl}')(app.dat.note)(); + |] + +deleteDeleteNoteR :: Int64 -> Handler Html +deleteDeleteNoteR nid = do + userId <- requireAuthId + runDB $ do + let k_nid = NoteKey nid + _ <- requireResource userId k_nid + deleteCascade k_nid + return "" + +postAddNoteR :: Handler () +postAddNoteR = do + noteForm <- requireCheckJsonBody + _handleFormSuccess noteForm >>= \case + (Created, nid) -> sendStatusJSON created201 nid + (Updated, _) -> sendResponseStatus noContent204 () + +requireResource :: UserId -> Key Note -> DBM Handler Note +requireResource userId k_nid = do + nnote <- get404 k_nid + if userId == noteUserId nnote + then return nnote + else notFound + +_handleFormSuccess :: NoteForm -> Handler (UpsertResult, Key Note) +_handleFormSuccess noteForm = do + userId <- requireAuthId + note <- liftIO $ _toNote userId noteForm + runDB (upsertNote knid note) + where + knid = NoteKey <$> (_id noteForm >>= \i -> if i > 0 then Just i else Nothing) + +data NoteForm = NoteForm + { _id :: Maybe Int64 + , _slug :: Maybe NtSlug + , _title :: Maybe Text + , _text :: Maybe Textarea + , _isMarkdown :: Maybe Bool + , _created :: Maybe UTCTimeStr + , _updated :: Maybe UTCTimeStr + } deriving (Show, Eq, Read, Generic) + +instance FromJSON NoteForm where parseJSON = A.genericParseJSON gNoteFormOptions +instance ToJSON NoteForm where toJSON = A.genericToJSON gNoteFormOptions + +gNoteFormOptions :: A.Options +gNoteFormOptions = A.defaultOptions { A.fieldLabelModifier = drop 1 } + +_toNote :: UserId -> NoteForm -> IO Note +_toNote userId NoteForm {..} = do + time <- liftIO getCurrentTime + slug <- maybe mkNtSlug pure _slug + pure $ + Note + userId + slug + (length _text) + (fromMaybe "" _title) + (maybe "" unTextarea _text) + (fromMaybe False _isMarkdown) + (fromMaybe time (fmap unUTCTimeStr _created)) + (fromMaybe time (fmap unUTCTimeStr _updated)) diff --git a/src/Handler/User.hs b/src/Handler/User.hs new file mode 100644 index 0000000..0027fda --- /dev/null +++ b/src/Handler/User.hs @@ -0,0 +1,62 @@ +{-# OPTIONS_GHC -fno-warn-unused-matches #-} +module Handler.User where + +import Import +import qualified Data.Text as T +import Handler.Common (lookupPagingParams) + +getUserR :: UserNameP -> Handler Html +getUserR uname@(UserNameP name) = do + _getUser uname SharedAll FilterAll (TagsP []) + +getUserSharedR :: UserNameP -> SharedP -> Handler Html +getUserSharedR uname sharedp = + _getUser uname sharedp FilterAll (TagsP []) + +getUserFilterR :: UserNameP -> FilterP -> Handler Html +getUserFilterR uname filterp = + _getUser uname SharedAll filterp (TagsP []) + +getUserTagsR :: UserNameP -> TagsP -> Handler Html +getUserTagsR uname pathtags = + _getUser uname SharedAll FilterAll pathtags + +_getUser :: UserNameP -> SharedP -> FilterP -> TagsP -> Handler Html +_getUser unamep@(UserNameP uname) sharedp' filterp' (TagsP pathtags) = do + mauthuname <- maybeAuthUsername + (limit', page') <- lookupPagingParams + let limit = maybe 120 fromIntegral limit' + page = maybe 1 fromIntegral page' + isowner = maybe False (== uname) mauthuname + sharedp = if isowner then sharedp' else SharedPublic + filterp = case filterp' of + FilterSingle _ -> filterp' + _ -> if isowner then filterp' else FilterAll + isAll = filterp == FilterAll && sharedp == SharedAll && pathtags == [] + queryp = "query" :: Text + mquery <- lookupGetParam queryp + let mqueryp = fmap (\q -> (queryp, q)) mquery + (bcount, bmarks, alltags) <- + runDB $ + do Entity userId user <- getBy404 (UniqueUserName uname) + when (not isowner && userPrivacyLock user) + (redirect (AuthR LoginR)) + (cnt, bm) <- bookmarksQuery userId sharedp filterp pathtags mquery limit page + tg <- tagsQuery bm + pure (cnt, bm, tg) + when (bcount == 0) (case filterp of FilterSingle _ -> notFound; _ -> pure ()) + mroute <- getCurrentRoute + req <- getRequest + defaultLayout $ do + let pager = $(widgetFile "pager") + search = $(widgetFile "search") + renderEl = "bookmarks" :: Text + $(widgetFile "user") + toWidgetBody [julius| + app.dat.bmarks = #{ toJSON $ toBookmarkFormList bmarks alltags } || []; + app.dat.isowner = #{ isowner }; + app.userR = "@{UserR unamep}"; + |] + toWidget [julius| + PS['Main'].renderBookmarks('##{rawJS renderEl}')(app.dat.bmarks)(); + |] diff --git a/src/Import.hs b/src/Import.hs new file mode 100644 index 0000000..7f4c93b --- /dev/null +++ b/src/Import.hs @@ -0,0 +1,86 @@ +{-# LANGUAGE NoImplicitPrelude #-} +{-# LANGUAGE OverloadedStrings #-} + +module Import + ( module Import + ) where + +import Foundation as Import +import Import.NoFoundation as Import + +import qualified Data.ByteString.Char8 as B8 +import qualified Data.Aeson as A + +-- Forms + +type MonadHandlerForm m = (RenderMessage App FormMessage, HandlerSite m ~ App, MonadHandler m) + +type Form f = Html -> MForm Handler (FormResult f, Widget) + +runInputPostJSONResult + :: (FromJSON a, MonadHandlerForm m) + => FormInput m a -> m (FormResult a) +runInputPostJSONResult form = do + mct <- lookupHeader "content-type" + case fmap (B8.takeWhile (/= ';')) mct of + Just "application/json" -> + parseJsonBody >>= \case + A.Success a -> pure $ FormSuccess a + A.Error e -> pure $ FormFailure [pack e] + Just "application/x-www-form-urlencoded" -> + runInputPostResult form + _ -> pure FormMissing + +runInputPostJSON + :: (FromJSON a, MonadHandlerForm m) + => FormInput m a -> m a +runInputPostJSON form = + runInputPostJSONResult form >>= + \case + FormSuccess a -> pure a + FormFailure e -> invalidArgs e + FormMissing -> invalidArgs [] + +class MkIForm a where + mkIForm :: MonadHandlerForm m => FormInput m a + +aFormToMaybeGetSuccess + :: MonadHandler f + => AForm f a -> f (Maybe a) +aFormToMaybeGetSuccess = + fmap maybeSuccess . fmap fst . runFormGet . const . fmap fst . aFormToForm + +aFormToMaybePostSuccess + :: MonadHandlerForm f + => AForm f a -> f (Maybe a) +aFormToMaybePostSuccess = + fmap maybeSuccess . fmap fst . runFormPostNoToken . const . fmap fst . aFormToForm + +maybeSuccess :: FormResult a -> Maybe a +maybeSuccess (FormSuccess a) = Just a +maybeSuccess _ = Nothing + + +-- FieldSettings + +named :: Text -> FieldSettings master -> FieldSettings master +named n f = + f + { fsName = Just n + , fsId = Just n + } + +attr :: (Text,Text) -> FieldSettings master -> FieldSettings master +attr n f = + f + { fsAttrs = n : fsAttrs f + } + +attrs :: [(Text,Text)] -> FieldSettings master -> FieldSettings master +attrs n f = + f + { fsAttrs = n ++ fsAttrs f + } + +cls :: [Text] -> FieldSettings master -> FieldSettings master +cls n = attrs [("class", intercalate " " n)] diff --git a/src/Import/NoFoundation.hs b/src/Import/NoFoundation.hs new file mode 100644 index 0000000..f60d385 --- /dev/null +++ b/src/Import/NoFoundation.hs @@ -0,0 +1,34 @@ +{-# LANGUAGE CPP #-} +{-# OPTIONS_GHC -fno-warn-unused-imports #-} + +module Import.NoFoundation + ( module Import +#if MIN_VERSION_base(4, 11, 0) +#else + , (<&>) +#endif + ) where + +import ClassyPrelude.Yesod as Import +import Control.Monad.Trans.Maybe as Import +import Settings as Import +import Settings.StaticFiles as Import +import Yesod.Auth as Import +import Yesod.Core.Types as Import (loggerSet) +import Yesod.Default.Config2 as Import +import Text.Julius as Import + +import Model as Import +import ModelCustom as Import +import Types as Import +import Pretty as Import +import Data.Functor as Import +import Generic as Import + + +#if MIN_VERSION_base(4, 11, 0) +#else +(<&>) :: Functor f => f a -> (a -> b) -> f b +as <&> f = f <$> as +infixl 1 <&> +#endif diff --git a/src/Model.hs b/src/Model.hs new file mode 100644 index 0000000..5cadfa6 --- /dev/null +++ b/src/Model.hs @@ -0,0 +1,569 @@ +{-# OPTIONS_GHC -fno-warn-unused-imports #-} + +module Model where + +import qualified ClassyPrelude.Yesod as CP +import qualified Data.Aeson as A +import qualified Data.Attoparsec.Text as P +import qualified Control.Monad.Combinators as PC +import qualified Data.List.NonEmpty as NE +import qualified Data.Time.ISO8601 as TI +import qualified Database.Esqueleto as E +import qualified Data.Time as TI +import ClassyPrelude.Yesod hiding ((||.)) +import Control.Monad.Trans.Maybe +import Control.Monad.Writer (tell) +import Data.Char (isSpace) +import Data.Either (fromRight) +import Data.Foldable (foldl, foldl1, sequenceA_) +import Data.List.NonEmpty (NonEmpty(..)) +import Database.Esqueleto hiding ((==.)) +import Pretty +import System.Directory +import Types + +import ModelCustom + +share [mkPersist sqlSettings, mkDeleteCascade sqlSettings, mkMigrate "migrateSchema"] [persistLowerCase| +User json + Id Int64 + name Text + passwordHash BCrypt + apiToken Text Maybe + privateDefault Bool + archiveDefault Bool + privacyLock Bool + UniqueUserName name + deriving Show Eq Typeable Ord + +Bookmark json + Id Int64 + userId UserId + slug BmSlug default="(lower(hex(randomblob(6))))" + href Text + description Text + extended Text + time UTCTime + shared Bool + toRead Bool + selected Bool + archiveHref Text Maybe + UniqueUserHref userId href + UniqueUserSlug userId slug + deriving Show Eq Typeable Ord + +BookmarkTag json + Id Int64 + userId UserId + tag Text + bookmarkId BookmarkId + seq Int + UniqueUserTagBookmarkId userId tag bookmarkId + UniqueUserBookmarkIdTagSeq userId bookmarkId tag seq + deriving Show Eq Typeable Ord + +Note json + Id Int64 + userId UserId + slug NtSlug default="(lower(hex(randomblob(10))))" + length Int + title Text + text Text + isMarkdown Bool + created UTCTime + updated UTCTime + deriving Show Eq Typeable Ord +|] + +newtype UTCTimeStr = + UTCTimeStr { unUTCTimeStr :: UTCTime } + deriving (Eq, Show, Read, Generic, FromJSON, ToJSON) + +instance PathPiece UTCTimeStr where + toPathPiece (UTCTimeStr u) = pack (TI.formatISO8601Millis u) + fromPathPiece s = UTCTimeStr <$> TI.parseISO8601 (unpack s) + +newtype UserNameP = + UserNameP { unUserNameP :: Text } + deriving (Eq, Show, Read) + +newtype TagsP = + TagsP { unTagsP :: [Text] } + deriving (Eq, Show, Read) + +data SharedP + = SharedAll + | SharedPublic + | SharedPrivate + deriving (Eq, Show, Read) + +data FilterP + = FilterAll + | FilterUnread + | FilterUntagged + | FilterStarred + | FilterSingle BmSlug + deriving (Eq, Show, Read) + +newtype UnreadOnly = + UnreadOnly { unUnreadOnly :: Bool } + deriving (Eq, Show, Read) + +type Limit = Int64 +type Page = Int64 + +migrateAll :: Migration +migrateAll = migrateSchema >> migrateIndexes + +dumpMigration :: DB () +dumpMigration = printMigration migrateAll + +runMigrations :: DB () +runMigrations = runMigration migrateAll + +toMigration :: [Text] -> Migration +toMigration = lift . tell . fmap (False ,) + +migrateIndexes :: Migration +migrateIndexes = + toMigration + [ "CREATE INDEX IF NOT EXISTS idx_bookmark_time ON bookmark (user_id, time DESC)" + , "CREATE INDEX IF NOT EXISTS idx_bookmark_tag_bookmark_id ON bookmark_tag (bookmark_id, id, tag, seq)" + , "CREATE INDEX IF NOT EXISTS idx_note_user_created ON note (user_id, created DESC)" + ] + +authenticatePassword :: Text -> Text -> DB (Maybe (Entity User)) +authenticatePassword username password = do + muser <- getBy (UniqueUserName username) + case muser of + Nothing -> return Nothing + Just dbuser -> + if validatePasswordHash (userPasswordHash (entityVal dbuser)) password + then return (Just dbuser) + else return Nothing + +getUserByName :: UserNameP -> DB (Maybe (Entity User)) +getUserByName (UserNameP uname) = do + selectFirst [UserName ==. uname] [] + +bookmarksQuery + :: Key User + -> SharedP + -> FilterP + -> [Tag] + -> Maybe Text + -> Limit + -> Page + -> DB (Int, [Entity Bookmark]) +bookmarksQuery userId sharedp filterp tags mquery limit' page = + (,) -- total count + <$> fmap (sum . fmap E.unValue) + (select $ + from $ \b -> do + _whereClause b + pure $ E.countRows) + -- paged data + <*> (select $ + from $ \b -> do + _whereClause b + orderBy [desc (b ^. BookmarkTime)] + limit limit' + offset ((page - 1) * limit') + pure b) + where + _whereClause b = do + where_ $ + foldl (\expr tag -> + expr &&. (exists $ -- each tag becomes an exists constraint + from $ \t -> + where_ (t ^. BookmarkTagBookmarkId E.==. b ^. BookmarkId &&. + (t ^. BookmarkTagTag `E.like` val tag)))) + (b ^. BookmarkUserId E.==. val userId) + tags + case sharedp of + SharedAll -> pure () + SharedPublic -> where_ (b ^. BookmarkShared E.==. val True) + SharedPrivate -> where_ (b ^. BookmarkShared E.==. val False) + case filterp of + FilterAll -> pure () + FilterUnread -> where_ (b ^. BookmarkToRead E.==. val True) + FilterStarred -> where_ (b ^. BookmarkSelected E.==. val True) + FilterSingle slug -> where_ (b ^. BookmarkSlug E.==. val slug) + FilterUntagged -> where_ $ notExists $ from (\t -> where_ $ + (t ^. BookmarkTagBookmarkId E.==. b ^. BookmarkId)) + -- search + sequenceA_ (parseSearchQuery (toLikeExpr b) =<< mquery) + + toLikeExpr :: E.SqlExpr (Entity Bookmark) -> Text -> E.SqlExpr (E.Value Bool) + toLikeExpr b term = fromRight p_allFields (P.parseOnly p_onefield term) + where + wild s = (E.%) ++. val s ++. (E.%) + toLikeB field s = b ^. field `E.like` wild s + p_allFields = + (toLikeB BookmarkHref term) ||. + (toLikeB BookmarkDescription term) ||. + (toLikeB BookmarkExtended term) ||. + (exists $ from (\t -> where_ $ + (t ^. BookmarkTagBookmarkId E.==. b ^. BookmarkId) &&. + (t ^. BookmarkTagTag `E.like` (wild term)))) + p_onefield = p_url <|> p_title <|> p_description <|> p_tags <|> p_after <|> p_before + where + p_url = "url:" *> fmap (toLikeB BookmarkHref) P.takeText + p_title = "title:" *> fmap (toLikeB BookmarkDescription) P.takeText + p_description = "description:" *> fmap (toLikeB BookmarkExtended) P.takeText + p_tags = "tags:" *> fmap (\term' -> exists $ from (\t -> where_ $ + (t ^. BookmarkTagBookmarkId E.==. b ^. BookmarkId) &&. + (t ^. BookmarkTagTag `E.like` wild term'))) P.takeText + p_after = "after:" *> fmap ((b ^. BookmarkTime E.>=.) . val) (parseTimeText =<< P.takeText) + p_before = "before:" *> fmap ((b ^. BookmarkTime E.<=.) . val) (parseTimeText =<< P.takeText) + +parseSearchQuery :: + (Text -> E.SqlExpr (E.Value Bool)) + -> Text + -> Maybe (E.SqlQuery ()) +parseSearchQuery toExpr = + fmap where_ . either (const Nothing) Just . P.parseOnly andE + where + andE = foldl1 (&&.) <$> P.many1 (P.skipSpace *> orE <|> tokenTermE) + orE = foldl1 (||.) <$> tokenTermE `P.sepBy1` P.char '|' + tokenTermE = negE termE <|> termE + where + negE p = not_ <$> (P.char '-' *> p) + termE = toExpr <$> (fieldTerm <|> quotedTerm <|> simpleTerm) + fieldTerm = concat <$> sequence [simpleTerm, P.string ":", quotedTerm <|> simpleTerm] + quotedTerm = PC.between (P.char '"') (P.char '"') (P.takeWhile1 (/= '"')) + simpleTerm = P.takeWhile1 (\c -> not (isSpace c) && c /= ':' && c /= '|') + +parseTimeText :: (TI.ParseTime t, Monad m, Alternative m) => Text -> m t +parseTimeText t = + asum $ + flip (parseTimeM True defaultTimeLocale) (unpack t) <$> + [ "%-m/%-d/%Y" , "%-m/%-d/%Y%z" , "%-m/%-d/%Y%Z" -- 12/31/2018 + , "%Y-%-m-%-d" , "%Y-%-m-%-d%z" , "%Y-%-m-%-d%Z" -- 2018-12-31 + , "%Y-%-m-%-dT%T" , "%Y-%-m-%-dT%T%z" , "%Y-%-m-%-dT%T%Z" -- 2018-12-31T06:40:53 + , "%s" -- 1535932800 + ] + +tagsQuery :: [Entity Bookmark] -> DB [Entity BookmarkTag] +tagsQuery bmarks = + select $ + from $ \t -> do + where_ (t ^. BookmarkTagBookmarkId `in_` valList (fmap entityKey bmarks)) + orderBy [asc (t ^. BookmarkTagSeq)] + pure t + +withTags :: Key Bookmark -> DB [Entity BookmarkTag] +withTags key = selectList [BookmarkTagBookmarkId ==. key] [Asc BookmarkTagSeq] + +-- Note List Query + + +getNote :: Key User -> NtSlug -> DB (Maybe (Entity Note)) +getNote userKey slug = + selectFirst [NoteUserId ==. userKey, NoteSlug ==. slug] [] + +getNoteList :: Key User -> Maybe Text -> Limit -> Page -> DB (Int, [Entity Note]) +getNoteList key mquery limit' page = + (,) -- total count + <$> fmap (sum . fmap E.unValue) + (select $ + from $ \b -> do + _whereClause b + pure $ E.countRows) + <*> (select $ + from $ \b -> do + _whereClause b + orderBy [desc (b ^. NoteCreated)] + limit limit' + offset ((page - 1) * limit') + pure b) + where + _whereClause b = do + where_ $ (b ^. NoteUserId E.==. val key) + -- search + sequenceA_ (parseSearchQuery (toLikeExpr b) =<< mquery) + + toLikeExpr :: E.SqlExpr (Entity Note) -> Text -> E.SqlExpr (E.Value Bool) + toLikeExpr b term = fromRight p_allFields (P.parseOnly p_onefield term) + where + wild s = (E.%) ++. val s ++. (E.%) + toLikeN field s = b ^. field `E.like` wild s + p_allFields = toLikeN NoteTitle term ||. toLikeN NoteText term + p_onefield = p_title <|> p_text <|> p_after <|> p_before + where + p_title = "title:" *> fmap (toLikeN NoteTitle) P.takeText + p_text = "description:" *> fmap (toLikeN NoteText) P.takeText + p_after = "after:" *> fmap ((b ^. NoteCreated E.>=.) . val) (parseTimeText =<< P.takeText) + p_before = "before:" *> fmap ((b ^. NoteCreated E.<=.) . val) (parseTimeText =<< P.takeText) + +-- Bookmark Files + +bookmarkEntityToTags :: Entity Bookmark -> [Tag] -> [BookmarkTag] +bookmarkEntityToTags (Entity {entityKey = bookmarkId + ,entityVal = Bookmark {..}}) tags = + fmap + (\(i, tag) -> BookmarkTag bookmarkUserId tag bookmarkId i) + (zip [1 ..] tags) + + +fileBookmarkToBookmark :: UserId -> FileBookmark -> IO Bookmark +fileBookmarkToBookmark user (FileBookmark {..}) = do + slug <- mkBmSlug + pure $ + Bookmark + user + slug + fileBookmarkHref + fileBookmarkDescription + fileBookmarkExtended + fileBookmarkTime + fileBookmarkShared + fileBookmarkToRead + False + Nothing + + +insertFileBookmarks :: Key User -> FilePath -> DB () +insertFileBookmarks userId bookmarkFile = do + mfmarks <- liftIO $ readFileBookmarks bookmarkFile + case mfmarks of + Left e -> print e + Right fmarks -> do + bookmarks <- liftIO $ mapM (fileBookmarkToBookmark userId) fmarks + mbookmarkIds <- mapM insertUnique bookmarks + + let bookmarkTags = + concatMap (uncurry bookmarkEntityToTags) $ + catMaybes $ + zipWith3 (\mk v p -> map (\k -> (Entity k v, fileBookmarkTags p)) mk) + mbookmarkIds + bookmarks + fmarks + void $ mapM insertUnique bookmarkTags + where + readFileBookmarks :: MonadIO m => FilePath -> m (Either String [FileBookmark]) + readFileBookmarks fpath = pure . A.eitherDecode' . fromStrict =<< readFile fpath + +type Tag = Text + +-- Notes + +fileNoteToNote :: UserId -> FileNote -> IO Note +fileNoteToNote user (FileNote {..} ) = do + slug <- mkNtSlug + pure $ + Note + user + slug + fileNoteLength + fileNoteTitle + fileNoteText + False + fileNoteCreatedAt + fileNoteUpdatedAt + +insertDirFileNotes :: Key User -> FilePath -> DB () +insertDirFileNotes userId noteDirectory = do + mfnotes <- liftIO $ readFileNotes noteDirectory + case mfnotes of + Left e -> print e + Right fnotes -> do + notes <- liftIO $ mapM (fileNoteToNote userId) fnotes + void $ mapM insertUnique notes + where + readFileNotes :: MonadIO m => FilePath -> m (Either String [FileNote]) + readFileNotes fdir = do + files <- liftIO (listDirectory fdir) + noteBSS <- mapM (readFile . (fdir )) files + pure (mapM (A.eitherDecode' . fromStrict) noteBSS) + +-- AccountSettingsForm +data AccountSettingsForm = AccountSettingsForm + { _privateDefault :: Bool + , _archiveDefault :: Bool + , _privacyLock :: Bool + } deriving (Show, Eq, Read, Generic) + +instance FromJSON AccountSettingsForm where parseJSON = A.genericParseJSON gDefaultFormOptions +instance ToJSON AccountSettingsForm where toJSON = A.genericToJSON gDefaultFormOptions + +toAccountSettingsForm :: User -> AccountSettingsForm +toAccountSettingsForm (User {..}) = + AccountSettingsForm + { _privateDefault = userPrivateDefault + , _archiveDefault = userArchiveDefault + , _privacyLock = userPrivacyLock + } + +updateUserFromAccountSettingsForm :: Key User -> AccountSettingsForm -> DB () +updateUserFromAccountSettingsForm userId (AccountSettingsForm {..}) = do + CP.update userId + [ UserPrivateDefault CP.=. _privateDefault + , UserArchiveDefault CP.=. _archiveDefault + , UserPrivacyLock CP.=. _privacyLock + ] + +-- BookmarkForm + +data BookmarkForm = BookmarkForm + { _url :: Text + , _title :: Maybe Text + , _description :: Maybe Textarea + , _tags :: Maybe Text + , _private :: Maybe Bool + , _toread :: Maybe Bool + , _bid :: Maybe Int64 + , _slug :: Maybe BmSlug + , _selected :: Maybe Bool + , _time :: Maybe UTCTimeStr + , _archiveUrl :: Maybe Text + } deriving (Show, Eq, Read, Generic) + +instance FromJSON BookmarkForm where parseJSON = A.genericParseJSON gDefaultFormOptions +instance ToJSON BookmarkForm where toJSON = A.genericToJSON gDefaultFormOptions + +gDefaultFormOptions :: A.Options +gDefaultFormOptions = A.defaultOptions { A.fieldLabelModifier = drop 1 } + +toBookmarkFormList :: [Entity Bookmark] -> [Entity BookmarkTag] -> [BookmarkForm] +toBookmarkFormList bs as = do + b <- bs + let bid = E.entityKey b + let btags = filter ((==) bid . bookmarkTagBookmarkId . E.entityVal) as + pure $ _toBookmarkForm (b, btags) + +_toBookmarkForm :: (Entity Bookmark, [Entity BookmarkTag]) -> BookmarkForm +_toBookmarkForm (Entity bid Bookmark {..}, tags) = + BookmarkForm + { _url = bookmarkHref + , _title = Just bookmarkDescription + , _description = Just $ Textarea $ bookmarkExtended + , _tags = Just $ unwords $ fmap (bookmarkTagTag . entityVal) tags + , _private = Just $ not bookmarkShared + , _toread = Just $ bookmarkToRead + , _bid = Just $ unBookmarkKey $ bid + , _slug = Just $ bookmarkSlug + , _selected = Just $ bookmarkSelected + , _time = Just $ UTCTimeStr $ bookmarkTime + , _archiveUrl = bookmarkArchiveHref + } + +_toBookmark :: UserId -> BookmarkForm -> IO Bookmark +_toBookmark userId BookmarkForm {..} = do + time <- liftIO getCurrentTime + slug <- maybe mkBmSlug pure _slug + pure $ + Bookmark + userId + slug + _url + (fromMaybe "" _title) + (maybe "" unTextarea _description) + (fromMaybe time (fmap unUTCTimeStr _time)) + (maybe True not _private) + (fromMaybe False _toread) + (fromMaybe False _selected) + _archiveUrl + +fetchBookmarkByUrl :: Key User -> Maybe Text -> DB (Maybe (Entity Bookmark, [Entity BookmarkTag])) +fetchBookmarkByUrl userId murl = runMaybeT $ do + bmark <- MaybeT . getBy . UniqueUserHref userId =<< (MaybeT $ pure murl) + btags <- lift $ withTags (entityKey bmark) + pure (bmark, btags) + +data UpsertResult = Created | Updated + +upsertBookmark:: Maybe (Key Bookmark) -> Bookmark -> [Text] -> DB (UpsertResult, Key Bookmark) +upsertBookmark mbid bm tags = do + res <- case mbid of + Just bid -> do + get bid >>= \case + Just prev_bm -> replaceBookmark bid prev_bm + _ -> fail "not found" + Nothing -> do + getBy (UniqueUserHref (bookmarkUserId bm) (bookmarkHref bm)) >>= \case + Just (Entity bid prev_bm) -> replaceBookmark bid prev_bm + _ -> (Created,) <$> insert bm + insertTags (bookmarkUserId bm) (snd res) + pure res + where + prepareReplace prev_bm = do + if (bookmarkHref bm /= bookmarkHref prev_bm) + then bm { bookmarkArchiveHref = Nothing } + else bm { bookmarkArchiveHref = bookmarkArchiveHref prev_bm } + replaceBookmark bid prev_bm = do + replace bid (prepareReplace prev_bm) + deleteTags bid + pure (Updated, bid) + deleteTags bid = + deleteWhere [BookmarkTagBookmarkId ==. bid] + insertTags userId bid' = + for_ (zip [1 ..] tags) $ + \(i, tag) -> void $ insert $ BookmarkTag userId tag bid' i + +updateBookmarkArchiveUrl :: Key User -> Key Bookmark -> Maybe Text -> DB () +updateBookmarkArchiveUrl userId bid marchiveUrl = do + updateWhere + [BookmarkUserId ==. userId, BookmarkId ==. bid] + [BookmarkArchiveHref CP.=. marchiveUrl] + +upsertNote:: Maybe (Key Note) -> Note -> DB (UpsertResult, Key Note) +upsertNote mnid bmark@Note{..} = do + case mnid of + Just nid -> do + get nid >>= \case + Just _ -> do + replace nid bmark + pure (Updated, nid) + _ -> fail "not found" + Nothing -> do + (Created,) <$> insert bmark + +-- * FileBookmarks + +data FileBookmark = FileBookmark + { fileBookmarkHref :: !Text + , fileBookmarkDescription :: !Text + , fileBookmarkExtended :: !Text + , fileBookmarkTime :: !UTCTime + , fileBookmarkShared :: !Bool + , fileBookmarkToRead :: !Bool + , fileBookmarkTags :: [Tag] + } deriving (Show, Eq, Typeable, Ord) + +instance FromJSON FileBookmark where + parseJSON (Object o) = + FileBookmark <$> o .: "href" <*> o .: "description" <*> o .: "extended" <*> + o .: "time" <*> + (boolFromYesNo <$> o .: "shared") <*> + (boolFromYesNo <$> o .: "toread") <*> + (words <$> o .: "tags") + parseJSON _ = fail "bad parse" + +boolFromYesNo :: Text -> Bool +boolFromYesNo "yes" = True +boolFromYesNo _ = False + +-- * FileNotes + +data FileNote = FileNote + { fileNoteId :: !Text + , fileNoteTitle :: !Text + , fileNoteText :: !Text + , fileNoteLength :: !Int + , fileNoteCreatedAt :: !UTCTime + , fileNoteUpdatedAt :: !UTCTime + } deriving (Show, Eq, Typeable, Ord) + +instance FromJSON FileNote where + parseJSON (Object o) = + FileNote <$> o .: "id" <*> o .: "title" <*> o .: "text" <*> + o .: "length" <*> + (readFileNoteTime =<< o .: "created_at") <*> + (readFileNoteTime =<< o .: "updated_at") + parseJSON _ = fail "bad parse" + +readFileNoteTime + :: Monad m + => String -> m UTCTime +readFileNoteTime = parseTimeM True defaultTimeLocale "%F %T" diff --git a/src/ModelCustom.hs b/src/ModelCustom.hs new file mode 100644 index 0000000..bc2b079 --- /dev/null +++ b/src/ModelCustom.hs @@ -0,0 +1,60 @@ + +module ModelCustom where + +import Prelude + +import Crypto.BCrypt as Import hiding (hashPassword) +import Database.Persist.Sql +import Safe (fromJustNote) +import qualified Data.Text as T +import qualified Data.Text.Encoding as TE +import qualified Data.Aeson as A +import System.Entropy (getEntropy) +import qualified Data.ByteString.Builder as BB +import qualified Data.ByteString.Lazy as LBS + +mkSlug :: Int -> IO T.Text +mkSlug size = + TE.decodeUtf8 . LBS.toStrict . BB.toLazyByteString . BB.byteStringHex <$> + getEntropy size + +-- * Bookmark Slug + +newtype BmSlug = BmSlug + { unBmSlug :: T.Text + } deriving (Eq, PersistField, PersistFieldSql, Show, Read, Ord, A.FromJSON, A.ToJSON) + +mkBmSlug :: IO BmSlug +mkBmSlug = BmSlug <$> mkSlug 6 + +-- * Note Slug + +newtype NtSlug = NtSlug + { unNtSlug :: T.Text + } deriving (Eq, PersistField, PersistFieldSql, Show, Read, Ord, A.FromJSON, A.ToJSON) + +mkNtSlug :: IO NtSlug +mkNtSlug = NtSlug <$> mkSlug 10 + +-- * Model Crypto + +policy :: HashingPolicy +policy = + HashingPolicy + { preferredHashCost = 12 + , preferredHashAlgorithm = "$2a$" + } + +newtype BCrypt = BCrypt + { unBCrypt :: T.Text + } deriving (Eq, PersistField, PersistFieldSql, Show, Ord, A.FromJSON, A.ToJSON) + +hashPassword :: T.Text -> IO BCrypt +hashPassword rawPassword = do + mPassword <- hashPasswordUsingPolicy policy (TE.encodeUtf8 rawPassword) + return + (BCrypt (TE.decodeUtf8 (fromJustNote "Invalid hashing policy" mPassword))) + +validatePasswordHash :: BCrypt -> T.Text -> Bool +validatePasswordHash hash' pass = do + validatePassword (TE.encodeUtf8 (unBCrypt hash')) (TE.encodeUtf8 pass) diff --git a/src/PathPiece.hs b/src/PathPiece.hs new file mode 100644 index 0000000..e3b258b --- /dev/null +++ b/src/PathPiece.hs @@ -0,0 +1,55 @@ +{-# OPTIONS_GHC -fno-warn-orphans #-} + +module PathPiece where + +import Data.Text (splitOn) + +import Import.NoFoundation + +-- PathPiece + +instance PathPiece UserNameP where + toPathPiece (UserNameP i) = "u:" <> i + fromPathPiece s = + case splitOn ":" s of + ["u", ""] -> Nothing + ["u", uname] -> Just $ UserNameP uname + _ -> Nothing + +instance PathPiece TagsP where + toPathPiece (TagsP tags) = "t:" <> (intercalate "+" tags) + fromPathPiece s = + case splitOn ":" s of + ["t", ""] -> Nothing + ["t", tags] -> Just $ TagsP (splitOn "+" tags) + _ -> Nothing + +instance PathPiece SharedP where + toPathPiece = \case + SharedAll -> "" + SharedPublic -> "public" + SharedPrivate -> "private" + fromPathPiece = \case + "public" -> Just SharedPublic + "private" -> Just SharedPrivate + _ -> Nothing + +instance PathPiece FilterP where + toPathPiece = \case + FilterAll -> "" + FilterUnread -> "unread" + FilterUntagged -> "untagged" + FilterStarred -> "starred" + FilterSingle slug -> "b:" <> unBmSlug slug + fromPathPiece = \case + "unread" -> Just FilterUnread + "untagged" -> Just FilterUntagged + "starred" -> Just FilterStarred + s -> case splitOn ":" s of + ["b", ""] -> Nothing + ["b", slug] -> Just $ FilterSingle (BmSlug slug) + _ -> Nothing + + +deriving instance PathPiece NtSlug +deriving instance PathPiece BmSlug diff --git a/src/Pretty.hs b/src/Pretty.hs new file mode 100644 index 0000000..5e4d33d --- /dev/null +++ b/src/Pretty.hs @@ -0,0 +1,15 @@ +module Pretty where + +import Text.Show.Pretty (ppShow) +import Language.Haskell.HsColour +import Language.Haskell.HsColour.Colourise +import ClassyPrelude + +cpprint :: (MonadIO m, Show a) => a -> m () +cpprint = putStrLn . pack . hscolour TTY defaultColourPrefs False False "" False . ppShow + +cprint :: (MonadIO m, Show a) => a -> m () +cprint = putStrLn . pack . hscolour TTY defaultColourPrefs False False "" False . show + +pprint :: (MonadIO m, Show a) => a -> m () +pprint = putStrLn . pack . ppShow diff --git a/src/Settings.hs b/src/Settings.hs new file mode 100644 index 0000000..43326ce --- /dev/null +++ b/src/Settings.hs @@ -0,0 +1,150 @@ +-- | Settings are centralized, as much as possible, into this file. This +-- includes database connection settings, static file locations, etc. +-- In addition, you can configure a number of different aspects of Yesod +-- by overriding methods in the Yesod typeclass. That instance is +-- declared in the Foundation.hs file. +module Settings where + +import ClassyPrelude.Yesod +import qualified Control.Exception as Exception +import Data.Aeson (Result (..), fromJSON, withObject, (.!=), + (.:?)) +import Data.FileEmbed (embedFile) +import Data.Yaml (decodeEither') +import Database.Persist.Sqlite (SqliteConf) +import Language.Haskell.TH.Syntax (Exp, Name, Q) +import Network.Wai.Handler.Warp (HostPreference) +import Yesod.Default.Config2 (applyEnvValue, configSettingsYml) +import Yesod.Default.Util (WidgetFileSettings, widgetFileNoReload, + widgetFileReload) + +-- | Runtime settings to configure this application. These settings can be +-- loaded from various sources: defaults, environment variables, config files, +-- theoretically even a database. +data AppSettings = AppSettings + { appStaticDir :: String + -- ^ Directory from which to serve static files. + , appDatabaseConf :: SqliteConf + -- ^ Configuration settings for accessing the database. + , appRoot :: Maybe Text + -- ^ Base for all generated URLs. If @Nothing@, determined + -- from the request headers. + , appHost :: HostPreference + -- ^ Host/interface the server should bind to. + , appPort :: Int + -- ^ Port to listen on + , appIpFromHeader :: Bool + -- ^ Get the IP address from the header when logging. Useful when sitting + -- behind a reverse proxy. + , appDetailedRequestLogging :: Bool + -- ^ Use detailed request logging system + , appShouldLogAll :: Bool + -- ^ Should all log messages be displayed? + , appReloadTemplates :: Bool + -- ^ Use the reload version of templates + , appMutableStatic :: Bool + -- ^ Assume that files in the static dir may change after compilation + , appSkipCombining :: Bool + -- ^ Perform no stylesheet/script combining + + -- Example app-specific configuration values. + , appCopyright :: Text + -- ^ Copyright text to appear in the footer of the page + , appAnalytics :: Maybe Text + -- ^ Google Analytics code + + , appAuthDummyLogin :: Bool + -- ^ Indicate if auth dummy login should be enabled. + + , appEkgHost :: Maybe Text + -- ^ Host/interface the ekg server should bind to. + , appEkgPort :: Maybe Int + -- ^ Port to listen on + } + +instance FromJSON AppSettings where + parseJSON = withObject "AppSettings" $ \o -> do + let defaultDev = +#ifdef DEVELOPMENT + True +#else + False +#endif + appStaticDir <- o .: "static-dir" + appDatabaseConf <- o .: "database" + appRoot <- o .:? "approot" + appHost <- fromString <$> o .: "host" + appPort <- o .: "port" + appIpFromHeader <- o .: "ip-from-header" + + dev <- o .:? "development" .!= defaultDev + + appDetailedRequestLogging <- o .:? "detailed-logging" .!= dev + appShouldLogAll <- o .:? "should-log-all" .!= dev + appReloadTemplates <- o .:? "reload-templates" .!= dev + appMutableStatic <- o .:? "mutable-static" .!= dev + appSkipCombining <- o .:? "skip-combining" .!= dev + + appCopyright <- o .: "copyright" + appAnalytics <- o .:? "analytics" + + appAuthDummyLogin <- o .:? "auth-dummy-login" .!= dev + + appEkgHost <- o .:? "ekg-host" + appEkgPort <- o .:? "ekg-port" + + return AppSettings {..} + +-- | Settings for 'widgetFile', such as which template languages to support and +-- default Hamlet settings. +-- +-- For more information on modifying behavior, see: +-- +-- https://github.com/yesodweb/yesod/wiki/Overriding-widgetFile +widgetFileSettings :: WidgetFileSettings +widgetFileSettings = def + +-- | How static files should be combined. +combineSettings :: CombineSettings +combineSettings = def + +-- The rest of this file contains settings which rarely need changing by a +-- user. + +widgetFile :: String -> Q Exp +widgetFile = (if appReloadTemplates compileTimeAppSettings + then widgetFileReload + else widgetFileNoReload) + widgetFileSettings + +-- | Raw bytes at compile time of @config/settings.yml@ +configSettingsYmlBS :: ByteString +configSettingsYmlBS = $(embedFile configSettingsYml) + +-- | @config/settings.yml@, parsed to a @Value@. +configSettingsYmlValue :: Value +configSettingsYmlValue = either Exception.throw id + $ decodeEither' configSettingsYmlBS + +-- | A version of @AppSettings@ parsed at compile time from @config/settings.yml@. +compileTimeAppSettings :: AppSettings +compileTimeAppSettings = + case fromJSON $ applyEnvValue False mempty configSettingsYmlValue of + Error e -> error e + Success settings -> settings + +-- The following two functions can be used to combine multiple CSS or JS files +-- at compile time to decrease the number of http requests. +-- Sample usage (inside a Widget): +-- +-- > $(combineStylesheets 'StaticR [style1_css, style2_css]) + +combineStylesheets :: Name -> [Route Static] -> Q Exp +combineStylesheets = combineStylesheets' + (appSkipCombining compileTimeAppSettings) + combineSettings + +combineScripts :: Name -> [Route Static] -> Q Exp +combineScripts = combineScripts' + (appSkipCombining compileTimeAppSettings) + combineSettings diff --git a/src/Settings/StaticFiles.hs b/src/Settings/StaticFiles.hs new file mode 100644 index 0000000..c8021d3 --- /dev/null +++ b/src/Settings/StaticFiles.hs @@ -0,0 +1,18 @@ +module Settings.StaticFiles where + +import Settings (appStaticDir, compileTimeAppSettings) +import Yesod.Static (staticFiles) + +-- This generates easy references to files in the static directory at compile time, +-- giving you compile-time verification that referenced files exist. +-- Warning: any files added to your static directory during run-time can't be +-- accessed this way. You'll have to use their FilePath or URL to access them. +-- +-- For example, to refer to @static/js/script.js@ via an identifier, you'd use: +-- +-- js_script_js +-- +-- If the identifier is not available, you may use: +-- +-- StaticFile ["js", "script.js"] [] +staticFiles (appStaticDir compileTimeAppSettings) diff --git a/src/Types.hs b/src/Types.hs new file mode 100644 index 0000000..295c172 --- /dev/null +++ b/src/Types.hs @@ -0,0 +1,13 @@ +module Types where + +import ClassyPrelude.Yesod + +type DBM m a = MonadUnliftIO m => SqlPersistT m a + +type DB a = forall m. DBM m a + +type DBVal val = + ( PersistEntity val + , PersistEntityBackend val ~ SqlBackend + , PersistStore (PersistEntityBackend val)) + diff --git a/stack.yaml b/stack.yaml new file mode 100644 index 0000000..3885411 --- /dev/null +++ b/stack.yaml @@ -0,0 +1,11 @@ +resolver: lts-13.0 +# allow-newer: true +extra-deps: +- git: https://github.com/bitemyapp/esqueleto.git + commit: 5f98e7b25334ec120125ca84ef647d5c4575a010 +- ekg-0.4.0.15 +- ekg-json-0.1.0.6 +- monad-metrics-0.2.1.2 +- wai-middleware-metrics-0.2.4 +packages: +- '.' diff --git a/static/css/main.css b/static/css/main.css new file mode 100644 index 0000000..baec6df --- /dev/null +++ b/static/css/main.css @@ -0,0 +1,161 @@ +html { + height: 102%; +} + +body { + height: 102%; + word-wrap: break-word; +} + +button { + background:none; + border:none; + padding:0; + cursor:pointer; +} + +button:focus { + outline: none; +} + + +[hidden] { + display: none !important +} +input::placeholder { + color: lightgray +} +.queryInput { + width: 128px; + padding: 0 22px 0 2px; + border-radius: 3px; + border-style: solid; + border-width: 1px; + border-color: gray; + height: 22px; + line-height: 22px; + transition: width .1s ease-in-out +} +.queryInput.search-inactive {} +.queryInput:focus { + width: 175px; +} +.submitting .queryInput, +.queryInput.search-active { + border-color: #990; + border-width: 2px; + background-color: #FF9; + width: 175px; +} +.queryIcon { + position: absolute; + right: 0; + top:1px; + cursor:pointer; + width:20px; + height: 20px; + fill: currentColor; +} +label { + cursor: pointer; +} +.close-x-wrap { + float: left; + width: 17px; + height: 17px; + top: 2px; + position: relative; + right: 2px; +} +.close-x { + stroke: gray; + fill: transparent; + stroke-linecap: round; + stroke-width: 3; +} +.query-info-icon { + position: absolute; + top: 0px; + right: -18px; + text-decoration: none; + font-size: 12px; + padding: 0 8px 8px 0; +} +.star { + margin-left:-20px; + font-size:1.2em; + position:relative; + top:-2px; +} + +.star button { + transition: color .1s; +} +.star.selected button { + color:#22a; +} +.edit_links button { + transition: color .1s ease-in; +} + +.tag { + color:#a51; + line-height:190%; +} + +.private { background:#ddd;border:1px solid #d1d1d1; } +.unread { color:#b41 } +.mark_read {color: #a81;} +.flash { color:green;background:#efe } + +.top_menu { + margin-top:6px; +} +.top_menu a { + color: blue; +} +.bookmarklet { + padding:1px 2px 0px 2px; +} + +.alert { + background:#ced; + border:1px solid #acc; +} + +.edit_bookmark_form {color:#888;} +.edit_bookmark_form input {border:1px solid #ddd;} +.edit_bookmark_form textarea {border:1px solid #ddd;} + +.nav-active { + background:#ff8; + color:blue; +} + +/* mobile device */ +@media only screen and (max-width : 750px) { + body { + -webkit-text-size-adjust: none; + } + .display { + float: none + } +} + +@media only screen and (max-width : 500px) { + .filters { + clear: both; + position: relative; + top: 2px; + } +} + +.rdim { + opacity: .8; + transition: all .15s ease-in; +} +.rdim:hover, +.rdim:focus { + opacity: 1; + transition: all .15s ease-in; +} diff --git a/static/css/popup.css b/static/css/popup.css new file mode 100644 index 0000000..44d1e43 --- /dev/null +++ b/static/css/popup.css @@ -0,0 +1,35 @@ +html { + box-sizing: border-box; +} +[hidden] { + display: none !important +} +button { + background:none; + border:none; + padding:0; + cursor:pointer; +} +button:focus { + outline: none; +} +.alert { + background:#ced; + border:1px solid #acc; +} +form label { + margin: 0; + vertical-align: middle; + display: table-cell; + padding: 2px 0; +} +li { list-style-type: none; margin: 0; padding: 0; display: block;} + +.when { color:#999} +.unread { color:#b41 } +a.unread { color:#b41 } +a.bookmark_title { font-size:120%;} + +label { + cursor: pointer; +} diff --git a/static/css/tachyons.min.css b/static/css/tachyons.min.css new file mode 100644 index 0000000..db78696 --- /dev/null +++ b/static/css/tachyons.min.css @@ -0,0 +1,3 @@ +/*! TACHYONS v4.10.0 | http://tachyons.io */ +/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}.border-box,a,article,aside,blockquote,body,code,dd,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,html,input[type=email],input[type=number],input[type=password],input[type=tel],input[type=text],input[type=url],legend,li,main,nav,ol,p,pre,section,table,td,textarea,th,tr,ul{box-sizing:border-box}.aspect-ratio{height:0;position:relative}.aspect-ratio--16x9{padding-bottom:56.25%}.aspect-ratio--9x16{padding-bottom:177.77%}.aspect-ratio--4x3{padding-bottom:75%}.aspect-ratio--3x4{padding-bottom:133.33%}.aspect-ratio--6x4{padding-bottom:66.6%}.aspect-ratio--4x6{padding-bottom:150%}.aspect-ratio--8x5{padding-bottom:62.5%}.aspect-ratio--5x8{padding-bottom:160%}.aspect-ratio--7x5{padding-bottom:71.42%}.aspect-ratio--5x7{padding-bottom:140%}.aspect-ratio--1x1{padding-bottom:100%}.aspect-ratio--object{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:100}img{max-width:100%}.cover{background-size:cover!important}.contain{background-size:contain!important}.bg-center{background-position:50%}.bg-center,.bg-top{background-repeat:no-repeat}.bg-top{background-position:top}.bg-right{background-position:100%}.bg-bottom,.bg-right{background-repeat:no-repeat}.bg-bottom{background-position:bottom}.bg-left{background-repeat:no-repeat;background-position:0}.outline{outline:1px solid}.outline-transparent{outline:1px solid transparent}.outline-0{outline:0}.ba{border-style:solid;border-width:1px}.bt{border-top-style:solid;border-top-width:1px}.br{border-right-style:solid;border-right-width:1px}.bb{border-bottom-style:solid;border-bottom-width:1px}.bl{border-left-style:solid;border-left-width:1px}.bn{border-style:none;border-width:0}.b--black{border-color:#000}.b--near-black{border-color:#111}.b--dark-gray{border-color:#333}.b--mid-gray{border-color:#555}.b--gray{border-color:#777}.b--silver{border-color:#999}.b--light-silver{border-color:#aaa}.b--moon-gray{border-color:#ccc}.b--light-gray{border-color:#eee}.b--near-white{border-color:#f4f4f4}.b--white{border-color:#fff}.b--white-90{border-color:hsla(0,0%,100%,.9)}.b--white-80{border-color:hsla(0,0%,100%,.8)}.b--white-70{border-color:hsla(0,0%,100%,.7)}.b--white-60{border-color:hsla(0,0%,100%,.6)}.b--white-50{border-color:hsla(0,0%,100%,.5)}.b--white-40{border-color:hsla(0,0%,100%,.4)}.b--white-30{border-color:hsla(0,0%,100%,.3)}.b--white-20{border-color:hsla(0,0%,100%,.2)}.b--white-10{border-color:hsla(0,0%,100%,.1)}.b--white-05{border-color:hsla(0,0%,100%,.05)}.b--white-025{border-color:hsla(0,0%,100%,.025)}.b--white-0125{border-color:hsla(0,0%,100%,.0125)}.b--black-90{border-color:rgba(0,0,0,.9)}.b--black-80{border-color:rgba(0,0,0,.8)}.b--black-70{border-color:rgba(0,0,0,.7)}.b--black-60{border-color:rgba(0,0,0,.6)}.b--black-50{border-color:rgba(0,0,0,.5)}.b--black-40{border-color:rgba(0,0,0,.4)}.b--black-30{border-color:rgba(0,0,0,.3)}.b--black-20{border-color:rgba(0,0,0,.2)}.b--black-10{border-color:rgba(0,0,0,.1)}.b--black-05{border-color:rgba(0,0,0,.05)}.b--black-025{border-color:rgba(0,0,0,.025)}.b--black-0125{border-color:rgba(0,0,0,.0125)}.b--dark-red{border-color:#e7040f}.b--red{border-color:#ff4136}.b--light-red{border-color:#ff725c}.b--orange{border-color:#ff6300}.b--gold{border-color:#ffb700}.b--yellow{border-color:gold}.b--light-yellow{border-color:#fbf1a9}.b--purple{border-color:#5e2ca5}.b--light-purple{border-color:#a463f2}.b--dark-pink{border-color:#d5008f}.b--hot-pink{border-color:#ff41b4}.b--pink{border-color:#ff80cc}.b--light-pink{border-color:#ffa3d7}.b--dark-green{border-color:#137752}.b--green{border-color:#19a974}.b--light-green{border-color:#9eebcf}.b--navy{border-color:#001b44}.b--dark-blue{border-color:#00449e}.b--blue{border-color:#357edd}.b--light-blue{border-color:#96ccff}.b--lightest-blue{border-color:#cdecff}.b--washed-blue{border-color:#f6fffe}.b--washed-green{border-color:#e8fdf5}.b--washed-yellow{border-color:#fffceb}.b--washed-red{border-color:#ffdfdf}.b--transparent{border-color:transparent}.b--inherit{border-color:inherit}.br0{border-radius:0}.br1{border-radius:.125rem}.br2{border-radius:.25rem}.br3{border-radius:.5rem}.br4{border-radius:1rem}.br-100{border-radius:100%}.br-pill{border-radius:9999px}.br--bottom{border-top-left-radius:0;border-top-right-radius:0}.br--top{border-bottom-right-radius:0}.br--right,.br--top{border-bottom-left-radius:0}.br--right{border-top-left-radius:0}.br--left{border-top-right-radius:0;border-bottom-right-radius:0}.b--dotted{border-style:dotted}.b--dashed{border-style:dashed}.b--solid{border-style:solid}.b--none{border-style:none}.bw0{border-width:0}.bw1{border-width:.125rem}.bw2{border-width:.25rem}.bw3{border-width:.5rem}.bw4{border-width:1rem}.bw5{border-width:2rem}.bt-0{border-top-width:0}.br-0{border-right-width:0}.bb-0{border-bottom-width:0}.bl-0{border-left-width:0}.shadow-1{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}.pre{overflow-x:auto;overflow-y:hidden;overflow:scroll}.top-0{top:0}.right-0{right:0}.bottom-0{bottom:0}.left-0{left:0}.top-1{top:1rem}.right-1{right:1rem}.bottom-1{bottom:1rem}.left-1{left:1rem}.top-2{top:2rem}.right-2{right:2rem}.bottom-2{bottom:2rem}.left-2{left:2rem}.top--1{top:-1rem}.right--1{right:-1rem}.bottom--1{bottom:-1rem}.left--1{left:-1rem}.top--2{top:-2rem}.right--2{right:-2rem}.bottom--2{bottom:-2rem}.left--2{left:-2rem}.absolute--fill{top:0;right:0;bottom:0;left:0}.cf:after,.cf:before{content:" ";display:table}.cf:after{clear:both}.cf{*zoom:1}.cl{clear:left}.cr{clear:right}.cb{clear:both}.cn{clear:none}.dn{display:none}.di{display:inline}.db{display:block}.dib{display:inline-block}.dit{display:inline-table}.dt{display:table}.dtc{display:table-cell}.dt-row{display:table-row}.dt-row-group{display:table-row-group}.dt-column{display:table-column}.dt-column-group{display:table-column-group}.dt--fixed{table-layout:fixed;width:100%}.flex{display:flex}.inline-flex{display:inline-flex}.flex-auto{flex:1 1 auto;min-width:0;min-height:0}.flex-none{flex:none}.flex-column{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.flex-wrap-reverse{flex-wrap:wrap-reverse}.flex-column-reverse{flex-direction:column-reverse}.flex-row-reverse{flex-direction:row-reverse}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.self-baseline{align-self:baseline}.self-stretch{align-self:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.content-start{align-content:flex-start}.content-end{align-content:flex-end}.content-center{align-content:center}.content-between{align-content:space-between}.content-around{align-content:space-around}.content-stretch{align-content:stretch}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-last{order:99999}.flex-grow-0{flex-grow:0}.flex-grow-1{flex-grow:1}.flex-shrink-0{flex-shrink:0}.flex-shrink-1{flex-shrink:1}.fl{float:left}.fl,.fr{_display:inline}.fr{float:right}.fn{float:none}.sans-serif{font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif}.serif{font-family:georgia,times,serif}.system-sans-serif{font-family:sans-serif}.system-serif{font-family:serif}.code,code{font-family:Consolas,monaco,monospace}.courier{font-family:Courier Next,courier,monospace}.helvetica{font-family:helvetica neue,helvetica,sans-serif}.avenir{font-family:avenir next,avenir,sans-serif}.athelas{font-family:athelas,georgia,serif}.georgia{font-family:georgia,serif}.times{font-family:times,serif}.bodoni{font-family:Bodoni MT,serif}.calisto{font-family:Calisto MT,serif}.garamond{font-family:garamond,serif}.baskerville{font-family:baskerville,serif}.i{font-style:italic}.fs-normal{font-style:normal}.normal{font-weight:400}.b{font-weight:700}.fw1{font-weight:100}.fw2{font-weight:200}.fw3{font-weight:300}.fw4{font-weight:400}.fw5{font-weight:500}.fw6{font-weight:600}.fw7{font-weight:700}.fw8{font-weight:800}.fw9{font-weight:900}.input-reset{-webkit-appearance:none;-moz-appearance:none}.button-reset::-moz-focus-inner,.input-reset::-moz-focus-inner{border:0;padding:0}.h1{height:1rem}.h2{height:2rem}.h3{height:4rem}.h4{height:8rem}.h5{height:16rem}.h-25{height:25%}.h-50{height:50%}.h-75{height:75%}.h-100{height:100%}.min-h-100{min-height:100%}.vh-25{height:25vh}.vh-50{height:50vh}.vh-75{height:75vh}.vh-100{height:100vh}.min-vh-100{min-height:100vh}.h-auto{height:auto}.h-inherit{height:inherit}.tracked{letter-spacing:.1em}.tracked-tight{letter-spacing:-.05em}.tracked-mega{letter-spacing:.25em}.lh-solid{line-height:1}.lh-title{line-height:1.25}.lh-copy{line-height:1.5}.link{text-decoration:none}.link,.link:active,.link:focus,.link:hover,.link:link,.link:visited{transition:color .15s ease-in}.link:focus{outline:1px dotted currentColor}.list{list-style-type:none}.mw-100{max-width:100%}.mw1{max-width:1rem}.mw2{max-width:2rem}.mw3{max-width:4rem}.mw4{max-width:8rem}.mw5{max-width:16rem}.mw6{max-width:32rem}.mw7{max-width:48rem}.mw8{max-width:64rem}.mw9{max-width:96rem}.mw-none{max-width:none}.w1{width:1rem}.w2{width:2rem}.w3{width:4rem}.w4{width:8rem}.w5{width:16rem}.w-10{width:10%}.w-20{width:20%}.w-25{width:25%}.w-30{width:30%}.w-33{width:33%}.w-34{width:34%}.w-40{width:40%}.w-50{width:50%}.w-60{width:60%}.w-70{width:70%}.w-75{width:75%}.w-80{width:80%}.w-90{width:90%}.w-100{width:100%}.w-third{width:33.33333%}.w-two-thirds{width:66.66667%}.w-auto{width:auto}.overflow-visible{overflow:visible}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-auto{overflow:auto}.overflow-x-visible{overflow-x:visible}.overflow-x-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-visible{overflow-y:visible}.overflow-y-hidden{overflow-y:hidden}.overflow-y-scroll{overflow-y:scroll}.overflow-y-auto{overflow-y:auto}.static{position:static}.relative{position:relative}.absolute{position:absolute}.fixed{position:fixed}.o-100{opacity:1}.o-90{opacity:.9}.o-80{opacity:.8}.o-70{opacity:.7}.o-60{opacity:.6}.o-50{opacity:.5}.o-40{opacity:.4}.o-30{opacity:.3}.o-20{opacity:.2}.o-10{opacity:.1}.o-05{opacity:.05}.o-025{opacity:.025}.o-0{opacity:0}.rotate-45{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rotate-135{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rotate-225{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.rotate-315{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.black-90{color:rgba(0,0,0,.9)}.black-80{color:rgba(0,0,0,.8)}.black-70{color:rgba(0,0,0,.7)}.black-60{color:rgba(0,0,0,.6)}.black-50{color:rgba(0,0,0,.5)}.black-40{color:rgba(0,0,0,.4)}.black-30{color:rgba(0,0,0,.3)}.black-20{color:rgba(0,0,0,.2)}.black-10{color:rgba(0,0,0,.1)}.black-05{color:rgba(0,0,0,.05)}.white-90{color:hsla(0,0%,100%,.9)}.white-80{color:hsla(0,0%,100%,.8)}.white-70{color:hsla(0,0%,100%,.7)}.white-60{color:hsla(0,0%,100%,.6)}.white-50{color:hsla(0,0%,100%,.5)}.white-40{color:hsla(0,0%,100%,.4)}.white-30{color:hsla(0,0%,100%,.3)}.white-20{color:hsla(0,0%,100%,.2)}.white-10{color:hsla(0,0%,100%,.1)}.black{color:#000}.near-black{color:#111}.dark-gray{color:#333}.mid-gray{color:#555}.gray{color:#777}.silver{color:#999}.light-silver{color:#aaa}.moon-gray{color:#ccc}.light-gray{color:#eee}.near-white{color:#f4f4f4}.white{color:#fff}.dark-red{color:#e7040f}.red{color:#ff4136}.light-red{color:#ff725c}.orange{color:#ff6300}.gold{color:#ffb700}.yellow{color:gold}.light-yellow{color:#fbf1a9}.purple{color:#5e2ca5}.light-purple{color:#a463f2}.dark-pink{color:#d5008f}.hot-pink{color:#ff41b4}.pink{color:#ff80cc}.light-pink{color:#ffa3d7}.dark-green{color:#137752}.green{color:#19a974}.light-green{color:#9eebcf}.navy{color:#001b44}.dark-blue{color:#00449e}.blue{color:#357edd}.light-blue{color:#96ccff}.lightest-blue{color:#cdecff}.washed-blue{color:#f6fffe}.washed-green{color:#e8fdf5}.washed-yellow{color:#fffceb}.washed-red{color:#ffdfdf}.color-inherit{color:inherit}.bg-black-90{background-color:rgba(0,0,0,.9)}.bg-black-80{background-color:rgba(0,0,0,.8)}.bg-black-70{background-color:rgba(0,0,0,.7)}.bg-black-60{background-color:rgba(0,0,0,.6)}.bg-black-50{background-color:rgba(0,0,0,.5)}.bg-black-40{background-color:rgba(0,0,0,.4)}.bg-black-30{background-color:rgba(0,0,0,.3)}.bg-black-20{background-color:rgba(0,0,0,.2)}.bg-black-10{background-color:rgba(0,0,0,.1)}.bg-black-05{background-color:rgba(0,0,0,.05)}.bg-white-90{background-color:hsla(0,0%,100%,.9)}.bg-white-80{background-color:hsla(0,0%,100%,.8)}.bg-white-70{background-color:hsla(0,0%,100%,.7)}.bg-white-60{background-color:hsla(0,0%,100%,.6)}.bg-white-50{background-color:hsla(0,0%,100%,.5)}.bg-white-40{background-color:hsla(0,0%,100%,.4)}.bg-white-30{background-color:hsla(0,0%,100%,.3)}.bg-white-20{background-color:hsla(0,0%,100%,.2)}.bg-white-10{background-color:hsla(0,0%,100%,.1)}.bg-black{background-color:#000}.bg-near-black{background-color:#111}.bg-dark-gray{background-color:#333}.bg-mid-gray{background-color:#555}.bg-gray{background-color:#777}.bg-silver{background-color:#999}.bg-light-silver{background-color:#aaa}.bg-moon-gray{background-color:#ccc}.bg-light-gray{background-color:#eee}.bg-near-white{background-color:#f4f4f4}.bg-white{background-color:#fff}.bg-transparent{background-color:transparent}.bg-dark-red{background-color:#e7040f}.bg-red{background-color:#ff4136}.bg-light-red{background-color:#ff725c}.bg-orange{background-color:#ff6300}.bg-gold{background-color:#ffb700}.bg-yellow{background-color:gold}.bg-light-yellow{background-color:#fbf1a9}.bg-purple{background-color:#5e2ca5}.bg-light-purple{background-color:#a463f2}.bg-dark-pink{background-color:#d5008f}.bg-hot-pink{background-color:#ff41b4}.bg-pink{background-color:#ff80cc}.bg-light-pink{background-color:#ffa3d7}.bg-dark-green{background-color:#137752}.bg-green{background-color:#19a974}.bg-light-green{background-color:#9eebcf}.bg-navy{background-color:#001b44}.bg-dark-blue{background-color:#00449e}.bg-blue{background-color:#357edd}.bg-light-blue{background-color:#96ccff}.bg-lightest-blue{background-color:#cdecff}.bg-washed-blue{background-color:#f6fffe}.bg-washed-green{background-color:#e8fdf5}.bg-washed-yellow{background-color:#fffceb}.bg-washed-red{background-color:#ffdfdf}.bg-inherit{background-color:inherit}.hover-black:focus,.hover-black:hover{color:#000}.hover-near-black:focus,.hover-near-black:hover{color:#111}.hover-dark-gray:focus,.hover-dark-gray:hover{color:#333}.hover-mid-gray:focus,.hover-mid-gray:hover{color:#555}.hover-gray:focus,.hover-gray:hover{color:#777}.hover-silver:focus,.hover-silver:hover{color:#999}.hover-light-silver:focus,.hover-light-silver:hover{color:#aaa}.hover-moon-gray:focus,.hover-moon-gray:hover{color:#ccc}.hover-light-gray:focus,.hover-light-gray:hover{color:#eee}.hover-near-white:focus,.hover-near-white:hover{color:#f4f4f4}.hover-white:focus,.hover-white:hover{color:#fff}.hover-black-90:focus,.hover-black-90:hover{color:rgba(0,0,0,.9)}.hover-black-80:focus,.hover-black-80:hover{color:rgba(0,0,0,.8)}.hover-black-70:focus,.hover-black-70:hover{color:rgba(0,0,0,.7)}.hover-black-60:focus,.hover-black-60:hover{color:rgba(0,0,0,.6)}.hover-black-50:focus,.hover-black-50:hover{color:rgba(0,0,0,.5)}.hover-black-40:focus,.hover-black-40:hover{color:rgba(0,0,0,.4)}.hover-black-30:focus,.hover-black-30:hover{color:rgba(0,0,0,.3)}.hover-black-20:focus,.hover-black-20:hover{color:rgba(0,0,0,.2)}.hover-black-10:focus,.hover-black-10:hover{color:rgba(0,0,0,.1)}.hover-white-90:focus,.hover-white-90:hover{color:hsla(0,0%,100%,.9)}.hover-white-80:focus,.hover-white-80:hover{color:hsla(0,0%,100%,.8)}.hover-white-70:focus,.hover-white-70:hover{color:hsla(0,0%,100%,.7)}.hover-white-60:focus,.hover-white-60:hover{color:hsla(0,0%,100%,.6)}.hover-white-50:focus,.hover-white-50:hover{color:hsla(0,0%,100%,.5)}.hover-white-40:focus,.hover-white-40:hover{color:hsla(0,0%,100%,.4)}.hover-white-30:focus,.hover-white-30:hover{color:hsla(0,0%,100%,.3)}.hover-white-20:focus,.hover-white-20:hover{color:hsla(0,0%,100%,.2)}.hover-white-10:focus,.hover-white-10:hover{color:hsla(0,0%,100%,.1)}.hover-inherit:focus,.hover-inherit:hover{color:inherit}.hover-bg-black:focus,.hover-bg-black:hover{background-color:#000}.hover-bg-near-black:focus,.hover-bg-near-black:hover{background-color:#111}.hover-bg-dark-gray:focus,.hover-bg-dark-gray:hover{background-color:#333}.hover-bg-mid-gray:focus,.hover-bg-mid-gray:hover{background-color:#555}.hover-bg-gray:focus,.hover-bg-gray:hover{background-color:#777}.hover-bg-silver:focus,.hover-bg-silver:hover{background-color:#999}.hover-bg-light-silver:focus,.hover-bg-light-silver:hover{background-color:#aaa}.hover-bg-moon-gray:focus,.hover-bg-moon-gray:hover{background-color:#ccc}.hover-bg-light-gray:focus,.hover-bg-light-gray:hover{background-color:#eee}.hover-bg-near-white:focus,.hover-bg-near-white:hover{background-color:#f4f4f4}.hover-bg-white:focus,.hover-bg-white:hover{background-color:#fff}.hover-bg-transparent:focus,.hover-bg-transparent:hover{background-color:transparent}.hover-bg-black-90:focus,.hover-bg-black-90:hover{background-color:rgba(0,0,0,.9)}.hover-bg-black-80:focus,.hover-bg-black-80:hover{background-color:rgba(0,0,0,.8)}.hover-bg-black-70:focus,.hover-bg-black-70:hover{background-color:rgba(0,0,0,.7)}.hover-bg-black-60:focus,.hover-bg-black-60:hover{background-color:rgba(0,0,0,.6)}.hover-bg-black-50:focus,.hover-bg-black-50:hover{background-color:rgba(0,0,0,.5)}.hover-bg-black-40:focus,.hover-bg-black-40:hover{background-color:rgba(0,0,0,.4)}.hover-bg-black-30:focus,.hover-bg-black-30:hover{background-color:rgba(0,0,0,.3)}.hover-bg-black-20:focus,.hover-bg-black-20:hover{background-color:rgba(0,0,0,.2)}.hover-bg-black-10:focus,.hover-bg-black-10:hover{background-color:rgba(0,0,0,.1)}.hover-bg-white-90:focus,.hover-bg-white-90:hover{background-color:hsla(0,0%,100%,.9)}.hover-bg-white-80:focus,.hover-bg-white-80:hover{background-color:hsla(0,0%,100%,.8)}.hover-bg-white-70:focus,.hover-bg-white-70:hover{background-color:hsla(0,0%,100%,.7)}.hover-bg-white-60:focus,.hover-bg-white-60:hover{background-color:hsla(0,0%,100%,.6)}.hover-bg-white-50:focus,.hover-bg-white-50:hover{background-color:hsla(0,0%,100%,.5)}.hover-bg-white-40:focus,.hover-bg-white-40:hover{background-color:hsla(0,0%,100%,.4)}.hover-bg-white-30:focus,.hover-bg-white-30:hover{background-color:hsla(0,0%,100%,.3)}.hover-bg-white-20:focus,.hover-bg-white-20:hover{background-color:hsla(0,0%,100%,.2)}.hover-bg-white-10:focus,.hover-bg-white-10:hover{background-color:hsla(0,0%,100%,.1)}.hover-dark-red:focus,.hover-dark-red:hover{color:#e7040f}.hover-red:focus,.hover-red:hover{color:#ff4136}.hover-light-red:focus,.hover-light-red:hover{color:#ff725c}.hover-orange:focus,.hover-orange:hover{color:#ff6300}.hover-gold:focus,.hover-gold:hover{color:#ffb700}.hover-yellow:focus,.hover-yellow:hover{color:gold}.hover-light-yellow:focus,.hover-light-yellow:hover{color:#fbf1a9}.hover-purple:focus,.hover-purple:hover{color:#5e2ca5}.hover-light-purple:focus,.hover-light-purple:hover{color:#a463f2}.hover-dark-pink:focus,.hover-dark-pink:hover{color:#d5008f}.hover-hot-pink:focus,.hover-hot-pink:hover{color:#ff41b4}.hover-pink:focus,.hover-pink:hover{color:#ff80cc}.hover-light-pink:focus,.hover-light-pink:hover{color:#ffa3d7}.hover-dark-green:focus,.hover-dark-green:hover{color:#137752}.hover-green:focus,.hover-green:hover{color:#19a974}.hover-light-green:focus,.hover-light-green:hover{color:#9eebcf}.hover-navy:focus,.hover-navy:hover{color:#001b44}.hover-dark-blue:focus,.hover-dark-blue:hover{color:#00449e}.hover-blue:focus,.hover-blue:hover{color:#357edd}.hover-light-blue:focus,.hover-light-blue:hover{color:#96ccff}.hover-lightest-blue:focus,.hover-lightest-blue:hover{color:#cdecff}.hover-washed-blue:focus,.hover-washed-blue:hover{color:#f6fffe}.hover-washed-green:focus,.hover-washed-green:hover{color:#e8fdf5}.hover-washed-yellow:focus,.hover-washed-yellow:hover{color:#fffceb}.hover-washed-red:focus,.hover-washed-red:hover{color:#ffdfdf}.hover-bg-dark-red:focus,.hover-bg-dark-red:hover{background-color:#e7040f}.hover-bg-red:focus,.hover-bg-red:hover{background-color:#ff4136}.hover-bg-light-red:focus,.hover-bg-light-red:hover{background-color:#ff725c}.hover-bg-orange:focus,.hover-bg-orange:hover{background-color:#ff6300}.hover-bg-gold:focus,.hover-bg-gold:hover{background-color:#ffb700}.hover-bg-yellow:focus,.hover-bg-yellow:hover{background-color:gold}.hover-bg-light-yellow:focus,.hover-bg-light-yellow:hover{background-color:#fbf1a9}.hover-bg-purple:focus,.hover-bg-purple:hover{background-color:#5e2ca5}.hover-bg-light-purple:focus,.hover-bg-light-purple:hover{background-color:#a463f2}.hover-bg-dark-pink:focus,.hover-bg-dark-pink:hover{background-color:#d5008f}.hover-bg-hot-pink:focus,.hover-bg-hot-pink:hover{background-color:#ff41b4}.hover-bg-pink:focus,.hover-bg-pink:hover{background-color:#ff80cc}.hover-bg-light-pink:focus,.hover-bg-light-pink:hover{background-color:#ffa3d7}.hover-bg-dark-green:focus,.hover-bg-dark-green:hover{background-color:#137752}.hover-bg-green:focus,.hover-bg-green:hover{background-color:#19a974}.hover-bg-light-green:focus,.hover-bg-light-green:hover{background-color:#9eebcf}.hover-bg-navy:focus,.hover-bg-navy:hover{background-color:#001b44}.hover-bg-dark-blue:focus,.hover-bg-dark-blue:hover{background-color:#00449e}.hover-bg-blue:focus,.hover-bg-blue:hover{background-color:#357edd}.hover-bg-light-blue:focus,.hover-bg-light-blue:hover{background-color:#96ccff}.hover-bg-lightest-blue:focus,.hover-bg-lightest-blue:hover{background-color:#cdecff}.hover-bg-washed-blue:focus,.hover-bg-washed-blue:hover{background-color:#f6fffe}.hover-bg-washed-green:focus,.hover-bg-washed-green:hover{background-color:#e8fdf5}.hover-bg-washed-yellow:focus,.hover-bg-washed-yellow:hover{background-color:#fffceb}.hover-bg-washed-red:focus,.hover-bg-washed-red:hover{background-color:#ffdfdf}.hover-bg-inherit:focus,.hover-bg-inherit:hover{background-color:inherit}.pa0{padding:0}.pa1{padding:.25rem}.pa2{padding:.5rem}.pa3{padding:1rem}.pa4{padding:2rem}.pa5{padding:4rem}.pa6{padding:8rem}.pa7{padding:16rem}.pl0{padding-left:0}.pl1{padding-left:.25rem}.pl2{padding-left:.5rem}.pl3{padding-left:1rem}.pl4{padding-left:2rem}.pl5{padding-left:4rem}.pl6{padding-left:8rem}.pl7{padding-left:16rem}.pr0{padding-right:0}.pr1{padding-right:.25rem}.pr2{padding-right:.5rem}.pr3{padding-right:1rem}.pr4{padding-right:2rem}.pr5{padding-right:4rem}.pr6{padding-right:8rem}.pr7{padding-right:16rem}.pb0{padding-bottom:0}.pb1{padding-bottom:.25rem}.pb2{padding-bottom:.5rem}.pb3{padding-bottom:1rem}.pb4{padding-bottom:2rem}.pb5{padding-bottom:4rem}.pb6{padding-bottom:8rem}.pb7{padding-bottom:16rem}.pt0{padding-top:0}.pt1{padding-top:.25rem}.pt2{padding-top:.5rem}.pt3{padding-top:1rem}.pt4{padding-top:2rem}.pt5{padding-top:4rem}.pt6{padding-top:8rem}.pt7{padding-top:16rem}.pv0{padding-top:0;padding-bottom:0}.pv1{padding-top:.25rem;padding-bottom:.25rem}.pv2{padding-top:.5rem;padding-bottom:.5rem}.pv3{padding-top:1rem;padding-bottom:1rem}.pv4{padding-top:2rem;padding-bottom:2rem}.pv5{padding-top:4rem;padding-bottom:4rem}.pv6{padding-top:8rem;padding-bottom:8rem}.pv7{padding-top:16rem;padding-bottom:16rem}.ph0{padding-left:0;padding-right:0}.ph1{padding-left:.25rem;padding-right:.25rem}.ph2{padding-left:.5rem;padding-right:.5rem}.ph3{padding-left:1rem;padding-right:1rem}.ph4{padding-left:2rem;padding-right:2rem}.ph5{padding-left:4rem;padding-right:4rem}.ph6{padding-left:8rem;padding-right:8rem}.ph7{padding-left:16rem;padding-right:16rem}.ma0{margin:0}.ma1{margin:.25rem}.ma2{margin:.5rem}.ma3{margin:1rem}.ma4{margin:2rem}.ma5{margin:4rem}.ma6{margin:8rem}.ma7{margin:16rem}.ml0{margin-left:0}.ml1{margin-left:.25rem}.ml2{margin-left:.5rem}.ml3{margin-left:1rem}.ml4{margin-left:2rem}.ml5{margin-left:4rem}.ml6{margin-left:8rem}.ml7{margin-left:16rem}.mr0{margin-right:0}.mr1{margin-right:.25rem}.mr2{margin-right:.5rem}.mr3{margin-right:1rem}.mr4{margin-right:2rem}.mr5{margin-right:4rem}.mr6{margin-right:8rem}.mr7{margin-right:16rem}.mb0{margin-bottom:0}.mb1{margin-bottom:.25rem}.mb2{margin-bottom:.5rem}.mb3{margin-bottom:1rem}.mb4{margin-bottom:2rem}.mb5{margin-bottom:4rem}.mb6{margin-bottom:8rem}.mb7{margin-bottom:16rem}.mt0{margin-top:0}.mt1{margin-top:.25rem}.mt2{margin-top:.5rem}.mt3{margin-top:1rem}.mt4{margin-top:2rem}.mt5{margin-top:4rem}.mt6{margin-top:8rem}.mt7{margin-top:16rem}.mv0{margin-top:0;margin-bottom:0}.mv1{margin-top:.25rem;margin-bottom:.25rem}.mv2{margin-top:.5rem;margin-bottom:.5rem}.mv3{margin-top:1rem;margin-bottom:1rem}.mv4{margin-top:2rem;margin-bottom:2rem}.mv5{margin-top:4rem;margin-bottom:4rem}.mv6{margin-top:8rem;margin-bottom:8rem}.mv7{margin-top:16rem;margin-bottom:16rem}.mh0{margin-left:0;margin-right:0}.mh1{margin-left:.25rem;margin-right:.25rem}.mh2{margin-left:.5rem;margin-right:.5rem}.mh3{margin-left:1rem;margin-right:1rem}.mh4{margin-left:2rem;margin-right:2rem}.mh5{margin-left:4rem;margin-right:4rem}.mh6{margin-left:8rem;margin-right:8rem}.mh7{margin-left:16rem;margin-right:16rem}.na1{margin:-.25rem}.na2{margin:-.5rem}.na3{margin:-1rem}.na4{margin:-2rem}.na5{margin:-4rem}.na6{margin:-8rem}.na7{margin:-16rem}.nl1{margin-left:-.25rem}.nl2{margin-left:-.5rem}.nl3{margin-left:-1rem}.nl4{margin-left:-2rem}.nl5{margin-left:-4rem}.nl6{margin-left:-8rem}.nl7{margin-left:-16rem}.nr1{margin-right:-.25rem}.nr2{margin-right:-.5rem}.nr3{margin-right:-1rem}.nr4{margin-right:-2rem}.nr5{margin-right:-4rem}.nr6{margin-right:-8rem}.nr7{margin-right:-16rem}.nb1{margin-bottom:-.25rem}.nb2{margin-bottom:-.5rem}.nb3{margin-bottom:-1rem}.nb4{margin-bottom:-2rem}.nb5{margin-bottom:-4rem}.nb6{margin-bottom:-8rem}.nb7{margin-bottom:-16rem}.nt1{margin-top:-.25rem}.nt2{margin-top:-.5rem}.nt3{margin-top:-1rem}.nt4{margin-top:-2rem}.nt5{margin-top:-4rem}.nt6{margin-top:-8rem}.nt7{margin-top:-16rem}.collapse{border-collapse:collapse;border-spacing:0}.striped--light-silver:nth-child(odd){background-color:#aaa}.striped--moon-gray:nth-child(odd){background-color:#ccc}.striped--light-gray:nth-child(odd){background-color:#eee}.striped--near-white:nth-child(odd){background-color:#f4f4f4}.stripe-light:nth-child(odd){background-color:hsla(0,0%,100%,.1)}.stripe-dark:nth-child(odd){background-color:rgba(0,0,0,.1)}.strike{text-decoration:line-through}.underline{text-decoration:underline}.no-underline{text-decoration:none}.tl{text-align:left}.tr{text-align:right}.tc{text-align:center}.tj{text-align:justify}.ttc{text-transform:capitalize}.ttl{text-transform:lowercase}.ttu{text-transform:uppercase}.ttn{text-transform:none}.f-6,.f-headline{font-size:6rem}.f-5,.f-subheadline{font-size:5rem}.f1{font-size:3rem}.f2{font-size:2.25rem}.f3{font-size:1.5rem}.f4{font-size:1.25rem}.f5{font-size:1rem}.f6{font-size:.875rem}.f7{font-size:.75rem}.measure{max-width:30em}.measure-wide{max-width:34em}.measure-narrow{max-width:20em}.indent{text-indent:1em;margin-top:0;margin-bottom:0}.small-caps{font-variant:small-caps}.truncate{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.overflow-container{overflow-y:scroll}.center{margin-left:auto}.center,.mr-auto{margin-right:auto}.ml-auto{margin-left:auto}.clip{position:fixed!important;_position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ws-normal{white-space:normal}.nowrap{white-space:nowrap}.pre{white-space:pre}.v-base{vertical-align:baseline}.v-mid{vertical-align:middle}.v-top{vertical-align:top}.v-btm{vertical-align:bottom}.dim{opacity:1}.dim,.dim:focus,.dim:hover{transition:opacity .15s ease-in}.dim:focus,.dim:hover{opacity:.5}.dim:active{opacity:.8;transition:opacity .15s ease-out}.glow,.glow:focus,.glow:hover{transition:opacity .15s ease-in}.glow:focus,.glow:hover{opacity:1}.hide-child .child{opacity:0;transition:opacity .15s ease-in}.hide-child:active .child,.hide-child:focus .child,.hide-child:hover .child{opacity:1;transition:opacity .15s ease-in}.underline-hover:focus,.underline-hover:hover{text-decoration:underline}.grow{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.grow:focus,.grow:hover{-webkit-transform:scale(1.05);transform:scale(1.05)}.grow:active{-webkit-transform:scale(.9);transform:scale(.9)}.grow-large{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);transition:-webkit-transform .25s ease-in-out;transition:transform .25s ease-in-out;transition:transform .25s ease-in-out,-webkit-transform .25s ease-in-out}.grow-large:focus,.grow-large:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.grow-large:active{-webkit-transform:scale(.95);transform:scale(.95)}.pointer:hover,.shadow-hover{cursor:pointer}.shadow-hover{position:relative;transition:all .5s cubic-bezier(.165,.84,.44,1)}.shadow-hover:after{content:"";box-shadow:0 0 16px 2px rgba(0,0,0,.2);border-radius:inherit;opacity:0;position:absolute;top:0;left:0;width:100%;height:100%;z-index:-1;transition:opacity .5s cubic-bezier(.165,.84,.44,1)}.shadow-hover:focus:after,.shadow-hover:hover:after{opacity:1}.bg-animate,.bg-animate:focus,.bg-animate:hover{transition:background-color .15s ease-in-out}.z-0{z-index:0}.z-1{z-index:1}.z-2{z-index:2}.z-3{z-index:3}.z-4{z-index:4}.z-5{z-index:5}.z-999{z-index:999}.z-9999{z-index:9999}.z-max{z-index:2147483647}.z-inherit{z-index:inherit}.z-initial{z-index:auto}.z-unset{z-index:unset}.nested-copy-line-height ol,.nested-copy-line-height p,.nested-copy-line-height ul{line-height:1.5}.nested-headline-line-height h1,.nested-headline-line-height h2,.nested-headline-line-height h3,.nested-headline-line-height h4,.nested-headline-line-height h5,.nested-headline-line-height h6{line-height:1.25}.nested-list-reset ol,.nested-list-reset ul{padding-left:0;margin-left:0;list-style-type:none}.nested-copy-indent p+p{text-indent:1em;margin-top:0;margin-bottom:0}.nested-copy-separator p+p{margin-top:1.5em}.nested-img img{width:100%;max-width:100%;display:block}.nested-links a{color:#357edd;transition:color .15s ease-in}.nested-links a:focus,.nested-links a:hover{color:#96ccff;transition:color .15s ease-in}.debug *{outline:1px solid gold}.debug-white *{outline:1px solid #fff}.debug-black *{outline:1px solid #000}.debug-grid{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAFElEQVR4AWPAC97/9x0eCsAEPgwAVLshdpENIxcAAAAASUVORK5CYII=) repeat 0 0}.debug-grid-16{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMklEQVR4AWOgCLz/b0epAa6UGuBOqQHOQHLUgFEDnAbcBZ4UGwDOkiCnkIhdgNgNxAYAiYlD+8sEuo8AAAAASUVORK5CYII=) repeat 0 0}.debug-grid-8-solid{background:#fff url(data:image/gif;base64,R0lGODdhCAAIAPEAAADw/wDx/////wAAACwAAAAACAAIAAACDZQvgaeb/lxbAIKA8y0AOw==) repeat 0 0}.debug-grid-16-solid{background:#fff url(data:image/gif;base64,R0lGODdhEAAQAPEAAADw/wDx/xXy/////ywAAAAAEAAQAAACIZyPKckYDQFsb6ZqD85jZ2+BkwiRFKehhqQCQgDHcgwEBQA7) repeat 0 0}@media screen and (min-width:30em){.aspect-ratio-ns{height:0;position:relative}.aspect-ratio--16x9-ns{padding-bottom:56.25%}.aspect-ratio--9x16-ns{padding-bottom:177.77%}.aspect-ratio--4x3-ns{padding-bottom:75%}.aspect-ratio--3x4-ns{padding-bottom:133.33%}.aspect-ratio--6x4-ns{padding-bottom:66.6%}.aspect-ratio--4x6-ns{padding-bottom:150%}.aspect-ratio--8x5-ns{padding-bottom:62.5%}.aspect-ratio--5x8-ns{padding-bottom:160%}.aspect-ratio--7x5-ns{padding-bottom:71.42%}.aspect-ratio--5x7-ns{padding-bottom:140%}.aspect-ratio--1x1-ns{padding-bottom:100%}.aspect-ratio--object-ns{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:100}.cover-ns{background-size:cover!important}.contain-ns{background-size:contain!important}.bg-center-ns{background-position:50%}.bg-center-ns,.bg-top-ns{background-repeat:no-repeat}.bg-top-ns{background-position:top}.bg-right-ns{background-position:100%}.bg-bottom-ns,.bg-right-ns{background-repeat:no-repeat}.bg-bottom-ns{background-position:bottom}.bg-left-ns{background-repeat:no-repeat;background-position:0}.outline-ns{outline:1px solid}.outline-transparent-ns{outline:1px solid transparent}.outline-0-ns{outline:0}.ba-ns{border-style:solid;border-width:1px}.bt-ns{border-top-style:solid;border-top-width:1px}.br-ns{border-right-style:solid;border-right-width:1px}.bb-ns{border-bottom-style:solid;border-bottom-width:1px}.bl-ns{border-left-style:solid;border-left-width:1px}.bn-ns{border-style:none;border-width:0}.br0-ns{border-radius:0}.br1-ns{border-radius:.125rem}.br2-ns{border-radius:.25rem}.br3-ns{border-radius:.5rem}.br4-ns{border-radius:1rem}.br-100-ns{border-radius:100%}.br-pill-ns{border-radius:9999px}.br--bottom-ns{border-top-left-radius:0;border-top-right-radius:0}.br--top-ns{border-bottom-right-radius:0}.br--right-ns,.br--top-ns{border-bottom-left-radius:0}.br--right-ns{border-top-left-radius:0}.br--left-ns{border-top-right-radius:0;border-bottom-right-radius:0}.b--dotted-ns{border-style:dotted}.b--dashed-ns{border-style:dashed}.b--solid-ns{border-style:solid}.b--none-ns{border-style:none}.bw0-ns{border-width:0}.bw1-ns{border-width:.125rem}.bw2-ns{border-width:.25rem}.bw3-ns{border-width:.5rem}.bw4-ns{border-width:1rem}.bw5-ns{border-width:2rem}.bt-0-ns{border-top-width:0}.br-0-ns{border-right-width:0}.bb-0-ns{border-bottom-width:0}.bl-0-ns{border-left-width:0}.shadow-1-ns{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2-ns{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3-ns{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4-ns{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5-ns{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}.top-0-ns{top:0}.left-0-ns{left:0}.right-0-ns{right:0}.bottom-0-ns{bottom:0}.top-1-ns{top:1rem}.left-1-ns{left:1rem}.right-1-ns{right:1rem}.bottom-1-ns{bottom:1rem}.top-2-ns{top:2rem}.left-2-ns{left:2rem}.right-2-ns{right:2rem}.bottom-2-ns{bottom:2rem}.top--1-ns{top:-1rem}.right--1-ns{right:-1rem}.bottom--1-ns{bottom:-1rem}.left--1-ns{left:-1rem}.top--2-ns{top:-2rem}.right--2-ns{right:-2rem}.bottom--2-ns{bottom:-2rem}.left--2-ns{left:-2rem}.absolute--fill-ns{top:0;right:0;bottom:0;left:0}.cl-ns{clear:left}.cr-ns{clear:right}.cb-ns{clear:both}.cn-ns{clear:none}.dn-ns{display:none}.di-ns{display:inline}.db-ns{display:block}.dib-ns{display:inline-block}.dit-ns{display:inline-table}.dt-ns{display:table}.dtc-ns{display:table-cell}.dt-row-ns{display:table-row}.dt-row-group-ns{display:table-row-group}.dt-column-ns{display:table-column}.dt-column-group-ns{display:table-column-group}.dt--fixed-ns{table-layout:fixed;width:100%}.flex-ns{display:flex}.inline-flex-ns{display:inline-flex}.flex-auto-ns{flex:1 1 auto;min-width:0;min-height:0}.flex-none-ns{flex:none}.flex-column-ns{flex-direction:column}.flex-row-ns{flex-direction:row}.flex-wrap-ns{flex-wrap:wrap}.flex-nowrap-ns{flex-wrap:nowrap}.flex-wrap-reverse-ns{flex-wrap:wrap-reverse}.flex-column-reverse-ns{flex-direction:column-reverse}.flex-row-reverse-ns{flex-direction:row-reverse}.items-start-ns{align-items:flex-start}.items-end-ns{align-items:flex-end}.items-center-ns{align-items:center}.items-baseline-ns{align-items:baseline}.items-stretch-ns{align-items:stretch}.self-start-ns{align-self:flex-start}.self-end-ns{align-self:flex-end}.self-center-ns{align-self:center}.self-baseline-ns{align-self:baseline}.self-stretch-ns{align-self:stretch}.justify-start-ns{justify-content:flex-start}.justify-end-ns{justify-content:flex-end}.justify-center-ns{justify-content:center}.justify-between-ns{justify-content:space-between}.justify-around-ns{justify-content:space-around}.content-start-ns{align-content:flex-start}.content-end-ns{align-content:flex-end}.content-center-ns{align-content:center}.content-between-ns{align-content:space-between}.content-around-ns{align-content:space-around}.content-stretch-ns{align-content:stretch}.order-0-ns{order:0}.order-1-ns{order:1}.order-2-ns{order:2}.order-3-ns{order:3}.order-4-ns{order:4}.order-5-ns{order:5}.order-6-ns{order:6}.order-7-ns{order:7}.order-8-ns{order:8}.order-last-ns{order:99999}.flex-grow-0-ns{flex-grow:0}.flex-grow-1-ns{flex-grow:1}.flex-shrink-0-ns{flex-shrink:0}.flex-shrink-1-ns{flex-shrink:1}.fl-ns{float:left}.fl-ns,.fr-ns{_display:inline}.fr-ns{float:right}.fn-ns{float:none}.i-ns{font-style:italic}.fs-normal-ns{font-style:normal}.normal-ns{font-weight:400}.b-ns{font-weight:700}.fw1-ns{font-weight:100}.fw2-ns{font-weight:200}.fw3-ns{font-weight:300}.fw4-ns{font-weight:400}.fw5-ns{font-weight:500}.fw6-ns{font-weight:600}.fw7-ns{font-weight:700}.fw8-ns{font-weight:800}.fw9-ns{font-weight:900}.h1-ns{height:1rem}.h2-ns{height:2rem}.h3-ns{height:4rem}.h4-ns{height:8rem}.h5-ns{height:16rem}.h-25-ns{height:25%}.h-50-ns{height:50%}.h-75-ns{height:75%}.h-100-ns{height:100%}.min-h-100-ns{min-height:100%}.vh-25-ns{height:25vh}.vh-50-ns{height:50vh}.vh-75-ns{height:75vh}.vh-100-ns{height:100vh}.min-vh-100-ns{min-height:100vh}.h-auto-ns{height:auto}.h-inherit-ns{height:inherit}.tracked-ns{letter-spacing:.1em}.tracked-tight-ns{letter-spacing:-.05em}.tracked-mega-ns{letter-spacing:.25em}.lh-solid-ns{line-height:1}.lh-title-ns{line-height:1.25}.lh-copy-ns{line-height:1.5}.mw-100-ns{max-width:100%}.mw1-ns{max-width:1rem}.mw2-ns{max-width:2rem}.mw3-ns{max-width:4rem}.mw4-ns{max-width:8rem}.mw5-ns{max-width:16rem}.mw6-ns{max-width:32rem}.mw7-ns{max-width:48rem}.mw8-ns{max-width:64rem}.mw9-ns{max-width:96rem}.mw-none-ns{max-width:none}.w1-ns{width:1rem}.w2-ns{width:2rem}.w3-ns{width:4rem}.w4-ns{width:8rem}.w5-ns{width:16rem}.w-10-ns{width:10%}.w-20-ns{width:20%}.w-25-ns{width:25%}.w-30-ns{width:30%}.w-33-ns{width:33%}.w-34-ns{width:34%}.w-40-ns{width:40%}.w-50-ns{width:50%}.w-60-ns{width:60%}.w-70-ns{width:70%}.w-75-ns{width:75%}.w-80-ns{width:80%}.w-90-ns{width:90%}.w-100-ns{width:100%}.w-third-ns{width:33.33333%}.w-two-thirds-ns{width:66.66667%}.w-auto-ns{width:auto}.overflow-visible-ns{overflow:visible}.overflow-hidden-ns{overflow:hidden}.overflow-scroll-ns{overflow:scroll}.overflow-auto-ns{overflow:auto}.overflow-x-visible-ns{overflow-x:visible}.overflow-x-hidden-ns{overflow-x:hidden}.overflow-x-scroll-ns{overflow-x:scroll}.overflow-x-auto-ns{overflow-x:auto}.overflow-y-visible-ns{overflow-y:visible}.overflow-y-hidden-ns{overflow-y:hidden}.overflow-y-scroll-ns{overflow-y:scroll}.overflow-y-auto-ns{overflow-y:auto}.static-ns{position:static}.relative-ns{position:relative}.absolute-ns{position:absolute}.fixed-ns{position:fixed}.rotate-45-ns{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.rotate-90-ns{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rotate-135-ns{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.rotate-180-ns{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rotate-225-ns{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.rotate-270-ns{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.rotate-315-ns{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.pa0-ns{padding:0}.pa1-ns{padding:.25rem}.pa2-ns{padding:.5rem}.pa3-ns{padding:1rem}.pa4-ns{padding:2rem}.pa5-ns{padding:4rem}.pa6-ns{padding:8rem}.pa7-ns{padding:16rem}.pl0-ns{padding-left:0}.pl1-ns{padding-left:.25rem}.pl2-ns{padding-left:.5rem}.pl3-ns{padding-left:1rem}.pl4-ns{padding-left:2rem}.pl5-ns{padding-left:4rem}.pl6-ns{padding-left:8rem}.pl7-ns{padding-left:16rem}.pr0-ns{padding-right:0}.pr1-ns{padding-right:.25rem}.pr2-ns{padding-right:.5rem}.pr3-ns{padding-right:1rem}.pr4-ns{padding-right:2rem}.pr5-ns{padding-right:4rem}.pr6-ns{padding-right:8rem}.pr7-ns{padding-right:16rem}.pb0-ns{padding-bottom:0}.pb1-ns{padding-bottom:.25rem}.pb2-ns{padding-bottom:.5rem}.pb3-ns{padding-bottom:1rem}.pb4-ns{padding-bottom:2rem}.pb5-ns{padding-bottom:4rem}.pb6-ns{padding-bottom:8rem}.pb7-ns{padding-bottom:16rem}.pt0-ns{padding-top:0}.pt1-ns{padding-top:.25rem}.pt2-ns{padding-top:.5rem}.pt3-ns{padding-top:1rem}.pt4-ns{padding-top:2rem}.pt5-ns{padding-top:4rem}.pt6-ns{padding-top:8rem}.pt7-ns{padding-top:16rem}.pv0-ns{padding-top:0;padding-bottom:0}.pv1-ns{padding-top:.25rem;padding-bottom:.25rem}.pv2-ns{padding-top:.5rem;padding-bottom:.5rem}.pv3-ns{padding-top:1rem;padding-bottom:1rem}.pv4-ns{padding-top:2rem;padding-bottom:2rem}.pv5-ns{padding-top:4rem;padding-bottom:4rem}.pv6-ns{padding-top:8rem;padding-bottom:8rem}.pv7-ns{padding-top:16rem;padding-bottom:16rem}.ph0-ns{padding-left:0;padding-right:0}.ph1-ns{padding-left:.25rem;padding-right:.25rem}.ph2-ns{padding-left:.5rem;padding-right:.5rem}.ph3-ns{padding-left:1rem;padding-right:1rem}.ph4-ns{padding-left:2rem;padding-right:2rem}.ph5-ns{padding-left:4rem;padding-right:4rem}.ph6-ns{padding-left:8rem;padding-right:8rem}.ph7-ns{padding-left:16rem;padding-right:16rem}.ma0-ns{margin:0}.ma1-ns{margin:.25rem}.ma2-ns{margin:.5rem}.ma3-ns{margin:1rem}.ma4-ns{margin:2rem}.ma5-ns{margin:4rem}.ma6-ns{margin:8rem}.ma7-ns{margin:16rem}.ml0-ns{margin-left:0}.ml1-ns{margin-left:.25rem}.ml2-ns{margin-left:.5rem}.ml3-ns{margin-left:1rem}.ml4-ns{margin-left:2rem}.ml5-ns{margin-left:4rem}.ml6-ns{margin-left:8rem}.ml7-ns{margin-left:16rem}.mr0-ns{margin-right:0}.mr1-ns{margin-right:.25rem}.mr2-ns{margin-right:.5rem}.mr3-ns{margin-right:1rem}.mr4-ns{margin-right:2rem}.mr5-ns{margin-right:4rem}.mr6-ns{margin-right:8rem}.mr7-ns{margin-right:16rem}.mb0-ns{margin-bottom:0}.mb1-ns{margin-bottom:.25rem}.mb2-ns{margin-bottom:.5rem}.mb3-ns{margin-bottom:1rem}.mb4-ns{margin-bottom:2rem}.mb5-ns{margin-bottom:4rem}.mb6-ns{margin-bottom:8rem}.mb7-ns{margin-bottom:16rem}.mt0-ns{margin-top:0}.mt1-ns{margin-top:.25rem}.mt2-ns{margin-top:.5rem}.mt3-ns{margin-top:1rem}.mt4-ns{margin-top:2rem}.mt5-ns{margin-top:4rem}.mt6-ns{margin-top:8rem}.mt7-ns{margin-top:16rem}.mv0-ns{margin-top:0;margin-bottom:0}.mv1-ns{margin-top:.25rem;margin-bottom:.25rem}.mv2-ns{margin-top:.5rem;margin-bottom:.5rem}.mv3-ns{margin-top:1rem;margin-bottom:1rem}.mv4-ns{margin-top:2rem;margin-bottom:2rem}.mv5-ns{margin-top:4rem;margin-bottom:4rem}.mv6-ns{margin-top:8rem;margin-bottom:8rem}.mv7-ns{margin-top:16rem;margin-bottom:16rem}.mh0-ns{margin-left:0;margin-right:0}.mh1-ns{margin-left:.25rem;margin-right:.25rem}.mh2-ns{margin-left:.5rem;margin-right:.5rem}.mh3-ns{margin-left:1rem;margin-right:1rem}.mh4-ns{margin-left:2rem;margin-right:2rem}.mh5-ns{margin-left:4rem;margin-right:4rem}.mh6-ns{margin-left:8rem;margin-right:8rem}.mh7-ns{margin-left:16rem;margin-right:16rem}.na1-ns{margin:-.25rem}.na2-ns{margin:-.5rem}.na3-ns{margin:-1rem}.na4-ns{margin:-2rem}.na5-ns{margin:-4rem}.na6-ns{margin:-8rem}.na7-ns{margin:-16rem}.nl1-ns{margin-left:-.25rem}.nl2-ns{margin-left:-.5rem}.nl3-ns{margin-left:-1rem}.nl4-ns{margin-left:-2rem}.nl5-ns{margin-left:-4rem}.nl6-ns{margin-left:-8rem}.nl7-ns{margin-left:-16rem}.nr1-ns{margin-right:-.25rem}.nr2-ns{margin-right:-.5rem}.nr3-ns{margin-right:-1rem}.nr4-ns{margin-right:-2rem}.nr5-ns{margin-right:-4rem}.nr6-ns{margin-right:-8rem}.nr7-ns{margin-right:-16rem}.nb1-ns{margin-bottom:-.25rem}.nb2-ns{margin-bottom:-.5rem}.nb3-ns{margin-bottom:-1rem}.nb4-ns{margin-bottom:-2rem}.nb5-ns{margin-bottom:-4rem}.nb6-ns{margin-bottom:-8rem}.nb7-ns{margin-bottom:-16rem}.nt1-ns{margin-top:-.25rem}.nt2-ns{margin-top:-.5rem}.nt3-ns{margin-top:-1rem}.nt4-ns{margin-top:-2rem}.nt5-ns{margin-top:-4rem}.nt6-ns{margin-top:-8rem}.nt7-ns{margin-top:-16rem}.strike-ns{text-decoration:line-through}.underline-ns{text-decoration:underline}.no-underline-ns{text-decoration:none}.tl-ns{text-align:left}.tr-ns{text-align:right}.tc-ns{text-align:center}.tj-ns{text-align:justify}.ttc-ns{text-transform:capitalize}.ttl-ns{text-transform:lowercase}.ttu-ns{text-transform:uppercase}.ttn-ns{text-transform:none}.f-6-ns,.f-headline-ns{font-size:6rem}.f-5-ns,.f-subheadline-ns{font-size:5rem}.f1-ns{font-size:3rem}.f2-ns{font-size:2.25rem}.f3-ns{font-size:1.5rem}.f4-ns{font-size:1.25rem}.f5-ns{font-size:1rem}.f6-ns{font-size:.875rem}.f7-ns{font-size:.75rem}.measure-ns{max-width:30em}.measure-wide-ns{max-width:34em}.measure-narrow-ns{max-width:20em}.indent-ns{text-indent:1em;margin-top:0;margin-bottom:0}.small-caps-ns{font-variant:small-caps}.truncate-ns{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.center-ns{margin-left:auto}.center-ns,.mr-auto-ns{margin-right:auto}.ml-auto-ns{margin-left:auto}.clip-ns{position:fixed!important;_position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ws-normal-ns{white-space:normal}.nowrap-ns{white-space:nowrap}.pre-ns{white-space:pre}.v-base-ns{vertical-align:baseline}.v-mid-ns{vertical-align:middle}.v-top-ns{vertical-align:top}.v-btm-ns{vertical-align:bottom}}@media screen and (min-width:30em) and (max-width:60em){.aspect-ratio-m{height:0;position:relative}.aspect-ratio--16x9-m{padding-bottom:56.25%}.aspect-ratio--9x16-m{padding-bottom:177.77%}.aspect-ratio--4x3-m{padding-bottom:75%}.aspect-ratio--3x4-m{padding-bottom:133.33%}.aspect-ratio--6x4-m{padding-bottom:66.6%}.aspect-ratio--4x6-m{padding-bottom:150%}.aspect-ratio--8x5-m{padding-bottom:62.5%}.aspect-ratio--5x8-m{padding-bottom:160%}.aspect-ratio--7x5-m{padding-bottom:71.42%}.aspect-ratio--5x7-m{padding-bottom:140%}.aspect-ratio--1x1-m{padding-bottom:100%}.aspect-ratio--object-m{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:100}.cover-m{background-size:cover!important}.contain-m{background-size:contain!important}.bg-center-m{background-position:50%}.bg-center-m,.bg-top-m{background-repeat:no-repeat}.bg-top-m{background-position:top}.bg-right-m{background-position:100%}.bg-bottom-m,.bg-right-m{background-repeat:no-repeat}.bg-bottom-m{background-position:bottom}.bg-left-m{background-repeat:no-repeat;background-position:0}.outline-m{outline:1px solid}.outline-transparent-m{outline:1px solid transparent}.outline-0-m{outline:0}.ba-m{border-style:solid;border-width:1px}.bt-m{border-top-style:solid;border-top-width:1px}.br-m{border-right-style:solid;border-right-width:1px}.bb-m{border-bottom-style:solid;border-bottom-width:1px}.bl-m{border-left-style:solid;border-left-width:1px}.bn-m{border-style:none;border-width:0}.br0-m{border-radius:0}.br1-m{border-radius:.125rem}.br2-m{border-radius:.25rem}.br3-m{border-radius:.5rem}.br4-m{border-radius:1rem}.br-100-m{border-radius:100%}.br-pill-m{border-radius:9999px}.br--bottom-m{border-top-left-radius:0;border-top-right-radius:0}.br--top-m{border-bottom-right-radius:0}.br--right-m,.br--top-m{border-bottom-left-radius:0}.br--right-m{border-top-left-radius:0}.br--left-m{border-top-right-radius:0;border-bottom-right-radius:0}.b--dotted-m{border-style:dotted}.b--dashed-m{border-style:dashed}.b--solid-m{border-style:solid}.b--none-m{border-style:none}.bw0-m{border-width:0}.bw1-m{border-width:.125rem}.bw2-m{border-width:.25rem}.bw3-m{border-width:.5rem}.bw4-m{border-width:1rem}.bw5-m{border-width:2rem}.bt-0-m{border-top-width:0}.br-0-m{border-right-width:0}.bb-0-m{border-bottom-width:0}.bl-0-m{border-left-width:0}.shadow-1-m{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2-m{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3-m{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4-m{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5-m{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}.top-0-m{top:0}.left-0-m{left:0}.right-0-m{right:0}.bottom-0-m{bottom:0}.top-1-m{top:1rem}.left-1-m{left:1rem}.right-1-m{right:1rem}.bottom-1-m{bottom:1rem}.top-2-m{top:2rem}.left-2-m{left:2rem}.right-2-m{right:2rem}.bottom-2-m{bottom:2rem}.top--1-m{top:-1rem}.right--1-m{right:-1rem}.bottom--1-m{bottom:-1rem}.left--1-m{left:-1rem}.top--2-m{top:-2rem}.right--2-m{right:-2rem}.bottom--2-m{bottom:-2rem}.left--2-m{left:-2rem}.absolute--fill-m{top:0;right:0;bottom:0;left:0}.cl-m{clear:left}.cr-m{clear:right}.cb-m{clear:both}.cn-m{clear:none}.dn-m{display:none}.di-m{display:inline}.db-m{display:block}.dib-m{display:inline-block}.dit-m{display:inline-table}.dt-m{display:table}.dtc-m{display:table-cell}.dt-row-m{display:table-row}.dt-row-group-m{display:table-row-group}.dt-column-m{display:table-column}.dt-column-group-m{display:table-column-group}.dt--fixed-m{table-layout:fixed;width:100%}.flex-m{display:flex}.inline-flex-m{display:inline-flex}.flex-auto-m{flex:1 1 auto;min-width:0;min-height:0}.flex-none-m{flex:none}.flex-column-m{flex-direction:column}.flex-row-m{flex-direction:row}.flex-wrap-m{flex-wrap:wrap}.flex-nowrap-m{flex-wrap:nowrap}.flex-wrap-reverse-m{flex-wrap:wrap-reverse}.flex-column-reverse-m{flex-direction:column-reverse}.flex-row-reverse-m{flex-direction:row-reverse}.items-start-m{align-items:flex-start}.items-end-m{align-items:flex-end}.items-center-m{align-items:center}.items-baseline-m{align-items:baseline}.items-stretch-m{align-items:stretch}.self-start-m{align-self:flex-start}.self-end-m{align-self:flex-end}.self-center-m{align-self:center}.self-baseline-m{align-self:baseline}.self-stretch-m{align-self:stretch}.justify-start-m{justify-content:flex-start}.justify-end-m{justify-content:flex-end}.justify-center-m{justify-content:center}.justify-between-m{justify-content:space-between}.justify-around-m{justify-content:space-around}.content-start-m{align-content:flex-start}.content-end-m{align-content:flex-end}.content-center-m{align-content:center}.content-between-m{align-content:space-between}.content-around-m{align-content:space-around}.content-stretch-m{align-content:stretch}.order-0-m{order:0}.order-1-m{order:1}.order-2-m{order:2}.order-3-m{order:3}.order-4-m{order:4}.order-5-m{order:5}.order-6-m{order:6}.order-7-m{order:7}.order-8-m{order:8}.order-last-m{order:99999}.flex-grow-0-m{flex-grow:0}.flex-grow-1-m{flex-grow:1}.flex-shrink-0-m{flex-shrink:0}.flex-shrink-1-m{flex-shrink:1}.fl-m{float:left}.fl-m,.fr-m{_display:inline}.fr-m{float:right}.fn-m{float:none}.i-m{font-style:italic}.fs-normal-m{font-style:normal}.normal-m{font-weight:400}.b-m{font-weight:700}.fw1-m{font-weight:100}.fw2-m{font-weight:200}.fw3-m{font-weight:300}.fw4-m{font-weight:400}.fw5-m{font-weight:500}.fw6-m{font-weight:600}.fw7-m{font-weight:700}.fw8-m{font-weight:800}.fw9-m{font-weight:900}.h1-m{height:1rem}.h2-m{height:2rem}.h3-m{height:4rem}.h4-m{height:8rem}.h5-m{height:16rem}.h-25-m{height:25%}.h-50-m{height:50%}.h-75-m{height:75%}.h-100-m{height:100%}.min-h-100-m{min-height:100%}.vh-25-m{height:25vh}.vh-50-m{height:50vh}.vh-75-m{height:75vh}.vh-100-m{height:100vh}.min-vh-100-m{min-height:100vh}.h-auto-m{height:auto}.h-inherit-m{height:inherit}.tracked-m{letter-spacing:.1em}.tracked-tight-m{letter-spacing:-.05em}.tracked-mega-m{letter-spacing:.25em}.lh-solid-m{line-height:1}.lh-title-m{line-height:1.25}.lh-copy-m{line-height:1.5}.mw-100-m{max-width:100%}.mw1-m{max-width:1rem}.mw2-m{max-width:2rem}.mw3-m{max-width:4rem}.mw4-m{max-width:8rem}.mw5-m{max-width:16rem}.mw6-m{max-width:32rem}.mw7-m{max-width:48rem}.mw8-m{max-width:64rem}.mw9-m{max-width:96rem}.mw-none-m{max-width:none}.w1-m{width:1rem}.w2-m{width:2rem}.w3-m{width:4rem}.w4-m{width:8rem}.w5-m{width:16rem}.w-10-m{width:10%}.w-20-m{width:20%}.w-25-m{width:25%}.w-30-m{width:30%}.w-33-m{width:33%}.w-34-m{width:34%}.w-40-m{width:40%}.w-50-m{width:50%}.w-60-m{width:60%}.w-70-m{width:70%}.w-75-m{width:75%}.w-80-m{width:80%}.w-90-m{width:90%}.w-100-m{width:100%}.w-third-m{width:33.33333%}.w-two-thirds-m{width:66.66667%}.w-auto-m{width:auto}.overflow-visible-m{overflow:visible}.overflow-hidden-m{overflow:hidden}.overflow-scroll-m{overflow:scroll}.overflow-auto-m{overflow:auto}.overflow-x-visible-m{overflow-x:visible}.overflow-x-hidden-m{overflow-x:hidden}.overflow-x-scroll-m{overflow-x:scroll}.overflow-x-auto-m{overflow-x:auto}.overflow-y-visible-m{overflow-y:visible}.overflow-y-hidden-m{overflow-y:hidden}.overflow-y-scroll-m{overflow-y:scroll}.overflow-y-auto-m{overflow-y:auto}.static-m{position:static}.relative-m{position:relative}.absolute-m{position:absolute}.fixed-m{position:fixed}.rotate-45-m{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.rotate-90-m{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rotate-135-m{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.rotate-180-m{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rotate-225-m{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.rotate-270-m{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.rotate-315-m{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.pa0-m{padding:0}.pa1-m{padding:.25rem}.pa2-m{padding:.5rem}.pa3-m{padding:1rem}.pa4-m{padding:2rem}.pa5-m{padding:4rem}.pa6-m{padding:8rem}.pa7-m{padding:16rem}.pl0-m{padding-left:0}.pl1-m{padding-left:.25rem}.pl2-m{padding-left:.5rem}.pl3-m{padding-left:1rem}.pl4-m{padding-left:2rem}.pl5-m{padding-left:4rem}.pl6-m{padding-left:8rem}.pl7-m{padding-left:16rem}.pr0-m{padding-right:0}.pr1-m{padding-right:.25rem}.pr2-m{padding-right:.5rem}.pr3-m{padding-right:1rem}.pr4-m{padding-right:2rem}.pr5-m{padding-right:4rem}.pr6-m{padding-right:8rem}.pr7-m{padding-right:16rem}.pb0-m{padding-bottom:0}.pb1-m{padding-bottom:.25rem}.pb2-m{padding-bottom:.5rem}.pb3-m{padding-bottom:1rem}.pb4-m{padding-bottom:2rem}.pb5-m{padding-bottom:4rem}.pb6-m{padding-bottom:8rem}.pb7-m{padding-bottom:16rem}.pt0-m{padding-top:0}.pt1-m{padding-top:.25rem}.pt2-m{padding-top:.5rem}.pt3-m{padding-top:1rem}.pt4-m{padding-top:2rem}.pt5-m{padding-top:4rem}.pt6-m{padding-top:8rem}.pt7-m{padding-top:16rem}.pv0-m{padding-top:0;padding-bottom:0}.pv1-m{padding-top:.25rem;padding-bottom:.25rem}.pv2-m{padding-top:.5rem;padding-bottom:.5rem}.pv3-m{padding-top:1rem;padding-bottom:1rem}.pv4-m{padding-top:2rem;padding-bottom:2rem}.pv5-m{padding-top:4rem;padding-bottom:4rem}.pv6-m{padding-top:8rem;padding-bottom:8rem}.pv7-m{padding-top:16rem;padding-bottom:16rem}.ph0-m{padding-left:0;padding-right:0}.ph1-m{padding-left:.25rem;padding-right:.25rem}.ph2-m{padding-left:.5rem;padding-right:.5rem}.ph3-m{padding-left:1rem;padding-right:1rem}.ph4-m{padding-left:2rem;padding-right:2rem}.ph5-m{padding-left:4rem;padding-right:4rem}.ph6-m{padding-left:8rem;padding-right:8rem}.ph7-m{padding-left:16rem;padding-right:16rem}.ma0-m{margin:0}.ma1-m{margin:.25rem}.ma2-m{margin:.5rem}.ma3-m{margin:1rem}.ma4-m{margin:2rem}.ma5-m{margin:4rem}.ma6-m{margin:8rem}.ma7-m{margin:16rem}.ml0-m{margin-left:0}.ml1-m{margin-left:.25rem}.ml2-m{margin-left:.5rem}.ml3-m{margin-left:1rem}.ml4-m{margin-left:2rem}.ml5-m{margin-left:4rem}.ml6-m{margin-left:8rem}.ml7-m{margin-left:16rem}.mr0-m{margin-right:0}.mr1-m{margin-right:.25rem}.mr2-m{margin-right:.5rem}.mr3-m{margin-right:1rem}.mr4-m{margin-right:2rem}.mr5-m{margin-right:4rem}.mr6-m{margin-right:8rem}.mr7-m{margin-right:16rem}.mb0-m{margin-bottom:0}.mb1-m{margin-bottom:.25rem}.mb2-m{margin-bottom:.5rem}.mb3-m{margin-bottom:1rem}.mb4-m{margin-bottom:2rem}.mb5-m{margin-bottom:4rem}.mb6-m{margin-bottom:8rem}.mb7-m{margin-bottom:16rem}.mt0-m{margin-top:0}.mt1-m{margin-top:.25rem}.mt2-m{margin-top:.5rem}.mt3-m{margin-top:1rem}.mt4-m{margin-top:2rem}.mt5-m{margin-top:4rem}.mt6-m{margin-top:8rem}.mt7-m{margin-top:16rem}.mv0-m{margin-top:0;margin-bottom:0}.mv1-m{margin-top:.25rem;margin-bottom:.25rem}.mv2-m{margin-top:.5rem;margin-bottom:.5rem}.mv3-m{margin-top:1rem;margin-bottom:1rem}.mv4-m{margin-top:2rem;margin-bottom:2rem}.mv5-m{margin-top:4rem;margin-bottom:4rem}.mv6-m{margin-top:8rem;margin-bottom:8rem}.mv7-m{margin-top:16rem;margin-bottom:16rem}.mh0-m{margin-left:0;margin-right:0}.mh1-m{margin-left:.25rem;margin-right:.25rem}.mh2-m{margin-left:.5rem;margin-right:.5rem}.mh3-m{margin-left:1rem;margin-right:1rem}.mh4-m{margin-left:2rem;margin-right:2rem}.mh5-m{margin-left:4rem;margin-right:4rem}.mh6-m{margin-left:8rem;margin-right:8rem}.mh7-m{margin-left:16rem;margin-right:16rem}.na1-m{margin:-.25rem}.na2-m{margin:-.5rem}.na3-m{margin:-1rem}.na4-m{margin:-2rem}.na5-m{margin:-4rem}.na6-m{margin:-8rem}.na7-m{margin:-16rem}.nl1-m{margin-left:-.25rem}.nl2-m{margin-left:-.5rem}.nl3-m{margin-left:-1rem}.nl4-m{margin-left:-2rem}.nl5-m{margin-left:-4rem}.nl6-m{margin-left:-8rem}.nl7-m{margin-left:-16rem}.nr1-m{margin-right:-.25rem}.nr2-m{margin-right:-.5rem}.nr3-m{margin-right:-1rem}.nr4-m{margin-right:-2rem}.nr5-m{margin-right:-4rem}.nr6-m{margin-right:-8rem}.nr7-m{margin-right:-16rem}.nb1-m{margin-bottom:-.25rem}.nb2-m{margin-bottom:-.5rem}.nb3-m{margin-bottom:-1rem}.nb4-m{margin-bottom:-2rem}.nb5-m{margin-bottom:-4rem}.nb6-m{margin-bottom:-8rem}.nb7-m{margin-bottom:-16rem}.nt1-m{margin-top:-.25rem}.nt2-m{margin-top:-.5rem}.nt3-m{margin-top:-1rem}.nt4-m{margin-top:-2rem}.nt5-m{margin-top:-4rem}.nt6-m{margin-top:-8rem}.nt7-m{margin-top:-16rem}.strike-m{text-decoration:line-through}.underline-m{text-decoration:underline}.no-underline-m{text-decoration:none}.tl-m{text-align:left}.tr-m{text-align:right}.tc-m{text-align:center}.tj-m{text-align:justify}.ttc-m{text-transform:capitalize}.ttl-m{text-transform:lowercase}.ttu-m{text-transform:uppercase}.ttn-m{text-transform:none}.f-6-m,.f-headline-m{font-size:6rem}.f-5-m,.f-subheadline-m{font-size:5rem}.f1-m{font-size:3rem}.f2-m{font-size:2.25rem}.f3-m{font-size:1.5rem}.f4-m{font-size:1.25rem}.f5-m{font-size:1rem}.f6-m{font-size:.875rem}.f7-m{font-size:.75rem}.measure-m{max-width:30em}.measure-wide-m{max-width:34em}.measure-narrow-m{max-width:20em}.indent-m{text-indent:1em;margin-top:0;margin-bottom:0}.small-caps-m{font-variant:small-caps}.truncate-m{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.center-m{margin-left:auto}.center-m,.mr-auto-m{margin-right:auto}.ml-auto-m{margin-left:auto}.clip-m{position:fixed!important;_position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ws-normal-m{white-space:normal}.nowrap-m{white-space:nowrap}.pre-m{white-space:pre}.v-base-m{vertical-align:baseline}.v-mid-m{vertical-align:middle}.v-top-m{vertical-align:top}.v-btm-m{vertical-align:bottom}}@media screen and (min-width:60em){.aspect-ratio-l{height:0;position:relative}.aspect-ratio--16x9-l{padding-bottom:56.25%}.aspect-ratio--9x16-l{padding-bottom:177.77%}.aspect-ratio--4x3-l{padding-bottom:75%}.aspect-ratio--3x4-l{padding-bottom:133.33%}.aspect-ratio--6x4-l{padding-bottom:66.6%}.aspect-ratio--4x6-l{padding-bottom:150%}.aspect-ratio--8x5-l{padding-bottom:62.5%}.aspect-ratio--5x8-l{padding-bottom:160%}.aspect-ratio--7x5-l{padding-bottom:71.42%}.aspect-ratio--5x7-l{padding-bottom:140%}.aspect-ratio--1x1-l{padding-bottom:100%}.aspect-ratio--object-l{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:100}.cover-l{background-size:cover!important}.contain-l{background-size:contain!important}.bg-center-l{background-position:50%}.bg-center-l,.bg-top-l{background-repeat:no-repeat}.bg-top-l{background-position:top}.bg-right-l{background-position:100%}.bg-bottom-l,.bg-right-l{background-repeat:no-repeat}.bg-bottom-l{background-position:bottom}.bg-left-l{background-repeat:no-repeat;background-position:0}.outline-l{outline:1px solid}.outline-transparent-l{outline:1px solid transparent}.outline-0-l{outline:0}.ba-l{border-style:solid;border-width:1px}.bt-l{border-top-style:solid;border-top-width:1px}.br-l{border-right-style:solid;border-right-width:1px}.bb-l{border-bottom-style:solid;border-bottom-width:1px}.bl-l{border-left-style:solid;border-left-width:1px}.bn-l{border-style:none;border-width:0}.br0-l{border-radius:0}.br1-l{border-radius:.125rem}.br2-l{border-radius:.25rem}.br3-l{border-radius:.5rem}.br4-l{border-radius:1rem}.br-100-l{border-radius:100%}.br-pill-l{border-radius:9999px}.br--bottom-l{border-top-left-radius:0;border-top-right-radius:0}.br--top-l{border-bottom-right-radius:0}.br--right-l,.br--top-l{border-bottom-left-radius:0}.br--right-l{border-top-left-radius:0}.br--left-l{border-top-right-radius:0;border-bottom-right-radius:0}.b--dotted-l{border-style:dotted}.b--dashed-l{border-style:dashed}.b--solid-l{border-style:solid}.b--none-l{border-style:none}.bw0-l{border-width:0}.bw1-l{border-width:.125rem}.bw2-l{border-width:.25rem}.bw3-l{border-width:.5rem}.bw4-l{border-width:1rem}.bw5-l{border-width:2rem}.bt-0-l{border-top-width:0}.br-0-l{border-right-width:0}.bb-0-l{border-bottom-width:0}.bl-0-l{border-left-width:0}.shadow-1-l{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2-l{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3-l{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4-l{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5-l{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}.top-0-l{top:0}.left-0-l{left:0}.right-0-l{right:0}.bottom-0-l{bottom:0}.top-1-l{top:1rem}.left-1-l{left:1rem}.right-1-l{right:1rem}.bottom-1-l{bottom:1rem}.top-2-l{top:2rem}.left-2-l{left:2rem}.right-2-l{right:2rem}.bottom-2-l{bottom:2rem}.top--1-l{top:-1rem}.right--1-l{right:-1rem}.bottom--1-l{bottom:-1rem}.left--1-l{left:-1rem}.top--2-l{top:-2rem}.right--2-l{right:-2rem}.bottom--2-l{bottom:-2rem}.left--2-l{left:-2rem}.absolute--fill-l{top:0;right:0;bottom:0;left:0}.cl-l{clear:left}.cr-l{clear:right}.cb-l{clear:both}.cn-l{clear:none}.dn-l{display:none}.di-l{display:inline}.db-l{display:block}.dib-l{display:inline-block}.dit-l{display:inline-table}.dt-l{display:table}.dtc-l{display:table-cell}.dt-row-l{display:table-row}.dt-row-group-l{display:table-row-group}.dt-column-l{display:table-column}.dt-column-group-l{display:table-column-group}.dt--fixed-l{table-layout:fixed;width:100%}.flex-l{display:flex}.inline-flex-l{display:inline-flex}.flex-auto-l{flex:1 1 auto;min-width:0;min-height:0}.flex-none-l{flex:none}.flex-column-l{flex-direction:column}.flex-row-l{flex-direction:row}.flex-wrap-l{flex-wrap:wrap}.flex-nowrap-l{flex-wrap:nowrap}.flex-wrap-reverse-l{flex-wrap:wrap-reverse}.flex-column-reverse-l{flex-direction:column-reverse}.flex-row-reverse-l{flex-direction:row-reverse}.items-start-l{align-items:flex-start}.items-end-l{align-items:flex-end}.items-center-l{align-items:center}.items-baseline-l{align-items:baseline}.items-stretch-l{align-items:stretch}.self-start-l{align-self:flex-start}.self-end-l{align-self:flex-end}.self-center-l{align-self:center}.self-baseline-l{align-self:baseline}.self-stretch-l{align-self:stretch}.justify-start-l{justify-content:flex-start}.justify-end-l{justify-content:flex-end}.justify-center-l{justify-content:center}.justify-between-l{justify-content:space-between}.justify-around-l{justify-content:space-around}.content-start-l{align-content:flex-start}.content-end-l{align-content:flex-end}.content-center-l{align-content:center}.content-between-l{align-content:space-between}.content-around-l{align-content:space-around}.content-stretch-l{align-content:stretch}.order-0-l{order:0}.order-1-l{order:1}.order-2-l{order:2}.order-3-l{order:3}.order-4-l{order:4}.order-5-l{order:5}.order-6-l{order:6}.order-7-l{order:7}.order-8-l{order:8}.order-last-l{order:99999}.flex-grow-0-l{flex-grow:0}.flex-grow-1-l{flex-grow:1}.flex-shrink-0-l{flex-shrink:0}.flex-shrink-1-l{flex-shrink:1}.fl-l{float:left}.fl-l,.fr-l{_display:inline}.fr-l{float:right}.fn-l{float:none}.i-l{font-style:italic}.fs-normal-l{font-style:normal}.normal-l{font-weight:400}.b-l{font-weight:700}.fw1-l{font-weight:100}.fw2-l{font-weight:200}.fw3-l{font-weight:300}.fw4-l{font-weight:400}.fw5-l{font-weight:500}.fw6-l{font-weight:600}.fw7-l{font-weight:700}.fw8-l{font-weight:800}.fw9-l{font-weight:900}.h1-l{height:1rem}.h2-l{height:2rem}.h3-l{height:4rem}.h4-l{height:8rem}.h5-l{height:16rem}.h-25-l{height:25%}.h-50-l{height:50%}.h-75-l{height:75%}.h-100-l{height:100%}.min-h-100-l{min-height:100%}.vh-25-l{height:25vh}.vh-50-l{height:50vh}.vh-75-l{height:75vh}.vh-100-l{height:100vh}.min-vh-100-l{min-height:100vh}.h-auto-l{height:auto}.h-inherit-l{height:inherit}.tracked-l{letter-spacing:.1em}.tracked-tight-l{letter-spacing:-.05em}.tracked-mega-l{letter-spacing:.25em}.lh-solid-l{line-height:1}.lh-title-l{line-height:1.25}.lh-copy-l{line-height:1.5}.mw-100-l{max-width:100%}.mw1-l{max-width:1rem}.mw2-l{max-width:2rem}.mw3-l{max-width:4rem}.mw4-l{max-width:8rem}.mw5-l{max-width:16rem}.mw6-l{max-width:32rem}.mw7-l{max-width:48rem}.mw8-l{max-width:64rem}.mw9-l{max-width:96rem}.mw-none-l{max-width:none}.w1-l{width:1rem}.w2-l{width:2rem}.w3-l{width:4rem}.w4-l{width:8rem}.w5-l{width:16rem}.w-10-l{width:10%}.w-20-l{width:20%}.w-25-l{width:25%}.w-30-l{width:30%}.w-33-l{width:33%}.w-34-l{width:34%}.w-40-l{width:40%}.w-50-l{width:50%}.w-60-l{width:60%}.w-70-l{width:70%}.w-75-l{width:75%}.w-80-l{width:80%}.w-90-l{width:90%}.w-100-l{width:100%}.w-third-l{width:33.33333%}.w-two-thirds-l{width:66.66667%}.w-auto-l{width:auto}.overflow-visible-l{overflow:visible}.overflow-hidden-l{overflow:hidden}.overflow-scroll-l{overflow:scroll}.overflow-auto-l{overflow:auto}.overflow-x-visible-l{overflow-x:visible}.overflow-x-hidden-l{overflow-x:hidden}.overflow-x-scroll-l{overflow-x:scroll}.overflow-x-auto-l{overflow-x:auto}.overflow-y-visible-l{overflow-y:visible}.overflow-y-hidden-l{overflow-y:hidden}.overflow-y-scroll-l{overflow-y:scroll}.overflow-y-auto-l{overflow-y:auto}.static-l{position:static}.relative-l{position:relative}.absolute-l{position:absolute}.fixed-l{position:fixed}.rotate-45-l{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.rotate-90-l{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rotate-135-l{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.rotate-180-l{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rotate-225-l{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.rotate-270-l{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.rotate-315-l{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.pa0-l{padding:0}.pa1-l{padding:.25rem}.pa2-l{padding:.5rem}.pa3-l{padding:1rem}.pa4-l{padding:2rem}.pa5-l{padding:4rem}.pa6-l{padding:8rem}.pa7-l{padding:16rem}.pl0-l{padding-left:0}.pl1-l{padding-left:.25rem}.pl2-l{padding-left:.5rem}.pl3-l{padding-left:1rem}.pl4-l{padding-left:2rem}.pl5-l{padding-left:4rem}.pl6-l{padding-left:8rem}.pl7-l{padding-left:16rem}.pr0-l{padding-right:0}.pr1-l{padding-right:.25rem}.pr2-l{padding-right:.5rem}.pr3-l{padding-right:1rem}.pr4-l{padding-right:2rem}.pr5-l{padding-right:4rem}.pr6-l{padding-right:8rem}.pr7-l{padding-right:16rem}.pb0-l{padding-bottom:0}.pb1-l{padding-bottom:.25rem}.pb2-l{padding-bottom:.5rem}.pb3-l{padding-bottom:1rem}.pb4-l{padding-bottom:2rem}.pb5-l{padding-bottom:4rem}.pb6-l{padding-bottom:8rem}.pb7-l{padding-bottom:16rem}.pt0-l{padding-top:0}.pt1-l{padding-top:.25rem}.pt2-l{padding-top:.5rem}.pt3-l{padding-top:1rem}.pt4-l{padding-top:2rem}.pt5-l{padding-top:4rem}.pt6-l{padding-top:8rem}.pt7-l{padding-top:16rem}.pv0-l{padding-top:0;padding-bottom:0}.pv1-l{padding-top:.25rem;padding-bottom:.25rem}.pv2-l{padding-top:.5rem;padding-bottom:.5rem}.pv3-l{padding-top:1rem;padding-bottom:1rem}.pv4-l{padding-top:2rem;padding-bottom:2rem}.pv5-l{padding-top:4rem;padding-bottom:4rem}.pv6-l{padding-top:8rem;padding-bottom:8rem}.pv7-l{padding-top:16rem;padding-bottom:16rem}.ph0-l{padding-left:0;padding-right:0}.ph1-l{padding-left:.25rem;padding-right:.25rem}.ph2-l{padding-left:.5rem;padding-right:.5rem}.ph3-l{padding-left:1rem;padding-right:1rem}.ph4-l{padding-left:2rem;padding-right:2rem}.ph5-l{padding-left:4rem;padding-right:4rem}.ph6-l{padding-left:8rem;padding-right:8rem}.ph7-l{padding-left:16rem;padding-right:16rem}.ma0-l{margin:0}.ma1-l{margin:.25rem}.ma2-l{margin:.5rem}.ma3-l{margin:1rem}.ma4-l{margin:2rem}.ma5-l{margin:4rem}.ma6-l{margin:8rem}.ma7-l{margin:16rem}.ml0-l{margin-left:0}.ml1-l{margin-left:.25rem}.ml2-l{margin-left:.5rem}.ml3-l{margin-left:1rem}.ml4-l{margin-left:2rem}.ml5-l{margin-left:4rem}.ml6-l{margin-left:8rem}.ml7-l{margin-left:16rem}.mr0-l{margin-right:0}.mr1-l{margin-right:.25rem}.mr2-l{margin-right:.5rem}.mr3-l{margin-right:1rem}.mr4-l{margin-right:2rem}.mr5-l{margin-right:4rem}.mr6-l{margin-right:8rem}.mr7-l{margin-right:16rem}.mb0-l{margin-bottom:0}.mb1-l{margin-bottom:.25rem}.mb2-l{margin-bottom:.5rem}.mb3-l{margin-bottom:1rem}.mb4-l{margin-bottom:2rem}.mb5-l{margin-bottom:4rem}.mb6-l{margin-bottom:8rem}.mb7-l{margin-bottom:16rem}.mt0-l{margin-top:0}.mt1-l{margin-top:.25rem}.mt2-l{margin-top:.5rem}.mt3-l{margin-top:1rem}.mt4-l{margin-top:2rem}.mt5-l{margin-top:4rem}.mt6-l{margin-top:8rem}.mt7-l{margin-top:16rem}.mv0-l{margin-top:0;margin-bottom:0}.mv1-l{margin-top:.25rem;margin-bottom:.25rem}.mv2-l{margin-top:.5rem;margin-bottom:.5rem}.mv3-l{margin-top:1rem;margin-bottom:1rem}.mv4-l{margin-top:2rem;margin-bottom:2rem}.mv5-l{margin-top:4rem;margin-bottom:4rem}.mv6-l{margin-top:8rem;margin-bottom:8rem}.mv7-l{margin-top:16rem;margin-bottom:16rem}.mh0-l{margin-left:0;margin-right:0}.mh1-l{margin-left:.25rem;margin-right:.25rem}.mh2-l{margin-left:.5rem;margin-right:.5rem}.mh3-l{margin-left:1rem;margin-right:1rem}.mh4-l{margin-left:2rem;margin-right:2rem}.mh5-l{margin-left:4rem;margin-right:4rem}.mh6-l{margin-left:8rem;margin-right:8rem}.mh7-l{margin-left:16rem;margin-right:16rem}.na1-l{margin:-.25rem}.na2-l{margin:-.5rem}.na3-l{margin:-1rem}.na4-l{margin:-2rem}.na5-l{margin:-4rem}.na6-l{margin:-8rem}.na7-l{margin:-16rem}.nl1-l{margin-left:-.25rem}.nl2-l{margin-left:-.5rem}.nl3-l{margin-left:-1rem}.nl4-l{margin-left:-2rem}.nl5-l{margin-left:-4rem}.nl6-l{margin-left:-8rem}.nl7-l{margin-left:-16rem}.nr1-l{margin-right:-.25rem}.nr2-l{margin-right:-.5rem}.nr3-l{margin-right:-1rem}.nr4-l{margin-right:-2rem}.nr5-l{margin-right:-4rem}.nr6-l{margin-right:-8rem}.nr7-l{margin-right:-16rem}.nb1-l{margin-bottom:-.25rem}.nb2-l{margin-bottom:-.5rem}.nb3-l{margin-bottom:-1rem}.nb4-l{margin-bottom:-2rem}.nb5-l{margin-bottom:-4rem}.nb6-l{margin-bottom:-8rem}.nb7-l{margin-bottom:-16rem}.nt1-l{margin-top:-.25rem}.nt2-l{margin-top:-.5rem}.nt3-l{margin-top:-1rem}.nt4-l{margin-top:-2rem}.nt5-l{margin-top:-4rem}.nt6-l{margin-top:-8rem}.nt7-l{margin-top:-16rem}.strike-l{text-decoration:line-through}.underline-l{text-decoration:underline}.no-underline-l{text-decoration:none}.tl-l{text-align:left}.tr-l{text-align:right}.tc-l{text-align:center}.tj-l{text-align:justify}.ttc-l{text-transform:capitalize}.ttl-l{text-transform:lowercase}.ttu-l{text-transform:uppercase}.ttn-l{text-transform:none}.f-6-l,.f-headline-l{font-size:6rem}.f-5-l,.f-subheadline-l{font-size:5rem}.f1-l{font-size:3rem}.f2-l{font-size:2.25rem}.f3-l{font-size:1.5rem}.f4-l{font-size:1.25rem}.f5-l{font-size:1rem}.f6-l{font-size:.875rem}.f7-l{font-size:.75rem}.measure-l{max-width:30em}.measure-wide-l{max-width:34em}.measure-narrow-l{max-width:20em}.indent-l{text-indent:1em;margin-top:0;margin-bottom:0}.small-caps-l{font-variant:small-caps}.truncate-l{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.center-l{margin-left:auto}.center-l,.mr-auto-l{margin-right:auto}.ml-auto-l{margin-left:auto}.clip-l{position:fixed!important;_position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ws-normal-l{white-space:normal}.nowrap-l{white-space:nowrap}.pre-l{white-space:pre}.v-base-l{vertical-align:baseline}.v-mid-l{vertical-align:middle}.v-top-l{vertical-align:top}.v-btm-l{vertical-align:bottom}} + diff --git a/static/css/tachyons.min.css.gz b/static/css/tachyons.min.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..727ae843caf02060e4e0d1f133ed33976a1acf64 GIT binary patch literal 13711 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 literal 0 HcmV?d00001 diff --git a/static/fonts/glyphicons-halflings-regular.eot b/static/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..4a4ca865d67e86f961bc6e2ef00bffa4e34bb9ed GIT binary patch literal 20335 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

!oRptb@n+ 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 literal 0 HcmV?d00001 diff --git a/static/fonts/glyphicons-halflings-regular.svg b/static/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..e3e2dc7 --- /dev/null +++ b/static/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/fonts/glyphicons-halflings-regular.ttf b/static/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..67fa00bf83801d2fa568546b982c80d27f6ef74e GIT binary patch literal 41280 zcmc${2b>$#wLd<0X4JKkMs=IoY9(#guC%-Ix~!LV@5XgawLzwtVoFRi&4B<;Yzzq| z1QHw)z@da0*@PsIyqA!`6G@b6oWOe_b_$P#@)GbXG2Zd-d+unfZAkvV-{LBX3Wc;?Pswd9i3FaAXkSUrx`&zn7GF0_`M^SUUB}0?t9iO6@<@rQX4MYaNTB6W_twTb8q4L*yS58+j!vF z2j3Nh`>lc?ZQXpu)z^G$?&B8=!spQk>+PGb+PGPLztt}YU&eW%aO!9EjS$4lmWxSf0(+a;I;S#pX$!?81r zPxe(ID}q`APM!R3^`f;)g#n@JcY^fY+Km6eDgyYBYd&V!e;1`7xevutA z9r7HC9qK$ZaA-Mx@w`Ku58Zlb*I{&GuRWclsyf4l#;7ri09Ui*6RHTP@wSWT=t=8ZXH=9myY8a)#IAo_0fKca`D z*F~?2UK+h1x;}btbX|01bV+nx^t9+egvQ|i`5yx>jQlJU@$>W=|A&(_6vm%?s-YdZ z;Q!}OV(bZjm;rz1-#tQ;_`j;qrV74A>f+@?>cTDSR3S05S~a&0%~;2e-Lx)tKxMv; z>UNd2#a>sPt?jDVwrIuBoW#0#yDGI^Tpd#fmJh|%fpzVw+(uuGC*n5@{id$Gt`64? z4cEQ9t}YQ*O|3)f+%4<)iFNDnd#1Lkv(9K&&23r(y9;-Z-F4Pkb*g}$v9xK8{LsMY zA#0mgiS=dLRa;x^Cc4QF@cS`UN-jvmR5`U!6_yWe-?)84j5em!#pCPhw)4Fe#va|! zZnVx*=ZWJcj<(n@cz2v_v5abIJ!>cyo0pio;gZ-;tZ<(36Leh_-5IxzZI8{{K6gW6 zdu)4x-!7pFD~8koT#5eCZPkH|w1e-s_?>1Ptd7U)Vh6W_4EWLlv~6{zZD=1ZbGId8 z2P-#E#D*5Ftc$B`-OzS)XhC9oBDQ_O_QVEi33Z3wsXZPV1}}y|p$^c7cTxw?(8S!t zhD+9u?+Ja?*M?4Pzmv$eu#nhpQDe)8rq_KJXZ&sZgaI}%ILH=#(<7WO@OQd+HCi6q zzG5hG9$KFmtiuOO41)3lD~5_fOqg~4V3EZbKGfLxYR$%a-ctNxpiRY5&;@Vp#E_7w zkT-73wkGUcB*ievEJBCIgv|7!MHb)9YG%{FPcKR$HU&+h!zMahw3wx1(~FFb=ajgT z%qfW`HlV-tm%m7{V~3g`k(p2s3i4uku@Dj(1y#tXRXLTFRY#Vo)fv@yP&H*$Z&|fu zwHnqcbawfA;^}-y$tn4eB_4=}ENLa7Skn0dlb+x4dBA$NMe@P+tN3)UA)gG`7`p@g}ksuP_r4esa$Nz(oZ#Y*myhQ zydBZ3YRahfIn`WNYqM$~qdLmPfP*d!c&KGlGHRZ;tf8!hquH$5;L+MytLn+B9c9&> z)%sYg){s}cs-;hDSBj2Uwy&>`sF=@n=M(u{Z@xE|4FyAq?hY~0;1VryOWYj5TSU%f z`^BD|*kB}m6&MwIx%*C_4-Kj)_rGq6J%mIJM#ave| z6W_b;$tSPtXlr}!^3VTT99+%bTYl9u??3I@aP6-itZ}+F;Z~$u6l4`VD`Otmv91d} zER<(S#b#32t`d6j;d0id9}tJcA&h=ofez}MOMLIh@MGecx|6jH@5S#($3Hm!f&3l$ zJD6Q&(h@95us6di-`kyGsRm0GTk_j84vH5XTyyaJs;URwjqa+=zdhYJa8^~?^^8KtwNh&Fei-jtC-6@O7#R52HmK*O{ zb{aZAuyEO0ulKHHb62|T!ydZ}`=7qNxi+xAMLg%B;s5c3YOm_eH`jzt&r4U@9n$wC zpM7|lQe8tUd+7K(@(<((1)oqStP_e*@>*4IMh%tKx(s^5)cTCd4yu8&8t{;8P)(Qv zVE3AU;@u~S9&cl)PcOVYDiH%eQKR|9}_GlobT-NdeEVO-@<}^H#0Y+ z8Q5L)1Y^CPR4l~m!D{tOS)0XjnbmLA4_v#m^vM^Q_j}*d-(&C6IsFf%o!9CIaPl&X zg|#geFV+9@;`eX`hJ?@aA^BN(won6(WNK|j6%Gd{TZs`|W+=eeBozwtMwk^=|gMSwn`IzBM5z3t%CUFVn_xPg)&+-Z}Nm+_k}F^P&%JTTTZ;stRF1+?)Mjd z@9iZ^PjW}`nw`J<%#J^P=9j)n&CF?*>`C{+zjvK zuNOv-VW}N|3CU6jr(;`3FW{u)Z?q=6LBotNQy3JAAabkPmIDEaWZ{fDos*^;yfMJ( zfi(x~V>RAAS`5<>L~AaqQ?lA=oNs!R?p{dTU_il`#v4*K7~%2z>|@S{!3BYEIG}H) z_pxnpX#C#z?d;e^VeztYJHy`@w=?040O^T8t{05-eVK5saD{M-a1YjMP6ciHrCKltrL=JU^%w? z%G&%P`t)e)acuLg*uJ=|U3XVDtKG{fM{{8sGiF08Ye*?QAHB~$=KSRE|D)H310@=Q zQ@pWVr#!_^eBAl$=-)<^As zJhjCaXt;)F)BDM{$J2alXh-S%@f4-CE-W<2@5?O&s9@VPh1%VaGs>!k%%NCOX!q7hU38p|b zovTxd{u+j_eYEZ&L7wLVxj-V2==n%JWNx8UD3m@%8`0O%MTNo`?Y_YEs;F@G1lm<7 z6B|dFie`mXi)&WTk!DpN9@opsy47=}Th&KCR=bk0jD2*^NKaw!Rn)8<*XyrZg3!aP zBWl)*%=02T#&ty@BtHoKp$@D49Dxi+JJ#tozAjnHMJVYQMGK5M)#A~d7;9g-==9M+ zC+sLPnKY*bgA}T+PoUvsAa#550cf*+sDeG+sdP`!3k^+d=n$DPfw7($6FBsXCobH2 zl%02U>xEDJ;>?F$edpDO&Sbv{2MRQk@FosD&zkxl&zG*#jvm#nE9D>W*MI%|7F>mk znUk(EmLpgb1%W{>X`^~fr%;5k(W+UUxg1kH8C5<=T0J^pMJF6Ela21U%bLQaO&%6D zgK<3auK;7Dt%RX3F)~Ql5#33aHxvaxlcG>7)XBT$-NHQKbm2UK)a&JCbx}s`1@%^N z>dh~!^F7)U+zkubO3-P(KsMA2u>BHcpF5E2BUWhiYBd=cmfCW#yk>y{qb^eRN%8a? zI@{~jT2CW}_xYn@Fv={!P(BpIW-dEZ?48L%z4>&$7n?oZ88MY%`Bd7HPGK|A;1YEiG@Keut^O%am$rsLQ0x9U0T7rgScss@?4KCe!Dc zCnPOzoBkzKkurMPR~sJlqu6;PIcA{-F)-Vx|?r? z`d|?X$B)aZ$q&7MOasjecMHWhX;F=^_B*??Sm@K4VoSC+2X&#Y3>A}<3RfGBXENMw zg?V3lkXD^WkCwy`019a$&9s)?Cn=eC2St6RCAO;o}h)=XB2SH>r+jiH(R9}{

PBK;&Wcg|NX{>QR@W3{K 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 literal 0 HcmV?d00001 diff --git a/static/fonts/glyphicons-halflings-regular.woff b/static/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..8c54182aa5d4d1ab3c9171976b615c1dcb1dc187 GIT binary patch literal 23320 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 0; + }) + .map(function (header) { + var i = header.indexOf(":"); + return mkHeader(header.substring(0, i))(header.substring(i + 2)); + }), + body: platformSpecific.getResponse(xhr) + }); + }; + xhr.responseType = options.responseType; + xhr.withCredentials = options.withCredentials; + xhr.send(options.content); + + return function (error, cancelErrback, cancelCallback) { + try { + xhr.abort(); + } catch (e) { + return cancelErrback(e); + } + return cancelCallback(); + }; + }; + }; + }(); +})(PS["Affjax"] = PS["Affjax"] || {}); +(function(exports) { + "use strict"; + + function id(x) { + return x; + } + exports.fromObject = id; + + exports.stringify = function (j) { + return JSON.stringify(j); + }; + + function isArray(a) { + return objToString.call(a) === "[object Array]"; + } +})(PS["Data.Argonaut.Core"] = PS["Data.Argonaut.Core"] || {}); +(function(exports) { + "use strict"; + + exports.refEq = function (r1) { + return function (r2) { + return r1 === r2; + }; + }; +})(PS["Data.Eq"] = PS["Data.Eq"] || {}); +(function(exports) { + "use strict"; + + exports.boolConj = function (b1) { + return function (b2) { + return b1 && b2; + }; + }; + + exports.boolDisj = function (b1) { + return function (b2) { + return b1 || b2; + }; + }; + + exports.boolNot = function (b) { + return !b; + }; +})(PS["Data.HeytingAlgebra"] = PS["Data.HeytingAlgebra"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.Symbol"]; + var SProxy = (function () { + function SProxy() { + + }; + SProxy.value = new SProxy(); + return SProxy; + })(); + var IsSymbol = function (reflectSymbol) { + this.reflectSymbol = reflectSymbol; + }; + var reflectSymbol = function (dict) { + return dict.reflectSymbol; + }; + exports["IsSymbol"] = IsSymbol; + exports["reflectSymbol"] = reflectSymbol; + exports["SProxy"] = SProxy; +})(PS["Data.Symbol"] = PS["Data.Symbol"] || {}); +(function(exports) { + "use strict"; + + exports.unit = {}; +})(PS["Data.Unit"] = PS["Data.Unit"] || {}); +(function(exports) { + "use strict"; + + exports.showIntImpl = function (n) { + return n.toString(); + }; +})(PS["Data.Show"] = PS["Data.Show"] || {}); +(function(exports) { + "use strict"; + + exports.unsafeGet = function (label) { + return function (rec) { + return rec[label]; + }; + }; +})(PS["Record.Unsafe"] = PS["Record.Unsafe"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Record.Unsafe"]; + exports["unsafeGet"] = $foreign.unsafeGet; +})(PS["Record.Unsafe"] = PS["Record.Unsafe"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.Show"]; + var Data_Symbol = PS["Data.Symbol"]; + var Record_Unsafe = PS["Record.Unsafe"]; + var Type_Data_RowList = PS["Type.Data.RowList"]; + var Show = function (show) { + this.show = show; + }; + var showInt = new Show($foreign.showIntImpl); + var show = function (dict) { + return dict.show; + }; + exports["Show"] = Show; + exports["show"] = show; + exports["showInt"] = showInt; +})(PS["Data.Show"] = PS["Data.Show"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.Unit"]; + var Data_Show = PS["Data.Show"]; + exports["unit"] = $foreign.unit; +})(PS["Data.Unit"] = PS["Data.Unit"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.HeytingAlgebra"]; + var Data_Symbol = PS["Data.Symbol"]; + var Data_Unit = PS["Data.Unit"]; + var Record_Unsafe = PS["Record.Unsafe"]; + var Type_Data_Row = PS["Type.Data.Row"]; + var Type_Data_RowList = PS["Type.Data.RowList"]; + var HeytingAlgebra = function (conj, disj, ff, implies, not, tt) { + this.conj = conj; + this.disj = disj; + this.ff = ff; + this.implies = implies; + this.not = not; + this.tt = tt; + }; + var tt = function (dict) { + return dict.tt; + }; + var not = function (dict) { + return dict.not; + }; + var implies = function (dict) { + return dict.implies; + }; + var ff = function (dict) { + return dict.ff; + }; + var disj = function (dict) { + return dict.disj; + }; + var heytingAlgebraBoolean = new HeytingAlgebra($foreign.boolConj, $foreign.boolDisj, false, function (a) { + return function (b) { + return disj(heytingAlgebraBoolean)(not(heytingAlgebraBoolean)(a))(b); + }; + }, $foreign.boolNot, true); + var conj = function (dict) { + return dict.conj; + }; + var heytingAlgebraFunction = function (dictHeytingAlgebra) { + return new HeytingAlgebra(function (f) { + return function (g) { + return function (a) { + return conj(dictHeytingAlgebra)(f(a))(g(a)); + }; + }; + }, function (f) { + return function (g) { + return function (a) { + return disj(dictHeytingAlgebra)(f(a))(g(a)); + }; + }; + }, function (v) { + return ff(dictHeytingAlgebra); + }, function (f) { + return function (g) { + return function (a) { + return implies(dictHeytingAlgebra)(f(a))(g(a)); + }; + }; + }, function (f) { + return function (a) { + return not(dictHeytingAlgebra)(f(a)); + }; + }, function (v) { + return tt(dictHeytingAlgebra); + }); + }; + exports["HeytingAlgebra"] = HeytingAlgebra; + exports["tt"] = tt; + exports["ff"] = ff; + exports["implies"] = implies; + exports["conj"] = conj; + exports["disj"] = disj; + exports["not"] = not; + exports["heytingAlgebraBoolean"] = heytingAlgebraBoolean; + exports["heytingAlgebraFunction"] = heytingAlgebraFunction; +})(PS["Data.HeytingAlgebra"] = PS["Data.HeytingAlgebra"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Data_Show = PS["Data.Show"]; + var absurd = function (a) { + var spin = function ($copy_v) { + var $tco_result; + function $tco_loop(v) { + $copy_v = v; + return; + }; + while (!false) { + $tco_result = $tco_loop($copy_v); + }; + return $tco_result; + }; + return spin(a); + }; + exports["absurd"] = absurd; +})(PS["Data.Void"] = PS["Data.Void"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.Eq"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Symbol = PS["Data.Symbol"]; + var Data_Unit = PS["Data.Unit"]; + var Data_Void = PS["Data.Void"]; + var Record_Unsafe = PS["Record.Unsafe"]; + var Type_Data_RowList = PS["Type.Data.RowList"]; + var Eq = function (eq) { + this.eq = eq; + }; + var eqVoid = new Eq(function (v) { + return function (v1) { + return true; + }; + }); + var eqUnit = new Eq(function (v) { + return function (v1) { + return true; + }; + }); + var eqString = new Eq($foreign.refEq); + var eqInt = new Eq($foreign.refEq); + var eqChar = new Eq($foreign.refEq); + var eq = function (dict) { + return dict.eq; + }; + exports["Eq"] = Eq; + exports["eq"] = eq; + exports["eqInt"] = eqInt; + exports["eqChar"] = eqChar; + exports["eqString"] = eqString; + exports["eqUnit"] = eqUnit; + exports["eqVoid"] = eqVoid; +})(PS["Data.Eq"] = PS["Data.Eq"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Semigroupoid = function (compose) { + this.compose = compose; + }; + var semigroupoidFn = new Semigroupoid(function (f) { + return function (g) { + return function (x) { + return f(g(x)); + }; + }; + }); + var compose = function (dict) { + return dict.compose; + }; + exports["compose"] = compose; + exports["Semigroupoid"] = Semigroupoid; + exports["semigroupoidFn"] = semigroupoidFn; +})(PS["Control.Semigroupoid"] = PS["Control.Semigroupoid"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Category = function (Semigroupoid0, identity) { + this.Semigroupoid0 = Semigroupoid0; + this.identity = identity; + }; + var identity = function (dict) { + return dict.identity; + }; + var categoryFn = new Category(function () { + return Control_Semigroupoid.semigroupoidFn; + }, function (x) { + return x; + }); + exports["Category"] = Category; + exports["identity"] = identity; + exports["categoryFn"] = categoryFn; +})(PS["Control.Category"] = PS["Control.Category"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var otherwise = true; + exports["otherwise"] = otherwise; +})(PS["Data.Boolean"] = PS["Data.Boolean"] || {}); +(function(exports) { + "use strict"; + + exports.unsafeCompareImpl = function (lt) { + return function (eq) { + return function (gt) { + return function (x) { + return function (y) { + return x < y ? lt : x === y ? eq : gt; + }; + }; + }; + }; + }; +})(PS["Data.Ord.Unsafe"] = PS["Data.Ord.Unsafe"] || {}); +(function(exports) { + "use strict"; + + exports.concatString = function (s1) { + return function (s2) { + return s1 + s2; + }; + }; + + exports.concatArray = function (xs) { + return function (ys) { + if (xs.length === 0) return ys; + if (ys.length === 0) return xs; + return xs.concat(ys); + }; + }; +})(PS["Data.Semigroup"] = PS["Data.Semigroup"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.Semigroup"]; + var Data_Symbol = PS["Data.Symbol"]; + var Data_Unit = PS["Data.Unit"]; + var Data_Void = PS["Data.Void"]; + var Record_Unsafe = PS["Record.Unsafe"]; + var Type_Data_RowList = PS["Type.Data.RowList"]; + var Semigroup = function (append) { + this.append = append; + }; + var semigroupString = new Semigroup($foreign.concatString); + var semigroupArray = new Semigroup($foreign.concatArray); + var append = function (dict) { + return dict.append; + }; + var semigroupFn = function (dictSemigroup) { + return new Semigroup(function (f) { + return function (g) { + return function (x) { + return append(dictSemigroup)(f(x))(g(x)); + }; + }; + }); + }; + exports["Semigroup"] = Semigroup; + exports["append"] = append; + exports["semigroupString"] = semigroupString; + exports["semigroupFn"] = semigroupFn; + exports["semigroupArray"] = semigroupArray; +})(PS["Data.Semigroup"] = PS["Data.Semigroup"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Data_Eq = PS["Data.Eq"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Show = PS["Data.Show"]; + var LT = (function () { + function LT() { + + }; + LT.value = new LT(); + return LT; + })(); + var GT = (function () { + function GT() { + + }; + GT.value = new GT(); + return GT; + })(); + var EQ = (function () { + function EQ() { + + }; + EQ.value = new EQ(); + return EQ; + })(); + exports["LT"] = LT; + exports["GT"] = GT; + exports["EQ"] = EQ; +})(PS["Data.Ordering"] = PS["Data.Ordering"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.Ord.Unsafe"]; + var Data_Ordering = PS["Data.Ordering"]; + var unsafeCompare = $foreign.unsafeCompareImpl(Data_Ordering.LT.value)(Data_Ordering.EQ.value)(Data_Ordering.GT.value); + exports["unsafeCompare"] = unsafeCompare; +})(PS["Data.Ord.Unsafe"] = PS["Data.Ord.Unsafe"] || {}); +(function(exports) { + "use strict"; + + exports.intSub = function (x) { + return function (y) { + /* jshint bitwise: false */ + return x - y | 0; + }; + }; +})(PS["Data.Ring"] = PS["Data.Ring"] || {}); +(function(exports) { + "use strict"; + + exports.intAdd = function (x) { + return function (y) { + /* jshint bitwise: false */ + return x + y | 0; + }; + }; + + exports.intMul = function (x) { + return function (y) { + /* jshint bitwise: false */ + return x * y | 0; + }; + }; +})(PS["Data.Semiring"] = PS["Data.Semiring"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.Semiring"]; + var Data_Symbol = PS["Data.Symbol"]; + var Data_Unit = PS["Data.Unit"]; + var Record_Unsafe = PS["Record.Unsafe"]; + var Type_Data_Row = PS["Type.Data.Row"]; + var Type_Data_RowList = PS["Type.Data.RowList"]; + var Semiring = function (add, mul, one, zero) { + this.add = add; + this.mul = mul; + this.one = one; + this.zero = zero; + }; + var zero = function (dict) { + return dict.zero; + }; + var semiringInt = new Semiring($foreign.intAdd, $foreign.intMul, 1, 0); + var one = function (dict) { + return dict.one; + }; + var mul = function (dict) { + return dict.mul; + }; + var add = function (dict) { + return dict.add; + }; + exports["Semiring"] = Semiring; + exports["add"] = add; + exports["zero"] = zero; + exports["mul"] = mul; + exports["one"] = one; + exports["semiringInt"] = semiringInt; +})(PS["Data.Semiring"] = PS["Data.Semiring"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.Ring"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Symbol = PS["Data.Symbol"]; + var Data_Unit = PS["Data.Unit"]; + var Record_Unsafe = PS["Record.Unsafe"]; + var Type_Data_RowList = PS["Type.Data.RowList"]; + var Ring = function (Semiring0, sub) { + this.Semiring0 = Semiring0; + this.sub = sub; + }; + var sub = function (dict) { + return dict.sub; + }; + var ringInt = new Ring(function () { + return Data_Semiring.semiringInt; + }, $foreign.intSub); + exports["Ring"] = Ring; + exports["sub"] = sub; + exports["ringInt"] = ringInt; +})(PS["Data.Ring"] = PS["Data.Ring"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.Ord"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Ord_Unsafe = PS["Data.Ord.Unsafe"]; + var Data_Ordering = PS["Data.Ordering"]; + var Data_Ring = PS["Data.Ring"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Symbol = PS["Data.Symbol"]; + var Data_Unit = PS["Data.Unit"]; + var Data_Void = PS["Data.Void"]; + var Record_Unsafe = PS["Record.Unsafe"]; + var Type_Data_RowList = PS["Type.Data.RowList"]; + var Ord = function (Eq0, compare) { + this.Eq0 = Eq0; + this.compare = compare; + }; + var ordVoid = new Ord(function () { + return Data_Eq.eqVoid; + }, function (v) { + return function (v1) { + return Data_Ordering.EQ.value; + }; + }); + var ordUnit = new Ord(function () { + return Data_Eq.eqUnit; + }, function (v) { + return function (v1) { + return Data_Ordering.EQ.value; + }; + }); + var ordString = new Ord(function () { + return Data_Eq.eqString; + }, Data_Ord_Unsafe.unsafeCompare); + var ordInt = new Ord(function () { + return Data_Eq.eqInt; + }, Data_Ord_Unsafe.unsafeCompare); + var ordChar = new Ord(function () { + return Data_Eq.eqChar; + }, Data_Ord_Unsafe.unsafeCompare); + var compare = function (dict) { + return dict.compare; + }; + exports["Ord"] = Ord; + exports["compare"] = compare; + exports["ordInt"] = ordInt; + exports["ordString"] = ordString; + exports["ordChar"] = ordChar; + exports["ordUnit"] = ordUnit; + exports["ordVoid"] = ordVoid; +})(PS["Data.Ord"] = PS["Data.Ord"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Category = PS["Control.Category"]; + var Data_Boolean = PS["Data.Boolean"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ring = PS["Data.Ring"]; + var on = function (f) { + return function (g) { + return function (x) { + return function (y) { + return f(g(x))(g(y)); + }; + }; + }; + }; + var flip = function (f) { + return function (b) { + return function (a) { + return f(a)(b); + }; + }; + }; + var $$const = function (a) { + return function (v) { + return a; + }; + }; + exports["flip"] = flip; + exports["const"] = $$const; + exports["on"] = on; +})(PS["Data.Function"] = PS["Data.Function"] || {}); +(function(exports) { + "use strict"; + + exports.runFn4 = function (fn) { + return function (a) { + return function (b) { + return function (c) { + return function (d) { + return fn(a, b, c, d); + }; + }; + }; + }; + }; +})(PS["Data.Function.Uncurried"] = PS["Data.Function.Uncurried"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.Function.Uncurried"]; + var Data_Unit = PS["Data.Unit"]; + exports["runFn4"] = $foreign.runFn4; +})(PS["Data.Function.Uncurried"] = PS["Data.Function.Uncurried"] || {}); +(function(exports) { + "use strict"; + + exports.arrayMap = function (f) { + return function (arr) { + var l = arr.length; + var result = new Array(l); + for (var i = 0; i < l; i++) { + result[i] = f(arr[i]); + } + return result; + }; + }; +})(PS["Data.Functor"] = PS["Data.Functor"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.Functor"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Function = PS["Data.Function"]; + var Data_Unit = PS["Data.Unit"]; + var Functor = function (map) { + this.map = map; + }; + var map = function (dict) { + return dict.map; + }; + var $$void = function (dictFunctor) { + return map(dictFunctor)(Data_Function["const"](Data_Unit.unit)); + }; + var voidLeft = function (dictFunctor) { + return function (f) { + return function (x) { + return map(dictFunctor)(Data_Function["const"](x))(f); + }; + }; + }; + var functorFn = new Functor(Control_Semigroupoid.compose(Control_Semigroupoid.semigroupoidFn)); + var functorArray = new Functor($foreign.arrayMap); + exports["Functor"] = Functor; + exports["map"] = map; + exports["void"] = $$void; + exports["voidLeft"] = voidLeft; + exports["functorFn"] = functorFn; + exports["functorArray"] = functorArray; +})(PS["Data.Functor"] = PS["Data.Functor"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Data_Functor = PS["Data.Functor"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Alt = function (Functor0, alt) { + this.Functor0 = Functor0; + this.alt = alt; + }; + var alt = function (dict) { + return dict.alt; + }; + exports["Alt"] = Alt; + exports["alt"] = alt; +})(PS["Control.Alt"] = PS["Control.Alt"] || {}); +(function(exports) { + "use strict"; + + exports.arrayApply = function (fs) { + return function (xs) { + var l = fs.length; + var k = xs.length; + var result = new Array(l*k); + var n = 0; + for (var i = 0; i < l; i++) { + var f = fs[i]; + for (var j = 0; j < k; j++) { + result[n++] = f(xs[j]); + } + } + return result; + }; + }; +})(PS["Control.Apply"] = PS["Control.Apply"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Control.Apply"]; + var Control_Category = PS["Control.Category"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Apply = function (Functor0, apply) { + this.Functor0 = Functor0; + this.apply = apply; + }; + var applyArray = new Apply(function () { + return Data_Functor.functorArray; + }, $foreign.arrayApply); + var apply = function (dict) { + return dict.apply; + }; + var applySecond = function (dictApply) { + return function (a) { + return function (b) { + return apply(dictApply)(Data_Functor.map(dictApply.Functor0())(Data_Function["const"](Control_Category.identity(Control_Category.categoryFn)))(a))(b); + }; + }; + }; + var lift2 = function (dictApply) { + return function (f) { + return function (a) { + return function (b) { + return apply(dictApply)(Data_Functor.map(dictApply.Functor0())(f)(a))(b); + }; + }; + }; + }; + exports["Apply"] = Apply; + exports["apply"] = apply; + exports["applySecond"] = applySecond; + exports["lift2"] = lift2; + exports["applyArray"] = applyArray; +})(PS["Control.Apply"] = PS["Control.Apply"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Apply = PS["Control.Apply"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Unit = PS["Data.Unit"]; + var Applicative = function (Apply0, pure) { + this.Apply0 = Apply0; + this.pure = pure; + }; + var pure = function (dict) { + return dict.pure; + }; + var when = function (dictApplicative) { + return function (v) { + return function (v1) { + if (v) { + return v1; + }; + if (!v) { + return pure(dictApplicative)(Data_Unit.unit); + }; + throw new Error("Failed pattern match at Control.Applicative (line 57, column 1 - line 57, column 63): " + [ v.constructor.name, v1.constructor.name ]); + }; + }; + }; + var liftA1 = function (dictApplicative) { + return function (f) { + return function (a) { + return Control_Apply.apply(dictApplicative.Apply0())(pure(dictApplicative)(f))(a); + }; + }; + }; + exports["Applicative"] = Applicative; + exports["pure"] = pure; + exports["liftA1"] = liftA1; + exports["when"] = when; +})(PS["Control.Applicative"] = PS["Control.Applicative"] || {}); +(function(exports) { + "use strict"; + + exports.arrayBind = function (arr) { + return function (f) { + var result = []; + for (var i = 0, l = arr.length; i < l; i++) { + Array.prototype.push.apply(result, f(arr[i])); + } + return result; + }; + }; +})(PS["Control.Bind"] = PS["Control.Bind"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Control.Bind"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Category = PS["Control.Category"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Unit = PS["Data.Unit"]; + var Bind = function (Apply0, bind) { + this.Apply0 = Apply0; + this.bind = bind; + }; + var Discard = function (discard) { + this.discard = discard; + }; + var discard = function (dict) { + return dict.discard; + }; + var bindArray = new Bind(function () { + return Control_Apply.applyArray; + }, $foreign.arrayBind); + var bind = function (dict) { + return dict.bind; + }; + var bindFlipped = function (dictBind) { + return Data_Function.flip(bind(dictBind)); + }; + var composeKleisliFlipped = function (dictBind) { + return function (f) { + return function (g) { + return function (a) { + return bindFlipped(dictBind)(f)(g(a)); + }; + }; + }; + }; + var composeKleisli = function (dictBind) { + return function (f) { + return function (g) { + return function (a) { + return bind(dictBind)(f(a))(g); + }; + }; + }; + }; + var discardUnit = new Discard(function (dictBind) { + return bind(dictBind); + }); + var join = function (dictBind) { + return function (m) { + return bind(dictBind)(m)(Control_Category.identity(Control_Category.categoryFn)); + }; + }; + exports["Bind"] = Bind; + exports["bind"] = bind; + exports["bindFlipped"] = bindFlipped; + exports["Discard"] = Discard; + exports["discard"] = discard; + exports["join"] = join; + exports["composeKleisli"] = composeKleisli; + exports["composeKleisliFlipped"] = composeKleisliFlipped; + exports["bindArray"] = bindArray; + exports["discardUnit"] = discardUnit; +})(PS["Control.Bind"] = PS["Control.Bind"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Unit = PS["Data.Unit"]; + var Monad = function (Applicative0, Bind1) { + this.Applicative0 = Applicative0; + this.Bind1 = Bind1; + }; + var ap = function (dictMonad) { + return function (f) { + return function (a) { + return Control_Bind.bind(dictMonad.Bind1())(f)(function (v) { + return Control_Bind.bind(dictMonad.Bind1())(a)(function (v1) { + return Control_Applicative.pure(dictMonad.Applicative0())(v(v1)); + }); + }); + }; + }; + }; + exports["Monad"] = Monad; + exports["ap"] = ap; +})(PS["Control.Monad"] = PS["Control.Monad"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Alt = PS["Control.Alt"]; + var Data_Functor = PS["Data.Functor"]; + var Plus = function (Alt0, empty) { + this.Alt0 = Alt0; + this.empty = empty; + }; + var empty = function (dict) { + return dict.empty; + }; + exports["Plus"] = Plus; + exports["empty"] = empty; +})(PS["Control.Plus"] = PS["Control.Plus"] || {}); +(function(exports) { + "use strict"; + + exports.topInt = 2147483647; + exports.bottomInt = -2147483648; + + exports.topChar = String.fromCharCode(65535); + exports.bottomChar = String.fromCharCode(0); +})(PS["Data.Bounded"] = PS["Data.Bounded"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.Bounded"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ordering = PS["Data.Ordering"]; + var Data_Unit = PS["Data.Unit"]; + var Bounded = function (Ord0, bottom, top) { + this.Ord0 = Ord0; + this.bottom = bottom; + this.top = top; + }; + var top = function (dict) { + return dict.top; + }; + var boundedInt = new Bounded(function () { + return Data_Ord.ordInt; + }, $foreign.bottomInt, $foreign.topInt); + var boundedChar = new Bounded(function () { + return Data_Ord.ordChar; + }, $foreign.bottomChar, $foreign.topChar); + var bottom = function (dict) { + return dict.bottom; + }; + exports["Bounded"] = Bounded; + exports["bottom"] = bottom; + exports["top"] = top; + exports["boundedInt"] = boundedInt; + exports["boundedChar"] = boundedChar; +})(PS["Data.Bounded"] = PS["Data.Bounded"] || {}); +(function(exports) { + "use strict"; + + exports.intDegree = function (x) { + return Math.min(Math.abs(x), 2147483647); + }; + + // See the Euclidean definition in + // https://en.m.wikipedia.org/wiki/Modulo_operation. + exports.intDiv = function (x) { + return function (y) { + if (y === 0) return 0; + return y > 0 ? Math.floor(x / y) : -Math.floor(x / -y); + }; + }; + + exports.intMod = function (x) { + return function (y) { + if (y === 0) return 0; + var yy = Math.abs(y); + return ((x % yy) + yy) % yy; + }; + }; +})(PS["Data.EuclideanRing"] = PS["Data.EuclideanRing"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Data_Ring = PS["Data.Ring"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Symbol = PS["Data.Symbol"]; + var Data_Unit = PS["Data.Unit"]; + var CommutativeRing = function (Ring0) { + this.Ring0 = Ring0; + }; + var commutativeRingInt = new CommutativeRing(function () { + return Data_Ring.ringInt; + }); + exports["CommutativeRing"] = CommutativeRing; + exports["commutativeRingInt"] = commutativeRingInt; +})(PS["Data.CommutativeRing"] = PS["Data.CommutativeRing"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.EuclideanRing"]; + var Data_BooleanAlgebra = PS["Data.BooleanAlgebra"]; + var Data_CommutativeRing = PS["Data.CommutativeRing"]; + var Data_Eq = PS["Data.Eq"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Ring = PS["Data.Ring"]; + var Data_Semiring = PS["Data.Semiring"]; + var EuclideanRing = function (CommutativeRing0, degree, div, mod) { + this.CommutativeRing0 = CommutativeRing0; + this.degree = degree; + this.div = div; + this.mod = mod; + }; + var mod = function (dict) { + return dict.mod; + }; + var euclideanRingInt = new EuclideanRing(function () { + return Data_CommutativeRing.commutativeRingInt; + }, $foreign.intDegree, $foreign.intDiv, $foreign.intMod); + var div = function (dict) { + return dict.div; + }; + var degree = function (dict) { + return dict.degree; + }; + exports["EuclideanRing"] = EuclideanRing; + exports["degree"] = degree; + exports["div"] = div; + exports["mod"] = mod; + exports["euclideanRingInt"] = euclideanRingInt; +})(PS["Data.EuclideanRing"] = PS["Data.EuclideanRing"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Data_Boolean = PS["Data.Boolean"]; + var Data_Eq = PS["Data.Eq"]; + var Data_EuclideanRing = PS["Data.EuclideanRing"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ordering = PS["Data.Ordering"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Symbol = PS["Data.Symbol"]; + var Data_Unit = PS["Data.Unit"]; + var Record_Unsafe = PS["Record.Unsafe"]; + var Type_Data_RowList = PS["Type.Data.RowList"]; + var Monoid = function (Semigroup0, mempty) { + this.Semigroup0 = Semigroup0; + this.mempty = mempty; + }; + var monoidString = new Monoid(function () { + return Data_Semigroup.semigroupString; + }, ""); + var monoidArray = new Monoid(function () { + return Data_Semigroup.semigroupArray; + }, [ ]); + var mempty = function (dict) { + return dict.mempty; + }; + var monoidFn = function (dictMonoid) { + return new Monoid(function () { + return Data_Semigroup.semigroupFn(dictMonoid.Semigroup0()); + }, function (v) { + return mempty(dictMonoid); + }); + }; + var guard = function (dictMonoid) { + return function (v) { + return function (v1) { + if (v) { + return v1; + }; + if (!v) { + return mempty(dictMonoid); + }; + throw new Error("Failed pattern match at Data.Monoid (line 74, column 1 - line 74, column 49): " + [ v.constructor.name, v1.constructor.name ]); + }; + }; + }; + exports["Monoid"] = Monoid; + exports["mempty"] = mempty; + exports["guard"] = guard; + exports["monoidFn"] = monoidFn; + exports["monoidString"] = monoidString; + exports["monoidArray"] = monoidArray; +})(PS["Data.Monoid"] = PS["Data.Monoid"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Alt = PS["Control.Alt"]; + var Control_Alternative = PS["Control.Alternative"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Category = PS["Control.Category"]; + var Control_Extend = PS["Control.Extend"]; + var Control_Monad = PS["Control.Monad"]; + var Control_MonadZero = PS["Control.MonadZero"]; + var Control_Plus = PS["Control.Plus"]; + var Data_Bounded = PS["Data.Bounded"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Functor_Invariant = PS["Data.Functor.Invariant"]; + var Data_Monoid = PS["Data.Monoid"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ordering = PS["Data.Ordering"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Show = PS["Data.Show"]; + var Data_Unit = PS["Data.Unit"]; + var Prelude = PS["Prelude"]; + var Nothing = (function () { + function Nothing() { + + }; + Nothing.value = new Nothing(); + return Nothing; + })(); + var Just = (function () { + function Just(value0) { + this.value0 = value0; + }; + Just.create = function (value0) { + return new Just(value0); + }; + return Just; + })(); + var maybe = function (v) { + return function (v1) { + return function (v2) { + if (v2 instanceof Nothing) { + return v; + }; + if (v2 instanceof Just) { + return v1(v2.value0); + }; + throw new Error("Failed pattern match at Data.Maybe (line 217, column 1 - line 217, column 51): " + [ v.constructor.name, v1.constructor.name, v2.constructor.name ]); + }; + }; + }; + var isNothing = maybe(true)(Data_Function["const"](false)); + var isJust = maybe(false)(Data_Function["const"](true)); + var functorMaybe = new Data_Functor.Functor(function (v) { + return function (v1) { + if (v1 instanceof Just) { + return new Just(v(v1.value0)); + }; + return Nothing.value; + }; + }); + var fromMaybe = function (a) { + return maybe(a)(Control_Category.identity(Control_Category.categoryFn)); + }; + var fromJust = function (dictPartial) { + return function (v) { + if (v instanceof Just) { + return v.value0; + }; + throw new Error("Failed pattern match at Data.Maybe (line 268, column 1 - line 268, column 46): " + [ v.constructor.name ]); + }; + }; + var applyMaybe = new Control_Apply.Apply(function () { + return functorMaybe; + }, function (v) { + return function (v1) { + if (v instanceof Just) { + return Data_Functor.map(functorMaybe)(v.value0)(v1); + }; + if (v instanceof Nothing) { + return Nothing.value; + }; + throw new Error("Failed pattern match at Data.Maybe (line 67, column 1 - line 67, column 35): " + [ v.constructor.name, v1.constructor.name ]); + }; + }); + var bindMaybe = new Control_Bind.Bind(function () { + return applyMaybe; + }, function (v) { + return function (v1) { + if (v instanceof Just) { + return v1(v.value0); + }; + if (v instanceof Nothing) { + return Nothing.value; + }; + throw new Error("Failed pattern match at Data.Maybe (line 125, column 1 - line 125, column 33): " + [ v.constructor.name, v1.constructor.name ]); + }; + }); + exports["Nothing"] = Nothing; + exports["Just"] = Just; + exports["maybe"] = maybe; + exports["fromMaybe"] = fromMaybe; + exports["isJust"] = isJust; + exports["isNothing"] = isNothing; + exports["fromJust"] = fromJust; + exports["functorMaybe"] = functorMaybe; + exports["applyMaybe"] = applyMaybe; + exports["bindMaybe"] = bindMaybe; +})(PS["Data.Maybe"] = PS["Data.Maybe"] || {}); +(function(exports) { + "use strict"; + + exports.empty = {}; + + exports._lookup = function (no, yes, k, m) { + return k in m ? yes(m[k]) : no; + }; + + function toArrayWithKey(f) { + return function (m) { + var r = []; + for (var k in m) { + if (hasOwnProperty.call(m, k)) { + r.push(f(k)(m[k])); + } + } + return r; + }; + } +})(PS["Foreign.Object"] = PS["Foreign.Object"] || {}); +(function(exports) { + "use strict"; + + //------------------------------------------------------------------------------ + // Array size ------------------------------------------------------------------ + //------------------------------------------------------------------------------ + + exports.length = function (xs) { + return xs.length; + }; + + //------------------------------------------------------------------------------ + // Extending arrays ------------------------------------------------------------ + //------------------------------------------------------------------------------ + + exports.cons = function (e) { + return function (l) { + return [e].concat(l); + }; + }; + + exports.snoc = function (l) { + return function (e) { + var l1 = l.slice(); + l1.push(e); + return l1; + }; + }; + + exports.concat = function (xss) { + if (xss.length <= 10000) { + // This method is faster, but it crashes on big arrays. + // So we use it when can and fallback to simple variant otherwise. + return Array.prototype.concat.apply([], xss); + } + + var result = []; + for (var i = 0, l = xss.length; i < l; i++) { + var xs = xss[i]; + for (var j = 0, m = xs.length; j < m; j++) { + result.push(xs[j]); + } + } + return result; + }; + + exports.filter = function (f) { + return function (xs) { + return xs.filter(f); + }; + }; + + //------------------------------------------------------------------------------ + // Subarrays ------------------------------------------------------------------- + //------------------------------------------------------------------------------ + + exports.slice = function (s) { + return function (e) { + return function (l) { + return l.slice(s, e); + }; + }; + }; + + exports.drop = function (n) { + return function (l) { + return n < 1 ? l : l.slice(n); + }; + }; +})(PS["Data.Array"] = PS["Data.Array"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Category = PS["Control.Category"]; + var Bifunctor = function (bimap) { + this.bimap = bimap; + }; + var bimap = function (dict) { + return dict.bimap; + }; + var rmap = function (dictBifunctor) { + return bimap(dictBifunctor)(Control_Category.identity(Control_Category.categoryFn)); + }; + exports["bimap"] = bimap; + exports["Bifunctor"] = Bifunctor; + exports["rmap"] = rmap; +})(PS["Data.Bifunctor"] = PS["Data.Bifunctor"] || {}); +(function(exports) { + "use strict"; + + exports.foldrArray = function (f) { + return function (init) { + return function (xs) { + var acc = init; + var len = xs.length; + for (var i = len - 1; i >= 0; i--) { + acc = f(xs[i])(acc); + } + return acc; + }; + }; + }; + + exports.foldlArray = function (f) { + return function (init) { + return function (xs) { + var acc = init; + var len = xs.length; + for (var i = 0; i < len; i++) { + acc = f(acc)(xs[i]); + } + return acc; + }; + }; + }; +})(PS["Data.Foldable"] = PS["Data.Foldable"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Monad = PS["Control.Monad"]; + var Data_Bounded = PS["Data.Bounded"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Functor = PS["Data.Functor"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Monoid = PS["Data.Monoid"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Show = PS["Data.Show"]; + var Prelude = PS["Prelude"]; + var Disj = function (x) { + return x; + }; + var semigroupDisj = function (dictHeytingAlgebra) { + return new Data_Semigroup.Semigroup(function (v) { + return function (v1) { + return Data_HeytingAlgebra.disj(dictHeytingAlgebra)(v)(v1); + }; + }); + }; + var monoidDisj = function (dictHeytingAlgebra) { + return new Data_Monoid.Monoid(function () { + return semigroupDisj(dictHeytingAlgebra); + }, Data_HeytingAlgebra.ff(dictHeytingAlgebra)); + }; + exports["Disj"] = Disj; + exports["semigroupDisj"] = semigroupDisj; + exports["monoidDisj"] = monoidDisj; +})(PS["Data.Monoid.Disj"] = PS["Data.Monoid.Disj"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Monoid_Additive = PS["Data.Monoid.Additive"]; + var Data_Monoid_Conj = PS["Data.Monoid.Conj"]; + var Data_Monoid_Disj = PS["Data.Monoid.Disj"]; + var Data_Monoid_Dual = PS["Data.Monoid.Dual"]; + var Data_Monoid_Endo = PS["Data.Monoid.Endo"]; + var Data_Monoid_Multiplicative = PS["Data.Monoid.Multiplicative"]; + var Data_Semigroup_First = PS["Data.Semigroup.First"]; + var Data_Semigroup_Last = PS["Data.Semigroup.Last"]; + var Prelude = PS["Prelude"]; + var Newtype = function (unwrap, wrap) { + this.unwrap = unwrap; + this.wrap = wrap; + }; + var wrap = function (dict) { + return dict.wrap; + }; + var unwrap = function (dict) { + return dict.unwrap; + }; + var newtypeDisj = new Newtype(function (v) { + return v; + }, Data_Monoid_Disj.Disj); + var alaF = function (dictFunctor) { + return function (dictFunctor1) { + return function (dictNewtype) { + return function (dictNewtype1) { + return function (v) { + return function (f) { + return function ($80) { + return Data_Functor.map(dictFunctor1)(unwrap(dictNewtype1))(f(Data_Functor.map(dictFunctor)(wrap(dictNewtype))($80))); + }; + }; + }; + }; + }; + }; + }; + exports["unwrap"] = unwrap; + exports["wrap"] = wrap; + exports["Newtype"] = Newtype; + exports["alaF"] = alaF; + exports["newtypeDisj"] = newtypeDisj; +})(PS["Data.Newtype"] = PS["Data.Newtype"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.Foldable"]; + var Control_Alt = PS["Control.Alt"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Category = PS["Control.Category"]; + var Control_Plus = PS["Control.Plus"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Maybe_First = PS["Data.Maybe.First"]; + var Data_Maybe_Last = PS["Data.Maybe.Last"]; + var Data_Monoid = PS["Data.Monoid"]; + var Data_Monoid_Additive = PS["Data.Monoid.Additive"]; + var Data_Monoid_Conj = PS["Data.Monoid.Conj"]; + var Data_Monoid_Disj = PS["Data.Monoid.Disj"]; + var Data_Monoid_Dual = PS["Data.Monoid.Dual"]; + var Data_Monoid_Endo = PS["Data.Monoid.Endo"]; + var Data_Monoid_Multiplicative = PS["Data.Monoid.Multiplicative"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ordering = PS["Data.Ordering"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Unit = PS["Data.Unit"]; + var Prelude = PS["Prelude"]; + var Foldable = function (foldMap, foldl, foldr) { + this.foldMap = foldMap; + this.foldl = foldl; + this.foldr = foldr; + }; + var foldr = function (dict) { + return dict.foldr; + }; + var traverse_ = function (dictApplicative) { + return function (dictFoldable) { + return function (f) { + return foldr(dictFoldable)(function ($195) { + return Control_Apply.applySecond(dictApplicative.Apply0())(f($195)); + })(Control_Applicative.pure(dictApplicative)(Data_Unit.unit)); + }; + }; + }; + var for_ = function (dictApplicative) { + return function (dictFoldable) { + return Data_Function.flip(traverse_(dictApplicative)(dictFoldable)); + }; + }; + var sequence_ = function (dictApplicative) { + return function (dictFoldable) { + return traverse_(dictApplicative)(dictFoldable)(Control_Category.identity(Control_Category.categoryFn)); + }; + }; + var foldl = function (dict) { + return dict.foldl; + }; + var foldableMaybe = new Foldable(function (dictMonoid) { + return function (f) { + return function (v) { + if (v instanceof Data_Maybe.Nothing) { + return Data_Monoid.mempty(dictMonoid); + }; + if (v instanceof Data_Maybe.Just) { + return f(v.value0); + }; + throw new Error("Failed pattern match at Data.Foldable (line 129, column 1 - line 129, column 41): " + [ f.constructor.name, v.constructor.name ]); + }; + }; + }, function (v) { + return function (z) { + return function (v1) { + if (v1 instanceof Data_Maybe.Nothing) { + return z; + }; + if (v1 instanceof Data_Maybe.Just) { + return v(z)(v1.value0); + }; + throw new Error("Failed pattern match at Data.Foldable (line 129, column 1 - line 129, column 41): " + [ v.constructor.name, z.constructor.name, v1.constructor.name ]); + }; + }; + }, function (v) { + return function (z) { + return function (v1) { + if (v1 instanceof Data_Maybe.Nothing) { + return z; + }; + if (v1 instanceof Data_Maybe.Just) { + return v(v1.value0)(z); + }; + throw new Error("Failed pattern match at Data.Foldable (line 129, column 1 - line 129, column 41): " + [ v.constructor.name, z.constructor.name, v1.constructor.name ]); + }; + }; + }); + var foldMapDefaultR = function (dictFoldable) { + return function (dictMonoid) { + return function (f) { + return foldr(dictFoldable)(function (x) { + return function (acc) { + return Data_Semigroup.append(dictMonoid.Semigroup0())(f(x))(acc); + }; + })(Data_Monoid.mempty(dictMonoid)); + }; + }; + }; + var foldableArray = new Foldable(function (dictMonoid) { + return foldMapDefaultR(foldableArray)(dictMonoid); + }, $foreign.foldlArray, $foreign.foldrArray); + var foldMap = function (dict) { + return dict.foldMap; + }; + var find = function (dictFoldable) { + return function (p) { + var go = function (v) { + return function (v1) { + if (v instanceof Data_Maybe.Nothing && p(v1)) { + return new Data_Maybe.Just(v1); + }; + return v; + }; + }; + return foldl(dictFoldable)(go)(Data_Maybe.Nothing.value); + }; + }; + var any = function (dictFoldable) { + return function (dictHeytingAlgebra) { + return Data_Newtype.alaF(Data_Functor.functorFn)(Data_Functor.functorFn)(Data_Newtype.newtypeDisj)(Data_Newtype.newtypeDisj)(Data_Monoid_Disj.Disj)(foldMap(dictFoldable)(Data_Monoid_Disj.monoidDisj(dictHeytingAlgebra))); + }; + }; + exports["Foldable"] = Foldable; + exports["foldr"] = foldr; + exports["foldl"] = foldl; + exports["foldMap"] = foldMap; + exports["foldMapDefaultR"] = foldMapDefaultR; + exports["traverse_"] = traverse_; + exports["for_"] = for_; + exports["sequence_"] = sequence_; + exports["any"] = any; + exports["find"] = find; + exports["foldableArray"] = foldableArray; + exports["foldableMaybe"] = foldableMaybe; +})(PS["Data.Foldable"] = PS["Data.Foldable"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Alt = PS["Control.Alt"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Extend = PS["Control.Extend"]; + var Control_Monad = PS["Control.Monad"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Bifoldable = PS["Data.Bifoldable"]; + var Data_Bifunctor = PS["Data.Bifunctor"]; + var Data_Bitraversable = PS["Data.Bitraversable"]; + var Data_Bounded = PS["Data.Bounded"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_FoldableWithIndex = PS["Data.FoldableWithIndex"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Functor_Invariant = PS["Data.Functor.Invariant"]; + var Data_FunctorWithIndex = PS["Data.FunctorWithIndex"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Monoid = PS["Data.Monoid"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ordering = PS["Data.Ordering"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Show = PS["Data.Show"]; + var Data_Traversable = PS["Data.Traversable"]; + var Data_TraversableWithIndex = PS["Data.TraversableWithIndex"]; + var Data_Unit = PS["Data.Unit"]; + var Prelude = PS["Prelude"]; + var Left = (function () { + function Left(value0) { + this.value0 = value0; + }; + Left.create = function (value0) { + return new Left(value0); + }; + return Left; + })(); + var Right = (function () { + function Right(value0) { + this.value0 = value0; + }; + Right.create = function (value0) { + return new Right(value0); + }; + return Right; + })(); + var functorEither = new Data_Functor.Functor(function (f) { + return function (m) { + if (m instanceof Left) { + return new Left(m.value0); + }; + if (m instanceof Right) { + return new Right(f(m.value0)); + }; + throw new Error("Failed pattern match at Data.Either (line 38, column 8 - line 38, column 52): " + [ m.constructor.name ]); + }; + }); + var either = function (v) { + return function (v1) { + return function (v2) { + if (v2 instanceof Left) { + return v(v2.value0); + }; + if (v2 instanceof Right) { + return v1(v2.value0); + }; + throw new Error("Failed pattern match at Data.Either (line 238, column 1 - line 238, column 64): " + [ v.constructor.name, v1.constructor.name, v2.constructor.name ]); + }; + }; + }; + var bifunctorEither = new Data_Bifunctor.Bifunctor(function (v) { + return function (v1) { + return function (v2) { + if (v2 instanceof Left) { + return new Left(v(v2.value0)); + }; + if (v2 instanceof Right) { + return new Right(v1(v2.value0)); + }; + throw new Error("Failed pattern match at Data.Either (line 46, column 1 - line 46, column 45): " + [ v.constructor.name, v1.constructor.name, v2.constructor.name ]); + }; + }; + }); + var applyEither = new Control_Apply.Apply(function () { + return functorEither; + }, function (v) { + return function (v1) { + if (v instanceof Left) { + return new Left(v.value0); + }; + if (v instanceof Right) { + return Data_Functor.map(functorEither)(v.value0)(v1); + }; + throw new Error("Failed pattern match at Data.Either (line 82, column 1 - line 82, column 41): " + [ v.constructor.name, v1.constructor.name ]); + }; + }); + exports["Left"] = Left; + exports["Right"] = Right; + exports["either"] = either; + exports["functorEither"] = functorEither; + exports["bifunctorEither"] = bifunctorEither; + exports["applyEither"] = applyEither; +})(PS["Data.Either"] = PS["Data.Either"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Alt = PS["Control.Alt"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Comonad = PS["Control.Comonad"]; + var Control_Extend = PS["Control.Extend"]; + var Control_Lazy = PS["Control.Lazy"]; + var Control_Monad = PS["Control.Monad"]; + var Data_BooleanAlgebra = PS["Data.BooleanAlgebra"]; + var Data_Bounded = PS["Data.Bounded"]; + var Data_CommutativeRing = PS["Data.CommutativeRing"]; + var Data_Eq = PS["Data.Eq"]; + var Data_EuclideanRing = PS["Data.EuclideanRing"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_FoldableWithIndex = PS["Data.FoldableWithIndex"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Functor_Invariant = PS["Data.Functor.Invariant"]; + var Data_FunctorWithIndex = PS["Data.FunctorWithIndex"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Monoid = PS["Data.Monoid"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ring = PS["Data.Ring"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Semigroup_Foldable = PS["Data.Semigroup.Foldable"]; + var Data_Semigroup_Traversable = PS["Data.Semigroup.Traversable"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Show = PS["Data.Show"]; + var Data_Traversable = PS["Data.Traversable"]; + var Data_TraversableWithIndex = PS["Data.TraversableWithIndex"]; + var Data_Unit = PS["Data.Unit"]; + var Prelude = PS["Prelude"]; + var Identity = function (x) { + return x; + }; + var newtypeIdentity = new Data_Newtype.Newtype(function (n) { + return n; + }, Identity); + var functorIdentity = new Data_Functor.Functor(function (f) { + return function (m) { + return f(m); + }; + }); + var applyIdentity = new Control_Apply.Apply(function () { + return functorIdentity; + }, function (v) { + return function (v1) { + return v(v1); + }; + }); + var bindIdentity = new Control_Bind.Bind(function () { + return applyIdentity; + }, function (v) { + return function (f) { + return f(v); + }; + }); + var applicativeIdentity = new Control_Applicative.Applicative(function () { + return applyIdentity; + }, Identity); + var monadIdentity = new Control_Monad.Monad(function () { + return applicativeIdentity; + }, function () { + return bindIdentity; + }); + exports["Identity"] = Identity; + exports["newtypeIdentity"] = newtypeIdentity; + exports["functorIdentity"] = functorIdentity; + exports["applyIdentity"] = applyIdentity; + exports["applicativeIdentity"] = applicativeIdentity; + exports["bindIdentity"] = bindIdentity; + exports["monadIdentity"] = monadIdentity; +})(PS["Data.Identity"] = PS["Data.Identity"] || {}); +(function(exports) { + "use strict"; + + exports.pureE = function (a) { + return function () { + return a; + }; + }; + + exports.bindE = function (a) { + return function (f) { + return function () { + return f(a())(); + }; + }; + }; + + exports.foreachE = function (as) { + return function (f) { + return function () { + for (var i = 0, l = as.length; i < l; i++) { + f(as[i])(); + } + }; + }; + }; +})(PS["Effect"] = PS["Effect"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Effect"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Monad = PS["Control.Monad"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Monoid = PS["Data.Monoid"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Prelude = PS["Prelude"]; + var monadEffect = new Control_Monad.Monad(function () { + return applicativeEffect; + }, function () { + return bindEffect; + }); + var bindEffect = new Control_Bind.Bind(function () { + return applyEffect; + }, $foreign.bindE); + var applyEffect = new Control_Apply.Apply(function () { + return functorEffect; + }, Control_Monad.ap(monadEffect)); + var applicativeEffect = new Control_Applicative.Applicative(function () { + return applyEffect; + }, $foreign.pureE); + var functorEffect = new Data_Functor.Functor(Control_Applicative.liftA1(applicativeEffect)); + exports["functorEffect"] = functorEffect; + exports["applyEffect"] = applyEffect; + exports["applicativeEffect"] = applicativeEffect; + exports["bindEffect"] = bindEffect; + exports["monadEffect"] = monadEffect; + exports["foreachE"] = $foreign.foreachE; +})(PS["Effect"] = PS["Effect"] || {}); +(function(exports) { + "use strict"; + + exports.new = function (val) { + return function () { + return { value: val }; + }; + }; + + exports.read = function (ref) { + return function () { + return ref.value; + }; + }; + + exports["modify'"] = function (f) { + return function (ref) { + return function () { + var t = f(ref.value); + ref.value = t.state; + return t.value; + }; + }; + }; + + exports.write = function (val) { + return function (ref) { + return function () { + ref.value = val; + return {}; + }; + }; + }; +})(PS["Effect.Ref"] = PS["Effect.Ref"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Effect.Ref"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Effect = PS["Effect"]; + var Prelude = PS["Prelude"]; + var modify = function (f) { + return $foreign["modify'"](function (s) { + var s$prime = f(s); + return { + state: s$prime, + value: s$prime + }; + }); + }; + var modify_ = function (f) { + return function (s) { + return Data_Functor["void"](Effect.functorEffect)(modify(f)(s)); + }; + }; + exports["modify"] = modify; + exports["modify_"] = modify_; + exports["new"] = $foreign["new"]; + exports["read"] = $foreign.read; + exports["modify'"] = $foreign["modify'"]; + exports["write"] = $foreign.write; +})(PS["Effect.Ref"] = PS["Effect.Ref"] || {}); +(function(exports) { + "use strict"; + + // module Partial.Unsafe + + exports.unsafePartial = function (f) { + return f(); + }; +})(PS["Partial.Unsafe"] = PS["Partial.Unsafe"] || {}); +(function(exports) { + "use strict"; + + // module Partial + + exports.crashWith = function () { + return function (msg) { + throw new Error(msg); + }; + }; +})(PS["Partial"] = PS["Partial"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Partial"]; + exports["crashWith"] = $foreign.crashWith; +})(PS["Partial"] = PS["Partial"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Partial.Unsafe"]; + var Partial = PS["Partial"]; + var unsafeCrashWith = function (msg) { + return $foreign.unsafePartial(function (dictPartial) { + return Partial.crashWith(dictPartial)(msg); + }); + }; + exports["unsafeCrashWith"] = unsafeCrashWith; +})(PS["Partial.Unsafe"] = PS["Partial.Unsafe"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Monad = PS["Control.Monad"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Bifunctor = PS["Data.Bifunctor"]; + var Data_Either = PS["Data.Either"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Identity = PS["Data.Identity"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Unit = PS["Data.Unit"]; + var Effect = PS["Effect"]; + var Effect_Ref = PS["Effect.Ref"]; + var Partial_Unsafe = PS["Partial.Unsafe"]; + var Prelude = PS["Prelude"]; + var Loop = (function () { + function Loop(value0) { + this.value0 = value0; + }; + Loop.create = function (value0) { + return new Loop(value0); + }; + return Loop; + })(); + var Done = (function () { + function Done(value0) { + this.value0 = value0; + }; + Done.create = function (value0) { + return new Done(value0); + }; + return Done; + })(); + var MonadRec = function (Monad0, tailRecM) { + this.Monad0 = Monad0; + this.tailRecM = tailRecM; + }; + var tailRecM = function (dict) { + return dict.tailRecM; + }; + var monadRecEffect = new MonadRec(function () { + return Effect.monadEffect; + }, function (f) { + return function (a) { + var fromDone = function (v) { + if (v instanceof Done) { + return v.value0; + }; + throw new Error("Failed pattern match at Control.Monad.Rec.Class (line 111, column 30 - line 111, column 44): " + [ v.constructor.name ]); + }; + return function __do() { + var v = Control_Bind.bindFlipped(Effect.bindEffect)(Effect_Ref["new"])(f(a))(); + (function () { + while (!(function __do() { + var v1 = Effect_Ref.read(v)(); + if (v1 instanceof Loop) { + var v2 = f(v1.value0)(); + var v3 = Effect_Ref.write(v2)(v)(); + return false; + }; + if (v1 instanceof Done) { + return true; + }; + throw new Error("Failed pattern match at Control.Monad.Rec.Class (line 102, column 22 - line 107, column 28): " + [ v1.constructor.name ]); + })()) { + + }; + return {}; + })(); + return Data_Functor.map(Effect.functorEffect)(fromDone)(Effect_Ref.read(v))(); + }; + }; + }); + exports["Loop"] = Loop; + exports["Done"] = Done; + exports["MonadRec"] = MonadRec; + exports["tailRecM"] = tailRecM; + exports["monadRecEffect"] = monadRecEffect; +})(PS["Control.Monad.Rec.Class"] = PS["Control.Monad.Rec.Class"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Biapplicative = PS["Control.Biapplicative"]; + var Control_Biapply = PS["Control.Biapply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Comonad = PS["Control.Comonad"]; + var Control_Extend = PS["Control.Extend"]; + var Control_Lazy = PS["Control.Lazy"]; + var Control_Monad = PS["Control.Monad"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Bifoldable = PS["Data.Bifoldable"]; + var Data_Bifunctor = PS["Data.Bifunctor"]; + var Data_Bitraversable = PS["Data.Bitraversable"]; + var Data_BooleanAlgebra = PS["Data.BooleanAlgebra"]; + var Data_Bounded = PS["Data.Bounded"]; + var Data_CommutativeRing = PS["Data.CommutativeRing"]; + var Data_Distributive = PS["Data.Distributive"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_FoldableWithIndex = PS["Data.FoldableWithIndex"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Functor_Invariant = PS["Data.Functor.Invariant"]; + var Data_FunctorWithIndex = PS["Data.FunctorWithIndex"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Maybe_First = PS["Data.Maybe.First"]; + var Data_Monoid = PS["Data.Monoid"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ordering = PS["Data.Ordering"]; + var Data_Ring = PS["Data.Ring"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Semigroup_Foldable = PS["Data.Semigroup.Foldable"]; + var Data_Semigroup_Traversable = PS["Data.Semigroup.Traversable"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Show = PS["Data.Show"]; + var Data_Traversable = PS["Data.Traversable"]; + var Data_TraversableWithIndex = PS["Data.TraversableWithIndex"]; + var Data_Unit = PS["Data.Unit"]; + var Prelude = PS["Prelude"]; + var Type_Equality = PS["Type.Equality"]; + var Tuple = (function () { + function Tuple(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + Tuple.create = function (value0) { + return function (value1) { + return new Tuple(value0, value1); + }; + }; + return Tuple; + })(); + var snd = function (v) { + return v.value1; + }; + var functorTuple = new Data_Functor.Functor(function (f) { + return function (m) { + return new Tuple(m.value0, f(m.value1)); + }; + }); + var fst = function (v) { + return v.value0; + }; + exports["Tuple"] = Tuple; + exports["fst"] = fst; + exports["snd"] = snd; + exports["functorTuple"] = functorTuple; +})(PS["Data.Tuple"] = PS["Data.Tuple"] || {}); +(function(exports) { + "use strict"; + + exports.unfoldrArrayImpl = function (isNothing) { + return function (fromJust) { + return function (fst) { + return function (snd) { + return function (f) { + return function (b) { + var result = []; + var value = b; + while (true) { // eslint-disable-line no-constant-condition + var maybe = f(value); + if (isNothing(maybe)) return result; + var tuple = fromJust(maybe); + result.push(fst(tuple)); + value = snd(tuple); + } + }; + }; + }; + }; + }; + }; +})(PS["Data.Unfoldable"] = PS["Data.Unfoldable"] || {}); +(function(exports) { + "use strict"; + + exports.unfoldr1ArrayImpl = function (isNothing) { + return function (fromJust) { + return function (fst) { + return function (snd) { + return function (f) { + return function (b) { + var result = []; + var value = b; + while (true) { // eslint-disable-line no-constant-condition + var tuple = f(value); + result.push(fst(tuple)); + var maybe = snd(tuple); + if (isNothing(maybe)) return result; + value = fromJust(maybe); + } + }; + }; + }; + }; + }; + }; +})(PS["Data.Unfoldable1"] = PS["Data.Unfoldable1"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.Unfoldable1"]; + var Data_Boolean = PS["Data.Boolean"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ring = PS["Data.Ring"]; + var Data_Semigroup_Traversable = PS["Data.Semigroup.Traversable"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Tuple = PS["Data.Tuple"]; + var Partial_Unsafe = PS["Partial.Unsafe"]; + var Prelude = PS["Prelude"]; + var Unfoldable1 = function (unfoldr1) { + this.unfoldr1 = unfoldr1; + }; + var unfoldr1 = function (dict) { + return dict.unfoldr1; + }; + var unfoldable1Array = new Unfoldable1($foreign.unfoldr1ArrayImpl(Data_Maybe.isNothing)(Data_Maybe.fromJust())(Data_Tuple.fst)(Data_Tuple.snd)); + exports["Unfoldable1"] = Unfoldable1; + exports["unfoldr1"] = unfoldr1; + exports["unfoldable1Array"] = unfoldable1Array; +})(PS["Data.Unfoldable1"] = PS["Data.Unfoldable1"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.Unfoldable"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ring = PS["Data.Ring"]; + var Data_Traversable = PS["Data.Traversable"]; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unfoldable1 = PS["Data.Unfoldable1"]; + var Data_Unit = PS["Data.Unit"]; + var Partial_Unsafe = PS["Partial.Unsafe"]; + var Prelude = PS["Prelude"]; + var Unfoldable = function (Unfoldable10, unfoldr) { + this.Unfoldable10 = Unfoldable10; + this.unfoldr = unfoldr; + }; + var unfoldr = function (dict) { + return dict.unfoldr; + }; + var unfoldableArray = new Unfoldable(function () { + return Data_Unfoldable1.unfoldable1Array; + }, $foreign.unfoldrArrayImpl(Data_Maybe.isNothing)(Data_Maybe.fromJust())(Data_Tuple.fst)(Data_Tuple.snd)); + exports["Unfoldable"] = Unfoldable; + exports["unfoldr"] = unfoldr; + exports["unfoldableArray"] = unfoldableArray; +})(PS["Data.Unfoldable"] = PS["Data.Unfoldable"] || {}); +(function(exports) { + "use strict"; + + // module Unsafe.Coerce + + exports.unsafeCoerce = function (x) { + return x; + }; +})(PS["Unsafe.Coerce"] = PS["Unsafe.Coerce"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Unsafe.Coerce"]; + exports["unsafeCoerce"] = $foreign.unsafeCoerce; +})(PS["Unsafe.Coerce"] = PS["Unsafe.Coerce"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.Array"]; + var Control_Alt = PS["Control.Alt"]; + var Control_Alternative = PS["Control.Alternative"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Category = PS["Control.Category"]; + var Control_Lazy = PS["Control.Lazy"]; + var Control_Monad_Rec_Class = PS["Control.Monad.Rec.Class"]; + var Control_Monad_ST = PS["Control.Monad.ST"]; + var Control_Monad_ST_Internal = PS["Control.Monad.ST.Internal"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Array_NonEmpty_Internal = PS["Data.Array.NonEmpty.Internal"]; + var Data_Array_ST = PS["Data.Array.ST"]; + var Data_Array_ST_Iterator = PS["Data.Array.ST.Iterator"]; + var Data_Boolean = PS["Data.Boolean"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ordering = PS["Data.Ordering"]; + var Data_Ring = PS["Data.Ring"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Traversable = PS["Data.Traversable"]; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unfoldable = PS["Data.Unfoldable"]; + var Partial_Unsafe = PS["Partial.Unsafe"]; + var Prelude = PS["Prelude"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var singleton = function (a) { + return [ a ]; + }; + var concatMap = Data_Function.flip(Control_Bind.bind(Control_Bind.bindArray)); + var mapMaybe = function (f) { + return concatMap(function ($114) { + return Data_Maybe.maybe([ ])(singleton)(f($114)); + }); + }; + exports["singleton"] = singleton; + exports["concatMap"] = concatMap; + exports["mapMaybe"] = mapMaybe; + exports["length"] = $foreign.length; + exports["cons"] = $foreign.cons; + exports["snoc"] = $foreign.snoc; + exports["filter"] = $foreign.filter; + exports["drop"] = $foreign.drop; +})(PS["Data.Array"] = PS["Data.Array"] || {}); +(function(exports) { + "use strict"; + + exports["new"] = function () { + return {}; + }; +})(PS["Foreign.Object.ST"] = PS["Foreign.Object.ST"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Foreign.Object.ST"]; + var Control_Monad_ST = PS["Control.Monad.ST"]; + var Data_Maybe = PS["Data.Maybe"]; + exports["new"] = $foreign["new"]; +})(PS["Foreign.Object.ST"] = PS["Foreign.Object.ST"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Foreign.Object"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Category = PS["Control.Category"]; + var Control_Monad_ST = PS["Control.Monad.ST"]; + var Control_Monad_ST_Internal = PS["Control.Monad.ST.Internal"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Array = PS["Data.Array"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_FoldableWithIndex = PS["Data.FoldableWithIndex"]; + var Data_Function = PS["Data.Function"]; + var Data_Function_Uncurried = PS["Data.Function.Uncurried"]; + var Data_Functor = PS["Data.Functor"]; + var Data_FunctorWithIndex = PS["Data.FunctorWithIndex"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Monoid = PS["Data.Monoid"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Show = PS["Data.Show"]; + var Data_Traversable = PS["Data.Traversable"]; + var Data_TraversableWithIndex = PS["Data.TraversableWithIndex"]; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unfoldable = PS["Data.Unfoldable"]; + var Foreign_Object_ST = PS["Foreign.Object.ST"]; + var Prelude = PS["Prelude"]; + var Type_Row_Homogeneous = PS["Type.Row.Homogeneous"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var lookup = Data_Function_Uncurried.runFn4($foreign["_lookup"])(Data_Maybe.Nothing.value)(Data_Maybe.Just.create); + exports["lookup"] = lookup; + exports["empty"] = $foreign.empty; +})(PS["Foreign.Object"] = PS["Foreign.Object"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.Argonaut.Core"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Function = PS["Data.Function"]; + var Data_Function_Uncurried = PS["Data.Function.Uncurried"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ordering = PS["Data.Ordering"]; + var Foreign_Object = PS["Foreign.Object"]; + var Prelude = PS["Prelude"]; + var jsonEmptyObject = $foreign.fromObject(Foreign_Object.empty); + exports["jsonEmptyObject"] = jsonEmptyObject; + exports["stringify"] = $foreign.stringify; +})(PS["Data.Argonaut.Core"] = PS["Data.Argonaut.Core"] || {}); +(function(exports) { + "use strict"; + + exports.replace = function (s1) { + return function (s2) { + return function (s3) { + return s3.replace(s1, s2); + }; + }; + }; + + exports.replaceAll = function (s1) { + return function (s2) { + return function (s3) { + return s3.replace(new RegExp(s1.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"), "g"), s2); // eslint-disable-line no-useless-escape + }; + }; + }; + + exports.split = function (sep) { + return function (s) { + return s.split(sep); + }; + }; + + exports.joinWith = function (s) { + return function (xs) { + return xs.join(s); + }; + }; +})(PS["Data.String.Common"] = PS["Data.String.Common"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.String.Common"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Ordering = PS["Data.Ordering"]; + var Data_String_Pattern = PS["Data.String.Pattern"]; + var Prelude = PS["Prelude"]; + var $$null = function (s) { + return s === ""; + }; + exports["null"] = $$null; + exports["replaceAll"] = $foreign.replaceAll; + exports["split"] = $foreign.split; + exports["joinWith"] = $foreign.joinWith; +})(PS["Data.String.Common"] = PS["Data.String.Common"] || {}); +(function(exports) { + /* globals exports, JSON */ + "use strict"; + + exports.unsafeStringify = function (x) { + return JSON.stringify(x); + }; + exports.unsafeDecodeURIComponent = decodeURIComponent; + exports.unsafeEncodeURIComponent = encodeURIComponent; +})(PS["Global.Unsafe"] = PS["Global.Unsafe"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Global.Unsafe"]; + exports["unsafeStringify"] = $foreign.unsafeStringify; + exports["unsafeDecodeURIComponent"] = $foreign.unsafeDecodeURIComponent; + exports["unsafeEncodeURIComponent"] = $foreign.unsafeEncodeURIComponent; +})(PS["Global.Unsafe"] = PS["Global.Unsafe"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Monoid = PS["Data.Monoid"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Show = PS["Data.Show"]; + var Data_String = PS["Data.String"]; + var Data_String_Common = PS["Data.String.Common"]; + var Data_Tuple = PS["Data.Tuple"]; + var Global_Unsafe = PS["Global.Unsafe"]; + var Prelude = PS["Prelude"]; + var toArray = function (v) { + return v; + }; + var encode = (function () { + var encodePart = function (v) { + if (v.value1 instanceof Data_Maybe.Nothing) { + return Global_Unsafe.unsafeEncodeURIComponent(v.value0); + }; + if (v.value1 instanceof Data_Maybe.Just) { + return Global_Unsafe.unsafeEncodeURIComponent(v.value0) + ("=" + Global_Unsafe.unsafeEncodeURIComponent(v.value1.value0)); + }; + throw new Error("Failed pattern match at Data.FormURLEncoded (line 35, column 18 - line 37, column 89): " + [ v.constructor.name ]); + }; + return function ($14) { + return Data_String_Common.joinWith("&")(Data_Functor.map(Data_Functor.functorArray)(encodePart)(toArray($14))); + }; + })(); + exports["toArray"] = toArray; + exports["encode"] = encode; +})(PS["Data.FormURLEncoded"] = PS["Data.FormURLEncoded"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Data_Eq = PS["Data.Eq"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Show = PS["Data.Show"]; + var Prelude = PS["Prelude"]; + var MediaType = function (x) { + return x; + }; + var newtypeMediaType = new Data_Newtype.Newtype(function (n) { + return n; + }, MediaType); + exports["MediaType"] = MediaType; + exports["newtypeMediaType"] = newtypeMediaType; +})(PS["Data.MediaType"] = PS["Data.MediaType"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Data_MediaType = PS["Data.MediaType"]; + var applicationJSON = "application/json"; + var applicationFormURLEncoded = "application/x-www-form-urlencoded"; + exports["applicationFormURLEncoded"] = applicationFormURLEncoded; + exports["applicationJSON"] = applicationJSON; +})(PS["Data.MediaType.Common"] = PS["Data.MediaType.Common"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Data_Argonaut_Core = PS["Data.Argonaut.Core"]; + var Data_ArrayBuffer_Types = PS["Data.ArrayBuffer.Types"]; + var Data_FormURLEncoded = PS["Data.FormURLEncoded"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_MediaType = PS["Data.MediaType"]; + var Data_MediaType_Common = PS["Data.MediaType.Common"]; + var Web_DOM_Document = PS["Web.DOM.Document"]; + var Web_File_Blob = PS["Web.File.Blob"]; + var Web_XHR_FormData = PS["Web.XHR.FormData"]; + var ArrayView = (function () { + function ArrayView(value0) { + this.value0 = value0; + }; + ArrayView.create = function (value0) { + return new ArrayView(value0); + }; + return ArrayView; + })(); + var Blob = (function () { + function Blob(value0) { + this.value0 = value0; + }; + Blob.create = function (value0) { + return new Blob(value0); + }; + return Blob; + })(); + var Document = (function () { + function Document(value0) { + this.value0 = value0; + }; + Document.create = function (value0) { + return new Document(value0); + }; + return Document; + })(); + var $$String = (function () { + function $$String(value0) { + this.value0 = value0; + }; + $$String.create = function (value0) { + return new $$String(value0); + }; + return $$String; + })(); + var FormData = (function () { + function FormData(value0) { + this.value0 = value0; + }; + FormData.create = function (value0) { + return new FormData(value0); + }; + return FormData; + })(); + var FormURLEncoded = (function () { + function FormURLEncoded(value0) { + this.value0 = value0; + }; + FormURLEncoded.create = function (value0) { + return new FormURLEncoded(value0); + }; + return FormURLEncoded; + })(); + var Json = (function () { + function Json(value0) { + this.value0 = value0; + }; + Json.create = function (value0) { + return new Json(value0); + }; + return Json; + })(); + var toMediaType = function (v) { + if (v instanceof FormURLEncoded) { + return new Data_Maybe.Just(Data_MediaType_Common.applicationFormURLEncoded); + }; + if (v instanceof Json) { + return new Data_Maybe.Just(Data_MediaType_Common.applicationJSON); + }; + return Data_Maybe.Nothing.value; + }; + var string = $$String.create; + exports["ArrayView"] = ArrayView; + exports["Blob"] = Blob; + exports["Document"] = Document; + exports["String"] = $$String; + exports["FormData"] = FormData; + exports["FormURLEncoded"] = FormURLEncoded; + exports["Json"] = Json; + exports["string"] = string; + exports["toMediaType"] = toMediaType; +})(PS["Affjax.RequestBody"] = PS["Affjax.RequestBody"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Data_Eq = PS["Data.Eq"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_MediaType = PS["Data.MediaType"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Show = PS["Data.Show"]; + var Prelude = PS["Prelude"]; + var Accept = (function () { + function Accept(value0) { + this.value0 = value0; + }; + Accept.create = function (value0) { + return new Accept(value0); + }; + return Accept; + })(); + var ContentType = (function () { + function ContentType(value0) { + this.value0 = value0; + }; + ContentType.create = function (value0) { + return new ContentType(value0); + }; + return ContentType; + })(); + var RequestHeader = (function () { + function RequestHeader(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + RequestHeader.create = function (value0) { + return function (value1) { + return new RequestHeader(value0, value1); + }; + }; + return RequestHeader; + })(); + var requestHeaderValue = function (v) { + if (v instanceof Accept) { + return Data_Newtype.unwrap(Data_MediaType.newtypeMediaType)(v.value0); + }; + if (v instanceof ContentType) { + return Data_Newtype.unwrap(Data_MediaType.newtypeMediaType)(v.value0); + }; + if (v instanceof RequestHeader) { + return v.value1; + }; + throw new Error("Failed pattern match at Affjax.RequestHeader (line 29, column 1 - line 29, column 46): " + [ v.constructor.name ]); + }; + var requestHeaderName = function (v) { + if (v instanceof Accept) { + return "Accept"; + }; + if (v instanceof ContentType) { + return "Content-Type"; + }; + if (v instanceof RequestHeader) { + return v.value0; + }; + throw new Error("Failed pattern match at Affjax.RequestHeader (line 24, column 1 - line 24, column 45): " + [ v.constructor.name ]); + }; + exports["Accept"] = Accept; + exports["ContentType"] = ContentType; + exports["RequestHeader"] = RequestHeader; + exports["requestHeaderName"] = requestHeaderName; + exports["requestHeaderValue"] = requestHeaderValue; +})(PS["Affjax.RequestHeader"] = PS["Affjax.RequestHeader"] || {}); +(function(exports) { + "use strict"; + + exports.unsafeToForeign = function (value) { + return value; + }; + + exports.unsafeFromForeign = function (value) { + return value; + }; + + exports.typeOf = function (value) { + return typeof value; + }; + + exports.tagOf = function (value) { + return Object.prototype.toString.call(value).slice(8, -1); + }; +})(PS["Foreign"] = PS["Foreign"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Either = PS["Data.Either"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Unit = PS["Data.Unit"]; + var Prelude = PS["Prelude"]; + var MonadThrow = function (Monad0, throwError) { + this.Monad0 = Monad0; + this.throwError = throwError; + }; + var MonadError = function (MonadThrow0, catchError) { + this.MonadThrow0 = MonadThrow0; + this.catchError = catchError; + }; + var throwError = function (dict) { + return dict.throwError; + }; + var catchError = function (dict) { + return dict.catchError; + }; + var $$try = function (dictMonadError) { + return function (a) { + return catchError(dictMonadError)(Data_Functor.map(((((dictMonadError.MonadThrow0()).Monad0()).Bind1()).Apply0()).Functor0())(Data_Either.Right.create)(a))(function ($21) { + return Control_Applicative.pure(((dictMonadError.MonadThrow0()).Monad0()).Applicative0())(Data_Either.Left.create($21)); + }); + }; + }; + exports["catchError"] = catchError; + exports["throwError"] = throwError; + exports["MonadThrow"] = MonadThrow; + exports["MonadError"] = MonadError; + exports["try"] = $$try; +})(PS["Control.Monad.Error.Class"] = PS["Control.Monad.Error.Class"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unit = PS["Data.Unit"]; + var Prelude = PS["Prelude"]; + var MonadState = function (Monad0, state) { + this.Monad0 = Monad0; + this.state = state; + }; + var state = function (dict) { + return dict.state; + }; + var modify_ = function (dictMonadState) { + return function (f) { + return state(dictMonadState)(function (s) { + return new Data_Tuple.Tuple(Data_Unit.unit, f(s)); + }); + }; + }; + var modify = function (dictMonadState) { + return function (f) { + return state(dictMonadState)(function (s) { + var s$prime = f(s); + return new Data_Tuple.Tuple(s$prime, s$prime); + }); + }; + }; + var gets = function (dictMonadState) { + return function (f) { + return state(dictMonadState)(function (s) { + return new Data_Tuple.Tuple(f(s), s); + }); + }; + }; + var get = function (dictMonadState) { + return state(dictMonadState)(function (s) { + return new Data_Tuple.Tuple(s, s); + }); + }; + exports["state"] = state; + exports["MonadState"] = MonadState; + exports["get"] = get; + exports["gets"] = gets; + exports["modify"] = modify; + exports["modify_"] = modify_; +})(PS["Control.Monad.State.Class"] = PS["Control.Monad.State.Class"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Prelude = PS["Prelude"]; + var MonadTrans = function (lift) { + this.lift = lift; + }; + var lift = function (dict) { + return dict.lift; + }; + exports["lift"] = lift; + exports["MonadTrans"] = MonadTrans; +})(PS["Control.Monad.Trans.Class"] = PS["Control.Monad.Trans.Class"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Category = PS["Control.Category"]; + var Control_Monad = PS["Control.Monad"]; + var Effect = PS["Effect"]; + var MonadEffect = function (Monad0, liftEffect) { + this.Monad0 = Monad0; + this.liftEffect = liftEffect; + }; + var liftEffect = function (dict) { + return dict.liftEffect; + }; + exports["liftEffect"] = liftEffect; + exports["MonadEffect"] = MonadEffect; +})(PS["Effect.Class"] = PS["Effect.Class"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Alt = PS["Control.Alt"]; + var Control_Alternative = PS["Control.Alternative"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Category = PS["Control.Category"]; + var Control_Monad = PS["Control.Monad"]; + var Control_Monad_Cont_Class = PS["Control.Monad.Cont.Class"]; + var Control_Monad_Error_Class = PS["Control.Monad.Error.Class"]; + var Control_Monad_Reader_Class = PS["Control.Monad.Reader.Class"]; + var Control_Monad_Rec_Class = PS["Control.Monad.Rec.Class"]; + var Control_Monad_State_Class = PS["Control.Monad.State.Class"]; + var Control_Monad_Trans_Class = PS["Control.Monad.Trans.Class"]; + var Control_Monad_Writer_Class = PS["Control.Monad.Writer.Class"]; + var Control_MonadPlus = PS["Control.MonadPlus"]; + var Control_MonadZero = PS["Control.MonadZero"]; + var Control_Plus = PS["Control.Plus"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Either = PS["Data.Either"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Monoid = PS["Data.Monoid"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Tuple = PS["Data.Tuple"]; + var Effect_Class = PS["Effect.Class"]; + var Prelude = PS["Prelude"]; + var ExceptT = function (x) { + return x; + }; + var runExceptT = function (v) { + return v; + }; + var mapExceptT = function (f) { + return function (v) { + return f(v); + }; + }; + var functorExceptT = function (dictFunctor) { + return new Data_Functor.Functor(function (f) { + return mapExceptT(Data_Functor.map(dictFunctor)(Data_Functor.map(Data_Either.functorEither)(f))); + }); + }; + var monadExceptT = function (dictMonad) { + return new Control_Monad.Monad(function () { + return applicativeExceptT(dictMonad); + }, function () { + return bindExceptT(dictMonad); + }); + }; + var bindExceptT = function (dictMonad) { + return new Control_Bind.Bind(function () { + return applyExceptT(dictMonad); + }, function (v) { + return function (k) { + return Control_Bind.bind(dictMonad.Bind1())(v)(Data_Either.either(function ($97) { + return Control_Applicative.pure(dictMonad.Applicative0())(Data_Either.Left.create($97)); + })(function (a) { + var v1 = k(a); + return v1; + })); + }; + }); + }; + var applyExceptT = function (dictMonad) { + return new Control_Apply.Apply(function () { + return functorExceptT(((dictMonad.Bind1()).Apply0()).Functor0()); + }, Control_Monad.ap(monadExceptT(dictMonad))); + }; + var applicativeExceptT = function (dictMonad) { + return new Control_Applicative.Applicative(function () { + return applyExceptT(dictMonad); + }, function ($98) { + return ExceptT(Control_Applicative.pure(dictMonad.Applicative0())(Data_Either.Right.create($98))); + }); + }; + var monadThrowExceptT = function (dictMonad) { + return new Control_Monad_Error_Class.MonadThrow(function () { + return monadExceptT(dictMonad); + }, function ($102) { + return ExceptT(Control_Applicative.pure(dictMonad.Applicative0())(Data_Either.Left.create($102))); + }); + }; + exports["ExceptT"] = ExceptT; + exports["runExceptT"] = runExceptT; + exports["mapExceptT"] = mapExceptT; + exports["functorExceptT"] = functorExceptT; + exports["applyExceptT"] = applyExceptT; + exports["applicativeExceptT"] = applicativeExceptT; + exports["bindExceptT"] = bindExceptT; + exports["monadExceptT"] = monadExceptT; + exports["monadThrowExceptT"] = monadThrowExceptT; +})(PS["Control.Monad.Except.Trans"] = PS["Control.Monad.Except.Trans"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Monad_Error_Class = PS["Control.Monad.Error.Class"]; + var Control_Monad_Except_Trans = PS["Control.Monad.Except.Trans"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Either = PS["Data.Either"]; + var Data_Identity = PS["Data.Identity"]; + var Data_Newtype = PS["Data.Newtype"]; + var Prelude = PS["Prelude"]; + var runExcept = function ($0) { + return Data_Newtype.unwrap(Data_Identity.newtypeIdentity)(Control_Monad_Except_Trans.runExceptT($0)); + }; + exports["runExcept"] = runExcept; +})(PS["Control.Monad.Except"] = PS["Control.Monad.Except"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Alt = PS["Control.Alt"]; + var Control_Alternative = PS["Control.Alternative"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Category = PS["Control.Category"]; + var Control_Plus = PS["Control.Plus"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_FoldableWithIndex = PS["Data.FoldableWithIndex"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_FunctorWithIndex = PS["Data.FunctorWithIndex"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ordering = PS["Data.Ordering"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Semigroup_Foldable = PS["Data.Semigroup.Foldable"]; + var Data_Show = PS["Data.Show"]; + var Data_Traversable = PS["Data.Traversable"]; + var Data_TraversableWithIndex = PS["Data.TraversableWithIndex"]; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unfoldable = PS["Data.Unfoldable"]; + var Data_Unfoldable1 = PS["Data.Unfoldable1"]; + var Prelude = PS["Prelude"]; + var NonEmpty = (function () { + function NonEmpty(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + NonEmpty.create = function (value0) { + return function (value1) { + return new NonEmpty(value0, value1); + }; + }; + return NonEmpty; + })(); + var singleton = function (dictPlus) { + return function (a) { + return new NonEmpty(a, Control_Plus.empty(dictPlus)); + }; + }; + exports["NonEmpty"] = NonEmpty; + exports["singleton"] = singleton; +})(PS["Data.NonEmpty"] = PS["Data.NonEmpty"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Alt = PS["Control.Alt"]; + var Control_Alternative = PS["Control.Alternative"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Category = PS["Control.Category"]; + var Control_Comonad = PS["Control.Comonad"]; + var Control_Extend = PS["Control.Extend"]; + var Control_Monad = PS["Control.Monad"]; + var Control_MonadPlus = PS["Control.MonadPlus"]; + var Control_MonadZero = PS["Control.MonadZero"]; + var Control_Plus = PS["Control.Plus"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_FoldableWithIndex = PS["Data.FoldableWithIndex"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_FunctorWithIndex = PS["Data.FunctorWithIndex"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Monoid = PS["Data.Monoid"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_NonEmpty = PS["Data.NonEmpty"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ordering = PS["Data.Ordering"]; + var Data_Ring = PS["Data.Ring"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Semigroup_Foldable = PS["Data.Semigroup.Foldable"]; + var Data_Semigroup_Traversable = PS["Data.Semigroup.Traversable"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Show = PS["Data.Show"]; + var Data_Traversable = PS["Data.Traversable"]; + var Data_TraversableWithIndex = PS["Data.TraversableWithIndex"]; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unfoldable = PS["Data.Unfoldable"]; + var Data_Unfoldable1 = PS["Data.Unfoldable1"]; + var Prelude = PS["Prelude"]; + var Nil = (function () { + function Nil() { + + }; + Nil.value = new Nil(); + return Nil; + })(); + var Cons = (function () { + function Cons(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + Cons.create = function (value0) { + return function (value1) { + return new Cons(value0, value1); + }; + }; + return Cons; + })(); + var NonEmptyList = function (x) { + return x; + }; + var foldableList = new Data_Foldable.Foldable(function (dictMonoid) { + return function (f) { + return Data_Foldable.foldl(foldableList)(function (acc) { + return function ($174) { + return Data_Semigroup.append(dictMonoid.Semigroup0())(acc)(f($174)); + }; + })(Data_Monoid.mempty(dictMonoid)); + }; + }, function (f) { + var go = function ($copy_b) { + return function ($copy_v) { + var $tco_var_b = $copy_b; + var $tco_done = false; + var $tco_result; + function $tco_loop(b, v) { + if (v instanceof Nil) { + $tco_done = true; + return b; + }; + if (v instanceof Cons) { + $tco_var_b = f(b)(v.value0); + $copy_v = v.value1; + return; + }; + throw new Error("Failed pattern match at Data.List.Types (line 81, column 12 - line 83, column 30): " + [ v.constructor.name ]); + }; + while (!$tco_done) { + $tco_result = $tco_loop($tco_var_b, $copy_v); + }; + return $tco_result; + }; + }; + return go; + }, function (f) { + return function (b) { + var rev = Data_Foldable.foldl(foldableList)(Data_Function.flip(Cons.create))(Nil.value); + return function ($175) { + return Data_Foldable.foldl(foldableList)(Data_Function.flip(f))(b)(rev($175)); + }; + }; + }); + var functorList = new Data_Functor.Functor(function (f) { + return Data_Foldable.foldr(foldableList)(function (x) { + return function (acc) { + return new Cons(f(x), acc); + }; + })(Nil.value); + }); + var semigroupList = new Data_Semigroup.Semigroup(function (xs) { + return function (ys) { + return Data_Foldable.foldr(foldableList)(Cons.create)(ys)(xs); + }; + }); + var applyList = new Control_Apply.Apply(function () { + return functorList; + }, function (v) { + return function (v1) { + if (v instanceof Nil) { + return Nil.value; + }; + if (v instanceof Cons) { + return Data_Semigroup.append(semigroupList)(Data_Functor.map(functorList)(v.value0)(v1))(Control_Apply.apply(applyList)(v.value1)(v1)); + }; + throw new Error("Failed pattern match at Data.List.Types (line 127, column 1 - line 127, column 33): " + [ v.constructor.name, v1.constructor.name ]); + }; + }); + var applicativeList = new Control_Applicative.Applicative(function () { + return applyList; + }, function (a) { + return new Cons(a, Nil.value); + }); + var altList = new Control_Alt.Alt(function () { + return functorList; + }, Data_Semigroup.append(semigroupList)); + var plusList = new Control_Plus.Plus(function () { + return altList; + }, Nil.value); + exports["Nil"] = Nil; + exports["Cons"] = Cons; + exports["NonEmptyList"] = NonEmptyList; + exports["semigroupList"] = semigroupList; + exports["functorList"] = functorList; + exports["foldableList"] = foldableList; + exports["applyList"] = applyList; + exports["applicativeList"] = applicativeList; + exports["altList"] = altList; + exports["plusList"] = plusList; +})(PS["Data.List.Types"] = PS["Data.List.Types"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Alt = PS["Control.Alt"]; + var Control_Alternative = PS["Control.Alternative"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Category = PS["Control.Category"]; + var Control_Lazy = PS["Control.Lazy"]; + var Control_Monad_Rec_Class = PS["Control.Monad.Rec.Class"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Bifunctor = PS["Data.Bifunctor"]; + var Data_Boolean = PS["Data.Boolean"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_FunctorWithIndex = PS["Data.FunctorWithIndex"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_List_Types = PS["Data.List.Types"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_NonEmpty = PS["Data.NonEmpty"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ordering = PS["Data.Ordering"]; + var Data_Ring = PS["Data.Ring"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Show = PS["Data.Show"]; + var Data_Traversable = PS["Data.Traversable"]; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unfoldable = PS["Data.Unfoldable"]; + var Data_Unit = PS["Data.Unit"]; + var Prelude = PS["Prelude"]; + var reverse = (function () { + var go = function ($copy_acc) { + return function ($copy_v) { + var $tco_var_acc = $copy_acc; + var $tco_done = false; + var $tco_result; + function $tco_loop(acc, v) { + if (v instanceof Data_List_Types.Nil) { + $tco_done = true; + return acc; + }; + if (v instanceof Data_List_Types.Cons) { + $tco_var_acc = new Data_List_Types.Cons(v.value0, acc); + $copy_v = v.value1; + return; + }; + throw new Error("Failed pattern match at Data.List (line 368, column 3 - line 368, column 19): " + [ acc.constructor.name, v.constructor.name ]); + }; + while (!$tco_done) { + $tco_result = $tco_loop($tco_var_acc, $copy_v); + }; + return $tco_result; + }; + }; + return go(Data_List_Types.Nil.value); + })(); + var $$null = function (v) { + if (v instanceof Data_List_Types.Nil) { + return true; + }; + return false; + }; + var fromFoldable = function (dictFoldable) { + return Data_Foldable.foldr(dictFoldable)(Data_List_Types.Cons.create)(Data_List_Types.Nil.value); + }; + exports["fromFoldable"] = fromFoldable; + exports["null"] = $$null; + exports["reverse"] = reverse; +})(PS["Data.List"] = PS["Data.List"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Bind = PS["Control.Bind"]; + var Control_Category = PS["Control.Category"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Boolean = PS["Data.Boolean"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_FunctorWithIndex = PS["Data.FunctorWithIndex"]; + var Data_List = PS["Data.List"]; + var Data_List_Types = PS["Data.List.Types"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_NonEmpty = PS["Data.NonEmpty"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ring = PS["Data.Ring"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Semigroup_Foldable = PS["Data.Semigroup.Foldable"]; + var Data_Semigroup_Traversable = PS["Data.Semigroup.Traversable"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Traversable = PS["Data.Traversable"]; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unfoldable = PS["Data.Unfoldable"]; + var Partial_Unsafe = PS["Partial.Unsafe"]; + var Prelude = PS["Prelude"]; + var singleton = function ($165) { + return Data_List_Types.NonEmptyList(Data_NonEmpty.singleton(Data_List_Types.plusList)($165)); + }; + var head = function (v) { + return v.value0; + }; + var cons = function (y) { + return function (v) { + return new Data_NonEmpty.NonEmpty(y, new Data_List_Types.Cons(v.value0, v.value1)); + }; + }; + exports["singleton"] = singleton; + exports["cons"] = cons; + exports["head"] = head; +})(PS["Data.List.NonEmpty"] = PS["Data.List.NonEmpty"] || {}); +(function(exports) { + "use strict"; + + exports.singleton = function (c) { + return c; + }; + + exports.length = function (s) { + return s.length; + }; + + exports.drop = function (n) { + return function (s) { + return s.substring(n); + }; + }; +})(PS["Data.String.CodeUnits"] = PS["Data.String.CodeUnits"] || {}); +(function(exports) { + "use strict"; + + exports.charAt = function (i) { + return function (s) { + if (i >= 0 && i < s.length) return s.charAt(i); + throw new Error("Data.String.Unsafe.charAt: Invalid index."); + }; + }; +})(PS["Data.String.Unsafe"] = PS["Data.String.Unsafe"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.String.Unsafe"]; + exports["charAt"] = $foreign.charAt; +})(PS["Data.String.Unsafe"] = PS["Data.String.Unsafe"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.String.CodeUnits"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Boolean = PS["Data.Boolean"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Function = PS["Data.Function"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ring = PS["Data.Ring"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_String_Pattern = PS["Data.String.Pattern"]; + var Data_String_Unsafe = PS["Data.String.Unsafe"]; + var Prelude = PS["Prelude"]; + exports["singleton"] = $foreign.singleton; + exports["length"] = $foreign.length; + exports["drop"] = $foreign.drop; +})(PS["Data.String.CodeUnits"] = PS["Data.String.CodeUnits"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Foreign"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Monad_Error_Class = PS["Control.Monad.Error.Class"]; + var Control_Monad_Except = PS["Control.Monad.Except"]; + var Control_Monad_Except_Trans = PS["Control.Monad.Except.Trans"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Boolean = PS["Data.Boolean"]; + var Data_Either = PS["Data.Either"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Function = PS["Data.Function"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Identity = PS["Data.Identity"]; + var Data_Int = PS["Data.Int"]; + var Data_List_NonEmpty = PS["Data.List.NonEmpty"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ordering = PS["Data.Ordering"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Show = PS["Data.Show"]; + var Data_String_CodeUnits = PS["Data.String.CodeUnits"]; + var Prelude = PS["Prelude"]; + var ForeignError = (function () { + function ForeignError(value0) { + this.value0 = value0; + }; + ForeignError.create = function (value0) { + return new ForeignError(value0); + }; + return ForeignError; + })(); + var TypeMismatch = (function () { + function TypeMismatch(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + TypeMismatch.create = function (value0) { + return function (value1) { + return new TypeMismatch(value0, value1); + }; + }; + return TypeMismatch; + })(); + var fail = function ($107) { + return Control_Monad_Error_Class.throwError(Control_Monad_Except_Trans.monadThrowExceptT(Data_Identity.monadIdentity))(Data_List_NonEmpty.singleton($107)); + }; + var unsafeReadTagged = function (tag) { + return function (value) { + if ($foreign.tagOf(value) === tag) { + return Control_Applicative.pure(Control_Monad_Except_Trans.applicativeExceptT(Data_Identity.monadIdentity))($foreign.unsafeFromForeign(value)); + }; + if (Data_Boolean.otherwise) { + return fail(new TypeMismatch(tag, $foreign.tagOf(value))); + }; + throw new Error("Failed pattern match at Foreign (line 106, column 1 - line 106, column 55): " + [ tag.constructor.name, value.constructor.name ]); + }; + }; + var readBoolean = unsafeReadTagged("Boolean"); + var readString = unsafeReadTagged("String"); + exports["ForeignError"] = ForeignError; + exports["TypeMismatch"] = TypeMismatch; + exports["unsafeReadTagged"] = unsafeReadTagged; + exports["readString"] = readString; + exports["readBoolean"] = readBoolean; + exports["fail"] = fail; + exports["unsafeToForeign"] = $foreign.unsafeToForeign; + exports["typeOf"] = $foreign.typeOf; +})(PS["Foreign"] = PS["Foreign"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Category = PS["Control.Category"]; + var Data_Argonaut_Core = PS["Data.Argonaut.Core"]; + var Data_ArrayBuffer_Types = PS["Data.ArrayBuffer.Types"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_MediaType = PS["Data.MediaType"]; + var Data_MediaType_Common = PS["Data.MediaType.Common"]; + var Foreign = PS["Foreign"]; + var Prelude = PS["Prelude"]; + var Web_DOM_Document = PS["Web.DOM.Document"]; + var Web_File_Blob = PS["Web.File.Blob"]; + var ResponseFormatError = (function () { + function ResponseFormatError(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + ResponseFormatError.create = function (value0) { + return function (value1) { + return new ResponseFormatError(value0, value1); + }; + }; + return ResponseFormatError; + })(); + var $$ArrayBuffer = (function () { + function $$ArrayBuffer(value0) { + this.value0 = value0; + }; + $$ArrayBuffer.create = function (value0) { + return new $$ArrayBuffer(value0); + }; + return $$ArrayBuffer; + })(); + var Blob = (function () { + function Blob(value0) { + this.value0 = value0; + }; + Blob.create = function (value0) { + return new Blob(value0); + }; + return Blob; + })(); + var Document = (function () { + function Document(value0) { + this.value0 = value0; + }; + Document.create = function (value0) { + return new Document(value0); + }; + return Document; + })(); + var Json = (function () { + function Json(value0) { + this.value0 = value0; + }; + Json.create = function (value0) { + return new Json(value0); + }; + return Json; + })(); + var $$String = (function () { + function $$String(value0) { + this.value0 = value0; + }; + $$String.create = function (value0) { + return new $$String(value0); + }; + return $$String; + })(); + var Ignore = (function () { + function Ignore(value0) { + this.value0 = value0; + }; + Ignore.create = function (value0) { + return new Ignore(value0); + }; + return Ignore; + })(); + var toResponseType = function (v) { + if (v instanceof $$ArrayBuffer) { + return "arraybuffer"; + }; + if (v instanceof Blob) { + return "blob"; + }; + if (v instanceof Document) { + return "document"; + }; + if (v instanceof Json) { + return "text"; + }; + if (v instanceof $$String) { + return "text"; + }; + if (v instanceof Ignore) { + return ""; + }; + throw new Error("Failed pattern match at Affjax.ResponseFormat (line 46, column 3 - line 54, column 1): " + [ v.constructor.name ]); + }; + var toMediaType = function (v) { + if (v instanceof Json) { + return new Data_Maybe.Just(Data_MediaType_Common.applicationJSON); + }; + return Data_Maybe.Nothing.value; + }; + var json = new Json(Control_Category.identity(Control_Category.categoryFn)); + var ignore = new Ignore(Control_Category.identity(Control_Category.categoryFn)); + exports["ArrayBuffer"] = $$ArrayBuffer; + exports["Blob"] = Blob; + exports["Document"] = Document; + exports["Json"] = Json; + exports["String"] = $$String; + exports["Ignore"] = Ignore; + exports["json"] = json; + exports["ignore"] = ignore; + exports["toResponseType"] = toResponseType; + exports["toMediaType"] = toMediaType; + exports["ResponseFormatError"] = ResponseFormatError; +})(PS["Affjax.ResponseFormat"] = PS["Affjax.ResponseFormat"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Data_Eq = PS["Data.Eq"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Show = PS["Data.Show"]; + var Prelude = PS["Prelude"]; + var ResponseHeader = (function () { + function ResponseHeader(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + ResponseHeader.create = function (value0) { + return function (value1) { + return new ResponseHeader(value0, value1); + }; + }; + return ResponseHeader; + })(); + var responseHeader = function (field) { + return function (value) { + return new ResponseHeader(field, value); + }; + }; + exports["responseHeader"] = responseHeader; +})(PS["Affjax.ResponseHeader"] = PS["Affjax.ResponseHeader"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Alt = PS["Control.Alt"]; + var Control_Alternative = PS["Control.Alternative"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Monad_Cont_Trans = PS["Control.Monad.Cont.Trans"]; + var Control_Monad_Except_Trans = PS["Control.Monad.Except.Trans"]; + var Control_Monad_Maybe_Trans = PS["Control.Monad.Maybe.Trans"]; + var Control_Monad_Reader_Trans = PS["Control.Monad.Reader.Trans"]; + var Control_Monad_Writer_Trans = PS["Control.Monad.Writer.Trans"]; + var Control_Plus = PS["Control.Plus"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Either = PS["Data.Either"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Functor_Compose = PS["Data.Functor.Compose"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_Unit = PS["Data.Unit"]; + var Effect_Class = PS["Effect.Class"]; + var Effect_Ref = PS["Effect.Ref"]; + var Prelude = PS["Prelude"]; + var Parallel = function (Applicative1, Monad0, parallel, sequential) { + this.Applicative1 = Applicative1; + this.Monad0 = Monad0; + this.parallel = parallel; + this.sequential = sequential; + }; + var sequential = function (dict) { + return dict.sequential; + }; + var parallel = function (dict) { + return dict.parallel; + }; + exports["parallel"] = parallel; + exports["sequential"] = sequential; + exports["Parallel"] = Parallel; +})(PS["Control.Parallel.Class"] = PS["Control.Parallel.Class"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Alternative = PS["Control.Alternative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Category = PS["Control.Category"]; + var Control_Parallel_Class = PS["Control.Parallel.Class"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_Traversable = PS["Data.Traversable"]; + var Prelude = PS["Prelude"]; + var parTraverse_ = function (dictParallel) { + return function (dictFoldable) { + return function (f) { + return function ($17) { + return Control_Parallel_Class.sequential(dictParallel)(Data_Foldable.traverse_(dictParallel.Applicative1())(dictFoldable)(function ($18) { + return Control_Parallel_Class.parallel(dictParallel)(f($18)); + })($17)); + }; + }; + }; + }; + var parSequence_ = function (dictParallel) { + return function (dictFoldable) { + return parTraverse_(dictParallel)(dictFoldable)(Control_Category.identity(Control_Category.categoryFn)); + }; + }; + exports["parTraverse_"] = parTraverse_; + exports["parSequence_"] = parSequence_; +})(PS["Control.Parallel"] = PS["Control.Parallel"] || {}); +(function(exports) { + "use strict"; + + exports._jsonParser = function (fail, succ, s) { + try { + return succ(JSON.parse(s)); + } + catch (e) { + return fail(e.message); + } + }; +})(PS["Data.Argonaut.Parser"] = PS["Data.Argonaut.Parser"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.Argonaut.Parser"]; + var Data_Argonaut_Core = PS["Data.Argonaut.Core"]; + var Data_Either = PS["Data.Either"]; + var Data_Function_Uncurried = PS["Data.Function.Uncurried"]; + var jsonParser = function (j) { + return $foreign["_jsonParser"](Data_Either.Left.create, Data_Either.Right.create, j); + }; + exports["jsonParser"] = jsonParser; +})(PS["Data.Argonaut.Parser"] = PS["Data.Argonaut.Parser"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Data_Either = PS["Data.Either"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ordering = PS["Data.Ordering"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Show = PS["Data.Show"]; + var Data_String = PS["Data.String"]; + var Data_String_Common = PS["Data.String.Common"]; + var Prelude = PS["Prelude"]; + var OPTIONS = (function () { + function OPTIONS() { + + }; + OPTIONS.value = new OPTIONS(); + return OPTIONS; + })(); + var GET = (function () { + function GET() { + + }; + GET.value = new GET(); + return GET; + })(); + var HEAD = (function () { + function HEAD() { + + }; + HEAD.value = new HEAD(); + return HEAD; + })(); + var POST = (function () { + function POST() { + + }; + POST.value = new POST(); + return POST; + })(); + var PUT = (function () { + function PUT() { + + }; + PUT.value = new PUT(); + return PUT; + })(); + var DELETE = (function () { + function DELETE() { + + }; + DELETE.value = new DELETE(); + return DELETE; + })(); + var TRACE = (function () { + function TRACE() { + + }; + TRACE.value = new TRACE(); + return TRACE; + })(); + var CONNECT = (function () { + function CONNECT() { + + }; + CONNECT.value = new CONNECT(); + return CONNECT; + })(); + var PROPFIND = (function () { + function PROPFIND() { + + }; + PROPFIND.value = new PROPFIND(); + return PROPFIND; + })(); + var PROPPATCH = (function () { + function PROPPATCH() { + + }; + PROPPATCH.value = new PROPPATCH(); + return PROPPATCH; + })(); + var MKCOL = (function () { + function MKCOL() { + + }; + MKCOL.value = new MKCOL(); + return MKCOL; + })(); + var COPY = (function () { + function COPY() { + + }; + COPY.value = new COPY(); + return COPY; + })(); + var MOVE = (function () { + function MOVE() { + + }; + MOVE.value = new MOVE(); + return MOVE; + })(); + var LOCK = (function () { + function LOCK() { + + }; + LOCK.value = new LOCK(); + return LOCK; + })(); + var UNLOCK = (function () { + function UNLOCK() { + + }; + UNLOCK.value = new UNLOCK(); + return UNLOCK; + })(); + var PATCH = (function () { + function PATCH() { + + }; + PATCH.value = new PATCH(); + return PATCH; + })(); + var unCustomMethod = function (v) { + return v; + }; + var showMethod = new Data_Show.Show(function (v) { + if (v instanceof OPTIONS) { + return "OPTIONS"; + }; + if (v instanceof GET) { + return "GET"; + }; + if (v instanceof HEAD) { + return "HEAD"; + }; + if (v instanceof POST) { + return "POST"; + }; + if (v instanceof PUT) { + return "PUT"; + }; + if (v instanceof DELETE) { + return "DELETE"; + }; + if (v instanceof TRACE) { + return "TRACE"; + }; + if (v instanceof CONNECT) { + return "CONNECT"; + }; + if (v instanceof PROPFIND) { + return "PROPFIND"; + }; + if (v instanceof PROPPATCH) { + return "PROPPATCH"; + }; + if (v instanceof MKCOL) { + return "MKCOL"; + }; + if (v instanceof COPY) { + return "COPY"; + }; + if (v instanceof MOVE) { + return "MOVE"; + }; + if (v instanceof LOCK) { + return "LOCK"; + }; + if (v instanceof UNLOCK) { + return "UNLOCK"; + }; + if (v instanceof PATCH) { + return "PATCH"; + }; + throw new Error("Failed pattern match at Data.HTTP.Method (line 40, column 1 - line 40, column 35): " + [ v.constructor.name ]); + }); + var print = Data_Either.either(Data_Show.show(showMethod))(unCustomMethod); + exports["OPTIONS"] = OPTIONS; + exports["GET"] = GET; + exports["HEAD"] = HEAD; + exports["POST"] = POST; + exports["PUT"] = PUT; + exports["DELETE"] = DELETE; + exports["TRACE"] = TRACE; + exports["CONNECT"] = CONNECT; + exports["PROPFIND"] = PROPFIND; + exports["PROPPATCH"] = PROPPATCH; + exports["MKCOL"] = MKCOL; + exports["COPY"] = COPY; + exports["MOVE"] = MOVE; + exports["LOCK"] = LOCK; + exports["UNLOCK"] = UNLOCK; + exports["PATCH"] = PATCH; + exports["unCustomMethod"] = unCustomMethod; + exports["print"] = print; + exports["showMethod"] = showMethod; +})(PS["Data.HTTP.Method"] = PS["Data.HTTP.Method"] || {}); +(function(exports) { + "use strict"; + + exports["null"] = null; + + exports.nullable = function (a, r, f) { + return a == null ? r : f(a); + }; + + exports.notNull = function (x) { + return x; + }; +})(PS["Data.Nullable"] = PS["Data.Nullable"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.Nullable"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Function = PS["Data.Function"]; + var Data_Function_Uncurried = PS["Data.Function.Uncurried"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Show = PS["Data.Show"]; + var Prelude = PS["Prelude"]; + var toNullable = Data_Maybe.maybe($foreign["null"])($foreign.notNull); + var toMaybe = function (n) { + return $foreign.nullable(n, Data_Maybe.Nothing.value, Data_Maybe.Just.create); + }; + exports["toMaybe"] = toMaybe; + exports["toNullable"] = toNullable; +})(PS["Data.Nullable"] = PS["Data.Nullable"] || {}); +(function(exports) { + /* globals setImmediate, clearImmediate, setTimeout, clearTimeout */ + /* jshint -W083, -W098, -W003 */ + "use strict"; + + var Aff = function () { + // A unique value for empty. + var EMPTY = {}; + + /* + + An awkward approximation. We elide evidence we would otherwise need in PS for + efficiency sake. + + data Aff eff a + = Pure a + | Throw Error + | Catch (Aff eff a) (Error -> Aff eff a) + | Sync (Eff eff a) + | Async ((Either Error a -> Eff eff Unit) -> Eff eff (Canceler eff)) + | forall b. Bind (Aff eff b) (b -> Aff eff a) + | forall b. Bracket (Aff eff b) (BracketConditions eff b) (b -> Aff eff a) + | forall b. Fork Boolean (Aff eff b) ?(Fiber eff b -> a) + | Sequential (ParAff aff a) + + */ + var PURE = "Pure"; + var THROW = "Throw"; + var CATCH = "Catch"; + var SYNC = "Sync"; + var ASYNC = "Async"; + var BIND = "Bind"; + var BRACKET = "Bracket"; + var FORK = "Fork"; + var SEQ = "Sequential"; + + /* + + data ParAff eff a + = forall b. Map (b -> a) (ParAff eff b) + | forall b. Apply (ParAff eff (b -> a)) (ParAff eff b) + | Alt (ParAff eff a) (ParAff eff a) + | ?Par (Aff eff a) + + */ + var MAP = "Map"; + var APPLY = "Apply"; + var ALT = "Alt"; + + // Various constructors used in interpretation + var CONS = "Cons"; // Cons-list, for stacks + var RESUME = "Resume"; // Continue indiscriminately + var RELEASE = "Release"; // Continue with bracket finalizers + var FINALIZER = "Finalizer"; // A non-interruptible effect + var FINALIZED = "Finalized"; // Marker for finalization + var FORKED = "Forked"; // Reference to a forked fiber, with resumption stack + var FIBER = "Fiber"; // Actual fiber reference + var THUNK = "Thunk"; // Primed effect, ready to invoke + + function Aff(tag, _1, _2, _3) { + this.tag = tag; + this._1 = _1; + this._2 = _2; + this._3 = _3; + } + + function AffCtr(tag) { + var fn = function (_1, _2, _3) { + return new Aff(tag, _1, _2, _3); + }; + fn.tag = tag; + return fn; + } + + function nonCanceler(error) { + return new Aff(PURE, void 0); + } + + function runEff(eff) { + try { + eff(); + } catch (error) { + setTimeout(function () { + throw error; + }, 0); + } + } + + function runSync(left, right, eff) { + try { + return right(eff()); + } catch (error) { + return left(error); + } + } + + function runAsync(left, eff, k) { + try { + return eff(k)(); + } catch (error) { + k(left(error))(); + return nonCanceler; + } + } + + var Scheduler = function () { + var limit = 1024; + var size = 0; + var ix = 0; + var queue = new Array(limit); + var draining = false; + + function drain() { + var thunk; + draining = true; + while (size !== 0) { + size--; + thunk = queue[ix]; + queue[ix] = void 0; + ix = (ix + 1) % limit; + thunk(); + } + draining = false; + } + + return { + isDraining: function () { + return draining; + }, + enqueue: function (cb) { + var i, tmp; + if (size === limit) { + tmp = draining; + drain(); + draining = tmp; + } + + queue[(ix + size) % limit] = cb; + size++; + + if (!draining) { + drain(); + } + } + }; + }(); + + function Supervisor(util) { + var fibers = {}; + var fiberId = 0; + var count = 0; + + return { + register: function (fiber) { + var fid = fiberId++; + fiber.onComplete({ + rethrow: true, + handler: function (result) { + return function () { + count--; + delete fibers[fid]; + }; + } + }); + fibers[fid] = fiber; + count++; + }, + isEmpty: function () { + return count === 0; + }, + killAll: function (killError, cb) { + return function () { + var killCount = 0; + var kills = {}; + + function kill(fid) { + kills[fid] = fibers[fid].kill(killError, function (result) { + return function () { + delete kills[fid]; + killCount--; + if (util.isLeft(result) && util.fromLeft(result)) { + setTimeout(function () { + throw util.fromLeft(result); + }, 0); + } + if (killCount === 0) { + cb(); + } + }; + })(); + } + + for (var k in fibers) { + if (fibers.hasOwnProperty(k)) { + killCount++; + kill(k); + } + } + + fibers = {}; + fiberId = 0; + count = 0; + + return function (error) { + return new Aff(SYNC, function () { + for (var k in kills) { + if (kills.hasOwnProperty(k)) { + kills[k](); + } + } + }); + }; + }; + } + }; + } + + // Fiber state machine + var SUSPENDED = 0; // Suspended, pending a join. + var CONTINUE = 1; // Interpret the next instruction. + var STEP_BIND = 2; // Apply the next bind. + var STEP_RESULT = 3; // Handle potential failure from a result. + var PENDING = 4; // An async effect is running. + var RETURN = 5; // The current stack has returned. + var COMPLETED = 6; // The entire fiber has completed. + + function Fiber(util, supervisor, aff) { + // Monotonically increasing tick, increased on each asynchronous turn. + var runTick = 0; + + // The current branch of the state machine. + var status = SUSPENDED; + + // The current point of interest for the state machine branch. + var step = aff; // Successful step + var fail = null; // Failure step + var interrupt = null; // Asynchronous interrupt + + // Stack of continuations for the current fiber. + var bhead = null; + var btail = null; + + // Stack of attempts and finalizers for error recovery. Every `Cons` is also + // tagged with current `interrupt` state. We use this to track which items + // should be ignored or evaluated as a result of a kill. + var attempts = null; + + // A special state is needed for Bracket, because it cannot be killed. When + // we enter a bracket acquisition or finalizer, we increment the counter, + // and then decrement once complete. + var bracketCount = 0; + + // Each join gets a new id so they can be revoked. + var joinId = 0; + var joins = null; + var rethrow = true; + + // Each invocation of `run` requires a tick. When an asynchronous effect is + // resolved, we must check that the local tick coincides with the fiber + // tick before resuming. This prevents multiple async continuations from + // accidentally resuming the same fiber. A common example may be invoking + // the provided callback in `makeAff` more than once, but it may also be an + // async effect resuming after the fiber was already cancelled. + function run(localRunTick) { + var tmp, result, attempt; + while (true) { + tmp = null; + result = null; + attempt = null; + + switch (status) { + case STEP_BIND: + status = CONTINUE; + step = bhead(step); + if (btail === null) { + bhead = null; + } else { + bhead = btail._1; + btail = btail._2; + } + break; + + case STEP_RESULT: + if (util.isLeft(step)) { + status = RETURN; + fail = step; + step = null; + } else if (bhead === null) { + status = RETURN; + } else { + status = STEP_BIND; + step = util.fromRight(step); + } + break; + + case CONTINUE: + switch (step.tag) { + case BIND: + if (bhead) { + btail = new Aff(CONS, bhead, btail); + } + bhead = step._2; + status = CONTINUE; + step = step._1; + break; + + case PURE: + if (bhead === null) { + status = RETURN; + step = util.right(step._1); + } else { + status = STEP_BIND; + step = step._1; + } + break; + + case SYNC: + status = STEP_RESULT; + step = runSync(util.left, util.right, step._1); + break; + + case ASYNC: + status = PENDING; + step = runAsync(util.left, step._1, function (result) { + return function () { + if (runTick !== localRunTick) { + return; + } + runTick++; + Scheduler.enqueue(function () { + // It's possible to interrupt the fiber between enqueuing and + // resuming, so we need to check that the runTick is still + // valid. + if (runTick !== localRunTick + 1) { + return; + } + status = STEP_RESULT; + step = result; + run(runTick); + }); + }; + }); + return; + + case THROW: + status = RETURN; + fail = util.left(step._1); + step = null; + break; + + // Enqueue the Catch so that we can call the error handler later on + // in case of an exception. + case CATCH: + if (bhead === null) { + attempts = new Aff(CONS, step, attempts, interrupt); + } else { + attempts = new Aff(CONS, step, new Aff(CONS, new Aff(RESUME, bhead, btail), attempts, interrupt), interrupt); + } + bhead = null; + btail = null; + status = CONTINUE; + step = step._1; + break; + + // Enqueue the Bracket so that we can call the appropriate handlers + // after resource acquisition. + case BRACKET: + bracketCount++; + if (bhead === null) { + attempts = new Aff(CONS, step, attempts, interrupt); + } else { + attempts = new Aff(CONS, step, new Aff(CONS, new Aff(RESUME, bhead, btail), attempts, interrupt), interrupt); + } + bhead = null; + btail = null; + status = CONTINUE; + step = step._1; + break; + + case FORK: + status = STEP_RESULT; + tmp = Fiber(util, supervisor, step._2); + if (supervisor) { + supervisor.register(tmp); + } + if (step._1) { + tmp.run(); + } + step = util.right(tmp); + break; + + case SEQ: + status = CONTINUE; + step = sequential(util, supervisor, step._1); + break; + } + break; + + case RETURN: + bhead = null; + btail = null; + // If the current stack has returned, and we have no other stacks to + // resume or finalizers to run, the fiber has halted and we can + // invoke all join callbacks. Otherwise we need to resume. + if (attempts === null) { + status = COMPLETED; + step = interrupt || fail || step; + } else { + // The interrupt status for the enqueued item. + tmp = attempts._3; + attempt = attempts._1; + attempts = attempts._2; + + switch (attempt.tag) { + // We cannot recover from an interrupt. Otherwise we should + // continue stepping, or run the exception handler if an exception + // was raised. + case CATCH: + // We should compare the interrupt status as well because we + // only want it to apply if there has been an interrupt since + // enqueuing the catch. + if (interrupt && interrupt !== tmp) { + status = RETURN; + } else if (fail) { + status = CONTINUE; + step = attempt._2(util.fromLeft(fail)); + fail = null; + } + break; + + // We cannot resume from an interrupt or exception. + case RESUME: + // As with Catch, we only want to ignore in the case of an + // interrupt since enqueing the item. + if (interrupt && interrupt !== tmp || fail) { + status = RETURN; + } else { + bhead = attempt._1; + btail = attempt._2; + status = STEP_BIND; + step = util.fromRight(step); + } + break; + + // If we have a bracket, we should enqueue the handlers, + // and continue with the success branch only if the fiber has + // not been interrupted. If the bracket acquisition failed, we + // should not run either. + case BRACKET: + bracketCount--; + if (fail === null) { + result = util.fromRight(step); + // We need to enqueue the Release with the same interrupt + // status as the Bracket that is initiating it. + attempts = new Aff(CONS, new Aff(RELEASE, attempt._2, result), attempts, tmp); + // We should only coninue as long as the interrupt status has not changed or + // we are currently within a non-interruptable finalizer. + if (interrupt === tmp || bracketCount > 0) { + status = CONTINUE; + step = attempt._3(result); + } + } + break; + + // Enqueue the appropriate handler. We increase the bracket count + // because it should not be cancelled. + case RELEASE: + bracketCount++; + attempts = new Aff(CONS, new Aff(FINALIZED, step, fail), attempts, interrupt); + status = CONTINUE; + // It has only been killed if the interrupt status has changed + // since we enqueued the item. + if (interrupt && interrupt !== tmp) { + step = attempt._1.killed(util.fromLeft(interrupt))(attempt._2); + } else if (fail) { + step = attempt._1.failed(util.fromLeft(fail))(attempt._2); + } else { + step = attempt._1.completed(util.fromRight(step))(attempt._2); + } + fail = null; + break; + + case FINALIZER: + bracketCount++; + attempts = new Aff(CONS, new Aff(FINALIZED, step, fail), attempts, interrupt); + status = CONTINUE; + step = attempt._1; + break; + + case FINALIZED: + bracketCount--; + status = RETURN; + step = attempt._1; + fail = attempt._2; + break; + } + } + break; + + case COMPLETED: + for (var k in joins) { + if (joins.hasOwnProperty(k)) { + rethrow = rethrow && joins[k].rethrow; + runEff(joins[k].handler(step)); + } + } + joins = null; + // If we have an interrupt and a fail, then the thread threw while + // running finalizers. This should always rethrow in a fresh stack. + if (interrupt && fail) { + setTimeout(function () { + throw util.fromLeft(fail); + }, 0); + // If we have an unhandled exception, and no other fiber has joined + // then we need to throw the exception in a fresh stack. + } else if (util.isLeft(step) && rethrow) { + setTimeout(function () { + // Guard on reathrow because a completely synchronous fiber can + // still have an observer which was added after-the-fact. + if (rethrow) { + throw util.fromLeft(step); + } + }, 0); + } + return; + case SUSPENDED: + status = CONTINUE; + break; + case PENDING: return; + } + } + } + + function onComplete(join) { + return function () { + if (status === COMPLETED) { + rethrow = rethrow && join.rethrow; + join.handler(step)(); + return function () {}; + } + + var jid = joinId++; + joins = joins || {}; + joins[jid] = join; + + return function() { + if (joins !== null) { + delete joins[jid]; + } + }; + }; + } + + function kill(error, cb) { + return function () { + if (status === COMPLETED) { + cb(util.right(void 0))(); + return function () {}; + } + + var canceler = onComplete({ + rethrow: false, + handler: function (/* unused */) { + return cb(util.right(void 0)); + } + })(); + + switch (status) { + case SUSPENDED: + interrupt = util.left(error); + status = COMPLETED; + step = interrupt; + run(runTick); + break; + case PENDING: + if (interrupt === null) { + interrupt = util.left(error); + } + if (bracketCount === 0) { + if (status === PENDING) { + attempts = new Aff(CONS, new Aff(FINALIZER, step(error)), attempts, interrupt); + } + status = RETURN; + step = null; + fail = null; + run(++runTick); + } + break; + default: + if (interrupt === null) { + interrupt = util.left(error); + } + if (bracketCount === 0) { + status = RETURN; + step = null; + fail = null; + } + } + + return canceler; + }; + } + + function join(cb) { + return function () { + var canceler = onComplete({ + rethrow: false, + handler: cb + })(); + if (status === SUSPENDED) { + run(runTick); + } + return canceler; + }; + } + + return { + kill: kill, + join: join, + onComplete: onComplete, + isSuspended: function () { + return status === SUSPENDED; + }, + run: function () { + if (status === SUSPENDED) { + if (!Scheduler.isDraining()) { + Scheduler.enqueue(function () { + run(runTick); + }); + } else { + run(runTick); + } + } + } + }; + } + + function runPar(util, supervisor, par, cb) { + // Table of all forked fibers. + var fiberId = 0; + var fibers = {}; + + // Table of currently running cancelers, as a product of `Alt` behavior. + var killId = 0; + var kills = {}; + + // Error used for early cancelation on Alt branches. + var early = new Error("[ParAff] Early exit"); + + // Error used to kill the entire tree. + var interrupt = null; + + // The root pointer of the tree. + var root = EMPTY; + + // Walks a tree, invoking all the cancelers. Returns the table of pending + // cancellation fibers. + function kill(error, par, cb) { + var step = par; + var head = null; + var tail = null; + var count = 0; + var kills = {}; + var tmp, kid; + + loop: while (true) { + tmp = null; + + switch (step.tag) { + case FORKED: + if (step._3 === EMPTY) { + tmp = fibers[step._1]; + kills[count++] = tmp.kill(error, function (result) { + return function () { + count--; + if (count === 0) { + cb(result)(); + } + }; + }); + } + // Terminal case. + if (head === null) { + break loop; + } + // Go down the right side of the tree. + step = head._2; + if (tail === null) { + head = null; + } else { + head = tail._1; + tail = tail._2; + } + break; + case MAP: + step = step._2; + break; + case APPLY: + case ALT: + if (head) { + tail = new Aff(CONS, head, tail); + } + head = step; + step = step._1; + break; + } + } + + if (count === 0) { + cb(util.right(void 0))(); + } else { + // Run the cancelation effects. We alias `count` because it's mutable. + kid = 0; + tmp = count; + for (; kid < tmp; kid++) { + kills[kid] = kills[kid](); + } + } + + return kills; + } + + // When a fiber resolves, we need to bubble back up the tree with the + // result, computing the applicative nodes. + function join(result, head, tail) { + var fail, step, lhs, rhs, tmp, kid; + + if (util.isLeft(result)) { + fail = result; + step = null; + } else { + step = result; + fail = null; + } + + loop: while (true) { + lhs = null; + rhs = null; + tmp = null; + kid = null; + + // We should never continue if the entire tree has been interrupted. + if (interrupt !== null) { + return; + } + + // We've made it all the way to the root of the tree, which means + // the tree has fully evaluated. + if (head === null) { + cb(fail || step)(); + return; + } + + // The tree has already been computed, so we shouldn't try to do it + // again. This should never happen. + // TODO: Remove this? + if (head._3 !== EMPTY) { + return; + } + + switch (head.tag) { + case MAP: + if (fail === null) { + head._3 = util.right(head._1(util.fromRight(step))); + step = head._3; + } else { + head._3 = fail; + } + break; + case APPLY: + lhs = head._1._3; + rhs = head._2._3; + // If we have a failure we should kill the other side because we + // can't possible yield a result anymore. + if (fail) { + head._3 = fail; + tmp = true; + kid = killId++; + + kills[kid] = kill(early, fail === lhs ? head._2 : head._1, function (/* unused */) { + return function () { + delete kills[kid]; + if (tmp) { + tmp = false; + } else if (tail === null) { + join(fail, null, null); + } else { + join(fail, tail._1, tail._2); + } + }; + }); + + if (tmp) { + tmp = false; + return; + } + } else if (lhs === EMPTY || rhs === EMPTY) { + // We can only proceed if both sides have resolved. + return; + } else { + step = util.right(util.fromRight(lhs)(util.fromRight(rhs))); + head._3 = step; + } + break; + case ALT: + lhs = head._1._3; + rhs = head._2._3; + // We can only proceed if both have resolved or we have a success + if (lhs === EMPTY && util.isLeft(rhs) || rhs === EMPTY && util.isLeft(lhs)) { + return; + } + // If both sides resolve with an error, we should continue with the + // first error + if (lhs !== EMPTY && util.isLeft(lhs) && rhs !== EMPTY && util.isLeft(rhs)) { + fail = step === lhs ? rhs : lhs; + step = null; + head._3 = fail; + } else { + head._3 = step; + tmp = true; + kid = killId++; + // Once a side has resolved, we need to cancel the side that is still + // pending before we can continue. + kills[kid] = kill(early, step === lhs ? head._2 : head._1, function (/* unused */) { + return function () { + delete kills[kid]; + if (tmp) { + tmp = false; + } else if (tail === null) { + join(step, null, null); + } else { + join(step, tail._1, tail._2); + } + }; + }); + + if (tmp) { + tmp = false; + return; + } + } + break; + } + + if (tail === null) { + head = null; + } else { + head = tail._1; + tail = tail._2; + } + } + } + + function resolve(fiber) { + return function (result) { + return function () { + delete fibers[fiber._1]; + fiber._3 = result; + join(result, fiber._2._1, fiber._2._2); + }; + }; + } + + // Walks the applicative tree, substituting non-applicative nodes with + // `FORKED` nodes. In this tree, all applicative nodes use the `_3` slot + // as a mutable slot for memoization. In an unresolved state, the `_3` + // slot is `EMPTY`. In the cases of `ALT` and `APPLY`, we always walk + // the left side first, because both operations are left-associative. As + // we `RETURN` from those branches, we then walk the right side. + function run() { + var status = CONTINUE; + var step = par; + var head = null; + var tail = null; + var tmp, fid; + + loop: while (true) { + tmp = null; + fid = null; + + switch (status) { + case CONTINUE: + switch (step.tag) { + case MAP: + if (head) { + tail = new Aff(CONS, head, tail); + } + head = new Aff(MAP, step._1, EMPTY, EMPTY); + step = step._2; + break; + case APPLY: + if (head) { + tail = new Aff(CONS, head, tail); + } + head = new Aff(APPLY, EMPTY, step._2, EMPTY); + step = step._1; + break; + case ALT: + if (head) { + tail = new Aff(CONS, head, tail); + } + head = new Aff(ALT, EMPTY, step._2, EMPTY); + step = step._1; + break; + default: + // When we hit a leaf value, we suspend the stack in the `FORKED`. + // When the fiber resolves, it can bubble back up the tree. + fid = fiberId++; + status = RETURN; + tmp = step; + step = new Aff(FORKED, fid, new Aff(CONS, head, tail), EMPTY); + tmp = Fiber(util, supervisor, tmp); + tmp.onComplete({ + rethrow: false, + handler: resolve(step) + })(); + fibers[fid] = tmp; + if (supervisor) { + supervisor.register(tmp); + } + } + break; + case RETURN: + // Terminal case, we are back at the root. + if (head === null) { + break loop; + } + // If we are done with the right side, we need to continue down the + // left. Otherwise we should continue up the stack. + if (head._1 === EMPTY) { + head._1 = step; + status = CONTINUE; + step = head._2; + head._2 = EMPTY; + } else { + head._2 = step; + step = head; + if (tail === null) { + head = null; + } else { + head = tail._1; + tail = tail._2; + } + } + } + } + + // Keep a reference to the tree root so it can be cancelled. + root = step; + + for (fid = 0; fid < fiberId; fid++) { + fibers[fid].run(); + } + } + + // Cancels the entire tree. If there are already subtrees being canceled, + // we need to first cancel those joins. We will then add fresh joins for + // all pending branches including those that were in the process of being + // canceled. + function cancel(error, cb) { + interrupt = util.left(error); + var innerKills; + for (var kid in kills) { + if (kills.hasOwnProperty(kid)) { + innerKills = kills[kid]; + for (kid in innerKills) { + if (innerKills.hasOwnProperty(kid)) { + innerKills[kid](); + } + } + } + } + + kills = null; + var newKills = kill(error, root, cb); + + return function (killError) { + return new Aff(ASYNC, function (killCb) { + return function () { + for (var kid in newKills) { + if (newKills.hasOwnProperty(kid)) { + newKills[kid](); + } + } + return nonCanceler; + }; + }); + }; + } + + run(); + + return function (killError) { + return new Aff(ASYNC, function (killCb) { + return function () { + return cancel(killError, killCb); + }; + }); + }; + } + + function sequential(util, supervisor, par) { + return new Aff(ASYNC, function (cb) { + return function () { + return runPar(util, supervisor, par, cb); + }; + }); + } + + Aff.EMPTY = EMPTY; + Aff.Pure = AffCtr(PURE); + Aff.Throw = AffCtr(THROW); + Aff.Catch = AffCtr(CATCH); + Aff.Sync = AffCtr(SYNC); + Aff.Async = AffCtr(ASYNC); + Aff.Bind = AffCtr(BIND); + Aff.Bracket = AffCtr(BRACKET); + Aff.Fork = AffCtr(FORK); + Aff.Seq = AffCtr(SEQ); + Aff.ParMap = AffCtr(MAP); + Aff.ParApply = AffCtr(APPLY); + Aff.ParAlt = AffCtr(ALT); + Aff.Fiber = Fiber; + Aff.Supervisor = Supervisor; + Aff.Scheduler = Scheduler; + Aff.nonCanceler = nonCanceler; + + return Aff; + }(); + + exports._pure = Aff.Pure; + + exports._throwError = Aff.Throw; + + exports._catchError = function (aff) { + return function (k) { + return Aff.Catch(aff, k); + }; + }; + + exports._map = function (f) { + return function (aff) { + if (aff.tag === Aff.Pure.tag) { + return Aff.Pure(f(aff._1)); + } else { + return Aff.Bind(aff, function (value) { + return Aff.Pure(f(value)); + }); + } + }; + }; + + exports._bind = function (aff) { + return function (k) { + return Aff.Bind(aff, k); + }; + }; + + exports._fork = function (immediate) { + return function (aff) { + return Aff.Fork(immediate, aff); + }; + }; + + exports._liftEffect = Aff.Sync; + + exports._parAffMap = function (f) { + return function (aff) { + return Aff.ParMap(f, aff); + }; + }; + + exports._parAffApply = function (aff1) { + return function (aff2) { + return Aff.ParApply(aff1, aff2); + }; + }; + + exports.makeAff = Aff.Async; + + exports._makeFiber = function (util, aff) { + return function () { + return Aff.Fiber(util, null, aff); + }; + }; + + exports._sequential = Aff.Seq; +})(PS["Effect.Aff"] = PS["Effect.Aff"] || {}); +(function(exports) { + "use strict"; + + exports.error = function (msg) { + return new Error(msg); + }; + + exports.throwException = function (e) { + return function () { + throw e; + }; + }; +})(PS["Effect.Exception"] = PS["Effect.Exception"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Effect.Exception"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Either = PS["Data.Either"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Show = PS["Data.Show"]; + var Effect = PS["Effect"]; + var Prelude = PS["Prelude"]; + var $$throw = function ($1) { + return $foreign.throwException($foreign.error($1)); + }; + exports["throw"] = $$throw; + exports["error"] = $foreign.error; + exports["throwException"] = $foreign.throwException; +})(PS["Effect.Exception"] = PS["Effect.Exception"] || {}); +(function(exports) { + "use strict"; + + exports.unsafePerformEffect = function (f) { + return f(); + }; +})(PS["Effect.Unsafe"] = PS["Effect.Unsafe"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Effect.Unsafe"]; + var Effect = PS["Effect"]; + exports["unsafePerformEffect"] = $foreign.unsafePerformEffect; +})(PS["Effect.Unsafe"] = PS["Effect.Unsafe"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Effect.Aff"]; + var Control_Alt = PS["Control.Alt"]; + var Control_Alternative = PS["Control.Alternative"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Lazy = PS["Control.Lazy"]; + var Control_Monad = PS["Control.Monad"]; + var Control_Monad_Error_Class = PS["Control.Monad.Error.Class"]; + var Control_Monad_Rec_Class = PS["Control.Monad.Rec.Class"]; + var Control_Parallel = PS["Control.Parallel"]; + var Control_Parallel_Class = PS["Control.Parallel.Class"]; + var Control_Plus = PS["Control.Plus"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Either = PS["Data.Either"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_Function = PS["Data.Function"]; + var Data_Function_Uncurried = PS["Data.Function.Uncurried"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Monoid = PS["Data.Monoid"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Time_Duration = PS["Data.Time.Duration"]; + var Data_Unit = PS["Data.Unit"]; + var Effect = PS["Effect"]; + var Effect_Class = PS["Effect.Class"]; + var Effect_Exception = PS["Effect.Exception"]; + var Effect_Unsafe = PS["Effect.Unsafe"]; + var Partial_Unsafe = PS["Partial.Unsafe"]; + var Prelude = PS["Prelude"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var Canceler = function (x) { + return x; + }; + var suspendAff = $foreign["_fork"](false); + var functorParAff = new Data_Functor.Functor($foreign["_parAffMap"]); + var functorAff = new Data_Functor.Functor($foreign["_map"]); + var forkAff = $foreign["_fork"](true); + var ffiUtil = (function () { + var unsafeFromRight = function (v) { + if (v instanceof Data_Either.Right) { + return v.value0; + }; + if (v instanceof Data_Either.Left) { + return Partial_Unsafe.unsafeCrashWith("unsafeFromRight: Left"); + }; + throw new Error("Failed pattern match at Effect.Aff (line 400, column 21 - line 402, column 31): " + [ v.constructor.name ]); + }; + var unsafeFromLeft = function (v) { + if (v instanceof Data_Either.Left) { + return v.value0; + }; + if (v instanceof Data_Either.Right) { + return Partial_Unsafe.unsafeCrashWith("unsafeFromLeft: Right"); + }; + throw new Error("Failed pattern match at Effect.Aff (line 395, column 20 - line 399, column 3): " + [ v.constructor.name ]); + }; + var isLeft = function (v) { + if (v instanceof Data_Either.Left) { + return true; + }; + if (v instanceof Data_Either.Right) { + return false; + }; + throw new Error("Failed pattern match at Effect.Aff (line 390, column 12 - line 392, column 20): " + [ v.constructor.name ]); + }; + return { + isLeft: isLeft, + fromLeft: unsafeFromLeft, + fromRight: unsafeFromRight, + left: Data_Either.Left.create, + right: Data_Either.Right.create + }; + })(); + var makeFiber = function (aff) { + return $foreign["_makeFiber"](ffiUtil, aff); + }; + var launchAff = function (aff) { + return function __do() { + var v = makeFiber(aff)(); + v.run(); + return v; + }; + }; + var applyParAff = new Control_Apply.Apply(function () { + return functorParAff; + }, $foreign["_parAffApply"]); + var monadAff = new Control_Monad.Monad(function () { + return applicativeAff; + }, function () { + return bindAff; + }); + var bindAff = new Control_Bind.Bind(function () { + return applyAff; + }, $foreign["_bind"]); + var applyAff = new Control_Apply.Apply(function () { + return functorAff; + }, Control_Monad.ap(monadAff)); + var applicativeAff = new Control_Applicative.Applicative(function () { + return applyAff; + }, $foreign["_pure"]); + var monadEffectAff = new Effect_Class.MonadEffect(function () { + return monadAff; + }, $foreign["_liftEffect"]); + var effectCanceler = function ($50) { + return Canceler(Data_Function["const"](Effect_Class.liftEffect(monadEffectAff)($50))); + }; + var joinFiber = function (v) { + return $foreign.makeAff(function (k) { + return Data_Functor.map(Effect.functorEffect)(effectCanceler)(v.join(k)); + }); + }; + var functorFiber = new Data_Functor.Functor(function (f) { + return function (t) { + return Effect_Unsafe.unsafePerformEffect(makeFiber(Data_Functor.map(functorAff)(f)(joinFiber(t)))); + }; + }); + var killFiber = function (e) { + return function (v) { + return Control_Bind.bind(bindAff)(Effect_Class.liftEffect(monadEffectAff)(v.isSuspended))(function (v1) { + if (v1) { + return Effect_Class.liftEffect(monadEffectAff)(Data_Functor["void"](Effect.functorEffect)(v.kill(e, Data_Function["const"](Control_Applicative.pure(Effect.applicativeEffect)(Data_Unit.unit))))); + }; + return $foreign.makeAff(function (k) { + return Data_Functor.map(Effect.functorEffect)(effectCanceler)(v.kill(e, k)); + }); + }); + }; + }; + var monadThrowAff = new Control_Monad_Error_Class.MonadThrow(function () { + return monadAff; + }, $foreign["_throwError"]); + var monadErrorAff = new Control_Monad_Error_Class.MonadError(function () { + return monadThrowAff; + }, $foreign["_catchError"]); + var runAff = function (k) { + return function (aff) { + return launchAff(Control_Bind.bindFlipped(bindAff)(function ($52) { + return Effect_Class.liftEffect(monadEffectAff)(k($52)); + })(Control_Monad_Error_Class["try"](monadErrorAff)(aff))); + }; + }; + var runAff_ = function (k) { + return function (aff) { + return Data_Functor["void"](Effect.functorEffect)(runAff(k)(aff)); + }; + }; + var parallelAff = new Control_Parallel_Class.Parallel(function () { + return applicativeParAff; + }, function () { + return monadAff; + }, Unsafe_Coerce.unsafeCoerce, $foreign["_sequential"]); + var applicativeParAff = new Control_Applicative.Applicative(function () { + return applyParAff; + }, function ($54) { + return Control_Parallel_Class.parallel(parallelAff)(Control_Applicative.pure(applicativeAff)($54)); + }); + var monadRecAff = new Control_Monad_Rec_Class.MonadRec(function () { + return monadAff; + }, function (k) { + var go = function (a) { + return Control_Bind.bind(bindAff)(k(a))(function (v) { + if (v instanceof Control_Monad_Rec_Class.Done) { + return Control_Applicative.pure(applicativeAff)(v.value0); + }; + if (v instanceof Control_Monad_Rec_Class.Loop) { + return go(v.value0); + }; + throw new Error("Failed pattern match at Effect.Aff (line 100, column 7 - line 102, column 22): " + [ v.constructor.name ]); + }); + }; + return go; + }); + var nonCanceler = Data_Function["const"](Control_Applicative.pure(applicativeAff)(Data_Unit.unit)); + exports["Canceler"] = Canceler; + exports["launchAff"] = launchAff; + exports["runAff"] = runAff; + exports["runAff_"] = runAff_; + exports["forkAff"] = forkAff; + exports["suspendAff"] = suspendAff; + exports["killFiber"] = killFiber; + exports["joinFiber"] = joinFiber; + exports["nonCanceler"] = nonCanceler; + exports["effectCanceler"] = effectCanceler; + exports["functorAff"] = functorAff; + exports["applyAff"] = applyAff; + exports["applicativeAff"] = applicativeAff; + exports["bindAff"] = bindAff; + exports["monadAff"] = monadAff; + exports["monadRecAff"] = monadRecAff; + exports["monadThrowAff"] = monadThrowAff; + exports["monadErrorAff"] = monadErrorAff; + exports["monadEffectAff"] = monadEffectAff; + exports["functorParAff"] = functorParAff; + exports["applyParAff"] = applyParAff; + exports["applicativeParAff"] = applicativeParAff; + exports["parallelAff"] = parallelAff; + exports["functorFiber"] = functorFiber; + exports["makeAff"] = $foreign.makeAff; +})(PS["Effect.Aff"] = PS["Effect.Aff"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Either = PS["Data.Either"]; + var Data_Function = PS["Data.Function"]; + var Effect = PS["Effect"]; + var Effect_Aff = PS["Effect.Aff"]; + var Effect_Exception = PS["Effect.Exception"]; + var Effect_Uncurried = PS["Effect.Uncurried"]; + var Prelude = PS["Prelude"]; + var fromEffectFnAff = function (v) { + return Effect_Aff.makeAff(function (k) { + return function __do() { + var v1 = v(function ($4) { + return k(Data_Either.Left.create($4))(); + }, function ($5) { + return k(Data_Either.Right.create($5))(); + }); + return function (e) { + return Effect_Aff.makeAff(function (k2) { + return function __do() { + v1(e, function ($6) { + return k2(Data_Either.Left.create($6))(); + }, function ($7) { + return k2(Data_Either.Right.create($7))(); + }); + return Effect_Aff.nonCanceler; + }; + }); + }; + }; + }); + }; + exports["fromEffectFnAff"] = fromEffectFnAff; +})(PS["Effect.Aff.Compat"] = PS["Effect.Aff.Compat"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Affjax"]; + var Affjax_RequestBody = PS["Affjax.RequestBody"]; + var Affjax_RequestHeader = PS["Affjax.RequestHeader"]; + var Affjax_ResponseFormat = PS["Affjax.ResponseFormat"]; + var Affjax_ResponseHeader = PS["Affjax.ResponseHeader"]; + var Affjax_StatusCode = PS["Affjax.StatusCode"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Monad_Error_Class = PS["Control.Monad.Error.Class"]; + var Control_Monad_Except = PS["Control.Monad.Except"]; + var Control_Monad_Except_Trans = PS["Control.Monad.Except.Trans"]; + var Control_Parallel = PS["Control.Parallel"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Argonaut_Core = PS["Data.Argonaut.Core"]; + var Data_Argonaut_Parser = PS["Data.Argonaut.Parser"]; + var Data_Array = PS["Data.Array"]; + var Data_Either = PS["Data.Either"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_FormURLEncoded = PS["Data.FormURLEncoded"]; + var Data_Function = PS["Data.Function"]; + var Data_Function_Uncurried = PS["Data.Function.Uncurried"]; + var Data_Functor = PS["Data.Functor"]; + var Data_HTTP_Method = PS["Data.HTTP.Method"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Identity = PS["Data.Identity"]; + var Data_Int = PS["Data.Int"]; + var Data_List_NonEmpty = PS["Data.List.NonEmpty"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Nullable = PS["Data.Nullable"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ring = PS["Data.Ring"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Time_Duration = PS["Data.Time.Duration"]; + var Data_Unit = PS["Data.Unit"]; + var Effect_Aff = PS["Effect.Aff"]; + var Effect_Aff_Compat = PS["Effect.Aff.Compat"]; + var Effect_Class = PS["Effect.Class"]; + var Effect_Exception = PS["Effect.Exception"]; + var Effect_Ref = PS["Effect.Ref"]; + var Foreign = PS["Foreign"]; + var $$Math = PS["Math"]; + var Prelude = PS["Prelude"]; + var request = function (req) { + var parseJSON = function (v) { + if (v === "") { + return Control_Applicative.pure(Control_Monad_Except_Trans.applicativeExceptT(Data_Identity.monadIdentity))(Data_Argonaut_Core.jsonEmptyObject); + }; + return Data_Either.either(function ($66) { + return Foreign.fail(Foreign.ForeignError.create($66)); + })(Control_Applicative.pure(Control_Monad_Except_Trans.applicativeExceptT(Data_Identity.monadIdentity)))(Data_Argonaut_Parser.jsonParser(v)); + }; + var fromResponse$prime = (function () { + if (req.responseFormat instanceof Affjax_ResponseFormat["ArrayBuffer"]) { + return Foreign.unsafeReadTagged("ArrayBuffer"); + }; + if (req.responseFormat instanceof Affjax_ResponseFormat.Blob) { + return Foreign.unsafeReadTagged("Blob"); + }; + if (req.responseFormat instanceof Affjax_ResponseFormat.Document) { + return Foreign.unsafeReadTagged("Document"); + }; + if (req.responseFormat instanceof Affjax_ResponseFormat.Json) { + return Control_Bind.composeKleisliFlipped(Control_Monad_Except_Trans.bindExceptT(Data_Identity.monadIdentity))(function ($67) { + return req.responseFormat.value0(parseJSON($67)); + })(Foreign.unsafeReadTagged("String")); + }; + if (req.responseFormat instanceof Affjax_ResponseFormat["String"]) { + return Foreign.unsafeReadTagged("String"); + }; + if (req.responseFormat instanceof Affjax_ResponseFormat.Ignore) { + return Data_Function["const"](req.responseFormat.value0(Control_Applicative.pure(Control_Monad_Except_Trans.applicativeExceptT(Data_Identity.monadIdentity))(Data_Unit.unit))); + }; + throw new Error("Failed pattern match at Affjax (line 292, column 19 - line 298, column 57): " + [ req.responseFormat.constructor.name ]); + })(); + var extractContent = function (v) { + if (v instanceof Affjax_RequestBody.ArrayView) { + return v.value0(Foreign.unsafeToForeign); + }; + if (v instanceof Affjax_RequestBody.Blob) { + return Foreign.unsafeToForeign(v.value0); + }; + if (v instanceof Affjax_RequestBody.Document) { + return Foreign.unsafeToForeign(v.value0); + }; + if (v instanceof Affjax_RequestBody["String"]) { + return Foreign.unsafeToForeign(v.value0); + }; + if (v instanceof Affjax_RequestBody.FormData) { + return Foreign.unsafeToForeign(v.value0); + }; + if (v instanceof Affjax_RequestBody.FormURLEncoded) { + return Foreign.unsafeToForeign(Data_FormURLEncoded.encode(v.value0)); + }; + if (v instanceof Affjax_RequestBody.Json) { + return Foreign.unsafeToForeign(Data_Argonaut_Core.stringify(v.value0)); + }; + throw new Error("Failed pattern match at Affjax (line 266, column 20 - line 273, column 57): " + [ v.constructor.name ]); + }; + var addHeader = function (mh) { + return function (hs) { + if (mh instanceof Data_Maybe.Just && !Data_Foldable.any(Data_Foldable.foldableArray)(Data_HeytingAlgebra.heytingAlgebraBoolean)(Data_Function.on(Data_Eq.eq(Data_Eq.eqString))(Affjax_RequestHeader.requestHeaderName)(mh.value0))(hs)) { + return Data_Array.snoc(hs)(mh.value0); + }; + return hs; + }; + }; + var headers = function (reqContent) { + return addHeader(Data_Functor.map(Data_Maybe.functorMaybe)(Affjax_RequestHeader.ContentType.create)(Control_Bind.bindFlipped(Data_Maybe.bindMaybe)(Affjax_RequestBody.toMediaType)(reqContent)))(addHeader(Data_Functor.map(Data_Maybe.functorMaybe)(Affjax_RequestHeader.Accept.create)(Affjax_ResponseFormat.toMediaType(req.responseFormat)))(req.headers)); + }; + var req$prime = { + method: Data_HTTP_Method.print(req.method), + url: req.url, + headers: Data_Functor.map(Data_Functor.functorArray)(function (h) { + return { + field: Affjax_RequestHeader.requestHeaderName(h), + value: Affjax_RequestHeader.requestHeaderValue(h) + }; + })(headers(req.content)), + content: Data_Nullable.toNullable(Data_Functor.map(Data_Maybe.functorMaybe)(extractContent)(req.content)), + responseType: Affjax_ResponseFormat.toResponseType(req.responseFormat), + username: Data_Nullable.toNullable(req.username), + password: Data_Nullable.toNullable(req.password), + withCredentials: req.withCredentials + }; + return Control_Bind.bind(Effect_Aff.bindAff)(Effect_Aff_Compat.fromEffectFnAff($foreign["_ajax"](Affjax_ResponseHeader.responseHeader, req$prime)))(function (v) { + var v1 = Control_Monad_Except.runExcept(fromResponse$prime(v.body)); + if (v1 instanceof Data_Either.Left) { + return Control_Applicative.pure(Effect_Aff.applicativeAff)({ + body: new Data_Either.Left(new Affjax_ResponseFormat.ResponseFormatError(Data_List_NonEmpty.head(v1.value0), v.body)), + headers: v.headers, + status: v.status, + statusText: v.statusText + }); + }; + if (v1 instanceof Data_Either.Right) { + return Control_Applicative.pure(Effect_Aff.applicativeAff)({ + body: new Data_Either.Right(v1.value0), + headers: v.headers, + status: v.status, + statusText: v.statusText + }); + }; + throw new Error("Failed pattern match at Affjax (line 246, column 3 - line 250, column 39): " + [ v1.constructor.name ]); + }); + }; + var defaultRequest = { + method: new Data_Either.Left(Data_HTTP_Method.GET.value), + url: "/", + headers: [ ], + content: Data_Maybe.Nothing.value, + username: Data_Maybe.Nothing.value, + password: Data_Maybe.Nothing.value, + withCredentials: false, + responseFormat: Affjax_ResponseFormat.ignore + }; + exports["defaultRequest"] = defaultRequest; + exports["request"] = request; +})(PS["Affjax"] = PS["Affjax"] || {}); +(function(exports) { + "use strict"; + + exports._app = function() { + return app; + } + + exports._mmoment8601 = function(just, nothing, tuple, s) { + try { + var m = moment(s, moment.ISO_8601); + var s1 = m.fromNow(); + var s2 = m.format('MMMM D YYYY, h:mm a') + " (" + m.format() + ") "; + return just(tuple(s1)(s2)); + } catch (error) { + return nothing + } + } + + exports._closeWindow = function (window) { + window.close(); + }; +})(PS["Globals"] = PS["Globals"] || {}); +(function(exports) { + "use strict"; + + exports.unsafeReadPropImpl = function (f, s, key, value) { + return value == null ? f : s(value[key]); + }; +})(PS["Foreign.Index"] = PS["Foreign.Index"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Foreign.Index"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Monad_Except_Trans = PS["Control.Monad.Except.Trans"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Function = PS["Data.Function"]; + var Data_Function_Uncurried = PS["Data.Function.Uncurried"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Identity = PS["Data.Identity"]; + var Data_List_NonEmpty = PS["Data.List.NonEmpty"]; + var Foreign = PS["Foreign"]; + var Prelude = PS["Prelude"]; + var unsafeReadProp = function (k) { + return function (value) { + return $foreign.unsafeReadPropImpl(Foreign.fail(new Foreign.TypeMismatch("object", Foreign.typeOf(value))), Control_Applicative.pure(Control_Monad_Except_Trans.applicativeExceptT(Data_Identity.monadIdentity)), k, value); + }; + }; + var readProp = unsafeReadProp; + exports["readProp"] = readProp; +})(PS["Foreign.Index"] = PS["Foreign.Index"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Type_Data_Boolean = PS["Type.Data.Boolean"]; + var Type_Data_Symbol = PS["Type.Data.Symbol"]; + var Type_Equality = PS["Type.Equality"]; + var RLProxy = (function () { + function RLProxy() { + + }; + RLProxy.value = new RLProxy(); + return RLProxy; + })(); + exports["RLProxy"] = RLProxy; +})(PS["Type.Row"] = PS["Type.Row"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Data_Eq = PS["Data.Eq"]; + var Data_Function_Uncurried = PS["Data.Function.Uncurried"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Symbol = PS["Data.Symbol"]; + var Prelude = PS["Prelude"]; + var Record_Unsafe = PS["Record.Unsafe"]; + var Record_Unsafe_Union = PS["Record.Unsafe.Union"]; + var Type_Row = PS["Type.Row"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var get = function (dictIsSymbol) { + return function (dictCons) { + return function (l) { + return function (r) { + return Record_Unsafe.unsafeGet(Data_Symbol.reflectSymbol(dictIsSymbol)(l))(r); + }; + }; + }; + }; + exports["get"] = get; +})(PS["Record"] = PS["Record"] || {}); +(function(exports) { + "use strict"; + + exports.copyRecord = function(rec) { + var copy = {}; + for (var key in rec) { + if ({}.hasOwnProperty.call(rec, key)) { + copy[key] = rec[key]; + } + } + return copy; + }; + + exports.unsafeInsert = function(l) { + return function(a) { + return function(rec) { + rec[l] = a; + return rec; + }; + }; + }; +})(PS["Record.Builder"] = PS["Record.Builder"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Record.Builder"]; + var Control_Category = PS["Control.Category"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Function_Uncurried = PS["Data.Function.Uncurried"]; + var Data_Symbol = PS["Data.Symbol"]; + var Prelude = PS["Prelude"]; + var Record_Unsafe_Union = PS["Record.Unsafe.Union"]; + var Type_Row = PS["Type.Row"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var semigroupoidBuilder = Control_Semigroupoid.semigroupoidFn; + var insert = function (dictCons) { + return function (dictLacks) { + return function (dictIsSymbol) { + return function (l) { + return function (a) { + return function (r1) { + return $foreign.unsafeInsert(Data_Symbol.reflectSymbol(dictIsSymbol)(l))(a)(r1); + }; + }; + }; + }; + }; + }; + var categoryBuilder = Control_Category.categoryFn; + var build = function (v) { + return function (r1) { + return v($foreign.copyRecord(r1)); + }; + }; + exports["build"] = build; + exports["insert"] = insert; + exports["semigroupoidBuilder"] = semigroupoidBuilder; + exports["categoryBuilder"] = categoryBuilder; +})(PS["Record.Builder"] = PS["Record.Builder"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Simple.JSON"]; + var Control_Alt = PS["Control.Alt"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Category = PS["Control.Category"]; + var Control_Monad_Except = PS["Control.Monad.Except"]; + var Control_Monad_Except_Trans = PS["Control.Monad.Except.Trans"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Bifunctor = PS["Data.Bifunctor"]; + var Data_Boolean = PS["Data.Boolean"]; + var Data_Either = PS["Data.Either"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Identity = PS["Data.Identity"]; + var Data_List_Types = PS["Data.List.Types"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Nullable = PS["Data.Nullable"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Symbol = PS["Data.Symbol"]; + var Data_Traversable = PS["Data.Traversable"]; + var Data_Variant = PS["Data.Variant"]; + var Effect_Exception = PS["Effect.Exception"]; + var Effect_Uncurried = PS["Effect.Uncurried"]; + var Effect_Unsafe = PS["Effect.Unsafe"]; + var Foreign = PS["Foreign"]; + var Foreign_Index = PS["Foreign.Index"]; + var Foreign_Object = PS["Foreign.Object"]; + var Global_Unsafe = PS["Global.Unsafe"]; + var Partial_Unsafe = PS["Partial.Unsafe"]; + var Prelude = PS["Prelude"]; + var Record = PS["Record"]; + var Record_Builder = PS["Record.Builder"]; + var Type_Prelude = PS["Type.Prelude"]; + var Type_Row = PS["Type.Row"]; + var WriteForeign = function (writeImpl) { + this.writeImpl = writeImpl; + }; + var WriteForeignFields = function (writeImplFields) { + this.writeImplFields = writeImplFields; + }; + var writeImplFields = function (dict) { + return dict.writeImplFields; + }; + var writeImpl = function (dict) { + return dict.writeImpl; + }; + var writeJSON = function (dictWriteForeign) { + return function ($85) { + return Global_Unsafe.unsafeStringify(writeImpl(dictWriteForeign)($85)); + }; + }; + var writeForeignString = new WriteForeign(Foreign.unsafeToForeign); + var writeForeignNullable = function (dictWriteForeign) { + return new WriteForeign(function ($87) { + return Data_Maybe.maybe(Foreign.unsafeToForeign(Data_Nullable.toNullable(Data_Maybe.Nothing.value)))(writeImpl(dictWriteForeign))(Data_Nullable.toMaybe($87)); + }); + }; + var writeForeignInt = new WriteForeign(Foreign.unsafeToForeign); + var writeForeignBoolean = new WriteForeign(Foreign.unsafeToForeign); + var recordWriteForeign = function (dictRowToList) { + return function (dictWriteForeignFields) { + return new WriteForeign(function (rec) { + var steps = writeImplFields(dictWriteForeignFields)(Type_Row.RLProxy.value)(rec); + return Foreign.unsafeToForeign(Record_Builder.build(steps)({})); + }); + }; + }; + var nilWriteForeignFields = new WriteForeignFields(function (v) { + return function (v1) { + return Control_Category.identity(Record_Builder.categoryBuilder); + }; + }); + var consWriteForeignFields = function (dictIsSymbol) { + return function (dictWriteForeign) { + return function (dictWriteForeignFields) { + return function (dictCons) { + return function (dictLacks) { + return function (dictCons1) { + return new WriteForeignFields(function (v) { + return function (rec) { + var rest = writeImplFields(dictWriteForeignFields)(Type_Row.RLProxy.value)(rec); + var value = writeImpl(dictWriteForeign)(Record.get(dictIsSymbol)(dictCons)(Data_Symbol.SProxy.value)(rec)); + var result = Control_Semigroupoid.compose(Record_Builder.semigroupoidBuilder)(Record_Builder.insert(dictCons1)(dictLacks)(dictIsSymbol)(Data_Symbol.SProxy.value)(value))(rest); + return result; + }; + }); + }; + }; + }; + }; + }; + }; + exports["writeJSON"] = writeJSON; + exports["WriteForeign"] = WriteForeign; + exports["writeImpl"] = writeImpl; + exports["WriteForeignFields"] = WriteForeignFields; + exports["writeImplFields"] = writeImplFields; + exports["writeForeignString"] = writeForeignString; + exports["writeForeignInt"] = writeForeignInt; + exports["writeForeignBoolean"] = writeForeignBoolean; + exports["writeForeignNullable"] = writeForeignNullable; + exports["recordWriteForeign"] = recordWriteForeign; + exports["consWriteForeignFields"] = consWriteForeignFields; + exports["nilWriteForeignFields"] = nilWriteForeignFields; +})(PS["Simple.JSON"] = PS["Simple.JSON"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Data_Nullable = PS["Data.Nullable"]; + var Data_Symbol = PS["Data.Symbol"]; + var Simple_JSON = PS["Simple.JSON"]; + var usersettings_wfI = Simple_JSON.recordWriteForeign()(Simple_JSON.consWriteForeignFields(new Data_Symbol.IsSymbol(function () { + return "archiveDefault"; + }))(Simple_JSON.writeForeignBoolean)(Simple_JSON.consWriteForeignFields(new Data_Symbol.IsSymbol(function () { + return "privacyLock"; + }))(Simple_JSON.writeForeignBoolean)(Simple_JSON.consWriteForeignFields(new Data_Symbol.IsSymbol(function () { + return "privateDefault"; + }))(Simple_JSON.writeForeignBoolean)(Simple_JSON.nilWriteForeignFields)()()())()()())()()()); + var note_wfI = Simple_JSON.recordWriteForeign()(Simple_JSON.consWriteForeignFields(new Data_Symbol.IsSymbol(function () { + return "created"; + }))(Simple_JSON.writeForeignString)(Simple_JSON.consWriteForeignFields(new Data_Symbol.IsSymbol(function () { + return "id"; + }))(Simple_JSON.writeForeignInt)(Simple_JSON.consWriteForeignFields(new Data_Symbol.IsSymbol(function () { + return "isMarkdown"; + }))(Simple_JSON.writeForeignBoolean)(Simple_JSON.consWriteForeignFields(new Data_Symbol.IsSymbol(function () { + return "length"; + }))(Simple_JSON.writeForeignInt)(Simple_JSON.consWriteForeignFields(new Data_Symbol.IsSymbol(function () { + return "slug"; + }))(Simple_JSON.writeForeignString)(Simple_JSON.consWriteForeignFields(new Data_Symbol.IsSymbol(function () { + return "text"; + }))(Simple_JSON.writeForeignString)(Simple_JSON.consWriteForeignFields(new Data_Symbol.IsSymbol(function () { + return "title"; + }))(Simple_JSON.writeForeignString)(Simple_JSON.consWriteForeignFields(new Data_Symbol.IsSymbol(function () { + return "updated"; + }))(Simple_JSON.writeForeignString)(Simple_JSON.nilWriteForeignFields)()()())()()())()()())()()())()()())()()())()()())()()()); + var bookmark_wfI = Simple_JSON.recordWriteForeign()(Simple_JSON.consWriteForeignFields(new Data_Symbol.IsSymbol(function () { + return "archiveUrl"; + }))(Simple_JSON.writeForeignNullable(Simple_JSON.writeForeignString))(Simple_JSON.consWriteForeignFields(new Data_Symbol.IsSymbol(function () { + return "bid"; + }))(Simple_JSON.writeForeignInt)(Simple_JSON.consWriteForeignFields(new Data_Symbol.IsSymbol(function () { + return "description"; + }))(Simple_JSON.writeForeignString)(Simple_JSON.consWriteForeignFields(new Data_Symbol.IsSymbol(function () { + return "private"; + }))(Simple_JSON.writeForeignBoolean)(Simple_JSON.consWriteForeignFields(new Data_Symbol.IsSymbol(function () { + return "selected"; + }))(Simple_JSON.writeForeignBoolean)(Simple_JSON.consWriteForeignFields(new Data_Symbol.IsSymbol(function () { + return "slug"; + }))(Simple_JSON.writeForeignString)(Simple_JSON.consWriteForeignFields(new Data_Symbol.IsSymbol(function () { + return "tags"; + }))(Simple_JSON.writeForeignString)(Simple_JSON.consWriteForeignFields(new Data_Symbol.IsSymbol(function () { + return "time"; + }))(Simple_JSON.writeForeignString)(Simple_JSON.consWriteForeignFields(new Data_Symbol.IsSymbol(function () { + return "title"; + }))(Simple_JSON.writeForeignString)(Simple_JSON.consWriteForeignFields(new Data_Symbol.IsSymbol(function () { + return "toread"; + }))(Simple_JSON.writeForeignBoolean)(Simple_JSON.consWriteForeignFields(new Data_Symbol.IsSymbol(function () { + return "url"; + }))(Simple_JSON.writeForeignString)(Simple_JSON.nilWriteForeignFields)()()())()()())()()())()()())()()())()()())()()())()()())()()())()()())()()()); + exports["bookmark_wfI"] = bookmark_wfI; + exports["note_wfI"] = note_wfI; + exports["usersettings_wfI"] = usersettings_wfI; +})(PS["Model"] = PS["Model"] || {}); +(function(exports) { + /* global window */ + "use strict"; + + exports.window = function () { + return window; + }; +})(PS["Web.HTML"] = PS["Web.HTML"] || {}); +(function(exports) { + "use strict"; + + exports._querySelector = function (selector) { + return function (node) { + return function () { + return node.querySelector(selector); + }; + }; + }; +})(PS["Web.DOM.ParentNode"] = PS["Web.DOM.ParentNode"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Web.DOM.ParentNode"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_Nullable = PS["Data.Nullable"]; + var Data_Ord = PS["Data.Ord"]; + var Effect = PS["Effect"]; + var Prelude = PS["Prelude"]; + var Web_DOM_HTMLCollection = PS["Web.DOM.HTMLCollection"]; + var Web_DOM_Internal_Types = PS["Web.DOM.Internal.Types"]; + var Web_DOM_NodeList = PS["Web.DOM.NodeList"]; + var querySelector = function (qs) { + return function ($3) { + return Data_Functor.map(Effect.functorEffect)(Data_Nullable.toMaybe)($foreign["_querySelector"](qs)($3)); + }; + }; + exports["querySelector"] = querySelector; +})(PS["Web.DOM.ParentNode"] = PS["Web.DOM.ParentNode"] || {}); +(function(exports) { + "use strict"; + + exports.eventListener = function (fn) { + return function () { + return function (event) { + return fn(event)(); + }; + }; + }; +})(PS["Web.Event.EventTarget"] = PS["Web.Event.EventTarget"] || {}); +(function(exports) { + "use strict"; + + exports._currentTarget = function (e) { + return e.currentTarget; + }; + + exports.preventDefault = function (e) { + return function () { + return e.preventDefault(); + }; + }; +})(PS["Web.Event.Event"] = PS["Web.Event.Event"] || {}); +(function(exports) { + "use strict"; + + exports.toCharCode = function (c) { + return c.charCodeAt(0); + }; + + exports.fromCharCode = function (c) { + return String.fromCharCode(c); + }; +})(PS["Data.Enum"] = PS["Data.Enum"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.Enum"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_MonadPlus = PS["Control.MonadPlus"]; + var Control_MonadZero = PS["Control.MonadZero"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Boolean = PS["Data.Boolean"]; + var Data_Bounded = PS["Data.Bounded"]; + var Data_Either = PS["Data.Either"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ordering = PS["Data.Ordering"]; + var Data_Ring = PS["Data.Ring"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Show = PS["Data.Show"]; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unfoldable = PS["Data.Unfoldable"]; + var Data_Unfoldable1 = PS["Data.Unfoldable1"]; + var Data_Unit = PS["Data.Unit"]; + var Partial_Unsafe = PS["Partial.Unsafe"]; + var Prelude = PS["Prelude"]; + var Enum = function (Ord0, pred, succ) { + this.Ord0 = Ord0; + this.pred = pred; + this.succ = succ; + }; + var BoundedEnum = function (Bounded0, Enum1, cardinality, fromEnum, toEnum) { + this.Bounded0 = Bounded0; + this.Enum1 = Enum1; + this.cardinality = cardinality; + this.fromEnum = fromEnum; + this.toEnum = toEnum; + }; + var toEnum = function (dict) { + return dict.toEnum; + }; + var succ = function (dict) { + return dict.succ; + }; + var pred = function (dict) { + return dict.pred; + }; + var fromEnum = function (dict) { + return dict.fromEnum; + }; + var toEnumWithDefaults = function (dictBoundedEnum) { + return function (low) { + return function (high) { + return function (x) { + var v = toEnum(dictBoundedEnum)(x); + if (v instanceof Data_Maybe.Just) { + return v.value0; + }; + if (v instanceof Data_Maybe.Nothing) { + var $51 = x < fromEnum(dictBoundedEnum)(Data_Bounded.bottom(dictBoundedEnum.Bounded0())); + if ($51) { + return low; + }; + return high; + }; + throw new Error("Failed pattern match at Data.Enum (line 158, column 33 - line 160, column 62): " + [ v.constructor.name ]); + }; + }; + }; + }; + var defaultSucc = function (toEnum$prime) { + return function (fromEnum$prime) { + return function (a) { + return toEnum$prime(fromEnum$prime(a) + 1 | 0); + }; + }; + }; + var defaultPred = function (toEnum$prime) { + return function (fromEnum$prime) { + return function (a) { + return toEnum$prime(fromEnum$prime(a) - 1 | 0); + }; + }; + }; + var charToEnum = function (v) { + if (v >= Data_Bounded.bottom(Data_Bounded.boundedInt) && v <= Data_Bounded.top(Data_Bounded.boundedInt)) { + return new Data_Maybe.Just($foreign.fromCharCode(v)); + }; + return Data_Maybe.Nothing.value; + }; + var enumChar = new Enum(function () { + return Data_Ord.ordChar; + }, defaultPred(charToEnum)($foreign.toCharCode), defaultSucc(charToEnum)($foreign.toCharCode)); + var cardinality = function (dict) { + return dict.cardinality; + }; + var boundedEnumChar = new BoundedEnum(function () { + return Data_Bounded.boundedChar; + }, function () { + return enumChar; + }, $foreign.toCharCode(Data_Bounded.top(Data_Bounded.boundedChar)) - $foreign.toCharCode(Data_Bounded.bottom(Data_Bounded.boundedChar)) | 0, $foreign.toCharCode, charToEnum); + exports["Enum"] = Enum; + exports["succ"] = succ; + exports["pred"] = pred; + exports["BoundedEnum"] = BoundedEnum; + exports["cardinality"] = cardinality; + exports["toEnum"] = toEnum; + exports["fromEnum"] = fromEnum; + exports["toEnumWithDefaults"] = toEnumWithDefaults; + exports["defaultSucc"] = defaultSucc; + exports["defaultPred"] = defaultPred; + exports["enumChar"] = enumChar; + exports["boundedEnumChar"] = boundedEnumChar; +})(PS["Data.Enum"] = PS["Data.Enum"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Web.Event.Event"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_DateTime_Instant = PS["Data.DateTime.Instant"]; + var Data_Enum = PS["Data.Enum"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_Nullable = PS["Data.Nullable"]; + var Data_Ord = PS["Data.Ord"]; + var Effect = PS["Effect"]; + var Prelude = PS["Prelude"]; + var Web_Event_EventPhase = PS["Web.Event.EventPhase"]; + var Web_Event_Internal_Types = PS["Web.Event.Internal.Types"]; + var currentTarget = function ($6) { + return Data_Nullable.toMaybe($foreign["_currentTarget"]($6)); + }; + exports["currentTarget"] = currentTarget; + exports["preventDefault"] = $foreign.preventDefault; +})(PS["Web.Event.Event"] = PS["Web.Event.Event"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Web.Event.EventTarget"]; + var Effect = PS["Effect"]; + var Prelude = PS["Prelude"]; + var Web_Event_Event = PS["Web.Event.Event"]; + var Web_Event_Internal_Types = PS["Web.Event.Internal.Types"]; + exports["eventListener"] = $foreign.eventListener; +})(PS["Web.Event.EventTarget"] = PS["Web.Event.EventTarget"] || {}); +(function(exports) { + "use strict"; + + exports._read = function (nothing, just, value) { + var tag = Object.prototype.toString.call(value); + if (tag.indexOf("[object HTML") === 0 && tag.indexOf("Element]") === tag.length - 8) { + return just(value); + } else { + return nothing; + } + }; +})(PS["Web.HTML.HTMLElement"] = PS["Web.HTML.HTMLElement"] || {}); +(function(exports) { + "use strict"; + + exports.removeAttribute = function (name) { + return function (element) { + return function () { + element.removeAttribute(name); + return {}; + }; + }; + }; +})(PS["Web.DOM.Element"] = PS["Web.DOM.Element"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Web.DOM.Element"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Nullable = PS["Data.Nullable"]; + var Effect = PS["Effect"]; + var Prelude = PS["Prelude"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var Web_DOM_ChildNode = PS["Web.DOM.ChildNode"]; + var Web_DOM_Internal_Types = PS["Web.DOM.Internal.Types"]; + var Web_DOM_NonDocumentTypeChildNode = PS["Web.DOM.NonDocumentTypeChildNode"]; + var Web_DOM_ParentNode = PS["Web.DOM.ParentNode"]; + var Web_Event_EventTarget = PS["Web.Event.EventTarget"]; + var Web_Internal_FFI = PS["Web.Internal.FFI"]; + var toNode = Unsafe_Coerce.unsafeCoerce; + exports["toNode"] = toNode; + exports["removeAttribute"] = $foreign.removeAttribute; +})(PS["Web.DOM.Element"] = PS["Web.DOM.Element"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Web.HTML.HTMLElement"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Function_Uncurried = PS["Data.Function.Uncurried"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Nullable = PS["Data.Nullable"]; + var Effect = PS["Effect"]; + var Prelude = PS["Prelude"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var Web_DOM = PS["Web.DOM"]; + var Web_DOM_DOMTokenList = PS["Web.DOM.DOMTokenList"]; + var Web_DOM_Element = PS["Web.DOM.Element"]; + var Web_DOM_Internal_Types = PS["Web.DOM.Internal.Types"]; + var Web_DOM_NonDocumentTypeChildNode = PS["Web.DOM.NonDocumentTypeChildNode"]; + var Web_DOM_ParentNode = PS["Web.DOM.ParentNode"]; + var Web_Event_EventTarget = PS["Web.Event.EventTarget"]; + var toNode = Unsafe_Coerce.unsafeCoerce; + var toElement = Unsafe_Coerce.unsafeCoerce; + var fromElement = function (x) { + return $foreign["_read"](Data_Maybe.Nothing.value, Data_Maybe.Just.create, x); + }; + exports["fromElement"] = fromElement; + exports["toElement"] = toElement; + exports["toNode"] = toNode; +})(PS["Web.HTML.HTMLElement"] = PS["Web.HTML.HTMLElement"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Web.HTML.HTMLDocument"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Nullable = PS["Data.Nullable"]; + var Effect = PS["Effect"]; + var Prelude = PS["Prelude"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var Web_DOM_Document = PS["Web.DOM.Document"]; + var Web_DOM_Internal_Types = PS["Web.DOM.Internal.Types"]; + var Web_DOM_NonElementParentNode = PS["Web.DOM.NonElementParentNode"]; + var Web_DOM_ParentNode = PS["Web.DOM.ParentNode"]; + var Web_Event_EventTarget = PS["Web.Event.EventTarget"]; + var Web_HTML_HTMLDocument_ReadyState = PS["Web.HTML.HTMLDocument.ReadyState"]; + var Web_HTML_HTMLElement = PS["Web.HTML.HTMLElement"]; + var Web_HTML_HTMLScriptElement = PS["Web.HTML.HTMLScriptElement"]; + var Web_Internal_FFI = PS["Web.Internal.FFI"]; + var toParentNode = Unsafe_Coerce.unsafeCoerce; + var toDocument = Unsafe_Coerce.unsafeCoerce; + exports["toDocument"] = toDocument; + exports["toParentNode"] = toParentNode; +})(PS["Web.HTML.HTMLDocument"] = PS["Web.HTML.HTMLDocument"] || {}); +(function(exports) { + "use strict"; + + // ---------------------------------------------------------------------------- + + exports.href = function (location) { + return function () { + return location.href; + }; + }; + + exports.setHref = function (href) { + return function (location) { + return function () { + location.href = href; + }; + }; + }; + + // ---------------------------------------------------------------------------- + + exports.search = function (location) { + return function () { + return location.search; + }; + }; + + // ---------------------------------------------------------------------------- + + exports.reload = function (location) { + return function () { + location.reload(); + }; + }; +})(PS["Web.HTML.Location"] = PS["Web.HTML.Location"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Web.HTML.Location"]; + var Effect = PS["Effect"]; + var Prelude = PS["Prelude"]; + exports["setHref"] = $foreign.setHref; + exports["search"] = $foreign.search; + exports["reload"] = $foreign.reload; +})(PS["Web.HTML.Location"] = PS["Web.HTML.Location"] || {}); +(function(exports) { + "use strict"; + + exports.document = function (window) { + return function () { + return window.document; + }; + }; + + exports.location = function (window) { + return function () { + return window.location; + }; + }; +})(PS["Web.HTML.Window"] = PS["Web.HTML.Window"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Web.HTML.Window"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_Nullable = PS["Data.Nullable"]; + var Data_Ord = PS["Data.Ord"]; + var Effect = PS["Effect"]; + var Prelude = PS["Prelude"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var Web_Event_EventTarget = PS["Web.Event.EventTarget"]; + var Web_HTML_HTMLDocument = PS["Web.HTML.HTMLDocument"]; + var Web_HTML_History = PS["Web.HTML.History"]; + var Web_HTML_Location = PS["Web.HTML.Location"]; + var Web_HTML_Navigator = PS["Web.HTML.Navigator"]; + var Web_Storage_Storage = PS["Web.Storage.Storage"]; + exports["document"] = $foreign.document; + exports["location"] = $foreign.location; +})(PS["Web.HTML.Window"] = PS["Web.HTML.Window"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Web.HTML"]; + var Effect = PS["Effect"]; + var Web_HTML_HTMLAnchorElement = PS["Web.HTML.HTMLAnchorElement"]; + var Web_HTML_HTMLAreaElement = PS["Web.HTML.HTMLAreaElement"]; + var Web_HTML_HTMLAudioElement = PS["Web.HTML.HTMLAudioElement"]; + var Web_HTML_HTMLBRElement = PS["Web.HTML.HTMLBRElement"]; + var Web_HTML_HTMLBaseElement = PS["Web.HTML.HTMLBaseElement"]; + var Web_HTML_HTMLBodyElement = PS["Web.HTML.HTMLBodyElement"]; + var Web_HTML_HTMLButtonElement = PS["Web.HTML.HTMLButtonElement"]; + var Web_HTML_HTMLCanvasElement = PS["Web.HTML.HTMLCanvasElement"]; + var Web_HTML_HTMLDListElement = PS["Web.HTML.HTMLDListElement"]; + var Web_HTML_HTMLDataElement = PS["Web.HTML.HTMLDataElement"]; + var Web_HTML_HTMLDataListElement = PS["Web.HTML.HTMLDataListElement"]; + var Web_HTML_HTMLDivElement = PS["Web.HTML.HTMLDivElement"]; + var Web_HTML_HTMLDocument = PS["Web.HTML.HTMLDocument"]; + var Web_HTML_HTMLElement = PS["Web.HTML.HTMLElement"]; + var Web_HTML_HTMLEmbedElement = PS["Web.HTML.HTMLEmbedElement"]; + var Web_HTML_HTMLFieldSetElement = PS["Web.HTML.HTMLFieldSetElement"]; + var Web_HTML_HTMLFormElement = PS["Web.HTML.HTMLFormElement"]; + var Web_HTML_HTMLHRElement = PS["Web.HTML.HTMLHRElement"]; + var Web_HTML_HTMLHeadElement = PS["Web.HTML.HTMLHeadElement"]; + var Web_HTML_HTMLHeadingElement = PS["Web.HTML.HTMLHeadingElement"]; + var Web_HTML_HTMLIFrameElement = PS["Web.HTML.HTMLIFrameElement"]; + var Web_HTML_HTMLImageElement = PS["Web.HTML.HTMLImageElement"]; + var Web_HTML_HTMLInputElement = PS["Web.HTML.HTMLInputElement"]; + var Web_HTML_HTMLKeygenElement = PS["Web.HTML.HTMLKeygenElement"]; + var Web_HTML_HTMLLIElement = PS["Web.HTML.HTMLLIElement"]; + var Web_HTML_HTMLLabelElement = PS["Web.HTML.HTMLLabelElement"]; + var Web_HTML_HTMLLegendElement = PS["Web.HTML.HTMLLegendElement"]; + var Web_HTML_HTMLLinkElement = PS["Web.HTML.HTMLLinkElement"]; + var Web_HTML_HTMLMapElement = PS["Web.HTML.HTMLMapElement"]; + var Web_HTML_HTMLMediaElement = PS["Web.HTML.HTMLMediaElement"]; + var Web_HTML_HTMLMetaElement = PS["Web.HTML.HTMLMetaElement"]; + var Web_HTML_HTMLMeterElement = PS["Web.HTML.HTMLMeterElement"]; + var Web_HTML_HTMLModElement = PS["Web.HTML.HTMLModElement"]; + var Web_HTML_HTMLOListElement = PS["Web.HTML.HTMLOListElement"]; + var Web_HTML_HTMLObjectElement = PS["Web.HTML.HTMLObjectElement"]; + var Web_HTML_HTMLOptGroupElement = PS["Web.HTML.HTMLOptGroupElement"]; + var Web_HTML_HTMLOptionElement = PS["Web.HTML.HTMLOptionElement"]; + var Web_HTML_HTMLOutputElement = PS["Web.HTML.HTMLOutputElement"]; + var Web_HTML_HTMLParagraphElement = PS["Web.HTML.HTMLParagraphElement"]; + var Web_HTML_HTMLParamElement = PS["Web.HTML.HTMLParamElement"]; + var Web_HTML_HTMLPreElement = PS["Web.HTML.HTMLPreElement"]; + var Web_HTML_HTMLProgressElement = PS["Web.HTML.HTMLProgressElement"]; + var Web_HTML_HTMLQuoteElement = PS["Web.HTML.HTMLQuoteElement"]; + var Web_HTML_HTMLScriptElement = PS["Web.HTML.HTMLScriptElement"]; + var Web_HTML_HTMLSelectElement = PS["Web.HTML.HTMLSelectElement"]; + var Web_HTML_HTMLSourceElement = PS["Web.HTML.HTMLSourceElement"]; + var Web_HTML_HTMLSpanElement = PS["Web.HTML.HTMLSpanElement"]; + var Web_HTML_HTMLStyleElement = PS["Web.HTML.HTMLStyleElement"]; + var Web_HTML_HTMLTableCaptionElement = PS["Web.HTML.HTMLTableCaptionElement"]; + var Web_HTML_HTMLTableCellElement = PS["Web.HTML.HTMLTableCellElement"]; + var Web_HTML_HTMLTableColElement = PS["Web.HTML.HTMLTableColElement"]; + var Web_HTML_HTMLTableDataCellElement = PS["Web.HTML.HTMLTableDataCellElement"]; + var Web_HTML_HTMLTableElement = PS["Web.HTML.HTMLTableElement"]; + var Web_HTML_HTMLTableHeaderCellElement = PS["Web.HTML.HTMLTableHeaderCellElement"]; + var Web_HTML_HTMLTableRowElement = PS["Web.HTML.HTMLTableRowElement"]; + var Web_HTML_HTMLTableSectionElement = PS["Web.HTML.HTMLTableSectionElement"]; + var Web_HTML_HTMLTemplateElement = PS["Web.HTML.HTMLTemplateElement"]; + var Web_HTML_HTMLTextAreaElement = PS["Web.HTML.HTMLTextAreaElement"]; + var Web_HTML_HTMLTimeElement = PS["Web.HTML.HTMLTimeElement"]; + var Web_HTML_HTMLTitleElement = PS["Web.HTML.HTMLTitleElement"]; + var Web_HTML_HTMLTrackElement = PS["Web.HTML.HTMLTrackElement"]; + var Web_HTML_HTMLUListElement = PS["Web.HTML.HTMLUListElement"]; + var Web_HTML_HTMLVideoElement = PS["Web.HTML.HTMLVideoElement"]; + var Web_HTML_History = PS["Web.HTML.History"]; + var Web_HTML_Location = PS["Web.HTML.Location"]; + var Web_HTML_Navigator = PS["Web.HTML.Navigator"]; + var Web_HTML_Window = PS["Web.HTML.Window"]; + exports["window"] = $foreign.window; +})(PS["Web.HTML"] = PS["Web.HTML"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Globals"]; + var Control_Applicative = PS["Control.Applicative"]; + var Data_Function = PS["Data.Function"]; + var Data_Function_Uncurried = PS["Data.Function.Uncurried"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_Nullable = PS["Data.Nullable"]; + var Data_Tuple = PS["Data.Tuple"]; + var Effect = PS["Effect"]; + var Model = PS["Model"]; + var Prelude = PS["Prelude"]; + var Web_DOM = PS["Web.DOM"]; + var Web_HTML = PS["Web.HTML"]; + var Web_XHR_FormData = PS["Web.XHR.FormData"]; + var RawHTML = function (x) { + return x; + }; + var mmoment8601 = function (s) { + return $foreign["_mmoment8601"](Data_Maybe.Just.create, Data_Maybe.Nothing.value, Data_Tuple.Tuple.create, s); + }; + var closeWindow = function (win) { + return Control_Applicative.pure(Effect.applicativeEffect)($foreign["_closeWindow"](win)); + }; + var app$prime = function (v) { + return $foreign["_app"](); + }; + exports["app'"] = app$prime; + exports["mmoment8601"] = mmoment8601; + exports["closeWindow"] = closeWindow; + exports["RawHTML"] = RawHTML; +})(PS["Globals"] = PS["Globals"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Affjax = PS["Affjax"]; + var Affjax_RequestBody = PS["Affjax.RequestBody"]; + var Affjax_RequestHeader = PS["Affjax.RequestHeader"]; + var Affjax_ResponseFormat = PS["Affjax.ResponseFormat"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Argonaut = PS["Data.Argonaut"]; + var Data_Array = PS["Data.Array"]; + var Data_Either = PS["Data.Either"]; + var Data_FormURLEncoded = PS["Data.FormURLEncoded"]; + var Data_Functor = PS["Data.Functor"]; + var Data_HTTP_Method = PS["Data.HTTP.Method"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_MediaType_Common = PS["Data.MediaType.Common"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Show = PS["Data.Show"]; + var Data_Unit = PS["Data.Unit"]; + var Effect = PS["Effect"]; + var Effect_Aff = PS["Effect.Aff"]; + var Effect_Class = PS["Effect.Class"]; + var Globals = PS["Globals"]; + var Model = PS["Model"]; + var Prelude = PS["Prelude"]; + var Simple_JSON = PS["Simple.JSON"]; + var Web_HTML = PS["Web.HTML"]; + var Web_HTML_Location = PS["Web.HTML.Location"]; + var Web_HTML_Window = PS["Web.HTML.Window"]; + var Star = (function () { + function Star() { + + }; + Star.value = new Star(); + return Star; + })(); + var UnStar = (function () { + function UnStar() { + + }; + UnStar.value = new UnStar(); + return UnStar; + })(); + var showStar = new Data_Show.Show(function (v) { + if (v instanceof Star) { + return "star"; + }; + if (v instanceof UnStar) { + return "unstar"; + }; + throw new Error("Failed pattern match at App (line 28, column 1 - line 28, column 37): " + [ v.constructor.name ]); + }); + var fetchUrl = function (method) { + return function (url) { + return function (headers) { + return function (content) { + return function (rt) { + var app = Globals["app'"](Data_Unit.unit); + return Affjax.request({ + method: new Data_Either.Left(method), + url: url, + headers: Data_Array.cons(new Affjax_RequestHeader.RequestHeader(app.csrfHeaderName, app.csrfToken))(headers), + content: content, + username: Affjax.defaultRequest.username, + password: Affjax.defaultRequest.password, + withCredentials: Affjax.defaultRequest.withCredentials, + responseFormat: rt + }); + }; + }; + }; + }; + }; + var logout = function (u) { + var app = Globals["app'"](u); + return Control_Bind.discard(Control_Bind.discardUnit)(Effect_Aff.bindAff)(Data_Functor["void"](Effect_Aff.functorAff)(fetchUrl(Data_HTTP_Method.POST.value)(app.authRlogoutR)([ ])(Data_Maybe.Nothing.value)(Affjax_ResponseFormat.ignore)))(function () { + return Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Control_Bind.bind(Effect.bindEffect)(Control_Bind.bind(Effect.bindEffect)(Web_HTML.window)(Web_HTML_Window.location))(Web_HTML_Location.reload)); + }); + }; + var fetchPath = function (method) { + return function (path) { + return function (headers) { + return function (content) { + return function (rt) { + return fetchUrl(method)((Globals["app'"](Data_Unit.unit)).homeR + path)(headers)(content)(rt); + }; + }; + }; + }; + }; + var fetchUrlEnc = function (method) { + return function (path) { + return function (content) { + return function (rt) { + return fetchPath(method)(path)([ new Affjax_RequestHeader.ContentType(Data_MediaType_Common.applicationFormURLEncoded) ])(Data_Functor.map(Data_Maybe.functorMaybe)(Affjax_RequestBody.FormURLEncoded.create)(content))(rt); + }; + }; + }; + }; + var markRead = function (bid) { + var path = "bm/" + (Data_Show.show(Data_Show.showInt)(bid) + "/read"); + return fetchUrlEnc(Data_HTTP_Method.POST.value)(path)(Data_Maybe.Nothing.value)(Affjax_ResponseFormat.ignore); + }; + var toggleStar = function (bid) { + return function (action) { + var path = "bm/" + (Data_Show.show(Data_Show.showInt)(bid) + ("/" + Data_Show.show(showStar)(action))); + return Data_Functor["void"](Effect_Aff.functorAff)(fetchUrlEnc(Data_HTTP_Method.POST.value)(path)(Data_Maybe.Nothing.value)(Affjax_ResponseFormat.ignore)); + }; + }; + var fetchJson = function (dictWriteForeign) { + return function (method) { + return function (path) { + return function (content) { + return function (rt) { + return fetchPath(method)(path)([ new Affjax_RequestHeader.ContentType(Data_MediaType_Common.applicationJSON) ])(Data_Functor.map(Data_Maybe.functorMaybe)(function ($4) { + return Affjax_RequestBody.string(Simple_JSON.writeJSON(dictWriteForeign)($4)); + })(content))(rt); + }; + }; + }; + }; + }; + var editNote = function (bm) { + return fetchJson(Model.note_wfI)(Data_HTTP_Method.POST.value)("api/note/add")(new Data_Maybe.Just(bm))(Affjax_ResponseFormat.json); + }; + var editBookmark = function (bm) { + return fetchJson(Model.bookmark_wfI)(Data_HTTP_Method.POST.value)("api/add")(new Data_Maybe.Just(bm))(Affjax_ResponseFormat.ignore); + }; + var editAccountSettings = function (us) { + return fetchJson(Model.usersettings_wfI)(Data_HTTP_Method.POST.value)("api/accountSettings")(new Data_Maybe.Just(us))(Affjax_ResponseFormat.ignore); + }; + var destroyNote = function (nid) { + return fetchUrlEnc(Data_HTTP_Method.DELETE.value)("api/note/" + Data_Show.show(Data_Show.showInt)(nid))(Data_Maybe.Nothing.value)(Affjax_ResponseFormat.ignore); + }; + var destroy = function (bid) { + return fetchUrlEnc(Data_HTTP_Method.DELETE.value)("bm/" + Data_Show.show(Data_Show.showInt)(bid))(Data_Maybe.Nothing.value)(Affjax_ResponseFormat.ignore); + }; + exports["Star"] = Star; + exports["UnStar"] = UnStar; + exports["toggleStar"] = toggleStar; + exports["destroy"] = destroy; + exports["markRead"] = markRead; + exports["editBookmark"] = editBookmark; + exports["editNote"] = editNote; + exports["destroyNote"] = destroyNote; + exports["editAccountSettings"] = editAccountSettings; + exports["logout"] = logout; + exports["fetchJson"] = fetchJson; + exports["fetchUrlEnc"] = fetchUrlEnc; + exports["fetchPath"] = fetchPath; + exports["fetchUrl"] = fetchUrl; + exports["showStar"] = showStar; +})(PS["App"] = PS["App"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var InputButton = (function () { + function InputButton() { + + }; + InputButton.value = new InputButton(); + return InputButton; + })(); + var InputCheckbox = (function () { + function InputCheckbox() { + + }; + InputCheckbox.value = new InputCheckbox(); + return InputCheckbox; + })(); + var InputColor = (function () { + function InputColor() { + + }; + InputColor.value = new InputColor(); + return InputColor; + })(); + var InputDate = (function () { + function InputDate() { + + }; + InputDate.value = new InputDate(); + return InputDate; + })(); + var InputDatetimeLocal = (function () { + function InputDatetimeLocal() { + + }; + InputDatetimeLocal.value = new InputDatetimeLocal(); + return InputDatetimeLocal; + })(); + var InputEmail = (function () { + function InputEmail() { + + }; + InputEmail.value = new InputEmail(); + return InputEmail; + })(); + var InputFile = (function () { + function InputFile() { + + }; + InputFile.value = new InputFile(); + return InputFile; + })(); + var InputHidden = (function () { + function InputHidden() { + + }; + InputHidden.value = new InputHidden(); + return InputHidden; + })(); + var InputImage = (function () { + function InputImage() { + + }; + InputImage.value = new InputImage(); + return InputImage; + })(); + var InputMonth = (function () { + function InputMonth() { + + }; + InputMonth.value = new InputMonth(); + return InputMonth; + })(); + var InputNumber = (function () { + function InputNumber() { + + }; + InputNumber.value = new InputNumber(); + return InputNumber; + })(); + var InputPassword = (function () { + function InputPassword() { + + }; + InputPassword.value = new InputPassword(); + return InputPassword; + })(); + var InputRadio = (function () { + function InputRadio() { + + }; + InputRadio.value = new InputRadio(); + return InputRadio; + })(); + var InputRange = (function () { + function InputRange() { + + }; + InputRange.value = new InputRange(); + return InputRange; + })(); + var InputReset = (function () { + function InputReset() { + + }; + InputReset.value = new InputReset(); + return InputReset; + })(); + var InputSearch = (function () { + function InputSearch() { + + }; + InputSearch.value = new InputSearch(); + return InputSearch; + })(); + var InputSubmit = (function () { + function InputSubmit() { + + }; + InputSubmit.value = new InputSubmit(); + return InputSubmit; + })(); + var InputTel = (function () { + function InputTel() { + + }; + InputTel.value = new InputTel(); + return InputTel; + })(); + var InputText = (function () { + function InputText() { + + }; + InputText.value = new InputText(); + return InputText; + })(); + var InputTime = (function () { + function InputTime() { + + }; + InputTime.value = new InputTime(); + return InputTime; + })(); + var InputUrl = (function () { + function InputUrl() { + + }; + InputUrl.value = new InputUrl(); + return InputUrl; + })(); + var InputWeek = (function () { + function InputWeek() { + + }; + InputWeek.value = new InputWeek(); + return InputWeek; + })(); + var renderInputType = function (v) { + if (v instanceof InputButton) { + return "button"; + }; + if (v instanceof InputCheckbox) { + return "checkbox"; + }; + if (v instanceof InputColor) { + return "color"; + }; + if (v instanceof InputDate) { + return "date"; + }; + if (v instanceof InputDatetimeLocal) { + return "datetime-local"; + }; + if (v instanceof InputEmail) { + return "email"; + }; + if (v instanceof InputFile) { + return "file"; + }; + if (v instanceof InputHidden) { + return "hidden"; + }; + if (v instanceof InputImage) { + return "image"; + }; + if (v instanceof InputMonth) { + return "month"; + }; + if (v instanceof InputNumber) { + return "number"; + }; + if (v instanceof InputPassword) { + return "password"; + }; + if (v instanceof InputRadio) { + return "radio"; + }; + if (v instanceof InputRange) { + return "range"; + }; + if (v instanceof InputReset) { + return "reset"; + }; + if (v instanceof InputSearch) { + return "search"; + }; + if (v instanceof InputSubmit) { + return "submit"; + }; + if (v instanceof InputTel) { + return "tel"; + }; + if (v instanceof InputText) { + return "text"; + }; + if (v instanceof InputTime) { + return "time"; + }; + if (v instanceof InputUrl) { + return "url"; + }; + if (v instanceof InputWeek) { + return "week"; + }; + throw new Error("Failed pattern match at DOM.HTML.Indexed.InputType (line 28, column 19 - line 50, column 16): " + [ v.constructor.name ]); + }; + exports["InputButton"] = InputButton; + exports["InputCheckbox"] = InputCheckbox; + exports["InputColor"] = InputColor; + exports["InputDate"] = InputDate; + exports["InputDatetimeLocal"] = InputDatetimeLocal; + exports["InputEmail"] = InputEmail; + exports["InputFile"] = InputFile; + exports["InputHidden"] = InputHidden; + exports["InputImage"] = InputImage; + exports["InputMonth"] = InputMonth; + exports["InputNumber"] = InputNumber; + exports["InputPassword"] = InputPassword; + exports["InputRadio"] = InputRadio; + exports["InputRange"] = InputRange; + exports["InputReset"] = InputReset; + exports["InputSearch"] = InputSearch; + exports["InputSubmit"] = InputSubmit; + exports["InputTel"] = InputTel; + exports["InputText"] = InputText; + exports["InputTime"] = InputTime; + exports["InputUrl"] = InputUrl; + exports["InputWeek"] = InputWeek; + exports["renderInputType"] = renderInputType; +})(PS["DOM.HTML.Indexed.InputType"] = PS["DOM.HTML.Indexed.InputType"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Category = PS["Control.Category"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Newtype = PS["Data.Newtype"]; + var Prelude = PS["Prelude"]; + var Profunctor = function (dimap) { + this.dimap = dimap; + }; + var profunctorFn = new Profunctor(function (a2b) { + return function (c2d) { + return function (b2c) { + return function ($9) { + return c2d(b2c(a2b($9))); + }; + }; + }; + }); + var dimap = function (dict) { + return dict.dimap; + }; + var rmap = function (dictProfunctor) { + return function (b2c) { + return dimap(dictProfunctor)(Control_Category.identity(Control_Category.categoryFn))(b2c); + }; + }; + exports["dimap"] = dimap; + exports["Profunctor"] = Profunctor; + exports["rmap"] = rmap; + exports["profunctorFn"] = profunctorFn; +})(PS["Data.Profunctor"] = PS["Data.Profunctor"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Category = PS["Control.Category"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Profunctor = PS["Data.Profunctor"]; + var Data_Tuple = PS["Data.Tuple"]; + var Prelude = PS["Prelude"]; + var Strong = function (Profunctor0, first, second) { + this.Profunctor0 = Profunctor0; + this.first = first; + this.second = second; + }; + var strongFn = new Strong(function () { + return Data_Profunctor.profunctorFn; + }, function (a2b) { + return function (v) { + return new Data_Tuple.Tuple(a2b(v.value0), v.value1); + }; + }, Data_Functor.map(Data_Tuple.functorTuple)); + var second = function (dict) { + return dict.second; + }; + var first = function (dict) { + return dict.first; + }; + exports["first"] = first; + exports["second"] = second; + exports["Strong"] = Strong; + exports["strongFn"] = strongFn; +})(PS["Data.Profunctor.Strong"] = PS["Data.Profunctor.Strong"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Const = PS["Data.Const"]; + var Data_Either = PS["Data.Either"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Lens_Internal_Wander = PS["Data.Lens.Internal.Wander"]; + var Data_Monoid = PS["Data.Monoid"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_Profunctor = PS["Data.Profunctor"]; + var Data_Profunctor_Choice = PS["Data.Profunctor.Choice"]; + var Data_Profunctor_Cochoice = PS["Data.Profunctor.Cochoice"]; + var Data_Profunctor_Strong = PS["Data.Profunctor.Strong"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Tuple = PS["Data.Tuple"]; + var Prelude = PS["Prelude"]; + var Forget = function (x) { + return x; + }; + var profunctorForget = new Data_Profunctor.Profunctor(function (f) { + return function (v) { + return function (v1) { + return function ($27) { + return v1(f($27)); + }; + }; + }; + }); + var strongForget = new Data_Profunctor_Strong.Strong(function () { + return profunctorForget; + }, function (v) { + return function ($28) { + return v(Data_Tuple.fst($28)); + }; + }, function (v) { + return function ($29) { + return v(Data_Tuple.snd($29)); + }; + }); + var newtypeForget = new Data_Newtype.Newtype(function (n) { + return n; + }, Forget); + exports["Forget"] = Forget; + exports["newtypeForget"] = newtypeForget; + exports["profunctorForget"] = profunctorForget; + exports["strongForget"] = strongForget; +})(PS["Data.Lens.Internal.Forget"] = PS["Data.Lens.Internal.Forget"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Category = PS["Control.Category"]; + var Control_Monad_State_Class = PS["Control.Monad.State.Class"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Function = PS["Data.Function"]; + var Data_Lens_Internal_Forget = PS["Data.Lens.Internal.Forget"]; + var Data_Lens_Internal_Indexed = PS["Data.Lens.Internal.Indexed"]; + var Data_Lens_Types = PS["Data.Lens.Types"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_Profunctor_Strong = PS["Data.Profunctor.Strong"]; + var Data_Tuple = PS["Data.Tuple"]; + var Prelude = PS["Prelude"]; + var view = function (l) { + return Data_Newtype.unwrap(Data_Lens_Internal_Forget.newtypeForget)(l(Control_Category.identity(Control_Category.categoryFn))); + }; + var viewOn = function (s) { + return function (l) { + return view(l)(s); + }; + }; + var use = function (dictMonadState) { + return function (p) { + return Control_Monad_State_Class.gets(dictMonadState)(function (v) { + return viewOn(v)(p); + }); + }; + }; + exports["viewOn"] = viewOn; + exports["view"] = view; + exports["use"] = use; +})(PS["Data.Lens.Getter"] = PS["Data.Lens.Getter"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Category = PS["Control.Category"]; + var Data_Lens_Internal_Indexed = PS["Data.Lens.Internal.Indexed"]; + var Data_Lens_Internal_Shop = PS["Data.Lens.Internal.Shop"]; + var Data_Lens_Types = PS["Data.Lens.Types"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_Profunctor = PS["Data.Profunctor"]; + var Data_Profunctor_Strong = PS["Data.Profunctor.Strong"]; + var Data_Tuple = PS["Data.Tuple"]; + var Prelude = PS["Prelude"]; + var lens$prime = function (to) { + return function (dictStrong) { + return function (pab) { + return Data_Profunctor.dimap(dictStrong.Profunctor0())(to)(function (v) { + return v.value1(v.value0); + })(Data_Profunctor_Strong.first(dictStrong)(pab)); + }; + }; + }; + var lens = function (get) { + return function (set) { + return function (dictStrong) { + return lens$prime(function (s) { + return new Data_Tuple.Tuple(get(s), function (b) { + return set(s)(b); + }); + })(dictStrong); + }; + }; + }; + exports["lens"] = lens; +})(PS["Data.Lens.Lens"] = PS["Data.Lens.Lens"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Monad_State_Class = PS["Control.Monad.State.Class"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_EuclideanRing = PS["Data.EuclideanRing"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Lens_Internal_Indexed = PS["Data.Lens.Internal.Indexed"]; + var Data_Lens_Types = PS["Data.Lens.Types"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Ring = PS["Data.Ring"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Tuple = PS["Data.Tuple"]; + var Prelude = PS["Prelude"]; + var over = function (l) { + return l; + }; + var set = function (l) { + return function (b) { + return over(l)(Data_Function["const"](b)); + }; + }; + var modifying = function (dictMonadState) { + return function (p) { + return function (f) { + return Data_Functor["void"]((((dictMonadState.Monad0()).Bind1()).Apply0()).Functor0())(Control_Monad_State_Class.modify(dictMonadState)(over(p)(f))); + }; + }; + }; + var assign = function (dictMonadState) { + return function (p) { + return function (b) { + return Data_Functor["void"]((((dictMonadState.Monad0()).Bind1()).Apply0()).Functor0())(Control_Monad_State_Class.modify(dictMonadState)(set(p)(b))); + }; + }; + }; + exports["over"] = over; + exports["set"] = set; + exports["assign"] = assign; + exports["modifying"] = modifying; +})(PS["Data.Lens.Setter"] = PS["Data.Lens.Setter"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Category = PS["Control.Category"]; + var Control_Monad_Cont_Trans = PS["Control.Monad.Cont.Trans"]; + var Control_Monad_Except_Trans = PS["Control.Monad.Except.Trans"]; + var Control_Monad_List_Trans = PS["Control.Monad.List.Trans"]; + var Control_Monad_Maybe_Trans = PS["Control.Monad.Maybe.Trans"]; + var Control_Monad_RWS_Trans = PS["Control.Monad.RWS.Trans"]; + var Control_Monad_Reader_Trans = PS["Control.Monad.Reader.Trans"]; + var Control_Monad_State_Trans = PS["Control.Monad.State.Trans"]; + var Control_Monad_Trans_Class = PS["Control.Monad.Trans.Class"]; + var Control_Monad_Writer_Trans = PS["Control.Monad.Writer.Trans"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Effect_Aff = PS["Effect.Aff"]; + var Effect_Class = PS["Effect.Class"]; + var Prelude = PS["Prelude"]; + var MonadAff = function (MonadEffect0, liftAff) { + this.MonadEffect0 = MonadEffect0; + this.liftAff = liftAff; + }; + var monadAffAff = new MonadAff(function () { + return Effect_Aff.monadEffectAff; + }, Control_Category.identity(Control_Category.categoryFn)); + var liftAff = function (dict) { + return dict.liftAff; + }; + exports["liftAff"] = liftAff; + exports["MonadAff"] = MonadAff; + exports["monadAffAff"] = monadAffAff; +})(PS["Effect.Aff.Class"] = PS["Effect.Aff.Class"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Data_Eq = PS["Data.Eq"]; + var Data_Ord = PS["Data.Ord"]; + var Prelude = PS["Prelude"]; + var OrdBox = (function () { + function OrdBox(value0, value1, value2) { + this.value0 = value0; + this.value1 = value1; + this.value2 = value2; + }; + OrdBox.create = function (value0) { + return function (value1) { + return function (value2) { + return new OrdBox(value0, value1, value2); + }; + }; + }; + return OrdBox; + })(); + var unOrdBox = function (v) { + return v.value2; + }; + var mkOrdBox = function (dictOrd) { + return OrdBox.create(Data_Eq.eq(dictOrd.Eq0()))(Data_Ord.compare(dictOrd)); + }; + var eqOrdBox = new Data_Eq.Eq(function (v) { + return function (v1) { + return v.value0(v.value2)(v1.value2); + }; + }); + var ordOrdBox = new Data_Ord.Ord(function () { + return eqOrdBox; + }, function (v) { + return function (v1) { + return v.value1(v.value2)(v1.value2); + }; + }); + exports["mkOrdBox"] = mkOrdBox; + exports["unOrdBox"] = unOrdBox; + exports["eqOrdBox"] = eqOrdBox; + exports["ordOrdBox"] = ordOrdBox; +})(PS["Halogen.Data.OrdBox"] = PS["Halogen.Data.OrdBox"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var ButtonButton = (function () { + function ButtonButton() { + + }; + ButtonButton.value = new ButtonButton(); + return ButtonButton; + })(); + var ButtonSubmit = (function () { + function ButtonSubmit() { + + }; + ButtonSubmit.value = new ButtonSubmit(); + return ButtonSubmit; + })(); + var ButtonReset = (function () { + function ButtonReset() { + + }; + ButtonReset.value = new ButtonReset(); + return ButtonReset; + })(); + var renderButtonType = function (v) { + if (v instanceof ButtonButton) { + return "button"; + }; + if (v instanceof ButtonSubmit) { + return "submit"; + }; + if (v instanceof ButtonReset) { + return "reset"; + }; + throw new Error("Failed pattern match at DOM.HTML.Indexed.ButtonType (line 9, column 20 - line 12, column 18): " + [ v.constructor.name ]); + }; + exports["ButtonButton"] = ButtonButton; + exports["ButtonSubmit"] = ButtonSubmit; + exports["ButtonReset"] = ButtonReset; + exports["renderButtonType"] = renderButtonType; +})(PS["DOM.HTML.Indexed.ButtonType"] = PS["DOM.HTML.Indexed.ButtonType"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var On = (function () { + function On() { + + }; + On.value = new On(); + return On; + })(); + var Off = (function () { + function Off() { + + }; + Off.value = new Off(); + return Off; + })(); + var renderOnOff = function (v) { + if (v instanceof On) { + return "on"; + }; + if (v instanceof Off) { + return "off"; + }; + throw new Error("Failed pattern match at DOM.HTML.Indexed.OnOff (line 8, column 15 - line 10, column 10): " + [ v.constructor.name ]); + }; + exports["On"] = On; + exports["Off"] = Off; + exports["renderOnOff"] = renderOnOff; +})(PS["DOM.HTML.Indexed.OnOff"] = PS["DOM.HTML.Indexed.OnOff"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Data_Bifunctor = PS["Data.Bifunctor"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_Ord = PS["Data.Ord"]; + var Prelude = PS["Prelude"]; + var Web_DOM = PS["Web.DOM"]; + var RefUpdate = (function () { + function RefUpdate(value0, value1, value2) { + this.value0 = value0; + this.value1 = value1; + this.value2 = value2; + }; + RefUpdate.create = function (value0) { + return function (value1) { + return function (value2) { + return new RefUpdate(value0, value1, value2); + }; + }; + }; + return RefUpdate; + })(); + var Query = (function () { + function Query(value0) { + this.value0 = value0; + }; + Query.create = function (value0) { + return new Query(value0); + }; + return Query; + })(); + var bifunctorInputF = new Data_Bifunctor.Bifunctor(function (f) { + return function (g) { + return function (v) { + if (v instanceof RefUpdate) { + return new RefUpdate(v.value0, v.value1, f(v.value2)); + }; + if (v instanceof Query) { + return new Query(g(v.value0)); + }; + throw new Error("Failed pattern match at Halogen.Query.InputF (line 21, column 15 - line 23, column 27): " + [ v.constructor.name ]); + }; + }; + }); + var functorInputF = new Data_Functor.Functor(Data_Bifunctor.rmap(bifunctorInputF)); + exports["RefUpdate"] = RefUpdate; + exports["Query"] = Query; + exports["bifunctorInputF"] = bifunctorInputF; + exports["functorInputF"] = functorInputF; +})(PS["Halogen.Query.InputF"] = PS["Halogen.Query.InputF"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Effect = PS["Effect"]; + var Effect_Uncurried = PS["Effect.Uncurried"]; + var Prelude = PS["Prelude"]; + var Step = (function () { + function Step(value0, value1, value2) { + this.value0 = value0; + this.value1 = value1; + this.value2 = value2; + }; + Step.create = function (value0) { + return function (value1) { + return function (value2) { + return new Step(value0, value1, value2); + }; + }; + }; + return Step; + })(); + var step = function (v) { + return v.value1; + }; + var halt = function (v) { + return v.value2; + }; + var extract = function (v) { + return v.value0; + }; + exports["Step"] = Step; + exports["extract"] = extract; + exports["step"] = step; + exports["halt"] = halt; +})(PS["Halogen.VDom.Machine"] = PS["Halogen.VDom.Machine"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Category = PS["Control.Category"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Bifunctor = PS["Data.Bifunctor"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Functor = PS["Data.Functor"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ordering = PS["Data.Ordering"]; + var Data_Tuple = PS["Data.Tuple"]; + var Prelude = PS["Prelude"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var ElemSpec = (function () { + function ElemSpec(value0, value1, value2) { + this.value0 = value0; + this.value1 = value1; + this.value2 = value2; + }; + ElemSpec.create = function (value0) { + return function (value1) { + return function (value2) { + return new ElemSpec(value0, value1, value2); + }; + }; + }; + return ElemSpec; + })(); + var Text = (function () { + function Text(value0) { + this.value0 = value0; + }; + Text.create = function (value0) { + return new Text(value0); + }; + return Text; + })(); + var Elem = (function () { + function Elem(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + Elem.create = function (value0) { + return function (value1) { + return new Elem(value0, value1); + }; + }; + return Elem; + })(); + var Keyed = (function () { + function Keyed(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + Keyed.create = function (value0) { + return function (value1) { + return new Keyed(value0, value1); + }; + }; + return Keyed; + })(); + var Widget = (function () { + function Widget(value0) { + this.value0 = value0; + }; + Widget.create = function (value0) { + return new Widget(value0); + }; + return Widget; + })(); + var Grafted = (function () { + function Grafted(value0) { + this.value0 = value0; + }; + Grafted.create = function (value0) { + return new Grafted(value0); + }; + return Grafted; + })(); + var Graft = (function () { + function Graft(value0, value1, value2) { + this.value0 = value0; + this.value1 = value1; + this.value2 = value2; + }; + Graft.create = function (value0) { + return function (value1) { + return function (value2) { + return new Graft(value0, value1, value2); + }; + }; + }; + return Graft; + })(); + var unGraft = function (f) { + return function ($90) { + return f($90); + }; + }; + var graft = Unsafe_Coerce.unsafeCoerce; + var functorElemSpec = new Data_Functor.Functor(function (f) { + return function (m) { + return new ElemSpec(m.value0, m.value1, f(m.value2)); + }; + }); + var bifunctorGraft = new Data_Bifunctor.Bifunctor(function (f) { + return function (g) { + return unGraft(function (v) { + return graft(new Graft(function ($92) { + return f(v.value0($92)); + }, function ($93) { + return g(v.value1($93)); + }, v.value2)); + }); + }; + }); + var bifunctorVDom = new Data_Bifunctor.Bifunctor(function (f) { + return function (g) { + return function (v) { + if (v instanceof Text) { + return new Text(v.value0); + }; + if (v instanceof Grafted) { + return new Grafted(Data_Bifunctor.bimap(bifunctorGraft)(f)(g)(v.value0)); + }; + return new Grafted(graft(new Graft(f, g, v))); + }; + }; + }); + var runGraft = unGraft(function (v) { + var go = function (v2) { + if (v2 instanceof Text) { + return new Text(v2.value0); + }; + if (v2 instanceof Elem) { + return new Elem(Data_Functor.map(functorElemSpec)(v.value0)(v2.value0), Data_Functor.map(Data_Functor.functorArray)(go)(v2.value1)); + }; + if (v2 instanceof Keyed) { + return new Keyed(Data_Functor.map(functorElemSpec)(v.value0)(v2.value0), Data_Functor.map(Data_Functor.functorArray)(Data_Functor.map(Data_Tuple.functorTuple)(go))(v2.value1)); + }; + if (v2 instanceof Widget) { + return new Widget(v.value1(v2.value0)); + }; + if (v2 instanceof Grafted) { + return new Grafted(Data_Bifunctor.bimap(bifunctorGraft)(v.value0)(v.value1)(v2.value0)); + }; + throw new Error("Failed pattern match at Halogen.VDom.Types (line 74, column 7 - line 74, column 27): " + [ v2.constructor.name ]); + }; + return go(v.value2); + }); + exports["Text"] = Text; + exports["Elem"] = Elem; + exports["Keyed"] = Keyed; + exports["Widget"] = Widget; + exports["Grafted"] = Grafted; + exports["Graft"] = Graft; + exports["graft"] = graft; + exports["unGraft"] = unGraft; + exports["runGraft"] = runGraft; + exports["ElemSpec"] = ElemSpec; + exports["bifunctorVDom"] = bifunctorVDom; + exports["bifunctorGraft"] = bifunctorGraft; + exports["functorElemSpec"] = functorElemSpec; +})(PS["Halogen.VDom.Types"] = PS["Halogen.VDom.Types"] || {}); +(function(exports) { + "use strict"; + + exports.unsafeGetAny = function (key, obj) { + return obj[key]; + }; + + exports.unsafeHasAny = function (key, obj) { + return obj.hasOwnProperty(key); + }; + + exports.unsafeSetAny = function (key, val, obj) { + obj[key] = val; + }; + + exports.forE = function (a, f) { + var b = []; + for (var i = 0; i < a.length; i++) { + b.push(f(i, a[i])); + } + return b; + }; + + exports.forInE = function (o, f) { + var ks = Object.keys(o); + for (var i = 0; i < ks.length; i++) { + var k = ks[i]; + f(k, o[k]); + } + }; + + exports.diffWithIxE = function (a1, a2, f1, f2, f3) { + var a3 = []; + var l1 = a1.length; + var l2 = a2.length; + var i = 0; + while (1) { + if (i < l1) { + if (i < l2) { + a3.push(f1(i, a1[i], a2[i])); + } else { + f2(i, a1[i]); + } + } else if (i < l2) { + a3.push(f3(i, a2[i])); + } else { + break; + } + i++; + } + return a3; + }; + + exports.strMapWithIxE = function (as, fk, f) { + var o = {}; + for (var i = 0; i < as.length; i++) { + var a = as[i]; + var k = fk(a); + o[k] = f(k, i, a); + } + return o; + }; + + exports.diffWithKeyAndIxE = function (o1, as, fk, f1, f2, f3) { + var o2 = {}; + for (var i = 0; i < as.length; i++) { + var a = as[i]; + var k = fk(a); + if (o1.hasOwnProperty(k)) { + o2[k] = f1(k, i, o1[k], a); + } else { + o2[k] = f3(k, i, a); + } + } + for (var k in o1) { + if (k in o2) { + continue; + } + f2(k, o1[k]); + } + return o2; + }; + + exports.refEq = function (a, b) { + return a === b; + }; + + exports.createTextNode = function (s, doc) { + return doc.createTextNode(s); + }; + + exports.setTextContent = function (s, n) { + n.textContent = s; + }; + + exports.createElement = function (ns, name, doc) { + if (ns != null) { + return doc.createElementNS(ns, name); + } else { + return doc.createElement(name) + } + }; + + exports.insertChildIx = function (i, a, b) { + var n = b.childNodes.item(i) || null; + if (n !== a) { + b.insertBefore(a, n); + } + }; + + exports.removeChild = function (a, b) { + if (b && a.parentNode === b) { + b.removeChild(a); + } + }; + + exports.parentNode = function (a) { + return a.parentNode; + }; + + exports.setAttribute = function (ns, attr, val, el) { + if (ns != null) { + el.setAttributeNS(ns, attr, val); + } else { + el.setAttribute(attr, val); + } + }; + + exports.removeAttribute = function (ns, attr, el) { + if (ns != null) { + el.removeAttributeNS(ns, attr); + } else { + el.removeAttribute(attr); + } + }; + + exports.addEventListener = function (ev, listener, el) { + el.addEventListener(ev, listener, false); + }; + + exports.removeEventListener = function (ev, listener, el) { + el.removeEventListener(ev, listener, false); + }; + + exports.jsUndefined = void 0; +})(PS["Halogen.VDom.Util"] = PS["Halogen.VDom.Util"] || {}); +(function(exports) { + "use strict"; + + var getEffProp = function (name) { + return function (node) { + return function () { + return node[name]; + }; + }; + }; + + exports._parentNode = getEffProp("parentNode"); + + exports._nextSibling = getEffProp("nextSibling"); + + exports.insertBefore = function (node1) { + return function (node2) { + return function (parent) { + return function () { + return parent.insertBefore(node1, node2); + }; + }; + }; + }; + + exports.appendChild = function (node) { + return function (parent) { + return function () { + return parent.appendChild(node); + }; + }; + }; + + exports.removeChild = function (node) { + return function (parent) { + return function () { + return parent.removeChild(node); + }; + }; + }; +})(PS["Web.DOM.Node"] = PS["Web.DOM.Node"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Web.DOM.Node"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Enum = PS["Data.Enum"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Nullable = PS["Data.Nullable"]; + var Effect = PS["Effect"]; + var Prelude = PS["Prelude"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var Web_DOM_Document = PS["Web.DOM.Document"]; + var Web_DOM_Element = PS["Web.DOM.Element"]; + var Web_DOM_Internal_Types = PS["Web.DOM.Internal.Types"]; + var Web_DOM_NodeType = PS["Web.DOM.NodeType"]; + var Web_Event_EventTarget = PS["Web.Event.EventTarget"]; + var Web_Internal_FFI = PS["Web.Internal.FFI"]; + var parentNode = function ($2) { + return Data_Functor.map(Effect.functorEffect)(Data_Nullable.toMaybe)($foreign["_parentNode"]($2)); + }; + var nextSibling = function ($6) { + return Data_Functor.map(Effect.functorEffect)(Data_Nullable.toMaybe)($foreign["_nextSibling"]($6)); + }; + exports["parentNode"] = parentNode; + exports["nextSibling"] = nextSibling; + exports["insertBefore"] = $foreign.insertBefore; + exports["appendChild"] = $foreign.appendChild; + exports["removeChild"] = $foreign.removeChild; +})(PS["Web.DOM.Node"] = PS["Web.DOM.Node"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Halogen.VDom.Util"]; + var Control_Applicative = PS["Control.Applicative"]; + var Data_Function_Uncurried = PS["Data.Function.Uncurried"]; + var Data_Nullable = PS["Data.Nullable"]; + var Data_Unit = PS["Data.Unit"]; + var Effect = PS["Effect"]; + var Effect_Uncurried = PS["Effect.Uncurried"]; + var Foreign_Object = PS["Foreign.Object"]; + var Foreign_Object_ST = PS["Foreign.Object.ST"]; + var Halogen_VDom_Types = PS["Halogen.VDom.Types"]; + var Prelude = PS["Prelude"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var Web_DOM_Document = PS["Web.DOM.Document"]; + var Web_DOM_Element = PS["Web.DOM.Element"]; + var Web_DOM_Node = PS["Web.DOM.Node"]; + var Web_Event_EventTarget = PS["Web.Event.EventTarget"]; + var unsafeLookup = $foreign.unsafeGetAny; + var unsafeFreeze = Unsafe_Coerce.unsafeCoerce; + var pokeMutMap = $foreign.unsafeSetAny; + var newMutMap = Foreign_Object_ST["new"]; + var effectUnit = Control_Applicative.pure(Effect.applicativeEffect)(Data_Unit.unit); + exports["effectUnit"] = effectUnit; + exports["newMutMap"] = newMutMap; + exports["pokeMutMap"] = pokeMutMap; + exports["unsafeFreeze"] = unsafeFreeze; + exports["unsafeLookup"] = unsafeLookup; + exports["unsafeGetAny"] = $foreign.unsafeGetAny; + exports["unsafeHasAny"] = $foreign.unsafeHasAny; + exports["unsafeSetAny"] = $foreign.unsafeSetAny; + exports["forE"] = $foreign.forE; + exports["forInE"] = $foreign.forInE; + exports["diffWithIxE"] = $foreign.diffWithIxE; + exports["diffWithKeyAndIxE"] = $foreign.diffWithKeyAndIxE; + exports["strMapWithIxE"] = $foreign.strMapWithIxE; + exports["refEq"] = $foreign.refEq; + exports["createTextNode"] = $foreign.createTextNode; + exports["setTextContent"] = $foreign.setTextContent; + exports["createElement"] = $foreign.createElement; + exports["insertChildIx"] = $foreign.insertChildIx; + exports["removeChild"] = $foreign.removeChild; + exports["parentNode"] = $foreign.parentNode; + exports["setAttribute"] = $foreign.setAttribute; + exports["removeAttribute"] = $foreign.removeAttribute; + exports["addEventListener"] = $foreign.addEventListener; + exports["removeEventListener"] = $foreign.removeEventListener; + exports["jsUndefined"] = $foreign.jsUndefined; +})(PS["Halogen.VDom.Util"] = PS["Halogen.VDom.Util"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Function_Uncurried = PS["Data.Function.Uncurried"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Nullable = PS["Data.Nullable"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unit = PS["Data.Unit"]; + var Effect = PS["Effect"]; + var Effect_Ref = PS["Effect.Ref"]; + var Effect_Uncurried = PS["Effect.Uncurried"]; + var Foreign = PS["Foreign"]; + var Foreign_Object = PS["Foreign.Object"]; + var Halogen_VDom = PS["Halogen.VDom"]; + var Halogen_VDom_Machine = PS["Halogen.VDom.Machine"]; + var Halogen_VDom_Types = PS["Halogen.VDom.Types"]; + var Halogen_VDom_Util = PS["Halogen.VDom.Util"]; + var Prelude = PS["Prelude"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var Web_DOM_Element = PS["Web.DOM.Element"]; + var Web_Event_Event = PS["Web.Event.Event"]; + var Web_Event_EventTarget = PS["Web.Event.EventTarget"]; + var Created = (function () { + function Created(value0) { + this.value0 = value0; + }; + Created.create = function (value0) { + return new Created(value0); + }; + return Created; + })(); + var Removed = (function () { + function Removed(value0) { + this.value0 = value0; + }; + Removed.create = function (value0) { + return new Removed(value0); + }; + return Removed; + })(); + var Attribute = (function () { + function Attribute(value0, value1, value2) { + this.value0 = value0; + this.value1 = value1; + this.value2 = value2; + }; + Attribute.create = function (value0) { + return function (value1) { + return function (value2) { + return new Attribute(value0, value1, value2); + }; + }; + }; + return Attribute; + })(); + var Property = (function () { + function Property(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + Property.create = function (value0) { + return function (value1) { + return new Property(value0, value1); + }; + }; + return Property; + })(); + var Handler = (function () { + function Handler(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + Handler.create = function (value0) { + return function (value1) { + return new Handler(value0, value1); + }; + }; + return Handler; + })(); + var Ref = (function () { + function Ref(value0) { + this.value0 = value0; + }; + Ref.create = function (value0) { + return new Ref(value0); + }; + return Ref; + })(); + var unsafeGetProperty = Halogen_VDom_Util.unsafeGetAny; + var setProperty = Halogen_VDom_Util.unsafeSetAny; + var removeProperty = function (key, el) { + var v = Foreign.typeOf(Halogen_VDom_Util.unsafeGetAny(key, el)); + if (v === "string") { + return Halogen_VDom_Util.unsafeSetAny(key, "", el); + }; + if (key === "rowSpan") { + return Halogen_VDom_Util.unsafeSetAny(key, 1, el); + }; + if (key === "colSpan") { + return Halogen_VDom_Util.unsafeSetAny(key, 1, el); + }; + return Halogen_VDom_Util.unsafeSetAny(key, Halogen_VDom_Util.jsUndefined, el); + }; + var propToStrKey = function (v) { + if (v instanceof Attribute && v.value0 instanceof Data_Maybe.Just) { + return "attr/" + (v.value0.value0 + (":" + v.value1)); + }; + if (v instanceof Attribute) { + return "attr/:" + v.value1; + }; + if (v instanceof Property) { + return "prop/" + v.value0; + }; + if (v instanceof Handler) { + return "handler/" + v.value0; + }; + if (v instanceof Ref) { + return "ref"; + }; + throw new Error("Failed pattern match at Halogen.VDom.DOM.Prop (line 178, column 16 - line 185, column 1): " + [ v.constructor.name ]); + }; + var propFromString = Unsafe_Coerce.unsafeCoerce; + var propFromInt = Unsafe_Coerce.unsafeCoerce; + var propFromBoolean = Unsafe_Coerce.unsafeCoerce; + var functorProp = new Data_Functor.Functor(function (f) { + return function (v) { + if (v instanceof Handler) { + return new Handler(v.value0, Data_Functor.map(Data_Functor.functorFn)(Data_Functor.map(Data_Maybe.functorMaybe)(f))(v.value1)); + }; + if (v instanceof Ref) { + return new Ref(Data_Functor.map(Data_Functor.functorFn)(Data_Functor.map(Data_Maybe.functorMaybe)(f))(v.value0)); + }; + return v; + }; + }); + var buildProp = function (emit) { + return function (el) { + var removeProp = function (prevEvents) { + return function (v, v1) { + if (v1 instanceof Attribute) { + return Halogen_VDom_Util.removeAttribute(Data_Nullable.toNullable(v1.value0), v1.value1, el); + }; + if (v1 instanceof Property) { + return removeProperty(v1.value0, el); + }; + if (v1 instanceof Handler) { + var handler = Halogen_VDom_Util.unsafeLookup(v1.value0, prevEvents); + return Halogen_VDom_Util.removeEventListener(v1.value0, Data_Tuple.fst(handler), el); + }; + if (v1 instanceof Ref) { + return Data_Unit.unit; + }; + throw new Error("Failed pattern match at Halogen.VDom.DOM.Prop (line 165, column 5 - line 175, column 18): " + [ v1.constructor.name ]); + }; + }; + var mbEmit = function (v) { + if (v instanceof Data_Maybe.Just) { + return emit(v.value0)(); + }; + return Data_Unit.unit; + }; + var done = function (ps) { + var v = Foreign_Object.lookup("ref")(ps); + if (v instanceof Data_Maybe.Just && v.value0 instanceof Ref) { + return function () { + return mbEmit(v.value0.value0(new Removed(el))); + }; + }; + return Halogen_VDom_Util.effectUnit; + }; + var diffProp = function (prevEvents, events) { + return function (v, v1, v11, v2) { + if (v11 instanceof Attribute && v2 instanceof Attribute) { + var $61 = v11.value2 === v2.value2; + if ($61) { + return v2; + }; + Halogen_VDom_Util.setAttribute(Data_Nullable.toNullable(v2.value0), v2.value1, v2.value2, el); + return v2; + }; + if (v11 instanceof Property && v2 instanceof Property) { + var v4 = Halogen_VDom_Util.refEq(v11.value1, v2.value1); + if (v4) { + return v2; + }; + if (v2.value0 === "value") { + var elVal = unsafeGetProperty("value", el); + var $70 = Halogen_VDom_Util.refEq(elVal, v2.value1); + if ($70) { + return v2; + }; + setProperty(v2.value0, v2.value1, el); + return v2; + }; + setProperty(v2.value0, v2.value1, el); + return v2; + }; + if (v11 instanceof Handler && v2 instanceof Handler) { + var handler = Halogen_VDom_Util.unsafeLookup(v2.value0, prevEvents); + Effect_Ref.write(v2.value1)(Data_Tuple.snd(handler))(); + Halogen_VDom_Util.pokeMutMap(v2.value0, handler, events); + return v2; + }; + return v2; + }; + }; + var applyProp = function (events) { + return function (v, v1, v2) { + if (v2 instanceof Attribute) { + Halogen_VDom_Util.setAttribute(Data_Nullable.toNullable(v2.value0), v2.value1, v2.value2, el); + return v2; + }; + if (v2 instanceof Property) { + setProperty(v2.value0, v2.value1, el); + return v2; + }; + if (v2 instanceof Handler) { + var v3 = Halogen_VDom_Util.unsafeGetAny(v2.value0, events); + if (Halogen_VDom_Util.unsafeHasAny(v2.value0, events)) { + Effect_Ref.write(v2.value1)(Data_Tuple.snd(v3))(); + return v2; + }; + var v4 = Effect_Ref["new"](v2.value1)(); + var v5 = Web_Event_EventTarget.eventListener(function (ev) { + return function __do() { + var v5 = Effect_Ref.read(v4)(); + return mbEmit(v5(ev)); + }; + })(); + Halogen_VDom_Util.pokeMutMap(v2.value0, new Data_Tuple.Tuple(v5, v4), events); + Halogen_VDom_Util.addEventListener(v2.value0, v5, el); + return v2; + }; + if (v2 instanceof Ref) { + mbEmit(v2.value0(new Created(el))); + return v2; + }; + throw new Error("Failed pattern match at Halogen.VDom.DOM.Prop (line 109, column 5 - line 131, column 15): " + [ v2.constructor.name ]); + }; + }; + var patch = function (prevEvents, ps1) { + return function (ps2) { + var v = Halogen_VDom_Util.newMutMap(); + var onThis = removeProp(prevEvents); + var onThese = diffProp(prevEvents, v); + var onThat = applyProp(v); + var v1 = Halogen_VDom_Util.diffWithKeyAndIxE(ps1, ps2, propToStrKey, onThese, onThis, onThat); + return new Halogen_VDom_Machine.Step(Data_Unit.unit, patch(Halogen_VDom_Util.unsafeFreeze(v), v1), done(v1)); + }; + }; + var render = function (ps1) { + var v = Halogen_VDom_Util.newMutMap(); + var v1 = Halogen_VDom_Util.strMapWithIxE(ps1, propToStrKey, applyProp(v)); + return new Halogen_VDom_Machine.Step(Data_Unit.unit, patch(Halogen_VDom_Util.unsafeFreeze(v), v1), done(v1)); + }; + return render; + }; + }; + exports["Attribute"] = Attribute; + exports["Property"] = Property; + exports["Handler"] = Handler; + exports["Ref"] = Ref; + exports["Created"] = Created; + exports["Removed"] = Removed; + exports["propFromString"] = propFromString; + exports["propFromBoolean"] = propFromBoolean; + exports["propFromInt"] = propFromInt; + exports["buildProp"] = buildProp; + exports["functorProp"] = functorProp; +})(PS["Halogen.VDom.DOM.Prop"] = PS["Halogen.VDom.DOM.Prop"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var DOM_HTML_Indexed_ButtonType = PS["DOM.HTML.Indexed.ButtonType"]; + var DOM_HTML_Indexed_CrossOriginValue = PS["DOM.HTML.Indexed.CrossOriginValue"]; + var DOM_HTML_Indexed_DirValue = PS["DOM.HTML.Indexed.DirValue"]; + var DOM_HTML_Indexed_FormMethod = PS["DOM.HTML.Indexed.FormMethod"]; + var DOM_HTML_Indexed_InputType = PS["DOM.HTML.Indexed.InputType"]; + var DOM_HTML_Indexed_KindValue = PS["DOM.HTML.Indexed.KindValue"]; + var DOM_HTML_Indexed_MenuType = PS["DOM.HTML.Indexed.MenuType"]; + var DOM_HTML_Indexed_MenuitemType = PS["DOM.HTML.Indexed.MenuitemType"]; + var DOM_HTML_Indexed_OnOff = PS["DOM.HTML.Indexed.OnOff"]; + var DOM_HTML_Indexed_OrderedListType = PS["DOM.HTML.Indexed.OrderedListType"]; + var DOM_HTML_Indexed_PreloadValue = PS["DOM.HTML.Indexed.PreloadValue"]; + var DOM_HTML_Indexed_ScopeValue = PS["DOM.HTML.Indexed.ScopeValue"]; + var DOM_HTML_Indexed_StepValue = PS["DOM.HTML.Indexed.StepValue"]; + var DOM_HTML_Indexed_WrapValue = PS["DOM.HTML.Indexed.WrapValue"]; + var Data_Bifunctor = PS["Data.Bifunctor"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_MediaType = PS["Data.MediaType"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Tuple = PS["Data.Tuple"]; + var Halogen_Query_InputF = PS["Halogen.Query.InputF"]; + var Halogen_VDom = PS["Halogen.VDom"]; + var Halogen_VDom_DOM_Prop = PS["Halogen.VDom.DOM.Prop"]; + var Halogen_VDom_Types = PS["Halogen.VDom.Types"]; + var Prelude = PS["Prelude"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var Web_DOM_Element = PS["Web.DOM.Element"]; + var Web_Event_Event = PS["Web.Event.Event"]; + var HTML = function (x) { + return x; + }; + var ClassName = function (x) { + return x; + }; + var IsProp = function (toPropValue) { + this.toPropValue = toPropValue; + }; + var toPropValue = function (dict) { + return dict.toPropValue; + }; + var text = function ($27) { + return HTML(Halogen_VDom_Types.Text.create($27)); + }; + var stringIsProp = new IsProp(Halogen_VDom_DOM_Prop.propFromString); + var slot = function ($29) { + return HTML(Halogen_VDom_Types.Widget.create($29)); + }; + var ref = function (f) { + return Halogen_VDom_DOM_Prop.Ref.create(function ($31) { + return f((function (v) { + if (v instanceof Halogen_VDom_DOM_Prop.Created) { + return new Data_Maybe.Just(v.value0); + }; + if (v instanceof Halogen_VDom_DOM_Prop.Removed) { + return Data_Maybe.Nothing.value; + }; + throw new Error("Failed pattern match at Halogen.HTML.Core (line 103, column 21 - line 105, column 23): " + [ v.constructor.name ]); + })($31)); + }); + }; + var prop = function (dictIsProp) { + return function (v) { + return function ($32) { + return Halogen_VDom_DOM_Prop.Property.create(v)(toPropValue(dictIsProp)($32)); + }; + }; + }; + var onOffIsProp = new IsProp(function ($35) { + return Halogen_VDom_DOM_Prop.propFromString(DOM_HTML_Indexed_OnOff.renderOnOff($35)); + }); + var newtypeClassName = new Data_Newtype.Newtype(function (n) { + return n; + }, ClassName); + var intIsProp = new IsProp(Halogen_VDom_DOM_Prop.propFromInt); + var inputTypeIsProp = new IsProp(function ($40) { + return Halogen_VDom_DOM_Prop.propFromString(DOM_HTML_Indexed_InputType.renderInputType($40)); + }); + var handler = Halogen_VDom_DOM_Prop.Handler.create; + var element = function (ns) { + return function (name) { + return function (props) { + return function (children) { + return new Halogen_VDom_Types.Elem(new Halogen_VDom_Types.ElemSpec(ns, name, props), children); + }; + }; + }; + }; + var buttonTypeIsProp = new IsProp(function ($44) { + return Halogen_VDom_DOM_Prop.propFromString(DOM_HTML_Indexed_ButtonType.renderButtonType($44)); + }); + var booleanIsProp = new IsProp(Halogen_VDom_DOM_Prop.propFromBoolean); + var bifunctorHTML = new Data_Bifunctor.Bifunctor(function (f) { + return function (g) { + return function (v) { + return Data_Bifunctor.bimap(Halogen_VDom_Types.bifunctorVDom)(Data_Functor.map(Data_Functor.functorArray)(Data_Functor.map(Halogen_VDom_DOM_Prop.functorProp)(Data_Functor.map(Halogen_Query_InputF.functorInputF)(g))))(f)(v); + }; + }; + }); + var attr = function (ns) { + return function (v) { + return Halogen_VDom_DOM_Prop.Attribute.create(ns)(v); + }; + }; + exports["HTML"] = HTML; + exports["slot"] = slot; + exports["text"] = text; + exports["element"] = element; + exports["prop"] = prop; + exports["attr"] = attr; + exports["handler"] = handler; + exports["ref"] = ref; + exports["IsProp"] = IsProp; + exports["toPropValue"] = toPropValue; + exports["ClassName"] = ClassName; + exports["bifunctorHTML"] = bifunctorHTML; + exports["stringIsProp"] = stringIsProp; + exports["intIsProp"] = intIsProp; + exports["booleanIsProp"] = booleanIsProp; + exports["buttonTypeIsProp"] = buttonTypeIsProp; + exports["inputTypeIsProp"] = inputTypeIsProp; + exports["onOffIsProp"] = onOffIsProp; + exports["newtypeClassName"] = newtypeClassName; +})(PS["Halogen.HTML.Core"] = PS["Halogen.HTML.Core"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Category = PS["Control.Category"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Const = PS["Data.Const"]; + var Data_Either = PS["Data.Either"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_List = PS["Data.List"]; + var Data_List_NonEmpty = PS["Data.List.NonEmpty"]; + var Data_List_Types = PS["Data.List.Types"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_NonEmpty = PS["Data.NonEmpty"]; + var Data_Ring = PS["Data.Ring"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Tuple = PS["Data.Tuple"]; + var Prelude = PS["Prelude"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var Pure = (function () { + function Pure(value0) { + this.value0 = value0; + }; + Pure.create = function (value0) { + return new Pure(value0); + }; + return Pure; + })(); + var Lift = (function () { + function Lift(value0) { + this.value0 = value0; + }; + Lift.create = function (value0) { + return new Lift(value0); + }; + return Lift; + })(); + var Ap = (function () { + function Ap(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + Ap.create = function (value0) { + return function (value1) { + return new Ap(value0, value1); + }; + }; + return Ap; + })(); + var mkAp = function (fba) { + return function (fb) { + return new Ap(fba, fb); + }; + }; + var liftFreeAp = Lift.create; + var goLeft = function ($copy_dictApplicative) { + return function ($copy_fStack) { + return function ($copy_valStack) { + return function ($copy_nat) { + return function ($copy_func) { + return function ($copy_count) { + var $tco_var_dictApplicative = $copy_dictApplicative; + var $tco_var_fStack = $copy_fStack; + var $tco_var_valStack = $copy_valStack; + var $tco_var_nat = $copy_nat; + var $tco_var_func = $copy_func; + var $tco_done = false; + var $tco_result; + function $tco_loop(dictApplicative, fStack, valStack, nat, func, count) { + if (func instanceof Pure) { + $tco_done = true; + return new Data_Tuple.Tuple(new Data_List_Types.Cons({ + func: Control_Applicative.pure(dictApplicative)(func.value0), + count: count + }, fStack), valStack); + }; + if (func instanceof Lift) { + $tco_done = true; + return new Data_Tuple.Tuple(new Data_List_Types.Cons({ + func: nat(func.value0), + count: count + }, fStack), valStack); + }; + if (func instanceof Ap) { + $tco_var_dictApplicative = dictApplicative; + $tco_var_fStack = fStack; + $tco_var_valStack = Data_List_NonEmpty.cons(func.value1)(valStack); + $tco_var_nat = nat; + $tco_var_func = func.value0; + $copy_count = count + 1 | 0; + return; + }; + throw new Error("Failed pattern match at Control.Applicative.Free (line 102, column 41 - line 105, column 81): " + [ func.constructor.name ]); + }; + while (!$tco_done) { + $tco_result = $tco_loop($tco_var_dictApplicative, $tco_var_fStack, $tco_var_valStack, $tco_var_nat, $tco_var_func, $copy_count); + }; + return $tco_result; + }; + }; + }; + }; + }; + }; + var goApply = function ($copy_dictApplicative) { + return function ($copy_fStack) { + return function ($copy_vals) { + return function ($copy_gVal) { + var $tco_var_dictApplicative = $copy_dictApplicative; + var $tco_var_fStack = $copy_fStack; + var $tco_var_vals = $copy_vals; + var $tco_done = false; + var $tco_result; + function $tco_loop(dictApplicative, fStack, vals, gVal) { + if (fStack instanceof Data_List_Types.Nil) { + $tco_done = true; + return new Data_Either.Left(gVal); + }; + if (fStack instanceof Data_List_Types.Cons) { + var gRes = Control_Apply.apply(dictApplicative.Apply0())(fStack.value0.func)(gVal); + var $14 = fStack.value0.count === 1; + if ($14) { + if (fStack.value1 instanceof Data_List_Types.Nil) { + $tco_done = true; + return new Data_Either.Left(gRes); + }; + $tco_var_dictApplicative = dictApplicative; + $tco_var_fStack = fStack.value1; + $tco_var_vals = vals; + $copy_gVal = gRes; + return; + }; + if (vals instanceof Data_List_Types.Nil) { + $tco_done = true; + return new Data_Either.Left(gRes); + }; + if (vals instanceof Data_List_Types.Cons) { + $tco_done = true; + return Data_Either.Right.create(new Data_Tuple.Tuple(new Data_List_Types.Cons({ + func: gRes, + count: fStack.value0.count - 1 | 0 + }, fStack.value1), new Data_NonEmpty.NonEmpty(vals.value0, vals.value1))); + }; + throw new Error("Failed pattern match at Control.Applicative.Free (line 83, column 11 - line 88, column 50): " + [ vals.constructor.name ]); + }; + throw new Error("Failed pattern match at Control.Applicative.Free (line 72, column 3 - line 88, column 50): " + [ fStack.constructor.name ]); + }; + while (!$tco_done) { + $tco_result = $tco_loop($tco_var_dictApplicative, $tco_var_fStack, $tco_var_vals, $copy_gVal); + }; + return $tco_result; + }; + }; + }; + }; + var functorFreeAp = new Data_Functor.Functor(function (f) { + return function (x) { + return mkAp(new Pure(f))(x); + }; + }); + var foldFreeAp = function (dictApplicative) { + return function (nat) { + return function (z) { + var go = function ($copy_v) { + var $tco_done = false; + var $tco_result; + function $tco_loop(v) { + if (v.value1.value0 instanceof Pure) { + var v1 = goApply(dictApplicative)(v.value0)(v.value1.value1)(Control_Applicative.pure(dictApplicative)(v.value1.value0.value0)); + if (v1 instanceof Data_Either.Left) { + $tco_done = true; + return v1.value0; + }; + if (v1 instanceof Data_Either.Right) { + $copy_v = v1.value0; + return; + }; + throw new Error("Failed pattern match at Control.Applicative.Free (line 54, column 17 - line 56, column 24): " + [ v1.constructor.name ]); + }; + if (v.value1.value0 instanceof Lift) { + var v1 = goApply(dictApplicative)(v.value0)(v.value1.value1)(nat(v.value1.value0.value0)); + if (v1 instanceof Data_Either.Left) { + $tco_done = true; + return v1.value0; + }; + if (v1 instanceof Data_Either.Right) { + $copy_v = v1.value0; + return; + }; + throw new Error("Failed pattern match at Control.Applicative.Free (line 57, column 17 - line 59, column 24): " + [ v1.constructor.name ]); + }; + if (v.value1.value0 instanceof Ap) { + var nextVals = new Data_NonEmpty.NonEmpty(v.value1.value0.value1, v.value1.value1); + $copy_v = goLeft(dictApplicative)(v.value0)(nextVals)(nat)(v.value1.value0.value0)(1); + return; + }; + throw new Error("Failed pattern match at Control.Applicative.Free (line 53, column 5 - line 64, column 1): " + [ v.value1.value0.constructor.name ]); + }; + while (!$tco_done) { + $tco_result = $tco_loop($copy_v); + }; + return $tco_result; + }; + return go(new Data_Tuple.Tuple(Data_List_Types.Nil.value, Data_List_NonEmpty.singleton(z))); + }; + }; + }; + var retractFreeAp = function (dictApplicative) { + return foldFreeAp(dictApplicative)(Control_Category.identity(Control_Category.categoryFn)); + }; + var applyFreeAp = new Control_Apply.Apply(function () { + return functorFreeAp; + }, function (fba) { + return function (fb) { + return mkAp(fba)(fb); + }; + }); + var applicativeFreeAp = new Control_Applicative.Applicative(function () { + return applyFreeAp; + }, Pure.create); + var hoistFreeAp = function (f) { + return foldFreeAp(applicativeFreeAp)(function ($37) { + return liftFreeAp(f($37)); + }); + }; + exports["liftFreeAp"] = liftFreeAp; + exports["retractFreeAp"] = retractFreeAp; + exports["foldFreeAp"] = foldFreeAp; + exports["hoistFreeAp"] = hoistFreeAp; + exports["functorFreeAp"] = functorFreeAp; + exports["applyFreeAp"] = applyFreeAp; + exports["applicativeFreeAp"] = applicativeFreeAp; +})(PS["Control.Applicative.Free"] = PS["Control.Applicative.Free"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Alt = PS["Control.Alt"]; + var Control_Alternative = PS["Control.Alternative"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Monad = PS["Control.Monad"]; + var Control_MonadPlus = PS["Control.MonadPlus"]; + var Control_MonadZero = PS["Control.MonadZero"]; + var Control_Plus = PS["Control.Plus"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_List = PS["Data.List"]; + var Data_List_Types = PS["Data.List.Types"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Monoid = PS["Data.Monoid"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ordering = PS["Data.Ordering"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Show = PS["Data.Show"]; + var Data_Traversable = PS["Data.Traversable"]; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unfoldable = PS["Data.Unfoldable"]; + var Data_Unfoldable1 = PS["Data.Unfoldable1"]; + var Prelude = PS["Prelude"]; + var CatQueue = (function () { + function CatQueue(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + CatQueue.create = function (value0) { + return function (value1) { + return new CatQueue(value0, value1); + }; + }; + return CatQueue; + })(); + var uncons = function ($copy_v) { + var $tco_done = false; + var $tco_result; + function $tco_loop(v) { + if (v.value0 instanceof Data_List_Types.Nil && v.value1 instanceof Data_List_Types.Nil) { + $tco_done = true; + return Data_Maybe.Nothing.value; + }; + if (v.value0 instanceof Data_List_Types.Nil) { + $copy_v = new CatQueue(Data_List.reverse(v.value1), Data_List_Types.Nil.value); + return; + }; + if (v.value0 instanceof Data_List_Types.Cons) { + $tco_done = true; + return new Data_Maybe.Just(new Data_Tuple.Tuple(v.value0.value0, new CatQueue(v.value0.value1, v.value1))); + }; + throw new Error("Failed pattern match at Data.CatQueue (line 83, column 1 - line 83, column 63): " + [ v.constructor.name ]); + }; + while (!$tco_done) { + $tco_result = $tco_loop($copy_v); + }; + return $tco_result; + }; + var snoc = function (v) { + return function (a) { + return new CatQueue(v.value0, new Data_List_Types.Cons(a, v.value1)); + }; + }; + var $$null = function (v) { + if (v.value0 instanceof Data_List_Types.Nil && v.value1 instanceof Data_List_Types.Nil) { + return true; + }; + return false; + }; + var empty = new CatQueue(Data_List_Types.Nil.value, Data_List_Types.Nil.value); + exports["CatQueue"] = CatQueue; + exports["empty"] = empty; + exports["null"] = $$null; + exports["snoc"] = snoc; + exports["uncons"] = uncons; +})(PS["Data.CatQueue"] = PS["Data.CatQueue"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Alt = PS["Control.Alt"]; + var Control_Alternative = PS["Control.Alternative"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Monad = PS["Control.Monad"]; + var Control_MonadPlus = PS["Control.MonadPlus"]; + var Control_MonadZero = PS["Control.MonadZero"]; + var Control_Plus = PS["Control.Plus"]; + var Data_CatQueue = PS["Data.CatQueue"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_List = PS["Data.List"]; + var Data_List_Types = PS["Data.List.Types"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Monoid = PS["Data.Monoid"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Show = PS["Data.Show"]; + var Data_Traversable = PS["Data.Traversable"]; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unfoldable = PS["Data.Unfoldable"]; + var Data_Unfoldable1 = PS["Data.Unfoldable1"]; + var Prelude = PS["Prelude"]; + var CatNil = (function () { + function CatNil() { + + }; + CatNil.value = new CatNil(); + return CatNil; + })(); + var CatCons = (function () { + function CatCons(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + CatCons.create = function (value0) { + return function (value1) { + return new CatCons(value0, value1); + }; + }; + return CatCons; + })(); + var link = function (v) { + return function (cat) { + if (v instanceof CatNil) { + return cat; + }; + if (v instanceof CatCons) { + return new CatCons(v.value0, Data_CatQueue.snoc(v.value1)(cat)); + }; + throw new Error("Failed pattern match at Data.CatList (line 111, column 1 - line 111, column 54): " + [ v.constructor.name, cat.constructor.name ]); + }; + }; + var foldr = function (k) { + return function (b) { + return function (q) { + var foldl = function ($copy_v) { + return function ($copy_c) { + return function ($copy_v1) { + var $tco_var_v = $copy_v; + var $tco_var_c = $copy_c; + var $tco_done = false; + var $tco_result; + function $tco_loop(v, c, v1) { + if (v1 instanceof Data_List_Types.Nil) { + $tco_done = true; + return c; + }; + if (v1 instanceof Data_List_Types.Cons) { + $tco_var_v = v; + $tco_var_c = v(c)(v1.value0); + $copy_v1 = v1.value1; + return; + }; + throw new Error("Failed pattern match at Data.CatList (line 126, column 3 - line 126, column 59): " + [ v.constructor.name, c.constructor.name, v1.constructor.name ]); + }; + while (!$tco_done) { + $tco_result = $tco_loop($tco_var_v, $tco_var_c, $copy_v1); + }; + return $tco_result; + }; + }; + }; + var go = function ($copy_xs) { + return function ($copy_ys) { + var $tco_var_xs = $copy_xs; + var $tco_done = false; + var $tco_result; + function $tco_loop(xs, ys) { + var v = Data_CatQueue.uncons(xs); + if (v instanceof Data_Maybe.Nothing) { + $tco_done = true; + return foldl(function (x) { + return function (i) { + return i(x); + }; + })(b)(ys); + }; + if (v instanceof Data_Maybe.Just) { + $tco_var_xs = v.value0.value1; + $copy_ys = new Data_List_Types.Cons(k(v.value0.value0), ys); + return; + }; + throw new Error("Failed pattern match at Data.CatList (line 122, column 14 - line 124, column 67): " + [ v.constructor.name ]); + }; + while (!$tco_done) { + $tco_result = $tco_loop($tco_var_xs, $copy_ys); + }; + return $tco_result; + }; + }; + return go(q)(Data_List_Types.Nil.value); + }; + }; + }; + var uncons = function (v) { + if (v instanceof CatNil) { + return Data_Maybe.Nothing.value; + }; + if (v instanceof CatCons) { + return new Data_Maybe.Just(new Data_Tuple.Tuple(v.value0, (function () { + var $45 = Data_CatQueue["null"](v.value1); + if ($45) { + return CatNil.value; + }; + return foldr(link)(CatNil.value)(v.value1); + })())); + }; + throw new Error("Failed pattern match at Data.CatList (line 102, column 1 - line 102, column 61): " + [ v.constructor.name ]); + }; + var empty = CatNil.value; + var append = function (v) { + return function (v1) { + if (v1 instanceof CatNil) { + return v; + }; + if (v instanceof CatNil) { + return v1; + }; + return link(v)(v1); + }; + }; + var semigroupCatList = new Data_Semigroup.Semigroup(append); + var snoc = function (cat) { + return function (a) { + return append(cat)(new CatCons(a, Data_CatQueue.empty)); + }; + }; + exports["CatNil"] = CatNil; + exports["CatCons"] = CatCons; + exports["empty"] = empty; + exports["append"] = append; + exports["snoc"] = snoc; + exports["uncons"] = uncons; + exports["semigroupCatList"] = semigroupCatList; +})(PS["Data.CatList"] = PS["Data.CatList"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Category = PS["Control.Category"]; + var Control_Monad = PS["Control.Monad"]; + var Control_Monad_Rec_Class = PS["Control.Monad.Rec.Class"]; + var Control_Monad_Trans_Class = PS["Control.Monad.Trans.Class"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_CatList = PS["Data.CatList"]; + var Data_Either = PS["Data.Either"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ordering = PS["Data.Ordering"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Traversable = PS["Data.Traversable"]; + var Data_Tuple = PS["Data.Tuple"]; + var Prelude = PS["Prelude"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var Free = (function () { + function Free(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + Free.create = function (value0) { + return function (value1) { + return new Free(value0, value1); + }; + }; + return Free; + })(); + var Return = (function () { + function Return(value0) { + this.value0 = value0; + }; + Return.create = function (value0) { + return new Return(value0); + }; + return Return; + })(); + var Bind = (function () { + function Bind(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + Bind.create = function (value0) { + return function (value1) { + return new Bind(value0, value1); + }; + }; + return Bind; + })(); + var toView = function ($copy_v) { + var $tco_done = false; + var $tco_result; + function $tco_loop(v) { + var runExpF = function (v2) { + return v2; + }; + var concatF = function (v2) { + return function (r) { + return new Free(v2.value0, Data_Semigroup.append(Data_CatList.semigroupCatList)(v2.value1)(r)); + }; + }; + if (v.value0 instanceof Return) { + var v2 = Data_CatList.uncons(v.value1); + if (v2 instanceof Data_Maybe.Nothing) { + $tco_done = true; + return new Return(v.value0.value0); + }; + if (v2 instanceof Data_Maybe.Just) { + $copy_v = concatF(runExpF(v2.value0.value0)(v.value0.value0))(v2.value0.value1); + return; + }; + throw new Error("Failed pattern match at Control.Monad.Free (line 220, column 7 - line 224, column 64): " + [ v2.constructor.name ]); + }; + if (v.value0 instanceof Bind) { + $tco_done = true; + return new Bind(v.value0.value0, function (a) { + return concatF(v.value0.value1(a))(v.value1); + }); + }; + throw new Error("Failed pattern match at Control.Monad.Free (line 218, column 3 - line 226, column 56): " + [ v.value0.constructor.name ]); + }; + while (!$tco_done) { + $tco_result = $tco_loop($copy_v); + }; + return $tco_result; + }; + var fromView = function (f) { + return new Free(f, Data_CatList.empty); + }; + var freeMonad = new Control_Monad.Monad(function () { + return freeApplicative; + }, function () { + return freeBind; + }); + var freeFunctor = new Data_Functor.Functor(function (k) { + return function (f) { + return Control_Bind.bindFlipped(freeBind)(function ($118) { + return Control_Applicative.pure(freeApplicative)(k($118)); + })(f); + }; + }); + var freeBind = new Control_Bind.Bind(function () { + return freeApply; + }, function (v) { + return function (k) { + return new Free(v.value0, Data_CatList.snoc(v.value1)(k)); + }; + }); + var freeApply = new Control_Apply.Apply(function () { + return freeFunctor; + }, Control_Monad.ap(freeMonad)); + var freeApplicative = new Control_Applicative.Applicative(function () { + return freeApply; + }, function ($119) { + return fromView(Return.create($119)); + }); + var liftF = function (f) { + return fromView(new Bind(f, function ($120) { + return Control_Applicative.pure(freeApplicative)($120); + })); + }; + var foldFree = function (dictMonadRec) { + return function (k) { + var go = function (f) { + var v = toView(f); + if (v instanceof Return) { + return Data_Functor.map((((dictMonadRec.Monad0()).Bind1()).Apply0()).Functor0())(Control_Monad_Rec_Class.Done.create)(Control_Applicative.pure((dictMonadRec.Monad0()).Applicative0())(v.value0)); + }; + if (v instanceof Bind) { + return Data_Functor.map((((dictMonadRec.Monad0()).Bind1()).Apply0()).Functor0())(function ($127) { + return Control_Monad_Rec_Class.Loop.create(v.value1($127)); + })(k(v.value0)); + }; + throw new Error("Failed pattern match at Control.Monad.Free (line 151, column 10 - line 153, column 37): " + [ v.constructor.name ]); + }; + return Control_Monad_Rec_Class.tailRecM(dictMonadRec)(go); + }; + }; + exports["liftF"] = liftF; + exports["foldFree"] = foldFree; + exports["freeFunctor"] = freeFunctor; + exports["freeBind"] = freeBind; + exports["freeApplicative"] = freeApplicative; + exports["freeApply"] = freeApply; + exports["freeMonad"] = freeMonad; +})(PS["Control.Monad.Free"] = PS["Control.Monad.Free"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var runExists = Unsafe_Coerce.unsafeCoerce; + var mkExists = Unsafe_Coerce.unsafeCoerce; + exports["mkExists"] = mkExists; + exports["runExists"] = runExists; +})(PS["Data.Exists"] = PS["Data.Exists"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Alt = PS["Control.Alt"]; + var Control_Alternative = PS["Control.Alternative"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Category = PS["Control.Category"]; + var Control_Comonad = PS["Control.Comonad"]; + var Control_Extend = PS["Control.Extend"]; + var Control_Monad = PS["Control.Monad"]; + var Control_Monad_Trans_Class = PS["Control.Monad.Trans.Class"]; + var Control_MonadPlus = PS["Control.MonadPlus"]; + var Control_MonadZero = PS["Control.MonadZero"]; + var Control_Plus = PS["Control.Plus"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Distributive = PS["Data.Distributive"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Exists = PS["Data.Exists"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Functor_Invariant = PS["Data.Functor.Invariant"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Semigroup_Foldable = PS["Data.Semigroup.Foldable"]; + var Data_Semigroup_Traversable = PS["Data.Semigroup.Traversable"]; + var Data_Traversable = PS["Data.Traversable"]; + var Prelude = PS["Prelude"]; + var unCoyoneda = function (f) { + return function (v) { + return Data_Exists.runExists(function (v1) { + return f(v1.value0)(v1.value1); + })(v); + }; + }; + exports["unCoyoneda"] = unCoyoneda; +})(PS["Data.Coyoneda"] = PS["Data.Coyoneda"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Category = PS["Control.Category"]; + var Control_Monad = PS["Control.Monad"]; + var Control_Monad_Error_Class = PS["Control.Monad.Error.Class"]; + var Control_Monad_Reader_Class = PS["Control.Monad.Reader.Class"]; + var Control_Monad_Rec_Class = PS["Control.Monad.Rec.Class"]; + var Control_Monad_State_Class = PS["Control.Monad.State.Class"]; + var Control_Monad_Trans_Class = PS["Control.Monad.Trans.Class"]; + var Control_Monad_Writer_Class = PS["Control.Monad.Writer.Class"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Bifunctor = PS["Data.Bifunctor"]; + var Data_Either = PS["Data.Either"]; + var Data_Exists = PS["Data.Exists"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Monoid = PS["Data.Monoid"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Unit = PS["Data.Unit"]; + var Effect_Class = PS["Effect.Class"]; + var Prelude = PS["Prelude"]; + var Bound = (function () { + function Bound(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + Bound.create = function (value0) { + return function (value1) { + return new Bound(value0, value1); + }; + }; + return Bound; + })(); + var FreeT = (function () { + function FreeT(value0) { + this.value0 = value0; + }; + FreeT.create = function (value0) { + return new FreeT(value0); + }; + return FreeT; + })(); + var Bind = (function () { + function Bind(value0) { + this.value0 = value0; + }; + Bind.create = function (value0) { + return new Bind(value0); + }; + return Bind; + })(); + var monadTransFreeT = function (dictFunctor) { + return new Control_Monad_Trans_Class.MonadTrans(function (dictMonad) { + return function (ma) { + return new FreeT(function (v) { + return Data_Functor.map(((dictMonad.Bind1()).Apply0()).Functor0())(Data_Either.Left.create)(ma); + }); + }; + }); + }; + var freeT = FreeT.create; + var bound = function (m) { + return function (f) { + return new Bind(Data_Exists.mkExists(new Bound(m, f))); + }; + }; + var functorFreeT = function (dictFunctor) { + return function (dictFunctor1) { + return new Data_Functor.Functor(function (f) { + return function (v) { + if (v instanceof FreeT) { + return new FreeT(function (v1) { + return Data_Functor.map(dictFunctor1)(Data_Bifunctor.bimap(Data_Either.bifunctorEither)(f)(Data_Functor.map(dictFunctor)(Data_Functor.map(functorFreeT(dictFunctor)(dictFunctor1))(f))))(v.value0(Data_Unit.unit)); + }); + }; + if (v instanceof Bind) { + return Data_Exists.runExists(function (v1) { + return bound(v1.value0)(function ($104) { + return Data_Functor.map(functorFreeT(dictFunctor)(dictFunctor1))(f)(v1.value1($104)); + }); + })(v.value0); + }; + throw new Error("Failed pattern match at Control.Monad.Free.Trans (line 57, column 1 - line 57, column 71): " + [ f.constructor.name, v.constructor.name ]); + }; + }); + }; + }; + var monadFreeT = function (dictFunctor) { + return function (dictMonad) { + return new Control_Monad.Monad(function () { + return applicativeFreeT(dictFunctor)(dictMonad); + }, function () { + return bindFreeT(dictFunctor)(dictMonad); + }); + }; + }; + var bindFreeT = function (dictFunctor) { + return function (dictMonad) { + return new Control_Bind.Bind(function () { + return applyFreeT(dictFunctor)(dictMonad); + }, function (v) { + return function (f) { + if (v instanceof Bind) { + return Data_Exists.runExists(function (v1) { + return bound(v1.value0)(function (x) { + return bound(function (v2) { + return v1.value1(x); + })(f); + }); + })(v.value0); + }; + return bound(function (v1) { + return v; + })(f); + }; + }); + }; + }; + var applyFreeT = function (dictFunctor) { + return function (dictMonad) { + return new Control_Apply.Apply(function () { + return functorFreeT(dictFunctor)(((dictMonad.Bind1()).Apply0()).Functor0()); + }, Control_Monad.ap(monadFreeT(dictFunctor)(dictMonad))); + }; + }; + var applicativeFreeT = function (dictFunctor) { + return function (dictMonad) { + return new Control_Applicative.Applicative(function () { + return applyFreeT(dictFunctor)(dictMonad); + }, function (a) { + return new FreeT(function (v) { + return Control_Applicative.pure(dictMonad.Applicative0())(new Data_Either.Left(a)); + }); + }); + }; + }; + var liftFreeT = function (dictFunctor) { + return function (dictMonad) { + return function (fa) { + return new FreeT(function (v) { + return Control_Applicative.pure(dictMonad.Applicative0())(new Data_Either.Right(Data_Functor.map(dictFunctor)(Control_Applicative.pure(applicativeFreeT(dictFunctor)(dictMonad)))(fa))); + }); + }; + }; + }; + var resume = function (dictFunctor) { + return function (dictMonadRec) { + var go = function (v) { + if (v instanceof FreeT) { + return Data_Functor.map((((dictMonadRec.Monad0()).Bind1()).Apply0()).Functor0())(Control_Monad_Rec_Class.Done.create)(v.value0(Data_Unit.unit)); + }; + if (v instanceof Bind) { + return Data_Exists.runExists(function (v1) { + var v2 = v1.value0(Data_Unit.unit); + if (v2 instanceof FreeT) { + return Control_Bind.bind((dictMonadRec.Monad0()).Bind1())(v2.value0(Data_Unit.unit))(function (v3) { + if (v3 instanceof Data_Either.Left) { + return Control_Applicative.pure((dictMonadRec.Monad0()).Applicative0())(new Control_Monad_Rec_Class.Loop(v1.value1(v3.value0))); + }; + if (v3 instanceof Data_Either.Right) { + return Control_Applicative.pure((dictMonadRec.Monad0()).Applicative0())(new Control_Monad_Rec_Class.Done(new Data_Either.Right(Data_Functor.map(dictFunctor)(function (h) { + return Control_Bind.bind(bindFreeT(dictFunctor)(dictMonadRec.Monad0()))(h)(v1.value1); + })(v3.value0)))); + }; + throw new Error("Failed pattern match at Control.Monad.Free.Trans (line 52, column 20 - line 54, column 67): " + [ v3.constructor.name ]); + }); + }; + if (v2 instanceof Bind) { + return Data_Exists.runExists(function (v3) { + return Control_Applicative.pure((dictMonadRec.Monad0()).Applicative0())(new Control_Monad_Rec_Class.Loop(Control_Bind.bind(bindFreeT(dictFunctor)(dictMonadRec.Monad0()))(v3.value0(Data_Unit.unit))(function (z) { + return Control_Bind.bind(bindFreeT(dictFunctor)(dictMonadRec.Monad0()))(v3.value1(z))(v1.value1); + }))); + })(v2.value0); + }; + throw new Error("Failed pattern match at Control.Monad.Free.Trans (line 50, column 5 - line 55, column 98): " + [ v2.constructor.name ]); + })(v.value0); + }; + throw new Error("Failed pattern match at Control.Monad.Free.Trans (line 47, column 3 - line 47, column 75): " + [ v.constructor.name ]); + }; + return Control_Monad_Rec_Class.tailRecM(dictMonadRec)(go); + }; + }; + var runFreeT = function (dictFunctor) { + return function (dictMonadRec) { + return function (interp) { + var go = function (v) { + if (v instanceof Data_Either.Left) { + return Control_Applicative.pure((dictMonadRec.Monad0()).Applicative0())(new Control_Monad_Rec_Class.Done(v.value0)); + }; + if (v instanceof Data_Either.Right) { + return Data_Functor.map((((dictMonadRec.Monad0()).Bind1()).Apply0()).Functor0())(Control_Monad_Rec_Class.Loop.create)(interp(v.value0)); + }; + throw new Error("Failed pattern match at Control.Monad.Free.Trans (line 126, column 3 - line 126, column 63): " + [ v.constructor.name ]); + }; + return Control_Monad_Rec_Class.tailRecM(dictMonadRec)(Control_Bind.composeKleisliFlipped((dictMonadRec.Monad0()).Bind1())(go)(resume(dictFunctor)(dictMonadRec))); + }; + }; + }; + var monadRecFreeT = function (dictFunctor) { + return function (dictMonad) { + return new Control_Monad_Rec_Class.MonadRec(function () { + return monadFreeT(dictFunctor)(dictMonad); + }, function (f) { + var go = function (s) { + return Control_Bind.bind(bindFreeT(dictFunctor)(dictMonad))(f(s))(function (v) { + if (v instanceof Control_Monad_Rec_Class.Loop) { + return go(v.value0); + }; + if (v instanceof Control_Monad_Rec_Class.Done) { + return Control_Applicative.pure(applicativeFreeT(dictFunctor)(dictMonad))(v.value0); + }; + throw new Error("Failed pattern match at Control.Monad.Free.Trans (line 80, column 15 - line 82, column 25): " + [ v.constructor.name ]); + }); + }; + return go; + }); + }; + }; + exports["freeT"] = freeT; + exports["liftFreeT"] = liftFreeT; + exports["resume"] = resume; + exports["runFreeT"] = runFreeT; + exports["functorFreeT"] = functorFreeT; + exports["applyFreeT"] = applyFreeT; + exports["applicativeFreeT"] = applicativeFreeT; + exports["bindFreeT"] = bindFreeT; + exports["monadFreeT"] = monadFreeT; + exports["monadTransFreeT"] = monadTransFreeT; + exports["monadRecFreeT"] = monadRecFreeT; +})(PS["Control.Monad.Free.Trans"] = PS["Control.Monad.Free.Trans"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Category = PS["Control.Category"]; + var Control_Monad_Except = PS["Control.Monad.Except"]; + var Control_Monad_Except_Trans = PS["Control.Monad.Except.Trans"]; + var Control_Monad_Free_Trans = PS["Control.Monad.Free.Trans"]; + var Control_Monad_Rec_Class = PS["Control.Monad.Rec.Class"]; + var Control_Monad_Trans_Class = PS["Control.Monad.Trans.Class"]; + var Control_Parallel = PS["Control.Parallel"]; + var Control_Parallel_Class = PS["Control.Parallel.Class"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Bifunctor = PS["Data.Bifunctor"]; + var Data_Either = PS["Data.Either"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Identity = PS["Data.Identity"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_Profunctor = PS["Data.Profunctor"]; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unit = PS["Data.Unit"]; + var Prelude = PS["Prelude"]; + var Emit = (function () { + function Emit(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + Emit.create = function (value0) { + return function (value1) { + return new Emit(value0, value1); + }; + }; + return Emit; + })(); + var runProcess = function (dictMonadRec) { + return Control_Monad_Free_Trans.runFreeT(Data_Identity.functorIdentity)(dictMonadRec)(function ($186) { + return Control_Applicative.pure((dictMonadRec.Monad0()).Applicative0())(Data_Newtype.unwrap(Data_Identity.newtypeIdentity)($186)); + }); + }; + var profunctorAwait = new Data_Profunctor.Profunctor(function (f) { + return function (g) { + return function (v) { + return Data_Profunctor.dimap(Data_Profunctor.profunctorFn)(f)(g)(v); + }; + }; + }); + var loop = function (dictFunctor) { + return function (dictMonad) { + return function (me) { + return Control_Monad_Rec_Class.tailRecM(Control_Monad_Free_Trans.monadRecFreeT(dictFunctor)(dictMonad))(function (v) { + return Data_Functor.map(Control_Monad_Free_Trans.functorFreeT(dictFunctor)(((dictMonad.Bind1()).Apply0()).Functor0()))(Data_Maybe.maybe(new Control_Monad_Rec_Class.Loop(Data_Unit.unit))(Control_Monad_Rec_Class.Done.create))(me); + })(Data_Unit.unit); + }; + }; + }; + var fuseWithL = function (dictFunctor) { + return function (dictFunctor1) { + return function (dictFunctor2) { + return function (dictMonadRec) { + return function (zap) { + return function (fs) { + return function (gs) { + var go = function (v) { + return Control_Monad_Except_Trans.runExceptT(Control_Bind.bind(Control_Monad_Except_Trans.bindExceptT(dictMonadRec.Monad0()))(Control_Monad_Except_Trans.ExceptT(Control_Monad_Free_Trans.resume(dictFunctor)(dictMonadRec)(v.value0)))(function (v1) { + return Control_Bind.bind(Control_Monad_Except_Trans.bindExceptT(dictMonadRec.Monad0()))(Control_Monad_Except_Trans.ExceptT(Control_Monad_Free_Trans.resume(dictFunctor1)(dictMonadRec)(v.value1)))(function (v2) { + return Control_Applicative.pure(Control_Monad_Except_Trans.applicativeExceptT(dictMonadRec.Monad0()))(Data_Functor.map(dictFunctor2)(function (t) { + return Control_Monad_Free_Trans.freeT(function (v3) { + return go(t); + }); + })(zap(Data_Tuple.Tuple.create)(v1)(v2))); + }); + })); + }; + return Control_Monad_Free_Trans.freeT(function (v) { + return go(new Data_Tuple.Tuple(fs, gs)); + }); + }; + }; + }; + }; + }; + }; + }; + var fuseWith = function (dictFunctor) { + return function (dictFunctor1) { + return function (dictFunctor2) { + return function (dictMonadRec) { + return function (dictParallel) { + return function (zap) { + return function (fs) { + return function (gs) { + var go = function (v) { + return Control_Bind.bind((dictMonadRec.Monad0()).Bind1())(Control_Parallel_Class.sequential(dictParallel)(Control_Apply.apply((dictParallel.Applicative1()).Apply0())(Data_Functor.map(((dictParallel.Applicative1()).Apply0()).Functor0())(Control_Apply.lift2(Data_Either.applyEither)(zap(Data_Tuple.Tuple.create)))(Control_Parallel_Class.parallel(dictParallel)(Control_Monad_Free_Trans.resume(dictFunctor)(dictMonadRec)(v.value0))))(Control_Parallel_Class.parallel(dictParallel)(Control_Monad_Free_Trans.resume(dictFunctor1)(dictMonadRec)(v.value1)))))(function (v1) { + if (v1 instanceof Data_Either.Left) { + return Control_Applicative.pure((dictMonadRec.Monad0()).Applicative0())(new Data_Either.Left(v1.value0)); + }; + if (v1 instanceof Data_Either.Right) { + return Control_Applicative.pure((dictMonadRec.Monad0()).Applicative0())(new Data_Either.Right(Data_Functor.map(dictFunctor2)(function (t) { + return Control_Monad_Free_Trans.freeT(function (v2) { + return go(t); + }); + })(v1.value0))); + }; + throw new Error("Failed pattern match at Control.Coroutine (line 79, column 5 - line 81, column 63): " + [ v1.constructor.name ]); + }); + }; + return Control_Monad_Free_Trans.freeT(function (v) { + return go(new Data_Tuple.Tuple(fs, gs)); + }); + }; + }; + }; + }; + }; + }; + }; + }; + var functorAwait = new Data_Functor.Functor(Data_Profunctor.rmap(profunctorAwait)); + var bifunctorEmit = new Data_Bifunctor.Bifunctor(function (f) { + return function (g) { + return function (v) { + return new Emit(f(v.value0), g(v.value1)); + }; + }; + }); + var functorEmit = new Data_Functor.Functor(Data_Bifunctor.rmap(bifunctorEmit)); + var connect = function (dictMonadRec) { + return function (dictParallel) { + return fuseWith(functorEmit)(functorAwait)(Data_Identity.functorIdentity)(dictMonadRec)(dictParallel)(function (f) { + return function (v) { + return function (v1) { + return f(v.value1)(v1(v.value0)); + }; + }; + }); + }; + }; + var emit = function (dictMonad) { + return function (o) { + return Control_Monad_Free_Trans.liftFreeT(functorEmit)(dictMonad)(new Emit(o, Data_Unit.unit)); + }; + }; + var producer = function (dictMonad) { + return function (recv) { + return loop(functorEmit)(dictMonad)(Control_Bind.bind(Control_Monad_Free_Trans.bindFreeT(functorEmit)(dictMonad))(Control_Monad_Trans_Class.lift(Control_Monad_Free_Trans.monadTransFreeT(functorEmit))(dictMonad)(recv))(function (v) { + if (v instanceof Data_Either.Left) { + return Data_Functor.voidLeft(Control_Monad_Free_Trans.functorFreeT(functorEmit)(((dictMonad.Bind1()).Apply0()).Functor0()))(emit(dictMonad)(v.value0))(Data_Maybe.Nothing.value); + }; + if (v instanceof Data_Either.Right) { + return Control_Applicative.pure(Control_Monad_Free_Trans.applicativeFreeT(functorEmit)(dictMonad))(new Data_Maybe.Just(v.value0)); + }; + throw new Error("Failed pattern match at Control.Coroutine (line 125, column 3 - line 127, column 29): " + [ v.constructor.name ]); + })); + }; + }; + var pullFrom = function (dictMonadRec) { + return fuseWithL(functorAwait)(functorEmit)(Data_Identity.functorIdentity)(dictMonadRec)(function (f) { + return function (v) { + return function (v1) { + return Control_Applicative.pure(Data_Identity.applicativeIdentity)(f(v(v1.value0))(v1.value1)); + }; + }; + }); + }; + var $$await = function (dictMonad) { + return Control_Monad_Free_Trans.liftFreeT(functorAwait)(dictMonad)(Control_Category.identity(Control_Category.categoryFn)); + }; + exports["loop"] = loop; + exports["runProcess"] = runProcess; + exports["fuseWith"] = fuseWith; + exports["fuseWithL"] = fuseWithL; + exports["Emit"] = Emit; + exports["emit"] = emit; + exports["producer"] = producer; + exports["await"] = $$await; + exports["connect"] = connect; + exports["pullFrom"] = pullFrom; + exports["bifunctorEmit"] = bifunctorEmit; + exports["functorEmit"] = functorEmit; + exports["profunctorAwait"] = profunctorAwait; + exports["functorAwait"] = functorAwait; +})(PS["Control.Coroutine"] = PS["Control.Coroutine"] || {}); +(function(exports) { + /* globals exports, setTimeout */ + "use strict"; + + var AVar = function () { + + function MutableQueue () { + this.head = null; + this.last = null; + this.size = 0; + } + + function MutableCell (queue, value) { + this.queue = queue; + this.value = value; + this.next = null; + this.prev = null; + } + + function AVar (value) { + this.draining = false; + this.error = null; + this.value = value; + this.takes = new MutableQueue(); + this.reads = new MutableQueue(); + this.puts = new MutableQueue(); + } + + var EMPTY = {}; + + function runEff(eff) { + try { + eff(); + } catch (error) { + setTimeout(function () { + throw error; + }, 0); + } + } + + function putLast (queue, value) { + var cell = new MutableCell(queue, value); + switch (queue.size) { + case 0: + queue.head = cell; + break; + case 1: + cell.prev = queue.head; + queue.head.next = cell; + queue.last = cell; + break; + default: + cell.prev = queue.last; + queue.last.next = cell; + queue.last = cell; + } + queue.size++; + return cell; + } + + function takeLast (queue) { + var cell; + switch (queue.size) { + case 0: + return null; + case 1: + cell = queue.head; + queue.head = null; + break; + case 2: + cell = queue.last; + queue.head.next = null; + queue.last = null; + break; + default: + cell = queue.last; + queue.last = cell.prev; + queue.last.next = null; + } + cell.prev = null; + cell.queue = null; + queue.size--; + return cell.value; + } + + function takeHead (queue) { + var cell; + switch (queue.size) { + case 0: + return null; + case 1: + cell = queue.head; + queue.head = null; + break; + case 2: + cell = queue.head; + queue.last.prev = null; + queue.head = queue.last; + queue.last = null; + break; + default: + cell = queue.head; + queue.head = cell.next; + queue.head.prev = null; + } + cell.next = null; + cell.queue = null; + queue.size--; + return cell.value; + } + + function deleteCell (cell) { + if (cell.queue === null) { + return; + } + if (cell.queue.last === cell) { + takeLast(cell.queue); + return; + } + if (cell.queue.head === cell) { + takeHead(cell.queue); + return; + } + if (cell.prev) { + cell.prev.next = cell.next; + } + if (cell.next) { + cell.next.prev = cell.prev; + } + cell.queue.size--; + cell.queue = null; + cell.value = null; + cell.next = null; + cell.prev = null; + } + + function drainVar (util, avar) { + if (avar.draining) { + return; + } + + var ps = avar.puts; + var ts = avar.takes; + var rs = avar.reads; + var p, r, t, value, rsize; + + avar.draining = true; + + while (1) { // eslint-disable-line no-constant-condition + p = null; + r = null; + t = null; + value = avar.value; + rsize = rs.size; + + if (avar.error !== null) { + value = util.left(avar.error); + while (p = takeHead(ps)) { // eslint-disable-line no-cond-assign + runEff(p.cb(value)); + } + while (r = takeHead(rs)) { // eslint-disable-line no-cond-assign + runEff(r(value)); + } + while (t = takeHead(ts)) { // eslint-disable-line no-cond-assign + runEff(t(value)); + } + break; + } + + // Process the next put. We do not immediately invoke the callback + // because we want to preserve ordering. If there are takes/reads + // we want to run those first. + if (value === EMPTY && (p = takeHead(ps))) { + avar.value = value = p.value; + } + + if (value !== EMPTY) { + // We go ahead and queue up the next take for the same reasons as + // above. Invoking the read callbacks can affect the mutable queue. + t = takeHead(ts); + // We only want to process the reads queued up before running these + // callbacks so we guard on rsize. + while (rsize-- && (r = takeHead(rs))) { + runEff(r(util.right(value))); + } + if (t !== null) { + avar.value = EMPTY; + runEff(t(util.right(value))); + } + } + + if (p !== null) { + runEff(p.cb(util.right(void 0))); + } + + // Callbacks could have queued up more items so we need to guard on the + // actual mutable properties. + if (avar.value === EMPTY && ps.size === 0 || avar.value !== EMPTY && ts.size === 0) { + break; + } + } + avar.draining = false; + } + + AVar.EMPTY = EMPTY; + AVar.putLast = putLast; + AVar.takeLast = takeLast; + AVar.takeHead = takeHead; + AVar.deleteCell = deleteCell; + AVar.drainVar = drainVar; + + return AVar; + }(); + + exports.empty = function () { + return new AVar(AVar.EMPTY); + }; + + exports._killVar = function (util, error, avar) { + return function () { + if (avar.error === null) { + avar.error = error; + avar.value = AVar.EMPTY; + AVar.drainVar(util, avar); + } + }; + }; + + exports._putVar = function (util, value, avar, cb) { + return function () { + var cell = AVar.putLast(avar.puts, { cb: cb, value: value }); + AVar.drainVar(util, avar); + return function () { + AVar.deleteCell(cell); + }; + }; + }; + + exports._takeVar = function (util, avar, cb) { + return function () { + var cell = AVar.putLast(avar.takes, cb); + AVar.drainVar(util, avar); + return function () { + AVar.deleteCell(cell); + }; + }; + }; +})(PS["Effect.AVar"] = PS["Effect.AVar"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Effect.AVar"]; + var Data_Either = PS["Data.Either"]; + var Data_Function_Uncurried = PS["Data.Function.Uncurried"]; + var Data_Maybe = PS["Data.Maybe"]; + var Effect = PS["Effect"]; + var Effect_Exception = PS["Effect.Exception"]; + var Prelude = PS["Prelude"]; + var Killed = (function () { + function Killed(value0) { + this.value0 = value0; + }; + Killed.create = function (value0) { + return new Killed(value0); + }; + return Killed; + })(); + var Filled = (function () { + function Filled(value0) { + this.value0 = value0; + }; + Filled.create = function (value0) { + return new Filled(value0); + }; + return Filled; + })(); + var Empty = (function () { + function Empty() { + + }; + Empty.value = new Empty(); + return Empty; + })(); + var ffiUtil = { + left: Data_Either.Left.create, + right: Data_Either.Right.create, + nothing: Data_Maybe.Nothing.value, + just: Data_Maybe.Just.create, + killed: Killed.create, + filled: Filled.create, + empty: Empty.value + }; + var kill = function (err) { + return function (avar) { + return $foreign["_killVar"](ffiUtil, err, avar); + }; + }; + var put = function (value) { + return function (avar) { + return function (cb) { + return $foreign["_putVar"](ffiUtil, value, avar, cb); + }; + }; + }; + var take = function (avar) { + return function (cb) { + return $foreign["_takeVar"](ffiUtil, avar, cb); + }; + }; + exports["Killed"] = Killed; + exports["Filled"] = Filled; + exports["Empty"] = Empty; + exports["take"] = take; + exports["put"] = put; + exports["kill"] = kill; + exports["empty"] = $foreign.empty; +})(PS["Effect.AVar"] = PS["Effect.AVar"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Maybe = PS["Data.Maybe"]; + var Effect = PS["Effect"]; + var Effect_AVar = PS["Effect.AVar"]; + var Effect_Aff = PS["Effect.Aff"]; + var Effect_Class = PS["Effect.Class"]; + var Effect_Exception = PS["Effect.Exception"]; + var Prelude = PS["Prelude"]; + var take = function (avar) { + return Effect_Aff.makeAff(function (k) { + return function __do() { + var v = Effect_AVar.take(avar)(k)(); + return Effect_Aff.effectCanceler(v); + }; + }); + }; + var put = function (value) { + return function (avar) { + return Effect_Aff.makeAff(function (k) { + return function __do() { + var v = Effect_AVar.put(value)(avar)(k)(); + return Effect_Aff.effectCanceler(v); + }; + }); + }; + }; + var kill = function (error) { + return function ($11) { + return Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_AVar.kill(error)($11)); + }; + }; + var empty = Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_AVar.empty); + exports["empty"] = empty; + exports["take"] = take; + exports["put"] = put; + exports["kill"] = kill; +})(PS["Effect.Aff.AVar"] = PS["Effect.Aff.AVar"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Coroutine = PS["Control.Coroutine"]; + var Control_Monad_Free_Trans = PS["Control.Monad.Free.Trans"]; + var Control_Monad_Rec_Class = PS["Control.Monad.Rec.Class"]; + var Control_Monad_Trans_Class = PS["Control.Monad.Trans.Class"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Bifunctor = PS["Data.Bifunctor"]; + var Data_Either = PS["Data.Either"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ordering = PS["Data.Ordering"]; + var Data_Unit = PS["Data.Unit"]; + var Effect = PS["Effect"]; + var Effect_Aff = PS["Effect.Aff"]; + var Effect_Aff_AVar = PS["Effect.Aff.AVar"]; + var Effect_Aff_Class = PS["Effect.Aff.Class"]; + var Effect_Class = PS["Effect.Class"]; + var Effect_Exception = PS["Effect.Exception"]; + var Prelude = PS["Prelude"]; + var Listening = (function () { + function Listening() { + + }; + Listening.value = new Listening(); + return Listening; + })(); + var Done = (function () { + function Done() { + + }; + Done.value = new Done(); + return Done; + })(); + var unEventSource = function (v) { + return v; + }; + var eqSubscribeStatus = new Data_Eq.Eq(function (x) { + return function (y) { + if (x instanceof Listening && y instanceof Listening) { + return true; + }; + if (x instanceof Done && y instanceof Done) { + return true; + }; + return false; + }; + }); + exports["Listening"] = Listening; + exports["Done"] = Done; + exports["unEventSource"] = unEventSource; + exports["eqSubscribeStatus"] = eqSubscribeStatus; +})(PS["Halogen.Query.EventSource"] = PS["Halogen.Query.EventSource"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Category = PS["Control.Category"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Effect_Aff = PS["Effect.Aff"]; + var Effect_Exception = PS["Effect.Exception"]; + var Prelude = PS["Prelude"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var unFork = Unsafe_Coerce.unsafeCoerce; + exports["unFork"] = unFork; +})(PS["Halogen.Query.ForkF"] = PS["Halogen.Query.ForkF"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Applicative_Free = PS["Control.Applicative.Free"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Category = PS["Control.Category"]; + var Control_Monad = PS["Control.Monad"]; + var Control_Monad_Free = PS["Control.Monad.Free"]; + var Control_Monad_Reader_Class = PS["Control.Monad.Reader.Class"]; + var Control_Monad_Rec_Class = PS["Control.Monad.Rec.Class"]; + var Control_Monad_State_Class = PS["Control.Monad.State.Class"]; + var Control_Monad_Trans_Class = PS["Control.Monad.Trans.Class"]; + var Control_Monad_Writer_Class = PS["Control.Monad.Writer.Class"]; + var Control_Parallel_Class = PS["Control.Parallel.Class"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Bifunctor = PS["Data.Bifunctor"]; + var Data_Coyoneda = PS["Data.Coyoneda"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_List = PS["Data.List"]; + var Data_List_Types = PS["Data.List.Types"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unit = PS["Data.Unit"]; + var Effect_Aff_Class = PS["Effect.Aff.Class"]; + var Effect_Class = PS["Effect.Class"]; + var Effect_Exception = PS["Effect.Exception"]; + var Halogen_Query_EventSource = PS["Halogen.Query.EventSource"]; + var Halogen_Query_ForkF = PS["Halogen.Query.ForkF"]; + var Halogen_Query_InputF = PS["Halogen.Query.InputF"]; + var Prelude = PS["Prelude"]; + var Web_DOM = PS["Web.DOM"]; + var HalogenM = function (x) { + return x; + }; + var State = (function () { + function State(value0) { + this.value0 = value0; + }; + State.create = function (value0) { + return new State(value0); + }; + return State; + })(); + var Subscribe = (function () { + function Subscribe(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + Subscribe.create = function (value0) { + return function (value1) { + return new Subscribe(value0, value1); + }; + }; + return Subscribe; + })(); + var Lift = (function () { + function Lift(value0) { + this.value0 = value0; + }; + Lift.create = function (value0) { + return new Lift(value0); + }; + return Lift; + })(); + var Halt = (function () { + function Halt(value0) { + this.value0 = value0; + }; + Halt.create = function (value0) { + return new Halt(value0); + }; + return Halt; + })(); + var GetSlots = (function () { + function GetSlots(value0) { + this.value0 = value0; + }; + GetSlots.create = function (value0) { + return new GetSlots(value0); + }; + return GetSlots; + })(); + var CheckSlot = (function () { + function CheckSlot(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + CheckSlot.create = function (value0) { + return function (value1) { + return new CheckSlot(value0, value1); + }; + }; + return CheckSlot; + })(); + var ChildQuery = (function () { + function ChildQuery(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + ChildQuery.create = function (value0) { + return function (value1) { + return new ChildQuery(value0, value1); + }; + }; + return ChildQuery; + })(); + var Raise = (function () { + function Raise(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + Raise.create = function (value0) { + return function (value1) { + return new Raise(value0, value1); + }; + }; + return Raise; + })(); + var Par = (function () { + function Par(value0) { + this.value0 = value0; + }; + Par.create = function (value0) { + return new Par(value0); + }; + return Par; + })(); + var Fork = (function () { + function Fork(value0) { + this.value0 = value0; + }; + Fork.create = function (value0) { + return new Fork(value0); + }; + return Fork; + })(); + var GetRef = (function () { + function GetRef(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + GetRef.create = function (value0) { + return function (value1) { + return new GetRef(value0, value1); + }; + }; + return GetRef; + })(); + var raise = function (o) { + return HalogenM(Control_Monad_Free.liftF(new Raise(o, Data_Unit.unit))); + }; + var getRef = function (p) { + return HalogenM(Control_Monad_Free.liftF(new GetRef(p, Control_Category.identity(Control_Category.categoryFn)))); + }; + var functorHalogenM = new Data_Functor.Functor(function (f) { + return function (v) { + return Data_Functor.map(Control_Monad_Free.freeFunctor)(f)(v); + }; + }); + var applyHalogenM = new Control_Apply.Apply(function () { + return functorHalogenM; + }, function (v) { + return function (v1) { + return Control_Apply.apply(Control_Monad_Free.freeApply)(v)(v1); + }; + }); + var bindHalogenM = new Control_Bind.Bind(function () { + return applyHalogenM; + }, function (v) { + return function (f) { + return Control_Bind.bind(Control_Monad_Free.freeBind)(v)(function (x) { + var v1 = f(x); + return v1; + }); + }; + }); + var applicativeHalogenM = new Control_Applicative.Applicative(function () { + return applyHalogenM; + }, function (a) { + return Control_Applicative.pure(Control_Monad_Free.freeApplicative)(a); + }); + var monadHalogenM = new Control_Monad.Monad(function () { + return applicativeHalogenM; + }, function () { + return bindHalogenM; + }); + var monadEffectHalogenM = function (dictMonadEffect) { + return new Effect_Class.MonadEffect(function () { + return monadHalogenM; + }, function (eff) { + return HalogenM(Control_Monad_Free.liftF(Lift.create(Effect_Class.liftEffect(dictMonadEffect)(eff)))); + }); + }; + var monadAffHalogenM = function (dictMonadAff) { + return new Effect_Aff_Class.MonadAff(function () { + return monadEffectHalogenM(dictMonadAff.MonadEffect0()); + }, function (aff) { + return HalogenM(Control_Monad_Free.liftF(Lift.create(Effect_Aff_Class.liftAff(dictMonadAff)(aff)))); + }); + }; + var monadStateHalogenM = new Control_Monad_State_Class.MonadState(function () { + return monadHalogenM; + }, function ($180) { + return HalogenM(Control_Monad_Free.liftF(State.create($180))); + }); + exports["State"] = State; + exports["Subscribe"] = Subscribe; + exports["Lift"] = Lift; + exports["Halt"] = Halt; + exports["GetSlots"] = GetSlots; + exports["CheckSlot"] = CheckSlot; + exports["ChildQuery"] = ChildQuery; + exports["Raise"] = Raise; + exports["Par"] = Par; + exports["Fork"] = Fork; + exports["GetRef"] = GetRef; + exports["HalogenM"] = HalogenM; + exports["getRef"] = getRef; + exports["raise"] = raise; + exports["functorHalogenM"] = functorHalogenM; + exports["applyHalogenM"] = applyHalogenM; + exports["applicativeHalogenM"] = applicativeHalogenM; + exports["bindHalogenM"] = bindHalogenM; + exports["monadHalogenM"] = monadHalogenM; + exports["monadEffectHalogenM"] = monadEffectHalogenM; + exports["monadAffHalogenM"] = monadAffHalogenM; + exports["monadStateHalogenM"] = monadStateHalogenM; +})(PS["Halogen.Query.HalogenM"] = PS["Halogen.Query.HalogenM"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Bifunctor = PS["Data.Bifunctor"]; + var Data_Const = PS["Data.Const"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Ord = PS["Data.Ord"]; + var Halogen_Data_OrdBox = PS["Halogen.Data.OrdBox"]; + var Halogen_HTML_Core = PS["Halogen.HTML.Core"]; + var Halogen_Query_HalogenM = PS["Halogen.Query.HalogenM"]; + var Prelude = PS["Prelude"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var ComponentSlot = (function () { + function ComponentSlot(value0, value1, value2, value3, value4, value5) { + this.value0 = value0; + this.value1 = value1; + this.value2 = value2; + this.value3 = value3; + this.value4 = value4; + this.value5 = value5; + }; + ComponentSlot.create = function (value0) { + return function (value1) { + return function (value2) { + return function (value3) { + return function (value4) { + return function (value5) { + return new ComponentSlot(value0, value1, value2, value3, value4, value5); + }; + }; + }; + }; + }; + }; + return ComponentSlot; + })(); + var unComponentSlot = function (f) { + return function (cs) { + return f(cs.value0)(cs.value1)(cs.value2)(cs.value3)(cs.value4)(cs.value5); + }; + }; + var unComponent = Unsafe_Coerce.unsafeCoerce; + var mkComponentSlot = ComponentSlot.create; + var mkComponent = Unsafe_Coerce.unsafeCoerce; + var parentComponent = function (dictOrd) { + return function (spec) { + return mkComponent({ + initialState: spec.initialState, + render: spec.render, + "eval": spec["eval"], + receiver: spec.receiver, + initializer: Data_Maybe.Nothing.value, + finalizer: Data_Maybe.Nothing.value, + mkOrdBox: Halogen_Data_OrdBox.mkOrdBox(dictOrd) + }); + }; + }; + var lifecycleComponent = function (dictBifunctor) { + return function (spec) { + return mkComponent({ + initialState: spec.initialState, + render: spec.render, + "eval": spec["eval"], + receiver: spec.receiver, + initializer: spec.initializer, + finalizer: spec.finalizer, + mkOrdBox: Halogen_Data_OrdBox.mkOrdBox(Data_Ord.ordVoid) + }); + }; + }; + var component = function (dictBifunctor) { + return function (spec) { + return lifecycleComponent(dictBifunctor)({ + initialState: spec.initialState, + render: spec.render, + "eval": spec["eval"], + receiver: spec.receiver, + initializer: Data_Maybe.Nothing.value, + finalizer: Data_Maybe.Nothing.value + }); + }; + }; + exports["mkComponent"] = mkComponent; + exports["unComponent"] = unComponent; + exports["component"] = component; + exports["lifecycleComponent"] = lifecycleComponent; + exports["parentComponent"] = parentComponent; + exports["mkComponentSlot"] = mkComponentSlot; + exports["unComponentSlot"] = unComponentSlot; +})(PS["Halogen.Component"] = PS["Halogen.Component"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var DOM_HTML_Indexed = PS["DOM.HTML.Indexed"]; + var DOM_HTML_Indexed_ButtonType = PS["DOM.HTML.Indexed.ButtonType"]; + var DOM_HTML_Indexed_FormMethod = PS["DOM.HTML.Indexed.FormMethod"]; + var DOM_HTML_Indexed_InputType = PS["DOM.HTML.Indexed.InputType"]; + var DOM_HTML_Indexed_MenuType = PS["DOM.HTML.Indexed.MenuType"]; + var DOM_HTML_Indexed_MenuitemType = PS["DOM.HTML.Indexed.MenuitemType"]; + var DOM_HTML_Indexed_OnOff = PS["DOM.HTML.Indexed.OnOff"]; + var DOM_HTML_Indexed_OrderedListType = PS["DOM.HTML.Indexed.OrderedListType"]; + var DOM_HTML_Indexed_PreloadValue = PS["DOM.HTML.Indexed.PreloadValue"]; + var DOM_HTML_Indexed_StepValue = PS["DOM.HTML.Indexed.StepValue"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_MediaType = PS["Data.MediaType"]; + var Data_Newtype = PS["Data.Newtype"]; + var Data_String = PS["Data.String"]; + var Data_String_Common = PS["Data.String.Common"]; + var Data_Unit = PS["Data.Unit"]; + var Halogen_HTML_Core = PS["Halogen.HTML.Core"]; + var Halogen_Query_InputF = PS["Halogen.Query.InputF"]; + var Halogen_VDom_DOM_Prop = PS["Halogen.VDom.DOM.Prop"]; + var Prelude = PS["Prelude"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var Web_DOM_Element = PS["Web.DOM.Element"]; + var ref = (function () { + var go = function (p) { + return function (mel) { + return new Data_Maybe.Just(new Halogen_Query_InputF.RefUpdate(p, mel, Data_Unit.unit)); + }; + }; + return function ($10) { + return Halogen_HTML_Core.ref(go($10)); + }; + })(); + var prop = function (dictIsProp) { + return Halogen_HTML_Core.prop(dictIsProp); + }; + var required = prop(Halogen_HTML_Core.booleanIsProp)("required"); + var rows = prop(Halogen_HTML_Core.intIsProp)("rows"); + var target = prop(Halogen_HTML_Core.stringIsProp)("target"); + var title = prop(Halogen_HTML_Core.stringIsProp)("title"); + var type_ = function (dictIsProp) { + return prop(dictIsProp)("type"); + }; + var value = prop(Halogen_HTML_Core.stringIsProp)("value"); + var name = prop(Halogen_HTML_Core.stringIsProp)("name"); + var id_ = prop(Halogen_HTML_Core.stringIsProp)("id"); + var href = prop(Halogen_HTML_Core.stringIsProp)("href"); + var $$for = prop(Halogen_HTML_Core.stringIsProp)("htmlFor"); + var class_ = function ($13) { + return prop(Halogen_HTML_Core.stringIsProp)("className")(Data_Newtype.unwrap(Halogen_HTML_Core.newtypeClassName)($13)); + }; + var checked = prop(Halogen_HTML_Core.booleanIsProp)("checked"); + var autofocus = prop(Halogen_HTML_Core.booleanIsProp)("autofocus"); + var autocomplete = function ($14) { + return prop(Halogen_HTML_Core.onOffIsProp)("autocomplete")((function (b) { + if (b) { + return DOM_HTML_Indexed_OnOff.On.value; + }; + return DOM_HTML_Indexed_OnOff.Off.value; + })($14)); + }; + var attr = Halogen_HTML_Core.attr(Data_Maybe.Nothing.value); + exports["prop"] = prop; + exports["attr"] = attr; + exports["ref"] = ref; + exports["class_"] = class_; + exports["rows"] = rows; + exports["for"] = $$for; + exports["href"] = href; + exports["id_"] = id_; + exports["name"] = name; + exports["target"] = target; + exports["title"] = title; + exports["type_"] = type_; + exports["value"] = value; + exports["required"] = required; + exports["checked"] = checked; + exports["autocomplete"] = autocomplete; + exports["autofocus"] = autofocus; +})(PS["Halogen.HTML.Properties"] = PS["Halogen.HTML.Properties"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var DOM_HTML_Indexed = PS["DOM.HTML.Indexed"]; + var Data_Function = PS["Data.Function"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Tuple = PS["Data.Tuple"]; + var Halogen_HTML_Core = PS["Halogen.HTML.Core"]; + var Halogen_HTML_Properties = PS["Halogen.HTML.Properties"]; + var Halogen_Query_InputF = PS["Halogen.Query.InputF"]; + var Halogen_VDom = PS["Halogen.VDom"]; + var Halogen_VDom_Types = PS["Halogen.VDom.Types"]; + var Prelude = PS["Prelude"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var element = Halogen_HTML_Core.element(Data_Maybe.Nothing.value); + var form = element("form"); + var input = function (props) { + return element("input")(props)([ ]); + }; + var label = element("label"); + var p = element("p"); + var span = element("span"); + var table = element("table"); + var tbody = element("tbody"); + var tbody_ = tbody([ ]); + var td = element("td"); + var td_ = td([ ]); + var textarea = function (es) { + return element("textarea")(es)([ ]); + }; + var tr = element("tr"); + var tr_ = tr([ ]); + var div = element("div"); + var div_ = div([ ]); + var button = element("button"); + var br = function (props) { + return element("br")(props)([ ]); + }; + var br_ = br([ ]); + var a = element("a"); + exports["element"] = element; + exports["a"] = a; + exports["br"] = br; + exports["br_"] = br_; + exports["button"] = button; + exports["div"] = div; + exports["div_"] = div_; + exports["form"] = form; + exports["input"] = input; + exports["label"] = label; + exports["p"] = p; + exports["span"] = span; + exports["table"] = table; + exports["tbody"] = tbody; + exports["tbody_"] = tbody_; + exports["td"] = td; + exports["td_"] = td_; + exports["textarea"] = textarea; + exports["tr"] = tr; + exports["tr_"] = tr_; +})(PS["Halogen.HTML.Elements"] = PS["Halogen.HTML.Elements"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Maybe = PS["Data.Maybe"]; + var Halogen_Component = PS["Halogen.Component"]; + var Halogen_Component_ChildPath = PS["Halogen.Component.ChildPath"]; + var Halogen_HTML_Core = PS["Halogen.HTML.Core"]; + var Halogen_HTML_Elements = PS["Halogen.HTML.Elements"]; + var Halogen_HTML_Properties = PS["Halogen.HTML.Properties"]; + var Prelude = PS["Prelude"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var slot = function (p) { + return function (component) { + return function (input) { + return function (outputQuery) { + var f = Halogen_Component.unComponent(function (v) { + return v.receiver; + })(component); + return Halogen_HTML_Core.slot(Halogen_Component.mkComponentSlot(p)(component)(input)(f)(outputQuery)(Data_Maybe.Just.create)); + }; + }; + }; + }; + exports["slot"] = slot; +})(PS["Halogen.HTML"] = PS["Halogen.HTML"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Apply = PS["Control.Apply"]; + var Control_Category = PS["Control.Category"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_FoldableWithIndex = PS["Data.FoldableWithIndex"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_FunctorWithIndex = PS["Data.FunctorWithIndex"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_List = PS["Data.List"]; + var Data_List_Lazy = PS["Data.List.Lazy"]; + var Data_List_Lazy_Types = PS["Data.List.Lazy.Types"]; + var Data_List_Types = PS["Data.List.Types"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Monoid = PS["Data.Monoid"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ordering = PS["Data.Ordering"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Show = PS["Data.Show"]; + var Data_Traversable = PS["Data.Traversable"]; + var Data_TraversableWithIndex = PS["Data.TraversableWithIndex"]; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unfoldable = PS["Data.Unfoldable"]; + var Partial_Unsafe = PS["Partial.Unsafe"]; + var Prelude = PS["Prelude"]; + var Leaf = (function () { + function Leaf() { + + }; + Leaf.value = new Leaf(); + return Leaf; + })(); + var Two = (function () { + function Two(value0, value1, value2, value3) { + this.value0 = value0; + this.value1 = value1; + this.value2 = value2; + this.value3 = value3; + }; + Two.create = function (value0) { + return function (value1) { + return function (value2) { + return function (value3) { + return new Two(value0, value1, value2, value3); + }; + }; + }; + }; + return Two; + })(); + var Three = (function () { + function Three(value0, value1, value2, value3, value4, value5, value6) { + this.value0 = value0; + this.value1 = value1; + this.value2 = value2; + this.value3 = value3; + this.value4 = value4; + this.value5 = value5; + this.value6 = value6; + }; + Three.create = function (value0) { + return function (value1) { + return function (value2) { + return function (value3) { + return function (value4) { + return function (value5) { + return function (value6) { + return new Three(value0, value1, value2, value3, value4, value5, value6); + }; + }; + }; + }; + }; + }; + }; + return Three; + })(); + var TwoLeft = (function () { + function TwoLeft(value0, value1, value2) { + this.value0 = value0; + this.value1 = value1; + this.value2 = value2; + }; + TwoLeft.create = function (value0) { + return function (value1) { + return function (value2) { + return new TwoLeft(value0, value1, value2); + }; + }; + }; + return TwoLeft; + })(); + var TwoRight = (function () { + function TwoRight(value0, value1, value2) { + this.value0 = value0; + this.value1 = value1; + this.value2 = value2; + }; + TwoRight.create = function (value0) { + return function (value1) { + return function (value2) { + return new TwoRight(value0, value1, value2); + }; + }; + }; + return TwoRight; + })(); + var ThreeLeft = (function () { + function ThreeLeft(value0, value1, value2, value3, value4, value5) { + this.value0 = value0; + this.value1 = value1; + this.value2 = value2; + this.value3 = value3; + this.value4 = value4; + this.value5 = value5; + }; + ThreeLeft.create = function (value0) { + return function (value1) { + return function (value2) { + return function (value3) { + return function (value4) { + return function (value5) { + return new ThreeLeft(value0, value1, value2, value3, value4, value5); + }; + }; + }; + }; + }; + }; + return ThreeLeft; + })(); + var ThreeMiddle = (function () { + function ThreeMiddle(value0, value1, value2, value3, value4, value5) { + this.value0 = value0; + this.value1 = value1; + this.value2 = value2; + this.value3 = value3; + this.value4 = value4; + this.value5 = value5; + }; + ThreeMiddle.create = function (value0) { + return function (value1) { + return function (value2) { + return function (value3) { + return function (value4) { + return function (value5) { + return new ThreeMiddle(value0, value1, value2, value3, value4, value5); + }; + }; + }; + }; + }; + }; + return ThreeMiddle; + })(); + var ThreeRight = (function () { + function ThreeRight(value0, value1, value2, value3, value4, value5) { + this.value0 = value0; + this.value1 = value1; + this.value2 = value2; + this.value3 = value3; + this.value4 = value4; + this.value5 = value5; + }; + ThreeRight.create = function (value0) { + return function (value1) { + return function (value2) { + return function (value3) { + return function (value4) { + return function (value5) { + return new ThreeRight(value0, value1, value2, value3, value4, value5); + }; + }; + }; + }; + }; + }; + return ThreeRight; + })(); + var KickUp = (function () { + function KickUp(value0, value1, value2, value3) { + this.value0 = value0; + this.value1 = value1; + this.value2 = value2; + this.value3 = value3; + }; + KickUp.create = function (value0) { + return function (value1) { + return function (value2) { + return function (value3) { + return new KickUp(value0, value1, value2, value3); + }; + }; + }; + }; + return KickUp; + })(); + var values = function (v) { + if (v instanceof Leaf) { + return Data_List_Types.Nil.value; + }; + if (v instanceof Two) { + return Data_Semigroup.append(Data_List_Types.semigroupList)(values(v.value0))(Data_Semigroup.append(Data_List_Types.semigroupList)(Control_Applicative.pure(Data_List_Types.applicativeList)(v.value2))(values(v.value3))); + }; + if (v instanceof Three) { + return Data_Semigroup.append(Data_List_Types.semigroupList)(values(v.value0))(Data_Semigroup.append(Data_List_Types.semigroupList)(Control_Applicative.pure(Data_List_Types.applicativeList)(v.value2))(Data_Semigroup.append(Data_List_Types.semigroupList)(values(v.value3))(Data_Semigroup.append(Data_List_Types.semigroupList)(Control_Applicative.pure(Data_List_Types.applicativeList)(v.value5))(values(v.value6))))); + }; + throw new Error("Failed pattern match at Data.Map.Internal (line 602, column 1 - line 602, column 40): " + [ v.constructor.name ]); + }; + var lookup = function (dictOrd) { + return function (k) { + var comp = Data_Ord.compare(dictOrd); + var go = function ($copy_v) { + var $tco_done = false; + var $tco_result; + function $tco_loop(v) { + if (v instanceof Leaf) { + $tco_done = true; + return Data_Maybe.Nothing.value; + }; + if (v instanceof Two) { + var v2 = comp(k)(v.value1); + if (v2 instanceof Data_Ordering.EQ) { + $tco_done = true; + return new Data_Maybe.Just(v.value2); + }; + if (v2 instanceof Data_Ordering.LT) { + $copy_v = v.value0; + return; + }; + $copy_v = v.value3; + return; + }; + if (v instanceof Three) { + var v3 = comp(k)(v.value1); + if (v3 instanceof Data_Ordering.EQ) { + $tco_done = true; + return new Data_Maybe.Just(v.value2); + }; + var v4 = comp(k)(v.value4); + if (v4 instanceof Data_Ordering.EQ) { + $tco_done = true; + return new Data_Maybe.Just(v.value5); + }; + if (v3 instanceof Data_Ordering.LT) { + $copy_v = v.value0; + return; + }; + if (v4 instanceof Data_Ordering.GT) { + $copy_v = v.value6; + return; + }; + $copy_v = v.value3; + return; + }; + throw new Error("Failed pattern match at Data.Map.Internal (line 197, column 5 - line 197, column 22): " + [ v.constructor.name ]); + }; + while (!$tco_done) { + $tco_result = $tco_loop($copy_v); + }; + return $tco_result; + }; + return go; + }; + }; + var member = function (dictOrd) { + return function (k) { + return function (m) { + return Data_Maybe.isJust(lookup(dictOrd)(k)(m)); + }; + }; + }; + var keys = function (v) { + if (v instanceof Leaf) { + return Data_List_Types.Nil.value; + }; + if (v instanceof Two) { + return Data_Semigroup.append(Data_List_Types.semigroupList)(keys(v.value0))(Data_Semigroup.append(Data_List_Types.semigroupList)(Control_Applicative.pure(Data_List_Types.applicativeList)(v.value1))(keys(v.value3))); + }; + if (v instanceof Three) { + return Data_Semigroup.append(Data_List_Types.semigroupList)(keys(v.value0))(Data_Semigroup.append(Data_List_Types.semigroupList)(Control_Applicative.pure(Data_List_Types.applicativeList)(v.value1))(Data_Semigroup.append(Data_List_Types.semigroupList)(keys(v.value3))(Data_Semigroup.append(Data_List_Types.semigroupList)(Control_Applicative.pure(Data_List_Types.applicativeList)(v.value4))(keys(v.value6))))); + }; + throw new Error("Failed pattern match at Data.Map.Internal (line 596, column 1 - line 596, column 38): " + [ v.constructor.name ]); + }; + var functorMap = new Data_Functor.Functor(function (v) { + return function (v1) { + if (v1 instanceof Leaf) { + return Leaf.value; + }; + if (v1 instanceof Two) { + return new Two(Data_Functor.map(functorMap)(v)(v1.value0), v1.value1, v(v1.value2), Data_Functor.map(functorMap)(v)(v1.value3)); + }; + if (v1 instanceof Three) { + return new Three(Data_Functor.map(functorMap)(v)(v1.value0), v1.value1, v(v1.value2), Data_Functor.map(functorMap)(v)(v1.value3), v1.value4, v(v1.value5), Data_Functor.map(functorMap)(v)(v1.value6)); + }; + throw new Error("Failed pattern match at Data.Map.Internal (line 93, column 1 - line 93, column 39): " + [ v.constructor.name, v1.constructor.name ]); + }; + }); + var fromZipper = function ($copy_dictOrd) { + return function ($copy_v) { + return function ($copy_tree) { + var $tco_var_dictOrd = $copy_dictOrd; + var $tco_var_v = $copy_v; + var $tco_done = false; + var $tco_result; + function $tco_loop(dictOrd, v, tree) { + if (v instanceof Data_List_Types.Nil) { + $tco_done = true; + return tree; + }; + if (v instanceof Data_List_Types.Cons) { + if (v.value0 instanceof TwoLeft) { + $tco_var_dictOrd = dictOrd; + $tco_var_v = v.value1; + $copy_tree = new Two(tree, v.value0.value0, v.value0.value1, v.value0.value2); + return; + }; + if (v.value0 instanceof TwoRight) { + $tco_var_dictOrd = dictOrd; + $tco_var_v = v.value1; + $copy_tree = new Two(v.value0.value0, v.value0.value1, v.value0.value2, tree); + return; + }; + if (v.value0 instanceof ThreeLeft) { + $tco_var_dictOrd = dictOrd; + $tco_var_v = v.value1; + $copy_tree = new Three(tree, v.value0.value0, v.value0.value1, v.value0.value2, v.value0.value3, v.value0.value4, v.value0.value5); + return; + }; + if (v.value0 instanceof ThreeMiddle) { + $tco_var_dictOrd = dictOrd; + $tco_var_v = v.value1; + $copy_tree = new Three(v.value0.value0, v.value0.value1, v.value0.value2, tree, v.value0.value3, v.value0.value4, v.value0.value5); + return; + }; + if (v.value0 instanceof ThreeRight) { + $tco_var_dictOrd = dictOrd; + $tco_var_v = v.value1; + $copy_tree = new Three(v.value0.value0, v.value0.value1, v.value0.value2, v.value0.value3, v.value0.value4, v.value0.value5, tree); + return; + }; + throw new Error("Failed pattern match at Data.Map.Internal (line 415, column 3 - line 420, column 88): " + [ v.value0.constructor.name ]); + }; + throw new Error("Failed pattern match at Data.Map.Internal (line 412, column 1 - line 412, column 80): " + [ v.constructor.name, tree.constructor.name ]); + }; + while (!$tco_done) { + $tco_result = $tco_loop($tco_var_dictOrd, $tco_var_v, $copy_tree); + }; + return $tco_result; + }; + }; + }; + var insert = function (dictOrd) { + return function (k) { + return function (v) { + var up = function ($copy_v1) { + return function ($copy_v2) { + var $tco_var_v1 = $copy_v1; + var $tco_done = false; + var $tco_result; + function $tco_loop(v1, v2) { + if (v1 instanceof Data_List_Types.Nil) { + $tco_done = true; + return new Two(v2.value0, v2.value1, v2.value2, v2.value3); + }; + if (v1 instanceof Data_List_Types.Cons) { + if (v1.value0 instanceof TwoLeft) { + $tco_done = true; + return fromZipper(dictOrd)(v1.value1)(new Three(v2.value0, v2.value1, v2.value2, v2.value3, v1.value0.value0, v1.value0.value1, v1.value0.value2)); + }; + if (v1.value0 instanceof TwoRight) { + $tco_done = true; + return fromZipper(dictOrd)(v1.value1)(new Three(v1.value0.value0, v1.value0.value1, v1.value0.value2, v2.value0, v2.value1, v2.value2, v2.value3)); + }; + if (v1.value0 instanceof ThreeLeft) { + $tco_var_v1 = v1.value1; + $copy_v2 = new KickUp(new Two(v2.value0, v2.value1, v2.value2, v2.value3), v1.value0.value0, v1.value0.value1, new Two(v1.value0.value2, v1.value0.value3, v1.value0.value4, v1.value0.value5)); + return; + }; + if (v1.value0 instanceof ThreeMiddle) { + $tco_var_v1 = v1.value1; + $copy_v2 = new KickUp(new Two(v1.value0.value0, v1.value0.value1, v1.value0.value2, v2.value0), v2.value1, v2.value2, new Two(v2.value3, v1.value0.value3, v1.value0.value4, v1.value0.value5)); + return; + }; + if (v1.value0 instanceof ThreeRight) { + $tco_var_v1 = v1.value1; + $copy_v2 = new KickUp(new Two(v1.value0.value0, v1.value0.value1, v1.value0.value2, v1.value0.value3), v1.value0.value4, v1.value0.value5, new Two(v2.value0, v2.value1, v2.value2, v2.value3)); + return; + }; + throw new Error("Failed pattern match at Data.Map.Internal (line 451, column 5 - line 456, column 108): " + [ v1.value0.constructor.name, v2.constructor.name ]); + }; + throw new Error("Failed pattern match at Data.Map.Internal (line 448, column 3 - line 448, column 56): " + [ v1.constructor.name, v2.constructor.name ]); + }; + while (!$tco_done) { + $tco_result = $tco_loop($tco_var_v1, $copy_v2); + }; + return $tco_result; + }; + }; + var comp = Data_Ord.compare(dictOrd); + var down = function ($copy_ctx) { + return function ($copy_v1) { + var $tco_var_ctx = $copy_ctx; + var $tco_done = false; + var $tco_result; + function $tco_loop(ctx, v1) { + if (v1 instanceof Leaf) { + $tco_done = true; + return up(ctx)(new KickUp(Leaf.value, k, v, Leaf.value)); + }; + if (v1 instanceof Two) { + var v2 = comp(k)(v1.value1); + if (v2 instanceof Data_Ordering.EQ) { + $tco_done = true; + return fromZipper(dictOrd)(ctx)(new Two(v1.value0, k, v, v1.value3)); + }; + if (v2 instanceof Data_Ordering.LT) { + $tco_var_ctx = new Data_List_Types.Cons(new TwoLeft(v1.value1, v1.value2, v1.value3), ctx); + $copy_v1 = v1.value0; + return; + }; + $tco_var_ctx = new Data_List_Types.Cons(new TwoRight(v1.value0, v1.value1, v1.value2), ctx); + $copy_v1 = v1.value3; + return; + }; + if (v1 instanceof Three) { + var v3 = comp(k)(v1.value1); + if (v3 instanceof Data_Ordering.EQ) { + $tco_done = true; + return fromZipper(dictOrd)(ctx)(new Three(v1.value0, k, v, v1.value3, v1.value4, v1.value5, v1.value6)); + }; + var v4 = comp(k)(v1.value4); + if (v4 instanceof Data_Ordering.EQ) { + $tco_done = true; + return fromZipper(dictOrd)(ctx)(new Three(v1.value0, v1.value1, v1.value2, v1.value3, k, v, v1.value6)); + }; + if (v3 instanceof Data_Ordering.LT) { + $tco_var_ctx = new Data_List_Types.Cons(new ThreeLeft(v1.value1, v1.value2, v1.value3, v1.value4, v1.value5, v1.value6), ctx); + $copy_v1 = v1.value0; + return; + }; + if (v3 instanceof Data_Ordering.GT && v4 instanceof Data_Ordering.LT) { + $tco_var_ctx = new Data_List_Types.Cons(new ThreeMiddle(v1.value0, v1.value1, v1.value2, v1.value4, v1.value5, v1.value6), ctx); + $copy_v1 = v1.value3; + return; + }; + $tco_var_ctx = new Data_List_Types.Cons(new ThreeRight(v1.value0, v1.value1, v1.value2, v1.value3, v1.value4, v1.value5), ctx); + $copy_v1 = v1.value6; + return; + }; + throw new Error("Failed pattern match at Data.Map.Internal (line 431, column 3 - line 431, column 55): " + [ ctx.constructor.name, v1.constructor.name ]); + }; + while (!$tco_done) { + $tco_result = $tco_loop($tco_var_ctx, $copy_v1); + }; + return $tco_result; + }; + }; + return down(Data_List_Types.Nil.value); + }; + }; + }; + var pop = function (dictOrd) { + return function (k) { + var up = function ($copy_ctxs) { + return function ($copy_tree) { + var $tco_var_ctxs = $copy_ctxs; + var $tco_done = false; + var $tco_result; + function $tco_loop(ctxs, tree) { + if (ctxs instanceof Data_List_Types.Nil) { + $tco_done = true; + return tree; + }; + if (ctxs instanceof Data_List_Types.Cons) { + if (ctxs.value0 instanceof TwoLeft && (ctxs.value0.value2 instanceof Leaf && tree instanceof Leaf)) { + $tco_done = true; + return fromZipper(dictOrd)(ctxs.value1)(new Two(Leaf.value, ctxs.value0.value0, ctxs.value0.value1, Leaf.value)); + }; + if (ctxs.value0 instanceof TwoRight && (ctxs.value0.value0 instanceof Leaf && tree instanceof Leaf)) { + $tco_done = true; + return fromZipper(dictOrd)(ctxs.value1)(new Two(Leaf.value, ctxs.value0.value1, ctxs.value0.value2, Leaf.value)); + }; + if (ctxs.value0 instanceof TwoLeft && ctxs.value0.value2 instanceof Two) { + $tco_var_ctxs = ctxs.value1; + $copy_tree = new Three(tree, ctxs.value0.value0, ctxs.value0.value1, ctxs.value0.value2.value0, ctxs.value0.value2.value1, ctxs.value0.value2.value2, ctxs.value0.value2.value3); + return; + }; + if (ctxs.value0 instanceof TwoRight && ctxs.value0.value0 instanceof Two) { + $tco_var_ctxs = ctxs.value1; + $copy_tree = new Three(ctxs.value0.value0.value0, ctxs.value0.value0.value1, ctxs.value0.value0.value2, ctxs.value0.value0.value3, ctxs.value0.value1, ctxs.value0.value2, tree); + return; + }; + if (ctxs.value0 instanceof TwoLeft && ctxs.value0.value2 instanceof Three) { + $tco_done = true; + return fromZipper(dictOrd)(ctxs.value1)(new Two(new Two(tree, ctxs.value0.value0, ctxs.value0.value1, ctxs.value0.value2.value0), ctxs.value0.value2.value1, ctxs.value0.value2.value2, new Two(ctxs.value0.value2.value3, ctxs.value0.value2.value4, ctxs.value0.value2.value5, ctxs.value0.value2.value6))); + }; + if (ctxs.value0 instanceof TwoRight && ctxs.value0.value0 instanceof Three) { + $tco_done = true; + return fromZipper(dictOrd)(ctxs.value1)(new Two(new Two(ctxs.value0.value0.value0, ctxs.value0.value0.value1, ctxs.value0.value0.value2, ctxs.value0.value0.value3), ctxs.value0.value0.value4, ctxs.value0.value0.value5, new Two(ctxs.value0.value0.value6, ctxs.value0.value1, ctxs.value0.value2, tree))); + }; + if (ctxs.value0 instanceof ThreeLeft && (ctxs.value0.value2 instanceof Leaf && (ctxs.value0.value5 instanceof Leaf && tree instanceof Leaf))) { + $tco_done = true; + return fromZipper(dictOrd)(ctxs.value1)(new Three(Leaf.value, ctxs.value0.value0, ctxs.value0.value1, Leaf.value, ctxs.value0.value3, ctxs.value0.value4, Leaf.value)); + }; + if (ctxs.value0 instanceof ThreeMiddle && (ctxs.value0.value0 instanceof Leaf && (ctxs.value0.value5 instanceof Leaf && tree instanceof Leaf))) { + $tco_done = true; + return fromZipper(dictOrd)(ctxs.value1)(new Three(Leaf.value, ctxs.value0.value1, ctxs.value0.value2, Leaf.value, ctxs.value0.value3, ctxs.value0.value4, Leaf.value)); + }; + if (ctxs.value0 instanceof ThreeRight && (ctxs.value0.value0 instanceof Leaf && (ctxs.value0.value3 instanceof Leaf && tree instanceof Leaf))) { + $tco_done = true; + return fromZipper(dictOrd)(ctxs.value1)(new Three(Leaf.value, ctxs.value0.value1, ctxs.value0.value2, Leaf.value, ctxs.value0.value4, ctxs.value0.value5, Leaf.value)); + }; + if (ctxs.value0 instanceof ThreeLeft && ctxs.value0.value2 instanceof Two) { + $tco_done = true; + return fromZipper(dictOrd)(ctxs.value1)(new Two(new Three(tree, ctxs.value0.value0, ctxs.value0.value1, ctxs.value0.value2.value0, ctxs.value0.value2.value1, ctxs.value0.value2.value2, ctxs.value0.value2.value3), ctxs.value0.value3, ctxs.value0.value4, ctxs.value0.value5)); + }; + if (ctxs.value0 instanceof ThreeMiddle && ctxs.value0.value0 instanceof Two) { + $tco_done = true; + return fromZipper(dictOrd)(ctxs.value1)(new Two(new Three(ctxs.value0.value0.value0, ctxs.value0.value0.value1, ctxs.value0.value0.value2, ctxs.value0.value0.value3, ctxs.value0.value1, ctxs.value0.value2, tree), ctxs.value0.value3, ctxs.value0.value4, ctxs.value0.value5)); + }; + if (ctxs.value0 instanceof ThreeMiddle && ctxs.value0.value5 instanceof Two) { + $tco_done = true; + return fromZipper(dictOrd)(ctxs.value1)(new Two(ctxs.value0.value0, ctxs.value0.value1, ctxs.value0.value2, new Three(tree, ctxs.value0.value3, ctxs.value0.value4, ctxs.value0.value5.value0, ctxs.value0.value5.value1, ctxs.value0.value5.value2, ctxs.value0.value5.value3))); + }; + if (ctxs.value0 instanceof ThreeRight && ctxs.value0.value3 instanceof Two) { + $tco_done = true; + return fromZipper(dictOrd)(ctxs.value1)(new Two(ctxs.value0.value0, ctxs.value0.value1, ctxs.value0.value2, new Three(ctxs.value0.value3.value0, ctxs.value0.value3.value1, ctxs.value0.value3.value2, ctxs.value0.value3.value3, ctxs.value0.value4, ctxs.value0.value5, tree))); + }; + if (ctxs.value0 instanceof ThreeLeft && ctxs.value0.value2 instanceof Three) { + $tco_done = true; + return fromZipper(dictOrd)(ctxs.value1)(new Three(new Two(tree, ctxs.value0.value0, ctxs.value0.value1, ctxs.value0.value2.value0), ctxs.value0.value2.value1, ctxs.value0.value2.value2, new Two(ctxs.value0.value2.value3, ctxs.value0.value2.value4, ctxs.value0.value2.value5, ctxs.value0.value2.value6), ctxs.value0.value3, ctxs.value0.value4, ctxs.value0.value5)); + }; + if (ctxs.value0 instanceof ThreeMiddle && ctxs.value0.value0 instanceof Three) { + $tco_done = true; + return fromZipper(dictOrd)(ctxs.value1)(new Three(new Two(ctxs.value0.value0.value0, ctxs.value0.value0.value1, ctxs.value0.value0.value2, ctxs.value0.value0.value3), ctxs.value0.value0.value4, ctxs.value0.value0.value5, new Two(ctxs.value0.value0.value6, ctxs.value0.value1, ctxs.value0.value2, tree), ctxs.value0.value3, ctxs.value0.value4, ctxs.value0.value5)); + }; + if (ctxs.value0 instanceof ThreeMiddle && ctxs.value0.value5 instanceof Three) { + $tco_done = true; + return fromZipper(dictOrd)(ctxs.value1)(new Three(ctxs.value0.value0, ctxs.value0.value1, ctxs.value0.value2, new Two(tree, ctxs.value0.value3, ctxs.value0.value4, ctxs.value0.value5.value0), ctxs.value0.value5.value1, ctxs.value0.value5.value2, new Two(ctxs.value0.value5.value3, ctxs.value0.value5.value4, ctxs.value0.value5.value5, ctxs.value0.value5.value6))); + }; + if (ctxs.value0 instanceof ThreeRight && ctxs.value0.value3 instanceof Three) { + $tco_done = true; + return fromZipper(dictOrd)(ctxs.value1)(new Three(ctxs.value0.value0, ctxs.value0.value1, ctxs.value0.value2, new Two(ctxs.value0.value3.value0, ctxs.value0.value3.value1, ctxs.value0.value3.value2, ctxs.value0.value3.value3), ctxs.value0.value3.value4, ctxs.value0.value3.value5, new Two(ctxs.value0.value3.value6, ctxs.value0.value4, ctxs.value0.value5, tree))); + }; + throw new Error("Failed pattern match at Data.Map.Internal (line 501, column 9 - line 518, column 136): " + [ ctxs.value0.constructor.name, tree.constructor.name ]); + }; + throw new Error("Failed pattern match at Data.Map.Internal (line 498, column 5 - line 518, column 136): " + [ ctxs.constructor.name ]); + }; + while (!$tco_done) { + $tco_result = $tco_loop($tco_var_ctxs, $copy_tree); + }; + return $tco_result; + }; + }; + var removeMaxNode = function ($copy_ctx) { + return function ($copy_m) { + var $tco_var_ctx = $copy_ctx; + var $tco_done = false; + var $tco_result; + function $tco_loop(ctx, m) { + if (m instanceof Two && (m.value0 instanceof Leaf && m.value3 instanceof Leaf)) { + $tco_done = true; + return up(ctx)(Leaf.value); + }; + if (m instanceof Two) { + $tco_var_ctx = new Data_List_Types.Cons(new TwoRight(m.value0, m.value1, m.value2), ctx); + $copy_m = m.value3; + return; + }; + if (m instanceof Three && (m.value0 instanceof Leaf && (m.value3 instanceof Leaf && m.value6 instanceof Leaf))) { + $tco_done = true; + return up(new Data_List_Types.Cons(new TwoRight(Leaf.value, m.value1, m.value2), ctx))(Leaf.value); + }; + if (m instanceof Three) { + $tco_var_ctx = new Data_List_Types.Cons(new ThreeRight(m.value0, m.value1, m.value2, m.value3, m.value4, m.value5), ctx); + $copy_m = m.value6; + return; + }; + throw new Error("Failed pattern match at Data.Map.Internal (line 530, column 5 - line 534, column 107): " + [ m.constructor.name ]); + }; + while (!$tco_done) { + $tco_result = $tco_loop($tco_var_ctx, $copy_m); + }; + return $tco_result; + }; + }; + var maxNode = function ($copy_m) { + var $tco_done = false; + var $tco_result; + function $tco_loop(m) { + if (m instanceof Two && m.value3 instanceof Leaf) { + $tco_done = true; + return { + key: m.value1, + value: m.value2 + }; + }; + if (m instanceof Two) { + $copy_m = m.value3; + return; + }; + if (m instanceof Three && m.value6 instanceof Leaf) { + $tco_done = true; + return { + key: m.value4, + value: m.value5 + }; + }; + if (m instanceof Three) { + $copy_m = m.value6; + return; + }; + throw new Error("Failed pattern match at Data.Map.Internal (line 521, column 33 - line 525, column 45): " + [ m.constructor.name ]); + }; + while (!$tco_done) { + $tco_result = $tco_loop($copy_m); + }; + return $tco_result; + }; + var comp = Data_Ord.compare(dictOrd); + var down = function ($copy_ctx) { + return function ($copy_m) { + var $tco_var_ctx = $copy_ctx; + var $tco_done = false; + var $tco_result; + function $tco_loop(ctx, m) { + if (m instanceof Leaf) { + $tco_done = true; + return Data_Maybe.Nothing.value; + }; + if (m instanceof Two) { + var v = comp(k)(m.value1); + if (m.value3 instanceof Leaf && v instanceof Data_Ordering.EQ) { + $tco_done = true; + return new Data_Maybe.Just(new Data_Tuple.Tuple(m.value2, up(ctx)(Leaf.value))); + }; + if (v instanceof Data_Ordering.EQ) { + var max = maxNode(m.value0); + $tco_done = true; + return new Data_Maybe.Just(new Data_Tuple.Tuple(m.value2, removeMaxNode(new Data_List_Types.Cons(new TwoLeft(max.key, max.value, m.value3), ctx))(m.value0))); + }; + if (v instanceof Data_Ordering.LT) { + $tco_var_ctx = new Data_List_Types.Cons(new TwoLeft(m.value1, m.value2, m.value3), ctx); + $copy_m = m.value0; + return; + }; + $tco_var_ctx = new Data_List_Types.Cons(new TwoRight(m.value0, m.value1, m.value2), ctx); + $copy_m = m.value3; + return; + }; + if (m instanceof Three) { + var leaves = (function () { + if (m.value0 instanceof Leaf && (m.value3 instanceof Leaf && m.value6 instanceof Leaf)) { + return true; + }; + return false; + })(); + var v = comp(k)(m.value4); + var v3 = comp(k)(m.value1); + if (leaves && v3 instanceof Data_Ordering.EQ) { + $tco_done = true; + return new Data_Maybe.Just(new Data_Tuple.Tuple(m.value2, fromZipper(dictOrd)(ctx)(new Two(Leaf.value, m.value4, m.value5, Leaf.value)))); + }; + if (leaves && v instanceof Data_Ordering.EQ) { + $tco_done = true; + return new Data_Maybe.Just(new Data_Tuple.Tuple(m.value5, fromZipper(dictOrd)(ctx)(new Two(Leaf.value, m.value1, m.value2, Leaf.value)))); + }; + if (v3 instanceof Data_Ordering.EQ) { + var max = maxNode(m.value0); + $tco_done = true; + return new Data_Maybe.Just(new Data_Tuple.Tuple(m.value2, removeMaxNode(new Data_List_Types.Cons(new ThreeLeft(max.key, max.value, m.value3, m.value4, m.value5, m.value6), ctx))(m.value0))); + }; + if (v instanceof Data_Ordering.EQ) { + var max = maxNode(m.value3); + $tco_done = true; + return new Data_Maybe.Just(new Data_Tuple.Tuple(m.value5, removeMaxNode(new Data_List_Types.Cons(new ThreeMiddle(m.value0, m.value1, m.value2, max.key, max.value, m.value6), ctx))(m.value3))); + }; + if (v3 instanceof Data_Ordering.LT) { + $tco_var_ctx = new Data_List_Types.Cons(new ThreeLeft(m.value1, m.value2, m.value3, m.value4, m.value5, m.value6), ctx); + $copy_m = m.value0; + return; + }; + if (v3 instanceof Data_Ordering.GT && v instanceof Data_Ordering.LT) { + $tco_var_ctx = new Data_List_Types.Cons(new ThreeMiddle(m.value0, m.value1, m.value2, m.value4, m.value5, m.value6), ctx); + $copy_m = m.value3; + return; + }; + $tco_var_ctx = new Data_List_Types.Cons(new ThreeRight(m.value0, m.value1, m.value2, m.value3, m.value4, m.value5), ctx); + $copy_m = m.value6; + return; + }; + throw new Error("Failed pattern match at Data.Map.Internal (line 471, column 34 - line 494, column 80): " + [ m.constructor.name ]); + }; + while (!$tco_done) { + $tco_result = $tco_loop($tco_var_ctx, $copy_m); + }; + return $tco_result; + }; + }; + return down(Data_List_Types.Nil.value); + }; + }; + var foldableMap = new Data_Foldable.Foldable(function (dictMonoid) { + return function (f) { + return function (m) { + return Data_Foldable.foldMap(Data_List_Types.foldableList)(dictMonoid)(f)(values(m)); + }; + }; + }, function (f) { + return function (z) { + return function (m) { + return Data_Foldable.foldl(Data_List_Types.foldableList)(f)(z)(values(m)); + }; + }; + }, function (f) { + return function (z) { + return function (m) { + return Data_Foldable.foldr(Data_List_Types.foldableList)(f)(z)(values(m)); + }; + }; + }); + var empty = Leaf.value; + var $$delete = function (dictOrd) { + return function (k) { + return function (m) { + return Data_Maybe.maybe(m)(Data_Tuple.snd)(pop(dictOrd)(k)(m)); + }; + }; + }; + var alter = function (dictOrd) { + return function (f) { + return function (k) { + return function (m) { + var v = f(lookup(dictOrd)(k)(m)); + if (v instanceof Data_Maybe.Nothing) { + return $$delete(dictOrd)(k)(m); + }; + if (v instanceof Data_Maybe.Just) { + return insert(dictOrd)(k)(v.value0)(m); + }; + throw new Error("Failed pattern match at Data.Map.Internal (line 539, column 15 - line 541, column 25): " + [ v.constructor.name ]); + }; + }; + }; + }; + exports["empty"] = empty; + exports["insert"] = insert; + exports["lookup"] = lookup; + exports["delete"] = $$delete; + exports["pop"] = pop; + exports["member"] = member; + exports["alter"] = alter; + exports["keys"] = keys; + exports["values"] = values; + exports["functorMap"] = functorMap; + exports["foldableMap"] = foldableMap; +})(PS["Data.Map.Internal"] = PS["Data.Map.Internal"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Monad_Rec_Class = PS["Control.Monad.Rec.Class"]; + var Control_Monad_ST = PS["Control.Monad.ST"]; + var Control_Monad_ST_Internal = PS["Control.Monad.ST.Internal"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Array = PS["Data.Array"]; + var Data_Array_ST = PS["Data.Array.ST"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_List = PS["Data.List"]; + var Data_List_Types = PS["Data.List.Types"]; + var Data_Map_Internal = PS["Data.Map.Internal"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Monoid = PS["Data.Monoid"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ordering = PS["Data.Ordering"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Show = PS["Data.Show"]; + var Data_Unfoldable = PS["Data.Unfoldable"]; + var Data_Unit = PS["Data.Unit"]; + var Partial_Unsafe = PS["Partial.Unsafe"]; + var Prelude = PS["Prelude"]; + var toList = function (v) { + return Data_Map_Internal.keys(v); + }; + var foldableSet = new Data_Foldable.Foldable(function (dictMonoid) { + return function (f) { + return function ($65) { + return Data_Foldable.foldMap(Data_List_Types.foldableList)(dictMonoid)(f)(toList($65)); + }; + }; + }, function (f) { + return function (x) { + return function ($66) { + return Data_Foldable.foldl(Data_List_Types.foldableList)(f)(x)(toList($66)); + }; + }; + }, function (f) { + return function (x) { + return function ($67) { + return Data_Foldable.foldr(Data_List_Types.foldableList)(f)(x)(toList($67)); + }; + }; + }); + exports["foldableSet"] = foldableSet; +})(PS["Data.Set"] = PS["Data.Set"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Map_Internal = PS["Data.Map.Internal"]; + var Data_Set = PS["Data.Set"]; + var Prelude = PS["Prelude"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var keys = function ($0) { + return Data_Functor["void"](Data_Map_Internal.functorMap)($0); + }; + exports["keys"] = keys; +})(PS["Data.Map"] = PS["Data.Map"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Category = PS["Control.Category"]; + var Control_Monad_State_Class = PS["Control.Monad.State.Class"]; + var Control_Monad_Trans_Class = PS["Control.Monad.Trans.Class"]; + var Control_Parallel = PS["Control.Parallel"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Functor = PS["Data.Functor"]; + var Data_List = PS["Data.List"]; + var Data_List_Types = PS["Data.List.Types"]; + var Data_Map = PS["Data.Map"]; + var Data_Map_Internal = PS["Data.Map.Internal"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unit = PS["Data.Unit"]; + var Effect_Aff_Class = PS["Effect.Aff.Class"]; + var Effect_Class = PS["Effect.Class"]; + var Halogen_Component_ChildPath = PS["Halogen.Component.ChildPath"]; + var Halogen_Query_EventSource = PS["Halogen.Query.EventSource"]; + var Halogen_Query_HalogenM = PS["Halogen.Query.HalogenM"]; + var Halogen_Query_InputF = PS["Halogen.Query.InputF"]; + var Prelude = PS["Prelude"]; + var Web_HTML_HTMLElement = PS["Web.HTML.HTMLElement"]; + var getHTMLElementRef = function ($10) { + return Data_Functor.map(Halogen_Query_HalogenM.functorHalogenM)(function (v) { + return Control_Bind.bindFlipped(Data_Maybe.bindMaybe)(Web_HTML_HTMLElement.fromElement)(v); + })(Halogen_Query_HalogenM.getRef($10)); + }; + var action = function (act) { + return act(Data_Unit.unit); + }; + exports["action"] = action; + exports["getHTMLElementRef"] = getHTMLElementRef; +})(PS["Halogen.Query"] = PS["Halogen.Query"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Web_Event_Event = PS["Web.Event.Event"]; + var change = "change"; + exports["change"] = change; +})(PS["Web.HTML.Event.EventTypes"] = PS["Web.HTML.Event.EventTypes"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Web_Event_Event = PS["Web.Event.Event"]; + var click = "click"; + exports["click"] = click; +})(PS["Web.UIEvent.MouseEvent.EventTypes"] = PS["Web.UIEvent.MouseEvent.EventTypes"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Bind = PS["Control.Bind"]; + var Control_Monad_Except = PS["Control.Monad.Except"]; + var Control_Monad_Except_Trans = PS["Control.Monad.Except.Trans"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Either = PS["Data.Either"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Identity = PS["Data.Identity"]; + var Data_Maybe = PS["Data.Maybe"]; + var Foreign = PS["Foreign"]; + var Foreign_Index = PS["Foreign.Index"]; + var Halogen_HTML_Core = PS["Halogen.HTML.Core"]; + var Halogen_HTML_Properties = PS["Halogen.HTML.Properties"]; + var Halogen_Query = PS["Halogen.Query"]; + var Halogen_Query_InputF = PS["Halogen.Query.InputF"]; + var Prelude = PS["Prelude"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var Web_Clipboard_ClipboardEvent = PS["Web.Clipboard.ClipboardEvent"]; + var Web_Clipboard_ClipboardEvent_EventTypes = PS["Web.Clipboard.ClipboardEvent.EventTypes"]; + var Web_Event_Event = PS["Web.Event.Event"]; + var Web_HTML_Event_DragEvent = PS["Web.HTML.Event.DragEvent"]; + var Web_HTML_Event_DragEvent_EventTypes = PS["Web.HTML.Event.DragEvent.EventTypes"]; + var Web_HTML_Event_EventTypes = PS["Web.HTML.Event.EventTypes"]; + var Web_TouchEvent_TouchEvent = PS["Web.TouchEvent.TouchEvent"]; + var Web_UIEvent_FocusEvent = PS["Web.UIEvent.FocusEvent"]; + var Web_UIEvent_FocusEvent_EventTypes = PS["Web.UIEvent.FocusEvent.EventTypes"]; + var Web_UIEvent_KeyboardEvent = PS["Web.UIEvent.KeyboardEvent"]; + var Web_UIEvent_KeyboardEvent_EventTypes = PS["Web.UIEvent.KeyboardEvent.EventTypes"]; + var Web_UIEvent_MouseEvent = PS["Web.UIEvent.MouseEvent"]; + var Web_UIEvent_MouseEvent_EventTypes = PS["Web.UIEvent.MouseEvent.EventTypes"]; + var Web_UIEvent_WheelEvent = PS["Web.UIEvent.WheelEvent"]; + var Web_UIEvent_WheelEvent_EventTypes = PS["Web.UIEvent.WheelEvent.EventTypes"]; + var mouseHandler = Unsafe_Coerce.unsafeCoerce; + var input_ = function (f) { + return function (v) { + return Data_Maybe.Just.create(Halogen_Query.action(f)); + }; + }; + var input = function (f) { + return function (x) { + return Data_Maybe.Just.create(Halogen_Query.action(f(x))); + }; + }; + var handler = function (et) { + return function ($1) { + return Halogen_HTML_Core.handler(et)(Data_Functor.map(Data_Functor.functorFn)(Data_Functor.map(Data_Maybe.functorMaybe)(Halogen_Query_InputF.Query.create))($1)); + }; + }; + var onClick = function ($2) { + return handler(Web_UIEvent_MouseEvent_EventTypes.click)(mouseHandler($2)); + }; + var onSubmit = handler("submit"); + var addForeignPropHandler = function (key) { + return function (prop) { + return function (reader) { + return function (f) { + var go = function (a) { + return Control_Bind.composeKleisliFlipped(Control_Monad_Except_Trans.bindExceptT(Data_Identity.monadIdentity))(reader)(Foreign_Index.readProp(prop))(Foreign.unsafeToForeign(a)); + }; + return handler(key)(Control_Bind.composeKleisli(Data_Maybe.bindMaybe)(Web_Event_Event.currentTarget)(function (e) { + return Data_Either.either(Data_Function["const"](Data_Maybe.Nothing.value))(f)(Control_Monad_Except.runExcept(go(e))); + })); + }; + }; + }; + }; + var onChecked = addForeignPropHandler(Web_HTML_Event_EventTypes.change)("checked")(Foreign.readBoolean); + var onValueChange = addForeignPropHandler(Web_HTML_Event_EventTypes.change)("value")(Foreign.readString); + exports["input"] = input; + exports["input_"] = input_; + exports["handler"] = handler; + exports["onSubmit"] = onSubmit; + exports["onClick"] = onClick; + exports["onValueChange"] = onValueChange; + exports["onChecked"] = onChecked; +})(PS["Halogen.HTML.Events"] = PS["Halogen.HTML.Events"] || {}); +(function(exports) { + "use strict"; + /* global Symbol */ + + var hasArrayFrom = typeof Array.from === "function"; + var hasStringIterator = + typeof Symbol !== "undefined" && + Symbol != null && + typeof Symbol.iterator !== "undefined" && + typeof String.prototype[Symbol.iterator] === "function"; + var hasFromCodePoint = typeof String.prototype.fromCodePoint === "function"; + var hasCodePointAt = typeof String.prototype.codePointAt === "function"; + + exports._unsafeCodePointAt0 = function (fallback) { + return hasCodePointAt + ? function (str) { return str.codePointAt(0); } + : fallback; + }; + + exports._singleton = function (fallback) { + return hasFromCodePoint ? String.fromCodePoint : fallback; + }; + + exports._take = function (fallback) { + return function (n) { + if (hasStringIterator) { + return function (str) { + var accum = ""; + var iter = str[Symbol.iterator](); + for (var i = 0; i < n; ++i) { + var o = iter.next(); + if (o.done) return accum; + accum += o.value; + } + return accum; + }; + } + return fallback(n); + }; + }; + + exports._toCodePointArray = function (fallback) { + return function (unsafeCodePointAt0) { + if (hasArrayFrom) { + return function (str) { + return Array.from(str, unsafeCodePointAt0); + }; + } + return fallback; + }; + }; +})(PS["Data.String.CodePoints"] = PS["Data.String.CodePoints"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Data.String.CodePoints"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Array = PS["Data.Array"]; + var Data_Boolean = PS["Data.Boolean"]; + var Data_Bounded = PS["Data.Bounded"]; + var Data_Enum = PS["Data.Enum"]; + var Data_Eq = PS["Data.Eq"]; + var Data_EuclideanRing = PS["Data.EuclideanRing"]; + var Data_Functor = PS["Data.Functor"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Int = PS["Data.Int"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Ring = PS["Data.Ring"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Show = PS["Data.Show"]; + var Data_String_CodeUnits = PS["Data.String.CodeUnits"]; + var Data_String_Common = PS["Data.String.Common"]; + var Data_String_Pattern = PS["Data.String.Pattern"]; + var Data_String_Unsafe = PS["Data.String.Unsafe"]; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unfoldable = PS["Data.Unfoldable"]; + var Prelude = PS["Prelude"]; + var unsurrogate = function (lead) { + return function (trail) { + return (((lead - 55296 | 0) * 1024 | 0) + (trail - 56320 | 0) | 0) + 65536 | 0; + }; + }; + var isTrail = function (cu) { + return 56320 <= cu && cu <= 57343; + }; + var isLead = function (cu) { + return 55296 <= cu && cu <= 56319; + }; + var uncons = function (s) { + var v = Data_String_CodeUnits.length(s); + if (v === 0) { + return Data_Maybe.Nothing.value; + }; + if (v === 1) { + return new Data_Maybe.Just({ + head: Data_Enum.fromEnum(Data_Enum.boundedEnumChar)(Data_String_Unsafe.charAt(0)(s)), + tail: "" + }); + }; + var cu1 = Data_Enum.fromEnum(Data_Enum.boundedEnumChar)(Data_String_Unsafe.charAt(1)(s)); + var cu0 = Data_Enum.fromEnum(Data_Enum.boundedEnumChar)(Data_String_Unsafe.charAt(0)(s)); + var $21 = isLead(cu0) && isTrail(cu1); + if ($21) { + return new Data_Maybe.Just({ + head: unsurrogate(cu0)(cu1), + tail: Data_String_CodeUnits.drop(2)(s) + }); + }; + return new Data_Maybe.Just({ + head: cu0, + tail: Data_String_CodeUnits.drop(1)(s) + }); + }; + var unconsButWithTuple = function (s) { + return Data_Functor.map(Data_Maybe.functorMaybe)(function (v) { + return new Data_Tuple.Tuple(v.head, v.tail); + })(uncons(s)); + }; + var toCodePointArrayFallback = function (s) { + return Data_Unfoldable.unfoldr(Data_Unfoldable.unfoldableArray)(unconsButWithTuple)(s); + }; + var unsafeCodePointAt0Fallback = function (s) { + var cu0 = Data_Enum.fromEnum(Data_Enum.boundedEnumChar)(Data_String_Unsafe.charAt(0)(s)); + var $25 = isLead(cu0) && Data_String_CodeUnits.length(s) > 1; + if ($25) { + var cu1 = Data_Enum.fromEnum(Data_Enum.boundedEnumChar)(Data_String_Unsafe.charAt(1)(s)); + var $26 = isTrail(cu1); + if ($26) { + return unsurrogate(cu0)(cu1); + }; + return cu0; + }; + return cu0; + }; + var unsafeCodePointAt0 = $foreign["_unsafeCodePointAt0"](unsafeCodePointAt0Fallback); + var toCodePointArray = $foreign["_toCodePointArray"](toCodePointArrayFallback)(unsafeCodePointAt0); + var length = function ($52) { + return Data_Array.length(toCodePointArray($52)); + }; + var fromCharCode = function ($53) { + return Data_String_CodeUnits.singleton(Data_Enum.toEnumWithDefaults(Data_Enum.boundedEnumChar)(Data_Bounded.bottom(Data_Bounded.boundedChar))(Data_Bounded.top(Data_Bounded.boundedChar))($53)); + }; + var singletonFallback = function (v) { + if (v <= 65535) { + return fromCharCode(v); + }; + var lead = Data_EuclideanRing.div(Data_EuclideanRing.euclideanRingInt)(v - 65536 | 0)(1024) + 55296 | 0; + var trail = Data_EuclideanRing.mod(Data_EuclideanRing.euclideanRingInt)(v - 65536 | 0)(1024) + 56320 | 0; + return fromCharCode(lead) + fromCharCode(trail); + }; + var singleton = $foreign["_singleton"](singletonFallback); + var takeFallback = function (n) { + return function (v) { + if (n < 1) { + return ""; + }; + var v1 = uncons(v); + if (v1 instanceof Data_Maybe.Just) { + return singleton(v1.value0.head) + takeFallback(n - 1 | 0)(v1.value0.tail); + }; + return v; + }; + }; + var take = $foreign["_take"](takeFallback); + var drop = function (n) { + return function (s) { + return Data_String_CodeUnits.drop(Data_String_CodeUnits.length(take(n)(s)))(s); + }; + }; + exports["singleton"] = singleton; + exports["toCodePointArray"] = toCodePointArray; + exports["uncons"] = uncons; + exports["length"] = length; + exports["take"] = take; + exports["drop"] = drop; +})(PS["Data.String.CodePoints"] = PS["Data.String.CodePoints"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Monad_Maybe_Trans = PS["Control.Monad.Maybe.Trans"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Array = PS["Data.Array"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Nullable = PS["Data.Nullable"]; + var Data_String = PS["Data.String"]; + var Data_String_CodePoints = PS["Data.String.CodePoints"]; + var Data_String_Common = PS["Data.String.Common"]; + var Data_String_Pattern = PS["Data.String.Pattern"]; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unit = PS["Data.Unit"]; + var Effect = PS["Effect"]; + var Global_Unsafe = PS["Global.Unsafe"]; + var Halogen = PS["Halogen"]; + var Halogen_HTML = PS["Halogen.HTML"]; + var Halogen_HTML_Core = PS["Halogen.HTML.Core"]; + var Halogen_HTML_Properties = PS["Halogen.HTML.Properties"]; + var Partial_Unsafe = PS["Partial.Unsafe"]; + var Prelude = PS["Prelude"]; + var Web_DOM = PS["Web.DOM"]; + var Web_DOM_Document = PS["Web.DOM.Document"]; + var Web_DOM_Element = PS["Web.DOM.Element"]; + var Web_DOM_NodeList = PS["Web.DOM.NodeList"]; + var Web_DOM_NonElementParentNode = PS["Web.DOM.NonElementParentNode"]; + var Web_DOM_ParentNode = PS["Web.DOM.ParentNode"]; + var Web_HTML = PS["Web.HTML"]; + var Web_HTML_HTMLDocument = PS["Web.HTML.HTMLDocument"]; + var Web_HTML_HTMLElement = PS["Web.HTML.HTMLElement"]; + var Web_HTML_Location = PS["Web.HTML.Location"]; + var Web_HTML_Window = PS["Web.HTML.Window"]; + var fromNullableStr = function ($57) { + return Data_Maybe.fromMaybe("")(Data_Nullable.toMaybe($57)); + }; + var class_ = function ($58) { + return Halogen_HTML_Properties.class_(Halogen_HTML_Core.ClassName($58)); + }; + var attr = function (a) { + return Halogen_HTML_Properties.attr(a); + }; + var _parseQueryString = function (srh) { + var decode = function ($59) { + return Global_Unsafe.unsafeDecodeURIComponent(Data_String_Common.replaceAll("+")(" ")($59)); + }; + var go = function (kv) { + var v = Data_String_Common.split("=")(kv); + if (v.length === 1) { + return new Data_Maybe.Just(new Data_Tuple.Tuple(decode(v[0]), Data_Maybe.Nothing.value)); + }; + if (v.length === 2) { + return new Data_Maybe.Just(new Data_Tuple.Tuple(decode(v[0]), new Data_Maybe.Just(decode(v[1])))); + }; + return Data_Maybe.Nothing.value; + }; + var qs = (function () { + var srh$prime = Data_String_CodePoints.take(1)(srh); + var $54 = srh$prime === "#" || srh$prime === "?"; + if ($54) { + return Data_String_CodePoints.drop(1)(srh); + }; + return srh; + })(); + return Data_Array.mapMaybe(go)(Data_Array.filter(function (v) { + return v !== ""; + })(Data_String_Common.split("&")(qs))); + }; + var _lookupQueryStringValue = function (qs) { + return function (k) { + return Control_Bind.join(Data_Maybe.bindMaybe)(Data_Functor.map(Data_Maybe.functorMaybe)(Data_Tuple.snd)(Data_Foldable.find(Data_Foldable.foldableArray)(function ($61) { + return (function (v) { + return v === k; + })(Data_Tuple.fst($61)); + })(qs))); + }; + }; + var _loc = Control_Bind.bindFlipped(Effect.bindEffect)(Web_HTML_Window.location)(Web_HTML.window); + var _curQuerystring = function __do() { + var v = _loc(); + var v1 = Web_HTML_Location.search(v)(); + return _parseQueryString(v1); + }; + exports["class_"] = class_; + exports["attr"] = attr; + exports["_loc"] = _loc; + exports["_curQuerystring"] = _curQuerystring; + exports["_parseQueryString"] = _parseQueryString; + exports["_lookupQueryStringValue"] = _lookupQueryStringValue; + exports["fromNullableStr"] = fromNullableStr; +})(PS["Util"] = PS["Util"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var App = PS["App"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var DOM_HTML_Indexed_InputType = PS["DOM.HTML.Indexed.InputType"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Lens = PS["Data.Lens"]; + var Data_Lens_Getter = PS["Data.Lens.Getter"]; + var Data_Lens_Internal_Forget = PS["Data.Lens.Internal.Forget"]; + var Data_Lens_Lens = PS["Data.Lens.Lens"]; + var Data_Lens_Setter = PS["Data.Lens.Setter"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Profunctor_Strong = PS["Data.Profunctor.Strong"]; + var Data_Unit = PS["Data.Unit"]; + var Effect_Aff = PS["Effect.Aff"]; + var Effect_Aff_Class = PS["Effect.Aff.Class"]; + var Globals = PS["Globals"]; + var Halogen = PS["Halogen"]; + var Halogen_Component = PS["Halogen.Component"]; + var Halogen_HTML = PS["Halogen.HTML"]; + var Halogen_HTML_Core = PS["Halogen.HTML.Core"]; + var Halogen_HTML_Elements = PS["Halogen.HTML.Elements"]; + var Halogen_HTML_Events = PS["Halogen.HTML.Events"]; + var Halogen_HTML_Properties = PS["Halogen.HTML.Properties"]; + var Halogen_Query_HalogenM = PS["Halogen.Query.HalogenM"]; + var Model = PS["Model"]; + var Prelude = PS["Prelude"]; + var Util = PS["Util"]; + var Web_Event_Event = PS["Web.Event.Event"]; + var EarchiveDefault = (function () { + function EarchiveDefault(value0) { + this.value0 = value0; + }; + EarchiveDefault.create = function (value0) { + return new EarchiveDefault(value0); + }; + return EarchiveDefault; + })(); + var EprivateDefault = (function () { + function EprivateDefault(value0) { + this.value0 = value0; + }; + EprivateDefault.create = function (value0) { + return new EprivateDefault(value0); + }; + return EprivateDefault; + })(); + var EprivacyLock = (function () { + function EprivacyLock(value0) { + this.value0 = value0; + }; + EprivacyLock.create = function (value0) { + return new EprivacyLock(value0); + }; + return EprivacyLock; + })(); + var UEditField = (function () { + function UEditField(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + UEditField.create = function (value0) { + return function (value1) { + return new UEditField(value0, value1); + }; + }; + return UEditField; + })(); + var USubmit = (function () { + function USubmit(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + USubmit.create = function (value0) { + return function (value1) { + return new USubmit(value0, value1); + }; + }; + return USubmit; + })(); + var _us = function (dictStrong) { + return Data_Lens_Lens.lens(function (v) { + return v.us; + })(function (v) { + return function (v1) { + return { + us: v1 + }; + }; + })(dictStrong); + }; + var usetting = function (u$prime) { + var render = function (v) { + var editField = function (f) { + return function ($22) { + return Halogen_HTML_Events.input(UEditField.create)(f($22)); + }; + }; + return Halogen_HTML_Elements.div([ Util.class_("settings-form") ])([ Halogen_HTML_Elements.div([ Util.class_("fw7 mb2") ])([ Halogen_HTML_Core.text("Account Settings") ]), Halogen_HTML_Elements.div([ Util.class_("flex items-center mb2") ])([ Halogen_HTML_Elements.input([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.inputTypeIsProp)(DOM_HTML_Indexed_InputType.InputCheckbox.value), Util.class_("pointer mr2"), Halogen_HTML_Properties.id_("archiveDefault"), Halogen_HTML_Properties.name("archiveDefault"), Halogen_HTML_Properties.checked(v.us.archiveDefault), Halogen_HTML_Events.onChecked(editField(EarchiveDefault.create)) ]), Halogen_HTML_Elements.label([ Halogen_HTML_Properties["for"]("archiveDefault"), Util.class_("lh-copy") ])([ Halogen_HTML_Core.text("Archive Non-Private Bookmarks (archive.li)") ]) ]), Halogen_HTML_Elements.div([ Util.class_("flex items-center mb2") ])([ Halogen_HTML_Elements.input([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.inputTypeIsProp)(DOM_HTML_Indexed_InputType.InputCheckbox.value), Util.class_("pointer mr2"), Halogen_HTML_Properties.id_("privateDefault"), Halogen_HTML_Properties.name("privateDefault"), Halogen_HTML_Properties.checked(v.us.privateDefault), Halogen_HTML_Events.onChecked(editField(EprivateDefault.create)) ]), Halogen_HTML_Elements.label([ Halogen_HTML_Properties["for"]("privateDefault"), Util.class_("lh-copy") ])([ Halogen_HTML_Core.text("Default new bookmarks to Private") ]) ]), Halogen_HTML_Elements.div([ Util.class_("flex items-center mb2") ])([ Halogen_HTML_Elements.input([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.inputTypeIsProp)(DOM_HTML_Indexed_InputType.InputCheckbox.value), Util.class_("pointer mr2"), Halogen_HTML_Properties.id_("privacyLock"), Halogen_HTML_Properties.name("privacyLock"), Halogen_HTML_Properties.checked(v.us.privacyLock), Halogen_HTML_Events.onChecked(editField(EprivacyLock.create)) ]), Halogen_HTML_Elements.label([ Halogen_HTML_Properties["for"]("privacyLock"), Util.class_("lh-copy") ])([ Halogen_HTML_Core.text("Privacy Lock (Private Account)") ]) ]) ]); + }; + var mkState = function (u) { + return { + us: u + }; + }; + var $$eval = function (v) { + if (v instanceof UEditField) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Setter.modifying(Halogen_Query_HalogenM.monadStateHalogenM)(_us(Data_Profunctor_Strong.strongFn))((function () { + if (v.value0 instanceof EarchiveDefault) { + return function (v1) { + return { + archiveDefault: v.value0.value0, + privateDefault: v1.privateDefault, + privacyLock: v1.privacyLock + }; + }; + }; + if (v.value0 instanceof EprivateDefault) { + return function (v1) { + return { + archiveDefault: v1.archiveDefault, + privateDefault: v.value0.value0, + privacyLock: v1.privacyLock + }; + }; + }; + if (v.value0 instanceof EprivacyLock) { + return function (v1) { + return { + archiveDefault: v1.archiveDefault, + privateDefault: v1.privateDefault, + privacyLock: v.value0.value0 + }; + }; + }; + throw new Error("Failed pattern match at Component.AccountSettings (line 82, column 12 - line 85, column 46): " + [ v.value0.constructor.name ]); + })()))(function () { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value1); + }); + }; + if (v instanceof USubmit) { + return Control_Bind.bind(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Getter.use(Halogen_Query_HalogenM.monadStateHalogenM)(_us(Data_Lens_Internal_Forget.strongForget)))(function (v1) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Functor["void"](Halogen_Query_HalogenM.functorHalogenM)(Effect_Aff_Class.liftAff(Halogen_Query_HalogenM.monadAffHalogenM(Effect_Aff_Class.monadAffAff))(App.editAccountSettings(v1))))(function () { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value1); + }); + }); + }; + throw new Error("Failed pattern match at Component.AccountSettings (line 80, column 3 - line 80, column 58): " + [ v.constructor.name ]); + }; + var app = Globals["app'"](Data_Unit.unit); + return Halogen_Component.component(Halogen_HTML_Core.bifunctorHTML)({ + initialState: Data_Function["const"](mkState(u$prime)), + render: render, + "eval": $$eval, + receiver: Data_Function["const"](Data_Maybe.Nothing.value) + }); + }; + exports["_us"] = _us; + exports["UEditField"] = UEditField; + exports["USubmit"] = USubmit; + exports["EarchiveDefault"] = EarchiveDefault; + exports["EprivateDefault"] = EprivateDefault; + exports["EprivacyLock"] = EprivacyLock; + exports["usetting"] = usetting; +})(PS["Component.AccountSettings"] = PS["Component.AccountSettings"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var App = PS["App"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Monad_State_Class = PS["Control.Monad.State.Class"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var DOM_HTML_Indexed_ButtonType = PS["DOM.HTML.Indexed.ButtonType"]; + var DOM_HTML_Indexed_InputType = PS["DOM.HTML.Indexed.InputType"]; + var Data_Array = PS["Data.Array"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Lens = PS["Data.Lens"]; + var Data_Lens_Getter = PS["Data.Lens.Getter"]; + var Data_Lens_Internal_Forget = PS["Data.Lens.Internal.Forget"]; + var Data_Lens_Lens = PS["Data.Lens.Lens"]; + var Data_Lens_Setter = PS["Data.Lens.Setter"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Monoid = PS["Data.Monoid"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Profunctor_Strong = PS["Data.Profunctor.Strong"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_String = PS["Data.String"]; + var Data_String_Common = PS["Data.String.Common"]; + var Data_String_Pattern = PS["Data.String.Pattern"]; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unit = PS["Data.Unit"]; + var Effect_Aff = PS["Effect.Aff"]; + var Effect_Aff_Class = PS["Effect.Aff.Class"]; + var Effect_Class = PS["Effect.Class"]; + var Globals = PS["Globals"]; + var Halogen = PS["Halogen"]; + var Halogen_Component = PS["Halogen.Component"]; + var Halogen_HTML = PS["Halogen.HTML"]; + var Halogen_HTML_Core = PS["Halogen.HTML.Core"]; + var Halogen_HTML_Elements = PS["Halogen.HTML.Elements"]; + var Halogen_HTML_Events = PS["Halogen.HTML.Events"]; + var Halogen_HTML_Properties = PS["Halogen.HTML.Properties"]; + var Halogen_Query_HalogenM = PS["Halogen.Query.HalogenM"]; + var Model = PS["Model"]; + var Prelude = PS["Prelude"]; + var Util = PS["Util"]; + var Web_Event_Event = PS["Web.Event.Event"]; + var Web_HTML = PS["Web.HTML"]; + var Web_HTML_Location = PS["Web.HTML.Location"]; + var Eurl = (function () { + function Eurl(value0) { + this.value0 = value0; + }; + Eurl.create = function (value0) { + return new Eurl(value0); + }; + return Eurl; + })(); + var Etitle = (function () { + function Etitle(value0) { + this.value0 = value0; + }; + Etitle.create = function (value0) { + return new Etitle(value0); + }; + return Etitle; + })(); + var Edescription = (function () { + function Edescription(value0) { + this.value0 = value0; + }; + Edescription.create = function (value0) { + return new Edescription(value0); + }; + return Edescription; + })(); + var Etags = (function () { + function Etags(value0) { + this.value0 = value0; + }; + Etags.create = function (value0) { + return new Etags(value0); + }; + return Etags; + })(); + var Eprivate = (function () { + function Eprivate(value0) { + this.value0 = value0; + }; + Eprivate.create = function (value0) { + return new Eprivate(value0); + }; + return Eprivate; + })(); + var Etoread = (function () { + function Etoread(value0) { + this.value0 = value0; + }; + Etoread.create = function (value0) { + return new Etoread(value0); + }; + return Etoread; + })(); + var BEditField = (function () { + function BEditField(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + BEditField.create = function (value0) { + return function (value1) { + return new BEditField(value0, value1); + }; + }; + return BEditField; + })(); + var BEditSubmit = (function () { + function BEditSubmit(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + BEditSubmit.create = function (value0) { + return function (value1) { + return new BEditSubmit(value0, value1); + }; + }; + return BEditSubmit; + })(); + var BDeleteAsk = (function () { + function BDeleteAsk(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + BDeleteAsk.create = function (value0) { + return function (value1) { + return new BDeleteAsk(value0, value1); + }; + }; + return BDeleteAsk; + })(); + var BDestroy = (function () { + function BDestroy(value0) { + this.value0 = value0; + }; + BDestroy.create = function (value0) { + return new BDestroy(value0); + }; + return BDestroy; + })(); + var _edit_bm = function (dictStrong) { + return Data_Lens_Lens.lens(function (v) { + return v.edit_bm; + })(function (v) { + return function (v1) { + return { + edit_bm: v1, + bm: v.bm, + deleteAsk: v.deleteAsk, + destroyed: v.destroyed + }; + }; + })(dictStrong); + }; + var _bm = function (dictStrong) { + return Data_Lens_Lens.lens(function (v) { + return v.bm; + })(function (v) { + return function (v1) { + return { + bm: v1, + deleteAsk: v.deleteAsk, + destroyed: v.destroyed, + edit_bm: v.edit_bm + }; + }; + })(dictStrong); + }; + var addbmark = function (b$prime) { + var render = function (v) { + var toTextarea = function ($58) { + return Data_Array.drop(1)(Data_Foldable.foldMap(Data_Foldable.foldableArray)(Data_Monoid.monoidArray)(function (x) { + return [ Halogen_HTML_Elements.br_, Halogen_HTML_Core.text(x) ]; + })(Data_String_Common.split("\x0a")($58))); + }; + var mmoment = Globals.mmoment8601(v.bm.time); + var editField = function (f) { + return function ($59) { + return Halogen_HTML_Events.input(BEditField.create)(f($59)); + }; + }; + var display_exists = Halogen_HTML_Elements.div([ Util.class_("alert") ])([ Halogen_HTML_Core.text("previously saved\xa0"), Halogen_HTML_Elements.span([ Util.class_("link f7 dib gray pr3"), Halogen_HTML_Properties.title(Data_Maybe.maybe(v.bm.time)(Data_Tuple.snd)(mmoment)) ])([ Halogen_HTML_Core.text(Data_Maybe.maybe("\xa0")(Data_Tuple.fst)(mmoment)) ]), Halogen_HTML_Elements.div([ Util.class_("edit_links dib ml1") ])([ Halogen_HTML_Elements.div([ Util.class_("delete_link di") ])([ Halogen_HTML_Elements.button(Data_Semigroup.append(Data_Semigroup.semigroupArray)([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.buttonTypeIsProp)(DOM_HTML_Indexed_ButtonType.ButtonButton.value), Halogen_HTML_Events.onClick(Halogen_HTML_Events.input_(BDeleteAsk.create(true))), Util.class_("delete") ])(Data_Monoid.guard(Data_Monoid.monoidArray)(v.deleteAsk)([ Util.attr("hidden")("hidden") ])))([ Halogen_HTML_Core.text("delete") ]), Halogen_HTML_Elements.span(Data_Semigroup.append(Data_Semigroup.semigroupArray)([ Util.class_("confirm red") ])(Data_Monoid.guard(Data_Monoid.monoidArray)(!v.deleteAsk)([ Util.attr("hidden")("hidden") ])))([ Halogen_HTML_Elements.button([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.buttonTypeIsProp)(DOM_HTML_Indexed_ButtonType.ButtonButton.value), Halogen_HTML_Events.onClick(Halogen_HTML_Events.input_(BDeleteAsk.create(false))) ])([ Halogen_HTML_Core.text("cancel\xa0/\xa0") ]), Halogen_HTML_Elements.button([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.buttonTypeIsProp)(DOM_HTML_Indexed_ButtonType.ButtonButton.value), Halogen_HTML_Events.onClick(Halogen_HTML_Events.input_(BDestroy.create)), Util.class_("red") ])([ Halogen_HTML_Core.text("destroy") ]) ]) ]) ]) ]); + var display_edit = Halogen_HTML_Elements.form([ Halogen_HTML_Events.onSubmit(Halogen_HTML_Events.input(BEditSubmit.create)) ])([ Halogen_HTML_Elements.table([ Util.class_("w-100") ])([ Halogen_HTML_Elements.tbody_([ Halogen_HTML_Elements.tr_([ Halogen_HTML_Elements.td([ Util.class_("w1") ])([ ]), Halogen_HTML_Elements.td_(Data_Monoid.guard(Data_Monoid.monoidArray)(v.bm.bid > 0)([ display_exists ])) ]), Halogen_HTML_Elements.tr_([ Halogen_HTML_Elements.td_([ Halogen_HTML_Elements.label([ Halogen_HTML_Properties["for"]("url") ])([ Halogen_HTML_Core.text("URL") ]) ]), Halogen_HTML_Elements.td_([ Halogen_HTML_Elements.input([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.inputTypeIsProp)(DOM_HTML_Indexed_InputType.InputUrl.value), Halogen_HTML_Properties.id_("url"), Util.class_("w-100 mv1"), Halogen_HTML_Properties.required(true), Halogen_HTML_Properties.name("url"), Halogen_HTML_Properties.autofocus(Data_String_Common["null"](v.bm.url)), Halogen_HTML_Properties.value(v.edit_bm.url), Halogen_HTML_Events.onValueChange(editField(Eurl.create)) ]) ]) ]), Halogen_HTML_Elements.tr_([ Halogen_HTML_Elements.td_([ Halogen_HTML_Elements.label([ Halogen_HTML_Properties["for"]("title") ])([ Halogen_HTML_Core.text("title") ]) ]), Halogen_HTML_Elements.td_([ Halogen_HTML_Elements.input([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.inputTypeIsProp)(DOM_HTML_Indexed_InputType.InputText.value), Halogen_HTML_Properties.id_("title"), Util.class_("w-100 mv1"), Halogen_HTML_Properties.name("title"), Halogen_HTML_Properties.value(v.edit_bm.title), Halogen_HTML_Events.onValueChange(editField(Etitle.create)) ]) ]) ]), Halogen_HTML_Elements.tr_([ Halogen_HTML_Elements.td_([ Halogen_HTML_Elements.label([ Halogen_HTML_Properties["for"]("description") ])([ Halogen_HTML_Core.text("description") ]) ]), Halogen_HTML_Elements.td_([ Halogen_HTML_Elements.textarea([ Util.class_("w-100 mt1 mid-gray"), Halogen_HTML_Properties.id_("description"), Halogen_HTML_Properties.name("description"), Halogen_HTML_Properties.rows(4), Halogen_HTML_Properties.value(v.edit_bm.description), Halogen_HTML_Events.onValueChange(editField(Edescription.create)) ]) ]) ]), Halogen_HTML_Elements.tr_([ Halogen_HTML_Elements.td_([ Halogen_HTML_Elements.label([ Halogen_HTML_Properties["for"]("tags") ])([ Halogen_HTML_Core.text("tags") ]) ]), Halogen_HTML_Elements.td_([ Halogen_HTML_Elements.input([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.inputTypeIsProp)(DOM_HTML_Indexed_InputType.InputText.value), Halogen_HTML_Properties.id_("tags"), Util.class_("w-100 mv1"), Halogen_HTML_Properties.name("tags"), Halogen_HTML_Properties.autocomplete(false), Util.attr("autocapitalize")("off"), Halogen_HTML_Properties.autofocus(!Data_String_Common["null"](v.bm.url)), Halogen_HTML_Properties.value(v.edit_bm.tags), Halogen_HTML_Events.onValueChange(editField(Etags.create)) ]) ]) ]), Halogen_HTML_Elements.tr_([ Halogen_HTML_Elements.td_([ Halogen_HTML_Elements.label([ Halogen_HTML_Properties["for"]("private") ])([ Halogen_HTML_Core.text("private") ]) ]), Halogen_HTML_Elements.td_([ Halogen_HTML_Elements.input([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.inputTypeIsProp)(DOM_HTML_Indexed_InputType.InputCheckbox.value), Halogen_HTML_Properties.id_("private"), Util.class_("private pointer"), Halogen_HTML_Properties.name("private"), Halogen_HTML_Properties.checked(v["edit_bm"]["private"]), Halogen_HTML_Events.onChecked(editField(Eprivate.create)) ]) ]) ]), Halogen_HTML_Elements.tr_([ Halogen_HTML_Elements.td_([ Halogen_HTML_Elements.label([ Halogen_HTML_Properties["for"]("toread") ])([ Halogen_HTML_Core.text("read later") ]) ]), Halogen_HTML_Elements.td_([ Halogen_HTML_Elements.input([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.inputTypeIsProp)(DOM_HTML_Indexed_InputType.InputCheckbox.value), Halogen_HTML_Properties.id_("toread"), Util.class_("toread pointer"), Halogen_HTML_Properties.name("toread"), Halogen_HTML_Properties.checked(v.edit_bm.toread), Halogen_HTML_Events.onChecked(editField(Etoread.create)) ]) ]) ]), Halogen_HTML_Elements.tr_([ Halogen_HTML_Elements.td_([ ]), Halogen_HTML_Elements.td_([ Halogen_HTML_Elements.input([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.inputTypeIsProp)(DOM_HTML_Indexed_InputType.InputSubmit.value), Util.class_("ph3 pv2 input-reset ba b--navy bg-transparent pointer f6 dib mt1 dim"), Halogen_HTML_Properties.value((function () { + var $26 = v.bm.bid > 0; + if ($26) { + return "update bookmark"; + }; + return "add bookmark"; + })()) ]) ]) ]) ]) ]) ]); + var display_destroyed = Halogen_HTML_Elements.p([ Util.class_("red") ])([ Halogen_HTML_Core.text("you killed this bookmark") ]); + return Halogen_HTML_Elements.div_([ (function () { + var $27 = !v.destroyed; + if ($27) { + return display_edit; + }; + return display_destroyed; + })() ]); + }; + var mkState = function (b) { + return { + bm: b, + edit_bm: b, + deleteAsk: false, + destroyed: false + }; + }; + var $$eval = function (v) { + if (v instanceof BDeleteAsk) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Control_Monad_State_Class.modify_(Halogen_Query_HalogenM.monadStateHalogenM)(function (v1) { + var $31 = {}; + for (var $32 in v1) { + if ({}.hasOwnProperty.call(v1, $32)) { + $31[$32] = v1[$32]; + }; + }; + $31.deleteAsk = v.value0; + return $31; + }))(function () { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value1); + }); + }; + if (v instanceof BDestroy) { + return Control_Bind.bind(Halogen_Query_HalogenM.bindHalogenM)(Control_Monad_State_Class.gets(Halogen_Query_HalogenM.monadStateHalogenM)(function (v1) { + return v1.bm.bid; + }))(function (v1) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Functor["void"](Halogen_Query_HalogenM.functorHalogenM)(Effect_Aff_Class.liftAff(Halogen_Query_HalogenM.monadAffHalogenM(Effect_Aff_Class.monadAffAff))(App.destroy(v1))))(function () { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Control_Monad_State_Class.modify_(Halogen_Query_HalogenM.monadStateHalogenM)(function (v2) { + var $37 = {}; + for (var $38 in v2) { + if ({}.hasOwnProperty.call(v2, $38)) { + $37[$38] = v2[$38]; + }; + }; + $37.destroyed = true; + return $37; + }))(function () { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value0); + }); + }); + }); + }; + if (v instanceof BEditField) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Setter.modifying(Halogen_Query_HalogenM.monadStateHalogenM)(_edit_bm(Data_Profunctor_Strong.strongFn))((function () { + if (v.value0 instanceof Eurl) { + return function (v1) { + return { + url: v.value0.value0, + title: v1.title, + description: v1.description, + tags: v1.tags, + "private": v1["private"], + toread: v1.toread, + bid: v1.bid, + slug: v1.slug, + selected: v1.selected, + time: v1.time, + archiveUrl: v1.archiveUrl + }; + }; + }; + if (v.value0 instanceof Etitle) { + return function (v1) { + return { + url: v1.url, + title: v.value0.value0, + description: v1.description, + tags: v1.tags, + "private": v1["private"], + toread: v1.toread, + bid: v1.bid, + slug: v1.slug, + selected: v1.selected, + time: v1.time, + archiveUrl: v1.archiveUrl + }; + }; + }; + if (v.value0 instanceof Edescription) { + return function (v1) { + return { + url: v1.url, + title: v1.title, + description: v.value0.value0, + tags: v1.tags, + "private": v1["private"], + toread: v1.toread, + bid: v1.bid, + slug: v1.slug, + selected: v1.selected, + time: v1.time, + archiveUrl: v1.archiveUrl + }; + }; + }; + if (v.value0 instanceof Etags) { + return function (v1) { + return { + url: v1.url, + title: v1.title, + description: v1.description, + tags: v.value0.value0, + "private": v1["private"], + toread: v1.toread, + bid: v1.bid, + slug: v1.slug, + selected: v1.selected, + time: v1.time, + archiveUrl: v1.archiveUrl + }; + }; + }; + if (v.value0 instanceof Eprivate) { + return function (v1) { + return { + url: v1.url, + title: v1.title, + description: v1.description, + tags: v1.tags, + "private": v.value0.value0, + toread: v1.toread, + bid: v1.bid, + slug: v1.slug, + selected: v1.selected, + time: v1.time, + archiveUrl: v1.archiveUrl + }; + }; + }; + if (v.value0 instanceof Etoread) { + return function (v1) { + return { + url: v1.url, + title: v1.title, + description: v1.description, + tags: v1.tags, + "private": v1["private"], + toread: v.value0.value0, + bid: v1.bid, + slug: v1.slug, + selected: v1.selected, + time: v1.time, + archiveUrl: v1.archiveUrl + }; + }; + }; + throw new Error("Failed pattern match at Component.Add (line 160, column 17 - line 166, column 36): " + [ v.value0.constructor.name ]); + })()))(function () { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value1); + }); + }; + if (v instanceof BEditSubmit) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Effect_Class.liftEffect(Halogen_Query_HalogenM.monadEffectHalogenM(Effect_Aff.monadEffectAff))(Web_Event_Event.preventDefault(v.value0)))(function () { + return Control_Bind.bind(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Getter.use(Halogen_Query_HalogenM.monadStateHalogenM)(_edit_bm(Data_Lens_Internal_Forget.strongForget)))(function (v1) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Functor["void"](Halogen_Query_HalogenM.functorHalogenM)(Effect_Aff_Class.liftAff(Halogen_Query_HalogenM.monadAffHalogenM(Effect_Aff_Class.monadAffAff))(App.editBookmark(v1))))(function () { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Setter.assign(Halogen_Query_HalogenM.monadStateHalogenM)(_bm(Data_Profunctor_Strong.strongFn))(v1))(function () { + return Control_Bind.bind(Halogen_Query_HalogenM.bindHalogenM)(Effect_Class.liftEffect(Halogen_Query_HalogenM.monadEffectHalogenM(Effect_Aff.monadEffectAff))(Util["_loc"]))(function (v2) { + return Control_Bind.bind(Halogen_Query_HalogenM.bindHalogenM)(Effect_Class.liftEffect(Halogen_Query_HalogenM.monadEffectHalogenM(Effect_Aff.monadEffectAff))(Web_HTML.window))(function (v3) { + return Control_Bind.bind(Halogen_Query_HalogenM.bindHalogenM)(Effect_Class.liftEffect(Halogen_Query_HalogenM.monadEffectHalogenM(Effect_Aff.monadEffectAff))(Util["_curQuerystring"]))(function (v4) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)((function () { + var v5 = Util["_lookupQueryStringValue"](v4)("next"); + if (v5 instanceof Data_Maybe.Just) { + return Effect_Class.liftEffect(Halogen_Query_HalogenM.monadEffectHalogenM(Effect_Aff.monadEffectAff))(Web_HTML_Location.setHref(v5.value0)(v2)); + }; + return Effect_Class.liftEffect(Halogen_Query_HalogenM.monadEffectHalogenM(Effect_Aff.monadEffectAff))(Globals.closeWindow(v3)); + })())(function () { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value1); + }); + }); + }); + }); + }); + }); + }); + }); + }; + throw new Error("Failed pattern match at Component.Add (line 150, column 3 - line 150, column 58): " + [ v.constructor.name ]); + }; + var app = Globals["app'"](Data_Unit.unit); + return Halogen_Component.component(Halogen_HTML_Core.bifunctorHTML)({ + initialState: Data_Function["const"](mkState(b$prime)), + render: render, + "eval": $$eval, + receiver: Data_Function["const"](Data_Maybe.Nothing.value) + }); + }; + exports["BEditField"] = BEditField; + exports["BEditSubmit"] = BEditSubmit; + exports["BDeleteAsk"] = BDeleteAsk; + exports["BDestroy"] = BDestroy; + exports["Eurl"] = Eurl; + exports["Etitle"] = Etitle; + exports["Edescription"] = Edescription; + exports["Etags"] = Etags; + exports["Eprivate"] = Eprivate; + exports["Etoread"] = Etoread; + exports["_bm"] = _bm; + exports["_edit_bm"] = _edit_bm; + exports["addbmark"] = addbmark; +})(PS["Component.Add"] = PS["Component.Add"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var App = PS["App"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Monad_State_Class = PS["Control.Monad.State.Class"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var DOM_HTML_Indexed_ButtonType = PS["DOM.HTML.Indexed.ButtonType"]; + var DOM_HTML_Indexed_InputType = PS["DOM.HTML.Indexed.InputType"]; + var Data_Array = PS["Data.Array"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Lens = PS["Data.Lens"]; + var Data_Lens_Getter = PS["Data.Lens.Getter"]; + var Data_Lens_Internal_Forget = PS["Data.Lens.Internal.Forget"]; + var Data_Lens_Lens = PS["Data.Lens.Lens"]; + var Data_Lens_Setter = PS["Data.Lens.Setter"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Monoid = PS["Data.Monoid"]; + var Data_Nullable = PS["Data.Nullable"]; + var Data_Profunctor_Strong = PS["Data.Profunctor.Strong"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Show = PS["Data.Show"]; + var Data_String = PS["Data.String"]; + var Data_String_CodePoints = PS["Data.String.CodePoints"]; + var Data_String_Common = PS["Data.String.Common"]; + var Data_String_Pattern = PS["Data.String.Pattern"]; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unit = PS["Data.Unit"]; + var Effect_Aff = PS["Effect.Aff"]; + var Effect_Aff_Class = PS["Effect.Aff.Class"]; + var Effect_Class = PS["Effect.Class"]; + var Globals = PS["Globals"]; + var Halogen = PS["Halogen"]; + var Halogen_Component = PS["Halogen.Component"]; + var Halogen_HTML = PS["Halogen.HTML"]; + var Halogen_HTML_Core = PS["Halogen.HTML.Core"]; + var Halogen_HTML_Elements = PS["Halogen.HTML.Elements"]; + var Halogen_HTML_Events = PS["Halogen.HTML.Events"]; + var Halogen_HTML_Properties = PS["Halogen.HTML.Properties"]; + var Halogen_Query_HalogenM = PS["Halogen.Query.HalogenM"]; + var Model = PS["Model"]; + var Prelude = PS["Prelude"]; + var Util = PS["Util"]; + var Web_Event_Event = PS["Web.Event.Event"]; + var Eurl = (function () { + function Eurl(value0) { + this.value0 = value0; + }; + Eurl.create = function (value0) { + return new Eurl(value0); + }; + return Eurl; + })(); + var Etitle = (function () { + function Etitle(value0) { + this.value0 = value0; + }; + Etitle.create = function (value0) { + return new Etitle(value0); + }; + return Etitle; + })(); + var Edescription = (function () { + function Edescription(value0) { + this.value0 = value0; + }; + Edescription.create = function (value0) { + return new Edescription(value0); + }; + return Edescription; + })(); + var Etags = (function () { + function Etags(value0) { + this.value0 = value0; + }; + Etags.create = function (value0) { + return new Etags(value0); + }; + return Etags; + })(); + var Eprivate = (function () { + function Eprivate(value0) { + this.value0 = value0; + }; + Eprivate.create = function (value0) { + return new Eprivate(value0); + }; + return Eprivate; + })(); + var Etoread = (function () { + function Etoread(value0) { + this.value0 = value0; + }; + Etoread.create = function (value0) { + return new Etoread(value0); + }; + return Etoread; + })(); + var BStar = (function () { + function BStar(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + BStar.create = function (value0) { + return function (value1) { + return new BStar(value0, value1); + }; + }; + return BStar; + })(); + var BDeleteAsk = (function () { + function BDeleteAsk(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + BDeleteAsk.create = function (value0) { + return function (value1) { + return new BDeleteAsk(value0, value1); + }; + }; + return BDeleteAsk; + })(); + var BDestroy = (function () { + function BDestroy(value0) { + this.value0 = value0; + }; + BDestroy.create = function (value0) { + return new BDestroy(value0); + }; + return BDestroy; + })(); + var BEdit = (function () { + function BEdit(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + BEdit.create = function (value0) { + return function (value1) { + return new BEdit(value0, value1); + }; + }; + return BEdit; + })(); + var BEditField = (function () { + function BEditField(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + BEditField.create = function (value0) { + return function (value1) { + return new BEditField(value0, value1); + }; + }; + return BEditField; + })(); + var BEditSubmit = (function () { + function BEditSubmit(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + BEditSubmit.create = function (value0) { + return function (value1) { + return new BEditSubmit(value0, value1); + }; + }; + return BEditSubmit; + })(); + var BMarkRead = (function () { + function BMarkRead(value0) { + this.value0 = value0; + }; + BMarkRead.create = function (value0) { + return new BMarkRead(value0); + }; + return BMarkRead; + })(); + var BNotifyRemove = (function () { + function BNotifyRemove() { + + }; + BNotifyRemove.value = new BNotifyRemove(); + return BNotifyRemove; + })(); + var _edit_bm = function (dictStrong) { + return Data_Lens_Lens.lens(function (v) { + return v.edit_bm; + })(function (v) { + return function (v1) { + return { + edit_bm: v1, + bm: v.bm, + deleteAsk: v.deleteAsk, + edit: v.edit + }; + }; + })(dictStrong); + }; + var _edit = function (dictStrong) { + return Data_Lens_Lens.lens(function (v) { + return v.edit; + })(function (v) { + return function (v1) { + return { + edit: v1, + bm: v.bm, + deleteAsk: v.deleteAsk, + edit_bm: v.edit_bm + }; + }; + })(dictStrong); + }; + var _bm = function (dictStrong) { + return Data_Lens_Lens.lens(function (v) { + return v.bm; + })(function (v) { + return function (v1) { + return { + bm: v1, + deleteAsk: v.deleteAsk, + edit: v.edit, + edit_bm: v.edit_bm + }; + }; + })(dictStrong); + }; + var bmark = function (b$prime) { + var mkState = function (b) { + return { + bm: b, + edit_bm: b, + deleteAsk: false, + edit: false + }; + }; + var $$eval = function (v) { + if (v instanceof BStar) { + return Control_Bind.bind(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Getter.use(Halogen_Query_HalogenM.monadStateHalogenM)(_bm(Data_Lens_Internal_Forget.strongForget)))(function (v1) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Effect_Aff_Class.liftAff(Halogen_Query_HalogenM.monadAffHalogenM(Effect_Aff_Class.monadAffAff))(App.toggleStar(v1.bid)((function () { + if (v.value0) { + return App.Star.value; + }; + return App.UnStar.value; + })())))(function () { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Setter.modifying(Halogen_Query_HalogenM.monadStateHalogenM)(_bm(Data_Profunctor_Strong.strongFn))(function (v2) { + return { + url: v2.url, + title: v2.title, + description: v2.description, + tags: v2.tags, + "private": v2["private"], + toread: v2.toread, + bid: v2.bid, + slug: v2.slug, + selected: v.value0, + time: v2.time, + archiveUrl: v2.archiveUrl + }; + }))(function () { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Setter.modifying(Halogen_Query_HalogenM.monadStateHalogenM)(_edit_bm(Data_Profunctor_Strong.strongFn))(function (v2) { + return { + url: v2.url, + title: v2.title, + description: v2.description, + tags: v2.tags, + "private": v2["private"], + toread: v2.toread, + bid: v2.bid, + slug: v2.slug, + selected: v.value0, + time: v2.time, + archiveUrl: v2.archiveUrl + }; + }))(function () { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value1); + }); + }); + }); + }); + }; + if (v instanceof BDeleteAsk) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Control_Monad_State_Class.modify_(Halogen_Query_HalogenM.monadStateHalogenM)(function (v1) { + var $34 = {}; + for (var $35 in v1) { + if ({}.hasOwnProperty.call(v1, $35)) { + $34[$35] = v1[$35]; + }; + }; + $34.deleteAsk = v.value0; + return $34; + }))(function () { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value1); + }); + }; + if (v instanceof BDestroy) { + return Control_Bind.bind(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Getter.use(Halogen_Query_HalogenM.monadStateHalogenM)(_bm(Data_Lens_Internal_Forget.strongForget)))(function (v1) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Functor["void"](Halogen_Query_HalogenM.functorHalogenM)(Effect_Aff_Class.liftAff(Halogen_Query_HalogenM.monadAffHalogenM(Effect_Aff_Class.monadAffAff))(App.destroy(v1.bid))))(function () { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Halogen_Query_HalogenM.raise(BNotifyRemove.value))(function () { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value0); + }); + }); + }); + }; + if (v instanceof BMarkRead) { + return Control_Bind.bind(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Getter.use(Halogen_Query_HalogenM.monadStateHalogenM)(_bm(Data_Lens_Internal_Forget.strongForget)))(function (v1) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Functor["void"](Halogen_Query_HalogenM.functorHalogenM)(Effect_Aff_Class.liftAff(Halogen_Query_HalogenM.monadAffHalogenM(Effect_Aff_Class.monadAffAff))(App.markRead(v1.bid))))(function () { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Setter.modifying(Halogen_Query_HalogenM.monadStateHalogenM)(_bm(Data_Profunctor_Strong.strongFn))(function (v2) { + return { + url: v2.url, + title: v2.title, + description: v2.description, + tags: v2.tags, + "private": v2["private"], + toread: false, + bid: v2.bid, + slug: v2.slug, + selected: v2.selected, + time: v2.time, + archiveUrl: v2.archiveUrl + }; + }))(function () { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value0); + }); + }); + }); + }; + if (v instanceof BEdit) { + return Control_Bind.bind(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Getter.use(Halogen_Query_HalogenM.monadStateHalogenM)(_bm(Data_Lens_Internal_Forget.strongForget)))(function (v1) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Setter.assign(Halogen_Query_HalogenM.monadStateHalogenM)(_edit_bm(Data_Profunctor_Strong.strongFn))(v1))(function () { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Setter.assign(Halogen_Query_HalogenM.monadStateHalogenM)(_edit(Data_Profunctor_Strong.strongFn))(v.value0))(function () { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value1); + }); + }); + }); + }; + if (v instanceof BEditField) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Setter.modifying(Halogen_Query_HalogenM.monadStateHalogenM)(_edit_bm(Data_Profunctor_Strong.strongFn))((function () { + if (v.value0 instanceof Eurl) { + return function (v1) { + return { + url: v.value0.value0, + title: v1.title, + description: v1.description, + tags: v1.tags, + "private": v1["private"], + toread: v1.toread, + bid: v1.bid, + slug: v1.slug, + selected: v1.selected, + time: v1.time, + archiveUrl: v1.archiveUrl + }; + }; + }; + if (v.value0 instanceof Etitle) { + return function (v1) { + return { + url: v1.url, + title: v.value0.value0, + description: v1.description, + tags: v1.tags, + "private": v1["private"], + toread: v1.toread, + bid: v1.bid, + slug: v1.slug, + selected: v1.selected, + time: v1.time, + archiveUrl: v1.archiveUrl + }; + }; + }; + if (v.value0 instanceof Edescription) { + return function (v1) { + return { + url: v1.url, + title: v1.title, + description: v.value0.value0, + tags: v1.tags, + "private": v1["private"], + toread: v1.toread, + bid: v1.bid, + slug: v1.slug, + selected: v1.selected, + time: v1.time, + archiveUrl: v1.archiveUrl + }; + }; + }; + if (v.value0 instanceof Etags) { + return function (v1) { + return { + url: v1.url, + title: v1.title, + description: v1.description, + tags: v.value0.value0, + "private": v1["private"], + toread: v1.toread, + bid: v1.bid, + slug: v1.slug, + selected: v1.selected, + time: v1.time, + archiveUrl: v1.archiveUrl + }; + }; + }; + if (v.value0 instanceof Eprivate) { + return function (v1) { + return { + url: v1.url, + title: v1.title, + description: v1.description, + tags: v1.tags, + "private": v.value0.value0, + toread: v1.toread, + bid: v1.bid, + slug: v1.slug, + selected: v1.selected, + time: v1.time, + archiveUrl: v1.archiveUrl + }; + }; + }; + if (v.value0 instanceof Etoread) { + return function (v1) { + return { + url: v1.url, + title: v1.title, + description: v1.description, + tags: v1.tags, + "private": v1["private"], + toread: v.value0.value0, + bid: v1.bid, + slug: v1.slug, + selected: v1.selected, + time: v1.time, + archiveUrl: v1.archiveUrl + }; + }; + }; + throw new Error("Failed pattern match at Component.BMark (line 231, column 17 - line 237, column 36): " + [ v.value0.constructor.name ]); + })()))(function () { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value1); + }); + }; + if (v instanceof BEditSubmit) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Effect_Class.liftEffect(Halogen_Query_HalogenM.monadEffectHalogenM(Effect_Aff.monadEffectAff))(Web_Event_Event.preventDefault(v.value0)))(function () { + return Control_Bind.bind(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Getter.use(Halogen_Query_HalogenM.monadStateHalogenM)(_edit_bm(Data_Lens_Internal_Forget.strongForget)))(function (v1) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Functor["void"](Halogen_Query_HalogenM.functorHalogenM)(Effect_Aff_Class.liftAff(Halogen_Query_HalogenM.monadAffHalogenM(Effect_Aff_Class.monadAffAff))(App.editBookmark(v1))))(function () { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Setter.assign(Halogen_Query_HalogenM.monadStateHalogenM)(_bm(Data_Profunctor_Strong.strongFn))(v1))(function () { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Setter.assign(Halogen_Query_HalogenM.monadStateHalogenM)(_edit(Data_Profunctor_Strong.strongFn))(false))(function () { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value1); + }); + }); + }); + }); + }); + }; + throw new Error("Failed pattern match at Component.BMark (line 193, column 3 - line 193, column 62): " + [ v.constructor.name ]); + }; + var app = Globals["app'"](Data_Unit.unit); + var render = function (v) { + var toTextarea = function (input) { + return Data_Array.drop(1)(Data_Foldable.foldMap(Data_Foldable.foldableArray)(Data_Monoid.monoidArray)(function (x) { + return [ Halogen_HTML_Elements.br_, Halogen_HTML_Core.text(x) ]; + })(Data_String_Common.split("\x0a")(input))); + }; + var star = Data_Monoid.guard(Data_Monoid.monoidArray)(app.dat.isowner)([ Halogen_HTML_Elements.div([ Util.class_("star fl pointer" + Data_Monoid.guard(Data_Monoid.monoidString)(v.bm.selected)(" selected")) ])([ Halogen_HTML_Elements.button([ Util.class_("moon-gray"), Halogen_HTML_Events.onClick(Halogen_HTML_Events.input_(BStar.create(!v.bm.selected))) ])([ Halogen_HTML_Core.text("\u272d") ]) ]) ]); + var mmoment = Globals.mmoment8601(v.bm.time); + var links = Data_Monoid.guard(Data_Monoid.monoidArray)(app.dat.isowner)([ Halogen_HTML_Elements.div([ Util.class_("edit_links di") ])([ Halogen_HTML_Elements.button([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.buttonTypeIsProp)(DOM_HTML_Indexed_ButtonType.ButtonButton.value), Halogen_HTML_Events.onClick(Halogen_HTML_Events.input_(BEdit.create(true))), Util.class_("edit light-silver hover-blue") ])([ Halogen_HTML_Core.text("edit\xa0\xa0") ]), Halogen_HTML_Elements.div([ Util.class_("delete_link di") ])([ Halogen_HTML_Elements.button([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.buttonTypeIsProp)(DOM_HTML_Indexed_ButtonType.ButtonButton.value), Halogen_HTML_Events.onClick(Halogen_HTML_Events.input_(BDeleteAsk.create(true))), Util.class_("delete light-silver hover-blue" + Data_Monoid.guard(Data_Monoid.monoidString)(v.deleteAsk)(" dn")) ])([ Halogen_HTML_Core.text("delete") ]), Halogen_HTML_Elements.span([ Util.class_("confirm red" + Data_Monoid.guard(Data_Monoid.monoidString)(!v.deleteAsk)(" dn")) ])([ Halogen_HTML_Elements.button([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.buttonTypeIsProp)(DOM_HTML_Indexed_ButtonType.ButtonButton.value), Halogen_HTML_Events.onClick(Halogen_HTML_Events.input_(BDeleteAsk.create(false))) ])([ Halogen_HTML_Core.text("cancel\xa0/\xa0") ]), Halogen_HTML_Elements.button([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.buttonTypeIsProp)(DOM_HTML_Indexed_ButtonType.ButtonButton.value), Halogen_HTML_Events.onClick(Halogen_HTML_Events.input_(BDestroy.create)), Util.class_("red") ])([ Halogen_HTML_Core.text("destroy") ]) ]) ]) ]), Halogen_HTML_Elements.div([ Util.class_("read di") ])(Data_Monoid.guard(Data_Monoid.monoidArray)(v.bm.toread)([ Halogen_HTML_Core.text("\xa0\xa0"), Halogen_HTML_Elements.button([ Halogen_HTML_Events.onClick(Halogen_HTML_Events.input_(BMarkRead.create)), Util.class_("mark_read") ])([ Halogen_HTML_Core.text("mark as read") ]) ])) ]); + var linkToFilterTag = function (tag) { + return Util.fromNullableStr(app.userR) + ("/t:" + tag); + }; + var linkToFilterSingle = function (slug) { + return Util.fromNullableStr(app.userR) + ("/b:" + slug); + }; + var editField = function (f) { + return function ($64) { + return Halogen_HTML_Events.input(BEditField.create)(f($64)); + }; + }; + var display_edit = [ Halogen_HTML_Elements.div([ Util.class_("edit_bookmark_form pa2 pt0 bg-white") ])([ Halogen_HTML_Elements.form([ Halogen_HTML_Events.onSubmit(Halogen_HTML_Events.input(BEditSubmit.create)) ])([ Halogen_HTML_Elements.div_([ Halogen_HTML_Core.text("url") ]), Halogen_HTML_Elements.input([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.inputTypeIsProp)(DOM_HTML_Indexed_InputType.InputUrl.value), Util.class_("url w-100 mb2 pt1 f7 edit_form_input"), Halogen_HTML_Properties.required(true), Halogen_HTML_Properties.name("url"), Halogen_HTML_Properties.value(v.edit_bm.url), Halogen_HTML_Events.onValueChange(editField(Eurl.create)) ]), Halogen_HTML_Elements.br_, Halogen_HTML_Elements.div_([ Halogen_HTML_Core.text("title") ]), Halogen_HTML_Elements.input([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.inputTypeIsProp)(DOM_HTML_Indexed_InputType.InputText.value), Util.class_("title w-100 mb2 pt1 f7 edit_form_input"), Halogen_HTML_Properties.name("title"), Halogen_HTML_Properties.value(v.edit_bm.title), Halogen_HTML_Events.onValueChange(editField(Etitle.create)) ]), Halogen_HTML_Elements.br_, Halogen_HTML_Elements.div_([ Halogen_HTML_Core.text("description") ]), Halogen_HTML_Elements.textarea([ Util.class_("description w-100 mb1 pt1 f7 edit_form_input"), Halogen_HTML_Properties.name("description"), Halogen_HTML_Properties.rows(5), Halogen_HTML_Properties.value(v.edit_bm.description), Halogen_HTML_Events.onValueChange(editField(Edescription.create)) ]), Halogen_HTML_Elements.br_, Halogen_HTML_Elements.div([ Halogen_HTML_Properties.id_("tags_input_box") ])([ Halogen_HTML_Elements.div_([ Halogen_HTML_Core.text("tags") ]), Halogen_HTML_Elements.input([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.inputTypeIsProp)(DOM_HTML_Indexed_InputType.InputText.value), Util.class_("tags w-100 mb1 pt1 f7 edit_form_input"), Halogen_HTML_Properties.name("tags"), Halogen_HTML_Properties.autocomplete(false), Util.attr("autocapitalize")("off"), Halogen_HTML_Properties.value(v.edit_bm.tags), Halogen_HTML_Events.onValueChange(editField(Etags.create)) ]), Halogen_HTML_Elements.br_ ]), Halogen_HTML_Elements.div([ Util.class_("edit_form_checkboxes mv3") ])([ Halogen_HTML_Elements.input([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.inputTypeIsProp)(DOM_HTML_Indexed_InputType.InputCheckbox.value), Util.class_("private pointer"), Halogen_HTML_Properties.id_("edit_private"), Halogen_HTML_Properties.name("private"), Halogen_HTML_Properties.checked(v["edit_bm"]["private"]), Halogen_HTML_Events.onChecked(editField(Eprivate.create)) ]), Halogen_HTML_Core.text(" "), Halogen_HTML_Elements.label([ Halogen_HTML_Properties["for"]("edit_private"), Util.class_("mr2") ])([ Halogen_HTML_Core.text("private") ]), Halogen_HTML_Core.text(" "), Halogen_HTML_Elements.input([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.inputTypeIsProp)(DOM_HTML_Indexed_InputType.InputCheckbox.value), Util.class_("toread pointer"), Halogen_HTML_Properties.id_("edit_toread"), Halogen_HTML_Properties.name("toread"), Halogen_HTML_Properties.checked(v.edit_bm.toread), Halogen_HTML_Events.onChecked(editField(Etoread.create)) ]), Halogen_HTML_Core.text(" "), Halogen_HTML_Elements.label([ Halogen_HTML_Properties["for"]("edit_toread") ])([ Halogen_HTML_Core.text("to-read") ]), Halogen_HTML_Elements.br_ ]), Halogen_HTML_Elements.input([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.inputTypeIsProp)(DOM_HTML_Indexed_InputType.InputSubmit.value), Util.class_("mr1 pv1 ph2 dark-gray ba b--moon-gray bg-near-white pointer rdim"), Halogen_HTML_Properties.value("save") ]), Halogen_HTML_Core.text(" "), Halogen_HTML_Elements.input([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.inputTypeIsProp)(DOM_HTML_Indexed_InputType.InputReset.value), Util.class_("pv1 ph2 dark-gray ba b--moon-gray bg-near-white pointer rdim"), Halogen_HTML_Properties.value("cancel"), Halogen_HTML_Events.onClick(Halogen_HTML_Events.input_(BEdit.create(false))) ]) ]) ]) ]; + var display = [ Halogen_HTML_Elements.div([ Util.class_("display") ])(Data_Semigroup.append(Data_Semigroup.semigroupArray)([ Halogen_HTML_Elements.a([ Halogen_HTML_Properties.href(v.bm.url), Halogen_HTML_Properties.target("_blank"), Util.class_("link f5 lh-title" + Data_Monoid.guard(Data_Monoid.monoidString)(v.bm.toread)(" unread")) ])([ Halogen_HTML_Core.text((function () { + var $59 = Data_String_Common["null"](v.bm.title); + if ($59) { + return "[no title]"; + }; + return v.bm.title; + })()) ]), Halogen_HTML_Elements.br_, Halogen_HTML_Elements.a([ Halogen_HTML_Properties.href(v.bm.url), Util.class_("link f7 gray hover-blue") ])([ Halogen_HTML_Core.text(v.bm.url) ]), Halogen_HTML_Elements.a([ Halogen_HTML_Properties.href(Data_Maybe.fromMaybe("http://archive.is/" + v.bm.url)(Data_Nullable.toMaybe(v.bm.archiveUrl))), Util.class_("link f7 gray hover-blue ml2" + Data_Monoid.guard(Data_Monoid.monoidString)(Data_Maybe.isJust(Data_Nullable.toMaybe(v.bm.archiveUrl)))(" green")), Halogen_HTML_Properties.target("_blank"), Halogen_HTML_Properties.title("archive link") ])([ (function () { + var $60 = Data_Maybe.isJust(Data_Nullable.toMaybe(v.bm.archiveUrl)); + if ($60) { + return Halogen_HTML_Core.text("\u2611"); + }; + return Halogen_HTML_Core.text("\u2610"); + })() ]), Halogen_HTML_Elements.br_, Halogen_HTML_Elements.div([ Util.class_("description mt1 mid-gray") ])(toTextarea(v.bm.description)), Halogen_HTML_Elements.div([ Util.class_("tags") ])(Data_Monoid.guard(Data_Monoid.monoidFn(Data_Monoid.monoidFn(Data_Monoid.monoidArray)))(!Data_String_Common["null"](v.bm.tags))(Data_Functor.map(Data_Functor.functorArray))(function (tag) { + return Halogen_HTML_Elements.a([ Util.class_("link tag mr1" + Data_Monoid.guard(Data_Monoid.monoidString)(Data_String_CodePoints.take(1)(tag) === ".")(" private")), Halogen_HTML_Properties.href(linkToFilterTag(tag)) ])([ Halogen_HTML_Core.text(tag) ]); + })(Data_String_Common.split(" ")(v.bm.tags))), Halogen_HTML_Elements.a([ Util.class_("link f7 dib gray w4"), Halogen_HTML_Properties.title(Data_Maybe.maybe(v.bm.time)(Data_Tuple.snd)(mmoment)), Halogen_HTML_Properties.href(linkToFilterSingle(v.bm.slug)) ])([ Halogen_HTML_Core.text(Data_Maybe.maybe("\xa0")(Data_Tuple.fst)(mmoment)) ]) ])(links)) ]; + return Halogen_HTML_Elements.div([ Halogen_HTML_Properties.id_(Data_Show.show(Data_Show.showInt)(v.bm.bid)), Util.class_("bookmark w-100 mw7 pa1 mb3" + Data_Monoid.guard(Data_Monoid.monoidString)(v["bm"]["private"])(" private")) ])(Data_Semigroup.append(Data_Semigroup.semigroupArray)(star)((function () { + if (v.edit) { + return display_edit; + }; + return display; + })())); + }; + return Halogen_Component.component(Halogen_HTML_Core.bifunctorHTML)({ + initialState: Data_Function["const"](mkState(b$prime)), + render: render, + "eval": $$eval, + receiver: Data_Function["const"](Data_Maybe.Nothing.value) + }); + }; + exports["BStar"] = BStar; + exports["BDeleteAsk"] = BDeleteAsk; + exports["BDestroy"] = BDestroy; + exports["BEdit"] = BEdit; + exports["BEditField"] = BEditField; + exports["BEditSubmit"] = BEditSubmit; + exports["BMarkRead"] = BMarkRead; + exports["Eurl"] = Eurl; + exports["Etitle"] = Etitle; + exports["Edescription"] = Edescription; + exports["Etags"] = Etags; + exports["Eprivate"] = Eprivate; + exports["Etoread"] = Etoread; + exports["BNotifyRemove"] = BNotifyRemove; + exports["_bm"] = _bm; + exports["_edit_bm"] = _edit_bm; + exports["_edit"] = _edit; + exports["bmark"] = bmark; +})(PS["Component.BMark"] = PS["Component.BMark"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Component_BMark = PS["Component.BMark"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Monad_State_Class = PS["Control.Monad.State.Class"]; + var Data_Array = PS["Data.Array"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Unit = PS["Data.Unit"]; + var Effect_Aff = PS["Effect.Aff"]; + var Halogen = PS["Halogen"]; + var Halogen_Component = PS["Halogen.Component"]; + var Halogen_HTML = PS["Halogen.HTML"]; + var Halogen_HTML_Elements = PS["Halogen.HTML.Elements"]; + var Halogen_HTML_Events = PS["Halogen.HTML.Events"]; + var Halogen_Query_HalogenM = PS["Halogen.Query.HalogenM"]; + var Model = PS["Model"]; + var Prelude = PS["Prelude"]; + var HandleBMessage = (function () { + function HandleBMessage(value0, value1, value2) { + this.value0 = value0; + this.value1 = value1; + this.value2 = value2; + }; + HandleBMessage.create = function (value0) { + return function (value1) { + return function (value2) { + return new HandleBMessage(value0, value1, value2); + }; + }; + }; + return HandleBMessage; + })(); + var blist = function (st) { + var render = function (bms) { + var renderBookmark = function (b) { + return Halogen_HTML.slot(b.bid)(Component_BMark.bmark(b))(Data_Unit.unit)(Halogen_HTML_Events.input(HandleBMessage.create(b.bid))); + }; + return Halogen_HTML_Elements.div_(Data_Functor.map(Data_Functor.functorArray)(renderBookmark)(bms)); + }; + var $$eval = function (v) { + var removeBookmark = function (bookmarkId) { + return Data_Array.filter(function (b) { + return b.bid !== bookmarkId; + }); + }; + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Control_Monad_State_Class.modify_(Halogen_Query_HalogenM.monadStateHalogenM)(removeBookmark(v.value0)))(function () { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value2); + }); + }; + return Halogen_Component.parentComponent(Data_Ord.ordInt)({ + initialState: Data_Function["const"](st), + render: render, + "eval": $$eval, + receiver: Data_Function["const"](Data_Maybe.Nothing.value) + }); + }; + exports["HandleBMessage"] = HandleBMessage; + exports["blist"] = blist; +})(PS["Component.BList"] = PS["Component.BList"] || {}); +(function(exports) {// use at your own risk! + exports.unsafeSetInnerHTML = function(element) { + return function(html) { + return function() { + element.innerHTML = html; + }; + }; + }; +})(PS["Component.RawHtml"] = PS["Component.RawHtml"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Component.RawHtml"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Monad_State_Class = PS["Control.Monad.State.Class"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_Function = PS["Data.Function"]; + var Data_Maybe = PS["Data.Maybe"]; + var Effect = PS["Effect"]; + var Effect_Aff = PS["Effect.Aff"]; + var Effect_Class = PS["Effect.Class"]; + var Globals = PS["Globals"]; + var Halogen = PS["Halogen"]; + var Halogen_Component = PS["Halogen.Component"]; + var Halogen_HTML = PS["Halogen.HTML"]; + var Halogen_HTML_Core = PS["Halogen.HTML.Core"]; + var Halogen_HTML_Elements = PS["Halogen.HTML.Elements"]; + var Halogen_HTML_Events = PS["Halogen.HTML.Events"]; + var Halogen_HTML_Properties = PS["Halogen.HTML.Properties"]; + var Halogen_Query = PS["Halogen.Query"]; + var Halogen_Query_HalogenM = PS["Halogen.Query.HalogenM"]; + var Halogen_Query_InputF = PS["Halogen.Query.InputF"]; + var Prelude = PS["Prelude"]; + var Web_HTML = PS["Web.HTML"]; + var SetInnerHTML = (function () { + function SetInnerHTML(value0) { + this.value0 = value0; + }; + SetInnerHTML.create = function (value0) { + return new SetInnerHTML(value0); + }; + return SetInnerHTML; + })(); + var Receive = (function () { + function Receive(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + Receive.create = function (value0) { + return function (value1) { + return new Receive(value0, value1); + }; + }; + return Receive; + })(); + var mkComponent = function (toRawHTML) { + var render = function (state) { + return Halogen_HTML_Elements.div([ Halogen_HTML_Properties.ref(state.elRef) ])([ ]); + }; + var $$eval = function (v) { + if (v instanceof SetInnerHTML) { + return Control_Bind.bind(Halogen_Query_HalogenM.bindHalogenM)(Control_Monad_State_Class.get(Halogen_Query_HalogenM.monadStateHalogenM))(function (v1) { + return Control_Bind.bind(Halogen_Query_HalogenM.bindHalogenM)(Halogen_Query.getHTMLElementRef(v1.elRef))(function (v2) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Foldable.for_(Halogen_Query_HalogenM.applicativeHalogenM)(Data_Foldable.foldableMaybe)(v2)(function (el) { + return Control_Bind.bind(Halogen_Query_HalogenM.bindHalogenM)(Control_Monad_State_Class.get(Halogen_Query_HalogenM.monadStateHalogenM))(function (v3) { + return Effect_Class.liftEffect(Halogen_Query_HalogenM.monadEffectHalogenM(Effect_Aff.monadEffectAff))($foreign.unsafeSetInnerHTML(el)(toRawHTML(v3.inputval))); + }); + }))(function () { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value0); + }); + }); + }); + }; + if (v instanceof Receive) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Control_Monad_State_Class.modify_(Halogen_Query_HalogenM.monadStateHalogenM)(function (v1) { + var $12 = {}; + for (var $13 in v1) { + if ({}.hasOwnProperty.call(v1, $13)) { + $12[$13] = v1[$13]; + }; + }; + $12.inputval = v.value0; + return $12; + }))(function () { + return $$eval(new SetInnerHTML(v.value1)); + }); + }; + throw new Error("Failed pattern match at Component.RawHtml (line 51, column 10 - line 62, column 27): " + [ v.constructor.name ]); + }; + return Halogen_Component.lifecycleComponent(Halogen_HTML_Core.bifunctorHTML)({ + initialState: function (inputval) { + return { + elRef: "inputval", + inputval: inputval + }; + }, + render: render, + "eval": $$eval, + receiver: Halogen_HTML_Events.input(Receive.create), + initializer: Data_Maybe.Just.create(Halogen_Query.action(SetInnerHTML.create)), + finalizer: Data_Maybe.Nothing.value + }); + }; + exports["SetInnerHTML"] = SetInnerHTML; + exports["Receive"] = Receive; + exports["mkComponent"] = mkComponent; +})(PS["Component.RawHtml"] = PS["Component.RawHtml"] || {}); +(function(exports) {exports.markedImpl = function(str) { + marked.setOptions({ + pedantic: false, + gfm: true + }); + return marked(str); + }; +})(PS["Foreign.Marked"] = PS["Foreign.Marked"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Foreign.Marked"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Globals = PS["Globals"]; + var Prelude = PS["Prelude"]; + var marked = function ($0) { + return Globals.RawHTML($foreign.markedImpl($0)); + }; + exports["marked"] = marked; +})(PS["Foreign.Marked"] = PS["Foreign.Marked"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Component_RawHtml = PS["Component.RawHtml"]; + var Effect_Aff = PS["Effect.Aff"]; + var Foreign_Marked = PS["Foreign.Marked"]; + var Halogen = PS["Halogen"]; + var Halogen_HTML = PS["Halogen.HTML"]; + var component = Component_RawHtml.mkComponent(Foreign_Marked.marked); + exports["component"] = component; +})(PS["Component.Markdown"] = PS["Component.Markdown"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Data_Array = PS["Data.Array"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Monoid = PS["Data.Monoid"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Show = PS["Data.Show"]; + var Data_String = PS["Data.String"]; + var Data_String_CodePoints = PS["Data.String.CodePoints"]; + var Data_String_Common = PS["Data.String.Common"]; + var Data_String_Pattern = PS["Data.String.Pattern"]; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unit = PS["Data.Unit"]; + var Effect_Aff = PS["Effect.Aff"]; + var Globals = PS["Globals"]; + var Halogen = PS["Halogen"]; + var Halogen_Component = PS["Halogen.Component"]; + var Halogen_HTML = PS["Halogen.HTML"]; + var Halogen_HTML_Core = PS["Halogen.HTML.Core"]; + var Halogen_HTML_Elements = PS["Halogen.HTML.Elements"]; + var Halogen_HTML_Properties = PS["Halogen.HTML.Properties"]; + var Halogen_Query_HalogenM = PS["Halogen.Query.HalogenM"]; + var Model = PS["Model"]; + var Prelude = PS["Prelude"]; + var Util = PS["Util"]; + var nlist = function (st$prime) { + var toTextarea = function (input) { + return Data_Array.drop(1)(Data_Foldable.foldMap(Data_Foldable.foldableArray)(Data_Monoid.monoidArray)(function (x) { + return [ Halogen_HTML_Elements.br_, Halogen_HTML_Core.text(x) ]; + })(Data_String_Common.split("\x0a")(input))); + }; + var mmoment = function (bm) { + return Globals.mmoment8601(bm.created); + }; + var mkState = function (notes$prime) { + return { + notes: notes$prime, + cur: Data_Maybe.Nothing.value, + deleteAsk: false, + edit: false + }; + }; + var $$eval = function (v) { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value0); + }; + var app = Globals["app'"](Data_Unit.unit); + var linkToFilterSingle = function (slug) { + return Util.fromNullableStr(app.userR) + ("/notes/" + slug); + }; + var render = function (v) { + var renderNote = function (bm) { + return Halogen_HTML_Elements.div([ Halogen_HTML_Properties.id_(Data_Show.show(Data_Show.showInt)(bm.id)), Util.class_("note w-100 mw7 pa1 mb2") ])([ Halogen_HTML_Elements.div([ Util.class_("display") ])([ Halogen_HTML_Elements.a([ Halogen_HTML_Properties.href(linkToFilterSingle(bm.slug)), Util.class_("link f5 lh-title") ])([ Halogen_HTML_Core.text((function () { + var $5 = Data_String_Common["null"](bm.title); + if ($5) { + return "[no title]"; + }; + return bm.title; + })()) ]), Halogen_HTML_Elements.br_, Halogen_HTML_Elements.div([ Util.class_("description mt1 mid-gray") ])(toTextarea(Data_String_CodePoints.take(200)(bm.text))), Halogen_HTML_Elements.a([ Util.class_("link f7 dib gray w4"), Halogen_HTML_Properties.title(Data_Maybe.maybe(bm.created)(Data_Tuple.snd)(mmoment(bm))), Halogen_HTML_Properties.href(linkToFilterSingle(bm.slug)) ])([ Halogen_HTML_Core.text(Data_Maybe.maybe("\xa0")(Data_Tuple.fst)(mmoment(bm))) ]) ]) ]); + }; + return Halogen_HTML_Elements.div_(Data_Functor.map(Data_Functor.functorArray)(renderNote)(v.notes)); + }; + return Halogen_Component.component(Halogen_HTML_Core.bifunctorHTML)({ + initialState: Data_Function["const"](mkState(st$prime)), + render: render, + "eval": $$eval, + receiver: Data_Function["const"](Data_Maybe.Nothing.value) + }); + }; + exports["nlist"] = nlist; +})(PS["Component.NList"] = PS["Component.NList"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var App = PS["App"]; + var Component_Markdown = PS["Component.Markdown"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Monad_State_Class = PS["Control.Monad.State.Class"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var DOM_HTML_Indexed_ButtonType = PS["DOM.HTML.Indexed.ButtonType"]; + var DOM_HTML_Indexed_InputType = PS["DOM.HTML.Indexed.InputType"]; + var Data_Array = PS["Data.Array"]; + var Data_Either = PS["Data.Either"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Lens = PS["Data.Lens"]; + var Data_Lens_Getter = PS["Data.Lens.Getter"]; + var Data_Lens_Internal_Forget = PS["Data.Lens.Internal.Forget"]; + var Data_Lens_Lens = PS["Data.Lens.Lens"]; + var Data_Lens_Setter = PS["Data.Lens.Setter"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Monoid = PS["Data.Monoid"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Profunctor_Strong = PS["Data.Profunctor.Strong"]; + var Data_Semigroup = PS["Data.Semigroup"]; + var Data_Show = PS["Data.Show"]; + var Data_String = PS["Data.String"]; + var Data_String_Common = PS["Data.String.Common"]; + var Data_String_Pattern = PS["Data.String.Pattern"]; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unit = PS["Data.Unit"]; + var Data_Void = PS["Data.Void"]; + var Effect = PS["Effect"]; + var Effect_Aff = PS["Effect.Aff"]; + var Effect_Aff_Class = PS["Effect.Aff.Class"]; + var Effect_Class = PS["Effect.Class"]; + var Globals = PS["Globals"]; + var Halogen = PS["Halogen"]; + var Halogen_Component = PS["Halogen.Component"]; + var Halogen_HTML = PS["Halogen.HTML"]; + var Halogen_HTML_Core = PS["Halogen.HTML.Core"]; + var Halogen_HTML_Elements = PS["Halogen.HTML.Elements"]; + var Halogen_HTML_Events = PS["Halogen.HTML.Events"]; + var Halogen_HTML_Properties = PS["Halogen.HTML.Properties"]; + var Halogen_Query_HalogenM = PS["Halogen.Query.HalogenM"]; + var Model = PS["Model"]; + var Prelude = PS["Prelude"]; + var Util = PS["Util"]; + var Web_Event_Event = PS["Web.Event.Event"]; + var Web_HTML_Location = PS["Web.HTML.Location"]; + var Etitle = (function () { + function Etitle(value0) { + this.value0 = value0; + }; + Etitle.create = function (value0) { + return new Etitle(value0); + }; + return Etitle; + })(); + var Etext = (function () { + function Etext(value0) { + this.value0 = value0; + }; + Etext.create = function (value0) { + return new Etext(value0); + }; + return Etext; + })(); + var EisMarkdown = (function () { + function EisMarkdown(value0) { + this.value0 = value0; + }; + EisMarkdown.create = function (value0) { + return new EisMarkdown(value0); + }; + return EisMarkdown; + })(); + var NNop = (function () { + function NNop(value0) { + this.value0 = value0; + }; + NNop.create = function (value0) { + return new NNop(value0); + }; + return NNop; + })(); + var NEditField = (function () { + function NEditField(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + NEditField.create = function (value0) { + return function (value1) { + return new NEditField(value0, value1); + }; + }; + return NEditField; + })(); + var NEditSubmit = (function () { + function NEditSubmit(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + NEditSubmit.create = function (value0) { + return function (value1) { + return new NEditSubmit(value0, value1); + }; + }; + return NEditSubmit; + })(); + var NEdit = (function () { + function NEdit(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + NEdit.create = function (value0) { + return function (value1) { + return new NEdit(value0, value1); + }; + }; + return NEdit; + })(); + var NDeleteAsk = (function () { + function NDeleteAsk(value0, value1) { + this.value0 = value0; + this.value1 = value1; + }; + NDeleteAsk.create = function (value0) { + return function (value1) { + return new NDeleteAsk(value0, value1); + }; + }; + return NDeleteAsk; + })(); + var NDestroy = (function () { + function NDestroy(value0) { + this.value0 = value0; + }; + NDestroy.create = function (value0) { + return new NDestroy(value0); + }; + return NDestroy; + })(); + var _note = function (dictStrong) { + return Data_Lens_Lens.lens(function (v) { + return v.note; + })(function (v) { + return function (v1) { + return { + note: v1, + deleteAsk: v.deleteAsk, + destroyed: v.destroyed, + edit: v.edit, + edit_note: v.edit_note + }; + }; + })(dictStrong); + }; + var _edit_note = function (dictStrong) { + return Data_Lens_Lens.lens(function (v) { + return v.edit_note; + })(function (v) { + return function (v1) { + return { + edit_note: v1, + deleteAsk: v.deleteAsk, + destroyed: v.destroyed, + edit: v.edit, + note: v.note + }; + }; + })(dictStrong); + }; + var _edit = function (dictStrong) { + return Data_Lens_Lens.lens(function (v) { + return v.edit; + })(function (v) { + return function (v1) { + return { + edit: v1, + deleteAsk: v.deleteAsk, + destroyed: v.destroyed, + edit_note: v.edit_note, + note: v.note + }; + }; + })(dictStrong); + }; + var nnote = function (st$prime) { + var render = function (v) { + var toTextarea = function (input) { + return Data_Array.drop(1)(Data_Foldable.foldMap(Data_Foldable.foldableArray)(Data_Monoid.monoidArray)(function (x) { + return [ Halogen_HTML_Elements.br_, Halogen_HTML_Core.text(x) ]; + })(Data_String_Common.split("\x0a")(input))); + }; + var mmoment = function (n) { + return Globals.mmoment8601(n.created); + }; + var renderNote = Halogen_HTML_Elements.div([ Halogen_HTML_Properties.id_(Data_Show.show(Data_Show.showInt)(v.note.id)), Util.class_("note w-100 mw7 pa1 mb2") ])(Data_Semigroup.append(Data_Semigroup.semigroupArray)([ Halogen_HTML_Elements.div([ Util.class_("display") ])([ Halogen_HTML_Elements.div([ Util.class_("link f5 lh-title") ])([ Halogen_HTML_Core.text((function () { + var $24 = Data_String_Common["null"](v.note.title); + if ($24) { + return "[no title]"; + }; + return v.note.title; + })()) ]), Halogen_HTML_Elements.br_, (function () { + if (v.note.isMarkdown) { + return Halogen_HTML_Elements.div([ Util.class_("description mt1") ])([ Halogen_HTML.slot(Data_Unit.unit)(Component_Markdown.component)(v.note.text)(Data_Void.absurd) ]); + }; + return Halogen_HTML_Elements.div([ Util.class_("description mt1 mid-gray") ])(toTextarea(v.note.text)); + })(), Halogen_HTML_Elements.div([ Util.class_("link f7 dib gray w4"), Halogen_HTML_Properties.title(Data_Maybe.maybe(v.note.created)(Data_Tuple.snd)(mmoment(v.note))) ])([ Halogen_HTML_Core.text(Data_Maybe.maybe("\xa0")(Data_Tuple.fst)(mmoment(v.note))) ]) ]) ])([ Halogen_HTML_Elements.div([ Util.class_("edit_links db mt3") ])([ Halogen_HTML_Elements.button([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.buttonTypeIsProp)(DOM_HTML_Indexed_ButtonType.ButtonButton.value), Halogen_HTML_Events.onClick(Halogen_HTML_Events.input_(NEdit.create(true))), Util.class_("edit light-silver hover-blue") ])([ Halogen_HTML_Core.text("edit\xa0\xa0") ]), Halogen_HTML_Elements.div([ Util.class_("delete_link di") ])([ Halogen_HTML_Elements.button([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.buttonTypeIsProp)(DOM_HTML_Indexed_ButtonType.ButtonButton.value), Halogen_HTML_Events.onClick(Halogen_HTML_Events.input_(NDeleteAsk.create(true))), Util.class_("delete light-silver hover-blue" + Data_Monoid.guard(Data_Monoid.monoidString)(v.deleteAsk)(" dn")) ])([ Halogen_HTML_Core.text("delete") ]), Halogen_HTML_Elements.span([ Util.class_("confirm red" + Data_Monoid.guard(Data_Monoid.monoidString)(!v.deleteAsk)(" dn")) ])([ Halogen_HTML_Elements.button([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.buttonTypeIsProp)(DOM_HTML_Indexed_ButtonType.ButtonButton.value), Halogen_HTML_Events.onClick(Halogen_HTML_Events.input_(NDeleteAsk.create(false))) ])([ Halogen_HTML_Core.text("cancel\xa0/\xa0") ]), Halogen_HTML_Elements.button([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.buttonTypeIsProp)(DOM_HTML_Indexed_ButtonType.ButtonButton.value), Halogen_HTML_Events.onClick(Halogen_HTML_Events.input_(NDestroy.create)), Util.class_("red") ])([ Halogen_HTML_Core.text("destroy") ]) ]) ]) ]) ])); + var editField = function (f) { + return function ($59) { + return Halogen_HTML_Events.input(NEditField.create)(f($59)); + }; + }; + var renderNote_edit = Halogen_HTML_Elements.form([ Halogen_HTML_Events.onSubmit(Halogen_HTML_Events.input(NEditSubmit.create)) ])([ Halogen_HTML_Elements.p([ Util.class_("mt2 mb1") ])([ Halogen_HTML_Core.text("title:") ]), Halogen_HTML_Elements.input([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.inputTypeIsProp)(DOM_HTML_Indexed_InputType.InputText.value), Util.class_("title w-100 mb1 pt1 f7 edit_form_input"), Halogen_HTML_Properties.name("title"), Halogen_HTML_Properties.value(v.edit_note.title), Halogen_HTML_Events.onValueChange(editField(Etitle.create)) ]), Halogen_HTML_Elements.br_, Halogen_HTML_Elements.p([ Util.class_("mt2 mb1") ])([ Halogen_HTML_Core.text("description:") ]), Halogen_HTML_Elements.textarea([ Util.class_("description w-100 mb1 pt1 f7 edit_form_input"), Halogen_HTML_Properties.name("text"), Halogen_HTML_Properties.rows(30), Halogen_HTML_Properties.value(v.edit_note.text), Halogen_HTML_Events.onValueChange(editField(Etext.create)) ]), Halogen_HTML_Elements.div([ Util.class_("edit_form_checkboxes mb3") ])([ Halogen_HTML_Elements.input([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.inputTypeIsProp)(DOM_HTML_Indexed_InputType.InputCheckbox.value), Util.class_("is-markdown pointer"), Halogen_HTML_Properties.id_("edit_ismarkdown"), Halogen_HTML_Properties.name("ismarkdown"), Halogen_HTML_Properties.checked(v.edit_note.isMarkdown), Halogen_HTML_Events.onChecked(editField(EisMarkdown.create)) ]), Halogen_HTML_Core.text(" "), Halogen_HTML_Elements.label([ Halogen_HTML_Properties["for"]("edit_ismarkdown"), Util.class_("mr2") ])([ Halogen_HTML_Core.text("use markdown?") ]), Halogen_HTML_Elements.br_ ]), Halogen_HTML_Elements.input([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.inputTypeIsProp)(DOM_HTML_Indexed_InputType.InputSubmit.value), Util.class_("mr1 pv1 ph2 dark-gray ba b--moon-gray bg-near-white pointer rdim"), Halogen_HTML_Properties.value("save") ]), Halogen_HTML_Core.text(" "), Halogen_HTML_Elements.input([ Halogen_HTML_Properties.type_(Halogen_HTML_Core.inputTypeIsProp)(DOM_HTML_Indexed_InputType.InputReset.value), Util.class_("pv1 ph2 dark-gray ba b--moon-gray bg-near-white pointer rdim"), Halogen_HTML_Properties.value("cancel"), Halogen_HTML_Events.onClick(Halogen_HTML_Events.input_(NEdit.create(false))) ]) ]); + var display_destroyed = Halogen_HTML_Elements.p([ Util.class_("red") ])([ Halogen_HTML_Core.text("you killed this note") ]); + if (v.destroyed) { + return display_destroyed; + }; + if (v.edit) { + return renderNote_edit; + }; + return renderNote; + }; + var mkState = function (note$prime) { + return { + note: note$prime, + edit_note: note$prime, + deleteAsk: false, + edit: note$prime.id <= 0, + destroyed: false + }; + }; + var app = Globals["app'"](Data_Unit.unit); + var $$eval = function (v) { + if (v instanceof NNop) { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value0); + }; + if (v instanceof NEditField) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Setter.modifying(Halogen_Query_HalogenM.monadStateHalogenM)(_edit_note(Data_Profunctor_Strong.strongFn))((function () { + if (v.value0 instanceof Etitle) { + return function (v1) { + return { + id: v1.id, + slug: v1.slug, + title: v.value0.value0, + text: v1.text, + length: v1.length, + isMarkdown: v1.isMarkdown, + created: v1.created, + updated: v1.updated + }; + }; + }; + if (v.value0 instanceof Etext) { + return function (v1) { + return { + id: v1.id, + slug: v1.slug, + title: v1.title, + text: v.value0.value0, + length: v1.length, + isMarkdown: v1.isMarkdown, + created: v1.created, + updated: v1.updated + }; + }; + }; + if (v.value0 instanceof EisMarkdown) { + return function (v1) { + return { + id: v1.id, + slug: v1.slug, + title: v1.title, + text: v1.text, + length: v1.length, + isMarkdown: v.value0.value0, + created: v1.created, + updated: v1.updated + }; + }; + }; + throw new Error("Failed pattern match at Component.NNote (line 158, column 19 - line 161, column 44): " + [ v.value0.constructor.name ]); + })()))(function () { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value1); + }); + }; + if (v instanceof NDeleteAsk) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Control_Monad_State_Class.modify_(Halogen_Query_HalogenM.monadStateHalogenM)(function (v1) { + var $38 = {}; + for (var $39 in v1) { + if ({}.hasOwnProperty.call(v1, $39)) { + $38[$39] = v1[$39]; + }; + }; + $38.deleteAsk = v.value0; + return $38; + }))(function () { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value1); + }); + }; + if (v instanceof NDestroy) { + return Control_Bind.bind(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Getter.use(Halogen_Query_HalogenM.monadStateHalogenM)(_note(Data_Lens_Internal_Forget.strongForget)))(function (v1) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Functor["void"](Halogen_Query_HalogenM.functorHalogenM)(Effect_Aff_Class.liftAff(Halogen_Query_HalogenM.monadAffHalogenM(Effect_Aff_Class.monadAffAff))(App.destroyNote(v1.id))))(function () { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Control_Monad_State_Class.modify_(Halogen_Query_HalogenM.monadStateHalogenM)(function (v2) { + var $44 = {}; + for (var $45 in v2) { + if ({}.hasOwnProperty.call(v2, $45)) { + $44[$45] = v2[$45]; + }; + }; + $44.destroyed = true; + return $44; + }))(function () { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value0); + }); + }); + }); + }; + if (v instanceof NEdit) { + return Control_Bind.bind(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Getter.use(Halogen_Query_HalogenM.monadStateHalogenM)(_note(Data_Lens_Internal_Forget.strongForget)))(function (v1) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Setter.assign(Halogen_Query_HalogenM.monadStateHalogenM)(_edit_note(Data_Profunctor_Strong.strongFn))(v1))(function () { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Setter.assign(Halogen_Query_HalogenM.monadStateHalogenM)(_edit(Data_Profunctor_Strong.strongFn))(v.value0))(function () { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value1); + }); + }); + }); + }; + if (v instanceof NEditSubmit) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Effect_Class.liftEffect(Halogen_Query_HalogenM.monadEffectHalogenM(Effect_Aff.monadEffectAff))(Web_Event_Event.preventDefault(v.value0)))(function () { + return Control_Bind.bind(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Getter.use(Halogen_Query_HalogenM.monadStateHalogenM)(_edit_note(Data_Lens_Internal_Forget.strongForget)))(function (v1) { + return Control_Bind.bind(Halogen_Query_HalogenM.bindHalogenM)(Effect_Aff_Class.liftAff(Halogen_Query_HalogenM.monadAffHalogenM(Effect_Aff_Class.monadAffAff))(App.editNote(v1)))(function (v2) { + if (v2.body instanceof Data_Either.Left) { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value1); + }; + if (v2.body instanceof Data_Either.Right) { + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)((function () { + var $55 = v1.id === 0; + if ($55) { + return Effect_Class.liftEffect(Halogen_Query_HalogenM.monadEffectHalogenM(Effect_Aff.monadEffectAff))(Control_Bind.bindFlipped(Effect.bindEffect)(Web_HTML_Location.setHref(Util.fromNullableStr(app.noteR)))(Util["_loc"])); + }; + return Control_Bind.discard(Control_Bind.discardUnit)(Halogen_Query_HalogenM.bindHalogenM)(Data_Lens_Setter.assign(Halogen_Query_HalogenM.monadStateHalogenM)(_note(Data_Profunctor_Strong.strongFn))(v1))(function () { + return Data_Lens_Setter.assign(Halogen_Query_HalogenM.monadStateHalogenM)(_edit(Data_Profunctor_Strong.strongFn))(false); + }); + })())(function () { + return Control_Applicative.pure(Halogen_Query_HalogenM.applicativeHalogenM)(v.value1); + }); + }; + throw new Error("Failed pattern match at Component.NNote (line 188, column 5 - line 197, column 14): " + [ v2.body.constructor.name ]); + }); + }); + }); + }; + throw new Error("Failed pattern match at Component.NNote (line 153, column 3 - line 153, column 72): " + [ v.constructor.name ]); + }; + return Halogen_Component.parentComponent(Data_Ord.ordUnit)({ + initialState: Data_Function["const"](mkState(st$prime)), + render: render, + "eval": $$eval, + receiver: Data_Function["const"](Data_Maybe.Nothing.value) + }); + }; + exports["NNop"] = NNop; + exports["NEditField"] = NEditField; + exports["NEditSubmit"] = NEditSubmit; + exports["NEdit"] = NEdit; + exports["NDeleteAsk"] = NDeleteAsk; + exports["NDestroy"] = NDestroy; + exports["_note"] = _note; + exports["_edit_note"] = _edit_note; + exports["_edit"] = _edit; + exports["Etitle"] = Etitle; + exports["Etext"] = Etext; + exports["EisMarkdown"] = EisMarkdown; + exports["nnote"] = nnote; +})(PS["Component.NNote"] = PS["Component.NNote"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Monad_Error_Class = PS["Control.Monad.Error.Class"]; + var Control_Monad_Reader_Trans = PS["Control.Monad.Reader.Trans"]; + var Control_Monad_Trans_Class = PS["Control.Monad.Trans.Class"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Effect_Aff = PS["Effect.Aff"]; + var Prelude = PS["Prelude"]; + var MonadFork = function (Functor1, Monad0, fork, join, suspend) { + this.Functor1 = Functor1; + this.Monad0 = Monad0; + this.fork = fork; + this.join = join; + this.suspend = suspend; + }; + var suspend = function (dict) { + return dict.suspend; + }; + var monadForkAff = new MonadFork(function () { + return Effect_Aff.functorFiber; + }, function () { + return Effect_Aff.monadAff; + }, Effect_Aff.forkAff, Effect_Aff.joinFiber, Effect_Aff.suspendAff); + var join = function (dict) { + return dict.join; + }; + var fork = function (dict) { + return dict.fork; + }; + exports["fork"] = fork; + exports["join"] = join; + exports["suspend"] = suspend; + exports["MonadFork"] = MonadFork; + exports["monadForkAff"] = monadForkAff; +})(PS["Control.Monad.Fork.Class"] = PS["Control.Monad.Fork.Class"] || {}); +(function(exports) { + "use strict"; + + exports.warn = function (s) { + return function () { + console.warn(s); + return {}; + }; + }; +})(PS["Effect.Console"] = PS["Effect.Console"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Effect.Console"]; + var Data_Show = PS["Data.Show"]; + var Data_Unit = PS["Data.Unit"]; + var Effect = PS["Effect"]; + exports["warn"] = $foreign.warn; +})(PS["Effect.Console"] = PS["Effect.Console"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_List = PS["Data.List"]; + var Data_List_Types = PS["Data.List.Types"]; + var Data_Map = PS["Data.Map"]; + var Data_Map_Internal = PS["Data.Map.Internal"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Traversable = PS["Data.Traversable"]; + var Effect = PS["Effect"]; + var Effect_Aff = PS["Effect.Aff"]; + var Effect_Ref = PS["Effect.Ref"]; + var Halogen_Component = PS["Halogen.Component"]; + var Halogen_Data_OrdBox = PS["Halogen.Data.OrdBox"]; + var Prelude = PS["Prelude"]; + var Unsafe_Coerce = PS["Unsafe.Coerce"]; + var Web_DOM = PS["Web.DOM"]; + var unRenderStateX = Unsafe_Coerce.unsafeCoerce; + var unDriverStateX = Unsafe_Coerce.unsafeCoerce; + var renderStateX_ = function (dictApplicative) { + return function (f) { + return unDriverStateX(function (st) { + return Data_Foldable.traverse_(dictApplicative)(Data_Foldable.foldableMaybe)(f)(st.rendering); + }); + }; + }; + var mkRenderStateX = function (v) { + return Unsafe_Coerce.unsafeCoerce; + }; + var renderStateX = function (dictFunctor) { + return function (f) { + return unDriverStateX(function (st) { + return mkRenderStateX(st.prjQuery)(f(st.rendering)); + }); + }; + }; + var mkDriverStateXRef = Unsafe_Coerce.unsafeCoerce; + var initDriverState = function (component) { + return function (input) { + return function (handler) { + return function (prjQuery) { + return function (lchs) { + return function __do() { + var v = Effect_Ref["new"]({})(); + var v1 = Effect_Ref["new"](Data_Map_Internal.empty)(); + var v2 = Effect_Ref["new"](Data_Map_Internal.empty)(); + var v3 = Effect_Ref["new"](Data_Functor.voidLeft(Data_Maybe.functorMaybe)(component.initializer)(Data_List_Types.Nil.value))(); + var v4 = Effect_Ref["new"](new Data_Maybe.Just(Data_List_Types.Nil.value))(); + var v5 = Effect_Ref["new"](Data_Maybe.Nothing.value)(); + var v6 = Effect_Ref["new"](0)(); + var v7 = Effect_Ref["new"](new Data_Maybe.Just(Data_Map_Internal.empty))(); + var ds = { + component: component, + state: component.initialState(input), + refs: Data_Map_Internal.empty, + children: Data_Map_Internal.empty, + childrenIn: v1, + childrenOut: v2, + selfRef: v, + handler: handler, + pendingQueries: v3, + pendingOuts: v4, + pendingHandlers: v5, + rendering: Data_Maybe.Nothing.value, + prjQuery: prjQuery, + fresh: v6, + subscriptions: v7, + lifecycleHandlers: lchs + }; + Effect_Ref.write(ds)(v)(); + return mkDriverStateXRef(v); + }; + }; + }; + }; + }; + }; + exports["unDriverStateX"] = unDriverStateX; + exports["mkDriverStateXRef"] = mkDriverStateXRef; + exports["renderStateX"] = renderStateX; + exports["renderStateX_"] = renderStateX_; + exports["unRenderStateX"] = unRenderStateX; + exports["initDriverState"] = initDriverState; +})(PS["Halogen.Aff.Driver.State"] = PS["Halogen.Aff.Driver.State"] || {}); +(function(exports) { + "use strict"; + + exports.reallyUnsafeRefEq = function (a) { + return function (b) { + return a === b; + }; + }; +})(PS["Unsafe.Reference"] = PS["Unsafe.Reference"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var $foreign = PS["Unsafe.Reference"]; + var unsafeRefEq = $foreign.reallyUnsafeRefEq; + exports["unsafeRefEq"] = unsafeRefEq; +})(PS["Unsafe.Reference"] = PS["Unsafe.Reference"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Applicative_Free = PS["Control.Applicative.Free"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Coroutine = PS["Control.Coroutine"]; + var Control_Monad_Error_Class = PS["Control.Monad.Error.Class"]; + var Control_Monad_Fork_Class = PS["Control.Monad.Fork.Class"]; + var Control_Monad_Free = PS["Control.Monad.Free"]; + var Control_Monad_Free_Trans = PS["Control.Monad.Free.Trans"]; + var Control_Monad_Trans_Class = PS["Control.Monad.Trans.Class"]; + var Control_Parallel = PS["Control.Parallel"]; + var Control_Parallel_Class = PS["Control.Parallel.Class"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Boolean = PS["Data.Boolean"]; + var Data_Coyoneda = PS["Data.Coyoneda"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_List = PS["Data.List"]; + var Data_List_Types = PS["Data.List.Types"]; + var Data_Map = PS["Data.Map"]; + var Data_Map_Internal = PS["Data.Map.Internal"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Set = PS["Data.Set"]; + var Data_Tuple = PS["Data.Tuple"]; + var Effect = PS["Effect"]; + var Effect_Aff = PS["Effect.Aff"]; + var Effect_Class = PS["Effect.Class"]; + var Effect_Exception = PS["Effect.Exception"]; + var Effect_Ref = PS["Effect.Ref"]; + var Halogen_Aff_Driver_State = PS["Halogen.Aff.Driver.State"]; + var Halogen_Data_OrdBox = PS["Halogen.Data.OrdBox"]; + var Halogen_Query_EventSource = PS["Halogen.Query.EventSource"]; + var Halogen_Query_ForkF = PS["Halogen.Query.ForkF"]; + var Halogen_Query_HalogenM = PS["Halogen.Query.HalogenM"]; + var Halogen_Query_InputF = PS["Halogen.Query.InputF"]; + var Prelude = PS["Prelude"]; + var Unsafe_Reference = PS["Unsafe.Reference"]; + var queuingHandler = function (handler) { + return function (ref) { + return function (message) { + return Control_Bind.bind(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref.read(ref)))(function (v) { + if (v instanceof Data_Maybe.Nothing) { + return handler(message); + }; + if (v instanceof Data_Maybe.Just) { + return Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref.write(new Data_Maybe.Just(new Data_List_Types.Cons(handler(message), v.value0)))(ref)); + }; + throw new Error("Failed pattern match at Halogen.Aff.Driver.Eval (line 171, column 3 - line 175, column 59): " + [ v.constructor.name ]); + }); + }; + }; + }; + var handleLifecycle = function (lchs) { + return function (f) { + return Control_Bind.discard(Control_Bind.discardUnit)(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref.write({ + initializers: Data_List_Types.Nil.value, + finalizers: Data_List_Types.Nil.value + })(lchs)))(function () { + return Control_Bind.bind(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(f))(function (v) { + return Control_Bind.bind(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref.read(lchs)))(function (v1) { + return Control_Bind.discard(Control_Bind.discardUnit)(Effect_Aff.bindAff)(Data_Foldable.traverse_(Effect_Aff.applicativeAff)(Data_List_Types.foldableList)(Control_Monad_Fork_Class.fork(Control_Monad_Fork_Class.monadForkAff))(v1.finalizers))(function () { + return Control_Bind.discard(Control_Bind.discardUnit)(Effect_Aff.bindAff)(Control_Parallel.parSequence_(Effect_Aff.parallelAff)(Data_List_Types.foldableList)(v1.initializers))(function () { + return Control_Applicative.pure(Effect_Aff.applicativeAff)(v); + }); + }); + }); + }); + }); + }; + }; + var $$eval = function (render) { + return function (r) { + var go = function (ref) { + return function (v) { + if (v instanceof Halogen_Query_HalogenM.State) { + return Control_Bind.bind(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref.read(ref)))(function (v1) { + var v2 = v.value0(v1.state); + if (Unsafe_Reference.unsafeRefEq(v1.state)(v2.value1)) { + return Control_Applicative.pure(Effect_Aff.applicativeAff)(v2.value0); + }; + if (Data_Boolean.otherwise) { + return Control_Bind.discard(Control_Bind.discardUnit)(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref.write({ + component: v1.component, + state: v2.value1, + refs: v1.refs, + children: v1.children, + childrenIn: v1.childrenIn, + childrenOut: v1.childrenOut, + selfRef: v1.selfRef, + handler: v1.handler, + pendingQueries: v1.pendingQueries, + pendingOuts: v1.pendingOuts, + pendingHandlers: v1.pendingHandlers, + rendering: v1.rendering, + prjQuery: v1.prjQuery, + fresh: v1.fresh, + subscriptions: v1.subscriptions, + lifecycleHandlers: v1.lifecycleHandlers + })(ref)))(function () { + return Control_Bind.discard(Control_Bind.discardUnit)(Effect_Aff.bindAff)(handleLifecycle(v1.lifecycleHandlers)(render(v1.lifecycleHandlers)(ref)))(function () { + return Control_Applicative.pure(Effect_Aff.applicativeAff)(v2.value0); + }); + }); + }; + throw new Error("Failed pattern match at Halogen.Aff.Driver.Eval (line 76, column 7 - line 82, column 21): " + [ v2.constructor.name ]); + }); + }; + if (v instanceof Halogen_Query_HalogenM.Subscribe) { + return Control_Bind.bind(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref.read(ref)))(function (v1) { + return Control_Bind.bind(Effect_Aff.bindAff)(Control_Monad_Fork_Class.fork(Control_Monad_Fork_Class.monadForkAff)(Control_Bind.bind(Effect_Aff.bindAff)(Halogen_Query_EventSource.unEventSource(v.value0))(function (v2) { + return Control_Bind.bind(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref["modify'"](function (i) { + return { + state: i + 1 | 0, + value: i + }; + })(v1.fresh)))(function (v3) { + var done$prime = Control_Bind.bind(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref.read(v1.subscriptions)))(function (v4) { + return Control_Applicative.when(Effect_Aff.applicativeAff)(Data_Maybe.maybe(false)(Data_Map_Internal.member(Data_Ord.ordInt)(v3))(v4))(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref.modify_(Data_Functor.map(Data_Maybe.functorMaybe)(Data_Map_Internal["delete"](Data_Ord.ordInt)(v3)))(v1.subscriptions))); + }); + return Control_Bind.discard(Control_Bind.discardUnit)(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref.modify_(Data_Functor.map(Data_Maybe.functorMaybe)(Data_Map_Internal.insert(Data_Ord.ordInt)(v3)(done$prime)))(v1.subscriptions)))(function () { + var consumer = Control_Bind.bind(Control_Monad_Free_Trans.bindFreeT(Control_Coroutine.functorAwait)(Effect_Aff.monadAff))(Control_Coroutine["await"](Effect_Aff.monadAff))(function (v4) { + return Control_Bind.bind(Control_Monad_Free_Trans.bindFreeT(Control_Coroutine.functorAwait)(Effect_Aff.monadAff))(Control_Monad_Trans_Class.lift(Control_Monad_Free_Trans.monadTransFreeT(Control_Coroutine.functorAwait))(Effect_Aff.monadAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref.read(v1.subscriptions))))(function (v5) { + return Control_Applicative.when(Control_Monad_Free_Trans.applicativeFreeT(Control_Coroutine.functorAwait)(Effect_Aff.monadAff))(Data_Maybe.isJust(v5))(Control_Bind.bind(Control_Monad_Free_Trans.bindFreeT(Control_Coroutine.functorAwait)(Effect_Aff.monadAff))(Control_Monad_Trans_Class.lift(Control_Monad_Free_Trans.monadTransFreeT(Control_Coroutine.functorAwait))(Effect_Aff.monadAff)(evalF(ref)(v4)))(function (v6) { + return Control_Applicative.when(Control_Monad_Free_Trans.applicativeFreeT(Control_Coroutine.functorAwait)(Effect_Aff.monadAff))(Data_Eq.eq(Halogen_Query_EventSource.eqSubscribeStatus)(v6)(Halogen_Query_EventSource.Listening.value))(consumer); + })); + }); + }); + return Control_Bind.discard(Control_Bind.discardUnit)(Effect_Aff.bindAff)(Control_Coroutine.runProcess(Effect_Aff.monadRecAff)(Control_Coroutine.pullFrom(Effect_Aff.monadRecAff)(consumer)(v2.producer)))(function () { + return done$prime; + }); + }); + }); + })))(function (v2) { + return Control_Applicative.pure(Effect_Aff.applicativeAff)(v.value1); + }); + }); + }; + if (v instanceof Halogen_Query_HalogenM.Lift) { + return v.value0; + }; + if (v instanceof Halogen_Query_HalogenM.Halt) { + return Control_Monad_Error_Class.throwError(Effect_Aff.monadThrowAff)(Effect_Exception.error(v.value0)); + }; + if (v instanceof Halogen_Query_HalogenM.GetSlots) { + return Control_Bind.bind(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref.read(ref)))(function (v1) { + return Control_Applicative.pure(Effect_Aff.applicativeAff)(v.value0(Data_Functor.map(Data_List_Types.functorList)(Halogen_Data_OrdBox.unOrdBox)(Data_List.fromFoldable(Data_Set.foldableSet)(Data_Map.keys(v1.children))))); + }); + }; + if (v instanceof Halogen_Query_HalogenM.CheckSlot) { + return Control_Bind.bind(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref.read(ref)))(function (v1) { + return Control_Applicative.pure(Effect_Aff.applicativeAff)(v.value1(Data_Map_Internal.member(Halogen_Data_OrdBox.ordOrdBox)(v1.component.mkOrdBox(v.value0))(v1.children))); + }); + }; + if (v instanceof Halogen_Query_HalogenM.ChildQuery) { + return evalChildQuery(ref)(v.value0)(v.value1); + }; + if (v instanceof Halogen_Query_HalogenM.Raise) { + return Control_Bind.bind(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref.read(ref)))(function (v1) { + return Control_Bind.discard(Control_Bind.discardUnit)(Effect_Aff.bindAff)(queuingHandler(v1.handler)(v1.pendingOuts)(v.value0))(function () { + return Control_Applicative.pure(Effect_Aff.applicativeAff)(v.value1); + }); + }); + }; + if (v instanceof Halogen_Query_HalogenM.Par) { + return Control_Parallel_Class.sequential(Effect_Aff.parallelAff)(Control_Applicative_Free.retractFreeAp(Effect_Aff.applicativeParAff)(Control_Applicative_Free.hoistFreeAp(function ($103) { + return Control_Parallel_Class.parallel(Effect_Aff.parallelAff)(evalM(ref)($103)); + })(v.value0))); + }; + if (v instanceof Halogen_Query_HalogenM.Fork) { + return Halogen_Query_ForkF.unFork(function (v1) { + return Control_Bind.bind(Effect_Aff.bindAff)(Control_Monad_Fork_Class.fork(Control_Monad_Fork_Class.monadForkAff)(evalM(ref)(v1.value0)))(function (v2) { + return Control_Applicative.pure(Effect_Aff.applicativeAff)(v1.value1(Data_Function.flip(Effect_Aff.killFiber)(v2))); + }); + })(v.value0); + }; + if (v instanceof Halogen_Query_HalogenM.GetRef) { + return Control_Bind.bind(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref.read(ref)))(function (v1) { + return Control_Applicative.pure(Effect_Aff.applicativeAff)(v.value1(Data_Map_Internal.lookup(Data_Ord.ordString)(v.value0)(v1.refs))); + }); + }; + throw new Error("Failed pattern match at Halogen.Aff.Driver.Eval (line 73, column 12 - line 128, column 33): " + [ v.constructor.name ]); + }; + }; + var evalM = function (ref) { + return function (v) { + return Control_Monad_Free.foldFree(Effect_Aff.monadRecAff)(go(ref))(v); + }; + }; + var evalF = function (ref) { + return function (q) { + return Control_Bind.bind(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref.read(ref)))(function (v) { + var v1 = v["component"]["eval"](q); + return Control_Monad_Free.foldFree(Effect_Aff.monadRecAff)(go(ref))(v1); + }); + }; + }; + var evalChildQuery = function (ref) { + return function (p) { + return Data_Coyoneda.unCoyoneda(function (k) { + return function (q) { + return Control_Bind.bind(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref.read(ref)))(function (v) { + var v1 = Data_Map_Internal.lookup(Halogen_Data_OrdBox.ordOrdBox)(v.component.mkOrdBox(p))(v.children); + if (v1 instanceof Data_Maybe.Just) { + return Control_Bind.bind(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref.read(v1.value0)))(function (v2) { + return Halogen_Aff_Driver_State.unDriverStateX(function (ds) { + var v3 = ds.prjQuery(q); + if (v3 instanceof Data_Maybe.Just) { + return Data_Functor.map(Effect_Aff.functorAff)(k)(evalF(ds.selfRef)(v3.value0)); + }; + if (v3 instanceof Data_Maybe.Nothing) { + return Control_Monad_Error_Class.throwError(Effect_Aff.monadThrowAff)(Effect_Exception.error("Query projection failed for child query")); + }; + throw new Error("Failed pattern match at Halogen.Aff.Driver.Eval (line 141, column 32 - line 143, column 82): " + [ v3.constructor.name ]); + })(v2); + }); + }; + if (v1 instanceof Data_Maybe.Nothing) { + return Control_Monad_Error_Class.throwError(Effect_Aff.monadThrowAff)(Effect_Exception.error("Slot lookup failed for child query")); + }; + throw new Error("Failed pattern match at Halogen.Aff.Driver.Eval (line 138, column 5 - line 144, column 73): " + [ v1.constructor.name ]); + }); + }; + }); + }; + }; + return function (v) { + if (v instanceof Halogen_Query_InputF.RefUpdate) { + return Control_Bind.discard(Control_Bind.discardUnit)(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref.modify_(function (v1) { + return { + component: v1.component, + state: v1.state, + refs: Data_Map_Internal.alter(Data_Ord.ordString)(Data_Function["const"](v.value1))(v.value0)(v1.refs), + children: v1.children, + childrenIn: v1.childrenIn, + childrenOut: v1.childrenOut, + selfRef: v1.selfRef, + handler: v1.handler, + pendingQueries: v1.pendingQueries, + pendingOuts: v1.pendingOuts, + pendingHandlers: v1.pendingHandlers, + rendering: v1.rendering, + prjQuery: v1.prjQuery, + fresh: v1.fresh, + subscriptions: v1.subscriptions, + lifecycleHandlers: v1.lifecycleHandlers + }; + })(r)))(function () { + return Control_Applicative.pure(Effect_Aff.applicativeAff)(v.value2); + }); + }; + if (v instanceof Halogen_Query_InputF.Query) { + return evalF(r)(v.value0); + }; + throw new Error("Failed pattern match at Halogen.Aff.Driver.Eval (line 59, column 3 - line 64, column 25): " + [ v.constructor.name ]); + }; + }; + }; + exports["handleLifecycle"] = handleLifecycle; + exports["eval"] = $$eval; + exports["queuingHandler"] = queuingHandler; +})(PS["Halogen.Aff.Driver.Eval"] = PS["Halogen.Aff.Driver.Eval"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Coroutine = PS["Control.Coroutine"]; + var Control_Monad_Fork_Class = PS["Control.Monad.Fork.Class"]; + var Control_Monad_Rec_Class = PS["Control.Monad.Rec.Class"]; + var Control_Parallel = PS["Control.Parallel"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Either = PS["Data.Either"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_List = PS["Data.List"]; + var Data_List_Types = PS["Data.List.Types"]; + var Data_Map = PS["Data.Map"]; + var Data_Map_Internal = PS["Data.Map.Internal"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Ord = PS["Data.Ord"]; + var Data_Semiring = PS["Data.Semiring"]; + var Data_Traversable = PS["Data.Traversable"]; + var Data_Tuple = PS["Data.Tuple"]; + var Data_Unit = PS["Data.Unit"]; + var Effect = PS["Effect"]; + var Effect_Aff = PS["Effect.Aff"]; + var Effect_Aff_AVar = PS["Effect.Aff.AVar"]; + var Effect_Class = PS["Effect.Class"]; + var Effect_Console = PS["Effect.Console"]; + var Effect_Exception = PS["Effect.Exception"]; + var Effect_Ref = PS["Effect.Ref"]; + var Halogen = PS["Halogen"]; + var Halogen_Aff_Driver_Eval = PS["Halogen.Aff.Driver.Eval"]; + var Halogen_Aff_Driver_State = PS["Halogen.Aff.Driver.State"]; + var Halogen_Component = PS["Halogen.Component"]; + var Halogen_Data_OrdBox = PS["Halogen.Data.OrdBox"]; + var Halogen_Query_InputF = PS["Halogen.Query.InputF"]; + var Prelude = PS["Prelude"]; + var newLifecycleHandlers = Effect_Ref["new"]({ + initializers: Data_List_Types.Nil.value, + finalizers: Data_List_Types.Nil.value + }); + var handleAff = Effect_Aff.runAff_(Data_Either.either(Effect_Exception.throwException)(Data_Function["const"](Control_Applicative.pure(Effect.applicativeEffect)(Data_Unit.unit)))); + var runUI = function (renderSpec) { + return function (component) { + return function (i) { + var subscribe = function (fresh) { + return function (ref) { + return function (consumer) { + return Control_Bind.bind(Effect_Aff.bindAff)(Effect_Aff_AVar.empty)(function (v) { + return Control_Bind.bind(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(function __do() { + var v1 = Effect_Ref.read(fresh)(); + Effect_Ref.modify_(function (v2) { + return v2 + 1 | 0; + })(fresh)(); + Effect_Ref.modify_(Data_Map_Internal.insert(Data_Ord.ordInt)(v1)(v))(ref)(); + return v1; + }))(function (v1) { + var producer = Control_Coroutine.producer(Effect_Aff.monadAff)(Data_Functor.map(Effect_Aff.functorAff)(Data_Either.Left.create)(Effect_Aff_AVar.take(v))); + return Data_Functor["void"](Effect_Aff.functorAff)(Control_Monad_Fork_Class.fork(Control_Monad_Fork_Class.monadForkAff)(Control_Bind.discard(Control_Bind.discardUnit)(Effect_Aff.bindAff)(Control_Coroutine.runProcess(Effect_Aff.monadRecAff)(Control_Coroutine.connect(Effect_Aff.monadRecAff)(Effect_Aff.parallelAff)(producer)(consumer)))(function () { + return Control_Bind.discard(Control_Bind.discardUnit)(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref.modify_(Data_Map_Internal["delete"](Data_Ord.ordInt)(v1))(ref)))(function () { + return Effect_Aff_AVar.kill(Effect_Exception.error("ended"))(v); + }); + }))); + }); + }); + }; + }; + }; + var rootHandler = function (ref) { + return function (message) { + return Control_Bind.bind(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref.read(ref)))(function (v) { + return Data_Foldable.traverse_(Effect_Aff.applicativeAff)(Data_Map_Internal.foldableMap)(Control_Monad_Fork_Class.fork(Control_Monad_Fork_Class.monadForkAff))(Data_Functor.map(Data_Map_Internal.functorMap)(Effect_Aff_AVar.put(message))(v)); + }); + }; + }; + var handlePending = function (ref) { + return function __do() { + var v = Effect_Ref.read(ref)(); + Effect_Ref.write(Data_Maybe.Nothing.value)(ref)(); + return Data_Foldable.for_(Effect.applicativeEffect)(Data_Foldable.foldableMaybe)(v)(function ($63) { + return handleAff(Data_Foldable.traverse_(Effect_Aff.applicativeAff)(Data_List_Types.foldableList)(Control_Monad_Fork_Class.fork(Control_Monad_Fork_Class.monadForkAff))(Data_List.reverse($63))); + })(); + }; + }; + var cleanupSubscriptions = function (v) { + return function __do() { + Control_Bind.bindFlipped(Effect.bindEffect)(Data_Foldable.traverse_(Effect.applicativeEffect)(Data_Foldable.foldableMaybe)(function ($64) { + return handleAff(Data_Foldable.traverse_(Effect_Aff.applicativeAff)(Data_Map_Internal.foldableMap)(Control_Monad_Fork_Class.fork(Control_Monad_Fork_Class.monadForkAff))($64)); + }))(Effect_Ref.read(v.subscriptions))(); + return Effect_Ref.write(Data_Maybe.Nothing.value)(v.subscriptions)(); + }; + }; + var squashChildInitializers = function (lchs) { + return function (preInits) { + return Halogen_Aff_Driver_State.unDriverStateX(function (st) { + var parentInitializer = Data_Functor.map(Data_Maybe.functorMaybe)(function ($65) { + return evalF(st.selfRef)(Halogen_Query_InputF.Query.create($65)); + })(st.component.initializer); + return Effect_Ref.modify_(function (handlers) { + return { + initializers: new Data_List_Types.Cons(Control_Bind.discard(Control_Bind.discardUnit)(Effect_Aff.bindAff)(Control_Parallel.parSequence_(Effect_Aff.parallelAff)(Data_List_Types.foldableList)(Data_List.reverse(handlers.initializers)))(function () { + return Control_Bind.discard(Control_Bind.discardUnit)(Effect_Aff.bindAff)(Data_Foldable.sequence_(Effect_Aff.applicativeAff)(Data_Foldable.foldableMaybe)(parentInitializer))(function () { + return Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(function __do() { + handlePending(st.pendingQueries)(); + return handlePending(st.pendingOuts)(); + }); + }); + }), preInits), + finalizers: handlers.finalizers + }; + })(lchs); + }); + }; + }; + var runComponent = function (lchs) { + return function (handler) { + return function (j) { + return function (prjQuery) { + return Halogen_Component.unComponent(function (c) { + return function __do() { + var v = newLifecycleHandlers(); + var v1 = Halogen_Aff_Driver_State.initDriverState(c)(j)(handler)(prjQuery)(v)(); + var v2 = Effect_Ref.read(lchs)(); + Effect_Ref.write({ + initializers: Data_List_Types.Nil.value, + finalizers: v2.finalizers + })(lchs)(); + Control_Bind.bindFlipped(Effect.bindEffect)(Halogen_Aff_Driver_State.unDriverStateX(function ($66) { + return render(lchs)((function (v3) { + return v3.selfRef; + })($66)); + }))(Effect_Ref.read(v1))(); + Control_Bind.bindFlipped(Effect.bindEffect)(squashChildInitializers(lchs)(v2.initializers))(Effect_Ref.read(v1))(); + return v1; + }; + }); + }; + }; + }; + }; + var renderChild = function (lchs) { + return function (handler) { + return function (mkOrdBox) { + return function (childrenInRef) { + return function (childrenOutRef) { + return Halogen_Component.unComponentSlot(function (p) { + return function (ctor) { + return function (input) { + return function (inputQuery) { + return function (outputQuery) { + return function (prjQuery) { + var ordP = mkOrdBox(p); + return function __do() { + var v = Effect_Ref.read(childrenInRef)(); + var v1 = (function () { + var v1 = Data_Map_Internal.pop(Halogen_Data_OrdBox.ordOrdBox)(ordP)(v); + if (v1 instanceof Data_Maybe.Just) { + Effect_Ref.write(v1.value0.value1)(childrenInRef)(); + Data_Foldable.for_(Effect.applicativeEffect)(Data_Foldable.foldableMaybe)(inputQuery(input))(function (q) { + return function __do() { + var v2 = Effect_Ref.read(v1.value0.value0)(); + return Halogen_Aff_Driver_State.unDriverStateX(function (st) { + return Data_Foldable.for_(Effect.applicativeEffect)(Data_Foldable.foldableMaybe)(st.prjQuery(q))(function ($67) { + return handleAff(evalF(st.selfRef)(Halogen_Query_InputF.Query.create($67))); + }); + })(v2)(); + }; + })(); + return v1.value0.value0; + }; + if (v1 instanceof Data_Maybe.Nothing) { + return runComponent(lchs)(function ($68) { + return Data_Maybe.maybe(Control_Applicative.pure(Effect_Aff.applicativeAff)(Data_Unit.unit))(handler)(outputQuery($68)); + })(input)(prjQuery)(ctor)(); + }; + throw new Error("Failed pattern match at Halogen.Aff.Driver (line 258, column 14 - line 266, column 92): " + [ v1.constructor.name ]); + })(); + var v2 = Data_Functor.map(Effect.functorEffect)(Data_Map_Internal.member(Halogen_Data_OrdBox.ordOrdBox)(ordP))(Effect_Ref.read(childrenOutRef))(); + Control_Applicative.when(Effect.applicativeEffect)(v2)(Effect_Console.warn("Halogen: Duplicate slot address was detected during rendering, unexpected results may occur"))(); + Effect_Ref.modify_(Data_Map_Internal.insert(Halogen_Data_OrdBox.ordOrdBox)(ordP)(v1))(childrenOutRef)(); + return Control_Bind.bind(Effect.bindEffect)(Effect_Ref.read(v1))(Halogen_Aff_Driver_State.renderStateX(Effect.functorEffect)(function (v3) { + if (v3 instanceof Data_Maybe.Nothing) { + return Effect_Exception["throw"]("Halogen internal error: child was not initialized in renderChild"); + }; + if (v3 instanceof Data_Maybe.Just) { + return Control_Applicative.pure(Effect.applicativeEffect)(renderSpec.renderChild(v3.value0)); + }; + throw new Error("Failed pattern match at Halogen.Aff.Driver (line 271, column 37 - line 273, column 50): " + [ v3.constructor.name ]); + }))(); + }; + }; + }; + }; + }; + }; + }); + }; + }; + }; + }; + }; + var render = function (lchs) { + return function ($$var) { + return function __do() { + var v = Effect_Ref.read($$var)(); + var v1 = Data_Functor.map(Effect.functorEffect)(Data_Maybe.isNothing)(Effect_Ref.read(v.pendingHandlers))(); + Control_Applicative.when(Effect.applicativeEffect)(v1)(Effect_Ref.write(new Data_Maybe.Just(Data_List_Types.Nil.value))(v.pendingHandlers))(); + Effect_Ref.write(Data_Map_Internal.empty)(v.childrenOut)(); + Effect_Ref.write(v.children)(v.childrenIn)(); + var handler = Halogen_Aff_Driver_Eval.queuingHandler(function ($69) { + return Data_Functor["void"](Effect_Aff.functorAff)(evalF(v.selfRef)($69)); + })(v.pendingHandlers); + var childHandler = Halogen_Aff_Driver_Eval.queuingHandler(function ($70) { + return handler(Halogen_Query_InputF.Query.create($70)); + })(v.pendingQueries); + var v2 = renderSpec.render(function ($71) { + return handleAff(handler($71)); + })(renderChild(lchs)(childHandler)(v.component.mkOrdBox)(v.childrenIn)(v.childrenOut))(v.component.render(v.state))(v.rendering)(); + var v3 = Effect_Ref.read(v.childrenOut)(); + Control_Bind.bind(Effect.bindEffect)(Effect_Ref.read(v.childrenIn))(Data_Foldable.traverse_(Effect.applicativeEffect)(Data_Map_Internal.foldableMap)(function (childVar) { + return function __do() { + var v4 = Effect_Ref.read(childVar)(); + Halogen_Aff_Driver_State.renderStateX_(Effect.applicativeEffect)(renderSpec.removeChild)(v4)(); + return finalize(lchs)(v4)(); + }; + }))(); + Effect_Ref.modify_(function (v4) { + return { + rendering: new Data_Maybe.Just(v2), + children: v3, + component: v4.component, + state: v4.state, + refs: v4.refs, + childrenIn: v4.childrenIn, + childrenOut: v4.childrenOut, + selfRef: v4.selfRef, + handler: v4.handler, + pendingQueries: v4.pendingQueries, + pendingOuts: v4.pendingOuts, + pendingHandlers: v4.pendingHandlers, + prjQuery: v4.prjQuery, + fresh: v4.fresh, + subscriptions: v4.subscriptions, + lifecycleHandlers: v4.lifecycleHandlers + }; + })(v.selfRef)(); + return Control_Applicative.when(Effect.applicativeEffect)(v1)(Data_Function.flip(Control_Monad_Rec_Class.tailRecM(Control_Monad_Rec_Class.monadRecEffect))(Data_Unit.unit)(function (v4) { + return function __do() { + var v5 = Effect_Ref.read(v.pendingHandlers)(); + Effect_Ref.write(new Data_Maybe.Just(Data_List_Types.Nil.value))(v.pendingHandlers)(); + Data_Foldable.traverse_(Effect.applicativeEffect)(Data_Foldable.foldableMaybe)(function ($72) { + return handleAff(Data_Foldable.traverse_(Effect_Aff.applicativeAff)(Data_List_Types.foldableList)(Control_Monad_Fork_Class.fork(Control_Monad_Fork_Class.monadForkAff))(Data_List.reverse($72))); + })(v5)(); + var v6 = Effect_Ref.read(v.pendingHandlers)(); + var $57 = Data_Maybe.maybe(false)(Data_List["null"])(v6); + if ($57) { + return Data_Functor.voidLeft(Effect.functorEffect)(Effect_Ref.write(Data_Maybe.Nothing.value)(v.pendingHandlers))(new Control_Monad_Rec_Class.Done(Data_Unit.unit))(); + }; + return new Control_Monad_Rec_Class.Loop(Data_Unit.unit); + }; + }))(); + }; + }; + }; + var finalize = function (lchs) { + return Halogen_Aff_Driver_State.unDriverStateX(function (st) { + return function __do() { + cleanupSubscriptions(st)(); + Data_Foldable.for_(Effect.applicativeEffect)(Data_Foldable.foldableMaybe)(Data_Functor.map(Data_Maybe.functorMaybe)(function ($73) { + return evalF(st.selfRef)(Halogen_Query_InputF.Query.create($73)); + })(st.component.finalizer))(function (f) { + return Effect_Ref.modify_(function (handlers) { + return { + initializers: handlers.initializers, + finalizers: new Data_List_Types.Cons(f, handlers.finalizers) + }; + })(lchs); + })(); + return Data_Foldable.for_(Effect.applicativeEffect)(Data_Map_Internal.foldableMap)(st.children)(Control_Bind.composeKleisliFlipped(Effect.bindEffect)(finalize(lchs))(Effect_Ref.read))(); + }; + }); + }; + var evalF = function (ref) { + return Halogen_Aff_Driver_Eval["eval"](render)(ref); + }; + var evalDriver = function (ref) { + return function (prjQuery) { + return function (q) { + var v = prjQuery(q); + if (v instanceof Data_Maybe.Just) { + return evalF(ref)(new Halogen_Query_InputF.Query(v.value0)); + }; + if (v instanceof Data_Maybe.Nothing) { + return Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Exception.throwException(Effect_Exception.error("Halogen internal error: query projection failed in runUI'"))); + }; + throw new Error("Failed pattern match at Halogen.Aff.Driver (line 136, column 5 - line 138, column 113): " + [ v.constructor.name ]); + }; + }; + }; + return Control_Bind.bind(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(newLifecycleHandlers))(function (v) { + return Control_Bind.bind(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Effect_Ref["new"](0)))(function (v1) { + return Halogen_Aff_Driver_Eval.handleLifecycle(v)(function __do() { + var v2 = Effect_Ref["new"](Data_Map_Internal.empty)(); + return Control_Bind.bind(Effect.bindEffect)(Control_Bind.bind(Effect.bindEffect)(runComponent(v)(rootHandler(v2))(i)(Data_Maybe.Just.create)(component))(Effect_Ref.read))(Halogen_Aff_Driver_State.unDriverStateX(function (st) { + return Control_Applicative.pure(Effect.applicativeEffect)({ + query: evalDriver(st.selfRef)(st.prjQuery), + subscribe: subscribe(v1)(v2) + }); + }))(); + }); + }); + }); + }; + }; + }; + exports["runUI"] = runUI; +})(PS["Halogen.Aff.Driver"] = PS["Halogen.Aff.Driver"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Monad_Error_Class = PS["Control.Monad.Error.Class"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Either = PS["Data.Either"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Unit = PS["Data.Unit"]; + var Effect = PS["Effect"]; + var Effect_Aff = PS["Effect.Aff"]; + var Effect_Class = PS["Effect.Class"]; + var Effect_Exception = PS["Effect.Exception"]; + var Prelude = PS["Prelude"]; + var Web_DOM_ParentNode = PS["Web.DOM.ParentNode"]; + var Web_Event_EventTarget = PS["Web.Event.EventTarget"]; + var Web_HTML = PS["Web.HTML"]; + var Web_HTML_Event_EventTypes = PS["Web.HTML.Event.EventTypes"]; + var Web_HTML_HTMLDocument = PS["Web.HTML.HTMLDocument"]; + var Web_HTML_HTMLDocument_ReadyState = PS["Web.HTML.HTMLDocument.ReadyState"]; + var Web_HTML_HTMLElement = PS["Web.HTML.HTMLElement"]; + var Web_HTML_Window = PS["Web.HTML.Window"]; + var selectElement = function (query) { + return Control_Bind.bind(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Control_Bind.bindFlipped(Effect.bindEffect)(Control_Bind.composeKleisliFlipped(Effect.bindEffect)(function ($12) { + return Web_DOM_ParentNode.querySelector(query)(Web_HTML_HTMLDocument.toParentNode($12)); + })(Web_HTML_Window.document))(Web_HTML.window)))(function (v) { + return Control_Applicative.pure(Effect_Aff.applicativeAff)(Control_Bind.bindFlipped(Data_Maybe.bindMaybe)(Web_HTML_HTMLElement.fromElement)(v)); + }); + }; + var runHalogenAff = Effect_Aff.runAff_(Data_Either.either(Effect_Exception.throwException)(Data_Function["const"](Control_Applicative.pure(Effect.applicativeEffect)(Data_Unit.unit)))); + exports["selectElement"] = selectElement; + exports["runHalogenAff"] = runHalogenAff; +})(PS["Halogen.Aff.Util"] = PS["Halogen.Aff.Util"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Data_Array = PS["Data.Array"]; + var Data_Eq = PS["Data.Eq"]; + var Data_Function_Uncurried = PS["Data.Function.Uncurried"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Nullable = PS["Data.Nullable"]; + var Data_Tuple = PS["Data.Tuple"]; + var Effect = PS["Effect"]; + var Effect_Uncurried = PS["Effect.Uncurried"]; + var Halogen_VDom_Machine = PS["Halogen.VDom.Machine"]; + var Halogen_VDom_Types = PS["Halogen.VDom.Types"]; + var Halogen_VDom_Util = PS["Halogen.VDom.Util"]; + var Prelude = PS["Prelude"]; + var Web_DOM_Document = PS["Web.DOM.Document"]; + var Web_DOM_Element = PS["Web.DOM.Element"]; + var Web_DOM_Node = PS["Web.DOM.Node"]; + var eqElemSpec = function (a, b) { + if (a.value1 === b.value1) { + if (a.value0 instanceof Data_Maybe.Just && (b.value0 instanceof Data_Maybe.Just && a.value0.value0 === b.value0.value0)) { + return true; + }; + if (a.value0 instanceof Data_Maybe.Nothing && b.value0 instanceof Data_Maybe.Nothing) { + return true; + }; + return false; + }; + return false; + }; + var buildWidget = (function () { + var patch = function (build, v) { + return function (v1) { + if (v1 instanceof Halogen_VDom_Types.Grafted) { + return patch(build, v)(Halogen_VDom_Types.runGraft(v1.value0)); + }; + if (v1 instanceof Halogen_VDom_Types.Widget) { + var v2 = v.value1(v1.value0); + return new Halogen_VDom_Machine.Step(v2.value0, patch(build, v2), v2.value2); + }; + v.value2(); + return build(v1); + }; + }; + var render = function (v, build, w) { + var v1 = v.buildWidget(v)(w); + return new Halogen_VDom_Machine.Step(v1.value0, patch(build, v1), v1.value2); + }; + return render; + })(); + var buildText = (function () { + var patch = function (build, halt, node, s1) { + return function (v) { + if (v instanceof Halogen_VDom_Types.Grafted) { + return patch(build, halt, node, s1)(Halogen_VDom_Types.runGraft(v.value0)); + }; + if (v instanceof Halogen_VDom_Types.Text) { + var res = new Halogen_VDom_Machine.Step(node, patch(build, halt, node, v.value0), halt); + var $84 = s1 === v.value0; + if ($84) { + return res; + }; + Halogen_VDom_Util.setTextContent(v.value0, node); + return res; + }; + halt(); + return build(v); + }; + }; + var done = function (node) { + return function __do() { + var v = Halogen_VDom_Util.parentNode(node); + return Halogen_VDom_Util.removeChild(node, v); + }; + }; + var render = function (v, build, s) { + var v1 = Halogen_VDom_Util.createTextNode(s, v.document); + var halt = done(v1); + return new Halogen_VDom_Machine.Step(v1, patch(build, halt, v1, s), halt); + }; + return render; + })(); + var buildKeyed = (function () { + var done = function (node, attrs, steps) { + return function __do() { + var v = Halogen_VDom_Util.parentNode(node); + Halogen_VDom_Util.removeChild(node, v); + Halogen_VDom_Util.forInE(steps, function (v1, v2) { + return v2.value2(); + }); + return Halogen_VDom_Machine.halt(attrs)(); + }; + }; + var patch = function (build, halt, node, attrs, v, ch1, len1) { + return function (v1) { + if (v1 instanceof Halogen_VDom_Types.Grafted) { + return patch(build, halt, node, attrs, v, ch1, len1)(Halogen_VDom_Types.runGraft(v1.value0)); + }; + if (v1 instanceof Halogen_VDom_Types.Keyed && eqElemSpec(v, v1.value0)) { + var v2 = Data_Array.length(v1.value1); + if (len1 === 0 && v2 === 0) { + var v4 = Halogen_VDom_Machine.step(attrs)(v1.value0.value2); + var halt$prime = done(node, v4, ch1); + return new Halogen_VDom_Machine.Step(node, patch(build, halt$prime, node, v4, v1.value0, ch1, 0), halt$prime); + }; + var onThis = function (v4, v5) { + return v5.value2(); + }; + var onThese = function (v4, ix$prime, v5, v6) { + var v7 = v5.value1(v6.value1); + Halogen_VDom_Util.insertChildIx(ix$prime, v7.value0, node); + return v7; + }; + var onThat = function (v4, ix, v5) { + var v6 = build(v5.value1); + Halogen_VDom_Util.insertChildIx(ix, v6.value0, node); + return v6; + }; + var v4 = Halogen_VDom_Util.diffWithKeyAndIxE(ch1, v1.value1, Data_Tuple.fst, onThese, onThis, onThat); + var v5 = Halogen_VDom_Machine.step(attrs)(v1.value0.value2); + var halt$prime = done(node, v5, v4); + return new Halogen_VDom_Machine.Step(node, patch(build, halt$prime, node, v5, v1.value0, v4, v2), halt$prime); + }; + halt(); + return build(v1); + }; + }; + var render = function (v, build, v1, ch1) { + var v2 = Halogen_VDom_Util.createElement(Data_Nullable.toNullable(v1.value0), v1.value1, v.document); + var node = Web_DOM_Element.toNode(v2); + var onChild = function (k, ix, v3) { + var v4 = build(v3.value1); + Halogen_VDom_Util.insertChildIx(ix, v4.value0, node); + return v4; + }; + var v3 = Halogen_VDom_Util.strMapWithIxE(ch1, Data_Tuple.fst, onChild); + var v4 = v.buildAttributes(v2)(v1.value2); + var halt = done(node, v4, v3); + return new Halogen_VDom_Machine.Step(node, patch(build, halt, node, v4, v1, v3, Data_Array.length(ch1)), halt); + }; + return render; + })(); + var buildElem = (function () { + var done = function (node, attrs, steps) { + return function __do() { + var v = Halogen_VDom_Util.parentNode(node); + Halogen_VDom_Util.removeChild(node, v); + Effect.foreachE(steps)(Halogen_VDom_Machine.halt)(); + return Halogen_VDom_Machine.halt(attrs)(); + }; + }; + var patch = function (build, halt, node, attrs, v, ch1) { + return function (v1) { + if (v1 instanceof Halogen_VDom_Types.Grafted) { + return patch(build, halt, node, attrs, v, ch1)(Halogen_VDom_Types.runGraft(v1.value0)); + }; + if (v1 instanceof Halogen_VDom_Types.Elem && eqElemSpec(v, v1.value0)) { + var v2 = Data_Array.length(v1.value1); + var v3 = Data_Array.length(ch1); + if (v3 === 0 && v2 === 0) { + var v4 = Halogen_VDom_Machine.step(attrs)(v1.value0.value2); + var halt$prime = done(node, v4, ch1); + return new Halogen_VDom_Machine.Step(node, patch(build, halt$prime, node, v4, v1.value0, ch1), halt$prime); + }; + var onThis = function (ix, v4) { + return v4.value2(); + }; + var onThese = function (ix, v4, vdom) { + var v5 = v4.value1(vdom); + Halogen_VDom_Util.insertChildIx(ix, v5.value0, node); + return v5; + }; + var onThat = function (ix, vdom) { + var v4 = build(vdom); + Halogen_VDom_Util.insertChildIx(ix, v4.value0, node); + return v4; + }; + var v4 = Halogen_VDom_Util.diffWithIxE(ch1, v1.value1, onThese, onThis, onThat); + var v5 = Halogen_VDom_Machine.step(attrs)(v1.value0.value2); + var halt$prime = done(node, v5, v4); + return new Halogen_VDom_Machine.Step(node, patch(build, halt$prime, node, v5, v1.value0, v4), halt$prime); + }; + halt(); + return build(v1); + }; + }; + var render = function (v, build, v1, ch1) { + var v2 = Halogen_VDom_Util.createElement(Data_Nullable.toNullable(v1.value0), v1.value1, v.document); + var node = Web_DOM_Element.toNode(v2); + var onChild = function (ix, child) { + var v3 = build(child); + Halogen_VDom_Util.insertChildIx(ix, v3.value0, node); + return v3; + }; + var v3 = Halogen_VDom_Util.forE(ch1, onChild); + var v4 = v.buildAttributes(v2)(v1.value2); + var halt = done(node, v4, v3); + return new Halogen_VDom_Machine.Step(node, patch(build, halt, node, v4, v1, v3), halt); + }; + return render; + })(); + var buildVDom = function (spec) { + var build = function (v) { + if (v instanceof Halogen_VDom_Types.Text) { + return buildText(spec, build, v.value0); + }; + if (v instanceof Halogen_VDom_Types.Elem) { + return buildElem(spec, build, v.value0, v.value1); + }; + if (v instanceof Halogen_VDom_Types.Keyed) { + return buildKeyed(spec, build, v.value0, v.value1); + }; + if (v instanceof Halogen_VDom_Types.Widget) { + return buildWidget(spec, build, v.value0); + }; + if (v instanceof Halogen_VDom_Types.Grafted) { + return build(Halogen_VDom_Types.runGraft(v.value0)); + }; + throw new Error("Failed pattern match at Halogen.VDom.DOM (line 58, column 27 - line 63, column 52): " + [ v.constructor.name ]); + }; + return build; + }; + exports["buildVDom"] = buildVDom; + exports["buildText"] = buildText; + exports["buildElem"] = buildElem; + exports["buildKeyed"] = buildKeyed; + exports["buildWidget"] = buildWidget; +})(PS["Halogen.VDom.DOM"] = PS["Halogen.VDom.DOM"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Category = PS["Control.Category"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_HeytingAlgebra = PS["Data.HeytingAlgebra"]; + var Data_Maybe = PS["Data.Maybe"]; + var Data_Unit = PS["Data.Unit"]; + var Effect = PS["Effect"]; + var Effect_Aff = PS["Effect.Aff"]; + var Effect_Class = PS["Effect.Class"]; + var Effect_Ref = PS["Effect.Ref"]; + var Effect_Uncurried = PS["Effect.Uncurried"]; + var Halogen_Aff_Driver = PS["Halogen.Aff.Driver"]; + var Halogen_Aff_Driver_State = PS["Halogen.Aff.Driver.State"]; + var Halogen_Component = PS["Halogen.Component"]; + var Halogen_HTML_Core = PS["Halogen.HTML.Core"]; + var Halogen_Query_InputF = PS["Halogen.Query.InputF"]; + var Halogen_VDom = PS["Halogen.VDom"]; + var Halogen_VDom_DOM = PS["Halogen.VDom.DOM"]; + var Halogen_VDom_DOM_Prop = PS["Halogen.VDom.DOM.Prop"]; + var Halogen_VDom_Machine = PS["Halogen.VDom.Machine"]; + var Prelude = PS["Prelude"]; + var Unsafe_Reference = PS["Unsafe.Reference"]; + var Web_DOM_Document = PS["Web.DOM.Document"]; + var Web_DOM_Element = PS["Web.DOM.Element"]; + var Web_DOM_Node = PS["Web.DOM.Node"]; + var Web_HTML = PS["Web.HTML"]; + var Web_HTML_HTMLDocument = PS["Web.HTML.HTMLDocument"]; + var Web_HTML_HTMLElement = PS["Web.HTML.HTMLElement"]; + var Web_HTML_Window = PS["Web.HTML.Window"]; + var substInParent = function (v) { + return function (v1) { + return function (v2) { + if (v1 instanceof Data_Maybe.Just && v2 instanceof Data_Maybe.Just) { + return Data_Functor["void"](Effect.functorEffect)(Web_DOM_Node.insertBefore(v)(v1.value0)(v2.value0)); + }; + if (v1 instanceof Data_Maybe.Nothing && v2 instanceof Data_Maybe.Just) { + return Data_Functor["void"](Effect.functorEffect)(Web_DOM_Node.appendChild(v)(v2.value0)); + }; + return Control_Applicative.pure(Effect.applicativeEffect)(Data_Unit.unit); + }; + }; + }; + var removeChild = function (v) { + return function __do() { + var v1 = Web_DOM_Node.parentNode(v.node)(); + return Data_Foldable.traverse_(Effect.applicativeEffect)(Data_Foldable.foldableMaybe)(function (pn) { + return Web_DOM_Node.removeChild(v.node)(pn); + })(v1)(); + }; + }; + var mkSpec = function (handler) { + return function (renderChildRef) { + return function (document) { + var getNode = Halogen_Aff_Driver_State.unRenderStateX(function (v) { + return v.node; + }); + var done = Control_Applicative.pure(Effect.applicativeEffect)(Data_Unit.unit); + var patch = function (slot) { + var v = Effect_Ref.read(renderChildRef)(); + var v1 = v(slot)(); + var node = getNode(v1); + return new Halogen_VDom_Machine.Step(node, patch, done); + }; + var buildWidget = function (spec) { + return function (slot) { + var v = Effect_Ref.read(renderChildRef)(); + var v1 = v(slot)(); + var node = getNode(v1); + return new Halogen_VDom_Machine.Step(node, patch, done); + }; + }; + var buildAttributes = Halogen_VDom_DOM_Prop.buildProp(handler); + return { + buildWidget: buildWidget, + buildAttributes: buildAttributes, + document: document + }; + }; + }; + }; + var renderSpec = function (document) { + return function (container) { + var render = function (handler) { + return function (child) { + return function (v) { + return function (v1) { + if (v1 instanceof Data_Maybe.Nothing) { + return function __do() { + var v2 = Effect_Ref["new"](child)(); + var spec = mkSpec(handler)(v2)(document); + var v3 = Halogen_VDom_DOM.buildVDom(spec)(v); + var node = Halogen_VDom_Machine.extract(v3); + Data_Functor["void"](Effect.functorEffect)(Web_DOM_Node.appendChild(node)(Web_HTML_HTMLElement.toNode(container)))(); + return { + machine: v3, + node: node, + renderChildRef: v2 + }; + }; + }; + if (v1 instanceof Data_Maybe.Just) { + return function __do() { + Effect_Ref.write(child)(v1.value0.renderChildRef)(); + var v2 = Web_DOM_Node.parentNode(v1.value0.node)(); + var v3 = Web_DOM_Node.nextSibling(v1.value0.node)(); + var v4 = Halogen_VDom_Machine.step(v1.value0.machine)(v); + var newNode = Halogen_VDom_Machine.extract(v4); + Control_Applicative.when(Effect.applicativeEffect)(Data_HeytingAlgebra.not(Data_HeytingAlgebra.heytingAlgebraFunction(Data_HeytingAlgebra.heytingAlgebraFunction(Data_HeytingAlgebra.heytingAlgebraBoolean)))(Unsafe_Reference.unsafeRefEq)(v1.value0.node)(newNode))(substInParent(newNode)(v3)(v2))(); + return { + machine: v4, + node: newNode, + renderChildRef: v1.value0.renderChildRef + }; + }; + }; + throw new Error("Failed pattern match at Halogen.VDom.Driver (line 118, column 5 - line 134, column 80): " + [ v1.constructor.name ]); + }; + }; + }; + }; + return { + render: render, + renderChild: Control_Category.identity(Control_Category.categoryFn), + removeChild: removeChild + }; + }; + }; + var runUI = function (component) { + return function (i) { + return function (element) { + return Control_Bind.bind(Effect_Aff.bindAff)(Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Data_Functor.map(Effect.functorEffect)(Web_HTML_HTMLDocument.toDocument)(Control_Bind.bindFlipped(Effect.bindEffect)(Web_HTML_Window.document)(Web_HTML.window))))(function (v) { + return Halogen_Aff_Driver.runUI(renderSpec(v)(element))(component)(i); + }); + }; + }; + }; + exports["runUI"] = runUI; +})(PS["Halogen.VDom.Driver"] = PS["Halogen.VDom.Driver"] || {}); +(function(exports) { + // Generated by purs version 0.12.2 + "use strict"; + var App = PS["App"]; + var Component_AccountSettings = PS["Component.AccountSettings"]; + var Component_Add = PS["Component.Add"]; + var Component_BList = PS["Component.BList"]; + var Component_NList = PS["Component.NList"]; + var Component_NNote = PS["Component.NNote"]; + var Control_Applicative = PS["Control.Applicative"]; + var Control_Bind = PS["Control.Bind"]; + var Control_Semigroupoid = PS["Control.Semigroupoid"]; + var Data_Foldable = PS["Data.Foldable"]; + var Data_Function = PS["Data.Function"]; + var Data_Functor = PS["Data.Functor"]; + var Data_Unit = PS["Data.Unit"]; + var Effect = PS["Effect"]; + var Effect_Aff = PS["Effect.Aff"]; + var Effect_Class = PS["Effect.Class"]; + var Halogen_Aff = PS["Halogen.Aff"]; + var Halogen_Aff_Util = PS["Halogen.Aff.Util"]; + var Halogen_VDom_Driver = PS["Halogen.VDom.Driver"]; + var Model = PS["Model"]; + var Prelude = PS["Prelude"]; + var Web_DOM_Element = PS["Web.DOM.Element"]; + var Web_DOM_ParentNode = PS["Web.DOM.ParentNode"]; + var Web_Event_Event = PS["Web.Event.Event"]; + var Web_HTML_HTMLElement = PS["Web.HTML.HTMLElement"]; + var showFooter = Control_Bind.bind(Effect_Aff.bindAff)(Halogen_Aff_Util.selectElement(".user_footer"))(Data_Foldable.traverse_(Effect_Aff.applicativeAff)(Data_Foldable.foldableMaybe)(function (el) { + return Effect_Class.liftEffect(Effect_Aff.monadEffectAff)(Web_DOM_Element.removeAttribute("hidden")(Web_HTML_HTMLElement.toElement(el))); + })); + var renderNotes = function (renderElSelector) { + return function (notes) { + return Halogen_Aff_Util.runHalogenAff(Control_Bind.bind(Effect_Aff.bindAff)(Halogen_Aff_Util.selectElement(renderElSelector))(Data_Foldable.traverse_(Effect_Aff.applicativeAff)(Data_Foldable.foldableMaybe)(function (el) { + return Control_Bind.discard(Control_Bind.discardUnit)(Effect_Aff.bindAff)(Data_Functor["void"](Effect_Aff.functorAff)(Halogen_VDom_Driver.runUI(Component_NList.nlist(notes))(Data_Unit.unit)(el)))(function () { + return showFooter; + }); + }))); + }; + }; + var renderNote = function (renderElSelector) { + return function (note) { + return Halogen_Aff_Util.runHalogenAff(Control_Bind.bind(Effect_Aff.bindAff)(Halogen_Aff_Util.selectElement(renderElSelector))(Data_Foldable.traverse_(Effect_Aff.applicativeAff)(Data_Foldable.foldableMaybe)(function (el) { + return Data_Functor["void"](Effect_Aff.functorAff)(Halogen_VDom_Driver.runUI(Component_NNote.nnote(note))(Data_Unit.unit)(el)); + }))); + }; + }; + var renderBookmarks = function (renderElSelector) { + return function (bmarks) { + return Halogen_Aff_Util.runHalogenAff(Control_Bind.bind(Effect_Aff.bindAff)(Halogen_Aff_Util.selectElement(renderElSelector))(Data_Foldable.traverse_(Effect_Aff.applicativeAff)(Data_Foldable.foldableMaybe)(function (el) { + return Control_Bind.discard(Control_Bind.discardUnit)(Effect_Aff.bindAff)(Data_Functor["void"](Effect_Aff.functorAff)(Halogen_VDom_Driver.runUI(Component_BList.blist(bmarks))(Data_Unit.unit)(el)))(function () { + return showFooter; + }); + }))); + }; + }; + var renderAddForm = function (renderElSelector) { + return function (bmark) { + return Halogen_Aff_Util.runHalogenAff(Control_Bind.bind(Effect_Aff.bindAff)(Halogen_Aff_Util.selectElement(renderElSelector))(Data_Foldable.traverse_(Effect_Aff.applicativeAff)(Data_Foldable.foldableMaybe)(function (el) { + return Halogen_VDom_Driver.runUI(Component_Add.addbmark(bmark))(Data_Unit.unit)(el); + }))); + }; + }; + var renderAccountSettings = function (renderElSelector) { + return function (accountSettings) { + return Halogen_Aff_Util.runHalogenAff(Control_Bind.bind(Effect_Aff.bindAff)(Halogen_Aff_Util.selectElement(renderElSelector))(Data_Foldable.traverse_(Effect_Aff.applicativeAff)(Data_Foldable.foldableMaybe)(function (el) { + return Data_Functor["void"](Effect_Aff.functorAff)(Halogen_VDom_Driver.runUI(Component_AccountSettings.usetting(accountSettings))(Data_Unit.unit)(el)); + }))); + }; + }; + var main = Control_Applicative.pure(Effect.applicativeEffect)(Data_Unit.unit); + var logoutE = function (e) { + return Control_Bind.bindFlipped(Effect.bindEffect)(function ($0) { + return Data_Functor["void"](Effect.functorEffect)(Effect_Aff.launchAff(App.logout($0))); + })(Web_Event_Event.preventDefault(e)); + }; + exports["main"] = main; + exports["logoutE"] = logoutE; + exports["renderBookmarks"] = renderBookmarks; + exports["renderAddForm"] = renderAddForm; + exports["renderNotes"] = renderNotes; + exports["renderNote"] = renderNote; + exports["renderAccountSettings"] = renderAccountSettings; + exports["showFooter"] = showFooter; +})(PS["Main"] = PS["Main"] || {}); +PS["Main"].main(); \ No newline at end of file diff --git a/static/js/app.js.gz b/static/js/app.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..b02f1fde626c9564ff38c70669ce7a3153eccc36 GIT binary patch literal 76960 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

YbisgC{FQ-Pdu()qLV^$ciViGo*@Fnv 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.map(function(e){var t=e.indexOf(":");return n(e.substring(0,t))(e.substring(t+2))}),body:e.getResponse(o)})},o.responseType=t.responseType,o.withCredentials=t.withCredentials,o.send(t.content),function(n,e,t){try{o.abort()}catch(n){return e(n)}return t()}}})}(),function(n){"use strict";n.fromObject=function(n){return n},n.stringify=function(n){return JSON.stringify(n)}}(PS["Data.Argonaut.Core"]=PS["Data.Argonaut.Core"]||{}),function(n){"use strict";(PS["Data.Eq"]=PS["Data.Eq"]||{}).refEq=function(n){return function(e){return n===e}}}(),function(n){"use strict";n.boolConj=function(n){return function(e){return n&&e}},n.boolDisj=function(n){return function(e){return n||e}},n.boolNot=function(n){return!n}}(PS["Data.HeytingAlgebra"]=PS["Data.HeytingAlgebra"]||{}),function(n){"use strict";PS["Data.Symbol"];var e=function(){function n(){}return n.value=new n,n}();n.IsSymbol=function(n){this.reflectSymbol=n},n.reflectSymbol=function(n){return n.reflectSymbol},n.SProxy=e}(PS["Data.Symbol"]=PS["Data.Symbol"]||{}),function(n){"use strict";(PS["Data.Unit"]=PS["Data.Unit"]||{}).unit={}}(),function(n){"use strict";(PS["Data.Show"]=PS["Data.Show"]||{}).showIntImpl=function(n){return n.toString()}}(),function(n){"use strict";(PS["Record.Unsafe"]=PS["Record.Unsafe"]||{}).unsafeGet=function(n){return function(e){return e[n]}}}(),function(n){"use strict";var e=PS["Record.Unsafe"];n.unsafeGet=e.unsafeGet}(PS["Record.Unsafe"]=PS["Record.Unsafe"]||{}),function(n){"use strict";var e=PS["Data.Show"],t=(PS["Data.Symbol"],PS["Record.Unsafe"],PS["Type.Data.RowList"],function(n){this.show=n}),r=new t(e.showIntImpl);n.Show=t,n.show=function(n){return n.show},n.showInt=r}(PS["Data.Show"]=PS["Data.Show"]||{}),function(n){"use strict";var e=PS["Data.Unit"];PS["Data.Show"];n.unit=e.unit}(PS["Data.Unit"]=PS["Data.Unit"]||{}),function(n){"use strict";var e=PS["Data.HeytingAlgebra"],t=(PS["Data.Symbol"],PS["Data.Unit"],PS["Record.Unsafe"],PS["Type.Data.Row"],PS["Type.Data.RowList"],function(n,e,t,r,a,o){this.conj=n,this.disj=e,this.ff=t,this.implies=r,this.not=a,this.tt=o}),r=function(n){return n.tt},a=function(n){return n.not},o=function(n){return n.implies},u=function(n){return n.ff},i=function(n){return n.disj},l=new t(e.boolConj,e.boolDisj,!1,function(n){return function(e){return i(l)(a(l)(n))(e)}},e.boolNot,!0),c=function(n){return n.conj};n.HeytingAlgebra=t,n.tt=r,n.ff=u,n.implies=o,n.conj=c,n.disj=i,n.not=a,n.heytingAlgebraBoolean=l,n.heytingAlgebraFunction=function(n){return new t(function(e){return function(t){return function(r){return c(n)(e(r))(t(r))}}},function(e){return function(t){return function(r){return i(n)(e(r))(t(r))}}},function(e){return u(n)},function(e){return function(t){return function(r){return o(n)(e(r))(t(r))}}},function(e){return function(t){return a(n)(e(t))}},function(e){return r(n)})}}(PS["Data.HeytingAlgebra"]=PS["Data.HeytingAlgebra"]||{}),function(n){"use strict";PS["Data.Show"];n.absurd=function(n){return function(n){for(var e;;)e=void(n=n);return e}(n)}}(PS["Data.Void"]=PS["Data.Void"]||{}),function(n){"use strict";var e=PS["Data.Eq"],t=(PS["Data.HeytingAlgebra"],PS["Data.Symbol"],PS["Data.Unit"],PS["Data.Void"],PS["Record.Unsafe"],PS["Type.Data.RowList"],function(n){this.eq=n}),r=new t(function(n){return function(n){return!0}}),a=new t(function(n){return function(n){return!0}}),o=new t(e.refEq),u=new t(e.refEq),i=new t(e.refEq);n.Eq=t,n.eq=function(n){return n.eq},n.eqInt=u,n.eqChar=i,n.eqString=o,n.eqUnit=a,n.eqVoid=r}(PS["Data.Eq"]=PS["Data.Eq"]||{}),function(n){"use strict";var e=function(n){this.compose=n},t=new e(function(n){return function(e){return function(t){return n(e(t))}}});n.compose=function(n){return n.compose},n.Semigroupoid=e,n.semigroupoidFn=t}(PS["Control.Semigroupoid"]=PS["Control.Semigroupoid"]||{}),function(n){"use strict";var e=PS["Control.Semigroupoid"],t=function(n,e){this.Semigroupoid0=n,this.identity=e},r=new t(function(){return e.semigroupoidFn},function(n){return n});n.Category=t,n.identity=function(n){return n.identity},n.categoryFn=r}(PS["Control.Category"]=PS["Control.Category"]||{}),function(n){"use strict";(PS["Data.Boolean"]=PS["Data.Boolean"]||{}).otherwise=!0}(),function(n){"use strict";(PS["Data.Ord.Unsafe"]=PS["Data.Ord.Unsafe"]||{}).unsafeCompareImpl=function(n){return function(e){return function(t){return function(r){return function(a){return r0?Math.floor(n/e):-Math.floor(n/-e)}},n.intMod=function(n){return function(e){if(0===e)return 0;var t=Math.abs(e);return(n%t+t)%t}}}(PS["Data.EuclideanRing"]=PS["Data.EuclideanRing"]||{}),function(n){"use strict";var e=PS["Data.Ring"],t=(PS["Data.Semiring"],PS["Data.Symbol"],PS["Data.Unit"],function(n){this.Ring0=n}),r=new t(function(){return e.ringInt});n.CommutativeRing=t,n.commutativeRingInt=r}(PS["Data.CommutativeRing"]=PS["Data.CommutativeRing"]||{}),function(n){"use strict";var e=PS["Data.EuclideanRing"],t=(PS["Data.BooleanAlgebra"],PS["Data.CommutativeRing"]),r=(PS["Data.Eq"],PS["Data.HeytingAlgebra"],PS["Data.Ring"],PS["Data.Semiring"],function(n,e,t,r){this.CommutativeRing0=n,this.degree=e,this.div=t,this.mod=r}),a=new r(function(){return t.commutativeRingInt},e.intDegree,e.intDiv,e.intMod);n.EuclideanRing=r,n.degree=function(n){return n.degree},n.div=function(n){return n.div},n.mod=function(n){return n.mod},n.euclideanRingInt=a}(PS["Data.EuclideanRing"]=PS["Data.EuclideanRing"]||{}),function(n){"use strict";PS["Data.Boolean"],PS["Data.Eq"],PS["Data.EuclideanRing"],PS["Data.Ord"],PS["Data.Ordering"];var e=PS["Data.Semigroup"],t=(PS["Data.Symbol"],PS["Data.Unit"],PS["Record.Unsafe"],PS["Type.Data.RowList"],function(n,e){this.Semigroup0=n,this.mempty=e}),r=new t(function(){return e.semigroupString},""),a=new t(function(){return e.semigroupArray},[]),o=function(n){return n.mempty};n.Monoid=t,n.mempty=o,n.guard=function(n){return function(e){return function(t){if(e)return t;if(!e)return o(n);throw new Error("Failed pattern match at Data.Monoid (line 74, column 1 - line 74, column 49): "+[e.constructor.name,t.constructor.name])}}},n.monoidFn=function(n){return new t(function(){return e.semigroupFn(n.Semigroup0())},function(e){return o(n)})},n.monoidString=r,n.monoidArray=a}(PS["Data.Monoid"]=PS["Data.Monoid"]||{}),function(n){"use strict";PS["Control.Alt"],PS["Control.Alternative"],PS["Control.Applicative"];var e=PS["Control.Apply"],t=PS["Control.Bind"],r=PS["Control.Category"],a=(PS["Control.Extend"],PS["Control.Monad"],PS["Control.MonadZero"],PS["Control.Plus"],PS["Data.Bounded"],PS["Data.Eq"],PS["Data.Function"]),o=PS["Data.Functor"],u=(PS["Data.Functor.Invariant"],PS["Data.Monoid"],PS["Data.Ord"],PS["Data.Ordering"],PS["Data.Semigroup"],PS["Data.Show"],PS["Data.Unit"],PS.Prelude,function(){function n(){}return n.value=new n,n}()),i=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),l=function(n){return function(e){return function(t){if(t instanceof u)return n;if(t instanceof i)return e(t.value0);throw new Error("Failed pattern match at Data.Maybe (line 217, column 1 - line 217, column 51): "+[n.constructor.name,e.constructor.name,t.constructor.name])}}},c=l(!0)(a.const(!1)),f=l(!1)(a.const(!0)),s=new o.Functor(function(n){return function(e){return e instanceof i?new i(n(e.value0)):u.value}}),d=new e.Apply(function(){return s},function(n){return function(e){if(n instanceof i)return o.map(s)(n.value0)(e);if(n instanceof u)return u.value;throw new Error("Failed pattern match at Data.Maybe (line 67, column 1 - line 67, column 35): "+[n.constructor.name,e.constructor.name])}}),S=new t.Bind(function(){return d},function(n){return function(e){if(n instanceof i)return e(n.value0);if(n instanceof u)return u.value;throw new Error("Failed pattern match at Data.Maybe (line 125, column 1 - line 125, column 33): "+[n.constructor.name,e.constructor.name])}});n.Nothing=u,n.Just=i,n.maybe=l,n.fromMaybe=function(n){return l(n)(r.identity(r.categoryFn))},n.isJust=f,n.isNothing=c,n.fromJust=function(n){return function(n){if(n instanceof i)return n.value0;throw new Error("Failed pattern match at Data.Maybe (line 268, column 1 - line 268, column 46): "+[n.constructor.name])}},n.functorMaybe=s,n.applyMaybe=d,n.bindMaybe=S}(PS["Data.Maybe"]=PS["Data.Maybe"]||{}),function(n){"use strict";n.empty={},n._lookup=function(n,e,t,r){return t in r?e(r[t]):n}}(PS["Foreign.Object"]=PS["Foreign.Object"]||{}),function(n){"use strict";n.length=function(n){return n.length},n.cons=function(n){return function(e){return[n].concat(e)}},n.snoc=function(n){return function(e){var t=n.slice();return t.push(e),t}},n.concat=function(n){if(n.length<=1e4)return Array.prototype.concat.apply([],n);for(var e=[],t=0,r=n.length;t=0;a--)r=n(t[a])(r);return r}}},n.foldlArray=function(n){return function(e){return function(t){for(var r=e,a=t.length,o=0;o=0&&n0)&&(g=A,b=J._3(V)));break;case v:R++,W=new D(S,new D(m,b,h),W,U),g=A,b=U&&U!==N?J._1.killed(n.fromLeft(U))(J._2):h?J._1.failed(n.fromLeft(h))(J._2):J._1.completed(n.fromRight(b))(J._2),h=null;break;case p:R++,W=new D(S,new D(m,b,h),W,U),g=A,b=J._1;break;case m:R--,g=L,b=J._1,h=J._2}break;case _:for(var Q in B)B.hasOwnProperty(Q)&&(q=q&&B[Q].rethrow,w(B[Q].handler(b)));return B=null,void(U&&h?setTimeout(function(){throw n.fromLeft(h)},0):n.isLeft(b)&&q&&setTimeout(function(){if(q)throw n.fromLeft(b)},0));case C:g=A;break;case H:return}}function V(n){return function(){if(g===_)return q=q&&n.rethrow,n.handler(b)(),function(){};var e=N++;return(B=B||{})[e]=n,function(){null!==B&&delete B[e]}}}return{kill:function(e,t){return function(){if(g===_)return t(n.right(void 0))(),function(){};var r=V({rethrow:!1,handler:function(){return t(n.right(void 0))}})();switch(g){case C:U=n.left(e),g=_,b=U,j(d);break;case H:null===U&&(U=n.left(e)),0===R&&(g===H&&(W=new D(S,new D(p,b(e)),W,U)),g=L,b=null,h=null,j(++d));break;default:null===U&&(U=n.left(e)),0===R&&(g=L,b=null,h=null)}return r}},join:function(n){return function(){var e=V({rethrow:!1,handler:n})();return g===C&&j(d),e}},onComplete:V,isSuspended:function(){return g===C},run:function(){g===C&&(E.isDraining()?j(d):E.enqueue(function(){j(d)}))}}}function U(e,t,r,a){var u=0,i={},l=0,c={},P=new Error("[ParAff] Early exit"),v=null,p=n;function m(t,r,a){var o,u,l=r,c=null,P=null,v=0,p={};n:for(;;)switch(o=null,l.tag){case g:if(l._3===n&&(o=i[l._1],p[v++]=o.kill(t,function(n){return function(){0===--v&&a(n)()}})),null===c)break n;l=c._2,null===P?c=null:(c=P._1,P=P._2);break;case f:l=l._2;break;case s:case d:c&&(P=new D(S,c,P)),c=l,l=l._1}if(0===v)a(e.right(void 0))();else for(u=0,o=v;u=t.bottom(t.boundedInt)&&n<=t.top(t.boundedInt)?new r.Just(e.fromCharCode(n)):r.Nothing.value},d=new o(function(){return a.ordChar},f(s)(e.toCharCode),c(s)(e.toCharCode)),S=new u(function(){return t.boundedChar},function(){return d},e.toCharCode(t.top(t.boundedChar))-e.toCharCode(t.bottom(t.boundedChar))|0,e.toCharCode,s);n.Enum=o,n.succ=function(n){return n.succ},n.pred=function(n){return n.pred},n.BoundedEnum=u,n.cardinality=function(n){return n.cardinality},n.toEnum=i,n.fromEnum=l,n.toEnumWithDefaults=function(n){return function(e){return function(a){return function(o){var u=i(n)(o);if(u instanceof r.Just)return u.value0;if(u instanceof r.Nothing)return o1){var t=a.fromEnum(a.boundedEnumChar)(c.charAt(1)(n));return S(t)?d(e)(t):e}return e}),g=e._toCodePointArray(function(n){return s.unfoldr(s.unfoldableArray)(p)(n)})(m),D=function(n){return l.singleton(a.toEnumWithDefaults(a.boundedEnumChar)(r.bottom(r.boundedChar))(r.top(r.boundedChar))(n))},b=e._singleton(function(n){if(n<=65535)return D(n);var e=o.div(o.euclideanRingInt)(n-65536|0)(1024)+55296|0,t=o.mod(o.euclideanRingInt)(n-65536|0)(1024)+56320|0;return D(e)+D(t)}),h=function(n){return function(e){if(n<1)return"";var t=v(e);return t instanceof i.Just?b(t.value0.head)+h(n-1|0)(t.value0.tail):e}},w=e._take(h);n.singleton=b,n.toCodePointArray=g,n.uncons=v,n.length=function(n){return t.length(g(n))},n.take=w,n.drop=function(n){return function(e){return l.drop(l.length(w(n)(e)))(e)}}}(PS["Data.String.CodePoints"]=PS["Data.String.CodePoints"]||{}),function(n){"use strict";PS["Control.Applicative"];var e=PS["Control.Bind"],t=(PS["Control.Monad.Maybe.Trans"],PS["Control.Semigroupoid"],PS["Data.Array"]),r=(PS["Data.Eq"],PS["Data.Foldable"]),a=(PS["Data.Function"],PS["Data.Functor"]),o=(PS["Data.HeytingAlgebra"],PS["Data.Maybe"]),u=PS["Data.Nullable"],i=(PS["Data.String"],PS["Data.String.CodePoints"]),l=PS["Data.String.Common"],c=(PS["Data.String.Pattern"],PS["Data.Tuple"]),f=(PS["Data.Unit"],PS.Effect),s=PS["Global.Unsafe"],d=(PS.Halogen,PS["Halogen.HTML"],PS["Halogen.HTML.Core"]),S=PS["Halogen.HTML.Properties"],P=(PS["Partial.Unsafe"],PS.Prelude,PS["Web.DOM"],PS["Web.DOM.Document"],PS["Web.DOM.Element"],PS["Web.DOM.NodeList"],PS["Web.DOM.NonElementParentNode"],PS["Web.DOM.ParentNode"],PS["Web.HTML"]),v=(PS["Web.HTML.HTMLDocument"],PS["Web.HTML.HTMLElement"],PS["Web.HTML.Location"]),p=PS["Web.HTML.Window"],m=function(n){var e,r=function(n){return s.unsafeDecodeURIComponent(l.replaceAll("+")(" ")(n))},a="#"===(e=i.take(1)(n))||"?"===e?i.drop(1)(n):n;return t.mapMaybe(function(n){var e=l.split("=")(n);return 1===e.length?new o.Just(new c.Tuple(r(e[0]),o.Nothing.value)):2===e.length?new o.Just(new c.Tuple(r(e[0]),new o.Just(r(e[1])))):o.Nothing.value})(t.filter(function(n){return""!==n})(l.split("&")(a)))},g=e.bindFlipped(f.bindEffect)(p.location)(P.window);n.class_=function(n){return S.class_(d.ClassName(n))},n.attr=function(n){return S.attr(n)},n._loc=g,n._curQuerystring=function(){var n=g(),e=v.search(n)();return m(e)},n._parseQueryString=m,n._lookupQueryStringValue=function(n){return function(t){return e.join(o.bindMaybe)(a.map(o.functorMaybe)(c.snd)(r.find(r.foldableArray)(function(n){return c.fst(n)===t})(n)))}},n.fromNullableStr=function(n){return o.fromMaybe("")(u.toMaybe(n))}}(PS.Util=PS.Util||{}),function(n){"use strict";var e=PS.App,t=PS["Control.Applicative"],r=PS["Control.Bind"],a=(PS["Control.Semigroupoid"],PS["DOM.HTML.Indexed.InputType"]),o=PS["Data.Function"],u=PS["Data.Functor"],i=(PS["Data.Lens"],PS["Data.Lens.Getter"]),l=PS["Data.Lens.Internal.Forget"],c=PS["Data.Lens.Lens"],f=PS["Data.Lens.Setter"],s=PS["Data.Maybe"],d=PS["Data.Profunctor.Strong"],S=PS["Data.Unit"],P=(PS["Effect.Aff"],PS["Effect.Aff.Class"]),v=PS.Globals,p=(PS.Halogen,PS["Halogen.Component"]),m=(PS["Halogen.HTML"],PS["Halogen.HTML.Core"]),g=PS["Halogen.HTML.Elements"],D=PS["Halogen.HTML.Events"],b=PS["Halogen.HTML.Properties"],h=PS["Halogen.Query.HalogenM"],w=(PS.Model,PS.Prelude,PS.Util),y=(PS["Web.Event.Event"],function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}()),M=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),E=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),C=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(t){return new n(e,t)}},n}(),A=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(t){return new n(e,t)}},n}(),T=function(n){return c.lens(function(n){return n.us})(function(n){return function(n){return{us:n}}})(n)};n._us=T,n.UEditField=C,n.USubmit=A,n.EarchiveDefault=y,n.EprivateDefault=M,n.EprivacyLock=E,n.usetting=function(n){var c;v["app'"](S.unit);return p.component(m.bifunctorHTML)({initialState:o.const((c=n,{us:c})),render:function(n){var e=function(n){return function(e){return D.input(C.create)(n(e))}};return g.div([w.class_("settings-form")])([g.div([w.class_("fw7 mb2")])([m.text("Account Settings")]),g.div([w.class_("flex items-center mb2")])([g.input([b.type_(m.inputTypeIsProp)(a.InputCheckbox.value),w.class_("pointer mr2"),b.id_("archiveDefault"),b.name("archiveDefault"),b.checked(n.us.archiveDefault),D.onChecked(e(y.create))]),g.label([b.for("archiveDefault"),w.class_("lh-copy")])([m.text("Archive Non-Private Bookmarks (archive.li)")])]),g.div([w.class_("flex items-center mb2")])([g.input([b.type_(m.inputTypeIsProp)(a.InputCheckbox.value),w.class_("pointer mr2"),b.id_("privateDefault"),b.name("privateDefault"),b.checked(n.us.privateDefault),D.onChecked(e(M.create))]),g.label([b.for("privateDefault"),w.class_("lh-copy")])([m.text("Default new bookmarks to Private")])]),g.div([w.class_("flex items-center mb2")])([g.input([b.type_(m.inputTypeIsProp)(a.InputCheckbox.value),w.class_("pointer mr2"),b.id_("privacyLock"),b.name("privacyLock"),b.checked(n.us.privacyLock),D.onChecked(e(E.create))]),g.label([b.for("privacyLock"),w.class_("lh-copy")])([m.text("Privacy Lock (Private Account)")])])])},eval:function(n){if(n instanceof C)return r.discard(r.discardUnit)(h.bindHalogenM)(f.modifying(h.monadStateHalogenM)(T(d.strongFn))(function(){if(n.value0 instanceof y)return function(e){return{archiveDefault:n.value0.value0,privateDefault:e.privateDefault,privacyLock:e.privacyLock}};if(n.value0 instanceof M)return function(e){return{archiveDefault:e.archiveDefault,privateDefault:n.value0.value0,privacyLock:e.privacyLock}};if(n.value0 instanceof E)return function(e){return{archiveDefault:e.archiveDefault,privateDefault:e.privateDefault,privacyLock:n.value0.value0}};throw new Error("Failed pattern match at Component.AccountSettings (line 82, column 12 - line 85, column 46): "+[n.value0.constructor.name])}()))(function(){return t.pure(h.applicativeHalogenM)(n.value1)});if(n instanceof A)return r.bind(h.bindHalogenM)(i.use(h.monadStateHalogenM)(T(l.strongForget)))(function(a){return r.discard(r.discardUnit)(h.bindHalogenM)(u.void(h.functorHalogenM)(P.liftAff(h.monadAffHalogenM(P.monadAffAff))(e.editAccountSettings(a))))(function(){return t.pure(h.applicativeHalogenM)(n.value1)})});throw new Error("Failed pattern match at Component.AccountSettings (line 80, column 3 - line 80, column 58): "+[n.constructor.name])},receiver:o.const(s.Nothing.value)})}}(PS["Component.AccountSettings"]=PS["Component.AccountSettings"]||{}),function(n){"use strict";var e=PS.App,t=PS["Control.Applicative"],r=PS["Control.Bind"],a=PS["Control.Monad.State.Class"],o=(PS["Control.Semigroupoid"],PS["DOM.HTML.Indexed.ButtonType"]),u=PS["DOM.HTML.Indexed.InputType"],i=(PS["Data.Array"],PS["Data.Foldable"],PS["Data.Function"]),l=PS["Data.Functor"],c=(PS["Data.HeytingAlgebra"],PS["Data.Lens"],PS["Data.Lens.Getter"]),f=PS["Data.Lens.Internal.Forget"],s=PS["Data.Lens.Lens"],d=PS["Data.Lens.Setter"],S=PS["Data.Maybe"],P=PS["Data.Monoid"],v=(PS["Data.Ord"],PS["Data.Profunctor.Strong"]),p=PS["Data.Semigroup"],m=(PS["Data.String"],PS["Data.String.Common"]),g=(PS["Data.String.Pattern"],PS["Data.Tuple"]),D=PS["Data.Unit"],b=PS["Effect.Aff"],h=PS["Effect.Aff.Class"],w=PS["Effect.Class"],y=PS.Globals,M=(PS.Halogen,PS["Halogen.Component"]),E=(PS["Halogen.HTML"],PS["Halogen.HTML.Core"]),C=PS["Halogen.HTML.Elements"],A=PS["Halogen.HTML.Events"],T=PS["Halogen.HTML.Properties"],F=PS["Halogen.Query.HalogenM"],H=(PS.Model,PS.Prelude,PS.Util),L=PS["Web.Event.Event"],_=PS["Web.HTML"],I=PS["Web.HTML.Location"],U=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),x=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),k=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),O=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),W=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),R=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),N=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(t){return new n(e,t)}},n}(),B=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(t){return new n(e,t)}},n}(),q=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(t){return new n(e,t)}},n}(),j=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),V=function(n){return s.lens(function(n){return n.edit_bm})(function(n){return function(e){return{edit_bm:e,bm:n.bm,deleteAsk:n.deleteAsk,destroyed:n.destroyed}}})(n)},J=function(n){return s.lens(function(n){return n.bm})(function(n){return function(e){return{bm:e,deleteAsk:n.deleteAsk,destroyed:n.destroyed,edit_bm:n.edit_bm}}})(n)};n.BEditField=N,n.BEditSubmit=B,n.BDeleteAsk=q,n.BDestroy=j,n.Eurl=U,n.Etitle=x,n.Edescription=k,n.Etags=O,n.Eprivate=W,n.Etoread=R,n._bm=J,n._edit_bm=V,n.addbmark=function(n){var s;y["app'"](D.unit);return M.component(E.bifunctorHTML)({initialState:i.const((s=n,{bm:s,edit_bm:s,deleteAsk:!1,destroyed:!1})),render:function(n){var e=y.mmoment8601(n.bm.time),t=function(n){return function(e){return A.input(N.create)(n(e))}},r=C.div([H.class_("alert")])([E.text("previously saved "),C.span([H.class_("link f7 dib gray pr3"),T.title(S.maybe(n.bm.time)(g.snd)(e))])([E.text(S.maybe(" ")(g.fst)(e))]),C.div([H.class_("edit_links dib ml1")])([C.div([H.class_("delete_link di")])([C.button(p.append(p.semigroupArray)([T.type_(E.buttonTypeIsProp)(o.ButtonButton.value),A.onClick(A.input_(q.create(!0))),H.class_("delete")])(P.guard(P.monoidArray)(n.deleteAsk)([H.attr("hidden")("hidden")])))([E.text("delete")]),C.span(p.append(p.semigroupArray)([H.class_("confirm red")])(P.guard(P.monoidArray)(!n.deleteAsk)([H.attr("hidden")("hidden")])))([C.button([T.type_(E.buttonTypeIsProp)(o.ButtonButton.value),A.onClick(A.input_(q.create(!1)))])([E.text("cancel / ")]),C.button([T.type_(E.buttonTypeIsProp)(o.ButtonButton.value),A.onClick(A.input_(j.create)),H.class_("red")])([E.text("destroy")])])])])]),a=C.form([A.onSubmit(A.input(B.create))])([C.table([H.class_("w-100")])([C.tbody_([C.tr_([C.td([H.class_("w1")])([]),C.td_(P.guard(P.monoidArray)(n.bm.bid>0)([r]))]),C.tr_([C.td_([C.label([T.for("url")])([E.text("URL")])]),C.td_([C.input([T.type_(E.inputTypeIsProp)(u.InputUrl.value),T.id_("url"),H.class_("w-100 mv1"),T.required(!0),T.name("url"),T.autofocus(m.null(n.bm.url)),T.value(n.edit_bm.url),A.onValueChange(t(U.create))])])]),C.tr_([C.td_([C.label([T.for("title")])([E.text("title")])]),C.td_([C.input([T.type_(E.inputTypeIsProp)(u.InputText.value),T.id_("title"),H.class_("w-100 mv1"),T.name("title"),T.value(n.edit_bm.title),A.onValueChange(t(x.create))])])]),C.tr_([C.td_([C.label([T.for("description")])([E.text("description")])]),C.td_([C.textarea([H.class_("w-100 mt1 mid-gray"),T.id_("description"),T.name("description"),T.rows(4),T.value(n.edit_bm.description),A.onValueChange(t(k.create))])])]),C.tr_([C.td_([C.label([T.for("tags")])([E.text("tags")])]),C.td_([C.input([T.type_(E.inputTypeIsProp)(u.InputText.value),T.id_("tags"),H.class_("w-100 mv1"),T.name("tags"),T.autocomplete(!1),H.attr("autocapitalize")("off"),T.autofocus(!m.null(n.bm.url)),T.value(n.edit_bm.tags),A.onValueChange(t(O.create))])])]),C.tr_([C.td_([C.label([T.for("private")])([E.text("private")])]),C.td_([C.input([T.type_(E.inputTypeIsProp)(u.InputCheckbox.value),T.id_("private"),H.class_("private pointer"),T.name("private"),T.checked(n.edit_bm.private),A.onChecked(t(W.create))])])]),C.tr_([C.td_([C.label([T.for("toread")])([E.text("read later")])]),C.td_([C.input([T.type_(E.inputTypeIsProp)(u.InputCheckbox.value),T.id_("toread"),H.class_("toread pointer"),T.name("toread"),T.checked(n.edit_bm.toread),A.onChecked(t(R.create))])])]),C.tr_([C.td_([]),C.td_([C.input([T.type_(E.inputTypeIsProp)(u.InputSubmit.value),H.class_("ph3 pv2 input-reset ba b--navy bg-transparent pointer f6 dib mt1 dim"),T.value(n.bm.bid>0?"update bookmark":"add bookmark")])])])])])]),i=C.p([H.class_("red")])([E.text("you killed this bookmark")]);return C.div_([n.destroyed?i:a])},eval:function(n){if(n instanceof q)return r.discard(r.discardUnit)(F.bindHalogenM)(a.modify_(F.monadStateHalogenM)(function(e){var t={};for(var r in e)({}).hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.deleteAsk=n.value0,t}))(function(){return t.pure(F.applicativeHalogenM)(n.value1)});if(n instanceof j)return r.bind(F.bindHalogenM)(a.gets(F.monadStateHalogenM)(function(n){return n.bm.bid}))(function(o){return r.discard(r.discardUnit)(F.bindHalogenM)(l.void(F.functorHalogenM)(h.liftAff(F.monadAffHalogenM(h.monadAffAff))(e.destroy(o))))(function(){return r.discard(r.discardUnit)(F.bindHalogenM)(a.modify_(F.monadStateHalogenM)(function(n){var e={};for(var t in n)({}).hasOwnProperty.call(n,t)&&(e[t]=n[t]);return e.destroyed=!0,e}))(function(){return t.pure(F.applicativeHalogenM)(n.value0)})})});if(n instanceof N)return r.discard(r.discardUnit)(F.bindHalogenM)(d.modifying(F.monadStateHalogenM)(V(v.strongFn))(function(){if(n.value0 instanceof U)return function(e){return{url:n.value0.value0,title:e.title,description:e.description,tags:e.tags,private:e.private,toread:e.toread,bid:e.bid,slug:e.slug,selected:e.selected,time:e.time,archiveUrl:e.archiveUrl}};if(n.value0 instanceof x)return function(e){return{url:e.url,title:n.value0.value0,description:e.description,tags:e.tags,private:e.private,toread:e.toread,bid:e.bid,slug:e.slug,selected:e.selected,time:e.time,archiveUrl:e.archiveUrl}};if(n.value0 instanceof k)return function(e){return{url:e.url,title:e.title,description:n.value0.value0,tags:e.tags,private:e.private,toread:e.toread,bid:e.bid,slug:e.slug,selected:e.selected,time:e.time,archiveUrl:e.archiveUrl}};if(n.value0 instanceof O)return function(e){return{url:e.url,title:e.title,description:e.description,tags:n.value0.value0,private:e.private,toread:e.toread,bid:e.bid,slug:e.slug,selected:e.selected,time:e.time,archiveUrl:e.archiveUrl}};if(n.value0 instanceof W)return function(e){return{url:e.url,title:e.title,description:e.description,tags:e.tags,private:n.value0.value0,toread:e.toread,bid:e.bid,slug:e.slug,selected:e.selected,time:e.time,archiveUrl:e.archiveUrl}};if(n.value0 instanceof R)return function(e){return{url:e.url,title:e.title,description:e.description,tags:e.tags,private:e.private,toread:n.value0.value0,bid:e.bid,slug:e.slug,selected:e.selected,time:e.time,archiveUrl:e.archiveUrl}};throw new Error("Failed pattern match at Component.Add (line 160, column 17 - line 166, column 36): "+[n.value0.constructor.name])}()))(function(){return t.pure(F.applicativeHalogenM)(n.value1)});if(n instanceof B)return r.discard(r.discardUnit)(F.bindHalogenM)(w.liftEffect(F.monadEffectHalogenM(b.monadEffectAff))(L.preventDefault(n.value0)))(function(){return r.bind(F.bindHalogenM)(c.use(F.monadStateHalogenM)(V(f.strongForget)))(function(a){return r.discard(r.discardUnit)(F.bindHalogenM)(l.void(F.functorHalogenM)(h.liftAff(F.monadAffHalogenM(h.monadAffAff))(e.editBookmark(a))))(function(){return r.discard(r.discardUnit)(F.bindHalogenM)(d.assign(F.monadStateHalogenM)(J(v.strongFn))(a))(function(){return r.bind(F.bindHalogenM)(w.liftEffect(F.monadEffectHalogenM(b.monadEffectAff))(H._loc))(function(e){return r.bind(F.bindHalogenM)(w.liftEffect(F.monadEffectHalogenM(b.monadEffectAff))(_.window))(function(a){return r.bind(F.bindHalogenM)(w.liftEffect(F.monadEffectHalogenM(b.monadEffectAff))(H._curQuerystring))(function(o){return r.discard(r.discardUnit)(F.bindHalogenM)((u=H._lookupQueryStringValue(o)("next"))instanceof S.Just?w.liftEffect(F.monadEffectHalogenM(b.monadEffectAff))(I.setHref(u.value0)(e)):w.liftEffect(F.monadEffectHalogenM(b.monadEffectAff))(y.closeWindow(a)))(function(){return t.pure(F.applicativeHalogenM)(n.value1)});var u})})})})})})});throw new Error("Failed pattern match at Component.Add (line 150, column 3 - line 150, column 58): "+[n.constructor.name])},receiver:i.const(S.Nothing.value)})}}(PS["Component.Add"]=PS["Component.Add"]||{}),function(n){"use strict";var e=PS.App,t=PS["Control.Applicative"],r=PS["Control.Bind"],a=PS["Control.Monad.State.Class"],o=(PS["Control.Semigroupoid"],PS["DOM.HTML.Indexed.ButtonType"]),u=PS["DOM.HTML.Indexed.InputType"],i=PS["Data.Array"],l=(PS["Data.Eq"],PS["Data.Foldable"]),c=PS["Data.Function"],f=PS["Data.Functor"],s=(PS["Data.HeytingAlgebra"],PS["Data.Lens"],PS["Data.Lens.Getter"]),d=PS["Data.Lens.Internal.Forget"],S=PS["Data.Lens.Lens"],P=PS["Data.Lens.Setter"],v=PS["Data.Maybe"],p=PS["Data.Monoid"],m=PS["Data.Nullable"],g=PS["Data.Profunctor.Strong"],D=PS["Data.Semigroup"],b=PS["Data.Show"],h=(PS["Data.String"],PS["Data.String.CodePoints"]),w=PS["Data.String.Common"],y=(PS["Data.String.Pattern"],PS["Data.Tuple"]),M=PS["Data.Unit"],E=PS["Effect.Aff"],C=PS["Effect.Aff.Class"],A=PS["Effect.Class"],T=PS.Globals,F=(PS.Halogen,PS["Halogen.Component"]),H=(PS["Halogen.HTML"],PS["Halogen.HTML.Core"]),L=PS["Halogen.HTML.Elements"],_=PS["Halogen.HTML.Events"],I=PS["Halogen.HTML.Properties"],U=PS["Halogen.Query.HalogenM"],x=(PS.Model,PS.Prelude,PS.Util),k=PS["Web.Event.Event"],O=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),W=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),R=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),N=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),B=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),q=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),j=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(t){return new n(e,t)}},n}(),V=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(t){return new n(e,t)}},n}(),J=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),Q=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(t){return new n(e,t)}},n}(),G=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(t){return new n(e,t)}},n}(),z=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(t){return new n(e,t)}},n}(),K=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),X=function(){function n(){}return n.value=new n,n}(),Y=function(n){return S.lens(function(n){return n.edit_bm})(function(n){return function(e){return{edit_bm:e,bm:n.bm,deleteAsk:n.deleteAsk,edit:n.edit}}})(n)},Z=function(n){return S.lens(function(n){return n.edit})(function(n){return function(e){return{edit:e,bm:n.bm,deleteAsk:n.deleteAsk,edit_bm:n.edit_bm}}})(n)},$=function(n){return S.lens(function(n){return n.bm})(function(n){return function(e){return{bm:e,deleteAsk:n.deleteAsk,edit:n.edit,edit_bm:n.edit_bm}}})(n)};n.BStar=j,n.BDeleteAsk=V,n.BDestroy=J,n.BEdit=Q,n.BEditField=G,n.BEditSubmit=z,n.BMarkRead=K,n.Eurl=O,n.Etitle=W,n.Edescription=R,n.Etags=N,n.Eprivate=B,n.Etoread=q,n.BNotifyRemove=X,n._bm=$,n._edit_bm=Y,n._edit=Z,n.bmark=function(n){var S,nn=T["app'"](M.unit);return F.component(H.bifunctorHTML)({initialState:c.const((S=n,{bm:S,edit_bm:S,deleteAsk:!1,edit:!1})),render:function(n){var e,t,r=p.guard(p.monoidArray)(nn.dat.isowner)([L.div([x.class_("star fl pointer"+p.guard(p.monoidString)(n.bm.selected)(" selected"))])([L.button([x.class_("moon-gray"),_.onClick(_.input_(j.create(!n.bm.selected)))])([H.text("✭")])])]),a=T.mmoment8601(n.bm.time),c=p.guard(p.monoidArray)(nn.dat.isowner)([L.div([x.class_("edit_links di")])([L.button([I.type_(H.buttonTypeIsProp)(o.ButtonButton.value),_.onClick(_.input_(Q.create(!0))),x.class_("edit light-silver hover-blue")])([H.text("edit  ")]),L.div([x.class_("delete_link di")])([L.button([I.type_(H.buttonTypeIsProp)(o.ButtonButton.value),_.onClick(_.input_(V.create(!0))),x.class_("delete light-silver hover-blue"+p.guard(p.monoidString)(n.deleteAsk)(" dn"))])([H.text("delete")]),L.span([x.class_("confirm red"+p.guard(p.monoidString)(!n.deleteAsk)(" dn"))])([L.button([I.type_(H.buttonTypeIsProp)(o.ButtonButton.value),_.onClick(_.input_(V.create(!1)))])([H.text("cancel / ")]),L.button([I.type_(H.buttonTypeIsProp)(o.ButtonButton.value),_.onClick(_.input_(J.create)),x.class_("red")])([H.text("destroy")])])])]),L.div([x.class_("read di")])(p.guard(p.monoidArray)(n.bm.toread)([H.text("  "),L.button([_.onClick(_.input_(K.create)),x.class_("mark_read")])([H.text("mark as read")])]))]),s=function(n){return x.fromNullableStr(nn.userR)+"/t:"+n},d=function(n){return function(e){return _.input(G.create)(n(e))}},S=[L.div([x.class_("edit_bookmark_form pa2 pt0 bg-white")])([L.form([_.onSubmit(_.input(z.create))])([L.div_([H.text("url")]),L.input([I.type_(H.inputTypeIsProp)(u.InputUrl.value),x.class_("url w-100 mb2 pt1 f7 edit_form_input"),I.required(!0),I.name("url"),I.value(n.edit_bm.url),_.onValueChange(d(O.create))]),L.br_,L.div_([H.text("title")]),L.input([I.type_(H.inputTypeIsProp)(u.InputText.value),x.class_("title w-100 mb2 pt1 f7 edit_form_input"),I.name("title"),I.value(n.edit_bm.title),_.onValueChange(d(W.create))]),L.br_,L.div_([H.text("description")]),L.textarea([x.class_("description w-100 mb1 pt1 f7 edit_form_input"),I.name("description"),I.rows(5),I.value(n.edit_bm.description),_.onValueChange(d(R.create))]),L.br_,L.div([I.id_("tags_input_box")])([L.div_([H.text("tags")]),L.input([I.type_(H.inputTypeIsProp)(u.InputText.value),x.class_("tags w-100 mb1 pt1 f7 edit_form_input"),I.name("tags"),I.autocomplete(!1),x.attr("autocapitalize")("off"),I.value(n.edit_bm.tags),_.onValueChange(d(N.create))]),L.br_]),L.div([x.class_("edit_form_checkboxes mv3")])([L.input([I.type_(H.inputTypeIsProp)(u.InputCheckbox.value),x.class_("private pointer"),I.id_("edit_private"),I.name("private"),I.checked(n.edit_bm.private),_.onChecked(d(B.create))]),H.text(" "),L.label([I.for("edit_private"),x.class_("mr2")])([H.text("private")]),H.text(" "),L.input([I.type_(H.inputTypeIsProp)(u.InputCheckbox.value),x.class_("toread pointer"),I.id_("edit_toread"),I.name("toread"),I.checked(n.edit_bm.toread),_.onChecked(d(q.create))]),H.text(" "),L.label([I.for("edit_toread")])([H.text("to-read")]),L.br_]),L.input([I.type_(H.inputTypeIsProp)(u.InputSubmit.value),x.class_("mr1 pv1 ph2 dark-gray ba b--moon-gray bg-near-white pointer rdim"),I.value("save")]),H.text(" "),L.input([I.type_(H.inputTypeIsProp)(u.InputReset.value),x.class_("pv1 ph2 dark-gray ba b--moon-gray bg-near-white pointer rdim"),I.value("cancel"),_.onClick(_.input_(Q.create(!1)))])])])],P=[L.div([x.class_("display")])(D.append(D.semigroupArray)([L.a([I.href(n.bm.url),I.target("_blank"),x.class_("link f5 lh-title"+p.guard(p.monoidString)(n.bm.toread)(" unread"))])([H.text(w.null(n.bm.title)?"[no title]":n.bm.title)]),L.br_,L.a([I.href(n.bm.url),x.class_("link f7 gray hover-blue")])([H.text(n.bm.url)]),L.a([I.href(v.fromMaybe("http://archive.is/"+n.bm.url)(m.toMaybe(n.bm.archiveUrl))),x.class_("link f7 gray hover-blue ml2"+p.guard(p.monoidString)(v.isJust(m.toMaybe(n.bm.archiveUrl)))(" green")),I.target("_blank"),I.title("archive link")])([v.isJust(m.toMaybe(n.bm.archiveUrl))?H.text("☑"):H.text("☐")]),L.br_,L.div([x.class_("description mt1 mid-gray")])((t=n.bm.description,i.drop(1)(l.foldMap(l.foldableArray)(p.monoidArray)(function(n){return[L.br_,H.text(n)]})(w.split("\n")(t))))),L.div([x.class_("tags")])(p.guard(p.monoidFn(p.monoidFn(p.monoidArray)))(!w.null(n.bm.tags))(f.map(f.functorArray))(function(n){return L.a([x.class_("link tag mr1"+p.guard(p.monoidString)("."===h.take(1)(n))(" private")),I.href(s(n))])([H.text(n)])})(w.split(" ")(n.bm.tags))),L.a([x.class_("link f7 dib gray w4"),I.title(v.maybe(n.bm.time)(y.snd)(a)),I.href((e=n.bm.slug,x.fromNullableStr(nn.userR)+"/b:"+e))])([H.text(v.maybe(" ")(y.fst)(a))])])(c))];return L.div([I.id_(b.show(b.showInt)(n.bm.bid)),x.class_("bookmark w-100 mw7 pa1 mb3"+p.guard(p.monoidString)(n.bm.private)(" private"))])(D.append(D.semigroupArray)(r)(n.edit?S:P))},eval:function(n){if(n instanceof j)return r.bind(U.bindHalogenM)(s.use(U.monadStateHalogenM)($(d.strongForget)))(function(a){return r.discard(r.discardUnit)(U.bindHalogenM)(C.liftAff(U.monadAffHalogenM(C.monadAffAff))(e.toggleStar(a.bid)(n.value0?e.Star.value:e.UnStar.value)))(function(){return r.discard(r.discardUnit)(U.bindHalogenM)(P.modifying(U.monadStateHalogenM)($(g.strongFn))(function(e){return{url:e.url,title:e.title,description:e.description,tags:e.tags,private:e.private,toread:e.toread,bid:e.bid,slug:e.slug,selected:n.value0,time:e.time,archiveUrl:e.archiveUrl}}))(function(){return r.discard(r.discardUnit)(U.bindHalogenM)(P.modifying(U.monadStateHalogenM)(Y(g.strongFn))(function(e){return{url:e.url,title:e.title,description:e.description,tags:e.tags,private:e.private,toread:e.toread,bid:e.bid,slug:e.slug,selected:n.value0,time:e.time,archiveUrl:e.archiveUrl}}))(function(){return t.pure(U.applicativeHalogenM)(n.value1)})})})});if(n instanceof V)return r.discard(r.discardUnit)(U.bindHalogenM)(a.modify_(U.monadStateHalogenM)(function(e){var t={};for(var r in e)({}).hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.deleteAsk=n.value0,t}))(function(){return t.pure(U.applicativeHalogenM)(n.value1)});if(n instanceof J)return r.bind(U.bindHalogenM)(s.use(U.monadStateHalogenM)($(d.strongForget)))(function(a){return r.discard(r.discardUnit)(U.bindHalogenM)(f.void(U.functorHalogenM)(C.liftAff(U.monadAffHalogenM(C.monadAffAff))(e.destroy(a.bid))))(function(){return r.discard(r.discardUnit)(U.bindHalogenM)(U.raise(X.value))(function(){return t.pure(U.applicativeHalogenM)(n.value0)})})});if(n instanceof K)return r.bind(U.bindHalogenM)(s.use(U.monadStateHalogenM)($(d.strongForget)))(function(a){return r.discard(r.discardUnit)(U.bindHalogenM)(f.void(U.functorHalogenM)(C.liftAff(U.monadAffHalogenM(C.monadAffAff))(e.markRead(a.bid))))(function(){return r.discard(r.discardUnit)(U.bindHalogenM)(P.modifying(U.monadStateHalogenM)($(g.strongFn))(function(n){return{url:n.url,title:n.title,description:n.description,tags:n.tags,private:n.private,toread:!1,bid:n.bid,slug:n.slug,selected:n.selected,time:n.time,archiveUrl:n.archiveUrl}}))(function(){return t.pure(U.applicativeHalogenM)(n.value0)})})});if(n instanceof Q)return r.bind(U.bindHalogenM)(s.use(U.monadStateHalogenM)($(d.strongForget)))(function(e){return r.discard(r.discardUnit)(U.bindHalogenM)(P.assign(U.monadStateHalogenM)(Y(g.strongFn))(e))(function(){return r.discard(r.discardUnit)(U.bindHalogenM)(P.assign(U.monadStateHalogenM)(Z(g.strongFn))(n.value0))(function(){return t.pure(U.applicativeHalogenM)(n.value1)})})});if(n instanceof G)return r.discard(r.discardUnit)(U.bindHalogenM)(P.modifying(U.monadStateHalogenM)(Y(g.strongFn))(function(){if(n.value0 instanceof O)return function(e){return{url:n.value0.value0,title:e.title,description:e.description,tags:e.tags,private:e.private,toread:e.toread,bid:e.bid,slug:e.slug,selected:e.selected,time:e.time,archiveUrl:e.archiveUrl}};if(n.value0 instanceof W)return function(e){return{url:e.url,title:n.value0.value0,description:e.description,tags:e.tags,private:e.private,toread:e.toread,bid:e.bid,slug:e.slug,selected:e.selected,time:e.time,archiveUrl:e.archiveUrl}};if(n.value0 instanceof R)return function(e){return{url:e.url,title:e.title,description:n.value0.value0,tags:e.tags,private:e.private,toread:e.toread,bid:e.bid,slug:e.slug,selected:e.selected,time:e.time,archiveUrl:e.archiveUrl}};if(n.value0 instanceof N)return function(e){return{url:e.url,title:e.title,description:e.description,tags:n.value0.value0,private:e.private,toread:e.toread,bid:e.bid,slug:e.slug,selected:e.selected,time:e.time,archiveUrl:e.archiveUrl}};if(n.value0 instanceof B)return function(e){return{url:e.url,title:e.title,description:e.description,tags:e.tags,private:n.value0.value0,toread:e.toread,bid:e.bid,slug:e.slug,selected:e.selected,time:e.time,archiveUrl:e.archiveUrl}};if(n.value0 instanceof q)return function(e){return{url:e.url,title:e.title,description:e.description,tags:e.tags,private:e.private,toread:n.value0.value0,bid:e.bid,slug:e.slug,selected:e.selected,time:e.time,archiveUrl:e.archiveUrl}};throw new Error("Failed pattern match at Component.BMark (line 231, column 17 - line 237, column 36): "+[n.value0.constructor.name])}()))(function(){return t.pure(U.applicativeHalogenM)(n.value1)});if(n instanceof z)return r.discard(r.discardUnit)(U.bindHalogenM)(A.liftEffect(U.monadEffectHalogenM(E.monadEffectAff))(k.preventDefault(n.value0)))(function(){return r.bind(U.bindHalogenM)(s.use(U.monadStateHalogenM)(Y(d.strongForget)))(function(a){return r.discard(r.discardUnit)(U.bindHalogenM)(f.void(U.functorHalogenM)(C.liftAff(U.monadAffHalogenM(C.monadAffAff))(e.editBookmark(a))))(function(){return r.discard(r.discardUnit)(U.bindHalogenM)(P.assign(U.monadStateHalogenM)($(g.strongFn))(a))(function(){return r.discard(r.discardUnit)(U.bindHalogenM)(P.assign(U.monadStateHalogenM)(Z(g.strongFn))(!1))(function(){return t.pure(U.applicativeHalogenM)(n.value1)})})})})});throw new Error("Failed pattern match at Component.BMark (line 193, column 3 - line 193, column 62): "+[n.constructor.name])},receiver:c.const(v.Nothing.value)})}}(PS["Component.BMark"]=PS["Component.BMark"]||{}),function(n){"use strict";var e=PS["Component.BMark"],t=PS["Control.Applicative"],r=PS["Control.Bind"],a=PS["Control.Monad.State.Class"],o=PS["Data.Array"],u=(PS["Data.Eq"],PS["Data.Function"]),i=PS["Data.Functor"],l=PS["Data.Maybe"],c=PS["Data.Ord"],f=PS["Data.Unit"],s=(PS["Effect.Aff"],PS.Halogen,PS["Halogen.Component"]),d=PS["Halogen.HTML"],S=PS["Halogen.HTML.Elements"],P=PS["Halogen.HTML.Events"],v=PS["Halogen.Query.HalogenM"],p=(PS.Model,PS.Prelude,function(){function n(n,e,t){this.value0=n,this.value1=e,this.value2=t}return n.create=function(e){return function(t){return function(r){return new n(e,t,r)}}},n}());n.HandleBMessage=p,n.blist=function(n){return s.parentComponent(c.ordInt)({initialState:u.const(n),render:function(n){return S.div_(i.map(i.functorArray)(function(n){return d.slot(n.bid)(e.bmark(n))(f.unit)(P.input(p.create(n.bid)))})(n))},eval:function(n){var e;return r.discard(r.discardUnit)(v.bindHalogenM)(a.modify_(v.monadStateHalogenM)((e=n.value0,o.filter(function(n){return n.bid!==e}))))(function(){return t.pure(v.applicativeHalogenM)(n.value2)})},receiver:u.const(l.Nothing.value)})}}(PS["Component.BList"]=PS["Component.BList"]||{}),(PS["Component.RawHtml"]=PS["Component.RawHtml"]||{}).unsafeSetInnerHTML=function(n){return function(e){return function(){n.innerHTML=e}}},function(n){"use strict";var e=PS["Component.RawHtml"],t=PS["Control.Applicative"],r=PS["Control.Bind"],a=PS["Control.Monad.State.Class"],o=PS["Data.Foldable"],u=(PS["Data.Function"],PS["Data.Maybe"]),i=(PS.Effect,PS["Effect.Aff"]),l=PS["Effect.Class"],c=(PS.Globals,PS.Halogen,PS["Halogen.Component"]),f=(PS["Halogen.HTML"],PS["Halogen.HTML.Core"]),s=PS["Halogen.HTML.Elements"],d=PS["Halogen.HTML.Events"],S=PS["Halogen.HTML.Properties"],P=PS["Halogen.Query"],v=PS["Halogen.Query.HalogenM"],p=(PS["Halogen.Query.InputF"],PS.Prelude,PS["Web.HTML"],function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}()),m=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(t){return new n(e,t)}},n}();n.SetInnerHTML=p,n.Receive=m,n.mkComponent=function(n){var g=function(u){if(u instanceof p)return r.bind(v.bindHalogenM)(a.get(v.monadStateHalogenM))(function(c){return r.bind(v.bindHalogenM)(P.getHTMLElementRef(c.elRef))(function(c){return r.discard(r.discardUnit)(v.bindHalogenM)(o.for_(v.applicativeHalogenM)(o.foldableMaybe)(c)(function(t){return r.bind(v.bindHalogenM)(a.get(v.monadStateHalogenM))(function(r){return l.liftEffect(v.monadEffectHalogenM(i.monadEffectAff))(e.unsafeSetInnerHTML(t)(n(r.inputval)))})}))(function(){return t.pure(v.applicativeHalogenM)(u.value0)})})});if(u instanceof m)return r.discard(r.discardUnit)(v.bindHalogenM)(a.modify_(v.monadStateHalogenM)(function(n){var e={};for(var t in n)({}).hasOwnProperty.call(n,t)&&(e[t]=n[t]);return e.inputval=u.value0,e}))(function(){return g(new p(u.value1))});throw new Error("Failed pattern match at Component.RawHtml (line 51, column 10 - line 62, column 27): "+[u.constructor.name])};return c.lifecycleComponent(f.bifunctorHTML)({initialState:function(n){return{elRef:"inputval",inputval:n}},render:function(n){return s.div([S.ref(n.elRef)])([])},eval:g,receiver:d.input(m.create),initializer:u.Just.create(P.action(p.create)),finalizer:u.Nothing.value})}}(PS["Component.RawHtml"]=PS["Component.RawHtml"]||{}),(PS["Foreign.Marked"]=PS["Foreign.Marked"]||{}).markedImpl=function(n){return marked.setOptions({pedantic:!1,gfm:!0}),marked(n)},function(n){"use strict";var e=PS["Foreign.Marked"],t=(PS["Control.Semigroupoid"],PS.Globals);PS.Prelude;n.marked=function(n){return t.RawHTML(e.markedImpl(n))}}(PS["Foreign.Marked"]=PS["Foreign.Marked"]||{}),function(n){"use strict";var e=PS["Component.RawHtml"],t=(PS["Effect.Aff"],PS["Foreign.Marked"]),r=(PS.Halogen,PS["Halogen.HTML"],e.mkComponent(t.marked));n.component=r}(PS["Component.Markdown"]=PS["Component.Markdown"]||{}),function(n){"use strict";var e=PS["Control.Applicative"],t=PS["Data.Array"],r=PS["Data.Foldable"],a=PS["Data.Function"],o=PS["Data.Functor"],u=PS["Data.Maybe"],i=PS["Data.Monoid"],l=(PS["Data.Semigroup"],PS["Data.Show"]),c=(PS["Data.String"],PS["Data.String.CodePoints"]),f=PS["Data.String.Common"],s=(PS["Data.String.Pattern"],PS["Data.Tuple"]),d=PS["Data.Unit"],S=(PS["Effect.Aff"],PS.Globals),P=(PS.Halogen,PS["Halogen.Component"]),v=(PS["Halogen.HTML"],PS["Halogen.HTML.Core"]),p=PS["Halogen.HTML.Elements"],m=PS["Halogen.HTML.Properties"],g=PS["Halogen.Query.HalogenM"],D=(PS.Model,PS.Prelude,PS.Util);n.nlist=function(n){var b,h=function(n){return S.mmoment8601(n.created)},w=S["app'"](d.unit),y=function(n){return D.fromNullableStr(w.userR)+"/notes/"+n};return P.component(v.bifunctorHTML)({initialState:a.const((b=n,{notes:b,cur:u.Nothing.value,deleteAsk:!1,edit:!1})),render:function(n){return p.div_(o.map(o.functorArray)(function(n){return p.div([m.id_(l.show(l.showInt)(n.id)),D.class_("note w-100 mw7 pa1 mb2")])([p.div([D.class_("display")])([p.a([m.href(y(n.slug)),D.class_("link f5 lh-title")])([v.text(f.null(n.title)?"[no title]":n.title)]),p.br_,p.div([D.class_("description mt1 mid-gray")])((e=c.take(200)(n.text),t.drop(1)(r.foldMap(r.foldableArray)(i.monoidArray)(function(n){return[p.br_,v.text(n)]})(f.split("\n")(e))))),p.a([D.class_("link f7 dib gray w4"),m.title(u.maybe(n.created)(s.snd)(h(n))),m.href(y(n.slug))])([v.text(u.maybe(" ")(s.fst)(h(n)))])])]);var e})(n.notes))},eval:function(n){return e.pure(g.applicativeHalogenM)(n.value0)},receiver:a.const(u.Nothing.value)})}}(PS["Component.NList"]=PS["Component.NList"]||{}),function(n){"use strict";var e=PS.App,t=PS["Component.Markdown"],r=PS["Control.Applicative"],a=PS["Control.Bind"],o=PS["Control.Monad.State.Class"],u=(PS["Control.Semigroupoid"],PS["DOM.HTML.Indexed.ButtonType"]),i=PS["DOM.HTML.Indexed.InputType"],l=PS["Data.Array"],c=PS["Data.Either"],f=(PS["Data.Eq"],PS["Data.Foldable"]),s=PS["Data.Function"],d=PS["Data.Functor"],S=(PS["Data.HeytingAlgebra"],PS["Data.Lens"],PS["Data.Lens.Getter"]),P=PS["Data.Lens.Internal.Forget"],v=PS["Data.Lens.Lens"],p=PS["Data.Lens.Setter"],m=PS["Data.Maybe"],g=PS["Data.Monoid"],D=PS["Data.Ord"],b=PS["Data.Profunctor.Strong"],h=PS["Data.Semigroup"],w=PS["Data.Show"],y=(PS["Data.String"],PS["Data.String.Common"]),M=(PS["Data.String.Pattern"],PS["Data.Tuple"]),E=PS["Data.Unit"],C=PS["Data.Void"],A=PS.Effect,T=PS["Effect.Aff"],F=PS["Effect.Aff.Class"],H=PS["Effect.Class"],L=PS.Globals,_=(PS.Halogen,PS["Halogen.Component"]),I=PS["Halogen.HTML"],U=PS["Halogen.HTML.Core"],x=PS["Halogen.HTML.Elements"],k=PS["Halogen.HTML.Events"],O=PS["Halogen.HTML.Properties"],W=PS["Halogen.Query.HalogenM"],R=(PS.Model,PS.Prelude,PS.Util),N=PS["Web.Event.Event"],B=PS["Web.HTML.Location"],q=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),j=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),V=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),J=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),Q=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(t){return new n(e,t)}},n}(),G=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(t){return new n(e,t)}},n}(),z=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(t){return new n(e,t)}},n}(),K=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(t){return new n(e,t)}},n}(),X=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),Y=function(n){return v.lens(function(n){return n.note})(function(n){return function(e){return{note:e,deleteAsk:n.deleteAsk,destroyed:n.destroyed,edit:n.edit,edit_note:n.edit_note}}})(n)},Z=function(n){return v.lens(function(n){return n.edit_note})(function(n){return function(e){return{edit_note:e,deleteAsk:n.deleteAsk,destroyed:n.destroyed,edit:n.edit,note:n.note}}})(n)},$=function(n){return v.lens(function(n){return n.edit})(function(n){return function(e){return{edit:e,deleteAsk:n.deleteAsk,destroyed:n.destroyed,edit_note:n.edit_note,note:n.note}}})(n)};n.NNop=J,n.NEditField=Q,n.NEditSubmit=G,n.NEdit=z,n.NDeleteAsk=K,n.NDestroy=X,n._note=Y,n._edit_note=Z,n._edit=$,n.Etitle=q,n.Etext=j,n.EisMarkdown=V,n.nnote=function(n){var v,nn=L["app'"](E.unit);return _.parentComponent(D.ordUnit)({initialState:s.const((v=n,{note:v,edit_note:v,deleteAsk:!1,edit:v.id<=0,destroyed:!1})),render:function(n){var e,r=function(n){return L.mmoment8601(n.created)},a=x.div([O.id_(w.show(w.showInt)(n.note.id)),R.class_("note w-100 mw7 pa1 mb2")])(h.append(h.semigroupArray)([x.div([R.class_("display")])([x.div([R.class_("link f5 lh-title")])([U.text(y.null(n.note.title)?"[no title]":n.note.title)]),x.br_,n.note.isMarkdown?x.div([R.class_("description mt1")])([I.slot(E.unit)(t.component)(n.note.text)(C.absurd)]):x.div([R.class_("description mt1 mid-gray")])((e=n.note.text,l.drop(1)(f.foldMap(f.foldableArray)(g.monoidArray)(function(n){return[x.br_,U.text(n)]})(y.split("\n")(e))))),x.div([R.class_("link f7 dib gray w4"),O.title(m.maybe(n.note.created)(M.snd)(r(n.note)))])([U.text(m.maybe(" ")(M.fst)(r(n.note)))])])])([x.div([R.class_("edit_links db mt3")])([x.button([O.type_(U.buttonTypeIsProp)(u.ButtonButton.value),k.onClick(k.input_(z.create(!0))),R.class_("edit light-silver hover-blue")])([U.text("edit  ")]),x.div([R.class_("delete_link di")])([x.button([O.type_(U.buttonTypeIsProp)(u.ButtonButton.value),k.onClick(k.input_(K.create(!0))),R.class_("delete light-silver hover-blue"+g.guard(g.monoidString)(n.deleteAsk)(" dn"))])([U.text("delete")]),x.span([R.class_("confirm red"+g.guard(g.monoidString)(!n.deleteAsk)(" dn"))])([x.button([O.type_(U.buttonTypeIsProp)(u.ButtonButton.value),k.onClick(k.input_(K.create(!1)))])([U.text("cancel / ")]),x.button([O.type_(U.buttonTypeIsProp)(u.ButtonButton.value),k.onClick(k.input_(X.create)),R.class_("red")])([U.text("destroy")])])])])])),o=function(n){return function(e){return k.input(Q.create)(n(e))}},c=x.form([k.onSubmit(k.input(G.create))])([x.p([R.class_("mt2 mb1")])([U.text("title:")]),x.input([O.type_(U.inputTypeIsProp)(i.InputText.value),R.class_("title w-100 mb1 pt1 f7 edit_form_input"),O.name("title"),O.value(n.edit_note.title),k.onValueChange(o(q.create))]),x.br_,x.p([R.class_("mt2 mb1")])([U.text("description:")]),x.textarea([R.class_("description w-100 mb1 pt1 f7 edit_form_input"),O.name("text"),O.rows(30),O.value(n.edit_note.text),k.onValueChange(o(j.create))]),x.div([R.class_("edit_form_checkboxes mb3")])([x.input([O.type_(U.inputTypeIsProp)(i.InputCheckbox.value),R.class_("is-markdown pointer"),O.id_("edit_ismarkdown"),O.name("ismarkdown"),O.checked(n.edit_note.isMarkdown),k.onChecked(o(V.create))]),U.text(" "),x.label([O.for("edit_ismarkdown"),R.class_("mr2")])([U.text("use markdown?")]),x.br_]),x.input([O.type_(U.inputTypeIsProp)(i.InputSubmit.value),R.class_("mr1 pv1 ph2 dark-gray ba b--moon-gray bg-near-white pointer rdim"),O.value("save")]),U.text(" "),x.input([O.type_(U.inputTypeIsProp)(i.InputReset.value),R.class_("pv1 ph2 dark-gray ba b--moon-gray bg-near-white pointer rdim"),O.value("cancel"),k.onClick(k.input_(z.create(!1)))])]),s=x.p([R.class_("red")])([U.text("you killed this note")]);return n.destroyed?s:n.edit?c:a},eval:function(n){if(n instanceof J)return r.pure(W.applicativeHalogenM)(n.value0);if(n instanceof Q)return a.discard(a.discardUnit)(W.bindHalogenM)(p.modifying(W.monadStateHalogenM)(Z(b.strongFn))(function(){if(n.value0 instanceof q)return function(e){return{id:e.id,slug:e.slug,title:n.value0.value0,text:e.text,length:e.length,isMarkdown:e.isMarkdown,created:e.created,updated:e.updated}};if(n.value0 instanceof j)return function(e){return{id:e.id,slug:e.slug,title:e.title,text:n.value0.value0,length:e.length,isMarkdown:e.isMarkdown,created:e.created,updated:e.updated}};if(n.value0 instanceof V)return function(e){return{id:e.id,slug:e.slug,title:e.title,text:e.text,length:e.length,isMarkdown:n.value0.value0,created:e.created,updated:e.updated}};throw new Error("Failed pattern match at Component.NNote (line 158, column 19 - line 161, column 44): "+[n.value0.constructor.name])}()))(function(){return r.pure(W.applicativeHalogenM)(n.value1)});if(n instanceof K)return a.discard(a.discardUnit)(W.bindHalogenM)(o.modify_(W.monadStateHalogenM)(function(e){var t={};for(var r in e)({}).hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.deleteAsk=n.value0,t}))(function(){return r.pure(W.applicativeHalogenM)(n.value1)});if(n instanceof X)return a.bind(W.bindHalogenM)(S.use(W.monadStateHalogenM)(Y(P.strongForget)))(function(t){return a.discard(a.discardUnit)(W.bindHalogenM)(d.void(W.functorHalogenM)(F.liftAff(W.monadAffHalogenM(F.monadAffAff))(e.destroyNote(t.id))))(function(){return a.discard(a.discardUnit)(W.bindHalogenM)(o.modify_(W.monadStateHalogenM)(function(n){var e={};for(var t in n)({}).hasOwnProperty.call(n,t)&&(e[t]=n[t]);return e.destroyed=!0,e}))(function(){return r.pure(W.applicativeHalogenM)(n.value0)})})});if(n instanceof z)return a.bind(W.bindHalogenM)(S.use(W.monadStateHalogenM)(Y(P.strongForget)))(function(e){return a.discard(a.discardUnit)(W.bindHalogenM)(p.assign(W.monadStateHalogenM)(Z(b.strongFn))(e))(function(){return a.discard(a.discardUnit)(W.bindHalogenM)(p.assign(W.monadStateHalogenM)($(b.strongFn))(n.value0))(function(){return r.pure(W.applicativeHalogenM)(n.value1)})})});if(n instanceof G)return a.discard(a.discardUnit)(W.bindHalogenM)(H.liftEffect(W.monadEffectHalogenM(T.monadEffectAff))(N.preventDefault(n.value0)))(function(){return a.bind(W.bindHalogenM)(S.use(W.monadStateHalogenM)(Z(P.strongForget)))(function(t){return a.bind(W.bindHalogenM)(F.liftAff(W.monadAffHalogenM(F.monadAffAff))(e.editNote(t)))(function(e){if(e.body instanceof c.Left)return r.pure(W.applicativeHalogenM)(n.value1);if(e.body instanceof c.Right)return a.discard(a.discardUnit)(W.bindHalogenM)(0===t.id?H.liftEffect(W.monadEffectHalogenM(T.monadEffectAff))(a.bindFlipped(A.bindEffect)(B.setHref(R.fromNullableStr(nn.noteR)))(R._loc)):a.discard(a.discardUnit)(W.bindHalogenM)(p.assign(W.monadStateHalogenM)(Y(b.strongFn))(t))(function(){return p.assign(W.monadStateHalogenM)($(b.strongFn))(!1)}))(function(){return r.pure(W.applicativeHalogenM)(n.value1)});throw new Error("Failed pattern match at Component.NNote (line 188, column 5 - line 197, column 14): "+[e.body.constructor.name])})})});throw new Error("Failed pattern match at Component.NNote (line 153, column 3 - line 153, column 72): "+[n.constructor.name])},receiver:s.const(m.Nothing.value)})}}(PS["Component.NNote"]=PS["Component.NNote"]||{}),function(n){"use strict";PS["Control.Monad.Error.Class"],PS["Control.Monad.Reader.Trans"],PS["Control.Monad.Trans.Class"],PS["Control.Semigroupoid"];var e=PS["Effect.Aff"],t=(PS.Prelude,function(n,e,t,r,a){this.Functor1=n,this.Monad0=e,this.fork=t,this.join=r,this.suspend=a}),r=new t(function(){return e.functorFiber},function(){return e.monadAff},e.forkAff,e.joinFiber,e.suspendAff);n.fork=function(n){return n.fork},n.join=function(n){return n.join},n.suspend=function(n){return n.suspend},n.MonadFork=t,n.monadForkAff=r}(PS["Control.Monad.Fork.Class"]=PS["Control.Monad.Fork.Class"]||{}),function(n){"use strict";(PS["Effect.Console"]=PS["Effect.Console"]||{}).warn=function(n){return function(){return console.warn(n),{}}}}(),function(n){"use strict";var e=PS["Effect.Console"];PS["Data.Show"],PS["Data.Unit"],PS.Effect;n.warn=e.warn}(PS["Effect.Console"]=PS["Effect.Console"]||{}),function(n){"use strict";PS["Control.Applicative"],PS["Control.Bind"];var e=PS["Data.Foldable"],t=(PS["Data.Function"],PS["Data.Functor"]),r=(PS["Data.List"],PS["Data.List.Types"]),a=(PS["Data.Map"],PS["Data.Map.Internal"]),o=PS["Data.Maybe"],u=(PS["Data.Traversable"],PS.Effect,PS["Effect.Aff"],PS["Effect.Ref"]),i=(PS["Halogen.Component"],PS["Halogen.Data.OrdBox"],PS.Prelude,PS["Unsafe.Coerce"]),l=(PS["Web.DOM"],i.unsafeCoerce),c=i.unsafeCoerce,f=i.unsafeCoerce;n.unDriverStateX=c,n.mkDriverStateXRef=f,n.renderStateX=function(n){return function(n){return c(function(e){return(e.prjQuery,i.unsafeCoerce)(n(e.rendering))})}},n.renderStateX_=function(n){return function(t){return c(function(r){return e.traverse_(n)(e.foldableMaybe)(t)(r.rendering)})}},n.unRenderStateX=l,n.initDriverState=function(n){return function(e){return function(i){return function(l){return function(c){return function(){var s=u.new({})(),d=u.new(a.empty)(),S=u.new(a.empty)(),P=u.new(t.voidLeft(o.functorMaybe)(n.initializer)(r.Nil.value))(),v=u.new(new o.Just(r.Nil.value))(),p=u.new(o.Nothing.value)(),m=u.new(0)(),g=u.new(new o.Just(a.empty))(),D={component:n,state:n.initialState(e),refs:a.empty,children:a.empty,childrenIn:d,childrenOut:S,selfRef:s,handler:i,pendingQueries:P,pendingOuts:v,pendingHandlers:p,rendering:o.Nothing.value,prjQuery:l,fresh:m,subscriptions:g,lifecycleHandlers:c};return u.write(D)(s)(),f(s)}}}}}}}(PS["Halogen.Aff.Driver.State"]=PS["Halogen.Aff.Driver.State"]||{}),function(n){"use strict";(PS["Unsafe.Reference"]=PS["Unsafe.Reference"]||{}).reallyUnsafeRefEq=function(n){return function(e){return n===e}}}(),function(n){"use strict";var e=PS["Unsafe.Reference"].reallyUnsafeRefEq;n.unsafeRefEq=e}(PS["Unsafe.Reference"]=PS["Unsafe.Reference"]||{}),function(n){"use strict";var e=PS["Control.Applicative"],t=PS["Control.Applicative.Free"],r=PS["Control.Bind"],a=PS["Control.Coroutine"],o=PS["Control.Monad.Error.Class"],u=PS["Control.Monad.Fork.Class"],i=PS["Control.Monad.Free"],l=PS["Control.Monad.Free.Trans"],c=PS["Control.Monad.Trans.Class"],f=PS["Control.Parallel"],s=PS["Control.Parallel.Class"],d=(PS["Control.Semigroupoid"],PS["Data.Boolean"]),S=PS["Data.Coyoneda"],P=PS["Data.Eq"],v=PS["Data.Foldable"],p=PS["Data.Function"],m=PS["Data.Functor"],g=PS["Data.List"],D=PS["Data.List.Types"],b=PS["Data.Map"],h=PS["Data.Map.Internal"],w=PS["Data.Maybe"],y=PS["Data.Ord"],M=(PS["Data.Semiring"],PS["Data.Set"]),E=(PS["Data.Tuple"],PS.Effect,PS["Effect.Aff"]),C=PS["Effect.Class"],A=PS["Effect.Exception"],T=PS["Effect.Ref"],F=PS["Halogen.Aff.Driver.State"],H=PS["Halogen.Data.OrdBox"],L=PS["Halogen.Query.EventSource"],_=PS["Halogen.Query.ForkF"],I=PS["Halogen.Query.HalogenM"],U=PS["Halogen.Query.InputF"],x=(PS.Prelude,PS["Unsafe.Reference"]),k=function(n){return function(e){return function(t){return r.bind(E.bindAff)(C.liftEffect(E.monadEffectAff)(T.read(e)))(function(r){if(r instanceof w.Nothing)return n(t);if(r instanceof w.Just)return C.liftEffect(E.monadEffectAff)(T.write(new w.Just(new D.Cons(n(t),r.value0)))(e));throw new Error("Failed pattern match at Halogen.Aff.Driver.Eval (line 171, column 3 - line 175, column 59): "+[r.constructor.name])})}}},O=function(n){return function(t){return r.discard(r.discardUnit)(E.bindAff)(C.liftEffect(E.monadEffectAff)(T.write({initializers:D.Nil.value,finalizers:D.Nil.value})(n)))(function(){return r.bind(E.bindAff)(C.liftEffect(E.monadEffectAff)(t))(function(t){return r.bind(E.bindAff)(C.liftEffect(E.monadEffectAff)(T.read(n)))(function(n){return r.discard(r.discardUnit)(E.bindAff)(v.traverse_(E.applicativeAff)(D.foldableList)(u.fork(u.monadForkAff))(n.finalizers))(function(){return r.discard(r.discardUnit)(E.bindAff)(f.parSequence_(E.parallelAff)(D.foldableList)(n.initializers))(function(){return e.pure(E.applicativeAff)(t)})})})})})}};n.handleLifecycle=O,n.eval=function(n){return function(f){var v=function(i){return function(f){if(f instanceof I.State)return r.bind(E.bindAff)(C.liftEffect(E.monadEffectAff)(T.read(i)))(function(t){var a=f.value0(t.state);if(x.unsafeRefEq(t.state)(a.value1))return e.pure(E.applicativeAff)(a.value0);if(d.otherwise)return r.discard(r.discardUnit)(E.bindAff)(C.liftEffect(E.monadEffectAff)(T.write({component:t.component,state:a.value1,refs:t.refs,children:t.children,childrenIn:t.childrenIn,childrenOut:t.childrenOut,selfRef:t.selfRef,handler:t.handler,pendingQueries:t.pendingQueries,pendingOuts:t.pendingOuts,pendingHandlers:t.pendingHandlers,rendering:t.rendering,prjQuery:t.prjQuery,fresh:t.fresh,subscriptions:t.subscriptions,lifecycleHandlers:t.lifecycleHandlers})(i)))(function(){return r.discard(r.discardUnit)(E.bindAff)(O(t.lifecycleHandlers)(n(t.lifecycleHandlers)(i)))(function(){return e.pure(E.applicativeAff)(a.value0)})});throw new Error("Failed pattern match at Halogen.Aff.Driver.Eval (line 76, column 7 - line 82, column 21): "+[a.constructor.name])});if(f instanceof I.Subscribe)return r.bind(E.bindAff)(C.liftEffect(E.monadEffectAff)(T.read(i)))(function(n){return r.bind(E.bindAff)(u.fork(u.monadForkAff)(r.bind(E.bindAff)(L.unEventSource(f.value0))(function(t){return r.bind(E.bindAff)(C.liftEffect(E.monadEffectAff)(T["modify'"](function(n){return{state:n+1|0,value:n}})(n.fresh)))(function(o){var u=r.bind(E.bindAff)(C.liftEffect(E.monadEffectAff)(T.read(n.subscriptions)))(function(t){return e.when(E.applicativeAff)(w.maybe(!1)(h.member(y.ordInt)(o))(t))(C.liftEffect(E.monadEffectAff)(T.modify_(m.map(w.functorMaybe)(h.delete(y.ordInt)(o)))(n.subscriptions)))});return r.discard(r.discardUnit)(E.bindAff)(C.liftEffect(E.monadEffectAff)(T.modify_(m.map(w.functorMaybe)(h.insert(y.ordInt)(o)(u)))(n.subscriptions)))(function(){var o=r.bind(l.bindFreeT(a.functorAwait)(E.monadAff))(a.await(E.monadAff))(function(t){return r.bind(l.bindFreeT(a.functorAwait)(E.monadAff))(c.lift(l.monadTransFreeT(a.functorAwait))(E.monadAff)(C.liftEffect(E.monadEffectAff)(T.read(n.subscriptions))))(function(n){return e.when(l.applicativeFreeT(a.functorAwait)(E.monadAff))(w.isJust(n))(r.bind(l.bindFreeT(a.functorAwait)(E.monadAff))(c.lift(l.monadTransFreeT(a.functorAwait))(E.monadAff)(R(i)(t)))(function(n){return e.when(l.applicativeFreeT(a.functorAwait)(E.monadAff))(P.eq(L.eqSubscribeStatus)(n)(L.Listening.value))(o)}))})});return r.discard(r.discardUnit)(E.bindAff)(a.runProcess(E.monadRecAff)(a.pullFrom(E.monadRecAff)(o)(t.producer)))(function(){return u})})})})))(function(n){return e.pure(E.applicativeAff)(f.value1)})});if(f instanceof I.Lift)return f.value0;if(f instanceof I.Halt)return o.throwError(E.monadThrowAff)(A.error(f.value0));if(f instanceof I.GetSlots)return r.bind(E.bindAff)(C.liftEffect(E.monadEffectAff)(T.read(i)))(function(n){return e.pure(E.applicativeAff)(f.value0(m.map(D.functorList)(H.unOrdBox)(g.fromFoldable(M.foldableSet)(b.keys(n.children)))))});if(f instanceof I.CheckSlot)return r.bind(E.bindAff)(C.liftEffect(E.monadEffectAff)(T.read(i)))(function(n){return e.pure(E.applicativeAff)(f.value1(h.member(H.ordOrdBox)(n.component.mkOrdBox(f.value0))(n.children)))});if(f instanceof I.ChildQuery)return N(i)(f.value0)(f.value1);if(f instanceof I.Raise)return r.bind(E.bindAff)(C.liftEffect(E.monadEffectAff)(T.read(i)))(function(n){return r.discard(r.discardUnit)(E.bindAff)(k(n.handler)(n.pendingOuts)(f.value0))(function(){return e.pure(E.applicativeAff)(f.value1)})});if(f instanceof I.Par)return s.sequential(E.parallelAff)(t.retractFreeAp(E.applicativeParAff)(t.hoistFreeAp(function(n){return s.parallel(E.parallelAff)(W(i)(n))})(f.value0)));if(f instanceof I.Fork)return _.unFork(function(n){return r.bind(E.bindAff)(u.fork(u.monadForkAff)(W(i)(n.value0)))(function(t){return e.pure(E.applicativeAff)(n.value1(p.flip(E.killFiber)(t)))})})(f.value0);if(f instanceof I.GetRef)return r.bind(E.bindAff)(C.liftEffect(E.monadEffectAff)(T.read(i)))(function(n){return e.pure(E.applicativeAff)(f.value1(h.lookup(y.ordString)(f.value0)(n.refs)))});throw new Error("Failed pattern match at Halogen.Aff.Driver.Eval (line 73, column 12 - line 128, column 33): "+[f.constructor.name])}},W=function(n){return function(e){return i.foldFree(E.monadRecAff)(v(n))(e)}},R=function(n){return function(e){return r.bind(E.bindAff)(C.liftEffect(E.monadEffectAff)(T.read(n)))(function(t){var r=t.component.eval(e);return i.foldFree(E.monadRecAff)(v(n))(r)})}},N=function(n){return function(e){return S.unCoyoneda(function(t){return function(a){return r.bind(E.bindAff)(C.liftEffect(E.monadEffectAff)(T.read(n)))(function(n){var u=h.lookup(H.ordOrdBox)(n.component.mkOrdBox(e))(n.children);if(u instanceof w.Just)return r.bind(E.bindAff)(C.liftEffect(E.monadEffectAff)(T.read(u.value0)))(function(n){return F.unDriverStateX(function(n){var e=n.prjQuery(a);if(e instanceof w.Just)return m.map(E.functorAff)(t)(R(n.selfRef)(e.value0));if(e instanceof w.Nothing)return o.throwError(E.monadThrowAff)(A.error("Query projection failed for child query"));throw new Error("Failed pattern match at Halogen.Aff.Driver.Eval (line 141, column 32 - line 143, column 82): "+[e.constructor.name])})(n)});if(u instanceof w.Nothing)return o.throwError(E.monadThrowAff)(A.error("Slot lookup failed for child query"));throw new Error("Failed pattern match at Halogen.Aff.Driver.Eval (line 138, column 5 - line 144, column 73): "+[u.constructor.name])})}})}};return function(n){if(n instanceof U.RefUpdate)return r.discard(r.discardUnit)(E.bindAff)(C.liftEffect(E.monadEffectAff)(T.modify_(function(e){return{component:e.component,state:e.state,refs:h.alter(y.ordString)(p.const(n.value1))(n.value0)(e.refs),children:e.children,childrenIn:e.childrenIn,childrenOut:e.childrenOut,selfRef:e.selfRef,handler:e.handler,pendingQueries:e.pendingQueries,pendingOuts:e.pendingOuts,pendingHandlers:e.pendingHandlers,rendering:e.rendering,prjQuery:e.prjQuery,fresh:e.fresh,subscriptions:e.subscriptions,lifecycleHandlers:e.lifecycleHandlers}})(f)))(function(){return e.pure(E.applicativeAff)(n.value2)});if(n instanceof U.Query)return R(f)(n.value0);throw new Error("Failed pattern match at Halogen.Aff.Driver.Eval (line 59, column 3 - line 64, column 25): "+[n.constructor.name])}}},n.queuingHandler=k}(PS["Halogen.Aff.Driver.Eval"]=PS["Halogen.Aff.Driver.Eval"]||{}),function(n){"use strict";var e=PS["Control.Applicative"],t=PS["Control.Bind"],r=PS["Control.Coroutine"],a=PS["Control.Monad.Fork.Class"],o=PS["Control.Monad.Rec.Class"],u=PS["Control.Parallel"],i=(PS["Control.Semigroupoid"],PS["Data.Either"]),l=PS["Data.Foldable"],c=PS["Data.Function"],f=PS["Data.Functor"],s=PS["Data.List"],d=PS["Data.List.Types"],S=(PS["Data.Map"],PS["Data.Map.Internal"]),P=PS["Data.Maybe"],v=PS["Data.Ord"],p=(PS["Data.Semiring"],PS["Data.Traversable"],PS["Data.Tuple"],PS["Data.Unit"]),m=PS.Effect,g=PS["Effect.Aff"],D=PS["Effect.Aff.AVar"],b=PS["Effect.Class"],h=PS["Effect.Console"],w=PS["Effect.Exception"],y=PS["Effect.Ref"],M=(PS.Halogen,PS["Halogen.Aff.Driver.Eval"]),E=PS["Halogen.Aff.Driver.State"],C=PS["Halogen.Component"],A=PS["Halogen.Data.OrdBox"],T=PS["Halogen.Query.InputF"],F=(PS.Prelude,y.new({initializers:d.Nil.value,finalizers:d.Nil.value})),H=g.runAff_(i.either(w.throwException)(c.const(e.pure(m.applicativeEffect)(p.unit))));n.runUI=function(n){return function(L){return function(_){var I=function(n){return function(){var e=y.read(n)();return y.write(P.Nothing.value)(n)(),l.for_(m.applicativeEffect)(l.foldableMaybe)(e)(function(n){return H(l.traverse_(g.applicativeAff)(d.foldableList)(a.fork(a.monadForkAff))(s.reverse(n)))})()}},U=function(n){return function(e){return function(r){return function(a){return C.unComponent(function(o){return function(){var i=F(),c=E.initDriverState(o)(r)(e)(a)(i)(),S=y.read(n)();return y.write({initializers:d.Nil.value,finalizers:S.finalizers})(n)(),t.bindFlipped(m.bindEffect)(E.unDriverStateX(function(e){return x(n)(e.selfRef)}))(y.read(c))(),t.bindFlipped(m.bindEffect)(function(n){return function(e){return E.unDriverStateX(function(r){var a=f.map(P.functorMaybe)(function(n){return O(r.selfRef)(T.Query.create(n))})(r.component.initializer);return y.modify_(function(n){return{initializers:new d.Cons(t.discard(t.discardUnit)(g.bindAff)(u.parSequence_(g.parallelAff)(d.foldableList)(s.reverse(n.initializers)))(function(){return t.discard(t.discardUnit)(g.bindAff)(l.sequence_(g.applicativeAff)(l.foldableMaybe)(a))(function(){return b.liftEffect(g.monadEffectAff)(function(){return I(r.pendingQueries)(),I(r.pendingOuts)()})})}),e),finalizers:n.finalizers}})(n)})}}(n)(S.initializers))(y.read(c))(),c}})}}}},x=function(r){return function(u){return function(){var i=y.read(u)(),v=f.map(m.functorEffect)(P.isNothing)(y.read(i.pendingHandlers))();e.when(m.applicativeEffect)(v)(y.write(new P.Just(d.Nil.value))(i.pendingHandlers))(),y.write(S.empty)(i.childrenOut)(),y.write(i.children)(i.childrenIn)();var D=M.queuingHandler(function(n){return f.void(g.functorAff)(O(i.selfRef)(n))})(i.pendingHandlers),b=M.queuingHandler(function(n){return D(T.Query.create(n))})(i.pendingQueries),F=n.render(function(n){return H(D(n))})(function(r){return function(a){return function(o){return function(u){return function(i){return C.unComponentSlot(function(c){return function(s){return function(d){return function(v){return function(D){return function(b){var M=o(c);return function(){var o=y.read(u)(),c=function(){var n=S.pop(A.ordOrdBox)(M)(o);if(n instanceof P.Just)return y.write(n.value0.value1)(u)(),l.for_(m.applicativeEffect)(l.foldableMaybe)(v(d))(function(e){return function(){var t=y.read(n.value0.value0)();return E.unDriverStateX(function(n){return l.for_(m.applicativeEffect)(l.foldableMaybe)(n.prjQuery(e))(function(e){return H(O(n.selfRef)(T.Query.create(e)))})})(t)()}})(),n.value0.value0;if(n instanceof P.Nothing)return U(r)(function(n){return P.maybe(e.pure(g.applicativeAff)(p.unit))(a)(D(n))})(d)(b)(s)();throw new Error("Failed pattern match at Halogen.Aff.Driver (line 258, column 14 - line 266, column 92): "+[n.constructor.name])}(),C=f.map(m.functorEffect)(S.member(A.ordOrdBox)(M))(y.read(i))();return e.when(m.applicativeEffect)(C)(h.warn("Halogen: Duplicate slot address was detected during rendering, unexpected results may occur"))(),y.modify_(S.insert(A.ordOrdBox)(M)(c))(i)(),t.bind(m.bindEffect)(y.read(c))(E.renderStateX(m.functorEffect)(function(t){if(t instanceof P.Nothing)return w.throw("Halogen internal error: child was not initialized in renderChild");if(t instanceof P.Just)return e.pure(m.applicativeEffect)(n.renderChild(t.value0));throw new Error("Failed pattern match at Halogen.Aff.Driver (line 271, column 37 - line 273, column 50): "+[t.constructor.name])}))()}}}}}}})}}}}}(r)(b)(i.component.mkOrdBox)(i.childrenIn)(i.childrenOut))(i.component.render(i.state))(i.rendering)(),L=y.read(i.childrenOut)();return t.bind(m.bindEffect)(y.read(i.childrenIn))(l.traverse_(m.applicativeEffect)(S.foldableMap)(function(e){return function(){var t=y.read(e)();return E.renderStateX_(m.applicativeEffect)(n.removeChild)(t)(),k(r)(t)()}}))(),y.modify_(function(n){return{rendering:new P.Just(F),children:L,component:n.component,state:n.state,refs:n.refs,childrenIn:n.childrenIn,childrenOut:n.childrenOut,selfRef:n.selfRef,handler:n.handler,pendingQueries:n.pendingQueries,pendingOuts:n.pendingOuts,pendingHandlers:n.pendingHandlers,prjQuery:n.prjQuery,fresh:n.fresh,subscriptions:n.subscriptions,lifecycleHandlers:n.lifecycleHandlers}})(i.selfRef)(),e.when(m.applicativeEffect)(v)(c.flip(o.tailRecM(o.monadRecEffect))(p.unit)(function(n){return function(){var n=y.read(i.pendingHandlers)();y.write(new P.Just(d.Nil.value))(i.pendingHandlers)(),l.traverse_(m.applicativeEffect)(l.foldableMaybe)(function(n){return H(l.traverse_(g.applicativeAff)(d.foldableList)(a.fork(a.monadForkAff))(s.reverse(n)))})(n)();var e=y.read(i.pendingHandlers)();return P.maybe(!1)(s.null)(e)?f.voidLeft(m.functorEffect)(y.write(P.Nothing.value)(i.pendingHandlers))(new o.Done(p.unit))():new o.Loop(p.unit)}}))()}}},k=function(n){return E.unDriverStateX(function(e){return function(){var r;return(r=e,function(){return t.bindFlipped(m.bindEffect)(l.traverse_(m.applicativeEffect)(l.foldableMaybe)(function(n){return H(l.traverse_(g.applicativeAff)(S.foldableMap)(a.fork(a.monadForkAff))(n))}))(y.read(r.subscriptions))(),y.write(P.Nothing.value)(r.subscriptions)()})(),l.for_(m.applicativeEffect)(l.foldableMaybe)(f.map(P.functorMaybe)(function(n){return O(e.selfRef)(T.Query.create(n))})(e.component.finalizer))(function(e){return y.modify_(function(n){return{initializers:n.initializers,finalizers:new d.Cons(e,n.finalizers)}})(n)})(),l.for_(m.applicativeEffect)(S.foldableMap)(e.children)(t.composeKleisliFlipped(m.bindEffect)(k(n))(y.read))()}})},O=function(n){return M.eval(x)(n)};return t.bind(g.bindAff)(b.liftEffect(g.monadEffectAff)(F))(function(n){return t.bind(g.bindAff)(b.liftEffect(g.monadEffectAff)(y.new(0)))(function(o){return M.handleLifecycle(n)(function(){var u,c=y.new(S.empty)();return t.bind(m.bindEffect)(t.bind(m.bindEffect)(U(n)((u=c,function(n){return t.bind(g.bindAff)(b.liftEffect(g.monadEffectAff)(y.read(u)))(function(e){return l.traverse_(g.applicativeAff)(S.foldableMap)(a.fork(a.monadForkAff))(f.map(S.functorMap)(D.put(n))(e))})}))(_)(P.Just.create)(L))(y.read))(E.unDriverStateX(function(n){return e.pure(m.applicativeEffect)({query:(l=n.selfRef,function(n){return function(e){var t=n(e);if(t instanceof P.Just)return O(l)(new T.Query(t.value0));if(t instanceof P.Nothing)return b.liftEffect(g.monadEffectAff)(w.throwException(w.error("Halogen internal error: query projection failed in runUI'")));throw new Error("Failed pattern match at Halogen.Aff.Driver (line 136, column 5 - line 138, column 113): "+[t.constructor.name])}})(n.prjQuery),subscribe:(u=o,function(n){return function(e){return t.bind(g.bindAff)(D.empty)(function(o){return t.bind(g.bindAff)(b.liftEffect(g.monadEffectAff)(function(){var e=y.read(u)();return y.modify_(function(n){return n+1|0})(u)(),y.modify_(S.insert(v.ordInt)(e)(o))(n)(),e}))(function(u){var l=r.producer(g.monadAff)(f.map(g.functorAff)(i.Left.create)(D.take(o)));return f.void(g.functorAff)(a.fork(a.monadForkAff)(t.discard(t.discardUnit)(g.bindAff)(r.runProcess(g.monadRecAff)(r.connect(g.monadRecAff)(g.parallelAff)(l)(e)))(function(){return t.discard(t.discardUnit)(g.bindAff)(b.liftEffect(g.monadEffectAff)(y.modify_(S.delete(v.ordInt)(u))(n)))(function(){return D.kill(w.error("ended"))(o)})})))})})}})(c)});var u,l}))()})})})}}}}(PS["Halogen.Aff.Driver"]=PS["Halogen.Aff.Driver"]||{}),function(n){"use strict";var e=PS["Control.Applicative"],t=PS["Control.Bind"],r=(PS["Control.Monad.Error.Class"],PS["Control.Semigroupoid"],PS["Data.Either"]),a=PS["Data.Function"],o=(PS["Data.Functor"],PS["Data.Maybe"]),u=PS["Data.Unit"],i=PS.Effect,l=PS["Effect.Aff"],c=PS["Effect.Class"],f=PS["Effect.Exception"],s=(PS.Prelude,PS["Web.DOM.ParentNode"]),d=(PS["Web.Event.EventTarget"],PS["Web.HTML"]),S=(PS["Web.HTML.Event.EventTypes"],PS["Web.HTML.HTMLDocument"]),P=(PS["Web.HTML.HTMLDocument.ReadyState"],PS["Web.HTML.HTMLElement"]),v=PS["Web.HTML.Window"],p=l.runAff_(r.either(f.throwException)(a.const(e.pure(i.applicativeEffect)(u.unit))));n.selectElement=function(n){return t.bind(l.bindAff)(c.liftEffect(l.monadEffectAff)(t.bindFlipped(i.bindEffect)(t.composeKleisliFlipped(i.bindEffect)(function(e){return s.querySelector(n)(S.toParentNode(e))})(v.document))(d.window)))(function(n){return e.pure(l.applicativeAff)(t.bindFlipped(o.bindMaybe)(P.fromElement)(n))})},n.runHalogenAff=p}(PS["Halogen.Aff.Util"]=PS["Halogen.Aff.Util"]||{}),function(n){"use strict";PS["Control.Applicative"],PS["Control.Bind"];var e,t=PS["Data.Array"],r=(PS["Data.Eq"],PS["Data.Function.Uncurried"],PS["Data.Maybe"]),a=PS["Data.Nullable"],o=PS["Data.Tuple"],u=PS.Effect,i=(PS["Effect.Uncurried"],PS["Halogen.VDom.Machine"]),l=PS["Halogen.VDom.Types"],c=PS["Halogen.VDom.Util"],f=(PS.Prelude,PS["Web.DOM.Document"],PS["Web.DOM.Element"]),s=(PS["Web.DOM.Node"],function(n,e){return n.value1===e.value1&&(n.value0 instanceof r.Just&&e.value0 instanceof r.Just&&n.value0.value0===e.value0.value0||n.value0 instanceof r.Nothing&&e.value0 instanceof r.Nothing)}),d=(e=function(n,t){return function(r){if(r instanceof l.Grafted)return e(n,t)(l.runGraft(r.value0));if(r instanceof l.Widget){var a=t.value1(r.value0);return new i.Step(a.value0,e(n,a),a.value2)}return t.value2(),n(r)}},function(n,t,r){var a=n.buildWidget(n)(r);return new i.Step(a.value0,e(t,a),a.value2)}),S=function(){var n=function(e,t,r,a){return function(o){if(o instanceof l.Grafted)return n(e,t,r,a)(l.runGraft(o.value0));if(o instanceof l.Text){var u=new i.Step(r,n(e,t,r,o.value0),t);return a===o.value0?u:(c.setTextContent(o.value0,r),u)}return t(),e(o)}};return function(e,t,r){var a,o=c.createTextNode(r,e.document),u=(a=o,function(){var n=c.parentNode(a);return c.removeChild(a,n)});return new i.Step(o,n(t,u,o,r),u)}}(),P=function(){var n=function(n,e,t){return function(){var r=c.parentNode(n);return c.removeChild(n,r),c.forInE(t,function(n,e){return e.value2()}),i.halt(e)()}},e=function(r,a,u,f,d,S,P){return function(v){if(v instanceof l.Grafted)return e(r,a,u,f,d,S,P)(l.runGraft(v.value0));if(v instanceof l.Keyed&&s(d,v.value0)){var p=t.length(v.value1);if(0===P&&0===p){var m=i.step(f)(v.value0.value2),g=n(u,m,S);return new i.Step(u,e(r,g,u,m,v.value0,S,0),g)}m=c.diffWithKeyAndIxE(S,v.value1,o.fst,function(n,e,t,r){var a=t.value1(r.value1);return c.insertChildIx(e,a.value0,u),a},function(n,e){return e.value2()},function(n,e,t){var a=r(t.value1);return c.insertChildIx(e,a.value0,u),a});var D=i.step(f)(v.value0.value2);g=n(u,D,m);return new i.Step(u,e(r,g,u,D,v.value0,m,p),g)}return a(),r(v)}};return function(r,u,l,s){var d=c.createElement(a.toNullable(l.value0),l.value1,r.document),S=f.toNode(d),P=c.strMapWithIxE(s,o.fst,function(n,e,t){var r=u(t.value1);return c.insertChildIx(e,r.value0,S),r}),v=r.buildAttributes(d)(l.value2),p=n(S,v,P);return new i.Step(S,e(u,p,S,v,l,P,t.length(s)),p)}}(),v=function(){var n=function(n,e,t){return function(){var r=c.parentNode(n);return c.removeChild(n,r),u.foreachE(t)(i.halt)(),i.halt(e)()}},e=function(r,a,o,u,f,d){return function(S){if(S instanceof l.Grafted)return e(r,a,o,u,f,d)(l.runGraft(S.value0));if(S instanceof l.Elem&&s(f,S.value0)){var P=t.length(S.value1);if(0===t.length(d)&&0===P){var v=i.step(u)(S.value0.value2),p=n(o,v,d);return new i.Step(o,e(r,p,o,v,S.value0,d),p)}v=c.diffWithIxE(d,S.value1,function(n,e,t){var r=e.value1(t);return c.insertChildIx(n,r.value0,o),r},function(n,e){return e.value2()},function(n,e){var t=r(e);return c.insertChildIx(n,t.value0,o),t});var m=i.step(u)(S.value0.value2);p=n(o,m,v);return new i.Step(o,e(r,p,o,m,S.value0,v),p)}return a(),r(S)}};return function(t,r,o,u){var l=c.createElement(a.toNullable(o.value0),o.value1,t.document),s=f.toNode(l),d=c.forE(u,function(n,e){var t=r(e);return c.insertChildIx(n,t.value0,s),t}),S=t.buildAttributes(l)(o.value2),P=n(s,S,d);return new i.Step(s,e(r,P,s,S,o,d),P)}}();n.buildVDom=function(n){var e=function(t){if(t instanceof l.Text)return S(n,e,t.value0);if(t instanceof l.Elem)return v(n,e,t.value0,t.value1);if(t instanceof l.Keyed)return P(n,e,t.value0,t.value1);if(t instanceof l.Widget)return d(n,e,t.value0);if(t instanceof l.Grafted)return e(l.runGraft(t.value0));throw new Error("Failed pattern match at Halogen.VDom.DOM (line 58, column 27 - line 63, column 52): "+[t.constructor.name])};return e},n.buildText=S,n.buildElem=v,n.buildKeyed=P,n.buildWidget=d}(PS["Halogen.VDom.DOM"]=PS["Halogen.VDom.DOM"]||{}),function(n){"use strict";var e=PS["Control.Applicative"],t=PS["Control.Bind"],r=PS["Control.Category"],a=PS["Data.Foldable"],o=(PS["Data.Function"],PS["Data.Functor"]),u=PS["Data.HeytingAlgebra"],i=PS["Data.Maybe"],l=PS["Data.Unit"],c=PS.Effect,f=PS["Effect.Aff"],s=PS["Effect.Class"],d=PS["Effect.Ref"],S=(PS["Effect.Uncurried"],PS["Halogen.Aff.Driver"]),P=PS["Halogen.Aff.Driver.State"],v=(PS["Halogen.Component"],PS["Halogen.HTML.Core"],PS["Halogen.Query.InputF"],PS["Halogen.VDom"],PS["Halogen.VDom.DOM"]),p=PS["Halogen.VDom.DOM.Prop"],m=PS["Halogen.VDom.Machine"],g=(PS.Prelude,PS["Unsafe.Reference"]),D=(PS["Web.DOM.Document"],PS["Web.DOM.Element"],PS["Web.DOM.Node"]),b=PS["Web.HTML"],h=PS["Web.HTML.HTMLDocument"],w=PS["Web.HTML.HTMLElement"],y=PS["Web.HTML.Window"],M=function(n){return function(){var e=D.parentNode(n.node)();return a.traverse_(c.applicativeEffect)(a.foldableMaybe)(function(e){return D.removeChild(n.node)(e)})(e)()}},E=function(n){return function(t){return{render:function(r){return function(a){return function(f){return function(s){if(s instanceof i.Nothing)return function(){var u=d.new(a)(),i=function(n){return function(t){return function(r){var a=P.unRenderStateX(function(n){return n.node}),o=e.pure(c.applicativeEffect)(l.unit),u=function(n){var e=d.read(t)()(n)(),r=a(e);return new m.Step(r,u,o)};return{buildWidget:function(n){return function(n){var e=d.read(t)()(n)(),r=a(e);return new m.Step(r,u,o)}},buildAttributes:p.buildProp(n),document:r}}}}(r)(u)(n),s=v.buildVDom(i)(f),S=m.extract(s);return o.void(c.functorEffect)(D.appendChild(S)(w.toNode(t)))(),{machine:s,node:S,renderChildRef:u}};if(s instanceof i.Just)return function(){d.write(a)(s.value0.renderChildRef)();var n=D.parentNode(s.value0.node)(),t=D.nextSibling(s.value0.node)(),r=m.step(s.value0.machine)(f),S=m.extract(r);return e.when(c.applicativeEffect)(u.not(u.heytingAlgebraFunction(u.heytingAlgebraFunction(u.heytingAlgebraBoolean)))(g.unsafeRefEq)(s.value0.node)(S))(function(n){return function(t){return function(r){return t instanceof i.Just&&r instanceof i.Just?o.void(c.functorEffect)(D.insertBefore(n)(t.value0)(r.value0)):t instanceof i.Nothing&&r instanceof i.Just?o.void(c.functorEffect)(D.appendChild(n)(r.value0)):e.pure(c.applicativeEffect)(l.unit)}}}(S)(t)(n))(),{machine:r,node:S,renderChildRef:s.value0.renderChildRef}};throw new Error("Failed pattern match at Halogen.VDom.Driver (line 118, column 5 - line 134, column 80): "+[s.constructor.name])}}}},renderChild:r.identity(r.categoryFn),removeChild:M}}};n.runUI=function(n){return function(e){return function(r){return t.bind(f.bindAff)(s.liftEffect(f.monadEffectAff)(o.map(c.functorEffect)(h.toDocument)(t.bindFlipped(c.bindEffect)(y.document)(b.window))))(function(t){return S.runUI(E(t)(r))(n)(e)})}}}}(PS["Halogen.VDom.Driver"]=PS["Halogen.VDom.Driver"]||{}),function(n){"use strict";var e=PS.App,t=PS["Component.AccountSettings"],r=PS["Component.Add"],a=PS["Component.BList"],o=PS["Component.NList"],u=PS["Component.NNote"],i=PS["Control.Applicative"],l=PS["Control.Bind"],c=(PS["Control.Semigroupoid"],PS["Data.Foldable"]),f=(PS["Data.Function"],PS["Data.Functor"]),s=PS["Data.Unit"],d=PS.Effect,S=PS["Effect.Aff"],P=PS["Effect.Class"],v=(PS["Halogen.Aff"],PS["Halogen.Aff.Util"]),p=PS["Halogen.VDom.Driver"],m=(PS.Model,PS.Prelude,PS["Web.DOM.Element"]),g=(PS["Web.DOM.ParentNode"],PS["Web.Event.Event"]),D=PS["Web.HTML.HTMLElement"],b=l.bind(S.bindAff)(v.selectElement(".user_footer"))(c.traverse_(S.applicativeAff)(c.foldableMaybe)(function(n){return P.liftEffect(S.monadEffectAff)(m.removeAttribute("hidden")(D.toElement(n)))})),h=i.pure(d.applicativeEffect)(s.unit);n.main=h,n.logoutE=function(n){return l.bindFlipped(d.bindEffect)(function(n){return f.void(d.functorEffect)(S.launchAff(e.logout(n)))})(g.preventDefault(n))},n.renderBookmarks=function(n){return function(e){return v.runHalogenAff(l.bind(S.bindAff)(v.selectElement(n))(c.traverse_(S.applicativeAff)(c.foldableMaybe)(function(n){return l.discard(l.discardUnit)(S.bindAff)(f.void(S.functorAff)(p.runUI(a.blist(e))(s.unit)(n)))(function(){return b})})))}},n.renderAddForm=function(n){return function(e){return v.runHalogenAff(l.bind(S.bindAff)(v.selectElement(n))(c.traverse_(S.applicativeAff)(c.foldableMaybe)(function(n){return p.runUI(r.addbmark(e))(s.unit)(n)})))}},n.renderNotes=function(n){return function(e){return v.runHalogenAff(l.bind(S.bindAff)(v.selectElement(n))(c.traverse_(S.applicativeAff)(c.foldableMaybe)(function(n){return l.discard(l.discardUnit)(S.bindAff)(f.void(S.functorAff)(p.runUI(o.nlist(e))(s.unit)(n)))(function(){return b})})))}},n.renderNote=function(n){return function(e){return v.runHalogenAff(l.bind(S.bindAff)(v.selectElement(n))(c.traverse_(S.applicativeAff)(c.foldableMaybe)(function(n){return f.void(S.functorAff)(p.runUI(u.nnote(e))(s.unit)(n))})))}},n.renderAccountSettings=function(n){return function(e){return v.runHalogenAff(l.bind(S.bindAff)(v.selectElement(n))(c.traverse_(S.applicativeAff)(c.foldableMaybe)(function(n){return f.void(S.functorAff)(p.runUI(t.usetting(e))(s.unit)(n))})))}},n.showFooter=b}(PS.Main=PS.Main||{}),PS.Main.main(); \ No newline at end of file diff --git a/static/js/app.min.js.gz b/static/js/app.min.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..e9526c89cdb371e229dbb7de5b2ab0ce4482b87f GIT binary patch literal 48172 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�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 oXq",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/static/js/html5shiv.min.js.gz b/static/js/html5shiv.min.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..0cb6af0c40a4c3d711a5df50ad90f3f3cc60e76d GIT binary patch literal 1365 zcmV-b1*-ZViwFoXRIOD2188(@Y&COeX?8AcX>KlRa{zr-TW{Mo6n^iopw%IfVorA3 zbpzzE3EC~|fVLRW_9;yZiaeGW%cLsNPQ1|neTTZ(vX|~f;^pvMzweNfv$H2>xRv8^~nnn-(jEHu=<`of)$D#sm;g15AplukGK}01kXJEUv z`t{}$&pz-agh38m2GRBO#yK8KBUWCZlbcmwR~71ymDW)CNLX-xUfWFpuYz$p4$ddt zgi4gbfbDCTn+ie^7reG_a#cv&nyadtMBAO$GHhMu%*N0;)>#Z{TPd9djM+^IW={A8 zkL$8f7!C=dgzvS$F!q6>Ud5b*!qL5@L97Qv47qfI&jJgDFDH8dryKs#r8wa!6odG@)|7l0?{70+T`mY`)L9Ks-VxsSYwn`21) zAnqQdEC3GT6m>xs(eA)kuPgH&~Z$=-KO`O{U{ie@@})CaEPEgQpR??$82>z z+PKD+@*Zq%WPOo^f_g`jp-(8ir9U#wu6mt8PUis)I=wqnEvPk{A0$;UedyaPA3B2k z3C5W6mO)WmL0NDC;pF6a!akh?gxz{0J-8aOc;fK>+^Egsn~xuzTR11S{U@rZ83VbUK}GEi6&m!tR*Ha%_EXDxCB9ln9uuk8ME+~< z>~gy-UOIGEHlas^MJaD{TFaHae1>XK`R zeb?yBHFt-zJoVqy$c?ko+1%O6t%}CncNTnWV(?`OXoZxnk$SVy0H(IuboWSleD!fe z2p?Wv=l7d`UY$?;H=qj^=63-*k8rusJJ(O!2w1AEQh*rO&6tv}MSx?2sa z3v;DG4lcGmyPW%hz@u9KU%GQ|8%A5ft;l`jSg_F)gB(q_xZL<`*+YN1C3<(yp=O?@ z7*Pv((mISMPYYtz637~TGyz>hRijX{q#ds@ zu5L79Z1jxQtFknetv~C9Hg~#z5G4g2bg}MGH){|21SbI|oUaNSG}3)Zl3RL^^(3Q@ z*DT2?mvUzlwzH0*%r=h-8ngu5*K=v)s(_P|_8-H2<2-iR!v$ueZ8*Tg?m=^>v@~}Y X?Ju#ps%ihmi)Q}1){if("number"==typeof(i=e({path:"/"},t.defaults,i)).expires){var a=new Date;a.setMilliseconds(a.getMilliseconds()+864e5*i.expires),i.expires=a}i.expires=i.expires?i.expires.toUTCString():"";try{c=JSON.stringify(r),/^[\{\[]/.test(c)&&(r=c)}catch(e){}r=o.write?o.write(r,n):encodeURIComponent(r+"").replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),n=(n=(n=encodeURIComponent(n+"")).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent)).replace(/[\(\)]/g,escape);var s="";for(var f in i)i[f]&&(s+="; "+f,!0!==i[f]&&(s+="="+i[f]));return document.cookie=n+"="+r+s}n||(c={});for(var p=document.cookie?document.cookie.split("; "):[],d=/(%[0-9A-Z]{2})+/g,u=0;ubbuiqPj~m69zS=} z(~(zMJ^PEdDo*~DcAnE3Mk0W$NF1wSgOjCP@=%sAwUs*ELKu(x{)TrkBw?RxJT5$mMQjo#-J{ueBANk8Ab9|6kRXciu4uMn zyA~ahxj!1{me~#qZ(YD~Q@_o2ZeP^pJ*a_g#2rQ3Dm9y>KlK}8s4JV+h0zWUx72e5 zx&uy`fG6)ZH4vs$gZa#hf@{d6$Tdpo`pARFzg(Qb`6(Z&kileW^I{Ly)nHL0zkQ9q z7{$dJ;id0~Mm=vc_WPGV|Dby3=BsCtfX*UAvN}WOchi`ngN==Me~K7pV|3^o!{8SwOvGZ z@xd-`?fj!%e6(kQJ-@N%xAy#ly$I~(jlI0Jml2+>Ne;)wTkWFV?-gLt0{;|wU;bx> z5AxzWbcYic20BYCz+wBpY3BIrwYO@u$1#sriDOESnIC%octu9Rh_M4N^T+KC<8Uv| zUR|`?49vCcV$@hS!djHMQNRO8#g3w{j_y=f1vjY0#>+S%Ih&%laWMJydh&O&oi}*w zzM*D8Sii6OsjB;_Dp(cQNne8bm_)3g+Ko4$8Kw`Ci=8_(8?Nbtmaf5f{yX=55zRKK zx;7}luII?z_gQ2zb6?tOtOY1p5eLb@YW^DO?GQ#zSPIhosyk3bO1zZ2!`kTo^U2U0 zZegQN+EuDFpy*J&4o5J?O6=qxh4&8Vd&hWOChR|v{Tj&z%d}(4jGJmVoa}IO4*^+P z6vz<3O&8U+@ye1kG_9)Q8ExB+m!qH|anh03RT$O{#)nJ9slwe9l=2Z?stV$kTf5VI up8%3%yPx{yWY%=~Puy(W%6 ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|\\n*|\\n*|)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)|(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,table:f,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,text:/^[^\n]+/};function a(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||m.defaults,this.rules=k.normal,this.options.pedantic?this.rules=k.pedantic:this.options.gfm&&(this.options.tables?this.rules=k.tables:this.rules=k.gfm)}k._label=/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,k._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/,k.def=i(k.def).replace("label",k._label).replace("title",k._title).getRegex(),k.bullet=/(?:[*+-]|\d{1,9}\.)/,k.item=/^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/,k.item=i(k.item,"gm").replace(/bull/g,k.bullet).getRegex(),k.list=i(k.list).replace(/bull/g,k.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+k.def.source+")").getRegex(),k._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",k._comment=//,k.html=i(k.html,"i").replace("comment",k._comment).replace("tag",k._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),k.paragraph=i(k.paragraph).replace("hr",k.hr).replace("heading",k.heading).replace("lheading",k.lheading).replace("tag",k._tag).getRegex(),k.blockquote=i(k.blockquote).replace("paragraph",k.paragraph).getRegex(),k.normal=d({},k),k.gfm=d({},k.normal,{fences:/^ {0,3}(`{3,}|~{3,})([^`\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),k.gfm.paragraph=i(k.paragraph).replace("(?!","(?!"+k.gfm.fences.source.replace("\\1","\\2")+"|"+k.list.source.replace("\\1","\\3")+"|").getRegex(),k.tables=d({},k.gfm,{nptable:/^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,table:/^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/}),k.pedantic=d({},k.normal,{html:i("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",k._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/}),a.rules=k,a.lex=function(e,t){return new a(t).lex(e)},a.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},a.prototype.token=function(e,t){var n,r,s,i,l,o,a,h,p,u,c,g,f,d,m,b;for(e=e.replace(/^ +$/gm,"");e;)if((s=this.rules.newline.exec(e))&&(e=e.substring(s[0].length),1 ?/gm,""),this.token(s,t),this.tokens.push({type:"blockquote_end"});else if(s=this.rules.list.exec(e)){for(e=e.substring(s[0].length),a={type:"list_start",ordered:d=1<(i=s[2]).length,start:d?+i:"",loose:!1},this.tokens.push(a),n=!(h=[]),f=(s=s[0].match(this.rules.item)).length,c=0;c?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:f,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,strong:/^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,em:/^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:f,text:/^(`+|[^`])[\s\S]*?(?=[\\?@\\[^_{|}~",n.em=i(n.em).replace(/punctuation/g,n._punctuation).getRegex(),n._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,n._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,n._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,n.autolink=i(n.autolink).replace("scheme",n._scheme).replace("email",n._email).getRegex(),n._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,n.tag=i(n.tag).replace("comment",k._comment).replace("attribute",n._attribute).getRegex(),n._label=/(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/,n._href=/\s*(<(?:\\[<>]?|[^\s<>\\])*>|(?:\\[()]?|\([^\s\x00-\x1f\\]*\)|[^\s\x00-\x1f()\\])*?)/,n._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,n.link=i(n.link).replace("label",n._label).replace("href",n._href).replace("title",n._title).getRegex(),n.reflink=i(n.reflink).replace("label",n._label).getRegex(),n.normal=d({},n),n.pedantic=d({},n.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,link:i(/^!?\[(label)\]\((.*?)\)/).replace("label",n._label).getRegex(),reflink:i(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",n._label).getRegex()}),n.gfm=d({},n.normal,{escape:i(n.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~+(?=\S)([\s\S]*?\S)~+/,text:i(n.text).replace("]|","~]|").replace("|$","|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&'*+/=?^_`{\\|}~-]+@|$").getRegex()}),n.gfm.url=i(n.gfm.url,"i").replace("email",n.gfm._extended_email).getRegex(),n.breaks=d({},n.gfm,{br:i(n.br).replace("{2,}","*").getRegex(),text:i(n.gfm.text).replace("{2,}","*").getRegex()}),h.rules=n,h.output=function(e,t,n){return new h(t,n).output(e)},h.prototype.output=function(e){for(var t,n,r,s,i,l,o="";e;)if(i=this.rules.escape.exec(e))e=e.substring(i[0].length),o+=u(i[1]);else if(i=this.rules.tag.exec(e))!this.inLink&&/^/i.test(i[0])&&(this.inLink=!1),!this.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(i[0])?this.inRawBlock=!0:this.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(i[0])&&(this.inRawBlock=!1),e=e.substring(i[0].length),o+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(i[0]):u(i[0]):i[0];else if(i=this.rules.link.exec(e))e=e.substring(i[0].length),this.inLink=!0,r=i[2],this.options.pedantic?(t=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(r))?(r=t[1],s=t[3]):s="":s=i[3]?i[3].slice(1,-1):"",r=r.trim().replace(/^<([\s\S]*)>$/,"$1"),o+=this.outputLink(i,{href:h.escapes(r),title:h.escapes(s)}),this.inLink=!1;else if((i=this.rules.reflink.exec(e))||(i=this.rules.nolink.exec(e))){if(e=e.substring(i[0].length),t=(i[2]||i[1]).replace(/\s+/g," "),!(t=this.links[t.toLowerCase()])||!t.href){o+=i[0].charAt(0),e=i[0].substring(1)+e;continue}this.inLink=!0,o+=this.outputLink(i,t),this.inLink=!1}else if(i=this.rules.strong.exec(e))e=e.substring(i[0].length),o+=this.renderer.strong(this.output(i[4]||i[3]||i[2]||i[1]));else if(i=this.rules.em.exec(e))e=e.substring(i[0].length),o+=this.renderer.em(this.output(i[6]||i[5]||i[4]||i[3]||i[2]||i[1]));else if(i=this.rules.code.exec(e))e=e.substring(i[0].length),o+=this.renderer.codespan(u(i[2].trim(),!0));else if(i=this.rules.br.exec(e))e=e.substring(i[0].length),o+=this.renderer.br();else if(i=this.rules.del.exec(e))e=e.substring(i[0].length),o+=this.renderer.del(this.output(i[1]));else if(i=this.rules.autolink.exec(e))e=e.substring(i[0].length),r="@"===i[2]?"mailto:"+(n=u(this.mangle(i[1]))):n=u(i[1]),o+=this.renderer.link(r,null,n);else if(this.inLink||!(i=this.rules.url.exec(e))){if(i=this.rules.text.exec(e))e=e.substring(i[0].length),this.inRawBlock?o+=this.renderer.text(i[0]):o+=this.renderer.text(u(this.smartypants(i[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else{if("@"===i[2])r="mailto:"+(n=u(i[0]));else{for(;l=i[0],i[0]=this.rules._backpedal.exec(i[0])[0],l!==i[0];);n=u(i[0]),r="www."===i[1]?"http://"+n:n}e=e.substring(i[0].length),o+=this.renderer.link(r,null,n)}return o},h.escapes=function(e){return e?e.replace(h.rules._escapes,"$1"):e},h.prototype.outputLink=function(e,t){var n=t.href,r=t.title?u(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,r,this.output(e[1])):this.renderer.image(n,r,u(e[1]))},h.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},h.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",r=e.length,s=0;s'+(n?e:u(e,!0))+"\n":"

"+(n?e:u(e,!0))+"
"},r.prototype.blockquote=function(e){return"
\n"+e+"
\n"},r.prototype.html=function(e){return e},r.prototype.heading=function(e,t,n,r){return this.options.headerIds?"'+e+"\n":""+e+"\n"},r.prototype.hr=function(){return this.options.xhtml?"
\n":"
\n"},r.prototype.list=function(e,t,n){var r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"\n"},r.prototype.listitem=function(e){return"
  • "+e+"
  • \n"},r.prototype.checkbox=function(e){return" "},r.prototype.paragraph=function(e){return"

    "+e+"

    \n"},r.prototype.table=function(e,t){return t&&(t=""+t+""),"\n\n"+e+"\n"+t+"
    \n"},r.prototype.tablerow=function(e){return"\n"+e+"\n"},r.prototype.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"\n"},r.prototype.strong=function(e){return""+e+""},r.prototype.em=function(e){return""+e+""},r.prototype.codespan=function(e){return""+e+""},r.prototype.br=function(){return this.options.xhtml?"
    ":"
    "},r.prototype.del=function(e){return""+e+""},r.prototype.link=function(e,t,n){if(null===(e=l(this.options.sanitize,this.options.baseUrl,e)))return n;var r='
    "},r.prototype.image=function(e,t,n){if(null===(e=l(this.options.sanitize,this.options.baseUrl,e)))return n;var r=''+n+'":">"},r.prototype.text=function(e){return e},s.prototype.strong=s.prototype.em=s.prototype.codespan=s.prototype.del=s.prototype.text=function(e){return e},s.prototype.link=s.prototype.image=function(e,t,n){return""+n},s.prototype.br=function(){return""},p.parse=function(e,t){return new p(t).parse(e)},p.prototype.parse=function(e){this.inline=new h(e.links,this.options),this.inlineText=new h(e.links,d({},this.options,{renderer:new s})),this.tokens=e.reverse();for(var t="";this.next();)t+=this.tok();return t},p.prototype.next=function(){return this.token=this.tokens.pop()},p.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},p.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},p.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,c(this.inlineText.output(this.token.text)),this.slugger);case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,r,s="",i="";for(n="",e=0;e?@[\]^`{|}~]/g,"").replace(/\s/g,"-");if(this.seen.hasOwnProperty(t))for(var n=t;this.seen[n]++,t=n+"-"+this.seen[n],this.seen.hasOwnProperty(t););return this.seen[t]=0,t},u.escapeTest=/[&<>"']/,u.escapeReplace=/[&<>"']/g,u.replacements={"&":"&","<":"<",">":">",'"':""","'":"'"},u.escapeTestNoEncode=/[<>"']|&(?!#?\w+;)/,u.escapeReplaceNoEncode=/[<>"']|&(?!#?\w+;)/g;var o={},g=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function f(){}function d(e){for(var t,n,r=1;rt)n.splice(t);else for(;n.lengthAn error occurred:

    "+u(e.message+"",!0)+"
    ";throw e}}f.exec=f,m.options=m.setOptions=function(e){return d(m.defaults,e),m},m.getDefaults=function(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:new r,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tables:!0,xhtml:!1}},m.defaults=m.getDefaults(),m.Parser=p,m.parser=p.parse,m.Renderer=r,m.TextRenderer=s,m.Lexer=a,m.lexer=a.lex,m.InlineLexer=h,m.inlineLexer=h.output,m.Slugger=t,m.parse=m,"undefined"!=typeof module&&"object"==typeof exports?module.exports=m:"function"==typeof define&&define.amd?define(function(){return m}):e.marked=m}(this||("undefined"!=typeof window?window:global)); \ No newline at end of file diff --git a/static/js/marked.min.js.gz b/static/js/marked.min.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..0d72a93da72f3c011c0332f81dc1efbb2b564b9f GIT binary patch literal 7720 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 literal 0 HcmV?d00001 diff --git a/static/js/moment.min.js b/static/js/moment.min.js new file mode 100644 index 0000000..02711ab --- /dev/null +++ b/static/js/moment.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){"use strict";var e,i;function c(){return e.apply(null,arguments)}function o(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function u(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function l(e){return void 0===e}function d(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function h(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function f(e,t){var n,s=[];for(n=0;n>>0,s=0;sDe(e)?(r=e+1,a=o-De(e)):(r=e,a=o),{year:r,dayOfYear:a}}function Ie(e,t,n){var s,i,r=Ve(e.year(),t,n),a=Math.floor((e.dayOfYear()-r-1)/7)+1;return a<1?s=a+Ae(i=e.year()-1,t,n):a>Ae(e.year(),t,n)?(s=a-Ae(e.year(),t,n),i=e.year()+1):(i=e.year(),s=a),{week:s,year:i}}function Ae(e,t,n){var s=Ve(e,t,n),i=Ve(e+1,t,n);return(De(e)-s+i)/7}I("w",["ww",2],"wo","week"),I("W",["WW",2],"Wo","isoWeek"),H("week","w"),H("isoWeek","W"),L("week",5),L("isoWeek",5),ue("w",B),ue("ww",B,z),ue("W",B),ue("WW",B,z),fe(["w","ww","W","WW"],function(e,t,n,s){t[s.substr(0,1)]=k(e)});I("d",0,"do","day"),I("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),I("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),I("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),I("e",0,0,"weekday"),I("E",0,0,"isoWeekday"),H("day","d"),H("weekday","e"),H("isoWeekday","E"),L("day",11),L("weekday",11),L("isoWeekday",11),ue("d",B),ue("e",B),ue("E",B),ue("dd",function(e,t){return t.weekdaysMinRegex(e)}),ue("ddd",function(e,t){return t.weekdaysShortRegex(e)}),ue("dddd",function(e,t){return t.weekdaysRegex(e)}),fe(["dd","ddd","dddd"],function(e,t,n,s){var i=n._locale.weekdaysParse(e,s,n._strict);null!=i?t.d=i:g(n).invalidWeekday=e}),fe(["d","e","E"],function(e,t,n,s){t[s]=k(e)});var je="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_");var Ze="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_");var ze="Su_Mo_Tu_We_Th_Fr_Sa".split("_");var $e=ae;var qe=ae;var Je=ae;function Be(){function e(e,t){return t.length-e.length}var t,n,s,i,r,a=[],o=[],u=[],l=[];for(t=0;t<7;t++)n=y([2e3,1]).day(t),s=this.weekdaysMin(n,""),i=this.weekdaysShort(n,""),r=this.weekdays(n,""),a.push(s),o.push(i),u.push(r),l.push(s),l.push(i),l.push(r);for(a.sort(e),o.sort(e),u.sort(e),l.sort(e),t=0;t<7;t++)o[t]=de(o[t]),u[t]=de(u[t]),l[t]=de(l[t]);this._weekdaysRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+a.join("|")+")","i")}function Qe(){return this.hours()%12||12}function Xe(e,t){I(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function Ke(e,t){return t._meridiemParse}I("H",["HH",2],0,"hour"),I("h",["hh",2],0,Qe),I("k",["kk",2],0,function(){return this.hours()||24}),I("hmm",0,0,function(){return""+Qe.apply(this)+U(this.minutes(),2)}),I("hmmss",0,0,function(){return""+Qe.apply(this)+U(this.minutes(),2)+U(this.seconds(),2)}),I("Hmm",0,0,function(){return""+this.hours()+U(this.minutes(),2)}),I("Hmmss",0,0,function(){return""+this.hours()+U(this.minutes(),2)+U(this.seconds(),2)}),Xe("a",!0),Xe("A",!1),H("hour","h"),L("hour",13),ue("a",Ke),ue("A",Ke),ue("H",B),ue("h",B),ue("k",B),ue("HH",B,z),ue("hh",B,z),ue("kk",B,z),ue("hmm",Q),ue("hmmss",X),ue("Hmm",Q),ue("Hmmss",X),ce(["H","HH"],ge),ce(["k","kk"],function(e,t,n){var s=k(e);t[ge]=24===s?0:s}),ce(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),ce(["h","hh"],function(e,t,n){t[ge]=k(e),g(n).bigHour=!0}),ce("hmm",function(e,t,n){var s=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s)),g(n).bigHour=!0}),ce("hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s,2)),t[ve]=k(e.substr(i)),g(n).bigHour=!0}),ce("Hmm",function(e,t,n){var s=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s))}),ce("Hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[ge]=k(e.substr(0,s)),t[pe]=k(e.substr(s,2)),t[ve]=k(e.substr(i))});var et,tt=Te("Hours",!0),nt={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:He,monthsShort:Re,week:{dow:0,doy:6},weekdays:je,weekdaysMin:ze,weekdaysShort:Ze,meridiemParse:/[ap]\.?m?\.?/i},st={},it={};function rt(e){return e?e.toLowerCase().replace("_","-"):e}function at(e){var t=null;if(!st[e]&&"undefined"!=typeof module&&module&&module.exports)try{t=et._abbr,require("./locale/"+e),ot(t)}catch(e){}return st[e]}function ot(e,t){var n;return e&&((n=l(t)?lt(e):ut(e,t))?et=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),et._abbr}function ut(e,t){if(null!==t){var n,s=nt;if(t.abbr=e,null!=st[e])T("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=st[e]._config;else if(null!=t.parentLocale)if(null!=st[t.parentLocale])s=st[t.parentLocale]._config;else{if(null==(n=at(t.parentLocale)))return it[t.parentLocale]||(it[t.parentLocale]=[]),it[t.parentLocale].push({name:e,config:t}),null;s=n._config}return st[e]=new P(b(s,t)),it[e]&&it[e].forEach(function(e){ut(e.name,e.config)}),ot(e),st[e]}return delete st[e],null}function lt(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return et;if(!o(e)){if(t=at(e))return t;e=[e]}return function(e){for(var t,n,s,i,r=0;r=t&&a(i,n,!0)>=t-1)break;t--}r++}return et}(e)}function dt(e){var t,n=e._a;return n&&-2===g(e).overflow&&(t=n[_e]<0||11Pe(n[me],n[_e])?ye:n[ge]<0||24Ae(n,r,a)?g(e)._overflowWeeks=!0:null!=u?g(e)._overflowWeekday=!0:(o=Ee(n,s,i,r,a),e._a[me]=o.year,e._dayOfYear=o.dayOfYear)}(e),null!=e._dayOfYear&&(r=ht(e._a[me],s[me]),(e._dayOfYear>De(r)||0===e._dayOfYear)&&(g(e)._overflowDayOfYear=!0),n=Ge(r,0,e._dayOfYear),e._a[_e]=n.getUTCMonth(),e._a[ye]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=a[t]=s[t];for(;t<7;t++)e._a[t]=a[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[ge]&&0===e._a[pe]&&0===e._a[ve]&&0===e._a[we]&&(e._nextDay=!0,e._a[ge]=0),e._d=(e._useUTC?Ge:function(e,t,n,s,i,r,a){var o=new Date(e,t,n,s,i,r,a);return e<100&&0<=e&&isFinite(o.getFullYear())&&o.setFullYear(e),o}).apply(null,a),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[ge]=24),e._w&&void 0!==e._w.d&&e._w.d!==i&&(g(e).weekdayMismatch=!0)}}var ft=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,mt=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,_t=/Z|[+-]\d\d(?::?\d\d)?/,yt=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],gt=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],pt=/^\/?Date\((\-?\d+)/i;function vt(e){var t,n,s,i,r,a,o=e._i,u=ft.exec(o)||mt.exec(o);if(u){for(g(e).iso=!0,t=0,n=yt.length;tn.valueOf():n.valueOf()this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},ln.isLocal=function(){return!!this.isValid()&&!this._isUTC},ln.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},ln.isUtc=Vt,ln.isUTC=Vt,ln.zoneAbbr=function(){return this._isUTC?"UTC":""},ln.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},ln.dates=n("dates accessor is deprecated. Use date instead.",nn),ln.months=n("months accessor is deprecated. Use month instead",Fe),ln.years=n("years accessor is deprecated. Use year instead",Oe),ln.zone=n("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}),ln.isDSTShifted=n("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!l(this._isDSTShifted))return this._isDSTShifted;var e={};if(w(e,this),(e=Yt(e))._a){var t=e._isUTC?y(e._a):Tt(e._a);this._isDSTShifted=this.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 +
    + +
    + +
    + $maybe token <- reqToken req + + +
    +