Version Description
- Added checks to ensure pages exist before setting/redirecting to them.
- Fixed user profile responsiveness.
- Fixes PHP Fatal error: Uncaught Error: Class "DOMDocument" not found.
Download this release
Release Info
Developer | Collizo4sky |
Plugin | WP User Avatar |
Version | 3.1.13 |
Comparing to | |
See all releases |
Code changes from version 3.1.12 to 3.1.13
- assets/css/frontend.css +111 -111
- assets/css/frontend.min.css +1 -1
- changelog.txt +6 -1
- languages/wp-user-avatar.pot +31 -31
- readme.txt +8 -3
- src/Classes/Autologin.php +0 -4
- src/Classes/ModifyRedirectDefaultLinks.php +24 -17
- src/Classes/SendEmail.php +1 -1
- src/ContentProtection/views/view.contentbox.php +3 -1
- src/Functions/GlobalFunctions.php +7 -6
- vendor/autoload.php +1 -1
- vendor/composer/ClassLoader.php +37 -1
- vendor/composer/InstalledVersions.php +327 -236
- vendor/composer/autoload_real.php +8 -8
- vendor/composer/autoload_static.php +4 -4
- vendor/composer/installed.json +9 -9
- vendor/composer/installed.php +47 -48
- vendor/composer/platform_check.php +2 -2
- vendor/symfony/css-selector/.gitignore +0 -3
- vendor/symfony/css-selector/CHANGELOG.md +5 -0
- vendor/symfony/css-selector/CssSelectorConverter.php +10 -6
- vendor/symfony/css-selector/Exception/ExceptionInterface.php +1 -1
- vendor/symfony/css-selector/Exception/SyntaxErrorException.php +3 -10
- vendor/symfony/css-selector/LICENSE +1 -1
- vendor/symfony/css-selector/Node/AbstractNode.php +1 -4
- vendor/symfony/css-selector/Node/AttributeNode.php +8 -29
- vendor/symfony/css-selector/Node/ClassNode.php +5 -14
- vendor/symfony/css-selector/Node/CombinedSelectorNode.php +6 -18
- vendor/symfony/css-selector/Node/ElementNode.php +5 -15
- vendor/symfony/css-selector/Node/FunctionNode.php +6 -13
- vendor/symfony/css-selector/Node/HashNode.php +5 -14
- vendor/symfony/css-selector/Node/NegationNode.php +4 -10
- vendor/symfony/css-selector/Node/NodeInterface.php +3 -18
- vendor/symfony/css-selector/Node/PseudoNode.php +5 -14
- vendor/symfony/css-selector/Node/SelectorNode.php +5 -14
- vendor/symfony/css-selector/Node/Specificity.php +7 -22
- vendor/symfony/css-selector/Parser/Handler/CommentHandler.php +1 -1
- vendor/symfony/css-selector/Parser/Handler/HandlerInterface.php +1 -4
- vendor/symfony/css-selector/Parser/Handler/HashHandler.php +1 -1
- vendor/symfony/css-selector/Parser/Handler/IdentifierHandler.php +1 -1
- vendor/symfony/css-selector/Parser/Handler/NumberHandler.php +1 -1
- vendor/symfony/css-selector/Parser/Handler/StringHandler.php +1 -1
- vendor/symfony/css-selector/Parser/Handler/WhitespaceHandler.php +1 -1
- vendor/symfony/css-selector/Parser/Parser.php +12 -42
- vendor/symfony/css-selector/Parser/ParserInterface.php +1 -3
- vendor/symfony/css-selector/Parser/Reader.php +8 -36
- vendor/symfony/css-selector/Parser/Shortcut/ClassParser.php +1 -1
- vendor/symfony/css-selector/Parser/Shortcut/ElementParser.php +1 -1
- vendor/symfony/css-selector/Parser/Shortcut/EmptyStringParser.php +1 -1
- vendor/symfony/css-selector/Parser/Shortcut/HashParser.php +1 -1
- vendor/symfony/css-selector/Parser/Token.php +19 -57
- vendor/symfony/css-selector/Parser/TokenStream.php +7 -11
- vendor/symfony/css-selector/Parser/Tokenizer/Tokenizer.php +1 -3
- vendor/symfony/css-selector/Parser/Tokenizer/TokenizerEscaping.php +3 -18
- vendor/symfony/css-selector/Parser/Tokenizer/TokenizerPatterns.php +7 -30
- vendor/symfony/css-selector/README.md +5 -5
- vendor/symfony/css-selector/Tests/CssSelectorConverterTest.php +0 -74
- vendor/symfony/css-selector/Tests/Node/AbstractNodeTest.php +0 -34
- vendor/symfony/css-selector/Tests/Node/AttributeNodeTest.php +0 -37
- vendor/symfony/css-selector/Tests/Node/ClassNodeTest.php +0 -33
- vendor/symfony/css-selector/Tests/Node/CombinedSelectorNodeTest.php +0 -35
- vendor/symfony/css-selector/Tests/Node/ElementNodeTest.php +0 -35
- vendor/symfony/css-selector/Tests/Node/FunctionNodeTest.php +0 -47
- vendor/symfony/css-selector/Tests/Node/HashNodeTest.php +0 -33
- vendor/symfony/css-selector/Tests/Node/NegationNodeTest.php +0 -33
- vendor/symfony/css-selector/Tests/Node/PseudoNodeTest.php +0 -32
- vendor/symfony/css-selector/Tests/Node/SelectorNodeTest.php +0 -34
- vendor/symfony/css-selector/Tests/Node/SpecificityTest.php +0 -63
- vendor/symfony/css-selector/Tests/Parser/Handler/AbstractHandlerTest.php +0 -70
- vendor/symfony/css-selector/Tests/Parser/Handler/CommentHandlerTest.php +0 -55
- vendor/symfony/css-selector/Tests/Parser/Handler/HashHandlerTest.php +0 -49
- vendor/symfony/css-selector/Tests/Parser/Handler/IdentifierHandlerTest.php +0 -49
- vendor/symfony/css-selector/Tests/Parser/Handler/NumberHandlerTest.php +0 -50
- vendor/symfony/css-selector/Tests/Parser/Handler/StringHandlerTest.php +0 -50
- vendor/symfony/css-selector/Tests/Parser/Handler/WhitespaceHandlerTest.php +0 -44
- vendor/symfony/css-selector/Tests/Parser/ParserTest.php +0 -253
- vendor/symfony/css-selector/Tests/Parser/ReaderTest.php +0 -102
- vendor/symfony/css-selector/Tests/Parser/Shortcut/ClassParserTest.php +0 -45
- vendor/symfony/css-selector/Tests/Parser/Shortcut/ElementParserTest.php +0 -44
- vendor/symfony/css-selector/Tests/Parser/Shortcut/EmptyStringParserTest.php +0 -36
- vendor/symfony/css-selector/Tests/Parser/Shortcut/HashParserTest.php +0 -45
- vendor/symfony/css-selector/Tests/Parser/TokenStreamTest.php +0 -96
- vendor/symfony/css-selector/Tests/XPath/Fixtures/ids.html +0 -48
- vendor/symfony/css-selector/Tests/XPath/Fixtures/lang.xml +0 -11
- vendor/symfony/css-selector/Tests/XPath/Fixtures/shakespear.html +0 -308
- vendor/symfony/css-selector/Tests/XPath/TranslatorTest.php +0 -413
- vendor/symfony/css-selector/XPath/Extension/AbstractExtension.php +5 -5
- vendor/symfony/css-selector/XPath/Extension/AttributeMatchingExtension.php +10 -58
- vendor/symfony/css-selector/XPath/Extension/CombinationExtension.php +6 -18
- vendor/symfony/css-selector/XPath/Extension/ExtensionInterface.php +6 -8
- vendor/symfony/css-selector/XPath/Extension/FunctionExtension.php +9 -26
- vendor/symfony/css-selector/XPath/Extension/HtmlExtension.php +12 -38
- vendor/symfony/css-selector/XPath/Extension/NodeExtension.php +19 -64
- vendor/symfony/css-selector/XPath/Extension/PseudoClassExtension.php +10 -38
- vendor/symfony/css-selector/XPath/Translator.php +18 -51
- vendor/symfony/css-selector/XPath/TranslatorInterface.php +2 -11
- vendor/symfony/css-selector/XPath/XPathExpr.php +8 -35
- vendor/symfony/css-selector/composer.json +2 -2
- vendor/symfony/css-selector/phpunit.xml.dist +0 -31
- wp-user-avatar.php +2 -2
assets/css/frontend.css
CHANGED
@@ -1557,6 +1557,10 @@ html .select2.select2-container .select2-selection.select2-selection--multiple i
|
|
1557 |
height: 200px;
|
1558 |
}
|
1559 |
|
|
|
|
|
|
|
|
|
1560 |
.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-photo img {
|
1561 |
width: 100%;
|
1562 |
height: auto;
|
@@ -1739,245 +1743,241 @@ html .select2.select2-container .select2-selection.select2-selection--multiple i
|
|
1739 |
/********************************************/
|
1740 |
/** 340px and below */
|
1741 |
.ppress-default-profile.ppressui340 .ppress-dpf-profile-nav {
|
1742 |
-
padding: 0;
|
1743 |
}
|
1744 |
|
1745 |
.ppress-default-profile.ppressui340 .ppress-dpf-profile-nav-item a {
|
1746 |
-
padding: 10px 16px;
|
1747 |
-
margin-left: 0;
|
1748 |
-
border-radius: 0;
|
1749 |
}
|
1750 |
|
1751 |
.ppress-dpf-profile-nav-item.ppressui340 .ppress-dpf-profile-body {
|
1752 |
-
padding-left: 0;
|
1753 |
-
padding-right: 0;
|
1754 |
}
|
1755 |
|
1756 |
.ppress-default-profile.ppressui340.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-photo {
|
1757 |
-
position: static;
|
1758 |
-
top: auto;
|
1759 |
-
left: auto;
|
1760 |
}
|
1761 |
|
1762 |
.ppress-default-profile.ppressui340 .ppress-dpf-header .ppress-dpf-profile-meta {
|
1763 |
-
text-align: center;
|
1764 |
-
padding: 0;
|
1765 |
-
margin-top: -30px;
|
1766 |
}
|
1767 |
|
1768 |
.ppress-default-profile.ppressui340.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-meta {
|
1769 |
-
padding-top: 0;
|
1770 |
}
|
1771 |
|
1772 |
.ppress-default-profile.ppressui340 .ppress-dpf-header .ppress-dpf-name {
|
1773 |
-
float: none;
|
1774 |
-
margin-right: 0;
|
1775 |
-
font-size: 18px;
|
1776 |
}
|
1777 |
|
1778 |
.ppress-default-profile.ppressui340 .ppress-dpf-header .ppress-dpf-meta-text {
|
1779 |
-
padding: 0 20px;
|
1780 |
}
|
1781 |
|
1782 |
.ppress-default-profile.ppressui340 .ppress-dpf-profile-photo {
|
1783 |
-
position: relative;
|
1784 |
-
width: 100px;
|
1785 |
-
height: 100px;
|
1786 |
-
margin: 0 auto;
|
1787 |
-
float: none;
|
1788 |
-
left: auto;
|
1789 |
-
text-align: center;
|
1790 |
-
top: -40px;
|
1791 |
}
|
1792 |
|
1793 |
.ppress-default-profile.ppressui340.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-photo {
|
1794 |
-
width: 120px;
|
1795 |
-
height: 120px;
|
1796 |
}
|
1797 |
|
1798 |
.ppress-default-profile.ppressui340 .ppress-dpf-nav-title {
|
1799 |
-
font-size: 12px;
|
1800 |
}
|
1801 |
|
1802 |
.ppress-default-profile.ppressui340 .ppress-dpf-profile-nav-item .ppress-material-icons {
|
1803 |
-
display: block;
|
1804 |
-
position: static;
|
1805 |
-
top: auto;
|
1806 |
-
left: auto;
|
1807 |
-
font-size: 20px;
|
1808 |
-
height: 20px;
|
1809 |
-
line-height: 20px;
|
1810 |
}
|
1811 |
|
1812 |
.ppress-default-profile.ppressui340.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-meta {
|
1813 |
-
margin-top: 0;
|
1814 |
}
|
1815 |
|
1816 |
/** 500px and below **/
|
1817 |
.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav {
|
1818 |
-
padding: 0;
|
1819 |
}
|
1820 |
|
1821 |
.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav-item a {
|
1822 |
-
padding: 10px 16px;
|
1823 |
-
margin-left: 0;
|
1824 |
-
border-radius: 0;
|
1825 |
}
|
1826 |
|
1827 |
.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav-item i {
|
1828 |
-
display: block;
|
1829 |
-
position: static;
|
1830 |
-
top: auto;
|
1831 |
-
left: auto;
|
1832 |
-
font-size: 22px;
|
1833 |
-
height: 22px;
|
1834 |
-
line-height: 22px;
|
1835 |
}
|
1836 |
|
1837 |
.ppress-default-profile.ppressui500 .ppress-dpf-profile-body {
|
1838 |
-
padding-left: 0;
|
1839 |
-
padding-right: 0;
|
1840 |
}
|
1841 |
|
1842 |
.ppress-default-profile.ppressui500.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-photo {
|
1843 |
-
position: static;
|
1844 |
-
top: auto;
|
1845 |
-
left: auto;
|
1846 |
}
|
1847 |
|
1848 |
.ppress-default-profile.ppressui500.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-photo {
|
1849 |
-
width: 120px;
|
1850 |
-
height: 120px;
|
1851 |
}
|
1852 |
|
1853 |
.ppress-default-profile.ppressui500 .ppress-dpf-profile-photo {
|
1854 |
-
position: relative;
|
1855 |
-
width: 100px;
|
1856 |
-
height: 100px;
|
1857 |
-
margin: 0 auto;
|
1858 |
-
float: none;
|
1859 |
-
display: block;
|
1860 |
-
top: -40px;
|
1861 |
-
left: 0;
|
1862 |
}
|
1863 |
|
1864 |
.ppress-default-profile.ppressui500 .ppress-dpf-header .ppress-dpf-profile-meta {
|
1865 |
-
text-align: center;
|
1866 |
-
padding: 0;
|
1867 |
-
margin-top: -30px;
|
1868 |
}
|
1869 |
|
1870 |
.ppress-default-profile.ppressui500 .ppress-dpf-header .ppress-dpf-name {
|
1871 |
-
float: none;
|
1872 |
-
margin-right: 0;
|
1873 |
-
font-size: 21px;
|
1874 |
}
|
1875 |
|
1876 |
.ppress-default-profile.ppressui500 .ppress-dpf-header .ppress-dpf-meta-text {
|
1877 |
-
padding-top: 10px;
|
1878 |
}
|
1879 |
|
1880 |
.ppress-default-profile.ppressui500 .ppress-dpf-header .ppress-dpf-meta {
|
1881 |
-
padding: 0 20px;
|
1882 |
-
display: block;
|
1883 |
}
|
1884 |
|
1885 |
.ppress-default-profile.ppressui500 .ppress-dpf-nav-title {
|
1886 |
-
font-size: 12px;
|
1887 |
}
|
1888 |
|
1889 |
.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav-item .ppress-material-icons {
|
1890 |
-
display: block;
|
1891 |
-
position: static;
|
1892 |
-
top: auto;
|
1893 |
-
left: auto;
|
1894 |
-
font-size: 20px;
|
1895 |
-
height: 20px;
|
1896 |
-
line-height: 20px;
|
1897 |
}
|
1898 |
|
1899 |
.ppress-default-profile.ppressui500.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-meta {
|
1900 |
-
margin-top: 0;
|
1901 |
}
|
1902 |
|
1903 |
/** 800px and below **/
|
1904 |
.ppress-default-profile.ppressui800 .ppress-dpf-profile-nav {
|
1905 |
-
padding: 0;
|
1906 |
}
|
1907 |
|
1908 |
.ppress-default-profile.ppressui800 .ppress-dpf-profile-nav-item a {
|
1909 |
-
padding: 10px 20px;
|
1910 |
-
margin-left: 0;
|
1911 |
-
border-radius: 0;
|
1912 |
}
|
1913 |
|
1914 |
.ppress-default-profile.ppressui800 .ppress-dpf-profile-photo {
|
1915 |
-
width: 150px;
|
1916 |
}
|
1917 |
|
1918 |
.ppress-default-profile.ppressui800 .ppress-dpf-profile-photo {
|
1919 |
-
width: 140px;
|
1920 |
-
height: 140px;
|
1921 |
-
top: -70px;
|
1922 |
}
|
1923 |
|
1924 |
.ppress-default-profile.ppressui800.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-photo {
|
1925 |
-
top: auto;
|
1926 |
-
}
|
1927 |
-
|
1928 |
-
.ppress-default-profile.ppressui800 .ppress-dpf-header .ppress-dpf-profile-meta {
|
1929 |
-
padding-left: 200px;
|
1930 |
}
|
1931 |
|
1932 |
.ppress-default-profile.ppressui800 .ppress-dpf-header .ppress-dpf-meta-text {
|
1933 |
-
padding-top: 10px;
|
1934 |
}
|
1935 |
|
1936 |
.ppress-default-profile.ppressui800 .ppress-dpf-nav-title {
|
1937 |
-
font-size: 12px;
|
1938 |
}
|
1939 |
|
1940 |
.ppress-default-profile.ppressui800 .ppress-dpf-profile-nav-item .ppress-material-icons {
|
1941 |
-
display: block;
|
1942 |
-
position: static;
|
1943 |
-
top: auto;
|
1944 |
-
left: auto;
|
1945 |
-
font-size: 20px;
|
1946 |
-
height: 20px;
|
1947 |
-
line-height: 20px;
|
1948 |
}
|
1949 |
|
1950 |
/** 960px and below **/
|
1951 |
.ppress-default-profile.ppressui960 .ppress-dpf-profile-photo {
|
1952 |
-
width: 200px;
|
1953 |
}
|
1954 |
|
1955 |
.ppress-default-profile.ppressui960 .ppress-dpf-profile-photo {
|
1956 |
-
width: 140px;
|
1957 |
-
height: 140px;
|
1958 |
-
top: -70px;
|
1959 |
}
|
1960 |
|
1961 |
.ppress-default-profile.ppressui960.ppdf-nocover .ppress-dpf-profile-meta {
|
1962 |
-
margin-top: -50px;
|
1963 |
}
|
1964 |
|
1965 |
/*****************************************/
|
1966 |
|
1967 |
.ppress-default-profile.ppressui340 .ppress-dpf-profile-nav-item a,
|
1968 |
.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav-item a {
|
1969 |
-
padding: 5px 11px;
|
1970 |
-
font-size: 12px;
|
1971 |
}
|
1972 |
|
1973 |
.ppress-default-profile.ppressui340 .ppress-dpf-profile-nav-item .ppress-material-icons,
|
1974 |
.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav-item .ppress-material-icons {
|
1975 |
-
font-size: 14px;
|
1976 |
}
|
1977 |
|
1978 |
.ppress-default-profile.ppressui340 span.ppress-dpf-nav-title,
|
1979 |
.ppress-default-profile.ppressui500 span.ppress-dpf-nav-title {
|
1980 |
-
font-size: 10px;
|
1981 |
}
|
1982 |
|
1983 |
/***************** Post list CSS **************/
|
1557 |
height: 200px;
|
1558 |
}
|
1559 |
|
1560 |
+
.pp-form-wrapper.ppress-default-profile.ppdf-nocover .ppress-dpf-profile-photo {
|
1561 |
+
position: relative;
|
1562 |
+
}
|
1563 |
+
|
1564 |
.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-photo img {
|
1565 |
width: 100%;
|
1566 |
height: auto;
|
1743 |
/********************************************/
|
1744 |
/** 340px and below */
|
1745 |
.ppress-default-profile.ppressui340 .ppress-dpf-profile-nav {
|
1746 |
+
padding: 0 !important;
|
1747 |
}
|
1748 |
|
1749 |
.ppress-default-profile.ppressui340 .ppress-dpf-profile-nav-item a {
|
1750 |
+
padding: 10px 16px !important;
|
1751 |
+
margin-left: 0 !important;
|
1752 |
+
border-radius: 0 !important;
|
1753 |
}
|
1754 |
|
1755 |
.ppress-dpf-profile-nav-item.ppressui340 .ppress-dpf-profile-body {
|
1756 |
+
padding-left: 0 !important;
|
1757 |
+
padding-right: 0 !important;
|
1758 |
}
|
1759 |
|
1760 |
.ppress-default-profile.ppressui340.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-photo {
|
1761 |
+
position: static !important;
|
1762 |
+
top: auto !important;
|
1763 |
+
left: auto !important;
|
1764 |
}
|
1765 |
|
1766 |
.ppress-default-profile.ppressui340 .ppress-dpf-header .ppress-dpf-profile-meta {
|
1767 |
+
text-align: center !important;
|
1768 |
+
padding: 0 !important;
|
1769 |
+
margin-top: -30px !important;
|
1770 |
}
|
1771 |
|
1772 |
.ppress-default-profile.ppressui340.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-meta {
|
1773 |
+
padding-top: 0 !important;
|
1774 |
}
|
1775 |
|
1776 |
.ppress-default-profile.ppressui340 .ppress-dpf-header .ppress-dpf-name {
|
1777 |
+
float: none !important;
|
1778 |
+
margin-right: 0 !important;
|
1779 |
+
font-size: 18px !important;
|
1780 |
}
|
1781 |
|
1782 |
.ppress-default-profile.ppressui340 .ppress-dpf-header .ppress-dpf-meta-text {
|
1783 |
+
padding: 0 20px !important;
|
1784 |
}
|
1785 |
|
1786 |
.ppress-default-profile.ppressui340 .ppress-dpf-profile-photo {
|
1787 |
+
position: relative !important;
|
1788 |
+
width: 100px !important;
|
1789 |
+
height: 100px !important;
|
1790 |
+
margin: 0 auto !important;
|
1791 |
+
float: none !important;
|
1792 |
+
left: auto !important;
|
1793 |
+
text-align: center !important;
|
1794 |
+
top: -40px !important;
|
1795 |
}
|
1796 |
|
1797 |
.ppress-default-profile.ppressui340.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-photo {
|
1798 |
+
width: 120px !important;
|
1799 |
+
height: 120px !important;
|
1800 |
}
|
1801 |
|
1802 |
.ppress-default-profile.ppressui340 .ppress-dpf-nav-title {
|
1803 |
+
font-size: 12px !important;
|
1804 |
}
|
1805 |
|
1806 |
.ppress-default-profile.ppressui340 .ppress-dpf-profile-nav-item .ppress-material-icons {
|
1807 |
+
display: block !important;
|
1808 |
+
position: static !important;
|
1809 |
+
top: auto !important;
|
1810 |
+
left: auto !important;
|
1811 |
+
font-size: 20px !important;
|
1812 |
+
height: 20px !important;
|
1813 |
+
line-height: 20px !important;
|
1814 |
}
|
1815 |
|
1816 |
.ppress-default-profile.ppressui340.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-meta {
|
1817 |
+
margin-top: 0 !important;
|
1818 |
}
|
1819 |
|
1820 |
/** 500px and below **/
|
1821 |
.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav {
|
1822 |
+
padding: 0 !important;
|
1823 |
}
|
1824 |
|
1825 |
.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav-item a {
|
1826 |
+
padding: 10px 16px !important;
|
1827 |
+
margin-left: 0 !important;
|
1828 |
+
border-radius: 0 !important;
|
1829 |
}
|
1830 |
|
1831 |
.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav-item i {
|
1832 |
+
display: block !important;
|
1833 |
+
position: static !important;
|
1834 |
+
top: auto !important;
|
1835 |
+
left: auto !important;
|
1836 |
+
font-size: 22px !important;
|
1837 |
+
height: 22px !important;
|
1838 |
+
line-height: 22px !important;
|
1839 |
}
|
1840 |
|
1841 |
.ppress-default-profile.ppressui500 .ppress-dpf-profile-body {
|
1842 |
+
padding-left: 0 !important;
|
1843 |
+
padding-right: 0 !important;
|
1844 |
}
|
1845 |
|
1846 |
.ppress-default-profile.ppressui500.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-photo {
|
1847 |
+
position: static !important;
|
1848 |
+
top: auto !important;
|
1849 |
+
left: auto !important;
|
1850 |
}
|
1851 |
|
1852 |
.ppress-default-profile.ppressui500.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-photo {
|
1853 |
+
width: 120px !important;
|
1854 |
+
height: 120px !important;
|
1855 |
}
|
1856 |
|
1857 |
.ppress-default-profile.ppressui500 .ppress-dpf-profile-photo {
|
1858 |
+
position: relative !important;
|
1859 |
+
width: 100px !important;
|
1860 |
+
height: 100px !important;
|
1861 |
+
margin: 0 auto !important;
|
1862 |
+
float: none !important;
|
1863 |
+
display: block !important;
|
1864 |
+
top: -40px !important;
|
1865 |
+
left: 0 !important;
|
1866 |
}
|
1867 |
|
1868 |
.ppress-default-profile.ppressui500 .ppress-dpf-header .ppress-dpf-profile-meta {
|
1869 |
+
text-align: center !important;
|
1870 |
+
padding: 0 !important;
|
1871 |
+
margin-top: -30px !important;
|
1872 |
}
|
1873 |
|
1874 |
.ppress-default-profile.ppressui500 .ppress-dpf-header .ppress-dpf-name {
|
1875 |
+
float: none !important;
|
1876 |
+
margin-right: 0 !important;
|
1877 |
+
font-size: 21px !important;
|
1878 |
}
|
1879 |
|
1880 |
.ppress-default-profile.ppressui500 .ppress-dpf-header .ppress-dpf-meta-text {
|
1881 |
+
padding-top: 10px !important;
|
1882 |
}
|
1883 |
|
1884 |
.ppress-default-profile.ppressui500 .ppress-dpf-header .ppress-dpf-meta {
|
1885 |
+
padding: 0 20px !important;
|
1886 |
+
display: block !important;
|
1887 |
}
|
1888 |
|
1889 |
.ppress-default-profile.ppressui500 .ppress-dpf-nav-title {
|
1890 |
+
font-size: 12px !important;
|
1891 |
}
|
1892 |
|
1893 |
.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav-item .ppress-material-icons {
|
1894 |
+
display: block !important;
|
1895 |
+
position: static !important;
|
1896 |
+
top: auto !important;
|
1897 |
+
left: auto !important;
|
1898 |
+
font-size: 20px !important;
|
1899 |
+
height: 20px !important;
|
1900 |
+
line-height: 20px !important;
|
1901 |
}
|
1902 |
|
1903 |
.ppress-default-profile.ppressui500.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-meta {
|
1904 |
+
margin-top: 0 !important;
|
1905 |
}
|
1906 |
|
1907 |
/** 800px and below **/
|
1908 |
.ppress-default-profile.ppressui800 .ppress-dpf-profile-nav {
|
1909 |
+
padding: 0 !important;
|
1910 |
}
|
1911 |
|
1912 |
.ppress-default-profile.ppressui800 .ppress-dpf-profile-nav-item a {
|
1913 |
+
padding: 10px 20px !important;
|
1914 |
+
margin-left: 0 !important;
|
1915 |
+
border-radius: 0 !important;
|
1916 |
}
|
1917 |
|
1918 |
.ppress-default-profile.ppressui800 .ppress-dpf-profile-photo {
|
1919 |
+
width: 150px !important;
|
1920 |
}
|
1921 |
|
1922 |
.ppress-default-profile.ppressui800 .ppress-dpf-profile-photo {
|
1923 |
+
width: 140px !important;
|
1924 |
+
height: 140px !important;
|
1925 |
+
top: -70px !important;
|
1926 |
}
|
1927 |
|
1928 |
.ppress-default-profile.ppressui800.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-photo {
|
1929 |
+
top: auto !important;
|
|
|
|
|
|
|
|
|
1930 |
}
|
1931 |
|
1932 |
.ppress-default-profile.ppressui800 .ppress-dpf-header .ppress-dpf-meta-text {
|
1933 |
+
padding-top: 10px !important;
|
1934 |
}
|
1935 |
|
1936 |
.ppress-default-profile.ppressui800 .ppress-dpf-nav-title {
|
1937 |
+
font-size: 12px !important;
|
1938 |
}
|
1939 |
|
1940 |
.ppress-default-profile.ppressui800 .ppress-dpf-profile-nav-item .ppress-material-icons {
|
1941 |
+
display: block !important;
|
1942 |
+
position: static !important;
|
1943 |
+
top: auto !important;
|
1944 |
+
left: auto !important;
|
1945 |
+
font-size: 20px !important;
|
1946 |
+
height: 20px !important;
|
1947 |
+
line-height: 20px !important;
|
1948 |
}
|
1949 |
|
1950 |
/** 960px and below **/
|
1951 |
.ppress-default-profile.ppressui960 .ppress-dpf-profile-photo {
|
1952 |
+
width: 200px !important;
|
1953 |
}
|
1954 |
|
1955 |
.ppress-default-profile.ppressui960 .ppress-dpf-profile-photo {
|
1956 |
+
width: 140px !important;
|
1957 |
+
height: 140px !important;
|
1958 |
+
top: -70px !important;
|
1959 |
}
|
1960 |
|
1961 |
.ppress-default-profile.ppressui960.ppdf-nocover .ppress-dpf-profile-meta {
|
1962 |
+
margin-top: -50px !important;
|
1963 |
}
|
1964 |
|
1965 |
/*****************************************/
|
1966 |
|
1967 |
.ppress-default-profile.ppressui340 .ppress-dpf-profile-nav-item a,
|
1968 |
.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav-item a {
|
1969 |
+
padding: 5px 11px !important;
|
1970 |
+
font-size: 12px !important;
|
1971 |
}
|
1972 |
|
1973 |
.ppress-default-profile.ppressui340 .ppress-dpf-profile-nav-item .ppress-material-icons,
|
1974 |
.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav-item .ppress-material-icons {
|
1975 |
+
font-size: 14px !important;
|
1976 |
}
|
1977 |
|
1978 |
.ppress-default-profile.ppressui340 span.ppress-dpf-nav-title,
|
1979 |
.ppress-default-profile.ppressui500 span.ppress-dpf-nav-title {
|
1980 |
+
font-size: 10px !important;
|
1981 |
}
|
1982 |
|
1983 |
/***************** Post list CSS **************/
|
assets/css/frontend.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
[class*=hint--]{position:relative;display:inline-block}[class*=hint--]:after,[class*=hint--]:before{position:absolute;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);visibility:hidden;opacity:0;z-index:1000000;pointer-events:none;transition:.3s ease;transition-delay:0s}[class*=hint--]:before{content:'';background:0 0;border:6px solid transparent;z-index:1000001}[class*=hint--]:hover:after,[class*=hint--]:hover:before{visibility:visible;opacity:1;transition-delay:.1s}[class*=hint--]:after{background:#383838;color:#fff;padding:8px 10px;font-size:12px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;line-height:12px;white-space:nowrap;text-shadow:0 -1px 0 #000;box-shadow:4px 4px 8px rgba(0,0,0,.3)}[class*=hint--][aria-label]:after{content:attr(aria-label)}[class*=hint--][data-hint]:after{content:attr(data-hint)}[aria-label='']:after,[aria-label='']:before,[data-hint='']:after,[data-hint='']:before{display:none!important}.hint--top-left:before,.hint--top-right:before,.hint--top:before{border-top-color:#383838}.hint--bottom-left:before,.hint--bottom-right:before,.hint--bottom:before{border-bottom-color:#383838}.hint--top:after,.hint--top:before{bottom:100%;left:50%}.hint--top:before{margin-bottom:-11px;left:calc(50% - 6px)}.hint--top:after{-webkit-transform:translateX(-50%);transform:translateX(-50%)}.hint--top:hover:before{-webkit-transform:translateY(-8px);transform:translateY(-8px)}.hint--top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}.hint--bottom:after,.hint--bottom:before{top:100%;left:50%}.hint--bottom:before{margin-top:-11px;left:calc(50% - 6px)}.hint--bottom:after{-webkit-transform:translateX(-50%);transform:translateX(-50%)}.hint--bottom:hover:before{-webkit-transform:translateY(8px);transform:translateY(8px)}.hint--bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}.hint--right:before{border-right-color:#383838;margin-left:-11px;margin-bottom:-6px}.hint--right:after{margin-bottom:-14px}.hint--right:after,.hint--right:before{left:100%;bottom:50%}.hint--right:hover:after,.hint--right:hover:before{-webkit-transform:translateX(8px);transform:translateX(8px)}.hint--left:before{border-left-color:#383838;margin-right:-11px;margin-bottom:-6px}.hint--left:after{margin-bottom:-14px}.hint--left:after,.hint--left:before{right:100%;bottom:50%}.hint--left:hover:after,.hint--left:hover:before{-webkit-transform:translateX(-8px);transform:translateX(-8px)}.hint--top-left:after,.hint--top-left:before{bottom:100%;left:50%}.hint--top-left:before{margin-bottom:-11px;left:calc(50% - 6px)}.hint--top-left:after{-webkit-transform:translateX(-100%);transform:translateX(-100%);margin-left:12px}.hint--top-left:hover:before{-webkit-transform:translateY(-8px);transform:translateY(-8px)}.hint--top-left:hover:after{-webkit-transform:translateX(-100%) translateY(-8px);transform:translateX(-100%) translateY(-8px)}.hint--top-right:after,.hint--top-right:before{bottom:100%;left:50%}.hint--top-right:before{margin-bottom:-11px;left:calc(50% - 6px)}.hint--top-right:after{-webkit-transform:translateX(0);transform:translateX(0);margin-left:-12px}.hint--top-right:hover:after,.hint--top-right:hover:before{-webkit-transform:translateY(-8px);transform:translateY(-8px)}.hint--bottom-left:after,.hint--bottom-left:before{top:100%;left:50%}.hint--bottom-left:before{margin-top:-11px;left:calc(50% - 6px)}.hint--bottom-left:after{-webkit-transform:translateX(-100%);transform:translateX(-100%);margin-left:12px}.hint--bottom-left:hover:before{-webkit-transform:translateY(8px);transform:translateY(8px)}.hint--bottom-left:hover:after{-webkit-transform:translateX(-100%) translateY(8px);transform:translateX(-100%) translateY(8px)}.hint--bottom-right:after,.hint--bottom-right:before{top:100%;left:50%}.hint--bottom-right:before{margin-top:-11px;left:calc(50% - 6px)}.hint--bottom-right:after{-webkit-transform:translateX(0);transform:translateX(0);margin-left:-12px}.hint--bottom-right:hover:after,.hint--bottom-right:hover:before{-webkit-transform:translateY(8px);transform:translateY(8px)}.hint--large:after,.hint--medium:after,.hint--small:after{white-space:normal;line-height:1.4em;word-wrap:break-word}.hint--small:after{width:80px}.hint--medium:after{width:150px}.hint--large:after{width:300px}.hint--error:after{background-color:#b34e4d;text-shadow:0 -1px 0 #592726}.hint--error.hint--top-left:before,.hint--error.hint--top-right:before,.hint--error.hint--top:before{border-top-color:#b34e4d}.hint--error.hint--bottom-left:before,.hint--error.hint--bottom-right:before,.hint--error.hint--bottom:before{border-bottom-color:#b34e4d}.hint--error.hint--left:before{border-left-color:#b34e4d}.hint--error.hint--right:before{border-right-color:#b34e4d}.hint--warning:after{background-color:#c09854;text-shadow:0 -1px 0 #6c5328}.hint--warning.hint--top-left:before,.hint--warning.hint--top-right:before,.hint--warning.hint--top:before{border-top-color:#c09854}.hint--warning.hint--bottom-left:before,.hint--warning.hint--bottom-right:before,.hint--warning.hint--bottom:before{border-bottom-color:#c09854}.hint--warning.hint--left:before{border-left-color:#c09854}.hint--warning.hint--right:before{border-right-color:#c09854}.hint--info:after{background-color:#3986ac;text-shadow:0 -1px 0 #1a3c4d}.hint--info.hint--top-left:before,.hint--info.hint--top-right:before,.hint--info.hint--top:before{border-top-color:#3986ac}.hint--info.hint--bottom-left:before,.hint--info.hint--bottom-right:before,.hint--info.hint--bottom:before{border-bottom-color:#3986ac}.hint--info.hint--left:before{border-left-color:#3986ac}.hint--info.hint--right:before{border-right-color:#3986ac}.hint--success:after{background-color:#458746;text-shadow:0 -1px 0 #1a321a}.hint--success.hint--top-left:before,.hint--success.hint--top-right:before,.hint--success.hint--top:before{border-top-color:#458746}.hint--success.hint--bottom-left:before,.hint--success.hint--bottom-right:before,.hint--success.hint--bottom:before{border-bottom-color:#458746}.hint--success.hint--left:before{border-left-color:#458746}.hint--success.hint--right:before{border-right-color:#458746}.hint--always:after,.hint--always:before{opacity:1;visibility:visible}.hint--always.hint--top:before{-webkit-transform:translateY(-8px);transform:translateY(-8px)}.hint--always.hint--top:after{-webkit-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}.hint--always.hint--top-left:before{-webkit-transform:translateY(-8px);transform:translateY(-8px)}.hint--always.hint--top-left:after{-webkit-transform:translateX(-100%) translateY(-8px);transform:translateX(-100%) translateY(-8px)}.hint--always.hint--top-right:after,.hint--always.hint--top-right:before{-webkit-transform:translateY(-8px);transform:translateY(-8px)}.hint--always.hint--bottom:before{-webkit-transform:translateY(8px);transform:translateY(8px)}.hint--always.hint--bottom:after{-webkit-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}.hint--always.hint--bottom-left:before{-webkit-transform:translateY(8px);transform:translateY(8px)}.hint--always.hint--bottom-left:after{-webkit-transform:translateX(-100%) translateY(8px);transform:translateX(-100%) translateY(8px)}.hint--always.hint--bottom-right:after,.hint--always.hint--bottom-right:before{-webkit-transform:translateY(8px);transform:translateY(8px)}.hint--always.hint--left:after,.hint--always.hint--left:before{-webkit-transform:translateX(-8px);transform:translateX(-8px)}.hint--always.hint--right:after,.hint--always.hint--right:before{-webkit-transform:translateX(8px);transform:translateX(8px)}.hint--rounded:after{border-radius:4px}.hint--no-animate:after,.hint--no-animate:before{transition-duration:0s}.hint--bounce:after,.hint--bounce:before{transition:opacity .3s ease,visibility .3s ease,-webkit-transform .3s cubic-bezier(.71,1.7,.77,1.24);transition:opacity .3s ease,visibility .3s ease,transform .3s cubic-bezier(.71,1.7,.77,1.24);transition:opacity .3s ease,visibility .3s ease,transform .3s cubic-bezier(.71,1.7,.77,1.24),-webkit-transform .3s cubic-bezier(.71,1.7,.77,1.24)}.hint--no-shadow:after,.hint--no-shadow:before{text-shadow:initial;box-shadow:initial}@font-face{font-family:'Material Icons';font-style:normal;font-weight:400;src:url(./material-icons/MaterialIcons-Regular.eot);src:local('Material Icons'),local('MaterialIcons-Regular'),url(./material-icons/MaterialIcons-Regular.woff2) format('woff2'),url(./material-icons/MaterialIcons-Regular.woff) format('woff'),url(./material-icons/MaterialIcons-Regular.ttf) format('truetype')}#profilepress-myaccount-wrapper .ppmyac-icons,.pp-form-field-wrap .pp-form-material-icons,.ppress-material-icons{font-family:'Material Icons'!important;font-weight:400;font-style:normal;font-size:20px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:'liga'}.pp-tab-widget-avatar img{display:block;border-radius:50%;height:190px;margin:0 auto 10px!important;padding:2px;text-align:center;width:190px;float:none!important}.pp-user-panel{border-radius:6px;text-align:center}.pp-user-panel-title{font-size:20px;margin:0}.pp-user-panel p{font-size:15px;margin-bottom:23px}.pp-tabbed-btn{border:0;font-size:15px;font-weight:400;line-height:1.4;border-radius:4px;padding:10px 15px;-webkit-font-smoothing:subpixel-antialiased;transition:border .25s linear,color .25s linear,background-color .25s linear}.pp-tabbed-btn-inverse{color:#fff!important;background-color:#34495e}.pp-password-reset-handler-wrap .pp-reset-password-form{padding:40px;max-width:500px;margin-top:5px;margin-bottom:5px}.pp-password-reset-handler-wrap .pp-reset-password-form h3{color:#444;font-weight:300;margin:0 auto 40px}.pp-password-reset-handler-wrap .pp-reset-password-form label{color:#444;font-size:15px}.pp-password-reset-handler-wrap .pp-reset-password-form label .req{margin:2px;color:red}.pp-password-reset-handler-wrap .pp-reset-password-form label.active .req{opacity:0}.pp-password-reset-handler-wrap .pp-reset-password-form input{font-size:22px;display:block;width:100%;box-sizing:border-box;height:auto;padding:5px 10px;background:0 0;margin-bottom:40px;border:1px solid #a0b3b0;border-radius:0;transition:border-color .25s ease,box-shadow .25s ease}.pp-password-reset-handler-wrap .pp-reset-password-form input:focus{outline:0;border-color:#1ab188}.pp-password-reset-handler-wrap .pp-reset-password-form .pp-reset-button{border:0;outline:0;border-radius:0;padding:15px 0;font-size:20px;font-weight:600;text-transform:uppercase;letter-spacing:.1em;background:#1ab188;color:#fff;transition:all .5s ease;-webkit-appearance:none;text-shadow:none;box-shadow:none}.pp-password-reset-handler-wrap .pp-reset-password-form .pp-reset-button:focus,.pp-password-reset-handler-wrap .pp-reset-password-form .pp-reset-button:hover{background:#179b77}.pp-password-reset-handler-wrap .pp-reset-password-form .pp-reset-button-block{display:block;width:100%}.pp-password-reset-handler-wrap .profilepress-reset-status{margin-left:40px;max-width:420px}#pp-pass-strength-result{background-color:#eee;border:1px solid #ddd;color:#23282d;padding:3px 5px;text-align:center;width:100%;box-sizing:border-box}#pp-pass-strength-result.short{background-color:#f1adad;border-color:#e35b5b;opacity:1}#pp-pass-strength-result.bad{background-color:#fbc5a9;border-color:#f78b53;opacity:1}#pp-pass-strength-result.good{background-color:#ffe399;border-color:#ffc733;opacity:1}#pp-pass-strength-result.strong{background-color:#c1e1b9;border-color:#83c373;opacity:1}.pp-form-wrapper .pp-form-label-wrap .pp-form-required-label{color:red;font-weight:400}.pp-form-wrapper input[type=checkbox],.pp-form-wrapper input[type=radio]{cursor:pointer}.pp-form-wrapper p{margin:0 0 5px!important;padding:0!important}.pp-form-wrapper input[type=datetime],.pp-form-wrapper input[type=email],.pp-form-wrapper input[type=number],.pp-form-wrapper input[type=password],.pp-form-wrapper input[type=search],.pp-form-wrapper input[type=tel],.pp-form-wrapper input[type=text],.pp-form-wrapper input[type=url],.pp-form-wrapper select,.pp-form-wrapper textarea{-webkit-appearance:none;width:100%;background:#fff;border:1px solid #dedee5;padding:13px 15px;outline:0;line-height:1}.pp-form-wrapper select{background-image:url(../images/frontend/arrow-down.png)!important;background-position:right 20px center!important;background-repeat:no-repeat!important;background-size:10px auto!important;-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important}.pp-form-wrapper .pp-form-label-wrap{margin:0 0 4px;padding:0}.pp-form-wrapper .pp-form-label{font-size:14px;text-transform:none;text-align:left;font-weight:400;font-style:normal;float:none;line-height:1.3;margin:0;padding:0;width:auto;display:inline;cursor:pointer}.pp-form-wrapper .pp-checkbox-wrap,.pp-form-wrapper .pp-radio-wrap{display:block;text-align:left;line-height:normal;margin:5px 0;padding:0}.pp-form-wrapper .pp-checkbox-wrap label,.pp-form-wrapper .pp-radio-wrap label{margin-left:5px}.pp-form-wrapper input[type=checkbox],.pp-form-wrapper input[type=radio]{border:1px solid #ccc;background-color:#fff;width:14px!important;height:14px!important;display:inline-block;vertical-align:baseline}.pp-form-wrapper .ppress-pf-profile-connect{padding:5px 0 10px}.pp-form-wrapper a.ppress-pf-social-icon{width:100%;height:100%;display:inline}.pp-form-wrapper .ppress-pf-social-icon svg{vertical-align:middle;width:40px;height:40px}.pp-form-wrapper .ppress-pf-social-icon.dpf-github svg,.pp-form-wrapper .ppress-pf-social-icon.dpf-instagram svg{padding:3px}a.pp-button-social-login:focus{outline-color:transparent}a.pp-button-social-login:focus .ppsc,a.pp-button-social-login:hover .ppsc{background-color:rgba(255,255,255,.75)}a.pp-button-social-login:visited{color:#fff}a.pp-button-social-login,a.pp-button-social-login .ppsc{display:inline-block;font-size:100%;height:2.5em;padding:0}a.pp-button-social-login{position:relative;vertical-align:middle;line-height:2.5em;font-family:inherit;font-weight:700;overflow:hidden;white-space:nowrap;border:1px solid #333;color:#fff!important;background:#333;margin:6px 0;border-radius:2px;box-sizing:content-box;cursor:pointer;box-shadow:0 1px 2px rgba(0,0,0,.1);text-decoration:none!important;min-width:220px}a.pp-button-social-login .ppsc{font-style:normal;font-weight:400;text-decoration:none;text-transform:none;vertical-align:top;text-align:center;width:2.5em;background-color:#fff;background-repeat:no-repeat;background-position:50%;background-size:1.8em 1.8em;border-top-left-radius:1px;border-bottom-left-radius:1px;-moz-font-smoothing:antialiased;-webkit-font-smoothing:antialiased;font-smoothing:antialiased;position:absolute;left:0;margin:0}a.pp-button-social-login span.ppsc-text{margin-left:40px;padding:.5em;color:#fff!important}a.pp-button-social-login .ppsc-google{background-image:url(../images/social-login/google.svg)}a.pp-button-social-login.pp-button-social-login-google{background:#4285f4;border-color:#4285f4}a.pp-button-social-login.pp-button-social-login-facebook{background:#3b5998;border-color:#3b5998}a.pp-button-social-login.pp-button-social-login-twitter{background:#55acee;border-color:#55acee}a.pp-button-social-login.pp-button-social-login-linkedin{background:#0077b5;border-color:#0077b5}a.pp-button-social-login.pp-button-social-login-vk{background:#4a76a8;border-color:#4a76a8}a.pp-button-social-login.pp-button-social-login-github{background:#24292e;border-color:#24292e}a.pp-button-social-login .ppsc-vk{background-image:url(../images/social-login/vk-fa.svg)}a.pp-button-social-login .ppsc-facebook{background-image:url(../images/social-login/facebook.svg)}a.pp-button-social-login .ppsc-twitter{background-image:url(../images/social-login/twitter.svg)}a.pp-button-social-login .ppsc-linkedin{background-image:url(../images/social-login/linkedin.svg)}a.pp-button-social-login .ppsc-github{background-image:url(../images/social-login/github-fa.svg)}#profilepress-myaccount-wrapper,#profilepress-myaccount-wrapper *,#profilepress-myaccount-wrapper ::after,#profilepress-myaccount-wrapper ::before,.pp-form-container *,.pp-form-container .pp-form-wrapper,.pp-form-container .pp-form-wrapper *{box-sizing:border-box}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material .pp-form-field-wrap span.select2-selection.select2-selection--multiple,html .pp-form-container .select2 input.select2-search__field{border:0!important}.pp-form-container form input[type=submit]{-webkit-appearance:none!important;cursor:pointer;text-shadow:none}.pp-form-container form{margin:0;padding:0;background-color:transparent}.woocommerce .woocommerce-MyAccount-content .pp-form-container{margin-right:0!important;margin-left:0!important}.pp-form-container form input,.pp-form-container form select,.pp-form-container form textarea{outline:0;background-image:none;height:auto;float:none;position:static;box-shadow:none;text-shadow:none;text-transform:none;text-decoration:none;resize:vertical}.pp-form-container form p{margin:0 0 .5em}.pp-form-container form input[type=submit]:focus{outline:0}.pp-form-container .pp-user-avatar{border-radius:50%!important;display:block!important;margin:0 auto 10px!important;text-align:center!important}.pp-form-container img.pp-user-cover-image{width:100%!important;height:auto!important}#profilepress-myaccount-wrapper .profilepress-myaccount-content input[type=checkbox],#profilepress-myaccount-wrapper .profilepress-myaccount-content input[type=radio],.pp-form-container .pp-form-wrapper .pp-form-field-wrap input[type=checkbox],.pp-form-container .pp-form-wrapper .pp-form-field-wrap input[type=radio]{border:1px solid #7e8993!important;border-radius:4px!important;background:#fff!important;color:#555!important;clear:none!important;cursor:pointer!important;display:inline-block!important;line-height:0!important;margin:0!important;outline:0!important;padding:0!important;text-align:center!important;vertical-align:middle!important;-webkit-appearance:none!important;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)!important;transition:.05s border-color ease-in-out!important;width:16px!important;height:16px!important}#profilepress-myaccount-wrapper .profilepress-myaccount-content input[type=radio],.pp-form-container .pp-form-wrapper .pp-form-field-wrap input[type=checkbox],.pp-form-container .pp-form-wrapper .pp-form-field-wrap input[type=radio]{border-radius:50%!important}.pp-form-container .pp-form-wrapper .pp-form-field-wrap input[type=checkbox],.pp-form-container .pp-form-wrapper .pp-form-field-wrap input[type=radio]{border-radius:4px!important}.pp-form-container .pp-form-wrapper .pp-form-field-wrap input[type=radio]{border-radius:50%!important}#profilepress-myaccount-wrapper .profilepress-myaccount-content input[type=checkbox]:checked::before,.pp-form-container .pp-form-wrapper .pp-form-field-wrap input[type=checkbox]:checked::before{content:url(data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M14.83%204.89l1.34.94-5.81%208.38H9.02L5.78%209.67l1.34-1.25%202.57%202.4z%27%20fill%3D%27%23000000%27%2F%3E%3C%2Fsvg%3E)!important;margin:-3px 0 0 -4px!important;width:20px!important;height:20px!important;position:static}#profilepress-myaccount-wrapper .profilepress-myaccount-content input[type=radio]:checked::before,.pp-form-container .pp-form-wrapper .pp-form-field-wrap input[type=radio]:checked::before{content:"";border-radius:50%!important;margin:3px!important;background-color:#000!important;line-height:1.14285714!important;width:8px!important;height:8px!important}#profilepress-myaccount-wrapper .profilepress-myaccount-content input[type=checkbox]:checked::before,#profilepress-myaccount-wrapper .profilepress-myaccount-content input[type=radio]:checked::before,.pp-form-container .pp-form-wrapper .pp-form-field-wrap input[type=checkbox]:checked::before,.pp-form-container .pp-form-wrapper .pp-form-field-wrap input[type=radio]:checked::before{float:left!important;display:inline-block!important;vertical-align:middle!important;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.pp-form-container .pp-form-wrapper.ppBuildScratch,.pp-form-container .pp-form-wrapper.ppBuildScratch *{font-family:'Merriweather',sans-serif}.pp-form-container .pp-form-wrapper.ppBuildScratch .ppbs-headline{font-weight:700;font-size:20px;margin-bottom:1em;margin-top:0;text-align:center;margin-right:6.387%}.pp-form-container .pp-form-wrapper.ppBuildScratch h1,.pp-form-container .pp-form-wrapper.ppBuildScratch h2,.pp-form-container .pp-form-wrapper.ppBuildScratch h3,.pp-form-container .pp-form-wrapper.ppBuildScratch h4{font-weight:700;font-size:20px;margin-bottom:1em;margin-top:1em}.pp-form-container .pp-form-wrapper.ppBuildScratch input:disabled{opacity:.5}.pp-form-container .pp-form-wrapper.ppBuildScratch{max-width:100%;width:100%;padding:6% 0 6% 6%;background:#fff;color:#222;font-size:14px;position:relative;box-shadow:0 0 0 .5px rgba(0,20,40,.1),0 2px 8px 0 rgba(50,55,90,.2);border-radius:3px;margin:0 auto}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppf-remove-frame{box-shadow:none;border-radius:0}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap{padding:0 6.387% 4% 0;display:inline-block;width:100%;vertical-align:top}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-submit-button-wrap{display:inline-block;width:100%;vertical-align:top;padding:0 6.387% 0 0}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap .pp-form-label-wrap{margin:0 0 5px;padding:0}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fda-reveal .pp-form-field-description,.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fda-reveal .ppress-hint-tooltip,.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fda-standard .ppress-hint-tooltip,.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fda-tooltip .pp-form-field-description{display:none}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fda-reveal .pp-form-field-input-textarea-wrap .pp-form-field:focus~.pp-form-field-description{display:block}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fda-tooltip .ppress-hint-tooltip{display:inline;font-weight:400}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fda-tooltip .ppress-hint-tooltip .pp-form-material-icons{position:relative;margin:0;padding:0;font-size:110%;display:inline;vertical-align:top}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fld-inside{position:relative}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fld-inside .pp-form-label-wrap{position:absolute;top:5px;left:15px;z-index:2}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material .pp-form-field-wrap.fld-inside .pp-form-label-wrap{left:0!important}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fld-inside .pp-form-field-input-textarea-wrap .pp-form-field{padding-top:18px;padding-bottom:2px}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-medium .pp-form-field-wrap.fld-inside .pp-form-field-input-textarea-wrap .pp-form-field{padding-top:23px;padding-bottom:7px}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-large .pp-form-field-wrap.fld-inside .pp-form-field-input-textarea-wrap .pp-form-field{padding-top:30px;padding-bottom:10px}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fw-half{width:50%}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fw-third{width:33.3333333333%}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap input:not([type=radio]):not([type=checkbox]),.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap select,.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap textarea{border:1px solid #dbdbdb;font-size:14px;padding:10px 15px;transition:all .35s;background:#fff;color:#69717a;width:100%;border-radius:0;line-height:1.3;min-height:40px;display:inline-block;margin:0}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap textarea{height:100px;overflow:auto}.pp-form-field-wrap .pp-form-material-icons{width:24px;height:24px;position:absolute;right:0;top:0;cursor:text;margin:8px 12px 0 0}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfia-right .pp-form-field-wrap.field-has-icon input,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfia-right .pp-form-field-wrap.field-has-icon textarea{padding-right:40px}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfia-left .pp-form-field-wrap.field-has-icon input,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfia-left .pp-form-field-wrap.field-has-icon textarea{padding-left:40px}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material.ppfia-left .pp-form-field-wrap.field-has-icon input,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material.ppfia-left .pp-form-field-wrap.field-has-icon textarea{padding-left:30px!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material.ppfia-right .pp-form-field-wrap.field-has-icon input,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material.ppfia-right .pp-form-field-wrap.field-has-icon textarea{padding-right:30px!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfia-left .pp-form-field-wrap .pp-form-material-icons{left:0;margin-left:12px}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material.ppfia-left .pp-form-field-wrap .pp-form-material-icons{left:0!important;margin-left:0!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material.ppfia-right .pp-form-field-wrap .pp-form-material-icons{margin-right:0!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-medium .pp-form-field-wrap .pp-form-material-icons{margin-top:10px}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-large .pp-form-field-wrap .pp-form-material-icons{margin-top:18px}.pp-form-container .pp-form-wrapper.ppBuildScratch .has-password-visibility-icon .pp-form-material-icons{cursor:pointer}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-pill .pp-form-field-wrap input:not([type=radio]):not([type=checkbox]),.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-pill .pp-form-field-wrap select,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-pill .pp-form-field-wrap textarea{border-radius:25px!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-round .pp-form-field-wrap input:not([type=radio]):not([type=checkbox]),.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-round .pp-form-field-wrap select,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-round .pp-form-field-wrap textarea{border-radius:6px!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material .pp-form-field-wrap .select2.select2-container,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material .pp-form-field-wrap input:not([type=radio]):not([type=checkbox]),.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material .pp-form-field-wrap select,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material .pp-form-field-wrap textarea{border:0!important;border-bottom:1px solid #dbdbdb!important;padding-left:0!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material .pp-form-field-wrap input[type=text]:focus,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material .pp-form-field-wrap select:focus,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material .pp-form-field-wrap textarea:focus{border-top:0!important;border-right:0!important;border-left:0!important;box-shadow:none!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-flat .pp-form-field-wrap .select2-selection,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-flat .pp-form-field-wrap input:not([type=radio]):not([type=checkbox]),.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-flat .pp-form-field-wrap select,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-flat .pp-form-field-wrap textarea{border:0!important;background:#f7f7f7!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-medium .pp-form-field-wrap input,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-medium .pp-form-field-wrap select{padding-top:15px;padding-bottom:15px}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-medium .pp-form-field-wrap textarea{height:150px}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-large .pp-form-field-wrap input,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-large .pp-form-field-wrap select{padding-top:20px;padding-bottom:20px}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-large .pp-form-field-wrap textarea{height:200px}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap input[type=text]:focus,.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap select:focus,.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap textarea:focus{border:1px solid #999}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap .pp-form-label-wrap .pp-form-label,.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap .ppform-remember-label{font-style:normal;background-color:transparent;display:block;font-weight:700;font-size:14px;float:none;line-height:1.3;margin:0;padding:0;color:#444}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap .ppform-remember-label{display:inline-block}.pp-field-user-avatar-picture-wrap .pp-profile-avatar-overlay ins,.pp-field-user-cover-image-wrap .pp-cover-image-overlay ins,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppf-hide-asterisk .pp-form-required-label{display:none}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-submit-button-wrap input[type=submit]{background:#000;border:0;color:#fff;font-weight:700;font-size:16px;line-height:1;padding:15px 10px;transition:.15s ease-in-out;width:auto;min-width:110px;text-align:center}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-large .pp-form-submit-button-wrap input[type=submit],.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-medium .pp-form-submit-button-wrap input[type=submit]{padding-top:20px;padding-bottom:20px}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppsbl-pill .pp-form-submit-button-wrap input[type=submit]{border-radius:25px!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppsbl-round .pp-form-submit-button-wrap input[type=submit]{border-radius:6px!important}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-submit-button-wrap input[type=submit]:focus,.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-submit-button-wrap input[type=submit]:hover{background-color:#ededed;color:#000;text-decoration:none}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-checkbox-wrap,.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-radio-wrap{margin:0 0 5px}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-checkboxes-container,.ppressmd-new-dropdown ul{margin:0;padding:0}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-checkbox-wrap:last-of-type,.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-radio-wrap:last-of-type{margin-bottom:0}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-description{font-size:12px;font-weight:400;color:#666;line-height:1.3;text-align:left;margin:4px 0 0}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppsbw-wide .pp-form-submit-button-wrap input[type=submit]{width:100%}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppsbw-full-width .pp-form-submit-button-wrap{margin-top:4%;margin-bottom:4%}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppsbw-full-width .pp-form-submit-button-wrap input[type=submit]{width:100%!important;position:absolute!important;bottom:0!important;right:0!important;left:0!important;border-top-right-radius:0!important;border-top-left-radius:0!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppsbw-full-width.ppsbl-pill{border-bottom-right-radius:25px!important;border-bottom-left-radius:25px!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppsbw-full-width.ppsbl-round{border-bottom-right-radius:6px!important;border-bottom-left-radius:6px!important}.pp-form-container .pp-form-wrapper.ppBuildScratch a.pp-button-social-login:last-of-type{margin-bottom:1.5em!important}#profilepress-myaccount-wrapper{font-size:16px}#profilepress-myaccount-wrapper .profilepress-myaccount-row{display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}#profilepress-myaccount-wrapper .profilepress-myaccount-nav{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}#profilepress-myaccount-wrapper .ppmyac-dashboard-item{text-decoration:none!important;position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125);width:100%;text-align:inherit;box-shadow:none}#profilepress-myaccount-wrapper .ppmyac-dashboard-item.isactive{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}#profilepress-myaccount-wrapper .ppmyac-dashboard-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}#profilepress-myaccount-wrapper .ppmyac-dashboard-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}#profilepress-myaccount-wrapper .ppmyac-icons{margin-right:.5rem;vertical-align:text-bottom}#profilepress-myaccount-wrapper .profilepress-myaccount-col-sm-3{position:relative;width:100%;padding-right:15px;padding-left:15px}@media (min-width:576px){#profilepress-myaccount-wrapper .profilepress-myaccount-col-sm-3{-webkit-flex:0 0 25%;flex:0 0 25%;max-width:25%}}#profilepress-myaccount-wrapper .profilepress-myaccount-content{position:relative;width:100%;padding-top:30px;padding-right:15px;padding-left:15px}@media (min-width:576px){#profilepress-myaccount-wrapper .profilepress-myaccount-content{-webkit-flex:0 0 75%;flex:0 0 75%;max-width:75%}}#profilepress-myaccount-wrapper .profilepress-myaccount-avatar-wrap{text-align:center;margin-bottom:20px}#profilepress-myaccount-wrapper .profilepress-myaccount-avatar-wrap .profilepress-myaccount-avatar img.pp-user-avatar{margin:0!important;position:static!important;float:none!important;display:inline-block;border-radius:999px}#profilepress-myaccount-wrapper .profilepress-myaccount-nav a:focus{outline:0;text-shadow:none;box-shadow:none}#profilepress-myaccount-wrapper .profilepress-myaccount-content h2{margin-top:0!important;margin-bottom:1.8rem!important;font-weight:700!important;line-height:1.2!important;font-size:2rem!important}#profilepress-myaccount-wrapper .profilepress-myaccount-content h3{margin-top:0!important;line-height:1.2!important;font-weight:500!important;font-size:1.2rem!important;margin-bottom:1rem!important}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-submenus-wrap{margin-bottom:2rem}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-submenu-wrap{display:inline;padding-right:1rem}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-submenu-item{color:inherit;padding:0 0 10px}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-submenu-item.ppsubmenu-active{border-bottom:3px solid #6c757d}.profilepress-myaccount-alert,.profilepress-myaccount-edit-profile .profilepress-edit-profile-status{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.profilepress-myaccount-alert.pp-alert-danger,.profilepress-myaccount-edit-profile .profilepress-edit-profile-status{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.profilepress-myaccount-alert.pp-alert-success,.profilepress-myaccount-edit-profile .profilepress-edit-profile-status.success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-field{margin-top:.5rem;margin-bottom:1rem}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-cover-image-empty{min-height:250px;background-color:#eee}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-delete-cover-image-wrap{padding:.75rem;background-color:#fff;border:1px solid rgba(0,0,0,.125);margin-bottom:0;border-radius:.25rem}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-delete-cover-image-wrap img{width:100%;height:auto}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-email-notifications-wrap .profilepress-myaccount-form-field{margin-top:.5rem;margin-bottom:.5rem}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-email-notifications-wrap{margin-bottom:2rem}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-field label{margin-bottom:.2rem;font-weight:500;display:block}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-field input[type=checkbox]+label,#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-field input[type=radio]+label{display:inline}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap .profilepress-myaccount-form-control:not([type=radio]):not([type=checkbox]),#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap input:not([type=radio]):not([type=checkbox]):not([type=submit]),#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap select,#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap textarea{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;overflow:visible;box-shadow:inset 0 1px 1px rgba(0,0,0,.125)}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap textarea{height:auto!important;min-height:100px!important;resize:vertical!important}#profilepress-myaccount-wrapper .profilepress-myaccount-content input.profilepress-myaccount-form-control:focus,#profilepress-myaccount-wrapper .profilepress-myaccount-content select.profilepress-myaccount-form-control:focus,#profilepress-myaccount-wrapper .profilepress-myaccount-content textarea.profilepress-myaccount-form-control:focus{background-color:#fff;border-color:#bbb;outline:0;box-shadow:none}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap .profilepress-myaccount-form-field input[type=submit]{display:inline-block;cursor:pointer;width:auto}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap .profilepress-myaccount-form-field input[type=submit]:hover{color:#fff;background-color:#0069d9;border-color:#0062cc;text-decoration:none}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap .ppmyac-custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap .ppmyac-custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap .ppmyac-custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap .ppmyac-custom-file-label::after{position:absolute;top:0;right:0;box-sizing:border-box;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap .ppmyac-custom-file-input~.ppmyac-custom-file-label[data-browse]::after{content:attr(data-browse)}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-field .pp-checkbox-wrap label.pp-form-label,#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-field .pp-radio-wrap label.pp-form-label{display:inline-block;margin:0 0 0 .3819820591em}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-delete-avatar-wrap{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;margin:1em 0 0;padding-left:0}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-delete-avatar{position:relative;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125);margin-bottom:0;border-radius:.25rem;-webkit-justify-content:space-between!important;justify-content:space-between!important;display:-webkit-flex!important;display:flex!important}#profilepress-myaccount-wrapper .profilepress-myaccount-content .pp-user-avatar{width:70px;height:70px;min-height:100%;-o-object-fit:cover;object-fit:cover;-o-object-position:center;object-position:center;border-radius:50%}#profilepress-myaccount-wrapper .profilepress-myaccount-content .ppmyac-remove-avatar{margin-bottom:.5rem!important;margin-top:.5rem!important;padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem;color:#fff;height:35px;background-color:#6c757d;display:inline-block;font-weight:400;text-align:center;vertical-align:middle;text-shadow:none;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid #6c757d;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-delete-cover-image-wrap .ppmyac-remove-avatar{margin-top:.75rem!important;margin-bottom:0!important}#profilepress-myaccount-wrapper .profilepress-myaccount-content input.profilepress-myaccount-form-control::-webkit-file-upload-button{background:#fff;border-radius:6px;font-size:14px;border:1px solid #ddd}#profilepress-myaccount-wrapper .profilepress-myaccount-content .select2-selection{border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;box-shadow:inset 0 1px 1px rgba(0,0,0,.125)}.pp-form-container .pp-field-user-avatar-picture-wrap{width:250px;height:auto;margin:auto;position:relative}.pp-form-container .pp-field-user-cover-image-wrap{margin:auto;position:relative}.pp-field-user-avatar-picture-wrap:hover .pp-profile-avatar-overlay-wrap,.pp-field-user-cover-image-wrap:hover .pp-cover-image-overlay-wrap{position:absolute;top:0;left:0;background:rgba(0,0,0,.5);text-align:center;box-sizing:border-box;padding:0;color:#fff;text-shadow:0 1px #666;line-height:21px;font-size:16px;height:100%;width:100%;border-radius:50%}.pp-field-user-cover-image-wrap:hover .pp-cover-image-overlay-wrap{border-radius:0}.pp-field-user-avatar-picture-wrap:hover .pp-profile-avatar-overlay,.pp-field-user-cover-image-wrap:hover .pp-cover-image-overlay{display:table;height:100%;width:100%}.pp-field-user-avatar-picture-wrap:hover .pp-profile-avatar-overlay ins,.pp-field-user-cover-image-wrap:hover .pp-cover-image-overlay ins{display:table-cell;vertical-align:middle;height:100%;text-decoration:none!important;background:0 0!important;color:#fff!important;border-bottom:none!important}.pp-field-user-avatar-picture-wrap:hover .pp-profile-avatar-overlay-wrap .pp-profile-avatar-overlay .pp-form-material-icons,.pp-field-user-cover-image-wrap:hover .pp-cover-image-overlay-wrap .pp-cover-image-overlay .pp-form-material-icons{font-size:35px!important;display:block!important;position:static!important;right:auto!important;top:auto!important;color:#fff!important;margin:0!important;width:auto!important;height:auto!important;cursor:pointer}html .select2.select2-container .select2-selection.select2-selection--multiple input.select2-search__field{border:0!important;height:auto!important}.select2.select2-container .select2-selection.select2-selection--multiple input.select2-search__field{border:0!important;box-shadow:none!important}.select2.select2-container .select2-selection.select2-selection--multiple li.select2-selection__choice{height:auto;line-height:normal}.pp-form-wrapper.pp-member-directory{opacity:0}.pp-form-wrapper.ppress-default-profile{max-width:1000px;width:100%;box-sizing:border-box;font-size:15px;color:#666;margin-bottom:30px;opacity:0}.pp-form-wrapper.ppress-default-profile *{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-sizing:border-box}.pp-form-wrapper.ppress-default-profile a,.pp-form-wrapper.ppress-default-profile a:hover{text-decoration:none!important}.pp-form-wrapper.ppress-default-profile .ppress-default-profile-cover{background-color:#eee;box-sizing:border-box;position:relative}.pp-form-wrapper.ppress-default-profile .ppress-default-profile-cover-e{text-align:center;overflow:hidden}.pp-form-wrapper.ppress-default-profile .ppress-default-profile-cover-e img{width:100%;display:block;overflow:hidden;border-radius:0;margin:0}.pp-form-wrapper.ppress-default-profile .ppress-dpf-header{position:relative;padding:0 0 25px;border-bottom:solid 2px #eee;min-height:85px;box-sizing:content-box}.pp-form-wrapper.ppress-default-profile .ppress-dpf-headericon{position:absolute;top:15px;right:0;vertical-align:middle;font-size:30px;height:30px;line-height:30px;z-index:66;margin-right:10px}.pp-form-wrapper.ppress-default-profile .ppress-dpf-headericon .ppress-dpf-edit-a .ppress-material-icons{font-size:30px}.pp-form-wrapper.ppress-default-profile a.ppress-dpf-edit-a{color:#aaa;text-decoration:none;border-bottom:0}.pp-form-wrapper.ppress-default-profile .ppress-dpf-headericon a:hover,.pp-form-wrapper.ppress-default-profile a.ppress-dpf-edit-a.active{color:#007bff}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-photo{float:left;position:absolute;margin:0 0 0 30px;box-sizing:border-box;width:200px;height:200px}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-photo img{width:100%;height:auto;border-radius:100%;display:block;overflow:hidden;margin:0;box-shadow:none;background:#fff;border:5px solid #fff}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-meta{padding-right:30px;-ms-word-break:break-all;word-break:break-word;word-wrap:break-word}.pp-form-wrapper.ppress-default-profile .ppress-dpf-main-meta{padding:10px 0 0;color:#999}.pp-form-wrapper.ppress-default-profile .ppress-dpf-name{font-size:24px;font-weight:700;margin-right:30px;color:#555;line-height:1.7em}.pp-form-wrapper.ppress-default-profile .ppress-dpf-clear{clear:both}.pp-form-wrapper.ppress-default-profile .ppress-dpf-meta span{margin:0 5px;font-size:14px;display:inline-block;line-height:.1}.pp-form-wrapper.ppress-default-profile .ppress-dpf-meta span:first-child{margin:0 5px 0 0}.pp-form-wrapper.ppress-default-profile .ppress-dpf-meta-text{margin:5px 0 0;line-height:1.4em;font-size:13px}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-nav{padding:10px;background:#444;text-align:center}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-nav-item a{color:#fff;font-size:14px;font-weight:600;padding:6px 10px 6px 28px;display:block;float:left;border-radius:4px;margin-left:5px;position:relative;border-bottom:0;text-decoration:none!important}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-nav-item a:hover{background:#555}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-nav-item .ppress-material-icons{font-size:18px;height:18px;line-height:1.5;position:absolute;display:block;left:10px}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-nav-item span.ppress-dpf-nav-title{padding-left:5px}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-nav-item.ppress-dpf-active a{background:#007bff}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-body{max-width:600px;padding-top:15px;padding-bottom:15px;margin:auto}.pp-form-wrapper.ppress-default-profile .pp-user-comment-no-item,.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-note{text-align:center;padding-top:20px;color:#666}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-note .ppress-material-icons{display:inline-block;font-size:70px;height:70px;line-height:70px}.pp-form-wrapper.ppress-default-profile .pp-user-comment-no-item span,.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-note span{margin-top:10px;display:block;font-size:16px;color:#888}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-note a{border:0!important}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-body-items{margin:0 0 30px}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-body-item{position:relative;padding:15px 0 0}.pp-form-wrapper.ppress-default-profile .ppress-dpf-item-label{display:block;margin:0 0 8px;border-bottom:solid 2px #eee;padding-bottom:4px;font-size:15px;line-height:22px;font-weight:700}.pp-form-wrapper.ppress-default-profile .ppress-dpf-field-label-icon{float:left;margin:0 8px 0 0;height:22px;line-height:18px;display:inline-block;width:24px;text-align:center}.pp-form-wrapper.ppress-default-profile .ppress-dpf-field-label-icon i{font-size:22px;position:relative;top:1px}.pp-form-wrapper.ppress-default-profile .ppdf-nocover .ppress-dpf-profile-photo{float:none;margin:0 auto;text-align:center;position:relative}.pp-form-wrapper.ppress-default-profile .ppdf-nocover .ppress-dpf-profile-meta{padding-left:0!important;padding-right:0!important;text-align:center!important}.ppress-default-profile.ppressui340 .ppress-dpf-profile-nav{padding:0}.ppress-default-profile.ppressui340 .ppress-dpf-profile-nav-item a,.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav-item a{margin-left:0;border-radius:0}.ppress-dpf-profile-nav-item.ppressui340 .ppress-dpf-profile-body{padding-left:0;padding-right:0}.ppress-default-profile.ppressui340.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-photo{position:static;top:auto;left:auto}.ppress-default-profile.ppressui340 .ppress-dpf-header .ppress-dpf-profile-meta{text-align:center;padding:0;margin-top:-30px}.ppress-default-profile.ppressui340.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-meta{padding-top:0}.ppress-default-profile.ppressui340 .ppress-dpf-header .ppress-dpf-name{float:none;margin-right:0;font-size:18px}.ppress-default-profile.ppressui340 .ppress-dpf-header .ppress-dpf-meta-text{padding:0 20px}.ppress-default-profile.ppressui340 .ppress-dpf-profile-photo{position:relative;width:100px;height:100px;margin:0 auto;float:none;left:auto;text-align:center;top:-40px}.ppress-default-profile.ppressui340.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-photo{width:120px;height:120px}.ppress-default-profile.ppressui340 .ppress-dpf-nav-title{font-size:12px}.ppress-default-profile.ppressui340 .ppress-dpf-profile-nav-item .ppress-material-icons{display:block;position:static;top:auto;left:auto;height:20px;line-height:20px}.ppress-default-profile.ppressui340.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-meta{margin-top:0}.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav{padding:0}.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav-item i{display:block;position:static;top:auto;left:auto;font-size:22px;height:22px;line-height:22px}.ppress-default-profile.ppressui500 .ppress-dpf-profile-body{padding-left:0;padding-right:0}.ppress-default-profile.ppressui500.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-photo{position:static;top:auto;left:auto;width:120px;height:120px}.ppress-default-profile.ppressui500 .ppress-dpf-profile-photo{position:relative;width:100px;height:100px;margin:0 auto;float:none;display:block;top:-40px;left:0}.ppress-default-profile.ppressui500 .ppress-dpf-header .ppress-dpf-profile-meta{text-align:center;padding:0;margin-top:-30px}.ppress-default-profile.ppressui500 .ppress-dpf-header .ppress-dpf-name{float:none;margin-right:0;font-size:21px}.ppress-default-profile.ppressui500 .ppress-dpf-header .ppress-dpf-meta-text{padding-top:10px}.ppress-default-profile.ppressui500 .ppress-dpf-header .ppress-dpf-meta{padding:0 20px;display:block}.ppress-default-profile.ppressui500 .ppress-dpf-nav-title{font-size:12px}.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav-item .ppress-material-icons{display:block;position:static;top:auto;left:auto;height:20px;line-height:20px}.ppress-default-profile.ppressui500.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-meta{margin-top:0}.ppress-default-profile.ppressui800 .ppress-dpf-profile-nav{padding:0}.ppress-default-profile.ppressui800 .ppress-dpf-profile-nav-item a{padding:10px 20px;margin-left:0;border-radius:0}.ppress-default-profile.ppressui800 .ppress-dpf-profile-photo{width:140px;height:140px;top:-70px}.ppress-default-profile.ppressui800.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-photo{top:auto}.ppress-default-profile.ppressui800 .ppress-dpf-header .ppress-dpf-profile-meta{padding-left:200px}.ppress-default-profile.ppressui800 .ppress-dpf-header .ppress-dpf-meta-text{padding-top:10px}.ppress-default-profile.ppressui800 .ppress-dpf-nav-title{font-size:12px}.ppress-default-profile.ppressui800 .ppress-dpf-profile-nav-item .ppress-material-icons{display:block;position:static;top:auto;left:auto;font-size:20px;height:20px;line-height:20px}.ppress-default-profile.ppressui960 .ppress-dpf-profile-photo{width:140px;height:140px;top:-70px}.ppress-default-profile.ppressui960.ppdf-nocover .ppress-dpf-profile-meta{margin-top:-50px}.ppress-default-profile.ppressui340 .ppress-dpf-profile-nav-item a,.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav-item a{padding:5px 11px;font-size:12px}.ppress-default-profile.ppressui340 .ppress-dpf-profile-nav-item .ppress-material-icons,.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav-item .ppress-material-icons{font-size:14px}.ppress-default-profile.ppressui340 span.ppress-dpf-nav-title,.ppress-default-profile.ppressui500 span.ppress-dpf-nav-title{font-size:10px}.pp-form-wrapper.ppress-default-profile ul.pp-user-post-list{list-style:none;margin:0;padding:0}.pp-form-wrapper.ppress-default-profile li.pp-user-post-item{padding:20px 0;border-bottom:1px solid #eee}.pp-form-wrapper.ppress-default-profile .pp-user-post-item a,.pp-form-wrapper.ppress-default-profile .pp-user-post-item h3{font-size:16px;font-weight:400;margin:0;text-decoration:none}.pp-form-wrapper.ppress-default-profile .pp-user-post-item h3.pp-post-item-head{line-height:20px}.pp-form-wrapper.ppress-default-profile .ppress-dpf-more-post-wrap{text-align:center;padding-top:30px}.pp-form-wrapper.ppress-default-profile a.ppress-dpf-more-post-btn{font-size:15px;border:0;display:block;width:100%;line-height:1em;padding:15px;text-decoration:none;text-align:center;text-transform:none;font-weight:400;transition:.25s;border-radius:4px;box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08);max-width:250px;margin:0 auto;color:#fff;background:#007bff}.pp-form-wrapper.ppress-default-profile .pp-user-comment-item{padding:20px 0;border-bottom:1px solid #eee}.pp-form-wrapper.ppress-default-profile .pp-user-comment-item-link a{color:inherit}.pp-form-wrapper.ppress-default-profile .pp-user-comment-no-item+.ppress-dpf-more-post-wrap{display:none}.pp-member-directory .ppressmd-member-directory-header.ppressmd-form{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-items:stretch;align-items:stretch;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;width:100%}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row:not(.ppressmd-member-directory-filters-bar){display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-items:baseline;align-items:baseline;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;margin:0 0 10px}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row.ppressmd-member-directory-search-row{-webkit-justify-content:flex-end;justify-content:flex-end}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-search-line{display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-items:center;align-items:center;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;width:60%}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-search-line label{-webkit-flex:1;flex:1;margin:0 10px 0 0;min-width:90px;max-width:85%}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-search-line label .ppressmd-search-line{-webkit-appearance:textfield;width:100%;padding:0 12px!important;display:block!important;border-radius:2px;outline:0!important;cursor:text!important;font-size:15px!important;height:40px!important;box-sizing:border-box!important;box-shadow:none!important;margin:0!important;position:static}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-search-line .ppressmd-do-search{min-width:15%;width:auto}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-nav-line{display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:space-between;justify-content:space-between;-webkit-align-items:center;align-items:center;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;width:100%}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-nav-line .ppressmd-member-directory-sorting{display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-items:baseline;align-items:baseline;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex:5;flex:5}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-nav-line .ppressmd-member-directory-sorting .ppressmd-member-directory-sorting-a{display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-items:baseline;align-items:baseline;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;position:relative;cursor:pointer}.pp-member-directory .ppressmd-member-directory-header a{text-decoration:none;border-bottom:none;box-shadow:none}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-nav-line .ppress-material-icons{display:inline;vertical-align:middle}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-nav-line .ppressmd-member-directory-filters{display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-end;justify-content:flex-end;-webkit-align-items:baseline;align-items:baseline;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex:2;flex:2;text-align:right}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-nav-line .ppressmd-member-directory-filters .ppressmd-member-directory-filters-a{display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-items:baseline;align-items:baseline;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;cursor:pointer}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-nav-line .ppressmd-member-directory-filters .ppressmd-member-directory-filters-a a{margin:0 5px 0 0}.ppressmd-member-directory-header:not(.ppmd-filters-expand) .ppressmd-member-directory-header-row .ppressmd-member-directory-nav-line .ppressmd-member-directory-filters .ppressmd-member-directory-filters-a .ppress-up{display:none}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-search.ppressmd-search-invisible,.ppressmd-member-directory-header.ppmd-filters-expand .ppressmd-member-directory-header-row .ppressmd-member-directory-nav-line .ppressmd-member-directory-filters .ppressmd-member-directory-filters-a .ppress-down{display:none}.ppressmd-new-dropdown{font-size:16px;margin:0;position:absolute;height:auto;background:#fff;z-index:10;display:none;border:1px solid #ddd;box-shadow:0 7px 14px 0 rgba(50,50,93,.1),0 3px 6px 0 rgba(0,0,0,.07);-webkit-box-shadow:0 7px 14px 0 rgba(50,50,93,.1),0 3px 6px 0 rgba(0,0,0,.07);box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;border-radius:5px 5px 5px 5px;-moz-border-radius:5px 5px 5px 5px;-webkit-border-radius:5px 5px 5px 5px}.ppressmd-new-dropdown ul li{list-style-type:none;padding:0;margin:0}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-nav-line .ppressmd-member-directory-sorting .ppressmd-member-directory-sorting-a .ppressmd-new-dropdown{top:24px;width:200px;left:-12px}.ppressmd-new-dropdown ul li a{display:block;padding:8px 12px;line-height:1}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row.ppressmd-member-directory-filters-bar{padding:0 0 10px}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row.ppressmd-header-row-invisible{margin:0}.ppressmd-member-directory-header.ppmd-filters-expand .ppressmd-member-directory-header-row .ppressmd-search.ppressmd-search-invisible{display:grid}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-search{margin:0;width:100%;display:grid;grid-template-rows:auto 1fr;grid-template-columns:repeat(3,1fr);grid-gap:10px;grid-auto-rows:minmax(-webkit-max-content,auto);grid-auto-rows:minmax(max-content,auto);-ms-grid-template-rows:auto 1fr;-ms-grid-template-columns:repeat(3,1fr);-ms-grid-gap:10px;-ms-grid-auto-rows:minmax(max-content,auto);-webkit-align-items:center;align-items:center}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-search .ppressmd-search-filter{display:flex;flex-direction:row;justify-content:flex-start;align-items:baseline;flex-wrap:nowrap;width:100%}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-search .ppressmd-search-filter.ppressmd-text-filter-type input{width:100%;padding:10px 30px}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-search-line label .ppressmd-search-line,.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-search .ppressmd-search-filter.ppressmd-text-filter-type input:not(.select2-search__field),.pp-member-directory .ppressmd-member-directory-header .select2.select2-container .select2-selection{background-color:transparent;border:1px solid #ddd!important}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-nav-line .ppress-material-icons,.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-search-line label .ppressmd-search-line,.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-search .ppressmd-search-filter.ppressmd-text-filter-type input,.pp-member-directory .ppressmd-member-directory-header .select2.select2-container .select2-selection__rendered{color:#666;background-color:transparent}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row input[type=search]:focus{border:1px solid #bbb!important}.pp-member-directory .ppressmd-member-directory-header .ppressmd-button{border:0!important;display:block;width:100%;line-height:1em!important;padding:16px 20px!important;text-decoration:none!important;text-align:center;text-transform:none!important;font-weight:400!important;overflow:hidden;position:relative;transition:.25s;box-sizing:border-box;border-radius:4px!important;box-shadow:none;vertical-align:middle!important;height:auto!important;cursor:pointer!important;text-shadow:none;font-family:inherit;outline:0!important;margin:0;-webkit-appearance:none}.pp-member-directory .ppressmd-members-total-wrap{text-align:center;margin:0 0 10px}.pp-member-directory .ppressmd-members-total{font-size:20px;font-weight:300}.pp-member-directory .ppressmd-member-directory-header .select2.select2-container{width:100%!important}.pp-member-directory .ppressmd-member-directory-header .select2-search.select2-search--inline .select2-search__field{width:auto!important}.pp-member-directory .ppressmd-member-directory-header .select2.select2-container .select2-selection{display:block!important;height:40px;padding:0 0 0 12px!important;overflow:hidden!important;position:relative!important;white-space:nowrap!important;line-height:35px!important;font-size:15px!important;text-align:left!important;text-decoration:none!important;border-radius:2px!important;background-clip:padding-box!important;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:0 0!important}.pp-member-directory .ppressmd-member-directory-header .select2.select2-container .select2-selection .select2-selection__arrow{display:inline-block!important;width:34px!important;height:100%!important;position:absolute!important;right:0!important;top:0!important;border-radius:0 2px 2px 0!important;background-clip:padding-box!important;text-align:center!important;background:0 0!important;border-left:0!important}.pp-member-directory .ppressmd-member-directory-header .select2-container.select2-container--open .select2-dropdown{border:1px solid #ddd;border-top:0;border-radius:0}.pp-member-directory .ppressmd-member-directory-header .select2-container.select2-container--open .select2-dropdown .select2-results li{list-style:none;display:list-item;background-image:none;font-size:15px;margin:5px!important;color:#666!important;padding:3px 7px 4px!important;cursor:pointer;min-height:1em!important}.pp-member-directory .ppressmd-member-directory-header .select2.select2-container .select2-selection.select2-selection--multiple{height:auto!important;line-height:.8!important}.pp-member-directory .ppressmd-member-directory-header .select2-container--default .select2-selection--single .select2-selection__rendered{padding-left:0!important;line-height:37px}.pp-member-directory .ppressmd-member-directory-header .select2-container--default .select2-selection--multiple .select2-selection__rendered{line-height:37px;box-sizing:border-box;list-style:none;margin:0;padding-left:0!important;padding-right:30px;width:100%;font-size:13px}.pp-member-directory .ppressmd-member-directory-header .select2-results li.select2-results__option.select2-results__option--highlighted{background:0 0!important;background:#f4f4f4!important;color:#666!important}.pp-member-directory .ppressmd-member-directory-header .select2-container--default .select2-selection--single .select2-selection__clear{right:10px;margin:0!important}.pp-member-directory .ppressmd-member-directory-header .select2-container--default .select2-selection--multiple .select2-selection__clear{right:10px;font-size:30px;margin:0!important}.pp-member-directory .ppressmd-member-directory-header .select2-container--default .select2-selection--multiple .select2-selection__clear,.pp-member-directory .ppressmd-member-directory-header .select2-container--default .select2-selection--single .select2-selection__arrow b,.pp-member-directory .ppressmd-member-directory-header .select2-container--default .select2-selection--single .select2-selection__clear{color:#888!important}.pp-member-directory .ppressmd-member-directory-header .select2-container--default .select2-selection--multiple .select2-selection__clear{position:absolute}.pp-member-directory .ppressmd-member-directory-header .select2-container--default .select2-selection--multiple .select2-selection__choice{padding:3px 3px 3px 5px}.pp-member-directory .ppressmd-member-directory-header .select2-container .select2-search.select2-search--inline>input{border:0!important;padding:0!important;border-radius:0!important}.pp-member-directory .ppressmd-member-directory-header .select2-container--default .select2-selection--multiple .select2-selection__rendered li{overflow-x:hidden;text-overflow:ellipsis;max-width:100%;box-sizing:border-box}.pp-member-directory .ppressmd-member-directory-header .select2-container--default .select2-selection--single .select2-selection__clear{font-size:20px!important}.pp-member-directory .ppmd-pagination-wrap{font-size:16px;width:100%;margin:0 auto 10px;padding:0;text-align:center}.pp-member-directory .ppmd-pagination-wrap .page-numbers{display:inline-block;width:auto;height:34px;line-height:34px;transition:all .2s linear;padding:0 14px;color:#666;font-weight:400}.pp-member-directory .ppmd-pagination-wrap .page-numbers.current{background:#007bff;color:#fff}.pp-member-directory .ppmd-pagination-wrap .page-numbers .ppress-material-icons{vertical-align:middle}
|
1 |
+
[class*=hint--]{position:relative;display:inline-block}[class*=hint--]:after,[class*=hint--]:before{position:absolute;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);visibility:hidden;opacity:0;z-index:1000000;pointer-events:none;transition:.3s ease;transition-delay:0s}[class*=hint--]:before{content:'';background:0 0;border:6px solid transparent;z-index:1000001}[class*=hint--]:hover:after,[class*=hint--]:hover:before{visibility:visible;opacity:1;transition-delay:.1s}[class*=hint--]:after{background:#383838;color:#fff;padding:8px 10px;font-size:12px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;line-height:12px;white-space:nowrap;text-shadow:0 -1px 0 #000;box-shadow:4px 4px 8px rgba(0,0,0,.3)}[class*=hint--][aria-label]:after{content:attr(aria-label)}[class*=hint--][data-hint]:after{content:attr(data-hint)}[aria-label='']:after,[aria-label='']:before,[data-hint='']:after,[data-hint='']:before{display:none!important}.hint--top-left:before,.hint--top-right:before,.hint--top:before{border-top-color:#383838}.hint--bottom-left:before,.hint--bottom-right:before,.hint--bottom:before{border-bottom-color:#383838}.hint--top:after,.hint--top:before{bottom:100%;left:50%}.hint--top:before{margin-bottom:-11px;left:calc(50% - 6px)}.hint--top:after{-webkit-transform:translateX(-50%);transform:translateX(-50%)}.hint--top:hover:before{-webkit-transform:translateY(-8px);transform:translateY(-8px)}.hint--top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}.hint--bottom:after,.hint--bottom:before{top:100%;left:50%}.hint--bottom:before{margin-top:-11px;left:calc(50% - 6px)}.hint--bottom:after{-webkit-transform:translateX(-50%);transform:translateX(-50%)}.hint--bottom:hover:before{-webkit-transform:translateY(8px);transform:translateY(8px)}.hint--bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}.hint--right:before{border-right-color:#383838;margin-left:-11px;margin-bottom:-6px}.hint--right:after{margin-bottom:-14px}.hint--right:after,.hint--right:before{left:100%;bottom:50%}.hint--right:hover:after,.hint--right:hover:before{-webkit-transform:translateX(8px);transform:translateX(8px)}.hint--left:before{border-left-color:#383838;margin-right:-11px;margin-bottom:-6px}.hint--left:after{margin-bottom:-14px}.hint--left:after,.hint--left:before{right:100%;bottom:50%}.hint--left:hover:after,.hint--left:hover:before{-webkit-transform:translateX(-8px);transform:translateX(-8px)}.hint--top-left:after,.hint--top-left:before{bottom:100%;left:50%}.hint--top-left:before{margin-bottom:-11px;left:calc(50% - 6px)}.hint--top-left:after{-webkit-transform:translateX(-100%);transform:translateX(-100%);margin-left:12px}.hint--top-left:hover:before{-webkit-transform:translateY(-8px);transform:translateY(-8px)}.hint--top-left:hover:after{-webkit-transform:translateX(-100%) translateY(-8px);transform:translateX(-100%) translateY(-8px)}.hint--top-right:after,.hint--top-right:before{bottom:100%;left:50%}.hint--top-right:before{margin-bottom:-11px;left:calc(50% - 6px)}.hint--top-right:after{-webkit-transform:translateX(0);transform:translateX(0);margin-left:-12px}.hint--top-right:hover:after,.hint--top-right:hover:before{-webkit-transform:translateY(-8px);transform:translateY(-8px)}.hint--bottom-left:after,.hint--bottom-left:before{top:100%;left:50%}.hint--bottom-left:before{margin-top:-11px;left:calc(50% - 6px)}.hint--bottom-left:after{-webkit-transform:translateX(-100%);transform:translateX(-100%);margin-left:12px}.hint--bottom-left:hover:before{-webkit-transform:translateY(8px);transform:translateY(8px)}.hint--bottom-left:hover:after{-webkit-transform:translateX(-100%) translateY(8px);transform:translateX(-100%) translateY(8px)}.hint--bottom-right:after,.hint--bottom-right:before{top:100%;left:50%}.hint--bottom-right:before{margin-top:-11px;left:calc(50% - 6px)}.hint--bottom-right:after{-webkit-transform:translateX(0);transform:translateX(0);margin-left:-12px}.hint--bottom-right:hover:after,.hint--bottom-right:hover:before{-webkit-transform:translateY(8px);transform:translateY(8px)}.hint--large:after,.hint--medium:after,.hint--small:after{white-space:normal;line-height:1.4em;word-wrap:break-word}.hint--small:after{width:80px}.hint--medium:after{width:150px}.hint--large:after{width:300px}.hint--error:after{background-color:#b34e4d;text-shadow:0 -1px 0 #592726}.hint--error.hint--top-left:before,.hint--error.hint--top-right:before,.hint--error.hint--top:before{border-top-color:#b34e4d}.hint--error.hint--bottom-left:before,.hint--error.hint--bottom-right:before,.hint--error.hint--bottom:before{border-bottom-color:#b34e4d}.hint--error.hint--left:before{border-left-color:#b34e4d}.hint--error.hint--right:before{border-right-color:#b34e4d}.hint--warning:after{background-color:#c09854;text-shadow:0 -1px 0 #6c5328}.hint--warning.hint--top-left:before,.hint--warning.hint--top-right:before,.hint--warning.hint--top:before{border-top-color:#c09854}.hint--warning.hint--bottom-left:before,.hint--warning.hint--bottom-right:before,.hint--warning.hint--bottom:before{border-bottom-color:#c09854}.hint--warning.hint--left:before{border-left-color:#c09854}.hint--warning.hint--right:before{border-right-color:#c09854}.hint--info:after{background-color:#3986ac;text-shadow:0 -1px 0 #1a3c4d}.hint--info.hint--top-left:before,.hint--info.hint--top-right:before,.hint--info.hint--top:before{border-top-color:#3986ac}.hint--info.hint--bottom-left:before,.hint--info.hint--bottom-right:before,.hint--info.hint--bottom:before{border-bottom-color:#3986ac}.hint--info.hint--left:before{border-left-color:#3986ac}.hint--info.hint--right:before{border-right-color:#3986ac}.hint--success:after{background-color:#458746;text-shadow:0 -1px 0 #1a321a}.hint--success.hint--top-left:before,.hint--success.hint--top-right:before,.hint--success.hint--top:before{border-top-color:#458746}.hint--success.hint--bottom-left:before,.hint--success.hint--bottom-right:before,.hint--success.hint--bottom:before{border-bottom-color:#458746}.hint--success.hint--left:before{border-left-color:#458746}.hint--success.hint--right:before{border-right-color:#458746}.hint--always:after,.hint--always:before{opacity:1;visibility:visible}.hint--always.hint--top:before{-webkit-transform:translateY(-8px);transform:translateY(-8px)}.hint--always.hint--top:after{-webkit-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}.hint--always.hint--top-left:before{-webkit-transform:translateY(-8px);transform:translateY(-8px)}.hint--always.hint--top-left:after{-webkit-transform:translateX(-100%) translateY(-8px);transform:translateX(-100%) translateY(-8px)}.hint--always.hint--top-right:after,.hint--always.hint--top-right:before{-webkit-transform:translateY(-8px);transform:translateY(-8px)}.hint--always.hint--bottom:before{-webkit-transform:translateY(8px);transform:translateY(8px)}.hint--always.hint--bottom:after{-webkit-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}.hint--always.hint--bottom-left:before{-webkit-transform:translateY(8px);transform:translateY(8px)}.hint--always.hint--bottom-left:after{-webkit-transform:translateX(-100%) translateY(8px);transform:translateX(-100%) translateY(8px)}.hint--always.hint--bottom-right:after,.hint--always.hint--bottom-right:before{-webkit-transform:translateY(8px);transform:translateY(8px)}.hint--always.hint--left:after,.hint--always.hint--left:before{-webkit-transform:translateX(-8px);transform:translateX(-8px)}.hint--always.hint--right:after,.hint--always.hint--right:before{-webkit-transform:translateX(8px);transform:translateX(8px)}.hint--rounded:after{border-radius:4px}.hint--no-animate:after,.hint--no-animate:before{transition-duration:0s}.hint--bounce:after,.hint--bounce:before{transition:opacity .3s ease,visibility .3s ease,-webkit-transform .3s cubic-bezier(.71,1.7,.77,1.24);transition:opacity .3s ease,visibility .3s ease,transform .3s cubic-bezier(.71,1.7,.77,1.24);transition:opacity .3s ease,visibility .3s ease,transform .3s cubic-bezier(.71,1.7,.77,1.24),-webkit-transform .3s cubic-bezier(.71,1.7,.77,1.24)}.hint--no-shadow:after,.hint--no-shadow:before{text-shadow:initial;box-shadow:initial}@font-face{font-family:'Material Icons';font-style:normal;font-weight:400;src:url(./material-icons/MaterialIcons-Regular.eot);src:local('Material Icons'),local('MaterialIcons-Regular'),url(./material-icons/MaterialIcons-Regular.woff2) format('woff2'),url(./material-icons/MaterialIcons-Regular.woff) format('woff'),url(./material-icons/MaterialIcons-Regular.ttf) format('truetype')}#profilepress-myaccount-wrapper .ppmyac-icons,.pp-form-field-wrap .pp-form-material-icons,.ppress-material-icons{font-family:'Material Icons'!important;font-weight:400;font-style:normal;font-size:20px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:'liga'}.pp-tab-widget-avatar img{display:block;border-radius:50%;height:190px;margin:0 auto 10px!important;padding:2px;text-align:center;width:190px;float:none!important}.pp-user-panel{border-radius:6px;text-align:center}.pp-user-panel-title{font-size:20px;margin:0}.pp-user-panel p{font-size:15px;margin-bottom:23px}.pp-tabbed-btn{border:0;font-size:15px;font-weight:400;line-height:1.4;border-radius:4px;padding:10px 15px;-webkit-font-smoothing:subpixel-antialiased;transition:border .25s linear,color .25s linear,background-color .25s linear}.pp-tabbed-btn-inverse{color:#fff!important;background-color:#34495e}.pp-password-reset-handler-wrap .pp-reset-password-form{padding:40px;max-width:500px;margin-top:5px;margin-bottom:5px}.pp-password-reset-handler-wrap .pp-reset-password-form h3{color:#444;font-weight:300;margin:0 auto 40px}.pp-password-reset-handler-wrap .pp-reset-password-form label{color:#444;font-size:15px}.pp-password-reset-handler-wrap .pp-reset-password-form label .req{margin:2px;color:red}.pp-password-reset-handler-wrap .pp-reset-password-form label.active .req{opacity:0}.pp-password-reset-handler-wrap .pp-reset-password-form input{font-size:22px;display:block;width:100%;box-sizing:border-box;height:auto;padding:5px 10px;background:0 0;margin-bottom:40px;border:1px solid #a0b3b0;border-radius:0;transition:border-color .25s ease,box-shadow .25s ease}.pp-password-reset-handler-wrap .pp-reset-password-form input:focus{outline:0;border-color:#1ab188}.pp-password-reset-handler-wrap .pp-reset-password-form .pp-reset-button{border:0;outline:0;border-radius:0;padding:15px 0;font-size:20px;font-weight:600;text-transform:uppercase;letter-spacing:.1em;background:#1ab188;color:#fff;transition:all .5s ease;-webkit-appearance:none;text-shadow:none;box-shadow:none}.pp-password-reset-handler-wrap .pp-reset-password-form .pp-reset-button:focus,.pp-password-reset-handler-wrap .pp-reset-password-form .pp-reset-button:hover{background:#179b77}.pp-password-reset-handler-wrap .pp-reset-password-form .pp-reset-button-block{display:block;width:100%}.pp-password-reset-handler-wrap .profilepress-reset-status{margin-left:40px;max-width:420px}#pp-pass-strength-result{background-color:#eee;border:1px solid #ddd;color:#23282d;padding:3px 5px;text-align:center;width:100%;box-sizing:border-box}#pp-pass-strength-result.short{background-color:#f1adad;border-color:#e35b5b;opacity:1}#pp-pass-strength-result.bad{background-color:#fbc5a9;border-color:#f78b53;opacity:1}#pp-pass-strength-result.good{background-color:#ffe399;border-color:#ffc733;opacity:1}#pp-pass-strength-result.strong{background-color:#c1e1b9;border-color:#83c373;opacity:1}.pp-form-wrapper .pp-form-label-wrap .pp-form-required-label{color:red;font-weight:400}.pp-form-wrapper input[type=checkbox],.pp-form-wrapper input[type=radio]{cursor:pointer}.pp-form-wrapper p{margin:0 0 5px!important;padding:0!important}.pp-form-wrapper input[type=datetime],.pp-form-wrapper input[type=email],.pp-form-wrapper input[type=number],.pp-form-wrapper input[type=password],.pp-form-wrapper input[type=search],.pp-form-wrapper input[type=tel],.pp-form-wrapper input[type=text],.pp-form-wrapper input[type=url],.pp-form-wrapper select,.pp-form-wrapper textarea{-webkit-appearance:none;width:100%;background:#fff;border:1px solid #dedee5;padding:13px 15px;outline:0;line-height:1}.pp-form-wrapper select{background-image:url(../images/frontend/arrow-down.png)!important;background-position:right 20px center!important;background-repeat:no-repeat!important;background-size:10px auto!important;-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important}.pp-form-wrapper .pp-form-label-wrap{margin:0 0 4px;padding:0}.pp-form-wrapper .pp-form-label{font-size:14px;text-transform:none;text-align:left;font-weight:400;font-style:normal;float:none;line-height:1.3;margin:0;padding:0;width:auto;display:inline;cursor:pointer}.pp-form-wrapper .pp-checkbox-wrap,.pp-form-wrapper .pp-radio-wrap{display:block;text-align:left;line-height:normal;margin:5px 0;padding:0}.pp-form-wrapper .pp-checkbox-wrap label,.pp-form-wrapper .pp-radio-wrap label{margin-left:5px}.pp-form-wrapper input[type=checkbox],.pp-form-wrapper input[type=radio]{border:1px solid #ccc;background-color:#fff;width:14px!important;height:14px!important;display:inline-block;vertical-align:baseline}.pp-form-wrapper .ppress-pf-profile-connect{padding:5px 0 10px}.pp-form-wrapper a.ppress-pf-social-icon{width:100%;height:100%;display:inline}.pp-form-wrapper .ppress-pf-social-icon svg{vertical-align:middle;width:40px;height:40px}.pp-form-wrapper .ppress-pf-social-icon.dpf-github svg,.pp-form-wrapper .ppress-pf-social-icon.dpf-instagram svg{padding:3px}a.pp-button-social-login:focus{outline-color:transparent}a.pp-button-social-login:focus .ppsc,a.pp-button-social-login:hover .ppsc{background-color:rgba(255,255,255,.75)}a.pp-button-social-login:visited{color:#fff}a.pp-button-social-login,a.pp-button-social-login .ppsc{display:inline-block;font-size:100%;height:2.5em;padding:0}a.pp-button-social-login{position:relative;vertical-align:middle;line-height:2.5em;font-family:inherit;font-weight:700;overflow:hidden;white-space:nowrap;border:1px solid #333;color:#fff!important;background:#333;margin:6px 0;border-radius:2px;box-sizing:content-box;cursor:pointer;box-shadow:0 1px 2px rgba(0,0,0,.1);text-decoration:none!important;min-width:220px}a.pp-button-social-login .ppsc{font-style:normal;font-weight:400;text-decoration:none;text-transform:none;vertical-align:top;text-align:center;width:2.5em;background-color:#fff;background-repeat:no-repeat;background-position:50%;background-size:1.8em 1.8em;border-top-left-radius:1px;border-bottom-left-radius:1px;-moz-font-smoothing:antialiased;-webkit-font-smoothing:antialiased;font-smoothing:antialiased;position:absolute;left:0;margin:0}a.pp-button-social-login span.ppsc-text{margin-left:40px;padding:.5em;color:#fff!important}a.pp-button-social-login .ppsc-google{background-image:url(../images/social-login/google.svg)}a.pp-button-social-login.pp-button-social-login-google{background:#4285f4;border-color:#4285f4}a.pp-button-social-login.pp-button-social-login-facebook{background:#3b5998;border-color:#3b5998}a.pp-button-social-login.pp-button-social-login-twitter{background:#55acee;border-color:#55acee}a.pp-button-social-login.pp-button-social-login-linkedin{background:#0077b5;border-color:#0077b5}a.pp-button-social-login.pp-button-social-login-vk{background:#4a76a8;border-color:#4a76a8}a.pp-button-social-login.pp-button-social-login-github{background:#24292e;border-color:#24292e}a.pp-button-social-login .ppsc-vk{background-image:url(../images/social-login/vk-fa.svg)}a.pp-button-social-login .ppsc-facebook{background-image:url(../images/social-login/facebook.svg)}a.pp-button-social-login .ppsc-twitter{background-image:url(../images/social-login/twitter.svg)}a.pp-button-social-login .ppsc-linkedin{background-image:url(../images/social-login/linkedin.svg)}a.pp-button-social-login .ppsc-github{background-image:url(../images/social-login/github-fa.svg)}#profilepress-myaccount-wrapper,#profilepress-myaccount-wrapper *,#profilepress-myaccount-wrapper ::after,#profilepress-myaccount-wrapper ::before,.pp-form-container *,.pp-form-container .pp-form-wrapper,.pp-form-container .pp-form-wrapper *{box-sizing:border-box}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material .pp-form-field-wrap span.select2-selection.select2-selection--multiple,html .pp-form-container .select2 input.select2-search__field{border:0!important}.pp-form-container form input[type=submit]{-webkit-appearance:none!important;cursor:pointer;text-shadow:none}.pp-form-container form{margin:0;padding:0;background-color:transparent}.woocommerce .woocommerce-MyAccount-content .pp-form-container{margin-right:0!important;margin-left:0!important}.pp-form-container form input,.pp-form-container form select,.pp-form-container form textarea{outline:0;background-image:none;height:auto;float:none;position:static;box-shadow:none;text-shadow:none;text-transform:none;text-decoration:none;resize:vertical}.pp-form-container form p{margin:0 0 .5em}.pp-form-container form input[type=submit]:focus{outline:0}.pp-form-container .pp-user-avatar{border-radius:50%!important;display:block!important;margin:0 auto 10px!important;text-align:center!important}.pp-form-container img.pp-user-cover-image{width:100%!important;height:auto!important}#profilepress-myaccount-wrapper .profilepress-myaccount-content input[type=checkbox],#profilepress-myaccount-wrapper .profilepress-myaccount-content input[type=radio],.pp-form-container .pp-form-wrapper .pp-form-field-wrap input[type=checkbox],.pp-form-container .pp-form-wrapper .pp-form-field-wrap input[type=radio]{border:1px solid #7e8993!important;border-radius:4px!important;background:#fff!important;color:#555!important;clear:none!important;cursor:pointer!important;display:inline-block!important;line-height:0!important;margin:0!important;outline:0!important;padding:0!important;text-align:center!important;vertical-align:middle!important;-webkit-appearance:none!important;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)!important;transition:.05s border-color ease-in-out!important;width:16px!important;height:16px!important}#profilepress-myaccount-wrapper .profilepress-myaccount-content input[type=radio],.pp-form-container .pp-form-wrapper .pp-form-field-wrap input[type=checkbox],.pp-form-container .pp-form-wrapper .pp-form-field-wrap input[type=radio]{border-radius:50%!important}.pp-form-container .pp-form-wrapper .pp-form-field-wrap input[type=checkbox],.pp-form-container .pp-form-wrapper .pp-form-field-wrap input[type=radio]{border-radius:4px!important}.pp-form-container .pp-form-wrapper .pp-form-field-wrap input[type=radio]{border-radius:50%!important}#profilepress-myaccount-wrapper .profilepress-myaccount-content input[type=checkbox]:checked::before,.pp-form-container .pp-form-wrapper .pp-form-field-wrap input[type=checkbox]:checked::before{content:url(data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M14.83%204.89l1.34.94-5.81%208.38H9.02L5.78%209.67l1.34-1.25%202.57%202.4z%27%20fill%3D%27%23000000%27%2F%3E%3C%2Fsvg%3E)!important;margin:-3px 0 0 -4px!important;width:20px!important;height:20px!important;position:static}#profilepress-myaccount-wrapper .profilepress-myaccount-content input[type=radio]:checked::before,.pp-form-container .pp-form-wrapper .pp-form-field-wrap input[type=radio]:checked::before{content:"";border-radius:50%!important;margin:3px!important;background-color:#000!important;line-height:1.14285714!important;width:8px!important;height:8px!important}#profilepress-myaccount-wrapper .profilepress-myaccount-content input[type=checkbox]:checked::before,#profilepress-myaccount-wrapper .profilepress-myaccount-content input[type=radio]:checked::before,.pp-form-container .pp-form-wrapper .pp-form-field-wrap input[type=checkbox]:checked::before,.pp-form-container .pp-form-wrapper .pp-form-field-wrap input[type=radio]:checked::before{float:left!important;display:inline-block!important;vertical-align:middle!important;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.pp-form-container .pp-form-wrapper.ppBuildScratch,.pp-form-container .pp-form-wrapper.ppBuildScratch *{font-family:'Merriweather',sans-serif}.pp-form-container .pp-form-wrapper.ppBuildScratch .ppbs-headline{font-weight:700;font-size:20px;margin-bottom:1em;margin-top:0;text-align:center;margin-right:6.387%}.pp-form-container .pp-form-wrapper.ppBuildScratch h1,.pp-form-container .pp-form-wrapper.ppBuildScratch h2,.pp-form-container .pp-form-wrapper.ppBuildScratch h3,.pp-form-container .pp-form-wrapper.ppBuildScratch h4{font-weight:700;font-size:20px;margin-bottom:1em;margin-top:1em}.pp-form-container .pp-form-wrapper.ppBuildScratch input:disabled{opacity:.5}.pp-form-container .pp-form-wrapper.ppBuildScratch{max-width:100%;width:100%;padding:6% 0 6% 6%;background:#fff;color:#222;font-size:14px;position:relative;box-shadow:0 0 0 .5px rgba(0,20,40,.1),0 2px 8px 0 rgba(50,55,90,.2);border-radius:3px;margin:0 auto}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppf-remove-frame{box-shadow:none;border-radius:0}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap{padding:0 6.387% 4% 0;display:inline-block;width:100%;vertical-align:top}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-submit-button-wrap{display:inline-block;width:100%;vertical-align:top;padding:0 6.387% 0 0}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap .pp-form-label-wrap{margin:0 0 5px;padding:0}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fda-reveal .pp-form-field-description,.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fda-reveal .ppress-hint-tooltip,.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fda-standard .ppress-hint-tooltip,.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fda-tooltip .pp-form-field-description{display:none}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fda-reveal .pp-form-field-input-textarea-wrap .pp-form-field:focus~.pp-form-field-description{display:block}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fda-tooltip .ppress-hint-tooltip{display:inline;font-weight:400}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fda-tooltip .ppress-hint-tooltip .pp-form-material-icons{position:relative;margin:0;padding:0;font-size:110%;display:inline;vertical-align:top}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fld-inside{position:relative}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fld-inside .pp-form-label-wrap{position:absolute;top:5px;left:15px;z-index:2}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material .pp-form-field-wrap.fld-inside .pp-form-label-wrap{left:0!important}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fld-inside .pp-form-field-input-textarea-wrap .pp-form-field{padding-top:18px;padding-bottom:2px}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-medium .pp-form-field-wrap.fld-inside .pp-form-field-input-textarea-wrap .pp-form-field{padding-top:23px;padding-bottom:7px}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-large .pp-form-field-wrap.fld-inside .pp-form-field-input-textarea-wrap .pp-form-field{padding-top:30px;padding-bottom:10px}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fw-half{width:50%}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap.fw-third{width:33.3333333333%}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap input:not([type=radio]):not([type=checkbox]),.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap select,.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap textarea{border:1px solid #dbdbdb;font-size:14px;padding:10px 15px;transition:all .35s;background:#fff;color:#69717a;width:100%;border-radius:0;line-height:1.3;min-height:40px;display:inline-block;margin:0}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap textarea{height:100px;overflow:auto}.pp-form-field-wrap .pp-form-material-icons{width:24px;height:24px;position:absolute;right:0;top:0;cursor:text;margin:8px 12px 0 0}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfia-right .pp-form-field-wrap.field-has-icon input,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfia-right .pp-form-field-wrap.field-has-icon textarea{padding-right:40px}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfia-left .pp-form-field-wrap.field-has-icon input,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfia-left .pp-form-field-wrap.field-has-icon textarea{padding-left:40px}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material.ppfia-left .pp-form-field-wrap.field-has-icon input,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material.ppfia-left .pp-form-field-wrap.field-has-icon textarea{padding-left:30px!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material.ppfia-right .pp-form-field-wrap.field-has-icon input,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material.ppfia-right .pp-form-field-wrap.field-has-icon textarea{padding-right:30px!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfia-left .pp-form-field-wrap .pp-form-material-icons{left:0;margin-left:12px}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material.ppfia-left .pp-form-field-wrap .pp-form-material-icons{left:0!important;margin-left:0!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material.ppfia-right .pp-form-field-wrap .pp-form-material-icons{margin-right:0!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-medium .pp-form-field-wrap .pp-form-material-icons{margin-top:10px}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-large .pp-form-field-wrap .pp-form-material-icons{margin-top:18px}.pp-form-container .pp-form-wrapper.ppBuildScratch .has-password-visibility-icon .pp-form-material-icons{cursor:pointer}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-pill .pp-form-field-wrap input:not([type=radio]):not([type=checkbox]),.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-pill .pp-form-field-wrap select,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-pill .pp-form-field-wrap textarea{border-radius:25px!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-round .pp-form-field-wrap input:not([type=radio]):not([type=checkbox]),.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-round .pp-form-field-wrap select,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-round .pp-form-field-wrap textarea{border-radius:6px!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material .pp-form-field-wrap .select2.select2-container,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material .pp-form-field-wrap input:not([type=radio]):not([type=checkbox]),.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material .pp-form-field-wrap select,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material .pp-form-field-wrap textarea{border:0!important;border-bottom:1px solid #dbdbdb!important;padding-left:0!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material .pp-form-field-wrap input[type=text]:focus,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material .pp-form-field-wrap select:focus,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-material .pp-form-field-wrap textarea:focus{border-top:0!important;border-right:0!important;border-left:0!important;box-shadow:none!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-flat .pp-form-field-wrap .select2-selection,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-flat .pp-form-field-wrap input:not([type=radio]):not([type=checkbox]),.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-flat .pp-form-field-wrap select,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfl-flat .pp-form-field-wrap textarea{border:0!important;background:#f7f7f7!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-medium .pp-form-field-wrap input,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-medium .pp-form-field-wrap select{padding-top:15px;padding-bottom:15px}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-medium .pp-form-field-wrap textarea{height:150px}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-large .pp-form-field-wrap input,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-large .pp-form-field-wrap select{padding-top:20px;padding-bottom:20px}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-large .pp-form-field-wrap textarea{height:200px}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap input[type=text]:focus,.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap select:focus,.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap textarea:focus{border:1px solid #999}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap .pp-form-label-wrap .pp-form-label,.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap .ppform-remember-label{font-style:normal;background-color:transparent;display:block;font-weight:700;font-size:14px;float:none;line-height:1.3;margin:0;padding:0;color:#444}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-wrap .ppform-remember-label{display:inline-block}.pp-field-user-avatar-picture-wrap .pp-profile-avatar-overlay ins,.pp-field-user-cover-image-wrap .pp-cover-image-overlay ins,.pp-form-container .pp-form-wrapper.ppBuildScratch.ppf-hide-asterisk .pp-form-required-label{display:none}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-submit-button-wrap input[type=submit]{background:#000;border:0;color:#fff;font-weight:700;font-size:16px;line-height:1;padding:15px 10px;transition:.15s ease-in-out;width:auto;min-width:110px;text-align:center}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-large .pp-form-submit-button-wrap input[type=submit],.pp-form-container .pp-form-wrapper.ppBuildScratch.ppfs-medium .pp-form-submit-button-wrap input[type=submit]{padding-top:20px;padding-bottom:20px}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppsbl-pill .pp-form-submit-button-wrap input[type=submit]{border-radius:25px!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppsbl-round .pp-form-submit-button-wrap input[type=submit]{border-radius:6px!important}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-submit-button-wrap input[type=submit]:focus,.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-submit-button-wrap input[type=submit]:hover{background-color:#ededed;color:#000;text-decoration:none}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-checkbox-wrap,.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-radio-wrap{margin:0 0 5px}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-checkboxes-container,.ppressmd-new-dropdown ul{margin:0;padding:0}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-checkbox-wrap:last-of-type,.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-radio-wrap:last-of-type{margin-bottom:0}.pp-form-container .pp-form-wrapper.ppBuildScratch .pp-form-field-description{font-size:12px;font-weight:400;color:#666;line-height:1.3;text-align:left;margin:4px 0 0}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppsbw-wide .pp-form-submit-button-wrap input[type=submit]{width:100%}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppsbw-full-width .pp-form-submit-button-wrap{margin-top:4%;margin-bottom:4%}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppsbw-full-width .pp-form-submit-button-wrap input[type=submit]{width:100%!important;position:absolute!important;bottom:0!important;right:0!important;left:0!important;border-top-right-radius:0!important;border-top-left-radius:0!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppsbw-full-width.ppsbl-pill{border-bottom-right-radius:25px!important;border-bottom-left-radius:25px!important}.pp-form-container .pp-form-wrapper.ppBuildScratch.ppsbw-full-width.ppsbl-round{border-bottom-right-radius:6px!important;border-bottom-left-radius:6px!important}.pp-form-container .pp-form-wrapper.ppBuildScratch a.pp-button-social-login:last-of-type{margin-bottom:1.5em!important}#profilepress-myaccount-wrapper{font-size:16px}#profilepress-myaccount-wrapper .profilepress-myaccount-row{display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}#profilepress-myaccount-wrapper .profilepress-myaccount-nav{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}#profilepress-myaccount-wrapper .ppmyac-dashboard-item{text-decoration:none!important;position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125);width:100%;text-align:inherit;box-shadow:none}#profilepress-myaccount-wrapper .ppmyac-dashboard-item.isactive{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}#profilepress-myaccount-wrapper .ppmyac-dashboard-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}#profilepress-myaccount-wrapper .ppmyac-dashboard-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}#profilepress-myaccount-wrapper .ppmyac-icons{margin-right:.5rem;vertical-align:text-bottom}#profilepress-myaccount-wrapper .profilepress-myaccount-col-sm-3{position:relative;width:100%;padding-right:15px;padding-left:15px}@media (min-width:576px){#profilepress-myaccount-wrapper .profilepress-myaccount-col-sm-3{-webkit-flex:0 0 25%;flex:0 0 25%;max-width:25%}}#profilepress-myaccount-wrapper .profilepress-myaccount-content{position:relative;width:100%;padding-top:30px;padding-right:15px;padding-left:15px}@media (min-width:576px){#profilepress-myaccount-wrapper .profilepress-myaccount-content{-webkit-flex:0 0 75%;flex:0 0 75%;max-width:75%}}#profilepress-myaccount-wrapper .profilepress-myaccount-avatar-wrap{text-align:center;margin-bottom:20px}#profilepress-myaccount-wrapper .profilepress-myaccount-avatar-wrap .profilepress-myaccount-avatar img.pp-user-avatar{margin:0!important;position:static!important;float:none!important;display:inline-block;border-radius:999px}#profilepress-myaccount-wrapper .profilepress-myaccount-nav a:focus{outline:0;text-shadow:none;box-shadow:none}#profilepress-myaccount-wrapper .profilepress-myaccount-content h2{margin-top:0!important;margin-bottom:1.8rem!important;font-weight:700!important;line-height:1.2!important;font-size:2rem!important}#profilepress-myaccount-wrapper .profilepress-myaccount-content h3{margin-top:0!important;line-height:1.2!important;font-weight:500!important;font-size:1.2rem!important;margin-bottom:1rem!important}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-submenus-wrap{margin-bottom:2rem}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-submenu-wrap{display:inline;padding-right:1rem}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-submenu-item{color:inherit;padding:0 0 10px}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-submenu-item.ppsubmenu-active{border-bottom:3px solid #6c757d}.profilepress-myaccount-alert,.profilepress-myaccount-edit-profile .profilepress-edit-profile-status{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.profilepress-myaccount-alert.pp-alert-danger,.profilepress-myaccount-edit-profile .profilepress-edit-profile-status{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.profilepress-myaccount-alert.pp-alert-success,.profilepress-myaccount-edit-profile .profilepress-edit-profile-status.success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-field{margin-top:.5rem;margin-bottom:1rem}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-cover-image-empty{min-height:250px;background-color:#eee}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-delete-cover-image-wrap{padding:.75rem;background-color:#fff;border:1px solid rgba(0,0,0,.125);margin-bottom:0;border-radius:.25rem}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-delete-cover-image-wrap img{width:100%;height:auto}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-email-notifications-wrap .profilepress-myaccount-form-field{margin-top:.5rem;margin-bottom:.5rem}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-email-notifications-wrap{margin-bottom:2rem}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-field label{margin-bottom:.2rem;font-weight:500;display:block}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-field input[type=checkbox]+label,#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-field input[type=radio]+label{display:inline}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap .profilepress-myaccount-form-control:not([type=radio]):not([type=checkbox]),#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap input:not([type=radio]):not([type=checkbox]):not([type=submit]),#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap select,#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap textarea{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;overflow:visible;box-shadow:inset 0 1px 1px rgba(0,0,0,.125)}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap textarea{height:auto!important;min-height:100px!important;resize:vertical!important}#profilepress-myaccount-wrapper .profilepress-myaccount-content input.profilepress-myaccount-form-control:focus,#profilepress-myaccount-wrapper .profilepress-myaccount-content select.profilepress-myaccount-form-control:focus,#profilepress-myaccount-wrapper .profilepress-myaccount-content textarea.profilepress-myaccount-form-control:focus{background-color:#fff;border-color:#bbb;outline:0;box-shadow:none}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap .profilepress-myaccount-form-field input[type=submit]{display:inline-block;cursor:pointer;width:auto}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap .profilepress-myaccount-form-field input[type=submit]:hover{color:#fff;background-color:#0069d9;border-color:#0062cc;text-decoration:none}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap .ppmyac-custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap .ppmyac-custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap .ppmyac-custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap .ppmyac-custom-file-label::after{position:absolute;top:0;right:0;box-sizing:border-box;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-wrap .ppmyac-custom-file-input~.ppmyac-custom-file-label[data-browse]::after{content:attr(data-browse)}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-field .pp-checkbox-wrap label.pp-form-label,#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-form-field .pp-radio-wrap label.pp-form-label{display:inline-block;margin:0 0 0 .3819820591em}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-delete-avatar-wrap{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;margin:1em 0 0;padding-left:0}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-delete-avatar{position:relative;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125);margin-bottom:0;border-radius:.25rem;-webkit-justify-content:space-between!important;justify-content:space-between!important;display:-webkit-flex!important;display:flex!important}#profilepress-myaccount-wrapper .profilepress-myaccount-content .pp-user-avatar{width:70px;height:70px;min-height:100%;-o-object-fit:cover;object-fit:cover;-o-object-position:center;object-position:center;border-radius:50%}#profilepress-myaccount-wrapper .profilepress-myaccount-content .ppmyac-remove-avatar{margin-bottom:.5rem!important;margin-top:.5rem!important;padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem;color:#fff;height:35px;background-color:#6c757d;display:inline-block;font-weight:400;text-align:center;vertical-align:middle;text-shadow:none;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid #6c757d;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}#profilepress-myaccount-wrapper .profilepress-myaccount-content .profilepress-myaccount-delete-cover-image-wrap .ppmyac-remove-avatar{margin-top:.75rem!important;margin-bottom:0!important}#profilepress-myaccount-wrapper .profilepress-myaccount-content input.profilepress-myaccount-form-control::-webkit-file-upload-button{background:#fff;border-radius:6px;font-size:14px;border:1px solid #ddd}#profilepress-myaccount-wrapper .profilepress-myaccount-content .select2-selection{border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;box-shadow:inset 0 1px 1px rgba(0,0,0,.125)}.pp-form-container .pp-field-user-avatar-picture-wrap{width:250px;height:auto;margin:auto;position:relative}.pp-form-container .pp-field-user-cover-image-wrap{margin:auto;position:relative}.pp-field-user-avatar-picture-wrap:hover .pp-profile-avatar-overlay-wrap,.pp-field-user-cover-image-wrap:hover .pp-cover-image-overlay-wrap{position:absolute;top:0;left:0;background:rgba(0,0,0,.5);text-align:center;box-sizing:border-box;padding:0;color:#fff;text-shadow:0 1px #666;line-height:21px;font-size:16px;height:100%;width:100%;border-radius:50%}.pp-field-user-cover-image-wrap:hover .pp-cover-image-overlay-wrap{border-radius:0}.pp-field-user-avatar-picture-wrap:hover .pp-profile-avatar-overlay,.pp-field-user-cover-image-wrap:hover .pp-cover-image-overlay{display:table;height:100%;width:100%}.pp-field-user-avatar-picture-wrap:hover .pp-profile-avatar-overlay ins,.pp-field-user-cover-image-wrap:hover .pp-cover-image-overlay ins{display:table-cell;vertical-align:middle;height:100%;text-decoration:none!important;background:0 0!important;color:#fff!important;border-bottom:none!important}.pp-field-user-avatar-picture-wrap:hover .pp-profile-avatar-overlay-wrap .pp-profile-avatar-overlay .pp-form-material-icons,.pp-field-user-cover-image-wrap:hover .pp-cover-image-overlay-wrap .pp-cover-image-overlay .pp-form-material-icons{font-size:35px!important;display:block!important;position:static!important;right:auto!important;top:auto!important;color:#fff!important;margin:0!important;width:auto!important;height:auto!important;cursor:pointer}html .select2.select2-container .select2-selection.select2-selection--multiple input.select2-search__field{border:0!important;height:auto!important}.select2.select2-container .select2-selection.select2-selection--multiple input.select2-search__field{border:0!important;box-shadow:none!important}.select2.select2-container .select2-selection.select2-selection--multiple li.select2-selection__choice{height:auto;line-height:normal}.pp-form-wrapper.pp-member-directory{opacity:0}.pp-form-wrapper.ppress-default-profile{max-width:1000px;width:100%;box-sizing:border-box;font-size:15px;color:#666;margin-bottom:30px;opacity:0}.pp-form-wrapper.ppress-default-profile *{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-sizing:border-box}.pp-form-wrapper.ppress-default-profile a,.pp-form-wrapper.ppress-default-profile a:hover{text-decoration:none!important}.pp-form-wrapper.ppress-default-profile .ppress-default-profile-cover{background-color:#eee;box-sizing:border-box;position:relative}.pp-form-wrapper.ppress-default-profile .ppress-default-profile-cover-e{text-align:center;overflow:hidden}.pp-form-wrapper.ppress-default-profile .ppress-default-profile-cover-e img{width:100%;display:block;overflow:hidden;border-radius:0;margin:0}.pp-form-wrapper.ppress-default-profile .ppress-dpf-header{position:relative;padding:0 0 25px;border-bottom:solid 2px #eee;min-height:85px;box-sizing:content-box}.pp-form-wrapper.ppress-default-profile .ppress-dpf-headericon{position:absolute;top:15px;right:0;vertical-align:middle;font-size:30px;height:30px;line-height:30px;z-index:66;margin-right:10px}.pp-form-wrapper.ppress-default-profile .ppress-dpf-headericon .ppress-dpf-edit-a .ppress-material-icons{font-size:30px}.pp-form-wrapper.ppress-default-profile a.ppress-dpf-edit-a{color:#aaa;text-decoration:none;border-bottom:0}.pp-form-wrapper.ppress-default-profile .ppress-dpf-headericon a:hover,.pp-form-wrapper.ppress-default-profile a.ppress-dpf-edit-a.active{color:#007bff}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-photo{float:left;position:absolute;margin:0 0 0 30px;box-sizing:border-box;width:200px;height:200px}.pp-form-wrapper.ppress-default-profile.ppdf-nocover .ppress-dpf-profile-photo{position:relative}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-photo img{width:100%;height:auto;border-radius:100%;display:block;overflow:hidden;margin:0;box-shadow:none;background:#fff;border:5px solid #fff}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-meta{padding-right:30px;-ms-word-break:break-all;word-break:break-word;word-wrap:break-word}.pp-form-wrapper.ppress-default-profile .ppress-dpf-main-meta{padding:10px 0 0;color:#999}.pp-form-wrapper.ppress-default-profile .ppress-dpf-name{font-size:24px;font-weight:700;margin-right:30px;color:#555;line-height:1.7em}.pp-form-wrapper.ppress-default-profile .ppress-dpf-clear{clear:both}.pp-form-wrapper.ppress-default-profile .ppress-dpf-meta span{margin:0 5px;font-size:14px;display:inline-block;line-height:.1}.pp-form-wrapper.ppress-default-profile .ppress-dpf-meta span:first-child{margin:0 5px 0 0}.pp-form-wrapper.ppress-default-profile .ppress-dpf-meta-text{margin:5px 0 0;line-height:1.4em;font-size:13px}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-nav{padding:10px;background:#444;text-align:center}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-nav-item a{color:#fff;font-size:14px;font-weight:600;padding:6px 10px 6px 28px;display:block;float:left;border-radius:4px;margin-left:5px;position:relative;border-bottom:0;text-decoration:none!important}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-nav-item a:hover{background:#555}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-nav-item .ppress-material-icons{font-size:18px;height:18px;line-height:1.5;position:absolute;display:block;left:10px}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-nav-item span.ppress-dpf-nav-title{padding-left:5px}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-nav-item.ppress-dpf-active a{background:#007bff}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-body{max-width:600px;padding-top:15px;padding-bottom:15px;margin:auto}.pp-form-wrapper.ppress-default-profile .pp-user-comment-no-item,.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-note{text-align:center;padding-top:20px;color:#666}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-note .ppress-material-icons{display:inline-block;font-size:70px;height:70px;line-height:70px}.pp-form-wrapper.ppress-default-profile .pp-user-comment-no-item span,.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-note span{margin-top:10px;display:block;font-size:16px;color:#888}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-note a{border:0!important}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-body-items{margin:0 0 30px}.pp-form-wrapper.ppress-default-profile .ppress-dpf-profile-body-item{position:relative;padding:15px 0 0}.pp-form-wrapper.ppress-default-profile .ppress-dpf-item-label{display:block;margin:0 0 8px;border-bottom:solid 2px #eee;padding-bottom:4px;font-size:15px;line-height:22px;font-weight:700}.pp-form-wrapper.ppress-default-profile .ppress-dpf-field-label-icon{float:left;margin:0 8px 0 0;height:22px;line-height:18px;display:inline-block;width:24px;text-align:center}.pp-form-wrapper.ppress-default-profile .ppress-dpf-field-label-icon i{font-size:22px;position:relative;top:1px}.pp-form-wrapper.ppress-default-profile .ppdf-nocover .ppress-dpf-profile-photo{float:none;margin:0 auto;text-align:center;position:relative}.pp-form-wrapper.ppress-default-profile .ppdf-nocover .ppress-dpf-profile-meta{padding-left:0!important;padding-right:0!important;text-align:center!important}.ppress-default-profile.ppressui340 .ppress-dpf-profile-nav{padding:0!important}.ppress-default-profile.ppressui340 .ppress-dpf-profile-nav-item a,.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav-item a{margin-left:0!important;border-radius:0!important}.ppress-dpf-profile-nav-item.ppressui340 .ppress-dpf-profile-body{padding-left:0!important;padding-right:0!important}.ppress-default-profile.ppressui340.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-photo{position:static!important;top:auto!important;left:auto!important}.ppress-default-profile.ppressui340 .ppress-dpf-header .ppress-dpf-profile-meta{text-align:center!important;padding:0!important;margin-top:-30px!important}.ppress-default-profile.ppressui340.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-meta{padding-top:0!important}.ppress-default-profile.ppressui340 .ppress-dpf-header .ppress-dpf-name{float:none!important;margin-right:0!important;font-size:18px!important}.ppress-default-profile.ppressui340 .ppress-dpf-header .ppress-dpf-meta-text{padding:0 20px!important}.ppress-default-profile.ppressui340 .ppress-dpf-profile-photo{position:relative!important;width:100px!important;height:100px!important;margin:0 auto!important;float:none!important;left:auto!important;text-align:center!important;top:-40px!important}.ppress-default-profile.ppressui340.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-photo{width:120px!important;height:120px!important}.ppress-default-profile.ppressui340 .ppress-dpf-nav-title{font-size:12px!important}.ppress-default-profile.ppressui340 .ppress-dpf-profile-nav-item .ppress-material-icons,.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav-item i{display:block!important;position:static!important;top:auto!important;left:auto!important;height:20px!important;line-height:20px!important}.ppress-default-profile.ppressui340.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-meta{margin-top:0!important}.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav{padding:0!important}.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav-item i{font-size:22px!important;height:22px!important;line-height:22px!important}.ppress-default-profile.ppressui500 .ppress-dpf-profile-body{padding-left:0!important;padding-right:0!important}.ppress-default-profile.ppressui500.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-photo{position:static!important;top:auto!important;left:auto!important;width:120px!important;height:120px!important}.ppress-default-profile.ppressui500 .ppress-dpf-profile-photo{position:relative!important;width:100px!important;height:100px!important;margin:0 auto!important;float:none!important;display:block!important;top:-40px!important;left:0!important}.ppress-default-profile.ppressui500 .ppress-dpf-header .ppress-dpf-profile-meta{text-align:center!important;padding:0!important;margin-top:-30px!important}.ppress-default-profile.ppressui500 .ppress-dpf-header .ppress-dpf-name{float:none!important;margin-right:0!important;font-size:21px!important}.ppress-default-profile.ppressui500 .ppress-dpf-header .ppress-dpf-meta-text{padding-top:10px!important}.ppress-default-profile.ppressui500 .ppress-dpf-header .ppress-dpf-meta{padding:0 20px!important;display:block!important}.ppress-default-profile.ppressui500 .ppress-dpf-nav-title{font-size:12px!important}.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav-item .ppress-material-icons{display:block!important;position:static!important;top:auto!important;left:auto!important;height:20px!important;line-height:20px!important}.ppress-default-profile.ppressui500.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-meta{margin-top:0!important}.ppress-default-profile.ppressui800 .ppress-dpf-profile-nav{padding:0!important}.ppress-default-profile.ppressui800 .ppress-dpf-profile-nav-item a{padding:10px 20px!important;margin-left:0!important;border-radius:0!important}.ppress-default-profile.ppressui800 .ppress-dpf-profile-photo{width:140px!important;height:140px!important;top:-70px!important}.ppress-default-profile.ppressui800.ppdf-nocover .ppress-dpf-header .ppress-dpf-profile-photo{top:auto!important}.ppress-default-profile.ppressui800 .ppress-dpf-header .ppress-dpf-meta-text{padding-top:10px!important}.ppress-default-profile.ppressui800 .ppress-dpf-nav-title{font-size:12px!important}.ppress-default-profile.ppressui800 .ppress-dpf-profile-nav-item .ppress-material-icons{display:block!important;position:static!important;top:auto!important;left:auto!important;font-size:20px!important;height:20px!important;line-height:20px!important}.ppress-default-profile.ppressui960 .ppress-dpf-profile-photo{width:140px!important;height:140px!important;top:-70px!important}.ppress-default-profile.ppressui960.ppdf-nocover .ppress-dpf-profile-meta{margin-top:-50px!important}.ppress-default-profile.ppressui340 .ppress-dpf-profile-nav-item a,.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav-item a{padding:5px 11px!important;font-size:12px!important}.ppress-default-profile.ppressui340 .ppress-dpf-profile-nav-item .ppress-material-icons,.ppress-default-profile.ppressui500 .ppress-dpf-profile-nav-item .ppress-material-icons{font-size:14px!important}.ppress-default-profile.ppressui340 span.ppress-dpf-nav-title,.ppress-default-profile.ppressui500 span.ppress-dpf-nav-title{font-size:10px!important}.pp-form-wrapper.ppress-default-profile ul.pp-user-post-list{list-style:none;margin:0;padding:0}.pp-form-wrapper.ppress-default-profile li.pp-user-post-item{padding:20px 0;border-bottom:1px solid #eee}.pp-form-wrapper.ppress-default-profile .pp-user-post-item a,.pp-form-wrapper.ppress-default-profile .pp-user-post-item h3{font-size:16px;font-weight:400;margin:0;text-decoration:none}.pp-form-wrapper.ppress-default-profile .pp-user-post-item h3.pp-post-item-head{line-height:20px}.pp-form-wrapper.ppress-default-profile .ppress-dpf-more-post-wrap{text-align:center;padding-top:30px}.pp-form-wrapper.ppress-default-profile a.ppress-dpf-more-post-btn{font-size:15px;border:0;display:block;width:100%;line-height:1em;padding:15px;text-decoration:none;text-align:center;text-transform:none;font-weight:400;transition:.25s;border-radius:4px;box-shadow:0 4px 6px rgba(50,50,93,.11),0 1px 3px rgba(0,0,0,.08);max-width:250px;margin:0 auto;color:#fff;background:#007bff}.pp-form-wrapper.ppress-default-profile .pp-user-comment-item{padding:20px 0;border-bottom:1px solid #eee}.pp-form-wrapper.ppress-default-profile .pp-user-comment-item-link a{color:inherit}.pp-form-wrapper.ppress-default-profile .pp-user-comment-no-item+.ppress-dpf-more-post-wrap{display:none}.pp-member-directory .ppressmd-member-directory-header.ppressmd-form{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-items:stretch;align-items:stretch;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;width:100%}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row:not(.ppressmd-member-directory-filters-bar){display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-items:baseline;align-items:baseline;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;margin:0 0 10px}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row.ppressmd-member-directory-search-row{-webkit-justify-content:flex-end;justify-content:flex-end}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-search-line{display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-items:center;align-items:center;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;width:60%}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-search-line label{-webkit-flex:1;flex:1;margin:0 10px 0 0;min-width:90px;max-width:85%}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-search-line label .ppressmd-search-line{-webkit-appearance:textfield;width:100%;padding:0 12px!important;display:block!important;border-radius:2px;outline:0!important;cursor:text!important;font-size:15px!important;height:40px!important;box-sizing:border-box!important;box-shadow:none!important;margin:0!important;position:static}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-search-line .ppressmd-do-search{min-width:15%;width:auto}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-nav-line{display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:space-between;justify-content:space-between;-webkit-align-items:center;align-items:center;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;width:100%}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-nav-line .ppressmd-member-directory-sorting{display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-items:baseline;align-items:baseline;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex:5;flex:5}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-nav-line .ppressmd-member-directory-sorting .ppressmd-member-directory-sorting-a{display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-items:baseline;align-items:baseline;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;position:relative;cursor:pointer}.pp-member-directory .ppressmd-member-directory-header a{text-decoration:none;border-bottom:none;box-shadow:none}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-nav-line .ppress-material-icons{display:inline;vertical-align:middle}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-nav-line .ppressmd-member-directory-filters{display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-end;justify-content:flex-end;-webkit-align-items:baseline;align-items:baseline;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex:2;flex:2;text-align:right}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-nav-line .ppressmd-member-directory-filters .ppressmd-member-directory-filters-a{display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:flex-start;justify-content:flex-start;-webkit-align-items:baseline;align-items:baseline;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;cursor:pointer}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-nav-line .ppressmd-member-directory-filters .ppressmd-member-directory-filters-a a{margin:0 5px 0 0}.ppressmd-member-directory-header:not(.ppmd-filters-expand) .ppressmd-member-directory-header-row .ppressmd-member-directory-nav-line .ppressmd-member-directory-filters .ppressmd-member-directory-filters-a .ppress-up{display:none}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-search.ppressmd-search-invisible,.ppressmd-member-directory-header.ppmd-filters-expand .ppressmd-member-directory-header-row .ppressmd-member-directory-nav-line .ppressmd-member-directory-filters .ppressmd-member-directory-filters-a .ppress-down{display:none}.ppressmd-new-dropdown{font-size:16px;margin:0;position:absolute;height:auto;background:#fff;z-index:10;display:none;border:1px solid #ddd;box-shadow:0 7px 14px 0 rgba(50,50,93,.1),0 3px 6px 0 rgba(0,0,0,.07);-webkit-box-shadow:0 7px 14px 0 rgba(50,50,93,.1),0 3px 6px 0 rgba(0,0,0,.07);box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;border-radius:5px 5px 5px 5px;-moz-border-radius:5px 5px 5px 5px;-webkit-border-radius:5px 5px 5px 5px}.ppressmd-new-dropdown ul li{list-style-type:none;padding:0;margin:0}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-nav-line .ppressmd-member-directory-sorting .ppressmd-member-directory-sorting-a .ppressmd-new-dropdown{top:24px;width:200px;left:-12px}.ppressmd-new-dropdown ul li a{display:block;padding:8px 12px;line-height:1}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row.ppressmd-member-directory-filters-bar{padding:0 0 10px}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row.ppressmd-header-row-invisible{margin:0}.ppressmd-member-directory-header.ppmd-filters-expand .ppressmd-member-directory-header-row .ppressmd-search.ppressmd-search-invisible{display:grid}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-search{margin:0;width:100%;display:grid;grid-template-rows:auto 1fr;grid-template-columns:repeat(3,1fr);grid-gap:10px;grid-auto-rows:minmax(-webkit-max-content,auto);grid-auto-rows:minmax(max-content,auto);-ms-grid-template-rows:auto 1fr;-ms-grid-template-columns:repeat(3,1fr);-ms-grid-gap:10px;-ms-grid-auto-rows:minmax(max-content,auto);-webkit-align-items:center;align-items:center}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-search .ppressmd-search-filter{display:flex;flex-direction:row;justify-content:flex-start;align-items:baseline;flex-wrap:nowrap;width:100%}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-search .ppressmd-search-filter.ppressmd-text-filter-type input{width:100%;padding:10px 30px}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-search-line label .ppressmd-search-line,.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-search .ppressmd-search-filter.ppressmd-text-filter-type input:not(.select2-search__field),.pp-member-directory .ppressmd-member-directory-header .select2.select2-container .select2-selection{background-color:transparent;border:1px solid #ddd!important}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-nav-line .ppress-material-icons,.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-member-directory-search-line label .ppressmd-search-line,.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row .ppressmd-search .ppressmd-search-filter.ppressmd-text-filter-type input,.pp-member-directory .ppressmd-member-directory-header .select2.select2-container .select2-selection__rendered{color:#666;background-color:transparent}.pp-member-directory .ppressmd-member-directory-header .ppressmd-member-directory-header-row input[type=search]:focus{border:1px solid #bbb!important}.pp-member-directory .ppressmd-member-directory-header .ppressmd-button{border:0!important;display:block;width:100%;line-height:1em!important;padding:16px 20px!important;text-decoration:none!important;text-align:center;text-transform:none!important;font-weight:400!important;overflow:hidden;position:relative;transition:.25s;box-sizing:border-box;border-radius:4px!important;box-shadow:none;vertical-align:middle!important;height:auto!important;cursor:pointer!important;text-shadow:none;font-family:inherit;outline:0!important;margin:0;-webkit-appearance:none}.pp-member-directory .ppressmd-members-total-wrap{text-align:center;margin:0 0 10px}.pp-member-directory .ppressmd-members-total{font-size:20px;font-weight:300}.pp-member-directory .ppressmd-member-directory-header .select2.select2-container{width:100%!important}.pp-member-directory .ppressmd-member-directory-header .select2-search.select2-search--inline .select2-search__field{width:auto!important}.pp-member-directory .ppressmd-member-directory-header .select2.select2-container .select2-selection{display:block!important;height:40px;padding:0 0 0 12px!important;overflow:hidden!important;position:relative!important;white-space:nowrap!important;line-height:35px!important;font-size:15px!important;text-align:left!important;text-decoration:none!important;border-radius:2px!important;background-clip:padding-box!important;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:0 0!important}.pp-member-directory .ppressmd-member-directory-header .select2.select2-container .select2-selection .select2-selection__arrow{display:inline-block!important;width:34px!important;height:100%!important;position:absolute!important;right:0!important;top:0!important;border-radius:0 2px 2px 0!important;background-clip:padding-box!important;text-align:center!important;background:0 0!important;border-left:0!important}.pp-member-directory .ppressmd-member-directory-header .select2-container.select2-container--open .select2-dropdown{border:1px solid #ddd;border-top:0;border-radius:0}.pp-member-directory .ppressmd-member-directory-header .select2-container.select2-container--open .select2-dropdown .select2-results li{list-style:none;display:list-item;background-image:none;font-size:15px;margin:5px!important;color:#666!important;padding:3px 7px 4px!important;cursor:pointer;min-height:1em!important}.pp-member-directory .ppressmd-member-directory-header .select2.select2-container .select2-selection.select2-selection--multiple{height:auto!important;line-height:.8!important}.pp-member-directory .ppressmd-member-directory-header .select2-container--default .select2-selection--single .select2-selection__rendered{padding-left:0!important;line-height:37px}.pp-member-directory .ppressmd-member-directory-header .select2-container--default .select2-selection--multiple .select2-selection__rendered{line-height:37px;box-sizing:border-box;list-style:none;margin:0;padding-left:0!important;padding-right:30px;width:100%;font-size:13px}.pp-member-directory .ppressmd-member-directory-header .select2-results li.select2-results__option.select2-results__option--highlighted{background:0 0!important;background:#f4f4f4!important;color:#666!important}.pp-member-directory .ppressmd-member-directory-header .select2-container--default .select2-selection--single .select2-selection__clear{right:10px;margin:0!important}.pp-member-directory .ppressmd-member-directory-header .select2-container--default .select2-selection--multiple .select2-selection__clear{right:10px;font-size:30px;margin:0!important}.pp-member-directory .ppressmd-member-directory-header .select2-container--default .select2-selection--multiple .select2-selection__clear,.pp-member-directory .ppressmd-member-directory-header .select2-container--default .select2-selection--single .select2-selection__arrow b,.pp-member-directory .ppressmd-member-directory-header .select2-container--default .select2-selection--single .select2-selection__clear{color:#888!important}.pp-member-directory .ppressmd-member-directory-header .select2-container--default .select2-selection--multiple .select2-selection__clear{position:absolute}.pp-member-directory .ppressmd-member-directory-header .select2-container--default .select2-selection--multiple .select2-selection__choice{padding:3px 3px 3px 5px}.pp-member-directory .ppressmd-member-directory-header .select2-container .select2-search.select2-search--inline>input{border:0!important;padding:0!important;border-radius:0!important}.pp-member-directory .ppressmd-member-directory-header .select2-container--default .select2-selection--multiple .select2-selection__rendered li{overflow-x:hidden;text-overflow:ellipsis;max-width:100%;box-sizing:border-box}.pp-member-directory .ppressmd-member-directory-header .select2-container--default .select2-selection--single .select2-selection__clear{font-size:20px!important}.pp-member-directory .ppmd-pagination-wrap{font-size:16px;width:100%;margin:0 auto 10px;padding:0;text-align:center}.pp-member-directory .ppmd-pagination-wrap .page-numbers{display:inline-block;width:auto;height:34px;line-height:34px;transition:all .2s linear;padding:0 14px;color:#666;font-weight:400}.pp-member-directory .ppmd-pagination-wrap .page-numbers.current{background:#007bff;color:#fff}.pp-member-directory .ppmd-pagination-wrap .page-numbers .ppress-material-icons{vertical-align:middle}
|
changelog.txt
CHANGED
@@ -1,4 +1,9 @@
|
|
1 |
-
= 3.1.
|
|
|
|
|
|
|
|
|
|
|
2 |
* Fixed issue where logout redirect wasn’t working.
|
3 |
* Fixed issue where line breaks weren't maintained.
|
4 |
* Fixed bug where redirect after login was to an invalid url.
|
1 |
+
= 3.1.13 =
|
2 |
+
* Added checks to ensure pages exist before setting/redirecting to them.
|
3 |
+
* Fixed user profile responsiveness.
|
4 |
+
* Fixes PHP Fatal error: Uncaught Error: Class "DOMDocument" not found.
|
5 |
+
|
6 |
+
= 3.1.12 =
|
7 |
* Fixed issue where logout redirect wasn’t working.
|
8 |
* Fixed issue where line breaks weren't maintained.
|
9 |
* Fixed bug where redirect after login was to an invalid url.
|
languages/wp-user-avatar.pot
CHANGED
@@ -2,9 +2,9 @@
|
|
2 |
# This file is distributed under the same license as the ProfilePress package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: ProfilePress 3.1.
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wp-user-avatar\n"
|
7 |
-
"POT-Creation-Date: 2021-07-
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -452,9 +452,9 @@ msgstr ""
|
|
452 |
#: src/Admin/SettingsPages/DragDropBuilder/Metabox.php:162
|
453 |
#: src/Admin/SettingsPages/DragDropBuilder/Metabox.php:223
|
454 |
#: src/Admin/SettingsPages/GeneralSettings.php:236
|
455 |
-
#: src/Functions/GlobalFunctions.php:
|
456 |
-
#: src/Functions/GlobalFunctions.php:
|
457 |
-
#: src/Functions/GlobalFunctions.php:
|
458 |
msgid "Select..."
|
459 |
msgstr ""
|
460 |
|
@@ -530,7 +530,7 @@ msgid "Select Icon"
|
|
530 |
msgstr ""
|
531 |
|
532 |
#: src/Admin/SettingsPages/DragDropBuilder/DragDropBuilder.php:1202
|
533 |
-
#: src/Functions/GlobalFunctions.php:
|
534 |
#: src/Themes/DragDrop/AbstractMemberDirectoryTheme.php:202
|
535 |
msgid "Standard Fields"
|
536 |
msgstr ""
|
@@ -540,7 +540,7 @@ msgid "Extra Fields"
|
|
540 |
msgstr ""
|
541 |
|
542 |
#: src/Admin/SettingsPages/DragDropBuilder/DragDropBuilder.php:1205
|
543 |
-
#: src/Classes/ExtensionManager.php:53 src/Functions/GlobalFunctions.php:
|
544 |
#: src/Themes/DragDrop/AbstractMemberDirectoryTheme.php:216
|
545 |
msgid "Custom Fields"
|
546 |
msgstr ""
|
@@ -721,7 +721,7 @@ msgstr ""
|
|
721 |
|
722 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/Bio.php:22
|
723 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/UserProfile/Bio.php:22
|
724 |
-
#: src/Functions/GlobalFunctions.php:
|
725 |
#: src/Themes/DragDrop/AbstractMemberDirectoryTheme.php:211
|
726 |
#: src/Themes/DragDrop/AbstractTheme.php:189
|
727 |
msgid "Biography"
|
@@ -972,7 +972,7 @@ msgstr ""
|
|
972 |
|
973 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/DisplayName.php:22
|
974 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/UserProfile/DisplayName.php:22
|
975 |
-
#: src/Functions/GlobalFunctions.php:
|
976 |
#: src/ShortcodeParser/Builder/FieldsShortcodeCallback.php:318
|
977 |
#: src/Themes/DragDrop/AbstractMemberDirectoryTheme.php:208
|
978 |
#: src/Themes/DragDrop/AbstractMemberDirectoryTheme.php:460
|
@@ -997,7 +997,7 @@ msgstr ""
|
|
997 |
|
998 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/Email.php:22
|
999 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/UserProfile/Email.php:22
|
1000 |
-
#: src/Functions/GlobalFunctions.php:
|
1001 |
#: src/ShortcodeParser/Builder/FieldsShortcodeCallback.php:210
|
1002 |
#: src/Themes/DragDrop/AbstractMemberDirectoryTheme.php:206
|
1003 |
#: src/Themes/DragDrop/AbstractTheme.php:162
|
@@ -1007,7 +1007,7 @@ msgstr ""
|
|
1007 |
|
1008 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/FirstName.php:22
|
1009 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/UserProfile/FirstName.php:22
|
1010 |
-
#: src/Functions/GlobalFunctions.php:
|
1011 |
#: src/ShortcodeParser/Builder/FieldsShortcodeCallback.php:350
|
1012 |
#: src/Themes/DragDrop/AbstractMemberDirectoryTheme.php:209
|
1013 |
#: src/Themes/DragDrop/AbstractMemberDirectoryTheme.php:461
|
@@ -1027,7 +1027,7 @@ msgstr ""
|
|
1027 |
|
1028 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/LastName.php:22
|
1029 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/UserProfile/LastName.php:22
|
1030 |
-
#: src/Functions/GlobalFunctions.php:
|
1031 |
#: src/ShortcodeParser/Builder/FieldsShortcodeCallback.php:383
|
1032 |
#: src/Themes/DragDrop/AbstractMemberDirectoryTheme.php:210
|
1033 |
#: src/Themes/DragDrop/AbstractMemberDirectoryTheme.php:462
|
@@ -1060,7 +1060,7 @@ msgstr ""
|
|
1060 |
|
1061 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/Nickname.php:22
|
1062 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/UserProfile/Nickname.php:22
|
1063 |
-
#: src/Functions/GlobalFunctions.php:
|
1064 |
#: src/ShortcodeParser/Builder/FieldsShortcodeCallback.php:286
|
1065 |
#: src/ShortcodeParser/Builder/FieldsShortcodeCallback.php:300
|
1066 |
#: src/ShortcodeParser/MyAccount/edit-profile.tmpl.php:138
|
@@ -1216,7 +1216,7 @@ msgstr ""
|
|
1216 |
|
1217 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/UserProfile/Username.php:22
|
1218 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/Username.php:22
|
1219 |
-
#: src/Functions/GlobalFunctions.php:
|
1220 |
#: src/ShortcodeParser/Builder/FieldsShortcodeCallback.php:135
|
1221 |
#: src/Themes/DragDrop/AbstractMemberDirectoryTheme.php:463
|
1222 |
#: src/Themes/DragDrop/AbstractTheme.php:159
|
@@ -1467,7 +1467,7 @@ msgid "New User Admin Notification"
|
|
1467 |
msgstr ""
|
1468 |
|
1469 |
#: src/Admin/SettingsPages/EmailSettings/EmailSettingsPage.php:80
|
1470 |
-
#: src/Functions/GlobalFunctions.php:
|
1471 |
msgid "[%s] New User Registration"
|
1472 |
msgstr ""
|
1473 |
|
@@ -3187,59 +3187,59 @@ msgid "Redirect URL"
|
|
3187 |
msgstr ""
|
3188 |
|
3189 |
#. translators: %s: User login.
|
3190 |
-
#: src/Functions/GlobalFunctions.php:
|
3191 |
msgid "Username: %s"
|
3192 |
msgstr ""
|
3193 |
|
3194 |
-
#: src/Functions/GlobalFunctions.php:
|
3195 |
msgid "To set your password, visit the following address:"
|
3196 |
msgstr ""
|
3197 |
|
3198 |
#. translators: Login details notification email subject. %s: Site title.
|
3199 |
-
#: src/Functions/GlobalFunctions.php:
|
3200 |
msgid "[%s] Login Details"
|
3201 |
msgstr ""
|
3202 |
|
3203 |
-
#: src/Functions/GlobalFunctions.php:
|
3204 |
msgid ""
|
3205 |
"It must be unique for each field, not a reserve text, in lowercase letters "
|
3206 |
"only with an underscore ( _ ) separating words e.g job_title"
|
3207 |
msgstr ""
|
3208 |
|
3209 |
-
#: src/Functions/GlobalFunctions.php:
|
3210 |
msgid "%s (WooCommerce Billing Address)"
|
3211 |
msgstr ""
|
3212 |
|
3213 |
-
#: src/Functions/GlobalFunctions.php:
|
3214 |
msgid "%s (WooCommerce Shipping Address)"
|
3215 |
msgstr ""
|
3216 |
|
3217 |
-
#: src/Functions/GlobalFunctions.php:
|
3218 |
msgid "First and Last Names"
|
3219 |
msgstr ""
|
3220 |
|
3221 |
-
#: src/Functions/GlobalFunctions.php:
|
3222 |
msgid "Last and First Names"
|
3223 |
msgstr ""
|
3224 |
|
3225 |
-
#: src/Functions/GlobalFunctions.php:
|
3226 |
msgid "Registration Date"
|
3227 |
msgstr ""
|
3228 |
|
3229 |
-
#: src/Functions/GlobalFunctions.php:
|
3230 |
msgid "There was an problem while verifying your file."
|
3231 |
msgstr ""
|
3232 |
|
3233 |
-
#: src/Functions/GlobalFunctions.php:
|
3234 |
msgid "Sorry, this file extension is not permitted for security reasons."
|
3235 |
msgstr ""
|
3236 |
|
3237 |
-
#: src/Functions/GlobalFunctions.php:
|
3238 |
msgid "Sorry, this file type is not permitted for security reasons."
|
3239 |
msgstr ""
|
3240 |
|
3241 |
-
#: src/Functions/GlobalFunctions.php:
|
3242 |
-
#: src/Functions/GlobalFunctions.php:
|
3243 |
msgid "Error: The file you uploaded is not accepted on our website."
|
3244 |
msgstr ""
|
3245 |
|
@@ -5421,9 +5421,9 @@ msgstr ""
|
|
5421 |
msgid "ProfilePress"
|
5422 |
msgstr ""
|
5423 |
|
5424 |
-
#. #-#-#-#-# wp-user-avatar.pot (ProfilePress 3.1.
|
5425 |
#. Plugin URI of the plugin/theme
|
5426 |
-
#. #-#-#-#-# wp-user-avatar.pot (ProfilePress 3.1.
|
5427 |
#. Author URI of the plugin/theme
|
5428 |
msgid "https://profilepress.net"
|
5429 |
msgstr ""
|
2 |
# This file is distributed under the same license as the ProfilePress package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: ProfilePress 3.1.13\n"
|
6 |
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wp-user-avatar\n"
|
7 |
+
"POT-Creation-Date: 2021-07-22 20:24:48+00:00\n"
|
8 |
"MIME-Version: 1.0\n"
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
452 |
#: src/Admin/SettingsPages/DragDropBuilder/Metabox.php:162
|
453 |
#: src/Admin/SettingsPages/DragDropBuilder/Metabox.php:223
|
454 |
#: src/Admin/SettingsPages/GeneralSettings.php:236
|
455 |
+
#: src/Functions/GlobalFunctions.php:1237
|
456 |
+
#: src/Functions/GlobalFunctions.php:1265
|
457 |
+
#: src/Functions/GlobalFunctions.php:1287
|
458 |
msgid "Select..."
|
459 |
msgstr ""
|
460 |
|
530 |
msgstr ""
|
531 |
|
532 |
#: src/Admin/SettingsPages/DragDropBuilder/DragDropBuilder.php:1202
|
533 |
+
#: src/Functions/GlobalFunctions.php:1290
|
534 |
#: src/Themes/DragDrop/AbstractMemberDirectoryTheme.php:202
|
535 |
msgid "Standard Fields"
|
536 |
msgstr ""
|
540 |
msgstr ""
|
541 |
|
542 |
#: src/Admin/SettingsPages/DragDropBuilder/DragDropBuilder.php:1205
|
543 |
+
#: src/Classes/ExtensionManager.php:53 src/Functions/GlobalFunctions.php:1293
|
544 |
#: src/Themes/DragDrop/AbstractMemberDirectoryTheme.php:216
|
545 |
msgid "Custom Fields"
|
546 |
msgstr ""
|
721 |
|
722 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/Bio.php:22
|
723 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/UserProfile/Bio.php:22
|
724 |
+
#: src/Functions/GlobalFunctions.php:1277
|
725 |
#: src/Themes/DragDrop/AbstractMemberDirectoryTheme.php:211
|
726 |
#: src/Themes/DragDrop/AbstractTheme.php:189
|
727 |
msgid "Biography"
|
972 |
|
973 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/DisplayName.php:22
|
974 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/UserProfile/DisplayName.php:22
|
975 |
+
#: src/Functions/GlobalFunctions.php:1275
|
976 |
#: src/ShortcodeParser/Builder/FieldsShortcodeCallback.php:318
|
977 |
#: src/Themes/DragDrop/AbstractMemberDirectoryTheme.php:208
|
978 |
#: src/Themes/DragDrop/AbstractMemberDirectoryTheme.php:460
|
997 |
|
998 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/Email.php:22
|
999 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/UserProfile/Email.php:22
|
1000 |
+
#: src/Functions/GlobalFunctions.php:1276
|
1001 |
#: src/ShortcodeParser/Builder/FieldsShortcodeCallback.php:210
|
1002 |
#: src/Themes/DragDrop/AbstractMemberDirectoryTheme.php:206
|
1003 |
#: src/Themes/DragDrop/AbstractTheme.php:162
|
1007 |
|
1008 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/FirstName.php:22
|
1009 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/UserProfile/FirstName.php:22
|
1010 |
+
#: src/Functions/GlobalFunctions.php:1272
|
1011 |
#: src/ShortcodeParser/Builder/FieldsShortcodeCallback.php:350
|
1012 |
#: src/Themes/DragDrop/AbstractMemberDirectoryTheme.php:209
|
1013 |
#: src/Themes/DragDrop/AbstractMemberDirectoryTheme.php:461
|
1027 |
|
1028 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/LastName.php:22
|
1029 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/UserProfile/LastName.php:22
|
1030 |
+
#: src/Functions/GlobalFunctions.php:1273
|
1031 |
#: src/ShortcodeParser/Builder/FieldsShortcodeCallback.php:383
|
1032 |
#: src/Themes/DragDrop/AbstractMemberDirectoryTheme.php:210
|
1033 |
#: src/Themes/DragDrop/AbstractMemberDirectoryTheme.php:462
|
1060 |
|
1061 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/Nickname.php:22
|
1062 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/UserProfile/Nickname.php:22
|
1063 |
+
#: src/Functions/GlobalFunctions.php:1274
|
1064 |
#: src/ShortcodeParser/Builder/FieldsShortcodeCallback.php:286
|
1065 |
#: src/ShortcodeParser/Builder/FieldsShortcodeCallback.php:300
|
1066 |
#: src/ShortcodeParser/MyAccount/edit-profile.tmpl.php:138
|
1216 |
|
1217 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/UserProfile/Username.php:22
|
1218 |
#: src/Admin/SettingsPages/DragDropBuilder/Fields/Username.php:22
|
1219 |
+
#: src/Functions/GlobalFunctions.php:1271
|
1220 |
#: src/ShortcodeParser/Builder/FieldsShortcodeCallback.php:135
|
1221 |
#: src/Themes/DragDrop/AbstractMemberDirectoryTheme.php:463
|
1222 |
#: src/Themes/DragDrop/AbstractTheme.php:159
|
1467 |
msgstr ""
|
1468 |
|
1469 |
#: src/Admin/SettingsPages/EmailSettings/EmailSettingsPage.php:80
|
1470 |
+
#: src/Functions/GlobalFunctions.php:723 src/RegisterActivation/Base.php:89
|
1471 |
msgid "[%s] New User Registration"
|
1472 |
msgstr ""
|
1473 |
|
3187 |
msgstr ""
|
3188 |
|
3189 |
#. translators: %s: User login.
|
3190 |
+
#: src/Functions/GlobalFunctions.php:793
|
3191 |
msgid "Username: %s"
|
3192 |
msgstr ""
|
3193 |
|
3194 |
+
#: src/Functions/GlobalFunctions.php:794
|
3195 |
msgid "To set your password, visit the following address:"
|
3196 |
msgstr ""
|
3197 |
|
3198 |
#. translators: Login details notification email subject. %s: Site title.
|
3199 |
+
#: src/Functions/GlobalFunctions.php:802
|
3200 |
msgid "[%s] Login Details"
|
3201 |
msgstr ""
|
3202 |
|
3203 |
+
#: src/Functions/GlobalFunctions.php:1100
|
3204 |
msgid ""
|
3205 |
"It must be unique for each field, not a reserve text, in lowercase letters "
|
3206 |
"only with an underscore ( _ ) separating words e.g job_title"
|
3207 |
msgstr ""
|
3208 |
|
3209 |
+
#: src/Functions/GlobalFunctions.php:1221
|
3210 |
msgid "%s (WooCommerce Billing Address)"
|
3211 |
msgstr ""
|
3212 |
|
3213 |
+
#: src/Functions/GlobalFunctions.php:1225
|
3214 |
msgid "%s (WooCommerce Shipping Address)"
|
3215 |
msgstr ""
|
3216 |
|
3217 |
+
#: src/Functions/GlobalFunctions.php:1269
|
3218 |
msgid "First and Last Names"
|
3219 |
msgstr ""
|
3220 |
|
3221 |
+
#: src/Functions/GlobalFunctions.php:1270
|
3222 |
msgid "Last and First Names"
|
3223 |
msgstr ""
|
3224 |
|
3225 |
+
#: src/Functions/GlobalFunctions.php:1278
|
3226 |
msgid "Registration Date"
|
3227 |
msgstr ""
|
3228 |
|
3229 |
+
#: src/Functions/GlobalFunctions.php:1395
|
3230 |
msgid "There was an problem while verifying your file."
|
3231 |
msgstr ""
|
3232 |
|
3233 |
+
#: src/Functions/GlobalFunctions.php:1400
|
3234 |
msgid "Sorry, this file extension is not permitted for security reasons."
|
3235 |
msgstr ""
|
3236 |
|
3237 |
+
#: src/Functions/GlobalFunctions.php:1404
|
3238 |
msgid "Sorry, this file type is not permitted for security reasons."
|
3239 |
msgstr ""
|
3240 |
|
3241 |
+
#: src/Functions/GlobalFunctions.php:1408
|
3242 |
+
#: src/Functions/GlobalFunctions.php:1412
|
3243 |
msgid "Error: The file you uploaded is not accepted on our website."
|
3244 |
msgstr ""
|
3245 |
|
5421 |
msgid "ProfilePress"
|
5422 |
msgstr ""
|
5423 |
|
5424 |
+
#. #-#-#-#-# wp-user-avatar.pot (ProfilePress 3.1.13) #-#-#-#-#
|
5425 |
#. Plugin URI of the plugin/theme
|
5426 |
+
#. #-#-#-#-# wp-user-avatar.pot (ProfilePress 3.1.13) #-#-#-#-#
|
5427 |
#. Author URI of the plugin/theme
|
5428 |
msgid "https://profilepress.net"
|
5429 |
msgstr ""
|
readme.txt
CHANGED
@@ -3,9 +3,9 @@ Contributors: properfraction, collizo4sky
|
|
3 |
Donate link: https://profilepress.net/pricing/
|
4 |
Tags: user registration, user profile, registration form, membership, login form, login, registration, password reset, members, users, profile, front-end profile, edit profile, avatar, profile picture
|
5 |
Requires at least: 4.7
|
6 |
-
Requires PHP:
|
7 |
-
Tested up to: 5.
|
8 |
-
Stable tag: 3.1.
|
9 |
License: GPLv2 or later
|
10 |
|
11 |
Modern membership plugin for user registration, login form, user profile, member directories & content restriction.
|
@@ -117,6 +117,11 @@ No. You can create and manage your forms, user profiles and member directories w
|
|
117 |
|
118 |
== Changelog ==
|
119 |
|
|
|
|
|
|
|
|
|
|
|
120 |
= 3.1.12 =
|
121 |
* Fixed issue where logout redirect wasn’t working.
|
122 |
* Fixed issue where line breaks weren't maintained.
|
3 |
Donate link: https://profilepress.net/pricing/
|
4 |
Tags: user registration, user profile, registration form, membership, login form, login, registration, password reset, members, users, profile, front-end profile, edit profile, avatar, profile picture
|
5 |
Requires at least: 4.7
|
6 |
+
Requires PHP: 7.0.10
|
7 |
+
Tested up to: 5.8
|
8 |
+
Stable tag: 3.1.13
|
9 |
License: GPLv2 or later
|
10 |
|
11 |
Modern membership plugin for user registration, login form, user profile, member directories & content restriction.
|
117 |
|
118 |
== Changelog ==
|
119 |
|
120 |
+
= 3.1.13 =
|
121 |
+
* Added checks to ensure pages exist before setting/redirecting to them.
|
122 |
+
* Fixed user profile responsiveness.
|
123 |
+
* Fixes PHP Fatal error: Uncaught Error: Class "DOMDocument" not found.
|
124 |
+
|
125 |
= 3.1.12 =
|
126 |
* Fixed issue where logout redirect wasn’t working.
|
127 |
* Fixed issue where line breaks weren't maintained.
|
src/Classes/Autologin.php
CHANGED
@@ -38,10 +38,6 @@ class Autologin
|
|
38 |
}
|
39 |
}
|
40 |
|
41 |
-
if (defined('FORCE_SSL_ADMIN') && FORCE_SSL_ADMIN === true) {
|
42 |
-
$secure_cookie = true;
|
43 |
-
}
|
44 |
-
|
45 |
wp_set_auth_cookie($user_id, true, $secure_cookie);
|
46 |
wp_set_current_user($user_id);
|
47 |
}
|
38 |
}
|
39 |
}
|
40 |
|
|
|
|
|
|
|
|
|
41 |
wp_set_auth_cookie($user_id, true, $secure_cookie);
|
42 |
wp_set_current_user($user_id);
|
43 |
}
|
src/Classes/ModifyRedirectDefaultLinks.php
CHANGED
@@ -47,11 +47,11 @@ class ModifyRedirectDefaultLinks
|
|
47 |
{
|
48 |
$page_id = ppress_get_setting('set_lost_password_url');
|
49 |
|
50 |
-
if ( ! empty($page_id)) {
|
51 |
$val = get_permalink($page_id);
|
52 |
}
|
53 |
|
54 |
-
return apply_filters('ppress_password_reset_url',
|
55 |
}
|
56 |
|
57 |
/**
|
@@ -63,11 +63,9 @@ class ModifyRedirectDefaultLinks
|
|
63 |
|
64 |
$page_id = ppress_get_setting('set_lost_password_url');
|
65 |
|
66 |
-
if (empty($page_id)) return;
|
67 |
|
68 |
-
|
69 |
-
|
70 |
-
wp_safe_redirect($password_reset_url);
|
71 |
exit;
|
72 |
}
|
73 |
|
@@ -84,7 +82,7 @@ class ModifyRedirectDefaultLinks
|
|
84 |
{
|
85 |
$login_page_id = ppress_get_setting('set_login_url');
|
86 |
|
87 |
-
if ( ! empty($login_page_id)) {
|
88 |
|
89 |
$url = get_permalink($login_page_id);
|
90 |
|
@@ -95,20 +93,23 @@ class ModifyRedirectDefaultLinks
|
|
95 |
if ($force_reauth) {
|
96 |
$url = add_query_arg('reauth', '1', $url);
|
97 |
}
|
|
|
|
|
98 |
}
|
99 |
|
100 |
-
return apply_filters('ppress_login_url',
|
101 |
}
|
102 |
|
103 |
-
|
104 |
/**
|
105 |
* Force redirect default login to page with login shortcode
|
106 |
*/
|
107 |
-
function redirect_login_page()
|
108 |
{
|
109 |
if ( ! apply_filters('ppress_default_login_redirect_enabled', true)) return;
|
110 |
|
111 |
-
|
|
|
|
|
112 |
|
113 |
$login_url = ppress_login_url();
|
114 |
|
@@ -133,25 +134,27 @@ class ModifyRedirectDefaultLinks
|
|
133 |
*
|
134 |
* @return string page url with registration shortcode.
|
135 |
*/
|
136 |
-
function register_url_func($val)
|
137 |
{
|
138 |
$page_id = ppress_get_setting('set_registration_url');
|
139 |
|
140 |
-
if ( ! empty($page_id)) {
|
141 |
$val = get_permalink($page_id);
|
142 |
}
|
143 |
|
144 |
-
return apply_filters('ppress_registration_url',
|
145 |
}
|
146 |
|
147 |
/**
|
148 |
* force redirection of default registration to custom one
|
149 |
*/
|
150 |
-
function redirect_reg_page()
|
151 |
{
|
152 |
if ( ! apply_filters('ppress_default_registration_redirect_enabled', true)) return;
|
153 |
|
154 |
-
|
|
|
|
|
155 |
|
156 |
$reg_url = ppress_registration_url();
|
157 |
|
@@ -202,7 +205,7 @@ class ModifyRedirectDefaultLinks
|
|
202 |
/**
|
203 |
* Redirect user edit profile (/wp-admin/profile.php) to "custom edit profile" page.
|
204 |
*/
|
205 |
-
function redirect_default_edit_profile_to_custom()
|
206 |
{
|
207 |
if (ppress_settings_by_key('redirect_default_edit_profile_to_custom') == 'yes') {
|
208 |
|
@@ -214,13 +217,16 @@ class ModifyRedirectDefaultLinks
|
|
214 |
}
|
215 |
|
216 |
return $url;
|
|
|
217 |
}, 9999999999);
|
218 |
|
219 |
// Filter to disable edit profile redirect for administrator.
|
220 |
$disable = apply_filters('ppress_disable_admin_edit_profile_redirect', false);
|
|
|
221 |
if ($disable && current_user_can('delete_users')) return;
|
222 |
|
223 |
if ( ! empty(ppress_get_setting('edit_user_profile_url'))) {
|
|
|
224 |
$edit_user_profile_url = ppress_edit_profile_url();
|
225 |
|
226 |
$page_viewed = esc_url_raw($_SERVER['REQUEST_URI']);
|
@@ -306,6 +312,7 @@ class ModifyRedirectDefaultLinks
|
|
306 |
public function rewrite_bp_registration_url($page)
|
307 |
{
|
308 |
if (ppress_get_setting('redirect_bp_registration_page') == 'yes') {
|
|
|
309 |
if (apply_filters('ppress_bp_registration_url', true)) {
|
310 |
$page = ppress_registration_url();
|
311 |
}
|
47 |
{
|
48 |
$page_id = ppress_get_setting('set_lost_password_url');
|
49 |
|
50 |
+
if ( ! empty($page_id) && get_post_status($page_id)) {
|
51 |
$val = get_permalink($page_id);
|
52 |
}
|
53 |
|
54 |
+
return apply_filters('ppress_password_reset_url', $val);
|
55 |
}
|
56 |
|
57 |
/**
|
63 |
|
64 |
$page_id = ppress_get_setting('set_lost_password_url');
|
65 |
|
66 |
+
if (empty($page_id) || ! get_post_status($page_id)) return;
|
67 |
|
68 |
+
wp_safe_redirect(get_permalink(absint($page_id)));
|
|
|
|
|
69 |
exit;
|
70 |
}
|
71 |
|
82 |
{
|
83 |
$login_page_id = ppress_get_setting('set_login_url');
|
84 |
|
85 |
+
if ( ! empty($login_page_id) && get_post_status($login_page_id)) {
|
86 |
|
87 |
$url = get_permalink($login_page_id);
|
88 |
|
93 |
if ($force_reauth) {
|
94 |
$url = add_query_arg('reauth', '1', $url);
|
95 |
}
|
96 |
+
|
97 |
+
$url = esc_url_raw($url);
|
98 |
}
|
99 |
|
100 |
+
return apply_filters('ppress_login_url', $url, $redirect, $force_reauth);
|
101 |
}
|
102 |
|
|
|
103 |
/**
|
104 |
* Force redirect default login to page with login shortcode
|
105 |
*/
|
106 |
+
public function redirect_login_page()
|
107 |
{
|
108 |
if ( ! apply_filters('ppress_default_login_redirect_enabled', true)) return;
|
109 |
|
110 |
+
$login_page_id = ppress_get_setting('set_login_url');
|
111 |
+
|
112 |
+
if (empty($login_page_id) || ! get_post_status($login_page_id)) return;
|
113 |
|
114 |
$login_url = ppress_login_url();
|
115 |
|
134 |
*
|
135 |
* @return string page url with registration shortcode.
|
136 |
*/
|
137 |
+
public function register_url_func($val)
|
138 |
{
|
139 |
$page_id = ppress_get_setting('set_registration_url');
|
140 |
|
141 |
+
if ( ! empty($page_id) && get_post_status($page_id)) {
|
142 |
$val = get_permalink($page_id);
|
143 |
}
|
144 |
|
145 |
+
return apply_filters('ppress_registration_url', $val);
|
146 |
}
|
147 |
|
148 |
/**
|
149 |
* force redirection of default registration to custom one
|
150 |
*/
|
151 |
+
public function redirect_reg_page()
|
152 |
{
|
153 |
if ( ! apply_filters('ppress_default_registration_redirect_enabled', true)) return;
|
154 |
|
155 |
+
$page_id = ppress_get_setting('set_registration_url');
|
156 |
+
|
157 |
+
if (empty($page_id) || ! get_post_status($page_id)) return;
|
158 |
|
159 |
$reg_url = ppress_registration_url();
|
160 |
|
205 |
/**
|
206 |
* Redirect user edit profile (/wp-admin/profile.php) to "custom edit profile" page.
|
207 |
*/
|
208 |
+
public function redirect_default_edit_profile_to_custom()
|
209 |
{
|
210 |
if (ppress_settings_by_key('redirect_default_edit_profile_to_custom') == 'yes') {
|
211 |
|
217 |
}
|
218 |
|
219 |
return $url;
|
220 |
+
|
221 |
}, 9999999999);
|
222 |
|
223 |
// Filter to disable edit profile redirect for administrator.
|
224 |
$disable = apply_filters('ppress_disable_admin_edit_profile_redirect', false);
|
225 |
+
|
226 |
if ($disable && current_user_can('delete_users')) return;
|
227 |
|
228 |
if ( ! empty(ppress_get_setting('edit_user_profile_url'))) {
|
229 |
+
|
230 |
$edit_user_profile_url = ppress_edit_profile_url();
|
231 |
|
232 |
$page_viewed = esc_url_raw($_SERVER['REQUEST_URI']);
|
312 |
public function rewrite_bp_registration_url($page)
|
313 |
{
|
314 |
if (ppress_get_setting('redirect_bp_registration_page') == 'yes') {
|
315 |
+
|
316 |
if (apply_filters('ppress_bp_registration_url', true)) {
|
317 |
$page = ppress_registration_url();
|
318 |
}
|
src/Classes/SendEmail.php
CHANGED
@@ -89,7 +89,7 @@ class SendEmail
|
|
89 |
$message = ob_get_clean();
|
90 |
}
|
91 |
|
92 |
-
if ( ! is_customize_preview()) {
|
93 |
/** @see https://github.com/MyIntervals/emogrifier/tree/v2.2.0 */
|
94 |
$emogrifier = new \Pelago\Emogrifier();
|
95 |
$emogrifier->setHtml($message);
|
89 |
$message = ob_get_clean();
|
90 |
}
|
91 |
|
92 |
+
if (class_exists('DOMDocument') && ! is_customize_preview()) {
|
93 |
/** @see https://github.com/MyIntervals/emogrifier/tree/v2.2.0 */
|
94 |
$emogrifier = new \Pelago\Emogrifier();
|
95 |
$emogrifier->setHtml($message);
|
src/ContentProtection/views/view.contentbox.php
CHANGED
@@ -8,7 +8,8 @@ $dbData = $contentToRestrictData
|
|
8 |
<div class="pp-content-protection-content-box">
|
9 |
<section id="ppContentProtectionContent">
|
10 |
<div id="workflowConditions">
|
11 |
-
<?php if (is_array($dbData) && ! empty($dbData)): $index = 0;
|
|
|
12 |
<?php foreach ($dbData as $facetListId => $facets) : ++$index; ?>
|
13 |
<?php ContentConditions::get_instance()->rules_group_row($facetListId, '', $facets, $index !== $count); ?>
|
14 |
<?php endforeach; ?>
|
@@ -20,5 +21,6 @@ $dbData = $contentToRestrictData
|
|
20 |
wp_generate_password(18, false)
|
21 |
); ?>
|
22 |
<?php endif; ?>
|
|
|
23 |
</section>
|
24 |
</div>
|
8 |
<div class="pp-content-protection-content-box">
|
9 |
<section id="ppContentProtectionContent">
|
10 |
<div id="workflowConditions">
|
11 |
+
<?php if (is_array($dbData) && ! empty($dbData)): $index = 0;
|
12 |
+
$count = count($dbData); ?>
|
13 |
<?php foreach ($dbData as $facetListId => $facets) : ++$index; ?>
|
14 |
<?php ContentConditions::get_instance()->rules_group_row($facetListId, '', $facets, $index !== $count); ?>
|
15 |
<?php endforeach; ?>
|
21 |
wp_generate_password(18, false)
|
22 |
); ?>
|
23 |
<?php endif; ?>
|
24 |
+
</div>
|
25 |
</section>
|
26 |
</div>
|
src/Functions/GlobalFunctions.php
CHANGED
@@ -219,7 +219,7 @@ function ppress_login_redirect()
|
|
219 |
$login_redirect = ppress_get_setting('set_login_redirect');
|
220 |
$custom_url_login_redirect = ppress_get_setting('custom_url_login_redirect');
|
221 |
|
222 |
-
if (
|
223 |
$redirect = $custom_url_login_redirect;
|
224 |
} elseif ($login_redirect == 'dashboard') {
|
225 |
$redirect = network_site_url('/wp-admin');
|
@@ -233,7 +233,7 @@ function ppress_login_redirect()
|
|
233 |
} else {
|
234 |
$redirect = ppress_get_current_url_raw();
|
235 |
}
|
236 |
-
} elseif (
|
237 |
$redirect = get_permalink($login_redirect);
|
238 |
} else {
|
239 |
$redirect = network_site_url('/wp-admin');
|
@@ -310,7 +310,7 @@ function ppress_my_account_url()
|
|
310 |
|
311 |
$page_id = ppress_settings_by_key('edit_user_profile_url');
|
312 |
|
313 |
-
if ( ! empty($page_id)) {
|
314 |
$url = get_permalink($page_id);
|
315 |
}
|
316 |
|
@@ -328,7 +328,7 @@ function ppress_password_reset_url()
|
|
328 |
|
329 |
$page_id = ppress_get_setting('set_lost_password_url');
|
330 |
|
331 |
-
if ( ! empty($page_id)) {
|
332 |
$url = get_permalink($page_id);
|
333 |
}
|
334 |
|
@@ -349,7 +349,7 @@ function ppress_login_url($redirect = '')
|
|
349 |
|
350 |
$login_page_id = ppress_get_setting('set_login_url');
|
351 |
|
352 |
-
if ( ! empty($login_page_id)) {
|
353 |
$login_url = get_permalink($login_page_id);
|
354 |
}
|
355 |
|
@@ -366,9 +366,10 @@ function ppress_login_url($redirect = '')
|
|
366 |
function ppress_registration_url()
|
367 |
{
|
368 |
$reg_url = wp_registration_url();
|
|
|
369 |
$page_id = ppress_get_setting('set_registration_url');
|
370 |
|
371 |
-
if ( ! empty($page_id)) {
|
372 |
$reg_url = get_permalink($page_id);
|
373 |
}
|
374 |
|
219 |
$login_redirect = ppress_get_setting('set_login_redirect');
|
220 |
$custom_url_login_redirect = ppress_get_setting('custom_url_login_redirect');
|
221 |
|
222 |
+
if ( ! empty($custom_url_login_redirect)) {
|
223 |
$redirect = $custom_url_login_redirect;
|
224 |
} elseif ($login_redirect == 'dashboard') {
|
225 |
$redirect = network_site_url('/wp-admin');
|
233 |
} else {
|
234 |
$redirect = ppress_get_current_url_raw();
|
235 |
}
|
236 |
+
} elseif ( ! empty($login_redirect)) {
|
237 |
$redirect = get_permalink($login_redirect);
|
238 |
} else {
|
239 |
$redirect = network_site_url('/wp-admin');
|
310 |
|
311 |
$page_id = ppress_settings_by_key('edit_user_profile_url');
|
312 |
|
313 |
+
if ( ! empty($page_id) && get_post_status($page_id)) {
|
314 |
$url = get_permalink($page_id);
|
315 |
}
|
316 |
|
328 |
|
329 |
$page_id = ppress_get_setting('set_lost_password_url');
|
330 |
|
331 |
+
if ( ! empty($page_id) && get_post_status($page_id)) {
|
332 |
$url = get_permalink($page_id);
|
333 |
}
|
334 |
|
349 |
|
350 |
$login_page_id = ppress_get_setting('set_login_url');
|
351 |
|
352 |
+
if ( ! empty($login_page_id) && get_post_status($login_page_id)) {
|
353 |
$login_url = get_permalink($login_page_id);
|
354 |
}
|
355 |
|
366 |
function ppress_registration_url()
|
367 |
{
|
368 |
$reg_url = wp_registration_url();
|
369 |
+
|
370 |
$page_id = ppress_get_setting('set_registration_url');
|
371 |
|
372 |
+
if ( ! empty($page_id) && get_post_status($page_id)) {
|
373 |
$reg_url = get_permalink($page_id);
|
374 |
}
|
375 |
|
vendor/autoload.php
CHANGED
@@ -4,4 +4,4 @@
|
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
-
return
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
+
return ComposerAutoloaderInitbeccdcb685b3e44da0733df7e3f5a3c4::getLoader();
|
vendor/composer/ClassLoader.php
CHANGED
@@ -42,6 +42,8 @@ namespace Composer\Autoload;
|
|
42 |
*/
|
43 |
class ClassLoader
|
44 |
{
|
|
|
|
|
45 |
// PSR-4
|
46 |
private $prefixLengthsPsr4 = array();
|
47 |
private $prefixDirsPsr4 = array();
|
@@ -57,6 +59,13 @@ class ClassLoader
|
|
57 |
private $missingClasses = array();
|
58 |
private $apcuPrefix;
|
59 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
public function getPrefixes()
|
61 |
{
|
62 |
if (!empty($this->prefixesPsr0)) {
|
@@ -300,6 +309,17 @@ class ClassLoader
|
|
300 |
public function register($prepend = false)
|
301 |
{
|
302 |
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
303 |
}
|
304 |
|
305 |
/**
|
@@ -308,13 +328,17 @@ class ClassLoader
|
|
308 |
public function unregister()
|
309 |
{
|
310 |
spl_autoload_unregister(array($this, 'loadClass'));
|
|
|
|
|
|
|
|
|
311 |
}
|
312 |
|
313 |
/**
|
314 |
* Loads the given class or interface.
|
315 |
*
|
316 |
* @param string $class The name of the class
|
317 |
-
* @return
|
318 |
*/
|
319 |
public function loadClass($class)
|
320 |
{
|
@@ -323,6 +347,8 @@ class ClassLoader
|
|
323 |
|
324 |
return true;
|
325 |
}
|
|
|
|
|
326 |
}
|
327 |
|
328 |
/**
|
@@ -367,6 +393,16 @@ class ClassLoader
|
|
367 |
return $file;
|
368 |
}
|
369 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
370 |
private function findFileWithExtension($class, $ext)
|
371 |
{
|
372 |
// PSR-4 lookup
|
42 |
*/
|
43 |
class ClassLoader
|
44 |
{
|
45 |
+
private $vendorDir;
|
46 |
+
|
47 |
// PSR-4
|
48 |
private $prefixLengthsPsr4 = array();
|
49 |
private $prefixDirsPsr4 = array();
|
59 |
private $missingClasses = array();
|
60 |
private $apcuPrefix;
|
61 |
|
62 |
+
private static $registeredLoaders = array();
|
63 |
+
|
64 |
+
public function __construct($vendorDir = null)
|
65 |
+
{
|
66 |
+
$this->vendorDir = $vendorDir;
|
67 |
+
}
|
68 |
+
|
69 |
public function getPrefixes()
|
70 |
{
|
71 |
if (!empty($this->prefixesPsr0)) {
|
309 |
public function register($prepend = false)
|
310 |
{
|
311 |
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
312 |
+
|
313 |
+
if (null === $this->vendorDir) {
|
314 |
+
return;
|
315 |
+
}
|
316 |
+
|
317 |
+
if ($prepend) {
|
318 |
+
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
|
319 |
+
} else {
|
320 |
+
unset(self::$registeredLoaders[$this->vendorDir]);
|
321 |
+
self::$registeredLoaders[$this->vendorDir] = $this;
|
322 |
+
}
|
323 |
}
|
324 |
|
325 |
/**
|
328 |
public function unregister()
|
329 |
{
|
330 |
spl_autoload_unregister(array($this, 'loadClass'));
|
331 |
+
|
332 |
+
if (null !== $this->vendorDir) {
|
333 |
+
unset(self::$registeredLoaders[$this->vendorDir]);
|
334 |
+
}
|
335 |
}
|
336 |
|
337 |
/**
|
338 |
* Loads the given class or interface.
|
339 |
*
|
340 |
* @param string $class The name of the class
|
341 |
+
* @return true|null True if loaded, null otherwise
|
342 |
*/
|
343 |
public function loadClass($class)
|
344 |
{
|
347 |
|
348 |
return true;
|
349 |
}
|
350 |
+
|
351 |
+
return null;
|
352 |
}
|
353 |
|
354 |
/**
|
393 |
return $file;
|
394 |
}
|
395 |
|
396 |
+
/**
|
397 |
+
* Returns the currently registered loaders indexed by their corresponding vendor directories.
|
398 |
+
*
|
399 |
+
* @return self[]
|
400 |
+
*/
|
401 |
+
public static function getRegisteredLoaders()
|
402 |
+
{
|
403 |
+
return self::$registeredLoaders;
|
404 |
+
}
|
405 |
+
|
406 |
private function findFileWithExtension($class, $ext)
|
407 |
{
|
408 |
// PSR-4 lookup
|
vendor/composer/InstalledVersions.php
CHANGED
@@ -1,246 +1,337 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
|
13 |
namespace Composer;
|
14 |
|
|
|
15 |
use Composer\Semver\VersionParser;
|
16 |
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
|
|
|
|
22 |
class InstalledVersions
|
23 |
{
|
24 |
-
private static $installed
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
}
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
}
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
246 |
}
|
1 |
<?php
|
2 |
|
3 |
+
/*
|
4 |
+
* This file is part of Composer.
|
5 |
+
*
|
6 |
+
* (c) Nils Adermann <naderman@naderman.de>
|
7 |
+
* Jordi Boggiano <j.boggiano@seld.be>
|
8 |
+
*
|
9 |
+
* For the full copyright and license information, please view the LICENSE
|
10 |
+
* file that was distributed with this source code.
|
11 |
+
*/
|
12 |
|
13 |
namespace Composer;
|
14 |
|
15 |
+
use Composer\Autoload\ClassLoader;
|
16 |
use Composer\Semver\VersionParser;
|
17 |
|
18 |
+
/**
|
19 |
+
* This class is copied in every Composer installed project and available to all
|
20 |
+
*
|
21 |
+
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
|
22 |
+
*
|
23 |
+
* To require it's presence, you can require `composer-runtime-api ^2.0`
|
24 |
+
*/
|
25 |
class InstalledVersions
|
26 |
{
|
27 |
+
private static $installed;
|
28 |
+
private static $canGetVendors;
|
29 |
+
private static $installedByVendor = array();
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Returns a list of all package names which are present, either by being installed, replaced or provided
|
33 |
+
*
|
34 |
+
* @return string[]
|
35 |
+
* @psalm-return list<string>
|
36 |
+
*/
|
37 |
+
public static function getInstalledPackages()
|
38 |
+
{
|
39 |
+
$packages = array();
|
40 |
+
foreach (self::getInstalled() as $installed) {
|
41 |
+
$packages[] = array_keys($installed['versions']);
|
42 |
+
}
|
43 |
+
|
44 |
+
if (1 === \count($packages)) {
|
45 |
+
return $packages[0];
|
46 |
+
}
|
47 |
+
|
48 |
+
return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Returns a list of all package names with a specific type e.g. 'library'
|
53 |
+
*
|
54 |
+
* @param string $type
|
55 |
+
* @return string[]
|
56 |
+
* @psalm-return list<string>
|
57 |
+
*/
|
58 |
+
public static function getInstalledPackagesByType($type)
|
59 |
+
{
|
60 |
+
$packagesByType = array();
|
61 |
+
|
62 |
+
foreach (self::getInstalled() as $installed) {
|
63 |
+
foreach ($installed['versions'] as $name => $package) {
|
64 |
+
if (isset($package['type']) && $package['type'] === $type) {
|
65 |
+
$packagesByType[] = $name;
|
66 |
+
}
|
67 |
+
}
|
68 |
+
}
|
69 |
+
|
70 |
+
return $packagesByType;
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Checks whether the given package is installed
|
75 |
+
*
|
76 |
+
* This also returns true if the package name is provided or replaced by another package
|
77 |
+
*
|
78 |
+
* @param string $packageName
|
79 |
+
* @param bool $includeDevRequirements
|
80 |
+
* @return bool
|
81 |
+
*/
|
82 |
+
public static function isInstalled($packageName, $includeDevRequirements = true)
|
83 |
+
{
|
84 |
+
foreach (self::getInstalled() as $installed) {
|
85 |
+
if (isset($installed['versions'][$packageName])) {
|
86 |
+
return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']);
|
87 |
+
}
|
88 |
+
}
|
89 |
+
|
90 |
+
return false;
|
91 |
+
}
|
92 |
+
|
93 |
+
/**
|
94 |
+
* Checks whether the given package satisfies a version constraint
|
95 |
+
*
|
96 |
+
* e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
|
97 |
+
*
|
98 |
+
* Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
|
99 |
+
*
|
100 |
+
* @param VersionParser $parser Install composer/semver to have access to this class and functionality
|
101 |
+
* @param string $packageName
|
102 |
+
* @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
|
103 |
+
* @return bool
|
104 |
+
*/
|
105 |
+
public static function satisfies(VersionParser $parser, $packageName, $constraint)
|
106 |
+
{
|
107 |
+
$constraint = $parser->parseConstraints($constraint);
|
108 |
+
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
|
109 |
+
|
110 |
+
return $provided->matches($constraint);
|
111 |
+
}
|
112 |
+
|
113 |
+
/**
|
114 |
+
* Returns a version constraint representing all the range(s) which are installed for a given package
|
115 |
+
*
|
116 |
+
* It is easier to use this via isInstalled() with the $constraint argument if you need to check
|
117 |
+
* whether a given version of a package is installed, and not just whether it exists
|
118 |
+
*
|
119 |
+
* @param string $packageName
|
120 |
+
* @return string Version constraint usable with composer/semver
|
121 |
+
*/
|
122 |
+
public static function getVersionRanges($packageName)
|
123 |
+
{
|
124 |
+
foreach (self::getInstalled() as $installed) {
|
125 |
+
if (!isset($installed['versions'][$packageName])) {
|
126 |
+
continue;
|
127 |
+
}
|
128 |
+
|
129 |
+
$ranges = array();
|
130 |
+
if (isset($installed['versions'][$packageName]['pretty_version'])) {
|
131 |
+
$ranges[] = $installed['versions'][$packageName]['pretty_version'];
|
132 |
+
}
|
133 |
+
if (array_key_exists('aliases', $installed['versions'][$packageName])) {
|
134 |
+
$ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
|
135 |
+
}
|
136 |
+
if (array_key_exists('replaced', $installed['versions'][$packageName])) {
|
137 |
+
$ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
|
138 |
+
}
|
139 |
+
if (array_key_exists('provided', $installed['versions'][$packageName])) {
|
140 |
+
$ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
|
141 |
+
}
|
142 |
+
|
143 |
+
return implode(' || ', $ranges);
|
144 |
+
}
|
145 |
+
|
146 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* @param string $packageName
|
151 |
+
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
|
152 |
+
*/
|
153 |
+
public static function getVersion($packageName)
|
154 |
+
{
|
155 |
+
foreach (self::getInstalled() as $installed) {
|
156 |
+
if (!isset($installed['versions'][$packageName])) {
|
157 |
+
continue;
|
158 |
+
}
|
159 |
+
|
160 |
+
if (!isset($installed['versions'][$packageName]['version'])) {
|
161 |
+
return null;
|
162 |
+
}
|
163 |
+
|
164 |
+
return $installed['versions'][$packageName]['version'];
|
165 |
+
}
|
166 |
+
|
167 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
168 |
+
}
|
169 |
+
|
170 |
+
/**
|
171 |
+
* @param string $packageName
|
172 |
+
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
|
173 |
+
*/
|
174 |
+
public static function getPrettyVersion($packageName)
|
175 |
+
{
|
176 |
+
foreach (self::getInstalled() as $installed) {
|
177 |
+
if (!isset($installed['versions'][$packageName])) {
|
178 |
+
continue;
|
179 |
+
}
|
180 |
+
|
181 |
+
if (!isset($installed['versions'][$packageName]['pretty_version'])) {
|
182 |
+
return null;
|
183 |
+
}
|
184 |
+
|
185 |
+
return $installed['versions'][$packageName]['pretty_version'];
|
186 |
+
}
|
187 |
+
|
188 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
189 |
+
}
|
190 |
+
|
191 |
+
/**
|
192 |
+
* @param string $packageName
|
193 |
+
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
|
194 |
+
*/
|
195 |
+
public static function getReference($packageName)
|
196 |
+
{
|
197 |
+
foreach (self::getInstalled() as $installed) {
|
198 |
+
if (!isset($installed['versions'][$packageName])) {
|
199 |
+
continue;
|
200 |
+
}
|
201 |
+
|
202 |
+
if (!isset($installed['versions'][$packageName]['reference'])) {
|
203 |
+
return null;
|
204 |
+
}
|
205 |
+
|
206 |
+
return $installed['versions'][$packageName]['reference'];
|
207 |
+
}
|
208 |
+
|
209 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
210 |
+
}
|
211 |
+
|
212 |
+
/**
|
213 |
+
* @param string $packageName
|
214 |
+
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
|
215 |
+
*/
|
216 |
+
public static function getInstallPath($packageName)
|
217 |
+
{
|
218 |
+
foreach (self::getInstalled() as $installed) {
|
219 |
+
if (!isset($installed['versions'][$packageName])) {
|
220 |
+
continue;
|
221 |
+
}
|
222 |
+
|
223 |
+
return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
|
224 |
+
}
|
225 |
+
|
226 |
+
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
227 |
+
}
|
228 |
+
|
229 |
+
/**
|
230 |
+
* @return array
|
231 |
+
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}
|
232 |
+
*/
|
233 |
+
public static function getRootPackage()
|
234 |
+
{
|
235 |
+
$installed = self::getInstalled();
|
236 |
+
|
237 |
+
return $installed[0]['root'];
|
238 |
+
}
|
239 |
+
|
240 |
+
/**
|
241 |
+
* Returns the raw installed.php data for custom implementations
|
242 |
+
*
|
243 |
+
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
|
244 |
+
* @return array[]
|
245 |
+
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}
|
246 |
+
*/
|
247 |
+
public static function getRawData()
|
248 |
+
{
|
249 |
+
@trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
|
250 |
+
|
251 |
+
if (null === self::$installed) {
|
252 |
+
// only require the installed.php file if this file is loaded from its dumped location,
|
253 |
+
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
|
254 |
+
if (substr(__DIR__, -8, 1) !== 'C') {
|
255 |
+
self::$installed = include __DIR__ . '/installed.php';
|
256 |
+
} else {
|
257 |
+
self::$installed = array();
|
258 |
+
}
|
259 |
+
}
|
260 |
+
|
261 |
+
return self::$installed;
|
262 |
+
}
|
263 |
+
|
264 |
+
/**
|
265 |
+
* Returns the raw data of all installed.php which are currently loaded for custom implementations
|
266 |
+
*
|
267 |
+
* @return array[]
|
268 |
+
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
|
269 |
+
*/
|
270 |
+
public static function getAllRawData()
|
271 |
+
{
|
272 |
+
return self::getInstalled();
|
273 |
+
}
|
274 |
+
|
275 |
+
/**
|
276 |
+
* Lets you reload the static array from another file
|
277 |
+
*
|
278 |
+
* This is only useful for complex integrations in which a project needs to use
|
279 |
+
* this class but then also needs to execute another project's autoloader in process,
|
280 |
+
* and wants to ensure both projects have access to their version of installed.php.
|
281 |
+
*
|
282 |
+
* A typical case would be PHPUnit, where it would need to make sure it reads all
|
283 |
+
* the data it needs from this class, then call reload() with
|
284 |
+
* `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
|
285 |
+
* the project in which it runs can then also use this class safely, without
|
286 |
+
* interference between PHPUnit's dependencies and the project's dependencies.
|
287 |
+
*
|
288 |
+
* @param array[] $data A vendor/composer/installed.php data set
|
289 |
+
* @return void
|
290 |
+
*
|
291 |
+
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data
|
292 |
+
*/
|
293 |
+
public static function reload($data)
|
294 |
+
{
|
295 |
+
self::$installed = $data;
|
296 |
+
self::$installedByVendor = array();
|
297 |
+
}
|
298 |
+
|
299 |
+
/**
|
300 |
+
* @return array[]
|
301 |
+
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
|
302 |
+
*/
|
303 |
+
private static function getInstalled()
|
304 |
+
{
|
305 |
+
if (null === self::$canGetVendors) {
|
306 |
+
self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
|
307 |
+
}
|
308 |
+
|
309 |
+
$installed = array();
|
310 |
+
|
311 |
+
if (self::$canGetVendors) {
|
312 |
+
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
|
313 |
+
if (isset(self::$installedByVendor[$vendorDir])) {
|
314 |
+
$installed[] = self::$installedByVendor[$vendorDir];
|
315 |
+
} elseif (is_file($vendorDir.'/composer/installed.php')) {
|
316 |
+
$installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
|
317 |
+
if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
|
318 |
+
self::$installed = $installed[count($installed) - 1];
|
319 |
+
}
|
320 |
+
}
|
321 |
+
}
|
322 |
+
}
|
323 |
+
|
324 |
+
if (null === self::$installed) {
|
325 |
+
// only require the installed.php file if this file is loaded from its dumped location,
|
326 |
+
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
|
327 |
+
if (substr(__DIR__, -8, 1) !== 'C') {
|
328 |
+
self::$installed = require __DIR__ . '/installed.php';
|
329 |
+
} else {
|
330 |
+
self::$installed = array();
|
331 |
+
}
|
332 |
+
}
|
333 |
+
$installed[] = self::$installed;
|
334 |
+
|
335 |
+
return $installed;
|
336 |
+
}
|
337 |
}
|
vendor/composer/autoload_real.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
-
class
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
@@ -24,15 +24,15 @@ class ComposerAutoloaderInit73449d6257ab67b134b7a7758b96a290
|
|
24 |
|
25 |
require __DIR__ . '/platform_check.php';
|
26 |
|
27 |
-
spl_autoload_register(array('
|
28 |
-
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
29 |
-
spl_autoload_unregister(array('
|
30 |
|
31 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
32 |
if ($useStaticLoader) {
|
33 |
require __DIR__ . '/autoload_static.php';
|
34 |
|
35 |
-
call_user_func(\Composer\Autoload\
|
36 |
} else {
|
37 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
38 |
foreach ($map as $namespace => $path) {
|
@@ -53,19 +53,19 @@ class ComposerAutoloaderInit73449d6257ab67b134b7a7758b96a290
|
|
53 |
$loader->register(true);
|
54 |
|
55 |
if ($useStaticLoader) {
|
56 |
-
$includeFiles = Composer\Autoload\
|
57 |
} else {
|
58 |
$includeFiles = require __DIR__ . '/autoload_files.php';
|
59 |
}
|
60 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
61 |
-
|
62 |
}
|
63 |
|
64 |
return $loader;
|
65 |
}
|
66 |
}
|
67 |
|
68 |
-
function
|
69 |
{
|
70 |
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
71 |
require $file;
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
+
class ComposerAutoloaderInitbeccdcb685b3e44da0733df7e3f5a3c4
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
24 |
|
25 |
require __DIR__ . '/platform_check.php';
|
26 |
|
27 |
+
spl_autoload_register(array('ComposerAutoloaderInitbeccdcb685b3e44da0733df7e3f5a3c4', 'loadClassLoader'), true, true);
|
28 |
+
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
|
29 |
+
spl_autoload_unregister(array('ComposerAutoloaderInitbeccdcb685b3e44da0733df7e3f5a3c4', 'loadClassLoader'));
|
30 |
|
31 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
32 |
if ($useStaticLoader) {
|
33 |
require __DIR__ . '/autoload_static.php';
|
34 |
|
35 |
+
call_user_func(\Composer\Autoload\ComposerStaticInitbeccdcb685b3e44da0733df7e3f5a3c4::getInitializer($loader));
|
36 |
} else {
|
37 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
38 |
foreach ($map as $namespace => $path) {
|
53 |
$loader->register(true);
|
54 |
|
55 |
if ($useStaticLoader) {
|
56 |
+
$includeFiles = Composer\Autoload\ComposerStaticInitbeccdcb685b3e44da0733df7e3f5a3c4::$files;
|
57 |
} else {
|
58 |
$includeFiles = require __DIR__ . '/autoload_files.php';
|
59 |
}
|
60 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
61 |
+
composerRequirebeccdcb685b3e44da0733df7e3f5a3c4($fileIdentifier, $file);
|
62 |
}
|
63 |
|
64 |
return $loader;
|
65 |
}
|
66 |
}
|
67 |
|
68 |
+
function composerRequirebeccdcb685b3e44da0733df7e3f5a3c4($fileIdentifier, $file)
|
69 |
{
|
70 |
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
71 |
require $file;
|
vendor/composer/autoload_static.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
-
class
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'fda73876e8be17735f680f484cec1679' => __DIR__ . '/../..' . '/src/Functions/custom-settings-api.php',
|
@@ -286,9 +286,9 @@ class ComposerStaticInit73449d6257ab67b134b7a7758b96a290
|
|
286 |
public static function getInitializer(ClassLoader $loader)
|
287 |
{
|
288 |
return \Closure::bind(function () use ($loader) {
|
289 |
-
$loader->prefixLengthsPsr4 =
|
290 |
-
$loader->prefixDirsPsr4 =
|
291 |
-
$loader->classMap =
|
292 |
|
293 |
}, null, ClassLoader::class);
|
294 |
}
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
+
class ComposerStaticInitbeccdcb685b3e44da0733df7e3f5a3c4
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'fda73876e8be17735f680f484cec1679' => __DIR__ . '/../..' . '/src/Functions/custom-settings-api.php',
|
286 |
public static function getInitializer(ClassLoader $loader)
|
287 |
{
|
288 |
return \Closure::bind(function () use ($loader) {
|
289 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInitbeccdcb685b3e44da0733df7e3f5a3c4::$prefixLengthsPsr4;
|
290 |
+
$loader->prefixDirsPsr4 = ComposerStaticInitbeccdcb685b3e44da0733df7e3f5a3c4::$prefixDirsPsr4;
|
291 |
+
$loader->classMap = ComposerStaticInitbeccdcb685b3e44da0733df7e3f5a3c4::$classMap;
|
292 |
|
293 |
}, null, ClassLoader::class);
|
294 |
}
|
vendor/composer/installed.json
CHANGED
@@ -127,23 +127,23 @@
|
|
127 |
},
|
128 |
{
|
129 |
"name": "symfony/css-selector",
|
130 |
-
"version": "
|
131 |
-
"version_normalized": "3.
|
132 |
"source": {
|
133 |
"type": "git",
|
134 |
"url": "https://github.com/symfony/css-selector.git",
|
135 |
-
"reference": "
|
136 |
},
|
137 |
"dist": {
|
138 |
"type": "zip",
|
139 |
-
"url": "https://api.github.com/repos/symfony/css-selector/zipball/
|
140 |
-
"reference": "
|
141 |
"shasum": ""
|
142 |
},
|
143 |
"require": {
|
144 |
-
"php": "
|
145 |
},
|
146 |
-
"time": "
|
147 |
"type": "library",
|
148 |
"installation-source": "dist",
|
149 |
"autoload": {
|
@@ -172,10 +172,10 @@
|
|
172 |
"homepage": "https://symfony.com/contributors"
|
173 |
}
|
174 |
],
|
175 |
-
"description": "
|
176 |
"homepage": "https://symfony.com",
|
177 |
"support": {
|
178 |
-
"source": "https://github.com/symfony/css-selector/tree/
|
179 |
},
|
180 |
"funding": [
|
181 |
{
|
127 |
},
|
128 |
{
|
129 |
"name": "symfony/css-selector",
|
130 |
+
"version": "v5.3.0",
|
131 |
+
"version_normalized": "5.3.0.0",
|
132 |
"source": {
|
133 |
"type": "git",
|
134 |
"url": "https://github.com/symfony/css-selector.git",
|
135 |
+
"reference": "fcd0b29a7a0b1bb5bfbedc6231583d77fea04814"
|
136 |
},
|
137 |
"dist": {
|
138 |
"type": "zip",
|
139 |
+
"url": "https://api.github.com/repos/symfony/css-selector/zipball/fcd0b29a7a0b1bb5bfbedc6231583d77fea04814",
|
140 |
+
"reference": "fcd0b29a7a0b1bb5bfbedc6231583d77fea04814",
|
141 |
"shasum": ""
|
142 |
},
|
143 |
"require": {
|
144 |
+
"php": ">=7.2.5"
|
145 |
},
|
146 |
+
"time": "2021-05-26T17:40:38+00:00",
|
147 |
"type": "library",
|
148 |
"installation-source": "dist",
|
149 |
"autoload": {
|
172 |
"homepage": "https://symfony.com/contributors"
|
173 |
}
|
174 |
],
|
175 |
+
"description": "Converts CSS selectors to XPath expressions",
|
176 |
"homepage": "https://symfony.com",
|
177 |
"support": {
|
178 |
+
"source": "https://github.com/symfony/css-selector/tree/v5.3.0"
|
179 |
},
|
180 |
"funding": [
|
181 |
{
|
vendor/composer/installed.php
CHANGED
@@ -1,51 +1,50 @@
|
|
1 |
-
<?php return array
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
|
|
|
|
|
|
8 |
),
|
9 |
-
'
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
),
|
23 |
-
'collizo4sky/persist-admin-notices-dismissal' =>
|
24 |
-
array (
|
25 |
-
'pretty_version' => '1.4.4',
|
26 |
-
'version' => '1.4.4.0',
|
27 |
-
'aliases' =>
|
28 |
-
array (
|
29 |
-
),
|
30 |
-
'reference' => '900739eb6b0ec0210465f5983a6d4e0e420289e4',
|
31 |
-
),
|
32 |
-
'pelago/emogrifier' =>
|
33 |
-
array (
|
34 |
-
'pretty_version' => 'v3.1.0',
|
35 |
-
'version' => '3.1.0.0',
|
36 |
-
'aliases' =>
|
37 |
-
array (
|
38 |
-
),
|
39 |
-
'reference' => 'f6a5c7d44612d86c3901c93f1592f5440e6b2cd8',
|
40 |
-
),
|
41 |
-
'symfony/css-selector' =>
|
42 |
-
array (
|
43 |
-
'pretty_version' => 'v3.4.47',
|
44 |
-
'version' => '3.4.47.0',
|
45 |
-
'aliases' =>
|
46 |
-
array (
|
47 |
-
),
|
48 |
-
'reference' => 'da3d9da2ce0026771f5fe64cb332158f1bd2bc33',
|
49 |
-
),
|
50 |
-
),
|
51 |
);
|
1 |
+
<?php return array(
|
2 |
+
'root' => array(
|
3 |
+
'pretty_version' => 'dev-master',
|
4 |
+
'version' => 'dev-master',
|
5 |
+
'type' => 'library',
|
6 |
+
'install_path' => __DIR__ . '/../../',
|
7 |
+
'aliases' => array(),
|
8 |
+
'reference' => 'd7ff63d08059dc7defb0f1f0cb679b85fac2d875',
|
9 |
+
'name' => '__root__',
|
10 |
+
'dev' => false,
|
11 |
),
|
12 |
+
'versions' => array(
|
13 |
+
'__root__' => array(
|
14 |
+
'pretty_version' => 'dev-master',
|
15 |
+
'version' => 'dev-master',
|
16 |
+
'type' => 'library',
|
17 |
+
'install_path' => __DIR__ . '/../../',
|
18 |
+
'aliases' => array(),
|
19 |
+
'reference' => 'd7ff63d08059dc7defb0f1f0cb679b85fac2d875',
|
20 |
+
'dev_requirement' => false,
|
21 |
+
),
|
22 |
+
'collizo4sky/persist-admin-notices-dismissal' => array(
|
23 |
+
'pretty_version' => '1.4.4',
|
24 |
+
'version' => '1.4.4.0',
|
25 |
+
'type' => 'library',
|
26 |
+
'install_path' => __DIR__ . '/../collizo4sky/persist-admin-notices-dismissal',
|
27 |
+
'aliases' => array(),
|
28 |
+
'reference' => '900739eb6b0ec0210465f5983a6d4e0e420289e4',
|
29 |
+
'dev_requirement' => false,
|
30 |
+
),
|
31 |
+
'pelago/emogrifier' => array(
|
32 |
+
'pretty_version' => 'v3.1.0',
|
33 |
+
'version' => '3.1.0.0',
|
34 |
+
'type' => 'library',
|
35 |
+
'install_path' => __DIR__ . '/../pelago/emogrifier',
|
36 |
+
'aliases' => array(),
|
37 |
+
'reference' => 'f6a5c7d44612d86c3901c93f1592f5440e6b2cd8',
|
38 |
+
'dev_requirement' => false,
|
39 |
+
),
|
40 |
+
'symfony/css-selector' => array(
|
41 |
+
'pretty_version' => 'v5.3.0',
|
42 |
+
'version' => '5.3.0.0',
|
43 |
+
'type' => 'library',
|
44 |
+
'install_path' => __DIR__ . '/../symfony/css-selector',
|
45 |
+
'aliases' => array(),
|
46 |
+
'reference' => 'fcd0b29a7a0b1bb5bfbedc6231583d77fea04814',
|
47 |
+
'dev_requirement' => false,
|
48 |
+
),
|
49 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
);
|
vendor/composer/platform_check.php
CHANGED
@@ -4,8 +4,8 @@
|
|
4 |
|
5 |
$issues = array();
|
6 |
|
7 |
-
if (!(PHP_VERSION_ID >=
|
8 |
-
$issues[] = 'Your Composer dependencies require a PHP version ">=
|
9 |
}
|
10 |
|
11 |
if ($issues) {
|
4 |
|
5 |
$issues = array();
|
6 |
|
7 |
+
if (!(PHP_VERSION_ID >= 70205)) {
|
8 |
+
$issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.5". You are running ' . PHP_VERSION . '.';
|
9 |
}
|
10 |
|
11 |
if ($issues) {
|
vendor/symfony/css-selector/.gitignore
DELETED
@@ -1,3 +0,0 @@
|
|
1 |
-
vendor/
|
2 |
-
composer.lock
|
3 |
-
phpunit.xml
|
|
|
|
|
|
vendor/symfony/css-selector/CHANGELOG.md
CHANGED
@@ -1,6 +1,11 @@
|
|
1 |
CHANGELOG
|
2 |
=========
|
3 |
|
|
|
|
|
|
|
|
|
|
|
4 |
2.8.0
|
5 |
-----
|
6 |
|
1 |
CHANGELOG
|
2 |
=========
|
3 |
|
4 |
+
4.4.0
|
5 |
+
-----
|
6 |
+
|
7 |
+
* Added support for `*:only-of-type`
|
8 |
+
|
9 |
2.8.0
|
10 |
-----
|
11 |
|
vendor/symfony/css-selector/CssSelectorConverter.php
CHANGED
@@ -27,16 +27,23 @@ use Symfony\Component\CssSelector\XPath\Translator;
|
|
27 |
class CssSelectorConverter
|
28 |
{
|
29 |
private $translator;
|
|
|
|
|
|
|
|
|
30 |
|
31 |
/**
|
32 |
* @param bool $html Whether HTML support should be enabled. Disable it for XML documents
|
33 |
*/
|
34 |
-
public function __construct($html = true)
|
35 |
{
|
36 |
$this->translator = new Translator();
|
37 |
|
38 |
if ($html) {
|
39 |
$this->translator->registerExtension(new HtmlExtension($this->translator));
|
|
|
|
|
|
|
40 |
}
|
41 |
|
42 |
$this->translator
|
@@ -53,13 +60,10 @@ class CssSelectorConverter
|
|
53 |
* Optionally, a prefix can be added to the resulting XPath
|
54 |
* expression with the $prefix parameter.
|
55 |
*
|
56 |
-
* @param string $cssExpr The CSS expression
|
57 |
-
* @param string $prefix An optional prefix for the XPath expression
|
58 |
-
*
|
59 |
* @return string
|
60 |
*/
|
61 |
-
public function toXPath($cssExpr, $prefix = 'descendant-or-self::')
|
62 |
{
|
63 |
-
return $this->translator->cssToXPath($cssExpr, $prefix);
|
64 |
}
|
65 |
}
|
27 |
class CssSelectorConverter
|
28 |
{
|
29 |
private $translator;
|
30 |
+
private $cache;
|
31 |
+
|
32 |
+
private static $xmlCache = [];
|
33 |
+
private static $htmlCache = [];
|
34 |
|
35 |
/**
|
36 |
* @param bool $html Whether HTML support should be enabled. Disable it for XML documents
|
37 |
*/
|
38 |
+
public function __construct(bool $html = true)
|
39 |
{
|
40 |
$this->translator = new Translator();
|
41 |
|
42 |
if ($html) {
|
43 |
$this->translator->registerExtension(new HtmlExtension($this->translator));
|
44 |
+
$this->cache = &self::$htmlCache;
|
45 |
+
} else {
|
46 |
+
$this->cache = &self::$xmlCache;
|
47 |
}
|
48 |
|
49 |
$this->translator
|
60 |
* Optionally, a prefix can be added to the resulting XPath
|
61 |
* expression with the $prefix parameter.
|
62 |
*
|
|
|
|
|
|
|
63 |
* @return string
|
64 |
*/
|
65 |
+
public function toXPath(string $cssExpr, string $prefix = 'descendant-or-self::')
|
66 |
{
|
67 |
+
return $this->cache[$prefix][$cssExpr] ?? $this->cache[$prefix][$cssExpr] = $this->translator->cssToXPath($cssExpr, $prefix);
|
68 |
}
|
69 |
}
|
vendor/symfony/css-selector/Exception/ExceptionInterface.php
CHANGED
@@ -19,6 +19,6 @@ namespace Symfony\Component\CssSelector\Exception;
|
|
19 |
*
|
20 |
* @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
|
21 |
*/
|
22 |
-
interface ExceptionInterface
|
23 |
{
|
24 |
}
|
19 |
*
|
20 |
* @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
|
21 |
*/
|
22 |
+
interface ExceptionInterface extends \Throwable
|
23 |
{
|
24 |
}
|
vendor/symfony/css-selector/Exception/SyntaxErrorException.php
CHANGED
@@ -24,32 +24,25 @@ use Symfony\Component\CssSelector\Parser\Token;
|
|
24 |
class SyntaxErrorException extends ParseException
|
25 |
{
|
26 |
/**
|
27 |
-
* @param string $expectedValue
|
28 |
-
*
|
29 |
* @return self
|
30 |
*/
|
31 |
-
public static function unexpectedToken($expectedValue, Token $foundToken)
|
32 |
{
|
33 |
return new self(sprintf('Expected %s, but %s found.', $expectedValue, $foundToken));
|
34 |
}
|
35 |
|
36 |
/**
|
37 |
-
* @param string $pseudoElement
|
38 |
-
* @param string $unexpectedLocation
|
39 |
-
*
|
40 |
* @return self
|
41 |
*/
|
42 |
-
public static function pseudoElementFound($pseudoElement, $unexpectedLocation)
|
43 |
{
|
44 |
return new self(sprintf('Unexpected pseudo-element "::%s" found %s.', $pseudoElement, $unexpectedLocation));
|
45 |
}
|
46 |
|
47 |
/**
|
48 |
-
* @param int $position
|
49 |
-
*
|
50 |
* @return self
|
51 |
*/
|
52 |
-
public static function unclosedString($position)
|
53 |
{
|
54 |
return new self(sprintf('Unclosed/invalid string at %s.', $position));
|
55 |
}
|
24 |
class SyntaxErrorException extends ParseException
|
25 |
{
|
26 |
/**
|
|
|
|
|
27 |
* @return self
|
28 |
*/
|
29 |
+
public static function unexpectedToken(string $expectedValue, Token $foundToken)
|
30 |
{
|
31 |
return new self(sprintf('Expected %s, but %s found.', $expectedValue, $foundToken));
|
32 |
}
|
33 |
|
34 |
/**
|
|
|
|
|
|
|
35 |
* @return self
|
36 |
*/
|
37 |
+
public static function pseudoElementFound(string $pseudoElement, string $unexpectedLocation)
|
38 |
{
|
39 |
return new self(sprintf('Unexpected pseudo-element "::%s" found %s.', $pseudoElement, $unexpectedLocation));
|
40 |
}
|
41 |
|
42 |
/**
|
|
|
|
|
43 |
* @return self
|
44 |
*/
|
45 |
+
public static function unclosedString(int $position)
|
46 |
{
|
47 |
return new self(sprintf('Unclosed/invalid string at %s.', $position));
|
48 |
}
|
vendor/symfony/css-selector/LICENSE
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
Copyright (c) 2004-
|
2 |
|
3 |
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4 |
of this software and associated documentation files (the "Software"), to deal
|
1 |
+
Copyright (c) 2004-2021 Fabien Potencier
|
2 |
|
3 |
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4 |
of this software and associated documentation files (the "Software"), to deal
|
vendor/symfony/css-selector/Node/AbstractNode.php
CHANGED
@@ -28,10 +28,7 @@ abstract class AbstractNode implements NodeInterface
|
|
28 |
*/
|
29 |
private $nodeName;
|
30 |
|
31 |
-
|
32 |
-
* @return string
|
33 |
-
*/
|
34 |
-
public function getNodeName()
|
35 |
{
|
36 |
if (null === $this->nodeName) {
|
37 |
$this->nodeName = preg_replace('~.*\\\\([^\\\\]+)Node$~', '$1', static::class);
|
28 |
*/
|
29 |
private $nodeName;
|
30 |
|
31 |
+
public function getNodeName(): string
|
|
|
|
|
|
|
32 |
{
|
33 |
if (null === $this->nodeName) {
|
34 |
$this->nodeName = preg_replace('~.*\\\\([^\\\\]+)Node$~', '$1', static::class);
|
vendor/symfony/css-selector/Node/AttributeNode.php
CHANGED
@@ -29,13 +29,7 @@ class AttributeNode extends AbstractNode
|
|
29 |
private $operator;
|
30 |
private $value;
|
31 |
|
32 |
-
|
33 |
-
* @param string $namespace
|
34 |
-
* @param string $attribute
|
35 |
-
* @param string $operator
|
36 |
-
* @param string $value
|
37 |
-
*/
|
38 |
-
public function __construct(NodeInterface $selector, $namespace, $attribute, $operator, $value)
|
39 |
{
|
40 |
$this->selector = $selector;
|
41 |
$this->namespace = $namespace;
|
@@ -44,42 +38,27 @@ class AttributeNode extends AbstractNode
|
|
44 |
$this->value = $value;
|
45 |
}
|
46 |
|
47 |
-
|
48 |
-
* @return NodeInterface
|
49 |
-
*/
|
50 |
-
public function getSelector()
|
51 |
{
|
52 |
return $this->selector;
|
53 |
}
|
54 |
|
55 |
-
|
56 |
-
* @return string
|
57 |
-
*/
|
58 |
-
public function getNamespace()
|
59 |
{
|
60 |
return $this->namespace;
|
61 |
}
|
62 |
|
63 |
-
|
64 |
-
* @return string
|
65 |
-
*/
|
66 |
-
public function getAttribute()
|
67 |
{
|
68 |
return $this->attribute;
|
69 |
}
|
70 |
|
71 |
-
|
72 |
-
* @return string
|
73 |
-
*/
|
74 |
-
public function getOperator()
|
75 |
{
|
76 |
return $this->operator;
|
77 |
}
|
78 |
|
79 |
-
|
80 |
-
* @return string
|
81 |
-
*/
|
82 |
-
public function getValue()
|
83 |
{
|
84 |
return $this->value;
|
85 |
}
|
@@ -87,7 +66,7 @@ class AttributeNode extends AbstractNode
|
|
87 |
/**
|
88 |
* {@inheritdoc}
|
89 |
*/
|
90 |
-
public function getSpecificity()
|
91 |
{
|
92 |
return $this->selector->getSpecificity()->plus(new Specificity(0, 1, 0));
|
93 |
}
|
@@ -95,7 +74,7 @@ class AttributeNode extends AbstractNode
|
|
95 |
/**
|
96 |
* {@inheritdoc}
|
97 |
*/
|
98 |
-
public function __toString()
|
99 |
{
|
100 |
$attribute = $this->namespace ? $this->namespace.'|'.$this->attribute : $this->attribute;
|
101 |
|
29 |
private $operator;
|
30 |
private $value;
|
31 |
|
32 |
+
public function __construct(NodeInterface $selector, ?string $namespace, string $attribute, string $operator, ?string $value)
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
{
|
34 |
$this->selector = $selector;
|
35 |
$this->namespace = $namespace;
|
38 |
$this->value = $value;
|
39 |
}
|
40 |
|
41 |
+
public function getSelector(): NodeInterface
|
|
|
|
|
|
|
42 |
{
|
43 |
return $this->selector;
|
44 |
}
|
45 |
|
46 |
+
public function getNamespace(): ?string
|
|
|
|
|
|
|
47 |
{
|
48 |
return $this->namespace;
|
49 |
}
|
50 |
|
51 |
+
public function getAttribute(): string
|
|
|
|
|
|
|
52 |
{
|
53 |
return $this->attribute;
|
54 |
}
|
55 |
|
56 |
+
public function getOperator(): string
|
|
|
|
|
|
|
57 |
{
|
58 |
return $this->operator;
|
59 |
}
|
60 |
|
61 |
+
public function getValue(): ?string
|
|
|
|
|
|
|
62 |
{
|
63 |
return $this->value;
|
64 |
}
|
66 |
/**
|
67 |
* {@inheritdoc}
|
68 |
*/
|
69 |
+
public function getSpecificity(): Specificity
|
70 |
{
|
71 |
return $this->selector->getSpecificity()->plus(new Specificity(0, 1, 0));
|
72 |
}
|
74 |
/**
|
75 |
* {@inheritdoc}
|
76 |
*/
|
77 |
+
public function __toString(): string
|
78 |
{
|
79 |
$attribute = $this->namespace ? $this->namespace.'|'.$this->attribute : $this->attribute;
|
80 |
|
vendor/symfony/css-selector/Node/ClassNode.php
CHANGED
@@ -26,27 +26,18 @@ class ClassNode extends AbstractNode
|
|
26 |
private $selector;
|
27 |
private $name;
|
28 |
|
29 |
-
|
30 |
-
* @param string $name
|
31 |
-
*/
|
32 |
-
public function __construct(NodeInterface $selector, $name)
|
33 |
{
|
34 |
$this->selector = $selector;
|
35 |
$this->name = $name;
|
36 |
}
|
37 |
|
38 |
-
|
39 |
-
* @return NodeInterface
|
40 |
-
*/
|
41 |
-
public function getSelector()
|
42 |
{
|
43 |
return $this->selector;
|
44 |
}
|
45 |
|
46 |
-
|
47 |
-
* @return string
|
48 |
-
*/
|
49 |
-
public function getName()
|
50 |
{
|
51 |
return $this->name;
|
52 |
}
|
@@ -54,7 +45,7 @@ class ClassNode extends AbstractNode
|
|
54 |
/**
|
55 |
* {@inheritdoc}
|
56 |
*/
|
57 |
-
public function getSpecificity()
|
58 |
{
|
59 |
return $this->selector->getSpecificity()->plus(new Specificity(0, 1, 0));
|
60 |
}
|
@@ -62,7 +53,7 @@ class ClassNode extends AbstractNode
|
|
62 |
/**
|
63 |
* {@inheritdoc}
|
64 |
*/
|
65 |
-
public function __toString()
|
66 |
{
|
67 |
return sprintf('%s[%s.%s]', $this->getNodeName(), $this->selector, $this->name);
|
68 |
}
|
26 |
private $selector;
|
27 |
private $name;
|
28 |
|
29 |
+
public function __construct(NodeInterface $selector, string $name)
|
|
|
|
|
|
|
30 |
{
|
31 |
$this->selector = $selector;
|
32 |
$this->name = $name;
|
33 |
}
|
34 |
|
35 |
+
public function getSelector(): NodeInterface
|
|
|
|
|
|
|
36 |
{
|
37 |
return $this->selector;
|
38 |
}
|
39 |
|
40 |
+
public function getName(): string
|
|
|
|
|
|
|
41 |
{
|
42 |
return $this->name;
|
43 |
}
|
45 |
/**
|
46 |
* {@inheritdoc}
|
47 |
*/
|
48 |
+
public function getSpecificity(): Specificity
|
49 |
{
|
50 |
return $this->selector->getSpecificity()->plus(new Specificity(0, 1, 0));
|
51 |
}
|
53 |
/**
|
54 |
* {@inheritdoc}
|
55 |
*/
|
56 |
+
public function __toString(): string
|
57 |
{
|
58 |
return sprintf('%s[%s.%s]', $this->getNodeName(), $this->selector, $this->name);
|
59 |
}
|
vendor/symfony/css-selector/Node/CombinedSelectorNode.php
CHANGED
@@ -27,36 +27,24 @@ class CombinedSelectorNode extends AbstractNode
|
|
27 |
private $combinator;
|
28 |
private $subSelector;
|
29 |
|
30 |
-
|
31 |
-
* @param string $combinator
|
32 |
-
*/
|
33 |
-
public function __construct(NodeInterface $selector, $combinator, NodeInterface $subSelector)
|
34 |
{
|
35 |
$this->selector = $selector;
|
36 |
$this->combinator = $combinator;
|
37 |
$this->subSelector = $subSelector;
|
38 |
}
|
39 |
|
40 |
-
|
41 |
-
* @return NodeInterface
|
42 |
-
*/
|
43 |
-
public function getSelector()
|
44 |
{
|
45 |
return $this->selector;
|
46 |
}
|
47 |
|
48 |
-
|
49 |
-
* @return string
|
50 |
-
*/
|
51 |
-
public function getCombinator()
|
52 |
{
|
53 |
return $this->combinator;
|
54 |
}
|
55 |
|
56 |
-
|
57 |
-
* @return NodeInterface
|
58 |
-
*/
|
59 |
-
public function getSubSelector()
|
60 |
{
|
61 |
return $this->subSelector;
|
62 |
}
|
@@ -64,7 +52,7 @@ class CombinedSelectorNode extends AbstractNode
|
|
64 |
/**
|
65 |
* {@inheritdoc}
|
66 |
*/
|
67 |
-
public function getSpecificity()
|
68 |
{
|
69 |
return $this->selector->getSpecificity()->plus($this->subSelector->getSpecificity());
|
70 |
}
|
@@ -72,7 +60,7 @@ class CombinedSelectorNode extends AbstractNode
|
|
72 |
/**
|
73 |
* {@inheritdoc}
|
74 |
*/
|
75 |
-
public function __toString()
|
76 |
{
|
77 |
$combinator = ' ' === $this->combinator ? '<followed>' : $this->combinator;
|
78 |
|
27 |
private $combinator;
|
28 |
private $subSelector;
|
29 |
|
30 |
+
public function __construct(NodeInterface $selector, string $combinator, NodeInterface $subSelector)
|
|
|
|
|
|
|
31 |
{
|
32 |
$this->selector = $selector;
|
33 |
$this->combinator = $combinator;
|
34 |
$this->subSelector = $subSelector;
|
35 |
}
|
36 |
|
37 |
+
public function getSelector(): NodeInterface
|
|
|
|
|
|
|
38 |
{
|
39 |
return $this->selector;
|
40 |
}
|
41 |
|
42 |
+
public function getCombinator(): string
|
|
|
|
|
|
|
43 |
{
|
44 |
return $this->combinator;
|
45 |
}
|
46 |
|
47 |
+
public function getSubSelector(): NodeInterface
|
|
|
|
|
|
|
48 |
{
|
49 |
return $this->subSelector;
|
50 |
}
|
52 |
/**
|
53 |
* {@inheritdoc}
|
54 |
*/
|
55 |
+
public function getSpecificity(): Specificity
|
56 |
{
|
57 |
return $this->selector->getSpecificity()->plus($this->subSelector->getSpecificity());
|
58 |
}
|
60 |
/**
|
61 |
* {@inheritdoc}
|
62 |
*/
|
63 |
+
public function __toString(): string
|
64 |
{
|
65 |
$combinator = ' ' === $this->combinator ? '<followed>' : $this->combinator;
|
66 |
|
vendor/symfony/css-selector/Node/ElementNode.php
CHANGED
@@ -26,28 +26,18 @@ class ElementNode extends AbstractNode
|
|
26 |
private $namespace;
|
27 |
private $element;
|
28 |
|
29 |
-
|
30 |
-
* @param string|null $namespace
|
31 |
-
* @param string|null $element
|
32 |
-
*/
|
33 |
-
public function __construct($namespace = null, $element = null)
|
34 |
{
|
35 |
$this->namespace = $namespace;
|
36 |
$this->element = $element;
|
37 |
}
|
38 |
|
39 |
-
|
40 |
-
* @return string|null
|
41 |
-
*/
|
42 |
-
public function getNamespace()
|
43 |
{
|
44 |
return $this->namespace;
|
45 |
}
|
46 |
|
47 |
-
|
48 |
-
* @return string|null
|
49 |
-
*/
|
50 |
-
public function getElement()
|
51 |
{
|
52 |
return $this->element;
|
53 |
}
|
@@ -55,7 +45,7 @@ class ElementNode extends AbstractNode
|
|
55 |
/**
|
56 |
* {@inheritdoc}
|
57 |
*/
|
58 |
-
public function getSpecificity()
|
59 |
{
|
60 |
return new Specificity(0, 0, $this->element ? 1 : 0);
|
61 |
}
|
@@ -63,7 +53,7 @@ class ElementNode extends AbstractNode
|
|
63 |
/**
|
64 |
* {@inheritdoc}
|
65 |
*/
|
66 |
-
public function __toString()
|
67 |
{
|
68 |
$element = $this->element ?: '*';
|
69 |
|
26 |
private $namespace;
|
27 |
private $element;
|
28 |
|
29 |
+
public function __construct(string $namespace = null, string $element = null)
|
|
|
|
|
|
|
|
|
30 |
{
|
31 |
$this->namespace = $namespace;
|
32 |
$this->element = $element;
|
33 |
}
|
34 |
|
35 |
+
public function getNamespace(): ?string
|
|
|
|
|
|
|
36 |
{
|
37 |
return $this->namespace;
|
38 |
}
|
39 |
|
40 |
+
public function getElement(): ?string
|
|
|
|
|
|
|
41 |
{
|
42 |
return $this->element;
|
43 |
}
|
45 |
/**
|
46 |
* {@inheritdoc}
|
47 |
*/
|
48 |
+
public function getSpecificity(): Specificity
|
49 |
{
|
50 |
return new Specificity(0, 0, $this->element ? 1 : 0);
|
51 |
}
|
53 |
/**
|
54 |
* {@inheritdoc}
|
55 |
*/
|
56 |
+
public function __toString(): string
|
57 |
{
|
58 |
$element = $this->element ?: '*';
|
59 |
|
vendor/symfony/css-selector/Node/FunctionNode.php
CHANGED
@@ -30,28 +30,21 @@ class FunctionNode extends AbstractNode
|
|
30 |
private $arguments;
|
31 |
|
32 |
/**
|
33 |
-
* @param string $name
|
34 |
* @param Token[] $arguments
|
35 |
*/
|
36 |
-
public function __construct(NodeInterface $selector, $name, array $arguments = [])
|
37 |
{
|
38 |
$this->selector = $selector;
|
39 |
$this->name = strtolower($name);
|
40 |
$this->arguments = $arguments;
|
41 |
}
|
42 |
|
43 |
-
|
44 |
-
* @return NodeInterface
|
45 |
-
*/
|
46 |
-
public function getSelector()
|
47 |
{
|
48 |
return $this->selector;
|
49 |
}
|
50 |
|
51 |
-
|
52 |
-
* @return string
|
53 |
-
*/
|
54 |
-
public function getName()
|
55 |
{
|
56 |
return $this->name;
|
57 |
}
|
@@ -59,7 +52,7 @@ class FunctionNode extends AbstractNode
|
|
59 |
/**
|
60 |
* @return Token[]
|
61 |
*/
|
62 |
-
public function getArguments()
|
63 |
{
|
64 |
return $this->arguments;
|
65 |
}
|
@@ -67,7 +60,7 @@ class FunctionNode extends AbstractNode
|
|
67 |
/**
|
68 |
* {@inheritdoc}
|
69 |
*/
|
70 |
-
public function getSpecificity()
|
71 |
{
|
72 |
return $this->selector->getSpecificity()->plus(new Specificity(0, 1, 0));
|
73 |
}
|
@@ -75,7 +68,7 @@ class FunctionNode extends AbstractNode
|
|
75 |
/**
|
76 |
* {@inheritdoc}
|
77 |
*/
|
78 |
-
public function __toString()
|
79 |
{
|
80 |
$arguments = implode(', ', array_map(function (Token $token) {
|
81 |
return "'".$token->getValue()."'";
|
30 |
private $arguments;
|
31 |
|
32 |
/**
|
|
|
33 |
* @param Token[] $arguments
|
34 |
*/
|
35 |
+
public function __construct(NodeInterface $selector, string $name, array $arguments = [])
|
36 |
{
|
37 |
$this->selector = $selector;
|
38 |
$this->name = strtolower($name);
|
39 |
$this->arguments = $arguments;
|
40 |
}
|
41 |
|
42 |
+
public function getSelector(): NodeInterface
|
|
|
|
|
|
|
43 |
{
|
44 |
return $this->selector;
|
45 |
}
|
46 |
|
47 |
+
public function getName(): string
|
|
|
|
|
|
|
48 |
{
|
49 |
return $this->name;
|
50 |
}
|
52 |
/**
|
53 |
* @return Token[]
|
54 |
*/
|
55 |
+
public function getArguments(): array
|
56 |
{
|
57 |
return $this->arguments;
|
58 |
}
|
60 |
/**
|
61 |
* {@inheritdoc}
|
62 |
*/
|
63 |
+
public function getSpecificity(): Specificity
|
64 |
{
|
65 |
return $this->selector->getSpecificity()->plus(new Specificity(0, 1, 0));
|
66 |
}
|
68 |
/**
|
69 |
* {@inheritdoc}
|
70 |
*/
|
71 |
+
public function __toString(): string
|
72 |
{
|
73 |
$arguments = implode(', ', array_map(function (Token $token) {
|
74 |
return "'".$token->getValue()."'";
|
vendor/symfony/css-selector/Node/HashNode.php
CHANGED
@@ -26,27 +26,18 @@ class HashNode extends AbstractNode
|
|
26 |
private $selector;
|
27 |
private $id;
|
28 |
|
29 |
-
|
30 |
-
* @param string $id
|
31 |
-
*/
|
32 |
-
public function __construct(NodeInterface $selector, $id)
|
33 |
{
|
34 |
$this->selector = $selector;
|
35 |
$this->id = $id;
|
36 |
}
|
37 |
|
38 |
-
|
39 |
-
* @return NodeInterface
|
40 |
-
*/
|
41 |
-
public function getSelector()
|
42 |
{
|
43 |
return $this->selector;
|
44 |
}
|
45 |
|
46 |
-
|
47 |
-
* @return string
|
48 |
-
*/
|
49 |
-
public function getId()
|
50 |
{
|
51 |
return $this->id;
|
52 |
}
|
@@ -54,7 +45,7 @@ class HashNode extends AbstractNode
|
|
54 |
/**
|
55 |
* {@inheritdoc}
|
56 |
*/
|
57 |
-
public function getSpecificity()
|
58 |
{
|
59 |
return $this->selector->getSpecificity()->plus(new Specificity(1, 0, 0));
|
60 |
}
|
@@ -62,7 +53,7 @@ class HashNode extends AbstractNode
|
|
62 |
/**
|
63 |
* {@inheritdoc}
|
64 |
*/
|
65 |
-
public function __toString()
|
66 |
{
|
67 |
return sprintf('%s[%s#%s]', $this->getNodeName(), $this->selector, $this->id);
|
68 |
}
|
26 |
private $selector;
|
27 |
private $id;
|
28 |
|
29 |
+
public function __construct(NodeInterface $selector, string $id)
|
|
|
|
|
|
|
30 |
{
|
31 |
$this->selector = $selector;
|
32 |
$this->id = $id;
|
33 |
}
|
34 |
|
35 |
+
public function getSelector(): NodeInterface
|
|
|
|
|
|
|
36 |
{
|
37 |
return $this->selector;
|
38 |
}
|
39 |
|
40 |
+
public function getId(): string
|
|
|
|
|
|
|
41 |
{
|
42 |
return $this->id;
|
43 |
}
|
45 |
/**
|
46 |
* {@inheritdoc}
|
47 |
*/
|
48 |
+
public function getSpecificity(): Specificity
|
49 |
{
|
50 |
return $this->selector->getSpecificity()->plus(new Specificity(1, 0, 0));
|
51 |
}
|
53 |
/**
|
54 |
* {@inheritdoc}
|
55 |
*/
|
56 |
+
public function __toString(): string
|
57 |
{
|
58 |
return sprintf('%s[%s#%s]', $this->getNodeName(), $this->selector, $this->id);
|
59 |
}
|
vendor/symfony/css-selector/Node/NegationNode.php
CHANGED
@@ -32,18 +32,12 @@ class NegationNode extends AbstractNode
|
|
32 |
$this->subSelector = $subSelector;
|
33 |
}
|
34 |
|
35 |
-
|
36 |
-
* @return NodeInterface
|
37 |
-
*/
|
38 |
-
public function getSelector()
|
39 |
{
|
40 |
return $this->selector;
|
41 |
}
|
42 |
|
43 |
-
|
44 |
-
* @return NodeInterface
|
45 |
-
*/
|
46 |
-
public function getSubSelector()
|
47 |
{
|
48 |
return $this->subSelector;
|
49 |
}
|
@@ -51,7 +45,7 @@ class NegationNode extends AbstractNode
|
|
51 |
/**
|
52 |
* {@inheritdoc}
|
53 |
*/
|
54 |
-
public function getSpecificity()
|
55 |
{
|
56 |
return $this->selector->getSpecificity()->plus($this->subSelector->getSpecificity());
|
57 |
}
|
@@ -59,7 +53,7 @@ class NegationNode extends AbstractNode
|
|
59 |
/**
|
60 |
* {@inheritdoc}
|
61 |
*/
|
62 |
-
public function __toString()
|
63 |
{
|
64 |
return sprintf('%s[%s:not(%s)]', $this->getNodeName(), $this->selector, $this->subSelector);
|
65 |
}
|
32 |
$this->subSelector = $subSelector;
|
33 |
}
|
34 |
|
35 |
+
public function getSelector(): NodeInterface
|
|
|
|
|
|
|
36 |
{
|
37 |
return $this->selector;
|
38 |
}
|
39 |
|
40 |
+
public function getSubSelector(): NodeInterface
|
|
|
|
|
|
|
41 |
{
|
42 |
return $this->subSelector;
|
43 |
}
|
45 |
/**
|
46 |
* {@inheritdoc}
|
47 |
*/
|
48 |
+
public function getSpecificity(): Specificity
|
49 |
{
|
50 |
return $this->selector->getSpecificity()->plus($this->subSelector->getSpecificity());
|
51 |
}
|
53 |
/**
|
54 |
* {@inheritdoc}
|
55 |
*/
|
56 |
+
public function __toString(): string
|
57 |
{
|
58 |
return sprintf('%s[%s:not(%s)]', $this->getNodeName(), $this->selector, $this->subSelector);
|
59 |
}
|
vendor/symfony/css-selector/Node/NodeInterface.php
CHANGED
@@ -23,24 +23,9 @@ namespace Symfony\Component\CssSelector\Node;
|
|
23 |
*/
|
24 |
interface NodeInterface
|
25 |
{
|
26 |
-
|
27 |
-
* Returns node's name.
|
28 |
-
*
|
29 |
-
* @return string
|
30 |
-
*/
|
31 |
-
public function getNodeName();
|
32 |
|
33 |
-
|
34 |
-
* Returns node's specificity.
|
35 |
-
*
|
36 |
-
* @return Specificity
|
37 |
-
*/
|
38 |
-
public function getSpecificity();
|
39 |
|
40 |
-
|
41 |
-
* Returns node's string representation.
|
42 |
-
*
|
43 |
-
* @return string
|
44 |
-
*/
|
45 |
-
public function __toString();
|
46 |
}
|
23 |
*/
|
24 |
interface NodeInterface
|
25 |
{
|
26 |
+
public function getNodeName(): string;
|
|
|
|
|
|
|
|
|
|
|
27 |
|
28 |
+
public function getSpecificity(): Specificity;
|
|
|
|
|
|
|
|
|
|
|
29 |
|
30 |
+
public function __toString(): string;
|
|
|
|
|
|
|
|
|
|
|
31 |
}
|
vendor/symfony/css-selector/Node/PseudoNode.php
CHANGED
@@ -26,27 +26,18 @@ class PseudoNode extends AbstractNode
|
|
26 |
private $selector;
|
27 |
private $identifier;
|
28 |
|
29 |
-
|
30 |
-
* @param string $identifier
|
31 |
-
*/
|
32 |
-
public function __construct(NodeInterface $selector, $identifier)
|
33 |
{
|
34 |
$this->selector = $selector;
|
35 |
$this->identifier = strtolower($identifier);
|
36 |
}
|
37 |
|
38 |
-
|
39 |
-
* @return NodeInterface
|
40 |
-
*/
|
41 |
-
public function getSelector()
|
42 |
{
|
43 |
return $this->selector;
|
44 |
}
|
45 |
|
46 |
-
|
47 |
-
* @return string
|
48 |
-
*/
|
49 |
-
public function getIdentifier()
|
50 |
{
|
51 |
return $this->identifier;
|
52 |
}
|
@@ -54,7 +45,7 @@ class PseudoNode extends AbstractNode
|
|
54 |
/**
|
55 |
* {@inheritdoc}
|
56 |
*/
|
57 |
-
public function getSpecificity()
|
58 |
{
|
59 |
return $this->selector->getSpecificity()->plus(new Specificity(0, 1, 0));
|
60 |
}
|
@@ -62,7 +53,7 @@ class PseudoNode extends AbstractNode
|
|
62 |
/**
|
63 |
* {@inheritdoc}
|
64 |
*/
|
65 |
-
public function __toString()
|
66 |
{
|
67 |
return sprintf('%s[%s:%s]', $this->getNodeName(), $this->selector, $this->identifier);
|
68 |
}
|
26 |
private $selector;
|
27 |
private $identifier;
|
28 |
|
29 |
+
public function __construct(NodeInterface $selector, string $identifier)
|
|
|
|
|
|
|
30 |
{
|
31 |
$this->selector = $selector;
|
32 |
$this->identifier = strtolower($identifier);
|
33 |
}
|
34 |
|
35 |
+
public function getSelector(): NodeInterface
|
|
|
|
|
|
|
36 |
{
|
37 |
return $this->selector;
|
38 |
}
|
39 |
|
40 |
+
public function getIdentifier(): string
|
|
|
|
|
|
|
41 |
{
|
42 |
return $this->identifier;
|
43 |
}
|
45 |
/**
|
46 |
* {@inheritdoc}
|
47 |
*/
|
48 |
+
public function getSpecificity(): Specificity
|
49 |
{
|
50 |
return $this->selector->getSpecificity()->plus(new Specificity(0, 1, 0));
|
51 |
}
|
53 |
/**
|
54 |
* {@inheritdoc}
|
55 |
*/
|
56 |
+
public function __toString(): string
|
57 |
{
|
58 |
return sprintf('%s[%s:%s]', $this->getNodeName(), $this->selector, $this->identifier);
|
59 |
}
|
vendor/symfony/css-selector/Node/SelectorNode.php
CHANGED
@@ -26,27 +26,18 @@ class SelectorNode extends AbstractNode
|
|
26 |
private $tree;
|
27 |
private $pseudoElement;
|
28 |
|
29 |
-
|
30 |
-
* @param string|null $pseudoElement
|
31 |
-
*/
|
32 |
-
public function __construct(NodeInterface $tree, $pseudoElement = null)
|
33 |
{
|
34 |
$this->tree = $tree;
|
35 |
$this->pseudoElement = $pseudoElement ? strtolower($pseudoElement) : null;
|
36 |
}
|
37 |
|
38 |
-
|
39 |
-
* @return NodeInterface
|
40 |
-
*/
|
41 |
-
public function getTree()
|
42 |
{
|
43 |
return $this->tree;
|
44 |
}
|
45 |
|
46 |
-
|
47 |
-
* @return string|null
|
48 |
-
*/
|
49 |
-
public function getPseudoElement()
|
50 |
{
|
51 |
return $this->pseudoElement;
|
52 |
}
|
@@ -54,7 +45,7 @@ class SelectorNode extends AbstractNode
|
|
54 |
/**
|
55 |
* {@inheritdoc}
|
56 |
*/
|
57 |
-
public function getSpecificity()
|
58 |
{
|
59 |
return $this->tree->getSpecificity()->plus(new Specificity(0, 0, $this->pseudoElement ? 1 : 0));
|
60 |
}
|
@@ -62,7 +53,7 @@ class SelectorNode extends AbstractNode
|
|
62 |
/**
|
63 |
* {@inheritdoc}
|
64 |
*/
|
65 |
-
public function __toString()
|
66 |
{
|
67 |
return sprintf('%s[%s%s]', $this->getNodeName(), $this->tree, $this->pseudoElement ? '::'.$this->pseudoElement : '');
|
68 |
}
|
26 |
private $tree;
|
27 |
private $pseudoElement;
|
28 |
|
29 |
+
public function __construct(NodeInterface $tree, string $pseudoElement = null)
|
|
|
|
|
|
|
30 |
{
|
31 |
$this->tree = $tree;
|
32 |
$this->pseudoElement = $pseudoElement ? strtolower($pseudoElement) : null;
|
33 |
}
|
34 |
|
35 |
+
public function getTree(): NodeInterface
|
|
|
|
|
|
|
36 |
{
|
37 |
return $this->tree;
|
38 |
}
|
39 |
|
40 |
+
public function getPseudoElement(): ?string
|
|
|
|
|
|
|
41 |
{
|
42 |
return $this->pseudoElement;
|
43 |
}
|
45 |
/**
|
46 |
* {@inheritdoc}
|
47 |
*/
|
48 |
+
public function getSpecificity(): Specificity
|
49 |
{
|
50 |
return $this->tree->getSpecificity()->plus(new Specificity(0, 0, $this->pseudoElement ? 1 : 0));
|
51 |
}
|
53 |
/**
|
54 |
* {@inheritdoc}
|
55 |
*/
|
56 |
+
public function __toString(): string
|
57 |
{
|
58 |
return sprintf('%s[%s%s]', $this->getNodeName(), $this->tree, $this->pseudoElement ? '::'.$this->pseudoElement : '');
|
59 |
}
|
vendor/symfony/css-selector/Node/Specificity.php
CHANGED
@@ -25,40 +25,27 @@ namespace Symfony\Component\CssSelector\Node;
|
|
25 |
*/
|
26 |
class Specificity
|
27 |
{
|
28 |
-
const A_FACTOR = 100;
|
29 |
-
const B_FACTOR = 10;
|
30 |
-
const C_FACTOR = 1;
|
31 |
|
32 |
private $a;
|
33 |
private $b;
|
34 |
private $c;
|
35 |
|
36 |
-
|
37 |
-
* @param int $a
|
38 |
-
* @param int $b
|
39 |
-
* @param int $c
|
40 |
-
*/
|
41 |
-
public function __construct($a, $b, $c)
|
42 |
{
|
43 |
$this->a = $a;
|
44 |
$this->b = $b;
|
45 |
$this->c = $c;
|
46 |
}
|
47 |
|
48 |
-
|
49 |
-
* @return self
|
50 |
-
*/
|
51 |
-
public function plus(self $specificity)
|
52 |
{
|
53 |
return new self($this->a + $specificity->a, $this->b + $specificity->b, $this->c + $specificity->c);
|
54 |
}
|
55 |
|
56 |
-
|
57 |
-
* Returns global specificity value.
|
58 |
-
*
|
59 |
-
* @return int
|
60 |
-
*/
|
61 |
-
public function getValue()
|
62 |
{
|
63 |
return $this->a * self::A_FACTOR + $this->b * self::B_FACTOR + $this->c * self::C_FACTOR;
|
64 |
}
|
@@ -66,10 +53,8 @@ class Specificity
|
|
66 |
/**
|
67 |
* Returns -1 if the object specificity is lower than the argument,
|
68 |
* 0 if they are equal, and 1 if the argument is lower.
|
69 |
-
*
|
70 |
-
* @return int
|
71 |
*/
|
72 |
-
public function compareTo(self $specificity)
|
73 |
{
|
74 |
if ($this->a !== $specificity->a) {
|
75 |
return $this->a > $specificity->a ? 1 : -1;
|
25 |
*/
|
26 |
class Specificity
|
27 |
{
|
28 |
+
public const A_FACTOR = 100;
|
29 |
+
public const B_FACTOR = 10;
|
30 |
+
public const C_FACTOR = 1;
|
31 |
|
32 |
private $a;
|
33 |
private $b;
|
34 |
private $c;
|
35 |
|
36 |
+
public function __construct(int $a, int $b, int $c)
|
|
|
|
|
|
|
|
|
|
|
37 |
{
|
38 |
$this->a = $a;
|
39 |
$this->b = $b;
|
40 |
$this->c = $c;
|
41 |
}
|
42 |
|
43 |
+
public function plus(self $specificity): self
|
|
|
|
|
|
|
44 |
{
|
45 |
return new self($this->a + $specificity->a, $this->b + $specificity->b, $this->c + $specificity->c);
|
46 |
}
|
47 |
|
48 |
+
public function getValue(): int
|
|
|
|
|
|
|
|
|
|
|
49 |
{
|
50 |
return $this->a * self::A_FACTOR + $this->b * self::B_FACTOR + $this->c * self::C_FACTOR;
|
51 |
}
|
53 |
/**
|
54 |
* Returns -1 if the object specificity is lower than the argument,
|
55 |
* 0 if they are equal, and 1 if the argument is lower.
|
|
|
|
|
56 |
*/
|
57 |
+
public function compareTo(self $specificity): int
|
58 |
{
|
59 |
if ($this->a !== $specificity->a) {
|
60 |
return $this->a > $specificity->a ? 1 : -1;
|
vendor/symfony/css-selector/Parser/Handler/CommentHandler.php
CHANGED
@@ -29,7 +29,7 @@ class CommentHandler implements HandlerInterface
|
|
29 |
/**
|
30 |
* {@inheritdoc}
|
31 |
*/
|
32 |
-
public function handle(Reader $reader, TokenStream $stream)
|
33 |
{
|
34 |
if ('/*' !== $reader->getSubstring(2)) {
|
35 |
return false;
|
29 |
/**
|
30 |
* {@inheritdoc}
|
31 |
*/
|
32 |
+
public function handle(Reader $reader, TokenStream $stream): bool
|
33 |
{
|
34 |
if ('/*' !== $reader->getSubstring(2)) {
|
35 |
return false;
|
vendor/symfony/css-selector/Parser/Handler/HandlerInterface.php
CHANGED
@@ -26,8 +26,5 @@ use Symfony\Component\CssSelector\Parser\TokenStream;
|
|
26 |
*/
|
27 |
interface HandlerInterface
|
28 |
{
|
29 |
-
|
30 |
-
* @return bool
|
31 |
-
*/
|
32 |
-
public function handle(Reader $reader, TokenStream $stream);
|
33 |
}
|
26 |
*/
|
27 |
interface HandlerInterface
|
28 |
{
|
29 |
+
public function handle(Reader $reader, TokenStream $stream): bool;
|
|
|
|
|
|
|
30 |
}
|
vendor/symfony/css-selector/Parser/Handler/HashHandler.php
CHANGED
@@ -41,7 +41,7 @@ class HashHandler implements HandlerInterface
|
|
41 |
/**
|
42 |
* {@inheritdoc}
|
43 |
*/
|
44 |
-
public function handle(Reader $reader, TokenStream $stream)
|
45 |
{
|
46 |
$match = $reader->findPattern($this->patterns->getHashPattern());
|
47 |
|
41 |
/**
|
42 |
* {@inheritdoc}
|
43 |
*/
|
44 |
+
public function handle(Reader $reader, TokenStream $stream): bool
|
45 |
{
|
46 |
$match = $reader->findPattern($this->patterns->getHashPattern());
|
47 |
|
vendor/symfony/css-selector/Parser/Handler/IdentifierHandler.php
CHANGED
@@ -41,7 +41,7 @@ class IdentifierHandler implements HandlerInterface
|
|
41 |
/**
|
42 |
* {@inheritdoc}
|
43 |
*/
|
44 |
-
public function handle(Reader $reader, TokenStream $stream)
|
45 |
{
|
46 |
$match = $reader->findPattern($this->patterns->getIdentifierPattern());
|
47 |
|
41 |
/**
|
42 |
* {@inheritdoc}
|
43 |
*/
|
44 |
+
public function handle(Reader $reader, TokenStream $stream): bool
|
45 |
{
|
46 |
$match = $reader->findPattern($this->patterns->getIdentifierPattern());
|
47 |
|
vendor/symfony/css-selector/Parser/Handler/NumberHandler.php
CHANGED
@@ -38,7 +38,7 @@ class NumberHandler implements HandlerInterface
|
|
38 |
/**
|
39 |
* {@inheritdoc}
|
40 |
*/
|
41 |
-
public function handle(Reader $reader, TokenStream $stream)
|
42 |
{
|
43 |
$match = $reader->findPattern($this->patterns->getNumberPattern());
|
44 |
|
38 |
/**
|
39 |
* {@inheritdoc}
|
40 |
*/
|
41 |
+
public function handle(Reader $reader, TokenStream $stream): bool
|
42 |
{
|
43 |
$match = $reader->findPattern($this->patterns->getNumberPattern());
|
44 |
|
vendor/symfony/css-selector/Parser/Handler/StringHandler.php
CHANGED
@@ -43,7 +43,7 @@ class StringHandler implements HandlerInterface
|
|
43 |
/**
|
44 |
* {@inheritdoc}
|
45 |
*/
|
46 |
-
public function handle(Reader $reader, TokenStream $stream)
|
47 |
{
|
48 |
$quote = $reader->getSubstring(1);
|
49 |
|
43 |
/**
|
44 |
* {@inheritdoc}
|
45 |
*/
|
46 |
+
public function handle(Reader $reader, TokenStream $stream): bool
|
47 |
{
|
48 |
$quote = $reader->getSubstring(1);
|
49 |
|
vendor/symfony/css-selector/Parser/Handler/WhitespaceHandler.php
CHANGED
@@ -30,7 +30,7 @@ class WhitespaceHandler implements HandlerInterface
|
|
30 |
/**
|
31 |
* {@inheritdoc}
|
32 |
*/
|
33 |
-
public function handle(Reader $reader, TokenStream $stream)
|
34 |
{
|
35 |
$match = $reader->findPattern('~^[ \t\r\n\f]+~');
|
36 |
|
30 |
/**
|
31 |
* {@inheritdoc}
|
32 |
*/
|
33 |
+
public function handle(Reader $reader, TokenStream $stream): bool
|
34 |
{
|
35 |
$match = $reader->findPattern('~^[ \t\r\n\f]+~');
|
36 |
|
vendor/symfony/css-selector/Parser/Parser.php
CHANGED
@@ -31,13 +31,13 @@ class Parser implements ParserInterface
|
|
31 |
|
32 |
public function __construct(Tokenizer $tokenizer = null)
|
33 |
{
|
34 |
-
$this->tokenizer = $tokenizer
|
35 |
}
|
36 |
|
37 |
/**
|
38 |
* {@inheritdoc}
|
39 |
*/
|
40 |
-
public function parse($source)
|
41 |
{
|
42 |
$reader = new Reader($source);
|
43 |
$stream = $this->tokenizer->tokenize($reader);
|
@@ -50,11 +50,9 @@ class Parser implements ParserInterface
|
|
50 |
*
|
51 |
* @param Token[] $tokens
|
52 |
*
|
53 |
-
* @return array
|
54 |
-
*
|
55 |
* @throws SyntaxErrorException
|
56 |
*/
|
57 |
-
public static function parseSeries(array $tokens)
|
58 |
{
|
59 |
foreach ($tokens as $token) {
|
60 |
if ($token->isString()) {
|
@@ -86,7 +84,7 @@ class Parser implements ParserInterface
|
|
86 |
}
|
87 |
|
88 |
$split = explode('n', $joined);
|
89 |
-
$first =
|
90 |
|
91 |
return [
|
92 |
$first ? ('-' === $first || '+' === $first ? $int($first.'1') : $int($first)) : 1,
|
@@ -94,12 +92,7 @@ class Parser implements ParserInterface
|
|
94 |
];
|
95 |
}
|
96 |
|
97 |
-
|
98 |
-
* Parses selector nodes.
|
99 |
-
*
|
100 |
-
* @return array
|
101 |
-
*/
|
102 |
-
private function parseSelectorList(TokenStream $stream)
|
103 |
{
|
104 |
$stream->skipWhitespace();
|
105 |
$selectors = [];
|
@@ -118,16 +111,9 @@ class Parser implements ParserInterface
|
|
118 |
return $selectors;
|
119 |
}
|
120 |
|
121 |
-
|
122 |
-
* Parses next selector or combined node.
|
123 |
-
*
|
124 |
-
* @return Node\SelectorNode
|
125 |
-
*
|
126 |
-
* @throws SyntaxErrorException
|
127 |
-
*/
|
128 |
-
private function parserSelectorNode(TokenStream $stream)
|
129 |
{
|
130 |
-
|
131 |
|
132 |
while (true) {
|
133 |
$stream->skipWhitespace();
|
@@ -148,7 +134,7 @@ class Parser implements ParserInterface
|
|
148 |
$combinator = ' ';
|
149 |
}
|
150 |
|
151 |
-
|
152 |
$result = new Node\CombinedSelectorNode($result, $combinator, $nextSelector);
|
153 |
}
|
154 |
|
@@ -158,13 +144,9 @@ class Parser implements ParserInterface
|
|
158 |
/**
|
159 |
* Parses next simple node (hash, class, pseudo, negation).
|
160 |
*
|
161 |
-
* @param bool $insideNegation
|
162 |
-
*
|
163 |
-
* @return array
|
164 |
-
*
|
165 |
* @throws SyntaxErrorException
|
166 |
*/
|
167 |
-
private function parseSimpleSelector(TokenStream $stream, $insideNegation = false)
|
168 |
{
|
169 |
$stream->skipWhitespace();
|
170 |
|
@@ -227,7 +209,7 @@ class Parser implements ParserInterface
|
|
227 |
throw SyntaxErrorException::nestedNot();
|
228 |
}
|
229 |
|
230 |
-
|
231 |
$next = $stream->getNext();
|
232 |
|
233 |
if (null !== $argumentPseudoElement) {
|
@@ -278,12 +260,7 @@ class Parser implements ParserInterface
|
|
278 |
return [$result, $pseudoElement];
|
279 |
}
|
280 |
|
281 |
-
|
282 |
-
* Parses next element node.
|
283 |
-
*
|
284 |
-
* @return Node\ElementNode
|
285 |
-
*/
|
286 |
-
private function parseElementNode(TokenStream $stream)
|
287 |
{
|
288 |
$peek = $stream->getPeek();
|
289 |
|
@@ -309,14 +286,7 @@ class Parser implements ParserInterface
|
|
309 |
return new Node\ElementNode($namespace, $element);
|
310 |
}
|
311 |
|
312 |
-
|
313 |
-
* Parses next attribute node.
|
314 |
-
*
|
315 |
-
* @return Node\AttributeNode
|
316 |
-
*
|
317 |
-
* @throws SyntaxErrorException
|
318 |
-
*/
|
319 |
-
private function parseAttributeNode(Node\NodeInterface $selector, TokenStream $stream)
|
320 |
{
|
321 |
$stream->skipWhitespace();
|
322 |
$attribute = $stream->getNextIdentifierOrStar();
|
31 |
|
32 |
public function __construct(Tokenizer $tokenizer = null)
|
33 |
{
|
34 |
+
$this->tokenizer = $tokenizer ?? new Tokenizer();
|
35 |
}
|
36 |
|
37 |
/**
|
38 |
* {@inheritdoc}
|
39 |
*/
|
40 |
+
public function parse(string $source): array
|
41 |
{
|
42 |
$reader = new Reader($source);
|
43 |
$stream = $this->tokenizer->tokenize($reader);
|
50 |
*
|
51 |
* @param Token[] $tokens
|
52 |
*
|
|
|
|
|
53 |
* @throws SyntaxErrorException
|
54 |
*/
|
55 |
+
public static function parseSeries(array $tokens): array
|
56 |
{
|
57 |
foreach ($tokens as $token) {
|
58 |
if ($token->isString()) {
|
84 |
}
|
85 |
|
86 |
$split = explode('n', $joined);
|
87 |
+
$first = $split[0] ?? null;
|
88 |
|
89 |
return [
|
90 |
$first ? ('-' === $first || '+' === $first ? $int($first.'1') : $int($first)) : 1,
|
92 |
];
|
93 |
}
|
94 |
|
95 |
+
private function parseSelectorList(TokenStream $stream): array
|
|
|
|
|
|
|
|
|
|
|
96 |
{
|
97 |
$stream->skipWhitespace();
|
98 |
$selectors = [];
|
111 |
return $selectors;
|
112 |
}
|
113 |
|
114 |
+
private function parserSelectorNode(TokenStream $stream): Node\SelectorNode
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
{
|
116 |
+
[$result, $pseudoElement] = $this->parseSimpleSelector($stream);
|
117 |
|
118 |
while (true) {
|
119 |
$stream->skipWhitespace();
|
134 |
$combinator = ' ';
|
135 |
}
|
136 |
|
137 |
+
[$nextSelector, $pseudoElement] = $this->parseSimpleSelector($stream);
|
138 |
$result = new Node\CombinedSelectorNode($result, $combinator, $nextSelector);
|
139 |
}
|
140 |
|
144 |
/**
|
145 |
* Parses next simple node (hash, class, pseudo, negation).
|
146 |
*
|
|
|
|
|
|
|
|
|
147 |
* @throws SyntaxErrorException
|
148 |
*/
|
149 |
+
private function parseSimpleSelector(TokenStream $stream, bool $insideNegation = false): array
|
150 |
{
|
151 |
$stream->skipWhitespace();
|
152 |
|
209 |
throw SyntaxErrorException::nestedNot();
|
210 |
}
|
211 |
|
212 |
+
[$argument, $argumentPseudoElement] = $this->parseSimpleSelector($stream, true);
|
213 |
$next = $stream->getNext();
|
214 |
|
215 |
if (null !== $argumentPseudoElement) {
|
260 |
return [$result, $pseudoElement];
|
261 |
}
|
262 |
|
263 |
+
private function parseElementNode(TokenStream $stream): Node\ElementNode
|
|
|
|
|
|
|
|
|
|
|
264 |
{
|
265 |
$peek = $stream->getPeek();
|
266 |
|
286 |
return new Node\ElementNode($namespace, $element);
|
287 |
}
|
288 |
|
289 |
+
private function parseAttributeNode(Node\NodeInterface $selector, TokenStream $stream): Node\AttributeNode
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
290 |
{
|
291 |
$stream->skipWhitespace();
|
292 |
$attribute = $stream->getNextIdentifierOrStar();
|
vendor/symfony/css-selector/Parser/ParserInterface.php
CHANGED
@@ -28,9 +28,7 @@ interface ParserInterface
|
|
28 |
/**
|
29 |
* Parses given selector source into an array of tokens.
|
30 |
*
|
31 |
-
* @param string $source
|
32 |
-
*
|
33 |
* @return SelectorNode[]
|
34 |
*/
|
35 |
-
public function parse($source);
|
36 |
}
|
28 |
/**
|
29 |
* Parses given selector source into an array of tokens.
|
30 |
*
|
|
|
|
|
31 |
* @return SelectorNode[]
|
32 |
*/
|
33 |
+
public function parse(string $source): array;
|
34 |
}
|
vendor/symfony/css-selector/Parser/Reader.php
CHANGED
@@ -27,56 +27,33 @@ class Reader
|
|
27 |
private $length;
|
28 |
private $position = 0;
|
29 |
|
30 |
-
|
31 |
-
* @param string $source
|
32 |
-
*/
|
33 |
-
public function __construct($source)
|
34 |
{
|
35 |
$this->source = $source;
|
36 |
$this->length = \strlen($source);
|
37 |
}
|
38 |
|
39 |
-
|
40 |
-
* @return bool
|
41 |
-
*/
|
42 |
-
public function isEOF()
|
43 |
{
|
44 |
return $this->position >= $this->length;
|
45 |
}
|
46 |
|
47 |
-
|
48 |
-
* @return int
|
49 |
-
*/
|
50 |
-
public function getPosition()
|
51 |
{
|
52 |
return $this->position;
|
53 |
}
|
54 |
|
55 |
-
|
56 |
-
* @return int
|
57 |
-
*/
|
58 |
-
public function getRemainingLength()
|
59 |
{
|
60 |
return $this->length - $this->position;
|
61 |
}
|
62 |
|
63 |
-
|
64 |
-
* @param int $length
|
65 |
-
* @param int $offset
|
66 |
-
*
|
67 |
-
* @return string
|
68 |
-
*/
|
69 |
-
public function getSubstring($length, $offset = 0)
|
70 |
{
|
71 |
return substr($this->source, $this->position + $offset, $length);
|
72 |
}
|
73 |
|
74 |
-
|
75 |
-
* @param string $string
|
76 |
-
*
|
77 |
-
* @return int
|
78 |
-
*/
|
79 |
-
public function getOffset($string)
|
80 |
{
|
81 |
$position = strpos($this->source, $string, $this->position);
|
82 |
|
@@ -84,11 +61,9 @@ class Reader
|
|
84 |
}
|
85 |
|
86 |
/**
|
87 |
-
* @param string $pattern
|
88 |
-
*
|
89 |
* @return array|false
|
90 |
*/
|
91 |
-
public function findPattern($pattern)
|
92 |
{
|
93 |
$source = substr($this->source, $this->position);
|
94 |
|
@@ -99,10 +74,7 @@ class Reader
|
|
99 |
return false;
|
100 |
}
|
101 |
|
102 |
-
|
103 |
-
* @param int $length
|
104 |
-
*/
|
105 |
-
public function moveForward($length)
|
106 |
{
|
107 |
$this->position += $length;
|
108 |
}
|
27 |
private $length;
|
28 |
private $position = 0;
|
29 |
|
30 |
+
public function __construct(string $source)
|
|
|
|
|
|
|
31 |
{
|
32 |
$this->source = $source;
|
33 |
$this->length = \strlen($source);
|
34 |
}
|
35 |
|
36 |
+
public function isEOF(): bool
|
|
|
|
|
|
|
37 |
{
|
38 |
return $this->position >= $this->length;
|
39 |
}
|
40 |
|
41 |
+
public function getPosition(): int
|
|
|
|
|
|
|
42 |
{
|
43 |
return $this->position;
|
44 |
}
|
45 |
|
46 |
+
public function getRemainingLength(): int
|
|
|
|
|
|
|
47 |
{
|
48 |
return $this->length - $this->position;
|
49 |
}
|
50 |
|
51 |
+
public function getSubstring(int $length, int $offset = 0): string
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
{
|
53 |
return substr($this->source, $this->position + $offset, $length);
|
54 |
}
|
55 |
|
56 |
+
public function getOffset(string $string)
|
|
|
|
|
|
|
|
|
|
|
57 |
{
|
58 |
$position = strpos($this->source, $string, $this->position);
|
59 |
|
61 |
}
|
62 |
|
63 |
/**
|
|
|
|
|
64 |
* @return array|false
|
65 |
*/
|
66 |
+
public function findPattern(string $pattern)
|
67 |
{
|
68 |
$source = substr($this->source, $this->position);
|
69 |
|
74 |
return false;
|
75 |
}
|
76 |
|
77 |
+
public function moveForward(int $length)
|
|
|
|
|
|
|
78 |
{
|
79 |
$this->position += $length;
|
80 |
}
|
vendor/symfony/css-selector/Parser/Shortcut/ClassParser.php
CHANGED
@@ -31,7 +31,7 @@ class ClassParser implements ParserInterface
|
|
31 |
/**
|
32 |
* {@inheritdoc}
|
33 |
*/
|
34 |
-
public function parse($source)
|
35 |
{
|
36 |
// Matches an optional namespace, optional element, and required class
|
37 |
// $source = 'test|input.ab6bd_field';
|
31 |
/**
|
32 |
* {@inheritdoc}
|
33 |
*/
|
34 |
+
public function parse(string $source): array
|
35 |
{
|
36 |
// Matches an optional namespace, optional element, and required class
|
37 |
// $source = 'test|input.ab6bd_field';
|
vendor/symfony/css-selector/Parser/Shortcut/ElementParser.php
CHANGED
@@ -30,7 +30,7 @@ class ElementParser implements ParserInterface
|
|
30 |
/**
|
31 |
* {@inheritdoc}
|
32 |
*/
|
33 |
-
public function parse($source)
|
34 |
{
|
35 |
// Matches an optional namespace, required element or `*`
|
36 |
// $source = 'testns|testel';
|
30 |
/**
|
31 |
* {@inheritdoc}
|
32 |
*/
|
33 |
+
public function parse(string $source): array
|
34 |
{
|
35 |
// Matches an optional namespace, required element or `*`
|
36 |
// $source = 'testns|testel';
|
vendor/symfony/css-selector/Parser/Shortcut/EmptyStringParser.php
CHANGED
@@ -34,7 +34,7 @@ class EmptyStringParser implements ParserInterface
|
|
34 |
/**
|
35 |
* {@inheritdoc}
|
36 |
*/
|
37 |
-
public function parse($source)
|
38 |
{
|
39 |
// Matches an empty string
|
40 |
if ('' == $source) {
|
34 |
/**
|
35 |
* {@inheritdoc}
|
36 |
*/
|
37 |
+
public function parse(string $source): array
|
38 |
{
|
39 |
// Matches an empty string
|
40 |
if ('' == $source) {
|
vendor/symfony/css-selector/Parser/Shortcut/HashParser.php
CHANGED
@@ -31,7 +31,7 @@ class HashParser implements ParserInterface
|
|
31 |
/**
|
32 |
* {@inheritdoc}
|
33 |
*/
|
34 |
-
public function parse($source)
|
35 |
{
|
36 |
// Matches an optional namespace, optional element, and required id
|
37 |
// $source = 'test|input#ab6bd_field';
|
31 |
/**
|
32 |
* {@inheritdoc}
|
33 |
*/
|
34 |
+
public function parse(string $source): array
|
35 |
{
|
36 |
// Matches an optional namespace, optional element, and required id
|
37 |
// $source = 'test|input#ab6bd_field';
|
vendor/symfony/css-selector/Parser/Token.php
CHANGED
@@ -23,66 +23,46 @@ namespace Symfony\Component\CssSelector\Parser;
|
|
23 |
*/
|
24 |
class Token
|
25 |
{
|
26 |
-
const TYPE_FILE_END = 'eof';
|
27 |
-
const TYPE_DELIMITER = 'delimiter';
|
28 |
-
const TYPE_WHITESPACE = 'whitespace';
|
29 |
-
const TYPE_IDENTIFIER = 'identifier';
|
30 |
-
const TYPE_HASH = 'hash';
|
31 |
-
const TYPE_NUMBER = 'number';
|
32 |
-
const TYPE_STRING = 'string';
|
33 |
|
34 |
private $type;
|
35 |
private $value;
|
36 |
private $position;
|
37 |
|
38 |
-
|
39 |
-
* @param int $type
|
40 |
-
* @param string $value
|
41 |
-
* @param int $position
|
42 |
-
*/
|
43 |
-
public function __construct($type, $value, $position)
|
44 |
{
|
45 |
$this->type = $type;
|
46 |
$this->value = $value;
|
47 |
$this->position = $position;
|
48 |
}
|
49 |
|
50 |
-
|
51 |
-
* @return int
|
52 |
-
*/
|
53 |
-
public function getType()
|
54 |
{
|
55 |
return $this->type;
|
56 |
}
|
57 |
|
58 |
-
|
59 |
-
* @return string
|
60 |
-
*/
|
61 |
-
public function getValue()
|
62 |
{
|
63 |
return $this->value;
|
64 |
}
|
65 |
|
66 |
-
|
67 |
-
* @return int
|
68 |
-
*/
|
69 |
-
public function getPosition()
|
70 |
{
|
71 |
return $this->position;
|
72 |
}
|
73 |
|
74 |
-
|
75 |
-
* @return bool
|
76 |
-
*/
|
77 |
-
public function isFileEnd()
|
78 |
{
|
79 |
return self::TYPE_FILE_END === $this->type;
|
80 |
}
|
81 |
|
82 |
-
|
83 |
-
* @return bool
|
84 |
-
*/
|
85 |
-
public function isDelimiter(array $values = [])
|
86 |
{
|
87 |
if (self::TYPE_DELIMITER !== $this->type) {
|
88 |
return false;
|
@@ -95,50 +75,32 @@ class Token
|
|
95 |
return \in_array($this->value, $values);
|
96 |
}
|
97 |
|
98 |
-
|
99 |
-
* @return bool
|
100 |
-
*/
|
101 |
-
public function isWhitespace()
|
102 |
{
|
103 |
return self::TYPE_WHITESPACE === $this->type;
|
104 |
}
|
105 |
|
106 |
-
|
107 |
-
* @return bool
|
108 |
-
*/
|
109 |
-
public function isIdentifier()
|
110 |
{
|
111 |
return self::TYPE_IDENTIFIER === $this->type;
|
112 |
}
|
113 |
|
114 |
-
|
115 |
-
* @return bool
|
116 |
-
*/
|
117 |
-
public function isHash()
|
118 |
{
|
119 |
return self::TYPE_HASH === $this->type;
|
120 |
}
|
121 |
|
122 |
-
|
123 |
-
* @return bool
|
124 |
-
*/
|
125 |
-
public function isNumber()
|
126 |
{
|
127 |
return self::TYPE_NUMBER === $this->type;
|
128 |
}
|
129 |
|
130 |
-
|
131 |
-
* @return bool
|
132 |
-
*/
|
133 |
-
public function isString()
|
134 |
{
|
135 |
return self::TYPE_STRING === $this->type;
|
136 |
}
|
137 |
|
138 |
-
|
139 |
-
* @return string
|
140 |
-
*/
|
141 |
-
public function __toString()
|
142 |
{
|
143 |
if ($this->value) {
|
144 |
return sprintf('<%s "%s" at %s>', $this->type, $this->value, $this->position);
|
23 |
*/
|
24 |
class Token
|
25 |
{
|
26 |
+
public const TYPE_FILE_END = 'eof';
|
27 |
+
public const TYPE_DELIMITER = 'delimiter';
|
28 |
+
public const TYPE_WHITESPACE = 'whitespace';
|
29 |
+
public const TYPE_IDENTIFIER = 'identifier';
|
30 |
+
public const TYPE_HASH = 'hash';
|
31 |
+
public const TYPE_NUMBER = 'number';
|
32 |
+
public const TYPE_STRING = 'string';
|
33 |
|
34 |
private $type;
|
35 |
private $value;
|
36 |
private $position;
|
37 |
|
38 |
+
public function __construct(?string $type, ?string $value, ?int $position)
|
|
|
|
|
|
|
|
|
|
|
39 |
{
|
40 |
$this->type = $type;
|
41 |
$this->value = $value;
|
42 |
$this->position = $position;
|
43 |
}
|
44 |
|
45 |
+
public function getType(): ?int
|
|
|
|
|
|
|
46 |
{
|
47 |
return $this->type;
|
48 |
}
|
49 |
|
50 |
+
public function getValue(): ?string
|
|
|
|
|
|
|
51 |
{
|
52 |
return $this->value;
|
53 |
}
|
54 |
|
55 |
+
public function getPosition(): ?int
|
|
|
|
|
|
|
56 |
{
|
57 |
return $this->position;
|
58 |
}
|
59 |
|
60 |
+
public function isFileEnd(): bool
|
|
|
|
|
|
|
61 |
{
|
62 |
return self::TYPE_FILE_END === $this->type;
|
63 |
}
|
64 |
|
65 |
+
public function isDelimiter(array $values = []): bool
|
|
|
|
|
|
|
66 |
{
|
67 |
if (self::TYPE_DELIMITER !== $this->type) {
|
68 |
return false;
|
75 |
return \in_array($this->value, $values);
|
76 |
}
|
77 |
|
78 |
+
public function isWhitespace(): bool
|
|
|
|
|
|
|
79 |
{
|
80 |
return self::TYPE_WHITESPACE === $this->type;
|
81 |
}
|
82 |
|
83 |
+
public function isIdentifier(): bool
|
|
|
|
|
|
|
84 |
{
|
85 |
return self::TYPE_IDENTIFIER === $this->type;
|
86 |
}
|
87 |
|
88 |
+
public function isHash(): bool
|
|
|
|
|
|
|
89 |
{
|
90 |
return self::TYPE_HASH === $this->type;
|
91 |
}
|
92 |
|
93 |
+
public function isNumber(): bool
|
|
|
|
|
|
|
94 |
{
|
95 |
return self::TYPE_NUMBER === $this->type;
|
96 |
}
|
97 |
|
98 |
+
public function isString(): bool
|
|
|
|
|
|
|
99 |
{
|
100 |
return self::TYPE_STRING === $this->type;
|
101 |
}
|
102 |
|
103 |
+
public function __toString(): string
|
|
|
|
|
|
|
104 |
{
|
105 |
if ($this->value) {
|
106 |
return sprintf('<%s "%s" at %s>', $this->type, $this->value, $this->position);
|
vendor/symfony/css-selector/Parser/TokenStream.php
CHANGED
@@ -56,7 +56,7 @@ class TokenStream
|
|
56 |
*
|
57 |
* @return $this
|
58 |
*/
|
59 |
-
public function push(Token $token)
|
60 |
{
|
61 |
$this->tokens[] = $token;
|
62 |
|
@@ -68,7 +68,7 @@ class TokenStream
|
|
68 |
*
|
69 |
* @return $this
|
70 |
*/
|
71 |
-
public function freeze()
|
72 |
{
|
73 |
return $this;
|
74 |
}
|
@@ -76,11 +76,9 @@ class TokenStream
|
|
76 |
/**
|
77 |
* Returns next token.
|
78 |
*
|
79 |
-
* @return Token
|
80 |
-
*
|
81 |
* @throws InternalErrorException If there is no more token
|
82 |
*/
|
83 |
-
public function getNext()
|
84 |
{
|
85 |
if ($this->peeking) {
|
86 |
$this->peeking = false;
|
@@ -98,10 +96,8 @@ class TokenStream
|
|
98 |
|
99 |
/**
|
100 |
* Returns peeked token.
|
101 |
-
*
|
102 |
-
* @return Token
|
103 |
*/
|
104 |
-
public function getPeek()
|
105 |
{
|
106 |
if (!$this->peeking) {
|
107 |
$this->peeked = $this->getNext();
|
@@ -116,7 +112,7 @@ class TokenStream
|
|
116 |
*
|
117 |
* @return Token[]
|
118 |
*/
|
119 |
-
public function getUsed()
|
120 |
{
|
121 |
return $this->used;
|
122 |
}
|
@@ -128,7 +124,7 @@ class TokenStream
|
|
128 |
*
|
129 |
* @throws SyntaxErrorException If next token is not an identifier
|
130 |
*/
|
131 |
-
public function getNextIdentifier()
|
132 |
{
|
133 |
$next = $this->getNext();
|
134 |
|
@@ -146,7 +142,7 @@ class TokenStream
|
|
146 |
*
|
147 |
* @throws SyntaxErrorException If next token is not an identifier or a star delimiter
|
148 |
*/
|
149 |
-
public function getNextIdentifierOrStar()
|
150 |
{
|
151 |
$next = $this->getNext();
|
152 |
|
56 |
*
|
57 |
* @return $this
|
58 |
*/
|
59 |
+
public function push(Token $token): self
|
60 |
{
|
61 |
$this->tokens[] = $token;
|
62 |
|
68 |
*
|
69 |
* @return $this
|
70 |
*/
|
71 |
+
public function freeze(): self
|
72 |
{
|
73 |
return $this;
|
74 |
}
|
76 |
/**
|
77 |
* Returns next token.
|
78 |
*
|
|
|
|
|
79 |
* @throws InternalErrorException If there is no more token
|
80 |
*/
|
81 |
+
public function getNext(): Token
|
82 |
{
|
83 |
if ($this->peeking) {
|
84 |
$this->peeking = false;
|
96 |
|
97 |
/**
|
98 |
* Returns peeked token.
|
|
|
|
|
99 |
*/
|
100 |
+
public function getPeek(): Token
|
101 |
{
|
102 |
if (!$this->peeking) {
|
103 |
$this->peeked = $this->getNext();
|
112 |
*
|
113 |
* @return Token[]
|
114 |
*/
|
115 |
+
public function getUsed(): array
|
116 |
{
|
117 |
return $this->used;
|
118 |
}
|
124 |
*
|
125 |
* @throws SyntaxErrorException If next token is not an identifier
|
126 |
*/
|
127 |
+
public function getNextIdentifier(): string
|
128 |
{
|
129 |
$next = $this->getNext();
|
130 |
|
142 |
*
|
143 |
* @throws SyntaxErrorException If next token is not an identifier or a star delimiter
|
144 |
*/
|
145 |
+
public function getNextIdentifierOrStar(): ?string
|
146 |
{
|
147 |
$next = $this->getNext();
|
148 |
|
vendor/symfony/css-selector/Parser/Tokenizer/Tokenizer.php
CHANGED
@@ -50,10 +50,8 @@ class Tokenizer
|
|
50 |
|
51 |
/**
|
52 |
* Tokenize selector source code.
|
53 |
-
*
|
54 |
-
* @return TokenStream
|
55 |
*/
|
56 |
-
public function tokenize(Reader $reader)
|
57 |
{
|
58 |
$stream = new TokenStream();
|
59 |
|
50 |
|
51 |
/**
|
52 |
* Tokenize selector source code.
|
|
|
|
|
53 |
*/
|
54 |
+
public function tokenize(Reader $reader): TokenStream
|
55 |
{
|
56 |
$stream = new TokenStream();
|
57 |
|
vendor/symfony/css-selector/Parser/Tokenizer/TokenizerEscaping.php
CHANGED
@@ -30,36 +30,21 @@ class TokenizerEscaping
|
|
30 |
$this->patterns = $patterns;
|
31 |
}
|
32 |
|
33 |
-
|
34 |
-
* @param string $value
|
35 |
-
*
|
36 |
-
* @return string
|
37 |
-
*/
|
38 |
-
public function escapeUnicode($value)
|
39 |
{
|
40 |
$value = $this->replaceUnicodeSequences($value);
|
41 |
|
42 |
return preg_replace($this->patterns->getSimpleEscapePattern(), '$1', $value);
|
43 |
}
|
44 |
|
45 |
-
|
46 |
-
* @param string $value
|
47 |
-
*
|
48 |
-
* @return string
|
49 |
-
*/
|
50 |
-
public function escapeUnicodeAndNewLine($value)
|
51 |
{
|
52 |
$value = preg_replace($this->patterns->getNewLineEscapePattern(), '', $value);
|
53 |
|
54 |
return $this->escapeUnicode($value);
|
55 |
}
|
56 |
|
57 |
-
|
58 |
-
* @param string $value
|
59 |
-
*
|
60 |
-
* @return string
|
61 |
-
*/
|
62 |
-
private function replaceUnicodeSequences($value)
|
63 |
{
|
64 |
return preg_replace_callback($this->patterns->getUnicodeEscapePattern(), function ($match) {
|
65 |
$c = hexdec($match[1]);
|
30 |
$this->patterns = $patterns;
|
31 |
}
|
32 |
|
33 |
+
public function escapeUnicode(string $value): string
|
|
|
|
|
|
|
|
|
|
|
34 |
{
|
35 |
$value = $this->replaceUnicodeSequences($value);
|
36 |
|
37 |
return preg_replace($this->patterns->getSimpleEscapePattern(), '$1', $value);
|
38 |
}
|
39 |
|
40 |
+
public function escapeUnicodeAndNewLine(string $value): string
|
|
|
|
|
|
|
|
|
|
|
41 |
{
|
42 |
$value = preg_replace($this->patterns->getNewLineEscapePattern(), '', $value);
|
43 |
|
44 |
return $this->escapeUnicode($value);
|
45 |
}
|
46 |
|
47 |
+
private function replaceUnicodeSequences(string $value): string
|
|
|
|
|
|
|
|
|
|
|
48 |
{
|
49 |
return preg_replace_callback($this->patterns->getUnicodeEscapePattern(), function ($match) {
|
50 |
$c = hexdec($match[1]);
|
vendor/symfony/css-selector/Parser/Tokenizer/TokenizerPatterns.php
CHANGED
@@ -52,60 +52,37 @@ class TokenizerPatterns
|
|
52 |
$this->quotedStringPattern = '([^\n\r\f%s]|'.$this->stringEscapePattern.')*';
|
53 |
}
|
54 |
|
55 |
-
|
56 |
-
* @return string
|
57 |
-
*/
|
58 |
-
public function getNewLineEscapePattern()
|
59 |
{
|
60 |
return '~^'.$this->newLineEscapePattern.'~';
|
61 |
}
|
62 |
|
63 |
-
|
64 |
-
* @return string
|
65 |
-
*/
|
66 |
-
public function getSimpleEscapePattern()
|
67 |
{
|
68 |
return '~^'.$this->simpleEscapePattern.'~';
|
69 |
}
|
70 |
|
71 |
-
|
72 |
-
* @return string
|
73 |
-
*/
|
74 |
-
public function getUnicodeEscapePattern()
|
75 |
{
|
76 |
return '~^'.$this->unicodeEscapePattern.'~i';
|
77 |
}
|
78 |
|
79 |
-
|
80 |
-
* @return string
|
81 |
-
*/
|
82 |
-
public function getIdentifierPattern()
|
83 |
{
|
84 |
return '~^'.$this->identifierPattern.'~i';
|
85 |
}
|
86 |
|
87 |
-
|
88 |
-
* @return string
|
89 |
-
*/
|
90 |
-
public function getHashPattern()
|
91 |
{
|
92 |
return '~^'.$this->hashPattern.'~i';
|
93 |
}
|
94 |
|
95 |
-
|
96 |
-
* @return string
|
97 |
-
*/
|
98 |
-
public function getNumberPattern()
|
99 |
{
|
100 |
return '~^'.$this->numberPattern.'~';
|
101 |
}
|
102 |
|
103 |
-
|
104 |
-
* @param string $quote
|
105 |
-
*
|
106 |
-
* @return string
|
107 |
-
*/
|
108 |
-
public function getQuotedStringPattern($quote)
|
109 |
{
|
110 |
return '~^'.sprintf($this->quotedStringPattern, $quote).'~i';
|
111 |
}
|
52 |
$this->quotedStringPattern = '([^\n\r\f%s]|'.$this->stringEscapePattern.')*';
|
53 |
}
|
54 |
|
55 |
+
public function getNewLineEscapePattern(): string
|
|
|
|
|
|
|
56 |
{
|
57 |
return '~^'.$this->newLineEscapePattern.'~';
|
58 |
}
|
59 |
|
60 |
+
public function getSimpleEscapePattern(): string
|
|
|
|
|
|
|
61 |
{
|
62 |
return '~^'.$this->simpleEscapePattern.'~';
|
63 |
}
|
64 |
|
65 |
+
public function getUnicodeEscapePattern(): string
|
|
|
|
|
|
|
66 |
{
|
67 |
return '~^'.$this->unicodeEscapePattern.'~i';
|
68 |
}
|
69 |
|
70 |
+
public function getIdentifierPattern(): string
|
|
|
|
|
|
|
71 |
{
|
72 |
return '~^'.$this->identifierPattern.'~i';
|
73 |
}
|
74 |
|
75 |
+
public function getHashPattern(): string
|
|
|
|
|
|
|
76 |
{
|
77 |
return '~^'.$this->hashPattern.'~i';
|
78 |
}
|
79 |
|
80 |
+
public function getNumberPattern(): string
|
|
|
|
|
|
|
81 |
{
|
82 |
return '~^'.$this->numberPattern.'~';
|
83 |
}
|
84 |
|
85 |
+
public function getQuotedStringPattern(string $quote): string
|
|
|
|
|
|
|
|
|
|
|
86 |
{
|
87 |
return '~^'.sprintf($this->quotedStringPattern, $quote).'~i';
|
88 |
}
|
vendor/symfony/css-selector/README.md
CHANGED
@@ -6,11 +6,11 @@ The CssSelector component converts CSS selectors to XPath expressions.
|
|
6 |
Resources
|
7 |
---------
|
8 |
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
|
15 |
Credits
|
16 |
-------
|
6 |
Resources
|
7 |
---------
|
8 |
|
9 |
+
* [Documentation](https://symfony.com/doc/current/components/css_selector.html)
|
10 |
+
* [Contributing](https://symfony.com/doc/current/contributing/index.html)
|
11 |
+
* [Report issues](https://github.com/symfony/symfony/issues) and
|
12 |
+
[send Pull Requests](https://github.com/symfony/symfony/pulls)
|
13 |
+
in the [main Symfony repository](https://github.com/symfony/symfony)
|
14 |
|
15 |
Credits
|
16 |
-------
|
vendor/symfony/css-selector/Tests/CssSelectorConverterTest.php
DELETED
@@ -1,74 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests;
|
13 |
-
|
14 |
-
use PHPUnit\Framework\TestCase;
|
15 |
-
use Symfony\Component\CssSelector\CssSelectorConverter;
|
16 |
-
|
17 |
-
class CssSelectorConverterTest extends TestCase
|
18 |
-
{
|
19 |
-
public function testCssToXPath()
|
20 |
-
{
|
21 |
-
$converter = new CssSelectorConverter();
|
22 |
-
|
23 |
-
$this->assertEquals('descendant-or-self::*', $converter->toXPath(''));
|
24 |
-
$this->assertEquals('descendant-or-self::h1', $converter->toXPath('h1'));
|
25 |
-
$this->assertEquals("descendant-or-self::h1[@id = 'foo']", $converter->toXPath('h1#foo'));
|
26 |
-
$this->assertEquals("descendant-or-self::h1[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')]", $converter->toXPath('h1.foo'));
|
27 |
-
$this->assertEquals('descendant-or-self::foo:h1', $converter->toXPath('foo|h1'));
|
28 |
-
$this->assertEquals('descendant-or-self::h1', $converter->toXPath('H1'));
|
29 |
-
}
|
30 |
-
|
31 |
-
public function testCssToXPathXml()
|
32 |
-
{
|
33 |
-
$converter = new CssSelectorConverter(false);
|
34 |
-
|
35 |
-
$this->assertEquals('descendant-or-self::H1', $converter->toXPath('H1'));
|
36 |
-
}
|
37 |
-
|
38 |
-
public function testParseExceptions()
|
39 |
-
{
|
40 |
-
$this->expectException('Symfony\Component\CssSelector\Exception\ParseException');
|
41 |
-
$this->expectExceptionMessage('Expected identifier, but <eof at 3> found.');
|
42 |
-
$converter = new CssSelectorConverter();
|
43 |
-
$converter->toXPath('h1:');
|
44 |
-
}
|
45 |
-
|
46 |
-
/** @dataProvider getCssToXPathWithoutPrefixTestData */
|
47 |
-
public function testCssToXPathWithoutPrefix($css, $xpath)
|
48 |
-
{
|
49 |
-
$converter = new CssSelectorConverter();
|
50 |
-
|
51 |
-
$this->assertEquals($xpath, $converter->toXPath($css, ''), '->parse() parses an input string and returns a node');
|
52 |
-
}
|
53 |
-
|
54 |
-
public function getCssToXPathWithoutPrefixTestData()
|
55 |
-
{
|
56 |
-
return [
|
57 |
-
['h1', 'h1'],
|
58 |
-
['foo|h1', 'foo:h1'],
|
59 |
-
['h1, h2, h3', 'h1 | h2 | h3'],
|
60 |
-
['h1:nth-child(3n+1)', "*/*[(name() = 'h1') and (position() - 1 >= 0 and (position() - 1) mod 3 = 0)]"],
|
61 |
-
['h1 > p', 'h1/p'],
|
62 |
-
['h1#foo', "h1[@id = 'foo']"],
|
63 |
-
['h1.foo', "h1[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')]"],
|
64 |
-
['h1[class*="foo bar"]', "h1[@class and contains(@class, 'foo bar')]"],
|
65 |
-
['h1[foo|class*="foo bar"]', "h1[@foo:class and contains(@foo:class, 'foo bar')]"],
|
66 |
-
['h1[class]', 'h1[@class]'],
|
67 |
-
['h1 .foo', "h1/descendant-or-self::*/*[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')]"],
|
68 |
-
['h1 #foo', "h1/descendant-or-self::*/*[@id = 'foo']"],
|
69 |
-
['h1 [class*=foo]', "h1/descendant-or-self::*/*[@class and contains(@class, 'foo')]"],
|
70 |
-
['div>.foo', "div/*[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')]"],
|
71 |
-
['div > .foo', "div/*[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')]"],
|
72 |
-
];
|
73 |
-
}
|
74 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Node/AbstractNodeTest.php
DELETED
@@ -1,34 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Node;
|
13 |
-
|
14 |
-
use PHPUnit\Framework\TestCase;
|
15 |
-
use Symfony\Component\CssSelector\Node\NodeInterface;
|
16 |
-
|
17 |
-
abstract class AbstractNodeTest extends TestCase
|
18 |
-
{
|
19 |
-
/** @dataProvider getToStringConversionTestData */
|
20 |
-
public function testToStringConversion(NodeInterface $node, $representation)
|
21 |
-
{
|
22 |
-
$this->assertEquals($representation, (string) $node);
|
23 |
-
}
|
24 |
-
|
25 |
-
/** @dataProvider getSpecificityValueTestData */
|
26 |
-
public function testSpecificityValue(NodeInterface $node, $value)
|
27 |
-
{
|
28 |
-
$this->assertEquals($value, $node->getSpecificity()->getValue());
|
29 |
-
}
|
30 |
-
|
31 |
-
abstract public function getToStringConversionTestData();
|
32 |
-
|
33 |
-
abstract public function getSpecificityValueTestData();
|
34 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Node/AttributeNodeTest.php
DELETED
@@ -1,37 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Node;
|
13 |
-
|
14 |
-
use Symfony\Component\CssSelector\Node\AttributeNode;
|
15 |
-
use Symfony\Component\CssSelector\Node\ElementNode;
|
16 |
-
|
17 |
-
class AttributeNodeTest extends AbstractNodeTest
|
18 |
-
{
|
19 |
-
public function getToStringConversionTestData()
|
20 |
-
{
|
21 |
-
return [
|
22 |
-
[new AttributeNode(new ElementNode(), null, 'attribute', 'exists', null), 'Attribute[Element[*][attribute]]'],
|
23 |
-
[new AttributeNode(new ElementNode(), null, 'attribute', '$=', 'value'), "Attribute[Element[*][attribute $= 'value']]"],
|
24 |
-
[new AttributeNode(new ElementNode(), 'namespace', 'attribute', '$=', 'value'), "Attribute[Element[*][namespace|attribute $= 'value']]"],
|
25 |
-
];
|
26 |
-
}
|
27 |
-
|
28 |
-
public function getSpecificityValueTestData()
|
29 |
-
{
|
30 |
-
return [
|
31 |
-
[new AttributeNode(new ElementNode(), null, 'attribute', 'exists', null), 10],
|
32 |
-
[new AttributeNode(new ElementNode(null, 'element'), null, 'attribute', 'exists', null), 11],
|
33 |
-
[new AttributeNode(new ElementNode(), null, 'attribute', '$=', 'value'), 10],
|
34 |
-
[new AttributeNode(new ElementNode(), 'namespace', 'attribute', '$=', 'value'), 10],
|
35 |
-
];
|
36 |
-
}
|
37 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Node/ClassNodeTest.php
DELETED
@@ -1,33 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Node;
|
13 |
-
|
14 |
-
use Symfony\Component\CssSelector\Node\ClassNode;
|
15 |
-
use Symfony\Component\CssSelector\Node\ElementNode;
|
16 |
-
|
17 |
-
class ClassNodeTest extends AbstractNodeTest
|
18 |
-
{
|
19 |
-
public function getToStringConversionTestData()
|
20 |
-
{
|
21 |
-
return [
|
22 |
-
[new ClassNode(new ElementNode(), 'class'), 'Class[Element[*].class]'],
|
23 |
-
];
|
24 |
-
}
|
25 |
-
|
26 |
-
public function getSpecificityValueTestData()
|
27 |
-
{
|
28 |
-
return [
|
29 |
-
[new ClassNode(new ElementNode(), 'class'), 10],
|
30 |
-
[new ClassNode(new ElementNode(null, 'element'), 'class'), 11],
|
31 |
-
];
|
32 |
-
}
|
33 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Node/CombinedSelectorNodeTest.php
DELETED
@@ -1,35 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Node;
|
13 |
-
|
14 |
-
use Symfony\Component\CssSelector\Node\CombinedSelectorNode;
|
15 |
-
use Symfony\Component\CssSelector\Node\ElementNode;
|
16 |
-
|
17 |
-
class CombinedSelectorNodeTest extends AbstractNodeTest
|
18 |
-
{
|
19 |
-
public function getToStringConversionTestData()
|
20 |
-
{
|
21 |
-
return [
|
22 |
-
[new CombinedSelectorNode(new ElementNode(), '>', new ElementNode()), 'CombinedSelector[Element[*] > Element[*]]'],
|
23 |
-
[new CombinedSelectorNode(new ElementNode(), ' ', new ElementNode()), 'CombinedSelector[Element[*] <followed> Element[*]]'],
|
24 |
-
];
|
25 |
-
}
|
26 |
-
|
27 |
-
public function getSpecificityValueTestData()
|
28 |
-
{
|
29 |
-
return [
|
30 |
-
[new CombinedSelectorNode(new ElementNode(), '>', new ElementNode()), 0],
|
31 |
-
[new CombinedSelectorNode(new ElementNode(null, 'element'), '>', new ElementNode()), 1],
|
32 |
-
[new CombinedSelectorNode(new ElementNode(null, 'element'), '>', new ElementNode(null, 'element')), 2],
|
33 |
-
];
|
34 |
-
}
|
35 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Node/ElementNodeTest.php
DELETED
@@ -1,35 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Node;
|
13 |
-
|
14 |
-
use Symfony\Component\CssSelector\Node\ElementNode;
|
15 |
-
|
16 |
-
class ElementNodeTest extends AbstractNodeTest
|
17 |
-
{
|
18 |
-
public function getToStringConversionTestData()
|
19 |
-
{
|
20 |
-
return [
|
21 |
-
[new ElementNode(), 'Element[*]'],
|
22 |
-
[new ElementNode(null, 'element'), 'Element[element]'],
|
23 |
-
[new ElementNode('namespace', 'element'), 'Element[namespace|element]'],
|
24 |
-
];
|
25 |
-
}
|
26 |
-
|
27 |
-
public function getSpecificityValueTestData()
|
28 |
-
{
|
29 |
-
return [
|
30 |
-
[new ElementNode(), 0],
|
31 |
-
[new ElementNode(null, 'element'), 1],
|
32 |
-
[new ElementNode('namespace', 'element'), 1],
|
33 |
-
];
|
34 |
-
}
|
35 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Node/FunctionNodeTest.php
DELETED
@@ -1,47 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Node;
|
13 |
-
|
14 |
-
use Symfony\Component\CssSelector\Node\ElementNode;
|
15 |
-
use Symfony\Component\CssSelector\Node\FunctionNode;
|
16 |
-
use Symfony\Component\CssSelector\Parser\Token;
|
17 |
-
|
18 |
-
class FunctionNodeTest extends AbstractNodeTest
|
19 |
-
{
|
20 |
-
public function getToStringConversionTestData()
|
21 |
-
{
|
22 |
-
return [
|
23 |
-
[new FunctionNode(new ElementNode(), 'function'), 'Function[Element[*]:function()]'],
|
24 |
-
[new FunctionNode(new ElementNode(), 'function', [
|
25 |
-
new Token(Token::TYPE_IDENTIFIER, 'value', 0),
|
26 |
-
]), "Function[Element[*]:function(['value'])]"],
|
27 |
-
[new FunctionNode(new ElementNode(), 'function', [
|
28 |
-
new Token(Token::TYPE_STRING, 'value1', 0),
|
29 |
-
new Token(Token::TYPE_NUMBER, 'value2', 0),
|
30 |
-
]), "Function[Element[*]:function(['value1', 'value2'])]"],
|
31 |
-
];
|
32 |
-
}
|
33 |
-
|
34 |
-
public function getSpecificityValueTestData()
|
35 |
-
{
|
36 |
-
return [
|
37 |
-
[new FunctionNode(new ElementNode(), 'function'), 10],
|
38 |
-
[new FunctionNode(new ElementNode(), 'function', [
|
39 |
-
new Token(Token::TYPE_IDENTIFIER, 'value', 0),
|
40 |
-
]), 10],
|
41 |
-
[new FunctionNode(new ElementNode(), 'function', [
|
42 |
-
new Token(Token::TYPE_STRING, 'value1', 0),
|
43 |
-
new Token(Token::TYPE_NUMBER, 'value2', 0),
|
44 |
-
]), 10],
|
45 |
-
];
|
46 |
-
}
|
47 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Node/HashNodeTest.php
DELETED
@@ -1,33 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Node;
|
13 |
-
|
14 |
-
use Symfony\Component\CssSelector\Node\ElementNode;
|
15 |
-
use Symfony\Component\CssSelector\Node\HashNode;
|
16 |
-
|
17 |
-
class HashNodeTest extends AbstractNodeTest
|
18 |
-
{
|
19 |
-
public function getToStringConversionTestData()
|
20 |
-
{
|
21 |
-
return [
|
22 |
-
[new HashNode(new ElementNode(), 'id'), 'Hash[Element[*]#id]'],
|
23 |
-
];
|
24 |
-
}
|
25 |
-
|
26 |
-
public function getSpecificityValueTestData()
|
27 |
-
{
|
28 |
-
return [
|
29 |
-
[new HashNode(new ElementNode(), 'id'), 100],
|
30 |
-
[new HashNode(new ElementNode(null, 'id'), 'class'), 101],
|
31 |
-
];
|
32 |
-
}
|
33 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Node/NegationNodeTest.php
DELETED
@@ -1,33 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Node;
|
13 |
-
|
14 |
-
use Symfony\Component\CssSelector\Node\ClassNode;
|
15 |
-
use Symfony\Component\CssSelector\Node\ElementNode;
|
16 |
-
use Symfony\Component\CssSelector\Node\NegationNode;
|
17 |
-
|
18 |
-
class NegationNodeTest extends AbstractNodeTest
|
19 |
-
{
|
20 |
-
public function getToStringConversionTestData()
|
21 |
-
{
|
22 |
-
return [
|
23 |
-
[new NegationNode(new ElementNode(), new ClassNode(new ElementNode(), 'class')), 'Negation[Element[*]:not(Class[Element[*].class])]'],
|
24 |
-
];
|
25 |
-
}
|
26 |
-
|
27 |
-
public function getSpecificityValueTestData()
|
28 |
-
{
|
29 |
-
return [
|
30 |
-
[new NegationNode(new ElementNode(), new ClassNode(new ElementNode(), 'class')), 10],
|
31 |
-
];
|
32 |
-
}
|
33 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Node/PseudoNodeTest.php
DELETED
@@ -1,32 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Node;
|
13 |
-
|
14 |
-
use Symfony\Component\CssSelector\Node\ElementNode;
|
15 |
-
use Symfony\Component\CssSelector\Node\PseudoNode;
|
16 |
-
|
17 |
-
class PseudoNodeTest extends AbstractNodeTest
|
18 |
-
{
|
19 |
-
public function getToStringConversionTestData()
|
20 |
-
{
|
21 |
-
return [
|
22 |
-
[new PseudoNode(new ElementNode(), 'pseudo'), 'Pseudo[Element[*]:pseudo]'],
|
23 |
-
];
|
24 |
-
}
|
25 |
-
|
26 |
-
public function getSpecificityValueTestData()
|
27 |
-
{
|
28 |
-
return [
|
29 |
-
[new PseudoNode(new ElementNode(), 'pseudo'), 10],
|
30 |
-
];
|
31 |
-
}
|
32 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Node/SelectorNodeTest.php
DELETED
@@ -1,34 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Node;
|
13 |
-
|
14 |
-
use Symfony\Component\CssSelector\Node\ElementNode;
|
15 |
-
use Symfony\Component\CssSelector\Node\SelectorNode;
|
16 |
-
|
17 |
-
class SelectorNodeTest extends AbstractNodeTest
|
18 |
-
{
|
19 |
-
public function getToStringConversionTestData()
|
20 |
-
{
|
21 |
-
return [
|
22 |
-
[new SelectorNode(new ElementNode()), 'Selector[Element[*]]'],
|
23 |
-
[new SelectorNode(new ElementNode(), 'pseudo'), 'Selector[Element[*]::pseudo]'],
|
24 |
-
];
|
25 |
-
}
|
26 |
-
|
27 |
-
public function getSpecificityValueTestData()
|
28 |
-
{
|
29 |
-
return [
|
30 |
-
[new SelectorNode(new ElementNode()), 0],
|
31 |
-
[new SelectorNode(new ElementNode(), 'pseudo'), 1],
|
32 |
-
];
|
33 |
-
}
|
34 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Node/SpecificityTest.php
DELETED
@@ -1,63 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Node;
|
13 |
-
|
14 |
-
use PHPUnit\Framework\TestCase;
|
15 |
-
use Symfony\Component\CssSelector\Node\Specificity;
|
16 |
-
|
17 |
-
class SpecificityTest extends TestCase
|
18 |
-
{
|
19 |
-
/** @dataProvider getValueTestData */
|
20 |
-
public function testValue(Specificity $specificity, $value)
|
21 |
-
{
|
22 |
-
$this->assertEquals($value, $specificity->getValue());
|
23 |
-
}
|
24 |
-
|
25 |
-
/** @dataProvider getValueTestData */
|
26 |
-
public function testPlusValue(Specificity $specificity, $value)
|
27 |
-
{
|
28 |
-
$this->assertEquals($value + 123, $specificity->plus(new Specificity(1, 2, 3))->getValue());
|
29 |
-
}
|
30 |
-
|
31 |
-
public function getValueTestData()
|
32 |
-
{
|
33 |
-
return [
|
34 |
-
[new Specificity(0, 0, 0), 0],
|
35 |
-
[new Specificity(0, 0, 2), 2],
|
36 |
-
[new Specificity(0, 3, 0), 30],
|
37 |
-
[new Specificity(4, 0, 0), 400],
|
38 |
-
[new Specificity(4, 3, 2), 432],
|
39 |
-
];
|
40 |
-
}
|
41 |
-
|
42 |
-
/** @dataProvider getCompareTestData */
|
43 |
-
public function testCompareTo(Specificity $a, Specificity $b, $result)
|
44 |
-
{
|
45 |
-
$this->assertEquals($result, $a->compareTo($b));
|
46 |
-
}
|
47 |
-
|
48 |
-
public function getCompareTestData()
|
49 |
-
{
|
50 |
-
return [
|
51 |
-
[new Specificity(0, 0, 0), new Specificity(0, 0, 0), 0],
|
52 |
-
[new Specificity(0, 0, 1), new Specificity(0, 0, 1), 0],
|
53 |
-
[new Specificity(0, 0, 2), new Specificity(0, 0, 1), 1],
|
54 |
-
[new Specificity(0, 0, 2), new Specificity(0, 0, 3), -1],
|
55 |
-
[new Specificity(0, 4, 0), new Specificity(0, 4, 0), 0],
|
56 |
-
[new Specificity(0, 6, 0), new Specificity(0, 5, 11), 1],
|
57 |
-
[new Specificity(0, 7, 0), new Specificity(0, 8, 0), -1],
|
58 |
-
[new Specificity(9, 0, 0), new Specificity(9, 0, 0), 0],
|
59 |
-
[new Specificity(11, 0, 0), new Specificity(10, 11, 0), 1],
|
60 |
-
[new Specificity(12, 11, 0), new Specificity(13, 0, 0), -1],
|
61 |
-
];
|
62 |
-
}
|
63 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Parser/Handler/AbstractHandlerTest.php
DELETED
@@ -1,70 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Parser\Handler;
|
13 |
-
|
14 |
-
use PHPUnit\Framework\TestCase;
|
15 |
-
use Symfony\Component\CssSelector\Parser\Reader;
|
16 |
-
use Symfony\Component\CssSelector\Parser\Token;
|
17 |
-
use Symfony\Component\CssSelector\Parser\TokenStream;
|
18 |
-
|
19 |
-
/**
|
20 |
-
* @author Jean-François Simon <contact@jfsimon.fr>
|
21 |
-
*/
|
22 |
-
abstract class AbstractHandlerTest extends TestCase
|
23 |
-
{
|
24 |
-
/** @dataProvider getHandleValueTestData */
|
25 |
-
public function testHandleValue($value, Token $expectedToken, $remainingContent)
|
26 |
-
{
|
27 |
-
$reader = new Reader($value);
|
28 |
-
$stream = new TokenStream();
|
29 |
-
|
30 |
-
$this->assertTrue($this->generateHandler()->handle($reader, $stream));
|
31 |
-
$this->assertEquals($expectedToken, $stream->getNext());
|
32 |
-
$this->assertRemainingContent($reader, $remainingContent);
|
33 |
-
}
|
34 |
-
|
35 |
-
/** @dataProvider getDontHandleValueTestData */
|
36 |
-
public function testDontHandleValue($value)
|
37 |
-
{
|
38 |
-
$reader = new Reader($value);
|
39 |
-
$stream = new TokenStream();
|
40 |
-
|
41 |
-
$this->assertFalse($this->generateHandler()->handle($reader, $stream));
|
42 |
-
$this->assertStreamEmpty($stream);
|
43 |
-
$this->assertRemainingContent($reader, $value);
|
44 |
-
}
|
45 |
-
|
46 |
-
abstract public function getHandleValueTestData();
|
47 |
-
|
48 |
-
abstract public function getDontHandleValueTestData();
|
49 |
-
|
50 |
-
abstract protected function generateHandler();
|
51 |
-
|
52 |
-
protected function assertStreamEmpty(TokenStream $stream)
|
53 |
-
{
|
54 |
-
$property = new \ReflectionProperty($stream, 'tokens');
|
55 |
-
$property->setAccessible(true);
|
56 |
-
|
57 |
-
$this->assertEquals([], $property->getValue($stream));
|
58 |
-
}
|
59 |
-
|
60 |
-
protected function assertRemainingContent(Reader $reader, $remainingContent)
|
61 |
-
{
|
62 |
-
if ('' === $remainingContent) {
|
63 |
-
$this->assertEquals(0, $reader->getRemainingLength());
|
64 |
-
$this->assertTrue($reader->isEOF());
|
65 |
-
} else {
|
66 |
-
$this->assertEquals(\strlen($remainingContent), $reader->getRemainingLength());
|
67 |
-
$this->assertEquals(0, $reader->getOffset($remainingContent));
|
68 |
-
}
|
69 |
-
}
|
70 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Parser/Handler/CommentHandlerTest.php
DELETED
@@ -1,55 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Parser\Handler;
|
13 |
-
|
14 |
-
use Symfony\Component\CssSelector\Parser\Handler\CommentHandler;
|
15 |
-
use Symfony\Component\CssSelector\Parser\Reader;
|
16 |
-
use Symfony\Component\CssSelector\Parser\Token;
|
17 |
-
use Symfony\Component\CssSelector\Parser\TokenStream;
|
18 |
-
|
19 |
-
class CommentHandlerTest extends AbstractHandlerTest
|
20 |
-
{
|
21 |
-
/** @dataProvider getHandleValueTestData */
|
22 |
-
public function testHandleValue($value, Token $unusedArgument, $remainingContent)
|
23 |
-
{
|
24 |
-
$reader = new Reader($value);
|
25 |
-
$stream = new TokenStream();
|
26 |
-
|
27 |
-
$this->assertTrue($this->generateHandler()->handle($reader, $stream));
|
28 |
-
// comments are ignored (not pushed as token in stream)
|
29 |
-
$this->assertStreamEmpty($stream);
|
30 |
-
$this->assertRemainingContent($reader, $remainingContent);
|
31 |
-
}
|
32 |
-
|
33 |
-
public function getHandleValueTestData()
|
34 |
-
{
|
35 |
-
return [
|
36 |
-
// 2nd argument only exists for inherited method compatibility
|
37 |
-
['/* comment */', new Token(null, null, null), ''],
|
38 |
-
['/* comment */foo', new Token(null, null, null), 'foo'],
|
39 |
-
];
|
40 |
-
}
|
41 |
-
|
42 |
-
public function getDontHandleValueTestData()
|
43 |
-
{
|
44 |
-
return [
|
45 |
-
['>'],
|
46 |
-
['+'],
|
47 |
-
[' '],
|
48 |
-
];
|
49 |
-
}
|
50 |
-
|
51 |
-
protected function generateHandler()
|
52 |
-
{
|
53 |
-
return new CommentHandler();
|
54 |
-
}
|
55 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Parser/Handler/HashHandlerTest.php
DELETED
@@ -1,49 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Parser\Handler;
|
13 |
-
|
14 |
-
use Symfony\Component\CssSelector\Parser\Handler\HashHandler;
|
15 |
-
use Symfony\Component\CssSelector\Parser\Token;
|
16 |
-
use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerEscaping;
|
17 |
-
use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerPatterns;
|
18 |
-
|
19 |
-
class HashHandlerTest extends AbstractHandlerTest
|
20 |
-
{
|
21 |
-
public function getHandleValueTestData()
|
22 |
-
{
|
23 |
-
return [
|
24 |
-
['#id', new Token(Token::TYPE_HASH, 'id', 0), ''],
|
25 |
-
['#123', new Token(Token::TYPE_HASH, '123', 0), ''],
|
26 |
-
|
27 |
-
['#id.class', new Token(Token::TYPE_HASH, 'id', 0), '.class'],
|
28 |
-
['#id element', new Token(Token::TYPE_HASH, 'id', 0), ' element'],
|
29 |
-
];
|
30 |
-
}
|
31 |
-
|
32 |
-
public function getDontHandleValueTestData()
|
33 |
-
{
|
34 |
-
return [
|
35 |
-
['id'],
|
36 |
-
['123'],
|
37 |
-
['<'],
|
38 |
-
['<'],
|
39 |
-
['#'],
|
40 |
-
];
|
41 |
-
}
|
42 |
-
|
43 |
-
protected function generateHandler()
|
44 |
-
{
|
45 |
-
$patterns = new TokenizerPatterns();
|
46 |
-
|
47 |
-
return new HashHandler($patterns, new TokenizerEscaping($patterns));
|
48 |
-
}
|
49 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Parser/Handler/IdentifierHandlerTest.php
DELETED
@@ -1,49 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Parser\Handler;
|
13 |
-
|
14 |
-
use Symfony\Component\CssSelector\Parser\Handler\IdentifierHandler;
|
15 |
-
use Symfony\Component\CssSelector\Parser\Token;
|
16 |
-
use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerEscaping;
|
17 |
-
use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerPatterns;
|
18 |
-
|
19 |
-
class IdentifierHandlerTest extends AbstractHandlerTest
|
20 |
-
{
|
21 |
-
public function getHandleValueTestData()
|
22 |
-
{
|
23 |
-
return [
|
24 |
-
['foo', new Token(Token::TYPE_IDENTIFIER, 'foo', 0), ''],
|
25 |
-
['foo|bar', new Token(Token::TYPE_IDENTIFIER, 'foo', 0), '|bar'],
|
26 |
-
['foo.class', new Token(Token::TYPE_IDENTIFIER, 'foo', 0), '.class'],
|
27 |
-
['foo[attr]', new Token(Token::TYPE_IDENTIFIER, 'foo', 0), '[attr]'],
|
28 |
-
['foo bar', new Token(Token::TYPE_IDENTIFIER, 'foo', 0), ' bar'],
|
29 |
-
];
|
30 |
-
}
|
31 |
-
|
32 |
-
public function getDontHandleValueTestData()
|
33 |
-
{
|
34 |
-
return [
|
35 |
-
['>'],
|
36 |
-
['+'],
|
37 |
-
[' '],
|
38 |
-
['*|foo'],
|
39 |
-
['/* comment */'],
|
40 |
-
];
|
41 |
-
}
|
42 |
-
|
43 |
-
protected function generateHandler()
|
44 |
-
{
|
45 |
-
$patterns = new TokenizerPatterns();
|
46 |
-
|
47 |
-
return new IdentifierHandler($patterns, new TokenizerEscaping($patterns));
|
48 |
-
}
|
49 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Parser/Handler/NumberHandlerTest.php
DELETED
@@ -1,50 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Parser\Handler;
|
13 |
-
|
14 |
-
use Symfony\Component\CssSelector\Parser\Handler\NumberHandler;
|
15 |
-
use Symfony\Component\CssSelector\Parser\Token;
|
16 |
-
use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerPatterns;
|
17 |
-
|
18 |
-
class NumberHandlerTest extends AbstractHandlerTest
|
19 |
-
{
|
20 |
-
public function getHandleValueTestData()
|
21 |
-
{
|
22 |
-
return [
|
23 |
-
['12', new Token(Token::TYPE_NUMBER, '12', 0), ''],
|
24 |
-
['12.34', new Token(Token::TYPE_NUMBER, '12.34', 0), ''],
|
25 |
-
['+12.34', new Token(Token::TYPE_NUMBER, '+12.34', 0), ''],
|
26 |
-
['-12.34', new Token(Token::TYPE_NUMBER, '-12.34', 0), ''],
|
27 |
-
|
28 |
-
['12 arg', new Token(Token::TYPE_NUMBER, '12', 0), ' arg'],
|
29 |
-
['12]', new Token(Token::TYPE_NUMBER, '12', 0), ']'],
|
30 |
-
];
|
31 |
-
}
|
32 |
-
|
33 |
-
public function getDontHandleValueTestData()
|
34 |
-
{
|
35 |
-
return [
|
36 |
-
['hello'],
|
37 |
-
['>'],
|
38 |
-
['+'],
|
39 |
-
[' '],
|
40 |
-
['/* comment */'],
|
41 |
-
];
|
42 |
-
}
|
43 |
-
|
44 |
-
protected function generateHandler()
|
45 |
-
{
|
46 |
-
$patterns = new TokenizerPatterns();
|
47 |
-
|
48 |
-
return new NumberHandler($patterns);
|
49 |
-
}
|
50 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Parser/Handler/StringHandlerTest.php
DELETED
@@ -1,50 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Parser\Handler;
|
13 |
-
|
14 |
-
use Symfony\Component\CssSelector\Parser\Handler\StringHandler;
|
15 |
-
use Symfony\Component\CssSelector\Parser\Token;
|
16 |
-
use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerEscaping;
|
17 |
-
use Symfony\Component\CssSelector\Parser\Tokenizer\TokenizerPatterns;
|
18 |
-
|
19 |
-
class StringHandlerTest extends AbstractHandlerTest
|
20 |
-
{
|
21 |
-
public function getHandleValueTestData()
|
22 |
-
{
|
23 |
-
return [
|
24 |
-
['"hello"', new Token(Token::TYPE_STRING, 'hello', 1), ''],
|
25 |
-
['"1"', new Token(Token::TYPE_STRING, '1', 1), ''],
|
26 |
-
['" "', new Token(Token::TYPE_STRING, ' ', 1), ''],
|
27 |
-
['""', new Token(Token::TYPE_STRING, '', 1), ''],
|
28 |
-
["'hello'", new Token(Token::TYPE_STRING, 'hello', 1), ''],
|
29 |
-
|
30 |
-
["'foo'bar", new Token(Token::TYPE_STRING, 'foo', 1), 'bar'],
|
31 |
-
];
|
32 |
-
}
|
33 |
-
|
34 |
-
public function getDontHandleValueTestData()
|
35 |
-
{
|
36 |
-
return [
|
37 |
-
['hello'],
|
38 |
-
['>'],
|
39 |
-
['1'],
|
40 |
-
[' '],
|
41 |
-
];
|
42 |
-
}
|
43 |
-
|
44 |
-
protected function generateHandler()
|
45 |
-
{
|
46 |
-
$patterns = new TokenizerPatterns();
|
47 |
-
|
48 |
-
return new StringHandler($patterns, new TokenizerEscaping($patterns));
|
49 |
-
}
|
50 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Parser/Handler/WhitespaceHandlerTest.php
DELETED
@@ -1,44 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Parser\Handler;
|
13 |
-
|
14 |
-
use Symfony\Component\CssSelector\Parser\Handler\WhitespaceHandler;
|
15 |
-
use Symfony\Component\CssSelector\Parser\Token;
|
16 |
-
|
17 |
-
class WhitespaceHandlerTest extends AbstractHandlerTest
|
18 |
-
{
|
19 |
-
public function getHandleValueTestData()
|
20 |
-
{
|
21 |
-
return [
|
22 |
-
[' ', new Token(Token::TYPE_WHITESPACE, ' ', 0), ''],
|
23 |
-
["\n", new Token(Token::TYPE_WHITESPACE, "\n", 0), ''],
|
24 |
-
["\t", new Token(Token::TYPE_WHITESPACE, "\t", 0), ''],
|
25 |
-
|
26 |
-
[' foo', new Token(Token::TYPE_WHITESPACE, ' ', 0), 'foo'],
|
27 |
-
[' .foo', new Token(Token::TYPE_WHITESPACE, ' ', 0), '.foo'],
|
28 |
-
];
|
29 |
-
}
|
30 |
-
|
31 |
-
public function getDontHandleValueTestData()
|
32 |
-
{
|
33 |
-
return [
|
34 |
-
['>'],
|
35 |
-
['1'],
|
36 |
-
['a'],
|
37 |
-
];
|
38 |
-
}
|
39 |
-
|
40 |
-
protected function generateHandler()
|
41 |
-
{
|
42 |
-
return new WhitespaceHandler();
|
43 |
-
}
|
44 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Parser/ParserTest.php
DELETED
@@ -1,253 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Parser;
|
13 |
-
|
14 |
-
use PHPUnit\Framework\TestCase;
|
15 |
-
use Symfony\Component\CssSelector\Exception\SyntaxErrorException;
|
16 |
-
use Symfony\Component\CssSelector\Node\FunctionNode;
|
17 |
-
use Symfony\Component\CssSelector\Node\SelectorNode;
|
18 |
-
use Symfony\Component\CssSelector\Parser\Parser;
|
19 |
-
use Symfony\Component\CssSelector\Parser\Token;
|
20 |
-
|
21 |
-
class ParserTest extends TestCase
|
22 |
-
{
|
23 |
-
/** @dataProvider getParserTestData */
|
24 |
-
public function testParser($source, $representation)
|
25 |
-
{
|
26 |
-
$parser = new Parser();
|
27 |
-
|
28 |
-
$this->assertEquals($representation, array_map(function (SelectorNode $node) {
|
29 |
-
return (string) $node->getTree();
|
30 |
-
}, $parser->parse($source)));
|
31 |
-
}
|
32 |
-
|
33 |
-
/** @dataProvider getParserExceptionTestData */
|
34 |
-
public function testParserException($source, $message)
|
35 |
-
{
|
36 |
-
$parser = new Parser();
|
37 |
-
|
38 |
-
try {
|
39 |
-
$parser->parse($source);
|
40 |
-
$this->fail('Parser should throw a SyntaxErrorException.');
|
41 |
-
} catch (SyntaxErrorException $e) {
|
42 |
-
$this->assertEquals($message, $e->getMessage());
|
43 |
-
}
|
44 |
-
}
|
45 |
-
|
46 |
-
/** @dataProvider getPseudoElementsTestData */
|
47 |
-
public function testPseudoElements($source, $element, $pseudo)
|
48 |
-
{
|
49 |
-
$parser = new Parser();
|
50 |
-
$selectors = $parser->parse($source);
|
51 |
-
$this->assertCount(1, $selectors);
|
52 |
-
|
53 |
-
/** @var SelectorNode $selector */
|
54 |
-
$selector = $selectors[0];
|
55 |
-
$this->assertEquals($element, (string) $selector->getTree());
|
56 |
-
$this->assertEquals($pseudo, (string) $selector->getPseudoElement());
|
57 |
-
}
|
58 |
-
|
59 |
-
/** @dataProvider getSpecificityTestData */
|
60 |
-
public function testSpecificity($source, $value)
|
61 |
-
{
|
62 |
-
$parser = new Parser();
|
63 |
-
$selectors = $parser->parse($source);
|
64 |
-
$this->assertCount(1, $selectors);
|
65 |
-
|
66 |
-
/** @var SelectorNode $selector */
|
67 |
-
$selector = $selectors[0];
|
68 |
-
$this->assertEquals($value, $selector->getSpecificity()->getValue());
|
69 |
-
}
|
70 |
-
|
71 |
-
/** @dataProvider getParseSeriesTestData */
|
72 |
-
public function testParseSeries($series, $a, $b)
|
73 |
-
{
|
74 |
-
$parser = new Parser();
|
75 |
-
$selectors = $parser->parse(sprintf(':nth-child(%s)', $series));
|
76 |
-
$this->assertCount(1, $selectors);
|
77 |
-
|
78 |
-
/** @var FunctionNode $function */
|
79 |
-
$function = $selectors[0]->getTree();
|
80 |
-
$this->assertEquals([$a, $b], Parser::parseSeries($function->getArguments()));
|
81 |
-
}
|
82 |
-
|
83 |
-
/** @dataProvider getParseSeriesExceptionTestData */
|
84 |
-
public function testParseSeriesException($series)
|
85 |
-
{
|
86 |
-
$parser = new Parser();
|
87 |
-
$selectors = $parser->parse(sprintf(':nth-child(%s)', $series));
|
88 |
-
$this->assertCount(1, $selectors);
|
89 |
-
|
90 |
-
/** @var FunctionNode $function */
|
91 |
-
$function = $selectors[0]->getTree();
|
92 |
-
$this->expectException('Symfony\Component\CssSelector\Exception\SyntaxErrorException');
|
93 |
-
Parser::parseSeries($function->getArguments());
|
94 |
-
}
|
95 |
-
|
96 |
-
public function getParserTestData()
|
97 |
-
{
|
98 |
-
return [
|
99 |
-
['*', ['Element[*]']],
|
100 |
-
['*|*', ['Element[*]']],
|
101 |
-
['*|foo', ['Element[foo]']],
|
102 |
-
['foo|*', ['Element[foo|*]']],
|
103 |
-
['foo|bar', ['Element[foo|bar]']],
|
104 |
-
['#foo#bar', ['Hash[Hash[Element[*]#foo]#bar]']],
|
105 |
-
['div>.foo', ['CombinedSelector[Element[div] > Class[Element[*].foo]]']],
|
106 |
-
['div> .foo', ['CombinedSelector[Element[div] > Class[Element[*].foo]]']],
|
107 |
-
['div >.foo', ['CombinedSelector[Element[div] > Class[Element[*].foo]]']],
|
108 |
-
['div > .foo', ['CombinedSelector[Element[div] > Class[Element[*].foo]]']],
|
109 |
-
["div \n> \t \t .foo", ['CombinedSelector[Element[div] > Class[Element[*].foo]]']],
|
110 |
-
['td.foo,.bar', ['Class[Element[td].foo]', 'Class[Element[*].bar]']],
|
111 |
-
['td.foo, .bar', ['Class[Element[td].foo]', 'Class[Element[*].bar]']],
|
112 |
-
["td.foo\t\r\n\f ,\t\r\n\f .bar", ['Class[Element[td].foo]', 'Class[Element[*].bar]']],
|
113 |
-
['td.foo,.bar', ['Class[Element[td].foo]', 'Class[Element[*].bar]']],
|
114 |
-
['td.foo, .bar', ['Class[Element[td].foo]', 'Class[Element[*].bar]']],
|
115 |
-
["td.foo\t\r\n\f ,\t\r\n\f .bar", ['Class[Element[td].foo]', 'Class[Element[*].bar]']],
|
116 |
-
['div, td.foo, div.bar span', ['Element[div]', 'Class[Element[td].foo]', 'CombinedSelector[Class[Element[div].bar] <followed> Element[span]]']],
|
117 |
-
['div > p', ['CombinedSelector[Element[div] > Element[p]]']],
|
118 |
-
['td:first', ['Pseudo[Element[td]:first]']],
|
119 |
-
['td :first', ['CombinedSelector[Element[td] <followed> Pseudo[Element[*]:first]]']],
|
120 |
-
['a[name]', ['Attribute[Element[a][name]]']],
|
121 |
-
["a[ name\t]", ['Attribute[Element[a][name]]']],
|
122 |
-
['a [name]', ['CombinedSelector[Element[a] <followed> Attribute[Element[*][name]]]']],
|
123 |
-
['[name="foo"]', ["Attribute[Element[*][name = 'foo']]"]],
|
124 |
-
["[name='foo[1]']", ["Attribute[Element[*][name = 'foo[1]']]"]],
|
125 |
-
["[name='foo[0][bar]']", ["Attribute[Element[*][name = 'foo[0][bar]']]"]],
|
126 |
-
['a[rel="include"]', ["Attribute[Element[a][rel = 'include']]"]],
|
127 |
-
['a[rel = include]', ["Attribute[Element[a][rel = 'include']]"]],
|
128 |
-
["a[hreflang |= 'en']", ["Attribute[Element[a][hreflang |= 'en']]"]],
|
129 |
-
['a[hreflang|=en]', ["Attribute[Element[a][hreflang |= 'en']]"]],
|
130 |
-
['div:nth-child(10)', ["Function[Element[div]:nth-child(['10'])]"]],
|
131 |
-
[':nth-child(2n+2)', ["Function[Element[*]:nth-child(['2', 'n', '+2'])]"]],
|
132 |
-
['div:nth-of-type(10)', ["Function[Element[div]:nth-of-type(['10'])]"]],
|
133 |
-
['div div:nth-of-type(10) .aclass', ["CombinedSelector[CombinedSelector[Element[div] <followed> Function[Element[div]:nth-of-type(['10'])]] <followed> Class[Element[*].aclass]]"]],
|
134 |
-
['label:only', ['Pseudo[Element[label]:only]']],
|
135 |
-
['a:lang(fr)', ["Function[Element[a]:lang(['fr'])]"]],
|
136 |
-
['div:contains("foo")', ["Function[Element[div]:contains(['foo'])]"]],
|
137 |
-
['div#foobar', ['Hash[Element[div]#foobar]']],
|
138 |
-
['div:not(div.foo)', ['Negation[Element[div]:not(Class[Element[div].foo])]']],
|
139 |
-
['td ~ th', ['CombinedSelector[Element[td] ~ Element[th]]']],
|
140 |
-
['.foo[data-bar][data-baz=0]', ["Attribute[Attribute[Class[Element[*].foo][data-bar]][data-baz = '0']]"]],
|
141 |
-
];
|
142 |
-
}
|
143 |
-
|
144 |
-
public function getParserExceptionTestData()
|
145 |
-
{
|
146 |
-
return [
|
147 |
-
['attributes(href)/html/body/a', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, '(', 10))->getMessage()],
|
148 |
-
['attributes(href)', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, '(', 10))->getMessage()],
|
149 |
-
['html/body/a', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, '/', 4))->getMessage()],
|
150 |
-
[' ', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_FILE_END, '', 1))->getMessage()],
|
151 |
-
['div, ', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_FILE_END, '', 5))->getMessage()],
|
152 |
-
[' , div', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, ',', 1))->getMessage()],
|
153 |
-
['p, , div', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, ',', 3))->getMessage()],
|
154 |
-
['div > ', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_FILE_END, '', 6))->getMessage()],
|
155 |
-
[' > div', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, '>', 2))->getMessage()],
|
156 |
-
['foo|#bar', SyntaxErrorException::unexpectedToken('identifier or "*"', new Token(Token::TYPE_HASH, 'bar', 4))->getMessage()],
|
157 |
-
['#.foo', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, '#', 0))->getMessage()],
|
158 |
-
['.#foo', SyntaxErrorException::unexpectedToken('identifier', new Token(Token::TYPE_HASH, 'foo', 1))->getMessage()],
|
159 |
-
[':#foo', SyntaxErrorException::unexpectedToken('identifier', new Token(Token::TYPE_HASH, 'foo', 1))->getMessage()],
|
160 |
-
['[*]', SyntaxErrorException::unexpectedToken('"|"', new Token(Token::TYPE_DELIMITER, ']', 2))->getMessage()],
|
161 |
-
['[foo|]', SyntaxErrorException::unexpectedToken('identifier', new Token(Token::TYPE_DELIMITER, ']', 5))->getMessage()],
|
162 |
-
['[#]', SyntaxErrorException::unexpectedToken('identifier or "*"', new Token(Token::TYPE_DELIMITER, '#', 1))->getMessage()],
|
163 |
-
['[foo=#]', SyntaxErrorException::unexpectedToken('string or identifier', new Token(Token::TYPE_DELIMITER, '#', 5))->getMessage()],
|
164 |
-
[':nth-child()', SyntaxErrorException::unexpectedToken('at least one argument', new Token(Token::TYPE_DELIMITER, ')', 11))->getMessage()],
|
165 |
-
['[href]a', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_IDENTIFIER, 'a', 6))->getMessage()],
|
166 |
-
['[rel:stylesheet]', SyntaxErrorException::unexpectedToken('operator', new Token(Token::TYPE_DELIMITER, ':', 4))->getMessage()],
|
167 |
-
['[rel=stylesheet', SyntaxErrorException::unexpectedToken('"]"', new Token(Token::TYPE_FILE_END, '', 15))->getMessage()],
|
168 |
-
[':lang(fr', SyntaxErrorException::unexpectedToken('an argument', new Token(Token::TYPE_FILE_END, '', 8))->getMessage()],
|
169 |
-
[':contains("foo', SyntaxErrorException::unclosedString(10)->getMessage()],
|
170 |
-
['foo!', SyntaxErrorException::unexpectedToken('selector', new Token(Token::TYPE_DELIMITER, '!', 3))->getMessage()],
|
171 |
-
];
|
172 |
-
}
|
173 |
-
|
174 |
-
public function getPseudoElementsTestData()
|
175 |
-
{
|
176 |
-
return [
|
177 |
-
['foo', 'Element[foo]', ''],
|
178 |
-
['*', 'Element[*]', ''],
|
179 |
-
[':empty', 'Pseudo[Element[*]:empty]', ''],
|
180 |
-
[':BEfore', 'Element[*]', 'before'],
|
181 |
-
[':aftER', 'Element[*]', 'after'],
|
182 |
-
[':First-Line', 'Element[*]', 'first-line'],
|
183 |
-
[':First-Letter', 'Element[*]', 'first-letter'],
|
184 |
-
['::befoRE', 'Element[*]', 'before'],
|
185 |
-
['::AFter', 'Element[*]', 'after'],
|
186 |
-
['::firsT-linE', 'Element[*]', 'first-line'],
|
187 |
-
['::firsT-letteR', 'Element[*]', 'first-letter'],
|
188 |
-
['::Selection', 'Element[*]', 'selection'],
|
189 |
-
['foo:after', 'Element[foo]', 'after'],
|
190 |
-
['foo::selection', 'Element[foo]', 'selection'],
|
191 |
-
['lorem#ipsum ~ a#b.c[href]:empty::selection', 'CombinedSelector[Hash[Element[lorem]#ipsum] ~ Pseudo[Attribute[Class[Hash[Element[a]#b].c][href]]:empty]]', 'selection'],
|
192 |
-
['video::-webkit-media-controls', 'Element[video]', '-webkit-media-controls'],
|
193 |
-
];
|
194 |
-
}
|
195 |
-
|
196 |
-
public function getSpecificityTestData()
|
197 |
-
{
|
198 |
-
return [
|
199 |
-
['*', 0],
|
200 |
-
[' foo', 1],
|
201 |
-
[':empty ', 10],
|
202 |
-
[':before', 1],
|
203 |
-
['*:before', 1],
|
204 |
-
[':nth-child(2)', 10],
|
205 |
-
['.bar', 10],
|
206 |
-
['[baz]', 10],
|
207 |
-
['[baz="4"]', 10],
|
208 |
-
['[baz^="4"]', 10],
|
209 |
-
['#lipsum', 100],
|
210 |
-
[':not(*)', 0],
|
211 |
-
[':not(foo)', 1],
|
212 |
-
[':not(.foo)', 10],
|
213 |
-
[':not([foo])', 10],
|
214 |
-
[':not(:empty)', 10],
|
215 |
-
[':not(#foo)', 100],
|
216 |
-
['foo:empty', 11],
|
217 |
-
['foo:before', 2],
|
218 |
-
['foo::before', 2],
|
219 |
-
['foo:empty::before', 12],
|
220 |
-
['#lorem + foo#ipsum:first-child > bar:first-line', 213],
|
221 |
-
];
|
222 |
-
}
|
223 |
-
|
224 |
-
public function getParseSeriesTestData()
|
225 |
-
{
|
226 |
-
return [
|
227 |
-
['1n+3', 1, 3],
|
228 |
-
['1n +3', 1, 3],
|
229 |
-
['1n + 3', 1, 3],
|
230 |
-
['1n+ 3', 1, 3],
|
231 |
-
['1n-3', 1, -3],
|
232 |
-
['1n -3', 1, -3],
|
233 |
-
['1n - 3', 1, -3],
|
234 |
-
['1n- 3', 1, -3],
|
235 |
-
['n-5', 1, -5],
|
236 |
-
['odd', 2, 1],
|
237 |
-
['even', 2, 0],
|
238 |
-
['3n', 3, 0],
|
239 |
-
['n', 1, 0],
|
240 |
-
['+n', 1, 0],
|
241 |
-
['-n', -1, 0],
|
242 |
-
['5', 0, 5],
|
243 |
-
];
|
244 |
-
}
|
245 |
-
|
246 |
-
public function getParseSeriesExceptionTestData()
|
247 |
-
{
|
248 |
-
return [
|
249 |
-
['foo'],
|
250 |
-
['n+'],
|
251 |
-
];
|
252 |
-
}
|
253 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Parser/ReaderTest.php
DELETED
@@ -1,102 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Parser;
|
13 |
-
|
14 |
-
use PHPUnit\Framework\TestCase;
|
15 |
-
use Symfony\Component\CssSelector\Parser\Reader;
|
16 |
-
|
17 |
-
class ReaderTest extends TestCase
|
18 |
-
{
|
19 |
-
public function testIsEOF()
|
20 |
-
{
|
21 |
-
$reader = new Reader('');
|
22 |
-
$this->assertTrue($reader->isEOF());
|
23 |
-
|
24 |
-
$reader = new Reader('hello');
|
25 |
-
$this->assertFalse($reader->isEOF());
|
26 |
-
|
27 |
-
$this->assignPosition($reader, 2);
|
28 |
-
$this->assertFalse($reader->isEOF());
|
29 |
-
|
30 |
-
$this->assignPosition($reader, 5);
|
31 |
-
$this->assertTrue($reader->isEOF());
|
32 |
-
}
|
33 |
-
|
34 |
-
public function testGetRemainingLength()
|
35 |
-
{
|
36 |
-
$reader = new Reader('hello');
|
37 |
-
$this->assertEquals(5, $reader->getRemainingLength());
|
38 |
-
|
39 |
-
$this->assignPosition($reader, 2);
|
40 |
-
$this->assertEquals(3, $reader->getRemainingLength());
|
41 |
-
|
42 |
-
$this->assignPosition($reader, 5);
|
43 |
-
$this->assertEquals(0, $reader->getRemainingLength());
|
44 |
-
}
|
45 |
-
|
46 |
-
public function testGetSubstring()
|
47 |
-
{
|
48 |
-
$reader = new Reader('hello');
|
49 |
-
$this->assertEquals('he', $reader->getSubstring(2));
|
50 |
-
$this->assertEquals('el', $reader->getSubstring(2, 1));
|
51 |
-
|
52 |
-
$this->assignPosition($reader, 2);
|
53 |
-
$this->assertEquals('ll', $reader->getSubstring(2));
|
54 |
-
$this->assertEquals('lo', $reader->getSubstring(2, 1));
|
55 |
-
}
|
56 |
-
|
57 |
-
public function testGetOffset()
|
58 |
-
{
|
59 |
-
$reader = new Reader('hello');
|
60 |
-
$this->assertEquals(2, $reader->getOffset('ll'));
|
61 |
-
$this->assertFalse($reader->getOffset('w'));
|
62 |
-
|
63 |
-
$this->assignPosition($reader, 2);
|
64 |
-
$this->assertEquals(0, $reader->getOffset('ll'));
|
65 |
-
$this->assertFalse($reader->getOffset('he'));
|
66 |
-
}
|
67 |
-
|
68 |
-
public function testFindPattern()
|
69 |
-
{
|
70 |
-
$reader = new Reader('hello');
|
71 |
-
|
72 |
-
$this->assertFalse($reader->findPattern('/world/'));
|
73 |
-
$this->assertEquals(['hello', 'h'], $reader->findPattern('/^([a-z]).*/'));
|
74 |
-
|
75 |
-
$this->assignPosition($reader, 2);
|
76 |
-
$this->assertFalse($reader->findPattern('/^h.*/'));
|
77 |
-
$this->assertEquals(['llo'], $reader->findPattern('/^llo$/'));
|
78 |
-
}
|
79 |
-
|
80 |
-
public function testMoveForward()
|
81 |
-
{
|
82 |
-
$reader = new Reader('hello');
|
83 |
-
$this->assertEquals(0, $reader->getPosition());
|
84 |
-
|
85 |
-
$reader->moveForward(2);
|
86 |
-
$this->assertEquals(2, $reader->getPosition());
|
87 |
-
}
|
88 |
-
|
89 |
-
public function testToEnd()
|
90 |
-
{
|
91 |
-
$reader = new Reader('hello');
|
92 |
-
$reader->moveToEnd();
|
93 |
-
$this->assertTrue($reader->isEOF());
|
94 |
-
}
|
95 |
-
|
96 |
-
private function assignPosition(Reader $reader, $value)
|
97 |
-
{
|
98 |
-
$position = new \ReflectionProperty($reader, 'position');
|
99 |
-
$position->setAccessible(true);
|
100 |
-
$position->setValue($reader, $value);
|
101 |
-
}
|
102 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Parser/Shortcut/ClassParserTest.php
DELETED
@@ -1,45 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Parser\Shortcut;
|
13 |
-
|
14 |
-
use PHPUnit\Framework\TestCase;
|
15 |
-
use Symfony\Component\CssSelector\Node\SelectorNode;
|
16 |
-
use Symfony\Component\CssSelector\Parser\Shortcut\ClassParser;
|
17 |
-
|
18 |
-
/**
|
19 |
-
* @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
|
20 |
-
*/
|
21 |
-
class ClassParserTest extends TestCase
|
22 |
-
{
|
23 |
-
/** @dataProvider getParseTestData */
|
24 |
-
public function testParse($source, $representation)
|
25 |
-
{
|
26 |
-
$parser = new ClassParser();
|
27 |
-
$selectors = $parser->parse($source);
|
28 |
-
$this->assertCount(1, $selectors);
|
29 |
-
|
30 |
-
/** @var SelectorNode $selector */
|
31 |
-
$selector = $selectors[0];
|
32 |
-
$this->assertEquals($representation, (string) $selector->getTree());
|
33 |
-
}
|
34 |
-
|
35 |
-
public function getParseTestData()
|
36 |
-
{
|
37 |
-
return [
|
38 |
-
['.testclass', 'Class[Element[*].testclass]'],
|
39 |
-
['testel.testclass', 'Class[Element[testel].testclass]'],
|
40 |
-
['testns|.testclass', 'Class[Element[testns|*].testclass]'],
|
41 |
-
['testns|*.testclass', 'Class[Element[testns|*].testclass]'],
|
42 |
-
['testns|testel.testclass', 'Class[Element[testns|testel].testclass]'],
|
43 |
-
];
|
44 |
-
}
|
45 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Parser/Shortcut/ElementParserTest.php
DELETED
@@ -1,44 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Parser\Shortcut;
|
13 |
-
|
14 |
-
use PHPUnit\Framework\TestCase;
|
15 |
-
use Symfony\Component\CssSelector\Node\SelectorNode;
|
16 |
-
use Symfony\Component\CssSelector\Parser\Shortcut\ElementParser;
|
17 |
-
|
18 |
-
/**
|
19 |
-
* @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
|
20 |
-
*/
|
21 |
-
class ElementParserTest extends TestCase
|
22 |
-
{
|
23 |
-
/** @dataProvider getParseTestData */
|
24 |
-
public function testParse($source, $representation)
|
25 |
-
{
|
26 |
-
$parser = new ElementParser();
|
27 |
-
$selectors = $parser->parse($source);
|
28 |
-
$this->assertCount(1, $selectors);
|
29 |
-
|
30 |
-
/** @var SelectorNode $selector */
|
31 |
-
$selector = $selectors[0];
|
32 |
-
$this->assertEquals($representation, (string) $selector->getTree());
|
33 |
-
}
|
34 |
-
|
35 |
-
public function getParseTestData()
|
36 |
-
{
|
37 |
-
return [
|
38 |
-
['*', 'Element[*]'],
|
39 |
-
['testel', 'Element[testel]'],
|
40 |
-
['testns|*', 'Element[testns|*]'],
|
41 |
-
['testns|testel', 'Element[testns|testel]'],
|
42 |
-
];
|
43 |
-
}
|
44 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Parser/Shortcut/EmptyStringParserTest.php
DELETED
@@ -1,36 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Parser\Shortcut;
|
13 |
-
|
14 |
-
use PHPUnit\Framework\TestCase;
|
15 |
-
use Symfony\Component\CssSelector\Node\SelectorNode;
|
16 |
-
use Symfony\Component\CssSelector\Parser\Shortcut\EmptyStringParser;
|
17 |
-
|
18 |
-
/**
|
19 |
-
* @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
|
20 |
-
*/
|
21 |
-
class EmptyStringParserTest extends TestCase
|
22 |
-
{
|
23 |
-
public function testParse()
|
24 |
-
{
|
25 |
-
$parser = new EmptyStringParser();
|
26 |
-
$selectors = $parser->parse('');
|
27 |
-
$this->assertCount(1, $selectors);
|
28 |
-
|
29 |
-
/** @var SelectorNode $selector */
|
30 |
-
$selector = $selectors[0];
|
31 |
-
$this->assertEquals('Element[*]', (string) $selector->getTree());
|
32 |
-
|
33 |
-
$selectors = $parser->parse('this will produce an empty array');
|
34 |
-
$this->assertCount(0, $selectors);
|
35 |
-
}
|
36 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Parser/Shortcut/HashParserTest.php
DELETED
@@ -1,45 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Parser\Shortcut;
|
13 |
-
|
14 |
-
use PHPUnit\Framework\TestCase;
|
15 |
-
use Symfony\Component\CssSelector\Node\SelectorNode;
|
16 |
-
use Symfony\Component\CssSelector\Parser\Shortcut\HashParser;
|
17 |
-
|
18 |
-
/**
|
19 |
-
* @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
|
20 |
-
*/
|
21 |
-
class HashParserTest extends TestCase
|
22 |
-
{
|
23 |
-
/** @dataProvider getParseTestData */
|
24 |
-
public function testParse($source, $representation)
|
25 |
-
{
|
26 |
-
$parser = new HashParser();
|
27 |
-
$selectors = $parser->parse($source);
|
28 |
-
$this->assertCount(1, $selectors);
|
29 |
-
|
30 |
-
/** @var SelectorNode $selector */
|
31 |
-
$selector = $selectors[0];
|
32 |
-
$this->assertEquals($representation, (string) $selector->getTree());
|
33 |
-
}
|
34 |
-
|
35 |
-
public function getParseTestData()
|
36 |
-
{
|
37 |
-
return [
|
38 |
-
['#testid', 'Hash[Element[*]#testid]'],
|
39 |
-
['testel#testid', 'Hash[Element[testel]#testid]'],
|
40 |
-
['testns|#testid', 'Hash[Element[testns|*]#testid]'],
|
41 |
-
['testns|*#testid', 'Hash[Element[testns|*]#testid]'],
|
42 |
-
['testns|testel#testid', 'Hash[Element[testns|testel]#testid]'],
|
43 |
-
];
|
44 |
-
}
|
45 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/Parser/TokenStreamTest.php
DELETED
@@ -1,96 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\Parser;
|
13 |
-
|
14 |
-
use PHPUnit\Framework\TestCase;
|
15 |
-
use Symfony\Component\CssSelector\Parser\Token;
|
16 |
-
use Symfony\Component\CssSelector\Parser\TokenStream;
|
17 |
-
|
18 |
-
class TokenStreamTest extends TestCase
|
19 |
-
{
|
20 |
-
public function testGetNext()
|
21 |
-
{
|
22 |
-
$stream = new TokenStream();
|
23 |
-
$stream->push($t1 = new Token(Token::TYPE_IDENTIFIER, 'h1', 0));
|
24 |
-
$stream->push($t2 = new Token(Token::TYPE_DELIMITER, '.', 2));
|
25 |
-
$stream->push($t3 = new Token(Token::TYPE_IDENTIFIER, 'title', 3));
|
26 |
-
|
27 |
-
$this->assertSame($t1, $stream->getNext());
|
28 |
-
$this->assertSame($t2, $stream->getNext());
|
29 |
-
$this->assertSame($t3, $stream->getNext());
|
30 |
-
}
|
31 |
-
|
32 |
-
public function testGetPeek()
|
33 |
-
{
|
34 |
-
$stream = new TokenStream();
|
35 |
-
$stream->push($t1 = new Token(Token::TYPE_IDENTIFIER, 'h1', 0));
|
36 |
-
$stream->push($t2 = new Token(Token::TYPE_DELIMITER, '.', 2));
|
37 |
-
$stream->push($t3 = new Token(Token::TYPE_IDENTIFIER, 'title', 3));
|
38 |
-
|
39 |
-
$this->assertSame($t1, $stream->getPeek());
|
40 |
-
$this->assertSame($t1, $stream->getNext());
|
41 |
-
$this->assertSame($t2, $stream->getPeek());
|
42 |
-
$this->assertSame($t2, $stream->getPeek());
|
43 |
-
$this->assertSame($t2, $stream->getNext());
|
44 |
-
}
|
45 |
-
|
46 |
-
public function testGetNextIdentifier()
|
47 |
-
{
|
48 |
-
$stream = new TokenStream();
|
49 |
-
$stream->push(new Token(Token::TYPE_IDENTIFIER, 'h1', 0));
|
50 |
-
|
51 |
-
$this->assertEquals('h1', $stream->getNextIdentifier());
|
52 |
-
}
|
53 |
-
|
54 |
-
public function testFailToGetNextIdentifier()
|
55 |
-
{
|
56 |
-
$this->expectException('Symfony\Component\CssSelector\Exception\SyntaxErrorException');
|
57 |
-
|
58 |
-
$stream = new TokenStream();
|
59 |
-
$stream->push(new Token(Token::TYPE_DELIMITER, '.', 2));
|
60 |
-
$stream->getNextIdentifier();
|
61 |
-
}
|
62 |
-
|
63 |
-
public function testGetNextIdentifierOrStar()
|
64 |
-
{
|
65 |
-
$stream = new TokenStream();
|
66 |
-
|
67 |
-
$stream->push(new Token(Token::TYPE_IDENTIFIER, 'h1', 0));
|
68 |
-
$this->assertEquals('h1', $stream->getNextIdentifierOrStar());
|
69 |
-
|
70 |
-
$stream->push(new Token(Token::TYPE_DELIMITER, '*', 0));
|
71 |
-
$this->assertNull($stream->getNextIdentifierOrStar());
|
72 |
-
}
|
73 |
-
|
74 |
-
public function testFailToGetNextIdentifierOrStar()
|
75 |
-
{
|
76 |
-
$this->expectException('Symfony\Component\CssSelector\Exception\SyntaxErrorException');
|
77 |
-
|
78 |
-
$stream = new TokenStream();
|
79 |
-
$stream->push(new Token(Token::TYPE_DELIMITER, '.', 2));
|
80 |
-
$stream->getNextIdentifierOrStar();
|
81 |
-
}
|
82 |
-
|
83 |
-
public function testSkipWhitespace()
|
84 |
-
{
|
85 |
-
$stream = new TokenStream();
|
86 |
-
$stream->push($t1 = new Token(Token::TYPE_IDENTIFIER, 'h1', 0));
|
87 |
-
$stream->push($t2 = new Token(Token::TYPE_WHITESPACE, ' ', 2));
|
88 |
-
$stream->push($t3 = new Token(Token::TYPE_IDENTIFIER, 'h1', 3));
|
89 |
-
|
90 |
-
$stream->skipWhitespace();
|
91 |
-
$this->assertSame($t1, $stream->getNext());
|
92 |
-
|
93 |
-
$stream->skipWhitespace();
|
94 |
-
$this->assertSame($t3, $stream->getNext());
|
95 |
-
}
|
96 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/XPath/Fixtures/ids.html
DELETED
@@ -1,48 +0,0 @@
|
|
1 |
-
<html id="html"><head>
|
2 |
-
<link id="link-href" href="foo" />
|
3 |
-
<link id="link-nohref" />
|
4 |
-
</head><body>
|
5 |
-
<div id="outer-div">
|
6 |
-
<a id="name-anchor" name="foo"></a>
|
7 |
-
<a id="tag-anchor" rel="tag" href="http://localhost/foo">link</a>
|
8 |
-
<a id="nofollow-anchor" rel="nofollow" href="https://example.org">
|
9 |
-
link</a>
|
10 |
-
<ol id="first-ol" class="a b c">
|
11 |
-
<li id="first-li">content</li>
|
12 |
-
<li id="second-li" lang="En-us">
|
13 |
-
<div id="li-div">
|
14 |
-
</div>
|
15 |
-
</li>
|
16 |
-
<li id="third-li" class="ab c"></li>
|
17 |
-
<li id="fourth-li" class="ab
|
18 |
-
c"></li>
|
19 |
-
<li id="fifth-li"></li>
|
20 |
-
<li id="sixth-li"></li>
|
21 |
-
<li id="seventh-li"> </li>
|
22 |
-
</ol>
|
23 |
-
<p id="paragraph">
|
24 |
-
<b id="p-b">hi</b> <em id="p-em">there</em>
|
25 |
-
<b id="p-b2">guy</b>
|
26 |
-
<input type="checkbox" id="checkbox-unchecked" />
|
27 |
-
<input type="checkbox" id="checkbox-disabled" disabled="" />
|
28 |
-
<input type="text" id="text-checked" checked="checked" />
|
29 |
-
<input type="hidden" />
|
30 |
-
<input type="hidden" disabled="disabled" />
|
31 |
-
<input type="checkbox" id="checkbox-checked" checked="checked" />
|
32 |
-
<input type="checkbox" id="checkbox-disabled-checked"
|
33 |
-
disabled="disabled" checked="checked" />
|
34 |
-
<fieldset id="fieldset" disabled="disabled">
|
35 |
-
<input type="checkbox" id="checkbox-fieldset-disabled" />
|
36 |
-
<input type="hidden" />
|
37 |
-
</fieldset>
|
38 |
-
</p>
|
39 |
-
<ol id="second-ol">
|
40 |
-
</ol>
|
41 |
-
<map name="dummymap">
|
42 |
-
<area shape="circle" coords="200,250,25" href="foo.html" id="area-href" />
|
43 |
-
<area shape="default" id="area-nohref" />
|
44 |
-
</map>
|
45 |
-
</div>
|
46 |
-
<div id="foobar-div" foobar="ab bc
|
47 |
-
cde"><span id="foobar-span"></span></div>
|
48 |
-
</body></html>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/XPath/Fixtures/lang.xml
DELETED
@@ -1,11 +0,0 @@
|
|
1 |
-
<test>
|
2 |
-
<a id="first" xml:lang="en">a</a>
|
3 |
-
<b id="second" xml:lang="en-US">b</b>
|
4 |
-
<c id="third" xml:lang="en-Nz">c</c>
|
5 |
-
<d id="fourth" xml:lang="En-us">d</d>
|
6 |
-
<e id="fifth" xml:lang="fr">e</e>
|
7 |
-
<f id="sixth" xml:lang="ru">f</f>
|
8 |
-
<g id="seventh" xml:lang="de">
|
9 |
-
<h id="eighth" xml:lang="zh"/>
|
10 |
-
</g>
|
11 |
-
</test>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/XPath/Fixtures/shakespear.html
DELETED
@@ -1,308 +0,0 @@
|
|
1 |
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
2 |
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3 |
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" debug="true">
|
4 |
-
<head>
|
5 |
-
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
6 |
-
</head>
|
7 |
-
<body>
|
8 |
-
<div id="test">
|
9 |
-
<div class="dialog">
|
10 |
-
<h2>As You Like It</h2>
|
11 |
-
<div id="playwright">
|
12 |
-
by William Shakespeare
|
13 |
-
</div>
|
14 |
-
<div class="dialog scene thirdClass" id="scene1">
|
15 |
-
<h3>ACT I, SCENE III. A room in the palace.</h3>
|
16 |
-
<div class="dialog">
|
17 |
-
<div class="direction">Enter CELIA and ROSALIND</div>
|
18 |
-
</div>
|
19 |
-
<div id="speech1" class="character">CELIA</div>
|
20 |
-
<div class="dialog">
|
21 |
-
<div id="scene1.3.1">Why, cousin! why, Rosalind! Cupid have mercy! not a word?</div>
|
22 |
-
</div>
|
23 |
-
<div id="speech2" class="character">ROSALIND</div>
|
24 |
-
<div class="dialog">
|
25 |
-
<div id="scene1.3.2">Not one to throw at a dog.</div>
|
26 |
-
</div>
|
27 |
-
<div id="speech3" class="character">CELIA</div>
|
28 |
-
<div class="dialog">
|
29 |
-
<div id="scene1.3.3">No, thy words are too precious to be cast away upon</div>
|
30 |
-
<div id="scene1.3.4">curs; throw some of them at me; come, lame me with reasons.</div>
|
31 |
-
</div>
|
32 |
-
<div id="speech4" class="character">ROSALIND</div>
|
33 |
-
<div id="speech5" class="character">CELIA</div>
|
34 |
-
<div class="dialog">
|
35 |
-
<div id="scene1.3.8">But is all this for your father?</div>
|
36 |
-
</div>
|
37 |
-
<div class="dialog">
|
38 |
-
<div id="scene1.3.5">Then there were two cousins laid up; when the one</div>
|
39 |
-
<div id="scene1.3.6">should be lamed with reasons and the other mad</div>
|
40 |
-
<div id="scene1.3.7">without any.</div>
|
41 |
-
</div>
|
42 |
-
<div id="speech6" class="character">ROSALIND</div>
|
43 |
-
<div class="dialog">
|
44 |
-
<div id="scene1.3.9">No, some of it is for my child's father. O, how</div>
|
45 |
-
<div id="scene1.3.10">full of briers is this working-day world!</div>
|
46 |
-
</div>
|
47 |
-
<div id="speech7" class="character">CELIA</div>
|
48 |
-
<div class="dialog">
|
49 |
-
<div id="scene1.3.11">They are but burs, cousin, thrown upon thee in</div>
|
50 |
-
<div id="scene1.3.12">holiday foolery: if we walk not in the trodden</div>
|
51 |
-
<div id="scene1.3.13">paths our very petticoats will catch them.</div>
|
52 |
-
</div>
|
53 |
-
<div id="speech8" class="character">ROSALIND</div>
|
54 |
-
<div class="dialog">
|
55 |
-
<div id="scene1.3.14">I could shake them off my coat: these burs are in my heart.</div>
|
56 |
-
</div>
|
57 |
-
<div id="speech9" class="character">CELIA</div>
|
58 |
-
<div class="dialog">
|
59 |
-
<div id="scene1.3.15">Hem them away.</div>
|
60 |
-
</div>
|
61 |
-
<div id="speech10" class="character">ROSALIND</div>
|
62 |
-
<div class="dialog">
|
63 |
-
<div id="scene1.3.16">I would try, if I could cry 'hem' and have him.</div>
|
64 |
-
</div>
|
65 |
-
<div id="speech11" class="character">CELIA</div>
|
66 |
-
<div class="dialog">
|
67 |
-
<div id="scene1.3.17">Come, come, wrestle with thy affections.</div>
|
68 |
-
</div>
|
69 |
-
<div id="speech12" class="character">ROSALIND</div>
|
70 |
-
<div class="dialog">
|
71 |
-
<div id="scene1.3.18">O, they take the part of a better wrestler than myself!</div>
|
72 |
-
</div>
|
73 |
-
<div id="speech13" class="character">CELIA</div>
|
74 |
-
<div class="dialog">
|
75 |
-
<div id="scene1.3.19">O, a good wish upon you! you will try in time, in</div>
|
76 |
-
<div id="scene1.3.20">despite of a fall. But, turning these jests out of</div>
|
77 |
-
<div id="scene1.3.21">service, let us talk in good earnest: is it</div>
|
78 |
-
<div id="scene1.3.22">possible, on such a sudden, you should fall into so</div>
|
79 |
-
<div id="scene1.3.23">strong a liking with old Sir Rowland's youngest son?</div>
|
80 |
-
</div>
|
81 |
-
<div id="speech14" class="character">ROSALIND</div>
|
82 |
-
<div class="dialog">
|
83 |
-
<div id="scene1.3.24">The duke my father loved his father dearly.</div>
|
84 |
-
</div>
|
85 |
-
<div id="speech15" class="character">CELIA</div>
|
86 |
-
<div class="dialog">
|
87 |
-
<div id="scene1.3.25">Doth it therefore ensue that you should love his son</div>
|
88 |
-
<div id="scene1.3.26">dearly? By this kind of chase, I should hate him,</div>
|
89 |
-
<div id="scene1.3.27">for my father hated his father dearly; yet I hate</div>
|
90 |
-
<div id="scene1.3.28">not Orlando.</div>
|
91 |
-
</div>
|
92 |
-
<div id="speech16" class="character">ROSALIND</div>
|
93 |
-
<div title="wtf" class="dialog">
|
94 |
-
<div id="scene1.3.29">No, faith, hate him not, for my sake.</div>
|
95 |
-
</div>
|
96 |
-
<div id="speech17" class="character">CELIA</div>
|
97 |
-
<div class="dialog">
|
98 |
-
<div id="scene1.3.30">Why should I not? doth he not deserve well?</div>
|
99 |
-
</div>
|
100 |
-
<div id="speech18" class="character">ROSALIND</div>
|
101 |
-
<div class="dialog">
|
102 |
-
<div id="scene1.3.31">Let me love him for that, and do you love him</div>
|
103 |
-
<div id="scene1.3.32">because I do. Look, here comes the duke.</div>
|
104 |
-
</div>
|
105 |
-
<div id="speech19" class="character">CELIA</div>
|
106 |
-
<div class="dialog">
|
107 |
-
<div id="scene1.3.33">With his eyes full of anger.</div>
|
108 |
-
<div class="direction">Enter DUKE FREDERICK, with Lords</div>
|
109 |
-
</div>
|
110 |
-
<div id="speech20" class="character">DUKE FREDERICK</div>
|
111 |
-
<div class="dialog">
|
112 |
-
<div id="scene1.3.34">Mistress, dispatch you with your safest haste</div>
|
113 |
-
<div id="scene1.3.35">And get you from our court.</div>
|
114 |
-
</div>
|
115 |
-
<div id="speech21" class="character">ROSALIND</div>
|
116 |
-
<div class="dialog">
|
117 |
-
<div id="scene1.3.36">Me, uncle?</div>
|
118 |
-
</div>
|
119 |
-
<div id="speech22" class="character">DUKE FREDERICK</div>
|
120 |
-
<div class="dialog">
|
121 |
-
<div id="scene1.3.37">You, cousin</div>
|
122 |
-
<div id="scene1.3.38">Within these ten days if that thou be'st found</div>
|
123 |
-
<div id="scene1.3.39">So near our public court as twenty miles,</div>
|
124 |
-
<div id="scene1.3.40">Thou diest for it.</div>
|
125 |
-
</div>
|
126 |
-
<div id="speech23" class="character">ROSALIND</div>
|
127 |
-
<div class="dialog">
|
128 |
-
<div id="scene1.3.41"> I do beseech your grace,</div>
|
129 |
-
<div id="scene1.3.42">Let me the knowledge of my fault bear with me:</div>
|
130 |
-
<div id="scene1.3.43">If with myself I hold intelligence</div>
|
131 |
-
<div id="scene1.3.44">Or have acquaintance with mine own desires,</div>
|
132 |
-
<div id="scene1.3.45">If that I do not dream or be not frantic,--</div>
|
133 |
-
<div id="scene1.3.46">As I do trust I am not--then, dear uncle,</div>
|
134 |
-
<div id="scene1.3.47">Never so much as in a thought unborn</div>
|
135 |
-
<div id="scene1.3.48">Did I offend your highness.</div>
|
136 |
-
</div>
|
137 |
-
<div id="speech24" class="character">DUKE FREDERICK</div>
|
138 |
-
<div class="dialog">
|
139 |
-
<div id="scene1.3.49">Thus do all traitors:</div>
|
140 |
-
<div id="scene1.3.50">If their purgation did consist in words,</div>
|
141 |
-
<div id="scene1.3.51">They are as innocent as grace itself:</div>
|
142 |
-
<div id="scene1.3.52">Let it suffice thee that I trust thee not.</div>
|
143 |
-
</div>
|
144 |
-
<div id="speech25" class="character">ROSALIND</div>
|
145 |
-
<div class="dialog">
|
146 |
-
<div id="scene1.3.53">Yet your mistrust cannot make me a traitor:</div>
|
147 |
-
<div id="scene1.3.54">Tell me whereon the likelihood depends.</div>
|
148 |
-
</div>
|
149 |
-
<div id="speech26" class="character">DUKE FREDERICK</div>
|
150 |
-
<div class="dialog">
|
151 |
-
<div id="scene1.3.55">Thou art thy father's daughter; there's enough.</div>
|
152 |
-
</div>
|
153 |
-
<div id="speech27" class="character">ROSALIND</div>
|
154 |
-
<div class="dialog">
|
155 |
-
<div id="scene1.3.56">So was I when your highness took his dukedom;</div>
|
156 |
-
<div id="scene1.3.57">So was I when your highness banish'd him:</div>
|
157 |
-
<div id="scene1.3.58">Treason is not inherited, my lord;</div>
|
158 |
-
<div id="scene1.3.59">Or, if we did derive it from our friends,</div>
|
159 |
-
<div id="scene1.3.60">What's that to me? my father was no traitor:</div>
|
160 |
-
<div id="scene1.3.61">Then, good my liege, mistake me not so much</div>
|
161 |
-
<div id="scene1.3.62">To think my poverty is treacherous.</div>
|
162 |
-
</div>
|
163 |
-
<div id="speech28" class="character">CELIA</div>
|
164 |
-
<div class="dialog">
|
165 |
-
<div id="scene1.3.63">Dear sovereign, hear me speak.</div>
|
166 |
-
</div>
|
167 |
-
<div id="speech29" class="character">DUKE FREDERICK</div>
|
168 |
-
<div class="dialog">
|
169 |
-
<div id="scene1.3.64">Ay, Celia; we stay'd her for your sake,</div>
|
170 |
-
<div id="scene1.3.65">Else had she with her father ranged along.</div>
|
171 |
-
</div>
|
172 |
-
<div id="speech30" class="character">CELIA</div>
|
173 |
-
<div class="dialog">
|
174 |
-
<div id="scene1.3.66">I did not then entreat to have her stay;</div>
|
175 |
-
<div id="scene1.3.67">It was your pleasure and your own remorse:</div>
|
176 |
-
<div id="scene1.3.68">I was too young that time to value her;</div>
|
177 |
-
<div id="scene1.3.69">But now I know her: if she be a traitor,</div>
|
178 |
-
<div id="scene1.3.70">Why so am I; we still have slept together,</div>
|
179 |
-
<div id="scene1.3.71">Rose at an instant, learn'd, play'd, eat together,</div>
|
180 |
-
<div id="scene1.3.72">And wheresoever we went, like Juno's swans,</div>
|
181 |
-
<div id="scene1.3.73">Still we went coupled and inseparable.</div>
|
182 |
-
</div>
|
183 |
-
<div id="speech31" class="character">DUKE FREDERICK</div>
|
184 |
-
<div class="dialog">
|
185 |
-
<div id="scene1.3.74">She is too subtle for thee; and her smoothness,</div>
|
186 |
-
<div id="scene1.3.75">Her very silence and her patience</div>
|
187 |
-
<div id="scene1.3.76">Speak to the people, and they pity her.</div>
|
188 |
-
<div id="scene1.3.77">Thou art a fool: she robs thee of thy name;</div>
|
189 |
-
<div id="scene1.3.78">And thou wilt show more bright and seem more virtuous</div>
|
190 |
-
<div id="scene1.3.79">When she is gone. Then open not thy lips:</div>
|
191 |
-
<div id="scene1.3.80">Firm and irrevocable is my doom</div>
|
192 |
-
<div id="scene1.3.81">Which I have pass'd upon her; she is banish'd.</div>
|
193 |
-
</div>
|
194 |
-
<div id="speech32" class="character">CELIA</div>
|
195 |
-
<div class="dialog">
|
196 |
-
<div id="scene1.3.82">Pronounce that sentence then on me, my liege:</div>
|
197 |
-
<div id="scene1.3.83">I cannot live out of her company.</div>
|
198 |
-
</div>
|
199 |
-
<div id="speech33" class="character">DUKE FREDERICK</div>
|
200 |
-
<div class="dialog">
|
201 |
-
<div id="scene1.3.84">You are a fool. You, niece, provide yourself:</div>
|
202 |
-
<div id="scene1.3.85">If you outstay the time, upon mine honour,</div>
|
203 |
-
<div id="scene1.3.86">And in the greatness of my word, you die.</div>
|
204 |
-
<div class="direction">Exeunt DUKE FREDERICK and Lords</div>
|
205 |
-
</div>
|
206 |
-
<div id="speech34" class="character">CELIA</div>
|
207 |
-
<div class="dialog">
|
208 |
-
<div id="scene1.3.87">O my poor Rosalind, whither wilt thou go?</div>
|
209 |
-
<div id="scene1.3.88">Wilt thou change fathers? I will give thee mine.</div>
|
210 |
-
<div id="scene1.3.89">I charge thee, be not thou more grieved than I am.</div>
|
211 |
-
</div>
|
212 |
-
<div id="speech35" class="character">ROSALIND</div>
|
213 |
-
<div class="dialog">
|
214 |
-
<div id="scene1.3.90">I have more cause.</div>
|
215 |
-
</div>
|
216 |
-
<div id="speech36" class="character">CELIA</div>
|
217 |
-
<div class="dialog">
|
218 |
-
<div id="scene1.3.91"> Thou hast not, cousin;</div>
|
219 |
-
<div id="scene1.3.92">Prithee be cheerful: know'st thou not, the duke</div>
|
220 |
-
<div id="scene1.3.93">Hath banish'd me, his daughter?</div>
|
221 |
-
</div>
|
222 |
-
<div id="speech37" class="character">ROSALIND</div>
|
223 |
-
<div class="dialog">
|
224 |
-
<div id="scene1.3.94">That he hath not.</div>
|
225 |
-
</div>
|
226 |
-
<div id="speech38" class="character">CELIA</div>
|
227 |
-
<div class="dialog">
|
228 |
-
<div id="scene1.3.95">No, hath not? Rosalind lacks then the love</div>
|
229 |
-
<div id="scene1.3.96">Which teacheth thee that thou and I am one:</div>
|
230 |
-
<div id="scene1.3.97">Shall we be sunder'd? shall we part, sweet girl?</div>
|
231 |
-
<div id="scene1.3.98">No: let my father seek another heir.</div>
|
232 |
-
<div id="scene1.3.99">Therefore devise with me how we may fly,</div>
|
233 |
-
<div id="scene1.3.100">Whither to go and what to bear with us;</div>
|
234 |
-
<div id="scene1.3.101">And do not seek to take your change upon you,</div>
|
235 |
-
<div id="scene1.3.102">To bear your griefs yourself and leave me out;</div>
|
236 |
-
<div id="scene1.3.103">For, by this heaven, now at our sorrows pale,</div>
|
237 |
-
<div id="scene1.3.104">Say what thou canst, I'll go along with thee.</div>
|
238 |
-
</div>
|
239 |
-
<div id="speech39" class="character">ROSALIND</div>
|
240 |
-
<div class="dialog">
|
241 |
-
<div id="scene1.3.105">Why, whither shall we go?</div>
|
242 |
-
</div>
|
243 |
-
<div id="speech40" class="character">CELIA</div>
|
244 |
-
<div class="dialog">
|
245 |
-
<div id="scene1.3.106">To seek my uncle in the forest of Arden.</div>
|
246 |
-
</div>
|
247 |
-
<div id="speech41" class="character">ROSALIND</div>
|
248 |
-
<div class="dialog">
|
249 |
-
<div id="scene1.3.107">Alas, what danger will it be to us,</div>
|
250 |
-
<div id="scene1.3.108">Maids as we are, to travel forth so far!</div>
|
251 |
-
<div id="scene1.3.109">Beauty provoketh thieves sooner than gold.</div>
|
252 |
-
</div>
|
253 |
-
<div id="speech42" class="character">CELIA</div>
|
254 |
-
<div class="dialog">
|
255 |
-
<div id="scene1.3.110">I'll put myself in poor and mean attire</div>
|
256 |
-
<div id="scene1.3.111">And with a kind of umber smirch my face;</div>
|
257 |
-
<div id="scene1.3.112">The like do you: so shall we pass along</div>
|
258 |
-
<div id="scene1.3.113">And never stir assailants.</div>
|
259 |
-
</div>
|
260 |
-
<div id="speech43" class="character">ROSALIND</div>
|
261 |
-
<div class="dialog">
|
262 |
-
<div id="scene1.3.114">Were it not better,</div>
|
263 |
-
<div id="scene1.3.115">Because that I am more than common tall,</div>
|
264 |
-
<div id="scene1.3.116">That I did suit me all points like a man?</div>
|
265 |
-
<div id="scene1.3.117">A gallant curtle-axe upon my thigh,</div>
|
266 |
-
<div id="scene1.3.118">A boar-spear in my hand; and--in my heart</div>
|
267 |
-
<div id="scene1.3.119">Lie there what hidden woman's fear there will--</div>
|
268 |
-
<div id="scene1.3.120">We'll have a swashing and a martial outside,</div>
|
269 |
-
<div id="scene1.3.121">As many other mannish cowards have</div>
|
270 |
-
<div id="scene1.3.122">That do outface it with their semblances.</div>
|
271 |
-
</div>
|
272 |
-
<div id="speech44" class="character">CELIA</div>
|
273 |
-
<div class="dialog">
|
274 |
-
<div id="scene1.3.123">What shall I call thee when thou art a man?</div>
|
275 |
-
</div>
|
276 |
-
<div id="speech45" class="character">ROSALIND</div>
|
277 |
-
<div class="dialog">
|
278 |
-
<div id="scene1.3.124">I'll have no worse a name than Jove's own page;</div>
|
279 |
-
<div id="scene1.3.125">And therefore look you call me Ganymede.</div>
|
280 |
-
<div id="scene1.3.126">But what will you be call'd?</div>
|
281 |
-
</div>
|
282 |
-
<div id="speech46" class="character">CELIA</div>
|
283 |
-
<div class="dialog">
|
284 |
-
<div id="scene1.3.127">Something that hath a reference to my state</div>
|
285 |
-
<div id="scene1.3.128">No longer Celia, but Aliena.</div>
|
286 |
-
</div>
|
287 |
-
<div id="speech47" class="character">ROSALIND</div>
|
288 |
-
<div class="dialog">
|
289 |
-
<div id="scene1.3.129">But, cousin, what if we assay'd to steal</div>
|
290 |
-
<div id="scene1.3.130">The clownish fool out of your father's court?</div>
|
291 |
-
<div id="scene1.3.131">Would he not be a comfort to our travel?</div>
|
292 |
-
</div>
|
293 |
-
<div id="speech48" class="character">CELIA</div>
|
294 |
-
<div class="dialog">
|
295 |
-
<div id="scene1.3.132">He'll go along o'er the wide world with me;</div>
|
296 |
-
<div id="scene1.3.133">Leave me alone to woo him. Let's away,</div>
|
297 |
-
<div id="scene1.3.134">And get our jewels and our wealth together,</div>
|
298 |
-
<div id="scene1.3.135">Devise the fittest time and safest way</div>
|
299 |
-
<div id="scene1.3.136">To hide us from pursuit that will be made</div>
|
300 |
-
<div id="scene1.3.137">After my flight. Now go we in content</div>
|
301 |
-
<div id="scene1.3.138">To liberty and not to banishment.</div>
|
302 |
-
<div class="direction">Exeunt</div>
|
303 |
-
</div>
|
304 |
-
</div>
|
305 |
-
</div>
|
306 |
-
</div>
|
307 |
-
</body>
|
308 |
-
</html>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/Tests/XPath/TranslatorTest.php
DELETED
@@ -1,413 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of the Symfony package.
|
5 |
-
*
|
6 |
-
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
-
*
|
8 |
-
* For the full copyright and license information, please view the LICENSE
|
9 |
-
* file that was distributed with this source code.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Symfony\Component\CssSelector\Tests\XPath;
|
13 |
-
|
14 |
-
use PHPUnit\Framework\TestCase;
|
15 |
-
use Symfony\Component\CssSelector\Node\ElementNode;
|
16 |
-
use Symfony\Component\CssSelector\Node\FunctionNode;
|
17 |
-
use Symfony\Component\CssSelector\Parser\Parser;
|
18 |
-
use Symfony\Component\CssSelector\XPath\Extension\HtmlExtension;
|
19 |
-
use Symfony\Component\CssSelector\XPath\Translator;
|
20 |
-
use Symfony\Component\CssSelector\XPath\XPathExpr;
|
21 |
-
|
22 |
-
class TranslatorTest extends TestCase
|
23 |
-
{
|
24 |
-
/** @dataProvider getXpathLiteralTestData */
|
25 |
-
public function testXpathLiteral($value, $literal)
|
26 |
-
{
|
27 |
-
$this->assertEquals($literal, Translator::getXpathLiteral($value));
|
28 |
-
}
|
29 |
-
|
30 |
-
/** @dataProvider getCssToXPathTestData */
|
31 |
-
public function testCssToXPath($css, $xpath)
|
32 |
-
{
|
33 |
-
$translator = new Translator();
|
34 |
-
$translator->registerExtension(new HtmlExtension($translator));
|
35 |
-
$this->assertEquals($xpath, $translator->cssToXPath($css, ''));
|
36 |
-
}
|
37 |
-
|
38 |
-
public function testCssToXPathPseudoElement()
|
39 |
-
{
|
40 |
-
$this->expectException('Symfony\Component\CssSelector\Exception\ExpressionErrorException');
|
41 |
-
$translator = new Translator();
|
42 |
-
$translator->registerExtension(new HtmlExtension($translator));
|
43 |
-
$translator->cssToXPath('e::first-line');
|
44 |
-
}
|
45 |
-
|
46 |
-
public function testGetExtensionNotExistsExtension()
|
47 |
-
{
|
48 |
-
$this->expectException('Symfony\Component\CssSelector\Exception\ExpressionErrorException');
|
49 |
-
$translator = new Translator();
|
50 |
-
$translator->registerExtension(new HtmlExtension($translator));
|
51 |
-
$translator->getExtension('fake');
|
52 |
-
}
|
53 |
-
|
54 |
-
public function testAddCombinationNotExistsExtension()
|
55 |
-
{
|
56 |
-
$this->expectException('Symfony\Component\CssSelector\Exception\ExpressionErrorException');
|
57 |
-
$translator = new Translator();
|
58 |
-
$translator->registerExtension(new HtmlExtension($translator));
|
59 |
-
$parser = new Parser();
|
60 |
-
$xpath = $parser->parse('*')[0];
|
61 |
-
$combinedXpath = $parser->parse('*')[0];
|
62 |
-
$translator->addCombination('fake', $xpath, $combinedXpath);
|
63 |
-
}
|
64 |
-
|
65 |
-
public function testAddFunctionNotExistsFunction()
|
66 |
-
{
|
67 |
-
$this->expectException('Symfony\Component\CssSelector\Exception\ExpressionErrorException');
|
68 |
-
$translator = new Translator();
|
69 |
-
$translator->registerExtension(new HtmlExtension($translator));
|
70 |
-
$xpath = new XPathExpr();
|
71 |
-
$function = new FunctionNode(new ElementNode(), 'fake');
|
72 |
-
$translator->addFunction($xpath, $function);
|
73 |
-
}
|
74 |
-
|
75 |
-
public function testAddPseudoClassNotExistsClass()
|
76 |
-
{
|
77 |
-
$this->expectException('Symfony\Component\CssSelector\Exception\ExpressionErrorException');
|
78 |
-
$translator = new Translator();
|
79 |
-
$translator->registerExtension(new HtmlExtension($translator));
|
80 |
-
$xpath = new XPathExpr();
|
81 |
-
$translator->addPseudoClass($xpath, 'fake');
|
82 |
-
}
|
83 |
-
|
84 |
-
public function testAddAttributeMatchingClassNotExistsClass()
|
85 |
-
{
|
86 |
-
$this->expectException('Symfony\Component\CssSelector\Exception\ExpressionErrorException');
|
87 |
-
$translator = new Translator();
|
88 |
-
$translator->registerExtension(new HtmlExtension($translator));
|
89 |
-
$xpath = new XPathExpr();
|
90 |
-
$translator->addAttributeMatching($xpath, '', '', '');
|
91 |
-
}
|
92 |
-
|
93 |
-
/** @dataProvider getXmlLangTestData */
|
94 |
-
public function testXmlLang($css, array $elementsId)
|
95 |
-
{
|
96 |
-
$translator = new Translator();
|
97 |
-
$document = new \SimpleXMLElement(file_get_contents(__DIR__.'/Fixtures/lang.xml'));
|
98 |
-
$elements = $document->xpath($translator->cssToXPath($css));
|
99 |
-
$this->assertCount(\count($elementsId), $elements);
|
100 |
-
foreach ($elements as $element) {
|
101 |
-
$this->assertContains((string) $element->attributes()->id, $elementsId);
|
102 |
-
}
|
103 |
-
}
|
104 |
-
|
105 |
-
/** @dataProvider getHtmlIdsTestData */
|
106 |
-
public function testHtmlIds($css, array $elementsId)
|
107 |
-
{
|
108 |
-
$translator = new Translator();
|
109 |
-
$translator->registerExtension(new HtmlExtension($translator));
|
110 |
-
$document = new \DOMDocument();
|
111 |
-
$document->strictErrorChecking = false;
|
112 |
-
$internalErrors = libxml_use_internal_errors(true);
|
113 |
-
$document->loadHTMLFile(__DIR__.'/Fixtures/ids.html');
|
114 |
-
$document = simplexml_import_dom($document);
|
115 |
-
$elements = $document->xpath($translator->cssToXPath($css));
|
116 |
-
$this->assertCount(\count($elementsId), $elementsId);
|
117 |
-
foreach ($elements as $element) {
|
118 |
-
if (null !== $element->attributes()->id) {
|
119 |
-
$this->assertContains((string) $element->attributes()->id, $elementsId);
|
120 |
-
}
|
121 |
-
}
|
122 |
-
libxml_clear_errors();
|
123 |
-
libxml_use_internal_errors($internalErrors);
|
124 |
-
}
|
125 |
-
|
126 |
-
/** @dataProvider getHtmlShakespearTestData */
|
127 |
-
public function testHtmlShakespear($css, $count)
|
128 |
-
{
|
129 |
-
$translator = new Translator();
|
130 |
-
$translator->registerExtension(new HtmlExtension($translator));
|
131 |
-
$document = new \DOMDocument();
|
132 |
-
$document->strictErrorChecking = false;
|
133 |
-
$document->loadHTMLFile(__DIR__.'/Fixtures/shakespear.html');
|
134 |
-
$document = simplexml_import_dom($document);
|
135 |
-
$bodies = $document->xpath('//body');
|
136 |
-
$elements = $bodies[0]->xpath($translator->cssToXPath($css));
|
137 |
-
$this->assertCount($count, $elements);
|
138 |
-
}
|
139 |
-
|
140 |
-
public function testOnlyOfTypeFindsSingleChildrenOfGivenType()
|
141 |
-
{
|
142 |
-
$translator = new Translator();
|
143 |
-
$translator->registerExtension(new HtmlExtension($translator));
|
144 |
-
$document = new \DOMDocument();
|
145 |
-
$document->loadHTML(<<<'HTML'
|
146 |
-
<html>
|
147 |
-
<body>
|
148 |
-
<p>
|
149 |
-
<span>A</span>
|
150 |
-
</p>
|
151 |
-
<p>
|
152 |
-
<span>B</span>
|
153 |
-
<span>C</span>
|
154 |
-
</p>
|
155 |
-
</body>
|
156 |
-
</html>
|
157 |
-
HTML
|
158 |
-
);
|
159 |
-
|
160 |
-
$xpath = new \DOMXPath($document);
|
161 |
-
$nodeList = $xpath->query($translator->cssToXPath('span:only-of-type'));
|
162 |
-
|
163 |
-
$this->assertSame(1, $nodeList->length);
|
164 |
-
$this->assertSame('A', $nodeList->item(0)->textContent);
|
165 |
-
}
|
166 |
-
|
167 |
-
public function getXpathLiteralTestData()
|
168 |
-
{
|
169 |
-
return [
|
170 |
-
['foo', "'foo'"],
|
171 |
-
["foo's bar", '"foo\'s bar"'],
|
172 |
-
["foo's \"middle\" bar", 'concat(\'foo\', "\'", \'s "middle" bar\')'],
|
173 |
-
["foo's 'middle' \"bar\"", 'concat(\'foo\', "\'", \'s \', "\'", \'middle\', "\'", \' "bar"\')'],
|
174 |
-
];
|
175 |
-
}
|
176 |
-
|
177 |
-
public function getCssToXPathTestData()
|
178 |
-
{
|
179 |
-
return [
|
180 |
-
['*', '*'],
|
181 |
-
['e', 'e'],
|
182 |
-
['*|e', 'e'],
|
183 |
-
['e|f', 'e:f'],
|
184 |
-
['e[foo]', 'e[@foo]'],
|
185 |
-
['e[foo|bar]', 'e[@foo:bar]'],
|
186 |
-
['e[foo="bar"]', "e[@foo = 'bar']"],
|
187 |
-
['e[foo~="bar"]', "e[@foo and contains(concat(' ', normalize-space(@foo), ' '), ' bar ')]"],
|
188 |
-
['e[foo^="bar"]', "e[@foo and starts-with(@foo, 'bar')]"],
|
189 |
-
['e[foo$="bar"]', "e[@foo and substring(@foo, string-length(@foo)-2) = 'bar']"],
|
190 |
-
['e[foo*="bar"]', "e[@foo and contains(@foo, 'bar')]"],
|
191 |
-
['e[foo!="bar"]', "e[not(@foo) or @foo != 'bar']"],
|
192 |
-
['e[foo!="bar"][foo!="baz"]', "e[(not(@foo) or @foo != 'bar') and (not(@foo) or @foo != 'baz')]"],
|
193 |
-
['e[hreflang|="en"]', "e[@hreflang and (@hreflang = 'en' or starts-with(@hreflang, 'en-'))]"],
|
194 |
-
['e:nth-child(1)', "*/*[(name() = 'e') and (position() = 1)]"],
|
195 |
-
['e:nth-last-child(1)', "*/*[(name() = 'e') and (position() = last() - 0)]"],
|
196 |
-
['e:nth-last-child(2n+2)', "*/*[(name() = 'e') and (last() - position() - 1 >= 0 and (last() - position() - 1) mod 2 = 0)]"],
|
197 |
-
['e:nth-of-type(1)', '*/e[position() = 1]'],
|
198 |
-
['e:nth-last-of-type(1)', '*/e[position() = last() - 0]'],
|
199 |
-
['div e:nth-last-of-type(1) .aclass', "div/descendant-or-self::*/e[position() = last() - 0]/descendant-or-self::*/*[@class and contains(concat(' ', normalize-space(@class), ' '), ' aclass ')]"],
|
200 |
-
['e:first-child', "*/*[(name() = 'e') and (position() = 1)]"],
|
201 |
-
['e:last-child', "*/*[(name() = 'e') and (position() = last())]"],
|
202 |
-
['e:first-of-type', '*/e[position() = 1]'],
|
203 |
-
['e:last-of-type', '*/e[position() = last()]'],
|
204 |
-
['e:only-child', "*/*[(name() = 'e') and (last() = 1)]"],
|
205 |
-
['e:only-of-type', 'e[count(preceding-sibling::e)=0 and count(following-sibling::e)=0]'],
|
206 |
-
['e:empty', 'e[not(*) and not(string-length())]'],
|
207 |
-
['e:EmPTY', 'e[not(*) and not(string-length())]'],
|
208 |
-
['e:root', 'e[not(parent::*)]'],
|
209 |
-
['e:hover', 'e[0]'],
|
210 |
-
['e:contains("foo")', "e[contains(string(.), 'foo')]"],
|
211 |
-
['e:ConTains(foo)', "e[contains(string(.), 'foo')]"],
|
212 |
-
['e.warning', "e[@class and contains(concat(' ', normalize-space(@class), ' '), ' warning ')]"],
|
213 |
-
['e#myid', "e[@id = 'myid']"],
|
214 |
-
['e:not(:nth-child(odd))', 'e[not(position() - 1 >= 0 and (position() - 1) mod 2 = 0)]'],
|
215 |
-
['e:nOT(*)', 'e[0]'],
|
216 |
-
['e f', 'e/descendant-or-self::*/f'],
|
217 |
-
['e > f', 'e/f'],
|
218 |
-
['e + f', "e/following-sibling::*[(name() = 'f') and (position() = 1)]"],
|
219 |
-
['e ~ f', 'e/following-sibling::f'],
|
220 |
-
['div#container p', "div[@id = 'container']/descendant-or-self::*/p"],
|
221 |
-
];
|
222 |
-
}
|
223 |
-
|
224 |
-
public function getXmlLangTestData()
|
225 |
-
{
|
226 |
-
return [
|
227 |
-
[':lang("EN")', ['first', 'second', 'third', 'fourth']],
|
228 |
-
[':lang("en-us")', ['second', 'fourth']],
|
229 |
-
[':lang(en-nz)', ['third']],
|
230 |
-
[':lang(fr)', ['fifth']],
|
231 |
-
[':lang(ru)', ['sixth']],
|
232 |
-
[":lang('ZH')", ['eighth']],
|
233 |
-
[':lang(de) :lang(zh)', ['eighth']],
|
234 |
-
[':lang(en), :lang(zh)', ['first', 'second', 'third', 'fourth', 'eighth']],
|
235 |
-
[':lang(es)', []],
|
236 |
-
];
|
237 |
-
}
|
238 |
-
|
239 |
-
public function getHtmlIdsTestData()
|
240 |
-
{
|
241 |
-
return [
|
242 |
-
['div', ['outer-div', 'li-div', 'foobar-div']],
|
243 |
-
['DIV', ['outer-div', 'li-div', 'foobar-div']], // case-insensitive in HTML
|
244 |
-
['div div', ['li-div']],
|
245 |
-
['div, div div', ['outer-div', 'li-div', 'foobar-div']],
|
246 |
-
['a[name]', ['name-anchor']],
|
247 |
-
['a[NAme]', ['name-anchor']], // case-insensitive in HTML:
|
248 |
-
['a[rel]', ['tag-anchor', 'nofollow-anchor']],
|
249 |
-
['a[rel="tag"]', ['tag-anchor']],
|
250 |
-
['a[href*="localhost"]', ['tag-anchor']],
|
251 |
-
['a[href*=""]', []],
|
252 |
-
['a[href^="http"]', ['tag-anchor', 'nofollow-anchor']],
|
253 |
-
['a[href^="http:"]', ['tag-anchor']],
|
254 |
-
['a[href^=""]', []],
|
255 |
-
['a[href$="org"]', ['nofollow-anchor']],
|
256 |
-
['a[href$=""]', []],
|
257 |
-
['div[foobar~="bc"]', ['foobar-div']],
|
258 |
-
['div[foobar~="cde"]', ['foobar-div']],
|
259 |
-
['[foobar~="ab bc"]', ['foobar-div']],
|
260 |
-
['[foobar~=""]', []],
|
261 |
-
['[foobar~=" \t"]', []],
|
262 |
-
['div[foobar~="cd"]', []],
|
263 |
-
['*[lang|="En"]', ['second-li']],
|
264 |
-
['[lang|="En-us"]', ['second-li']],
|
265 |
-
// Attribute values are case sensitive
|
266 |
-
['*[lang|="en"]', []],
|
267 |
-
['[lang|="en-US"]', []],
|
268 |
-
['*[lang|="e"]', []],
|
269 |
-
// ... :lang() is not.
|
270 |
-
[':lang("EN")', ['second-li', 'li-div']],
|
271 |
-
['*:lang(en-US)', ['second-li', 'li-div']],
|
272 |
-
[':lang("e")', []],
|
273 |
-
['li:nth-child(3)', ['third-li']],
|
274 |
-
['li:nth-child(10)', []],
|
275 |
-
['li:nth-child(2n)', ['second-li', 'fourth-li', 'sixth-li']],
|
276 |
-
['li:nth-child(even)', ['second-li', 'fourth-li', 'sixth-li']],
|
277 |
-
['li:nth-child(2n+0)', ['second-li', 'fourth-li', 'sixth-li']],
|
278 |
-
['li:nth-child(+2n+1)', ['first-li', 'third-li', 'fifth-li', 'seventh-li']],
|
279 |
-
['li:nth-child(odd)', ['first-li', 'third-li', 'fifth-li', 'seventh-li']],
|
280 |
-
['li:nth-child(2n+4)', ['fourth-li', 'sixth-li']],
|
281 |
-
['li:nth-child(3n+1)', ['first-li', 'fourth-li', 'seventh-li']],
|
282 |
-
['li:nth-child(n)', ['first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li']],
|
283 |
-
['li:nth-child(n-1)', ['first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li']],
|
284 |
-
['li:nth-child(n+1)', ['first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li']],
|
285 |
-
['li:nth-child(n+3)', ['third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li']],
|
286 |
-
['li:nth-child(-n)', []],
|
287 |
-
['li:nth-child(-n-1)', []],
|
288 |
-
['li:nth-child(-n+1)', ['first-li']],
|
289 |
-
['li:nth-child(-n+3)', ['first-li', 'second-li', 'third-li']],
|
290 |
-
['li:nth-last-child(0)', []],
|
291 |
-
['li:nth-last-child(2n)', ['second-li', 'fourth-li', 'sixth-li']],
|
292 |
-
['li:nth-last-child(even)', ['second-li', 'fourth-li', 'sixth-li']],
|
293 |
-
['li:nth-last-child(2n+2)', ['second-li', 'fourth-li', 'sixth-li']],
|
294 |
-
['li:nth-last-child(n)', ['first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li']],
|
295 |
-
['li:nth-last-child(n-1)', ['first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li']],
|
296 |
-
['li:nth-last-child(n-3)', ['first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li']],
|
297 |
-
['li:nth-last-child(n+1)', ['first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li', 'sixth-li', 'seventh-li']],
|
298 |
-
['li:nth-last-child(n+3)', ['first-li', 'second-li', 'third-li', 'fourth-li', 'fifth-li']],
|
299 |
-
['li:nth-last-child(-n)', []],
|
300 |
-
['li:nth-last-child(-n-1)', []],
|
301 |
-
['li:nth-last-child(-n+1)', ['seventh-li']],
|
302 |
-
['li:nth-last-child(-n+3)', ['fifth-li', 'sixth-li', 'seventh-li']],
|
303 |
-
['ol:first-of-type', ['first-ol']],
|
304 |
-
['ol:nth-child(1)', ['first-ol']],
|
305 |
-
['ol:nth-of-type(2)', ['second-ol']],
|
306 |
-
['ol:nth-last-of-type(1)', ['second-ol']],
|
307 |
-
['span:only-child', ['foobar-span']],
|
308 |
-
['li div:only-child', ['li-div']],
|
309 |
-
['div *:only-child', ['li-div', 'foobar-span']],
|
310 |
-
['p:only-of-type', ['paragraph']],
|
311 |
-
['a:empty', ['name-anchor']],
|
312 |
-
['a:EMpty', ['name-anchor']],
|
313 |
-
['li:empty', ['third-li', 'fourth-li', 'fifth-li', 'sixth-li']],
|
314 |
-
[':root', ['html']],
|
315 |
-
['html:root', ['html']],
|
316 |
-
['li:root', []],
|
317 |
-
['* :root', []],
|
318 |
-
['*:contains("link")', ['html', 'outer-div', 'tag-anchor', 'nofollow-anchor']],
|
319 |
-
[':CONtains("link")', ['html', 'outer-div', 'tag-anchor', 'nofollow-anchor']],
|
320 |
-
['*:contains("LInk")', []], // case sensitive
|
321 |
-
['*:contains("e")', ['html', 'nil', 'outer-div', 'first-ol', 'first-li', 'paragraph', 'p-em']],
|
322 |
-
['*:contains("E")', []], // case-sensitive
|
323 |
-
['.a', ['first-ol']],
|
324 |
-
['.b', ['first-ol']],
|
325 |
-
['*.a', ['first-ol']],
|
326 |
-
['ol.a', ['first-ol']],
|
327 |
-
['.c', ['first-ol', 'third-li', 'fourth-li']],
|
328 |
-
['*.c', ['first-ol', 'third-li', 'fourth-li']],
|
329 |
-
['ol *.c', ['third-li', 'fourth-li']],
|
330 |
-
['ol li.c', ['third-li', 'fourth-li']],
|
331 |
-
['li ~ li.c', ['third-li', 'fourth-li']],
|
332 |
-
['ol > li.c', ['third-li', 'fourth-li']],
|
333 |
-
['#first-li', ['first-li']],
|
334 |
-
['li#first-li', ['first-li']],
|
335 |
-
['*#first-li', ['first-li']],
|
336 |
-
['li div', ['li-div']],
|
337 |
-
['li > div', ['li-div']],
|
338 |
-
['div div', ['li-div']],
|
339 |
-
['div > div', []],
|
340 |
-
['div>.c', ['first-ol']],
|
341 |
-
['div > .c', ['first-ol']],
|
342 |
-
['div + div', ['foobar-div']],
|
343 |
-
['a ~ a', ['tag-anchor', 'nofollow-anchor']],
|
344 |
-
['a[rel="tag"] ~ a', ['nofollow-anchor']],
|
345 |
-
['ol#first-ol li:last-child', ['seventh-li']],
|
346 |
-
['ol#first-ol *:last-child', ['li-div', 'seventh-li']],
|
347 |
-
['#outer-div:first-child', ['outer-div']],
|
348 |
-
['#outer-div :first-child', ['name-anchor', 'first-li', 'li-div', 'p-b', 'checkbox-fieldset-disabled', 'area-href']],
|
349 |
-
['a[href]', ['tag-anchor', 'nofollow-anchor']],
|
350 |
-
[':not(*)', []],
|
351 |
-
['a:not([href])', ['name-anchor']],
|
352 |
-
['ol :Not(li[class])', ['first-li', 'second-li', 'li-div', 'fifth-li', 'sixth-li', 'seventh-li']],
|
353 |
-
// HTML-specific
|
354 |
-
[':link', ['link-href', 'tag-anchor', 'nofollow-anchor', 'area-href']],
|
355 |
-
[':visited', []],
|
356 |
-
[':enabled', ['link-href', 'tag-anchor', 'nofollow-anchor', 'checkbox-unchecked', 'text-checked', 'checkbox-checked', 'area-href']],
|
357 |
-
[':disabled', ['checkbox-disabled', 'checkbox-disabled-checked', 'fieldset', 'checkbox-fieldset-disabled']],
|
358 |
-
[':checked', ['checkbox-checked', 'checkbox-disabled-checked']],
|
359 |
-
];
|
360 |
-
}
|
361 |
-
|
362 |
-
public function getHtmlShakespearTestData()
|
363 |
-
{
|
364 |
-
return [
|
365 |
-
['*', 246],
|
366 |
-
['div:contains(CELIA)', 26],
|
367 |
-
['div:only-child', 22], // ?
|
368 |
-
['div:nth-child(even)', 106],
|
369 |
-
['div:nth-child(2n)', 106],
|
370 |
-
['div:nth-child(odd)', 137],
|
371 |
-
['div:nth-child(2n+1)', 137],
|
372 |
-
['div:nth-child(n)', 243],
|
373 |
-
['div:last-child', 53],
|
374 |
-
['div:first-child', 51],
|
375 |
-
['div > div', 242],
|
376 |
-
['div + div', 190],
|
377 |
-
['div ~ div', 190],
|
378 |
-
['body', 1],
|
379 |
-
['body div', 243],
|
380 |
-
['div', 243],
|
381 |
-
['div div', 242],
|
382 |
-
['div div div', 241],
|
383 |
-
['div, div, div', 243],
|
384 |
-
['div, a, span', 243],
|
385 |
-
['.dialog', 51],
|
386 |
-
['div.dialog', 51],
|
387 |
-
['div .dialog', 51],
|
388 |
-
['div.character, div.dialog', 99],
|
389 |
-
['div.direction.dialog', 0],
|
390 |
-
['div.dialog.direction', 0],
|
391 |
-
['div.dialog.scene', 1],
|
392 |
-
['div.scene.scene', 1],
|
393 |
-
['div.scene .scene', 0],
|
394 |
-
['div.direction .dialog ', 0],
|
395 |
-
['div .dialog .direction', 4],
|
396 |
-
['div.dialog .dialog .direction', 4],
|
397 |
-
['#speech5', 1],
|
398 |
-
['div#speech5', 1],
|
399 |
-
['div #speech5', 1],
|
400 |
-
['div.scene div.dialog', 49],
|
401 |
-
['div#scene1 div.dialog div', 142],
|
402 |
-
['#scene1 #speech1', 1],
|
403 |
-
['div[class]', 103],
|
404 |
-
['div[class=dialog]', 50],
|
405 |
-
['div[class^=dia]', 51],
|
406 |
-
['div[class$=log]', 50],
|
407 |
-
['div[class*=sce]', 1],
|
408 |
-
['div[class|=dialog]', 50], // ? Seems right
|
409 |
-
['div[class!=madeup]', 243], // ? Seems right
|
410 |
-
['div[class~=dialog]', 51], // ? Seems right
|
411 |
-
];
|
412 |
-
}
|
413 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/symfony/css-selector/XPath/Extension/AbstractExtension.php
CHANGED
@@ -26,7 +26,7 @@ abstract class AbstractExtension implements ExtensionInterface
|
|
26 |
/**
|
27 |
* {@inheritdoc}
|
28 |
*/
|
29 |
-
public function getNodeTranslators()
|
30 |
{
|
31 |
return [];
|
32 |
}
|
@@ -34,7 +34,7 @@ abstract class AbstractExtension implements ExtensionInterface
|
|
34 |
/**
|
35 |
* {@inheritdoc}
|
36 |
*/
|
37 |
-
public function getCombinationTranslators()
|
38 |
{
|
39 |
return [];
|
40 |
}
|
@@ -42,7 +42,7 @@ abstract class AbstractExtension implements ExtensionInterface
|
|
42 |
/**
|
43 |
* {@inheritdoc}
|
44 |
*/
|
45 |
-
public function getFunctionTranslators()
|
46 |
{
|
47 |
return [];
|
48 |
}
|
@@ -50,7 +50,7 @@ abstract class AbstractExtension implements ExtensionInterface
|
|
50 |
/**
|
51 |
* {@inheritdoc}
|
52 |
*/
|
53 |
-
public function getPseudoClassTranslators()
|
54 |
{
|
55 |
return [];
|
56 |
}
|
@@ -58,7 +58,7 @@ abstract class AbstractExtension implements ExtensionInterface
|
|
58 |
/**
|
59 |
* {@inheritdoc}
|
60 |
*/
|
61 |
-
public function getAttributeMatchingTranslators()
|
62 |
{
|
63 |
return [];
|
64 |
}
|
26 |
/**
|
27 |
* {@inheritdoc}
|
28 |
*/
|
29 |
+
public function getNodeTranslators(): array
|
30 |
{
|
31 |
return [];
|
32 |
}
|
34 |
/**
|
35 |
* {@inheritdoc}
|
36 |
*/
|
37 |
+
public function getCombinationTranslators(): array
|
38 |
{
|
39 |
return [];
|
40 |
}
|
42 |
/**
|
43 |
* {@inheritdoc}
|
44 |
*/
|
45 |
+
public function getFunctionTranslators(): array
|
46 |
{
|
47 |
return [];
|
48 |
}
|
50 |
/**
|
51 |
* {@inheritdoc}
|
52 |
*/
|
53 |
+
public function getPseudoClassTranslators(): array
|
54 |
{
|
55 |
return [];
|
56 |
}
|
58 |
/**
|
59 |
* {@inheritdoc}
|
60 |
*/
|
61 |
+
public function getAttributeMatchingTranslators(): array
|
62 |
{
|
63 |
return [];
|
64 |
}
|
vendor/symfony/css-selector/XPath/Extension/AttributeMatchingExtension.php
CHANGED
@@ -29,7 +29,7 @@ class AttributeMatchingExtension extends AbstractExtension
|
|
29 |
/**
|
30 |
* {@inheritdoc}
|
31 |
*/
|
32 |
-
public function getAttributeMatchingTranslators()
|
33 |
{
|
34 |
return [
|
35 |
'exists' => [$this, 'translateExists'],
|
@@ -43,35 +43,17 @@ class AttributeMatchingExtension extends AbstractExtension
|
|
43 |
];
|
44 |
}
|
45 |
|
46 |
-
|
47 |
-
* @param string $attribute
|
48 |
-
* @param string $value
|
49 |
-
*
|
50 |
-
* @return XPathExpr
|
51 |
-
*/
|
52 |
-
public function translateExists(XPathExpr $xpath, $attribute, $value)
|
53 |
{
|
54 |
return $xpath->addCondition($attribute);
|
55 |
}
|
56 |
|
57 |
-
|
58 |
-
* @param string $attribute
|
59 |
-
* @param string $value
|
60 |
-
*
|
61 |
-
* @return XPathExpr
|
62 |
-
*/
|
63 |
-
public function translateEquals(XPathExpr $xpath, $attribute, $value)
|
64 |
{
|
65 |
return $xpath->addCondition(sprintf('%s = %s', $attribute, Translator::getXpathLiteral($value)));
|
66 |
}
|
67 |
|
68 |
-
|
69 |
-
* @param string $attribute
|
70 |
-
* @param string $value
|
71 |
-
*
|
72 |
-
* @return XPathExpr
|
73 |
-
*/
|
74 |
-
public function translateIncludes(XPathExpr $xpath, $attribute, $value)
|
75 |
{
|
76 |
return $xpath->addCondition($value ? sprintf(
|
77 |
'%1$s and contains(concat(\' \', normalize-space(%1$s), \' \'), %2$s)',
|
@@ -80,13 +62,7 @@ class AttributeMatchingExtension extends AbstractExtension
|
|
80 |
) : '0');
|
81 |
}
|
82 |
|
83 |
-
|
84 |
-
* @param string $attribute
|
85 |
-
* @param string $value
|
86 |
-
*
|
87 |
-
* @return XPathExpr
|
88 |
-
*/
|
89 |
-
public function translateDashMatch(XPathExpr $xpath, $attribute, $value)
|
90 |
{
|
91 |
return $xpath->addCondition(sprintf(
|
92 |
'%1$s and (%1$s = %2$s or starts-with(%1$s, %3$s))',
|
@@ -96,13 +72,7 @@ class AttributeMatchingExtension extends AbstractExtension
|
|
96 |
));
|
97 |
}
|
98 |
|
99 |
-
|
100 |
-
* @param string $attribute
|
101 |
-
* @param string $value
|
102 |
-
*
|
103 |
-
* @return XPathExpr
|
104 |
-
*/
|
105 |
-
public function translatePrefixMatch(XPathExpr $xpath, $attribute, $value)
|
106 |
{
|
107 |
return $xpath->addCondition($value ? sprintf(
|
108 |
'%1$s and starts-with(%1$s, %2$s)',
|
@@ -111,13 +81,7 @@ class AttributeMatchingExtension extends AbstractExtension
|
|
111 |
) : '0');
|
112 |
}
|
113 |
|
114 |
-
|
115 |
-
* @param string $attribute
|
116 |
-
* @param string $value
|
117 |
-
*
|
118 |
-
* @return XPathExpr
|
119 |
-
*/
|
120 |
-
public function translateSuffixMatch(XPathExpr $xpath, $attribute, $value)
|
121 |
{
|
122 |
return $xpath->addCondition($value ? sprintf(
|
123 |
'%1$s and substring(%1$s, string-length(%1$s)-%2$s) = %3$s',
|
@@ -127,13 +91,7 @@ class AttributeMatchingExtension extends AbstractExtension
|
|
127 |
) : '0');
|
128 |
}
|
129 |
|
130 |
-
|
131 |
-
* @param string $attribute
|
132 |
-
* @param string $value
|
133 |
-
*
|
134 |
-
* @return XPathExpr
|
135 |
-
*/
|
136 |
-
public function translateSubstringMatch(XPathExpr $xpath, $attribute, $value)
|
137 |
{
|
138 |
return $xpath->addCondition($value ? sprintf(
|
139 |
'%1$s and contains(%1$s, %2$s)',
|
@@ -142,13 +100,7 @@ class AttributeMatchingExtension extends AbstractExtension
|
|
142 |
) : '0');
|
143 |
}
|
144 |
|
145 |
-
|
146 |
-
* @param string $attribute
|
147 |
-
* @param string $value
|
148 |
-
*
|
149 |
-
* @return XPathExpr
|
150 |
-
*/
|
151 |
-
public function translateDifferent(XPathExpr $xpath, $attribute, $value)
|
152 |
{
|
153 |
return $xpath->addCondition(sprintf(
|
154 |
$value ? 'not(%1$s) or %1$s != %2$s' : '%s != %s',
|
@@ -160,7 +112,7 @@ class AttributeMatchingExtension extends AbstractExtension
|
|
160 |
/**
|
161 |
* {@inheritdoc}
|
162 |
*/
|
163 |
-
public function getName()
|
164 |
{
|
165 |
return 'attribute-matching';
|
166 |
}
|
29 |
/**
|
30 |
* {@inheritdoc}
|
31 |
*/
|
32 |
+
public function getAttributeMatchingTranslators(): array
|
33 |
{
|
34 |
return [
|
35 |
'exists' => [$this, 'translateExists'],
|
43 |
];
|
44 |
}
|
45 |
|
46 |
+
public function translateExists(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
{
|
48 |
return $xpath->addCondition($attribute);
|
49 |
}
|
50 |
|
51 |
+
public function translateEquals(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
{
|
53 |
return $xpath->addCondition(sprintf('%s = %s', $attribute, Translator::getXpathLiteral($value)));
|
54 |
}
|
55 |
|
56 |
+
public function translateIncludes(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
{
|
58 |
return $xpath->addCondition($value ? sprintf(
|
59 |
'%1$s and contains(concat(\' \', normalize-space(%1$s), \' \'), %2$s)',
|
62 |
) : '0');
|
63 |
}
|
64 |
|
65 |
+
public function translateDashMatch(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
{
|
67 |
return $xpath->addCondition(sprintf(
|
68 |
'%1$s and (%1$s = %2$s or starts-with(%1$s, %3$s))',
|
72 |
));
|
73 |
}
|
74 |
|
75 |
+
public function translatePrefixMatch(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
{
|
77 |
return $xpath->addCondition($value ? sprintf(
|
78 |
'%1$s and starts-with(%1$s, %2$s)',
|
81 |
) : '0');
|
82 |
}
|
83 |
|
84 |
+
public function translateSuffixMatch(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
{
|
86 |
return $xpath->addCondition($value ? sprintf(
|
87 |
'%1$s and substring(%1$s, string-length(%1$s)-%2$s) = %3$s',
|
91 |
) : '0');
|
92 |
}
|
93 |
|
94 |
+
public function translateSubstringMatch(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
|
|
|
|
|
|
|
|
|
|
|
|
|
95 |
{
|
96 |
return $xpath->addCondition($value ? sprintf(
|
97 |
'%1$s and contains(%1$s, %2$s)',
|
100 |
) : '0');
|
101 |
}
|
102 |
|
103 |
+
public function translateDifferent(XPathExpr $xpath, string $attribute, ?string $value): XPathExpr
|
|
|
|
|
|
|
|
|
|
|
|
|
104 |
{
|
105 |
return $xpath->addCondition(sprintf(
|
106 |
$value ? 'not(%1$s) or %1$s != %2$s' : '%s != %s',
|
112 |
/**
|
113 |
* {@inheritdoc}
|
114 |
*/
|
115 |
+
public function getName(): string
|
116 |
{
|
117 |
return 'attribute-matching';
|
118 |
}
|
vendor/symfony/css-selector/XPath/Extension/CombinationExtension.php
CHANGED
@@ -28,7 +28,7 @@ class CombinationExtension extends AbstractExtension
|
|
28 |
/**
|
29 |
* {@inheritdoc}
|
30 |
*/
|
31 |
-
public function getCombinationTranslators()
|
32 |
{
|
33 |
return [
|
34 |
' ' => [$this, 'translateDescendant'],
|
@@ -38,26 +38,17 @@ class CombinationExtension extends AbstractExtension
|
|
38 |
];
|
39 |
}
|
40 |
|
41 |
-
|
42 |
-
* @return XPathExpr
|
43 |
-
*/
|
44 |
-
public function translateDescendant(XPathExpr $xpath, XPathExpr $combinedXpath)
|
45 |
{
|
46 |
return $xpath->join('/descendant-or-self::*/', $combinedXpath);
|
47 |
}
|
48 |
|
49 |
-
|
50 |
-
* @return XPathExpr
|
51 |
-
*/
|
52 |
-
public function translateChild(XPathExpr $xpath, XPathExpr $combinedXpath)
|
53 |
{
|
54 |
return $xpath->join('/', $combinedXpath);
|
55 |
}
|
56 |
|
57 |
-
|
58 |
-
* @return XPathExpr
|
59 |
-
*/
|
60 |
-
public function translateDirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpath)
|
61 |
{
|
62 |
return $xpath
|
63 |
->join('/following-sibling::', $combinedXpath)
|
@@ -65,10 +56,7 @@ class CombinationExtension extends AbstractExtension
|
|
65 |
->addCondition('position() = 1');
|
66 |
}
|
67 |
|
68 |
-
|
69 |
-
* @return XPathExpr
|
70 |
-
*/
|
71 |
-
public function translateIndirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpath)
|
72 |
{
|
73 |
return $xpath->join('/following-sibling::', $combinedXpath);
|
74 |
}
|
@@ -76,7 +64,7 @@ class CombinationExtension extends AbstractExtension
|
|
76 |
/**
|
77 |
* {@inheritdoc}
|
78 |
*/
|
79 |
-
public function getName()
|
80 |
{
|
81 |
return 'combination';
|
82 |
}
|
28 |
/**
|
29 |
* {@inheritdoc}
|
30 |
*/
|
31 |
+
public function getCombinationTranslators(): array
|
32 |
{
|
33 |
return [
|
34 |
' ' => [$this, 'translateDescendant'],
|
38 |
];
|
39 |
}
|
40 |
|
41 |
+
public function translateDescendant(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr
|
|
|
|
|
|
|
42 |
{
|
43 |
return $xpath->join('/descendant-or-self::*/', $combinedXpath);
|
44 |
}
|
45 |
|
46 |
+
public function translateChild(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr
|
|
|
|
|
|
|
47 |
{
|
48 |
return $xpath->join('/', $combinedXpath);
|
49 |
}
|
50 |
|
51 |
+
public function translateDirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr
|
|
|
|
|
|
|
52 |
{
|
53 |
return $xpath
|
54 |
->join('/following-sibling::', $combinedXpath)
|
56 |
->addCondition('position() = 1');
|
57 |
}
|
58 |
|
59 |
+
public function translateIndirectAdjacent(XPathExpr $xpath, XPathExpr $combinedXpath): XPathExpr
|
|
|
|
|
|
|
60 |
{
|
61 |
return $xpath->join('/following-sibling::', $combinedXpath);
|
62 |
}
|
64 |
/**
|
65 |
* {@inheritdoc}
|
66 |
*/
|
67 |
+
public function getName(): string
|
68 |
{
|
69 |
return 'combination';
|
70 |
}
|
vendor/symfony/css-selector/XPath/Extension/ExtensionInterface.php
CHANGED
@@ -30,40 +30,38 @@ interface ExtensionInterface
|
|
30 |
*
|
31 |
* @return callable[]
|
32 |
*/
|
33 |
-
public function getNodeTranslators();
|
34 |
|
35 |
/**
|
36 |
* Returns combination translators.
|
37 |
*
|
38 |
* @return callable[]
|
39 |
*/
|
40 |
-
public function getCombinationTranslators();
|
41 |
|
42 |
/**
|
43 |
* Returns function translators.
|
44 |
*
|
45 |
* @return callable[]
|
46 |
*/
|
47 |
-
public function getFunctionTranslators();
|
48 |
|
49 |
/**
|
50 |
* Returns pseudo-class translators.
|
51 |
*
|
52 |
* @return callable[]
|
53 |
*/
|
54 |
-
public function getPseudoClassTranslators();
|
55 |
|
56 |
/**
|
57 |
* Returns attribute operation translators.
|
58 |
*
|
59 |
* @return callable[]
|
60 |
*/
|
61 |
-
public function getAttributeMatchingTranslators();
|
62 |
|
63 |
/**
|
64 |
* Returns extension name.
|
65 |
-
*
|
66 |
-
* @return string
|
67 |
*/
|
68 |
-
public function getName();
|
69 |
}
|
30 |
*
|
31 |
* @return callable[]
|
32 |
*/
|
33 |
+
public function getNodeTranslators(): array;
|
34 |
|
35 |
/**
|
36 |
* Returns combination translators.
|
37 |
*
|
38 |
* @return callable[]
|
39 |
*/
|
40 |
+
public function getCombinationTranslators(): array;
|
41 |
|
42 |
/**
|
43 |
* Returns function translators.
|
44 |
*
|
45 |
* @return callable[]
|
46 |
*/
|
47 |
+
public function getFunctionTranslators(): array;
|
48 |
|
49 |
/**
|
50 |
* Returns pseudo-class translators.
|
51 |
*
|
52 |
* @return callable[]
|
53 |
*/
|
54 |
+
public function getPseudoClassTranslators(): array;
|
55 |
|
56 |
/**
|
57 |
* Returns attribute operation translators.
|
58 |
*
|
59 |
* @return callable[]
|
60 |
*/
|
61 |
+
public function getAttributeMatchingTranslators(): array;
|
62 |
|
63 |
/**
|
64 |
* Returns extension name.
|
|
|
|
|
65 |
*/
|
66 |
+
public function getName(): string;
|
67 |
}
|
vendor/symfony/css-selector/XPath/Extension/FunctionExtension.php
CHANGED
@@ -33,7 +33,7 @@ class FunctionExtension extends AbstractExtension
|
|
33 |
/**
|
34 |
* {@inheritdoc}
|
35 |
*/
|
36 |
-
public function getFunctionTranslators()
|
37 |
{
|
38 |
return [
|
39 |
'nth-child' => [$this, 'translateNthChild'],
|
@@ -46,17 +46,12 @@ class FunctionExtension extends AbstractExtension
|
|
46 |
}
|
47 |
|
48 |
/**
|
49 |
-
* @param bool $last
|
50 |
-
* @param bool $addNameTest
|
51 |
-
*
|
52 |
-
* @return XPathExpr
|
53 |
-
*
|
54 |
* @throws ExpressionErrorException
|
55 |
*/
|
56 |
-
public function translateNthChild(XPathExpr $xpath, FunctionNode $function, $last = false, $addNameTest = true)
|
57 |
{
|
58 |
try {
|
59 |
-
|
60 |
} catch (SyntaxErrorException $e) {
|
61 |
throw new ExpressionErrorException(sprintf('Invalid series: "%s".', implode('", "', $function->getArguments())), 0, $e);
|
62 |
}
|
@@ -108,28 +103,20 @@ class FunctionExtension extends AbstractExtension
|
|
108 |
// -1n+6 means elements 6 and previous
|
109 |
}
|
110 |
|
111 |
-
|
112 |
-
* @return XPathExpr
|
113 |
-
*/
|
114 |
-
public function translateNthLastChild(XPathExpr $xpath, FunctionNode $function)
|
115 |
{
|
116 |
return $this->translateNthChild($xpath, $function, true);
|
117 |
}
|
118 |
|
119 |
-
|
120 |
-
* @return XPathExpr
|
121 |
-
*/
|
122 |
-
public function translateNthOfType(XPathExpr $xpath, FunctionNode $function)
|
123 |
{
|
124 |
return $this->translateNthChild($xpath, $function, false, false);
|
125 |
}
|
126 |
|
127 |
/**
|
128 |
-
* @return XPathExpr
|
129 |
-
*
|
130 |
* @throws ExpressionErrorException
|
131 |
*/
|
132 |
-
public function translateNthLastOfType(XPathExpr $xpath, FunctionNode $function)
|
133 |
{
|
134 |
if ('*' === $xpath->getElement()) {
|
135 |
throw new ExpressionErrorException('"*:nth-of-type()" is not implemented.');
|
@@ -139,11 +126,9 @@ class FunctionExtension extends AbstractExtension
|
|
139 |
}
|
140 |
|
141 |
/**
|
142 |
-
* @return XPathExpr
|
143 |
-
*
|
144 |
* @throws ExpressionErrorException
|
145 |
*/
|
146 |
-
public function translateContains(XPathExpr $xpath, FunctionNode $function)
|
147 |
{
|
148 |
$arguments = $function->getArguments();
|
149 |
foreach ($arguments as $token) {
|
@@ -159,11 +144,9 @@ class FunctionExtension extends AbstractExtension
|
|
159 |
}
|
160 |
|
161 |
/**
|
162 |
-
* @return XPathExpr
|
163 |
-
*
|
164 |
* @throws ExpressionErrorException
|
165 |
*/
|
166 |
-
public function translateLang(XPathExpr $xpath, FunctionNode $function)
|
167 |
{
|
168 |
$arguments = $function->getArguments();
|
169 |
foreach ($arguments as $token) {
|
@@ -181,7 +164,7 @@ class FunctionExtension extends AbstractExtension
|
|
181 |
/**
|
182 |
* {@inheritdoc}
|
183 |
*/
|
184 |
-
public function getName()
|
185 |
{
|
186 |
return 'function';
|
187 |
}
|
33 |
/**
|
34 |
* {@inheritdoc}
|
35 |
*/
|
36 |
+
public function getFunctionTranslators(): array
|
37 |
{
|
38 |
return [
|
39 |
'nth-child' => [$this, 'translateNthChild'],
|
46 |
}
|
47 |
|
48 |
/**
|
|
|
|
|
|
|
|
|
|
|
49 |
* @throws ExpressionErrorException
|
50 |
*/
|
51 |
+
public function translateNthChild(XPathExpr $xpath, FunctionNode $function, bool $last = false, bool $addNameTest = true): XPathExpr
|
52 |
{
|
53 |
try {
|
54 |
+
[$a, $b] = Parser::parseSeries($function->getArguments());
|
55 |
} catch (SyntaxErrorException $e) {
|
56 |
throw new ExpressionErrorException(sprintf('Invalid series: "%s".', implode('", "', $function->getArguments())), 0, $e);
|
57 |
}
|
103 |
// -1n+6 means elements 6 and previous
|
104 |
}
|
105 |
|
106 |
+
public function translateNthLastChild(XPathExpr $xpath, FunctionNode $function): XPathExpr
|
|
|
|
|
|
|
107 |
{
|
108 |
return $this->translateNthChild($xpath, $function, true);
|
109 |
}
|
110 |
|
111 |
+
public function translateNthOfType(XPathExpr $xpath, FunctionNode $function): XPathExpr
|
|
|
|
|
|
|
112 |
{
|
113 |
return $this->translateNthChild($xpath, $function, false, false);
|
114 |
}
|
115 |
|
116 |
/**
|
|
|
|
|
117 |
* @throws ExpressionErrorException
|
118 |
*/
|
119 |
+
public function translateNthLastOfType(XPathExpr $xpath, FunctionNode $function): XPathExpr
|
120 |
{
|
121 |
if ('*' === $xpath->getElement()) {
|
122 |
throw new ExpressionErrorException('"*:nth-of-type()" is not implemented.');
|
126 |
}
|
127 |
|
128 |
/**
|
|
|
|
|
129 |
* @throws ExpressionErrorException
|
130 |
*/
|
131 |
+
public function translateContains(XPathExpr $xpath, FunctionNode $function): XPathExpr
|
132 |
{
|
133 |
$arguments = $function->getArguments();
|
134 |
foreach ($arguments as $token) {
|
144 |
}
|
145 |
|
146 |
/**
|
|
|
|
|
147 |
* @throws ExpressionErrorException
|
148 |
*/
|
149 |
+
public function translateLang(XPathExpr $xpath, FunctionNode $function): XPathExpr
|
150 |
{
|
151 |
$arguments = $function->getArguments();
|
152 |
foreach ($arguments as $token) {
|
164 |
/**
|
165 |
* {@inheritdoc}
|
166 |
*/
|
167 |
+
public function getName(): string
|
168 |
{
|
169 |
return 'function';
|
170 |
}
|
vendor/symfony/css-selector/XPath/Extension/HtmlExtension.php
CHANGED
@@ -39,7 +39,7 @@ class HtmlExtension extends AbstractExtension
|
|
39 |
/**
|
40 |
* {@inheritdoc}
|
41 |
*/
|
42 |
-
public function getPseudoClassTranslators()
|
43 |
{
|
44 |
return [
|
45 |
'checked' => [$this, 'translateChecked'],
|
@@ -56,17 +56,14 @@ class HtmlExtension extends AbstractExtension
|
|
56 |
/**
|
57 |
* {@inheritdoc}
|
58 |
*/
|
59 |
-
public function getFunctionTranslators()
|
60 |
{
|
61 |
return [
|
62 |
'lang' => [$this, 'translateLang'],
|
63 |
];
|
64 |
}
|
65 |
|
66 |
-
|
67 |
-
* @return XPathExpr
|
68 |
-
*/
|
69 |
-
public function translateChecked(XPathExpr $xpath)
|
70 |
{
|
71 |
return $xpath->addCondition(
|
72 |
'(@checked '
|
@@ -75,18 +72,12 @@ class HtmlExtension extends AbstractExtension
|
|
75 |
);
|
76 |
}
|
77 |
|
78 |
-
|
79 |
-
* @return XPathExpr
|
80 |
-
*/
|
81 |
-
public function translateLink(XPathExpr $xpath)
|
82 |
{
|
83 |
return $xpath->addCondition("@href and (name(.) = 'a' or name(.) = 'link' or name(.) = 'area')");
|
84 |
}
|
85 |
|
86 |
-
|
87 |
-
* @return XPathExpr
|
88 |
-
*/
|
89 |
-
public function translateDisabled(XPathExpr $xpath)
|
90 |
{
|
91 |
return $xpath->addCondition(
|
92 |
'('
|
@@ -112,10 +103,7 @@ class HtmlExtension extends AbstractExtension
|
|
112 |
// todo: in the second half, add "and is not a descendant of that fieldset element's first legend element child, if any."
|
113 |
}
|
114 |
|
115 |
-
|
116 |
-
* @return XPathExpr
|
117 |
-
*/
|
118 |
-
public function translateEnabled(XPathExpr $xpath)
|
119 |
{
|
120 |
return $xpath->addCondition(
|
121 |
'('
|
@@ -149,11 +137,9 @@ class HtmlExtension extends AbstractExtension
|
|
149 |
}
|
150 |
|
151 |
/**
|
152 |
-
* @return XPathExpr
|
153 |
-
*
|
154 |
* @throws ExpressionErrorException
|
155 |
*/
|
156 |
-
public function translateLang(XPathExpr $xpath, FunctionNode $function)
|
157 |
{
|
158 |
$arguments = $function->getArguments();
|
159 |
foreach ($arguments as $token) {
|
@@ -171,34 +157,22 @@ class HtmlExtension extends AbstractExtension
|
|
171 |
));
|
172 |
}
|
173 |
|
174 |
-
|
175 |
-
* @return XPathExpr
|
176 |
-
*/
|
177 |
-
public function translateSelected(XPathExpr $xpath)
|
178 |
{
|
179 |
return $xpath->addCondition("(@selected and name(.) = 'option')");
|
180 |
}
|
181 |
|
182 |
-
|
183 |
-
* @return XPathExpr
|
184 |
-
*/
|
185 |
-
public function translateInvalid(XPathExpr $xpath)
|
186 |
{
|
187 |
return $xpath->addCondition('0');
|
188 |
}
|
189 |
|
190 |
-
|
191 |
-
* @return XPathExpr
|
192 |
-
*/
|
193 |
-
public function translateHover(XPathExpr $xpath)
|
194 |
{
|
195 |
return $xpath->addCondition('0');
|
196 |
}
|
197 |
|
198 |
-
|
199 |
-
* @return XPathExpr
|
200 |
-
*/
|
201 |
-
public function translateVisited(XPathExpr $xpath)
|
202 |
{
|
203 |
return $xpath->addCondition('0');
|
204 |
}
|
@@ -206,7 +180,7 @@ class HtmlExtension extends AbstractExtension
|
|
206 |
/**
|
207 |
* {@inheritdoc}
|
208 |
*/
|
209 |
-
public function getName()
|
210 |
{
|
211 |
return 'html';
|
212 |
}
|
39 |
/**
|
40 |
* {@inheritdoc}
|
41 |
*/
|
42 |
+
public function getPseudoClassTranslators(): array
|
43 |
{
|
44 |
return [
|
45 |
'checked' => [$this, 'translateChecked'],
|
56 |
/**
|
57 |
* {@inheritdoc}
|
58 |
*/
|
59 |
+
public function getFunctionTranslators(): array
|
60 |
{
|
61 |
return [
|
62 |
'lang' => [$this, 'translateLang'],
|
63 |
];
|
64 |
}
|
65 |
|
66 |
+
public function translateChecked(XPathExpr $xpath): XPathExpr
|
|
|
|
|
|
|
67 |
{
|
68 |
return $xpath->addCondition(
|
69 |
'(@checked '
|
72 |
);
|
73 |
}
|
74 |
|
75 |
+
public function translateLink(XPathExpr $xpath): XPathExpr
|
|
|
|
|
|
|
76 |
{
|
77 |
return $xpath->addCondition("@href and (name(.) = 'a' or name(.) = 'link' or name(.) = 'area')");
|
78 |
}
|
79 |
|
80 |
+
public function translateDisabled(XPathExpr $xpath): XPathExpr
|
|
|
|
|
|
|
81 |
{
|
82 |
return $xpath->addCondition(
|
83 |
'('
|
103 |
// todo: in the second half, add "and is not a descendant of that fieldset element's first legend element child, if any."
|
104 |
}
|
105 |
|
106 |
+
public function translateEnabled(XPathExpr $xpath): XPathExpr
|
|
|
|
|
|
|
107 |
{
|
108 |
return $xpath->addCondition(
|
109 |
'('
|
137 |
}
|
138 |
|
139 |
/**
|
|
|
|
|
140 |
* @throws ExpressionErrorException
|
141 |
*/
|
142 |
+
public function translateLang(XPathExpr $xpath, FunctionNode $function): XPathExpr
|
143 |
{
|
144 |
$arguments = $function->getArguments();
|
145 |
foreach ($arguments as $token) {
|
157 |
));
|
158 |
}
|
159 |
|
160 |
+
public function translateSelected(XPathExpr $xpath): XPathExpr
|
|
|
|
|
|
|
161 |
{
|
162 |
return $xpath->addCondition("(@selected and name(.) = 'option')");
|
163 |
}
|
164 |
|
165 |
+
public function translateInvalid(XPathExpr $xpath): XPathExpr
|
|
|
|
|
|
|
166 |
{
|
167 |
return $xpath->addCondition('0');
|
168 |
}
|
169 |
|
170 |
+
public function translateHover(XPathExpr $xpath): XPathExpr
|
|
|
|
|
|
|
171 |
{
|
172 |
return $xpath->addCondition('0');
|
173 |
}
|
174 |
|
175 |
+
public function translateVisited(XPathExpr $xpath): XPathExpr
|
|
|
|
|
|
|
176 |
{
|
177 |
return $xpath->addCondition('0');
|
178 |
}
|
180 |
/**
|
181 |
* {@inheritdoc}
|
182 |
*/
|
183 |
+
public function getName(): string
|
184 |
{
|
185 |
return 'html';
|
186 |
}
|
vendor/symfony/css-selector/XPath/Extension/NodeExtension.php
CHANGED
@@ -27,27 +27,21 @@ use Symfony\Component\CssSelector\XPath\XPathExpr;
|
|
27 |
*/
|
28 |
class NodeExtension extends AbstractExtension
|
29 |
{
|
30 |
-
const ELEMENT_NAME_IN_LOWER_CASE = 1;
|
31 |
-
const ATTRIBUTE_NAME_IN_LOWER_CASE = 2;
|
32 |
-
const ATTRIBUTE_VALUE_IN_LOWER_CASE = 4;
|
33 |
|
34 |
private $flags;
|
35 |
|
36 |
-
|
37 |
-
* @param int $flags
|
38 |
-
*/
|
39 |
-
public function __construct($flags = 0)
|
40 |
{
|
41 |
$this->flags = $flags;
|
42 |
}
|
43 |
|
44 |
/**
|
45 |
-
* @param int $flag
|
46 |
-
* @param bool $on
|
47 |
-
*
|
48 |
* @return $this
|
49 |
*/
|
50 |
-
public function setFlag($flag, $on)
|
51 |
{
|
52 |
if ($on && !$this->hasFlag($flag)) {
|
53 |
$this->flags += $flag;
|
@@ -60,12 +54,7 @@ class NodeExtension extends AbstractExtension
|
|
60 |
return $this;
|
61 |
}
|
62 |
|
63 |
-
|
64 |
-
* @param int $flag
|
65 |
-
*
|
66 |
-
* @return bool
|
67 |
-
*/
|
68 |
-
public function hasFlag($flag)
|
69 |
{
|
70 |
return (bool) ($this->flags & $flag);
|
71 |
}
|
@@ -73,7 +62,7 @@ class NodeExtension extends AbstractExtension
|
|
73 |
/**
|
74 |
* {@inheritdoc}
|
75 |
*/
|
76 |
-
public function getNodeTranslators()
|
77 |
{
|
78 |
return [
|
79 |
'Selector' => [$this, 'translateSelector'],
|
@@ -88,26 +77,17 @@ class NodeExtension extends AbstractExtension
|
|
88 |
];
|
89 |
}
|
90 |
|
91 |
-
|
92 |
-
* @return XPathExpr
|
93 |
-
*/
|
94 |
-
public function translateSelector(Node\SelectorNode $node, Translator $translator)
|
95 |
{
|
96 |
return $translator->nodeToXPath($node->getTree());
|
97 |
}
|
98 |
|
99 |
-
|
100 |
-
* @return XPathExpr
|
101 |
-
*/
|
102 |
-
public function translateCombinedSelector(Node\CombinedSelectorNode $node, Translator $translator)
|
103 |
{
|
104 |
return $translator->addCombination($node->getCombinator(), $node->getSelector(), $node->getSubSelector());
|
105 |
}
|
106 |
|
107 |
-
|
108 |
-
* @return XPathExpr
|
109 |
-
*/
|
110 |
-
public function translateNegation(Node\NegationNode $node, Translator $translator)
|
111 |
{
|
112 |
$xpath = $translator->nodeToXPath($node->getSelector());
|
113 |
$subXpath = $translator->nodeToXPath($node->getSubSelector());
|
@@ -120,30 +100,21 @@ class NodeExtension extends AbstractExtension
|
|
120 |
return $xpath->addCondition('0');
|
121 |
}
|
122 |
|
123 |
-
|
124 |
-
* @return XPathExpr
|
125 |
-
*/
|
126 |
-
public function translateFunction(Node\FunctionNode $node, Translator $translator)
|
127 |
{
|
128 |
$xpath = $translator->nodeToXPath($node->getSelector());
|
129 |
|
130 |
return $translator->addFunction($xpath, $node);
|
131 |
}
|
132 |
|
133 |
-
|
134 |
-
* @return XPathExpr
|
135 |
-
*/
|
136 |
-
public function translatePseudo(Node\PseudoNode $node, Translator $translator)
|
137 |
{
|
138 |
$xpath = $translator->nodeToXPath($node->getSelector());
|
139 |
|
140 |
return $translator->addPseudoClass($xpath, $node->getIdentifier());
|
141 |
}
|
142 |
|
143 |
-
|
144 |
-
* @return XPathExpr
|
145 |
-
*/
|
146 |
-
public function translateAttribute(Node\AttributeNode $node, Translator $translator)
|
147 |
{
|
148 |
$name = $node->getAttribute();
|
149 |
$safe = $this->isSafeName($name);
|
@@ -168,34 +139,25 @@ class NodeExtension extends AbstractExtension
|
|
168 |
return $translator->addAttributeMatching($xpath, $node->getOperator(), $attribute, $value);
|
169 |
}
|
170 |
|
171 |
-
|
172 |
-
* @return XPathExpr
|
173 |
-
*/
|
174 |
-
public function translateClass(Node\ClassNode $node, Translator $translator)
|
175 |
{
|
176 |
$xpath = $translator->nodeToXPath($node->getSelector());
|
177 |
|
178 |
return $translator->addAttributeMatching($xpath, '~=', '@class', $node->getName());
|
179 |
}
|
180 |
|
181 |
-
|
182 |
-
* @return XPathExpr
|
183 |
-
*/
|
184 |
-
public function translateHash(Node\HashNode $node, Translator $translator)
|
185 |
{
|
186 |
$xpath = $translator->nodeToXPath($node->getSelector());
|
187 |
|
188 |
return $translator->addAttributeMatching($xpath, '=', '@id', $node->getId());
|
189 |
}
|
190 |
|
191 |
-
|
192 |
-
* @return XPathExpr
|
193 |
-
*/
|
194 |
-
public function translateElement(Node\ElementNode $node)
|
195 |
{
|
196 |
$element = $node->getElement();
|
197 |
|
198 |
-
if ($this->hasFlag(self::ELEMENT_NAME_IN_LOWER_CASE)) {
|
199 |
$element = strtolower($element);
|
200 |
}
|
201 |
|
@@ -223,19 +185,12 @@ class NodeExtension extends AbstractExtension
|
|
223 |
/**
|
224 |
* {@inheritdoc}
|
225 |
*/
|
226 |
-
public function getName()
|
227 |
{
|
228 |
return 'node';
|
229 |
}
|
230 |
|
231 |
-
|
232 |
-
* Tests if given name is safe.
|
233 |
-
*
|
234 |
-
* @param string $name
|
235 |
-
*
|
236 |
-
* @return bool
|
237 |
-
*/
|
238 |
-
private function isSafeName($name)
|
239 |
{
|
240 |
return 0 < preg_match('~^[a-zA-Z_][a-zA-Z0-9_.-]*$~', $name);
|
241 |
}
|
27 |
*/
|
28 |
class NodeExtension extends AbstractExtension
|
29 |
{
|
30 |
+
public const ELEMENT_NAME_IN_LOWER_CASE = 1;
|
31 |
+
public const ATTRIBUTE_NAME_IN_LOWER_CASE = 2;
|
32 |
+
public const ATTRIBUTE_VALUE_IN_LOWER_CASE = 4;
|
33 |
|
34 |
private $flags;
|
35 |
|
36 |
+
public function __construct(int $flags = 0)
|
|
|
|
|
|
|
37 |
{
|
38 |
$this->flags = $flags;
|
39 |
}
|
40 |
|
41 |
/**
|
|
|
|
|
|
|
42 |
* @return $this
|
43 |
*/
|
44 |
+
public function setFlag(int $flag, bool $on): self
|
45 |
{
|
46 |
if ($on && !$this->hasFlag($flag)) {
|
47 |
$this->flags += $flag;
|
54 |
return $this;
|
55 |
}
|
56 |
|
57 |
+
public function hasFlag(int $flag): bool
|
|
|
|
|
|
|
|
|
|
|
58 |
{
|
59 |
return (bool) ($this->flags & $flag);
|
60 |
}
|
62 |
/**
|
63 |
* {@inheritdoc}
|
64 |
*/
|
65 |
+
public function getNodeTranslators(): array
|
66 |
{
|
67 |
return [
|
68 |
'Selector' => [$this, 'translateSelector'],
|
77 |
];
|
78 |
}
|
79 |
|
80 |
+
public function translateSelector(Node\SelectorNode $node, Translator $translator): XPathExpr
|
|
|
|
|
|
|
81 |
{
|
82 |
return $translator->nodeToXPath($node->getTree());
|
83 |
}
|
84 |
|
85 |
+
public function translateCombinedSelector(Node\CombinedSelectorNode $node, Translator $translator): XPathExpr
|
|
|
|
|
|
|
86 |
{
|
87 |
return $translator->addCombination($node->getCombinator(), $node->getSelector(), $node->getSubSelector());
|
88 |
}
|
89 |
|
90 |
+
public function translateNegation(Node\NegationNode $node, Translator $translator): XPathExpr
|
|
|
|
|
|
|
91 |
{
|
92 |
$xpath = $translator->nodeToXPath($node->getSelector());
|
93 |
$subXpath = $translator->nodeToXPath($node->getSubSelector());
|
100 |
return $xpath->addCondition('0');
|
101 |
}
|
102 |
|
103 |
+
public function translateFunction(Node\FunctionNode $node, Translator $translator): XPathExpr
|
|
|
|
|
|
|
104 |
{
|
105 |
$xpath = $translator->nodeToXPath($node->getSelector());
|
106 |
|
107 |
return $translator->addFunction($xpath, $node);
|
108 |
}
|
109 |
|
110 |
+
public function translatePseudo(Node\PseudoNode $node, Translator $translator): XPathExpr
|
|
|
|
|
|
|
111 |
{
|
112 |
$xpath = $translator->nodeToXPath($node->getSelector());
|
113 |
|
114 |
return $translator->addPseudoClass($xpath, $node->getIdentifier());
|
115 |
}
|
116 |
|
117 |
+
public function translateAttribute(Node\AttributeNode $node, Translator $translator): XPathExpr
|
|
|
|
|
|
|
118 |
{
|
119 |
$name = $node->getAttribute();
|
120 |
$safe = $this->isSafeName($name);
|
139 |
return $translator->addAttributeMatching($xpath, $node->getOperator(), $attribute, $value);
|
140 |
}
|
141 |
|
142 |
+
public function translateClass(Node\ClassNode $node, Translator $translator): XPathExpr
|
|
|
|
|
|
|
143 |
{
|
144 |
$xpath = $translator->nodeToXPath($node->getSelector());
|
145 |
|
146 |
return $translator->addAttributeMatching($xpath, '~=', '@class', $node->getName());
|
147 |
}
|
148 |
|
149 |
+
public function translateHash(Node\HashNode $node, Translator $translator): XPathExpr
|
|
|
|
|
|
|
150 |
{
|
151 |
$xpath = $translator->nodeToXPath($node->getSelector());
|
152 |
|
153 |
return $translator->addAttributeMatching($xpath, '=', '@id', $node->getId());
|
154 |
}
|
155 |
|
156 |
+
public function translateElement(Node\ElementNode $node): XPathExpr
|
|
|
|
|
|
|
157 |
{
|
158 |
$element = $node->getElement();
|
159 |
|
160 |
+
if ($element && $this->hasFlag(self::ELEMENT_NAME_IN_LOWER_CASE)) {
|
161 |
$element = strtolower($element);
|
162 |
}
|
163 |
|
185 |
/**
|
186 |
* {@inheritdoc}
|
187 |
*/
|
188 |
+
public function getName(): string
|
189 |
{
|
190 |
return 'node';
|
191 |
}
|
192 |
|
193 |
+
private function isSafeName(string $name): bool
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
194 |
{
|
195 |
return 0 < preg_match('~^[a-zA-Z_][a-zA-Z0-9_.-]*$~', $name);
|
196 |
}
|
vendor/symfony/css-selector/XPath/Extension/PseudoClassExtension.php
CHANGED
@@ -29,7 +29,7 @@ class PseudoClassExtension extends AbstractExtension
|
|
29 |
/**
|
30 |
* {@inheritdoc}
|
31 |
*/
|
32 |
-
public function getPseudoClassTranslators()
|
33 |
{
|
34 |
return [
|
35 |
'root' => [$this, 'translateRoot'],
|
@@ -43,18 +43,12 @@ class PseudoClassExtension extends AbstractExtension
|
|
43 |
];
|
44 |
}
|
45 |
|
46 |
-
|
47 |
-
* @return XPathExpr
|
48 |
-
*/
|
49 |
-
public function translateRoot(XPathExpr $xpath)
|
50 |
{
|
51 |
return $xpath->addCondition('not(parent::*)');
|
52 |
}
|
53 |
|
54 |
-
|
55 |
-
* @return XPathExpr
|
56 |
-
*/
|
57 |
-
public function translateFirstChild(XPathExpr $xpath)
|
58 |
{
|
59 |
return $xpath
|
60 |
->addStarPrefix()
|
@@ -62,10 +56,7 @@ class PseudoClassExtension extends AbstractExtension
|
|
62 |
->addCondition('position() = 1');
|
63 |
}
|
64 |
|
65 |
-
|
66 |
-
* @return XPathExpr
|
67 |
-
*/
|
68 |
-
public function translateLastChild(XPathExpr $xpath)
|
69 |
{
|
70 |
return $xpath
|
71 |
->addStarPrefix()
|
@@ -74,11 +65,9 @@ class PseudoClassExtension extends AbstractExtension
|
|
74 |
}
|
75 |
|
76 |
/**
|
77 |
-
* @return XPathExpr
|
78 |
-
*
|
79 |
* @throws ExpressionErrorException
|
80 |
*/
|
81 |
-
public function translateFirstOfType(XPathExpr $xpath)
|
82 |
{
|
83 |
if ('*' === $xpath->getElement()) {
|
84 |
throw new ExpressionErrorException('"*:first-of-type" is not implemented.');
|
@@ -90,11 +79,9 @@ class PseudoClassExtension extends AbstractExtension
|
|
90 |
}
|
91 |
|
92 |
/**
|
93 |
-
* @return XPathExpr
|
94 |
-
*
|
95 |
* @throws ExpressionErrorException
|
96 |
*/
|
97 |
-
public function translateLastOfType(XPathExpr $xpath)
|
98 |
{
|
99 |
if ('*' === $xpath->getElement()) {
|
100 |
throw new ExpressionErrorException('"*:last-of-type" is not implemented.');
|
@@ -105,10 +92,7 @@ class PseudoClassExtension extends AbstractExtension
|
|
105 |
->addCondition('position() = last()');
|
106 |
}
|
107 |
|
108 |
-
|
109 |
-
* @return XPathExpr
|
110 |
-
*/
|
111 |
-
public function translateOnlyChild(XPathExpr $xpath)
|
112 |
{
|
113 |
return $xpath
|
114 |
->addStarPrefix()
|
@@ -116,26 +100,14 @@ class PseudoClassExtension extends AbstractExtension
|
|
116 |
->addCondition('last() = 1');
|
117 |
}
|
118 |
|
119 |
-
|
120 |
-
* @return XPathExpr
|
121 |
-
*
|
122 |
-
* @throws ExpressionErrorException
|
123 |
-
*/
|
124 |
-
public function translateOnlyOfType(XPathExpr $xpath)
|
125 |
{
|
126 |
$element = $xpath->getElement();
|
127 |
|
128 |
-
if ('*' === $element) {
|
129 |
-
throw new ExpressionErrorException('"*:only-of-type" is not implemented.');
|
130 |
-
}
|
131 |
-
|
132 |
return $xpath->addCondition(sprintf('count(preceding-sibling::%s)=0 and count(following-sibling::%s)=0', $element, $element));
|
133 |
}
|
134 |
|
135 |
-
|
136 |
-
* @return XPathExpr
|
137 |
-
*/
|
138 |
-
public function translateEmpty(XPathExpr $xpath)
|
139 |
{
|
140 |
return $xpath->addCondition('not(*) and not(string-length())');
|
141 |
}
|
@@ -143,7 +115,7 @@ class PseudoClassExtension extends AbstractExtension
|
|
143 |
/**
|
144 |
* {@inheritdoc}
|
145 |
*/
|
146 |
-
public function getName()
|
147 |
{
|
148 |
return 'pseudo-class';
|
149 |
}
|
29 |
/**
|
30 |
* {@inheritdoc}
|
31 |
*/
|
32 |
+
public function getPseudoClassTranslators(): array
|
33 |
{
|
34 |
return [
|
35 |
'root' => [$this, 'translateRoot'],
|
43 |
];
|
44 |
}
|
45 |
|
46 |
+
public function translateRoot(XPathExpr $xpath): XPathExpr
|
|
|
|
|
|
|
47 |
{
|
48 |
return $xpath->addCondition('not(parent::*)');
|
49 |
}
|
50 |
|
51 |
+
public function translateFirstChild(XPathExpr $xpath): XPathExpr
|
|
|
|
|
|
|
52 |
{
|
53 |
return $xpath
|
54 |
->addStarPrefix()
|
56 |
->addCondition('position() = 1');
|
57 |
}
|
58 |
|
59 |
+
public function translateLastChild(XPathExpr $xpath): XPathExpr
|
|
|
|
|
|
|
60 |
{
|
61 |
return $xpath
|
62 |
->addStarPrefix()
|
65 |
}
|
66 |
|
67 |
/**
|
|
|
|
|
68 |
* @throws ExpressionErrorException
|
69 |
*/
|
70 |
+
public function translateFirstOfType(XPathExpr $xpath): XPathExpr
|
71 |
{
|
72 |
if ('*' === $xpath->getElement()) {
|
73 |
throw new ExpressionErrorException('"*:first-of-type" is not implemented.');
|
79 |
}
|
80 |
|
81 |
/**
|
|
|
|
|
82 |
* @throws ExpressionErrorException
|
83 |
*/
|
84 |
+
public function translateLastOfType(XPathExpr $xpath): XPathExpr
|
85 |
{
|
86 |
if ('*' === $xpath->getElement()) {
|
87 |
throw new ExpressionErrorException('"*:last-of-type" is not implemented.');
|
92 |
->addCondition('position() = last()');
|
93 |
}
|
94 |
|
95 |
+
public function translateOnlyChild(XPathExpr $xpath): XPathExpr
|
|
|
|
|
|
|
96 |
{
|
97 |
return $xpath
|
98 |
->addStarPrefix()
|
100 |
->addCondition('last() = 1');
|
101 |
}
|
102 |
|
103 |
+
public function translateOnlyOfType(XPathExpr $xpath): XPathExpr
|
|
|
|
|
|
|
|
|
|
|
104 |
{
|
105 |
$element = $xpath->getElement();
|
106 |
|
|
|
|
|
|
|
|
|
107 |
return $xpath->addCondition(sprintf('count(preceding-sibling::%s)=0 and count(following-sibling::%s)=0', $element, $element));
|
108 |
}
|
109 |
|
110 |
+
public function translateEmpty(XPathExpr $xpath): XPathExpr
|
|
|
|
|
|
|
111 |
{
|
112 |
return $xpath->addCondition('not(*) and not(string-length())');
|
113 |
}
|
115 |
/**
|
116 |
* {@inheritdoc}
|
117 |
*/
|
118 |
+
public function getName(): string
|
119 |
{
|
120 |
return 'pseudo-class';
|
121 |
}
|
vendor/symfony/css-selector/XPath/Translator.php
CHANGED
@@ -50,7 +50,7 @@ class Translator implements TranslatorInterface
|
|
50 |
|
51 |
public function __construct(ParserInterface $parser = null)
|
52 |
{
|
53 |
-
$this->mainParser = $parser
|
54 |
|
55 |
$this
|
56 |
->registerExtension(new Extension\NodeExtension())
|
@@ -61,12 +61,7 @@ class Translator implements TranslatorInterface
|
|
61 |
;
|
62 |
}
|
63 |
|
64 |
-
|
65 |
-
* @param string $element
|
66 |
-
*
|
67 |
-
* @return string
|
68 |
-
*/
|
69 |
-
public static function getXpathLiteral($element)
|
70 |
{
|
71 |
if (false === strpos($element, "'")) {
|
72 |
return "'".$element."'";
|
@@ -95,7 +90,7 @@ class Translator implements TranslatorInterface
|
|
95 |
/**
|
96 |
* {@inheritdoc}
|
97 |
*/
|
98 |
-
public function cssToXPath($cssExpr, $prefix = 'descendant-or-self::')
|
99 |
{
|
100 |
$selectors = $this->parseSelectors($cssExpr);
|
101 |
|
@@ -114,17 +109,15 @@ class Translator implements TranslatorInterface
|
|
114 |
/**
|
115 |
* {@inheritdoc}
|
116 |
*/
|
117 |
-
public function selectorToXPath(SelectorNode $selector, $prefix = 'descendant-or-self::')
|
118 |
{
|
119 |
return ($prefix ?: '').$this->nodeToXPath($selector);
|
120 |
}
|
121 |
|
122 |
/**
|
123 |
-
* Registers an extension.
|
124 |
-
*
|
125 |
* @return $this
|
126 |
*/
|
127 |
-
public function registerExtension(Extension\ExtensionInterface $extension)
|
128 |
{
|
129 |
$this->extensions[$extension->getName()] = $extension;
|
130 |
|
@@ -138,13 +131,9 @@ class Translator implements TranslatorInterface
|
|
138 |
}
|
139 |
|
140 |
/**
|
141 |
-
* @param string $name
|
142 |
-
*
|
143 |
-
* @return Extension\ExtensionInterface
|
144 |
-
*
|
145 |
* @throws ExpressionErrorException
|
146 |
*/
|
147 |
-
public function getExtension($name)
|
148 |
{
|
149 |
if (!isset($this->extensions[$name])) {
|
150 |
throw new ExpressionErrorException(sprintf('Extension "%s" not registered.', $name));
|
@@ -154,11 +143,9 @@ class Translator implements TranslatorInterface
|
|
154 |
}
|
155 |
|
156 |
/**
|
157 |
-
* Registers a shortcut parser.
|
158 |
-
*
|
159 |
* @return $this
|
160 |
*/
|
161 |
-
public function registerParserShortcut(ParserInterface $shortcut)
|
162 |
{
|
163 |
$this->shortcutParsers[] = $shortcut;
|
164 |
|
@@ -166,89 +153,69 @@ class Translator implements TranslatorInterface
|
|
166 |
}
|
167 |
|
168 |
/**
|
169 |
-
* @return XPathExpr
|
170 |
-
*
|
171 |
* @throws ExpressionErrorException
|
172 |
*/
|
173 |
-
public function nodeToXPath(NodeInterface $node)
|
174 |
{
|
175 |
if (!isset($this->nodeTranslators[$node->getNodeName()])) {
|
176 |
throw new ExpressionErrorException(sprintf('Node "%s" not supported.', $node->getNodeName()));
|
177 |
}
|
178 |
|
179 |
-
return
|
180 |
}
|
181 |
|
182 |
/**
|
183 |
-
* @param string $combiner
|
184 |
-
*
|
185 |
-
* @return XPathExpr
|
186 |
-
*
|
187 |
* @throws ExpressionErrorException
|
188 |
*/
|
189 |
-
public function addCombination($combiner, NodeInterface $xpath, NodeInterface $combinedXpath)
|
190 |
{
|
191 |
if (!isset($this->combinationTranslators[$combiner])) {
|
192 |
throw new ExpressionErrorException(sprintf('Combiner "%s" not supported.', $combiner));
|
193 |
}
|
194 |
|
195 |
-
return
|
196 |
}
|
197 |
|
198 |
/**
|
199 |
-
* @return XPathExpr
|
200 |
-
*
|
201 |
* @throws ExpressionErrorException
|
202 |
*/
|
203 |
-
public function addFunction(XPathExpr $xpath, FunctionNode $function)
|
204 |
{
|
205 |
if (!isset($this->functionTranslators[$function->getName()])) {
|
206 |
throw new ExpressionErrorException(sprintf('Function "%s" not supported.', $function->getName()));
|
207 |
}
|
208 |
|
209 |
-
return
|
210 |
}
|
211 |
|
212 |
/**
|
213 |
-
* @param string $pseudoClass
|
214 |
-
*
|
215 |
-
* @return XPathExpr
|
216 |
-
*
|
217 |
* @throws ExpressionErrorException
|
218 |
*/
|
219 |
-
public function addPseudoClass(XPathExpr $xpath, $pseudoClass)
|
220 |
{
|
221 |
if (!isset($this->pseudoClassTranslators[$pseudoClass])) {
|
222 |
throw new ExpressionErrorException(sprintf('Pseudo-class "%s" not supported.', $pseudoClass));
|
223 |
}
|
224 |
|
225 |
-
return
|
226 |
}
|
227 |
|
228 |
/**
|
229 |
-
* @param string $operator
|
230 |
-
* @param string $attribute
|
231 |
-
* @param string $value
|
232 |
-
*
|
233 |
-
* @return XPathExpr
|
234 |
-
*
|
235 |
* @throws ExpressionErrorException
|
236 |
*/
|
237 |
-
public function addAttributeMatching(XPathExpr $xpath, $operator, $attribute, $value)
|
238 |
{
|
239 |
if (!isset($this->attributeMatchingTranslators[$operator])) {
|
240 |
throw new ExpressionErrorException(sprintf('Attribute matcher operator "%s" not supported.', $operator));
|
241 |
}
|
242 |
|
243 |
-
return
|
244 |
}
|
245 |
|
246 |
/**
|
247 |
-
* @param string $css
|
248 |
-
*
|
249 |
* @return SelectorNode[]
|
250 |
*/
|
251 |
-
private function parseSelectors($css)
|
252 |
{
|
253 |
foreach ($this->shortcutParsers as $shortcut) {
|
254 |
$tokens = $shortcut->parse($css);
|
50 |
|
51 |
public function __construct(ParserInterface $parser = null)
|
52 |
{
|
53 |
+
$this->mainParser = $parser ?? new Parser();
|
54 |
|
55 |
$this
|
56 |
->registerExtension(new Extension\NodeExtension())
|
61 |
;
|
62 |
}
|
63 |
|
64 |
+
public static function getXpathLiteral(string $element): string
|
|
|
|
|
|
|
|
|
|
|
65 |
{
|
66 |
if (false === strpos($element, "'")) {
|
67 |
return "'".$element."'";
|
90 |
/**
|
91 |
* {@inheritdoc}
|
92 |
*/
|
93 |
+
public function cssToXPath(string $cssExpr, string $prefix = 'descendant-or-self::'): string
|
94 |
{
|
95 |
$selectors = $this->parseSelectors($cssExpr);
|
96 |
|
109 |
/**
|
110 |
* {@inheritdoc}
|
111 |
*/
|
112 |
+
public function selectorToXPath(SelectorNode $selector, string $prefix = 'descendant-or-self::'): string
|
113 |
{
|
114 |
return ($prefix ?: '').$this->nodeToXPath($selector);
|
115 |
}
|
116 |
|
117 |
/**
|
|
|
|
|
118 |
* @return $this
|
119 |
*/
|
120 |
+
public function registerExtension(Extension\ExtensionInterface $extension): self
|
121 |
{
|
122 |
$this->extensions[$extension->getName()] = $extension;
|
123 |
|
131 |
}
|
132 |
|
133 |
/**
|
|
|
|
|
|
|
|
|
134 |
* @throws ExpressionErrorException
|
135 |
*/
|
136 |
+
public function getExtension(string $name): Extension\ExtensionInterface
|
137 |
{
|
138 |
if (!isset($this->extensions[$name])) {
|
139 |
throw new ExpressionErrorException(sprintf('Extension "%s" not registered.', $name));
|
143 |
}
|
144 |
|
145 |
/**
|
|
|
|
|
146 |
* @return $this
|
147 |
*/
|
148 |
+
public function registerParserShortcut(ParserInterface $shortcut): self
|
149 |
{
|
150 |
$this->shortcutParsers[] = $shortcut;
|
151 |
|
153 |
}
|
154 |
|
155 |
/**
|
|
|
|
|
156 |
* @throws ExpressionErrorException
|
157 |
*/
|
158 |
+
public function nodeToXPath(NodeInterface $node): XPathExpr
|
159 |
{
|
160 |
if (!isset($this->nodeTranslators[$node->getNodeName()])) {
|
161 |
throw new ExpressionErrorException(sprintf('Node "%s" not supported.', $node->getNodeName()));
|
162 |
}
|
163 |
|
164 |
+
return $this->nodeTranslators[$node->getNodeName()]($node, $this);
|
165 |
}
|
166 |
|
167 |
/**
|
|
|
|
|
|
|
|
|
168 |
* @throws ExpressionErrorException
|
169 |
*/
|
170 |
+
public function addCombination(string $combiner, NodeInterface $xpath, NodeInterface $combinedXpath): XPathExpr
|
171 |
{
|
172 |
if (!isset($this->combinationTranslators[$combiner])) {
|
173 |
throw new ExpressionErrorException(sprintf('Combiner "%s" not supported.', $combiner));
|
174 |
}
|
175 |
|
176 |
+
return $this->combinationTranslators[$combiner]($this->nodeToXPath($xpath), $this->nodeToXPath($combinedXpath));
|
177 |
}
|
178 |
|
179 |
/**
|
|
|
|
|
180 |
* @throws ExpressionErrorException
|
181 |
*/
|
182 |
+
public function addFunction(XPathExpr $xpath, FunctionNode $function): XPathExpr
|
183 |
{
|
184 |
if (!isset($this->functionTranslators[$function->getName()])) {
|
185 |
throw new ExpressionErrorException(sprintf('Function "%s" not supported.', $function->getName()));
|
186 |
}
|
187 |
|
188 |
+
return $this->functionTranslators[$function->getName()]($xpath, $function);
|
189 |
}
|
190 |
|
191 |
/**
|
|
|
|
|
|
|
|
|
192 |
* @throws ExpressionErrorException
|
193 |
*/
|
194 |
+
public function addPseudoClass(XPathExpr $xpath, string $pseudoClass): XPathExpr
|
195 |
{
|
196 |
if (!isset($this->pseudoClassTranslators[$pseudoClass])) {
|
197 |
throw new ExpressionErrorException(sprintf('Pseudo-class "%s" not supported.', $pseudoClass));
|
198 |
}
|
199 |
|
200 |
+
return $this->pseudoClassTranslators[$pseudoClass]($xpath);
|
201 |
}
|
202 |
|
203 |
/**
|
|
|
|
|
|
|
|
|
|
|
|
|
204 |
* @throws ExpressionErrorException
|
205 |
*/
|
206 |
+
public function addAttributeMatching(XPathExpr $xpath, string $operator, string $attribute, $value): XPathExpr
|
207 |
{
|
208 |
if (!isset($this->attributeMatchingTranslators[$operator])) {
|
209 |
throw new ExpressionErrorException(sprintf('Attribute matcher operator "%s" not supported.', $operator));
|
210 |
}
|
211 |
|
212 |
+
return $this->attributeMatchingTranslators[$operator]($xpath, $attribute, $value);
|
213 |
}
|
214 |
|
215 |
/**
|
|
|
|
|
216 |
* @return SelectorNode[]
|
217 |
*/
|
218 |
+
private function parseSelectors(string $css): array
|
219 |
{
|
220 |
foreach ($this->shortcutParsers as $shortcut) {
|
221 |
$tokens = $shortcut->parse($css);
|
vendor/symfony/css-selector/XPath/TranslatorInterface.php
CHANGED
@@ -27,20 +27,11 @@ interface TranslatorInterface
|
|
27 |
{
|
28 |
/**
|
29 |
* Translates a CSS selector to an XPath expression.
|
30 |
-
*
|
31 |
-
* @param string $cssExpr
|
32 |
-
* @param string $prefix
|
33 |
-
*
|
34 |
-
* @return string
|
35 |
*/
|
36 |
-
public function cssToXPath($cssExpr, $prefix = 'descendant-or-self::');
|
37 |
|
38 |
/**
|
39 |
* Translates a parsed selector node to an XPath expression.
|
40 |
-
*
|
41 |
-
* @param string $prefix
|
42 |
-
*
|
43 |
-
* @return string
|
44 |
*/
|
45 |
-
public function selectorToXPath(SelectorNode $selector, $prefix = 'descendant-or-self::');
|
46 |
}
|
27 |
{
|
28 |
/**
|
29 |
* Translates a CSS selector to an XPath expression.
|
|
|
|
|
|
|
|
|
|
|
30 |
*/
|
31 |
+
public function cssToXPath(string $cssExpr, string $prefix = 'descendant-or-self::'): string;
|
32 |
|
33 |
/**
|
34 |
* Translates a parsed selector node to an XPath expression.
|
|
|
|
|
|
|
|
|
35 |
*/
|
36 |
+
public function selectorToXPath(SelectorNode $selector, string $prefix = 'descendant-or-self::'): string;
|
37 |
}
|
vendor/symfony/css-selector/XPath/XPathExpr.php
CHANGED
@@ -27,13 +27,7 @@ class XPathExpr
|
|
27 |
private $element;
|
28 |
private $condition;
|
29 |
|
30 |
-
|
31 |
-
* @param string $path
|
32 |
-
* @param string $element
|
33 |
-
* @param string $condition
|
34 |
-
* @param bool $starPrefix
|
35 |
-
*/
|
36 |
-
public function __construct($path = '', $element = '*', $condition = '', $starPrefix = false)
|
37 |
{
|
38 |
$this->path = $path;
|
39 |
$this->element = $element;
|
@@ -44,36 +38,24 @@ class XPathExpr
|
|
44 |
}
|
45 |
}
|
46 |
|
47 |
-
|
48 |
-
* @return string
|
49 |
-
*/
|
50 |
-
public function getElement()
|
51 |
{
|
52 |
return $this->element;
|
53 |
}
|
54 |
|
55 |
-
|
56 |
-
* @return $this
|
57 |
-
*/
|
58 |
-
public function addCondition($condition)
|
59 |
{
|
60 |
$this->condition = $this->condition ? sprintf('(%s) and (%s)', $this->condition, $condition) : $condition;
|
61 |
|
62 |
return $this;
|
63 |
}
|
64 |
|
65 |
-
|
66 |
-
* @return string
|
67 |
-
*/
|
68 |
-
public function getCondition()
|
69 |
{
|
70 |
return $this->condition;
|
71 |
}
|
72 |
|
73 |
-
|
74 |
-
* @return $this
|
75 |
-
*/
|
76 |
-
public function addNameTest()
|
77 |
{
|
78 |
if ('*' !== $this->element) {
|
79 |
$this->addCondition('name() = '.Translator::getXpathLiteral($this->element));
|
@@ -83,10 +65,7 @@ class XPathExpr
|
|
83 |
return $this;
|
84 |
}
|
85 |
|
86 |
-
|
87 |
-
* @return $this
|
88 |
-
*/
|
89 |
-
public function addStarPrefix()
|
90 |
{
|
91 |
$this->path .= '*/';
|
92 |
|
@@ -96,12 +75,9 @@ class XPathExpr
|
|
96 |
/**
|
97 |
* Joins another XPathExpr with a combiner.
|
98 |
*
|
99 |
-
* @param string $combiner
|
100 |
-
* @param XPathExpr $expr
|
101 |
-
*
|
102 |
* @return $this
|
103 |
*/
|
104 |
-
public function join($combiner, self $expr)
|
105 |
{
|
106 |
$path = $this->__toString().$combiner;
|
107 |
|
@@ -116,10 +92,7 @@ class XPathExpr
|
|
116 |
return $this;
|
117 |
}
|
118 |
|
119 |
-
|
120 |
-
* @return string
|
121 |
-
*/
|
122 |
-
public function __toString()
|
123 |
{
|
124 |
$path = $this->path.$this->element;
|
125 |
$condition = null === $this->condition || '' === $this->condition ? '' : '['.$this->condition.']';
|
27 |
private $element;
|
28 |
private $condition;
|
29 |
|
30 |
+
public function __construct(string $path = '', string $element = '*', string $condition = '', bool $starPrefix = false)
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
{
|
32 |
$this->path = $path;
|
33 |
$this->element = $element;
|
38 |
}
|
39 |
}
|
40 |
|
41 |
+
public function getElement(): string
|
|
|
|
|
|
|
42 |
{
|
43 |
return $this->element;
|
44 |
}
|
45 |
|
46 |
+
public function addCondition(string $condition): self
|
|
|
|
|
|
|
47 |
{
|
48 |
$this->condition = $this->condition ? sprintf('(%s) and (%s)', $this->condition, $condition) : $condition;
|
49 |
|
50 |
return $this;
|
51 |
}
|
52 |
|
53 |
+
public function getCondition(): string
|
|
|
|
|
|
|
54 |
{
|
55 |
return $this->condition;
|
56 |
}
|
57 |
|
58 |
+
public function addNameTest(): self
|
|
|
|
|
|
|
59 |
{
|
60 |
if ('*' !== $this->element) {
|
61 |
$this->addCondition('name() = '.Translator::getXpathLiteral($this->element));
|
65 |
return $this;
|
66 |
}
|
67 |
|
68 |
+
public function addStarPrefix(): self
|
|
|
|
|
|
|
69 |
{
|
70 |
$this->path .= '*/';
|
71 |
|
75 |
/**
|
76 |
* Joins another XPathExpr with a combiner.
|
77 |
*
|
|
|
|
|
|
|
78 |
* @return $this
|
79 |
*/
|
80 |
+
public function join(string $combiner, self $expr): self
|
81 |
{
|
82 |
$path = $this->__toString().$combiner;
|
83 |
|
92 |
return $this;
|
93 |
}
|
94 |
|
95 |
+
public function __toString(): string
|
|
|
|
|
|
|
96 |
{
|
97 |
$path = $this->path.$this->element;
|
98 |
$condition = null === $this->condition || '' === $this->condition ? '' : '['.$this->condition.']';
|
vendor/symfony/css-selector/composer.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
{
|
2 |
"name": "symfony/css-selector",
|
3 |
"type": "library",
|
4 |
-
"description": "
|
5 |
"keywords": [],
|
6 |
"homepage": "https://symfony.com",
|
7 |
"license": "MIT",
|
@@ -20,7 +20,7 @@
|
|
20 |
}
|
21 |
],
|
22 |
"require": {
|
23 |
-
"php": "
|
24 |
},
|
25 |
"autoload": {
|
26 |
"psr-4": { "Symfony\\Component\\CssSelector\\": "" },
|
1 |
{
|
2 |
"name": "symfony/css-selector",
|
3 |
"type": "library",
|
4 |
+
"description": "Converts CSS selectors to XPath expressions",
|
5 |
"keywords": [],
|
6 |
"homepage": "https://symfony.com",
|
7 |
"license": "MIT",
|
20 |
}
|
21 |
],
|
22 |
"require": {
|
23 |
+
"php": ">=7.2.5"
|
24 |
},
|
25 |
"autoload": {
|
26 |
"psr-4": { "Symfony\\Component\\CssSelector\\": "" },
|
vendor/symfony/css-selector/phpunit.xml.dist
DELETED
@@ -1,31 +0,0 @@
|
|
1 |
-
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
-
|
3 |
-
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
4 |
-
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.2/phpunit.xsd"
|
5 |
-
backupGlobals="false"
|
6 |
-
colors="true"
|
7 |
-
bootstrap="vendor/autoload.php"
|
8 |
-
failOnRisky="true"
|
9 |
-
failOnWarning="true"
|
10 |
-
>
|
11 |
-
<php>
|
12 |
-
<ini name="error_reporting" value="-1" />
|
13 |
-
</php>
|
14 |
-
|
15 |
-
<testsuites>
|
16 |
-
<testsuite name="Symfony CssSelector Component Test Suite">
|
17 |
-
<directory>./Tests/</directory>
|
18 |
-
</testsuite>
|
19 |
-
</testsuites>
|
20 |
-
|
21 |
-
<filter>
|
22 |
-
<whitelist>
|
23 |
-
<directory>./</directory>
|
24 |
-
<exclude>
|
25 |
-
<directory>./Resources</directory>
|
26 |
-
<directory>./Tests</directory>
|
27 |
-
<directory>./vendor</directory>
|
28 |
-
</exclude>
|
29 |
-
</whitelist>
|
30 |
-
</filter>
|
31 |
-
</phpunit>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wp-user-avatar.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: ProfilePress
|
4 |
* Plugin URI: https://profilepress.net
|
5 |
* Description: The modern WordPress membership and user profile plugin.
|
6 |
-
* Version: 3.1.
|
7 |
* Author: ProfilePress Team
|
8 |
* Author URI: https://profilepress.net
|
9 |
* Text Domain: wp-user-avatar
|
@@ -14,7 +14,7 @@
|
|
14 |
defined('ABSPATH') or die("No script kiddies please!");
|
15 |
|
16 |
define('PROFILEPRESS_SYSTEM_FILE_PATH', __FILE__);
|
17 |
-
define('PPRESS_VERSION_NUMBER', '3.1.
|
18 |
|
19 |
require __DIR__ . '/vendor/autoload.php';
|
20 |
|
3 |
* Plugin Name: ProfilePress
|
4 |
* Plugin URI: https://profilepress.net
|
5 |
* Description: The modern WordPress membership and user profile plugin.
|
6 |
+
* Version: 3.1.13
|
7 |
* Author: ProfilePress Team
|
8 |
* Author URI: https://profilepress.net
|
9 |
* Text Domain: wp-user-avatar
|
14 |
defined('ABSPATH') or die("No script kiddies please!");
|
15 |
|
16 |
define('PROFILEPRESS_SYSTEM_FILE_PATH', __FILE__);
|
17 |
+
define('PPRESS_VERSION_NUMBER', '3.1.13');
|
18 |
|
19 |
require __DIR__ . '/vendor/autoload.php';
|
20 |
|