Merge pull request #651 from eikek/language-source

Add language to a source
This commit is contained in:
mergify[bot] 2021-02-19 01:30:24 +00:00 committed by GitHub
commit 9156e56d65
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 92 additions and 15 deletions

View File

@ -175,7 +175,8 @@ object OUpload {
fileFilter = fileFilter =
if (data.meta.fileFilter == Glob.all) src.source.fileFilterOrAll if (data.meta.fileFilter == Glob.all) src.source.fileFilterOrAll
else data.meta.fileFilter, else data.meta.fileFilter,
tags = (data.meta.tags ++ src.tags.map(_.tagId.id)).distinct tags = (data.meta.tags ++ src.tags.map(_.tagId.id)).distinct,
language = data.meta.language.orElse(src.source.language)
), ),
priority = src.source.priority priority = src.source.priority
) )

View File

@ -4924,6 +4924,9 @@ components:
fileFilter: fileFilter:
type: string type: string
format: glob format: glob
language:
type: string
format: language
created: created:
description: DateTime description: DateTime
type: integer type: integer

View File

@ -583,6 +583,7 @@ trait Conversions {
s.source.priority, s.source.priority,
s.source.folderId, s.source.folderId,
s.source.fileFilter, s.source.fileFilter,
s.source.language,
s.source.created s.source.created
), ),
TagList(s.tags.length, s.tags.map(mkTag).toList) TagList(s.tags.length, s.tags.map(mkTag).toList)
@ -600,7 +601,8 @@ trait Conversions {
s.priority, s.priority,
now, now,
s.folder, s.folder,
s.fileFilter s.fileFilter,
s.language
) )
}) })
@ -615,7 +617,8 @@ trait Conversions {
s.priority, s.priority,
s.created, s.created,
s.folder, s.folder,
s.fileFilter s.fileFilter,
s.language
) )
// equipment // equipment

View File

@ -0,0 +1,2 @@
ALTER TABLE "source"
ADD COLUMN "doc_lang" varchar(254);

View File

@ -0,0 +1,2 @@
ALTER TABLE `source`
ADD COLUMN `doc_lang` varchar(254);

View File

@ -0,0 +1,2 @@
ALTER TABLE "source"
ADD COLUMN "doc_lang" varchar(254);

View File

@ -19,7 +19,8 @@ case class RSource(
priority: Priority, priority: Priority,
created: Timestamp, created: Timestamp,
folderId: Option[Ident], folderId: Option[Ident],
fileFilter: Option[Glob] fileFilter: Option[Glob],
language: Option[Language]
) { ) {
def fileFilterOrAll: Glob = def fileFilterOrAll: Glob =
@ -41,6 +42,7 @@ object RSource {
val created = Column[Timestamp]("created", this) val created = Column[Timestamp]("created", this)
val folder = Column[Ident]("folder_id", this) val folder = Column[Ident]("folder_id", this)
val fileFilter = Column[Glob]("file_filter", this) val fileFilter = Column[Glob]("file_filter", this)
val language = Column[Language]("doc_lang", this)
val all = val all =
NonEmptyList.of[Column[_]]( NonEmptyList.of[Column[_]](
@ -53,7 +55,8 @@ object RSource {
priority, priority,
created, created,
folder, folder,
fileFilter fileFilter,
language
) )
} }
@ -66,7 +69,7 @@ object RSource {
DML.insert( DML.insert(
table, table,
table.all, table.all,
fr"${v.sid},${v.cid},${v.abbrev},${v.description},${v.counter},${v.enabled},${v.priority},${v.created},${v.folderId},${v.fileFilter}" fr"${v.sid},${v.cid},${v.abbrev},${v.description},${v.counter},${v.enabled},${v.priority},${v.created},${v.folderId},${v.fileFilter},${v.language}"
) )
def updateNoCounter(v: RSource): ConnectionIO[Int] = def updateNoCounter(v: RSource): ConnectionIO[Int] =
@ -80,7 +83,8 @@ object RSource {
table.enabled.setTo(v.enabled), table.enabled.setTo(v.enabled),
table.priority.setTo(v.priority), table.priority.setTo(v.priority),
table.folder.setTo(v.folderId), table.folder.setTo(v.folderId),
table.fileFilter.setTo(v.fileFilter) table.fileFilter.setTo(v.fileFilter),
table.language.setTo(v.language)
) )
) )

View File

