Files
GitHawk/Classes/Systems/Autocomplete/AutocompleteController.swift
2018-02-09 17:40:05 -05:00

96 lines
3.0 KiB
Swift

//
// AutocompleteController.swift
// Freetime
//
// Created by Ryan Nystrom on 1/1/18.
// Copyright © 2018 Ryan Nystrom. All rights reserved.
//
import UIKit
import MessageViewController
final class AutocompleteController: NSObject,
UITableViewDataSource,
UITableViewDelegate,
IssueCommentAutocompleteDelegate,
MessageAutocompleteControllerDelegate {
let messageAutocompleteController: MessageAutocompleteController
let autocomplete: IssueCommentAutocomplete
init(
messageAutocompleteController: MessageAutocompleteController,
autocomplete: IssueCommentAutocomplete
) {
self.messageAutocompleteController = messageAutocompleteController
self.autocomplete = autocomplete
super.init()
for prefix in autocomplete.prefixes {
messageAutocompleteController.register(prefix: prefix)
}
messageAutocompleteController.delegate = self
let tableView = messageAutocompleteController.tableView
tableView.delegate = self
tableView.dataSource = self
autocomplete.configure(tableView: tableView, delegate: self)
}
// MARK: MessageAutocompleteControllerDelegate
func didFind(controller: MessageAutocompleteController, prefix: String, word: String) {
autocomplete.didChange(tableView: controller.tableView, prefix: prefix, word: word)
}
// MARK: UITableViewDataSource
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return autocomplete.resultCount(prefix: messageAutocompleteController.selection?.prefix)
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return autocomplete.cell(
tableView: tableView,
prefix: messageAutocompleteController.selection?.prefix,
indexPath: indexPath
)
}
// MARK: UITableViewDelegate
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let accepted = autocomplete.accept(
prefix: messageAutocompleteController.selection?.prefix,
indexPath: indexPath
) {
messageAutocompleteController.accept(autocomplete: accepted, keepPrefix: false)
}
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return autocomplete.cellHeight
}
// MARK: IssueCommentAutocompleteDelegate
func didChangeStore(autocomplete: IssueCommentAutocomplete) {
for prefix in autocomplete.prefixes {
messageAutocompleteController.register(prefix: prefix)
if let attributes = autocomplete.highlightAttributes(prefix: prefix) {
messageAutocompleteController.registerAutocomplete(prefix: prefix, attributes: attributes)
}
}
messageAutocompleteController.tableView.reloadData()
}
func didFinish(autocomplete: IssueCommentAutocomplete, hasResults: Bool) {
messageAutocompleteController.show(hasResults)
}
}