Skip to content

Commit a6d074f

Browse files
author
Momo Ozawa
committed
Merge branch 'trunk' into task/18389-qs-next-steps-notification
# Conflicts: # Podfile # Podfile.lock
2 parents 232319f + be62494 commit a6d074f

File tree

133 files changed

+555
-730
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

133 files changed

+555
-730
lines changed

Podfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ def wordpress_ui
4747
end
4848

4949
def wordpress_kit
50-
# pod 'WordPressKit', '~> 4.51.0'
50+
pod 'WordPressKit', '~> 4.52.0-beta'
5151
# pod 'WordPressKit', :git => 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', :tag => ''
52-
pod 'WordPressKit', :git => 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', :branch => 'task/18389-update-mark-qs-checklist-as-complete'
52+
# pod 'WordPressKit', :git => 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', :branch => ''
5353
# pod 'WordPressKit', :git => 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', :commit => ''
5454
# pod 'WordPressKit', :path => '../WordPressKit-iOS'
5555
end

Podfile.lock

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -591,7 +591,7 @@ DEPENDENCIES:
591591
- SVProgressHUD (= 2.2.5)
592592
- WordPress-Editor-iOS (~> 1.19.8)
593593
- WordPressAuthenticator (~> 2.0.0)
594-
- WordPressKit (from `https://github.com/wordpress-mobile/WordPressKit-iOS.git`, branch `task/18389-update-mark-qs-checklist-as-complete`)
594+
- WordPressKit (~> 4.52.0-beta)
595595
- WordPressMocks (~> 0.0.15)
596596
- WordPressShared (~> 1.17.1)
597597
- WordPressUI (~> 1.12.5)
@@ -603,6 +603,7 @@ DEPENDENCIES:
603603
SPEC REPOS:
604604
https://github.com/wordpress-mobile/cocoapods-specs.git:
605605
- WordPressAuthenticator
606+
- WordPressKit
606607
trunk:
607608
- Alamofire
608609
- AlamofireImage
@@ -752,9 +753,6 @@ EXTERNAL SOURCES:
752753
:git: https://github.com/wordpress-mobile/gutenberg-mobile.git
753754
:submodules: true
754755
:tag: v1.75.0
755-
WordPressKit:
756-
:branch: task/18389-update-mark-qs-checklist-as-complete
757-
:git: https://github.com/wordpress-mobile/WordPressKit-iOS.git
758756
Yoga:
759757
:podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.75.0/third-party-podspecs/Yoga.podspec.json
760758

@@ -770,9 +768,6 @@ CHECKOUT OPTIONS:
770768
:git: https://github.com/wordpress-mobile/gutenberg-mobile.git
771769
:submodules: true
772770
:tag: v1.75.0
773-
WordPressKit:
774-
:commit: 674859ccaba6d1d3aadec10f2ad7d2cae45f02f4
775-
:git: https://github.com/wordpress-mobile/WordPressKit-iOS.git
776771

777772
SPEC CHECKSUMS:
778773
Alamofire: 3ec537f71edc9804815215393ae2b1a8ea33a844
@@ -858,7 +853,7 @@ SPEC CHECKSUMS:
858853
WordPress-Aztec-iOS: 7d11d598f14c82c727c08b56bd35fbeb7dafb504
859854
WordPress-Editor-iOS: 9eb9f12f21a5209cb837908d81ffe1e31cb27345
860855
WordPressAuthenticator: 5163f732e4e529781f931f158f54b1a1545bc536
861-
WordPressKit: 1af05d9ab2a434290be54b091094e54af081fc58
856+
WordPressKit: cc1e5b12e92232d977664682ac69110852fc4ce7
862857
WordPressMocks: 6b52b0764d9939408151367dd9c6e8a910877f4d
863858
WordPressShared: 0c4bc5e25765732fcf5d07f28c81970ab28493fb
864859
WordPressUI: c5be816f6c7b3392224ac21de9e521e89fa108ac
@@ -874,6 +869,6 @@ SPEC CHECKSUMS:
874869
ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba
875870
ZIPFoundation: ae5b4b813d216d3bf0a148773267fff14bd51d37
876871

877-
PODFILE CHECKSUM: 6ebe3ea0034d278b43717825cacc0467c045b5c6
872+
PODFILE CHECKSUM: d7bc9c0d041c5f2d6e109c77b2bf02d28f5f81c0
878873

879874
COCOAPODS: 1.11.2

