Compare commits

..

74 Commits

Author SHA1 Message Date
Aaron Jorbin
7c9e48b88d Tag 4.1.11
Built from https://develop.svn.wordpress.org/tags/4.1.11@37397


git-svn-id: http://core.svn.wordpress.org/tags/4.1.11@37363 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-05-06 19:45:15 +00:00
Dominik Schilling
2dbd645312 Bump 4.1 branch to 4.1.11.
Built from https://develop.svn.wordpress.org/branches/4.1@37388


git-svn-id: http://core.svn.wordpress.org/branches/4.1@37354 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-05-06 18:14:22 +00:00
Nikolay Bachiyski
58a1804e9c External Libraries: Update plupload from upstream
Built from https://develop.svn.wordpress.org/branches/4.1@37378


git-svn-id: http://core.svn.wordpress.org/branches/4.1@37344 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-05-06 17:57:22 +00:00
Nikolay Bachiyski
38154c01ce Taxonomies: make sure taxonomy functions work correctly with taxonomy names with special characters
The codex says that taxonomy names "should only contain lowercase letters and the underscore character", but that's not enforced. It's too late to enforce it, since some plugins haven't been following it and the official phpdoc doesn't mention this restriction.

Merge of [37133] to the 4.1 branch.

Built from https://develop.svn.wordpress.org/branches/4.1@37138


git-svn-id: http://core.svn.wordpress.org/branches/4.1@37105 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-03-30 17:32:22 +00:00
Jeremy Felt
92c3f699a9 Multisite: Improve escaping in network settings.
Merge of [37124] to the 4.1 branch.

Built from https://develop.svn.wordpress.org/branches/4.1@37128


git-svn-id: http://core.svn.wordpress.org/branches/4.1@37095 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-03-30 16:05:21 +00:00
Dominik Schilling
e73593c805 HTTP: Improve detection of valid IP addresses.
Merge of [37115] to the 4.1 branch.
Built from https://develop.svn.wordpress.org/branches/4.1@37119


git-svn-id: http://core.svn.wordpress.org/branches/4.1@37086 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-03-30 15:52:33 +00:00
Dominik Schilling
cd0d7d699d Multisite: Validate new email address confirmations.
Merge of [37103] to the 4.1 branch.
Built from https://develop.svn.wordpress.org/branches/4.1@37107


git-svn-id: http://core.svn.wordpress.org/branches/4.1@37074 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-03-30 14:50:48 +00:00
Nikolay Bachiyski
63bde8f97e Snoopy: use escapeshellarg instead of escapeshellcmd
We are escaping arguments, not commands, so we'd better use the semantically correct function, even though they are similar.

Merges [37094] to the 4.1 branch.

Built from https://develop.svn.wordpress.org/branches/4.1@37098


git-svn-id: http://core.svn.wordpress.org/branches/4.1@37065 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-03-30 14:10:23 +00:00
Dominik Schilling
7df345b1cc Bump 4.1 branch to 4.1.10.
Built from https://develop.svn.wordpress.org/branches/4.1@36458


git-svn-id: http://core.svn.wordpress.org/branches/4.1@36425 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-02 17:29:22 +00:00
Dominik Schilling
5b076e981c Better validation of the URL used in HTTP redirects.
Merges [36444] to the 4.1 branch.
Built from https://develop.svn.wordpress.org/branches/4.1@36450


git-svn-id: http://core.svn.wordpress.org/branches/4.1@36417 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-02 17:00:50 +00:00
Dominik Schilling
ac434506e1 HTTP: 0.1.2.3 is not a valid IP.
Merges [36435] to the 4.1 branch.
Built from https://develop.svn.wordpress.org/branches/4.1@36439


git-svn-id: http://core.svn.wordpress.org/branches/4.1@36406 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-02 13:04:42 +00:00
Dominik Schilling
197d5128b2 Bump 4.1 branch to 4.1.9.
Built from https://develop.svn.wordpress.org/branches/4.1@36199


git-svn-id: http://core.svn.wordpress.org/branches/4.1@36166 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-01-06 18:50:23 +00:00
Aaron Jorbin
e253e4e3d6 Theme: Escape error messages
[36185] for 4.1 branch

Built from https://develop.svn.wordpress.org/branches/4.1@36189


git-svn-id: http://core.svn.wordpress.org/branches/4.1@36156 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-01-06 17:26:50 +00:00
Dion Hulse
3ff8fa5386 Background Updates: Remove the 7am/7pm background update check.
This changeset is a more basic version of [36180], clearing the extra now redundant schedule.
As the functionality for this was introduced in 3.9, [28129] has been backported to 3.7/3.8, allowing the API TTL to be respected by those versions.

See #27772.
Fixes #35323.

Built from https://develop.svn.wordpress.org/trunk@36184


git-svn-id: http://core.svn.wordpress.org/branches/4.1@36151 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-01-06 13:24:33 +00:00
Dion Hulse
a86aa0bf8e Update Akismet externals
git-svn-id: http://core.svn.wordpress.org/branches/4.1@35107 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-10-13 17:19:01 +00:00
Helen Hou-Sandí
a39030c223 Finish bumping the 4.1 branch to 4.1.8.
Built from https://develop.svn.wordpress.org/branches/4.1@34192


git-svn-id: http://core.svn.wordpress.org/branches/4.1@34160 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-09-15 14:51:36 +00:00
Helen Hou-Sandí
a4add78415 Bump 4.1 branch to 4.1.8.
Built from https://develop.svn.wordpress.org/branches/4.1@34183


git-svn-id: http://core.svn.wordpress.org/branches/4.1@34151 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-09-15 14:28:10 +00:00
Dominik Schilling
d38d60223d XMLRPC: Don't allow private posts to be sticky.
Merge of [33325], [33612], and [34135] to the 4.1 branch.

See #20662.
Built from https://develop.svn.wordpress.org/branches/4.1@34153


git-svn-id: http://core.svn.wordpress.org/branches/4.1@34121 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-09-14 23:01:22 +00:00
Nikolay Bachiyski
76e13dd238 Shortcodes: don't allow unclosed HTML elements in attributes
Merges [34134] for 4.1 branch

Built from https://develop.svn.wordpress.org/branches/4.1@34146


git-svn-id: http://core.svn.wordpress.org/branches/4.1@34114 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-09-14 22:48:48 +00:00
Nikolay Bachiyski
0da231a2d9 List tables: escape user e-mails
Merges [34133] for 4.1 branch

Built from https://develop.svn.wordpress.org/branches/4.1@34139


git-svn-id: http://core.svn.wordpress.org/branches/4.1@34107 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-09-14 22:42:23 +00:00
Gary Pendergast
76718f2ec0 WPDB: get_table_from_query() didn't find table names with hyphens in them.
Merge of [33718] to the 4.1 branch.

Props dustinbolton, pento.

See #33470.


Built from https://develop.svn.wordpress.org/branches/4.1@33993


git-svn-id: http://core.svn.wordpress.org/branches/4.1@33962 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-09-10 07:00:23 +00:00
Gary Pendergast
a3540aa14d Capabilities: Fall back to the edit_posts capability for orphaned comments.
Merge of the `capabilities.php` part of [33614] to the 4.2 branch.

Props pento, dd32.

See #33154.


Built from https://develop.svn.wordpress.org/branches/4.1@33973


git-svn-id: http://core.svn.wordpress.org/branches/4.1@33942 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-09-09 06:06:23 +00:00
Dominik Schilling
9460b427a2 Bump 4.1 branch to version 4.1.7.
Built from https://develop.svn.wordpress.org/branches/4.1@33574


git-svn-id: http://core.svn.wordpress.org/branches/4.1@33541 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-08-04 11:51:21 +00:00
Dion Hulse
c1e878721b Fix do_shortcode('<[shortcode]') edge case.
Props miqrogroove.

Merges [33499] to the 4.1 branch.
See #33116.

Built from https://develop.svn.wordpress.org/branches/4.1@33564


git-svn-id: http://core.svn.wordpress.org/branches/4.1@33531 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-08-04 07:17:21 +00:00
Dominik Schilling
738c837a58 Comments: IDs are integers.
Merge of [33555] to the 4.1 branch.
Built from https://develop.svn.wordpress.org/branches/4.1@33557


git-svn-id: http://core.svn.wordpress.org/branches/4.1@33524 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-08-04 04:59:20 +00:00
Dominik Schilling
e32ef74d05 Themes: Fix some broken links in the legacy theme preview.
Merge of [33549] to the 4.1 branch.
Built from https://develop.svn.wordpress.org/branches/4.1@33550


git-svn-id: http://core.svn.wordpress.org/branches/4.1@33517 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-08-04 04:57:08 +00:00
Dominik Schilling
f5171862ba Heartbeat: Ensure post locks are released.
Merge of [33542] to the 4.1 branch.
Built from https://develop.svn.wordpress.org/branches/4.1@33544


git-svn-id: http://core.svn.wordpress.org/branches/4.1@33511 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-08-04 04:55:19 +00:00
Dominik Schilling
a967da1a9e Customizer: Use hash_equals() for widgets.
Merge of [33535] to the 4.1 branch.
Built from https://develop.svn.wordpress.org/branches/4.1@33537


git-svn-id: http://core.svn.wordpress.org/branches/4.1@33504 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-08-04 04:52:35 +00:00
Dominik Schilling
3b8a94550b Nav menus: Consistent titles in widgets.
Merge of [33529] to the 4.1 branch.
Built from https://develop.svn.wordpress.org/branches/4.1@33530


git-svn-id: http://core.svn.wordpress.org/branches/4.1@33497 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-08-03 20:58:03 +00:00
Andrew Ozz
922040e867 Backport r33469 and r33470 to 4.1.
See #33106.
Built from https://develop.svn.wordpress.org/branches/4.1@33521


git-svn-id: http://core.svn.wordpress.org/branches/4.1@33488 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-07-31 01:43:23 +00:00
Gary Pendergast
cec063ad22 WPDB: When checking the encoding of strings against the database, make sure we're only relying on the return value of strings that were sent to the database. Also make sure that we're not trying to sanity check strings that've been marked as not needing sanity checking.
Merge of [33455] to the 4.1 branch.

See #32279.


Built from https://develop.svn.wordpress.org/branches/4.1@33480


git-svn-id: http://core.svn.wordpress.org/branches/4.1@33447 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-07-29 06:49:21 +00:00
Gary Pendergast
50e855410b WPDB: ::strip_text_from_query() doesn't pass a length to ::strip_invalid_text(), which was causing queries to fail when they contained characters that needed to be sanity checked by MySQL.
Props dd32, mdawaffe, pento.

Merges [33310] to the 4.1 branch.

See #32279.

Built from https://develop.svn.wordpress.org/branches/4.1@33479


git-svn-id: http://core.svn.wordpress.org/branches/4.1@33446 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-07-29 06:46:21 +00:00
Gary Pendergast
0f529b177c WPDB: Remove some of the complexities in ::strip_invalid_text() associated with switching character sets between queries. Instead of trying to dynamically change connection character sets, we now rely on the value of ::charset. This also fixes the case where queries were being blocked when DB_CHARSET was utf8, but the column character set was non-utf8.
Merge of [33308] to the 4.1 branch.

See #32165.


Built from https://develop.svn.wordpress.org/branches/4.1@33478


git-svn-id: http://core.svn.wordpress.org/branches/4.1@33445 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-07-29 06:35:21 +00:00
Gary Pendergast
eb9a250ae8 WPDB: When checking that text isn't too long to insert into a column, LONGTEXT columns could fail, as their length is longer than PHP_INT_MAX. Treating their length as a float instead of an int fixes this.
Merge of [33276] to the 4.1 branch.

See #32165.


Built from https://develop.svn.wordpress.org/branches/4.1@33477


git-svn-id: http://core.svn.wordpress.org/branches/4.1@33444 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-07-29 06:29:22 +00:00
Gary Pendergast
fae5374051 Bump 4.1 branch to version 4.1.6.
Built from https://develop.svn.wordpress.org/branches/4.1@33396


git-svn-id: http://core.svn.wordpress.org/branches/4.1@33364 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-07-23 11:05:21 +00:00
Gary Pendergast
00ffae7300 Shortcodes: Improve the reliablity of shortcodes inside HTML tags.
Merge of [33359] to the 4.1 branch.

Props miqrogroove.

See #15694.


Built from https://develop.svn.wordpress.org/branches/4.1@33380


git-svn-id: http://core.svn.wordpress.org/branches/4.1@33351 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-07-23 04:37:22 +00:00
Gary Pendergast
a9e97c7ad5 Capabilities: When creating an auto-draft, ensure that the current user still has permission to do so.
Merge of [33357] to the 4.1 branch.


Built from https://develop.svn.wordpress.org/branches/4.1@33375


git-svn-id: http://core.svn.wordpress.org/branches/4.1@33346 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-07-23 03:54:21 +00:00
Michael Adams
3989e1f450 Upgrade: $wpdb->get_col_length() sanity check: bail on unexpected return value.
Merges [32429] for the 4.1 branch.

See #32165.

Built from https://develop.svn.wordpress.org/branches/4.1@32431


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32401 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-05-06 23:13:22 +00:00
Dominik Schilling
3e3300395a Add closing paragraph tag for the 4.1.5 changelog entry.
Built from https://develop.svn.wordpress.org/branches/4.1@32428


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32398 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-05-06 23:04:23 +00:00
Dominik Schilling
3aa108639d 4.1.5 version bumps.
Built from https://develop.svn.wordpress.org/branches/4.1@32425


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32395 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-05-06 22:18:23 +00:00
Michael Adams
2b8283ed89 Upgrade: Ensure unintelligible DB schemas don't result in content loss.
Merge of [32417] to the 4.1 branch.

See #32165.

Props ocean90.

Built from https://develop.svn.wordpress.org/branches/4.1@32419


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32389 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-05-06 21:51:24 +00:00
John Blackbourn
4d1c0c85a6 WPDB: Allow queries to reference tables in the dbname.tablename format, and allow table names to contain any valid character, rather than just ASCII.
Merge of [32368] to the 4.1 branch.

Props pento, willstedt for the initial patch.

See #32090.

Built from https://develop.svn.wordpress.org/branches/4.1@32412


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32382 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-05-06 21:02:23 +00:00
Dominik Schilling
dc0748284b WPDB: When sanity checking query character sets, there's no need to check queries that don't return user data.
Merges [32374] to the 4.1 branch.

props pento.
see #32104.
Built from https://develop.svn.wordpress.org/branches/4.1@32402


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32372 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-05-06 20:02:23 +00:00
Aaron Jorbin
26563868af When upgrading WordPress remove genericons example.html files
[32385] for 4.1 branch

Props @dd32, @boonebgorges, @johnjamesjacoby, @drewapicture, @jorbin


Built from https://develop.svn.wordpress.org/branches/4.1@32401


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32371 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-05-06 19:58:22 +00:00
Helen Hou-Sandí
e258184716 The UTF-8 regex can occasionally fail on very low memory machines. Reduce the amount of memory it uses.
Merges [32375] to the 4.1 branch.

props pento.
See #32204.

Built from https://develop.svn.wordpress.org/branches/4.1@32396


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32366 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-05-06 19:42:23 +00:00
Dominik Schilling
4f3aedcdbe Bundled Themes: Remove Genericons example.html files.
Merge [32392] to the 4.1 branch.
Built from https://develop.svn.wordpress.org/branches/4.1@32394


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32364 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-05-06 19:34:22 +00:00
Michael Adams
bb96e5b686 WPDB: When checking that a string can be sent to MySQL, we shouldn't use mb_convert_encoding(), as it behaves differently to MySQL's character encoding conversion.
Merge of [32364] to the 4.1 branch.

Props mdawaffe, pento, nbachiyski, jorbin, johnjamesjacoby, jeremyfelt.

See #32165.

Built from https://develop.svn.wordpress.org/branches/4.1@32387


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32357 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-05-06 19:07:25 +00:00
Andrew Ozz
f70e3c08da TinyMCE: work-around a bug in the tags matching regex.
For 4.1.
Built from https://develop.svn.wordpress.org/branches/4.1@32371


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32341 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-05-06 05:33:26 +00:00
Gary Pendergast
9037f65f7a 4.1: When upgrading, remove any suspicious comments.
Built from https://develop.svn.wordpress.org/branches/4.1@32312


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32283 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-27 17:13:24 +00:00
Andrew Nacin
dbe23fa6f9 WPDB: Sanity check that any strings being stored in the DB are not too long to store correctly.
Merge [32299] to the 4.1 and 4.2 branches.

Built from https://develop.svn.wordpress.org/@32307


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32278 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-27 15:31:44 +00:00
Gary Pendergast
b502bf4430 4.1 branch is now 4.1.4.
Built from https://develop.svn.wordpress.org/branches/4.1@32301


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32272 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-27 14:07:23 +00:00
Helen Hou-Sandí
5f82891015 The 4.1 branch is now 4.1.3.
Built from https://develop.svn.wordpress.org/branches/4.1@32281


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32252 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-23 19:57:25 +00:00
Gary Pendergast
ee5a9ef1a0 The 4.1 branch is now 4.1.3-RC1.
Built from https://develop.svn.wordpress.org/branches/4.1@32263


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32234 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-22 15:06:22 +00:00
Gary Pendergast
08c78f29d4 WPDB: When sanity checking a string by sending it to MySQL for conversion checks, the incorrect data structure was being returned from wpdb::strip_invalid_text(), causing all write queries to fail for some character sets when the query contained non-ASCII characters.
Merge of [32261] to the 4.1 branch.

See #32051.

Built from https://develop.svn.wordpress.org/branches/4.1@32262


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32233 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-22 15:05:22 +00:00
Gary Pendergast
d110b87090 The 4.1 branch is now 4.1.2.
Built from https://develop.svn.wordpress.org/branches/4.1@32244


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32215 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-21 14:18:26 +00:00
Gary Pendergast
e467eb6c93 WPDB: When deciding if a query needs extra sanity checking based on collation, return early when we can. Merges [32232] and [32233] to the 4.1 branch.
See #32029.


Built from https://develop.svn.wordpress.org/branches/4.1@32234


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32208 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-21 05:44:23 +00:00
Helen Hou-Sandí
ecd58ab7d2 The 4.1 branch is 4.1.2-RC1.
Built from https://develop.svn.wordpress.org/branches/4.1@32226


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32200 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-20 19:38:24 +00:00
Gary Pendergast
97d7fd2cec Fix an incorrect method name in 4.1, introduced in [32163].
Built from https://develop.svn.wordpress.org/branches/4.1@32223


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32197 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-20 18:40:22 +00:00
Gary Pendergast
877ff2ec15 Bump 4.1 branch to 4.1.2.
Built from https://develop.svn.wordpress.org/branches/4.1@32221


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32195 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-20 17:41:46 +00:00
Gary Pendergast
40fd7427e5 4.1: Update about.php.
Built from https://develop.svn.wordpress.org/branches/4.1@32220


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32194 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-20 17:41:23 +00:00
Helen Hou-Sandí
02b9d848a2 Update Akismet external to 3.1.1 in the 4.1 branch.
git-svn-id: http://core.svn.wordpress.org/branches/4.1@32185 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-20 16:23:32 +00:00
Gary Pendergast
6ecee8c8d5 Fix an incorrect PHPDoc added in [32163].
Built from https://develop.svn.wordpress.org/branches/4.1@32187


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32160 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-20 11:33:23 +00:00
Gary Pendergast
62c3bf486b wpdb::$checking_collation was incorrectly marked as protected instead of private in [32163].
Built from https://develop.svn.wordpress.org/branches/4.1@32183


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32156 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-20 11:17:24 +00:00
Gary Pendergast
9d3a4d67c2 Ensure post titles are correctly escaped on the Dashboard. Merge of [32175] to the 4.1 branch.
Props helen, ocean90, dd32, pento.


Built from https://develop.svn.wordpress.org/branches/4.1@32176


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32151 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-20 07:42:23 +00:00
Gary Pendergast
7d6b8c0a89 In Multisite, prevent plugins from unintentionally switching sites. Merge of [32173] to the 4.1 branch.
Props mdawaffe.


Built from https://develop.svn.wordpress.org/branches/4.1@32174


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32149 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-20 07:30:25 +00:00
Gary Pendergast
bc58804ad3 Revert [30640], as it was incorrectly checking some filenames. This merges [32171] in the 4.1 branch.
See #30377.


