Update to Swift 3.0 and RAC 5.0, remove UI Extensions - #159

Open
iv-mexx wants to merge 4 commits into
RACCommunity:masterfrom
iv-mexx:cleanupExtensions
Open

Update to Swift 3.0 and RAC 5.0, remove UI Extensions#159
iv-mexx wants to merge 4 commits into
RACCommunity:masterfrom
iv-mexx:cleanupExtensions

Conversation

@iv-mexx

@iv-mexxiv-mexx commented Oct 31, 2016

Copy link
Copy Markdown
Member

First of sorry that theres so much in this one Pull Request at once.

  • Update to Swift 3.0
  • Update to RAC 5.0
  • Removal of UIKit/AppKit Extensions and some other little things that are nowalready part of RAC

I tried to separate these out, but it is all intertwined, Swift 3.0 required RAC 5.0, and then converting all those methods that would be removed in the next step anyway seemed like unnecessary work.

Open Question

Theres two RACSignal extensions:

  • RACSignal.rex_toSignal()
  • RACSignal.rex_toTriggerSignal()

For now I was hesitant to require ReactiveObjC/ReactiveObjCBridge just for those two extensions...

  • ReactiveObjCBridge only contains a toSignalProducer and no toSignal. Either we could add toSignal to the bridge as well, or just remove this conversion?
  • rex_toTriggerSignal was mostly used internally to convert use rac_willDealloc as a trigger, which now is not necessary anymore with Lifetime.

Complete List of Removals

Those are all documented in Deprecations+Removals.swift, but this list here could also be used in the change log for the next release.

Removals

RAC Extensions

  • Removed Action.rex_enabledProducer. Use Action.reactive.isEnabled instead.
  • Removed Action.rex_executingProducer. Use Action.reacitve.isExecuting instead.

Foundation Extensions

  • Removed NSObject.rex_producerForKeyPath. Use NSObject.reactive.values(forKeyPath:) instead.
  • Removed NSObject.rex_willDealloc. Use NSObject.reactive.lifetime.ended instead.

UIKit Extensions

  • Removed Reusable protocol, use Reusable protocol from RAC instead
    • Removed UITableViewCell.rex_prepareForReuse. Use UITableViewCell.reactive.prepareForReuse instead.
    • Removed UITableViewHeaderFooterCell.rex_prepareForReuse. Use UITableViewHeaderFooterCell.reactive.prepareForReuse instead.
    • Removed UICollectionReusableView.rex_prepareForReuse. Use UICollectionReusableView.reactive.prepareForReuse instead.
  • Removed UIControl.rex_enabled. Use UIControl.reactive.isEnabled instead
  • Removed UIControl.rex_selected. Use UIControl.reactive.isSelected instead
  • Removed UIControl.rex_highlighted. Use UIControl.reactive.isHighlighted instead
  • Removed UIActivityIndicatorView.rex_animating. Use UIActivityIndicatorView.reactive.isAnimating instead.
  • Removed UIBarButtonItem.rex_action. Use UIBarButtonItem.reactive.pressed instead.
  • Removed UIBarItem.rex_enabled. Use UIBarItem.reactive.isEnabled instead.
  • Removed UIButton.rex_pressed. Use UIButton.reactive.pressed instead.
  • Removed UIButton.rex_title. Use UIButton.reactive.title instead.
  • Removed UIDatePicker. use UIDatePicker.reactive.date or UIDatePicker.reactive.dates instead.
  • Removed UIImageView.rex_image. Use UIImageView.reactive.image instead.
  • Removed UIImageView.rex_highlightedImage. Use UIImageView.reactive.highlightedImage instead.
  • Removed UILabel.rex_text. Use UILabe.reactive.text instead.
  • Removed UILabel.rex_attributedText. Use UILabe.reactive.attributedText instead.
  • Removed UILabel.rex_textColor. Use UILabe.reactive.textColor instead.
  • Removed UIProgressView.rex_progress. Use UIProgressView.reactive.progress instead.
  • Removed UISegmentedControl.rex_selectedSegmentIndex. Use UISegmentedControl.reactive.segmentedSegmentIndexes or UISegmentedControl.reactive.segmentedSegmentIndex instead.
  • Removed UISwitch.rex_on. Use UISwitch.reactive.isOn or UISwitch.reactive.isOnValues instead.
  • Removed UITextField.rex_text. Use UITextField.reactive.text, UITextField.reactive.textValues or UITextField.reactive.continuousTextValues instead.
  • Removed UITextView.rex_text. Use UITextView.reactive.text, UITextView.reactive.textValues or UITextView.reactive.continuousTextValues instead.
  • Removed UIView.rex_alpha. Use UIView.reactive.alpha instead.
  • Removed UIView.rex_hidden. Use UIView.reactive.isHidden instead.
  • Removed UIView.rex_userInteractionEnabled. Use UIView.reactive.isUserInteractionEnabled instead.

AppKit Extensions

  • Removed NSTextField.rex_textSignal. Use NSTextField.reactive.continuousStringValues instead.

Tests

I've kept all the UIKit and AppKit Tests around, but converted them to use the reactive extensions. I've converted them almost completely via quick-fixes to verify that the replacements in Deprecations+Removals.swift work correctly.

@mdiep

Copy link
Copy Markdown
Contributor

What's left in Rex at this point? I've been assuming that Rex would disappear with RAC 5.

@iv-mexx

iv-mexx commented Oct 31, 2016

Copy link
Copy Markdown
MemberAuthor

I'd say left are

Extensions for ReactiveCocoa that may not fit in the core framework.

😄

  • some operators on Signal and SignalProducer that are not in RAC like ignoreError, filterMap, timeoutAfter, muteForuncollect, groupBy
  • some additional bindings for NSUserDefauls, NSData
  • Signals for UIViewController for view will/did appear/disappear
  • Boolean Properties:
 let lhs = MutableProperty(false), rhs = MutableProperty(false)
let and = lhs.and(rhs)

Personally, I like (and use) the stuff for properties...

@andersio

andersio commented Oct 31, 2016

Copy link
Copy Markdown
Member

Signals for UIViewController for view will/did appear/disappear

These are covered by NSObject.reactive.trigger(for:), which takes a selector.

Boolean Properties:

