summaryrefslogtreecommitdiff
path: root/elm/Reviews/Edit.elm
diff options
context:
space:
mode:
Diffstat (limited to 'elm/Reviews/Edit.elm')
-rw-r--r--elm/Reviews/Edit.elm69
1 files changed, 41 insertions, 28 deletions
diff --git a/elm/Reviews/Edit.elm b/elm/Reviews/Edit.elm
index 5b3bc347..b122d1ba 100644
--- a/elm/Reviews/Edit.elm
+++ b/elm/Reviews/Edit.elm
@@ -26,15 +26,18 @@ main = Browser.element
type alias Model =
{ state : Api.State
, id : Maybe String
- , vid : Int
+ , vid : String
, vntitle : String
- , rid : Maybe Int
+ , rid : Maybe String
, spoiler : Bool
+ , locked : Bool
, isfull : Bool
+ , modnote : String
, text : TP.Model
, releases : List GRE.RecvReleases
, delete : Bool
, delState : Api.State
+ , mod : Bool
}
@@ -46,11 +49,14 @@ init d =
, vntitle = d.vntitle
, rid = d.rid
, spoiler = d.spoiler
+ , locked = d.locked
, isfull = d.isfull
+ , modnote = d.modnote
, text = TP.bbcode d.text
, releases = d.releases
, delete = False
, delState = Api.Normal
+ , mod = d.mod
}
@@ -60,15 +66,19 @@ encode m =
, vid = m.vid
, rid = m.rid
, spoiler = m.spoiler
+ , locked = m.locked
+ , modnote = m.modnote
, isfull = m.isfull
, text = m.text.data
}
type Msg
- = Release (Maybe Int)
+ = Release (Maybe String)
| Full Bool
| Spoiler Bool
+ | Locked Bool
+ | Modnote String
| Text TP.Msg
| Submit
| Submitted GApi.Response
@@ -83,6 +93,8 @@ update msg model =
Release i -> ({ model | rid = i }, Cmd.none)
Full b -> ({ model | isfull = b }, Cmd.none)
Spoiler b -> ({ model | spoiler = b }, Cmd.none)
+ Locked b -> ({ model | locked = b }, Cmd.none)
+ Modnote s -> ({ model | modnote = s }, Cmd.none)
Text m -> let (nm,nc) = TP.update m model.text in ({ model | text = nm }, Cmd.map Text nc)
Submit -> ({ model | state = Api.Loading }, GRE.send (encode model) Submitted)
@@ -91,22 +103,20 @@ update msg model =
Delete b -> ({ model | delete = b }, Cmd.none)
DoDelete -> ({ model | delState = Api.Loading }, GRD.send ({ id = Maybe.withDefault "" model.id }) Deleted)
- Deleted GApi.Success -> (model, load <| "/v" ++ String.fromInt model.vid)
+ Deleted GApi.Success -> (model, load <| "/" ++ model.vid)
Deleted r -> ({ model | delState = Api.Error r }, Cmd.none)
-showrel r = "[" ++ (RDate.format (RDate.expand r.released)) ++ " " ++ (String.join "," r.lang) ++ "] " ++ r.title ++ " (r" ++ String.fromInt r.id ++ ")"
-
view : Model -> Html Msg
view model =
let minChars = if model.isfull then 1000 else 200
maxChars = if model.isfull then 100000 else 800
len = String.length model.text.data
in
- form_ Submit (model.state == Api.Loading)
- [ div [ class "mainbox" ]
+ form_ "" Submit (model.state == Api.Loading)
+ [ article []
[ h1 [] [ text <| if model.id == Nothing then "Submit a review" else "Edit review" ]
- , p [] [ b [] [ text "Rules" ] ]
+ , p [] [ strong [] [ text "Rules" ] ]
, ul []
[ li [] [ text "Submit only reviews you have written yourself!" ]
, li [] [ text "Reviews must be in English." ]
@@ -116,69 +126,72 @@ view model =
]
, br [] []
]
- , div [ class "mainbox" ]
+ , article []
[ table [ class "formtable" ]
- [ formField "Subject" [ a [ href <| "/v"++String.fromInt model.vid ] [ text model.vntitle ] ]
+ [ formField "Subject" [ a [ href <| "/"++model.vid ] [ text model.vntitle ] ]
, formField ""
[ inputSelect "" model.rid Release [style "width" "500px" ] <|
(Nothing, "No release selected")
- :: List.map (\r -> (Just r.id, showrel r)) model.releases
- ++ if model.rid == Nothing || List.any (\r -> Just r.id == model.rid) model.releases then [] else [(model.rid, "Deleted or moved release: r"++Maybe.withDefault "" (Maybe.map String.fromInt model.rid))]
+ :: List.map (\r -> (Just r.id, RDate.showrel r)) model.releases
+ ++ if model.rid == Nothing || List.any (\r -> Just r.id == model.rid) model.releases then [] else [(model.rid, "Deleted or moved release: r"++Maybe.withDefault "" model.rid)]
, br [] []
, text "You do not have to select a release, but indicating which release your review is based on gives more context."
]
, tr [ class "newpart" ] [ td [ colspan 2 ] [ text "" ] ]
, formField "Review type"
- [ label [] [ inputRadio "type" (model.isfull == False) (\_ -> Full False), b [] [ text " Mini review" ]
+ [ label [] [ inputRadio "type" (model.isfull == False) (\_ -> Full False), strong [] [ text " Mini review" ]
, text <| " - Recommendation-style, maximum 800 characters." ]
, br [] []
- , label [] [ inputRadio "type" (model.isfull == True ) (\_ -> Full True ), b [] [ text " Full review" ]
+ , label [] [ inputRadio "type" (model.isfull == True ) (\_ -> Full True ), strong [] [ text " Full review" ]
, text " - Longer, more detailed." ]
, br [] []
- , b [ class "grayedout" ] [ text "You can always switch between review types later." ]
+ , small [] [ text "You can always switch between review types later." ]
]
, tr [ class "newpart" ] [ td [ colspan 2 ] [ text "" ] ]
, formField ""
[ label [] [ inputCheck "" model.spoiler Spoiler, text " This review contains spoilers." ]
, br [] []
- , b [ class "grayedout" ] [ text "You do not have to check this option if all spoilers in your review are marked with [spoiler] tags." ]
+ , small [] [ text "You do not have to check this option if all spoilers in your review are marked with [spoiler] tags." ]
]
+ , if not model.mod then text "" else
+ formField "" [ label [] [ inputCheck "" model.locked Locked, text " Locked for commenting." ] ]
+ , if not model.mod then text "" else
+ formField "modnote::Mod note"
+ [ inputText "modnote" model.modnote Modnote (style "width" "500px" :: GRE.valModnote)
+ , br [] [], text "Moderation note intended to inform readers of the review that its author may be biased and failed to disclose that." ]
+
, tr [ class "newpart" ] [ td [ colspan 2 ] [ text "" ] ]
, formField "text::Review"
[ TP.view "sum" model.text Text 700 ([rows (if model.isfull then 30 else 10), cols 50] ++ GRE.valText)
- [ a [ href "/d9#3" ] [ text "BBCode formatting supported" ] ]
+ [ a [ href "/d9#4" ] [ text "BBCode formatting supported" ] ]
, div [ style "width" "700px", style "text-align" "right" ] <|
- let num c s = if c then b [ class " standout" ] [ text s ] else text s
+ let num c s = if c then b [] [ text s ] else text s
in
[ num (len < minChars) (String.fromInt minChars)
, text " / "
- , b [] [ text (String.fromInt len) ]
+ , strong [] [ text (String.fromInt len) ]
, text " / "
, num (len > maxChars) (if model.isfull then "∞" else String.fromInt maxChars)
]
]
]
]
- , div [ class "mainbox" ]
- [ fieldset [ class "submit" ]
- [ submitButton "Submit" model.state (len <= maxChars && len >= minChars)
- ]
- ]
+ , article [ class "submit" ] [ submitButton "Submit" model.state (len <= maxChars && len >= minChars) ]
, if model.id == Nothing then text "" else
- div [ class "mainbox" ]
+ article []
[ h1 [] [ text "Delete review" ]
, table [ class "formtable" ] [ formField ""
[ label [] [ inputCheck "" model.delete Delete, text " Delete this review." ]
, if not model.delete then text "" else span []
[ br [] []
- , b [ class "standout" ] [ text "WARNING:" ]
+ , b [] [ text "WARNING:" ]
, text " Deleting this review is a permanent action and can not be reverted!"
, br [] []
, br [] []
, inputButton "Confirm delete" DoDelete []
, case model.delState of
Api.Loading -> span [ class "spinner" ] []
- Api.Error e -> b [ class "standout" ] [ text <| Api.showResponse e ]
+ Api.Error e -> b [] [ text <| Api.showResponse e ]
Api.Normal -> text ""
]
] ]