Built from https://develop.svn.wordpress.org/branches/4.1@32172


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32147 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-20 06:44:23 +00:00
Gary Pendergast
bb5feb26d7 Update the Plupload Flash file to the latest version. Merge of [32168] to the 4.1 branch.
Props azaozz.


Built from https://develop.svn.wordpress.org/branches/4.1@32169


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32144 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-20 06:16:23 +00:00
Gary Pendergast
93eba2d6f9 Remove some old backwards compatibility code from TinyMCE. Merge of [32166] to the 4.1 branch.
Props azaozz.


Built from https://develop.svn.wordpress.org/branches/4.1@32167


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32142 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-20 05:53:23 +00:00
Gary Pendergast
96cffc1a02 Clean up some edge cases in sanitize_sql_orderby(). Merge of [32164] to the 4.1 branch.
Props vortfu, dd32.


Built from https://develop.svn.wordpress.org/branches/4.1@32165


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32140 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-20 05:46:22 +00:00
Gary Pendergast
a10714c271 Merge the query sanity checks from #21212 to the 4.1 branch.
Props pento, nacin, mdawaffe, DrewAPicture.


Built from https://develop.svn.wordpress.org/branches/4.1@32163


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32138 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-20 05:08:23 +00:00
Gary Pendergast
931498f871 readme.html bump.
Built from https://develop.svn.wordpress.org/branches/4.1@32146


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32125 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-19 05:35:23 +00:00
Gary Pendergast
93644991eb The 4.1 branch is now 4.1.2-alpha.
Built from https://develop.svn.wordpress.org/branches/4.1@32144


git-svn-id: http://core.svn.wordpress.org/branches/4.1@32124 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-04-19 05:27:26 +00:00
Andrew Nacin
609c6ecd6c Update Akismet to 3.1 in the 4.1 branch.
git-svn-id: http://core.svn.wordpress.org/branches/4.1@31772 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-03-16 02:12:24 +00:00
Dion Hulse
ae731c8312 Upgrades: Specifically pass the 'version' and 'locale' POST vars through the Core Update FTP credentials form.
This bug was introduced with [30384] / #30245.
Merges [31527] to the 4.1 branch.
Fixes #31378.

Built from https://develop.svn.wordpress.org/branches/4.1@31528


git-svn-id: http://core.svn.wordpress.org/branches/4.1@31509 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-02-24 03:24:25 +00:00
46 changed files with 1903 additions and 1901 deletions

View File

@@ -9,7 +9,7 @@
<body>
<h1 id="logo">
<a href="https://wordpress.org/"><img alt="WordPress" src="wp-admin/images/wordpress-logo.png" /></a>
<br /> Version 4.1.1
<br /> Version 4.1.11
</h1>
<p style="text-align: center">Semantic Personal Publishing Platform</p>

View File

@@ -42,10 +42,50 @@ include( ABSPATH . 'wp-admin/admin-header.php' );
</h2>
<div class="changelog point-releases">
<h3><?php echo _n( 'Maintenance Release', 'Maintenance Releases', 1 ); ?></h3>
<h3><?php echo _n( 'Maintenance and Security Release', 'Maintenance and Security Releases', 11 ); ?></h3>
<p><?php printf( _n( '<strong>Version %1$s</strong> addressed a security issue.',
'<strong>Version %1$s</strong> addressed some security issues.', 6 ), '4.1.11' ); ?>
<?php printf( __( 'For more information, see <a href="%s">the release notes</a>.' ), 'https://codex.wordpress.org/Version_4.1.11' ); ?>
</p>
<p><?php printf( _n( '<strong>Version %1$s</strong> addressed a security issue.',
'<strong>Version %1$s</strong> addressed some security issues.', 2 ), '4.1.10' ); ?>
<?php printf( __( 'For more information, see <a href="%s">the release notes</a>.' ), 'https://codex.wordpress.org/Version_4.1.10' ); ?>
</p>
<p><?php printf( _n( '<strong>Version %1$s</strong> addressed a security issue.',
'<strong>Version %1$s</strong> addressed some security issues.', 1 ), '4.1.9' ); ?>
<?php printf( __( 'For more information, see <a href="%s">the release notes</a>.' ), 'https://codex.wordpress.org/Version_4.1.9' ); ?>
</p>
<p><?php printf( _n( '<strong>Version %1$s</strong> addressed some security issues and fixed %2$s bug.',
'<strong>Version %1$s</strong> addressed some security issues and fixed %2$s bugs.', 2 ), '4.1.8', number_format_i18n( 2 ) ); ?>
<?php printf( __( 'For more information, see <a href="%s">the release notes</a>.' ), 'https://codex.wordpress.org/Version_4.1.8' ); ?>
</p>
<p><?php printf( _n( '<strong>Version %1$s</strong> addressed some security issues and fixed %2$s bug.',
'<strong>Version %1$s</strong> addressed some security issues and fixed %2$s bugs.', 4 ), '4.1.7', number_format_i18n( 4 ) ); ?>
<?php printf( __( 'For more information, see <a href="%s">the release notes</a>.' ), 'https://codex.wordpress.org/Version_4.1.7' ); ?>
</p>
<p><?php printf( _n( '<strong>Version %1$s</strong> addressed a security issue.',
'<strong>Version %1$s</strong> addressed some security issues.', 2 ), '4.1.6' ); ?>
<?php printf( __( 'For more information, see <a href="%s">the release notes</a>.' ), 'https://codex.wordpress.org/Version_4.1.6' ); ?>
</p>
<p><?php printf( _n( '<strong>Version %1$s</strong> addressed some security issues and fixed %2$s bug.',
'<strong>Version %1$s</strong> addressed some security issues and fixed %2$s bugs.', 3 ), '4.1.5', number_format_i18n( 3 ) ); ?>
<?php printf( __( 'For more information, see <a href="%s">the release notes</a>.' ), 'https://codex.wordpress.org/Version_4.1.5' ); ?>
</p>
<p><?php printf( _n( '<strong>Version %1$s</strong> addressed a security issue.',
'<strong>Version %1$s</strong> addressed some security issues.', 1 ), '4.1.4' ); ?>
<?php printf( __( 'For more information, see <a href="%s">the release notes</a>.' ), 'https://codex.wordpress.org/Version_4.1.4' ); ?>
</p>
<p><?php printf( _n( '<strong>Version %1$s</strong> addressed %2$s bug.',
'<strong>Version %1$s</strong> addressed %2$s bugs.', 1 ), '4.1.3', number_format_i18n( 1 ) ); ?>
<?php printf( __( 'For more information, see <a href="%s">the release notes</a>.' ), 'https://codex.wordpress.org/Version_4.1.3' ); ?>
</p>
<p><?php printf( _n( '<strong>Version %1$s</strong> addressed a security issue.',
'<strong>Version %1$s</strong> addressed some security issues.', 8 ), '4.1.2' ); ?>
<?php printf( __( 'For more information, see <a href="%s">the release notes</a>.' ), 'https://codex.wordpress.org/Version_4.1.2' ); ?>
</p>
<p><?php printf( _n( '<strong>Version %1$s</strong> addressed %2$s bug.',
'<strong>Version %1$s</strong> addressed %2$s bugs.', 21 ), '4.1.1', number_format_i18n( 21 ) ); ?>
<?php printf( __( 'For more information, see <a href="%s">the release notes</a>.' ), 'http://codex.wordpress.org/Version_4.1.1' ); ?>
<?php printf( __( 'For more information, see <a href="%s">the release notes</a>.' ), 'https://codex.wordpress.org/Version_4.1.1' ); ?>
</p>
</div>

View File

