module Examples.Message exposing (Msg, State, example) import Accessibility.Styled exposing (..) import Category exposing (Category(..)) import CommonControls import Css import Debug.Control as Control exposing (Control) import Debug.Control.Extra as ControlExtra import Debug.Control.View as ControlView import Example exposing (Example) import Nri.Ui.Colors.V1 as Colors import Nri.Ui.Heading.V2 as Heading import Nri.Ui.Message.V3 as Message import ViewHelpers exposing (viewExamples) version : Int version = 3 type alias State = { show : Bool , control : Control (List ( String, Message.Attribute Msg )) } init : State init = { show = True , control = ControlExtra.list |> ControlExtra.optionalListItem "theme" controlTheme |> ControlExtra.listItem "content" (CommonControls.content { moduleName = moduleName , plaintext = Message.plaintext , markdown = Just Message.markdown , html = Message.html , httpError = Just Message.httpError } ) |> ControlExtra.optionalListItem "role" controlRole |> ControlExtra.optionalBoolListItem "dismissable" ( "Message.onDismiss Dismiss", Message.onDismiss Dismiss ) |> CommonControls.iconNotCheckedByDefault "Message" Message.icon |> ControlExtra.optionalBoolListItem "hideIconForMobile" ( "Message.hideIconForMobile", Message.hideIconForMobile ) |> CommonControls.css { moduleName = moduleName , use = Message.css } |> CommonControls.mobileCss { moduleName = moduleName , use = Message.mobileCss } |> CommonControls.quizEngineMobileCss { moduleName = moduleName , use = Message.quizEngineMobileCss } |> CommonControls.notMobileCss { moduleName = moduleName , use = Message.notMobileCss } } moduleName : String moduleName = "Message" controlTheme : Control ( String, Message.Attribute msg ) controlTheme = Control.choice [ ( "tip", Control.value ( "Message.tip", Message.tip ) ) , ( "error", Control.value ( "Message.error", Message.error ) ) , ( "alert", Control.value ( "Message.alert", Message.alert ) ) , ( "success", Control.value ( "Message.success", Message.success ) ) , ( "customTheme", controlCustomTheme ) ] controlCustomTheme : Control ( String, Message.Attribute msg ) controlCustomTheme = Control.record (\( aStr, a ) ( bStr, b ) -> ( "Message.customTheme { color = " ++ aStr ++ ", backgroundColor = " ++ bStr ++ " }" , Message.customTheme { color = a, backgroundColor = b } ) ) |> Control.field "color" (CommonControls.choice "Colors" [ ( "aquaDark", Colors.aquaDark ) ] ) |> Control.field "backgroundColor" (CommonControls.choice "Colors" [ ( "gray92", Colors.gray92 ) ] ) controlRole : Control ( String, Message.Attribute msg ) controlRole = CommonControls.choice "Message" [ ( "alertRole", Message.alertRole ) , ( "alertDialogRole", Message.alertDialogRole ) ] type Msg = Dismiss | UpdateControl (Control (List ( String, Message.Attribute Msg ))) update : Msg -> State -> ( State, Cmd Msg ) update msg state = case msg of Dismiss -> ( { state | show = False }, Cmd.none ) UpdateControl newControl -> ( { state | control = newControl }, Cmd.none ) example : Example State Msg example = { name = "Message" , version = version , categories = [ Messaging ] , keyboardSupport = [] , state = init , update = update , subscriptions = \_ -> Sub.none , preview = [ Message.view [ Message.plaintext "Tiny tip" ] , Message.view [ Message.success, Message.plaintext "Tiny success" ] , Message.view [ Message.error, Message.plaintext "Tiny error" ] ] , view = \ellieLinkConfig state -> let attributes = List.map Tuple.second (Control.currentValue state.control) orDismiss view = if state.show then view else text "Nice! The messages were dismissed. 👍" in [ ControlView.view { ellieLinkConfig = ellieLinkConfig , name = moduleName , version = version , update = UpdateControl , settings = state.control , mainType = "RootHtml.Html msg" , extraImports = [] , toExampleCode = \settings -> let toCode maybeSize = "Message.view\n\t[ " ++ (maybeSize :: List.map (Tuple.first >> Just) settings |> List.filterMap identity |> String.join "\n\t, " ) ++ "\n\t]" in [ { sectionName = "Tiny" , code = toCode Nothing } , { sectionName = "Large" , code = toCode (Just "Message.large") } , { sectionName = "Banner" , code = toCode (Just "Message.banner") } ] } , orDismiss <| viewExamples [ ( "tiny", Message.view attributes ) , ( "large", Message.view (Message.large :: attributes) ) , ( "banner", Message.view (Message.banner :: attributes) ) ] , Heading.h3 [ Heading.css [ Css.marginTop (Css.px 20) , Css.borderTop3 (Css.px 2) Css.solid Colors.gray96 , Css.paddingTop (Css.px 20) ] ] [ text "Message.somethingWentWrong" ] , Message.somethingWentWrong exampleRailsError ] } exampleRailsError : String exampleRailsError = """web : Completed 500 Internal Server Error in 273.5ms web : web : ActionView::MissingTemplate - Missing template teach/assignables/blueprint, teach/base/blueprint, application/blueprint with {:locale=>[:en], :formats=>[:json, :js, :html, :text, :js, :css, :ics, :csv, :png, :jpeg, :gif, :bmp, :tiff, :mpeg, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json, :pdf, :zip, :xlsx], :handlers=>[:erb, :builder, :axlsx, :coffee, :haml, :rabl, :hamlc]}. Searched in: web : * "/Users/avh4/workspace/NoRedInk/app/views" web : * "/Users/avh4/.gem/ruby/2.3.3/gems/sextant-0.2.4/app/views" web : * "/Users/avh4/.gem/ruby/2.3.3/gems/configurable_engine-0.4.8/app/views" web : * "/Users/avh4/.gem/ruby/2.3.3/gems/kaminari-0.17.0/app/views" web : * "/Users/avh4/workspace/NoRedInk/app/assets/javascripts/templates" web : : web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_view/path_set.rb:58:in `find' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_view/lookup_context.rb:122:in `find' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_view/renderer/abstract_renderer.rb:3:in `find_template' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_view/renderer/template_renderer.rb:35:in `determine_template' web : newrelic_rpm (4.0.0.332) lib/new_relic/agent/instrumentation/rails3/action_controller.rb:149:in `render_with_newrelic' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_view/renderer/renderer.rb:43:in `render_template' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_view/renderer/renderer.rb:24:in `render' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/abstract_controller/rendering.rb:111:in `_render_template' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_controller/metal/streaming.rb:225:in `_render_template' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/abstract_controller/rendering.rb:104:in `render_to_body' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_controller/metal/renderers.rb:28:in `render_to_body' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_controller/metal/compatibility.rb:50:in `render_to_body' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/abstract_controller/rendering.rb:89:in `render' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_controller/metal/rendering.rb:16:in `render' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_controller/metal/instrumentation.rb:40:in `block (2 levels) in render' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/activesupport/lib/active_support/core_ext/benchmark.rb:5:in `block in ms' web : /Users/avh4/.rubies/ruby-2.3.3/lib/ruby/2.3.0/benchmark.rb:308:in `realtime' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/activesupport/lib/active_support/core_ext/benchmark.rb:5:in `ms' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_controller/metal/instrumentation.rb:40:in `block in render' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_controller/metal/instrumentation.rb:83:in `cleanup_view_runtime' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/activerecord/lib/active_record/railties/controller_runtime.rb:24:in `cleanup_view_runtime' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_controller/metal/instrumentation.rb:39:in `render' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_controller/metal/implicit_render.rb:10:in `default_render' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_controller/metal/implicit_render.rb:5:in `send_action' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/abstract_controller/base.rb:167:in `process_action' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_controller/metal/rendering.rb:10:in `process_action' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/abstract_controller/callbacks.rb:18:in `block in process_action' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/activesupport/lib/active_support/callbacks.rb:502:in `_run__46453218882797464__process_action__3621715315305983900__callbacks' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/activesupport/lib/active_support/callbacks.rb:405:in `__run_callback' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/activesupport/lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/activesupport/lib/active_support/callbacks.rb:81:in `run_callbacks' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/abstract_controller/callbacks.rb:17:in `process_action' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_controller/metal/rescue.rb:29:in `process_action' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_controller/metal/instrumentation.rb:30:in `block in process_action' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/activesupport/lib/active_support/notifications.rb:123:in `block in instrument' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/activesupport/lib/active_support/notifications/instrumenter.rb:20:in `instrument' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/activesupport/lib/active_support/notifications.rb:123:in `instrument' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_controller/metal/instrumentation.rb:29:in `process_action' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_controller/metal/params_wrapper.rb:207:in `process_action' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/activerecord/lib/active_record/railties/controller_runtime.rb:18:in `process_action' web : newrelic_rpm (4.0.0.332) lib/new_relic/agent/instrumentation/rails3/action_controller.rb:30:in `block in process_action' web : newrelic_rpm (4.0.0.332) lib/new_relic/agent/instrumentation/controller_instrumentation.rb:362:in `perform_action_with_newrelic_trace' web : newrelic_rpm (4.0.0.332) lib/new_relic/agent/instrumentation/rails3/action_controller.rb:25:in `process_action' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/abstract_controller/base.rb:121:in `process' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/abstract_controller/rendering.rb:46:in `process' web : rack-mini-profiler (0.10.2) lib/mini_profiler/profiling_methods.rb:102:in `block in profile_method' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_controller/metal.rb:203:in `dispatch' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_controller/metal/rack_delegation.rb:14:in `dispatch' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_controller/metal.rb:246:in `block in action' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_dispatch/routing/route_set.rb:73:in `dispatch' web : () Users/avh4/.gem/ruby/2.3.3/bundler/gems/rails-e17e25cd23e8/actionpack/lib/action_dispatch/routing/route_set.rb:36:in `call'"""