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__
add setting ALLOW_NON_HTTP_URL_SCHEMES (default false)

View file

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

View file

@ -9,16 +9,16 @@ build:
@npm run spago build
bundle: build
@npm run spago -- bundle-app --to dist/bundle.js
@npm run parcel-build
@npm run esbuild-bundle
@npm run esbuild-bundle-min
@rm -f dist/*.gz
@gzip -k dist/app.min.js.map
@gzip -k dist/app.min.js
@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.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:
@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",
"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",
"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": {
"marked": "^3.0.2",
"moment": "^2.29.1",
"parcel-bundler": "^1.12.5",
"purescript": "^0.14.9",
"spago": "^0.20.7",
"terser": "^5.12.1"
"esbuild": "0.14.42",
"purescript": "0.15.2",
"spago": "0.20.9"
},
"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 =
https://raw.githubusercontent.com/purescript/package-sets/psc-0.14.7-20220404/src/packages.dhall
sha256:75d0f0719f32456e6bdc3efd41cfc64785655d2b751e3d080bd849033ed053f2
https://raw.githubusercontent.com/purescript/package-sets/psc-0.15.2-20220531/src/packages.dhall
sha256:278d3608439187e51136251ebf12fabda62d41ceb4bec9769312a08b56f853e3
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 =
[ "aff"
, "affjax"
, "affjax-web"
, "argonaut"
, "arrays"
, "console"
, "const"
, "dom-indexed"
, "effect"
, "either"
, "foldable-traversable"
@ -18,11 +20,11 @@
, "http-methods"
, "integers"
, "js-uri"
, "math"
, "maybe"
, "media-types"
, "newtype"
, "nullable"
, "numbers"
, "partial"
, "prelude"
, "profunctor-lenses"

View file

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

View file

@ -25,6 +25,7 @@ import Web.Event.Event (Event, preventDefault)
import Web.HTML (window)
import Web.HTML.HTMLDocument (referrer)
import Web.HTML.Location (setHref, origin)
import DOM.HTML.Indexed.AutocompleteType (AutocompleteType(..))
data BAction
= BEditField EditField
@ -114,7 +115,7 @@ addbmark b' =
]
, 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)
, 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)] ]
]
, tr_

View file

@ -27,6 +27,7 @@ import Model (Bookmark)
import Type.Proxy (Proxy(..))
import Util (attr, class_, encodeTag, fromNullableStr, ifElseH, whenA, whenH)
import Web.Event.Event (Event, preventDefault)
import DOM.HTML.Indexed.AutocompleteType (AutocompleteType(..))
-- | UI Events
data BAction
@ -179,7 +180,7 @@ bmark b' =
, div [ id "tags_input_box"]
[ div_ [ text "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) ]
]
, div [ class_ "edit_form_checkboxes mv3"]

View file

@ -1,5 +1,5 @@
// use at your own risk!
exports.unsafeSetInnerHTML = function(element) {
export const unsafeSetInnerHTML = function(element) {
return function(html) {
return function() {
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.Events (onClick)
import Halogen.HTML.Properties (ButtonType(..), href, title, type_)
import Math (log)
import Data.Number (log)
import Model (TagCloud, TagCloudModeF(..), isExpanded, isRelated, setExpanded, tagCloudModeFromF)
import Util (class_, encodeTag, fromNullableStr, ifElseA, whenH)

View file

@ -1,12 +1,12 @@
"use strict";
var moment = require("moment");
import moment from 'moment'
exports._app = function() {
export const _app = function() {
return app;
}
exports._closest = function(just, nothing, selector, el) {
export const _closest = function(just, nothing, selector, el) {
var node = el.closest(selector);
if(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);
}
exports._createFormString = function(formElement) {
export const _createFormString = function(formElement) {
return new URLSearchParams(new FormData(formElement)).toString()
}
exports._createFormArray = function(formElement) {
export const _createFormArray = function(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 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) {
export const _mmoment8601 = function(just, nothing, tuple, s) {
try {
var m = moment(s, moment.ISO_8601);
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();
};
exports._setFocus = function(elemId) {
export const _setFocus = function(elemId) {
document.getElementById(elemId).focus();
};
exports._toLocaleDateString = function(dateString) {
export const _toLocaleDateString = function(dateString) {
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.HTML.HTMLElement (toElement)
foreign import _mainImpl :: Effect Unit
main :: Effect Unit
main = _mainImpl
logoutE :: Event -> Effect Unit
logoutE e = void <<< launchAff <<< logout =<< preventDefault e

View file

@ -1,12 +1,12 @@
var marked = require("marked");
var DOMPurify = require("dompurify");
import { marked } from 'marked';
import DOMPurify from "dompurify"
marked.setOptions({
pedantic: false,
gfm: true
});
exports.markedImpl = function(str) {
export const markedImpl = function(str) {
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 } || [];
|]
toWidget [julius|
PS['Main'].renderAccountSettings('##{rawJS accountSettingsEl}')(app.dat.accountSettings)();
PS.renderAccountSettings('##{rawJS accountSettingsEl}')(app.dat.accountSettings)();
|]
postEditAccountSettingsR :: Handler ()

View file

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

View file

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

View file

@ -63,10 +63,10 @@ _getUser unamep@(UserNameP uname) sharedp' filterp' (TagsP pathtags) = do
|]
toWidget [julius|
setTimeout(() => {
PS['Main'].renderBookmarks('##{rawJS renderEl}')(app.dat.bmarks)();
PS.renderBookmarks('##{rawJS renderEl}')(app.dat.bmarks)();
}, 0);
setTimeout(() => {
PS['Main'].renderTagCloud('##{rawJS tagCloudRenderEl}')(app.tagCloudMode)();
PS.renderTagCloud('##{rawJS tagCloudRenderEl}')(app.tagCloudMode)();
}, 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="@{NotesR (UserNameP userName)}">notes&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
$nothing
<a .link href="@{AuthR LoginR}">

View file

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