upgrade PureScript to v0.15

This commit is contained in:
Jon Schoning 2022-06-01 09:52:33 -05:00 committed by Yann Esposito (Yogsototh)
parent 1e695efc87
commit 1a3bbef162
Signed by untrusted user who does not match committer: yogsototh
GPG key ID: 7B19A4C650D59646
26 changed files with 761 additions and 14979 deletions

View file

@ -1,3 +1,7 @@
__v0.0.14__
upgrade to purescript v0.15
increase bookmarklet window height
__v0.0.13__ __v0.0.13__
add setting ALLOW_NON_HTTP_URL_SCHEMES (default false) add setting ALLOW_NON_HTTP_URL_SCHEMES (default false)

View file

@ -62,7 +62,6 @@ extra-source-files:
purs/src/App.purs purs/src/App.purs
purs/src/Globals.js purs/src/Globals.js
purs/src/Globals.purs purs/src/Globals.purs
purs/src/Main.js
purs/src/Main.purs purs/src/Main.purs
purs/src/Marked.js purs/src/Marked.js
purs/src/Marked.purs purs/src/Marked.purs

View file

@ -9,16 +9,16 @@ build:
@npm run spago build @npm run spago build
bundle: build bundle: build
@npm run spago -- bundle-app --to dist/bundle.js @npm run esbuild-bundle
@npm run parcel-build @npm run esbuild-bundle-min
@rm -f dist/*.gz @rm -f dist/*.gz
@gzip -k dist/app.min.js.map @gzip -k dist/app.min.js.map
@gzip -k dist/app.min.js @gzip -k dist/app.min.js
@find dist -type f -printf "%kK\\t%h/%f\\n" | sort -k 2 @find dist -type f -printf "%kK\\t%h/%f\\n" | sort -k 2
@cp dist/app.min.js.map ../static/js/app.min.js.map
@cp dist/app.min.js.map.gz ../static/js/app.min.js.map.gz
@cp dist/app.min.js ../static/js/app.min.js @cp dist/app.min.js ../static/js/app.min.js
@cp dist/app.min.js.gz ../static/js/app.min.js.gz @cp dist/app.min.js.gz ../static/js/app.min.js.gz
@cp dist/app.min.js.map ../static/js/app.min.js.map
@cp dist/app.min.js.map.gz ../static/js/app.min.js.map.gz
docs: docs:
@rm -Rf generated-docs @rm -Rf generated-docs

15506
purs/package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -6,17 +6,17 @@
"purs": "purs", "purs": "purs",
"make-install": "make install", "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-watch": "inotifywait -m -r -q -e close_write --format '%T %w%f' --timefmt '%T' src | while read FILE; do echo $FILE; make; done",
"parcel-build": "parcel build dist/bundle.js --out-file dist/app.min.js --public-url /static/js/" "esbuild-bundle": "esbuild ./output/Main/index.js --bundle --format=iife --global-name=PS --target=chrome58,firefox57,edge18 --outfile=dist/app.js",
"esbuild-bundle-min": "esbuild ./output/Main/index.js --bundle --format=iife --global-name=PS --target=chrome58,firefox57,edge18 --minify --sourcemap --outfile=dist/app.min.js"
}, },
"devDependencies": { "devDependencies": {
"marked": "^3.0.2", "esbuild": "0.14.42",
"moment": "^2.29.1", "purescript": "0.15.2",
"parcel-bundler": "^1.12.5", "spago": "0.20.9"
"purescript": "^0.14.9",
"spago": "^0.20.7",
"terser": "^5.12.1"
}, },
"dependencies": { "dependencies": {
"dompurify": "^2.3.3" "dompurify": "2.3.8",
"marked": "4.0.16",
"moment": "2.29.3"
} }
} }

View file

@ -21,7 +21,36 @@ in upstream
} }
-} -}
let upstream = let upstream =
https://raw.githubusercontent.com/purescript/package-sets/psc-0.14.7-20220404/src/packages.dhall https://raw.githubusercontent.com/purescript/package-sets/psc-0.15.2-20220531/src/packages.dhall
sha256:75d0f0719f32456e6bdc3efd41cfc64785655d2b751e3d080bd849033ed053f2 sha256:278d3608439187e51136251ebf12fabda62d41ceb4bec9769312a08b56f853e3
in upstream in upstream
with simple-json = {
dependencies= [
"arrays",
"exceptions",
"foreign",
"foreign-object",
"nullable",
"prelude",
"record",
"typelevel-prelude",
"variant"
],
repo= "https://github.com/justinwoo/purescript-simple-json.git",
version= "v9.0.0"
}
with simple-json = {
dependencies= [
"arrays",
"exceptions",
"foreign",
"foreign-object",
"nullable",
"prelude",
"record",
"typelevel-prelude",
"variant"
],
repo= "https://github.com/justinwoo/purescript-simple-json.git",
version= "v9.0.0"
}

View file

@ -3,10 +3,12 @@
, dependencies = , dependencies =
[ "aff" [ "aff"
, "affjax" , "affjax"
, "affjax-web"
, "argonaut" , "argonaut"
, "arrays" , "arrays"
, "console" , "console"
, "const" , "const"
, "dom-indexed"
, "effect" , "effect"
, "either" , "either"
, "foldable-traversable" , "foldable-traversable"
@ -18,11 +20,11 @@
, "http-methods" , "http-methods"
, "integers" , "integers"
, "js-uri" , "js-uri"
, "math"
, "maybe" , "maybe"
, "media-types" , "media-types"
, "newtype" , "newtype"
, "nullable" , "nullable"
, "numbers"
, "partial" , "partial"
, "prelude" , "prelude"
, "profunctor-lenses" , "profunctor-lenses"

View file

@ -2,9 +2,9 @@ module App where
import Prelude import Prelude
import Affjax (Response, Error) import Affjax.Web (Response, Error)
import Affjax (defaultRequest) as AX import Affjax.Web (defaultRequest) as AX
import Affjax as Ax import Affjax.Web as Ax
import Affjax.RequestBody as AXReq import Affjax.RequestBody as AXReq
import Affjax.RequestHeader (RequestHeader(..)) import Affjax.RequestHeader (RequestHeader(..))
import Affjax.ResponseFormat as AXRes import Affjax.ResponseFormat as AXRes

View file

@ -25,6 +25,7 @@ import Web.Event.Event (Event, preventDefault)
import Web.HTML (window) import Web.HTML (window)
import Web.HTML.HTMLDocument (referrer) import Web.HTML.HTMLDocument (referrer)
import Web.HTML.Location (setHref, origin) import Web.HTML.Location (setHref, origin)
import DOM.HTML.Indexed.AutocompleteType (AutocompleteType(..))
data BAction data BAction
= BEditField EditField = BEditField EditField
@ -114,7 +115,7 @@ addbmark b' =
] ]
, tr_ , tr_
[ td_ [ label [ for "tags" ] [ text "tags" ] ] [ 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) , td_ [ input [ type_ InputText , id "tags", class_ "w-100 mv1" , name "tags", autocomplete AutocompleteOff, attr "autocapitalize" "off", autofocus (not $ null bm.url)
, value (edit_bm.tags) , onValueChange (editField Etags)] ] , value (edit_bm.tags) , onValueChange (editField Etags)] ]
] ]
, tr_ , tr_

View file

@ -27,6 +27,7 @@ import Model (Bookmark)
import Type.Proxy (Proxy(..)) import Type.Proxy (Proxy(..))
import Util (attr, class_, encodeTag, fromNullableStr, ifElseH, whenA, whenH) import Util (attr, class_, encodeTag, fromNullableStr, ifElseH, whenA, whenH)
import Web.Event.Event (Event, preventDefault) import Web.Event.Event (Event, preventDefault)
import DOM.HTML.Indexed.AutocompleteType (AutocompleteType(..))
-- | UI Events -- | UI Events
data BAction data BAction
@ -179,7 +180,7 @@ bmark b' =
, div [ id "tags_input_box"] , div [ id "tags_input_box"]
[ div_ [ text "tags" ] [ div_ [ text "tags" ]
, input [ id (tagid edit_bm), type_ InputText , class_ "tags w-100 mb1 pt1 edit_form_input" , name "tags" , input [ id (tagid edit_bm), type_ InputText , class_ "tags w-100 mb1 pt1 edit_form_input" , name "tags"
, autocomplete false, attr "autocapitalize" "off" , autocomplete AutocompleteOff, attr "autocapitalize" "off"
, value (edit_bm.tags) , onValueChange (editField Etags) ] , value (edit_bm.tags) , onValueChange (editField Etags) ]
] ]
, div [ class_ "edit_form_checkboxes mv3"] , div [ class_ "edit_form_checkboxes mv3"]

View file

@ -1,5 +1,5 @@
// use at your own risk! // use at your own risk!
exports.unsafeSetInnerHTML = function(element) { export const unsafeSetInnerHTML = function(element) {
return function(html) { return function(html) {
return function() { return function() {
element.innerHTML = html; element.innerHTML = html;

View file

@ -21,7 +21,7 @@ import Halogen as H
import Halogen.HTML (HTML, a, attr, button, div, text) import Halogen.HTML (HTML, a, attr, button, div, text)
import Halogen.HTML.Events (onClick) import Halogen.HTML.Events (onClick)
import Halogen.HTML.Properties (ButtonType(..), href, title, type_) import Halogen.HTML.Properties (ButtonType(..), href, title, type_)
import Math (log) import Data.Number (log)
import Model (TagCloud, TagCloudModeF(..), isExpanded, isRelated, setExpanded, tagCloudModeFromF) import Model (TagCloud, TagCloudModeF(..), isExpanded, isRelated, setExpanded, tagCloudModeFromF)
import Util (class_, encodeTag, fromNullableStr, ifElseA, whenH) import Util (class_, encodeTag, fromNullableStr, ifElseA, whenH)

View file

@ -1,12 +1,12 @@
"use strict"; "use strict";
var moment = require("moment"); import moment from 'moment'
exports._app = function() { export const _app = function() {
return app; return app;
} }
exports._closest = function(just, nothing, selector, el) { export const _closest = function(just, nothing, selector, el) {
var node = el.closest(selector); var node = el.closest(selector);
if(node) { if(node) {
return just(node); return just(node);
@ -15,26 +15,26 @@ exports._closest = function(just, nothing, selector, el) {
} }
} }
exports._createFormData = function(formElement) { export const _createFormData = function(formElement) {
return new FormData(formElement); return new FormData(formElement);
} }
exports._createFormString = function(formElement) { export const _createFormString = function(formElement) {
return new URLSearchParams(new FormData(formElement)).toString() return new URLSearchParams(new FormData(formElement)).toString()
} }
exports._createFormArray = function(formElement) { export const _createFormArray = function(formElement) {
return Array.from(new FormData(formElement)); return Array.from(new FormData(formElement));
} }
exports._moment8601 = function(tuple, s) { export const _moment8601 = function(tuple, s) {
var m = moment(s, moment.ISO_8601); var m = moment(s, moment.ISO_8601);
var s1 = m.fromNow(); var s1 = m.fromNow();
var s2 = m.format('MMMM D YYYY, h:mm a') + " (" + m.format() + ") "; var s2 = m.format('MMMM D YYYY, h:mm a') + " (" + m.format() + ") ";
return tuple(s1)(s2); return tuple(s1)(s2);
} }
exports._mmoment8601 = function(just, nothing, tuple, s) { export const _mmoment8601 = function(just, nothing, tuple, s) {
try { try {
var m = moment(s, moment.ISO_8601); var m = moment(s, moment.ISO_8601);
var s1 = m.fromNow(); var s1 = m.fromNow();
@ -45,15 +45,15 @@ exports._mmoment8601 = function(just, nothing, tuple, s) {
} }
} }
exports._closeWindow = function (window) { export const _closeWindow = function (window) {
window.close(); window.close();
}; };
exports._setFocus = function(elemId) { export const _setFocus = function(elemId) {
document.getElementById(elemId).focus(); document.getElementById(elemId).focus();
}; };
exports._toLocaleDateString = function(dateString) { export const _toLocaleDateString = function(dateString) {
return new Date(dateString).toLocaleDateString(undefined, {dateStyle: 'medium'}) return new Date(dateString).toLocaleDateString(undefined, {dateStyle: 'medium'})
} }

View file

@ -1,5 +0,0 @@
"use strict";
exports._mainImpl = function() {
return window.PS = PS;
}

View file

@ -21,11 +21,6 @@ import Web.DOM.ParentNode (QuerySelector(..))
import Web.Event.Event (Event, preventDefault) import Web.Event.Event (Event, preventDefault)
import Web.HTML.HTMLElement (toElement) import Web.HTML.HTMLElement (toElement)
foreign import _mainImpl :: Effect Unit
main :: Effect Unit
main = _mainImpl
logoutE :: Event -> Effect Unit logoutE :: Event -> Effect Unit
logoutE e = void <<< launchAff <<< logout =<< preventDefault e logoutE e = void <<< launchAff <<< logout =<< preventDefault e

View file

@ -1,12 +1,12 @@
var marked = require("marked"); import { marked } from 'marked';
var DOMPurify = require("dompurify"); import DOMPurify from "dompurify"
marked.setOptions({ marked.setOptions({
pedantic: false, pedantic: false,
gfm: true gfm: true
}); });
exports.markedImpl = function(str) { export const markedImpl = function(str) {
if (!str) return ""; if (!str) return "";
return DOMPurify.sanitize(marked(str)); return DOMPurify.sanitize(marked.parse(str));
}; };

View file

@ -15,7 +15,7 @@ getAccountSettingsR = do
app.dat.accountSettings = #{ toJSON accountSettings } || []; app.dat.accountSettings = #{ toJSON accountSettings } || [];
|] |]
toWidget [julius| toWidget [julius|
PS['Main'].renderAccountSettings('##{rawJS accountSettingsEl}')(app.dat.accountSettings)(); PS.renderAccountSettings('##{rawJS accountSettingsEl}')(app.dat.accountSettings)();
|] |]
postEditAccountSettingsR :: Handler () postEditAccountSettingsR :: Handler ()

View file

@ -26,7 +26,7 @@ getAddViewR = do
app.dat.bmark = #{ toJSON (fromMaybe formurl mformdb) }; app.dat.bmark = #{ toJSON (fromMaybe formurl mformdb) };
|] |]
toWidget [julius| toWidget [julius|
PS['Main'].renderAddForm('##{rawJS renderEl}')(app.dat.bmark)(); PS.renderAddForm('##{rawJS renderEl}')(app.dat.bmark)();
|] |]
bookmarkFormUrl :: Handler BookmarkForm bookmarkFormUrl :: Handler BookmarkForm

View file

@ -39,7 +39,7 @@ getNotesR unamep@(UserNameP uname) = do
app.dat.isowner = #{ isowner }; app.dat.isowner = #{ isowner };
|] |]
toWidget [julius| toWidget [julius|
PS['Main'].renderNotes('##{rawJS renderEl}')(app.dat.notes)(); PS.renderNotes('##{rawJS renderEl}')(app.dat.notes)();
|] |]
getNoteR :: UserNameP -> NtSlug -> Handler Html getNoteR :: UserNameP -> NtSlug -> Handler Html
@ -63,7 +63,7 @@ getNoteR unamep@(UserNameP uname) slug = do
app.dat.isowner = #{ isowner }; app.dat.isowner = #{ isowner };
|] |]
toWidget [julius| toWidget [julius|
PS['Main'].renderNote('##{rawJS renderEl}')(app.dat.note)(); PS.renderNote('##{rawJS renderEl}')(app.dat.note)();
|] |]
getAddNoteSlimViewR :: Handler Html getAddNoteSlimViewR :: Handler Html
@ -85,7 +85,7 @@ getAddNoteViewR unamep@(UserNameP uname) = do
app.dat.note = #{ toJSON enote } || []; app.dat.note = #{ toJSON enote } || [];
|] |]
toWidget [julius| toWidget [julius|
PS['Main'].renderNote('##{rawJS renderEl}')(app.dat.note)(); PS.renderNote('##{rawJS renderEl}')(app.dat.note)();
|] |]
deleteDeleteNoteR :: Int64 -> Handler Html deleteDeleteNoteR :: Int64 -> Handler Html

View file

@ -63,10 +63,10 @@ _getUser unamep@(UserNameP uname) sharedp' filterp' (TagsP pathtags) = do
|] |]
toWidget [julius| toWidget [julius|
setTimeout(() => { setTimeout(() => {
PS['Main'].renderBookmarks('##{rawJS renderEl}')(app.dat.bmarks)(); PS.renderBookmarks('##{rawJS renderEl}')(app.dat.bmarks)();
}, 0); }, 0);
setTimeout(() => { setTimeout(() => {
PS['Main'].renderTagCloud('##{rawJS tagCloudRenderEl}')(app.tagCloudMode)(); PS.renderTagCloud('##{rawJS tagCloudRenderEl}')(app.tagCloudMode)();
}, 0); }, 0);
|] |]

84
static/js/app.min.js vendored

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

View file

@ -18,7 +18,7 @@
<a .link href="@{AddNoteViewR (UserNameP userName)}">add note&nbsp;&nbsp; <a .link href="@{AddNoteViewR (UserNameP userName)}">add note&nbsp;&nbsp;
<a .link href="@{NotesR (UserNameP userName)}">notes&nbsp;&nbsp; <a .link href="@{NotesR (UserNameP userName)}">notes&nbsp;&nbsp;
<a .link href="@{AccountSettingsR}">settings&nbsp;&nbsp; <a .link href="@{AccountSettingsR}">settings&nbsp;&nbsp;
<a .link onclick="PS['Main'].logoutE(event)()" href="@{AuthR LogoutR}"> <a .link onclick="PS.logoutE(event)()" href="@{AuthR LogoutR}">
log out log out
$nothing $nothing
<a .link href="@{AuthR LoginR}"> <a .link href="@{AuthR LoginR}">

View file

@ -5,7 +5,7 @@
- (#{userName}) - (#{userName})
<div .fr> <div .fr>
$maybe userName <- musername $maybe userName <- musername
<a .link onclick="PS['Main'].logoutE(event)()" href="@{AuthR LogoutR}"> <a .link onclick="PS.logoutE(event)()" href="@{AuthR LogoutR}">
[log out] [log out]
$nothing $nothing
<a .link href="@{AuthR LoginR}"> <a .link href="@{AuthR LoginR}">