mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-06 15:15:58 +00:00
Allow to set item notes below or above the files
This commit is contained in:
parent
0453494cc6
commit
baa25d0f2f
@ -65,11 +65,20 @@ view inav settings model =
|
|||||||
]
|
]
|
||||||
<|
|
<|
|
||||||
List.concat
|
List.concat
|
||||||
[ [ renderAttachmentsTabMenu model
|
[ if settings.itemDetailNotesPosition == Data.UiSettings.Top then
|
||||||
|
[ renderNotes model ]
|
||||||
|
|
||||||
|
else
|
||||||
|
[]
|
||||||
|
, [ renderAttachmentsTabMenu model
|
||||||
]
|
]
|
||||||
, renderAttachmentsTabBody settings model
|
, renderAttachmentsTabBody settings model
|
||||||
, [ renderNotes model ]
|
|
||||||
, renderIdInfo model
|
, renderIdInfo model
|
||||||
|
, if settings.itemDetailNotesPosition == Data.UiSettings.Bottom then
|
||||||
|
[ renderNotes model ]
|
||||||
|
|
||||||
|
else
|
||||||
|
[]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
@ -166,18 +175,25 @@ actionInputDatePicker =
|
|||||||
|
|
||||||
renderIdInfo : Model -> List (Html msg)
|
renderIdInfo : Model -> List (Html msg)
|
||||||
renderIdInfo model =
|
renderIdInfo model =
|
||||||
|
[ div [ class "ui bottom attached segment" ]
|
||||||
[ div [ class "ui center aligned container" ]
|
[ div [ class "ui center aligned container" ]
|
||||||
[ span [ class "small-info" ]
|
[ div [ class "ui bulleted mini horizontal list small-info" ]
|
||||||
[ text model.item.id
|
[ div [ class "item" ]
|
||||||
, text " • "
|
[ i [ class "bullseye icon" ] []
|
||||||
, text "Created: "
|
, text model.item.id
|
||||||
|
]
|
||||||
|
, div [ class "item" ]
|
||||||
|
[ i [ class "sun outline icon" ] []
|
||||||
, Util.Time.formatDateTime model.item.created |> text
|
, Util.Time.formatDateTime model.item.created |> text
|
||||||
, text " • "
|
]
|
||||||
, text "Updated: "
|
, div [ class "item" ]
|
||||||
|
[ i [ class "pencil alternate icon" ] []
|
||||||
, Util.Time.formatDateTime model.item.updated |> text
|
, Util.Time.formatDateTime model.item.updated |> text
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
renderNotes : Model -> Html Msg
|
renderNotes : Model -> Html Msg
|
||||||
@ -224,7 +240,7 @@ renderNotes model =
|
|||||||
[ text "Notes"
|
[ text "Notes"
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
, div [ class "twelve wide center aligned column" ]
|
, div [ class "eleven wide center aligned column" ]
|
||||||
[ div [ class "ui horizontal bulleted link list" ]
|
[ div [ class "ui horizontal bulleted link list" ]
|
||||||
[ Html.map NotesEditMsg
|
[ Html.map NotesEditMsg
|
||||||
(Comp.MarkdownInput.viewEditLink classes mm)
|
(Comp.MarkdownInput.viewEditLink classes mm)
|
||||||
@ -234,16 +250,9 @@ renderNotes model =
|
|||||||
(Comp.MarkdownInput.viewSplitLink classes mm)
|
(Comp.MarkdownInput.viewSplitLink classes mm)
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
, div [ class "right aligned two wide column" ]
|
, div [ class "right aligned three wide column" ]
|
||||||
[ a
|
[ div [ class "ui horizontal link list" ]
|
||||||
[ classList
|
[ Comp.MarkdownInput.viewCheatLink "item" mm
|
||||||
[ ( "ui basic icon link", True )
|
|
||||||
, ( "invisible hidden", Util.String.isNothingOrBlank model.item.notes )
|
|
||||||
]
|
|
||||||
, onClick ToggleEditNotes
|
|
||||||
, href "#"
|
|
||||||
]
|
|
||||||
[ i [ class "cancel icon" ] []
|
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
@ -675,14 +684,16 @@ renderTags settings model =
|
|||||||
|
|
||||||
renderEditMenu : UiSettings -> Model -> List (Html Msg)
|
renderEditMenu : UiSettings -> Model -> List (Html Msg)
|
||||||
renderEditMenu settings model =
|
renderEditMenu settings model =
|
||||||
|
[ div [ class "ui segments" ]
|
||||||
[ renderEditButtons model
|
[ renderEditButtons model
|
||||||
, renderEditForm settings model
|
, renderEditForm settings model
|
||||||
]
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
renderEditButtons : Model -> Html Msg
|
renderEditButtons : Model -> Html Msg
|
||||||
renderEditButtons model =
|
renderEditButtons model =
|
||||||
div [ class "ui top attached segment" ]
|
div [ class "ui segment" ]
|
||||||
[ button
|
[ button
|
||||||
[ classList
|
[ classList
|
||||||
[ ( "ui primary button", True )
|
[ ( "ui primary button", True )
|
||||||
@ -723,7 +734,7 @@ renderEditForm settings model =
|
|||||||
[ i [ class "grey plus link icon" ] []
|
[ i [ class "grey plus link icon" ] []
|
||||||
]
|
]
|
||||||
in
|
in
|
||||||
div [ class "ui attached segment" ]
|
div [ class "ui segment" ]
|
||||||
[ div [ class "ui form warning" ]
|
[ div [ class "ui form warning" ]
|
||||||
[ div [ class "field" ]
|
[ div [ class "field" ]
|
||||||
[ label []
|
[ label []
|
||||||
|
@ -12,7 +12,7 @@ import Comp.ColorTagger
|
|||||||
import Comp.IntField
|
import Comp.IntField
|
||||||
import Data.Color exposing (Color)
|
import Data.Color exposing (Color)
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Data.UiSettings exposing (UiSettings)
|
import Data.UiSettings exposing (Pos(..), UiSettings)
|
||||||
import Dict exposing (Dict)
|
import Dict exposing (Dict)
|
||||||
import Html exposing (..)
|
import Html exposing (..)
|
||||||
import Html.Attributes exposing (..)
|
import Html.Attributes exposing (..)
|
||||||
@ -29,6 +29,7 @@ type alias Model =
|
|||||||
, nativePdfPreview : Bool
|
, nativePdfPreview : Bool
|
||||||
, itemSearchNoteLength : Maybe Int
|
, itemSearchNoteLength : Maybe Int
|
||||||
, searchNoteLengthModel : Comp.IntField.Model
|
, searchNoteLengthModel : Comp.IntField.Model
|
||||||
|
, itemDetailNotesPosition : Pos
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -54,6 +55,7 @@ init flags settings =
|
|||||||
(Just flags.config.maxNoteLength)
|
(Just flags.config.maxNoteLength)
|
||||||
False
|
False
|
||||||
"Max. Note Length"
|
"Max. Note Length"
|
||||||
|
, itemDetailNotesPosition = settings.itemDetailNotesPosition
|
||||||
}
|
}
|
||||||
, Api.getTags flags "" GetTagsResp
|
, Api.getTags flags "" GetTagsResp
|
||||||
)
|
)
|
||||||
@ -65,6 +67,7 @@ type Msg
|
|||||||
| GetTagsResp (Result Http.Error TagList)
|
| GetTagsResp (Result Http.Error TagList)
|
||||||
| TogglePdfPreview
|
| TogglePdfPreview
|
||||||
| NoteLengthMsg Comp.IntField.Msg
|
| NoteLengthMsg Comp.IntField.Msg
|
||||||
|
| SetNotesPosition Pos
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -106,6 +109,17 @@ update sett msg model =
|
|||||||
in
|
in
|
||||||
( model_, nextSettings )
|
( model_, nextSettings )
|
||||||
|
|
||||||
|
SetNotesPosition pos ->
|
||||||
|
let
|
||||||
|
model_ =
|
||||||
|
{ model | itemDetailNotesPosition = pos }
|
||||||
|
in
|
||||||
|
if model_.itemDetailNotesPosition == sett.itemDetailNotesPosition then
|
||||||
|
( model_, Nothing )
|
||||||
|
|
||||||
|
else
|
||||||
|
( model_, Just { sett | itemDetailNotesPosition = model_.itemDetailNotesPosition } )
|
||||||
|
|
||||||
TagColorMsg lm ->
|
TagColorMsg lm ->
|
||||||
let
|
let
|
||||||
( m_, d_ ) =
|
( m_, d_ ) =
|
||||||
@ -207,6 +221,31 @@ view flags _ model =
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
, div [ class "grouped fields" ]
|
||||||
|
[ label [] [ text "Position of item notes" ]
|
||||||
|
, div [ class "field" ]
|
||||||
|
[ div [ class "ui radio checkbox" ]
|
||||||
|
[ input
|
||||||
|
[ type_ "radio"
|
||||||
|
, checked (model.itemDetailNotesPosition == Top)
|
||||||
|
, onCheck (\_ -> SetNotesPosition Top)
|
||||||
|
]
|
||||||
|
[]
|
||||||
|
, label [] [ text "Top" ]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
, div [ class "field" ]
|
||||||
|
[ div [ class "ui radio checkbox" ]
|
||||||
|
[ input
|
||||||
|
[ type_ "radio"
|
||||||
|
, checked (model.itemDetailNotesPosition == Bottom)
|
||||||
|
, onCheck (\_ -> SetNotesPosition Bottom)
|
||||||
|
]
|
||||||
|
[]
|
||||||
|
, label [] [ text "Bottom" ]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
, div [ class "ui dividing header" ]
|
, div [ class "ui dividing header" ]
|
||||||
[ text "Tag Category Colors"
|
[ text "Tag Category Colors"
|
||||||
]
|
]
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
module Data.UiSettings exposing
|
module Data.UiSettings exposing
|
||||||
( StoredUiSettings
|
( Pos(..)
|
||||||
|
, StoredUiSettings
|
||||||
, UiSettings
|
, UiSettings
|
||||||
, defaults
|
, defaults
|
||||||
, merge
|
, merge
|
||||||
, mergeDefaults
|
, mergeDefaults
|
||||||
|
, posFromString
|
||||||
|
, posToString
|
||||||
, tagColor
|
, tagColor
|
||||||
, tagColorString
|
, tagColorString
|
||||||
, toStoredUiSettings
|
, toStoredUiSettings
|
||||||
@ -27,6 +30,7 @@ type alias StoredUiSettings =
|
|||||||
, tagCategoryColors : List ( String, String )
|
, tagCategoryColors : List ( String, String )
|
||||||
, nativePdfPreview : Bool
|
, nativePdfPreview : Bool
|
||||||
, itemSearchNoteLength : Maybe Int
|
, itemSearchNoteLength : Maybe Int
|
||||||
|
, itemDetailNotesPosition : Maybe String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -42,15 +46,45 @@ type alias UiSettings =
|
|||||||
, tagCategoryColors : Dict String Color
|
, tagCategoryColors : Dict String Color
|
||||||
, nativePdfPreview : Bool
|
, nativePdfPreview : Bool
|
||||||
, itemSearchNoteLength : Int
|
, itemSearchNoteLength : Int
|
||||||
|
, itemDetailNotesPosition : Pos
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type Pos
|
||||||
|
= Top
|
||||||
|
| Bottom
|
||||||
|
|
||||||
|
|
||||||
|
posToString : Pos -> String
|
||||||
|
posToString pos =
|
||||||
|
case pos of
|
||||||
|
Top ->
|
||||||
|
"top"
|
||||||
|
|
||||||
|
Bottom ->
|
||||||
|
"bottom"
|
||||||
|
|
||||||
|
|
||||||
|
posFromString : String -> Maybe Pos
|
||||||
|
posFromString str =
|
||||||
|
case str of
|
||||||
|
"top" ->
|
||||||
|
Just Top
|
||||||
|
|
||||||
|
"bottom" ->
|
||||||
|
Just Bottom
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
Nothing
|
||||||
|
|
||||||
|
|
||||||
defaults : UiSettings
|
defaults : UiSettings
|
||||||
defaults =
|
defaults =
|
||||||
{ itemSearchPageSize = 60
|
{ itemSearchPageSize = 60
|
||||||
, tagCategoryColors = Dict.empty
|
, tagCategoryColors = Dict.empty
|
||||||
, nativePdfPreview = False
|
, nativePdfPreview = False
|
||||||
, itemSearchNoteLength = 0
|
, itemSearchNoteLength = 0
|
||||||
|
, itemDetailNotesPosition = Top
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -69,6 +103,9 @@ merge given fallback =
|
|||||||
, nativePdfPreview = given.nativePdfPreview
|
, nativePdfPreview = given.nativePdfPreview
|
||||||
, itemSearchNoteLength =
|
, itemSearchNoteLength =
|
||||||
choose given.itemSearchNoteLength fallback.itemSearchNoteLength
|
choose given.itemSearchNoteLength fallback.itemSearchNoteLength
|
||||||
|
, itemDetailNotesPosition =
|
||||||
|
choose (Maybe.andThen posFromString given.itemDetailNotesPosition)
|
||||||
|
fallback.itemDetailNotesPosition
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -85,6 +122,7 @@ toStoredUiSettings settings =
|
|||||||
|> Dict.toList
|
|> Dict.toList
|
||||||
, nativePdfPreview = settings.nativePdfPreview
|
, nativePdfPreview = settings.nativePdfPreview
|
||||||
, itemSearchNoteLength = Just settings.itemSearchNoteLength
|
, itemSearchNoteLength = Just settings.itemSearchNoteLength
|
||||||
|
, itemDetailNotesPosition = Just (posToString settings.itemDetailNotesPosition)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -122,7 +122,7 @@ textarea.markdown-editor {
|
|||||||
max-height: 300px;
|
max-height: 300px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border: 0;
|
border: 0;
|
||||||
min-height: 10em;
|
min-height: 5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.default-layout .job-log {
|
.default-layout .job-log {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user