You may achieve this through property composition.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@iv-mexx@mdiep@andersio
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Update to Swift 3.0 and RAC 5.0, remove UI Extensions - #159

Open
iv-mexx wants to merge 4 commits into
RACCommunity:masterfrom
iv-mexx:cleanupExtensions
Open

Update to Swift 3.0 and RAC 5.0, remove UI Extensions#159
iv-mexx wants to merge 4 commits into
RACCommunity:masterfrom
iv-mexx:cleanupExtensions

Conversation

@iv-mexx

@iv-mexxiv-mexx commented Oct 31, 2016

Copy link
Copy Markdown
Member

First of sorry that theres so much in this one Pull Request at once.

  • Update to Swift 3.0
  • Update to RAC 5.0
  • Removal of UIKit/AppKit Extensions and some other little things that are nowalready part of RAC

I tried to separate these out, but it is all intertwined, Swift 3.0 required RAC 5.0, and then converting all those methods that would be removed in the next step anyway seemed like unnecessary work.

Open Question

Theres two RACSignal extensions:

  • RACSignal.rex_toSignal()
  • RACSignal.rex_toTriggerSignal()

For now I was hesitant to require ReactiveObjC/ReactiveObjCBridge just for those two extensions...

  • ReactiveObjCBridge only contains a toSignalProducer and no toSignal. Either we could add toSignal to the bridge as well, or just remove this conversion?
  • rex_toTriggerSignal was mostly used internally to convert use rac_willDealloc as a trigger, which now is not necessary anymore with Lifetime.

Complete List of Removals

Those are all documented in Deprecations+Removals.swift, but this list here could also be used in the change log for the next release.

Removals

RAC Extensions

  • Removed Action.rex_enabledProducer. Use Action.reactive.isEnabled instead.
  • Removed Action.rex_executingProducer. Use Action.reacitve.isExecuting instead.

Foundation Extensions

  • Removed NSObject.rex_producerForKeyPath. Use NSObject.reactive.values(forKeyPath:) instead.
  • Removed NSObject.rex_willDealloc. Use NSObject.reactive.lifetime.ended instead.

UIKit Extensions

  • Removed Reusable protocol, use Reusable protocol from RAC instead
    • Removed UITableViewCell.rex_prepareForReuse. Use UITableViewCell.reactive.prepareForReuse instead.
    • Removed UITableViewHeaderFooterCell.rex_prepareForReuse. Use UITableViewHeaderFooterCell.reactive.prepareForReuse instead.
    • Removed UICollectionReusableView.rex_prepareForReuse. Use UICollectionReusableView.reactive.prepareForReuse instead.
  • Removed UIControl.rex_enabled. Use UIControl.reactive.isEnabled instead
  • Removed UIControl.rex_selected. Use UIControl.reactive.isSelected instead
  • Removed UIControl.rex_highlighted. Use UIControl.reactive.isHighlighted instead
  • Removed UIActivityIndicatorView.rex_animating. Use UIActivityIndicatorView.reactive.isAnimating instead.
  • Removed UIBarButtonItem.rex_action. Use UIBarButtonItem.reactive.pressed instead.
  • Removed UIBarItem.rex_enabled. Use UIBarItem.reactive.isEnabled instead.
  • Removed UIButton.rex_pressed. Use UIButton.reactive.pressed instead.
  • Removed UIButton.rex_title. Use UIButton.reactive.title instead.
  • Removed UIDatePicker. use UIDatePicker.reactive.date or UIDatePicker.reactive.dates instead.
  • Removed UIImageView.rex_image. Use UIImageView.reactive.image instead.
  • Removed UIImageView.rex_highlightedImage. Use UIImageView.reactive.highlightedImage instead.
  • Removed UILabel.rex_text. Use UILabe.reactive.text instead.
  • Removed UILabel.rex_attributedText. Use UILabe.reactive.attributedText instead.
  • Removed UILabel.rex_textColor. Use UILabe.reactive.textColor instead.
  • Removed UIProgressView.rex_progress. Use UIProgressView.reactive.progress instead.
  • Removed UISegmentedControl.rex_selectedSegmentIndex. Use UISegmentedControl.reactive.segmentedSegmentIndexes or UISegmentedControl.reactive.segmentedSegmentIndex instead.
  • Removed UISwitch.rex_on. Use UISwitch.reactive.isOn or UISwitch.reactive.isOnValues instead.
  • Removed UITextField.rex_text. Use UITextField.reactive.text, UITextField.reactive.textValues or UITextField.reactive.continuousTextValues instead.
  • Removed UITextView.rex_text. Use UITextView.reactive.text, UITextView.reactive.textValues or UITextView.reactive.continuousTextValues instead.
  • Removed UIView.rex_alpha. Use UIView.reactive.alpha instead.
  • Removed UIView.rex_hidden. Use UIView.reactive.isHidden instead.
  • Removed UIView.rex_userInteractionEnabled. Use UIView.reactive.isUserInteractionEnabled instead.

AppKit Extensions

  • Removed NSTextField.rex_textSignal. Use NSTextField.reactive.continuousStringValues instead.

Tests

I've kept all the UIKit and AppKit Tests around, but converted them to use the reactive extensions. I've converted them almost completely via quick-fixes to verify that the replacements in Deprecations+Removals.swift work correctly.

@mdiep

Copy link
Copy Markdown
Contributor

What's left in Rex at this point? I've been assuming that Rex would disappear with RAC 5.

@iv-mexx

iv-mexx commented Oct 31, 2016

Copy link
Copy Markdown
MemberAuthor

I'd say left are

Extensions for ReactiveCocoa that may not fit in the core framework.

😄

  • some operators on Signal and SignalProducer that are not in RAC like ignoreError, filterMap, timeoutAfter, muteForuncollect, groupBy
  • some additional bindings for NSUserDefauls, NSData
  • Signals for UIViewController for view will/did appear/disappear
  • Boolean Properties:
 let lhs = MutableProperty(false), rhs = MutableProperty(false)
let and = lhs.and(rhs)

Personally, I like (and use) the stuff for properties...

@andersio

andersio commented Oct 31, 2016

Copy link
Copy Markdown
Member

Signals for UIViewController for view will/did appear/disappear

These are covered by NSObject.reactive.trigger(for:), which takes a selector.

Boolean Properties:

