@@ -13,7 +13,7 @@ import Firebase
1313import GoogleMobileAds
1414
1515// taken from: https://developer.apple.com/documentation/uikit/view_controllers/building_a_document_browser-based_app
16- class DocumentViewController : UIViewController , DocumentDelegate , GADBannerViewDelegate {
16+ class DocumentViewController : UIViewController , DocumentDelegate , GADBannerViewDelegate , UISearchBarDelegate {
1717
1818 private var browserTransition : DocumentBrowserTransitioningDelegate ?
1919 public var transitionController : UIDocumentBrowserTransitionController ? {
@@ -33,6 +33,10 @@ class DocumentViewController: UIViewController, DocumentDelegate, GADBannerViewD
3333
3434 private var EXTENSION_WHITELIST = [ " pdf " , " doc " , " docx " , " xls " , " xlsx " , " ppt " , " pptx " , " rtf " , " rtfd.zip " , " csv " , " txt " , " jpg " , " jpeg " , " png " , " gif " , " svg " , " pages " , " pages.zip " , " numbers " , " numbers.zip " , " key " , " key.zip " , " mp3 " , " mp4 " , " flv " , " mkv " , " 3gp " , " aac " , " bmp " , " css " , " htm " , " html " , " js " , " json " , " mpeg " , " oga " , " ogv " , " sh " , " tif " , " tiff " , " weba " , " webm " , " webp " , " xhtml " , " xml " ]
3535
36+ @IBOutlet weak var toolBar : UIToolbar !
37+ @IBOutlet weak var searchBarTop : NSLayoutConstraint !
38+ @IBOutlet weak var searchBarHeight : NSLayoutConstraint !
39+ @IBOutlet weak var searchBar : UISearchBar !
3640 @IBOutlet weak var segmentedControl : ScrollableSegmentedControl !
3741 private var initialSelect = false
3842
@@ -55,6 +59,11 @@ class DocumentViewController: UIViewController, DocumentDelegate, GADBannerViewD
5559
5660 override func viewWillAppear( _ animated: Bool ) {
5761 super. viewWillAppear ( animated)
62+
63+ searchBar. delegate = self
64+ searchBar. showsCancelButton = true
65+
66+ hideSearchBar ( )
5867
5968 barButtonItem. title = NSLocalizedString ( " back_to_documents " , comment: " " )
6069
@@ -145,6 +154,61 @@ class DocumentViewController: UIViewController, DocumentDelegate, GADBannerViewD
145154 return isFullscreen
146155 }
147156
157+ func searchBarCancelButtonClicked( _ searchBar: UISearchBar ) {
158+ hideSearchBar ( )
159+ }
160+
161+ func searchBarResultsListButtonClicked( _ searchBar: UISearchBar ) {
162+ if let searchText = searchBar. text {
163+ findNext ( searchText: searchText)
164+ }
165+ }
166+
167+ func searchBar( _ searchBar: UISearchBar , textDidChange searchText: String ) {
168+ findAll ( searchText: searchText)
169+ }
170+
171+ @IBAction func searchButton( _ sender: UIBarButtonItem ) {
172+ showSearchBar ( )
173+ }
174+
175+ private func showSearchBar( ) {
176+ searchBar. isHidden = false
177+ searchBarHeight. constant = 56.0
178+ searchBarTop. constant = 0.0
179+
180+ toolBar. isHidden = true
181+ }
182+
183+ private func hideSearchBar( ) {
184+ searchBar. text = " "
185+ searchBar. isHidden = true
186+ searchBarHeight. constant = 0.0
187+ searchBarTop. constant = 40.0
188+
189+ toolBar. isHidden = false
190+
191+ self . view. endEditing ( true )
192+ }
193+
194+ private func findNext( searchText: String ) {
195+ webview? . evaluateJavaScript ( " odr.searchNext( \" " + searchText + " \" ) " , completionHandler: { ( value: Any!, error: Error!) - > Void in
196+ if error != nil {
197+ Crashlytics . crashlytics ( ) . record ( error: error)
198+ fatalError ( " search failed " )
199+ }
200+ } )
201+ }
202+
203+ private func findAll( searchText: String ) {
204+ webview? . evaluateJavaScript ( " odr.search( \" " + searchText + " \" ) " , completionHandler: { ( value: Any!, error: Error!) - > Void in
205+ if error != nil {
206+ Crashlytics . crashlytics ( ) . record ( error: error)
207+ fatalError ( " search failed " )
208+ }
209+ } )
210+ }
211+
148212 @IBAction func returnToDocuments( _ sender: Any ) {
149213 guard let doc = document else {
150214 fatalError ( " document is null " )
0 commit comments