Merge branch 'feature/mention2' into develop

This commit is contained in:
nixzhu
2016-01-12 11:03:00 +08:00
4 changed files with 72 additions and 16 deletions
+51 -1
View File
@@ -20,6 +20,9 @@ extension String {
return nil
}
}
}
extension String {
enum TrimmingType {
case Whitespace
@@ -34,4 +37,51 @@ extension String {
return stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
}
}
}
}
extension String {
func yep_mentionWordInIndex(index: Int) -> (wordString: String, mentionWordRange: Range<Index>)? {
guard index > 0 else {
return nil
}
let index = startIndex.advancedBy(index)
var wordString: String?
var wordRange: Range<Index>?
self.enumerateSubstringsInRange(Range<Index>(start: startIndex, end: endIndex), options: [.ByWords, .Reverse]) { (substring, substringRange, enclosingRange, stop) -> () in
//println("substring: \(substring)")
//println("substringRange: \(substringRange)")
//println("enclosingRange: \(enclosingRange)")
if substringRange.contains(index) {
wordString = substring
wordRange = substringRange
stop = true
}
}
guard let _wordString = wordString, _wordRange = wordRange else {
return nil
}
guard _wordRange.startIndex != startIndex else {
return nil
}
let mentionWordRange = Range<Index>(start: _wordRange.startIndex.advancedBy(-1), end: _wordRange.endIndex)
let mentionWord = substringWithRange(mentionWordRange)
guard mentionWord.hasPrefix("@") else {
return nil
}
return (_wordString, mentionWordRange)
}
}
+6 -4
View File
@@ -3695,7 +3695,7 @@ struct UsernamePrefixMatchedUser {
let userID: String
let username: String
let nickname: String
let avatarURLString: String
let avatarURLString: String?
var mentionUsername: String {
return "@" + username
@@ -3709,7 +3709,7 @@ func usersMatchWithUsernamePrefix(usernamePrefix: String, failureHandler: ((Reas
]
let parse: JSONDictionary -> [UsernamePrefixMatchedUser]? = { data in
//println("usersMatchWithUsernamePrefix: \(data)")
println("usersMatchWithUsernamePrefix: \(data)")
if let usersData = data["users"] as? [JSONDictionary] {
let users: [UsernamePrefixMatchedUser] = usersData.map({ userInfo in
@@ -3717,12 +3717,14 @@ func usersMatchWithUsernamePrefix(usernamePrefix: String, failureHandler: ((Reas
userID = userInfo["id"] as? String,
username = userInfo["username"] as? String,
nickname = userInfo["nickname"] as? String,
avatarInfo = userInfo["avatar"] as? JSONDictionary,
avatarURLString = avatarInfo["thumb_url"] as? String
avatarInfo = userInfo["avatar"] as? JSONDictionary
//avatarURLString = avatarInfo["thumb_url"] as? String
else {
return nil
}
let avatarURLString = avatarInfo["thumb_url"] as? String
return UsernamePrefixMatchedUser(userID: userID, username: username, nickname: nickname, avatarURLString: avatarURLString)
}).flatMap({ $0 })
+6 -1
View File
@@ -72,8 +72,12 @@ private class MentionUserCell: UITableViewCell {
func configureWithUsernamePrefixMatchedUser(user: UsernamePrefixMatchedUser) {
let plainAvatar = PlainAvatar(avatarURLString: user.avatarURLString, avatarStyle: picoAvatarStyle)
if let avatarURLString = user.avatarURLString {
let plainAvatar = PlainAvatar(avatarURLString: avatarURLString, avatarStyle: picoAvatarStyle)
avatarImageView.navi_setAvatar(plainAvatar, withFadeTransitionDuration: avatarFadeTransitionDuration)
} else {
avatarImageView.image = UIImage(named: "default_avatar_30")
}
nicknameLabel.text = user.nickname
mentionUsernameLabel.text = user.mentionUsername
@@ -105,6 +109,7 @@ class MentionView: UIView {
let tableView = UITableView()
tableView.backgroundColor = UIColor.clearColor()
tableView.separatorInset = UIEdgeInsets(top: 0, left: 60, bottom: 0, right: 0)
let effect = UIBlurEffect(style: .ExtraLight)
+9 -10
View File
@@ -441,6 +441,8 @@ class MessageToolbar: UIToolbar {
text.replaceRange(range, with: mentionUsernameWithSpaceSuffix)
messageTextView.text = text
updateHeightOfMessageTextView()
}
}
@@ -490,19 +492,16 @@ extension MessageToolbar: UITextViewDelegate {
state = text.isEmpty ? .BeginTextInput : .TextInputing
if needDetectMention {
let parts = text.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
if let lastPart = parts.last {
if lastPart.hasPrefix("@") {
let usernamePrefix = lastPart.substringFromIndex(lastPart.startIndex.advancedBy(1))
let currentLetterIndex = textView.selectedRange.location - 1
if !usernamePrefix.isEmpty {
mentionUsernameRange = text.rangeOfString(lastPart)
tryMentionUserAction?(usernamePrefix: usernamePrefix)
if let (wordString, mentionWordRange) = text.yep_mentionWordInIndex(currentLetterIndex) {
//println("mentionWord: \(wordString), \(mentionWordRange)")
return
}
}
mentionUsernameRange = mentionWordRange
tryMentionUserAction?(usernamePrefix: wordString)
return
}
giveUpMentionUserAction?()