You may achieve this through property composition.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@iv-mexx@mdiep@andersio
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update to Swift 3.0 and RAC 5.0, remove UI Extensions - #159

Open
iv-mexx wants to merge 4 commits into
RACCommunity:masterfrom
iv-mexx:cleanupExtensions
Open

Update to Swift 3.0 and RAC 5.0, remove UI Extensions#159
iv-mexx wants to merge 4 commits into
RACCommunity:masterfrom
iv-mexx:cleanupExtensions

Conversation

@iv-mexx

@iv-mexxiv-mexx commented Oct 31, 2016

Copy link
Copy Markdown
Member

First of sorry that theres so much in this one Pull Request at once.

  • Update to Swift 3.0
  • Update to RAC 5.0
  • Removal of UIKit/AppKit Extensions and some other little things that are nowalready part of RAC

I tried to separate these out, but it is all intertwined, Swift 3.0 required RAC 5.0, and then converting all those methods that would be removed in the next step anyway seemed like unnecessary work.

Open Question

Theres two RACSignal extensions:

  • RACSignal.rex_toSignal()
  • RACSignal.rex_toTriggerSignal()

For now I was hesitant to require ReactiveObjC/ReactiveObjCBridge just for those two extensions...

  • ReactiveObjCBridge only contains a toSignalProducer and no toSignal. Either we could add toSignal to the bridge as well, or just remove this conversion?
  • rex_toTriggerSignal was mostly used internally to convert use rac_willDealloc as a trigger, which now is not necessary anymore with Lifetime.

Complete List of Removals

Those are all documented in Deprecations+Removals.swift, but this list here could also be used in the change log for the next release.

Removals

RAC Extensions

  • Removed Action.rex_enabledProducer. Use Action.reactive.isEnabled instead.
  • Removed Action.rex_executingProducer. Use Action.reacitve.isExecuting instead.

Foundation Extensions

  • Removed NSObject.rex_producerForKeyPath. Use NSObject.reactive.values(forKeyPath:) instead.
  • Removed NSObject.rex_willDealloc. Use NSObject.reactive.lifetime.ended instead.

UIKit Extensions

  • Removed Reusable protocol, use Reusable protocol from RAC instead
    • Removed UITableViewCell.rex_prepareForReuse. Use UITableViewCell.reactive.prepareForReuse instead.
    • Removed UITableViewHeaderFooterCell.rex_prepareForReuse. Use UITableViewHeaderFooterCell.reactive.prepareForReuse instead.
    • Removed UICollectionReusableView.rex_prepareForReuse. Use UICollectionReusableView.reactive.prepareForReuse instead.
  • Removed UIControl.rex_enabled. Use UIControl.reactive.isEnabled instead
  • Removed UIControl.rex_selected. Use UIControl.reactive.isSelected instead
  • Removed UIControl.rex_highlighted. Use UIControl.reactive.isHighlighted instead
  • Removed UIActivityIndicatorView.rex_animating. Use UIActivityIndicatorView.reactive.isAnimating instead.
  • Removed UIBarButtonItem.rex_action. Use UIBarButtonItem.reactive.pressed instead.
  • Removed UIBarItem.rex_enabled. Use UIBarItem.reactive.isEnabled instead.
  • Removed UIButton.rex_pressed. Use UIButton.reactive.pressed instead.
  • Removed UIButton.rex_title. Use UIButton.reactive.title instead.
  • Removed UIDatePicker. use UIDatePicker.reactive.date or UIDatePicker.reactive.dates instead.
  • Removed UIImageView.rex_image. Use UIImageView.reactive.image instead.
  • Removed UIImageView.rex_highlightedImage. Use UIImageView.reactive.highlightedImage instead.
  • Removed UILabel.rex_text. Use UILabe.reactive.text instead.
  • Removed UILabel.rex_attributedText. Use UILabe.reactive.attributedText instead.
  • Removed UILabel.rex_textColor. Use UILabe.reactive.textColor instead.
  • Removed UIProgressView.rex_progress. Use UIProgressView.reactive.progress instead.
  • Removed UISegmentedControl.rex_selectedSegmentIndex. Use UISegmentedControl.reactive.segmentedSegmentIndexes or UISegmentedControl.reactive.segmentedSegmentIndex instead.
  • Removed UISwitch.rex_on. Use UISwitch.reactive.isOn or UISwitch.reactive.isOnValues instead.
  • Removed UITextField.rex_text. Use UITextField.reactive.text, UITextField.reactive.textValues or UITextField.reactive.continuousTextValues instead.
  • Removed UITextView.rex_text. Use UITextView.reactive.text, UITextView.reactive.textValues or UITextView.reactive.continuousTextValues instead.
  • Removed UIView.rex_alpha. Use UIView.reactive.alpha instead.
  • Removed UIView.rex_hidden. Use UIView.reactive.isHidden instead.
  • Removed UIView.rex_userInteractionEnabled. Use UIView.reactive.isUserInteractionEnabled instead.

AppKit Extensions

  • Removed NSTextField.rex_textSignal. Use NSTextField.reactive.continuousStringValues instead.

Tests

I've kept all the UIKit and AppKit Tests around, but converted them to use the reactive extensions. I've converted them almost completely via quick-fixes to verify that the replacements in Deprecations+Removals.swift work correctly.

@mdiep

Copy link
Copy Markdown
Contributor

What's left in Rex at this point? I've been assuming that Rex would disappear with RAC 5.

@iv-mexx

iv-mexx commented Oct 31, 2016

Copy link
Copy Markdown
MemberAuthor

I'd say left are

Extensions for ReactiveCocoa that may not fit in the core framework.

😄

  • some operators on Signal and SignalProducer that are not in RAC like ignoreError, filterMap, timeoutAfter, muteForuncollect, groupBy
  • some additional bindings for NSUserDefauls, NSData
  • Signals for UIViewController for view will/did appear/disappear
  • Boolean Properties:
 let lhs = MutableProperty(false), rhs = MutableProperty(false)
let and = lhs.and(rhs)

Personally, I like (and use) the stuff for properties...

@andersio

andersio commented Oct 31, 2016

Copy link
Copy Markdown
Member

Signals for UIViewController for view will/did appear/disappear

These are covered by NSObject.reactive.trigger(for:), which takes a selector.

Boolean Properties:

