anchor.diff:                      ))
               )
       
  +        // keyboard
           showObserver <- UIKeyboard.Notifications.ObserveWillShow(System.EventHandler<UIKeyboardEventArgs>(placeKeyboard))
           hideObserver <- UIKeyboard.Notifications.ObserveWillHide(System.EventHandler<UIKeyboardEventArgs>(placeKeyboard))
           this.Text.BecomeFirstResponder () |> ignore
  
positive.code:         )
  
      override this.ViewDidAppear animated = 
          if loaded = false then
              this.WebView.LoadRequest(new NSUrlRequest(new NSUrl(Api.webUrl + "/api/chat/chatRoomTemplate")))
              this.WebView.LoadError.Add(fun error -> showSimpleAlert "Error" error.Error.Description "Close")
              this.WebView.LoadFinished.Add(fun _ ->
                  this.WebView.Delegate <- webViewDelegate
                  this.WebView.SetBodyBackgroundColor (colorToCss UIColor.White)
  
                  Async.startNetworkWithContinuation
                      (Chat.join room.Slug)
                      (function
                          | Api.ApiOk (result, events) ->
                              startSequence <- result.Sequence
                              loaded <- true
                              starred <- result.Channel.ViewerHasStarred
                              apps <- result.Channel.Apps
  
                              if apps.Any(fun e -> appsAllowed.Contains(e)) then
                                  gameController <- Some (new GameViewController(room, apps.First()))
  
                              this.NavigationItem.RightBarButtonItems <- barButtons()
  
                              result.Members |> Array.filter (fun e -> memberTypes.Contains e.Membership) |> Array.iter addUser
                              result.HistoricMembers |> Array.filter (fun e -> memberTypes.Contains e.Membership) |> Array.iter addUser
                              this.WebView.PreloadImages [ for user in users.Values do yield App.imageUrl user.Avatar nameplateImageSize ]
                              let lines = new List<string>()
                              for event in events do processEvent event (fun l _ -> lines.Add l)
                              addLines (lines.ToArray())
                              processor.Start()
  
                              this.Progress.StopAnimating ()
  
                          | error -> this.HandleApiFailure error 
                  )
              )
  
  
          Async.startWithContinuation 
              (async {
                  do! DB.updateChatHistoryReadById room.Id
  
negative.code:     member val Progress: UIActivityIndicatorView = null with get, set
  
      override this.ViewDidLoad () =
          this.WebView.BackgroundColor <- UIColor.White
          this.WebView.Delegate <- webViewDelegate
  
          this.NavigationItem.Title <- room.Label
          this.NavigationItem.LeftItemsSupplementBackButton <- true
  
          // Prevents a 64px offset on a webviews scrollview
          this.AutomaticallyAdjustsScrollViewInsets <- false
  
          this.NavigationItem.RightBarButtonItems <- barButtons()
  
  