forked from WordPress/wordpress-develop
-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CSS: Try custom properties using color-value based naming scheme #3
Closed
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ryelle
pushed a commit
that referenced
this pull request
Sep 22, 2021
…itTestCase_Base::assertSameIgnoreEOL()`. Basically, the whole `assertSameIgnoreEOL()` assertion was fundamentally flawed. The assertion contends that it checks that the expected and actual values are of the same type and value, but the reality was very different. * The function uses `map_deep()` to potentially handle all sorts of inputs. * `map_deep()` handles arrays and objects with special casing, but will call the callback on everything else without further distinction. * The callback used passes the expected/actual value on to the `str_replace()` function to remove potential new line differences. * And the `str_replace()` function will - with a non-array input for the `$subject` - always return a string. * The output of these calls to `map_deep()` will therefore have "normalized" _all properties_ in objects, _all values_ in arrays and _all non-object, non-array values_ to strings. * And a call to `assertSame()` will therefore NEVER do a proper type check as the type of all input has already, unintentionally, been "normalized" to string. Aside from this clear flaw in the design of the assertion, PHP 8.1 now exposes a further issue as a `null` value for an object property, an array value or a plain value, will now yield a ` str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated` notice. To fix both these issues, the fix in this PR ensures that the call to `str_replace()` will now only be made if the input is a text string. All other values passed to the callback are left in their original type. This ensures that a proper value AND type comparison can be done as well as prevents the PHP 8.1 deprecation notices. Ref: * https://developer.wordpress.org/reference/functions/map_deep/ * https://www.php.net/manual/en/function.str-replace.php This commit: - Fixes type-casting of non-string values to `string` (the flawed part of this assertion) by invoking `str_replace()` when the value is of string type. - Fixes the PHP 8.1 `str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated` deprecation notice. - Micro-optimization: skips `map_deep()` when actual and/or expected are `null` (no need to process). - Adjusts the method documentation for both this method and the `assertEqualsIgnoreEOL()` alias method to document that the `$expected` and `$actual` parameters can be of any type. Follow-up to [48937], [51135], [51478]. Props jrf, hellofromTonya. See #53363, #53635. git-svn-id: https://develop.svn.wordpress.org/trunk@51831 602fd350-edb4-49c9-b593-d223f7449a82
ryelle
pushed a commit
that referenced
this pull request
Oct 11, 2022
…_postid()`. As per the PHP manual: > If the `component` parameter is omitted, an associative array is returned. > If the `component` parameter is specified, `parse_url()` returns a string (or an int, in the case of `PHP_URL_PORT`) instead of an array. If the requested component doesn't exist within the given URL, `null` will be returned. Reference: [https://www.php.net/manual/en/function.parse-url.php#refsect1-function.parse-url-returnvalues PHP Manual: parse_url(): Return Values] In this case, `parse_url()` is called with `PHP_URL_HOST` as `$component`, which returns `null` if the URL only has a path. The return value of `parse_url()` was then passed to `str_replace()`, leading to a notice on PHP 8.1: {{{ str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated }}} Adding validation for the return type value of `parse_url()` prevents that. This commit addresses a few errors in the test suite along the lines of: {{{ 5) Tests_Rewrite::test_url_to_postid_home_has_path str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated /var/www/src/wp-includes/rewrite.php:503 /var/www/tests/phpunit/tests/rewrite.php:271 /var/www/vendor/bin/phpunit:123 }}} Includes adding a dedicated unit test for a URL that only has a path. Follow-up to [41786], [51606], [51622], [51626], [51629], [51630], [52799]. Props jrf, aristath, poena, justinahinon, SergeyBiryukov. See #55656. git-svn-id: https://develop.svn.wordpress.org/trunk@54364 602fd350-edb4-49c9-b593-d223f7449a82
ryelle
pushed a commit
that referenced
this pull request
Feb 28, 2023
This brings more consistency with other screens and avoids a PHP warning in `get_plugin_page_hookname()`: {{{ preg_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated }}} Props ipajen, jrf, SergeyBiryukov. Fixes #57578. git-svn-id: https://develop.svn.wordpress.org/trunk@55263 602fd350-edb4-49c9-b593-d223f7449a82
ryelle
pushed a commit
that referenced
this pull request
Feb 28, 2023
The `$credentials['user_login']` and `$credentials['user_password']` parameters are passed by reference to the `wp_authenticate` action, and are at that point [https://www.php.net/manual/en/language.references.pass.php#124383 created as null] if they don't exist in the array. This commit sets those values to an empty string, resolving two PHP 8.1 deprecation notices: * One from `preg_replace()` in `wp_strip_all_tags()` via `sanitize_user()` in `wp_authenticate()`: {{{ Deprecated: preg_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated }}} * One from `trim()` in `wp_authenticate()` itself: {{{ Deprecated: trim(): Passing null to parameter #1 ($string) of type string is deprecated }}} Includes documenting the `$credentials` parameter using hash notation. Follow-up to [6643], [37697]. Props lenasterg, TobiasBg, ocean90, afragen, lkraav, SergeyBiryukov. Fixes #56850. git-svn-id: https://develop.svn.wordpress.org/trunk@55301 602fd350-edb4-49c9-b593-d223f7449a82
ryelle
pushed a commit
that referenced
this pull request
Mar 20, 2023
…assic themes. This brings more consistency with other screens and avoids a PHP warning in `get_plugin_page_hookname()`: {{{ preg_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated }}} Follow-up to [13257], [13366], [55263]. Props nendeb55, costdev, SergeyBiryukov. Fixes #57918. git-svn-id: https://develop.svn.wordpress.org/trunk@55552 602fd350-edb4-49c9-b593-d223f7449a82
ryelle
pushed a commit
that referenced
this pull request
Jul 14, 2023
If the `$authordata` global is not set, `get_the_author()` returned `null`, causing a PHP 8.1 "null to non-nullable" deprecation notice in `ent2ncr()` hooked via `the_author` filter: {{{ str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated }}} This commit updates `get_the_author()` to return an empty string if called before `$authordata` is set, bringing consistency with a few other similar functions which also return an empty string in this case: * `get_the_author_meta()` * `get_the_author_posts_link()` * `get_the_modified_author()` Follow-up to [695/tests], [2858], [11138], [12284], [20575], [34677], [44616], [53187]. Props Soean, jrf, sabernhardt, salvoaranzulla, antpb, ebai4, sajjad67, tijmensmit, SergeyBiryukov. Fixes #58157. git-svn-id: https://develop.svn.wordpress.org/trunk@55755 602fd350-edb4-49c9-b593-d223f7449a82
ryelle
pushed a commit
that referenced
this pull request
Jul 14, 2023
…nitize_option()`. When saving the settings via the admin UI, the default value for any options not passed in the current `$_POST` request is set to `null` in `wp-admin/options.php`. Some options, e.g. `blog_public`, then rely on `null` being passed to `update_option()` to determine whether the value was changed or not. This commit resolves a PHP 8.1 deprecation notice when saving the `gmt_offset` option without any changes: {{{ Deprecated: preg_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated }}} Includes a similar fix for the `blog_charset` option. Follow-up to [4112], [4329], [5541], [21849]. Props adi3890, dhrupo, hrdelwar, hasanmisbah, oglekler, mukesh27, SergeyBiryukov. Fixes #57728. git-svn-id: https://develop.svn.wordpress.org/trunk@56132 602fd350-edb4-49c9-b593-d223f7449a82
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Since the idea of using a HSL-esque, numbered color scheme has been brought up a number of times, I thought I'd give it a try here. It was remarkably easy to implement - there is one custom property per color value, so I was able to make a PostCSS script to replace them automatically.
This uses the core color palette colors, renamed to avoid colors in the property name - neutral (gray), accent (blue), alert (red), warning (yellow), and success (green).
The values are space-separated HSL*, so we can use them in places where there is opacity too (ex,
hsla(var(--wp-admin--color--accent-0) / 0.6);
)*Note that our color scheme is already set, and does not uniformly follow HSL — the colors were set to be perceptually uniform, which HSL is not.
After trying this out, I still think location-based naming is better for proper customization. For example, I tried to make a dark mode by inverting the colors (what was
neutral-100
becameneutral-0
, and so on). It's functional, but does not look good at all. A proper dark mode (and high contrast modes) would need much more thought and control than what we can do here.To try out the dark mode yourself, set your user color scheme to "Midnight".