Skip to content

Commit

Permalink
(GLI-1674) Update numbered list when numbers are deleted. (#15)
Browse files Browse the repository at this point in the history
* (GLI-1674) Update numbered list when numbers are deleted.

* Update version number.
  • Loading branch information
nickmshelley authored and SerenadeX committed Oct 11, 2016
1 parent c993178 commit 5b959f8
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 5 deletions.
2 changes: 1 addition & 1 deletion RichTextVC-iOS.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

Pod::Spec.new do |s|
s.name = "RichTextVC-iOS"
s.version = "1.5.0"
s.version = "1.5.1"
s.summary = "A Rich Text ViewController for iOS."

# This description is used to generate tags and improve search results.
Expand Down
38 changes: 34 additions & 4 deletions src/Classes/RichTextViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -84,11 +84,13 @@ public class RichTextViewController: UIViewController {
///
/// - parameter range: The range of the text to remove.
/// - parameter toTextView: The `UITextView` to remove the text from.
private func removeTextFromRange(range: NSRange, fromTextView textView: UITextView) {
private func removeTextFromRange(range: NSRange, fromTextView textView: UITextView, applyDefault: Bool = true) {
let substringLength = (textView.text as NSString).substringWithRange(range).length
let initialRange = textView.selectedRange

applyDefaultParagraphStyleToSelectedRange(range)
if applyDefault {
applyDefaultParagraphStyleToSelectedRange(range)
}

textView.textStorage.beginEditing()
textView.textStorage.replaceCharactersInRange(range, withAttributedString: NSAttributedString(string: ""))
Expand Down Expand Up @@ -375,7 +377,7 @@ public class RichTextViewController: UIViewController {

let previousNumber = previousNumberOfNumberedList(textView.selectedRange) ?? 0
let previousNumberString = "\(previousNumber)\(RichTextViewController.numberedListTrailer)"
let previousNumberRange = NSRange(location: range.location - previousNumberString.length + 1, length: previousNumberString.length)
var previousNumberRange = NSRange(location: range.location - previousNumberString.length + 1, length: previousNumberString.length)
let previousBulletRange = NSRange(location: range.location - RichTextViewController.bulletedLineStarter.length + 1, length: RichTextViewController.bulletedLineStarter.length)
let adjustedRange = NSRange(location: range.location + 1, length: 0)

Expand All @@ -385,7 +387,35 @@ public class RichTextViewController: UIViewController {
let subString = (textView.text as NSString).substringWithRange(previousNumberRange)

if subString == previousNumberString {
removeTextFromRange(previousNumberRange, fromTextView: textView)
if previousNumber > 1 {
// Not at the beginning of the list, so collapse the list
let space = NSCharacterSet.whitespaceAndNewlineCharacterSet()
let text = textView.text as NSString
while previousNumberRange.location > 0 {
if space.characterIsMember(text.characterAtIndex(previousNumberRange.location - 1)) {
previousNumberRange.location = previousNumberRange.location - 1
previousNumberRange.length = previousNumberRange.length + 1
} else {
break
}
}
}

// Update following numbers in list so there isn't a hole
var newNumber = previousNumber
var index = previousNumberRange.location

repeat {
let stringToReplace = "\(newNumber + 1)\(RichTextViewController.numberedListTrailer)"
index = textView.text.nextIndexOfSubstring(stringToReplace, fromIndex: index) ?? -1
guard index >= 0 else { break }

replaceTextInRange(NSRange(location: index, length: stringToReplace.length), withText: "\(newNumber)\(RichTextViewController.numberedListTrailer)", inTextView: textView)
newNumber += 1
index += 1
} while index < textView.text.length

removeTextFromRange(previousNumberRange, fromTextView: textView, applyDefault: previousNumber == 1)
removed = true
}
return removed
Expand Down

0 comments on commit 5b959f8

Please sign in to comment.