diff --git a/Components/Sources/Components/Components/Editors/Source Editor/Formatter Extensions/WKSourceEditorFormatterLink+ButtonActions.swift b/Components/Sources/Components/Components/Editors/Source Editor/Formatter Extensions/WKSourceEditorFormatterLink+ButtonActions.swift index 1f0dcbfe832..604decca42f 100644 --- a/Components/Sources/Components/Components/Editors/Source Editor/Formatter Extensions/WKSourceEditorFormatterLink+ButtonActions.swift +++ b/Components/Sources/Components/Components/Editors/Source Editor/Formatter Extensions/WKSourceEditorFormatterLink+ButtonActions.swift @@ -98,4 +98,13 @@ extension WKSourceEditorFormatterLink { } } } + + func insertImage(wikitext: String, in textView: UITextView) { + + guard let selectedTextRange = textView.selectedTextRange else { + return + } + + textView.replace(selectedTextRange, withText: wikitext) + } } diff --git a/Components/Sources/Components/Components/Editors/Source Editor/WKSourceEditorViewController.swift b/Components/Sources/Components/Components/Editors/Source Editor/WKSourceEditorViewController.swift index c8215dc9240..9743907515c 100644 --- a/Components/Sources/Components/Components/Editors/Source Editor/WKSourceEditorViewController.swift +++ b/Components/Sources/Components/Components/Editors/Source Editor/WKSourceEditorViewController.swift @@ -5,6 +5,7 @@ public protocol WKSourceEditorViewControllerDelegate: AnyObject { func sourceEditorViewControllerDidTapFind(sourceEditorViewController: WKSourceEditorViewController) func sourceEditorViewControllerDidRemoveFindInputAccessoryView(sourceEditorViewController: WKSourceEditorViewController) func sourceEditorViewControllerDidTapLink(parameters: WKSourceEditorFormatterLinkWizardParameters) + func sourceEditorViewControllerDidTapImage() } // MARK: NSNotification Names @@ -266,6 +267,10 @@ public class WKSourceEditorViewController: WKComponentViewController { self.preselectedTextRange = nil } + + public func insertImage(wikitext: String) { + textFrameworkMediator.linkFormatter?.insertImage(wikitext: wikitext, in: textView) + } } // MARK: - Private @@ -364,7 +369,7 @@ extension WKSourceEditorViewController: WKEditorToolbarExpandingViewDelegate { } func toolbarExpandingViewDidTapImage(toolbarView: WKEditorToolbarExpandingView) { - + delegate?.sourceEditorViewControllerDidTapImage() } } diff --git a/Wikipedia/Code/InsertMediaViewController.swift b/Wikipedia/Code/InsertMediaViewController.swift index c7f142f84ef..39fd8bbd271 100644 --- a/Wikipedia/Code/InsertMediaViewController.swift +++ b/Wikipedia/Code/InsertMediaViewController.swift @@ -130,8 +130,7 @@ final class InsertMediaViewController: ViewController { switch (mediaSettings.caption, mediaSettings.alternativeText) { case (let caption?, let alternativeText?): wikitext = """ - [[\(searchResult.fileTitle) | \(mediaSettings.advanced.imageType.rawValue) | \(mediaSettings.advanced.imageSize.rawValue) | \(mediaSettings.advanced.imagePosition.rawValue) | alt= \(alternativeText) | - \(caption)]] + [[\(searchResult.fileTitle) | \(mediaSettings.advanced.imageType.rawValue) | \(mediaSettings.advanced.imageSize.rawValue) | \(mediaSettings.advanced.imagePosition.rawValue) | alt= \(alternativeText) | \(caption)]] """ case (let caption?, nil): wikitext = """ diff --git a/Wikipedia/Code/PageEditorViewController.swift b/Wikipedia/Code/PageEditorViewController.swift index 5ed15e64b62..01b317bc44b 100644 --- a/Wikipedia/Code/PageEditorViewController.swift +++ b/Wikipedia/Code/PageEditorViewController.swift @@ -233,6 +233,7 @@ extension PageEditorViewController: Themeable { // MARK: - WKSourceEditorViewControllerDelegate extension PageEditorViewController: WKSourceEditorViewControllerDelegate { + func sourceEditorViewControllerDidTapFind(sourceEditorViewController: WKSourceEditorViewController) { showFocusNavigationView() } @@ -273,6 +274,15 @@ extension PageEditorViewController: WKSourceEditorViewControllerDelegate { present(navigationController, animated: true) } } + + func sourceEditorViewControllerDidTapImage() { + let insertMediaViewController = InsertMediaViewController(articleTitle: pageURL.wmf_title, siteURL: pageURL.wmf_site) + insertMediaViewController.delegate = self + insertMediaViewController.apply(theme: theme) + let navigationController = WMFThemeableNavigationController(rootViewController: insertMediaViewController, theme: theme) + navigationController.isNavigationBarHidden = true + present(navigationController, animated: true) + } } // MARK: - PageEditorNavigationItemControllerDelegate @@ -384,6 +394,19 @@ extension PageEditorViewController: InsertLinkViewControllerDelegate { } } +// MARK: - Insert + +extension PageEditorViewController: InsertMediaViewControllerDelegate { + func insertMediaViewController(_ insertMediaViewController: InsertMediaViewController, didTapCloseButton button: UIBarButtonItem) { + dismiss(animated: true) + } + + func insertMediaViewController(_ insertMediaViewController: InsertMediaViewController, didPrepareWikitextToInsert wikitext: String) { + sourceEditor.insertImage(wikitext: wikitext) + dismiss(animated: true) + } +} + enum SourceEditorAccessibilityIdentifiers: String { case entryButton = "Source Editor Entry Button" case textView = "Source Editor TextView" diff --git a/WikipediaUITests/UITestHelperViewController.swift b/WikipediaUITests/UITestHelperViewController.swift index 79965132862..f8c486ab0d7 100644 --- a/WikipediaUITests/UITestHelperViewController.swift +++ b/WikipediaUITests/UITestHelperViewController.swift @@ -154,6 +154,10 @@ public class UITestHelperViewController: WKCanvasViewController { extension UITestHelperViewController: WKSourceEditorViewControllerDelegate { + public func sourceEditorViewControllerDidTapImage() { + + } + public func sourceEditorViewControllerDidTapLink(parameters: Components.WKSourceEditorFormatterLinkWizardParameters) { }