import Foundation import UIKit import Display import AsyncDisplayKit import TelegramPresentationData import SearchBarNode import AppBundle private let searchBarFont = Font.regular(17.0) private extension SearchBarNodeTheme { convenience init(navigationBarTheme: BrowserNavigationBarTheme) { self.init(background: navigationBarTheme.backgroundColor, separator: .clear, inputFill: navigationBarTheme.searchBarFieldColor, primaryText: navigationBarTheme.searchBarTextColor, placeholder: navigationBarTheme.searchBarPlaceholderColor, inputIcon: navigationBarTheme.searchBarIconColor, inputClear: navigationBarTheme.searchBarClearColor, accent: navigationBarTheme.buttonColor, keyboard: navigationBarTheme.searchBarKeyboardColor) } } final class BrowserNavigationBarSearchContentNode: ASDisplayNode, BrowserNavigationBarContentNode { private var theme: BrowserNavigationBarTheme private let strings: PresentationStrings private var state: BrowserState private var interaction: BrowserInteraction? private let searchBar: SearchBarNode init(theme: BrowserNavigationBarTheme, strings: PresentationStrings, state: BrowserState, interaction: BrowserInteraction?) { self.theme = theme self.strings = strings self.state = state self.interaction = interaction let searchBarTheme = SearchBarNodeTheme(navigationBarTheme: self.theme) self.searchBar = SearchBarNode(theme: searchBarTheme, strings: strings, fieldStyle: .modern) self.searchBar.placeholderString = NSAttributedString(string: "Search on this page", font: searchBarFont, textColor: searchBarTheme.placeholder) super.init() self.backgroundColor = theme.backgroundColor self.addSubnode(self.searchBar) self.searchBar.cancel = { [weak self] in self?.searchBar.deactivate(clear: false) self?.interaction?.dismissSearch() } self.searchBar.textUpdated = { [weak self] query, _ in self?.interaction?.updateSearchQuery(query) } } override func didLoad() { super.didLoad() self.searchBar.activate() } func updateState(_ state: BrowserState) { guard let searchState = state.search else { return } self.searchBar.text = searchState.query } func updateTheme(_ theme: BrowserNavigationBarTheme) { guard self.theme !== theme else { return } self.theme = theme self.backgroundColor = theme.backgroundColor self.searchBar.updateThemeAndStrings(theme: SearchBarNodeTheme(navigationBarTheme: self.theme), strings: self.strings) } func updateLayout(size: CGSize, transition: ContainedViewLayoutTransition) { self.searchBar.updateLayout(boundingSize: size, leftInset: 0.0, rightInset: 0.0, transition: .immediate) self.searchBar.frame = CGRect(origin: CGPoint(), size: size) } }