Skip to content
This repository was archived by the owner on Nov 26, 2020. It is now read-only.

🎉 Fix and closes issue #158 and #41 #159

Merged
merged 1 commit into from
Sep 27, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions Example/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@ PODS:
- AEXML (= 3.0)
- FontBlaster (= 2.1.4)
- JSQWebViewController (~> 3.0)
- MenuItemKit (= 1.1.3)
- RealmSwift (~> 1.0)
- SSZipArchive (= 1.5)
- UIMenuItem-CXAImageSupport (~> 0.0)
- ZFDragableModalTransition (~> 0.6)
- FontBlaster (2.1.4)
- JSQWebViewController (3.0.0)
- MenuItemKit (1.1.3)
- Nimble (4.1.0)
- Quick (0.9.2)
- Realm (1.0.2):
Expand All @@ -18,7 +19,6 @@ PODS:
- RealmSwift (1.0.2):
- Realm (= 1.0.2)
- SSZipArchive (1.5)
- UIMenuItem-CXAImageSupport (0.0.1)
- ZFDragableModalTransition (0.6)

DEPENDENCIES:
Expand All @@ -32,15 +32,15 @@ EXTERNAL SOURCES:

SPEC CHECKSUMS:
AEXML: 716fb0a8decba4a3517324a71fee3685b30233d2
FolioReaderKit: 0d8e44d7ed0ed4bfd9724dae7ef049b1fb5a4552
FolioReaderKit: f29940caaa8f444cafcc7b139ff166f7a3d3ee0c
FontBlaster: b780f709b8f705638d0c80a1ecdfb23b3077d0a6
JSQWebViewController: eaa6bd68d9e1426ae25ade99c9bbde4c6cdd4120
MenuItemKit: 11c448d9172936ee79ebb78f36dffd396020a9e5
Nimble: 97a0a4cae5124c117115634b2d055d8c97d0af19
Quick: 18d057bc66451eedd5d1c8dc99ba2a5db6e60226
Realm: 9d5c46a4d7d27958530a8dfc58f63a99e5c2cba3
RealmSwift: 82f3ac5e24530143dddfde2033acc0d308f27d96
SSZipArchive: 29daace2bccb90a47de2837744da397728ff9207
UIMenuItem-CXAImageSupport: 2945e2af4487414caad801ed8ff6ac8db274e986
ZFDragableModalTransition: 0d294eaaba6edfcb9839595de765f9ca06a4b524

PODFILE CHECKSUM: 019ed1399429245758bdf9b0c090c4b685a25030
Expand Down
2 changes: 1 addition & 1 deletion FolioReaderKit.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ Pod::Spec.new do |s|
s.libraries = "z"
s.frameworks = 'CoreData'
s.dependency 'SSZipArchive', '1.5'
s.dependency 'UIMenuItem-CXAImageSupport', '~> 0.0'
s.dependency 'MenuItemKit', '1.1.3'
s.dependency 'ZFDragableModalTransition', '~> 0.6'
s.dependency 'AEXML', '3.0'
s.dependency 'FontBlaster', '2.1.4'
Expand Down
28 changes: 11 additions & 17 deletions Source/FolioReaderPage.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

import UIKit
import SafariServices
import UIMenuItem_CXAImageSupport
import MenuItemKit
import JSQWebViewController

/// Protocol which is used from `FolioReaderPage`s.
Expand Down Expand Up @@ -445,6 +445,16 @@ public class FolioReaderPage: UICollectionViewCell, UIWebViewDelegate, UIGesture
webView.isColors = false
webView.createMenu(options: false)
}

if !webView.isShare && !webView.isColors {
if let result = webView.js("getSelectedText()") where result.componentsSeparatedByString(" ").count == 1 {
webView.isOneWord = true
webView.createMenu(options: false)
} else {
webView.isOneWord = false
}
}

return super.canPerformAction(action, withSender: sender)
}

Expand Down Expand Up @@ -482,19 +492,3 @@ public class FolioReaderPage: UICollectionViewCell, UIWebViewDelegate, UIGesture
return webView.js(javaScriptCode)
}
}

// MARK: - UIMenuItem extension

