added iOS source code
[wl-app.git] / iOS / Pods / FolioReaderKit / Source / FolioReaderHighlightList.swift
diff --git a/iOS/Pods/FolioReaderKit/Source/FolioReaderHighlightList.swift b/iOS/Pods/FolioReaderKit/Source/FolioReaderHighlightList.swift
new file mode 100644 (file)
index 0000000..7b9f6bb
--- /dev/null
@@ -0,0 +1,172 @@
+//
+//  FolioReaderHighlightList.swift
+//  FolioReaderKit
+//
+//  Created by Heberti Almeida on 01/09/15.
+//  Copyright (c) 2015 Folio Reader. All rights reserved.
+//
+
+import UIKit
+
+class FolioReaderHighlightList: UITableViewController {
+
+    fileprivate var highlights = [Highlight]()
+    fileprivate var readerConfig: FolioReaderConfig
+    fileprivate var folioReader: FolioReader
+
+    init(folioReader: FolioReader, readerConfig: FolioReaderConfig) {
+        self.readerConfig = readerConfig
+        self.folioReader = folioReader
+
+        super.init(style: UITableViewStyle.plain)
+    }
+
+    required init?(coder aDecoder: NSCoder) {
+        fatalError("init with coder not supported")
+    }
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+
+        self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: kReuseCellIdentifier)
+        self.tableView.separatorInset = UIEdgeInsets.zero
+        self.tableView.backgroundColor = self.folioReader.isNight(self.readerConfig.nightModeMenuBackground, self.readerConfig.menuBackgroundColor)
+        self.tableView.separatorColor = self.folioReader.isNight(self.readerConfig.nightModeSeparatorColor, self.readerConfig.menuSeparatorColor)
+
+        guard let bookId = (self.folioReader.readerContainer?.book.name as NSString?)?.deletingPathExtension else {
+            self.highlights = []
+            return
+        }
+
+        self.highlights = Highlight.allByBookId(withConfiguration: self.readerConfig, bookId: bookId)
+    }
+
+    // MARK: - Table view data source
+
+    override func numberOfSections(in tableView: UITableView) -> Int {
+        return 1
+    }
+
+    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+        return highlights.count
+    }
+
+    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        let cell = tableView.dequeueReusableCell(withIdentifier: kReuseCellIdentifier, for: indexPath)
+        cell.backgroundColor = UIColor.clear
+
+        let highlight = highlights[(indexPath as NSIndexPath).row]
+
+        // Format date
+        let dateFormatter = DateFormatter()
+        dateFormatter.dateFormat = self.readerConfig.localizedHighlightsDateFormat
+        let dateString = dateFormatter.string(from: highlight.date)
+
+        // Date
+        var dateLabel: UILabel!
+        if cell.contentView.viewWithTag(456) == nil {
+            dateLabel = UILabel(frame: CGRect(x: 0, y: 0, width: view.frame.width-40, height: 16))
+            dateLabel.tag = 456
+            dateLabel.autoresizingMask = UIViewAutoresizing.flexibleWidth
+            dateLabel.font = UIFont(name: "Avenir-Medium", size: 12)
+            cell.contentView.addSubview(dateLabel)
+        } else {
+            dateLabel = cell.contentView.viewWithTag(456) as! UILabel
+        }
+
+        dateLabel.text = dateString.uppercased()
+        dateLabel.textColor = self.folioReader.isNight(UIColor(white: 5, alpha: 0.3), UIColor.lightGray)
+        dateLabel.frame = CGRect(x: 20, y: 20, width: view.frame.width-40, height: dateLabel.frame.height)
+
+        // Text
+        let cleanString = highlight.content.stripHtml().truncate(250, trailing: "...").stripLineBreaks()
+        let text = NSMutableAttributedString(string: cleanString)
+        let range = NSRange(location: 0, length: text.length)
+        let paragraph = NSMutableParagraphStyle()
+        paragraph.lineSpacing = 3
+        let textColor = self.folioReader.isNight(self.readerConfig.menuTextColor, UIColor.black)
+
+        text.addAttribute(NSAttributedStringKey.paragraphStyle, value: paragraph, range: range)
+        text.addAttribute(NSAttributedStringKey.font, value: UIFont(name: "Avenir-Light", size: 16)!, range: range)
+        text.addAttribute(NSAttributedStringKey.foregroundColor, value: textColor, range: range)
+
+        if (highlight.type == HighlightStyle.underline.rawValue) {
+            text.addAttribute(NSAttributedStringKey.backgroundColor, value: UIColor.clear, range: range)
+            text.addAttribute(NSAttributedStringKey.underlineColor, value: HighlightStyle.colorForStyle(highlight.type, nightMode: self.folioReader.nightMode), range: range)
+            text.addAttribute(NSAttributedStringKey.underlineStyle, value: NSNumber(value: NSUnderlineStyle.styleSingle.rawValue as Int), range: range)
+        } else {
+            text.addAttribute(NSAttributedStringKey.backgroundColor, value: HighlightStyle.colorForStyle(highlight.type, nightMode: self.folioReader.nightMode), range: range)
+        }
+
+        // Text
+        var highlightLabel: UILabel!
+        if cell.contentView.viewWithTag(123) == nil {
+            highlightLabel = UILabel(frame: CGRect(x: 0, y: 0, width: view.frame.width-40, height: 0))
+            highlightLabel.tag = 123
+            highlightLabel.autoresizingMask = UIViewAutoresizing.flexibleWidth
+            highlightLabel.numberOfLines = 0
+            highlightLabel.textColor = UIColor.black
+            cell.contentView.addSubview(highlightLabel)
+        } else {
+            highlightLabel = cell.contentView.viewWithTag(123) as! UILabel
+        }
+
+        highlightLabel.attributedText = text
+        highlightLabel.sizeToFit()
+        highlightLabel.frame = CGRect(x: 20, y: 46, width: view.frame.width-40, height: highlightLabel.frame.height)
+
+        cell.layoutMargins = UIEdgeInsets.zero
+        cell.preservesSuperviewLayoutMargins = false
+        return cell
+    }
+
+    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
+        let highlight = highlights[(indexPath as NSIndexPath).row]
+
+        let cleanString = highlight.content.stripHtml().truncate(250, trailing: "...").stripLineBreaks()
+        let text = NSMutableAttributedString(string: cleanString)
+        let range = NSRange(location: 0, length: text.length)
+        let paragraph = NSMutableParagraphStyle()
+        paragraph.lineSpacing = 3
+        text.addAttribute(NSAttributedStringKey.paragraphStyle, value: paragraph, range: range)
+        text.addAttribute(NSAttributedStringKey.font, value: UIFont(name: "Avenir-Light", size: 16)!, range: range)
+
+        let s = text.boundingRect(with: CGSize(width: view.frame.width-40, height: CGFloat.greatestFiniteMagnitude),
+                                  options: [NSStringDrawingOptions.usesLineFragmentOrigin, NSStringDrawingOptions.usesFontLeading],
+                                  context: nil)
+
+        return s.size.height + 66
+    }
+
+    // MARK: - Table view delegate
+
+    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+        guard let highlight = highlights[safe: (indexPath as NSIndexPath).row] else {
+            return
+        }
+
+        self.folioReader.readerCenter?.changePageWith(page: highlight.page, andFragment: highlight.highlightId)
+        self.dismiss()
+    }
+
+    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
+        if editingStyle == .delete {
+            let highlight = highlights[(indexPath as NSIndexPath).row]
+
+            if (highlight.page == self.folioReader.readerCenter?.currentPageNumber),
+                let page = self.folioReader.readerCenter?.currentPage {
+                Highlight.removeFromHTMLById(withinPage: page, highlightId: highlight.highlightId) // Remove from HTML
+            }
+
+            highlight.remove(withConfiguration: self.readerConfig) // Remove from Database
+            highlights.remove(at: (indexPath as NSIndexPath).row)
+            tableView.deleteRows(at: [indexPath], with: .fade)
+        }
+    }
+    
+    // MARK: - Handle rotation transition
+    
+    override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
+        tableView.reloadData()
+    }
+}