You may achieve this through property composition.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@iv-mexx@mdiep@andersio
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update to Swift 3.0 and RAC 5.0, remove UI Extensions - #159

Open
iv-mexx wants to merge 4 commits into
RACCommunity:masterfrom
iv-mexx:cleanupExtensions
Open

Update to Swift 3.0 and RAC 5.0, remove UI Extensions#159
iv-mexx wants to merge 4 commits into
RACCommunity:masterfrom
iv-mexx:cleanupExtensions

Conversation

@iv-mexx

@iv-mexxiv-mexx commented Oct 31, 2016

Copy link
Copy Markdown
Member

First of sorry that theres so much in this one Pull Request at once.

  • Update to Swift 3.0
  • Update to RAC 5.0
  • Removal of UIKit/AppKit Extensions and some other little things that are nowalready part of RAC

I tried to separate these out, but it is all intertwined, Swift 3.0 required RAC 5.0, and then converting all those methods that would be removed in the next step anyway seemed like unnecessary work.

Open Question

Theres two RACSignal extensions:

  • RACSignal.rex_toSignal()
  • RACSignal.rex_toTriggerSignal()

For now I was hesitant to require ReactiveObjC/ReactiveObjCBridge just for those two extensions...

  • ReactiveObjCBridge only contains a toSignalProducer and no toSignal. Either we could add toSignal to the bridge as well, or just remove this conversion?
  • rex_toTriggerSignal was mostly used internally to convert use rac_willDealloc as a trigger, which now is not necessary anymore with Lifetime.

Complete List of Removals

Those are all documented in Deprecations+Removals.swift, but this list here could also be used in the change log for the next release.

Removals

RAC Extensions

  • Removed Action.rex_enabledProducer. Use Action.reactive.isEnabled instead.
  • Removed Action.rex_executingProducer. Use Action.reacitve.isExecuting instead.

Foundation Extensions

  • Removed NSObject.rex_producerForKeyPath. Use NSObject.reactive.values(forKeyPath:) instead.
  • Removed NSObject.rex_willDealloc. Use NSObject.reactive.lifetime.ended instead.

UIKit Extensions

  • Removed Reusable protocol, use Reusable protocol from RAC instead
    • Removed UITableViewCell.rex_prepareForReuse. Use UITableViewCell.reactive.prepareForReuse instead.
    • Removed UITableViewHeaderFooterCell.rex_prepareForReuse. Use UITableViewHeaderFooterCell.reactive.prepareForReuse instead.
    • Removed UICollectionReusableView.rex_prepareForReuse. Use UICollectionReusableView.reactive.prepareForReuse instead.
  • Removed UIControl.rex_enabled. Use UIControl.reactive.isEnabled instead
  • Removed UIControl.rex_selected. Use UIControl.reactive.isSelected instead
  • Removed UIControl.rex_highlighted. Use UIControl.reactive.isHighlighted instead
  • Removed UIActivityIndicatorView.rex_animating. Use UIActivityIndicatorView.reactive.isAnimating instead.
  • Removed UIBarButtonItem.rex_action. Use UIBarButtonItem.reactive.pressed instead.
  • Removed UIBarItem.rex_enabled. Use UIBarItem.reactive.isEnabled instead.
  • Removed UIButton.rex_pressed. Use UIButton.reactive.pressed instead.
  • Removed UIButton.rex_title. Use UIButton.reactive.title instead.
  • Removed UIDatePicker. use UIDatePicker.reactive.date or UIDatePicker.reactive.dates instead.
  • Removed UIImageView.rex_image. Use UIImageView.reactive.image instead.
  • Removed UIImageView.rex_highlightedImage. Use UIImageView.reactive.highlightedImage instead.
  • Removed UILabel.rex_text. Use UILabe.reactive.text instead.
  • Removed UILabel.rex_attributedText. Use UILabe.reactive.attributedText instead.
  • Removed UILabel.rex_textColor. Use UILabe.reactive.textColor instead.
  • Removed UIProgressView.rex_progress. Use UIProgressView.reactive.progress instead.
  • Removed UISegmentedControl.rex_selectedSegmentIndex. Use UISegmentedControl.reactive.segmentedSegmentIndexes or UISegmentedControl.reactive.segmentedSegmentIndex instead.
  • Removed UISwitch.rex_on. Use UISwitch.reactive.isOn or UISwitch.reactive.isOnValues instead.
  • Removed UITextField.rex_text. Use UITextField.reactive.text, UITextField.reactive.textValues or UITextField.reactive.continuousTextValues instead.
  • Removed UITextView.rex_text. Use UITextView.reactive.text, UITextView.reactive.textValues or UITextView.reactive.continuousTextValues instead.
  • Removed UIView.rex_alpha. Use UIView.reactive.alpha instead.
  • Removed UIView.rex_hidden. Use UIView.reactive.isHidden instead.
  • Removed UIView.rex_userInteractionEnabled. Use UIView.reactive.isUserInteractionEnabled instead.

AppKit Extensions

  • Removed NSTextField.rex_textSignal. Use NSTextField.reactive.continuousStringValues instead.

Tests

I've kept all the UIKit and AppKit Tests around, but converted them to use the reactive extensions. I've converted them almost completely via quick-fixes to verify that the replacements in Deprecations+Removals.swift work correctly.

@mdiep

Copy link
Copy Markdown
Contributor

What's left in Rex at this point? I've been assuming that Rex would disappear with RAC 5.

@iv-mexx

iv-mexx commented Oct 31, 2016

Copy link
Copy Markdown
MemberAuthor

I'd say left are

Extensions for ReactiveCocoa that may not fit in the core framework.

😄

  • some operators on Signal and SignalProducer that are not in RAC like ignoreError, filterMap, timeoutAfter, muteForuncollect, groupBy
  • some additional bindings for NSUserDefauls, NSData
  • Signals for UIViewController for view will/did appear/disappear
  • Boolean Properties:
 let lhs = MutableProperty(false), rhs = MutableProperty(false)
let and = lhs.and(rhs)

Personally, I like (and use) the stuff for properties...

@andersio

andersio commented Oct 31, 2016

Copy link
Copy Markdown
Member

Signals for UIViewController for view will/did appear/disappear

These are covered by NSObject.reactive.trigger(for:), which takes a selector.

Boolean Properties:

You may achieve this through property composition.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@iv-mexx@mdiep@andersio
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Update to Swift 3.0 and RAC 5.0, remove UI Extensions - #159

Open
iv-mexx wants to merge 4 commits into
RACCommunity:masterfrom
iv-mexx:cleanupExtensions
Open

Update to Swift 3.0 and RAC 5.0, remove UI Extensions#159
iv-mexx wants to merge 4 commits into
RACCommunity:masterfrom
iv-mexx:cleanupExtensions

Conversation

@iv-mexx

@iv-mexxiv-mexx commented Oct 31, 2016

Copy link
Copy Markdown
Member

First of sorry that theres so much in this one Pull Request at once.

  • Update to Swift 3.0
  • Update to RAC 5.0
  • Removal of UIKit/AppKit Extensions and some other little things that are nowalready part of RAC

I tried to separate these out, but it is all intertwined, Swift 3.0 required RAC 5.0, and then converting all those methods that would be removed in the next step anyway seemed like unnecessary work.

Open Question

Theres two RACSignal extensions:

  • RACSignal.rex_toSignal()
  • RACSignal.rex_toTriggerSignal()

For now I was hesitant to require ReactiveObjC/ReactiveObjCBridge just for those two extensions...

  • ReactiveObjCBridge only contains a toSignalProducer and no toSignal. Either we could add toSignal to the bridge as well, or just remove this conversion?
  • rex_toTriggerSignal was mostly used internally to convert use rac_willDealloc as a trigger, which now is not necessary anymore with Lifetime.

Complete List of Removals

Those are all documented in Deprecations+Removals.swift, but this list here could also be used in the change log for the next release.

Removals

RAC Extensions

  • Removed Action.rex_enabledProducer. Use Action.reactive.isEnabled instead.
  • Removed Action.rex_executingProducer. Use Action.reacitve.isExecuting instead.

Foundation Extensions

  • Removed NSObject.rex_producerForKeyPath. Use NSObject.reactive.values(forKeyPath:) instead.
  • Removed NSObject.rex_willDealloc. Use NSObject.reactive.lifetime.ended instead.

UIKit Extensions

  • Removed Reusable protocol, use Reusable protocol from RAC instead
    • Removed UITableViewCell.rex_prepareForReuse. Use UITableViewCell.reactive.prepareForReuse instead.
    • Removed UITableViewHeaderFooterCell.rex_prepareForReuse. Use UITableViewHeaderFooterCell.reactive.prepareForReuse instead.
    • Removed UICollectionReusableView.rex_prepareForReuse. Use UICollectionReusableView.reactive.prepareForReuse instead.
  • Removed UIControl.rex_enabled. Use UIControl.reactive.isEnabled instead
  • Removed UIControl.rex_selected. Use UIControl.reactive.isSelected instead
  • Removed UIControl.rex_highlighted. Use UIControl.reactive.isHighlighted instead
  • Removed UIActivityIndicatorView.rex_animating. Use UIActivityIndicatorView.reactive.isAnimating instead.
  • Removed UIBarButtonItem.rex_action. Use UIBarButtonItem.reactive.pressed instead.
  • Removed UIBarItem.rex_enabled. Use UIBarItem.reactive.isEnabled instead.
  • Removed UIButton.rex_pressed. Use UIButton.reactive.pressed instead.
  • Removed UIButton.rex_title. Use UIButton.reactive.title instead.
  • Removed UIDatePicker. use UIDatePicker.reactive.date or UIDatePicker.reactive.dates instead.
  • Removed UIImageView.rex_image. Use UIImageView.reactive.image instead.
  • Removed UIImageView.rex_highlightedImage. Use UIImageView.reactive.highlightedImage instead.
  • Removed UILabel.rex_text. Use UILabe.reactive.text instead.
  • Removed UILabel.rex_attributedText. Use UILabe.reactive.attributedText instead.
  • Removed UILabel.rex_textColor. Use UILabe.reactive.textColor instead.
  • Removed UIProgressView.rex_progress. Use UIProgressView.reactive.progress instead.
  • Removed UISegmentedControl.rex_selectedSegmentIndex. Use UISegmentedControl.reactive.segmentedSegmentIndexes or UISegmentedControl.reactive.segmentedSegmentIndex instead.
  • Removed UISwitch.rex_on. Use UISwitch.reactive.isOn or UISwitch.reactive.isOnValues instead.
  • Removed UITextField.rex_text. Use UITextField.reactive.text, UITextField.reactive.textValues or UITextField.reactive.continuousTextValues instead.
  • Removed UITextView.rex_text. Use UITextView.reactive.text, UITextView.reactive.textValues or UITextView.reactive.continuousTextValues instead.
  • Removed UIView.rex_alpha. Use UIView.reactive.alpha instead.
  • Removed UIView.rex_hidden. Use UIView.reactive.isHidden instead.
  • Removed UIView.rex_userInteractionEnabled. Use UIView.reactive.isUserInteractionEnabled instead.

AppKit Extensions

  • Removed NSTextField.rex_textSignal. Use NSTextField.reactive.continuousStringValues instead.

Tests

I've kept all the UIKit and AppKit Tests around, but converted them to use the reactive extensions. I've converted them almost completely via quick-fixes to verify that the replacements in Deprecations+Removals.swift work correctly.

@mdiep

Copy link
Copy Markdown
Contributor

What's left in Rex at this point? I've been assuming that Rex would disappear with RAC 5.

@iv-mexx

iv-mexx commented Oct 31, 2016

Copy link
Copy Markdown
MemberAuthor

I'd say left are

Extensions for ReactiveCocoa that may not fit in the core framework.

😄

  • some operators on Signal and SignalProducer that are not in RAC like ignoreError, filterMap, timeoutAfter, muteForuncollect, groupBy
  • some additional bindings for NSUserDefauls, NSData
  • Signals for UIViewController for view will/did appear/disappear
  • Boolean Properties:
 let lhs = MutableProperty(false), rhs = MutableProperty(false)
let and = lhs.and(rhs)

Personally, I like (and use) the stuff for properties...

@andersio

andersio commented Oct 31, 2016

Copy link
Copy Markdown
Member

Signals for UIViewController for view will/did appear/disappear

These are covered by NSObject.reactive.trigger(for:), which takes a selector.

Boolean Properties:

You may achieve this through property composition.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@iv-mexx@mdiep@andersio
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update to Swift 3.0 and RAC 5.0, remove UI Extensions - #159

Open
iv-mexx wants to merge 4 commits into
RACCommunity:masterfrom
iv-mexx:cleanupExtensions
Open

Update to Swift 3.0 and RAC 5.0, remove UI Extensions#159
iv-mexx wants to merge 4 commits into
RACCommunity:masterfrom
iv-mexx:cleanupExtensions

Conversation

@iv-mexx

@iv-mexxiv-mexx commented Oct 31, 2016

Copy link
Copy Markdown
Member

First of sorry that theres so much in this one Pull Request at once.

  • Update to Swift 3.0
  • Update to RAC 5.0
  • Removal of UIKit/AppKit Extensions and some other little things that are nowalready part of RAC

I tried to separate these out, but it is all intertwined, Swift 3.0 required RAC 5.0, and then converting all those methods that would be removed in the next step anyway seemed like unnecessary work.

Open Question

Theres two RACSignal extensions:

  • RACSignal.rex_toSignal()
  • RACSignal.rex_toTriggerSignal()

For now I was hesitant to require ReactiveObjC/ReactiveObjCBridge just for those two extensions...

  • ReactiveObjCBridge only contains a toSignalProducer and no toSignal. Either we could add toSignal to the bridge as well, or just remove this conversion?
  • rex_toTriggerSignal was mostly used internally to convert use rac_willDealloc as a trigger, which now is not necessary anymore with Lifetime.

Complete List of Removals

Those are all documented in Deprecations+Removals.swift, but this list here could also be used in the change log for the next release.

Removals

RAC Extensions

  • Removed Action.rex_enabledProducer. Use Action.reactive.isEnabled instead.
  • Removed Action.rex_executingProducer. Use Action.reacitve.isExecuting instead.

Foundation Extensions

  • Removed NSObject.rex_producerForKeyPath. Use NSObject.reactive.values(forKeyPath:) instead.
  • Removed NSObject.rex_willDealloc. Use NSObject.reactive.lifetime.ended instead.

UIKit Extensions

  • Removed Reusable protocol, use Reusable protocol from RAC instead
    • Removed UITableViewCell.rex_prepareForReuse. Use UITableViewCell.reactive.prepareForReuse instead.
    • Removed UITableViewHeaderFooterCell.rex_prepareForReuse. Use UITableViewHeaderFooterCell.reactive.prepareForReuse instead.
    • Removed UICollectionReusableView.rex_prepareForReuse. Use UICollectionReusableView.reactive.prepareForReuse instead.
  • Removed UIControl.rex_enabled. Use UIControl.reactive.isEnabled instead
  • Removed UIControl.rex_selected. Use UIControl.reactive.isSelected instead
  • Removed UIControl.rex_highlighted. Use UIControl.reactive.isHighlighted instead
  • Removed UIActivityIndicatorView.rex_animating. Use UIActivityIndicatorView.reactive.isAnimating instead.
  • Removed UIBarButtonItem.rex_action. Use UIBarButtonItem.reactive.pressed instead.
  • Removed UIBarItem.rex_enabled. Use UIBarItem.reactive.isEnabled instead.
  • Removed UIButton.rex_pressed. Use UIButton.reactive.pressed instead.
  • Removed UIButton.rex_title. Use UIButton.reactive.title instead.
  • Removed UIDatePicker. use UIDatePicker.reactive.date or UIDatePicker.reactive.dates instead.
  • Removed UIImageView.rex_image. Use UIImageView.reactive.image instead.
  • Removed UIImageView.rex_highlightedImage. Use UIImageView.reactive.highlightedImage instead.
  • Removed UILabel.rex_text. Use UILabe.reactive.text instead.
  • Removed UILabel.rex_attributedText. Use UILabe.reactive.attributedText instead.
  • Removed UILabel.rex_textColor. Use UILabe.reactive.textColor instead.
  • Removed UIProgressView.rex_progress. Use UIProgressView.reactive.progress instead.
  • Removed UISegmentedControl.rex_selectedSegmentIndex. Use UISegmentedControl.reactive.segmentedSegmentIndexes or UISegmentedControl.reactive.segmentedSegmentIndex instead.
  • Removed UISwitch.rex_on. Use UISwitch.reactive.isOn or UISwitch.reactive.isOnValues instead.
  • Removed UITextField.rex_text. Use UITextField.reactive.text, UITextField.reactive.textValues or UITextField.reactive.continuousTextValues instead.
  • Removed UITextView.rex_text. Use UITextView.reactive.text, UITextView.reactive.textValues or UITextView.reactive.continuousTextValues instead.
  • Removed UIView.rex_alpha. Use UIView.reactive.alpha instead.
  • Removed UIView.rex_hidden. Use UIView.reactive.isHidden instead.
  • Removed UIView.rex_userInteractionEnabled. Use UIView.reactive.isUserInteractionEnabled instead.

AppKit Extensions

  • Removed NSTextField.rex_textSignal. Use NSTextField.reactive.continuousStringValues instead.

Tests

I've kept all the UIKit and AppKit Tests around, but converted them to use the reactive extensions. I've converted them almost completely via quick-fixes to verify that the replacements in Deprecations+Removals.swift work correctly.

@mdiep

Copy link
Copy Markdown
Contributor

What's left in Rex at this point? I've been assuming that Rex would disappear with RAC 5.

@iv-mexx

iv-mexx commented Oct 31, 2016

Copy link
Copy Markdown
MemberAuthor

I'd say left are

Extensions for ReactiveCocoa that may not fit in the core framework.

😄

  • some operators on Signal and SignalProducer that are not in RAC like ignoreError, filterMap, timeoutAfter, muteForuncollect, groupBy
  • some additional bindings for NSUserDefauls, NSData
  • Signals for UIViewController for view will/did appear/disappear
  • Boolean Properties:
 let lhs = MutableProperty(false), rhs = MutableProperty(false)
let and = lhs.and(rhs)

Personally, I like (and use) the stuff for properties...

@andersio

andersio commented Oct 31, 2016

Copy link
Copy Markdown
Member

Signals for UIViewController for view will/did appear/disappear

These are covered by NSObject.reactive.trigger(for:), which takes a selector.

Boolean Properties:

You may achieve this through property composition.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@iv-mexx@mdiep@andersio
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update to Swift 3.0 and RAC 5.0, remove UI Extensions - #159

Open
iv-mexx wants to merge 4 commits into
RACCommunity:masterfrom
iv-mexx:cleanupExtensions
Open

Update to Swift 3.0 and RAC 5.0, remove UI Extensions#159
iv-mexx wants to merge 4 commits into
RACCommunity:masterfrom
iv-mexx:cleanupExtensions

Conversation

@iv-mexx

@iv-mexxiv-mexx commented Oct 31, 2016

Copy link
Copy Markdown
Member

First of sorry that theres so much in this one Pull Request at once.

  • Update to Swift 3.0
  • Update to RAC 5.0
  • Removal of UIKit/AppKit Extensions and some other little things that are nowalready part of RAC

I tried to separate these out, but it is all intertwined, Swift 3.0 required RAC 5.0, and then converting all those methods that would be removed in the next step anyway seemed like unnecessary work.

Open Question

Theres two RACSignal extensions:

  • RACSignal.rex_toSignal()
  • RACSignal.rex_toTriggerSignal()

For now I was hesitant to require ReactiveObjC/ReactiveObjCBridge just for those two extensions...

  • ReactiveObjCBridge only contains a toSignalProducer and no toSignal. Either we could add toSignal to the bridge as well, or just remove this conversion?
  • rex_toTriggerSignal was mostly used internally to convert use rac_willDealloc as a trigger, which now is not necessary anymore with Lifetime.

Complete List of Removals

Those are all documented in Deprecations+Removals.swift, but this list here could also be used in the change log for the next release.

Removals

RAC Extensions

  • Removed Action.rex_enabledProducer. Use Action.reactive.isEnabled instead.
  • Removed Action.rex_executingProducer. Use Action.reacitve.isExecuting instead.

Foundation Extensions

  • Removed NSObject.rex_producerForKeyPath. Use NSObject.reactive.values(forKeyPath:) instead.
  • Removed NSObject.rex_willDealloc. Use NSObject.reactive.lifetime.ended instead.

UIKit Extensions

  • Removed Reusable protocol, use Reusable protocol from RAC instead
    • Removed UITableViewCell.rex_prepareForReuse. Use UITableViewCell.reactive.prepareForReuse instead.
    • Removed UITableViewHeaderFooterCell.rex_prepareForReuse. Use UITableViewHeaderFooterCell.reactive.prepareForReuse instead.
    • Removed UICollectionReusableView.rex_prepareForReuse. Use UICollectionReusableView.reactive.prepareForReuse instead.
  • Removed UIControl.rex_enabled. Use UIControl.reactive.isEnabled instead
  • Removed UIControl.rex_selected. Use UIControl.reactive.isSelected instead
  • Removed UIControl.rex_highlighted. Use UIControl.reactive.isHighlighted instead
  • Removed UIActivityIndicatorView.rex_animating. Use UIActivityIndicatorView.reactive.isAnimating instead.
  • Removed UIBarButtonItem.rex_action. Use UIBarButtonItem.reactive.pressed instead.
  • Removed UIBarItem.rex_enabled. Use UIBarItem.reactive.isEnabled instead.
  • Removed UIButton.rex_pressed. Use UIButton.reactive.pressed instead.
  • Removed UIButton.rex_title. Use UIButton.reactive.title instead.
  • Removed UIDatePicker. use UIDatePicker.reactive.date or UIDatePicker.reactive.dates instead.
  • Removed UIImageView.rex_image. Use UIImageView.reactive.image instead.
  • Removed UIImageView.rex_highlightedImage. Use UIImageView.reactive.highlightedImage instead.
  • Removed UILabel.rex_text. Use UILabe.reactive.text instead.
  • Removed UILabel.rex_attributedText. Use UILabe.reactive.attributedText instead.
  • Removed UILabel.rex_textColor. Use UILabe.reactive.textColor instead.
  • Removed UIProgressView.rex_progress. Use UIProgressView.reactive.progress instead.
  • Removed UISegmentedControl.rex_selectedSegmentIndex. Use UISegmentedControl.reactive.segmentedSegmentIndexes or UISegmentedControl.reactive.segmentedSegmentIndex instead.
  • Removed UISwitch.rex_on. Use UISwitch.reactive.isOn or UISwitch.reactive.isOnValues instead.
  • Removed UITextField.rex_text. Use UITextField.reactive.text, UITextField.reactive.textValues or UITextField.reactive.continuousTextValues instead.
  • Removed UITextView.rex_text. Use UITextView.reactive.text, UITextView.reactive.textValues or UITextView.reactive.continuousTextValues instead.
  • Removed UIView.rex_alpha. Use UIView.reactive.alpha instead.
  • Removed UIView.rex_hidden. Use UIView.reactive.isHidden instead.
  • Removed UIView.rex_userInteractionEnabled. Use UIView.reactive.isUserInteractionEnabled instead.

AppKit Extensions

  • Removed NSTextField.rex_textSignal. Use NSTextField.reactive.continuousStringValues instead.

Tests

I've kept all the UIKit and AppKit Tests around, but converted them to use the reactive extensions. I've converted them almost completely via quick-fixes to verify that the replacements in Deprecations+Removals.swift work correctly.

@mdiep

Copy link
Copy Markdown
Contributor

What's left in Rex at this point? I've been assuming that Rex would disappear with RAC 5.

@iv-mexx

iv-mexx commented Oct 31, 2016

Copy link
Copy Markdown
MemberAuthor

I'd say left are

Extensions for ReactiveCocoa that may not fit in the core framework.

😄

  • some operators on Signal and SignalProducer that are not in RAC like ignoreError, filterMap, timeoutAfter, muteForuncollect, groupBy
  • some additional bindings for NSUserDefauls, NSData
  • Signals for UIViewController for view will/did appear/disappear
  • Boolean Properties:
 let lhs = MutableProperty(false), rhs = MutableProperty(false)
let and = lhs.and(rhs)

Personally, I like (and use) the stuff for properties...

@andersio

andersio commented Oct 31, 2016

Copy link
Copy Markdown
Member

Signals for UIViewController for view will/did appear/disappear

These are covered by NSObject.reactive.trigger(for:), which takes a selector.

Boolean Properties:

You may achieve this through property composition.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@iv-mexx@mdiep@andersio
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Update to Swift 3.0 and RAC 5.0, remove UI Extensions - #159

Open
iv-mexx wants to merge 4 commits into
RACCommunity:masterfrom
iv-mexx:cleanupExtensions
Open

Update to Swift 3.0 and RAC 5.0, remove UI Extensions#159
iv-mexx wants to merge 4 commits into
RACCommunity:masterfrom
iv-mexx:cleanupExtensions

Conversation

@iv-mexx

@iv-mexxiv-mexx commented Oct 31, 2016

Copy link
Copy Markdown
Member

First of sorry that theres so much in this one Pull Request at once.

  • Update to Swift 3.0
  • Update to RAC 5.0
  • Removal of UIKit/AppKit Extensions and some other little things that are nowalready part of RAC

I tried to separate these out, but it is all intertwined, Swift 3.0 required RAC 5.0, and then converting all those methods that would be removed in the next step anyway seemed like unnecessary work.

Open Question

Theres two RACSignal extensions:

  • RACSignal.rex_toSignal()
  • RACSignal.rex_toTriggerSignal()

For now I was hesitant to require ReactiveObjC/ReactiveObjCBridge just for those two extensions...

  • ReactiveObjCBridge only contains a toSignalProducer and no toSignal. Either we could add toSignal to the bridge as well, or just remove this conversion?
  • rex_toTriggerSignal was mostly used internally to convert use rac_willDealloc as a trigger, which now is not necessary anymore with Lifetime.

Complete List of Removals

Those are all documented in Deprecations+Removals.swift, but this list here could also be used in the change log for the next release.

Removals

RAC Extensions

  • Removed Action.rex_enabledProducer. Use Action.reactive.isEnabled instead.
  • Removed Action.rex_executingProducer. Use Action.reacitve.isExecuting instead.

Foundation Extensions

  • Removed NSObject.rex_producerForKeyPath. Use NSObject.reactive.values(forKeyPath:) instead.
  • Removed NSObject.rex_willDealloc. Use NSObject.reactive.lifetime.ended instead.

UIKit Extensions

  • Removed Reusable protocol, use Reusable protocol from RAC instead
    • Removed UITableViewCell.rex_prepareForReuse. Use UITableViewCell.reactive.prepareForReuse instead.
    • Removed UITableViewHeaderFooterCell.rex_prepareForReuse. Use UITableViewHeaderFooterCell.reactive.prepareForReuse instead.
    • Removed UICollectionReusableView.rex_prepareForReuse. Use UICollectionReusableView.reactive.prepareForReuse instead.
  • Removed UIControl.rex_enabled. Use UIControl.reactive.isEnabled instead
  • Removed UIControl.rex_selected. Use UIControl.reactive.isSelected instead
  • Removed UIControl.rex_highlighted. Use UIControl.reactive.isHighlighted instead
  • Removed UIActivityIndicatorView.rex_animating. Use UIActivityIndicatorView.reactive.isAnimating instead.
  • Removed UIBarButtonItem.rex_action. Use UIBarButtonItem.reactive.pressed instead.
  • Removed UIBarItem.rex_enabled. Use UIBarItem.reactive.isEnabled instead.
  • Removed UIButton.rex_pressed. Use UIButton.reactive.pressed instead.
  • Removed UIButton.rex_title. Use UIButton.reactive.title instead.
  • Removed UIDatePicker. use UIDatePicker.reactive.date or UIDatePicker.reactive.dates instead.
  • Removed UIImageView.rex_image. Use UIImageView.reactive.image instead.
  • Removed UIImageView.rex_highlightedImage. Use UIImageView.reactive.highlightedImage instead.
  • Removed UILabel.rex_text. Use UILabe.reactive.text instead.
  • Removed UILabel.rex_attributedText. Use UILabe.reactive.attributedText instead.
  • Removed UILabel.rex_textColor. Use UILabe.reactive.textColor instead.
  • Removed UIProgressView.rex_progress. Use UIProgressView.reactive.progress instead.
  • Removed UISegmentedControl.rex_selectedSegmentIndex. Use UISegmentedControl.reactive.segmentedSegmentIndexes or UISegmentedControl.reactive.segmentedSegmentIndex instead.
  • Removed UISwitch.rex_on. Use UISwitch.reactive.isOn or UISwitch.reactive.isOnValues instead.
  • Removed UITextField.rex_text. Use UITextField.reactive.text, UITextField.reactive.textValues or UITextField.reactive.continuousTextValues instead.
  • Removed UITextView.rex_text. Use UITextView.reactive.text, UITextView.reactive.textValues or UITextView.reactive.continuousTextValues instead.
  • Removed UIView.rex_alpha. Use UIView.reactive.alpha instead.
  • Removed UIView.rex_hidden. Use UIView.reactive.isHidden instead.
  • Removed UIView.rex_userInteractionEnabled. Use UIView.reactive.isUserInteractionEnabled instead.

AppKit Extensions

  • Removed NSTextField.rex_textSignal. Use NSTextField.reactive.continuousStringValues instead.

Tests

I've kept all the UIKit and AppKit Tests around, but converted them to use the reactive extensions. I've converted them almost completely via quick-fixes to verify that the replacements in Deprecations+Removals.swift work correctly.

@mdiep

Copy link
Copy Markdown
Contributor

What's left in Rex at this point? I've been assuming that Rex would disappear with RAC 5.

@iv-mexx

iv-mexx commented Oct 31, 2016

Copy link
Copy Markdown
MemberAuthor

I'd say left are

Extensions for ReactiveCocoa that may not fit in the core framework.

😄

  • some operators on Signal and SignalProducer that are not in RAC like ignoreError, filterMap, timeoutAfter, muteForuncollect, groupBy
  • some additional bindings for NSUserDefauls, NSData
  • Signals for UIViewController for view will/did appear/disappear
  • Boolean Properties:
 let lhs = MutableProperty(false), rhs = MutableProperty(false)
let and = lhs.and(rhs)

Personally, I like (and use) the stuff for properties...

@andersio

andersio commented Oct 31, 2016

Copy link
Copy Markdown
Member

Signals for UIViewController for view will/did appear/disappear

These are covered by NSObject.reactive.trigger(for:), which takes a selector.

Boolean Properties:

You may achieve this through property composition.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@iv-mexx@mdiep@andersio