@@ -1538,10 +1538,12 @@ function wp_ajax_inline_save() {
$data['parent_id'] = $data['post_parent'];
// Status.
if ( isset($data['keep_private']) && 'private' == $data['keep_private'] )
if ( isset( $data['keep_private'] ) && 'private' == $data['keep_private'] ) {
$data['visibility'] = 'private';
$data['post_status'] = 'private';
else
} else {
$data['post_status'] = $data['_status'];
}
if ( empty($data['comment_status']) )
$data['comment_status'] = 'closed';

View File

@@ -554,9 +554,9 @@ class WP_Comments_List_Table extends WP_List_Table {
if ( current_user_can( 'edit_post', $post->ID ) ) {
$post_link = "<a href='" . get_edit_post_link( $post->ID ) . "'>";
$post_link .= get_the_title( $post->ID ) . '</a>';
$post_link .= esc_html( get_the_title( $post->ID ) ) . '</a>';
} else {
$post_link = get_the_title( $post->ID );
$post_link = esc_html( get_the_title( $post->ID ) );
}
echo '<div class="response-links"><span class="post-com-count-wrapper">';

View File

@@ -225,7 +225,7 @@ class WP_MS_Users_List_Table extends WP_List_Table {
break;
case 'email':
echo "<td $attributes><a href='mailto:$user->user_email'>$user->user_email</a></td>";
echo "<td $attributes><a href='" . esc_url( "mailto:$user->user_email" ) . "'>$user->user_email</a></td>";
break;
case 'registered':

View File

@@ -419,7 +419,7 @@ class WP_Users_List_Table extends WP_List_Table {
$r .= "<td $attributes>$user_object->first_name $user_object->last_name</td>";
break;
case 'email':
$r .= "<td $attributes><a href='mailto:$email' title='" . esc_attr( sprintf( __( 'E-mail: %s' ), $email ) ) . "'>$email</a></td>";
$r .= "<td $attributes><a href='" . esc_url( "mailto:$email" ) . "' title='" . esc_attr( sprintf( __( 'E-mail: %s' ), $email ) ) . "'>$email</a></td>";
break;
case 'role':
$r .= "<td $attributes>$role_name</td>";

View File

@@ -416,6 +416,10 @@ function wp_network_dashboard_right_now() {
function wp_dashboard_quick_press( $error_msg = false ) {
global $post_ID;
if ( ! current_user_can( 'edit_posts' ) ) {
return;
}
/* Check if a new auto-draft (= no new post_ID) is needed or if the old can be used */
$last_post_id = (int) get_user_option( 'dashboard_quick_press_last_post_id' ); // Get the last post_ID
if ( $last_post_id ) {
@@ -518,7 +522,7 @@ function wp_dashboard_recent_drafts( $drafts = false ) {
function _wp_dashboard_recent_comments_row( &$comment, $show_date = true ) {
$GLOBALS['comment'] =& $comment;
$comment_post_title = strip_tags(get_the_title( $comment->comment_post_ID ));
$comment_post_title = _draft_or_post_title( $comment->comment_post_ID );
if ( current_user_can( 'edit_post', $comment->comment_post_ID ) ) {
$comment_post_url = get_edit_post_link( $comment->comment_post_ID );

View File

@@ -1473,7 +1473,7 @@ function _admin_notice_post_locked() {
// Allow plugins to prevent some users overriding the post lock
if ( $override ) {
?>
<a class="button button-primary wp-tab-last" href="<?php echo esc_url( add_query_arg( 'get-post-lock', '1', get_edit_post_link( $post->ID, 'url' ) ) ); ?>"><?php _e('Take over'); ?></a>
<a class="button button-primary wp-tab-last" href="<?php echo esc_url( add_query_arg( 'get-post-lock', '1', wp_nonce_url( get_edit_post_link( $post->ID, 'url' ), 'lock-post_' . $post->ID ) ) ); ?>"><?php _e('Take over'); ?></a>
<?php
}

View File

@@ -1505,7 +1505,7 @@ function _draft_or_post_title( $post = 0 ) {
$title = get_the_title( $post );
if ( empty( $title ) )
$title = __( '(no title)' );
return $title;
return esc_html( $title );
}
/**

View File

@@ -1048,6 +1048,9 @@ function update_core($from, $to) {
$wp_filesystem->delete($old_file, true);
}
// Remove any Genericons example.html's from the filesystem
_upgrade_422_remove_genericons();
// Upgrade DB with separate request
/** This filter is documented in wp-admin/includes/update-core.php */
apply_filters( 'update_feedback', __( 'Upgrading database&#8230;' ) );
@@ -1186,3 +1189,67 @@ window.location = 'about.php?updated';
exit();
}
add_action( '_core_updated_successfully', '_redirect_to_about_wordpress' );
/**
* Cleans up Genericons example files.
*
* @since 4.2.2
*/
function _upgrade_422_remove_genericons() {
global $wp_theme_directories, $wp_filesystem;
// A list of the affected files using the filesystem absolute paths.
$affected_files = array();
// Themes
foreach ( $wp_theme_directories as $directory ) {
$affected_theme_files = _upgrade_422_find_genericons_files_in_folder( $directory );
$affected_files = array_merge( $affected_files, $affected_theme_files );
}
// Plugins
$affected_plugin_files = _upgrade_422_find_genericons_files_in_folder( WP_PLUGIN_DIR );
$affected_files = array_merge( $affected_files, $affected_plugin_files );
foreach ( $affected_files as $file ) {
$gen_dir = $wp_filesystem->find_folder( trailingslashit( dirname( $file ) ) );
if ( empty( $gen_dir ) ) {
continue;
}
// The path when the file is accessed via WP_Filesystem may differ in the case of FTP
$remote_file = $gen_dir . basename( $file );
if ( ! $wp_filesystem->exists( $remote_file ) ) {
continue;
}
if ( ! $wp_filesystem->delete( $remote_file, false, 'f' ) ) {
$wp_filesystem->put_contents( $remote_file, '' );
}
}
}
/**
* Recursively find Genericons example files in a given folder.
*
* @ignore
* @since 4.2.2
*
* @param string $directory Directory path. Expects trailingslashed.
* @return array
*/
function _upgrade_422_find_genericons_files_in_folder( $directory ) {
$directory = trailingslashit( $directory );
$files = array();
if ( file_exists( "{$directory}example.html" ) && false !== strpos( file_get_contents( "{$directory}example.html" ), '<title>Genericons</title>' ) ) {
$files[] = "{$directory}example.html";
}
foreach ( glob( $directory . '*', GLOB_ONLYDIR ) as $dir ) {
$files = array_merge( $files, _upgrade_422_find_genericons_files_in_folder( $dir ) );
}
return $files;
}

View File

@@ -442,6 +442,9 @@ function upgrade_all() {
if ( $wp_current_db_version < 29630 )
upgrade_400();
if ( $wp_current_db_version < 30135 )
upgrade_415();
maybe_disable_link_manager();
maybe_disable_automattic_widgets();
@@ -1328,6 +1331,62 @@ function upgrade_400() {
}
}
/**
* Execute changes made in WordPress 4.1.4.
*
* @since 4.1.4
*/
function upgrade_414() {
}
/**
* Execute changes made in WordPress 4.1.5.
*
* @since 4.1.5
*/
function upgrade_415() {
global $wp_current_db_version, $wpdb;
if ( $wp_current_db_version < 30135 ) {
$content_length = $wpdb->get_col_length( $wpdb->comments, 'comment_content' );
if ( is_wp_error( $content_length ) ) {
return;
}
if ( false === $content_length ) {
$content_length = array(
'type' => 'byte',
'length' => 65535,
);
} elseif ( ! is_array( $content_length ) ) {
$length = (int) $content_length > 0 ? (int) $content_length : 65535;
$content_length = array(
'type' => 'byte',
'length' => $length
);
}
if ( 'byte' !== $content_length['type'] || 0 === $content_length['length'] ) {
// Sites with malformed DB schemas are on their own.
return;
}
$allowed_length = intval( $content_length['length'] ) - 10;
$comments = $wpdb->get_results(
"SELECT `comment_ID` FROM `{$wpdb->comments}`
WHERE `comment_date_gmt` > '2015-04-26'
AND LENGTH( `comment_content` ) >= {$allowed_length}
AND ( `comment_content` LIKE '%<%' OR `comment_content` LIKE '%>%' )"
);
foreach ( $comments as $comment ) {
wp_delete_comment( $comment->comment_ID, true );
}
}
}
/**
* Execute network level changes
*

View File

@@ -453,14 +453,14 @@ var wpNavMenu;
if ( ! isPrimaryMenuItem ) {
thisLink = menuItem.find( '.menus-move-left' ),
thisLinkText = menus.outFrom.replace( '%s', prevItemNameLeft );
thisLink.prop( 'title', menus.moveOutFrom.replace( '%s', prevItemNameLeft ) ).html( thisLinkText ).css( 'display', 'inline' );
thisLink.prop( 'title', menus.moveOutFrom.replace( '%s', prevItemNameLeft ) ).text( thisLinkText ).css( 'display', 'inline' );
}
if ( 0 !== position ) {
if ( menuItem.find( '.menu-item-data-parent-id' ).val() !== menuItem.prev().find( '.menu-item-data-db-id' ).val() ) {
thisLink = menuItem.find( '.menus-move-right' ),
thisLinkText = menus.under.replace( '%s', prevItemNameRight );
thisLink.prop( 'title', menus.moveUnder.replace( '%s', prevItemNameRight ) ).html( thisLinkText ).css( 'display', 'inline' );
thisLink.prop( 'title', menus.moveUnder.replace( '%s', prevItemNameRight ) ).text( thisLinkText ).css( 'display', 'inline' );
}
}
@@ -482,7 +482,7 @@ var wpNavMenu;
title = menus.subMenuFocus.replace( '%1$s', itemName ).replace( '%2$d', itemPosition ).replace( '%3$s', parentItemName );
}
$this.prop('title', title).html( title );
$this.prop('title', title).text( title );
});
},

File diff suppressed because one or more lines are too long

View File

@@ -272,7 +272,7 @@ if ( isset( $_GET['updated'] ) ) {
<tr>
<th scope="row"><label for="first_comment_author"><?php _e( 'First Comment Author' ) ?></label></th>
<td>
<input type="text" size="40" name="first_comment_author" id="first_comment_author" value="<?php echo get_site_option('first_comment_author') ?>" />
<input type="text" size="40" name="first_comment_author" id="first_comment_author" value="<?php echo esc_attr( get_site_option('first_comment_author') ); ?>" />
<p class="description">
<?php _e( 'The author of the first comment on a new site.' ) ?>
</p>

View File

@@ -113,8 +113,9 @@ case 'post-quickdraft-save':
if ( ! wp_verify_nonce( $nonce, 'add-post' ) )
$error_msg = __( 'Unable to submit this form, please refresh and try again.' );
if ( ! current_user_can( 'edit_posts' ) )
$error_msg = __( 'Oops, you don&#8217;t have access to add new drafts.' );
if ( ! current_user_can( 'edit_posts' ) ) {
exit;
}
if ( $error_msg )
return wp_dashboard_quick_press( $error_msg );
@@ -157,6 +158,7 @@ case 'edit':
wp_die( __( 'You can&#8217;t edit this item because it is in the Trash. Please restore it and try again.' ) );
if ( ! empty( $_GET['get-post-lock'] ) ) {
check_admin_referer( 'lock-post_' . $post_id );
wp_set_post_lock( $post_id );
wp_redirect( get_edit_post_link( $post_id, 'url' ) );
exit();

View File

@@ -390,14 +390,14 @@ function do_core_upgrade( $reinstall = false ) {
<h2><?php _e('Update WordPress'); ?></h2>
<?php
if ( false === ( $credentials = request_filesystem_credentials( $url, '', false, ABSPATH, array(), $allow_relaxed_file_ownership ) ) ) {
if ( false === ( $credentials = request_filesystem_credentials( $url, '', false, ABSPATH, array( 'version', 'locale' ), $allow_relaxed_file_ownership ) ) ) {
echo '</div>';
return;
}
if ( ! WP_Filesystem( $credentials, ABSPATH, $allow_relaxed_file_ownership ) ) {
// Failed to connect, Error and request again
request_filesystem_credentials( $url, '', true, ABSPATH, array(), $allow_relaxed_file_ownership );
request_filesystem_credentials( $url, '', true, ABSPATH, array( 'version', 'locale' ), $allow_relaxed_file_ownership );
echo '</div>';
return;
}

View File

@@ -99,7 +99,7 @@ if ( is_multisite()
// Execute confirmed email change. See send_confirmation_on_profile_email().
if ( is_multisite() && IS_PROFILE_PAGE && isset( $_GET[ 'newuseremail' ] ) && $current_user->ID ) {
$new_email = get_option( $current_user->ID . '_new_email' );
if ( $new_email[ 'hash' ] == $_GET[ 'newuseremail' ] ) {
if ( $new_email && hash_equals( $new_email[ 'hash' ], $_GET[ 'newuseremail' ] ) ) {
$user = new stdClass;
$user->ID = $current_user->ID;
$user->user_email = esc_html( trim( $new_email[ 'newemail' ] ) );
@@ -110,7 +110,8 @@ if ( is_multisite() && IS_PROFILE_PAGE && isset( $_GET[ 'newuseremail' ] ) && $c
wp_redirect( add_query_arg( array('updated' => 'true'), self_admin_url( 'profile.php' ) ) );
die();
}
} elseif ( is_multisite() && IS_PROFILE_PAGE && !empty( $_GET['dismiss'] ) && $current_user->ID . '_new_email' == $_GET['dismiss'] ) {
} elseif ( is_multisite() && IS_PROFILE_PAGE && !empty( $_GET['dismiss'] ) && $current_user->ID . '_new_email' === $_GET['dismiss'] ) {
check_admin_referer( 'dismiss-' . $current_user->ID . '_new_email' );
delete_option( $current_user->ID . '_new_email' );
wp_redirect( add_query_arg( array('updated' => 'true'), self_admin_url( 'profile.php' ) ) );
die();
@@ -413,7 +414,7 @@ if ( is_multisite() && is_network_admin() && ! IS_PROFILE_PAGE && current_user_c
$new_email = get_option( $current_user->ID . '_new_email' );
if ( $new_email && $new_email['newemail'] != $current_user->user_email && $profileuser->ID == $current_user->ID ) : ?>
<div class="updated inline">
<p><?php printf( __('There is a pending change of your e-mail to <code>%1$s</code>. <a href="%2$s">Cancel</a>'), $new_email['newemail'], esc_url( self_admin_url( 'profile.php?dismiss=' . $current_user->ID . '_new_email' ) ) ); ?></p>
<p><?php printf( __('There is a pending change of your e-mail to <code>%1$s</code>. <a href="%2$s">Cancel</a>'), esc_html( $new_email['newemail'] ), esc_url( wp_nonce_url( self_admin_url( 'profile.php?dismiss=' . $current_user->ID . '_new_email' ), 'dismiss-' . $current_user->ID . '_new_email' ) ) ); ?></p>
</div>
<?php endif; ?>
</td>

View File

@@ -1,719 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Genericons</title>
<link rel="stylesheet" href="genericons.css">
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<style type="text/css">
/**
* Example page CSS
*/
body {
font-family: sans-serif;
line-height: 1.5;
margin: 0;
color: #2f2d2c;
background: #fff;
font-size: 11pt;
}
a {
color: #2f2d2c;
}
h4 {
margin-top: 40px;
}
#iconlist {
clear: both;
margin-bottom: 20px;
}
#iconlist div {
padding: 10px;
overflow: hidden;
white-space: nowrap;
font-size: 32px;
line-height: 1;
position: relative;
width: 32px;
height: 32px;
}
#iconlist div:before {
margin-right: 20px;
}
#iconlist div:hover {
cursor: pointer;
color: #e4c05c;
}
#primary {
background: #e4c05c;
overflow: hidden;
}
#content {
position: relative;
color: #fff;
max-width: 980px;
padding: 0 10px;
margin: 0 auto;
}
#icons {
background: #fbfbfb;
}
#icons #iconlist {
max-width: 980px;
box-sizing: border-box;
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box;
padding: 20px 0;
margin: 0 auto;
}
#glyph {
float: left;
width: 50%;
box-sizing: border-box;
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box;
-ms-box-sizing:border-box;
padding: 20px 0;
}
#glyph .info {
float: right;
width: 180px;
padding: 36px 0 0 0;
}
#glyph .info a {
color: #2f2d2c;
display: block;
padding: 8px 0 8px 15px;
}
#glyph .info strong {
font-weight: normal;
display: block;
padding: 8px 0;
}
#glyph .genericon {
font-size: 256px;
width: 256px;
height: 256px;
overflow: visible;
float: left;
}
.description {
margin-top: 50px;
width: 48%;
float: right;
padding-left: 40px;
margin-left: 2%;
box-sizing: border-box;
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box;
-ms-box-sizing:border-box;
background-size: 4px 4px;
}
#primary h2 {
color: white;
margin: 0 auto;
padding: 22px 0 0 20px;
max-width: 980px;
font-size: 2em;
}
#primary h2 span {
display: block;
font-weight: normal;
font-size: 12pt;
}
#footer {
clear: both;
max-width: 980px;
margin: 80px auto;
text-align: center;
text-transform: uppercase;
letter-spacing: .1em;
font-size: 7pt;
color: #ddd;
}
#footer a {
color: #ccc;
display: inline-block;
width: 150px;
overflow: hidden;
text-indent: 100%;
position: relative;
top: 2px;
opacity: .3;
background-repeat: no-repeat;
background-position: center top;
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjQsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTUwcHgiIGhlaWdodD0iMTRweCIgdmlld0JveD0iMTAgMCAxNTAgMTQiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMTAgMCAxNTAgMTQiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZmlsbD0iIzQ0NDQ0NCIgZD0iTTY1LjQzOCwxMi41Yy0zLjYyNiwwLTUuOTc2LTIuNjEyLTUuOTc2LTUuMzMxVjYuODMxYzAtMi43NjUsMi4zNTEtNS4zMyw1Ljk3Ni01LjMzDQoJCWMzLjY0MSwwLDUuOTksMi41NjUsNS45OSw1LjMzdjAuMzM5QzcxLjQyOCw5Ljg4OCw2OS4wNzksMTIuNSw2NS40MzgsMTIuNXogTTY5LjQ5Miw2Ljg2MWMwLTEuOTgtMS40NDQtMy43NDgtNC4wNTUtMy43NDgNCgkJcy00LjA0LDEuNzY4LTQuMDQsMy43NDh2MC4yNDZjMCwxLjk4MSwxLjQyOSwzLjc3OSw0LjA0LDMuNzc5czQuMDU1LTEuNzk4LDQuMDU1LTMuNzc5VjYuODYxeiIvPg0KCTxwYXRoIGZpbGw9IiM0NDQ0NDQiIGQ9Ik0yNC40OTgsMTIuMWwtMS4zNTItMi41MzVoLTYuMDA3TDE1LjgzNCwxMi4xaC0yLjAyOGw1LjUzMS0xMC4yM2gxLjU5N2w1LjYyMiwxMC4yM0gyNC40OThMMjQuNDk4LDEyLjF6DQoJCSBNMjAuMDksMy44NjZsLTIuMjI4LDQuMzAxaDQuNTMxTDIwLjA5LDMuODY2eiIvPg0KCTxwYXRoIGZpbGw9IiM0NDQ0NDQiIGQ9Ik0zNS4yODEsMTIuNWMtMy42NzEsMC01LjM3Ni0xLjk5Ni01LjM3Ni00LjY1NFYxLjg3aDEuOTA0djYuMDA2YzAsMS44OTEsMS4yNDUsMy4wMTMsMy42MSwzLjAxMw0KCQljMi40MjgsMCwzLjQyNi0xLjEyMiwzLjQyNi0zLjAxM1YxLjg3aDEuOTJ2NS45NzZDNDAuNzY3LDEwLjM4LDM5LjEzOCwxMi41LDM1LjI4MSwxMi41eiIvPg0KCTxwYXRoIGZpbGw9IiM0NDQ0NDQiIGQ9Ik01MS40NTgsMy40NjdWMTIuMWgtMS45MTlWMy40NjdoLTQuNDcxVjEuODdoMTAuODZ2MS41OThMNTEuNDU4LDMuNDY3TDUxLjQ1OCwzLjQ2N3oiLz4NCgk8cGF0aCBmaWxsPSIjNDQ0NDQ0IiBkPSJNODguNTQzLDEyLjFWNC4wMDRsLTAuNTA5LDAuODkxTDgzLjc0OSwxMi4xaC0wLjkzN2wtNC4yNC03LjIwNWwtMC41MDYtMC44OTFWMTIuMWgtMS44NzVWMS44N2gyLjY1OA0KCQlsNC4wNCw3LjAyMWwwLjQ3NiwwLjg2bDAuNDc3LTAuODZsMy45OTQtNy4wMjFoMi42MjdWMTIuMUg4OC41NDNMODguNTQzLDEyLjF6Ii8+DQoJPHBhdGggZmlsbD0iIzQ0NDQ0NCIgZD0iTTEwNC45NzgsMTIuMWwtMS4zNTItMi41MzVoLTYuMDA4TDk2LjMxMywxMi4xaC0yLjAyOGw1LjUzMS0xMC4yMzFoMS41OTlsNS42MjIsMTAuMjMxSDEwNC45Nzh6DQoJCSBNMTAwLjU3LDMuODY2bC0yLjIyOCw0LjMwMWg0LjUyOUwxMDAuNTcsMy44NjZ6Ii8+DQoJPHBhdGggZmlsbD0iIzQ0NDQ0NCIgZD0iTTExNC43NzgsMy40NjdWMTIuMWgtMS45MlYzLjQ2N2gtNC40N1YxLjg3aDEwLjg2djEuNTk4TDExNC43NzgsMy40NjdMMTE0Ljc3OCwzLjQ2N3oiLz4NCgk8cGF0aCBmaWxsPSIjNDQ0NDQ0IiBkPSJNMTI4Ljg2NiwzLjQ2N1YxMi4xaC0xLjkxOVYzLjQ2N2gtNC40NzJWMS44N2gxMC44NnYxLjU5OEwxMjguODY2LDMuNDY3TDEyOC44NjYsMy40Njd6Ii8+DQoJPHBhdGggZmlsbD0iIzQ0NDQ0NCIgZD0iTTEzOC4wNjcsMTIuMVYyLjgzN2MwLjc2OSwwLDEuMDc2LTAuNDE1LDEuMDc2LTAuOTY4aDAuODE0VjEyLjFIMTM4LjA2N0wxMzguMDY3LDEyLjF6Ii8+DQoJPHBhdGggZmlsbD0iIzQ0NDQ0NCIgZD0iTTE1NC45OTYsNC43NTdjLTAuOTIxLTAuODQ1LTIuMjc0LTEuNjQ0LTQuMTAyLTEuNjQ0Yy0yLjczMywwLTQuMjcsMS44NzUtNC4yNywzLjgyNXYwLjINCgkJYzAsMS45MzcsMS41NTEsMy43NDgsNC40MDgsMy43NDhjMS43MDUsMCwzLjExOC0wLjgxNCw0LjAwOS0xLjY0NGwxLjE1MiwxLjIxNWMtMS4xMjEsMS4xMDctMy4wMjYsMi4wNDMtNS4yODUsMi4wNDMNCgkJYy0zLjg3LDAtNi4yMjMtMi41MjEtNi4yMjMtNS4yODRWNi44NzdjMC0yLjc2NiwyLjU2Ni01LjM3Nyw2LjMxNC01LjM3N2MyLjE2NywwLDQuMTM2LDAuOTA2LDUuMTk0LDIuMDQzTDE1NC45OTYsNC43NTd6Ii8+DQoJPHBhdGggZmlsbD0iIzQ0NDQ0NCIgZD0iTTY2LjcwMiw1LjA2YzAuMzQ3LDAuMjI0LDAuNDQ0LDAuNjg3LDAuMjE5LDEuMDM3TDY1LjE2OSw4LjgxYy0wLjIyNSwwLjM0Ny0wLjY4OCwwLjQ0OC0xLjAzMywwLjIyOWwwLDANCgkJQzYzLjc5LDguODEyLDYzLjY5Miw4LjM1MSw2My45MTcsOGwxLjc1MS0yLjcxM0M2NS44OTMsNC45MzgsNjYuMzU1LDQuODM3LDY2LjcwMiw1LjA2TDY2LjcwMiw1LjA2eiIvPg0KPC9nPg0KPC9zdmc+DQo=');
}
#footer a:hover {
opacity: 1;
}
pre, code {
font: 14px/1.5 monospace;
}
.code {
display: block;
font: 14px/1.5 monospace;
width: 600px;
white-space: pre;
border: 1px solid #ccc;
padding: 10px;
overflow: auto;
min-height: 110px;
}
#iconlist .new, #iconlist .update {
position: relative;
}
#iconlist .new:after, #iconlist .update:after {
color: #e4c05c;
display: block;
content: "NEW";
font: bold 8px/1 sans-serif;
position: absolute;
top: 0px;
text-align: center;
z-index: 10;
width: 100%;
}
#iconlist .update:after {
content: "UPDATE";
left: -1px;
}
body.searching #iconlist span.update:after, body.searching #iconlist span.new:after {
display: none;
}
#search {
border: 0;
border-radius: 2px;
position: absolute;
right: 20px;
font: 11pt sans-serif;
padding: 10px;
top: 20px;
background: rgba(255,255,255,.8);
}
#search:focus {
background: #fff;
outline: none;
}
.genericon-404 {
display: none !important; /* This is an easter egg */
}
.genericon:after {
content: attr(alt);
display: block;
font-size: 9px;
color: #999;
text-align: center;
}
.hideUACs.genericon:after {
content: none;
}
@media only screen and ( max-width: 900px ) {
#glyph {
float: none;
width: 100%;
}
#glyph .info {
width: 30%;
}
#glyph .genericon {
width: 70%;
}
.description {
clear: both;
width: 100%;
background: none;
padding-left: 0;
float: none;
}
}
</style>
<script type="text/javascript">
/**
* Example page JS
*/
function copyToClipboard ( text, copyMode ) {
if ( copyMode == "css" ) {
window.prompt( "Copy this, then paste in your CSS :before selector.", text );
} else if ( copyMode == "html" ) {
window.prompt( "Copy this, then paste in your HTML.", text );
} else {
window.prompt( "Copy this, then paste in your Photoshop textfield.", text );
}
}
function pickRandomIcon() {
var divs = jQuery("#iconlist div").get().sort(function(){
return Math.round(Math.random())-0.5;
}).slice(0,1);
attr = jQuery(divs).attr('alt');
cssclass = jQuery(divs).attr('class');
displayGlyph( attr, cssclass );
}
function displayGlyph( attr, cssclass ) {
// set permalink
var permalink = cssclass.split(' genericon-')[1];
window.location.hash = permalink;
// css copy string
csstext = "content: \'\\" + attr + "';";
// html copy string
htmltext = '<span class="' + cssclass + '"></span>';
// glyph copy string
glyphtemp = "&#x" + attr + ";";
jQuery('#temp').html( glyphtemp );
glyphtext = jQuery('#temp').text();
// final output
output = '<div class="' + cssclass + '"></div>'
+ '<div class="info">'
+ '<strong>&larr; ' + cssclass.split( ' ' )[1] + '</strong>'
+ '<a href="javascript:copyToClipboard(csstext, \'css\')">Copy CSS</a>'
+ '<a href="javascript:copyToClipboard(htmltext, \'html\')">Copy HTML</a>'
+ '<a href="javascript:copyToClipboard(glyphtext)">Copy Glyph</a>'
+ '</div>';
jQuery( '#glyph' ).html( output );
}
function sortUnicode ( a, b ) {
var numberA = jQuery(a).attr('alt').replace('f', '');
var numberB = jQuery(b).attr('alt').replace('f', '');
var contentA =parseInt( numberA, 16 );
var contentB =parseInt( numberB, 16 );
return (contentA < contentB) ? -1 : (contentA > contentB) ? 1 : 0;
}
jQuery(document).ready(function() {
// pick random icon if no permalink, otherwise go to permalink
if ( window.location.hash ) {
permalink = "genericon-" + window.location.hash.split('#')[1];
attr = jQuery( '.' + permalink ).attr( 'alt' );
cssclass = jQuery( '.' + permalink ).attr('class');
displayGlyph( attr, cssclass );
} else {
pickRandomIcon();
}
jQuery( '#iconlist div' ).click(function() {
attr = jQuery( this ).attr( 'alt' );
cssclass = jQuery( this ).attr( 'class' );
displayGlyph( attr, cssclass );
});
var $rows = jQuery('#iconlist div');
jQuery('#search').keyup(function() {
// remove update text when using search
jQuery('body').addClass('searching');
var val = jQuery.trim(jQuery(this).val()).replace(/ +/g, ' ').toLowerCase();
$rows.show().filter(function() {
var text = jQuery(this).text().replace(/\s+/g, ' ').toLowerCase();
return !~text.indexOf(val);
}).hide();
});
jQuery('input#search').focus();
// sort based on number
jQuery('#iconlist div').sort( sortUnicode ).appendTo('#iconlist');
});
function toggleUACs() {
jQuery('.genericon').toggleClass('hideUACs');
}
</script>
</head>
<body>
<div id="main">
<div id="primary">
<div id="content">
<h2>Genericons <span>&mdash; A free, GPL, flexible icon font for blogs!</span></h2>
<input placeholder="Filter..." name="search" id="search" type="text" value="" maxlength="150" />
<div id="glyph">
</div>
<div class="description">
<p>Genericons are vector icons embedded in a webfont designed to be clean and simple keeping with a generic aesthetic. Use for instant HiDPI or to easily change colors on the fly.</p>
</div>
</div>
</div>
<div id="icons">
<div id="iconlist">
<!-- note, the text inside the HTML elements is purely for the seach -->
<div alt="f423" class="genericon genericon-404" title="genericon-404">404</div>
<div alt="f508" class="genericon genericon-activity" title="genericon-activity">activity</div>
<div alt="f509" class="genericon genericon-anchor" title="genericon-anchor">anchor</div>
<div alt="f101" class="genericon genericon-aside" title="genericon-aside">aside</div>
<div alt="f416" class="genericon genericon-attachment" title="genericon-attachment">attachment</div>
<div alt="f109" class="genericon genericon-audio" title="genericon-audio">audio</div>
<div alt="f471" class="genericon genericon-bold" title="genericon-bold">bold</div>
<div alt="f444" class="genericon genericon-book" title="genericon-book">book</div>
<div alt="f50a" class="genericon genericon-bug" title="genericon-bug">bug</div>
<div alt="f447" class="genericon genericon-cart" title="genericon-cart">cart</div>
<div alt="f301" class="genericon genericon-category" title="genericon-category">category</div>
<div alt="f108" class="genericon genericon-chat" title="genericon-chat">chat</div>
<div alt="f418" class="genericon genericon-checkmark" title="genericon-checkmark">checkmark</div>
<div alt="f405" class="genericon genericon-close" title="genericon-close">close</div>
<div alt="f406" class="genericon genericon-close-alt" title="genericon-close-alt">close-alt</div>
<div alt="f426" class="genericon genericon-cloud" title="genericon-cloud">cloud</div>
<div alt="f440" class="genericon genericon-cloud-download" title="genericon-cloud-download">cloud-download</div>
<div alt="f441" class="genericon genericon-cloud-upload" title="genericon-cloud-upload">cloud-upload</div>
<div alt="f462" class="genericon genericon-code" title="genericon-code">code</div>
<div alt="f216" class="genericon genericon-codepen" title="genericon-codepen">codepen</div>
<div alt="f445" class="genericon genericon-cog" title="genericon-cog">cog</div>
<div alt="f432" class="genericon genericon-collapse" title="genericon-collapse">collapse</div>
<div alt="f300" class="genericon genericon-comment" title="genericon-comment">comment</div>
<div alt="f305" class="genericon genericon-day" title="genericon-day">day</div>
<div alt="f221" class="genericon genericon-digg" title="genericon-digg">digg</div>
<div alt="f443" class="genericon genericon-document" title="genericon-document">document</div>
<div alt="f428" class="genericon genericon-dot" title="genericon-dot">dot</div>
<div alt="f502" class="genericon genericon-downarrow" title="genericon-downarrow">downarrow</div>
<div alt="f50b" class="genericon genericon-download" title="genericon-download">download</div>
<div alt="f436" class="genericon genericon-draggable" title="genericon-draggable">draggable</div>
<div alt="f201" class="genericon genericon-dribbble" title="genericon-dribbble">dribbble</div>
<div alt="f225" class="genericon genericon-dropbox" title="genericon-dropbox">dropbox</div>
<div alt="f433" class="genericon genericon-dropdown" title="genericon-dropdown">dropdown</div>
<div alt="f434" class="genericon genericon-dropdown-left" title="genericon-dropdown-left">dropdown-left</div>
<div alt="f411" class="genericon genericon-edit" title="genericon-edit">edit</div>
<div alt="f476" class="genericon genericon-ellipsis" title="genericon-ellipsis">ellipsis</div>
<div alt="f431" class="genericon genericon-expand" title="genericon-expand">expand</div>
<div alt="f442" class="genericon genericon-external" title="genericon-external">external</div>
<div alt="f203" class="genericon genericon-facebook" title="genericon-facebook">facebook</div>
<div alt="f204" class="genericon genericon-facebook-alt" title="genericon-facebook-alt">facebook-alt</div>
<div alt="f458" class="genericon genericon-fastforward" title="genericon-fastforward">fastforward</div>
<div alt="f413" class="genericon genericon-feed" title="genericon-feed">feed</div>
<div alt="f468" class="genericon genericon-flag" title="genericon-flag">flag</div>
<div alt="f211" class="genericon genericon-flickr" title="genericon-flickr">flickr</div>
<div alt="f226" class="genericon genericon-foursquare" title="genericon-foursquare">foursquare</div>
<div alt="f474" class="genericon genericon-fullscreen" title="genericon-fullscreen">fullscreen</div>
<div alt="f103" class="genericon genericon-gallery" title="genericon-gallery">gallery</div>
<div alt="f200" class="genericon genericon-github" title="genericon-github">github</div>
<div alt="f206" class="genericon genericon-googleplus" title="genericon-googleplus">googleplus</div>
<div alt="f218" class="genericon genericon-googleplus-alt" title="genericon-googleplus-alt">googleplus-alt</div>
<div alt="f50c" class="genericon genericon-handset" title="genericon-handset">handset</div>
<div alt="f461" class="genericon genericon-heart" title="genericon-heart">heart</div>
<div alt="f457" class="genericon genericon-help" title="genericon-help">help</div>
<div alt="f404" class="genericon genericon-hide" title="genericon-hide">hide</div>
<div alt="f505" class="genericon genericon-hierarchy" title="genericon-hierarchy">hierarchy</div>
<div alt="f409" class="genericon genericon-home" title="genericon-home">home</div>
<div alt="f102" class="genericon genericon-image" title="genericon-image">image</div>
<div alt="f455" class="genericon genericon-info" title="genericon-info">info</div>
<div alt="f215" class="genericon genericon-instagram" title="genericon-instagram">instagram</div>
<div alt="f472" class="genericon genericon-italic" title="genericon-italic">italic</div>
<div alt="f427" class="genericon genericon-key" title="genericon-key">key</div>
<div alt="f503" class="genericon genericon-leftarrow" title="genericon-leftarrow">leftarrow</div>
<div alt="f107" class="genericon genericon-link" title="genericon-link">link</div>
<div alt="f207" class="genericon genericon-linkedin" title="genericon-linkedin">linkedin</div>
<div alt="f208" class="genericon genericon-linkedin-alt" title="genericon-linkedin-alt">linkedin-alt</div>
<div alt="f417" class="genericon genericon-location" title="genericon-location">location</div>
<div alt="f470" class="genericon genericon-lock" title="genericon-lock">lock</div>
<div alt="f410" class="genericon genericon-mail" title="genericon-mail">mail</div>
<div alt="f422" class="genericon genericon-maximize" title="genericon-maximize">maximize</div>
<div alt="f419" class="genericon genericon-menu" title="genericon-menu">menu</div>
<div alt="f50d" class="genericon genericon-microphone" title="genericon-microphone">microphone</div>
<div alt="f421" class="genericon genericon-minimize" title="genericon-minimize">minimize</div>
<div alt="f50e" class="genericon genericon-minus" title="genericon-minus">minus</div>
<div alt="f307" class="genericon genericon-month" title="genericon-month">month</div>
<div alt="f50f" class="genericon genericon-move" title="genericon-move">move</div>
<div alt="f429" class="genericon genericon-next" title="genericon-next">next</div>
<div alt="f456" class="genericon genericon-notice" title="genericon-notice">notice</div>
<div alt="f506" class="genericon genericon-paintbrush" title="genericon-paintbrush">paintbrush</div>
<div alt="f219" class="genericon genericon-path" title="genericon-path">path</div>
<div alt="f448" class="genericon genericon-pause" title="genericon-pause">pause</div>
<div alt="f437" class="genericon genericon-phone" title="genericon-phone">phone</div>
<div alt="f473" class="genericon genericon-picture" title="genericon-picture">picture</div>
<div alt="f308" class="genericon genericon-pinned" title="genericon-pinned">pinned</div>
<div alt="f209" class="genericon genericon-pinterest" title="genericon-pinterest">pinterest</div>
<div alt="f210" class="genericon genericon-pinterest-alt" title="genericon-pinterest-alt">pinterest-alt</div>
<div alt="f452" class="genericon genericon-play" title="genericon-play">play</div>
<div alt="f439" class="genericon genericon-plugin" title="genericon-plugin">plugin</div>
<div alt="f510" class="genericon genericon-plus" title="genericon-plus">plus</div>
<div alt="f224" class="genericon genericon-pocket" title="genericon-pocket">pocket</div>
<div alt="f217" class="genericon genericon-polldaddy" title="genericon-polldaddy">polldaddy</div>
<div alt="f460" class="genericon genericon-portfolio" title="genericon-portfolio">portfolio</div>
<div alt="f430" class="genericon genericon-previous" title="genericon-previous">previous</div>
<div alt="f469" class="genericon genericon-print" title="genericon-print">print</div>
<div alt="f106" class="genericon genericon-quote" title="genericon-quote">quote</div>
<div alt="f511" class="genericon genericon-rating-empty" title="genericon-rating-empty">rating-empty</div>
<div alt="f512" class="genericon genericon-rating-full" title="genericon-rating-full">rating-full</div>
<div alt="f513" class="genericon genericon-rating-half" title="genericon-rating-half">rating-half</div>
<div alt="f222" class="genericon genericon-reddit" title="genericon-reddit">reddit</div>
<div alt="f420" class="genericon genericon-refresh" title="genericon-refresh">refresh</div>
<div alt="f412" class="genericon genericon-reply" title="genericon-reply">reply</div>
<div alt="f466" class="genericon genericon-reply-alt" title="genericon-reply-alt">reply-alt</div>
<div alt="f467" class="genericon genericon-reply-single" title="genericon-reply-single">reply-single</div>
<div alt="f459" class="genericon genericon-rewind" title="genericon-rewind">rewind</div>
<div alt="f501" class="genericon genericon-rightarrow" title="genericon-rightarrow">rightarrow</div>
<div alt="f400" class="genericon genericon-search" title="genericon-search">search</div>
<div alt="f438" class="genericon genericon-send-to-phone" title="genericon-send-to-phone">send-to-phone</div>
<div alt="f454" class="genericon genericon-send-to-tablet" title="genericon-send-to-tablet">send-to-tablet</div>
<div alt="f415" class="genericon genericon-share" title="genericon-share">share</div>
<div alt="f403" class="genericon genericon-show" title="genericon-show">show</div>
<div alt="f514" class="genericon genericon-shuffle" title="genericon-shuffle">shuffle</div>
<div alt="f507" class="genericon genericon-sitemap" title="genericon-sitemap">sitemap</div>
<div alt="f451" class="genericon genericon-skip-ahead" title="genericon-skip-ahead">skip-ahead</div>
<div alt="f450" class="genericon genericon-skip-back" title="genericon-skip-back">skip-back</div>
<div alt="f220" class="genericon genericon-skype" title="genericon-skype">skype</div>
<div alt="f424" class="genericon genericon-spam" title="genericon-spam">spam</div>
<div alt="f515" class="genericon genericon-spotify" title="genericon-spotify">spotify</div>
<div alt="f100" class="genericon genericon-standard" title="genericon-standard">standard</div>
<div alt="f408" class="genericon genericon-star" title="genericon-star">star</div>
<div alt="f105" class="genericon genericon-status" title="genericon-status">status</div>
<div alt="f449" class="genericon genericon-stop" title="genericon-stop">stop</div>
<div alt="f223" class="genericon genericon-stumbleupon" title="genericon-stumbleupon">stumbleupon</div>
<div alt="f463" class="genericon genericon-subscribe" title="genericon-subscribe">subscribe</div>
<div alt="f465" class="genericon genericon-subscribed" title="genericon-subscribed">subscribed</div>
<div alt="f425" class="genericon genericon-summary" title="genericon-summary">summary</div>
<div alt="f453" class="genericon genericon-tablet" title="genericon-tablet">tablet</div>
<div alt="f302" class="genericon genericon-tag" title="genericon-tag">tag</div>
<div alt="f303" class="genericon genericon-time" title="genericon-time">time</div>
<div alt="f435" class="genericon genericon-top" title="genericon-top">top</div>
<div alt="f407" class="genericon genericon-trash" title="genericon-trash">trash</div>
<div alt="f214" class="genericon genericon-tumblr" title="genericon-tumblr">tumblr</div>
<div alt="f516" class="genericon genericon-twitch" title="genericon-twitch">twitch</div>
<div alt="f202" class="genericon genericon-twitter" title="genericon-twitter">twitter</div>
<div alt="f446" class="genericon genericon-unapprove" title="genericon-unapprove">unapprove</div>
<div alt="f464" class="genericon genericon-unsubscribe" title="genericon-unsubscribe">unsubscribe</div>
<div alt="f401" class="genericon genericon-unzoom" title="genericon-unzoom">unzoom</div>
<div alt="f500" class="genericon genericon-uparrow" title="genericon-uparrow">uparrow</div>
<div alt="f304" class="genericon genericon-user" title="genericon-user">user</div>
<div alt="f104" class="genericon genericon-video" title="genericon-video">video</div>
<div alt="f517" class="genericon genericon-videocamera" title="genericon-videocamera">videocamera</div>
<div alt="f212" class="genericon genericon-vimeo" title="genericon-vimeo">vimeo</div>
<div alt="f414" class="genericon genericon-warning" title="genericon-warning">warning</div>
<div alt="f475" class="genericon genericon-website" title="genericon-website">website</div>
<div alt="f306" class="genericon genericon-week" title="genericon-week">week</div>
<div alt="f205" class="genericon genericon-wordpress" title="genericon-wordpress">wordpress</div>
<div alt="f504" class="genericon genericon-xpost" title="genericon-xpost">xpost</div>
<div alt="f213" class="genericon genericon-youtube" title="genericon-youtube">youtube</div>
<div alt="f402" class="genericon genericon-zoom" title="genericon-zoom">zoom</div>
</div>
<div id="temp" style="display: none;"></div>
</div>
<div id="footer">
<p>An <a href="http://automattic.com" rel="nofollow">Automattic</a> Portrayal</p>
<p>No designers were harmed in the making of this icon font.</p>
</div>
</div>
</body>
</html>

