<commit_before>module Component.Dialog exposing (..)

import Task
import Json.Decode as Decode
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (..)
import Html.App as App

import View.Styles as S
import View.CommonStyles as CS


type alias Config msg =
  { strategy : Strategy msg
  , transform : Msg msg -> msg
  }


type Strategy msg =
  ConfirmOrClose (String, msg) (String, msg)


type alias Popup = Bool


type Msg msg = NoOp | Confirm msg | Close msg


init : Popup
init = False


update : Msg msg -> Popup -> (Popup, Cmd msg)
update msg model =
  case msg of
    NoOp ->
      model ! []

    Close msg ->
      False ! [ Task.perform identity identity <| Task.succeed msg ]

    Confirm msg ->
      False ! [ Task.perform identity identity <| Task.succeed msg ]


open : Popup
open = True


popup : Config msg -> List (Html msg) -> Popup -> Html msg
popup config content opened =
  if opened then
    let
      footer =
        case config.strategy of
          ConfirmOrClose (confirmText, confirmMsg) (cancelText, cancelMsg) ->
            App.map config.transform <|
              div [ ]
                [ button [ style CS.defaultButton, onClick (Close cancelMsg) ] [ text cancelText ]
                , button [ style CS.primaryButton, onClick (Confirm confirmMsg) ] [ text confirmText ]
                ]
    in
      div
        [ style S.modalBackground
        , onClick (config.transform <|
            case config.strategy of
              ConfirmOrClose _ (cancelText, cancelMsg) ->
                Close cancelMsg
          )
        ]
        [ div
            [ style S.smallPopup
            , onWithOptions "click" { stopPropagation = True, preventDefault = False } (Decode.succeed <| config.transform NoOp)
            ]
            [ div [ style S.diffPopupInnerContainer ] content<commit_msg>fix open of dialog API<commit_after>module Component.Dialog exposing (..)

import Task
import Json.Decode as Decode
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (..)
import Html.App as App

import View.Styles as S
import View.CommonStyles as CS


type alias Config msg =
  { strategy : Strategy msg
  , transform : Msg msg -> msg
  }


type Strategy msg =
  ConfirmOrClose (String, msg) (String, msg)


type alias Popup = Bool


type Msg msg
  = NoOp
  | Open
  | Confirm msg
  | Close msg


init : Popup
init = False


update : Msg msg -> Popup -> (Popup, Cmd msg)
update msg model =
  case msg of
    NoOp ->
      model ! []

    Open ->
      True ! []

    Close msg ->
      False ! [ Task.perform identity identity <| Task.succeed msg ]

    Confirm msg ->
      False ! [ Task.perform identity identity <| Task.succeed msg ]


open : (Msg msg -> msg) -> msg
open f = f Open


popup : Config msg -> List (Html msg) -> Popup -> Html msg
popup config content opened =
  if opened then
    let
      footer =
        case config.strategy of
          ConfirmOrClose (confirmText, confirmMsg) (cancelText, cancelMsg) ->
            App.map config.transform <|
              div [ ]
                [ button [ style CS.defaultButton, onClick (Close cancelMsg) ] [ text cancelText ]
                , button [ style CS.primaryButton, onClick (Confirm confirmMsg) ] [ text confirmText ]
                ]
    in
      div
        [ style S.modalBackground
        , onClick (config.transform <|
            case config.strategy of
              ConfirmOrClose _ (cancelText, cancelMsg) ->
                Close cancelMsg
          )
        ]
        [ div
            [ style S.smallPopup
            , onWithOptions "click" { stopPropagation = True, preventDefault = False } (Decode.succeed <| config.transform NoOp)
            ]
            [ div [ style S.diffPopupInnerContainer ] content
{'fraction_non_alphanumeric': 0.0888304862023653, 'fraction_numerical': 0.0, 'mean_word_length': 2.0718321226795804, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 28, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3802316', 'n_tokens_mistral': 1101, 'n_tokens_neox': 1053, 'n_words': 361}