@ -21,6 +21,7 @@ import Comp.Dropdown exposing (isDropdownChangeMsg)
import Comp.FixedDropdown import Comp.FixedDropdown
import Data.DropdownStyle as DS import Data.DropdownStyle as DS
import Data.Flags exposing (Flags) import Data.Flags exposing (Flags)
import Data.Language exposing (Language)
import Data.Priority exposing (Priority) import Data.Priority exposing (Priority)
import Data.UiSettings exposing (UiSettings) import Data.UiSettings exposing (UiSettings)
import Html exposing (..) import Html exposing (..)
@ -47,6 +48,8 @@ type alias Model =
, folderId : Maybe String , folderId : Maybe String
, tagModel : Comp.Dropdown.Model Tag , tagModel : Comp.Dropdown.Model Tag
, fileFilter : Maybe String , fileFilter : Maybe String
, languageModel : Comp.Dropdown.Model Language
, language : Maybe String
} }
@ -70,6 +73,19 @@ emptyModel =
, folderId = Nothing , folderId = Nothing
, tagModel = Util.Tag.makeDropdownModel2 , tagModel = Util.Tag.makeDropdownModel2
, fileFilter = Nothing , fileFilter = Nothing
, languageModel =
Comp.Dropdown.makeSingleList
{ makeOption =
\a ->
{ value = Data.Language.toName a
, text = Data.Language.toName a
, additional = ""
}
, placeholder = "Select"
, options = Data.Language.all
, selected = Nothing
}
, language = Nothing
} }
@ -108,6 +124,7 @@ getSource model =
, priority = Data.Priority.toName model.priority , priority = Data.Priority.toName model.priority
, folder = model.folderId , folder = model.folderId
, fileFilter = model.fileFilter , fileFilter = model.fileFilter
, language = model.language
} }
in in
{ st | source = n, tags = TagList (List.length tags) tags } { st | source = n, tags = TagList (List.length tags) tags }
@ -124,6 +141,7 @@ type Msg
| GetTagResp (Result Http.Error TagList) | GetTagResp (Result Http.Error TagList)
| TagDropdownMsg (Comp.Dropdown.Msg Tag) | TagDropdownMsg (Comp.Dropdown.Msg Tag)
| SetFileFilter String | SetFileFilter String
| LanguageMsg (Comp.Dropdown.Msg Language)
@ -285,6 +303,28 @@ update flags msg model =
, Cmd.none , Cmd.none
) )
LanguageMsg lm ->
let
( dm, dc ) =
Comp.Dropdown.update lm model.languageModel
newModel =
{ model | languageModel = dm }
lang =
Comp.Dropdown.getSelected dm |> List.head
model_ =
if isDropdownChangeMsg lm then
{ newModel | language = Maybe.map Data.Language.toIso3 lang }
else
newModel
in
( model_
, Cmd.map LanguageMsg dc
)
--- View --- View
@ -426,7 +466,7 @@ isFolderMember model =
view2 : Flags -> UiSettings -> Model -> Html Msg view2 : Flags -> UiSettings -> Model -> Html Msg
view2 flags settings model = view2 _ settings model =
let let
priorityItem = priorityItem =
Comp.FixedDropdown.Item Comp.FixedDropdown.Item
@ -581,6 +621,21 @@ disappear then.
] ]
] ]
] ]
, div [ class "mb-4" ]
[ label [ class S.inputLabel ]
[ text "Language:"
]
, Html.map LanguageMsg
(Comp.Dropdown.view2
DS.mainStyle
settings
model.languageModel
)
, div [ class "text-gray-400 text-xs" ]
[ text "Used for text extraction and analysis. The collective's "
, text "default language is used if not specified here."
]
]
] ]

View File

@ -474,6 +474,18 @@ viewLinks2 flags _ source =
[ text source.source.id [ text source.source.id
] ]
] ]
, MB.view
{ start =
[ MB.SecondaryButton
{ label = "Back"
, icon = Just "fa fa-arrow-left"
, tagger = SetTableView
, title = "Back to list"
}
]
, end = []
, rootClasses = "mb-4"
}
, p [ class "text-lg pt-2 opacity-75" ] , p [ class "text-lg pt-2 opacity-75" ]
[ text "This source defines URLs that can be used by anyone to send files to " [ text "This source defines URLs that can be used by anyone to send files to "
, text "you. There is a web page that you can share or the API url can be used " , text "you. There is a web page that you can share or the API url can be used "
@ -565,13 +577,6 @@ viewLinks2 flags _ source =
[ qrCodeView apiUrl [ qrCodeView apiUrl
] ]
] ]
, button
[ class S.secondaryButton
, class "mt-4 mb-2"
, onClick SetTableView
]
[ text "Back"
]
] ]