View File

@@ -1,464 +0,0 @@
<!DOCTYPE html>
<html dir="ltr" lang="en">
<head>
<title>Genericons</title>
<link rel="stylesheet" href="genericons.css">
<style type="text/css">
body {
font-family: sans-serif;
line-height: 1.5;
width: 800px;
margin: 50px auto;
color: #777;
background: white;
}
.icons {
overflow: hidden;
padding: 10px 0;
}
.icons div {
cursor: pointer;
float: left;
margin: 0 30px 30px 0;
}
.icons:hover div {
background: #f7f7f7;
}
.code {
display: block;
font: 14px/1.5 monospace;
width: 740px;
white-space: pre;
border: 1px solid #ccc;
padding: 10px;
color: #777;
overflow: auto;
}
.my-icon:before {
content: '\f408';
display: inline-block;
-webkit-font-smoothing: antialiased;
font: normal 32px/1 'Genericons';
vertical-align: middle;
}
/* For the Examples */
.my-checklist {
list-style-type: none;
text-indent: -16px;
}
.my-checklist li:before {
padding-right: 16px;
content: '\f418';
display: inline-block;
-webkit-font-smoothing: antialiased;
font: normal 16px/1 'Genericons';
vertical-align: text-top;
}
.my-blockquote {
background: #eee;
border-left: 32px solid #ddd;
padding: 10px;
}
.my-blockquote:before {
margin-left: -42px;
padding-right: 10px;
content: '\f106';
display: inline-block;
-webkit-font-smoothing: antialiased;
font: normal 32px/20px 'Genericons';
vertical-align: bottom;
}
.my-button {
font-family: Helvetica, sans-serif;
font-size: 14px;
background: #e05d22; /* Old browsers */
background: -webkit-linear-gradient(top, #e05d22 0%, #d94412 100%); /* Chrome10+,Safari5.1+ */
background: -moz-linear-gradient( top, #e05d22 0%, #d94412 100%); /* FF3.6+ */
background: -ms-linear-gradient( top, #e05d22 0%, #d94412 100%); /* IE10+ */
background: -o-linear-gradient( top, #e05d22 0%, #d94412 100%); /* Opera 11.10+ */
background: linear-gradient( to bottom, #e05d22 0%, #d94412 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e05d22', endColorstr='#d94412', GradientType=0); /* IE6-9 */
display: inline-block;
padding: 10px 16px 4px 16px;
color: #fff;
text-decoration: none;
border: none;
border-bottom: 3px solid #b93207;
border-radius: 2px;
}
.my-button:hover,
.my-button:focus {
background: #ed6a31; /* Old browsers */
background: -webkit-linear-gradient(top, #ed6a31 0%, #e55627 100%); /* Chrome10+,Safari5.1+ */
background: -moz-linear-gradient( top, #ed6a31 0%, #e55627 100%); /* FF3.6+ */
background: -ms-linear-gradient( top, #ed6a31 0%, #e55627 100%); /* IE10+ */
background: -o-linear-gradient( top, #ed6a31 0%, #e55627 100%); /* Opera 11.10+ */
background: linear-gradient( to bottom, #ed6a31 0%, #e55627 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ed6a31', endColorstr='#e55627', GradientType=0); /* IE6-9 */
outline: none;
}
.my-button:active {
background: #d94412; /* Old browsers */
background: -webkit-linear-gradient(top, #d94412 0%, #e05d22 100%); /* Chrome10+,Safari5.1+ */
background: -moz-linear-gradient( top, #d94412 0%, #e05d22 100%); /* FF3.6+ */
background: -ms-linear-gradient( top, #d94412 0%, #e05d22 100%); /* IE10+ */
background: -o-linear-gradient( top, #d94412 0%, #e05d22 100%); /* Opera 11.10+ */
background: linear-gradient( to bottom, #d94412 0%, #e05d22 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#d94412', endColorstr='#e05d22', GradientType=0); /* IE6-9 */
border: none;
border-top: 3px solid #b93207;
padding: 6px 16px 7px 16px;
}
</style>
</head>
<body>
<div class="section">
<h1>Genericons Usage</h1>
<p>Copy the <strong>font</strong> folder and the <strong>genericons.css</strong> file together into your project. Link the CSS in your HTML:</p>
<p><code>&lt;link href="path/to/genericons.css" rel="stylesheet"&gt;</code></p>
<p>Drop in the following HTML with the name of the icon you want to display:</p>
<p><code>&lt;div class="genericon genericon-standard"&gt;&lt;/div&gt;</code></p>
<div class="icons">
<!-- post formats -->
<div alt="f100" class="genericon genericon-standard"></div>
<div alt="f101" class="genericon genericon-aside"></div>
<div alt="f102" class="genericon genericon-image"></div>
<div alt="f103" class="genericon genericon-gallery"></div>
<div alt="f104" class="genericon genericon-video"></div>
<div alt="f105" class="genericon genericon-status"></div>
<div alt="f106" class="genericon genericon-quote"></div>
<div alt="f107" class="genericon genericon-link"></div>
<div alt="f108" class="genericon genericon-chat"></div>
<div alt="f109" class="genericon genericon-audio"></div>
<!-- social icons -->
<div alt="f200" class="genericon genericon-github"></div>
<div alt="f201" class="genericon genericon-dribbble"></div>
<div alt="f202" class="genericon genericon-twitter"></div>
<div alt="f203" class="genericon genericon-facebook"></div>
<div alt="f204" class="genericon genericon-facebook-alt"></div>
<div alt="f205" class="genericon genericon-wordpress"></div>
<div alt="f206" class="genericon genericon-googleplus"></div>
<div alt="f207" class="genericon genericon-linkedin"></div>
<div alt="f208" class="genericon genericon-linkedin-alt"></div>
<div alt="f209" class="genericon genericon-pinterest"></div>
<div alt="f210" class="genericon genericon-pinterest-alt"></div>
<div alt="f211" class="genericon genericon-flickr"></div>
<div alt="f212" class="genericon genericon-vimeo"></div>
<div alt="f213" class="genericon genericon-youtube"></div>
<div alt="f214" class="genericon genericon-tumblr"></div>
<div alt="f215" class="genericon genericon-instagram"></div>
<div alt="f216" class="genericon genericon-codepen"></div>
<div alt="f217" class="genericon genericon-polldaddy"></div>
<div alt="f218" class="genericon genericon-googleplus-alt"></div>
<div alt="f219" class="genericon genericon-path"></div>
<div alt="f220" class="genericon genericon-skype"></div>
<div alt="f221" class="genericon genericon-digg"></div>
<div alt="f222" class="genericon genericon-reddit"></div>
<div alt="f223" class="genericon genericon-stumbleupon"></div>
<div alt="f224" class="genericon genericon-pocket"></div>
<div alt="f225" class="genericon genericon-dropbox"></div>
<!-- meta icons -->
<div alt="f300" class="genericon genericon-comment"></div>
<div alt="f301" class="genericon genericon-category"></div>
<div alt="f302" class="genericon genericon-tag"></div>
<div alt="f303" class="genericon genericon-time"></div>
<div alt="f304" class="genericon genericon-user"></div>
<div alt="f305" class="genericon genericon-day"></div>
<div alt="f306" class="genericon genericon-week"></div>
<div alt="f307" class="genericon genericon-month"></div>
<div alt="f308" class="genericon genericon-pinned"></div>
<!-- other icons -->
<div alt="f400" class="genericon genericon-search"></div>
<div alt="f401" class="genericon genericon-unzoom"></div>
<div alt="f402" class="genericon genericon-zoom"></div>
<div alt="f403" class="genericon genericon-show"></div>
<div alt="f404" class="genericon genericon-hide"></div>
<div alt="f405" class="genericon genericon-close"></div>
<div alt="f406" class="genericon genericon-close-alt"></div>
<div alt="f407" class="genericon genericon-trash"></div>
<div alt="f408" class="genericon genericon-star"></div>
<div alt="f409" class="genericon genericon-home"></div>
<div alt="f410" class="genericon genericon-mail"></div>
<div alt="f411" class="genericon genericon-edit"></div>
<div alt="f412" class="genericon genericon-reply"></div>
<div alt="f413" class="genericon genericon-feed"></div>
<div alt="f414" class="genericon genericon-warning"></div>
<div alt="f415" class="genericon genericon-share"></div>
<div alt="f416" class="genericon genericon-attachment"></div>
<div alt="f417" class="genericon genericon-location"></div>
<div alt="f418" class="genericon genericon-checkmark"></div>
<div alt="f419" class="genericon genericon-menu"></div>
<div alt="f420" class="genericon genericon-refresh"></div>
<div alt="f421" class="genericon genericon-minimize"></div>
<div alt="f422" class="genericon genericon-maximize"></div>
<div alt="f423" class="genericon genericon-404"></div>
<div alt="f424" class="genericon genericon-spam"></div>
<div alt="f425" class="genericon genericon-summary"></div>
<div alt="f426" class="genericon genericon-cloud"></div>
<div alt="f427" class="genericon genericon-key"></div>
<div alt="f428" class="genericon genericon-dot"></div>
<div alt="f429" class="genericon genericon-next"></div>
<div alt="f430" class="genericon genericon-previous"></div>
<div alt="f431" class="genericon genericon-expand"></div>
<div alt="f432" class="genericon genericon-collapse"></div>
<div alt="f433" class="genericon genericon-dropdown"></div>
<div alt="f434" class="genericon genericon-dropdown-left"></div>
<div alt="f435" class="genericon genericon-top"></div>
<div alt="f436" class="genericon genericon-draggable"></div>
<div alt="f437" class="genericon genericon-phone"></div>
<div alt="f438" class="genericon genericon-send-to-phone"></div>
<div alt="f439" class="genericon genericon-plugin"></div>
<div alt="f440" class="genericon genericon-cloud-download"></div>
<div alt="f441" class="genericon genericon-cloud-upload"></div>
<div alt="f442" class="genericon genericon-external"></div>
<div alt="f443" class="genericon genericon-document"></div>
<div alt="f444" class="genericon genericon-book"></div>
<div alt="f445" class="genericon genericon-cog"></div>
<div alt="f446" class="genericon genericon-unapprove"></div>
<div alt="f447" class="genericon genericon-cart"></div>
<div alt="f448" class="genericon genericon-pause"></div>
<div alt="f449" class="genericon genericon-stop"></div>
<div alt="f450" class="genericon genericon-skip-back"></div>
<div alt="f451" class="genericon genericon-skip-ahead"></div>
<div alt="f452" class="genericon genericon-play"></div>
<div alt="f453" class="genericon genericon-tablet"></div>
<div alt="f454" class="genericon genericon-send-to-tablet"></div>
<div alt="f455" class="genericon genericon-info"></div>
<div alt="f456" class="genericon genericon-notice"></div>
<div alt="f457" class="genericon genericon-help"></div>
<div alt="f458" class="genericon genericon-fastforward"></div>
<div alt="f459" class="genericon genericon-rewind"></div>
<div alt="f460" class="genericon genericon-portfolio"></div>
<div alt="f461" class="genericon genericon-heart"></div>
<div alt="f462" class="genericon genericon-code"></div>
<div alt="f463" class="genericon genericon-subscribe"></div>
<div alt="f464" class="genericon genericon-unsubscribe"></div>
<div alt="f465" class="genericon genericon-subscribed"></div>
<div alt="f466" class="genericon genericon-reply-alt"></div>
<div alt="f467" class="genericon genericon-reply-single"></div>
<div alt="f468" class="genericon genericon-flag"></div>
<div alt="f469" class="genericon genericon-print"></div>
<div alt="f470" class="genericon genericon-lock"></div>
<div alt="f471" class="genericon genericon-bold"></div>
<div alt="f472" class="genericon genericon-italic"></div>
<div alt="f473" class="genericon genericon-picture"></div>
<div alt="f474" class="genericon genericon-fullscreen"></div>
<!-- generic shapes -->
<div alt="f500" class="genericon genericon-uparrow"></div>
<div alt="f501" class="genericon genericon-rightarrow"></div>
<div alt="f502" class="genericon genericon-downarrow"></div>
<div alt="f503" class="genericon genericon-leftarrow"></div>
</div>
<p>If you want to insert an icon manually using the <code>:before</code> selector, you can setup CSS rules like the following example. <strong>Make sure to set the size to a multiple of 16px</strong> or the icons could end up looking fuzzy:</p>
<p><textarea class="code" style="min-height: 150px;" onclick="select();">.my-icon:before {
content: '\f408';
display: inline-block;
-webkit-font-smoothing: antialiased;
font: normal 32px/1 'Genericons';
vertical-align: middle;
}</textarea></p>
<p>Add a matching class to your HTML:</p>
<p><code>&lt;div class="my-icon"&gt;You're a Star!&lt;/div&gt;</code></p>
<p>Here's the result: <span class="my-icon">You're a Star!</span></p>
<h2>Examples</h2>
<p>Turn every icon a <span style="color: #fa8072;">Salmon</span> color:</p>
<p><textarea class="code" style="min-height: 70px" onclick="select();">
.genericon {
color: #fa8072;
}</textarea></p>
<p>Or turn the stars <span style="color: #ffd700;">Gold</span>:</p>
<p><textarea class="code" style="min-height: 70px" onclick="select();">
.genericon-star {
color: #fa8072;
}</textarea></p>
<p>Use icons for bulleted lists:</p>
<ul class="my-checklist">
<li>One</li>
<li>Two</li>
<li>Three</li>
<li>Four</li>
</ul>
<p><textarea class="code" style="min-height: 130px" onclick="select();">
<ul class="my-checklist">
<li>One</li>
<li>Two</li>
<li>Three</li>
<li>Four</li>
</ul></textarea></p>
<p><textarea class="code" style="min-height: 260px;" onclick="select();">
.my-checklist {
list-style-type: none;
text-indent: -16px;
}
.my-checklist li:before {
padding-right: 16px;
content: '\f418';
display: inline-block;
-webkit-font-smoothing: antialiased;
font: normal 16px/1 'Genericons';
vertical-align: text-top;
}</textarea></p>
<p>Use icons to style blockquotes:</p>
<blockquote class="my-blockquote">Sometimes I've believed as many as six impossible things before breakfast. &mdash;<em>Lewis Carroll</em></blockquote>
<blockquote class="my-blockquote">`Twas brillig, and the slithy toves Did gyre and gimble in the wabe: All mimsy were the borogoves, And the mome raths outgrabe. "Beware the Jabberwock, my son! The jaws that bite, the claws that catch! Beware the Jubjub bird, and shun The frumious Bandersnatch!"</blockquote>
<p><textarea class="code" style="min-height: 40px;" onclick="select();"><blockquote class="my-blockquote">Sometimes I've believed as many as six impossible things before breakfast. &mdash;<em>Lewis Carroll</em></blockquote></textarea></p>
<p><textarea class="code" style="min-height: 300px;" onclick="select();">
.my-blockquote {
background: #eee;
border-left: 32px solid #ddd;
padding: 10px;
}
.my-blockquote:before {
margin-left: -42px;
padding-right: 10px;
content: '\f106';
display: inline-block;
-webkit-font-smoothing: antialiased;
font: normal 32px/20px 'Genericons';
vertical-align: bottom;
} </textarea></p>
<p>Use icons to style buttons:</p>
<a class="my-button" href="javascript:void()"><i class="genericon genericon-show"></i> View</a>
<a class="my-button" href="javascript:void()"><i class="genericon genericon-audio"></i> Listen</a>
<p><textarea class="code" style="min-height: 40px;" onclick="select();"><a class="my-button" href="#"><i class="genericon genericon-show"></i> View</a>
<a class="my-button" href="#"><i class="genericon genericon-audio"></i> Listen</a></textarea></p>
<p><textarea class="code" style="min-height: 300px;" onclick="select();">
.my-button {
font-family: Helvetica, sans-serif;
background: #e05d22; /* Old browsers */
background: -webkit-linear-gradient(top, #e05d22 0%, #d94412 100%); /* Chrome10+,Safari5.1+ */
background: -moz-linear-gradient( top, #e05d22 0%, #d94412 100%); /* FF3.6+ */
background: -ms-linear-gradient( top, #e05d22 0%, #d94412 100%); /* IE10+ */
background: -o-linear-gradient( top, #e05d22 0%, #d94412 100%); /* Opera 11.10+ */
background: linear-gradient( to bottom, #e05d22 0%, #d94412 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e05d22', endColorstr='#d94412', GradientType=0); /* IE6-9 */
display: inline-block;
padding: 10px 16px 6px 16px;
color: #fff;
text-decoration: none;
border: none;
border-bottom: 3px solid #b93207;
border-radius: 2px;
}
.my-button:hover,
.my-button:focus {
background: #ed6a31; /* Old browsers */
background: -webkit-linear-gradient(top, #ed6a31 0%, #e55627 100%); /* Chrome10+,Safari5.1+ */
background: -moz-linear-gradient( top, #ed6a31 0%, #e55627 100%); /* FF3.6+ */
background: -ms-linear-gradient( top, #ed6a31 0%, #e55627 100%); /* IE10+ */
background: -o-linear-gradient( top, #ed6a31 0%, #e55627 100%); /* Opera 11.10+ */
background: linear-gradient( to bottom, #ed6a31 0%, #e55627 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ed6a31', endColorstr='#e55627', GradientType=0); /* IE6-9 */
outline: none;
}
.my-button:active {
background: #d94412; /* Old browsers */
background: -webkit-linear-gradient(top, #d94412 0%, #e05d22 100%); /* Chrome10+,Safari5.1+ */
background: -moz-linear-gradient( top, #d94412 0%, #e05d22 100%); /* FF3.6+ */
background: -ms-linear-gradient( top, #d94412 0%, #e05d22 100%); /* IE10+ */
background: -o-linear-gradient( top, #d94412 0%, #e05d22 100%); /* Opera 11.10+ */
background: linear-gradient( to bottom, #d94412 0%, #e05d22 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#d94412', endColorstr='#e05d22', GradientType=0); /* IE6-9 */
border: none;
border-top: 3px solid #b93207;
padding: 6px 16px 10px 16px;
}</textarea>/</p>
<h2>CSS Preprocessors</h2>
<p>Preprocessing extensions such as Sass (SCSS Syntax) or LESS</a> can make it easier to manage CSS for a lot of things at once using things like variables and mixins.</p>
<p>This example will seup the basic genericon rules and sets a color you can use for all icons using Sass:</p>
<p><textarea class="code" style="min-height: 360px;" onclick="select();">$icon-color: "#fa8072";
.genericon {
color: $icon-color;
}
@mixin genericon-rules {
display: inline-block;
-webkit-font-smoothing: antialiased;
font: normal 16px/1 'Genericons';
vertical-align: middle;
}
.my-icon:before {
content: '\f408';
@include genericon-rules;
}</textarea></p>
<p>Here is a similar example for LESS:</p>
<p><textarea class="code" style="min-height: 360px;" onclick="select();">@icon-color: "#fa8072";
.genericon {
color: @icon-color;
}
.genericon-rules {
display: inline-block;
-webkit-font-smoothing: antialiased;
font: normal 16px/1 'Genericons';
vertical-align: middle;
}
.my-icon:before {
content: '\f408';
.genericon-rules;
}</textarea></p>
<h2>Fallback images for IE7 and below</h2>
<p>Genericons <strong>does not come with fallback icons by default</strong> -- therefore you have to create them yourself. If you are using HTML similar to this example:
<p><code>&lt;span class="genericon genericon-warning"&gt;&lt;/span&gt;</code></p>
<p>You can use the asterisk hack to serve a different icon to IE7 once you have saved the fallback icons to your project:</p>
<textarea class="code" style="min-height: 85px;" onclick="select();">.genericon-warning {
*background: url(fallback-icon.png) no-repeat center center;
*text-indent: 100%;
}</textarea>
</div>
</body>
</html>

View File

@@ -1,464 +0,0 @@
<!DOCTYPE html>
<html dir="ltr" lang="en">
<head>
<title>Genericons</title>
<link rel="stylesheet" href="genericons.css">
<style type="text/css">
body {
font-family: sans-serif;
line-height: 1.5;
width: 800px;
margin: 50px auto;
color: #777;
background: white;
}
.icons {
overflow: hidden;
padding: 10px 0;
}
.icons div {
cursor: pointer;
float: left;
margin: 0 30px 30px 0;
}
.icons:hover div {
background: #f7f7f7;
}
.code {
display: block;
font: 14px/1.5 monospace;
width: 740px;
white-space: pre;
border: 1px solid #ccc;
padding: 10px;
color: #777;
overflow: auto;
}
.my-icon:before {
content: '\f408';
display: inline-block;
-webkit-font-smoothing: antialiased;
font: normal 32px/1 'Genericons';
vertical-align: middle;
}
/* For the Examples */
.my-checklist {
list-style-type: none;
text-indent: -16px;
}
.my-checklist li:before {
padding-right: 16px;
content: '\f418';
display: inline-block;
-webkit-font-smoothing: antialiased;
font: normal 16px/1 'Genericons';
vertical-align: text-top;
}
.my-blockquote {
background: #eee;
border-left: 32px solid #ddd;
padding: 10px;
}
.my-blockquote:before {
margin-left: -42px;
padding-right: 10px;
content: '\f106';
display: inline-block;
-webkit-font-smoothing: antialiased;
font: normal 32px/20px 'Genericons';
vertical-align: bottom;
}
.my-button {
font-family: Helvetica, sans-serif;
font-size: 14px;
background: #e05d22; /* Old browsers */
background: -webkit-linear-gradient(top, #e05d22 0%, #d94412 100%); /* Chrome10+,Safari5.1+ */
background: -moz-linear-gradient( top, #e05d22 0%, #d94412 100%); /* FF3.6+ */
background: -ms-linear-gradient( top, #e05d22 0%, #d94412 100%); /* IE10+ */
background: -o-linear-gradient( top, #e05d22 0%, #d94412 100%); /* Opera 11.10+ */
background: linear-gradient( to bottom, #e05d22 0%, #d94412 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e05d22', endColorstr='#d94412', GradientType=0); /* IE6-9 */
display: inline-block;
padding: 10px 16px 4px 16px;
color: #fff;
text-decoration: none;
border: none;
border-bottom: 3px solid #b93207;
border-radius: 2px;
}
.my-button:hover,
.my-button:focus {
background: #ed6a31; /* Old browsers */
background: -webkit-linear-gradient(top, #ed6a31 0%, #e55627 100%); /* Chrome10+,Safari5.1+ */
background: -moz-linear-gradient( top, #ed6a31 0%, #e55627 100%); /* FF3.6+ */
background: -ms-linear-gradient( top, #ed6a31 0%, #e55627 100%); /* IE10+ */
background: -o-linear-gradient( top, #ed6a31 0%, #e55627 100%); /* Opera 11.10+ */
background: linear-gradient( to bottom, #ed6a31 0%, #e55627 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ed6a31', endColorstr='#e55627', GradientType=0); /* IE6-9 */
outline: none;
}
.my-button:active {
background: #d94412; /* Old browsers */
background: -webkit-linear-gradient(top, #d94412 0%, #e05d22 100%); /* Chrome10+,Safari5.1+ */
background: -moz-linear-gradient( top, #d94412 0%, #e05d22 100%); /* FF3.6+ */
background: -ms-linear-gradient( top, #d94412 0%, #e05d22 100%); /* IE10+ */
background: -o-linear-gradient( top, #d94412 0%, #e05d22 100%); /* Opera 11.10+ */
background: linear-gradient( to bottom, #d94412 0%, #e05d22 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#d94412', endColorstr='#e05d22', GradientType=0); /* IE6-9 */
border: none;
border-top: 3px solid #b93207;
padding: 6px 16px 7px 16px;
}
</style>
</head>
<body>
<div class="section">
<h1>Genericons Usage</h1>
<p>Copy the <strong>font</strong> folder and the <strong>genericons.css</strong> file together into your project. Link the CSS in your HTML:</p>
<p><code>&lt;link href="path/to/genericons.css" rel="stylesheet"&gt;</code></p>
<p>Drop in the following HTML with the name of the icon you want to display:</p>
<p><code>&lt;div class="genericon genericon-standard"&gt;&lt;/div&gt;</code></p>
<div class="icons">
<!-- post formats -->
<div alt="f100" class="genericon genericon-standard"></div>
<div alt="f101" class="genericon genericon-aside"></div>
<div alt="f102" class="genericon genericon-image"></div>
<div alt="f103" class="genericon genericon-gallery"></div>
<div alt="f104" class="genericon genericon-video"></div>
<div alt="f105" class="genericon genericon-status"></div>
<div alt="f106" class="genericon genericon-quote"></div>
<div alt="f107" class="genericon genericon-link"></div>
<div alt="f108" class="genericon genericon-chat"></div>
<div alt="f109" class="genericon genericon-audio"></div>
<!-- social icons -->
<div alt="f200" class="genericon genericon-github"></div>
<div alt="f201" class="genericon genericon-dribbble"></div>
<div alt="f202" class="genericon genericon-twitter"></div>
<div alt="f203" class="genericon genericon-facebook"></div>
<div alt="f204" class="genericon genericon-facebook-alt"></div>
<div alt="f205" class="genericon genericon-wordpress"></div>
<div alt="f206" class="genericon genericon-googleplus"></div>
<div alt="f207" class="genericon genericon-linkedin"></div>
<div alt="f208" class="genericon genericon-linkedin-alt"></div>
<div alt="f209" class="genericon genericon-pinterest"></div>
<div alt="f210" class="genericon genericon-pinterest-alt"></div>
<div alt="f211" class="genericon genericon-flickr"></div>
<div alt="f212" class="genericon genericon-vimeo"></div>
<div alt="f213" class="genericon genericon-youtube"></div>
<div alt="f214" class="genericon genericon-tumblr"></div>
<div alt="f215" class="genericon genericon-instagram"></div>
<div alt="f216" class="genericon genericon-codepen"></div>
<div alt="f217" class="genericon genericon-polldaddy"></div>
<div alt="f218" class="genericon genericon-googleplus-alt"></div>
<div alt="f219" class="genericon genericon-path"></div>
<div alt="f220" class="genericon genericon-skype"></div>
<div alt="f221" class="genericon genericon-digg"></div>
<div alt="f222" class="genericon genericon-reddit"></div>
<div alt="f223" class="genericon genericon-stumbleupon"></div>
<div alt="f224" class="genericon genericon-pocket"></div>
<div alt="f225" class="genericon genericon-dropbox"></div>
<!-- meta icons -->
<div alt="f300" class="genericon genericon-comment"></div>
<div alt="f301" class="genericon genericon-category"></div>
<div alt="f302" class="genericon genericon-tag"></div>
<div alt="f303" class="genericon genericon-time"></div>
<div alt="f304" class="genericon genericon-user"></div>
<div alt="f305" class="genericon genericon-day"></div>
<div alt="f306" class="genericon genericon-week"></div>
<div alt="f307" class="genericon genericon-month"></div>
<div alt="f308" class="genericon genericon-pinned"></div>
<!-- other icons -->
<div alt="f400" class="genericon genericon-search"></div>
<div alt="f401" class="genericon genericon-unzoom"></div>
<div alt="f402" class="genericon genericon-zoom"></div>
<div alt="f403" class="genericon genericon-show"></div>
<div alt="f404" class="genericon genericon-hide"></div>
<div alt="f405" class="genericon genericon-close"></div>
<div alt="f406" class="genericon genericon-close-alt"></div>
<div alt="f407" class="genericon genericon-trash"></div>
<div alt="f408" class="genericon genericon-star"></div>
<div alt="f409" class="genericon genericon-home"></div>
<div alt="f410" class="genericon genericon-mail"></div>
<div alt="f411" class="genericon genericon-edit"></div>
<div alt="f412" class="genericon genericon-reply"></div>
<div alt="f413" class="genericon genericon-feed"></div>
<div alt="f414" class="genericon genericon-warning"></div>
<div alt="f415" class="genericon genericon-share"></div>
<div alt="f416" class="genericon genericon-attachment"></div>
<div alt="f417" class="genericon genericon-location"></div>
<div alt="f418" class="genericon genericon-checkmark"></div>
<div alt="f419" class="genericon genericon-menu"></div>
<div alt="f420" class="genericon genericon-refresh"></div>
<div alt="f421" class="genericon genericon-minimize"></div>
<div alt="f422" class="genericon genericon-maximize"></div>
<div alt="f423" class="genericon genericon-404"></div>
<div alt="f424" class="genericon genericon-spam"></div>
<div alt="f425" class="genericon genericon-summary"></div>
<div alt="f426" class="genericon genericon-cloud"></div>
<div alt="f427" class="genericon genericon-key"></div>
<div alt="f428" class="genericon genericon-dot"></div>
<div alt="f429" class="genericon genericon-next"></div>
<div alt="f430" class="genericon genericon-previous"></div>
<div alt="f431" class="genericon genericon-expand"></div>
<div alt="f432" class="genericon genericon-collapse"></div>
<div alt="f433" class="genericon genericon-dropdown"></div>
<div alt="f434" class="genericon genericon-dropdown-left"></div>
<div alt="f435" class="genericon genericon-top"></div>
<div alt="f436" class="genericon genericon-draggable"></div>
<div alt="f437" class="genericon genericon-phone"></div>
<div alt="f438" class="genericon genericon-send-to-phone"></div>
<div alt="f439" class="genericon genericon-plugin"></div>
<div alt="f440" class="genericon genericon-cloud-download"></div>
<div alt="f441" class="genericon genericon-cloud-upload"></div>
<div alt="f442" class="genericon genericon-external"></div>
<div alt="f443" class="genericon genericon-document"></div>
<div alt="f444" class="genericon genericon-book"></div>
<div alt="f445" class="genericon genericon-cog"></div>
<div alt="f446" class="genericon genericon-unapprove"></div>
<div alt="f447" class="genericon genericon-cart"></div>
<div alt="f448" class="genericon genericon-pause"></div>
<div alt="f449" class="genericon genericon-stop"></div>
<div alt="f450" class="genericon genericon-skip-back"></div>
<div alt="f451" class="genericon genericon-skip-ahead"></div>
<div alt="f452" class="genericon genericon-play"></div>
<div alt="f453" class="genericon genericon-tablet"></div>
<div alt="f454" class="genericon genericon-send-to-tablet"></div>
<div alt="f455" class="genericon genericon-info"></div>
<div alt="f456" class="genericon genericon-notice"></div>
<div alt="f457" class="genericon genericon-help"></div>
<div alt="f458" class="genericon genericon-fastforward"></div>
<div alt="f459" class="genericon genericon-rewind"></div>
<div alt="f460" class="genericon genericon-portfolio"></div>
<div alt="f461" class="genericon genericon-heart"></div>
<div alt="f462" class="genericon genericon-code"></div>
<div alt="f463" class="genericon genericon-subscribe"></div>
<div alt="f464" class="genericon genericon-unsubscribe"></div>
<div alt="f465" class="genericon genericon-subscribed"></div>
<div alt="f466" class="genericon genericon-reply-alt"></div>
<div alt="f467" class="genericon genericon-reply-single"></div>
<div alt="f468" class="genericon genericon-flag"></div>
<div alt="f469" class="genericon genericon-print"></div>
<div alt="f470" class="genericon genericon-lock"></div>
<div alt="f471" class="genericon genericon-bold"></div>
<div alt="f472" class="genericon genericon-italic"></div>
<div alt="f473" class="genericon genericon-picture"></div>
<div alt="f474" class="genericon genericon-fullscreen"></div>
<!-- generic shapes -->
<div alt="f500" class="genericon genericon-uparrow"></div>
<div alt="f501" class="genericon genericon-rightarrow"></div>
<div alt="f502" class="genericon genericon-downarrow"></div>
<div alt="f503" class="genericon genericon-leftarrow"></div>
</div>
<p>If you want to insert an icon manually using the <code>:before</code> selector, you can setup CSS rules like the following example. <strong>Make sure to set the size to a multiple of 16px</strong> or the icons could end up looking fuzzy:</p>
<p><textarea class="code" style="min-height: 150px;" onclick="select();">.my-icon:before {
content: '\f408';
display: inline-block;
-webkit-font-smoothing: antialiased;
font: normal 32px/1 'Genericons';
vertical-align: middle;
}</textarea></p>
<p>Add a matching class to your HTML:</p>
<p><code>&lt;div class="my-icon"&gt;You're a Star!&lt;/div&gt;</code></p>
<p>Here's the result: <span class="my-icon">You're a Star!</span></p>
<h2>Examples</h2>
<p>Turn every icon a <span style="color: #fa8072;">Salmon</span> color:</p>
<p><textarea class="code" style="min-height: 70px" onclick="select();">
.genericon {
color: #fa8072;
}</textarea></p>
<p>Or turn the stars <span style="color: #ffd700;">Gold</span>:</p>
<p><textarea class="code" style="min-height: 70px" onclick="select();">
.genericon-star {
color: #fa8072;
}</textarea></p>
<p>Use icons for bulleted lists:</p>
<ul class="my-checklist">
<li>One</li>
<li>Two</li>
<li>Three</li>
<li>Four</li>
</ul>
<p><textarea class="code" style="min-height: 130px" onclick="select();">
<ul class="my-checklist">
<li>One</li>
<li>Two</li>
<li>Three</li>
<li>Four</li>
</ul></textarea></p>
<p><textarea class="code" style="min-height: 260px;" onclick="select();">
.my-checklist {
list-style-type: none;
text-indent: -16px;
}
.my-checklist li:before {
padding-right: 16px;
content: '\f418';
display: inline-block;
-webkit-font-smoothing: antialiased;
font: normal 16px/1 'Genericons';
vertical-align: text-top;
}</textarea></p>
<p>Use icons to style blockquotes:</p>
<blockquote class="my-blockquote">Sometimes I've believed as many as six impossible things before breakfast. &mdash;<em>Lewis Carroll</em></blockquote>
<blockquote class="my-blockquote">`Twas brillig, and the slithy toves Did gyre and gimble in the wabe: All mimsy were the borogoves, And the mome raths outgrabe. "Beware the Jabberwock, my son! The jaws that bite, the claws that catch! Beware the Jubjub bird, and shun The frumious Bandersnatch!"</blockquote>
<p><textarea class="code" style="min-height: 40px;" onclick="select();"><blockquote class="my-blockquote">Sometimes I've believed as many as six impossible things before breakfast. &mdash;<em>Lewis Carroll</em></blockquote></textarea></p>
<p><textarea class="code" style="min-height: 300px;" onclick="select();">
.my-blockquote {
background: #eee;
border-left: 32px solid #ddd;
padding: 10px;
}
.my-blockquote:before {
margin-left: -42px;
padding-right: 10px;
content: '\f106';
display: inline-block;
-webkit-font-smoothing: antialiased;
font: normal 32px/20px 'Genericons';
vertical-align: bottom;
} </textarea></p>
<p>Use icons to style buttons:</p>
<a class="my-button" href="javascript:void()"><i class="genericon genericon-show"></i> View</a>
<a class="my-button" href="javascript:void()"><i class="genericon genericon-audio"></i> Listen</a>
<p><textarea class="code" style="min-height: 40px;" onclick="select();"><a class="my-button" href="#"><i class="genericon genericon-show"></i> View</a>
<a class="my-button" href="#"><i class="genericon genericon-audio"></i> Listen</a></textarea></p>
<p><textarea class="code" style="min-height: 300px;" onclick="select();">
.my-button {
font-family: Helvetica, sans-serif;
background: #e05d22; /* Old browsers */
background: -webkit-linear-gradient(top, #e05d22 0%, #d94412 100%); /* Chrome10+,Safari5.1+ */
background: -moz-linear-gradient( top, #e05d22 0%, #d94412 100%); /* FF3.6+ */
background: -ms-linear-gradient( top, #e05d22 0%, #d94412 100%); /* IE10+ */
background: -o-linear-gradient( top, #e05d22 0%, #d94412 100%); /* Opera 11.10+ */
background: linear-gradient( to bottom, #e05d22 0%, #d94412 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e05d22', endColorstr='#d94412', GradientType=0); /* IE6-9 */
display: inline-block;
padding: 10px 16px 6px 16px;
color: #fff;
text-decoration: none;
border: none;
border-bottom: 3px solid #b93207;
border-radius: 2px;
}
.my-button:hover,
.my-button:focus {
background: #ed6a31; /* Old browsers */
background: -webkit-linear-gradient(top, #ed6a31 0%, #e55627 100%); /* Chrome10+,Safari5.1+ */
background: -moz-linear-gradient( top, #ed6a31 0%, #e55627 100%); /* FF3.6+ */
background: -ms-linear-gradient( top, #ed6a31 0%, #e55627 100%); /* IE10+ */
background: -o-linear-gradient( top, #ed6a31 0%, #e55627 100%); /* Opera 11.10+ */
background: linear-gradient( to bottom, #ed6a31 0%, #e55627 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ed6a31', endColorstr='#e55627', GradientType=0); /* IE6-9 */
outline: none;
}
.my-button:active {
background: #d94412; /* Old browsers */
background: -webkit-linear-gradient(top, #d94412 0%, #e05d22 100%); /* Chrome10+,Safari5.1+ */
background: -moz-linear-gradient( top, #d94412 0%, #e05d22 100%); /* FF3.6+ */
background: -ms-linear-gradient( top, #d94412 0%, #e05d22 100%); /* IE10+ */
background: -o-linear-gradient( top, #d94412 0%, #e05d22 100%); /* Opera 11.10+ */
background: linear-gradient( to bottom, #d94412 0%, #e05d22 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#d94412', endColorstr='#e05d22', GradientType=0); /* IE6-9 */
border: none;
border-top: 3px solid #b93207;
padding: 6px 16px 10px 16px;
}</textarea>/</p>
<h2>CSS Preprocessors</h2>
<p>Preprocessing extensions such as Sass (SCSS Syntax) or LESS</a> can make it easier to manage CSS for a lot of things at once using things like variables and mixins.</p>
<p>This example will seup the basic genericon rules and sets a color you can use for all icons using Sass:</p>
<p><textarea class="code" style="min-height: 360px;" onclick="select();">$icon-color: "#fa8072";
.genericon {
color: $icon-color;
}
@mixin genericon-rules {
display: inline-block;
-webkit-font-smoothing: antialiased;
font: normal 16px/1 'Genericons';
vertical-align: middle;
}
.my-icon:before {
content: '\f408';
@include genericon-rules;
}</textarea></p>
<p>Here is a similar example for LESS:</p>
<p><textarea class="code" style="min-height: 360px;" onclick="select();">@icon-color: "#fa8072";
.genericon {
color: @icon-color;
}
.genericon-rules {
display: inline-block;
-webkit-font-smoothing: antialiased;
font: normal 16px/1 'Genericons';
vertical-align: middle;
}
.my-icon:before {
content: '\f408';
.genericon-rules;
}</textarea></p>
<h2>Fallback images for IE7 and below</h2>
<p>Genericons <strong>does not come with fallback icons by default</strong> -- therefore you have to create them yourself. If you are using HTML similar to this example:
<p><code>&lt;span class="genericon genericon-warning"&gt;&lt;/span&gt;</code></p>
<p>You can use the asterisk hack to serve a different icon to IE7 once you have saved the fallback icons to your project:</p>
<textarea class="code" style="min-height: 85px;" onclick="select();">.genericon-warning {
*background: url(fallback-icon.png) no-repeat center center;
*text-indent: 100%;
}</textarea>
</div>
</body>
</html>

View File

@@ -1117,8 +1117,10 @@ function map_meta_cap( $cap, $user_id ) {
case 'edit_post':
case 'edit_page':
$post = get_post( $args[0] );
if ( empty( $post ) )
if ( empty( $post ) ) {
$caps[] = 'do_not_allow';
break;
}
if ( 'revision' == $post->post_type ) {
$post = get_post( $post->post_parent );
@@ -1232,7 +1234,16 @@ function map_meta_cap( $cap, $user_id ) {
if ( empty( $comment ) )
break;
$post = get_post( $comment->comment_post_ID );
$caps = map_meta_cap( 'edit_post', $user_id, $post->ID );
/*
* If the post doesn't exist, we have an orphaned comment.
* Fall back to the edit_posts capability, instead.
*/
if ( $post ) {
$caps = map_meta_cap( 'edit_post', $user_id, $post->ID );
} else {
$caps = map_meta_cap( 'edit_posts', $user_id );
}
break;
case 'unfiltered_upload':
if ( defined('ALLOW_UNFILTERED_UPLOADS') && ALLOW_UNFILTERED_UPLOADS && ( !is_multisite() || is_super_admin( $user_id ) ) )
@@ -1374,21 +1385,25 @@ function current_user_can( $capability ) {
* @return bool
*/
function current_user_can_for_blog( $blog_id, $capability ) {
if ( is_multisite() )
switch_to_blog( $blog_id );
$switched = is_multisite() ? switch_to_blog( $blog_id ) : false;
$current_user = wp_get_current_user();
if ( empty( $current_user ) )
if ( empty( $current_user ) ) {
if ( $switched ) {
restore_current_blog();
}
return false;
}
$args = array_slice( func_get_args(), 2 );
$args = array_merge( array( $capability ), $args );
$can = call_user_func_array( array( $current_user, 'has_cap' ), $args );
if ( is_multisite() )
if ( $switched ) {
restore_current_blog();
}
return $can;
}

View File

@@ -999,20 +999,23 @@ class Snoopy
if(!empty($this->user) || !empty($this->pass))
$headers[] = "Authorization: BASIC ".base64_encode($this->user.":".$this->pass);
for($curr_header = 0; $curr_header < count($headers); $curr_header++) {
$safer_header = strtr( $headers[$curr_header], "\"", " " );
$cmdline_params .= " -H \"".$safer_header."\"";
$headerfile = tempnam( $this->temp_dir, "sno" );
$cmdline_params = '-k -D ' . escapeshellarg( $headerfile );
foreach ( $headers as $header ) {
$cmdline_params .= ' -H ' . escapeshellarg( $header );
}
if(!empty($body))
$cmdline_params .= " -d \"$body\"";
if ( ! empty( $body ) ) {
$cmdline_params .= ' -d ' . escapeshellarg( $body );
}
if($this->read_timeout > 0)
$cmdline_params .= " -m ".$this->read_timeout;
if ( $this->read_timeout > 0 ) {
$cmdline_params .= ' -m ' . escapeshellarg( $this->read_timeout );
}
$headerfile = tempnam($this->temp_dir, "sno");
exec($this->curl_path." -k -D \"$headerfile\"".$cmdline_params." \"".escapeshellcmd($URI)."\"",$results,$return);
exec( $this->curl_path . ' ' . $cmdline_params . ' ' . escapeshellarg( $URI ), $results, $return );
if($return)
{

View File

@@ -1199,7 +1199,7 @@ final class WP_Customize_Widgets {
return null;
}
if ( $this->get_instance_hash_key( $decoded ) !== $value['instance_hash_key'] ) {
if ( ! hash_equals( $this->get_instance_hash_key( $decoded ), $value['instance_hash_key'] ) ) {
return null;
}

View File

@@ -117,12 +117,6 @@ final class _WP_Editors {
// A cookie (set when a user resizes the editor) overrides the height.
$cookie = (int) get_user_setting( 'ed_size' );
// Upgrade an old TinyMCE cookie if it is still around, and the new one isn't.
if ( ! $cookie && isset( $_COOKIE['TinyMCE_content_size'] ) ) {
parse_str( $_COOKIE['TinyMCE_content_size'], $cookie );
$cookie = $cookie['ch'];
}
if ( $cookie )
$set['editor_height'] = $cookie;
}

View File

@@ -57,7 +57,7 @@ class WP_Embed {
add_shortcode( 'embed', array( $this, 'shortcode' ) );
// Do the shortcode (only the [embed] one is registered)
$content = do_shortcode( $content );
$content = do_shortcode( $content, true );
// Put the original shortcodes back
$shortcode_tags = $orig_shortcode_tags;
@@ -312,7 +312,14 @@ class WP_Embed {
* @return string Potentially modified $content.
*/
public function autoembed( $content ) {
return preg_replace_callback( '|^\s*(https?://[^\s"]+)\s*$|im', array( $this, 'autoembed_callback' ), $content );
// Replace line breaks from all HTML elements with placeholders.
$content = wp_replace_in_html_tags( $content, array( "\n" => '<!-- wp-line-break -->' ) );
// Find URLs that are on their own line.
$content = preg_replace_callback( '|^\s*(https?://[^\s"]+)\s*$|im', array( $this, 'autoembed_callback' ), $content );
// Put the line breaks back.
return str_replace( '<!-- wp-line-break -->', "\n", $content );
}
/**

View File

@@ -217,7 +217,7 @@ final class WP_Theme implements ArrayAccess {
} elseif ( ! file_exists( $this->theme_root . '/' . $theme_file ) ) {
$this->headers['Name'] = $this->stylesheet;
if ( ! file_exists( $this->theme_root . '/' . $this->stylesheet ) )
$this->errors = new WP_Error( 'theme_not_found', sprintf( __( 'The theme directory "%s" does not exist.' ), $this->stylesheet ) );
$this->errors = new WP_Error( 'theme_not_found', sprintf( __( 'The theme directory "%s" does not exist.' ), esc_html( $this->stylesheet ) ) );
else
$this->errors = new WP_Error( 'theme_no_stylesheet', __( 'Stylesheet is missing.' ) );
$this->template = $this->stylesheet;
@@ -264,7 +264,7 @@ final class WP_Theme implements ArrayAccess {
$theme_root_template = $directories[ $this->template ]['theme_root'];
} else {
// Parent theme is missing.
$this->errors = new WP_Error( 'theme_no_parent', sprintf( __( 'The parent theme is missing. Please install the "%s" parent theme.' ), $this->template ) );
$this->errors = new WP_Error( 'theme_no_parent', sprintf( __( 'The parent theme is missing. Please install the "%s" parent theme.' ), esc_html( $this->template ) ) );
$this->cache_add( 'theme', array( 'headers' => $this->headers, 'errors' => $this->errors, 'stylesheet' => $this->stylesheet, 'template' => $this->template ) );
$this->parent = new WP_Theme( $this->template, $this->theme_root, $this );
return;
@@ -276,11 +276,11 @@ final class WP_Theme implements ArrayAccess {
// If we are a parent, then there is a problem. Only two generations allowed! Cancel things out.
if ( is_a( $_child, 'WP_Theme' ) && $_child->template == $this->stylesheet ) {
$_child->parent = null;
$_child->errors = new WP_Error( 'theme_parent_invalid', sprintf( __( 'The "%s" theme is not a valid parent theme.' ), $_child->template ) );
$_child->errors = new WP_Error( 'theme_parent_invalid', sprintf( __( 'The "%s" theme is not a valid parent theme.' ), esc_html( $_child->template ) ) );
$_child->cache_add( 'theme', array( 'headers' => $_child->headers, 'errors' => $_child->errors, 'stylesheet' => $_child->stylesheet, 'template' => $_child->template ) );
// The two themes actually reference each other with the Template header.
if ( $_child->stylesheet == $this->template ) {
$this->errors = new WP_Error( 'theme_parent_invalid', sprintf( __( 'The "%s" theme is not a valid parent theme.' ), $this->template ) );
$this->errors = new WP_Error( 'theme_parent_invalid', sprintf( __( 'The "%s" theme is not a valid parent theme.' ), esc_html( $this->template ) ) );
$this->cache_add( 'theme', array( 'headers' => $this->headers, 'errors' => $this->errors, 'stylesheet' => $this->stylesheet, 'template' => $this->template ) );
}
return;

View File

@@ -1149,6 +1149,56 @@ class wp_xmlrpc_server extends IXR_Server {
return $count > 1;
}
private function _validate_boolean( $var ) {
if ( is_bool( $var ) ) {
return $var;
}
if ( is_string( $var ) && 'false' === strtolower( $var ) ) {
return false;
}
return (bool) $var;
}
/**
* Encapsulate the logic for sticking a post
* and determining if the user has permission to do so
*
* @since 4.3.0
* @access private
*
* @param array $post_data
* @param bool $update
* @return void|IXR_Error
*/
private function _toggle_sticky( $post_data, $update = false ) {
$post_type = get_post_type_object( $post_data['post_type'] );
// Private and password-protected posts cannot be stickied.
if ( 'private' === $post_data['post_status'] || ! empty( $post_data['post_password'] ) ) {
// Error if the client tried to stick the post, otherwise, silently unstick.
if ( ! empty( $post_data['sticky'] ) ) {
return new IXR_Error( 401, __( 'Sorry, you cannot stick a private post.' ) );
}
if ( $update ) {
unstick_post( $post_data['ID'] );
}
} elseif ( isset( $post_data['sticky'] ) ) {
if ( ! current_user_can( $post_type->cap->edit_others_posts ) ) {
return new IXR_Error( 401, __( 'Sorry, you are not allowed to stick this post.' ) );
}
$sticky = $this->_validate_boolean( $post_data['sticky'] );
if ( $sticky ) {
stick_post( $post_data['ID'] );
} else {
unstick_post( $post_data['ID'] );
}
}
}
/**
* Helper method for wp_newPost and wp_editPost, containing shared logic.
*
@@ -1241,20 +1291,9 @@ class wp_xmlrpc_server extends IXR_Server {
$post_ID = $post_data['ID'];
if ( $post_data['post_type'] == 'post' ) {
// Private and password-protected posts cannot be stickied.
if ( $post_data['post_status'] == 'private' || ! empty( $post_data['post_password'] ) ) {
// Error if the client tried to stick the post, otherwise, silently unstick.
if ( ! empty( $post_data['sticky'] ) )
return new IXR_Error( 401, __( 'Sorry, you cannot stick a private post.' ) );
if ( $update )
unstick_post( $post_ID );
} elseif ( isset( $post_data['sticky'] ) ) {
if ( ! current_user_can( $post_type->cap->edit_others_posts ) )
return new IXR_Error( 401, __( 'Sorry, you are not allowed to stick this post.' ) );
if ( $post_data['sticky'] )
stick_post( $post_ID );
else
unstick_post( $post_ID );
$error = $this->_toggle_sticky( $post_data, $update );
if ( $error ) {
return $error;
}
}
@@ -4583,10 +4622,12 @@ class wp_xmlrpc_server extends IXR_Server {
// Only posts can be sticky
if ( $post_type == 'post' && isset( $content_struct['sticky'] ) ) {
if ( $content_struct['sticky'] == true )
stick_post( $post_ID );
elseif ( $content_struct['sticky'] == false )
unstick_post( $post_ID );
$data = $postdata;
$data['sticky'] = $content_struct['sticky'];
$error = $this->_toggle_sticky( $data );
if ( $error ) {
return $error;
}
}
if ( isset($content_struct['custom_fields']) )
@@ -4872,11 +4913,12 @@ class wp_xmlrpc_server extends IXR_Server {
$tags_input = isset( $content_struct['mt_keywords'] ) ? $content_struct['mt_keywords'] : null;
if ( ('publish' == $post_status) ) {
if ( ( 'page' == $post_type ) && !current_user_can('publish_pages') )
return new IXR_Error(401, __('Sorry, you do not have the right to publish this page.'));
else if ( !current_user_can('publish_posts') )
return new IXR_Error(401, __('Sorry, you do not have the right to publish this post.'));
if ( 'publish' == $post_status || 'private' == $post_status ) {
if ( 'page' == $post_type && ! current_user_can( 'publish_pages' ) ) {
return new IXR_Error( 401, __( 'Sorry, you do not have the right to publish this page.' ) );
} elseif ( ! current_user_can( 'publish_posts' ) ) {
return new IXR_Error( 401, __( 'Sorry, you do not have the right to publish this post.' ) );
}
}
if ( $post_more )
@@ -4916,10 +4958,13 @@ class wp_xmlrpc_server extends IXR_Server {
// Only posts can be sticky
if ( $post_type == 'post' && isset( $content_struct['sticky'] ) ) {
if ( $content_struct['sticky'] == true )
stick_post( $post_ID );
elseif ( $content_struct['sticky'] == false )
unstick_post( $post_ID );
$data = $newpost;
$data['sticky'] = $content_struct['sticky'];
$data['post_type'] = 'post';
$error = $this->_toggle_sticky( $data, true );
if ( $error ) {
return $error;
}
}
if ( isset($content_struct['custom_fields']) )

View File

@@ -13,23 +13,141 @@ if ( !function_exists('_') ) {
}
}
if ( !function_exists('mb_substr') ):
function mb_substr( $str, $start, $length=null, $encoding=null ) {
return _mb_substr($str, $start, $length, $encoding);
/**
* Returns whether PCRE/u (PCRE_UTF8 modifier) is available for use.
*
* @ignore
* @since 4.2.2
* @access private
*
* @param bool $set - Used for testing only
* null : default - get PCRE/u capability
* false : Used for testing - return false for future calls to this function
* 'reset': Used for testing - restore default behavior of this function
*/
function _wp_can_use_pcre_u( $set = null ) {
static $utf8_pcre = 'reset';
if ( null !== $set ) {
$utf8_pcre = $set;
}
if ( 'reset' === $utf8_pcre ) {
$utf8_pcre = @preg_match( '/^./u', 'a' );
}
return $utf8_pcre;
}
if ( ! function_exists( 'mb_substr' ) ) :
function mb_substr( $str, $start, $length = null, $encoding = null ) {
return _mb_substr( $str, $start, $length, $encoding );
}
endif;
function _mb_substr( $str, $start, $length=null, $encoding=null ) {
// the solution below, works only for utf-8, so in case of a different
// charset, just use built-in substr
$charset = get_option( 'blog_charset' );
if ( !in_array( $charset, array('utf8', 'utf-8', 'UTF8', 'UTF-8') ) ) {
return is_null( $length )? substr( $str, $start ) : substr( $str, $start, $length);
/*
* Only understands UTF-8 and 8bit. All other character sets will be treated as 8bit.
* For $encoding === UTF-8, the $str input is expected to be a valid UTF-8 byte sequence.
* The behavior of this function for invalid inputs is undefined.
*/
function _mb_substr( $str, $start, $length = null, $encoding = null ) {
if ( null === $encoding ) {
$encoding = get_option( 'blog_charset' );
}
// use the regex unicode support to separate the UTF-8 characters into an array
preg_match_all( '/./us', $str, $match );
$chars = is_null( $length )? array_slice( $match[0], $start ) : array_slice( $match[0], $start, $length );
return implode( '', $chars );
// The solution below works only for UTF-8,
// so in case of a different charset just use built-in substr()
if ( ! in_array( $encoding, array( 'utf8', 'utf-8', 'UTF8', 'UTF-8' ) ) ) {
return is_null( $length ) ? substr( $str, $start ) : substr( $str, $start, $length );
}
if ( _wp_can_use_pcre_u() ) {
// Use the regex unicode support to separate the UTF-8 characters into an array
preg_match_all( '/./us', $str, $match );
$chars = is_null( $length ) ? array_slice( $match[0], $start ) : array_slice( $match[0], $start, $length );
return implode( '', $chars );
}
$regex = '/(
[\x00-\x7F] # single-byte sequences 0xxxxxxx
| [\xC2-\xDF][\x80-\xBF] # double-byte sequences 110xxxxx 10xxxxxx
| \xE0[\xA0-\xBF][\x80-\xBF] # triple-byte sequences 1110xxxx 10xxxxxx * 2
| [\xE1-\xEC][\x80-\xBF]{2}
| \xED[\x80-\x9F][\x80-\xBF]
| [\xEE-\xEF][\x80-\xBF]{2}
| \xF0[\x90-\xBF][\x80-\xBF]{2} # four-byte sequences 11110xxx 10xxxxxx * 3
| [\xF1-\xF3][\x80-\xBF]{3}
| \xF4[\x80-\x8F][\x80-\xBF]{2}
)/x';
$chars = array( '' ); // Start with 1 element instead of 0 since the first thing we do is pop
do {
// We had some string left over from the last round, but we counted it in that last round.
array_pop( $chars );
// Split by UTF-8 character, limit to 1000 characters (last array element will contain the rest of the string)
$pieces = preg_split( $regex, $str, 1000, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY );
$chars = array_merge( $chars, $pieces );
} while ( count( $pieces ) > 1 && $str = array_pop( $pieces ) ); // If there's anything left over, repeat the loop.
return join( '', array_slice( $chars, $start, $length ) );
}
if ( ! function_exists( 'mb_strlen' ) ) :
function mb_strlen( $str, $encoding = null ) {
return _mb_strlen( $str, $encoding );
}
endif;
/*
* Only understands UTF-8 and 8bit. All other character sets will be treated as 8bit.
* For $encoding === UTF-8, the $str input is expected to be a valid UTF-8 byte sequence.
* The behavior of this function for invalid inputs is undefined.
*/
function _mb_strlen( $str, $encoding = null ) {
if ( null === $encoding ) {
$encoding = get_option( 'blog_charset' );
}
// The solution below works only for UTF-8,
// so in case of a different charset just use built-in strlen()
if ( ! in_array( $encoding, array( 'utf8', 'utf-8', 'UTF8', 'UTF-8' ) ) ) {
return strlen( $str );
}
if ( _wp_can_use_pcre_u() ) {
// Use the regex unicode support to separate the UTF-8 characters into an array
preg_match_all( '/./us', $str, $match );
return count( $match[0] );
}
$regex = '/(?:
[\x00-\x7F] # single-byte sequences 0xxxxxxx
| [\xC2-\xDF][\x80-\xBF] # double-byte sequences 110xxxxx 10xxxxxx
| \xE0[\xA0-\xBF][\x80-\xBF] # triple-byte sequences 1110xxxx 10xxxxxx * 2
| [\xE1-\xEC][\x80-\xBF]{2}
| \xED[\x80-\x9F][\x80-\xBF]
| [\xEE-\xEF][\x80-\xBF]{2}
| \xF0[\x90-\xBF][\x80-\xBF]{2} # four-byte sequences 11110xxx 10xxxxxx * 3
| [\xF1-\xF3][\x80-\xBF]{3}
| \xF4[\x80-\x8F][\x80-\xBF]{2}
)/x';
$count = 1; // Start at 1 instead of 0 since the first thing we do is decrement
do {
// We had some string left over from the last round, but we counted it in that last round.
$count--;
// Split by UTF-8 character, limit to 1000 characters (last array element will contain the rest of the string)
$pieces = preg_split( $regex, $str, 1000 );
// Increment
$count += count( $pieces );
} while ( $str = array_pop( $pieces ) ); // If there's anything left over, repeat the loop.
// Fencepost: preg_split() always returns one extra item in the array
return --$count;
}
if ( !function_exists('hash_hmac') ):

View File

@@ -1354,7 +1354,7 @@ class WP_Widget_Tag_Cloud extends WP_Widget {
?>
<p>
<label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:') ?></label>
<input type="text" class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" value="<?php echo $title; ?>" />
<input type="text" class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" value="<?php echo esc_attr( $title ); ?>" />
</p>
<p>
<label for="<?php echo $this->get_field_id('nav_menu'); ?>"><?php _e('Select Menu:'); ?></label>

View File

@@ -410,6 +410,9 @@ function wpautop($pee, $br = true) {
$pee = preg_replace('!(</' . $allblocks . '>)!', "$1\n\n", $pee);
$pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines
// Find newlines in all elements and add placeholders.
$pee = wp_replace_in_html_tags( $pee, array( "\n" => " <!-- wpnl --> " ) );
if ( strpos( $pee, '<option' ) !== false ) {
// no P/BR around option
$pee = preg_replace( '|\s*<option|', '<option', $pee );
@@ -461,9 +464,109 @@ function wpautop($pee, $br = true) {
if ( !empty($pre_tags) )
$pee = str_replace(array_keys($pre_tags), array_values($pre_tags), $pee);
// Restore newlines in all elements.
$pee = str_replace( " <!-- wpnl --> ", "\n", $pee );
return $pee;
}
/**
* Separate HTML elements and comments from the text.
*
* @since 4.2.4
*
* @param string $input The text which has to be formatted.
* @return array The formatted text.
*/
function wp_html_split( $input ) {
static $regex;
if ( ! isset( $regex ) ) {
$comments =
'!' // Start of comment, after the <.
. '(?:' // Unroll the loop: Consume everything until --> is found.
. '-(?!->)' // Dash not followed by end of comment.
. '[^\-]*+' // Consume non-dashes.
. ')*+' // Loop possessively.
. '(?:-->)?'; // End of comment. If not found, match all input.
$cdata =
'!\[CDATA\[' // Start of comment, after the <.
. '[^\]]*+' // Consume non-].
. '(?:' // Unroll the loop: Consume everything until ]]> is found.
. '](?!]>)' // One ] not followed by end of comment.
. '[^\]]*+' // Consume non-].
. ')*+' // Loop possessively.
. '(?:]]>)?'; // End of comment. If not found, match all input.
$regex =
'/(' // Capture the entire match.
. '<' // Find start of element.
. '(?(?=!--)' // Is this a comment?
. $comments // Find end of comment.
. '|'
. '(?(?=!\[CDATA\[)' // Is this a comment?
. $cdata // Find end of comment.
. '|'
. '[^>]*>?' // Find end of element. If not found, match all input.
. ')'
. ')'
. ')/s';
}
return preg_split( $regex, $input, -1, PREG_SPLIT_DELIM_CAPTURE );
}
/**
* Replace characters or phrases within HTML elements only.
*
* @since 4.2.3
*
* @param string $haystack The text which has to be formatted.
* @param array $replace_pairs In the form array('from' => 'to', ...).
* @return string The formatted text.
*/
function wp_replace_in_html_tags( $haystack, $replace_pairs ) {
// Find all elements.
$textarr = wp_html_split( $haystack );
$changed = false;
// Optimize when searching for one item.
if ( 1 === count( $replace_pairs ) ) {
// Extract $needle and $replace.
foreach ( $replace_pairs as $needle => $replace );
// Loop through delimeters (elements) only.
for ( $i = 1, $c = count( $textarr ); $i < $c; $i += 2 ) {
if ( false !== strpos( $textarr[$i], $needle ) ) {
$textarr[$i] = str_replace( $needle, $replace, $textarr[$i] );
$changed = true;
}
}
} else {
// Extract all $needles.
$needles = array_keys( $replace_pairs );
// Loop through delimeters (elements) only.
for ( $i = 1, $c = count( $textarr ); $i < $c; $i += 2 ) {
foreach ( $needles as $needle ) {
if ( false !== strpos( $textarr[$i], $needle ) ) {
$textarr[$i] = strtr( $textarr[$i], $replace_pairs );
$changed = true;
// After one strtr() break out of the foreach loop and look at next element.
break;
}
}
}
}
if ( $changed ) {
$haystack = implode( $textarr );
}
return $haystack;
}
/**
* Newline preservation help function for wpautop
*
@@ -1309,21 +1412,23 @@ function sanitize_title_with_dashes( $title, $raw_title = '', $context = 'displa
}
/**
* Ensures a string is a valid SQL order by clause.
* Ensures a string is a valid SQL 'order by' clause.
*
* Accepts one or more columns, with or without ASC/DESC, and also accepts
* RAND().
* Accepts one or more columns, with or without a sort order (ASC / DESC).
* e.g. 'column_1', 'column_1, column_2', 'column_1 ASC, column_2 DESC' etc.
*
* Also accepts 'RAND()'.
*
* @since 2.5.1
*
* @param string $orderby Order by string to be checked.
* @return false|string Returns the order by clause if it is a match, false otherwise.
* @param string $orderby Order by clause to be validated.
* @return string|bool Returns $orderby if valid, false otherwise.
*/
function sanitize_sql_orderby( $orderby ){
preg_match('/^\s*([a-z0-9_]+(\s+(ASC|DESC))?(\s*,\s*|\s*$))+|^\s*RAND\(\s*\)\s*$/i', $orderby, $obmatches);
if ( !$obmatches )
return false;
return $orderby;
function sanitize_sql_orderby( $orderby ) {
if ( preg_match( '/^\s*(([a-z0-9_]+|`[a-z0-9_]+`)(\s+(ASC|DESC))?\s*(,\s*(?=[a-z0-9_`])|$))+$/i', $orderby ) || preg_match( '/^\s*RAND\(\s*\)\s*$/i', $orderby ) ) {
return $orderby;
}
return false;
}
/**

View File

@@ -2049,7 +2049,7 @@ function wp_check_filetype( $filename, $mimes = null ) {
$ext = false;
foreach ( $mimes as $ext_preg => $mime_match ) {
$ext_preg = '!\.(' . $ext_preg . ')(\?.*)?$!i';
$ext_preg = '!\.(' . $ext_preg . ')$!i';
if ( preg_match( $ext_preg, $filename, $ext_matches ) ) {
$type = $mime_match;
$ext = $ext_matches[1];

View File

@@ -466,7 +466,7 @@ function wp_http_validate_url( $url ) {
if ( ! $same_host ) {
$host = trim( $parsed_url['host'], '.' );
if ( preg_match( '#^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$#', $host ) ) {
if ( preg_match( '#^(([1-9]?\d|1\d\d|25[0-5]|2[0-4]\d)\.){3}([1-9]?\d|1\d\d|25[0-5]|2[0-4]\d)$#', $host ) ) {
$ip = $host;
} else {
$ip = gethostbyname( $host );
@@ -475,7 +475,7 @@ function wp_http_validate_url( $url ) {
}
if ( $ip ) {
$parts = array_map( 'intval', explode( '.', $ip ) );
if ( 127 === $parts[0] || 10 === $parts[0]
if ( 127 === $parts[0] || 10 === $parts[0] || 0 === $parts[0]
|| ( 172 === $parts[0] && 16 <= $parts[1] && 31 >= $parts[1] )
|| ( 192 === $parts[0] && 168 === $parts[1] )
) {

View File

@@ -106,6 +106,10 @@ tinymce.PluginManager.add( 'wordpress', function( editor ) {
'<img src="' + tinymce.Env.transparentSrc + '" data-wp-more="nextpage" class="wp-more-tag mce-wp-nextpage" ' +
'title="' + title + '" data-mce-resize="false" data-mce-placeholder="1" />' );
}
if ( e.content.indexOf( '<?"' ) !== -1 ) {
e.content = e.content.replace( /<\?"/g, '' );
}
}
});

File diff suppressed because one or more lines are too long

View File

@@ -527,6 +527,82 @@ function wp_kses( $string, $allowed_html, $allowed_protocols = array() ) {
return wp_kses_split($string, $allowed_html, $allowed_protocols);
}
/**
* Filters one attribute only and ensures its value is allowed.
*
* This function has the advantage of being more secure than esc_attr() and can
* escape data in some situations where wp_kses() must strip the whole attribute.
*
* @since 4.2.3
*
* @param string $string The 'whole' attribute, including name and value.
* @param string $element The element name to which the attribute belongs.
* @return string Filtered attribute.
*/
function wp_kses_one_attr( $string, $element ) {
$uris = array('xmlns', 'profile', 'href', 'src', 'cite', 'classid', 'codebase', 'data', 'usemap', 'longdesc', 'action');
$allowed_html = wp_kses_allowed_html( 'post' );
$allowed_protocols = wp_allowed_protocols();
$string = wp_kses_no_null( $string, array( 'slash_zero' => 'keep' ) );
$string = wp_kses_js_entities( $string );
$string = wp_kses_normalize_entities( $string );
// Preserve leading and trailing whitespace.
$matches = array();
preg_match('/^\s*/', $string, $matches);
$lead = $matches[0];
preg_match('/\s*$/', $string, $matches);
$trail = $matches[0];
if ( empty( $trail ) ) {
$string = substr( $string, strlen( $lead ) );
} else {
$string = substr( $string, strlen( $lead ), -strlen( $trail ) );
}
// Parse attribute name and value from input.
$split = preg_split( '/\s*=\s*/', $string, 2 );
$name = $split[0];
if ( count( $split ) == 2 ) {
$value = $split[1];
// Remove quotes surrounding $value.
// Also guarantee correct quoting in $string for this one attribute.
if ( '' == $value ) {
$quote = '';
} else {
$quote = $value[0];
}
if ( '"' == $quote || "'" == $quote ) {
if ( substr( $value, -1 ) != $quote ) {
return '';
}
$value = substr( $value, 1, -1 );
} else {
$quote = '"';
}
// Sanitize quotes and angle braces.
$value = htmlspecialchars( $value, ENT_QUOTES, null, false );
// Sanitize URI values.
if ( in_array( strtolower( $name ), $uris ) ) {
$value = wp_kses_bad_protocol( $value, $allowed_protocols );
}
$string = "$name=$quote$value$quote";
$vless = 'n';
} else {
$value = '';
$vless = 'y';
}
// Sanitize attribute by name.
wp_kses_attr_check( $name, $value, $string, $vless, $element, $allowed_html );
// Restore whitespace.
return $lead . $string . $trail;
}
/**
* Return a list of allowed tags and attributes for a given context.
*
@@ -747,45 +823,11 @@ function wp_kses_attr($element, $attr, $allowed_html, $allowed_protocols) {
# Go through $attrarr, and save the allowed attributes for this element
# in $attr2
$attr2 = '';
$allowed_attr = $allowed_html[strtolower($element)];
foreach ($attrarr as $arreach) {
if ( ! isset( $allowed_attr[strtolower($arreach['name'])] ) )
continue; # the attribute is not allowed
$current = $allowed_attr[strtolower($arreach['name'])];
if ( $current == '' )
continue; # the attribute is not allowed
if ( strtolower( $arreach['name'] ) == 'style' ) {
$orig_value = $arreach['value'];
$value = safecss_filter_attr( $orig_value );
if ( empty( $value ) )
continue;
$arreach['value'] = $value;
$arreach['whole'] = str_replace( $orig_value, $value, $arreach['whole'] );
}
if ( ! is_array($current) ) {
foreach ( $attrarr as $arreach ) {
if ( wp_kses_attr_check( $arreach['name'], $arreach['value'], $arreach['whole'], $arreach['vless'], $element, $allowed_html ) ) {
$attr2 .= ' '.$arreach['whole'];
# there are no checks
} else {
# there are some checks
$ok = true;
foreach ($current as $currkey => $currval) {
if ( ! wp_kses_check_attr_val($arreach['value'], $arreach['vless'], $currkey, $currval) ) {
$ok = false;
break;
}
}
if ( $ok )
$attr2 .= ' '.$arreach['whole']; # it passed them
} # if !is_array($current)
} # foreach
}
}
# Remove any "<" or ">" characters
$attr2 = preg_replace('/[<>]/', '', $attr2);
@@ -793,6 +835,53 @@ function wp_kses_attr($element, $attr, $allowed_html, $allowed_protocols) {
return "<$element$attr2$xhtml_slash>";
}
/**
* Determine whether an attribute is allowed.
*
* @since 4.2.3
*
* @param string $name The attribute name. Returns empty string when not allowed.
* @param string $value The attribute value. Returns a filtered value.
* @param string $whole The name=value input. Returns filtered input.
* @param string $vless 'y' when attribute like "enabled", otherwise 'n'.
* @param string $element The name of the element to which this attribute belongs.
* @param array $allowed_html The full list of allowed elements and attributes.
* @return bool Is the attribute allowed?
*/
function wp_kses_attr_check( &$name, &$value, &$whole, $vless, $element, $allowed_html ) {
$allowed_attr = $allowed_html[strtolower( $element )];
$name_low = strtolower( $name );
if ( ! isset( $allowed_attr[$name_low] ) || '' == $allowed_attr[$name_low] ) {
$name = $value = $whole = '';
return false;
}
if ( 'style' == $name_low ) {
$new_value = safecss_filter_attr( $value );
if ( empty( $new_value ) ) {
$name = $value = $whole = '';
return false;
}
$whole = str_replace( $value, $new_value, $whole );
$value = $new_value;
}
if ( is_array( $allowed_attr[$name_low] ) ) {
// there are some checks
foreach ( $allowed_attr[$name_low] as $currkey => $currval ) {
if ( ! wp_kses_check_attr_val( $value, $vless, $currkey, $currval ) ) {
$name = $value = $whole = '';
return false;
}
}
}
return true;
}
/**
* Builds an attribute list from string containing attributes.
*
@@ -922,6 +1011,109 @@ function wp_kses_hair($attr, $allowed_protocols) {
return $attrarr;
}
/**
* Finds all attributes of an HTML element.
*
* Does not modify input. May return "evil" output.
*
* Based on wp_kses_split2() and wp_kses_attr()
*
* @since 4.2.3
*
* @param string $element HTML element/tag
* @return array|bool List of attributes found in $element. Returns false on failure.
*/
function wp_kses_attr_parse( $element ) {
$valid = preg_match('%^(<\s*)(/\s*)?([a-zA-Z0-9]+\s*)([^>]*)(>?)$%', $element, $matches);
if ( 1 !== $valid ) {
return false;
}
$begin = $matches[1];
$slash = $matches[2];
$elname = $matches[3];
$attr = $matches[4];
$end = $matches[5];
if ( '' !== $slash ) {
// Closing elements do not get parsed.
return false;
}
// Is there a closing XHTML slash at the end of the attributes?
if ( 1 === preg_match( '%\s*/\s*$%', $attr, $matches ) ) {
$xhtml_slash = $matches[0];
$attr = substr( $attr, 0, -strlen( $xhtml_slash ) );
} else {
$xhtml_slash = '';
}
// Split it
$attrarr = wp_kses_hair_parse( $attr );
if ( false === $attrarr ) {
return false;
}
// Make sure all input is returned by adding front and back matter.
array_unshift( $attrarr, $begin . $slash . $elname );
array_push( $attrarr, $xhtml_slash . $end );
return $attrarr;
}
/**
* Builds an attribute list from string containing attributes.
*
* Does not modify input. May return "evil" output.
* In case of unexpected input, returns false instead of stripping things.
*
* Based on wp_kses_hair() but does not return a multi-dimensional array.
*
* @since 4.2.3
*
* @param string $attr Attribute list from HTML element to closing HTML element tag
* @return array|bool List of attributes found in $attr. Returns false on failure.
*/
function wp_kses_hair_parse( $attr ) {
if ( '' === $attr ) {
return array();
}
$regex =
'(?:'
. '[-a-zA-Z:]+' // Attribute name.
. '|'
. '\[\[?[^\[\]]+\]\]?' // Shortcode in the name position implies unfiltered_html.
. ')'
. '(?:' // Attribute value.
. '\s*=\s*' // All values begin with '='
. '(?:'
. '"[^"]*"' // Double-quoted
. '|'
. "'[^']*'" // Single-quoted
. '|'
. '[^\s"\']+' // Non-quoted
. '(?:\s|$)' // Must have a space
. ')'
. '|'
. '(?:\s|$)' // If attribute has no value, space is required.
. ')'
. '\s*'; // Trailing space is optional except as mentioned above.
// Although it is possible to reduce this procedure to a single regexp,
// we must run that regexp twice to get exactly the expected result.
$validation = "%^($regex)+$%";
$extraction = "%$regex%";
if ( 1 === preg_match( $validation, $attr ) ) {
preg_match_all( $extraction, $attr, $attrarr );
return $attrarr[0];
} else {
return false;
}
}
/**
* Performs different checks for attribute values.
*

View File

@@ -813,6 +813,8 @@ function img_caption_shortcode( $attr, $content = null ) {
$content = $matches[1];
$attr['caption'] = trim( $matches[2] );
}
} elseif ( strpos( $attr['caption'], '<' ) !== false ) {
$attr['caption'] = wp_kses( $attr['caption'], 'post' );
}
/**

View File

@@ -1252,7 +1252,8 @@ function wp_validate_redirect($location, $default = '') {
// In php 5 parse_url may fail if the URL query part contains http://, bug #38143
$test = ( $cut = strpos($location, '?') ) ? substr( $location, 0, $cut ) : $location;
$lp = parse_url($test);
// @-operator is used to prevent possible warnings in PHP < 5.3.3.
$lp = @parse_url($test);
// Give up if malformed URL
if ( false === $lp )
@@ -1262,9 +1263,17 @@ function wp_validate_redirect($location, $default = '') {
if ( isset($lp['scheme']) && !('http' == $lp['scheme'] || 'https' == $lp['scheme']) )
return $default;
// Reject if scheme is set but host is not. This catches urls like https:host.com for which parse_url does not set the host field.
if ( isset($lp['scheme']) && !isset($lp['host']) )
// Reject if certain components are set but host is not. This catches urls like https:host.com for which parse_url does not set the host field.
if ( ! isset( $lp['host'] ) && ( isset( $lp['scheme'] ) || isset( $lp['user'] ) || isset( $lp['pass'] ) || isset( $lp['port'] ) ) ) {
return $default;
}
// Reject malformed components parse_url() can return on odd inputs.
foreach ( array( 'user', 'pass', 'host' ) as $component ) {
if ( isset( $lp[ $component ] ) && strpbrk( $lp[ $component ], ':/?#@' ) ) {
return $default;
}
}
$wpp = parse_url(home_url());

View File

@@ -2888,10 +2888,11 @@ function wp_untrash_post_comments( $post = null ) {
foreach ( $group_by_status as $status => $comments ) {
// Sanity check. This shouldn't happen.
if ( 'post-trashed' == $status )
if ( 'post-trashed' == $status ) {
$status = '0';
$comments_in = implode( "', '", $comments );
$wpdb->query( "UPDATE $wpdb->comments SET comment_approved = '$status' WHERE comment_ID IN ('" . $comments_in . "')" );
}
$comments_in = implode( ', ', array_map( 'intval', $comments ) );
$wpdb->query( $wpdb->prepare( "UPDATE $wpdb->comments SET comment_approved = %s WHERE comment_ID IN ($comments_in)", $status ) );
}
clean_comment_cache( array_keys($statuses) );

View File

@@ -181,9 +181,10 @@ function has_shortcode( $content, $tag ) {
* @uses $shortcode_tags
*
* @param string $content Content to search for shortcodes
* @param bool $ignore_html When true, shortcodes inside HTML elements will be skipped.
* @return string Content with shortcodes filtered out.
*/
function do_shortcode($content) {
function do_shortcode( $content, $ignore_html = false ) {
global $shortcode_tags;
if ( false === strpos( $content, '[' ) ) {
@@ -193,8 +194,24 @@ function do_shortcode($content) {
if (empty($shortcode_tags) || !is_array($shortcode_tags))
return $content;
$tagnames = array_keys($shortcode_tags);
$tagregexp = join( '|', array_map('preg_quote', $tagnames) );
$pattern = "/\\[($tagregexp)/s";
if ( 1 !== preg_match( $pattern, $content ) ) {
// Avoids parsing HTML when there are no shortcodes or embeds anyway.
return $content;
}
$content = do_shortcodes_in_html_tags( $content, $ignore_html );
$pattern = get_shortcode_regex();
return preg_replace_callback( "/$pattern/s", 'do_shortcode_tag', $content );
$content = preg_replace_callback( "/$pattern/s", 'do_shortcode_tag', $content );
// Always restore square braces so we don't break things like <!--[if IE ]>
$content = unescape_invalid_shortcodes( $content );
return $content;
}
/**
@@ -287,6 +304,127 @@ function do_shortcode_tag( $m ) {
}
}
/**
* Search only inside HTML elements for shortcodes and process them.
*
* Any [ or ] characters remaining inside elements will be HTML encoded
* to prevent interference with shortcodes that are outside the elements.
* Assumes $content processed by KSES already. Users with unfiltered_html
* capability may get unexpected output if angle braces are nested in tags.
*
* @since 4.2.3
*
* @param string $content Content to search for shortcodes
* @param bool $ignore_html When true, all square braces inside elements will be encoded.
* @return string Content with shortcodes filtered out.
*/
function do_shortcodes_in_html_tags( $content, $ignore_html ) {
// Normalize entities in unfiltered HTML before adding placeholders.
$trans = array( '&#91;' => '&#091;', '&#93;' => '&#093;' );
$content = strtr( $content, $trans );
$trans = array( '[' => '&#91;', ']' => '&#93;' );
$pattern = get_shortcode_regex();
$textarr = wp_html_split( $content );
foreach ( $textarr as &$element ) {
if ( '' == $element || '<' !== $element[0] ) {
continue;
}
$noopen = false === strpos( $element, '[' );
$noclose = false === strpos( $element, ']' );
if ( $noopen || $noclose ) {
// This element does not contain shortcodes.
if ( $noopen xor $noclose ) {
// Need to encode stray [ or ] chars.
$element = strtr( $element, $trans );
}
continue;
}
if ( $ignore_html || '<!--' === substr( $element, 0, 4 ) || '<![CDATA[' === substr( $element, 0, 9 ) ) {
// Encode all [ and ] chars.
$element = strtr( $element, $trans );
continue;
}
$attributes = wp_kses_attr_parse( $element );
if ( false === $attributes ) {
// Some plugins are doing things like [name] <[email]>.
if ( 1 === preg_match( '%^<\s*\[\[?[^\[\]]+\]%', $element ) ) {
$element = preg_replace_callback( "/$pattern/s", 'do_shortcode_tag', $element );
}
// Looks like we found some crazy unfiltered HTML. Skipping it for sanity.
$element = strtr( $element, $trans );
continue;
}
// Get element name
$front = array_shift( $attributes );
$back = array_pop( $attributes );
$matches = array();
preg_match('%[a-zA-Z0-9]+%', $front, $matches);
$elname = $matches[0];
// Look for shortcodes in each attribute separately.
foreach ( $attributes as &$attr ) {
$open = strpos( $attr, '[' );
$close = strpos( $attr, ']' );
if ( false === $open || false === $close ) {
continue; // Go to next attribute. Square braces will be escaped at end of loop.
}
$double = strpos( $attr, '"' );
$single = strpos( $attr, "'" );
if ( ( false === $single || $open < $single ) && ( false === $double || $open < $double ) ) {
// $attr like '[shortcode]' or 'name = [shortcode]' implies unfiltered_html.
// In this specific situation we assume KSES did not run because the input
// was written by an administrator, so we should avoid changing the output
// and we do not need to run KSES here.
$attr = preg_replace_callback( "/$pattern/s", 'do_shortcode_tag', $attr );
} else {
// $attr like 'name = "[shortcode]"' or "name = '[shortcode]'"
// We do not know if $content was unfiltered. Assume KSES ran before shortcodes.
$count = 0;
$new_attr = preg_replace_callback( "/$pattern/s", 'do_shortcode_tag', $attr, -1, $count );
if ( $count > 0 ) {
// Sanitize the shortcode output using KSES.
$new_attr = wp_kses_one_attr( $new_attr, $elname );
if ( '' !== $new_attr ) {
// The shortcode is safe to use now.
$attr = $new_attr;
}
}
}
}
$element = $front . implode( '', $attributes ) . $back;
// Now encode any remaining [ or ] chars.
$element = strtr( $element, $trans );
}
$content = implode( '', $textarr );
return $content;
}
/**
* Remove placeholders added by do_shortcodes_in_html_tags().
*
* @since 4.2.3
*
* @param string $content Content to search for placeholders.
* @return string Content with placeholders removed.
*/
function unescape_invalid_shortcodes( $content ) {
// Clean up entire string, avoids re-parsing HTML.
$trans = array( '&#91;' => '[', '&#93;' => ']' );
$content = strtr( $content, $trans );
return $content;
}
/**
* Retrieve all attributes from the shortcodes tag.
*
@@ -316,6 +454,15 @@ function shortcode_parse_atts($text) {
elseif (isset($m[8]))
$atts[] = stripcslashes($m[8]);
}
// Reject any unclosed HTML elements
foreach( $atts as &$value ) {
if ( false !== strpos( $value, '<' ) ) {
if ( 1 !== preg_match( '/^[^<]*+(?:<[^>]*+>[^<]*+)*+$/', $value ) ) {
$value = '';
}
}
}
} else {
$atts = ltrim($text);
}
@@ -386,9 +533,15 @@ function strip_shortcodes( $content ) {
if (empty($shortcode_tags) || !is_array($shortcode_tags))
return $content;
$pattern = get_shortcode_regex();
$content = do_shortcodes_in_html_tags( $content, true );
return preg_replace_callback( "/$pattern/s", 'strip_shortcode_tag', $content );
$pattern = get_shortcode_regex();
$content = preg_replace_callback( "/$pattern/s", 'strip_shortcode_tag', $content );
// Always restore square braces so we don't break things like <!--[if IE ]>
$content = unescape_invalid_shortcodes( $content );
return $content;
}
function strip_shortcode_tag( $m ) {

View File

@@ -593,7 +593,7 @@ function get_objects_in_term( $term_ids, $taxonomies, $args = array() ) {
$term_ids = array_map('intval', $term_ids );
$taxonomies = "'" . implode( "', '", $taxonomies ) . "'";
$taxonomies = "'" . implode( "', '", array_map( 'esc_sql', $taxonomies ) ) . "'";
$term_ids = "'" . implode( "', '", $term_ids ) . "'";
$object_ids = $wpdb->get_col("SELECT tr.object_id FROM $wpdb->term_relationships AS tr INNER JOIN $wpdb->term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ($taxonomies) AND tt.term_id IN ($term_ids) ORDER BY tr.object_id $order");
@@ -1735,7 +1735,7 @@ function get_terms( $taxonomies, $args = '' ) {
$order = 'ASC';
}
$where = "tt.taxonomy IN ('" . implode("', '", $taxonomies) . "')";
$where = "tt.taxonomy IN ('" . implode("', '", array_map( 'esc_sql', $taxonomies ) ) . "')";
$exclude = $args['exclude'];
$exclude_tree = $args['exclude_tree'];
@@ -2638,7 +2638,7 @@ function wp_get_object_terms($object_ids, $taxonomies, $args = array()) {
if ( '' !== $order && ! in_array( $order, array( 'ASC', 'DESC' ) ) )
$order = 'ASC';
$taxonomies = "'" . implode("', '", $taxonomies) . "'";
$taxonomies = "'" . implode("', '", array_map( 'esc_sql', $taxonomies ) ) . "'";
$object_ids = implode(', ', $object_ids);
$select_this = '';

View File

@@ -672,8 +672,6 @@ function preview_theme() {
// Prevent theme mods to current theme being used on theme being previewed
add_filter( 'pre_option_theme_mods_' . get_option( 'stylesheet' ), '__return_empty_array' );
ob_start( 'preview_theme_ob_filter' );
}
add_action('setup_theme', 'preview_theme');
@@ -711,7 +709,7 @@ function _preview_theme_stylesheet_filter() {
* @return string
*/
function preview_theme_ob_filter( $content ) {
return preg_replace_callback( "|(<a.*?href=([\"']))(.*?)([\"'].*?>)|", 'preview_theme_ob_filter_callback', $content );
return $content;
}
/**
@@ -726,26 +724,7 @@ function preview_theme_ob_filter( $content ) {
* @return string
*/
function preview_theme_ob_filter_callback( $matches ) {
if ( strpos($matches[4], 'onclick') !== false )
$matches[4] = preg_replace('#onclick=([\'"]).*?(?<!\\\)\\1#i', '', $matches[4]); //Strip out any onclicks from rest of <a>. (?<!\\\) means to ignore the '" if it's escaped by \ to prevent breaking mid-attribute.
if (
( false !== strpos($matches[3], '/wp-admin/') )
||
( false !== strpos( $matches[3], '://' ) && 0 !== strpos( $matches[3], home_url() ) )
||
( false !== strpos($matches[3], '/feed/') )
||
( false !== strpos($matches[3], '/trackback/') )
)
return $matches[1] . "#$matches[2] onclick=$matches[2]return false;" . $matches[4];
$stylesheet = isset( $_GET['stylesheet'] ) ? $_GET['stylesheet'] : '';
$template = isset( $_GET['template'] ) ? $_GET['template'] : '';
$link = add_query_arg( array( 'preview' => 1, 'template' => $template, 'stylesheet' => $stylesheet, 'preview_iframe' => 1 ), $matches[3] );
if ( 0 === strpos($link, 'preview=1') )
$link = "?$link";
return $matches[1] . esc_attr( $link ) . $matches[4];
return $matches[0];
}
/**

View File

@@ -633,19 +633,8 @@ function wp_schedule_update_checks() {
if ( !wp_next_scheduled('wp_update_themes') && !defined('WP_INSTALLING') )
wp_schedule_event(time(), 'twicedaily', 'wp_update_themes');
if ( ! wp_next_scheduled( 'wp_maybe_auto_update' ) && ! defined( 'WP_INSTALLING' ) ) {
// Schedule auto updates for 7 a.m. and 7 p.m. in the timezone of the site.
$next = strtotime( 'today 7am' );
$now = time();
// Find the next instance of 7 a.m. or 7 p.m., but skip it if it is within 3 hours from now.
while ( ( $now + 3 * HOUR_IN_SECONDS ) > $next ) {
$next += 12 * HOUR_IN_SECONDS;
}
$next = $next - get_option( 'gmt_offset' ) * HOUR_IN_SECONDS;
// Add a random number of minutes, so we don't have all sites trying to update exactly on the hour
$next = $next + rand( 0, 59 ) * MINUTE_IN_SECONDS;
wp_schedule_event( $next, 'twicedaily', 'wp_maybe_auto_update' );
}
if ( ( wp_next_scheduled( 'wp_maybe_auto_update' ) > ( time() + HOUR_IN_SECONDS ) ) && ! defined('WP_INSTALLING') )
wp_clear_scheduled_hook( 'wp_maybe_auto_update' );
}
/**

View File

@@ -4,21 +4,21 @@
*
* @global string $wp_version
*/
$wp_version = '4.1.1';
$wp_version = '4.1.11';
/**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
*
* @global int $wp_db_version
*/
$wp_db_version = 30133;
$wp_db_version = 30135;
/**
* Holds the TinyMCE version
*
* @global string $tinymce_version
*/
$tinymce_version = '4107-20150118';
$tinymce_version = '4107-20150505';
/**
* Holds the required PHP version

File diff suppressed because it is too large Load Diff