mirror of
https://github.com/wahyd4/Yep.git
synced 2026-08-13 23:07:37 +10:00
Merge branch 'feature/mention2' into develop
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 })
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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?()
|
||||
|
||||
Reference in New Issue
Block a user