RELEASE-NOTES.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
19.9
22
-----
3+
* [*] Site Settings: we fixed an issue that prevented the site title to be updated when it changed in Site Settings [#18543]
34
* [*] Media Picker: Fixed an issue where the empty state view was being displayed incorrectly. [#18471]
5+
* [*] Site Creation: we fixed an issue where the navigation buttons were not scaling when large fonts were selected on the device [#18559]
6+
* [*] Widgets: we fixed an issue where text appeared flipped in rtl languages [#18567]
47

58
19.8
69
-----
Lines changed: 3 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,76 +1,11 @@
1-
21
extension Post {
32

4-
func prepareForPrompt(_ prompt: Prompt?) {
3+
func prepareForPrompt(_ prompt: BloggingPrompt?) {
54
guard let prompt = prompt else {
65
return
76
}
8-
postTitle = prompt.postTitle
9-
let pullquoteBlock = getPullquoteBlock(title: prompt.promptText,
10-
promptUrl: prompt.promptUrl?.absoluteString,
11-
answerUrl: prompt.answerUrl?.absoluteString,
12-
answerCount: prompt.answerCount)
13-
content = pullquoteBlock + Strings.emptyParagraph
7+
postTitle = prompt.title
8+
content = prompt.content
149
}
1510

1611
}
17-
18-
// MARK: - Private methods
19-
20-
private extension Post {
21-
22-
func getPullquoteBlock(title: String,
23-
promptUrl: String?,
24-
answerUrl: String?,
25-
answerCount: Int) -> String {
26-
let answerFormat = answerCount == 1 ? Strings.answerInfoSingularFormat : Strings.answerInfoPluralFormat
27-
let answerText = String(format: answerFormat, answerCount)
28-
let promptUrlHtml = getUrlHtml(url: promptUrl, urlText: Strings.prompt)
29-
let answerUrlHtml = getUrlHtml(url: answerUrl, urlText: answerText)
30-
let separatorText = promptUrlHtml.isEmpty || answerUrlHtml.isEmpty ? "" : ""
31-
let subtitleHtml = promptUrlHtml.isEmpty && answerUrlHtml.isEmpty ? "" : "<cite>\(promptUrlHtml)\(separatorText)\(answerUrlHtml)</cite>"
32-
return """
33-
<!-- wp:pullquote -->
34-
<figure class="wp-block-pullquote"><blockquote><p>\(title)</p>\(subtitleHtml)</blockquote></figure>
35-
<!-- /wp:pullquote -->
36-
"""
37-
}
38-
39-
func getUrlHtml(url: String?, urlText: String) -> String {
40-
guard let url = url else {
41-
return ""
42-
}
43-
return "<a href=\"\(url)\">\(urlText)</a>"
44-
}
45-
46-
// MARK: - Strings
47-
48-
struct Strings {
49-
static let prompt = NSLocalizedString("Prompt", comment: "Prompt link text in a new blogging prompts post")
50-
static let answerInfoSingularFormat = NSLocalizedString("%1$d answer", comment: "Singular format string for displaying the number of users that answered the blogging prompt.")
51-
static let answerInfoPluralFormat = NSLocalizedString("%1$d answers", comment: "Plural format string for displaying the number of users that answered the blogging prompt.")
52-
static let emptyParagraph = """
53-
<!-- wp:paragraph -->
54-
<p></p>
55-
<!-- /wp:paragraph -->
56-
"""
57-
}
58-
59-
}
60-
61-
// MARK: - Temporary prompt object
62-
63-
// TODO: Remove after prompt object is created and use that
64-
struct Prompt {
65-
let postTitle: String
66-
let promptText: String
67-
let promptUrl: URL?
68-
let answerUrl: URL?
69-
let answerCount: Int
70-
71-
static let examplePrompt = Prompt(postTitle: "Cast the movie of my life",
72-
promptText: "Cast the movie of your life.",
73-
promptUrl: URL(string: "https://wordpress.com"),
74-
answerUrl: URL(string: "https://wordpress.com"),
75-
answerCount: 19)
76-
}

WordPress/Classes/Services/BloggingPromptsService.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,22 @@ struct BloggingPrompt {
7373
let answered: Bool
7474
let answerCount: Int
7575
let displayAvatarURLs: [URL]
76+
let attribution: String
7677

78+
static let examplePrompt = BloggingPrompt(
79+
promptID: 239,
80+
text: "Was there a toy or thing you always wanted as a child, during the holidays or on your birthday, but never received? Tell us about it.",
81+
title: "Prompt number 1",
82+
content: "<!-- wp:pullquote -->\n<figure class=\"wp-block-pullquote\"><blockquote><p>Was there a toy or thing you always wanted as a child, during the holidays or on your birthday, but never received? Tell us about it.</p><cite>(courtesy of plinky.com)</cite></blockquote></figure>\n<!-- /wp:pullquote -->",
83+
date: Date(),
84+
answered: false,
85+
answerCount: 5,
86+
displayAvatarURLs: [],
87+
attribution: ""
88+
)
89+
}
90+
91+
extension BloggingPrompt {
7792
init(with remotePrompt: RemoteBloggingPrompt) {
7893
promptID = remotePrompt.promptID
7994
text = remotePrompt.text
@@ -83,5 +98,6 @@ struct BloggingPrompt {
8398
answered = remotePrompt.answered
8499
answerCount = remotePrompt.answeredUsersCount
85100
displayAvatarURLs = remotePrompt.answeredUserAvatarURLs
101+
attribution = remotePrompt.attribution
86102
}
87103
}

WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ import Foundation
4848
case gutenbergEditorSettingsFetched
4949
case gutenbergEditorHelpShown
5050
case gutenbergEditorBlockInserted
51+
case gutenbergEditorBlockMoved
5152

5253
// Notifications Permissions
5354
case pushNotificationsPrimerSeen
@@ -426,6 +427,8 @@ import Foundation
426427
return "editor_help_shown"
427428
case .gutenbergEditorBlockInserted:
428429
return "editor_block_inserted"
430+
case .gutenbergEditorBlockMoved:
431+
return "editor_block_moved"
429432
// Notifications permissions
430433
case .pushNotificationsPrimerSeen:
431434
return "notifications_primer_seen"
@@ -1095,6 +1098,7 @@ extension WPAnalytics {
10951098
var event: WPAnalyticsEvent?
10961099
switch eventName {
10971100
case "editor_block_inserted": event = .gutenbergEditorBlockInserted
1101+
case "editor_block_moved": event = .gutenbergEditorBlockMoved
10981102
default: event = nil
10991103
}
11001104

WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Prompts/DashboardPromptsCardCell.swift

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,14 @@ class DashboardPromptsCardCell: UICollectionViewCell, Reusable {
6565
}
6666
}
6767

68+
private var didFailLoadingPrompt: Bool = false {
69+
didSet {
70+
if didFailLoadingPrompt != oldValue {
71+
refreshStackView()
72+
}
73+
}
74+
}
75+
6876
// Used to present:
6977
// - The menu sheet for contextual menu in iOS13.
7078
// - The Blogging Prompts list when selected from the contextual menu.
@@ -320,6 +328,12 @@ private extension DashboardPromptsCardCell {
320328
// clear existing views.
321329
containerStackView.removeAllSubviews()
322330

331+
guard !didFailLoadingPrompt else {
332+
promptLabel.text = Strings.errorTitle
333+
containerStackView.addArrangedSubview(promptTitleView)
334+
return
335+
}
336+
323337
promptLabel.text = forExampleDisplay ? Strings.examplePrompt : prompt?.text.stringByDecodingXMLCharacters().trim()
324338
containerStackView.addArrangedSubview(promptTitleView)
325339

@@ -336,13 +350,17 @@ private extension DashboardPromptsCardCell {
336350
// TODO: check for cached prompt first.
337351

338352
guard let bloggingPromptsService = bloggingPromptsService else {
353+
didFailLoadingPrompt = true
339354
DDLogError("Failed creating BloggingPromptsService instance.")
340355
return
341356
}
342357

343358
bloggingPromptsService.fetchTodaysPrompt(success: { [weak self] (prompt) in
344359
self?.prompt = prompt
345-
}, failure: { (error) in
360+
self?.didFailLoadingPrompt = false
361+
}, failure: { [weak self] (error) in
362+
self?.prompt = nil
363+
self?.didFailLoadingPrompt = true
346364
DDLogError("Failed fetching blogging prompt: \(String(describing: error))")
347365
})
348366
}
@@ -412,6 +430,7 @@ private extension DashboardPromptsCardCell {
412430
+ "that answered the blogging prompt.")
413431
static let answerInfoPluralFormat = NSLocalizedString("%1$d answers", comment: "Plural format string for displaying the number of users "
414432
+ "that answered the blogging prompt.")
433+
static let errorTitle = NSLocalizedString("Error loading prompt", comment: "Text displayed when there is a failure loading a blogging prompt.")
415434
}
416435

417436
struct Style {

WordPress/Classes/ViewRelated/Blog/Site Picker/SitePickerViewController.swift

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ final class SitePickerViewController: UIViewController {
4545
super.viewDidLoad()
4646
setupHeaderView()
4747
startObservingQuickStart()
48+
startObservingTitleChanges()
4849
}
4950

5051
deinit {
@@ -57,6 +58,15 @@ final class SitePickerViewController: UIViewController {
5758
view.addSubview(blogDetailHeaderView)
5859
view.pinSubviewToAllEdges(blogDetailHeaderView)
5960
}
61+
62+
private func startObservingTitleChanges() {
63+
NotificationCenter.default.addObserver(forName: NSNotification.Name.WPBlogUpdated,
64+
object: nil,
65+
queue: .main) { [weak self] _ in
66+
67+
self?.updateTitles()
68+
}
69+
}
6070
}
6171

6272
// MARK: - BlogDetailHeaderViewDelegate
@@ -191,22 +201,14 @@ extension SitePickerViewController {
191201
silentlyForBlog: blog)
192202

193203
blogService.updateSettings(for: blog, success: { [weak self] in
194-
NotificationCenter.default.post(name: NSNotification.Name.WPBlogUpdated, object: nil)
195204

196205
let notice = Notice(title: title,
197206
message: SiteTitleStrings.titleChangeSuccessfulMessage,
198207
feedbackType: .success)
199208
ActionDispatcher.global.dispatch(NoticeAction.post(notice))
200209

201210
self?.blogDetailHeaderView.setTitleLoading(false)
202-
self?.blogDetailHeaderView.refreshSiteTitle()
203-
204-
guard let parent = self?.parent as? MySiteViewController else {
205-
return
206-
}
207-
208-
parent.updateNavigationTitle(for: blog)
209-
211+
NotificationCenter.default.post(name: NSNotification.Name.WPBlogUpdated, object: nil)
210212
}, failure: { [weak self] error in
211213
self?.blog.settings?.name = existingBlogTitle
212214
self?.blogDetailHeaderView.setTitleLoading(false)
@@ -219,6 +221,16 @@ extension SitePickerViewController {
219221
})
220222
}
221223

224+
/// Updates site title and navigation bar title
225+
private func updateTitles() {
226+
blogDetailHeaderView.refreshSiteTitle()
227+
228+
guard let parent = parent as? MySiteViewController else {
229+
return
230+
}
231+
parent.updateNavigationTitle(for: blog)
232+
}
233+
222234
private func showViewSite() {
223235
WPAppAnalytics.track(.openedViewSite, withProperties: [WPAppAnalyticsKeyTapSource: "link"], with: blog)
224236

WordPress/Classes/ViewRelated/Post/EditPostViewController.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class EditPostViewController: UIViewController {
2323
private let loadAutosaveRevision: Bool
2424

2525
@objc fileprivate(set) var post: Post?
26-
private let prompt: Prompt?
26+
private let prompt: BloggingPrompt?
2727
fileprivate var hasShownEditor = false
2828
fileprivate var editingExistingPost = false
2929
fileprivate let blog: Blog
@@ -65,7 +65,7 @@ class EditPostViewController: UIViewController {
6565
///
6666
/// - Parameter blog: blog to create a new post for
6767
/// - Parameter prompt: blogging prompt to configure the new post for
68-
convenience init(blog: Blog, prompt: Prompt) {
68+
convenience init(blog: Blog, prompt: BloggingPrompt) {
6969
self.init(post: nil, blog: blog, prompt: prompt)
7070
}
7171

@@ -75,7 +75,7 @@ class EditPostViewController: UIViewController {
7575
/// - post: the post to edit
7676
/// - blog: the blog to create a post for, if post is nil
7777
/// - Note: it's preferable to use one of the convenience initializers
78-
fileprivate init(post: Post?, blog: Blog, loadAutosaveRevision: Bool = false, prompt: Prompt? = nil) {
78+
fileprivate init(post: Post?, blog: Blog, loadAutosaveRevision: Bool = false, prompt: BloggingPrompt? = nil) {
7979
self.post = post
8080
self.loadAutosaveRevision = loadAutosaveRevision
8181
if let post = post {

WordPress/Classes/ViewRelated/Site Creation/Wizard/WizardNavigation.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import UIKit
22

33
// MARK: - WizardNavigation
4-
final class WizardNavigation: GutenbergLightNavigationController {
4+
final class WizardNavigation: UINavigationController {
55
private let steps: [WizardStep]
66
private let pointer: WizardNavigationPointer
77

0 commit comments

Comments
 (0)