extension UIMenuItem {
convenience init(title: String, image: UIImage, action: Selector) {
#if COCOAPODS
self.init(title: title, action: action)
self.cxa_initWithTitle(title, action: action, image: image, hidesShadow: true)
#else
let settings = CXAMenuItemSettings()
settings.image = image
settings.shadowDisabled = true
self.init(title: title, action: action, settings: settings)
#endif
}
}
88 changes: 56 additions & 32 deletions Source/FolioReaderWebView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,39 +12,23 @@ class FolioReaderWebView: UIWebView {

var isColors = false
var isShare = false
var isOneWord = false

// MARK: - UIMenuController

public override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool {

if(readerConfig == nil){
guard readerConfig != nil else {
return super.canPerformAction(action, withSender: sender)
}

// menu on existing highlight

if isShare {
if action == #selector(colors(_:)) || (action == #selector(share(_:)) && readerConfig.allowSharing) || action == #selector(remove(_:)) {
return true
}
return false

// menu for selecting highlight color
} else if isColors {
if action == #selector(setYellow(_:)) || action == #selector(setGreen(_:)) || action == #selector(setBlue(_:)) || action == #selector(setPink(_:)) || action == #selector(setUnderline(_:)) {
return true
}
return false

// default menu
} else {
var isOneWord = false
if let result = js("getSelectedText()") where result.componentsSeparatedByString(" ").count == 1 {
isOneWord = true
}

if action == #selector(highlight(_:))
|| (action == #selector(define(_:)) && isOneWord)
|| (action == #selector(play(_:)) && (book.hasAudio() || readerConfig.enableTTS))
|| (action == #selector(play(_:)) && (book.hasAudio() || readerConfig.enableTTS))
|| (action == #selector(share(_:)) && readerConfig.allowSharing)
|| (action == #selector(NSObject.copy(_:)) && readerConfig.allowSharing) {
return true
Expand Down Expand Up @@ -204,21 +188,61 @@ class FolioReaderWebView: UIWebView {
let pink = UIImage(readerImageNamed: "pink-marker")
let underline = UIImage(readerImageNamed: "underline-marker")

let menuController = UIMenuController.sharedMenuController()

let highlightItem = UIMenuItem(title: readerConfig.localizedHighlightMenu, action: #selector(highlight(_:)))
let playAudioItem = UIMenuItem(title: readerConfig.localizedPlayMenu, action: #selector(play(_:)))
let defineItem = UIMenuItem(title: readerConfig.localizedDefineMenu, action: #selector(define(_:)))
let colorsItem = UIMenuItem(title: "C", image: colors!, action: #selector(self.colors(_:)))
let shareItem = UIMenuItem(title: "S", image: share!, action: #selector(self.share(_:)))
let removeItem = UIMenuItem(title: "R", image: remove!, action: #selector(self.remove(_:)))
let yellowItem = UIMenuItem(title: "Y", image: yellow!, action: #selector(setYellow(_:)))
let greenItem = UIMenuItem(title: "G", image: green!, action: #selector(setGreen(_:)))
let blueItem = UIMenuItem(title: "B", image: blue!, action: #selector(setBlue(_:)))
let pinkItem = UIMenuItem(title: "P", image: pink!, action: #selector(setPink(_:)))
let underlineItem = UIMenuItem(title: "U", image: underline!, action: #selector(setUnderline(_:)))

let menuItems = [playAudioItem, highlightItem, defineItem, colorsItem, removeItem, yellowItem, greenItem, blueItem, pinkItem, underlineItem, shareItem]

UIMenuController.sharedMenuController().menuItems = menuItems
let colorsItem = UIMenuItem(title: "C", image: colors) { [weak self] _ in
self?.colors(menuController)
}
let shareItem = UIMenuItem(title: "S", image: share) { [weak self] _ in
self?.share(menuController)
}
let removeItem = UIMenuItem(title: "R", image: remove) { [weak self] _ in
self?.remove(menuController)
}
let yellowItem = UIMenuItem(title: "Y", image: yellow) { [weak self] _ in
self?.setYellow(menuController)
}
let greenItem = UIMenuItem(title: "G", image: green) { [weak self] _ in
self?.setGreen(menuController)
}
let blueItem = UIMenuItem(title: "B", image: blue) { [weak self] _ in
self?.setBlue(menuController)
}
let pinkItem = UIMenuItem(title: "P", image: pink) { [weak self] _ in
self?.setPink(menuController)
}
let underlineItem = UIMenuItem(title: "U", image: underline) { [weak self] _ in
self?.setUnderline(menuController)
}

var menuItems = [shareItem]

// menu on existing highlight
if isShare {
menuItems = [colorsItem, removeItem]
if readerConfig.allowSharing {
menuItems.append(shareItem)
}
} else if isColors {
// menu for selecting highlight color
menuItems = [yellowItem, greenItem, blueItem, pinkItem, underlineItem]
} else {
// default menu
menuItems = [highlightItem, defineItem, shareItem]

if book.hasAudio() || readerConfig.enableTTS {
menuItems.insert(playAudioItem, atIndex: 0)
}

if !readerConfig.allowSharing {
menuItems.removeLast()
}
}

menuController.menuItems = menuItems
}

func setMenuVisible(menuVisible: Bool, animated: Bool = true, andRect rect: CGRect = CGRectZero) {
Expand Down