Commit realizado el 12:13:52 08-04-2024
@@ -0,0 +1,102 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>Generated by IcoMoon</metadata>
|
||||
<defs>
|
||||
<font id="Rank-Math" horiz-adv-x="1024">
|
||||
<font-face units-per-em="1024" ascent="1024" descent="0" />
|
||||
<missing-glyph horiz-adv-x="1024" />
|
||||
<glyph unicode=" " d="" />
|
||||
<glyph unicode="" glyph-name="rank-math" d="M1024 503.533l-168.827-7.602 29.767-46.545-281.489-179.932-279.273 117.317-324.178-135.137 22.474-53.948 301.658 125.695 284.969-119.689 307.4 196.4 29.767-46.545zM119.91 330.783l204.312 85.133 9.952-4.189v120.974h-214.264zM587.359 826.314v-520.977l16.091-6.649 198.217 126.448v401.177zM353.657 403.438l214.264-90.032v366.136h-214.264z" />
|
||||
<glyph unicode="" glyph-name="google" d="M984 556.8h-459.2v-136h329.6c-17.6-188.8-171.2-270.4-320-270.4-188.8 0-356.8 147.2-356.8 360 0 204.8 160 360 356.8 360 150.4 0 241.6-97.6 241.6-97.6l92.8 97.6s-124.8 136-340.8 136c-284.8 1.6-502.4-236.8-502.4-494.4 0-249.6 204.8-496 507.2-496 267.2 0 459.2 180.8 459.2 451.2 1.6 56-8 89.6-8 89.6z" />
|
||||
<glyph unicode="" glyph-name="copy" d="M803.2 75.2h-129.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h129.6c16 0 28.8 12.8 28.8 28.8s-14.4 28.8-28.8 28.8zM572.8 75.2h-124.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h124.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM812.8 755.2h-11.2v155.2c0 51.2-41.6 94.4-94.4 94.4h-593.6c-51.2 0-94.4-41.6-94.4-94.4v-593.6c0-51.2 41.6-94.4 94.4-94.4h152v-6.4c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v444.8c0 20.8 17.6 38.4 38.4 38.4h452.8c16 0 28.8 12.8 28.8 28.8s-14.4 27.2-30.4 27.2zM265.6 660.8v-382.4h-152c-20.8 0-38.4 17.6-38.4 38.4v593.6c0 20.8 17.6 38.4 38.4 38.4h593.6c20.8 0 38.4-17.6 38.4-38.4v-155.2h-385.6c-51.2 0-94.4-41.6-94.4-94.4zM913.6 702.4c19.2 0 35.2-16 35.2-35.2 0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8c0 49.6-40 91.2-91.2 91.2-16 0-28.8-12.8-28.8-28.8s11.2-27.2 27.2-27.2zM976 595.2c-16 0-28.8-12.8-28.8-28.8v-124.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v124.8c0 16-12.8 28.8-28.8 28.8zM976 368c-16 0-28.8-12.8-28.8-28.8v-124.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v124.8c0 16-12.8 28.8-28.8 28.8zM976 139.2c-16 0-28.8-12.8-28.8-28.8 0-19.2-16-35.2-35.2-35.2-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8c49.6 0 91.2 40 91.2 91.2 1.6 17.6-11.2 30.4-27.2 30.4zM356.8 75.2c-19.2 0-35.2 16-35.2 35.2 0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8c0-49.6 40-91.2 91.2-91.2 16 0 28.8 12.8 28.8 28.8s-11.2 27.2-27.2 27.2z" />
|
||||
<glyph unicode="" glyph-name="send" d="M953.598 548.786c-6.4 11.2-16 19.2-27.2 25.6l-737.6 412.8c-12.8 6.4-27.2 9.6-41.6 8s-27.2-6.4-38.4-16c-11.2-9.6-19.2-22.4-22.4-35.2-4.8-14.4-3.2-28.8 1.6-43.2l137.6-388.8-137.6-388.8c-4.8-14.4-4.8-28.8-1.6-41.6 3.2-14.4 11.2-25.6 22.4-35.2s24-14.4 38.4-16c1.6 0 4.8 0 6.4 0 11.2 0 24 3.2 35.2 9.6l737.6 412.8c11.2 6.4 20.8 14.4 27.2 25.6s9.6 24 9.6 35.2c0 11.2-3.2 24-9.6 35.2zM156.798 923.186l668.8-374.4h-536l-132.8 374.4zM156.798 100.786l134.4 374.4h536l-670.4-374.4z" />
|
||||
<glyph unicode="" glyph-name="enter-key" d="M984.615 945.231h-630.154c-21.701 0-39.385-17.684-39.385-39.385 0 0 0-275.692 0-354.462s-78.769-78.769-78.769-78.769h-196.923c-21.701 0-39.385-17.684-39.385-39.385v-315.077c0-21.701 17.684-39.385 39.385-39.385h945.231c21.701 0 39.385 17.684 39.385 39.385v787.692c0 21.701-17.684 39.385-39.385 39.385zM866.462 472.615c0-56.556-52.618-157.538-157.538-157.538h-141.233l70.617-70.617c15.399-15.399 15.399-40.29 0-55.69-7.68-7.68-17.762-11.54-27.845-11.54s-20.165 3.86-27.845 11.54l-137.846 137.846c-15.399 15.399-15.399 40.29 0 55.69l137.846 137.846c15.399 15.399 40.29 15.399 55.69 0s15.399-40.29 0-55.69l-70.617-70.617h141.233c55.060 0 78.769 59.786 78.769 78.769v78.769c0 21.78 17.605 39.385 39.385 39.385s39.385-17.605 39.385-39.385v-78.769z" />
|
||||
<glyph unicode="" glyph-name="content-ai" horiz-adv-x="971" d="M946.149 337.134c-6.216 3.299-13.59 5.236-21.416 5.236-17.86 0-33.365-10.087-41.127-24.875l-0.122-0.255c-71.62-134.316-210.801-224.182-370.972-224.182-231.424 0-419.030 187.606-419.030 419.030s187.606 419.030 419.030 419.030c34.885 0 68.774-4.263 101.175-12.296l-2.88 0.604c9.56 34.736 33.501 62.584 64.849 77.212l0.734 0.307c-48.958 17.132-105.399 27.028-164.152 27.028-282.77 0-512-229.23-512-512s229.23-512 512-512c195.805 0 365.937 109.914 452.065 271.407l1.342 2.757c3.437 6.322 5.458 13.845 5.458 21.839 0 17.791-10.009 33.244-24.703 41.036l-0.252 0.122zM805.699 888.59c0-43.948-35.627-79.575-79.575-79.575s-79.575 35.627-79.575 79.575c0 43.948 35.627 79.575 79.575 79.575s79.575-35.627 79.575-79.575zM775.46 780.036c-14.472-6.825-31.436-10.809-49.33-10.809-0.002 0-0.005 0-0.007 0v0c-60.177 0.048-109.93 44.62-118.096 102.551l-0.073 0.632c-26.937 6.982-57.862 10.99-89.723 10.99-205.311 0-371.749-166.438-371.749-371.749s166.438-371.749 371.749-371.749c205.311 0 371.749 166.438 371.749 371.749 0 105.43-43.889 200.608-114.392 268.263l-0.128 0.122zM603.445 363.261c0-27.468-22.267-49.734-49.734-49.734s-49.734 22.267-49.734 49.734v4.244c-28.052-27.488-66.357-44.604-108.658-45.092l-0.094-0.001c-94.23 0-170.556 86.803-170.556 193.965s76.326 193.898 170.556 193.898c42.706-0.355 81.322-17.575 109.572-45.315l-0.024 0.023c3.108 24.641 23.934 43.508 49.167 43.508 26.754 0 48.554-21.209 49.503-47.731l0.002-0.087zM772.609 363.261c0-27.468-22.267-49.734-49.734-49.734s-49.734 22.267-49.734 49.734v297.412c0 27.468 22.267 49.734 49.734 49.734s49.734-22.267 49.734-49.734v0zM415.648 622.808c-53.979 0-97.679-47.679-97.679-106.1s43.7-106.498 97.679-106.498 97.679 47.679 97.679 106.498-43.7 106.1-97.679 106.1z" />
|
||||
<glyph unicode="" glyph-name="bot" d="M675.2 964.8c-46.4 25.6-100.8 40-158.4 40h-1.6c-83.2-1.6-161.6-27.2-220.8-76.8-78.4-64-123.2-160-123.2-260.8v-264c0-27.2 22.4-49.6 49.6-49.6h38.4c19.2-75.2 80-136 156.8-156.8l24-6.4v-121.6c0-27.2 22.4-49.6 49.6-49.6h316.8c27.2 0 49.6 22.4 49.6 49.6v598.4c-3.2 124.8-68.8 235.2-180.8 297.6zM796.8 75.2h-304v158.4l-64 17.6c-62.4 17.6-108.8 68.8-120 132.8l-3.2 25.6h-78.4v257.6c0 84.8 36.8 163.2 102.4 217.6 49.6 41.6 115.2 64 187.2 64 48 0 94.4-11.2 131.2-32 92.8-52.8 148.8-145.6 148.8-248v-593.6zM675.2 667.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-28.8c0 24-19.2 43.2-43.2 43.2v36.8c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-36.8h-65.6v36.8c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-36.8c-24 0-43.2-19.2-43.2-43.2h-28.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h28.8v-67.2h-28.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h28.8c0-24 19.2-43.2 43.2-43.2v-28.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v28.8h67.2v-28.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v28.8c24 0 43.2 19.2 43.2 43.2h28.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-28.8v67.2h27.2zM435.2 555.2v155.2h155.2v-155.2h-155.2z" />
|
||||
<glyph unicode="" glyph-name="mobile" d="M512 251.2c-32 0-56-25.6-56-56 0-32 25.6-56 56-56s56 25.6 56 56-24 56-56 56zM560 875.2h-96c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h96c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM720 1003.2h-416c-51.2 0-92.8-41.6-92.8-92.8v-800c0-51.2 41.6-92.8 92.8-92.8h416c51.2 0 92.8 41.6 92.8 92.8v801.6c0 51.2-41.6 91.2-92.8 91.2zM756.8 112c0-19.2-16-36.8-36.8-36.8h-416c-19.2 0-36.8 16-36.8 36.8v800c0 19.2 16 36.8 36.8 36.8h416c19.2 0 36.8-16 36.8-36.8v-800z" />
|
||||
<glyph unicode="" glyph-name="seo-description" d="M91.2 225.6v572.8c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-572.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8zM288 564.8h409.6c54.4 0 97.6 43.2 97.6 97.6v30.4c0 54.4-43.2 97.6-97.6 97.6h-409.6c-54.4 0-97.6-43.2-97.6-97.6v-30.4c0-52.8 43.2-97.6 97.6-97.6zM246.4 694.4c0 22.4 19.2 41.6 41.6 41.6h409.6c22.4 0 41.6-19.2 41.6-41.6v-30.4c0-22.4-19.2-41.6-41.6-41.6h-409.6c-22.4 0-41.6 19.2-41.6 41.6v30.4zM190.4 329.6c0-54.4 43.2-97.6 97.6-97.6h286.4c54.4 0 97.6 43.2 97.6 97.6v30.4c0 54.4-43.2 97.6-97.6 97.6h-286.4c-54.4 0-97.6-43.2-97.6-97.6v-30.4zM246.4 361.6c0 22.4 19.2 41.6 41.6 41.6h286.4c22.4 0 41.6-19.2 41.6-41.6v-30.4c0-22.4-19.2-41.6-41.6-41.6h-286.4c-22.4 0-41.6 19.2-41.6 41.6v30.4zM891.2 1003.2h-812.8c-14.4 0-27.2-11.2-27.2-27.2s12.8-28.8 27.2-28.8h812.8c22.4 0 41.6-19.2 41.6-41.6v-788.8c0-22.4-19.2-41.6-41.6-41.6h-812.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h812.8c54.4 0 97.6 43.2 97.6 97.6v790.4c0 54.4-44.8 97.6-97.6 97.6z" />
|
||||
<glyph unicode="" glyph-name="role-manager" d="M454.4 587.2c118.4 0 214.4 92.8 214.4 208s-96 208-214.4 208-214.4-92.8-214.4-208 96-208 214.4-208zM454.4 947.2c88 0 158.4-68.8 158.4-152s-72-152-158.4-152c-88 0-158.4 68.8-158.4 152s70.4 152 158.4 152zM454.4 504c-208 0-377.6-168-377.6-376v-48c0-32 27.2-59.2 59.2-59.2h304c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-304c-1.6 0-3.2 1.6-3.2 3.2v48c0 174.4 144 318.4 321.6 318.4 16 0 28.8 12.8 28.8 28.8s-12.8 27.2-28.8 27.2zM737.6 438.4c-115.2 0-209.6-94.4-209.6-209.6s94.4-209.6 209.6-209.6c115.2 0 209.6 94.4 209.6 209.6s-94.4 209.6-209.6 209.6zM737.6 382.4c35.2 0 68.8-12.8 94.4-33.6l-220.8-204.8c-16 24-25.6 52.8-25.6 84.8 0 84.8 67.2 153.6 152 153.6zM737.6 75.2c-32 0-62.4 9.6-88 27.2l219.2 203.2c12.8-22.4 20.8-49.6 20.8-76.8 1.6-84.8-67.2-153.6-152-153.6z" />
|
||||
<glyph unicode="" glyph-name="calendar" d="M912 857.6h-97.6v46.4c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-46.4h-491.2v46.4c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-46.4h-96c-51.2 0-92.8-41.6-92.8-92.8v-580.8c0-51.2 41.6-92.8 92.8-92.8h800c51.2 0 92.8 41.6 92.8 92.8v580.8c0 51.2-41.6 92.8-92.8 92.8zM76.8 568h160v-182.4h-160v182.4zM291.2 568h192v-182.4h-192v182.4zM484.8 329.6v-180.8h-192v180.8h192zM540.8 329.6h192v-180.8h-192v180.8zM540.8 385.6v182.4h192v-182.4h-192zM788.8 568h160v-182.4h-160v182.4zM112 801.6h97.6v-44.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v44.8h492.8v-44.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v44.8h94.4c19.2 0 36.8-16 36.8-36.8v-140.8h-872v140.8c0 20.8 16 36.8 35.2 36.8zM76.8 184v145.6h160v-180.8h-124.8c-19.2 0-35.2 16-35.2 35.2zM912 148.8h-123.2v180.8h160v-145.6c0-19.2-17.6-35.2-36.8-35.2z" />
|
||||
<glyph unicode="" glyph-name="sitemap" d="M313.6 868.8c-16 0-28.8-12.8-28.8-28.8v-1.6c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v1.6c-1.6 16-14.4 28.8-28.8 28.8zM739.2 867.2h-81.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h81.6c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM928 275.2h-17.6v139.2c0 54.4-44.8 99.2-99.2 99.2h-272c0 3.2 1.6 4.8 1.6 8v158.4h275.2c41.6 0 76.8 33.6 76.8 76.8v160c0 41.6-33.6 76.8-76.8 76.8h-606.4c-41.6 0-76.8-33.6-76.8-76.8v-160c0-41.6 33.6-76.8 76.8-76.8h275.2v-158.4c0-3.2 0-4.8 1.6-8h-272c-54.4 0-99.2-44.8-99.2-99.2v-139.2h-19.2c-41.6 0-76.8-33.6-76.8-76.8v-91.2c0-41.6 33.6-76.8 76.8-76.8h91.2c41.6 0 76.8 33.6 76.8 76.8v91.2c0 41.6-33.6 76.8-76.8 76.8h-17.6v139.2c0 24 19.2 43.2 43.2 43.2h270.4v-184h-17.6c-41.6 0-76.8-33.6-76.8-76.8v-91.2c0-41.6 33.6-76.8 76.8-76.8h91.2c41.6 0 76.8 33.6 76.8 76.8v91.2c0 41.6-33.6 76.8-76.8 76.8h-17.6v185.6h270.4c24 0 43.2-19.2 43.2-43.2v-139.2h-17.6c-41.6 0-76.8-33.6-76.8-76.8v-91.2c0-41.6 33.6-76.8 76.8-76.8h92.8c41.6 0 76.8 33.6 76.8 76.8v91.2c0 40-35.2 75.2-76.8 75.2zM188.8 756.8v160c0 11.2 9.6 20.8 20.8 20.8h606.4c11.2 0 20.8-9.6 20.8-20.8v-160c0-11.2-9.6-20.8-20.8-20.8h-606.4c-11.2 1.6-20.8 9.6-20.8 20.8zM208 198.4v-91.2c0-11.2-9.6-20.8-20.8-20.8h-91.2c-11.2 0-20.8 9.6-20.8 20.8v91.2c0 11.2 9.6 20.8 20.8 20.8h91.2c11.2 0 20.8-9.6 20.8-20.8zM577.6 198.4v-91.2c0-11.2-9.6-20.8-20.8-20.8h-91.2c-11.2 0-20.8 9.6-20.8 20.8v91.2c0 11.2 9.6 20.8 20.8 20.8h91.2c12.8 0 20.8-9.6 20.8-20.8zM948.8 107.2c0-11.2-9.6-20.8-20.8-20.8h-91.2c-11.2 0-20.8 9.6-20.8 20.8v91.2c0 11.2 9.6 20.8 20.8 20.8h91.2c11.2 0 20.8-9.6 20.8-20.8v-91.2z" />
|
||||
<glyph unicode="" glyph-name="import" d="M468.8 372.8c9.6-9.6 24-16 36.8-16 14.4 0 27.2 4.8 36.8 16l118.4 118.4c11.2 11.2 11.2 28.8 0 40s-28.8 11.2-40 0l-88-88v406.4c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-406.4l-88 88c-11.2 11.2-28.8 11.2-40 0s-11.2-28.8 0-40l121.6-118.4zM934.4 540.8h-147.2c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h147.2c8 0 14.4-6.4 14.4-14.4v-187.2c0-44.8-36.8-80-80-80h-712c-44.8 0-80 36.8-80 80v188.8c0 8 6.4 14.4 14.4 14.4h147.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-148.8c-38.4 0-70.4-32-70.4-70.4v-187.2c0-75.2 60.8-136 136-136h710.4c75.2 0 136 60.8 136 136v185.6c3.2 38.4-28.8 70.4-67.2 70.4z" />
|
||||
<glyph unicode="" glyph-name="export" d="M371.2 694.4c6.4 0 14.4 3.2 19.2 8l92.8 92.8v-411.2c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v403.2l83.2-84.8c11.2-11.2 28.8-11.2 40 0s11.2 28.8 0 40l-118.4 118.4c-9.6 9.6-24 16-36.8 16-14.4 0-27.2-4.8-36.8-16l-120-118.4c-11.2-11.2-11.2-28.8 0-40 6.4-4.8 12.8-8 19.2-8zM934.4 540.8h-147.2c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h147.2c8 0 14.4-6.4 14.4-14.4v-187.2c0-44.8-36.8-80-80-80h-712c-44.8 0-80 36.8-80 80v188.8c0 8 6.4 14.4 14.4 14.4h147.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-148.8c-38.4 0-70.4-32-70.4-70.4v-187.2c0-75.2 60.8-136 136-136h710.4c75.2 0 136 60.8 136 136v185.6c3.2 38.4-28.8 70.4-67.2 70.4z" />
|
||||
<glyph unicode="" glyph-name="settings" d="M513.6 708.8c-108.8 0-196.8-88-196.8-196.8s88-196.8 196.8-196.8c108.8 0 196.8 88 196.8 196.8-1.6 107.2-89.6 196.8-196.8 196.8zM513.6 371.2c-76.8 0-140.8 62.4-140.8 140.8s62.4 140.8 140.8 140.8 140.8-62.4 140.8-140.8c-1.6-78.4-64-140.8-140.8-140.8zM984 401.6l-99.2 54.4c3.2 20.8 4.8 40 4.8 59.2 0 22.4-1.6 41.6-4.8 60.8l100.8 56c17.6 9.6 24 30.4 16 49.6l-96 161.6c-9.6 16-30.4 22.4-49.6 16l-104-57.6c-6.4 4.8-12.8 11.2-19.2 16-17.6 16-35.2 30.4-59.2 41.6-4.8 1.6-8 8-8 12.8v62.4c0 38.4-32 70.4-70.4 70.4h-166.4c-38.4 0-70.4-32-70.4-70.4v-64c0-4.8-3.2-9.6-8-12.8-24-11.2-41.6-25.6-60.8-43.2-4.8-4.8-11.2-9.6-17.6-14.4l-92.8 52.8c-30.4 16-51.2 4.8-60.8-11.2l-91.2-156.8c-4.8-9.6-6.4-20.8-3.2-30.4s9.6-19.2 19.2-24l99.2-56c-3.2-17.6-4.8-36.8-4.8-59.2 0-20.8 1.6-40 3.2-59.2l-102.4-56c-17.6-9.6-24-30.4-16-49.6l94.4-161.6c9.6-16 30.4-22.4 49.6-16l104 57.6c6.4-4.8 12.8-9.6 17.6-14.4 19.2-16 35.2-30.4 60.8-41.6 4.8-1.6 8-8 8-12.8v-70.4c0-38.4 32-70.4 70.4-70.4h168c38.4 0 70.4 32 70.4 70.4v73.6c0 4.8 3.2 9.6 8 12.8 24 11.2 40 25.6 59.2 41.6 6.4 4.8 11.2 9.6 17.6 16l92.8-52.8c30.4-16 51.2-4.8 59.2 9.6l92.8 156.8c4.8 9.6 6.4 19.2 4.8 30.4 0 9.6-8 17.6-16 22.4zM865.6 233.6l-88 49.6c-19.2 11.2-43.2 8-59.2-4.8-8-6.4-14.4-12.8-20.8-17.6-17.6-14.4-28.8-25.6-46.4-33.6-24-11.2-40-36.8-40-62.4v-73.6c0-8-6.4-14.4-14.4-14.4h-168c-8 0-14.4 6.4-14.4 14.4v70.4c0 27.2-16 51.2-40 62.4-17.6 8-32 19.2-48 33.6-6.4 4.8-12.8 11.2-20.8 17.6-9.6 8-22.4 12.8-33.6 12.8-9.6 0-17.6-1.6-25.6-6.4l-88-49.6-75.2 128 84.8 48c20.8 11.2 30.4 33.6 28.8 56-1.6 16-3.2 33.6-3.2 51.2 0 19.2 1.6 35.2 3.2 49.6 4.8 24-6.4 48-27.2 59.2l-84.8 46.4 75.2 128 88-49.6c19.2-11.2 43.2-8 59.2 4.8 6.4 6.4 12.8 11.2 19.2 16 17.6 14.4 30.4 25.6 48 35.2 24 11.2 40 36.8 40 62.4v64c0 8 6.4 14.4 14.4 14.4h168c8 0 14.4-6.4 14.4-14.4v-62.4c0-27.2 16-51.2 40-62.4 17.6-8 30.4-19.2 46.4-33.6 6.4-6.4 14.4-11.2 22.4-17.6 16-12.8 40-16 59.2-4.8l88 49.6 75.2-128-84.8-46.4c-20.8-11.2-32-35.2-27.2-59.2 3.2-14.4 3.2-32 3.2-49.6 0-16-1.6-33.6-4.8-51.2-4.8-24 8-48 28.8-59.2l83.2-44.8-75.2-128z" />
|
||||
<glyph unicode="" glyph-name="desktop" d="M912 969.6h-800c-51.2 0-91.2-41.6-91.2-91.2v-505.6c0-51.2 41.6-92.8 92.8-92.8h273.6l-46.4-171.2h-81.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h505.6c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-81.6l-46.4 171.2h275.2c51.2 0 92.8 41.6 92.8 92.8v505.6c0 49.6-41.6 91.2-92.8 91.2zM625.6 110.4h-227.2l46.4 171.2h136l44.8-171.2zM948.8 372.8c0-19.2-16-36.8-36.8-36.8h-800c-19.2 0-36.8 16-36.8 36.8v505.6c0 19.2 16 36.8 36.8 36.8h800c19.2 0 36.8-16 36.8-36.8v-505.6z" />
|
||||
<glyph unicode="" glyph-name="htaccess" d="M300.8 566.4h307.2c16 0 28.8 12.8 28.8 28.8s-12.8 27.2-28.8 27.2h-307.2c-16 0-28.8-12.8-28.8-28.8s12.8-27.2 28.8-27.2zM300.8 396.8h307.2c16 0 28.8 12.8 28.8 28.8s-12.8 27.2-28.8 27.2h-307.2c-16 0-28.8-12.8-28.8-28.8s12.8-27.2 28.8-27.2zM723.2 283.2h-422.4c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h424c16 0 28.8 12.8 28.8 28.8s-14.4 28.8-30.4 28.8zM929.6 817.6h-403.2l-46.4 134.4c-9.6 30.4-38.4 49.6-70.4 49.6h-315.2c-41.6 0-73.6-32-73.6-73.6v-832c0-40 33.6-73.6 73.6-73.6h836.8c40 0 73.6 33.6 73.6 73.6v648c0 40-33.6 73.6-75.2 73.6zM948.8 96c0-9.6-8-17.6-17.6-17.6h-836.8c-9.6 0-17.6 8-17.6 17.6v832c0 9.6 8 17.6 17.6 17.6h316.8c8 0 14.4-4.8 16-11.2l52.8-153.6c3.2-11.2 14.4-19.2 27.2-19.2h424c9.6 0 17.6-8 17.6-17.6v-648z" />
|
||||
<glyph unicode="" glyph-name="robots" d="M659.2 561.6l-134.4 68.8c-8 4.8-17.6 4.8-25.6 0l-134.4-68.8c-9.6-4.8-14.4-14.4-14.4-25.6v-76.8c0-91.2 44.8-177.6 118.4-228.8l28.8-19.2c4.8-3.2 9.6-4.8 16-4.8s11.2 1.6 16 4.8l28.8 19.2c73.6 51.2 118.4 136 118.4 228.8v76.8c-1.6 11.2-8 20.8-17.6 25.6zM619.2 460.8c0-73.6-35.2-142.4-94.4-182.4l-12.8-9.6-12.8 8c-59.2 40-94.4 108.8-94.4 182.4v59.2l107.2 54.4 107.2-54.4v-57.6zM929.6 817.6h-403.2l-46.4 134.4c-9.6 30.4-38.4 49.6-70.4 49.6h-315.2c-41.6 0-73.6-32-73.6-73.6v-832c0-40 33.6-73.6 73.6-73.6h836.8c40 0 73.6 33.6 73.6 73.6v648c0 40-33.6 73.6-75.2 73.6zM948.8 96c0-9.6-8-17.6-17.6-17.6h-836.8c-9.6 0-17.6 8-17.6 17.6v832c0 9.6 8 17.6 17.6 17.6h316.8c8 0 14.4-4.8 16-11.2l52.8-153.6c3.2-11.2 14.4-19.2 27.2-19.2h424c9.6 0 17.6-8 17.6-17.6v-648z" />
|
||||
<glyph unicode="" glyph-name="category" d="M968 691.2v92.8c0 36.8-30.4 67.2-67.2 67.2h-408l-9.6 25.6c-6.4 14.4-20.8 24-35.2 24h-316.8c-46.4-1.6-83.2-40-83.2-84.8v-608c0-46.4 36.8-83.2 83.2-83.2h761.6c46.4 0 83.2 36.8 83.2 83.2v459.2c0 8-3.2 16-8 24zM900.8 793.6c6.4 0 11.2-4.8 11.2-11.2v-76.8h-361.6l-35.2 88h385.6zM920 208c0-14.4-12.8-27.2-27.2-27.2h-761.6c-14.4 0-27.2 12.8-27.2 27.2v608c0 14.4 12.8 27.2 27.2 27.2h304l64-158.4c8-20.8 28.8-35.2 51.2-35.2h369.6v-441.6z" />
|
||||
<glyph unicode="" glyph-name="link" d="M469.503 779.315l-132.214 130.64c-70.829 70.829-185.729 70.829-256.558 0-34.627-34.627-53.515-80.273-53.515-127.492s18.888-94.438 53.515-127.492l130.64-132.214c34.627-34.627 81.847-53.515 127.492-53.515s92.864 17.314 127.492 53.515c34.627 33.053 53.515 78.699 53.515 127.492 1.574 48.793-17.314 94.438-50.367 129.066zM250.72 562.107l-130.64 132.214c-23.61 23.61-37.775 55.089-37.775 89.716s12.592 64.533 37.775 89.716c25.184 25.184 56.663 36.201 89.716 36.201 31.479 0 64.533-12.592 89.716-36.201l130.64-130.64c23.61-23.61 36.201-55.089 36.201-89.716 0-26.758-7.87-50.367-22.036-70.829l-48.793 48.793c-11.018 11.018-28.332 11.018-39.349 0s-11.018-28.332 0-39.349l47.219-45.645c-48.793-31.479-111.752-25.184-152.675 15.74zM943.269 305.549l-132.214 130.64c-70.829 70.829-185.729 70.829-256.558 0-34.627-34.627-53.515-80.273-53.515-127.492 0-48.793 18.888-94.438 53.515-127.492l130.64-132.214c34.627-34.627 81.847-53.515 127.492-53.515s92.864 17.314 127.492 53.515c34.627 33.053 53.515 78.699 53.515 125.918 3.148 50.367-15.74 96.012-50.367 130.64zM903.919 88.341c-48.793-48.793-129.066-48.793-177.859 0l-130.64 132.214c-23.61 23.61-37.775 55.089-37.775 89.716 0 22.036 6.296 44.071 17.314 62.959l45.645-45.645c4.722-4.722 12.592-7.87 18.888-7.87s14.166 3.148 18.888 7.87c11.018 11.018 11.018 28.332 0 39.349l-47.219 47.219c22.036 14.166 47.219 22.036 72.403 22.036 31.479 0 64.533-12.592 89.716-36.201l130.64-130.64c23.61-23.61 36.201-56.663 36.201-89.716 0-36.201-12.592-67.681-36.201-91.29zM636.344 743.114c15.74 0 28.332 12.592 28.332 28.332v124.344c0 15.74-12.592 28.332-28.332 28.332s-28.332-12.592-28.332-28.332v-124.344c1.574-15.74 14.166-28.332 28.332-28.332zM774.854 604.604c0-15.74 12.592-28.332 28.332-28.332h124.344c15.74 0 28.332 12.592 28.332 28.332s-12.592 28.332-28.332 28.332h-124.344c-15.74 0-28.332-12.592-28.332-28.332zM697.729 664.415c7.87 0 14.166 3.148 18.888 7.87l105.456 107.030c11.018 11.018 11.018 28.332 0 39.349s-28.332 11.018-39.349 0l-105.456-107.030c-11.018-11.018-11.018-28.332 0-39.349 6.296-4.722 12.592-7.87 20.462-7.87zM387.656 215.833c-15.74 0-28.332-12.592-28.332-28.332v-124.344c0-15.74 12.592-28.332 28.332-28.332s28.332 12.592 28.332 28.332v124.344c-1.574 17.314-12.592 28.332-28.332 28.332zM208.223 355.916c0 15.74-12.592 28.332-28.332 28.332h-83.421c-15.74 0-28.332-12.592-28.332-28.332s12.592-28.332 28.332-28.332h83.421c15.74 0 28.332 12.592 28.332 28.332zM271.182 305.549l-105.456-105.456c-11.018-11.018-11.018-28.332 0-39.349 4.722-4.722 12.592-7.87 18.888-7.87s14.166 3.148 18.888 7.87l105.456 105.456c11.018 11.018 11.018 28.332 0 39.349-9.444 11.018-26.758 11.018-37.775 0z" />
|
||||
<glyph unicode="" glyph-name="local-seo" d="M512 1003.2c-222.4 0-404.8-176-404.8-390.4 0-171.2 244.8-454.4 350.4-569.6 14.4-16 33.6-24 54.4-24s40 8 54.4 24c105.6 113.6 350.4 398.4 350.4 569.6 0 216-182.4 390.4-404.8 390.4zM524.8 81.6c-8-8-19.2-8-25.6 0-78.4 84.8-336 376-336 531.2 0 185.6 156.8 334.4 348.8 334.4s348.8-150.4 348.8-334.4c0-155.2-257.6-444.8-336-531.2zM512 772.8c-94.4 0-172.8-76.8-172.8-172.8 0-94.4 76.8-172.8 172.8-172.8s172.8 76.8 172.8 172.8c0 96-78.4 172.8-172.8 172.8zM512 484.8c-64 0-116.8 52.8-116.8 116.8s52.8 116.8 116.8 116.8 116.8-52.8 116.8-116.8-52.8-116.8-116.8-116.8z" />
|
||||
<glyph unicode="" glyph-name="misc" d="M512 1003.2c-272 0-491.2-219.2-491.2-491.2s219.2-492.8 491.2-492.8 492.8 220.8 492.8 492.8-220.8 491.2-492.8 491.2zM512 75.2c-240 0-435.2 196.8-435.2 436.8s195.2 435.2 435.2 435.2 436.8-195.2 436.8-435.2-196.8-436.8-436.8-436.8zM678.4 732.8h-332.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h332.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM678.4 539.2h-332.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h332.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM678.4 347.2h-332.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h332.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8z" />
|
||||
<glyph unicode="" glyph-name="software" d="M963.2 790.4c0 1.6-1.6 1.6-1.6 3.2-11.2 16-27.2 28.8-44.8 36.8l-356.8 163.2c-30.4 14.4-64 14.4-94.4 0l-358.4-163.2c-17.6-8-33.6-20.8-44.8-36.8-1.6-1.6-3.2-3.2-3.2-4.8 0 0 0-1.6-1.6-1.6-11.2-17.6-17.6-38.4-17.6-60.8v-414.4c0-43.2 24-81.6 62.4-100.8l358.4-179.2c16-8 33.6-12.8 51.2-12.8s35.2 4.8 51.2 12.8l356.8 179.2c38.4 19.2 62.4 57.6 62.4 100.8v414.4c0 24-6.4 44.8-19.2 64zM488 942.4c8 3.2 16 4.8 24 4.8s16-1.6 24-4.8l353.6-161.6-155.2-75.2-364.8 182.4 118.4 54.4zM512 596.8l-377.6 184 169.6 78.4 368-184-160-78.4zM129.6 262.4c-19.2 9.6-32 30.4-32 51.2v412.8c0 3.2 0 6.4 1.6 9.6l385.6-188.8v-465.6l-355.2 180.8zM926.4 313.6c0-22.4-12.8-41.6-32-51.2l-355.2-179.2v464l164.8 80v-150.4c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v177.6l164.8 81.6c0-3.2 1.6-6.4 1.6-9.6v-412.8z" />
|
||||
<glyph unicode="" glyph-name="image" d="M138.232 998.076c-21.252-7.628-33.916-17.552-48.232-37.796l-12-16.968-1.188-422.656c-0.844-300.132 0.096-427.076 3.236-437.904 5.688-19.612 29.512-45.98 49.952-55.288 15.1-6.88 36.576-7.292 382.216-7.376l366.212-0.088 20.868 10.4c24.072 11.992 42.312 35.372 48.484 62.14 5.792 25.132 5.656 808.376-0.148 835.436-5.46 25.452-24.484 50.924-47.82 64.024l-17.812 10-364 0.868c-305.348 0.728-366.54-0.044-379.768-4.792M882.912 934.912l11.088-11.088 1.124-225.104 1.128-225.108-33.26-22.588c-18.288-12.428-54.796-40.972-81.124-63.436-56.872-48.524-88.132-69.576-115.296-77.644-43.172-12.82-76.42-4.54-116.196 28.936-143.732 120.968-215.088 126.672-367.916 29.412-21.304-13.556-41.368-25.66-44.596-26.896-5.12-1.968-5.864 34.776-5.864 289.288 0 316.544-0.836 304.312 21.428 313.384 4.716 1.92 168.28 3.14 363.484 2.712l354.908-0.78 11.092-11.088M606 788.528c-37.272-9.792-72.26-38.044-88.776-71.672-9.64-19.632-11.22-27.652-11.184-56.856 0.044-40.428 8.096-61.476 34.444-90.060 25.212-27.352 50.484-38.932 89.516-41.012 43.38-2.308 70.548 7.796 99.912 37.16 35.904 35.9 47.612 87.504 31.308 137.984-8.732 27.036-38.668 60.136-66.876 73.936-22.788 11.148-66.26 16.324-88.344 10.52M674.536 724.324c6.896-4.204 17.696-14.408 24-22.672 10.148-13.304 11.464-18.312 11.464-43.632 0-35.656-10.304-53.288-39.784-68.088-30.040-15.080-59.088-11.46-84.064 10.472-38.356 33.676-31.46 99.932 12.84 123.32 20.364 10.748 58.404 11.052 75.544 0.6M892 251.692v-152.308l-23.384-23.384h-712.004l-24.612 20.712v174.388l65 40.004c76.752 47.236 89.62 53.944 120.832 63.020 49.4 14.36 94.94-0.4 163.516-53.008 66.116-50.72 76.436-57.412 98.548-63.92 32.68-9.62 77.284-7.696 110.372 4.76 33.328 12.544 62.688 32.272 121.732 81.788 54.72 45.888 72.96 60.152 77 60.212 1.648 0.024 3-68.496 3-152.264" />
|
||||
<glyph unicode="" glyph-name="analyzer" d="M48 753.6c16 0 28.8 12.8 28.8 28.8v139.2c0 9.6 8 16 16 16h137.6c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-137.6c-40 0-72-32-72-72v-139.2c0-17.6 11.2-30.4 27.2-30.4zM931.2 993.6h-137.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h137.6c9.6 0 16-8 16-16v-139.2c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v140.8c0 40-33.6 72-73.6 72zM976 270.4c-16 0-28.8-12.8-28.8-28.8v-139.2c0-9.6-8-16-16-16h-137.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h137.6c40 0 72 32 72 72v139.2c1.6 17.6-11.2 30.4-27.2 30.4zM230.4 86.4h-137.6c-9.6 0-16 8-16 16v139.2c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-139.2c0-40 32-72 72-72h137.6c16 0 28.8 12.8 28.8 28.8s-12.8 27.2-27.2 27.2zM830.4 512c0 12.8-4.8 25.6-14.4 35.2-44.8 43.2-161.6 145.6-304 145.6s-259.2-102.4-304-145.6c-9.6-9.6-14.4-22.4-14.4-35.2s4.8-25.6 14.4-35.2c44.8-43.2 161.6-145.6 304-145.6s259.2 102.4 304 145.6c9.6 9.6 14.4 22.4 14.4 35.2zM512 387.2c-116.8 0-217.6 84.8-259.2 124.8 41.6 41.6 142.4 124.8 259.2 124.8s217.6-84.8 259.2-124.8c-41.6-41.6-142.4-124.8-259.2-124.8zM454.4 512c0-32 25.6-57.6 57.6-57.6s57.6 25.6 57.6 57.6-25.6 57.6-57.6 57.6-57.6-25.6-57.6-57.6z" />
|
||||
<glyph unicode="" glyph-name="search" d="M993.6 112l-281.6 227.2c116.8 152 105.6 369.6-33.6 508.8-73.6 73.6-169.6 113.6-273.6 113.6s-198.4-40-272-113.6c-150.4-150.4-150.4-396.8 0-547.2 73.6-73.6 169.6-113.6 273.6-113.6 100.8 0 196.8 38.4 268.8 108.8l283.2-230.4c4.8-4.8 11.2-6.4 17.6-6.4 8 0 16 3.2 22.4 9.6 9.6 16 8 33.6-4.8 43.2zM406.4 244.8c-88 0-171.2 35.2-233.6 97.6-129.6 129.6-129.6 339.2 0 467.2 62.4 62.4 145.6 97.6 233.6 97.6s171.2-33.6 233.6-97.6c129.6-129.6 129.6-339.2 0-467.2-62.4-64-145.6-97.6-233.6-97.6z" />
|
||||
<glyph unicode="" glyph-name="star-filled" d="M955.2 641.6l-289.6 44.8-131.2 275.2c-9.6 19.2-35.2 19.2-44.8 0l-131.2-276.8-288-43.2c-20.8-3.2-28.8-30.4-12.8-44.8l209.6-216-49.6-302.4c-3.2-20.8 17.6-38.4 36.8-25.6l260.8 142.4 259.2-142.4c17.6-9.6 40 6.4 35.2 25.6l-49.6 302.4 209.6 216c12.8 14.4 6.4 41.6-14.4 44.8z" />
|
||||
<glyph unicode="" glyph-name="star" d="M248 20.8c-12.8 0-25.6 3.2-36.8 11.2-20.8 14.4-32 40-27.2 65.6l43.2 272-187.2 193.6c-17.6 17.6-24 44.8-16 68.8s27.2 40 51.2 44.8l260.8 41.6 116.8 248c11.2 22.4 33.6 36.8 57.6 36.8 25.6 0 46.4-14.4 57.6-36.8l120-246.4 260.8-41.6c24-3.2 43.2-20.8 51.2-44.8s1.6-51.2-16-68.8l-188.8-193.6 44.8-273.6c4.8-25.6-6.4-51.2-27.2-65.6-19.2-14.4-44.8-16-67.2-4.8l-233.6 128-233.6-128c-9.6-4.8-19.2-6.4-30.4-6.4zM80 601.6l193.6-198.4c9.6-9.6 14.4-24 11.2-38.4l-44.8-276.8c-1.6-6.4 3.2-9.6 4.8-11.2 3.2-3.2 6.4-1.6 8 0l240 131.2c12.8 6.4 27.2 6.4 40 0l240-129.6c1.6 0 3.2-1.6 8 0 1.6 1.6 4.8 4.8 4.8 11.2l-44.8 278.4c-1.6 14.4 1.6 27.2 11.2 38.4l192 198.4c4.8 4.8 3.2 9.6 3.2 12.8 0 1.6-3.2 6.4-6.4 6.4l-268.8 41.6c-14.4 1.6-25.6 11.2-32 24l-120 252.8c-1.6 4.8-4.8 4.8-8 4.8-1.6 0-4.8-1.6-8-4.8l-120-254.4c-6.4-12.8-17.6-22.4-32-24l-267.2-43.2c-4.8 0-6.4-4.8-6.4-6.4-1.6-1.6-3.2-8 1.6-12.8z" />
|
||||
<glyph unicode="" glyph-name="trash" d="M811.2 886.4h-155.2v57.6c0 33.6-27.2 60.8-60.8 60.8h-166.4c-33.6-1.6-60.8-27.2-60.8-60.8v-57.6h-155.2c-33.6 0-60.8-27.2-60.8-60.8v-116.8c0-16 12.8-28.8 28.8-28.8h24v-542.4c0-65.6 54.4-120 120-120h376c65.6 0 120 54.4 120 120v545.6h24c16 0 28.8 12.8 28.8 28.8v116.8c-3.2 32-28.8 57.6-62.4 57.6zM424 944c0 1.6 1.6 4.8 4.8 4.8h166.4c1.6 0 4.8-1.6 4.8-4.8v-57.6h-176v57.6zM209.6 827.2c0 1.6 1.6 4.8 4.8 4.8h598.4c1.6 0 4.8-1.6 4.8-4.8v-88h-608v88zM763.2 139.2c0-35.2-28.8-64-64-64h-374.4c-35.2 0-64 28.8-64 64v544h504v-544zM512 251.2c16 0 28.8 12.8 28.8 28.8v209.6c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-211.2c1.6-16 12.8-27.2 28.8-27.2zM646.4 251.2c16 0 28.8 12.8 28.8 28.8v209.6c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-211.2c1.6-16 14.4-27.2 28.8-27.2zM377.6 251.2c16 0 28.8 12.8 28.8 28.8v209.6c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-211.2c0-16 12.8-27.2 28.8-27.2z" />
|
||||
<glyph unicode="" glyph-name="users" d="M328 566.4c97.6 0 177.6 76.8 177.6 172.8s-80 172.8-177.6 172.8-177.6-76.8-177.6-172.8 80-172.8 177.6-172.8zM328 856c67.2 0 121.6-52.8 121.6-116.8s-54.4-116.8-121.6-116.8-121.6 52.8-121.6 116.8 54.4 116.8 121.6 116.8zM744 488c83.2 0 152 65.6 152 147.2s-68.8 147.2-152 147.2-152-65.6-152-147.2c0-80 68.8-147.2 152-147.2zM744 728c52.8 0 96-41.6 96-91.2 0-51.2-43.2-91.2-96-91.2s-96 41.6-96 91.2 43.2 91.2 96 91.2zM752 452.8h-14.4c-49.6 0-97.6-14.4-139.2-41.6-40 60.8-110.4 100.8-188.8 100.8h-163.2c-124.8 0-225.6-102.4-225.6-227.2v-126.4c0-25.6 20.8-46.4 46.4-46.4h891.2c27.2 0 48 22.4 48 48v40c-1.6 139.2-115.2 252.8-254.4 252.8zM532.8 168h-456v116.8c0 94.4 76.8 171.2 171.2 171.2h161.6c94.4 0 171.2-76.8 171.2-171.2v-116.8h-48zM948.8 168h-312v116.8c0 25.6-4.8 51.2-12.8 75.2 33.6 24 72 36.8 113.6 36.8h14.4c108.8 0 196.8-88 196.8-196.8v-32z" />
|
||||
<glyph unicode="" glyph-name="images" d="M369.6 360c49.6 0 91.2 40 91.2 89.6s-40 89.6-91.2 89.6-91.2-40-91.2-89.6c1.6-49.6 41.6-89.6 91.2-89.6zM369.6 484.8c19.2 0 35.2-16 35.2-33.6 0-19.2-16-33.6-35.2-33.6-17.6-1.6-33.6 14.4-33.6 32 0 19.2 16 35.2 33.6 35.2zM787.2 689.6c49.6 0 91.2 40 91.2 89.6s-40 89.6-91.2 89.6-91.2-40-91.2-89.6c0-49.6 41.6-89.6 91.2-89.6zM787.2 812.8c19.2 0 35.2-16 35.2-33.6s-16-33.6-35.2-33.6-35.2 16-35.2 33.6 16 33.6 35.2 33.6zM888 1000h-328c-64 0-115.2-51.2-115.2-115.2v-212.8h-324.8c-51.2 0-92.8-41.6-92.8-92.8v-464c0-51.2 41.6-92.8 92.8-92.8h376c51.2 0 92.8 41.6 92.8 92.8v236.8h300.8c64 0 115.2 51.2 115.2 115.2v416c0 65.6-52.8 116.8-116.8 116.8zM560 944h329.6c33.6 0 59.2-27.2 59.2-59.2v-241.6c-12.8-8-32-20.8-35.2-24-14.4-9.6-28.8-22.4-43.2-33.6-41.6-36.8-70.4-57.6-108.8-43.2-6.4 3.2-14.4 9.6-22.4 16l-6.4 4.8c-24 19.2-51.2 41.6-84.8 51.2-20.8 6.4-43.2 6.4-65.6 1.6-12.8 32-44.8 56-81.6 57.6v211.2c-1.6 33.6 25.6 59.2 59.2 59.2zM120 616h376c19.2 0 36.8-16 36.8-36.8v-264c-8-4.8-19.2-12.8-35.2-24-14.4-9.6-28.8-22.4-43.2-33.6-41.6-36.8-70.4-57.6-108.8-43.2-8 3.2-16 9.6-25.6 17.6l-3.2 3.2c-24 19.2-51.2 41.6-84.8 51.2-56 17.6-105.6-11.2-147.2-36.8v329.6c-1.6 20.8 14.4 36.8 35.2 36.8zM496 80h-376c-19.2 0-36.8 16-36.8 36.8v65.6c8 4.8 14.4 9.6 22.4 12.8 38.4 24 73.6 46.4 108.8 35.2 24-6.4 44.8-24 65.6-41.6l3.2-3.2c11.2-9.6 24-20.8 41.6-27.2 14.4-4.8 28.8-8 43.2-8 49.6 0 89.6 33.6 121.6 62.4 12.8 11.2 25.6 22.4 36.8 30.4 1.6 1.6 3.2 1.6 4.8 3.2v-131.2c0-19.2-16-35.2-35.2-35.2zM888 408h-300.8v150.4c16 4.8 28.8 4.8 43.2 1.6 24-6.4 44.8-24 65.6-41.6l4.8-3.2c11.2-9.6 24-20.8 40-25.6s28.8-8 43.2-8c49.6 0 89.6 33.6 121.6 62.4 12.8 11.2 25.6 22.4 38.4 30.4 1.6 1.6 3.2 1.6 4.8 3.2v-108.8c0-33.6-27.2-60.8-60.8-60.8z" />
|
||||
<glyph unicode="" glyph-name="redirection" d="M971.2 588.8l-384 384c-20.8 20.8-48 32-76.8 32s-56-11.2-76.8-32l-384-384c-20.8-20.8-32-48-32-76.8s11.2-56 32-76.8l384-384c20.8-20.8 48-32 76.8-32s56 11.2 76.8 32l384 384c43.2 43.2 43.2 110.4 0 153.6zM932.8 475.2l-384-384c-20.8-20.8-52.8-20.8-73.6 0l-384 384c-9.6 9.6-16 22.4-16 36.8s4.8 27.2 16 36.8l384 384c9.6 9.6 22.4 16 36.8 16s27.2-4.8 36.8-16l384-384c19.2-20.8 19.2-52.8 0-73.6zM540.8 667.2c-11.2 11.2-28.8 11.2-40 0s-11.2-28.8 0-40l88-88h-220.8c-16 0-28.8-12.8-28.8-28.8v-136c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v107.2h193.6l-88-88c-11.2-11.2-11.2-28.8 0-40 4.8-4.8 12.8-8 19.2-8s14.4 3.2 19.2 8l136 136c11.2 11.2 11.2 28.8 0 40l-136 137.6z" />
|
||||
<glyph unicode="" glyph-name="video" d="M880 1003.2h-736c-68.8 0-123.2-54.4-123.2-123.2v-736c0-68.8 56-124.8 124.8-124.8h736c68.8 0 124.8 56 124.8 124.8v736c-1.6 68.8-57.6 123.2-126.4 123.2zM248 539.2h-171.2v180.8h172.8v-180.8zM76.8 483.2h172.8v-179.2h-172.8v179.2zM304 947.2h416v-872h-416v872zM948.8 539.2h-172.8v180.8h172.8v-180.8zM776 483.2h172.8v-179.2h-172.8v179.2zM948.8 880v-104h-172.8v171.2h104c36.8 0 68.8-30.4 68.8-67.2zM144 947.2h104v-172.8h-171.2v105.6c0 36.8 30.4 67.2 67.2 67.2zM76.8 144v104h172.8v-172.8h-105.6c-36.8 0-67.2 32-67.2 68.8zM880 75.2h-104v172.8h172.8v-104c0-36.8-32-68.8-68.8-68.8zM636.8 555.2l-152 92.8c-16 9.6-35.2 9.6-51.2 1.6-16-9.6-25.6-25.6-25.6-44.8v-184c0-17.6 9.6-35.2 25.6-44.8 8-4.8 16-6.4 25.6-6.4s17.6 3.2 25.6 8l152 92.8c16 9.6 24 25.6 24 43.2s-8 32-24 41.6zM464 430.4v163.2l136-81.6-136-81.6z" />
|
||||
<glyph unicode="" glyph-name="schema" d="M419.2 582.4l-11.2-64c-1.6-11.2 3.2-20.8 11.2-27.2s20.8-6.4 28.8-1.6l57.6 30.4 57.6-30.4c4.8-1.6 8-3.2 12.8-3.2 6.4 0 11.2 1.6 16 4.8 8 6.4 12.8 17.6 11.2 27.2l-11.2 64 46.4 44.8c8 8 9.6 19.2 6.4 28.8s-12.8 17.6-22.4 19.2l-64 9.6-28.8 59.2c-4.8 9.6-14.4 16-25.6 16s-20.8-6.4-25.6-16l-28.8-59.2-64-9.6c-11.2-1.6-19.2-9.6-22.4-19.2s0-20.8 6.4-28.8l49.6-44.8zM475.2 632c9.6 1.6 17.6 6.4 20.8 16l9.6 20.8 9.6-20.8c4.8-8 11.2-14.4 20.8-16l22.4-3.2-16-16c-6.4-6.4-9.6-16-8-24l3.2-22.4-20.8 11.2c-8 4.8-17.6 4.8-25.6 0l-20.8-11.2 3.2 22.4c1.6 9.6-1.6 17.6-8 24l-16 16 25.6 3.2zM928 886.4h-832c-41.6 0-76.8-33.6-76.8-76.8v-596.8c0-41.6 33.6-76.8 76.8-76.8h832c41.6 0 76.8 33.6 76.8 76.8v596.8c0 43.2-35.2 76.8-76.8 76.8zM774.4 193.6h-534.4c3.2 11.2 3.2 20.8 3.2 32 0 76.8-62.4 139.2-139.2 139.2-9.6 0-19.2-1.6-28.8-3.2v318.4c9.6-1.6 19.2-3.2 28.8-3.2 76.8 0 139.2 62.4 139.2 139.2v14.4h528v-14.4c0-76.8 62.4-139.2 139.2-139.2 12.8 0 25.6 1.6 38.4 6.4v-323.2c-12.8 3.2-25.6 6.4-38.4 6.4-76.8 0-139.2-62.4-139.2-139.2 0-12.8 0-22.4 3.2-33.6zM948.8 809.6v-67.2c-11.2-6.4-25.6-9.6-38.4-9.6-44.8 0-83.2 36.8-83.2 83.2 0 4.8 0 9.6 1.6 14.4h99.2c11.2 0 20.8-9.6 20.8-20.8zM96 830.4h89.6c0-4.8 1.6-9.6 1.6-14.4 0-46.4-36.8-83.2-83.2-83.2-9.6 0-19.2 1.6-28.8 4.8v72c1.6 11.2 9.6 20.8 20.8 20.8zM76.8 214.4v89.6c9.6 3.2 19.2 4.8 28.8 4.8 44.8 0 83.2-36.8 83.2-83.2 0-11.2-1.6-20.8-6.4-30.4v-1.6h-86.4c-11.2 0-19.2 9.6-19.2 20.8zM928 193.6h-94.4v1.6c-4.8 9.6-6.4 20.8-6.4 30.4 0 46.4 36.8 83.2 83.2 83.2 14.4 0 27.2-3.2 38.4-9.6v-84.8c0-11.2-9.6-20.8-20.8-20.8zM728 417.6h-443.2c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h443.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM622.4 313.6h-230.4c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h228.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-27.2 28.8z" />
|
||||
<glyph unicode="" glyph-name="adsense" d="M912 942.4h-800c-51.2 0-92.8-41.6-92.8-92.8v-360c0-51.2 41.6-92.8 92.8-92.8h57.6v-288c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v288h259.2v-288c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v288h259.2v-288c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v288h51.2c51.2 0 92.8 41.6 92.8 92.8v360c0 51.2-41.6 92.8-92.8 92.8zM948.8 489.6c0-19.2-16-36.8-36.8-36.8h-800c-19.2 0-36.8 16-36.8 36.8v360c0 19.2 16 36.8 36.8 36.8h800c19.2 0 36.8-16 36.8-36.8v-360zM398.4 806.4c-4.8 9.6-14.4 16-25.6 16s-20.8-6.4-25.6-16l-112-228.8c-6.4-14.4-1.6-30.4 12.8-36.8 3.2-1.6 8-3.2 12.8-3.2 9.6 0 20.8 6.4 25.6 16l86.4 176 86.4-176c6.4-14.4 24-19.2 36.8-12.8 14.4 6.4 19.2 24 12.8 36.8l-110.4 228.8zM667.2 825.6h-54.4c-16 0-28.8-12.8-28.8-28.8v-233.6c0-16 12.8-28.8 28.8-28.8h54.4c68.8 0 124.8 56 124.8 124.8v41.6c-1.6 68.8-57.6 124.8-124.8 124.8zM734.4 659.2c0-38.4-30.4-68.8-68.8-68.8h-25.6v179.2h27.2c38.4 0 68.8-30.4 68.8-68.8v-41.6z" />
|
||||
<glyph unicode="" glyph-name="tick" d="M996.8 820.8c-11.2 11.2-28.8 11.2-40 0l-584-566.4c-4.8-4.8-11.2-4.8-16 0l-289.6 281.6c-11.2 11.2-28.8 11.2-40 0s-11.2-28.8 0-40l289.6-281.6c12.8-12.8 30.4-19.2 46.4-19.2 17.6 0 33.6 6.4 46.4 19.2l584 566.4c12.8 11.2 12.8 28.8 3.2 40z" />
|
||||
<glyph unicode="" glyph-name="circle-plus" d="M681.6 540.8s-1.6 0 0 0h-140.8v140.8c0 16-12.8 27.2-28.8 27.2s-27.2-12.8-27.2-28.8v-140.8h-140.8c-16 0-27.2-12.8-27.2-28.8s12.8-27.2 28.8-27.2h140.8v-140.8c0-16 12.8-27.2 28.8-27.2s27.2 12.8 27.2 28.8v140.8h140.8c16 0 27.2 12.8 27.2 28.8-1.6 14.4-14.4 27.2-28.8 27.2zM512 1003.2c-272 0-491.2-219.2-491.2-491.2s219.2-492.8 491.2-492.8 492.8 220.8 492.8 492.8-220.8 491.2-492.8 491.2zM512 75.2c-240 0-435.2 196.8-435.2 436.8s195.2 435.2 435.2 435.2 436.8-195.2 436.8-435.2-196.8-436.8-436.8-436.8z" />
|
||||
<glyph unicode="" glyph-name="eye" d="M512 624c-62.4 0-112-51.2-112-112s51.2-112 112-112 112 51.2 112 112-49.6 112-112 112zM512 456c-30.4 0-56 25.6-56 56s25.6 56 56 56 56-25.6 56-56-25.6-56-56-56zM998.4 531.2c-105.6 166.4-288 265.6-486.4 265.6s-380.8-99.2-486.4-265.6c-6.4-11.2-6.4-25.6 0-36.8 105.6-166.4 288-265.6 486.4-265.6s380.8 99.2 486.4 265.6c8 11.2 8 25.6 0 36.8zM512 284.8c-174.4 0-336 84.8-432 228.8 96 142.4 257.6 227.2 432 227.2s336-84.8 432-227.2c-96-144-257.6-228.8-432-228.8z" />
|
||||
<glyph unicode="" glyph-name="heart-filled" d="M512 102.4c-12.8 0-25.6 4.8-35.2 12.8-36.8 32-73.6 62.4-105.6 89.6-92.8 78.4-174.4 147.2-230.4 214.4-64 76.8-92.8 147.2-92.8 225.6 0 75.2 25.6 145.6 73.6 196.8s113.6 80 185.6 80c52.8 0 102.4-17.6 145.6-49.6 17.6-12.8 32-28.8 46.4-46.4 6.4-8 17.6-8 24 0 14.4 17.6 30.4 32 46.4 46.4 43.2 33.6 92.8 49.6 145.6 49.6 72 0 137.6-28.8 185.6-80s73.6-121.6 73.6-196.8c0-78.4-28.8-148.8-92.8-224-56-67.2-137.6-136-230.4-214.4-32-27.2-68.8-57.6-105.6-89.6-8-9.6-20.8-14.4-33.6-14.4z" />
|
||||
<glyph unicode="" glyph-name="info" d="M436.8 913.6c0-34.463 27.937-62.4 62.4-62.4s62.4 27.937 62.4 62.4v0c0 34.463-27.937 62.4-62.4 62.4s-62.4-27.937-62.4-62.4v0M619.2 75.2h-80v620.8c0 35.2-28.8 64-64 64h-72c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h72c4.8 0 8-3.2 8-8v-619.2h-80c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h216c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8z" />
|
||||
<glyph unicode="" glyph-name="howto" d="M220.8 891.2h-140.8c-33.6 0-60.8-27.2-60.8-60.8v-140.8c0-33.6 27.2-60.8 60.8-60.8h140.8c33.6 0 60.8 27.2 60.8 60.8v140.8c-1.6 33.6-28.8 60.8-60.8 60.8zM224 691.2c0-1.6-1.6-4.8-4.8-4.8h-139.2c-1.6 0-4.8 1.6-4.8 4.8v140.8c0 1.6 1.6 4.8 4.8 4.8h140.8c1.6 0 4.8-1.6 4.8-4.8v-140.8zM220.8 393.6h-140.8c-33.6 0-60.8-27.2-60.8-60.8v-140.8c0-33.6 27.2-60.8 60.8-60.8h140.8c33.6 0 60.8 27.2 60.8 60.8v140.8c-1.6 33.6-28.8 60.8-60.8 60.8zM224 193.6c0-1.6-1.6-4.8-4.8-4.8h-139.2c-1.6 0-4.8 1.6-4.8 4.8v140.8c0 1.6 1.6 4.8 4.8 4.8h140.8c1.6 0 4.8-1.6 4.8-4.8v-140.8zM457.6 803.2h518.4c16 0 28.8 12.8 28.8 28.8s-12.8 27.2-28.8 27.2h-518.4c-16 0-28.8-12.8-28.8-28.8s12.8-27.2 28.8-27.2zM976 718.4h-518.4c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h518.4c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM976 361.6h-518.4c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h518.4c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM976 220.8h-518.4c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h518.4c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8z" />
|
||||
<glyph unicode="" glyph-name="faq" d="M187.2 974.4h-107.2c-33.6 0-60.8-27.2-60.8-60.8v-107.2c0-33.6 27.2-60.8 60.8-60.8h107.2c33.6 0 60.8 27.2 60.8 60.8v108.8c-1.6 33.6-28.8 59.2-60.8 59.2zM190.4 808c0-1.6-1.6-4.8-4.8-4.8h-105.6c-1.6 0-4.8 1.6-4.8 4.8v107.2c0 1.6 1.6 4.8 4.8 4.8h107.2c1.6 0 4.8-1.6 4.8-4.8v-107.2zM408 833.6h568c16 0 28.8 12.8 28.8 28.8s-12.8 27.2-28.8 27.2h-568c-16 0-28.8-12.8-28.8-28.8s12.8-27.2 28.8-27.2zM187.2 635.2h-107.2c-33.6 0-60.8-27.2-60.8-60.8v-107.2c0-33.6 27.2-60.8 60.8-60.8h107.2c33.6 0 60.8 27.2 60.8 60.8v107.2c-1.6 33.6-28.8 60.8-60.8 60.8zM190.4 467.2c0-1.6-1.6-4.8-4.8-4.8h-105.6c-1.6 0-4.8 1.6-4.8 4.8v107.2c0 1.6 1.6 4.8 4.8 4.8h107.2c1.6 0 4.8-1.6 4.8-4.8v-107.2zM976 548.8h-568c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h568c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM187.2 276.8h-107.2c-33.6 0-60.8-27.2-60.8-60.8v-107.2c0-33.6 27.2-60.8 60.8-60.8h107.2c33.6 0 60.8 27.2 60.8 60.8v107.2c-1.6 33.6-28.8 60.8-60.8 60.8zM190.4 108.8c0-1.6-1.6-4.8-4.8-4.8h-105.6c-1.6 0-4.8 1.6-4.8 4.8v107.2c0 1.6 1.6 4.8 4.8 4.8h107.2c1.6 0 4.8-1.6 4.8-4.8v-107.2zM976 190.4h-568c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h568c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8z" />
|
||||
<glyph unicode="" glyph-name="music" d="M979.2 897.6c-16 14.4-38.4 22.4-60.8 20.8l-571.2-43.2c-41.6-3.2-73.6-38.4-73.6-80v-491.2c-27.2 16-60.8 25.6-99.2 25.6-86.4 0-155.2-49.6-155.2-112s67.2-112 155.2-112 155.2 49.6 155.2 112v374.4l619.2 48v-291.2c-27.2 16-60.8 25.6-99.2 25.6-86.4 0-155.2-49.6-155.2-112s67.2-112 155.2-112 155.2 49.6 155.2 112v579.2c0 19.2-9.6 41.6-25.6 56zM174.4 161.6c-57.6 0-99.2 30.4-99.2 56s40 56 99.2 56 99.2-30.4 99.2-56-41.6-56-99.2-56zM849.6 203.2c-57.6 0-99.2 30.4-99.2 56s40 56 99.2 56 99.2-30.4 99.2-56-41.6-56-99.2-56zM329.6 795.2c0 12.8 9.6 22.4 22.4 24l572.8 43.2c6.4 0 11.2-1.6 16-6.4s8-11.2 8-17.6v-144l-619.2-48v148.8z" />
|
||||
<glyph unicode="" glyph-name="plus" d="M976 539.2h-435.2v436.8c0 16-12.8 28.8-28.8 28.8s-27.2-12.8-27.2-28.8v-436.8h-436.8c-16 0-28.8-12.8-28.8-28.8s12.8-27.2 28.8-27.2h436.8v-435.2c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v435.2h433.6c16 0 28.8 12.8 28.8 28.8s-12.8 27.2-28.8 27.2z" />
|
||||
<glyph unicode="" glyph-name="help" d="M512 1003.2c-272 0-491.2-219.2-491.2-491.2s219.2-492.8 491.2-492.8 492.8 220.8 492.8 492.8-220.8 491.2-492.8 491.2zM512 75.2c-240 0-435.2 196.8-435.2 436.8s195.2 435.2 435.2 435.2 436.8-195.2 436.8-435.2-196.8-436.8-436.8-436.8zM539.2 833.6c-46.4 8-92.8-4.8-126.4-33.6-35.2-28.8-56-72-56-118.4 0-17.6 3.2-35.2 9.6-51.2 4.8-14.4 20.8-22.4 35.2-17.6s22.4 20.8 17.6 35.2c-3.2 11.2-6.4 20.8-6.4 33.6 0 28.8 12.8 56 35.2 75.2s51.2 27.2 81.6 20.8c40-6.4 72-40 78.4-78.4 8-46.4-16-91.2-59.2-108.8-40-16-65.6-56-65.6-102.4v-102.4c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v102.4c0 22.4 12.8 43.2 30.4 49.6 67.2 27.2 105.6 97.6 92.8 171.2-11.2 62.4-62.4 113.6-124.8 124.8zM513.6 275.2h-4.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h4.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8z" />
|
||||
<glyph unicode="" glyph-name="instant-indexing" d="M403.2 19.2c-6.4 0-11.2 1.6-17.6 3.2-20.8 8-32 27.2-28.8 49.6l41.6 348.8-137.6-27.2c-19.2-3.2-38.4 4.8-48 20.8-11.2 16-9.6 36.8 1.6 52.8l369.6 516.8c12.8 17.6 35.2 24 56 16s32-28.8 28.8-49.6l-49.6-361.6 142.4 35.2c19.2 4.8 38.4-3.2 49.6-19.2s11.2-38.4-1.6-54.4l-371.2-512c-8-11.2-20.8-19.2-35.2-19.2zM408 480c11.2 0 24-4.8 32-12.8 11.2-9.6 16-25.6 14.4-40l-38.4-328 336 464-131.2-33.6c-14.4-3.2-30.4 0-43.2 11.2-11.2 11.2-17.6 25.6-14.4 41.6l46.4 339.2-339.2-467.2 128 25.6h9.6z" />
|
||||
<glyph unicode="" glyph-name="404" d="M977.6 352l-355.2 483.2c-25.6 35.2-67.2 56-110.4 56-44.8 0-84.8-20.8-110.4-56l-355.2-483.2c-30.4-41.6-35.2-97.6-11.2-144s70.4-75.2 123.2-75.2h708.8c52.8 0 99.2 28.8 123.2 75.2s17.6 102.4-12.8 144zM939.2 233.6c-14.4-27.2-41.6-44.8-72-44.8h-708.8c-32 0-59.2 16-72 44.8-14.4 27.2-11.2 59.2 6.4 84.8l353.6 483.2c16 20.8 40 33.6 65.6 33.6s49.6-12.8 65.6-33.6l353.6-483.2c19.2-25.6 22.4-56 8-84.8zM512 416c16 0 28.8 12.8 28.8 28.8v179.2c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-180.8c0-14.4 12.8-27.2 28.8-27.2zM512 363.2c-25.6 0-46.4-20.8-46.4-46.4s20.8-46.4 46.4-46.4c25.6 0 46.4 20.8 46.4 46.4s-20.8 46.4-46.4 46.4z" />
|
||||
<glyph unicode="" glyph-name="cross" d="M552 512l443.2 444.8c11.2 11.2 11.2 28.8 0 40s-28.8 11.2-40 0l-443.2-444.8-444.8 443.2c-11.2 11.2-28.8 11.2-40 0s-11.2-28.8 0-40l444.8-443.2-443.2-444.8c-11.2-11.2-11.2-28.8 0-40 4.8-4.8 12.8-8 19.2-8s14.4 3.2 19.2 8l444.8 444.8 443.2-444.8c4.8-4.8 12.8-8 19.2-8s14.4 3.2 19.2 8c11.2 11.2 11.2 28.8 0 40l-441.6 444.8z" />
|
||||
<glyph unicode="" glyph-name="fact-check" d="M913.6 913.6h-803.2c-49.6 0-91.2-40-91.2-91.2v-462.4c0-49.6 40-91.2 91.2-91.2h243.2l134.4-148.8c4.8-6.4 12.8-9.6 20.8-9.6s16 3.2 20.8 9.6l137.6 150.4h244.8c49.6 0 91.2 40 91.2 91.2v460.8c1.6 49.6-40 91.2-89.6 91.2zM948.8 360c0-19.2-16-35.2-35.2-35.2h-257.6c-8 0-16-3.2-20.8-9.6l-126.4-136-123.2 136c-4.8 6.4-12.8 9.6-20.8 9.6h-256c-19.2 0-35.2 16-35.2 35.2v462.4c0 19.2 16 35.2 35.2 35.2h803.2c19.2 0 35.2-16 35.2-35.2v-462.4zM627.2 689.6l-169.6-171.2-60.8 60.8c-11.2 11.2-28.8 11.2-40 0s-11.2-28.8 0-40l80-80c4.8-4.8 12.8-8 19.2-8s14.4 3.2 19.2 8l190.4 190.4c11.2 11.2 11.2 28.8 0 40-9.6 11.2-27.2 11.2-38.4 0z" />
|
||||
<glyph unicode="" glyph-name="recipe" d="M809.6 784c-27.2 0-54.4-6.4-80-17.6-8 118.4-104 211.2-219.2 211.2s-211.2-92.8-219.2-209.6c-24 9.6-49.6 16-75.2 16-108.8 0-195.2-89.6-195.2-201.6 0-100.8 72-185.6 166.4-198.4v-243.2c0-28.8 12.8-54.4 33.6-72s49.6-25.6 76.8-20.8l57.6 9.6c104 17.6 208 17.6 312 0l57.6-9.6c4.8-1.6 9.6-1.6 16-1.6 22.4 0 44.8 8 62.4 22.4 20.8 17.6 33.6 44.8 33.6 72v243.2c94.4 14.4 166.4 97.6 166.4 198.4 1.6 112-86.4 201.6-193.6 201.6zM766.4 112c-9.6-8-20.8-11.2-32-9.6l-57.6 9.6c-54.4 9.6-110.4 12.8-164.8 12.8s-110.4-4.8-164.8-12.8l-57.6-9.6c-11.2-1.6-22.4 1.6-32 9.6s-14.4 19.2-14.4 30.4v84.8l113.6 19.2c104 17.6 208 17.6 312 0l113.6-19.2v-84.8c-1.6-12.8-6.4-24-16-30.4zM809.6 438.4c-16 0-28.8-12.8-28.8-28.8v-126.4l-104 17.6c-1.6 0-4.8 0-6.4 1.6v129.6c0 16-12.8 28.8-28.8 28.8s-27.2-12.8-27.2-28.8v-123.2c-67.2 6.4-136 6.4-203.2 0v123.2c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8v-131.2c-1.6 0-4.8 0-6.4-1.6l-104-17.6v126.4c0 16-12.8 28.8-28.8 28.8-76.8 0-139.2 65.6-139.2 145.6s62.4 145.6 139.2 145.6c32 0 62.4-11.2 86.4-32 9.6-8 22.4-8 32-3.2 9.6 6.4 16 17.6 12.8 28.8-1.6 8-1.6 17.6-1.6 28.8 0 94.4 73.6 171.2 164.8 171.2s164.8-76.8 164.8-171.2c0-11.2-1.6-22.4-3.2-32-1.6-11.2 3.2-24 14.4-30.4s24-4.8 32 3.2c25.6 24 57.6 36.8 91.2 36.8 76.8 0 139.2-65.6 139.2-145.6 1.6-80-62.4-144-137.6-144z" />
|
||||
<glyph unicode="" glyph-name="restaurant" d="M958.4 734.4l-131.2 232c-12.8 22.4-36.8 36.8-62.4 36.8h-505.6c-25.6 0-49.6-14.4-62.4-36.8l-131.2-232c0-1.6-1.6-1.6-1.6-3.2-1.6-3.2-1.6-6.4-1.6-9.6v-628.8c0-40 32-72 72-72h753.6c40 0 72 32 72 72v627.2c1.6 4.8 0 9.6-1.6 14.4zM272 694.4c-3.2-40-36.8-70.4-76.8-70.4s-73.6 30.4-76.8 70.4h153.6zM483.2 694.4c-3.2-40-36.8-70.4-76.8-70.4s-73.6 30.4-76.8 70.4h153.6zM694.4 694.4c-3.2-40-36.8-70.4-76.8-70.4s-73.6 30.4-76.8 70.4h153.6zM904 694.4c-3.2-40-36.8-70.4-76.8-70.4s-73.6 30.4-76.8 70.4h153.6zM246.4 939.2c3.2 4.8 8 8 14.4 8h504c6.4 0 11.2-3.2 14.4-8l107.2-190.4h-745.6l105.6 190.4zM288 75.2v265.6c0 9.6 8 16 16 16h80c9.6 0 16-8 16-16v-264h-112zM889.6 75.2h-433.6v265.6c0 40-32 72-72 72h-80c-40 0-72-32-72-72v-264h-96c-9.6 0-16 8-16 16v499.2c22.4-16 48-25.6 76.8-25.6 43.2 0 81.6 20.8 105.6 51.2 24-32 62.4-51.2 105.6-51.2s81.6 20.8 105.6 51.2c24-32 62.4-51.2 105.6-51.2s81.6 20.8 105.6 51.2c24-32 62.4-51.2 105.6-51.2 28.8 0 56 9.6 76.8 25.6v-500.8c-1.6-8-9.6-16-17.6-16zM742.4 412.8h-81.6c-27.2 0-49.6-22.4-49.6-49.6v-81.6c0-27.2 22.4-49.6 49.6-49.6h81.6c27.2 0 49.6 22.4 49.6 49.6v81.6c0 27.2-22.4 49.6-49.6 49.6zM736 286.4h-70.4v70.4h70.4v-70.4z" />
|
||||
<glyph unicode="" glyph-name="post-format" d="M857.6 844.8l-156.8 134.4c-19.2 16-43.2 25.6-67.2 25.6h-400c-57.6 0-104-46.4-104-104v-777.6c0-57.6 46.4-104 104-104h206.4c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-206.4c-25.6 0-48 20.8-48 48v776c0 25.6 20.8 48 48 48h400c11.2 0 22.4-4.8 30.4-11.2l156.8-134.4c11.2-9.6 16-22.4 16-36.8v-675.2c0-8-6.4-16-16-16-16 0-27.2-12.8-27.2-28.8s12.8-28.8 28.8-28.8c40 0 72 32 72 72v676.8c0 30.4-14.4 59.2-36.8 78.4zM308.8 779.2h220.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-220.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8zM308.8 636.8h377.6c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-377.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8zM308.8 499.2h377.6c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-377.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8zM627.2 425.6c-68.8 0-126.4-56-126.4-126.4 0-36.8 16-72 43.2-94.4v-156.8c0-9.6 4.8-19.2 14.4-24 4.8-3.2 9.6-3.2 14.4-3.2s9.6 1.6 14.4 3.2l41.6 24 41.6-24c8-4.8 19.2-4.8 27.2 0s14.4 14.4 14.4 24v156.8c25.6 22.4 43.2 56 43.2 94.4-1.6 70.4-57.6 126.4-128 126.4zM627.2 369.6c38.4 0 70.4-32 70.4-70.4s-32-70.4-70.4-70.4-70.4 32-70.4 70.4 32 70.4 70.4 70.4zM654.4 96l-12.8 8c-8 4.8-19.2 4.8-27.2 0l-14.4-8v80c8-1.6 17.6-3.2 27.2-3.2s17.6 1.6 27.2 3.2v-80z" />
|
||||
<glyph unicode="" glyph-name="service" d="M892.8 937.6h-761.6c-60.8 0-110.4-49.6-110.4-110.4v-326.4c0-60.8 49.6-110.4 110.4-110.4h1.6c16-44.8 60.8-78.4 112-78.4s96 32 112 78.4h310.4c16-44.8 60.8-78.4 112-78.4s96 32 112 78.4h1.6c60.8 0 110.4 49.6 110.4 110.4v326.4c1.6 60.8-48 110.4-110.4 110.4zM244.8 369.6c-33.6 0-62.4 25.6-62.4 57.6s27.2 57.6 62.4 57.6 62.4-25.6 62.4-57.6-28.8-57.6-62.4-57.6zM779.2 369.6c-33.6 0-62.4 25.6-62.4 57.6s27.2 57.6 62.4 57.6 62.4-25.6 62.4-57.6-27.2-57.6-62.4-57.6zM948.8 500.8c0-28.8-22.4-52.8-52.8-54.4-9.6 52.8-57.6 94.4-116.8 94.4-57.6 0-107.2-40-116.8-94.4h-300.8c-9.6 52.8-57.6 94.4-116.8 94.4-57.6 0-107.2-40-116.8-94.4-28.8 1.6-52.8 24-52.8 54.4v326.4c0 30.4 24 54.4 54.4 54.4h763.2c30.4 0 54.4-24 54.4-54.4v-326.4zM244.8 249.6c-89.6 0-174.4-44.8-220.8-118.4-8-12.8-4.8-30.4 8-38.4s30.4-4.8 38.4 8c36.8 57.6 102.4 92.8 172.8 92.8 72 0 136-35.2 172.8-92.8 4.8-8 14.4-12.8 24-12.8 4.8 0 9.6 1.6 14.4 4.8 12.8 8 17.6 25.6 8 38.4-44.8 73.6-126.4 118.4-217.6 118.4zM779.2 249.6c-89.6 0-174.4-44.8-220.8-118.4-8-12.8-4.8-30.4 8-38.4s30.4-4.8 38.4 8c36.8 57.6 102.4 92.8 172.8 92.8s136-35.2 172.8-92.8c4.8-8 14.4-12.8 24-12.8 4.8 0 9.6 1.6 14.4 4.8 12.8 8 17.6 25.6 8 38.4-44.8 73.6-126.4 118.4-217.6 118.4z" />
|
||||
<glyph unicode="" glyph-name="code" d="M297.6 768c9.6 11.2 9.6 28.8-1.6 40-11.2 9.6-28.8 9.6-40-1.6l-217.6-244.8c-24-27.2-24-70.4 0-97.6l217.6-246.4c4.8-6.4 12.8-9.6 20.8-9.6 6.4 0 12.8 1.6 19.2 6.4 11.2 9.6 12.8 28.8 1.6 40l-217.6 246.4c-4.8 6.4-4.8 17.6 0 24l217.6 243.2zM985.6 561.6l-217.6 244.8c-9.6 11.2-27.2 12.8-40 1.6-11.2-9.6-12.8-27.2-1.6-40l217.6-244.8c4.8-6.4 4.8-17.6 0-24l-217.6-243.2c-9.6-11.2-9.6-28.8 1.6-40 4.8-4.8 12.8-6.4 19.2-6.4 8 0 16 3.2 20.8 9.6l217.6 244.8c24 27.2 24 68.8 0 97.6zM608 800c-14.4 4.8-30.4-3.2-35.2-17.6l-176-523.2c-3.2-14.4 3.2-30.4 19.2-35.2 3.2-1.6 6.4-1.6 9.6-1.6 11.2 0 22.4 8 27.2 19.2l176 523.2c1.6 14.4-4.8 30.4-20.8 35.2z" />
|
||||
<glyph unicode="" glyph-name="course" d="M985.6 792l-464 168c-6.4 1.6-12.8 1.6-19.2 0l-464-168c-11.2-4.8-19.2-14.4-19.2-25.6s8-22.4 19.2-25.6l128-46.4v-296c0-12.8 8-22.4 19.2-27.2 137.6-46.4 241.6-65.6 337.6-65.6 48 0 94.4 4.8 140.8 14.4v-48c-44.8-12.8-78.4-52.8-78.4-102.4 0-57.6 48-105.6 105.6-105.6s105.6 48 105.6 105.6c0 48-33.6 89.6-78.4 102.4v62.4c38.4 9.6 76.8 24 120 38.4 11.2 4.8 19.2 14.4 19.2 25.6v294.4l128 46.4c11.2 4.8 19.2 14.4 19.2 25.6s-8 22.4-19.2 27.2zM742.4 169.6c0-27.2-22.4-49.6-49.6-49.6s-49.6 22.4-49.6 49.6 22.4 49.6 49.6 49.6c27.2 0 49.6-22.4 49.6-49.6zM222.4 417.6v254.4l280-100.8c3.2-1.6 6.4-1.6 9.6-1.6s6.4 0 9.6 1.6l142.4 51.2v-246.4c-129.6-27.2-252.8-19.2-441.6 41.6zM801.6 417.6c-28.8-9.6-56-19.2-81.6-25.6v251.2l81.6 30.4v-256zM696 694.4l-120 44.8c-14.4 4.8-30.4-1.6-36.8-16-4.8-14.4 1.6-30.4 16-36.8l57.6-22.4-100.8-36.8-380.8 137.6 380.8 137.6 380.8-137.6-196.8-70.4z" />
|
||||
<glyph unicode="" glyph-name="book" d="M929.6 876.8h-364.8c-20.8 0-38.4-8-52.8-19.2-14.4 12.8-32 19.2-52.8 19.2h-364.8c-40 0-73.6-33.6-73.6-73.6v-540.8c0-40 33.6-73.6 73.6-73.6h390.4v-14.4c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v14.4h390.4c40 0 73.6 33.6 73.6 73.6v540.8c-1.6 41.6-35.2 73.6-76.8 73.6zM94.4 244.8c-9.6 0-17.6 8-17.6 17.6v540.8c0 9.6 8 17.6 17.6 17.6h366.4c12.8 0 24-11.2 24-24v-552h-390.4zM948.8 262.4c0-9.6-8-17.6-17.6-17.6h-390.4v552c0 12.8 11.2 24 24 24h364.8c9.6 0 17.6-8 17.6-17.6v-540.8zM217.6 659.2h123.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-123.2c-16 0-28.8-12.8-28.8-28.8s14.4-28.8 28.8-28.8zM678.4 659.2h123.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-123.2c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8zM803.2 579.2h-123.2c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h123.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM344 579.2h-123.2c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h123.2c16 0 28.8 12.8 28.8 28.8s-14.4 28.8-28.8 28.8zM344 432h-123.2c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h123.2c16 0 28.8 12.8 28.8 28.8s-14.4 28.8-28.8 28.8zM803.2 432h-123.2c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h123.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8z" />
|
||||
<glyph unicode="" glyph-name="social" d="M1003.2 822.4c-3.2 28.8-16 56-40 75.2-22.4 19.2-51.2 27.2-81.6 25.6-28.8-3.2-56-16-75.2-40s-25.6-51.2-22.4-80c0-8 1.6-16 4.8-22.4l-158.4-92.8c-30.4 48-83.2 81.6-144 81.6-48 0-91.2-20.8-123.2-52.8l-136 123.2c9.6 16 14.4 35.2 14.4 54.4 0 60.8-49.6 110.4-110.4 110.4s-110.4-51.2-110.4-112 49.6-110.4 110.4-110.4c20.8 0 40 6.4 56 16l142.4-129.6c-9.6-20.8-16-44.8-16-70.4 0-92.8 76.8-169.6 169.6-169.6h14.4l36.8-136c-44.8-25.6-75.2-72-75.2-128 0-80 65.6-145.6 145.6-145.6s145.6 65.6 145.6 145.6-65.6 145.6-145.6 145.6c-6.4 0-11.2 0-17.6-1.6l-36.8 132.8c59.2 25.6 100.8 86.4 100.8 155.2 0 12.8-1.6 24-3.2 35.2l168 97.6 4.8-4.8c20.8-16 44.8-25.6 70.4-25.6h11.2c28.8 3.2 56 16 75.2 40s28.8 54.4 25.6 83.2zM131.2 838.4c-30.4 0-54.4 24-54.4 54.4s24 54.4 54.4 54.4 54.4-24 54.4-54.4-25.6-54.4-54.4-54.4zM696 166.4c0-49.6-40-89.6-89.6-89.6s-89.6 40-89.6 89.6 40 89.6 89.6 89.6 89.6-40 89.6-89.6zM484.8 484.8c-62.4 0-113.6 51.2-113.6 113.6s51.2 113.6 113.6 113.6 113.6-51.2 113.6-113.6-51.2-113.6-113.6-113.6zM936 777.6c-9.6-11.2-22.4-17.6-36.8-19.2s-28.8 3.2-40 12.8c-11.2 9.6-17.6 22.4-19.2 36.8s3.2 28.8 12.8 40c9.6 11.2 22.4 17.6 36.8 19.2h4.8c12.8 0 25.6-4.8 35.2-12.8 11.2-9.6 17.6-22.4 19.2-36.8 0-14.4-4.8-28.8-12.8-40z" />
|
||||
<glyph unicode="" glyph-name="edit" d="M1003.2 844.8c0 11.2-4.8 20.8-12.8 28.8l-59.2 59.2c-17.6 17.6-35.2 35.2-52.8 54.4-6.4 8-16 14.4-25.6 16-11.2 1.6-24-1.6-33.6-9.6l-115.2-115.2h-564.8c-65.6 0-118.4-52.8-118.4-118.4v-622.4c0-65.6 52.8-118.4 118.4-118.4h622.4c65.6 0 118.4 52.8 118.4 118.4v568l110.4 110.4c8 8 12.8 19.2 12.8 28.8zM532.8 438.4c-1.6-1.6-4.8-3.2-6.4-4.8l-137.6-46.4 44.8 137.6c1.6 3.2 1.6 4.8 4.8 6.4l304 304 96-94.4-305.6-302.4zM824 137.6c0-33.6-27.2-62.4-62.4-62.4h-622.4c-33.6 0-62.4 27.2-62.4 62.4v624c0 33.6 27.2 62.4 62.4 62.4h510.4l-251.2-251.2c-8-8-14.4-17.6-17.6-28.8l-60.8-185.6c-3.2-9.6-1.6-19.2 3.2-27.2 4.8-6.4 11.2-12.8 25.6-12.8h4.8l190.4 62.4c11.2 3.2 20.8 9.6 28.8 17.6l252.8 251.2v-512zM876.8 782.4l-96 94.4 64 64 46.4-46.4c16-16 32-32 48-49.6l-62.4-62.4z" />
|
||||
<glyph unicode="" glyph-name="comments-reply" d="M910.4 904h-796.8c-51.2 0-94.4-41.6-94.4-94.4v-569.6c0-35.2 19.2-67.2 49.6-83.2 14.4-8 28.8-11.2 44.8-11.2 17.6 0 36.8 4.8 52.8 16l142.4 96h57.6c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-65.6c-4.8 0-11.2-1.6-16-4.8l-148.8-99.2c-11.2-8-25.6-8-38.4-1.6s-20.8 19.2-20.8 33.6v568c0 20.8 16 36.8 36.8 36.8h796.8c20.8 0 38.4-17.6 38.4-38.4v-524.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v526.4c-1.6 51.2-44.8 92.8-96 92.8zM854.4 312c-40 38.4-89.6 65.6-147.2 75.2v44.8c0 17.6-9.6 33.6-25.6 41.6s-35.2 6.4-49.6-6.4l-166.4-131.2c-11.2-9.6-17.6-22.4-17.6-36.8s6.4-27.2 17.6-36.8l166.4-134.4c8-6.4 19.2-9.6 28.8-9.6 6.4 0 14.4 1.6 20.8 4.8 16 8 25.6 24 25.6 41.6v32c38.4-8 84.8-27.2 131.2-56 14.4-9.6 33.6-9.6 48 0 14.4 8 24 25.6 22.4 41.6 0 12.8-1.6 22.4-3.2 28.8-8 41.6-22.4 72-51.2 100.8zM707.2 254.4c-14.4 1.6-28.8-1.6-40-11.2s-17.6-22.4-17.6-36.8v-20.8l-142.4 113.6 142.4 113.6v-30.4c0-24 17.6-43.2 41.6-48 48-8 89.6-28.8 121.6-60.8 20.8-22.4 30.4-41.6 36.8-72v-3.2c-36.8 22.4-89.6 46.4-142.4 56zM164.8 630.4c0-51.2 41.6-94.4 94.4-94.4 51.2 0 94.4 41.6 94.4 94.4 0 51.2-41.6 94.4-94.4 94.4s-94.4-43.2-94.4-94.4zM296 630.4c0-20.8-17.6-38.4-38.4-38.4s-38.4 17.6-38.4 38.4 17.6 38.4 38.4 38.4 38.4-17.6 38.4-38.4zM606.4 630.4c0 51.2-41.6 94.4-94.4 94.4s-94.4-41.6-94.4-94.4c0-51.2 41.6-94.4 94.4-94.4s94.4 43.2 94.4 94.4zM473.6 630.4c0 20.8 17.6 38.4 38.4 38.4s38.4-17.6 38.4-38.4-17.6-38.4-38.4-38.4c-20.8 0-38.4 17.6-38.4 38.4zM764.8 536c51.2 0 94.4 41.6 94.4 94.4 0 51.2-41.6 94.4-94.4 94.4s-92.8-43.2-92.8-94.4 41.6-94.4 92.8-94.4zM764.8 668.8c20.8 0 38.4-17.6 38.4-38.4s-17.6-38.4-38.4-38.4-38.4 17.6-38.4 38.4 17.6 38.4 38.4 38.4z" />
|
||||
<glyph unicode="" glyph-name="page" d="M862.4 862.4h-46.4v22.4c0 65.6-52.8 118.4-118.4 118.4h-456c-65.6 0-118.4-52.8-118.4-118.4v-542.4c0-19.2 8-36.8 20.8-51.2l243.2-249.6c14.4-14.4 33.6-22.4 52.8-22.4h302.4c40 0 73.6 33.6 73.6 73.6v17.6l80 163.2c1.6 3.2 3.2 8 3.2 12.8l1.6 537.6c0 19.2-17.6 36.8-38.4 38.4zM844.8 728h-112v80c36.8 0 73.6 0 112-1.6v-78.4zM384 124.8l-166.4 171.2h166.4v-171.2zM742.4 75.2h-302.4v238.4c0 20.8-17.6 38.4-38.4 38.4h-222.4v532.8c0 35.2 28.8 62.4 62.4 62.4h454.4c35.2 0 62.4-28.8 62.4-62.4v-22.4h-43.2c-22.4 0-41.6-17.6-41.6-38.4l-1.6-537.6c0-4.8 1.6-8 3.2-12.8l81.6-163.2v-17.6c3.2-9.6-4.8-17.6-14.4-17.6zM787.2 180.8l-56 112v379.2h112v-379.2l-56-112z" />
|
||||
<glyph unicode="" glyph-name="direction" d="M940.8 747.2l-80 102.4c-14.4 17.6-35.2 28.8-57.6 28.8h-384v97.6c0 16-12.8 28.8-28.8 28.8s-27.2-12.8-27.2-28.8v-99.2h-224c-40 0-72-32-72-72v-206.4c0-40 32-72 72-72h222.4v-478.4c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v478.4h385.6c22.4 0 43.2 9.6 57.6 28.8l80 102.4c19.2 25.6 19.2 62.4-1.6 89.6zM897.6 691.2l-80-102.4c-3.2-4.8-8-6.4-12.8-6.4h-665.6c-9.6 0-16 8-16 16v206.4c0 9.6 8 16 16 16h664c4.8 0 9.6-1.6 12.8-6.4l80-102.4c6.4-6.4 6.4-14.4 1.6-20.8z" />
|
||||
<glyph unicode="" glyph-name="stories" d="M961.6 406.4l-64 40c-12.8 8-30.4 4.8-38.4-8s-4.8-30.4 8-38.4l56-35.2-411.2-260.8-411.2 259.2 56 35.2c12.8 8 17.6 25.6 8 38.4-8 12.8-25.6 17.6-38.4 8l-64-40c-14.4-9.6-24-25.6-24-41.6 0-17.6 8-33.6 24-41.6l422.4-265.6c8-4.8 17.6-8 27.2-8s19.2 3.2 27.2 8l422.4 265.6c14.4 9.6 24 25.6 24 41.6-1.6 17.6-9.6 33.6-24 43.2zM422.4 387.2l75.2-46.4c4.8-3.2 9.6-4.8 14.4-4.8s9.6 1.6 14.4 4.8l75.2 46.4c12.8 8 17.6 25.6 8 38.4-8 12.8-25.6 17.6-38.4 8l-59.2-36.8-59.2 36.8c-12.8 8-30.4 4.8-38.4-8-9.6-12.8-4.8-30.4 8-38.4zM350.4 499.2l-112 70.4c-12.8 8-30.4 4.8-38.4-8s-4.8-30.4 8-38.4l112-70.4c6.4-4.8 11.2-4.8 16-4.8 9.6 0 17.6 4.8 24 12.8 8 12.8 3.2 30.4-9.6 38.4zM123.2 580.8c9.6 0 17.6 4.8 24 12.8 8 12.8 4.8 30.4-8 38.4l-38.4 24 36.8 22.4c12.8 8 17.6 25.6 8 38.4-8 12.8-25.6 17.6-38.4 8l-75.2-46.4c-8-4.8-12.8-14.4-12.8-24s4.8-19.2 12.8-24l75.2-46.4c4.8-1.6 9.6-3.2 16-3.2zM224 739.2c4.8 0 9.6 1.6 14.4 4.8l112 70.4c12.8 8 17.6 25.6 8 38.4s-25.6 17.6-38.4 8l-112-70.4c-12.8-8-17.6-25.6-8-38.4 6.4-8 14.4-12.8 24-12.8zM452.8 878.4l59.2 36.8 59.2-36.8c4.8-3.2 9.6-4.8 14.4-4.8 9.6 0 19.2 4.8 24 12.8 8 12.8 4.8 30.4-8 38.4l-75.2 46.4c-9.6 6.4-20.8 6.4-30.4 0l-75.2-46.4c-12.8-8-17.6-25.6-8-38.4s27.2-17.6 40-8zM673.6 814.4l112-70.4c4.8-3.2 9.6-4.8 14.4-4.8 9.6 0 19.2 4.8 24 12.8 8 12.8 4.8 30.4-8 38.4l-112 70.4c-12.8 8-30.4 4.8-38.4-8-9.6-12.8-4.8-30.4 8-38.4zM990.4 680l-75.2 46.4c-12.8 8-30.4 4.8-38.4-8s-4.8-30.4 8-38.4l36.8-22.4-36.8-22.4c-12.8-8-17.6-25.6-8-38.4 4.8-8 14.4-12.8 24-12.8 4.8 0 9.6 1.6 14.4 4.8l75.2 46.4c8 4.8 12.8 14.4 12.8 24s-4.8 16-12.8 20.8zM688 448c4.8 0 9.6 1.6 14.4 4.8l112 70.4c12.8 8 17.6 25.6 8 38.4-8 12.8-25.6 17.6-38.4 8l-112-70.4c-12.8-8-17.6-25.6-8-38.4 6.4-9.6 14.4-12.8 24-12.8z" />
|
||||
<glyph unicode="" glyph-name="acf" d="M912 1003.2h-800c-51.2 0-91.2-40-91.2-91.2v-435.2c0-51.2 40-92.8 91.2-92.8h800c51.2 0 92.8 41.6 92.8 92.8v435.2c0 51.2-41.6 91.2-92.8 91.2zM948.8 476.8c0-19.2-16-36.8-36.8-36.8h-800c-19.2 0-36.8 16-36.8 36.8v435.2c0 19.2 16 36.8 36.8 36.8h800c19.2 0 36.8-16 36.8-36.8v-435.2zM886.4 249.6h-748.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h748.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM886.4 75.2h-748.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h748.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8z" />
|
||||
<glyph unicode="" glyph-name="dataset" d="M934.4 392h-140.8c-6.4 0-11.2 3.2-12.8 8l-17.6 43.2v380.8c0 99.2-187.2 150.4-371.2 150.4-182.4 0-368-51.2-371.2-148.8v-435.2c0-97.6 192-152 371.2-152 32 0 64 1.6 94.4 4.8 1.6 0 3.2 0 3.2 1.6v-126.4c0-38.4 32-70.4 70.4-70.4h374.4c38.4 0 70.4 32 70.4 70.4v204.8c0 38.4-32 68.8-70.4 68.8zM494.4 441.6c-33.6-3.2-67.2-6.4-102.4-6.4-193.6 0-315.2 56-315.2 94.4v54.4c68.8-44.8 193.6-67.2 315.2-67.2 123.2 0 246.4 22.4 315.2 67.2v-97.6h-148.8c-30.4 1.6-56-17.6-64-44.8zM707.2 668.8c-1.6-38.4-123.2-94.4-315.2-94.4-193.6 0-315.2 56-315.2 94.4v72c68.8-44.8 192-68.8 315.2-68.8s246.4 22.4 315.2 67.2v-70.4zM392 918.4c192 0 315.2-56 315.2-94.4-1.6-38.4-123.2-94.4-315.2-94.4-193.6 0-315.2 56-315.2 94.4s121.6 94.4 315.2 94.4zM480 300.8c-28.8-3.2-57.6-4.8-88-4.8-190.4 0-315.2 57.6-315.2 96v54.4c68.8-44.8 193.6-67.2 315.2-67.2 33.6 0 65.6 1.6 97.6 4.8v-84.8c-3.2 1.6-6.4 1.6-9.6 1.6zM948.8 120c0-8-6.4-14.4-14.4-14.4h-376c-8 0-14.4 6.4-14.4 14.4v299.2c0 8 6.4 14.4 14.4 14.4h140.8c6.4 0 11.2-3.2 12.8-8l17.6-43.2c11.2-27.2 36.8-43.2 64-43.2h140.8c8 0 14.4-6.4 14.4-14.4v-204.8z" />
|
||||
<glyph unicode="" glyph-name="home" d="M891.2 587.2c-16 0-28.8-12.8-28.8-28.8v-436.8c0-22.4-17.6-40-40-40h-158.4v286.4c0 51.2-41.6 92.8-92.8 92.8h-121.6c-51.2 0-92.8-41.6-92.8-92.8v-284.8h-158.4c-22.4 0-40 17.6-40 40v436.8c0 16-12.8 28.8-28.8 28.8s-24-14.4-24-28.8v-436.8c0-52.8 43.2-96 96-96h624c52.8 0 96 43.2 96 96v436.8c-3.2 14.4-16 27.2-30.4 27.2zM416 83.2v284.8c0 19.2 16 36.8 36.8 36.8h121.6c19.2 0 36.8-16 36.8-36.8v-284.8h-195.2zM990.4 707.2l-427.2 275.2c-32 20.8-72 20.8-104 0l-425.6-275.2c-12.8-8-16-25.6-8-38.4s25.6-16 38.4-8l427.2 273.6c12.8 8 30.4 8 43.2 0l427.2-275.2c4.8-3.2 9.6-4.8 14.4-4.8 9.6 0 17.6 4.8 24 12.8 8 14.4 4.8 30.4-9.6 40z" />
|
||||
<glyph unicode="" glyph-name="toolbox" d="M880 793.6h-171.2v56c0 62.4-51.2 112-112 112h-169.6c-62.4 0-112-51.2-112-112v-56h-171.2c-68.8 0-124.8-56-124.8-124.8v-156.8c0-16 12.8-28.8 28.8-28.8h14.4v-304c0-65.6 52.8-118.4 118.4-118.4h662.4c65.6 0 118.4 52.8 118.4 118.4v304h14.4c16 0 28.8 12.8 28.8 28.8v156.8c0 68.8-56 124.8-124.8 124.8zM371.2 849.6c0 30.4 25.6 56 56 56h168c30.4 0 56-25.6 56-56v-56h-280v56zM76.8 668.8c0 36.8 30.4 68.8 68.8 68.8h736c36.8 0 68.8-30.4 68.8-68.8v-129.6h-873.6v129.6zM905.6 180.8c0-35.2-28.8-62.4-62.4-62.4h-662.4c-35.2 0-62.4 28.8-62.4 62.4v304h196.8v-99.2c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v99.2h281.6v-99.2c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v99.2h196.8v-304z" />
|
||||
<glyph unicode="" glyph-name="comments" d="M292.8 657.6c-54.4 0-99.2-44.8-99.2-99.2s44.8-99.2 99.2-99.2 99.2 44.8 99.2 99.2c0 54.4-44.8 99.2-99.2 99.2zM292.8 515.2c-24 0-43.2 19.2-43.2 43.2s19.2 43.2 43.2 43.2 43.2-19.2 43.2-43.2c0-24-20.8-43.2-43.2-43.2zM512 657.6c-54.4 0-99.2-44.8-99.2-99.2s44.8-99.2 99.2-99.2 99.2 44.8 99.2 99.2c0 54.4-44.8 99.2-99.2 99.2zM512 515.2c-24 0-43.2 19.2-43.2 43.2s19.2 43.2 43.2 43.2 43.2-19.2 43.2-43.2c0-24-19.2-43.2-43.2-43.2zM732.8 657.6c-54.4 0-99.2-44.8-99.2-99.2s44.8-99.2 99.2-99.2 99.2 44.8 99.2 99.2c0 54.4-44.8 99.2-99.2 99.2zM732.8 515.2c-24 0-43.2 19.2-43.2 43.2s19.2 43.2 43.2 43.2 43.2-19.2 43.2-43.2c0-24-20.8-43.2-43.2-43.2zM908.8 864h-793.6c-52.8 0-96-43.2-96-96v-512c0-35.2 17.6-65.6 48-83.2 14.4-8 32-12.8 48-12.8s32 4.8 48 12.8l140.8 81.6c6.4 3.2 12.8 4.8 19.2 4.8h584c52.8 0 96 43.2 96 96v412.8c1.6 52.8-41.6 96-94.4 96zM948.8 355.2c0-22.4-17.6-40-40-40h-584c-16 0-33.6-4.8-48-12.8l-140.8-81.6c-12.8-6.4-27.2-6.4-40 0s-19.2 19.2-19.2 33.6v513.6c0 22.4 17.6 40 40 40h793.6c22.4 0 40-17.6 40-40v-412.8z" />
|
||||
<glyph unicode="" glyph-name="job" d="M947.2 977.6c-30.4 24-68.8 32-107.2 22.4l-564.8-139.2h-113.6c-72 0-131.2-59.2-131.2-131.2v-243.2c0-60.8 40-110.4 96-126.4l70.4-284.8c8-33.6 36.8-56 72-56h30.4c22.4 0 43.2 9.6 57.6 27.2s19.2 40 14.4 62.4l-54.4 235.2 524.8-128c9.6-3.2 20.8-3.2 30.4-3.2 27.2 0 54.4 9.6 76.8 27.2 30.4 24 46.4 57.6 46.4 96v545.6c-1.6 38.4-19.2 72-48 96zM305.6 811.2l216 52.8v-512l-216 52.8v406.4zM86.4 486.4v243.2c0 41.6 33.6 75.2 75.2 75.2h88v-393.6h-88c-41.6 0-75.2 33.6-75.2 75.2zM312 83.2c-1.6-3.2-6.4-6.4-14.4-6.4h-30.4c-8 0-14.4 4.8-17.6 12.8l-65.6 265.6h72l60.8-257.6c0-8-1.6-12.8-4.8-14.4zM937.6 334.4c0-19.2-9.6-38.4-25.6-51.2s-38.4-17.6-59.2-12.8l-275.2 67.2v540.8l275.2 67.2c20.8 4.8 41.6 0 59.2-12.8 16-12.8 25.6-30.4 25.6-51.2v-547.2z" />
|
||||
<glyph unicode="" glyph-name="post" d="M825.6 1003.2h-627.2c-51.2 0-91.2-40-91.2-91.2v-800c0-51.2 41.6-92.8 92.8-92.8h627.2c51.2 0 92.8 41.6 92.8 92.8v800c-3.2 51.2-43.2 91.2-94.4 91.2zM860.8 112c0-19.2-16-36.8-36.8-36.8h-625.6c-19.2 0-36.8 16-36.8 36.8v800c0 19.2 16 36.8 36.8 36.8h627.2c19.2 0 36.8-16 36.8-36.8v-800zM736 878.4h-182.4c-24 0-44.8-19.2-44.8-44.8v-220.8c0-24 19.2-44.8 44.8-44.8h182.4c24 0 44.8 19.2 44.8 44.8v222.4c-1.6 24-20.8 43.2-44.8 43.2zM723.2 625.6h-156.8v196.8h156.8v-196.8zM275.2 795.2h121.6c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-121.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8zM275.2 584h121.6c16 0 28.8 12.8 28.8 28.8s-12.8 27.2-28.8 27.2h-121.6c-16 0-28.8-12.8-28.8-28.8s12.8-27.2 28.8-27.2zM752 430.4h-476.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h476.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM752 219.2h-476.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h476.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8z" />
|
||||
<glyph unicode="" glyph-name="support" d="M489.6 723.2h-268.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h268.8c16 0 28.8 12.8 28.8 28.8s-14.4 28.8-28.8 28.8zM220.8 540.8h123.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-123.2c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8zM427.2 470.4h-208c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h208c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8zM774.4 747.2c-36.8 4.8-70.4-12.8-88-44.8-8-14.4-1.6-30.4 11.2-38.4 14.4-8 30.4-1.6 38.4 11.2 6.4 11.2 19.2 17.6 32 16 14.4-1.6 25.6-12.8 27.2-25.6s-4.8-24-16-28.8c-24-11.2-41.6-40-41.6-67.2v-20.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v20.8c0 4.8 6.4 14.4 11.2 16 32 16 51.2 49.6 46.4 86.4-6.4 40-38.4 70.4-78.4 75.2zM764.8 465.6c-24 0-41.6-19.2-41.6-41.6 0-24 19.2-41.6 41.6-41.6 24 0 41.6 19.2 41.6 41.6 1.6 22.4-17.6 41.6-41.6 41.6zM884.8 873.6h-745.6c-65.6 0-118.4-52.8-118.4-118.4v-532.8c0-25.6 12.8-48 35.2-60.8 11.2-6.4 22.4-9.6 35.2-9.6s24 3.2 35.2 9.6l185.6 107.2c1.6 1.6 4.8 1.6 6.4 1.6h568c65.6 0 118.4 52.8 118.4 118.4v364.8c0 65.6-54.4 120-120 120zM948.8 387.2c0-35.2-28.8-62.4-62.4-62.4h-569.6c-12.8 0-24-3.2-35.2-9.6l-184-107.2c-6.4-3.2-12.8-1.6-14.4 0s-6.4 4.8-6.4 12.8v532.8c0 35.2 28.8 62.4 62.4 62.4h745.6c35.2 0 62.4-28.8 62.4-62.4v-366.4z" />
|
||||
<glyph unicode="" glyph-name="search-console" d="M928 1003.2h-832c-41.6 0-75.2-33.6-75.2-75.2v-832c0-41.6 33.6-76.8 76.8-76.8h832c41.6 0 76.8 33.6 76.8 76.8v832c-1.6 41.6-36.8 75.2-78.4 75.2zM948.8 96c0-11.2-9.6-20.8-20.8-20.8h-832c-11.2 0-20.8 9.6-20.8 20.8v305.6l142.4 120c14.4-9.6 32-14.4 49.6-14.4 28.8 0 54.4 12.8 70.4 33.6l78.4-44.8c-1.6-8-3.2-14.4-3.2-22.4 0-49.6 40-91.2 91.2-91.2s91.2 40 91.2 91.2v8l120 110.4c16-12.8 35.2-20.8 57.6-20.8 49.6 0 91.2 40 91.2 91.2s-41.6 89.6-92.8 89.6c-49.6 0-91.2-40-91.2-91.2 0-8 1.6-16 3.2-22.4l-113.6-104c-16 17.6-40 28.8-67.2 28.8-22.4 0-41.6-8-57.6-20.8l-86.4 52.8v3.2c0 49.6-40 91.2-91.2 91.2s-91.2-40-91.2-91.2c0-11.2 1.6-22.4 6.4-32l-107.2-91.2v452.8c0 11.2 9.6 20.8 20.8 20.8h832c11.2 0 20.8-9.6 20.8-20.8v-832zM268.8 563.2c-19.2 0-35.2 16-35.2 35.2s16 35.2 35.2 35.2 35.2-16 35.2-35.2-16-35.2-35.2-35.2zM539.2 472c0-19.2-16-35.2-35.2-35.2s-35.2 16-35.2 35.2 16 35.2 35.2 35.2 35.2-16 35.2-35.2zM736 660.8c0 19.2 16 35.2 35.2 35.2s35.2-16 35.2-35.2-16-35.2-35.2-35.2-35.2 16-35.2 35.2z" />
|
||||
<glyph unicode="" glyph-name="cart" d="M936 836.8c-17.6 22.4-43.2 33.6-72 33.6h-580.8l-4.8 72c-1.6 25.6-22.4 44.8-48 44.8h-134.4c-16 0-28.8-11.2-28.8-27.2s12.8-28.8 28.8-28.8h128l35.2-585.6c1.6-35.2 32-64 67.2-64h540.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-540.8c-6.4 0-11.2 4.8-11.2 11.2l-6.4 110.4h507.2c43.2 0 81.6 30.4 89.6 72l49.6 227.2c4.8 27.2-1.6 54.4-19.2 76.8zM899.2 771.2l-49.6-227.2c-3.2-16-19.2-28.8-35.2-28.8h-510.4l-17.6 299.2h577.6c11.2 0 20.8-4.8 28.8-12.8 6.4-8 9.6-19.2 6.4-30.4zM379.2 198.4c-52.8 0-94.4-43.2-94.4-96s43.2-96 94.4-96 94.4 43.2 94.4 96-43.2 96-94.4 96zM379.2 64c-20.8 0-38.4 17.6-38.4 40s17.6 40 38.4 40c20.8 0 38.4-17.6 38.4-40s-17.6-40-38.4-40zM769.6 198.4c-52.8 0-94.4-43.2-94.4-96s43.2-96 94.4-96 94.4 43.2 94.4 96c1.6 52.8-41.6 96-94.4 96zM769.6 64c-20.8 0-38.4 17.6-38.4 40s17.6 40 38.4 40c20.8 0 38.4-17.6 38.4-40 1.6-22.4-16-40-38.4-40z" />
|
||||
<glyph unicode="" glyph-name="attachment" d="M526.4 19.2h-8c-75.2 0-155.2 30.4-204.8 76.8-52.8 49.6-81.6 116.8-81.6 185.6v515.2c0 68.8 33.6 131.2 92.8 169.6 57.6 40 128 49.6 195.2 25.6l4.8-1.6c8-3.2 17.6-4.8 27.2-11.2 73.6-38.4 116.8-107.2 116.8-184v-438.4c0-43.2-14.4-83.2-41.6-113.6-4.8-6.4-8-9.6-11.2-11.2-28.8-27.2-64-41.6-102.4-41.6-43.2 0-86.4 19.2-113.6 52.8-27.2 32-41.6 72-41.6 115.2v368c0 16 12.8 28.8 28.8 28.8s28.8-12.8 28.8-28.8v-368c0-28.8 9.6-57.6 28.8-78.4 17.6-20.8 43.2-33.6 70.4-33.6 24 0 44.8 9.6 62.4 25.6 1.6 1.6 3.2 3.2 6.4 8 17.6 20.8 28.8 48 28.8 78.4v436.8c0 57.6-32 105.6-88 134.4l-1.6 1.6c-3.2 1.6-8 3.2-14.4 6.4l-4.8 1.6c-51.2 17.6-104 9.6-147.2-19.2s-67.2-72-67.2-123.2v-513.6c0-52.8 24-105.6 64-145.6 40-38.4 105.6-62.4 166.4-62.4 57.6-1.6 115.2 20.8 156.8 60.8s64 91.2 62.4 147.2v400c0 16 12.8 28.8 28.8 28.8s28.8-12.8 28.8-28.8v-398.4c1.6-68.8-27.2-136-80-187.2-54.4-49.6-121.6-78.4-190.4-78.4z" />
|
||||
<glyph unicode="" glyph-name="mail" d="M912 849.6h-800c-51.2 0-92.8-41.6-92.8-92.8v-491.2c0-51.2 41.6-92.8 92.8-92.8h800c51.2 0 92.8 41.6 92.8 92.8v491.2c0 51.2-41.6 92.8-92.8 92.8zM912 793.6c8 0 14.4-1.6 20.8-6.4l-398.4-241.6c-14.4-8-30.4-8-44.8 0l-398.4 241.6c6.4 3.2 12.8 6.4 20.8 6.4h800zM912 230.4h-800c-19.2 0-36.8 16-36.8 36.8v464l384-233.6c16-9.6 33.6-14.4 51.2-14.4s35.2 4.8 51.2 14.4l384 233.6v-464c3.2-20.8-14.4-36.8-33.6-36.8z" />
|
||||
<glyph unicode="" glyph-name="tag" d="M928 830.4c-16 16-40 24-62.4 20.8l-172.8-24c-64 94.4-177.6 200-364.8 171.2-16-1.6-25.6-16-24-32s16-25.6 32-24c145.6 22.4 238.4-49.6 296-124.8l-113.6-16c-16-1.6-28.8-9.6-40-19.2l-380.8-356.8c-14.4-14.4-22.4-33.6-22.4-52.8 0-20.8 8-40 22.4-52.8l294.4-278.4c14.4-12.8 32-20.8 51.2-20.8s36.8 6.4 51.2 20.8l382.4 361.6c11.2 11.2 19.2 25.6 22.4 41.6l49.6 323.2c3.2 24-4.8 46.4-20.8 62.4zM892.8 776l-51.2-324.8c0-3.2-3.2-8-4.8-9.6l-382.4-361.6c-6.4-6.4-17.6-6.4-24 0l-294.4 280c-3.2 3.2-4.8 8-4.8 12.8s1.6 9.6 4.8 12.8l379.2 358.4c3.2 3.2 6.4 4.8 9.6 4.8l140.8 19.2c25.6-44.8 36.8-80 38.4-84.8 3.2-12.8 14.4-19.2 27.2-19.2 3.2 0 4.8 0 8 1.6 14.4 4.8 22.4 20.8 19.2 35.2 0 1.6-11.2 33.6-33.6 76.8l148.8 20.8h3.2c6.4 0 9.6-3.2 12.8-4.8 1.6-4.8 4.8-9.6 3.2-17.6z" />
|
||||
<glyph unicode="" glyph-name="target" d="M371.2 99.2c-176 60.8-294.4 225.6-294.4 412.8 0 240 195.2 435.2 435.2 435.2 179.2 0 342.4-112 406.4-278.4 4.8-14.4 22.4-20.8 36.8-16s20.8 22.4 16 36.8c-73.6 187.2-257.6 313.6-459.2 313.6-272 0-491.2-219.2-491.2-491.2 0-211.2 134.4-398.4 332.8-465.6 3.2-1.6 6.4-1.6 9.6-1.6 11.2 0 22.4 8 27.2 19.2 3.2 14.4-4.8 30.4-19.2 35.2zM512 636.8c27.2 0 52.8-9.6 75.2-25.6 12.8-9.6 30.4-8 40 4.8s8 30.4-4.8 40c-32 24-68.8 36.8-108.8 36.8-97.6 0-177.6-80-177.6-177.6 0-40 12.8-78.4 38.4-108.8 4.8-6.4 14.4-11.2 22.4-11.2 6.4 0 12.8 1.6 17.6 6.4 12.8 9.6 14.4 27.2 4.8 40-17.6 20.8-25.6 48-25.6 75.2-3.2 65.6 51.2 120 118.4 120zM732.8 563.2c-150.4 0-272-121.6-272-272s121.6-272 272-272 272 121.6 272 272-123.2 272-272 272zM732.8 75.2c-118.4 0-216 97.6-216 216s97.6 216 216 216 216-97.6 216-216-97.6-216-216-216zM396.8 260.8c-99.2 44.8-163.2 145.6-163.2 254.4 0 153.6 124.8 278.4 278.4 278.4 108.8 0 209.6-64 254.4-164.8 6.4-14.4 22.4-20.8 36.8-14.4s20.8 22.4 14.4 36.8c-54.4 121.6-174.4 198.4-305.6 198.4-184 0-334.4-150.4-334.4-334.4 0-131.2 76.8-251.2 196.8-304 3.2-1.6 8-3.2 11.2-3.2 11.2 0 20.8 6.4 25.6 16 6.4 14.4 0 30.4-14.4 36.8zM817.6 361.6l-110.4-110.4-44.8 44.8c-11.2 11.2-28.8 11.2-40 0s-11.2-28.8 0-40l64-64c4.8-4.8 12.8-8 19.2-8s14.4 3.2 19.2 8l129.6 129.6c11.2 11.2 11.2 28.8 0 40s-25.6 11.2-36.8 0z" />
|
||||
<glyph unicode="" glyph-name="facebook" d="M579.2 3.2h-124.8c-32 0-57.6 27.2-57.6 60.8v380.8h-102.4c-32 0-57.6 27.2-57.6 60.8v110.4c0 33.6 25.6 60.8 57.6 60.8h99.2v100.8c0 145.6 86.4 243.2 214.4 243.2h96c32 0 57.6-27.2 57.6-60.8v-129.6c0-33.6-25.6-60.8-57.6-60.8h-68.8v-91.2h91.2c19.2-1.6 35.2-9.6 46.4-22.4 11.2-14.4 16-33.6 12.8-51.2l-19.2-108.8c-3.2-28.8-27.2-49.6-57.6-49.6h-73.6v-382.4c0-32-25.6-60.8-56-60.8zM424 500.8c16 0 28.8-12.8 28.8-28.8v-408c0-3.2 1.6-4.8 1.6-4.8h124.8s1.6 1.6 1.6 4.8v411.2c0 16 12.8 28.8 28.8 28.8h100.8s1.6 0 1.6 1.6v1.6l19.2 107.2c0 3.2 0 4.8-1.6 6.4 0 0-1.6 1.6-3.2 1.6h-118.4c-16 0-28.8 12.8-28.8 28.8v113.6c0 28.8 4.8 60.8 59.2 60.8h65.6s1.6 1.6 1.6 4.8v128c0 3.2-1.6 4.8-1.6 4.8h-94.4c-96 0-158.4-73.6-158.4-187.2v-129.6c0-16-12.8-28.8-28.8-28.8h-128s-1.6-1.6-1.6-4.8v-110.4c0-3.2 1.6-4.8 1.6-4.8l129.6 3.2z" />
|
||||
<glyph unicode="" glyph-name="movie" d="M358.4 766.4c-60.8 0-110.4-49.6-110.4-110.4s49.6-110.4 110.4-110.4 110.4 49.6 110.4 110.4-48 110.4-110.4 110.4zM358.4 600c-30.4 0-54.4 24-54.4 54.4s24 54.4 54.4 54.4 54.4-24 54.4-54.4c1.6-30.4-24-54.4-54.4-54.4zM665.6 544c60.8 0 110.4 49.6 110.4 110.4s-49.6 110.4-110.4 110.4-110.4-49.6-110.4-110.4 48-110.4 110.4-110.4zM665.6 710.4c30.4 0 54.4-24 54.4-54.4s-24-54.4-54.4-54.4-54.4 24-54.4 54.4c-1.6 28.8 24 54.4 54.4 54.4zM358.4 480c-60.8 0-110.4-49.6-110.4-110.4s49.6-110.4 110.4-110.4 110.4 49.6 110.4 110.4-48 110.4-110.4 110.4zM358.4 313.6c-30.4 0-54.4 24-54.4 54.4s24 54.4 54.4 54.4 54.4-24 54.4-54.4-24-54.4-54.4-54.4zM665.6 257.6c60.8 0 110.4 49.6 110.4 110.4s-49.6 112-110.4 112-110.4-49.6-110.4-110.4 48-112 110.4-112zM665.6 424c30.4 0 54.4-24 54.4-54.4s-24-54.4-54.4-54.4-54.4 24-54.4 54.4 24 54.4 54.4 54.4zM976 75.2h-236.8c156.8 83.2 265.6 248 265.6 436.8 0 272-220.8 491.2-492.8 491.2s-491.2-219.2-491.2-491.2 219.2-492.8 491.2-492.8h464c16 0 28.8 12.8 28.8 28.8s-12.8 27.2-28.8 27.2zM76.8 512c0 240 195.2 435.2 435.2 435.2s436.8-195.2 436.8-435.2-196.8-436.8-436.8-436.8-435.2 196.8-435.2 436.8z" />
|
||||
<glyph unicode="" glyph-name="instagram" d="M512 747.2c-129.6 0-235.2-105.6-235.2-235.2s105.6-235.2 235.2-235.2 235.2 105.6 235.2 235.2-105.6 235.2-235.2 235.2zM512 332.8c-99.2 0-179.2 80-179.2 179.2s80 179.2 179.2 179.2c99.2 0 179.2-80 179.2-179.2s-80-179.2-179.2-179.2zM769.6 862.4c-33.6 0-60.8-27.2-60.8-60.8s27.2-60.8 60.8-60.8c33.6 0 60.8 27.2 60.8 60.8s-27.2 60.8-60.8 60.8zM768 1019.2h-512c-139.2 0-251.2-112-251.2-251.2v-512c0-139.2 113.6-251.2 252.8-251.2h512c139.2 0 251.2 113.6 251.2 252.8v510.4c0 139.2-113.6 251.2-252.8 251.2zM964.8 256c0-108.8-88-196.8-195.2-196.8h-513.6c-107.2 0-195.2 88-195.2 196.8v512c0 107.2 88 195.2 195.2 195.2h512c108.8 0 196.8-88 196.8-196.8v-510.4z" />
|
||||
<glyph unicode="" glyph-name="light-bulb" d="M808 784s0 1.6-1.6 1.6c-8 22.4-27.2 70.4-70.4 116.8-46.4 49.6-102.4 81.6-164.8 94.4-40 8-78.4 8-118.4 0-62.4-11.2-118.4-43.2-164.8-92.8-43.2-46.4-60.8-94.4-70.4-118.4-11.2-28.8-28.8-76.8-24-142.4 3.2-48 19.2-96 48-142.4 11.2-17.6 25.6-41.6 46.4-70.4 6.4-9.6 11.2-16 16-22.4l1.6-1.6c12.8-17.6 20.8-28.8 28.8-44.8 8-17.6 14.4-35.2 19.2-52.8 3.2-12.8 14.4-20.8 27.2-20.8h265.6c12.8 0 24 8 27.2 20.8 4.8 19.2 11.2 36.8 19.2 51.2 8 16 16 27.2 27.2 43.2l25.6 35.2c16 22.4 28.8 41.6 40 60.8s41.6 72 46.4 142.4c3.2 65.6-14.4 113.6-24 142.4zM755.2 764.8c9.6-25.6 24-64 19.2-116.8-4.8-57.6-30.4-102.4-40-118.4s-22.4-35.2-36.8-56l-24-35.2c-12.8-17.6-22.4-32-32-51.2-6.4-12.8-12.8-27.2-17.6-41.6h-224c-4.8 14.4-9.6 27.2-16 41.6-9.6 20.8-19.2 35.2-33.6 52.8l-1.6 1.6c-4.8 6.4-9.6 12.8-16 22.4-19.2 27.2-33.6 49.6-44.8 67.2-8 14.4-35.2 59.2-40 118.4-4.8 52.8 9.6 91.2 20.8 118.4 8 20.8 22.4 60.8 59.2 99.2 40 40 84.8 65.6 136 76.8 32 6.4 64 6.4 96 0 51.2-11.2 96-36.8 136-78.4 36.8-38.4 51.2-78.4 59.2-99.2v-1.6zM614.4 214.4h-204.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h203.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-27.2 28.8zM579.2 75.2h-134.4c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h134.4c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8z" />
|
||||
<glyph unicode="" glyph-name="mail-reply" d="M990.4 408l-76.8 76.8c-8 8-19.2 12.8-32 12.8s-24-4.8-32-12.8l-163.2-164.8c-6.4-6.4-9.6-14.4-12.8-22.4l-20.8-97.6c-3.2-14.4 1.6-30.4 12.8-41.6 8-8 20.8-12.8 32-12.8 3.2 0 6.4 0 9.6 1.6l97.6 20.8c8 1.6 16 6.4 22.4 12.8l163.2 163.2c8 8 12.8 19.2 12.8 32 1.6 11.2-3.2 24-12.8 32zM788.8 222.4l-78.4-17.6 17.6 78.4 153.6 153.6 60.8-60.8-153.6-153.6zM539.2 264h-427.2c-19.2 0-35.2 16-35.2 35.2v484.8l371.2-225.6c16-9.6 32-14.4 49.6-14.4s35.2 4.8 49.6 14.4l374.4 225.6v-220.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v224c0 49.6-41.6 91.2-91.2 91.2h-776c-49.6 0-91.2-41.6-91.2-91.2v-488c0-49.6 40-91.2 91.2-91.2h428.8c16 0 28.8 12.8 28.8 28.8s-14.4 27.2-30.4 27.2zM520 606.4c-12.8-8-28.8-8-41.6 0l-358.4 216h756.8l-356.8-216z" />
|
||||
<glyph unicode="" glyph-name="podcast" d="M512 323.2c51.2 0 99.2 19.2 134.4 56 35.2 35.2 54.4 81.6 52.8 131.2v305.6c0 104-84.8 187.2-187.2 187.2-104 0-187.2-84.8-187.2-187.2v-304c-1.6-104 83.2-188.8 187.2-188.8zM379.2 816c0 72 59.2 131.2 131.2 131.2s131.2-59.2 131.2-131.2v-305.6c0-35.2-12.8-67.2-36.8-92.8-25.6-25.6-59.2-40-94.4-40-72 0-131.2 59.2-131.2 131.2v307.2zM843.2 520c0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8c0-152-123.2-275.2-276.8-275.2-152 0-275.2 123.2-275.2 275.2 0 16-12.8 28.8-28.8 28.8s-28.8-12.8-28.8-28.8c0-172.8 132.8-315.2 302.4-329.6v-113.6h-112c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h280c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-112v113.6c174.4 12.8 308.8 155.2 308.8 329.6z" />
|
||||
<glyph unicode="" glyph-name="pencil" d="M990.4 819.2c-54.4 56-108.8 113.6-166.4 168-9.6 9.6-20.8 16-33.6 16s-24-4.8-33.6-12.8l-624-620.8c-8-8-14.4-19.2-19.2-30.4l-91.2-278.4c-3.2-9.6-1.6-20.8 3.2-28.8 3.2-4.8 11.2-12.8 27.2-12.8h4.8l281.6 94.4c11.2 3.2 20.8 9.6 30.4 19.2l620.8 620.8c9.6 9.6 14.4 20.8 14.4 33.6-1.6 11.2-6.4 24-14.4 32zM329.6 172.8c-1.6-1.6-4.8-4.8-8-4.8l-232-78.4 76.8 230.4c1.6 3.2 3.2 6.4 4.8 8l462.4 460.8 156.8-156.8-460.8-459.2zM830.4 673.6l-156.8 156.8 115.2 113.6c52.8-51.2 105.6-105.6 155.2-156.8l-113.6-113.6z" />
|
||||
<glyph unicode="" glyph-name="text-align-left" d="M48 904h928c16 0 28.8 12.8 28.8 28.8s-12.8 27.2-28.8 27.2h-928c-16 0-27.2-12.8-27.2-27.2s11.2-28.8 27.2-28.8zM976 680h-928c-16 0-28.8-12.8-28.8-28.8s12.8-27.2 28.8-27.2h928c16 0 28.8 12.8 28.8 28.8s-12.8 27.2-28.8 27.2zM976 400h-928c-16 0-28.8-12.8-28.8-28.8s12.8-27.2 28.8-27.2h928c16 0 28.8 12.8 28.8 28.8s-12.8 27.2-28.8 27.2zM686.4 120h-638.4c-16 0-28.8-12.8-28.8-28.8s12.8-27.2 28.8-27.2h638.4c16 0 28.8 12.8 28.8 28.8s-14.4 27.2-28.8 27.2z" />
|
||||
<glyph unicode="" glyph-name="text" d="M844.8 1003.2h-665.6c-54.4 0-97.6-43.2-97.6-96v-91.2c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v91.2c0 22.4 17.6 41.6 41.6 41.6h216v-872h-104c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h443.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-104v870.4h216c22.4 0 41.6-17.6 41.6-41.6v-91.2c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v92.8c-4.8 52.8-48 96-102.4 96zM572.8 75.2h-121.6v872h121.6v-872z" />
|
||||
<glyph unicode="" glyph-name="heading" d="M806.4 1003.2h-588.8c-51.2 0-94.4-41.6-94.4-94.4v-92.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v94.4c0 20.8 17.6 38.4 38.4 38.4h180.8v-622.4h-92.8c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h408c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-91.2v620.8h184c20.8 0 38.4-17.6 38.4-38.4v-92.8c0-16 12.8-28.8 28.8-28.8s28.8 12.8 28.8 28.8v94.4c-3.2 51.2-44.8 92.8-97.6 92.8zM568 324.8h-112v622.4h112v-622.4zM856 75.2h-688c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h689.6c16 0 28.8 12.8 28.8 28.8s-14.4 28.8-30.4 28.8z" />
|
||||
<glyph unicode="" glyph-name="thumbs-up" d="M153.6 632h-51.2c-46.4 0-83.2-36.8-83.2-83.2v-368c0-46.4 36.8-83.2 83.2-83.2h49.6c46.4 0 83.2 36.8 83.2 83.2v368c1.6 46.4-35.2 83.2-81.6 83.2zM180.8 180.8c0-14.4-12.8-27.2-27.2-27.2h-51.2c-14.4 0-27.2 12.8-27.2 27.2v368c0 14.4 12.8 27.2 27.2 27.2h49.6c14.4 0 27.2-12.8 27.2-27.2v-368zM1001.6 568c-1.6 6.4-1.6 12.8-3.2 17.6-9.6 33.6-30.4 59.2-57.6 73.6-27.2 12.8-54.4 12.8-78.4 12.8h-187.2l27.2 124.8c4.8 19.2 9.6 43.2 3.2 68.8-12.8 43.2-59.2 70.4-102.4 59.2-27.2-6.4-48-27.2-62.4-41.6-8-8-20.8-20.8-38.4-36.8-155.2-152-185.6-184-190.4-200-8-20.8-8-41.6-8-62.4v-350.4c0-27.2 0-73.6 30.4-104s75.2-32 104-32h320c19.2 0 44.8 0 67.2 12.8 32 17.6 46.4 51.2 56 73.6 75.2 174.4 115.2 281.6 121.6 318.4 1.6 24 1.6 46.4-1.6 65.6zM945.6 510.4c-3.2-17.6-22.4-83.2-116.8-305.6-8-20.8-17.6-38.4-30.4-46.4-9.6-4.8-25.6-4.8-40-4.8h-316.8c-27.2 0-52.8 1.6-67.2 14.4-12.8 12.8-14.4 40-14.4 65.6v350.4c0 16 0 28.8 4.8 40 14.4 22.4 129.6 132.8 179.2 180.8 16 16 30.4 28.8 38.4 36.8 11.2 11.2 24 24 36.8 27.2s30.4-6.4 35.2-20.8c3.2-11.2 0-27.2-3.2-41.6l-35.2-160c-1.6-8 0-17.6 4.8-24s12.8-11.2 22.4-9.6l220.8 3.2c19.2 0 38.4 0 51.2-6.4s24-20.8 28.8-38.4c1.6-3.2 1.6-8 3.2-11.2 1.6-14.4 1.6-30.4-1.6-49.6z" />
|
||||
<glyph unicode="" glyph-name="twitter" d="M329.6 97.6c-113.6 0-222.4 32-313.6 94.4-11.2 8-16 20.8-11.2 33.6s17.6 19.2 30.4 17.6c14.4-1.6 28.8-3.2 43.2-3.2 59.2 0 116.8 14.4 168 40-62.4 22.4-112 73.6-134.4 140.8-3.2 9.6 0 20.8 6.4 27.2 1.6 1.6 3.2 3.2 4.8 3.2-49.6 41.6-80 102.4-80 171.2v1.6c0 9.6 4.8 19.2 14.4 24 4.8 3.2 11.2 4.8 16 3.2-19.2 33.6-28.8 70.4-28.8 110.4s9.6 78.4 30.4 112c4.8 8 12.8 12.8 22.4 14.4 9.6 0 17.6-3.2 24-9.6 86.4-107.2 211.2-174.4 347.2-188.8v12.8c0 123.2 99.2 222.4 222.4 222.4 56 0 108.8-20.8 150.4-59.2 22.4 6.4 44.8 20.8 67.2 35.2 9.6 6.4 20.8 12.8 30.4 19.2 9.6 4.8 20.8 4.8 28.8 0 9.6-6.4 14.4-16 12.8-27.2-1.6-8-4.8-40-16-72h24c11.2 1.6 22.4-3.2 28.8-12.8s6.4-22.4 0-30.4c-22.4-35.2-56-57.6-89.6-80l-14.4-9.6v-11.2c-1.6-283.2-219.2-579.2-584-579.2zM142.4 188.8c59.2-22.4 121.6-35.2 187.2-35.2 329.6 0 526.4 267.2 526.4 526.4v20.8c-1.6 9.6 3.2 19.2 11.2 25.6 9.6 6.4 19.2 12.8 27.2 19.2l33.6 24c-4.8 0-8 1.6-12.8 1.6-9.6 1.6-17.6 8-20.8 17.6s-3.2 19.2 3.2 27.2c3.2 4.8 8 12.8 11.2 20.8-22.4-12.8-46.4-25.6-73.6-30.4-9.6-1.6-19.2 1.6-25.6 8-32 33.6-75.2 52.8-121.6 52.8-91.2 0-166.4-75.2-166.4-166.4 0-11.2 1.6-24 4.8-38.4 1.6-8 0-17.6-6.4-24-4.8-6.4-14.4-9.6-22.4-9.6-148.8 9.6-289.6 73.6-392 180.8-4.8-14.4-6.4-30.4-6.4-46.4 0-56 27.2-107.2 73.6-137.6 11.2-6.4 14.4-19.2 11.2-32-3.2-11.2-16-19.2-27.2-19.2-17.6 0-36.8 3.2-54.4 8 16-60.8 64-108.8 128-121.6 12.8-3.2 22.4-14.4 22.4-27.2s-8-24-20.8-27.2c-17.6-4.8-33.6-6.4-48-8 30.4-44.8 80-73.6 136-75.2 11.2 0 22.4-8 25.6-19.2s0-24-9.6-30.4c-56-46.4-123.2-73.6-193.6-84.8z" />
|
||||
<glyph unicode="" glyph-name="seo-title" d="M225.6 932.8h572.8c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-572.8c-16 0-28.8-12.8-28.8-28.8s14.4-28.8 28.8-28.8zM716.8 817.6h-409.6c-54.4 0-97.6-43.2-97.6-97.6v-30.4c0-54.4 43.2-97.6 97.6-97.6h409.6c54.4 0 97.6 43.2 97.6 97.6v30.4c0 54.4-43.2 97.6-97.6 97.6zM758.4 689.6c0-22.4-19.2-41.6-41.6-41.6h-409.6c-22.4 0-41.6 19.2-41.6 41.6v30.4c0 22.4 19.2 41.6 41.6 41.6h409.6c22.4 0 41.6-19.2 41.6-41.6v-30.4zM976 972.8c-16 0-28.8-12.8-28.8-28.8v-812.8c0-22.4-19.2-41.6-41.6-41.6h-787.2c-22.4 0-41.6 19.2-41.6 41.6v814.4c0 14.4-12.8 27.2-28.8 27.2s-27.2-12.8-27.2-27.2v-812.8c0-54.4 43.2-97.6 97.6-97.6h788.8c54.4 0 97.6 43.2 97.6 97.6v812.8c0 14.4-12.8 27.2-28.8 27.2z" />
|
||||
<glyph unicode="" glyph-name="user" d="M512 587.2c118.4 0 214.4 92.8 214.4 208s-96 208-214.4 208-214.4-92.8-214.4-208 96-208 214.4-208zM512 947.2c88 0 158.4-68.8 158.4-152s-72-152-158.4-152c-88 0-158.4 68.8-158.4 152s70.4 152 158.4 152zM612.8 504h-201.6c-152 0-276.8-123.2-276.8-276.8v-158.4c0-27.2 22.4-49.6 49.6-49.6h654.4c27.2 0 49.6 22.4 49.6 49.6v158.4c1.6 153.6-123.2 276.8-275.2 276.8zM833.6 75.2h-643.2v152c0 121.6 99.2 220.8 220.8 220.8h201.6c121.6 0 220.8-99.2 220.8-220.8v-152z" />
|
||||
<glyph unicode="" glyph-name="seo" d="M251.2 544h49.6c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-49.6c-43.2 0-78.4-35.2-78.4-78.4v-49.6c0-43.2 35.2-78.4 78.4-78.4 11.2 0 22.4-9.6 22.4-22.4v-49.6c0-11.2-9.6-22.4-22.4-22.4h-49.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8h49.6c43.2 0 78.4 35.2 78.4 78.4v49.6c0 43.2-35.2 78.4-78.4 78.4-11.2 0-22.4 9.6-22.4 22.4v49.6c0 12.8 11.2 22.4 22.4 22.4zM492.8 544h70.4c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-70.4c-43.2 0-78.4-35.2-78.4-78.4v-198.4c0-43.2 35.2-78.4 78.4-78.4h70.4c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-70.4c-11.2 0-22.4 9.6-22.4 22.4v72h51.2c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-51.2v72c0 6.4 9.6 16 22.4 16zM772.8 600h-38.4c-43.2 0-78.4-35.2-78.4-78.4v-196.8c0-43.2 35.2-78.4 78.4-78.4h38.4c43.2 0 78.4 35.2 78.4 78.4v196.8c0 43.2-35.2 78.4-78.4 78.4zM795.2 324.8c0-12.8-9.6-22.4-22.4-22.4h-38.4c-12.8 0-22.4 9.6-22.4 22.4v196.8c0 12.8 9.6 22.4 22.4 22.4h38.4c12.8 0 22.4-9.6 22.4-22.4v-196.8zM928 939.2h-832c-41.6 0-76.8-33.6-76.8-76.8v-700.8c0-41.6 33.6-76.8 76.8-76.8h832c41.6 0 76.8 33.6 76.8 76.8v700.8c0 41.6-35.2 76.8-76.8 76.8zM96 883.2h832c11.2 0 20.8-9.6 20.8-20.8v-132.8h-872v132.8c0 11.2 8 20.8 19.2 20.8zM928 140.8h-832c-11.2 0-20.8 9.6-20.8 20.8v512h872v-512c1.6-11.2-8-20.8-19.2-20.8zM587.2 779.2h1.6c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-1.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8zM697.6 779.2h1.6c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-1.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8zM808 779.2h1.6c16 0 28.8 12.8 28.8 28.8s-12.8 28.8-28.8 28.8h-1.6c-16 0-28.8-12.8-28.8-28.8s12.8-28.8 28.8-28.8z" />
|
||||
<glyph unicode="" glyph-name="youtube" d="M987.2 750.4c-11.2 43.2-44.8 76.8-88 88-76.8 20.8-387.2 20.8-387.2 20.8s-310.4 0-387.2-20.8c-43.2-11.2-76.8-44.8-88-88-20.8-78.4-20.8-238.4-20.8-238.4s0-161.6 20.8-238.4c11.2-43.2 44.8-76.8 88-88 76.8-20.8 387.2-20.8 387.2-20.8s310.4 0 387.2 20.8c43.2 11.2 76.8 44.8 88 88 20.8 76.8 20.8 238.4 20.8 238.4s0 160-20.8 238.4zM412.8 363.2v297.6l257.6-148.8-257.6-148.8z" />
|
||||
</font></defs></svg>
|
||||
|
After Width: | Height: | Size: 83 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 4.6 KiB |
@@ -0,0 +1 @@
|
||||
<svg width="38" height="38" viewBox="0 0 38 38" xmlns="http://www.w3.org/2000/svg" stroke="#6c7781"><g fill="none" fill-rule="evenodd"><g transform="translate(1 1)" stroke-width="2"><circle stroke-opacity=".5" cx="18" cy="18" r="18"/><path d="M36 18c0-9.94-8.06-18-18-18"><animateTransform attributeName="transform" type="rotate" from="0 18 18" to="360 18 18" dur="1s" repeatCount="indefinite"/></path></g></g></svg>
|
||||
|
After Width: | Height: | Size: 417 B |
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg viewBox="0 0 630 101.88" xmlns="http://www.w3.org/2000/svg"><g fill="#636eb9"><path d="m235.33 89.2-12.02-17.2a19.23 19.23 0 0 1 -2.27.09h-13.28v17.11h-10.93v-58.84h24.17c15.46 0 25.05 7.9 25.05 20.93 0 8.91-4.54 15.47-12.53 18.58l13.58 19.33zm-14.8-49.59h-12.77v23.45h12.77c9.59 0 14.54-4.37 14.54-11.77s-4.95-11.68-14.54-11.68z"/><path d="m294.41 62.89v26.31h-9.92v-5.46c-2.52 3.87-7.4 6.05-14.12 6.05-10.25 0-16.73-5.63-16.73-13.45 0-7.48 5.05-13.36 18.66-13.36h11.6v-.68c0-6.13-3.7-9.75-11.18-9.75-5 0-10.25 1.68-13.61 4.46l-4.11-7.65c4.79-3.7 11.77-5.55 19-5.55 12.93 0 20.41 6.19 20.41 19.08zm-10.51 12.28v-5.17h-10.84c-7.14 0-9.08 2.69-9.08 6 0 3.78 3.2 6.22 8.58 6.22 5.12-.08 9.58-2.43 11.34-7.05z"/><path d="m352.07 63.48v25.72h-10.51v-24.37c0-8-3.95-11.86-10.68-11.86-7.48 0-12.52 4.54-12.52 13.54v22.69h-10.51v-44.88h10v5.8c3.45-4.12 8.92-6.31 15.47-6.31 10.76 0 18.75 6.19 18.75 19.67z"/><path d="m383.75 70-7.82 7.4v11.8h-10.51v-62.37h10.51v37.66l21.77-20.17h12.61l-18.75 18.83 20.51 26.05h-12.77z"/></g><g fill="#090e11"><path d="m473.93 89.2-.08-39-19.34 32.28h-4.87l-19.33-31.78v38.5h-10.43v-58.84h9l23.36 39 22.95-39h9l.08 58.84z"/><path d="m536.71 62.89v26.31h-9.92v-5.46c-2.52 3.87-7.4 6.05-14.12 6.05-10.25 0-16.73-5.63-16.73-13.45 0-7.48 5.06-13.34 18.66-13.34h11.6v-.7c0-6.13-3.7-9.75-11.18-9.75-5 0-10.25 1.68-13.61 4.46l-4.12-7.65c4.79-3.7 11.77-5.55 19-5.55 12.94 0 20.42 6.19 20.42 19.08zm-10.51 12.28v-5.17h-10.84c-7.15 0-9.08 2.69-9.08 6 0 3.78 3.2 6.22 8.58 6.22 5.14-.08 9.58-2.43 11.34-7.05z"/><path d="m577.13 86.76c-2.52 2-6.3 3-10.08 3-9.84 0-15.47-5.21-15.47-15.13v-21.57h-7.4v-8.41h7.4v-10.25h10.51v10.25h12v8.41h-12v21.35c0 4.37 2.18 6.72 6.22 6.72a9.38 9.38 0 0 0 5.88-1.85z"/><path d="m630 63.48v25.72h-10.51v-24.37c0-8-4-11.86-10.67-11.86-7.48 0-12.53 4.54-12.53 13.54v22.69h-10.5v-62.37h10.5v22.7c3.45-3.7 8.75-5.72 15-5.72 10.71 0 18.71 6.19 18.71 19.67z"/><path d="m165.97 52.31-27.36 1.23 4.82 7.55-45.63 29.16-45.25-19.01-52.55 21.89 3.64 8.75 48.89-20.37 46.18 19.4 49.82-31.84 4.83 7.55z"/></g><path d="m19.43 80.31 33.11-13.8 1.62.68v-19.61h-34.73zm75.76-80.31v84.43l2.61 1.1 32.12-20.53v-65zm-37.88 68.52 34.69 14.58v-59.31h-34.69z" fill="#636eb9"/></svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg viewBox="0 0 462.03 462.03" xmlns="http://www.w3.org/2000/svg" width="20" class="rank-math-icon"><g fill="#fff"><path d="m462 234.84-76.17 3.43 13.43 21-127 81.18-126-52.93-146.26 60.97 10.14 24.34 136.1-56.71 128.57 54 138.69-88.61 13.43 21z"/><path d="m54.1 312.78 92.18-38.41 4.49 1.89v-54.58h-96.67zm210.9-223.57v235.05l7.26 3 89.43-57.05v-181zm-105.44 190.79 96.67 40.62v-165.19h-96.67z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 449 B |
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg opacity=".7" style="margin-bottom:-7px;width:24px" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg"><path d="m17 2a1.0001 1.0001 0 0 0-0.11133 0.0058594c-2.6982 0.060284-4.8887 2.2822-4.8887 4.9941 0 2.6994 1.9427 5 4.375 5 0.60058 0 1.1422-0.094264 1.625-0.26562v26.266h-1a1.0001 1.0001 0 1 0 0 2c0.55454 0 1 0.44546 1 1s-0.44546 1-1 1h-1a1.0001 1.0001 0 0 0-1 1v4a1.0001 1.0001 0 0 0 1 1h18a1.0001 1.0001 0 0 0 1-1v-4a1.0001 1.0001 0 0 0-1-1h-1c-0.55454 0-1-0.44546-1-1s0.44546-1 1-1a1.0001 1.0001 0 0 0 0.099609-0.003906 1.0001 1.0001 0 0 0-0.099609-1.9961h-1v-26.266c0.48282 0.17136 1.0244 0.26562 1.625 0.26562 2.4323 0 4.375-2.3006 4.375-5 0-2.7153-2.1957-4.939-4.8984-4.9941a1.0001 1.0001 0 0 0-0.10156-0.0058594h-16zm0 2c2.7341 0 4.9319 2.1644 4.9941 4.8828a1.0001 1.0001 0 0 0 0.29492 0.83398 1.0001 1.0001 0 0 0 0.00586 0.0058593 1.0001 1.0001 0 0 0 0.013672 0.013672 1.0001 1.0001 0 0 0 0.84961 0.26367h3.6738a1.0001 1.0001 0 0 0 0.88867-0.29297 1.0001 1.0001 0 0 0 0.001953-0.0019531 1.0001 1.0001 0 0 0 0.00586-0.0058593 1.0001 1.0001 0 0 0 0.007812-0.0078126 1.0001 1.0001 0 0 0 0.26953-0.81641c0.066301-2.7147 2.2627-4.875 4.9941-4.875 1.6685 0 3 1.3315 3 3 0 1.7186-1.3073 3-2.375 3-0.74136 0-1.1462-0.18-1.3477-0.34961-0.20142-0.16961-0.27734-0.34314-0.27734-0.65039 0-0.51089 0.11963-0.67733 0.24805-0.79102 0.12842-0.11369 0.36929-0.20898 0.75195-0.20898a1.0001 1.0001 0 1 0 0-2c-0.72233 0-1.4828 0.18583-2.0781 0.71289s-0.92188 1.361-0.92188 2.2871v29h-10v-29c0-0.92646-0.32831-1.762-0.92383-2.2891s-1.3541-0.71094-2.0762-0.71094a1.0001 1.0001 0 1 0 0 2c0.38297 0 0.62372 0.095499 0.75195 0.20898 0.12824 0.11349 0.24805 0.27948 0.24805 0.79102 0 0.30725-0.07592 0.48078-0.27734 0.65039-0.20142 0.16961-0.6063 0.34961-1.3477 0.34961-1.0677 0-2.375-1.2814-2.375-3 0-1.6685 1.3315-3 3-3zm4.8848 0h6.2305c-1.0756 1.0512-1.8102 2.4444-2.0352 4h-2.1602c-0.22495-1.5556-0.95952-2.9488-2.0352-4zm1.0996 7.9863a1.0001 1.0001 0 0 0-0.98438 1.0137v22a1.0001 1.0001 0 1 0 2 0v-22a1.0001 1.0001 0 0 0-1.0156-1.0137zm4 0a1.0001 1.0001 0 0 0-0.98438 1.0137v22a1.0001 1.0001 0 1 0 2 0v-22a1.0001 1.0001 0 0 0-1.0156-1.0137zm-7.1719 28.014h10.375c-0.11353 0.31492-0.1875 0.64805-0.1875 1a1.0001 1.0001 0 0 0 0.29492 0.70898c0.027814 0.099682 0.066038 0.19467 0.10156 0.29102h-10.793c0.035524-0.096344 0.073748-0.19133 0.10156-0.29102a1.0001 1.0001 0 0 0 0.29492-0.70898c0-0.35195-0.07397-0.68508-0.1875-1zm-2.8125 4h16v2h-16v-2z" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none"></path></svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 55 KiB |
@@ -0,0 +1 @@
|
||||
!function(){"use strict";var t={n:function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,{a:n}),n},d:function(e,n){for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)}},e=jQuery,n=t.n(e),r=lodash;function i(t){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function o(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,u(r.key),r)}}function u(t){var e=function(t,e){if("object"!==i(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!==i(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"===i(e)?e:String(e)}var a=function(){function t(){var e,r,i;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e=this,i=function(t){return n()(this.fields).each((function(e,r){t+=n()(r).val()})),t},(r=u(r="getContent"))in e?Object.defineProperty(e,r,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[r]=i,this.init(),this.hooks(),this.events()}var e,i,a;return e=t,(i=[{key:"init",value:function(){this.fields=this.getFields(),this.getContent=this.getContent.bind(this)}},{key:"hooks",value:function(){wp.hooks.addFilter("rank_math_content","rank-math",this.getContent,11)}},{key:"events",value:function(){n()(this.fields).each((function(t,e){n()(e).on("keyup change",(0,r.debounce)((function(){rankMathEditor.refresh("content")}),500))}))}},{key:"getFields",value:function(){var t=[];return n()("#the-list > tr:visible").each((function(e,r){var i=n()("#"+r.id+"-key").val();-1!==n().inArray(i,rankMath.analyzeFields)&&t.push("#"+r.id+"-value")})),t}}])&&o(e.prototype,i),a&&o(e,a),Object.defineProperty(e,"prototype",{writable:!1}),t}();n()((function(){setTimeout((function(){new a}),500)}))}();
|
||||
@@ -0,0 +1 @@
|
||||
!function(){"use strict";var t={n:function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,{a:n}),n},d:function(e,n){for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)}},e=jQuery,n=t.n(e),r=lodash,i=wp.hooks;function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function a(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,u(r.key),r)}}function u(t){var e=function(t,e){if("object"!==o(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var r=n.call(t,e||"default");if("object"!==o(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"===o(e)?e:String(e)}new(function(){function t(){var e,n,r;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e=this,r=[],(n=u(n="fields"))in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,(0,i.addAction)("rank_math_loaded","rank-math",this.init.bind(this))}var e,o,l;return e=t,(o=[{key:"init",value:function(){this.getFields(),this.events()}},{key:"getFields",value:function(){var t=this;n()("#the-list > tr:visible").each((function(e,r){var i=n()("#"+r.id+"-key").val();-1!==n().inArray(i,rankMath.analyzeFields)&&t.fields.push("#"+r.id+"-value")}))}},{key:"events",value:function(){(0,i.addFilter)("rank_math_content","rank-math",this.getContent.bind(this)),n()(this.fields).each((function(t,e){n()(e).on("keyup change",(0,r.debounce)((function(){rankMathEditor.refresh("content")}),500))}))}},{key:"getContent",value:function(t){return n()(this.fields).each((function(e,r){t+=n()(r).val()})),t}}])&&a(e.prototype,o),l&&a(e,l),Object.defineProperty(e,"prototype",{writable:!1}),t}())}();
|
||||
@@ -0,0 +1,5 @@
|
||||
/*!
|
||||
* Plugin: Rank Math
|
||||
* URL: https://rankmath.com/wordpress/plugin/seo-suite/
|
||||
* Name: rank-math-contact-info.css
|
||||
*/:root{--rankmath-wp-adminbar-height: 0}.rank-math-contact-section{clear:left;margin:1rem 0}.rank-math-contact-section label{font-weight:bold}.rank-math-contact-hours-details .rank-math-opening-hours{margin-bottom:6px}.rank-math-contact-hours-details .rank-math-opening-hours:last-child{margin-bottom:0}.rank-math-contact-hours .rank-math-opening-days,.rank-math-contact-hours .rank-math-opening-time{display:block}.rank-math-phone-number{margin:6px 0}.rank-math-contact-map iframe{width:100%;height:300px;border:0}.clear{clear:both}
|
||||
@@ -0,0 +1,5 @@
|
||||
/*!
|
||||
* Plugin: Rank Math
|
||||
* URL: https://rankmath.com/wordpress/plugin/seo-suite/
|
||||
* Name: rank-math-seo-score.css
|
||||
*/:root{--rankmath-wp-adminbar-height: 0}.rank-math-seo-score{font-family:sans-serif;position:relative;display:inline-block;height:96px;width:96px;margin:20px 20px 30px;text-align:center;color:#fff;border:none;border-radius:50%;background:#eee;-webkit-box-shadow:1px 1px 1px #bbb;box-shadow:1px 1px 1px #bbb}.rank-math-seo-score.before-content{margin:0 0 30px 20px;float:right}.rank-math-seo-score.after-content{margin:20px 0 30px 20px}.rank-math-seo-score.as-shortcode{display:inline-block}.rank-math-seo-score .label{font-size:12px;position:absolute;top:100px;left:0;display:block;width:100%;color:#979ea5}.rank-math-seo-score .score{font-size:42px;font-weight:bold;line-height:42px;display:block}.rank-math-seo-score .outof{font-size:12px;font-weight:normal;line-height:12px;display:block;color:rgba(255,255,255,0.7)}.rank-math-seo-score .backlink{font-size:12px;position:absolute;top:-94px;left:-12px;display:block;visibility:hidden;width:120px;padding:8px 10px;-webkit-transition:.25s all ease;transition:.25s all ease;-webkit-transition-delay:.25s;transition-delay:.25s;opacity:0;color:#a8a8a8;border:none;border-radius:8px;background:#fff;-webkit-box-shadow:0 4px 12px rgba(60,60,90,0.15);box-shadow:0 4px 12px rgba(60,60,90,0.15)}.rank-math-seo-score .backlink:after{position:absolute;bottom:-8px;left:calc(50% - 7px);width:0;height:0;content:'';border-width:8px 7.5px 0 7.5px;border-style:solid;border-color:#fff transparent transparent transparent}.rank-math-seo-score:hover .backlink{top:-74px;visibility:visible;opacity:1}.rank-math-seo-score .poweredby{font-size:13px;color:#a8a8a8}.rank-math-seo-score .poweredby a{display:block;font-weight:normal;text-decoration:none;color:#6372b6;border:none}.rank-math-seo-score.unknown-seo{background:#eee;background:linear-gradient(135deg, #b9b9b9 0%, #989898 100%);-webkit-box-shadow:1px 1px 1px #bbb;box-shadow:1px 1px 1px #bbb}.rank-math-seo-score.bad-seo{background:#f8b0a2;background:linear-gradient(135deg, #f8b0a2 0%, #f1938c 100%);-webkit-box-shadow:1px 1px 1px #e48982;box-shadow:1px 1px 1px #e48982;filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#f8b0a2', endColorstr='#f1938c',GradientType=1 )}.rank-math-seo-score.good-seo{background:#fdd07a;background:linear-gradient(135deg, #fdd07a 0%, #fcbe6c 100%);-webkit-box-shadow:1px 1px 1px #efb463;box-shadow:1px 1px 1px #efb463;filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdd07a', endColorstr='#fcbe6c',GradientType=1 )}.rank-math-seo-score.great-seo{background:#99d484;background:linear-gradient(135deg, #99d484 0%, #83c97f 100%);-webkit-box-shadow:1px 1px 1px #5ba857;box-shadow:1px 1px 1px #5ba857;filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#99d484', endColorstr='#83c97f',GradientType=1 )}.rank-math-seo-score.template-circle .score{margin-top:22px !important}.rank-math-seo-score.template-square{height:80px;width:110px;border-radius:12px}.rank-math-seo-score.template-square .score{margin:10px 12px;text-align:left}.rank-math-seo-score.template-square .outof{display:inline-block;margin-left:-8px}.rank-math-seo-score.template-square .label{font-size:13px;top:52px;left:14px;text-align:left;color:rgba(255,255,255,0.8)}.rank-math-seo-score.template-square .backlink{left:-5px}.rank-math-seo-score.template-square.before-content{margin-bottom:20px}.rank-math-seo-score.template-square.after-content{margin-bottom:0}.theme-twentytwenty .rank-math-seo-score{width:96px !important}.theme-twentytwenty .rank-math-seo-score.template-square{width:110px !important}.theme-twentytwenty .rank-math-seo-score.before-content{margin:0 auto 30px auto;display:inherit;float:none}.theme-twentytwenty .rank-math-seo-score.template-circle .score,.theme-twentytwenty .rank-math-seo-score.template-square .score{-webkit-transform:translateY(22px);transform:translateY(22px)}
|
||||
@@ -0,0 +1,5 @@
|
||||
/*!
|
||||
* Plugin: Rank Math
|
||||
* URL: https://rankmath.com/wordpress/plugin/seo-suite/
|
||||
* Name: rank-math-review-snippet.css
|
||||
*/:root{--rankmath-wp-adminbar-height: 0}#rank-math-rich-snippet-wrapper{overflow:hidden}#rank-math-rich-snippet-wrapper h5.rank-math-title{display:block;font-size:18px;line-height:1.4}#rank-math-rich-snippet-wrapper .rank-math-review-image{float:right;max-width:40%;margin-left:15px}#rank-math-rich-snippet-wrapper .rank-math-review-data{margin-bottom:15px}#rank-math-rich-snippet-wrapper .rank-math-total-wrapper{width:100%;padding:0 0 20px 0;float:left;clear:both;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box}#rank-math-rich-snippet-wrapper .rank-math-total-wrapper .rank-math-total{border:0;display:block;margin:0;width:auto;float:left;text-align:left;padding:0;font-size:24px;line-height:1;font-weight:700;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}#rank-math-rich-snippet-wrapper .rank-math-total-wrapper .rank-math-review-star{float:left;margin-left:15px;margin-top:5px;position:relative;z-index:99;line-height:1}#rank-math-rich-snippet-wrapper .rank-math-total-wrapper .rank-math-review-star .rank-math-review-result-wrapper{display:inline-block;white-space:nowrap;position:relative;color:#e7e7e7}#rank-math-rich-snippet-wrapper .rank-math-total-wrapper .rank-math-review-star .rank-math-review-result-wrapper .rank-math-review-result{position:absolute;top:0;left:0;overflow:hidden;white-space:nowrap;color:#ffbe01}#rank-math-rich-snippet-wrapper .rank-math-total-wrapper .rank-math-review-star .rank-math-review-result-wrapper i{font-size:18px;-webkit-text-stroke-width:1px;font-style:normal;padding:0 2px;line-height:inherit}#rank-math-rich-snippet-wrapper .rank-math-total-wrapper .rank-math-review-star .rank-math-review-result-wrapper i:before{content:"\2605"}body.rtl #rank-math-rich-snippet-wrapper .rank-math-review-image{float:left;margin-left:0;margin-right:15px}body.rtl #rank-math-rich-snippet-wrapper .rank-math-total-wrapper .rank-math-total{float:right}body.rtl #rank-math-rich-snippet-wrapper .rank-math-total-wrapper .rank-math-review-star{float:right;margin-left:0;margin-right:15px}body.rtl #rank-math-rich-snippet-wrapper .rank-math-total-wrapper .rank-math-review-star .rank-math-review-result{left:auto;right:0}@media screen and (max-width: 480px){#rank-math-rich-snippet-wrapper .rank-math-review-image{display:block;max-width:100%;width:100%;text-align:center;margin-right:0}#rank-math-rich-snippet-wrapper .rank-math-review-data{clear:both}}.clear{clear:both}
|
||||
@@ -0,0 +1,5 @@
|
||||
/*!
|
||||
* Plugin: Rank Math
|
||||
* URL: https://rankmath.com/wordpress/plugin/seo-suite/
|
||||
* Name: rank-math.css
|
||||
*/:root{--rankmath-wp-adminbar-height: 0}#wp-admin-bar-rank-math .rank-math-icon{display:inline-block;top:6px;position:relative;padding-right:10px;line-height:1}#wp-admin-bar-rank-math .rank-math-icon svg{fill-rule:evenodd;fill:#dedede;height:21px;vertical-align:inherit}#wp-admin-bar-rank-math:hover .rank-math-icon svg{fill-rule:evenodd;fill:#00b9eb}#wp-admin-bar-rank-math span.rm-mark-page-icon{font-family:dashicons;font-size:19px;line-height:28px;margin:0 3px 0 -4px}
|
||||
@@ -0,0 +1,5 @@
|
||||
/*!
|
||||
* Plugin: Rank Math
|
||||
* URL: https://rankmath.com/wordpress/plugin/seo-suite/
|
||||
* Name: rank-math.css
|
||||
*/:root{--rankmath-wp-adminbar-height:0}#wp-admin-bar-rank-math .rank-math-icon{display:inline-block;top:6px;position:relative;padding-right:10px;line-height:1}#wp-admin-bar-rank-math .rank-math-icon svg{fill-rule:evenodd;fill:#dedede;height:21px;vertical-align:inherit}#wp-admin-bar-rank-math:hover .rank-math-icon svg{fill-rule:evenodd;fill:#00b9eb}#wp-admin-bar-rank-math span.rm-mark-page-icon{font-family:dashicons;font-size:19px;line-height:28px;margin:0 3px 0 -4px}
|
||||
@@ -0,0 +1 @@
|
||||
!function(){"use strict";var n,t={n:function(n){var a=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(a,{a:a}),a},d:function(n,a){for(var e in a)t.o(a,e)&&!t.o(n,e)&&Object.defineProperty(n,e,{enumerable:!0,get:a[e]})},o:function(n,t){return Object.prototype.hasOwnProperty.call(n,t)}},a=jQuery;(n=t.n(a)())((function(){window.rankMathFront={init:function(){this.adminMenu()},adminMenu:function(){var t=n("#wp-admin-bar-rank-math-mark-me"),a=this;t.on("click",".mark-page-as a",(function(t){t.preventDefault(),a.ajax("mark_page_as",{objectID:rankMath.objectID,objectType:rankMath.objectType,what:n(this).attr("href").replace("#","")}),n(this).find(".dashicons").length?n(this).find(".dashicons").remove():n(this).prepend('<span class="dashicons dashicons-yes" style="font-family:dashicons;font-size:19px;line-height:28px;margin:0 3px 0 -4px;"></span>')}))},ajax:function(t,a,e){return n.ajax({url:rankMath.ajaxurl,type:e||"POST",dataType:"json",data:n.extend(!0,{action:"rank_math_"+t,security:rankMath.security},a)})}},window.rankMathFront.init()}))}();
|
||||
@@ -0,0 +1,460 @@
|
||||
.date-picker {
|
||||
width: 170px;
|
||||
height: 25px;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
line-height: 25px;
|
||||
padding-left: 10px;
|
||||
font-size: 12px;
|
||||
font-family: Arial, sans-serif;
|
||||
font-weight: bold;
|
||||
cursor: pointer;
|
||||
color: #303030;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.date-picker-wrapper {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
border: 1px solid #bfbfbf;
|
||||
background-color: #efefef;
|
||||
padding: 5px 12px;
|
||||
font-size: 12px;
|
||||
line-height: 20px;
|
||||
color: #aaa;
|
||||
font-family: Arial, sans-serif;
|
||||
-webkit-box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);
|
||||
box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5);
|
||||
-webkit-box-sizing: initial;
|
||||
box-sizing: initial;
|
||||
}
|
||||
|
||||
.dp-clearfix {
|
||||
clear: both;
|
||||
height: 0;
|
||||
font-size: 0;
|
||||
}
|
||||
|
||||
.date-picker-wrapper.inline-wrapper {
|
||||
position: relative;
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.date-picker-wrapper.single-date {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.date-picker-wrapper.no-shortcuts {
|
||||
padding-bottom: 12px;
|
||||
}
|
||||
|
||||
.date-picker-wrapper.no-topbar {
|
||||
padding-top: 12px;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .footer {
|
||||
font-size: 11px;
|
||||
padding-top: 3px;
|
||||
}
|
||||
|
||||
.date-picker-wrapper b {
|
||||
color: #666;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.date-picker-wrapper a {
|
||||
color: #6bb4d6;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .month-name {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .select-wrapper {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .select-wrapper:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .month-element {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .select-wrapper select {
|
||||
position: absolute;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
left: 0;
|
||||
top: -1px;
|
||||
font-size: inherit;
|
||||
font-style: inherit;
|
||||
font-weight: inherit;
|
||||
text-transform: inherit;
|
||||
color: inherit;
|
||||
cursor: pointer;
|
||||
-webkit-appearance: none;
|
||||
-moz-appearance: none;
|
||||
appearance: none;
|
||||
background: transparent;
|
||||
border: 0;
|
||||
outline: 0;
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=1)";
|
||||
filter: alpha(opacity=1);
|
||||
opacity: 0.01;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .month-wrapper {
|
||||
border: 1px solid #bfbfbf;
|
||||
border-radius: 3px;
|
||||
background-color: #fff;
|
||||
padding: 5px;
|
||||
cursor: default;
|
||||
position: relative;
|
||||
_overflow: hidden;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .month-wrapper table {
|
||||
width: 190px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .month-wrapper table.month2 {
|
||||
width: 190px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .month-wrapper table th, .date-picker-wrapper .month-wrapper table td {
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
line-height: 14px;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .month-wrapper table .day {
|
||||
padding: 5px 0;
|
||||
line-height: 1;
|
||||
font-size: 12px;
|
||||
margin-bottom: 1px;
|
||||
color: #ccc;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .month-wrapper table div.day.lastMonth, .date-picker-wrapper .month-wrapper table div.day.nextMonth {
|
||||
color: #999;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .month-wrapper table .day.checked {
|
||||
background-color: #9cdbf7;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .month-wrapper table .week-name {
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
font-weight: 100;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .month-wrapper table .day.has-tooltip {
|
||||
cursor: help !important;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .month-wrapper table .day.has-tooltip .tooltip {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .time label {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .month-wrapper table .day.toMonth.valid {
|
||||
color: #333;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .month-wrapper table .day.toMonth.hovering {
|
||||
background-color: #cdecfa;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .month-wrapper table .day.nextMonth, .date-picker-wrapper .month-wrapper table .day.lastMonth {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .month-wrapper table .day.real-today {
|
||||
background-color: #ffe684;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .month-wrapper table .day.real-today.checked, .date-picker-wrapper .month-wrapper table .day.real-today.hovering {
|
||||
background-color: #70ccd5;
|
||||
}
|
||||
|
||||
.date-picker-wrapper table .caption {
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.date-picker-wrapper table .caption > th:first-of-type, .date-picker-wrapper table .caption > th:last-of-type {
|
||||
width: 27px;
|
||||
}
|
||||
|
||||
.date-picker-wrapper table .caption .next, .date-picker-wrapper table .caption .prev {
|
||||
padding: 0 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.date-picker-wrapper table .caption .next:hover, .date-picker-wrapper table .caption .prev:hover {
|
||||
background-color: #ccc;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .gap {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
width: 15px;
|
||||
height: 100%;
|
||||
background-color: red;
|
||||
font-size: 0;
|
||||
line-height: 0;
|
||||
float: left;
|
||||
top: -5px;
|
||||
margin: 0 10px -10px;
|
||||
visibility: hidden;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .gap .gap-lines {
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .gap .gap-line {
|
||||
height: 15px;
|
||||
width: 15px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .gap .gap-line .gap-1 {
|
||||
z-index: 1;
|
||||
height: 0;
|
||||
border-left: 8px solid white;
|
||||
border-top: 8px solid #eee;
|
||||
border-bottom: 8px solid #eee;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .gap .gap-line .gap-2 {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0px;
|
||||
z-index: 2;
|
||||
height: 0;
|
||||
border-left: 8px solid transparent;
|
||||
border-top: 8px solid white;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .gap .gap-line .gap-3 {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 8px;
|
||||
z-index: 2;
|
||||
height: 0;
|
||||
border-left: 8px solid transparent;
|
||||
border-bottom: 8px solid white;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .gap .gap-top-mask {
|
||||
width: 6px;
|
||||
height: 1px;
|
||||
position: absolute;
|
||||
top: -1px;
|
||||
left: 1px;
|
||||
background-color: #eee;
|
||||
z-index: 3;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .gap .gap-bottom-mask {
|
||||
width: 6px;
|
||||
height: 1px;
|
||||
position: absolute;
|
||||
bottom: -1px;
|
||||
left: 7px;
|
||||
background-color: #eee;
|
||||
z-index: 3;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .selected-days {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .drp_top-bar {
|
||||
line-height: 1.4;
|
||||
position: relative;
|
||||
padding: 10px 40px 10px 0;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .drp_top-bar .error-top, .date-picker-wrapper .drp_top-bar .normal-top {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .drp_top-bar .default-top {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .drp_top-bar.error .default-top {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .drp_top-bar.error .error-top {
|
||||
display: block;
|
||||
color: red;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .drp_top-bar.normal .default-top {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .drp_top-bar.normal .normal-top {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .drp_top-bar.normal .normal-top .selection-top {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .drp_top-bar .apply-btn {
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
top: 6px;
|
||||
padding: 3px 5px;
|
||||
margin: 0;
|
||||
font-size: 12px;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
color: #d9eef7;
|
||||
border: solid 1px #0076a3;
|
||||
background: #0095cd;
|
||||
background: -moz-linear-gradient(top, #00adee, #0078a5);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00adee', endColorstr='#0078a5');
|
||||
color: white;
|
||||
line-height: initial;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .drp_top-bar .apply-btn.disabled {
|
||||
cursor: pointer;
|
||||
color: #606060;
|
||||
border: solid 1px #b7b7b7;
|
||||
background: #fff;
|
||||
background: -moz-linear-gradient(top, #fff, #ededed);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#ededed');
|
||||
}
|
||||
|
||||
.date-picker-wrapper .time {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.date-picker-wrapper.single-month .time {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .time input[type=range] {
|
||||
vertical-align: middle;
|
||||
width: 129px;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .time1 {
|
||||
width: 180px;
|
||||
padding: 0 5px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/*time styling*/
|
||||
.time2 {
|
||||
width: 180px;
|
||||
padding: 0 5px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .time1 {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .time2 {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .hour {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.minute {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .first-date-selected, .date-picker-wrapper .last-date-selected {
|
||||
background-color: #49e !important;
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .date-range-length-tip {
|
||||
position: absolute;
|
||||
margin-top: -4px;
|
||||
margin-left: -8px;
|
||||
-webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);
|
||||
box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);
|
||||
display: none;
|
||||
background-color: yellow;
|
||||
padding: 0 6px;
|
||||
border-radius: 2px;
|
||||
font-size: 12px;
|
||||
line-height: 16px;
|
||||
-webkit-filter: drop-shadow(0 0 3px rgba(0, 0, 0, 0.3));
|
||||
-moz-filter: drop-shadow(0 0 3px rgba(0, 0, 0, 0.3));
|
||||
-ms-filter: drop-shadow(0 0 3px rgba(0, 0, 0, 0.3));
|
||||
-o-filter: drop-shadow(0 0 3px rgba(0, 0, 0, 0.3));
|
||||
filter: drop-shadow(0 0 3px rgba(0, 0, 0, 0.3));
|
||||
}
|
||||
|
||||
.date-picker-wrapper .date-range-length-tip:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
border-left: 4px solid transparent;
|
||||
border-right: 4px solid transparent;
|
||||
border-top: 4px solid yellow;
|
||||
left: 50%;
|
||||
margin-left: -4px;
|
||||
bottom: -4px;
|
||||
}
|
||||
|
||||
.date-picker-wrapper.two-months.no-gap .month1 .next, .date-picker-wrapper.two-months.no-gap .month2 .prev {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .week-number {
|
||||
padding: 5px 0;
|
||||
line-height: 1;
|
||||
font-size: 12px;
|
||||
margin-bottom: 1px;
|
||||
color: #999;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.date-picker-wrapper .week-number.week-number-selected {
|
||||
color: #49e;
|
||||
font-weight: bold;
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
/**
|
||||
* Credit (https://www.russianlessons.net/lessons/lesson1_alphabet.php)
|
||||
*/
|
||||
return['A'=> '[\u0410\u0430]', 'B'=> '[\u0411\u0431]', 'V'=> '[\u0412\u0432]', 'G'=> '[\u0413\u0433]', 'D'=> '[\u0414\u0434]', 'YE'=> '[\u0415\u0435]', 'YO'=> '[\u0401\u0451]', 'ZH'=> '[\u0416\u0436]', 'Z'=> '[\u0417\u0437]', 'EE'=> '[\u0418\u0438]', 'YI'=> '[\u0419\u0439]', 'K'=> '[\u041A\u043A]', 'L'=> '[\u041B\u043B]', 'M'=> '[\u041C\u043c]', 'P'=> '[\u041F\u043F]', 'T'=> '[\u0422\u0442]', 'U'=> '[\u0423\u0443]', 'F'=> '[\u0424\u0444]', 'H'=> '[\u0425\u0445]', 'TS'=> '[\u0426\u0446]', 'CH'=> '[\u0427\u0447]', 'SH'=> '[\u0428\u0448\u0429\u0449]', 'I'=> '[\u042B\u044B]', 'E'=> '[\u042D\u044D]', 'YU'=> '[\u042E\u044E]', 'YA'=> '[\u042F\u044F]', 'N'=> '[\u041D\u043D]'];
|
||||
@@ -0,0 +1 @@
|
||||
this.wp=this.wp||{},this.wp.hooks=function(n){var r={};function e(t){if(r[t])return r[t].exports;var o=r[t]={i:t,l:!1,exports:{}};return n[t].call(o.exports,o,o.exports,e),o.l=!0,o.exports}return e.m=n,e.c=r,e.d=function(n,r,t){e.o(n,r)||Object.defineProperty(n,r,{enumerable:!0,get:t})},e.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},e.t=function(n,r){if(1&r&&(n=e(n)),8&r)return n;if(4&r&&"object"==typeof n&&n&&n.__esModule)return n;var t=Object.create(null);if(e.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:n}),2&r&&"string"!=typeof n)for(var o in n)e.d(t,o,function(r){return n[r]}.bind(null,o));return t},e.n=function(n){var r=n&&n.__esModule?function(){return n.default}:function(){return n};return e.d(r,"a",r),r},e.o=function(n,r){return Object.prototype.hasOwnProperty.call(n,r)},e.p="",e(e.s=366)}({366:function(n,r,e){"use strict";e.r(r);var t=function(n){return"string"!=typeof n||""===n?(console.error("The namespace must be a non-empty string."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.\-\/]*$/.test(n)||(console.error("The namespace can only contain numbers, letters, dashes, periods, underscores and slashes."),!1)};var o=function(n){return"string"!=typeof n||""===n?(console.error("The hook name must be a non-empty string."),!1):/^__/.test(n)?(console.error("The hook name cannot begin with `__`."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(n)||(console.error("The hook name can only contain numbers, letters, dashes, periods and underscores."),!1)};var i=function(n){return function(r,e,i){var u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:10;if(o(r)&&t(e))if("function"==typeof i)if("number"==typeof u){var c={callback:i,priority:u,namespace:e};if(n[r]){var l,a=n[r].handlers;for(l=a.length;l>0&&!(u>=a[l-1].priority);l--);l===a.length?a[l]=c:a.splice(l,0,c),(n.__current||[]).forEach(function(n){n.name===r&&n.currentIndex>=l&&n.currentIndex++})}else n[r]={handlers:[c],runs:0};"hookAdded"!==r&&F("hookAdded",r,e,i,u)}else console.error("If specified, the hook priority must be a number.");else console.error("The hook callback must be a function.")}};var u=function(n,r){return function(e,i){if(o(e)&&(r||t(i))){if(!n[e])return 0;var u=0;if(r)u=n[e].handlers.length,n[e]={runs:n[e].runs,handlers:[]};else for(var c=n[e].handlers,l=function(r){c[r].namespace===i&&(c.splice(r,1),u++,(n.__current||[]).forEach(function(n){n.name===e&&n.currentIndex>=r&&n.currentIndex--}))},a=c.length-1;a>=0;a--)l(a);return"hookRemoved"!==e&&F("hookRemoved",e,i),u}}};var c=function(n){return function(r){return r in n}};var l=function(n,r){return function(e){n[e]||(n[e]={handlers:[],runs:0}),n[e].runs++;for(var t=n[e].handlers,o=arguments.length,i=new Array(o>1?o-1:0),u=1;u<o;u++)i[u-1]=arguments[u];if(!t||!t.length)return r?i[0]:void 0;var c={name:e,currentIndex:0};for(n.__current.push(c);c.currentIndex<t.length;){var l=t[c.currentIndex].callback.apply(null,i);r&&(i[0]=l),c.currentIndex++}return n.__current.pop(),r?i[0]:void 0}};var a=function(n){return function(){return n.__current&&n.__current.length?n.__current[n.__current.length-1].name:null}};var d=function(n){return function(r){return void 0===r?void 0!==n.__current[0]:!!n.__current[0]&&r===n.__current[0].name}};var s=function(n){return function(r){if(o(r))return n[r]&&n[r].runs?n[r].runs:0}};var f=function(){var n=Object.create(null),r=Object.create(null);return n.__current=[],r.__current=[],{addAction:i(n),addFilter:i(r),removeAction:u(n),removeFilter:u(r),hasAction:c(n),hasFilter:c(r),removeAllActions:u(n,!0),removeAllFilters:u(r,!0),doAction:l(n),applyFilters:l(r,!0),currentAction:a(n),currentFilter:a(r),doingAction:d(n),doingFilter:d(r),didAction:s(n),didFilter:s(r),actions:n,filters:r}};e.d(r,"addAction",function(){return p}),e.d(r,"addFilter",function(){return v}),e.d(r,"removeAction",function(){return m}),e.d(r,"removeFilter",function(){return _}),e.d(r,"hasAction",function(){return A}),e.d(r,"hasFilter",function(){return y}),e.d(r,"removeAllActions",function(){return b}),e.d(r,"removeAllFilters",function(){return g}),e.d(r,"doAction",function(){return F}),e.d(r,"applyFilters",function(){return k}),e.d(r,"currentAction",function(){return x}),e.d(r,"currentFilter",function(){return j}),e.d(r,"doingAction",function(){return I}),e.d(r,"doingFilter",function(){return O}),e.d(r,"didAction",function(){return T}),e.d(r,"didFilter",function(){return w}),e.d(r,"actions",function(){return P}),e.d(r,"filters",function(){return S}),e.d(r,"createHooks",function(){return f});var h=f(),p=h.addAction,v=h.addFilter,m=h.removeAction,_=h.removeFilter,A=h.hasAction,y=h.hasFilter,b=h.removeAllActions,g=h.removeAllFilters,F=h.doAction,k=h.applyFilters,x=h.currentAction,j=h.currentFilter,I=h.doingAction,O=h.doingFilter,T=h.didAction,w=h.didFilter,P=h.actions,S=h.filters}});
|
||||
@@ -0,0 +1,137 @@
|
||||
/**
|
||||
* @license
|
||||
* Lodash lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE
|
||||
*/
|
||||
;(function(){function n(n,t,r){switch(r.length){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function t(n,t,r,e){for(var u=-1,i=null==n?0:n.length;++u<i;){var o=n[u];t(e,o,r(o),n)}return e}function r(n,t){for(var r=-1,e=null==n?0:n.length;++r<e&&false!==t(n[r],r,n););return n}function e(n,t){for(var r=null==n?0:n.length;r--&&false!==t(n[r],r,n););return n}function u(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(!t(n[r],r,n))return false;
|
||||
return true}function i(n,t){for(var r=-1,e=null==n?0:n.length,u=0,i=[];++r<e;){var o=n[r];t(o,r,n)&&(i[u++]=o)}return i}function o(n,t){return!(null==n||!n.length)&&-1<v(n,t,0)}function f(n,t,r){for(var e=-1,u=null==n?0:n.length;++e<u;)if(r(t,n[e]))return true;return false}function c(n,t){for(var r=-1,e=null==n?0:n.length,u=Array(e);++r<e;)u[r]=t(n[r],r,n);return u}function a(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function l(n,t,r,e){var u=-1,i=null==n?0:n.length;for(e&&i&&(r=n[++u]);++u<i;)r=t(r,n[u],u,n);
|
||||
return r}function s(n,t,r,e){var u=null==n?0:n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r}function h(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(t(n[r],r,n))return true;return false}function p(n,t,r){var e;return r(n,function(n,r,u){if(t(n,r,u))return e=r,false}),e}function _(n,t,r,e){var u=n.length;for(r+=e?1:-1;e?r--:++r<u;)if(t(n[r],r,n))return r;return-1}function v(n,t,r){if(t===t)n:{--r;for(var e=n.length;++r<e;)if(n[r]===t){n=r;break n}n=-1}else n=_(n,d,r);return n}function g(n,t,r,e){
|
||||
--r;for(var u=n.length;++r<u;)if(e(n[r],t))return r;return-1}function d(n){return n!==n}function y(n,t){var r=null==n?0:n.length;return r?m(n,t)/r:F}function b(n){return function(t){return null==t?T:t[n]}}function x(n){return function(t){return null==n?T:n[t]}}function j(n,t,r,e,u){return u(n,function(n,u,i){r=e?(e=false,n):t(r,n,u,i)}),r}function w(n,t){var r=n.length;for(n.sort(t);r--;)n[r]=n[r].c;return n}function m(n,t){for(var r,e=-1,u=n.length;++e<u;){var i=t(n[e]);i!==T&&(r=r===T?i:r+i)}return r;
|
||||
}function A(n,t){for(var r=-1,e=Array(n);++r<n;)e[r]=t(r);return e}function E(n,t){return c(t,function(t){return[t,n[t]]})}function k(n){return function(t){return n(t)}}function S(n,t){return c(t,function(t){return n[t]})}function O(n,t){return n.has(t)}function I(n,t){for(var r=-1,e=n.length;++r<e&&-1<v(t,n[r],0););return r}function R(n,t){for(var r=n.length;r--&&-1<v(t,n[r],0););return r}function z(n){return"\\"+Un[n]}function W(n){var t=-1,r=Array(n.size);return n.forEach(function(n,e){r[++t]=[e,n];
|
||||
}),r}function B(n,t){return function(r){return n(t(r))}}function L(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){var o=n[r];o!==t&&"__lodash_placeholder__"!==o||(n[r]="__lodash_placeholder__",i[u++]=r)}return i}function U(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=n}),r}function C(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=[n,n]}),r}function D(n){if(Rn.test(n)){for(var t=On.lastIndex=0;On.test(n);)++t;n=t}else n=Qn(n);return n}function M(n){return Rn.test(n)?n.match(On)||[]:n.split("");
|
||||
}var T,$=1/0,F=NaN,N=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],P=/\b__p\+='';/g,Z=/\b(__p\+=)''\+/g,q=/(__e\(.*?\)|\b__t\))\+'';/g,V=/&(?:amp|lt|gt|quot|#39);/g,K=/[&<>"']/g,G=RegExp(V.source),H=RegExp(K.source),J=/<%-([\s\S]+?)%>/g,Y=/<%([\s\S]+?)%>/g,Q=/<%=([\s\S]+?)%>/g,X=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,nn=/^\w*$/,tn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,rn=/[\\^$.*+?()[\]{}|]/g,en=RegExp(rn.source),un=/^\s+|\s+$/g,on=/^\s+/,fn=/\s+$/,cn=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,an=/\{\n\/\* \[wrapped with (.+)\] \*/,ln=/,? & /,sn=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,hn=/\\(\\)?/g,pn=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,_n=/\w*$/,vn=/^[-+]0x[0-9a-f]+$/i,gn=/^0b[01]+$/i,dn=/^\[object .+?Constructor\]$/,yn=/^0o[0-7]+$/i,bn=/^(?:0|[1-9]\d*)$/,xn=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,jn=/($^)/,wn=/['\n\r\u2028\u2029\\]/g,mn="[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?(?:\\u200d(?:[^\\ud800-\\udfff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?)*",An="(?:[\\u2700-\\u27bf]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])"+mn,En="(?:[^\\ud800-\\udfff][\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]?|[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff])",kn=RegExp("['\u2019]","g"),Sn=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]","g"),On=RegExp("\\ud83c[\\udffb-\\udfff](?=\\ud83c[\\udffb-\\udfff])|"+En+mn,"g"),In=RegExp(["[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+(?:['\u2019](?:d|ll|m|re|s|t|ve))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde]|$)|(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde](?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])|$)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?(?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['\u2019](?:d|ll|m|re|s|t|ve))?|[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?|\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])|\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])|\\d+",An].join("|"),"g"),Rn=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]"),zn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Wn="Array Buffer DataView Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Map Math Object Promise RegExp Set String Symbol TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap _ clearTimeout isFinite parseInt setTimeout".split(" "),Bn={};
|
||||
Bn["[object Float32Array]"]=Bn["[object Float64Array]"]=Bn["[object Int8Array]"]=Bn["[object Int16Array]"]=Bn["[object Int32Array]"]=Bn["[object Uint8Array]"]=Bn["[object Uint8ClampedArray]"]=Bn["[object Uint16Array]"]=Bn["[object Uint32Array]"]=true,Bn["[object Arguments]"]=Bn["[object Array]"]=Bn["[object ArrayBuffer]"]=Bn["[object Boolean]"]=Bn["[object DataView]"]=Bn["[object Date]"]=Bn["[object Error]"]=Bn["[object Function]"]=Bn["[object Map]"]=Bn["[object Number]"]=Bn["[object Object]"]=Bn["[object RegExp]"]=Bn["[object Set]"]=Bn["[object String]"]=Bn["[object WeakMap]"]=false;
|
||||
var Ln={};Ln["[object Arguments]"]=Ln["[object Array]"]=Ln["[object ArrayBuffer]"]=Ln["[object DataView]"]=Ln["[object Boolean]"]=Ln["[object Date]"]=Ln["[object Float32Array]"]=Ln["[object Float64Array]"]=Ln["[object Int8Array]"]=Ln["[object Int16Array]"]=Ln["[object Int32Array]"]=Ln["[object Map]"]=Ln["[object Number]"]=Ln["[object Object]"]=Ln["[object RegExp]"]=Ln["[object Set]"]=Ln["[object String]"]=Ln["[object Symbol]"]=Ln["[object Uint8Array]"]=Ln["[object Uint8ClampedArray]"]=Ln["[object Uint16Array]"]=Ln["[object Uint32Array]"]=true,
|
||||
Ln["[object Error]"]=Ln["[object Function]"]=Ln["[object WeakMap]"]=false;var Un={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Cn=parseFloat,Dn=parseInt,Mn=typeof global=="object"&&global&&global.Object===Object&&global,Tn=typeof self=="object"&&self&&self.Object===Object&&self,$n=Mn||Tn||Function("return this")(),Fn=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Nn=Fn&&typeof module=="object"&&module&&!module.nodeType&&module,Pn=Nn&&Nn.exports===Fn,Zn=Pn&&Mn.process,qn=function(){
|
||||
try{var n=Nn&&Nn.f&&Nn.f("util").types;return n?n:Zn&&Zn.binding&&Zn.binding("util")}catch(n){}}(),Vn=qn&&qn.isArrayBuffer,Kn=qn&&qn.isDate,Gn=qn&&qn.isMap,Hn=qn&&qn.isRegExp,Jn=qn&&qn.isSet,Yn=qn&&qn.isTypedArray,Qn=b("length"),Xn=x({"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I",
|
||||
"\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C",
|
||||
"\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i",
|
||||
"\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O","\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r",
|
||||
"\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij",
|
||||
"\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"}),nt=x({"&":"&","<":"<",">":">",'"':""","'":"'"}),tt=x({"&":"&","<":"<",">":">",""":'"',"'":"'"}),rt=function x(mn){function An(n){if(yu(n)&&!ff(n)&&!(n instanceof Un)){if(n instanceof On)return n;if(oi.call(n,"__wrapped__"))return Fe(n)}return new On(n)}function En(){}function On(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=T}function Un(n){this.__wrapped__=n,
|
||||
this.__actions__=[],this.__dir__=1,this.__filtered__=false,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Mn(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Tn(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Fn(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Nn(n){var t=-1,r=null==n?0:n.length;for(this.__data__=new Fn;++t<r;)this.add(n[t]);
|
||||
}function Zn(n){this.size=(this.__data__=new Tn(n)).size}function qn(n,t){var r,e=ff(n),u=!e&&of(n),i=!e&&!u&&af(n),o=!e&&!u&&!i&&_f(n),u=(e=e||u||i||o)?A(n.length,ni):[],f=u.length;for(r in n)!t&&!oi.call(n,r)||e&&("length"==r||i&&("offset"==r||"parent"==r)||o&&("buffer"==r||"byteLength"==r||"byteOffset"==r)||Se(r,f))||u.push(r);return u}function Qn(n){var t=n.length;return t?n[ir(0,t-1)]:T}function et(n,t){return De(Ur(n),pt(t,0,n.length))}function ut(n){return De(Ur(n))}function it(n,t,r){(r===T||lu(n[t],r))&&(r!==T||t in n)||st(n,t,r);
|
||||
}function ot(n,t,r){var e=n[t];oi.call(n,t)&&lu(e,r)&&(r!==T||t in n)||st(n,t,r)}function ft(n,t){for(var r=n.length;r--;)if(lu(n[r][0],t))return r;return-1}function ct(n,t,r,e){return uo(n,function(n,u,i){t(e,n,r(n),i)}),e}function at(n,t){return n&&Cr(t,Wu(t),n)}function lt(n,t){return n&&Cr(t,Bu(t),n)}function st(n,t,r){"__proto__"==t&&Ai?Ai(n,t,{configurable:true,enumerable:true,value:r,writable:true}):n[t]=r}function ht(n,t){for(var r=-1,e=t.length,u=Ku(e),i=null==n;++r<e;)u[r]=i?T:Ru(n,t[r]);return u;
|
||||
}function pt(n,t,r){return n===n&&(r!==T&&(n=n<=r?n:r),t!==T&&(n=n>=t?n:t)),n}function _t(n,t,e,u,i,o){var f,c=1&t,a=2&t,l=4&t;if(e&&(f=i?e(n,u,i,o):e(n)),f!==T)return f;if(!du(n))return n;if(u=ff(n)){if(f=me(n),!c)return Ur(n,f)}else{var s=vo(n),h="[object Function]"==s||"[object GeneratorFunction]"==s;if(af(n))return Ir(n,c);if("[object Object]"==s||"[object Arguments]"==s||h&&!i){if(f=a||h?{}:Ae(n),!c)return a?Mr(n,lt(f,n)):Dr(n,at(f,n))}else{if(!Ln[s])return i?n:{};f=Ee(n,s,c)}}if(o||(o=new Zn),
|
||||
i=o.get(n))return i;o.set(n,f),pf(n)?n.forEach(function(r){f.add(_t(r,t,e,r,n,o))}):sf(n)&&n.forEach(function(r,u){f.set(u,_t(r,t,e,u,n,o))});var a=l?a?ve:_e:a?Bu:Wu,p=u?T:a(n);return r(p||n,function(r,u){p&&(u=r,r=n[u]),ot(f,u,_t(r,t,e,u,n,o))}),f}function vt(n){var t=Wu(n);return function(r){return gt(r,n,t)}}function gt(n,t,r){var e=r.length;if(null==n)return!e;for(n=Qu(n);e--;){var u=r[e],i=t[u],o=n[u];if(o===T&&!(u in n)||!i(o))return false}return true}function dt(n,t,r){if(typeof n!="function")throw new ti("Expected a function");
|
||||
return bo(function(){n.apply(T,r)},t)}function yt(n,t,r,e){var u=-1,i=o,a=true,l=n.length,s=[],h=t.length;if(!l)return s;r&&(t=c(t,k(r))),e?(i=f,a=false):200<=t.length&&(i=O,a=false,t=new Nn(t));n:for(;++u<l;){var p=n[u],_=null==r?p:r(p),p=e||0!==p?p:0;if(a&&_===_){for(var v=h;v--;)if(t[v]===_)continue n;s.push(p)}else i(t,_,e)||s.push(p)}return s}function bt(n,t){var r=true;return uo(n,function(n,e,u){return r=!!t(n,e,u)}),r}function xt(n,t,r){for(var e=-1,u=n.length;++e<u;){var i=n[e],o=t(i);if(null!=o&&(f===T?o===o&&!wu(o):r(o,f)))var f=o,c=i;
|
||||
}return c}function jt(n,t){var r=[];return uo(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function wt(n,t,r,e,u){var i=-1,o=n.length;for(r||(r=ke),u||(u=[]);++i<o;){var f=n[i];0<t&&r(f)?1<t?wt(f,t-1,r,e,u):a(u,f):e||(u[u.length]=f)}return u}function mt(n,t){return n&&oo(n,t,Wu)}function At(n,t){return n&&fo(n,t,Wu)}function Et(n,t){return i(t,function(t){return _u(n[t])})}function kt(n,t){t=Sr(t,n);for(var r=0,e=t.length;null!=n&&r<e;)n=n[Me(t[r++])];return r&&r==e?n:T}function St(n,t,r){return t=t(n),
|
||||
ff(n)?t:a(t,r(n))}function Ot(n){if(null==n)n=n===T?"[object Undefined]":"[object Null]";else if(mi&&mi in Qu(n)){var t=oi.call(n,mi),r=n[mi];try{n[mi]=T;var e=true}catch(n){}var u=ai.call(n);e&&(t?n[mi]=r:delete n[mi]),n=u}else n=ai.call(n);return n}function It(n,t){return n>t}function Rt(n,t){return null!=n&&oi.call(n,t)}function zt(n,t){return null!=n&&t in Qu(n)}function Wt(n,t,r){for(var e=r?f:o,u=n[0].length,i=n.length,a=i,l=Ku(i),s=1/0,h=[];a--;){var p=n[a];a&&t&&(p=c(p,k(t))),s=Ci(p.length,s),
|
||||
l[a]=!r&&(t||120<=u&&120<=p.length)?new Nn(a&&p):T}var p=n[0],_=-1,v=l[0];n:for(;++_<u&&h.length<s;){var g=p[_],d=t?t(g):g,g=r||0!==g?g:0;if(v?!O(v,d):!e(h,d,r)){for(a=i;--a;){var y=l[a];if(y?!O(y,d):!e(n[a],d,r))continue n}v&&v.push(d),h.push(g)}}return h}function Bt(n,t,r){var e={};return mt(n,function(n,u,i){t(e,r(n),u,i)}),e}function Lt(t,r,e){return r=Sr(r,t),t=2>r.length?t:kt(t,hr(r,0,-1)),r=null==t?t:t[Me(Ve(r))],null==r?T:n(r,t,e)}function Ut(n){return yu(n)&&"[object Arguments]"==Ot(n)}function Ct(n){
|
||||
return yu(n)&&"[object ArrayBuffer]"==Ot(n)}function Dt(n){return yu(n)&&"[object Date]"==Ot(n)}function Mt(n,t,r,e,u){if(n===t)t=true;else if(null==n||null==t||!yu(n)&&!yu(t))t=n!==n&&t!==t;else n:{var i=ff(n),o=ff(t),f=i?"[object Array]":vo(n),c=o?"[object Array]":vo(t),f="[object Arguments]"==f?"[object Object]":f,c="[object Arguments]"==c?"[object Object]":c,a="[object Object]"==f,o="[object Object]"==c;if((c=f==c)&&af(n)){if(!af(t)){t=false;break n}i=true,a=false}if(c&&!a)u||(u=new Zn),t=i||_f(n)?se(n,t,r,e,Mt,u):he(n,t,f,r,e,Mt,u);else{
|
||||
if(!(1&r)&&(i=a&&oi.call(n,"__wrapped__"),f=o&&oi.call(t,"__wrapped__"),i||f)){n=i?n.value():n,t=f?t.value():t,u||(u=new Zn),t=Mt(n,t,r,e,u);break n}if(c)t:if(u||(u=new Zn),i=1&r,f=_e(n),o=f.length,c=_e(t).length,o==c||i){for(a=o;a--;){var l=f[a];if(!(i?l in t:oi.call(t,l))){t=false;break t}}if((c=u.get(n))&&u.get(t))t=c==t;else{c=true,u.set(n,t),u.set(t,n);for(var s=i;++a<o;){var l=f[a],h=n[l],p=t[l];if(e)var _=i?e(p,h,l,t,n,u):e(h,p,l,n,t,u);if(_===T?h!==p&&!Mt(h,p,r,e,u):!_){c=false;break}s||(s="constructor"==l);
|
||||
}c&&!s&&(r=n.constructor,e=t.constructor,r!=e&&"constructor"in n&&"constructor"in t&&!(typeof r=="function"&&r instanceof r&&typeof e=="function"&&e instanceof e)&&(c=false)),u.delete(n),u.delete(t),t=c}}else t=false;else t=false}}return t}function Tt(n){return yu(n)&&"[object Map]"==vo(n)}function $t(n,t,r,e){var u=r.length,i=u,o=!e;if(null==n)return!i;for(n=Qu(n);u--;){var f=r[u];if(o&&f[2]?f[1]!==n[f[0]]:!(f[0]in n))return false}for(;++u<i;){var f=r[u],c=f[0],a=n[c],l=f[1];if(o&&f[2]){if(a===T&&!(c in n))return false;
|
||||
}else{if(f=new Zn,e)var s=e(a,l,c,n,t,f);if(s===T?!Mt(l,a,3,e,f):!s)return false}}return true}function Ft(n){return!(!du(n)||ci&&ci in n)&&(_u(n)?hi:dn).test(Te(n))}function Nt(n){return yu(n)&&"[object RegExp]"==Ot(n)}function Pt(n){return yu(n)&&"[object Set]"==vo(n)}function Zt(n){return yu(n)&&gu(n.length)&&!!Bn[Ot(n)]}function qt(n){return typeof n=="function"?n:null==n?$u:typeof n=="object"?ff(n)?Jt(n[0],n[1]):Ht(n):Zu(n)}function Vt(n){if(!ze(n))return Li(n);var t,r=[];for(t in Qu(n))oi.call(n,t)&&"constructor"!=t&&r.push(t);
|
||||
return r}function Kt(n,t){return n<t}function Gt(n,t){var r=-1,e=su(n)?Ku(n.length):[];return uo(n,function(n,u,i){e[++r]=t(n,u,i)}),e}function Ht(n){var t=xe(n);return 1==t.length&&t[0][2]?We(t[0][0],t[0][1]):function(r){return r===n||$t(r,n,t)}}function Jt(n,t){return Ie(n)&&t===t&&!du(t)?We(Me(n),t):function(r){var e=Ru(r,n);return e===T&&e===t?zu(r,n):Mt(t,e,3)}}function Yt(n,t,r,e,u){n!==t&&oo(t,function(i,o){if(u||(u=new Zn),du(i)){var f=u,c=Le(n,o),a=Le(t,o),l=f.get(a);if(l)it(n,o,l);else{
|
||||
var l=e?e(c,a,o+"",n,t,f):T,s=l===T;if(s){var h=ff(a),p=!h&&af(a),_=!h&&!p&&_f(a),l=a;h||p||_?ff(c)?l=c:hu(c)?l=Ur(c):p?(s=false,l=Ir(a,true)):_?(s=false,l=zr(a,true)):l=[]:xu(a)||of(a)?(l=c,of(c)?l=Ou(c):du(c)&&!_u(c)||(l=Ae(a))):s=false}s&&(f.set(a,l),Yt(l,a,r,e,f),f.delete(a)),it(n,o,l)}}else f=e?e(Le(n,o),i,o+"",n,t,u):T,f===T&&(f=i),it(n,o,f)},Bu)}function Qt(n,t){var r=n.length;if(r)return t+=0>t?r:0,Se(t,r)?n[t]:T}function Xt(n,t,r){var e=-1;return t=c(t.length?t:[$u],k(ye())),n=Gt(n,function(n){return{
|
||||
a:c(t,function(t){return t(n)}),b:++e,c:n}}),w(n,function(n,t){var e;n:{e=-1;for(var u=n.a,i=t.a,o=u.length,f=r.length;++e<o;){var c=Wr(u[e],i[e]);if(c){e=e>=f?c:c*("desc"==r[e]?-1:1);break n}}e=n.b-t.b}return e})}function nr(n,t){return tr(n,t,function(t,r){return zu(n,r)})}function tr(n,t,r){for(var e=-1,u=t.length,i={};++e<u;){var o=t[e],f=kt(n,o);r(f,o)&&lr(i,Sr(o,n),f)}return i}function rr(n){return function(t){return kt(t,n)}}function er(n,t,r,e){var u=e?g:v,i=-1,o=t.length,f=n;for(n===t&&(t=Ur(t)),
|
||||
r&&(f=c(n,k(r)));++i<o;)for(var a=0,l=t[i],l=r?r(l):l;-1<(a=u(f,l,a,e));)f!==n&&xi.call(f,a,1),xi.call(n,a,1);return n}function ur(n,t){for(var r=n?t.length:0,e=r-1;r--;){var u=t[r];if(r==e||u!==i){var i=u;Se(u)?xi.call(n,u,1):xr(n,u)}}}function ir(n,t){return n+Ii(Ti()*(t-n+1))}function or(n,t){var r="";if(!n||1>t||9007199254740991<t)return r;do t%2&&(r+=n),(t=Ii(t/2))&&(n+=n);while(t);return r}function fr(n,t){return xo(Be(n,t,$u),n+"")}function cr(n){return Qn(Uu(n))}function ar(n,t){var r=Uu(n);
|
||||
return De(r,pt(t,0,r.length))}function lr(n,t,r,e){if(!du(n))return n;t=Sr(t,n);for(var u=-1,i=t.length,o=i-1,f=n;null!=f&&++u<i;){var c=Me(t[u]),a=r;if(u!=o){var l=f[c],a=e?e(l,c,f):T;a===T&&(a=du(l)?l:Se(t[u+1])?[]:{})}ot(f,c,a),f=f[c]}return n}function sr(n){return De(Uu(n))}function hr(n,t,r){var e=-1,u=n.length;for(0>t&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Ku(u);++e<u;)r[e]=n[e+t];return r}function pr(n,t){var r;return uo(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}
|
||||
function _r(n,t,r){var e=0,u=null==n?e:n.length;if(typeof t=="number"&&t===t&&2147483647>=u){for(;e<u;){var i=e+u>>>1,o=n[i];null!==o&&!wu(o)&&(r?o<=t:o<t)?e=i+1:u=i}return u}return vr(n,t,$u,r)}function vr(n,t,r,e){t=r(t);for(var u=0,i=null==n?0:n.length,o=t!==t,f=null===t,c=wu(t),a=t===T;u<i;){var l=Ii((u+i)/2),s=r(n[l]),h=s!==T,p=null===s,_=s===s,v=wu(s);(o?e||_:a?_&&(e||h):f?_&&h&&(e||!p):c?_&&h&&!p&&(e||!v):p||v?0:e?s<=t:s<t)?u=l+1:i=l}return Ci(i,4294967294)}function gr(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){
|
||||
var o=n[r],f=t?t(o):o;if(!r||!lu(f,c)){var c=f;i[u++]=0===o?0:o}}return i}function dr(n){return typeof n=="number"?n:wu(n)?F:+n}function yr(n){if(typeof n=="string")return n;if(ff(n))return c(n,yr)+"";if(wu(n))return ro?ro.call(n):"";var t=n+"";return"0"==t&&1/n==-$?"-0":t}function br(n,t,r){var e=-1,u=o,i=n.length,c=true,a=[],l=a;if(r)c=false,u=f;else if(200<=i){if(u=t?null:so(n))return U(u);c=false,u=O,l=new Nn}else l=t?[]:a;n:for(;++e<i;){var s=n[e],h=t?t(s):s,s=r||0!==s?s:0;if(c&&h===h){for(var p=l.length;p--;)if(l[p]===h)continue n;
|
||||
t&&l.push(h),a.push(s)}else u(l,h,r)||(l!==a&&l.push(h),a.push(s))}return a}function xr(n,t){return t=Sr(t,n),n=2>t.length?n:kt(n,hr(t,0,-1)),null==n||delete n[Me(Ve(t))]}function jr(n,t,r,e){for(var u=n.length,i=e?u:-1;(e?i--:++i<u)&&t(n[i],i,n););return r?hr(n,e?0:i,e?i+1:u):hr(n,e?i+1:0,e?u:i)}function wr(n,t){var r=n;return r instanceof Un&&(r=r.value()),l(t,function(n,t){return t.func.apply(t.thisArg,a([n],t.args))},r)}function mr(n,t,r){var e=n.length;if(2>e)return e?br(n[0]):[];for(var u=-1,i=Ku(e);++u<e;)for(var o=n[u],f=-1;++f<e;)f!=u&&(i[u]=yt(i[u]||o,n[f],t,r));
|
||||
return br(wt(i,1),t,r)}function Ar(n,t,r){for(var e=-1,u=n.length,i=t.length,o={};++e<u;)r(o,n[e],e<i?t[e]:T);return o}function Er(n){return hu(n)?n:[]}function kr(n){return typeof n=="function"?n:$u}function Sr(n,t){return ff(n)?n:Ie(n,t)?[n]:jo(Iu(n))}function Or(n,t,r){var e=n.length;return r=r===T?e:r,!t&&r>=e?n:hr(n,t,r)}function Ir(n,t){if(t)return n.slice();var r=n.length,r=gi?gi(r):new n.constructor(r);return n.copy(r),r}function Rr(n){var t=new n.constructor(n.byteLength);return new vi(t).set(new vi(n)),
|
||||
t}function zr(n,t){return new n.constructor(t?Rr(n.buffer):n.buffer,n.byteOffset,n.length)}function Wr(n,t){if(n!==t){var r=n!==T,e=null===n,u=n===n,i=wu(n),o=t!==T,f=null===t,c=t===t,a=wu(t);if(!f&&!a&&!i&&n>t||i&&o&&c&&!f&&!a||e&&o&&c||!r&&c||!u)return 1;if(!e&&!i&&!a&&n<t||a&&r&&u&&!e&&!i||f&&r&&u||!o&&u||!c)return-1}return 0}function Br(n,t,r,e){var u=-1,i=n.length,o=r.length,f=-1,c=t.length,a=Ui(i-o,0),l=Ku(c+a);for(e=!e;++f<c;)l[f]=t[f];for(;++u<o;)(e||u<i)&&(l[r[u]]=n[u]);for(;a--;)l[f++]=n[u++];
|
||||
return l}function Lr(n,t,r,e){var u=-1,i=n.length,o=-1,f=r.length,c=-1,a=t.length,l=Ui(i-f,0),s=Ku(l+a);for(e=!e;++u<l;)s[u]=n[u];for(l=u;++c<a;)s[l+c]=t[c];for(;++o<f;)(e||u<i)&&(s[l+r[o]]=n[u++]);return s}function Ur(n,t){var r=-1,e=n.length;for(t||(t=Ku(e));++r<e;)t[r]=n[r];return t}function Cr(n,t,r,e){var u=!r;r||(r={});for(var i=-1,o=t.length;++i<o;){var f=t[i],c=e?e(r[f],n[f],f,r,n):T;c===T&&(c=n[f]),u?st(r,f,c):ot(r,f,c)}return r}function Dr(n,t){return Cr(n,po(n),t)}function Mr(n,t){return Cr(n,_o(n),t);
|
||||
}function Tr(n,r){return function(e,u){var i=ff(e)?t:ct,o=r?r():{};return i(e,n,ye(u,2),o)}}function $r(n){return fr(function(t,r){var e=-1,u=r.length,i=1<u?r[u-1]:T,o=2<u?r[2]:T,i=3<n.length&&typeof i=="function"?(u--,i):T;for(o&&Oe(r[0],r[1],o)&&(i=3>u?T:i,u=1),t=Qu(t);++e<u;)(o=r[e])&&n(t,o,e,i);return t})}function Fr(n,t){return function(r,e){if(null==r)return r;if(!su(r))return n(r,e);for(var u=r.length,i=t?u:-1,o=Qu(r);(t?i--:++i<u)&&false!==e(o[i],i,o););return r}}function Nr(n){return function(t,r,e){
|
||||
var u=-1,i=Qu(t);e=e(t);for(var o=e.length;o--;){var f=e[n?o:++u];if(false===r(i[f],f,i))break}return t}}function Pr(n,t,r){function e(){return(this&&this!==$n&&this instanceof e?i:n).apply(u?r:this,arguments)}var u=1&t,i=Vr(n);return e}function Zr(n){return function(t){t=Iu(t);var r=Rn.test(t)?M(t):T,e=r?r[0]:t.charAt(0);return t=r?Or(r,1).join(""):t.slice(1),e[n]()+t}}function qr(n){return function(t){return l(Mu(Du(t).replace(kn,"")),n,"")}}function Vr(n){return function(){var t=arguments;switch(t.length){
|
||||
case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=eo(n.prototype),t=n.apply(r,t);return du(t)?t:r}}function Kr(t,r,e){function u(){for(var o=arguments.length,f=Ku(o),c=o,a=de(u);c--;)f[c]=arguments[c];return c=3>o&&f[0]!==a&&f[o-1]!==a?[]:L(f,a),
|
||||
o-=c.length,o<e?ue(t,r,Jr,u.placeholder,T,f,c,T,T,e-o):n(this&&this!==$n&&this instanceof u?i:t,this,f)}var i=Vr(t);return u}function Gr(n){return function(t,r,e){var u=Qu(t);if(!su(t)){var i=ye(r,3);t=Wu(t),r=function(n){return i(u[n],n,u)}}return r=n(t,r,e),-1<r?u[i?t[r]:r]:T}}function Hr(n){return pe(function(t){var r=t.length,e=r,u=On.prototype.thru;for(n&&t.reverse();e--;){var i=t[e];if(typeof i!="function")throw new ti("Expected a function");if(u&&!o&&"wrapper"==ge(i))var o=new On([],true)}for(e=o?e:r;++e<r;)var i=t[e],u=ge(i),f="wrapper"==u?ho(i):T,o=f&&Re(f[0])&&424==f[1]&&!f[4].length&&1==f[9]?o[ge(f[0])].apply(o,f[3]):1==i.length&&Re(i)?o[u]():o.thru(i);
|
||||
return function(){var n=arguments,e=n[0];if(o&&1==n.length&&ff(e))return o.plant(e).value();for(var u=0,n=r?t[u].apply(this,n):e;++u<r;)n=t[u].call(this,n);return n}})}function Jr(n,t,r,e,u,i,o,f,c,a){function l(){for(var d=arguments.length,y=Ku(d),b=d;b--;)y[b]=arguments[b];if(_){var x,j=de(l),b=y.length;for(x=0;b--;)y[b]===j&&++x}if(e&&(y=Br(y,e,u,_)),i&&(y=Lr(y,i,o,_)),d-=x,_&&d<a)return j=L(y,j),ue(n,t,Jr,l.placeholder,r,y,j,f,c,a-d);if(j=h?r:this,b=p?j[n]:n,d=y.length,f){x=y.length;for(var w=Ci(f.length,x),m=Ur(y);w--;){
|
||||
var A=f[w];y[w]=Se(A,x)?m[A]:T}}else v&&1<d&&y.reverse();return s&&c<d&&(y.length=c),this&&this!==$n&&this instanceof l&&(b=g||Vr(b)),b.apply(j,y)}var s=128&t,h=1&t,p=2&t,_=24&t,v=512&t,g=p?T:Vr(n);return l}function Yr(n,t){return function(r,e){return Bt(r,n,t(e))}}function Qr(n,t){return function(r,e){var u;if(r===T&&e===T)return t;if(r!==T&&(u=r),e!==T){if(u===T)return e;typeof r=="string"||typeof e=="string"?(r=yr(r),e=yr(e)):(r=dr(r),e=dr(e)),u=n(r,e)}return u}}function Xr(t){return pe(function(r){
|
||||
return r=c(r,k(ye())),fr(function(e){var u=this;return t(r,function(t){return n(t,u,e)})})})}function ne(n,t){t=t===T?" ":yr(t);var r=t.length;return 2>r?r?or(t,n):t:(r=or(t,Oi(n/D(t))),Rn.test(t)?Or(M(r),0,n).join(""):r.slice(0,n))}function te(t,r,e,u){function i(){for(var r=-1,c=arguments.length,a=-1,l=u.length,s=Ku(l+c),h=this&&this!==$n&&this instanceof i?f:t;++a<l;)s[a]=u[a];for(;c--;)s[a++]=arguments[++r];return n(h,o?e:this,s)}var o=1&r,f=Vr(t);return i}function re(n){return function(t,r,e){
|
||||
e&&typeof e!="number"&&Oe(t,r,e)&&(r=e=T),t=Au(t),r===T?(r=t,t=0):r=Au(r),e=e===T?t<r?1:-1:Au(e);var u=-1;r=Ui(Oi((r-t)/(e||1)),0);for(var i=Ku(r);r--;)i[n?r:++u]=t,t+=e;return i}}function ee(n){return function(t,r){return typeof t=="string"&&typeof r=="string"||(t=Su(t),r=Su(r)),n(t,r)}}function ue(n,t,r,e,u,i,o,f,c,a){var l=8&t,s=l?o:T;o=l?T:o;var h=l?i:T;return i=l?T:i,t=(t|(l?32:64))&~(l?64:32),4&t||(t&=-4),u=[n,t,u,h,s,i,o,f,c,a],r=r.apply(T,u),Re(n)&&yo(r,u),r.placeholder=e,Ue(r,n,t)}function ie(n){
|
||||
var t=Yu[n];return function(n,r){if(n=Su(n),(r=null==r?0:Ci(Eu(r),292))&&Wi(n)){var e=(Iu(n)+"e").split("e"),e=t(e[0]+"e"+(+e[1]+r)),e=(Iu(e)+"e").split("e");return+(e[0]+"e"+(+e[1]-r))}return t(n)}}function oe(n){return function(t){var r=vo(t);return"[object Map]"==r?W(t):"[object Set]"==r?C(t):E(t,n(t))}}function fe(n,t,r,e,u,i,o,f){var c=2&t;if(!c&&typeof n!="function")throw new ti("Expected a function");var a=e?e.length:0;if(a||(t&=-97,e=u=T),o=o===T?o:Ui(Eu(o),0),f=f===T?f:Eu(f),a-=u?u.length:0,
|
||||
64&t){var l=e,s=u;e=u=T}var h=c?T:ho(n);return i=[n,t,r,e,u,l,s,i,o,f],h&&(r=i[1],n=h[1],t=r|n,e=128==n&&8==r||128==n&&256==r&&i[7].length<=h[8]||384==n&&h[7].length<=h[8]&&8==r,131>t||e)&&(1&n&&(i[2]=h[2],t|=1&r?0:4),(r=h[3])&&(e=i[3],i[3]=e?Br(e,r,h[4]):r,i[4]=e?L(i[3],"__lodash_placeholder__"):h[4]),(r=h[5])&&(e=i[5],i[5]=e?Lr(e,r,h[6]):r,i[6]=e?L(i[5],"__lodash_placeholder__"):h[6]),(r=h[7])&&(i[7]=r),128&n&&(i[8]=null==i[8]?h[8]:Ci(i[8],h[8])),null==i[9]&&(i[9]=h[9]),i[0]=h[0],i[1]=t),n=i[0],
|
||||
t=i[1],r=i[2],e=i[3],u=i[4],f=i[9]=i[9]===T?c?0:n.length:Ui(i[9]-a,0),!f&&24&t&&(t&=-25),Ue((h?co:yo)(t&&1!=t?8==t||16==t?Kr(n,t,f):32!=t&&33!=t||u.length?Jr.apply(T,i):te(n,t,r,e):Pr(n,t,r),i),n,t)}function ce(n,t,r,e){return n===T||lu(n,ei[r])&&!oi.call(e,r)?t:n}function ae(n,t,r,e,u,i){return du(n)&&du(t)&&(i.set(t,n),Yt(n,t,T,ae,i),i.delete(t)),n}function le(n){return xu(n)?T:n}function se(n,t,r,e,u,i){var o=1&r,f=n.length,c=t.length;if(f!=c&&!(o&&c>f))return false;if((c=i.get(n))&&i.get(t))return c==t;
|
||||
var c=-1,a=true,l=2&r?new Nn:T;for(i.set(n,t),i.set(t,n);++c<f;){var s=n[c],p=t[c];if(e)var _=o?e(p,s,c,t,n,i):e(s,p,c,n,t,i);if(_!==T){if(_)continue;a=false;break}if(l){if(!h(t,function(n,t){if(!O(l,t)&&(s===n||u(s,n,r,e,i)))return l.push(t)})){a=false;break}}else if(s!==p&&!u(s,p,r,e,i)){a=false;break}}return i.delete(n),i.delete(t),a}function he(n,t,r,e,u,i,o){switch(r){case"[object DataView]":if(n.byteLength!=t.byteLength||n.byteOffset!=t.byteOffset)break;n=n.buffer,t=t.buffer;case"[object ArrayBuffer]":
|
||||
if(n.byteLength!=t.byteLength||!i(new vi(n),new vi(t)))break;return true;case"[object Boolean]":case"[object Date]":case"[object Number]":return lu(+n,+t);case"[object Error]":return n.name==t.name&&n.message==t.message;case"[object RegExp]":case"[object String]":return n==t+"";case"[object Map]":var f=W;case"[object Set]":if(f||(f=U),n.size!=t.size&&!(1&e))break;return(r=o.get(n))?r==t:(e|=2,o.set(n,t),t=se(f(n),f(t),e,u,i,o),o.delete(n),t);case"[object Symbol]":if(to)return to.call(n)==to.call(t)}
|
||||
return false}function pe(n){return xo(Be(n,T,Ze),n+"")}function _e(n){return St(n,Wu,po)}function ve(n){return St(n,Bu,_o)}function ge(n){for(var t=n.name+"",r=Gi[t],e=oi.call(Gi,t)?r.length:0;e--;){var u=r[e],i=u.func;if(null==i||i==n)return u.name}return t}function de(n){return(oi.call(An,"placeholder")?An:n).placeholder}function ye(){var n=An.iteratee||Fu,n=n===Fu?qt:n;return arguments.length?n(arguments[0],arguments[1]):n}function be(n,t){var r=n.__data__,e=typeof t;return("string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t)?r[typeof t=="string"?"string":"hash"]:r.map;
|
||||
}function xe(n){for(var t=Wu(n),r=t.length;r--;){var e=t[r],u=n[e];t[r]=[e,u,u===u&&!du(u)]}return t}function je(n,t){var r=null==n?T:n[t];return Ft(r)?r:T}function we(n,t,r){t=Sr(t,n);for(var e=-1,u=t.length,i=false;++e<u;){var o=Me(t[e]);if(!(i=null!=n&&r(n,o)))break;n=n[o]}return i||++e!=u?i:(u=null==n?0:n.length,!!u&&gu(u)&&Se(o,u)&&(ff(n)||of(n)))}function me(n){var t=n.length,r=new n.constructor(t);return t&&"string"==typeof n[0]&&oi.call(n,"index")&&(r.index=n.index,r.input=n.input),r}function Ae(n){
|
||||
return typeof n.constructor!="function"||ze(n)?{}:eo(di(n))}function Ee(n,t,r){var e=n.constructor;switch(t){case"[object ArrayBuffer]":return Rr(n);case"[object Boolean]":case"[object Date]":return new e(+n);case"[object DataView]":return t=r?Rr(n.buffer):n.buffer,new n.constructor(t,n.byteOffset,n.byteLength);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":
|
||||
case"[object Uint16Array]":case"[object Uint32Array]":return zr(n,r);case"[object Map]":return new e;case"[object Number]":case"[object String]":return new e(n);case"[object RegExp]":return t=new n.constructor(n.source,_n.exec(n)),t.lastIndex=n.lastIndex,t;case"[object Set]":return new e;case"[object Symbol]":return to?Qu(to.call(n)):{}}}function ke(n){return ff(n)||of(n)||!!(ji&&n&&n[ji])}function Se(n,t){var r=typeof n;return t=null==t?9007199254740991:t,!!t&&("number"==r||"symbol"!=r&&bn.test(n))&&-1<n&&0==n%1&&n<t;
|
||||
}function Oe(n,t,r){if(!du(r))return false;var e=typeof t;return!!("number"==e?su(r)&&Se(t,r.length):"string"==e&&t in r)&&lu(r[t],n)}function Ie(n,t){if(ff(n))return false;var r=typeof n;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=n&&!wu(n))||(nn.test(n)||!X.test(n)||null!=t&&n in Qu(t))}function Re(n){var t=ge(n),r=An[t];return typeof r=="function"&&t in Un.prototype&&(n===r||(t=ho(r),!!t&&n===t[0]))}function ze(n){var t=n&&n.constructor;return n===(typeof t=="function"&&t.prototype||ei)}function We(n,t){
|
||||
return function(r){return null!=r&&(r[n]===t&&(t!==T||n in Qu(r)))}}function Be(t,r,e){return r=Ui(r===T?t.length-1:r,0),function(){for(var u=arguments,i=-1,o=Ui(u.length-r,0),f=Ku(o);++i<o;)f[i]=u[r+i];for(i=-1,o=Ku(r+1);++i<r;)o[i]=u[i];return o[r]=e(f),n(t,this,o)}}function Le(n,t){if(("constructor"!==t||"function"!=typeof n[t])&&"__proto__"!=t)return n[t]}function Ue(n,t,r){var e=t+"";t=xo;var u,i=$e;return u=(u=e.match(an))?u[1].split(ln):[],r=i(u,r),(i=r.length)&&(u=i-1,r[u]=(1<i?"& ":"")+r[u],
|
||||
r=r.join(2<i?", ":" "),e=e.replace(cn,"{\n/* [wrapped with "+r+"] */\n")),t(n,e)}function Ce(n){var t=0,r=0;return function(){var e=Di(),u=16-(e-r);if(r=e,0<u){if(800<=++t)return arguments[0]}else t=0;return n.apply(T,arguments)}}function De(n,t){var r=-1,e=n.length,u=e-1;for(t=t===T?e:t;++r<t;){var e=ir(r,u),i=n[e];n[e]=n[r],n[r]=i}return n.length=t,n}function Me(n){if(typeof n=="string"||wu(n))return n;var t=n+"";return"0"==t&&1/n==-$?"-0":t}function Te(n){if(null!=n){try{return ii.call(n)}catch(n){}
|
||||
return n+""}return""}function $e(n,t){return r(N,function(r){var e="_."+r[0];t&r[1]&&!o(n,e)&&n.push(e)}),n.sort()}function Fe(n){if(n instanceof Un)return n.clone();var t=new On(n.__wrapped__,n.__chain__);return t.__actions__=Ur(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}function Ne(n,t,r){var e=null==n?0:n.length;return e?(r=null==r?0:Eu(r),0>r&&(r=Ui(e+r,0)),_(n,ye(t,3),r)):-1}function Pe(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e-1;return r!==T&&(u=Eu(r),u=0>r?Ui(e+u,0):Ci(u,e-1)),
|
||||
_(n,ye(t,3),u,true)}function Ze(n){return(null==n?0:n.length)?wt(n,1):[]}function qe(n){return n&&n.length?n[0]:T}function Ve(n){var t=null==n?0:n.length;return t?n[t-1]:T}function Ke(n,t){return n&&n.length&&t&&t.length?er(n,t):n}function Ge(n){return null==n?n:$i.call(n)}function He(n){if(!n||!n.length)return[];var t=0;return n=i(n,function(n){if(hu(n))return t=Ui(n.length,t),true}),A(t,function(t){return c(n,b(t))})}function Je(t,r){if(!t||!t.length)return[];var e=He(t);return null==r?e:c(e,function(t){
|
||||
return n(r,T,t)})}function Ye(n){return n=An(n),n.__chain__=true,n}function Qe(n,t){return t(n)}function Xe(){return this}function nu(n,t){return(ff(n)?r:uo)(n,ye(t,3))}function tu(n,t){return(ff(n)?e:io)(n,ye(t,3))}function ru(n,t){return(ff(n)?c:Gt)(n,ye(t,3))}function eu(n,t,r){return t=r?T:t,t=n&&null==t?n.length:t,fe(n,128,T,T,T,T,t)}function uu(n,t){var r;if(typeof t!="function")throw new ti("Expected a function");return n=Eu(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=T),
|
||||
r}}function iu(n,t,r){return t=r?T:t,n=fe(n,8,T,T,T,T,T,t),n.placeholder=iu.placeholder,n}function ou(n,t,r){return t=r?T:t,n=fe(n,16,T,T,T,T,T,t),n.placeholder=ou.placeholder,n}function fu(n,t,r){function e(t){var r=c,e=a;return c=a=T,_=t,s=n.apply(e,r)}function u(n){var r=n-p;return n-=_,p===T||r>=t||0>r||g&&n>=l}function i(){var n=Go();if(u(n))return o(n);var r,e=bo;r=n-_,n=t-(n-p),r=g?Ci(n,l-r):n,h=e(i,r)}function o(n){return h=T,d&&c?e(n):(c=a=T,s)}function f(){var n=Go(),r=u(n);if(c=arguments,
|
||||
a=this,p=n,r){if(h===T)return _=n=p,h=bo(i,t),v?e(n):s;if(g)return lo(h),h=bo(i,t),e(p)}return h===T&&(h=bo(i,t)),s}var c,a,l,s,h,p,_=0,v=false,g=false,d=true;if(typeof n!="function")throw new ti("Expected a function");return t=Su(t)||0,du(r)&&(v=!!r.leading,l=(g="maxWait"in r)?Ui(Su(r.maxWait)||0,t):l,d="trailing"in r?!!r.trailing:d),f.cancel=function(){h!==T&&lo(h),_=0,c=p=a=h=T},f.flush=function(){return h===T?s:o(Go())},f}function cu(n,t){function r(){var e=arguments,u=t?t.apply(this,e):e[0],i=r.cache;
|
||||
return i.has(u)?i.get(u):(e=n.apply(this,e),r.cache=i.set(u,e)||i,e)}if(typeof n!="function"||null!=t&&typeof t!="function")throw new ti("Expected a function");return r.cache=new(cu.Cache||Fn),r}function au(n){if(typeof n!="function")throw new ti("Expected a function");return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}function lu(n,t){return n===t||n!==n&&t!==t;
|
||||
}function su(n){return null!=n&&gu(n.length)&&!_u(n)}function hu(n){return yu(n)&&su(n)}function pu(n){if(!yu(n))return false;var t=Ot(n);return"[object Error]"==t||"[object DOMException]"==t||typeof n.message=="string"&&typeof n.name=="string"&&!xu(n)}function _u(n){return!!du(n)&&(n=Ot(n),"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n)}function vu(n){return typeof n=="number"&&n==Eu(n)}function gu(n){return typeof n=="number"&&-1<n&&0==n%1&&9007199254740991>=n;
|
||||
}function du(n){var t=typeof n;return null!=n&&("object"==t||"function"==t)}function yu(n){return null!=n&&typeof n=="object"}function bu(n){return typeof n=="number"||yu(n)&&"[object Number]"==Ot(n)}function xu(n){return!(!yu(n)||"[object Object]"!=Ot(n))&&(n=di(n),null===n||(n=oi.call(n,"constructor")&&n.constructor,typeof n=="function"&&n instanceof n&&ii.call(n)==li))}function ju(n){return typeof n=="string"||!ff(n)&&yu(n)&&"[object String]"==Ot(n)}function wu(n){return typeof n=="symbol"||yu(n)&&"[object Symbol]"==Ot(n);
|
||||
}function mu(n){if(!n)return[];if(su(n))return ju(n)?M(n):Ur(n);if(wi&&n[wi]){n=n[wi]();for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r}return t=vo(n),("[object Map]"==t?W:"[object Set]"==t?U:Uu)(n)}function Au(n){return n?(n=Su(n),n===$||n===-$?1.7976931348623157e308*(0>n?-1:1):n===n?n:0):0===n?n:0}function Eu(n){n=Au(n);var t=n%1;return n===n?t?n-t:n:0}function ku(n){return n?pt(Eu(n),0,4294967295):0}function Su(n){if(typeof n=="number")return n;if(wu(n))return F;if(du(n)&&(n=typeof n.valueOf=="function"?n.valueOf():n,
|
||||
n=du(n)?n+"":n),typeof n!="string")return 0===n?n:+n;n=n.replace(un,"");var t=gn.test(n);return t||yn.test(n)?Dn(n.slice(2),t?2:8):vn.test(n)?F:+n}function Ou(n){return Cr(n,Bu(n))}function Iu(n){return null==n?"":yr(n)}function Ru(n,t,r){return n=null==n?T:kt(n,t),n===T?r:n}function zu(n,t){return null!=n&&we(n,t,zt)}function Wu(n){return su(n)?qn(n):Vt(n)}function Bu(n){if(su(n))n=qn(n,true);else if(du(n)){var t,r=ze(n),e=[];for(t in n)("constructor"!=t||!r&&oi.call(n,t))&&e.push(t);n=e}else{if(t=[],
|
||||
null!=n)for(r in Qu(n))t.push(r);n=t}return n}function Lu(n,t){if(null==n)return{};var r=c(ve(n),function(n){return[n]});return t=ye(t),tr(n,r,function(n,r){return t(n,r[0])})}function Uu(n){return null==n?[]:S(n,Wu(n))}function Cu(n){return $f(Iu(n).toLowerCase())}function Du(n){return(n=Iu(n))&&n.replace(xn,Xn).replace(Sn,"")}function Mu(n,t,r){return n=Iu(n),t=r?T:t,t===T?zn.test(n)?n.match(In)||[]:n.match(sn)||[]:n.match(t)||[]}function Tu(n){return function(){return n}}function $u(n){return n;
|
||||
}function Fu(n){return qt(typeof n=="function"?n:_t(n,1))}function Nu(n,t,e){var u=Wu(t),i=Et(t,u);null!=e||du(t)&&(i.length||!u.length)||(e=t,t=n,n=this,i=Et(t,Wu(t)));var o=!(du(e)&&"chain"in e&&!e.chain),f=_u(n);return r(i,function(r){var e=t[r];n[r]=e,f&&(n.prototype[r]=function(){var t=this.__chain__;if(o||t){var r=n(this.__wrapped__);return(r.__actions__=Ur(this.__actions__)).push({func:e,args:arguments,thisArg:n}),r.__chain__=t,r}return e.apply(n,a([this.value()],arguments))})}),n}function Pu(){}
|
||||
function Zu(n){return Ie(n)?b(Me(n)):rr(n)}function qu(){return[]}function Vu(){return false}mn=null==mn?$n:rt.defaults($n.Object(),mn,rt.pick($n,Wn));var Ku=mn.Array,Gu=mn.Date,Hu=mn.Error,Ju=mn.Function,Yu=mn.Math,Qu=mn.Object,Xu=mn.RegExp,ni=mn.String,ti=mn.TypeError,ri=Ku.prototype,ei=Qu.prototype,ui=mn["__core-js_shared__"],ii=Ju.prototype.toString,oi=ei.hasOwnProperty,fi=0,ci=function(){var n=/[^.]+$/.exec(ui&&ui.keys&&ui.keys.IE_PROTO||"");return n?"Symbol(src)_1."+n:""}(),ai=ei.toString,li=ii.call(Qu),si=$n._,hi=Xu("^"+ii.call(oi).replace(rn,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),pi=Pn?mn.Buffer:T,_i=mn.Symbol,vi=mn.Uint8Array,gi=pi?pi.g:T,di=B(Qu.getPrototypeOf,Qu),yi=Qu.create,bi=ei.propertyIsEnumerable,xi=ri.splice,ji=_i?_i.isConcatSpreadable:T,wi=_i?_i.iterator:T,mi=_i?_i.toStringTag:T,Ai=function(){
|
||||
try{var n=je(Qu,"defineProperty");return n({},"",{}),n}catch(n){}}(),Ei=mn.clearTimeout!==$n.clearTimeout&&mn.clearTimeout,ki=Gu&&Gu.now!==$n.Date.now&&Gu.now,Si=mn.setTimeout!==$n.setTimeout&&mn.setTimeout,Oi=Yu.ceil,Ii=Yu.floor,Ri=Qu.getOwnPropertySymbols,zi=pi?pi.isBuffer:T,Wi=mn.isFinite,Bi=ri.join,Li=B(Qu.keys,Qu),Ui=Yu.max,Ci=Yu.min,Di=Gu.now,Mi=mn.parseInt,Ti=Yu.random,$i=ri.reverse,Fi=je(mn,"DataView"),Ni=je(mn,"Map"),Pi=je(mn,"Promise"),Zi=je(mn,"Set"),qi=je(mn,"WeakMap"),Vi=je(Qu,"create"),Ki=qi&&new qi,Gi={},Hi=Te(Fi),Ji=Te(Ni),Yi=Te(Pi),Qi=Te(Zi),Xi=Te(qi),no=_i?_i.prototype:T,to=no?no.valueOf:T,ro=no?no.toString:T,eo=function(){
|
||||
function n(){}return function(t){return du(t)?yi?yi(t):(n.prototype=t,t=new n,n.prototype=T,t):{}}}();An.templateSettings={escape:J,evaluate:Y,interpolate:Q,variable:"",imports:{_:An}},An.prototype=En.prototype,An.prototype.constructor=An,On.prototype=eo(En.prototype),On.prototype.constructor=On,Un.prototype=eo(En.prototype),Un.prototype.constructor=Un,Mn.prototype.clear=function(){this.__data__=Vi?Vi(null):{},this.size=0},Mn.prototype.delete=function(n){return n=this.has(n)&&delete this.__data__[n],
|
||||
this.size-=n?1:0,n},Mn.prototype.get=function(n){var t=this.__data__;return Vi?(n=t[n],"__lodash_hash_undefined__"===n?T:n):oi.call(t,n)?t[n]:T},Mn.prototype.has=function(n){var t=this.__data__;return Vi?t[n]!==T:oi.call(t,n)},Mn.prototype.set=function(n,t){var r=this.__data__;return this.size+=this.has(n)?0:1,r[n]=Vi&&t===T?"__lodash_hash_undefined__":t,this},Tn.prototype.clear=function(){this.__data__=[],this.size=0},Tn.prototype.delete=function(n){var t=this.__data__;return n=ft(t,n),!(0>n)&&(n==t.length-1?t.pop():xi.call(t,n,1),
|
||||
--this.size,true)},Tn.prototype.get=function(n){var t=this.__data__;return n=ft(t,n),0>n?T:t[n][1]},Tn.prototype.has=function(n){return-1<ft(this.__data__,n)},Tn.prototype.set=function(n,t){var r=this.__data__,e=ft(r,n);return 0>e?(++this.size,r.push([n,t])):r[e][1]=t,this},Fn.prototype.clear=function(){this.size=0,this.__data__={hash:new Mn,map:new(Ni||Tn),string:new Mn}},Fn.prototype.delete=function(n){return n=be(this,n).delete(n),this.size-=n?1:0,n},Fn.prototype.get=function(n){return be(this,n).get(n);
|
||||
},Fn.prototype.has=function(n){return be(this,n).has(n)},Fn.prototype.set=function(n,t){var r=be(this,n),e=r.size;return r.set(n,t),this.size+=r.size==e?0:1,this},Nn.prototype.add=Nn.prototype.push=function(n){return this.__data__.set(n,"__lodash_hash_undefined__"),this},Nn.prototype.has=function(n){return this.__data__.has(n)},Zn.prototype.clear=function(){this.__data__=new Tn,this.size=0},Zn.prototype.delete=function(n){var t=this.__data__;return n=t.delete(n),this.size=t.size,n},Zn.prototype.get=function(n){
|
||||
return this.__data__.get(n)},Zn.prototype.has=function(n){return this.__data__.has(n)},Zn.prototype.set=function(n,t){var r=this.__data__;if(r instanceof Tn){var e=r.__data__;if(!Ni||199>e.length)return e.push([n,t]),this.size=++r.size,this;r=this.__data__=new Fn(e)}return r.set(n,t),this.size=r.size,this};var uo=Fr(mt),io=Fr(At,true),oo=Nr(),fo=Nr(true),co=Ki?function(n,t){return Ki.set(n,t),n}:$u,ao=Ai?function(n,t){return Ai(n,"toString",{configurable:true,enumerable:false,value:Tu(t),writable:true})}:$u,lo=Ei||function(n){
|
||||
return $n.clearTimeout(n)},so=Zi&&1/U(new Zi([,-0]))[1]==$?function(n){return new Zi(n)}:Pu,ho=Ki?function(n){return Ki.get(n)}:Pu,po=Ri?function(n){return null==n?[]:(n=Qu(n),i(Ri(n),function(t){return bi.call(n,t)}))}:qu,_o=Ri?function(n){for(var t=[];n;)a(t,po(n)),n=di(n);return t}:qu,vo=Ot;(Fi&&"[object DataView]"!=vo(new Fi(new ArrayBuffer(1)))||Ni&&"[object Map]"!=vo(new Ni)||Pi&&"[object Promise]"!=vo(Pi.resolve())||Zi&&"[object Set]"!=vo(new Zi)||qi&&"[object WeakMap]"!=vo(new qi))&&(vo=function(n){
|
||||
var t=Ot(n);if(n=(n="[object Object]"==t?n.constructor:T)?Te(n):"")switch(n){case Hi:return"[object DataView]";case Ji:return"[object Map]";case Yi:return"[object Promise]";case Qi:return"[object Set]";case Xi:return"[object WeakMap]"}return t});var go=ui?_u:Vu,yo=Ce(co),bo=Si||function(n,t){return $n.setTimeout(n,t)},xo=Ce(ao),jo=function(n){n=cu(n,function(n){return 500===t.size&&t.clear(),n});var t=n.cache;return n}(function(n){var t=[];return 46===n.charCodeAt(0)&&t.push(""),n.replace(tn,function(n,r,e,u){
|
||||
t.push(e?u.replace(hn,"$1"):r||n)}),t}),wo=fr(function(n,t){return hu(n)?yt(n,wt(t,1,hu,true)):[]}),mo=fr(function(n,t){var r=Ve(t);return hu(r)&&(r=T),hu(n)?yt(n,wt(t,1,hu,true),ye(r,2)):[]}),Ao=fr(function(n,t){var r=Ve(t);return hu(r)&&(r=T),hu(n)?yt(n,wt(t,1,hu,true),T,r):[]}),Eo=fr(function(n){var t=c(n,Er);return t.length&&t[0]===n[0]?Wt(t):[]}),ko=fr(function(n){var t=Ve(n),r=c(n,Er);return t===Ve(r)?t=T:r.pop(),r.length&&r[0]===n[0]?Wt(r,ye(t,2)):[]}),So=fr(function(n){var t=Ve(n),r=c(n,Er);return(t=typeof t=="function"?t:T)&&r.pop(),
|
||||
r.length&&r[0]===n[0]?Wt(r,T,t):[]}),Oo=fr(Ke),Io=pe(function(n,t){var r=null==n?0:n.length,e=ht(n,t);return ur(n,c(t,function(n){return Se(n,r)?+n:n}).sort(Wr)),e}),Ro=fr(function(n){return br(wt(n,1,hu,true))}),zo=fr(function(n){var t=Ve(n);return hu(t)&&(t=T),br(wt(n,1,hu,true),ye(t,2))}),Wo=fr(function(n){var t=Ve(n),t=typeof t=="function"?t:T;return br(wt(n,1,hu,true),T,t)}),Bo=fr(function(n,t){return hu(n)?yt(n,t):[]}),Lo=fr(function(n){return mr(i(n,hu))}),Uo=fr(function(n){var t=Ve(n);return hu(t)&&(t=T),
|
||||
mr(i(n,hu),ye(t,2))}),Co=fr(function(n){var t=Ve(n),t=typeof t=="function"?t:T;return mr(i(n,hu),T,t)}),Do=fr(He),Mo=fr(function(n){var t=n.length,t=1<t?n[t-1]:T,t=typeof t=="function"?(n.pop(),t):T;return Je(n,t)}),To=pe(function(n){function t(t){return ht(t,n)}var r=n.length,e=r?n[0]:0,u=this.__wrapped__;return!(1<r||this.__actions__.length)&&u instanceof Un&&Se(e)?(u=u.slice(e,+e+(r?1:0)),u.__actions__.push({func:Qe,args:[t],thisArg:T}),new On(u,this.__chain__).thru(function(n){return r&&!n.length&&n.push(T),
|
||||
n})):this.thru(t)}),$o=Tr(function(n,t,r){oi.call(n,r)?++n[r]:st(n,r,1)}),Fo=Gr(Ne),No=Gr(Pe),Po=Tr(function(n,t,r){oi.call(n,r)?n[r].push(t):st(n,r,[t])}),Zo=fr(function(t,r,e){var u=-1,i=typeof r=="function",o=su(t)?Ku(t.length):[];return uo(t,function(t){o[++u]=i?n(r,t,e):Lt(t,r,e)}),o}),qo=Tr(function(n,t,r){st(n,r,t)}),Vo=Tr(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),Ko=fr(function(n,t){if(null==n)return[];var r=t.length;return 1<r&&Oe(n,t[0],t[1])?t=[]:2<r&&Oe(t[0],t[1],t[2])&&(t=[t[0]]),
|
||||
Xt(n,wt(t,1),[])}),Go=ki||function(){return $n.Date.now()},Ho=fr(function(n,t,r){var e=1;if(r.length)var u=L(r,de(Ho)),e=32|e;return fe(n,e,t,r,u)}),Jo=fr(function(n,t,r){var e=3;if(r.length)var u=L(r,de(Jo)),e=32|e;return fe(t,e,n,r,u)}),Yo=fr(function(n,t){return dt(n,1,t)}),Qo=fr(function(n,t,r){return dt(n,Su(t)||0,r)});cu.Cache=Fn;var Xo=fr(function(t,r){r=1==r.length&&ff(r[0])?c(r[0],k(ye())):c(wt(r,1),k(ye()));var e=r.length;return fr(function(u){for(var i=-1,o=Ci(u.length,e);++i<o;)u[i]=r[i].call(this,u[i]);
|
||||
return n(t,this,u)})}),nf=fr(function(n,t){return fe(n,32,T,t,L(t,de(nf)))}),tf=fr(function(n,t){return fe(n,64,T,t,L(t,de(tf)))}),rf=pe(function(n,t){return fe(n,256,T,T,T,t)}),ef=ee(It),uf=ee(function(n,t){return n>=t}),of=Ut(function(){return arguments}())?Ut:function(n){return yu(n)&&oi.call(n,"callee")&&!bi.call(n,"callee")},ff=Ku.isArray,cf=Vn?k(Vn):Ct,af=zi||Vu,lf=Kn?k(Kn):Dt,sf=Gn?k(Gn):Tt,hf=Hn?k(Hn):Nt,pf=Jn?k(Jn):Pt,_f=Yn?k(Yn):Zt,vf=ee(Kt),gf=ee(function(n,t){return n<=t}),df=$r(function(n,t){
|
||||
if(ze(t)||su(t))Cr(t,Wu(t),n);else for(var r in t)oi.call(t,r)&&ot(n,r,t[r])}),yf=$r(function(n,t){Cr(t,Bu(t),n)}),bf=$r(function(n,t,r,e){Cr(t,Bu(t),n,e)}),xf=$r(function(n,t,r,e){Cr(t,Wu(t),n,e)}),jf=pe(ht),wf=fr(function(n,t){n=Qu(n);var r=-1,e=t.length,u=2<e?t[2]:T;for(u&&Oe(t[0],t[1],u)&&(e=1);++r<e;)for(var u=t[r],i=Bu(u),o=-1,f=i.length;++o<f;){var c=i[o],a=n[c];(a===T||lu(a,ei[c])&&!oi.call(n,c))&&(n[c]=u[c])}return n}),mf=fr(function(t){return t.push(T,ae),n(Of,T,t)}),Af=Yr(function(n,t,r){
|
||||
null!=t&&typeof t.toString!="function"&&(t=ai.call(t)),n[t]=r},Tu($u)),Ef=Yr(function(n,t,r){null!=t&&typeof t.toString!="function"&&(t=ai.call(t)),oi.call(n,t)?n[t].push(r):n[t]=[r]},ye),kf=fr(Lt),Sf=$r(function(n,t,r){Yt(n,t,r)}),Of=$r(function(n,t,r,e){Yt(n,t,r,e)}),If=pe(function(n,t){var r={};if(null==n)return r;var e=false;t=c(t,function(t){return t=Sr(t,n),e||(e=1<t.length),t}),Cr(n,ve(n),r),e&&(r=_t(r,7,le));for(var u=t.length;u--;)xr(r,t[u]);return r}),Rf=pe(function(n,t){return null==n?{}:nr(n,t);
|
||||
}),zf=oe(Wu),Wf=oe(Bu),Bf=qr(function(n,t,r){return t=t.toLowerCase(),n+(r?Cu(t):t)}),Lf=qr(function(n,t,r){return n+(r?"-":"")+t.toLowerCase()}),Uf=qr(function(n,t,r){return n+(r?" ":"")+t.toLowerCase()}),Cf=Zr("toLowerCase"),Df=qr(function(n,t,r){return n+(r?"_":"")+t.toLowerCase()}),Mf=qr(function(n,t,r){return n+(r?" ":"")+$f(t)}),Tf=qr(function(n,t,r){return n+(r?" ":"")+t.toUpperCase()}),$f=Zr("toUpperCase"),Ff=fr(function(t,r){try{return n(t,T,r)}catch(n){return pu(n)?n:new Hu(n)}}),Nf=pe(function(n,t){
|
||||
return r(t,function(t){t=Me(t),st(n,t,Ho(n[t],n))}),n}),Pf=Hr(),Zf=Hr(true),qf=fr(function(n,t){return function(r){return Lt(r,n,t)}}),Vf=fr(function(n,t){return function(r){return Lt(n,r,t)}}),Kf=Xr(c),Gf=Xr(u),Hf=Xr(h),Jf=re(),Yf=re(true),Qf=Qr(function(n,t){return n+t},0),Xf=ie("ceil"),nc=Qr(function(n,t){return n/t},1),tc=ie("floor"),rc=Qr(function(n,t){return n*t},1),ec=ie("round"),uc=Qr(function(n,t){return n-t},0);return An.after=function(n,t){if(typeof t!="function")throw new ti("Expected a function");
|
||||
return n=Eu(n),function(){if(1>--n)return t.apply(this,arguments)}},An.ary=eu,An.assign=df,An.assignIn=yf,An.assignInWith=bf,An.assignWith=xf,An.at=jf,An.before=uu,An.bind=Ho,An.bindAll=Nf,An.bindKey=Jo,An.castArray=function(){if(!arguments.length)return[];var n=arguments[0];return ff(n)?n:[n]},An.chain=Ye,An.chunk=function(n,t,r){if(t=(r?Oe(n,t,r):t===T)?1:Ui(Eu(t),0),r=null==n?0:n.length,!r||1>t)return[];for(var e=0,u=0,i=Ku(Oi(r/t));e<r;)i[u++]=hr(n,e,e+=t);return i},An.compact=function(n){for(var t=-1,r=null==n?0:n.length,e=0,u=[];++t<r;){
|
||||
var i=n[t];i&&(u[e++]=i)}return u},An.concat=function(){var n=arguments.length;if(!n)return[];for(var t=Ku(n-1),r=arguments[0];n--;)t[n-1]=arguments[n];return a(ff(r)?Ur(r):[r],wt(t,1))},An.cond=function(t){var r=null==t?0:t.length,e=ye();return t=r?c(t,function(n){if("function"!=typeof n[1])throw new ti("Expected a function");return[e(n[0]),n[1]]}):[],fr(function(e){for(var u=-1;++u<r;){var i=t[u];if(n(i[0],this,e))return n(i[1],this,e)}})},An.conforms=function(n){return vt(_t(n,1))},An.constant=Tu,
|
||||
An.countBy=$o,An.create=function(n,t){var r=eo(n);return null==t?r:at(r,t)},An.curry=iu,An.curryRight=ou,An.debounce=fu,An.defaults=wf,An.defaultsDeep=mf,An.defer=Yo,An.delay=Qo,An.difference=wo,An.differenceBy=mo,An.differenceWith=Ao,An.drop=function(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===T?1:Eu(t),hr(n,0>t?0:t,e)):[]},An.dropRight=function(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===T?1:Eu(t),t=e-t,hr(n,0,0>t?0:t)):[]},An.dropRightWhile=function(n,t){return n&&n.length?jr(n,ye(t,3),true,true):[];
|
||||
},An.dropWhile=function(n,t){return n&&n.length?jr(n,ye(t,3),true):[]},An.fill=function(n,t,r,e){var u=null==n?0:n.length;if(!u)return[];for(r&&typeof r!="number"&&Oe(n,t,r)&&(r=0,e=u),u=n.length,r=Eu(r),0>r&&(r=-r>u?0:u+r),e=e===T||e>u?u:Eu(e),0>e&&(e+=u),e=r>e?0:ku(e);r<e;)n[r++]=t;return n},An.filter=function(n,t){return(ff(n)?i:jt)(n,ye(t,3))},An.flatMap=function(n,t){return wt(ru(n,t),1)},An.flatMapDeep=function(n,t){return wt(ru(n,t),$)},An.flatMapDepth=function(n,t,r){return r=r===T?1:Eu(r),
|
||||
wt(ru(n,t),r)},An.flatten=Ze,An.flattenDeep=function(n){return(null==n?0:n.length)?wt(n,$):[]},An.flattenDepth=function(n,t){return null!=n&&n.length?(t=t===T?1:Eu(t),wt(n,t)):[]},An.flip=function(n){return fe(n,512)},An.flow=Pf,An.flowRight=Zf,An.fromPairs=function(n){for(var t=-1,r=null==n?0:n.length,e={};++t<r;){var u=n[t];e[u[0]]=u[1]}return e},An.functions=function(n){return null==n?[]:Et(n,Wu(n))},An.functionsIn=function(n){return null==n?[]:Et(n,Bu(n))},An.groupBy=Po,An.initial=function(n){
|
||||
return(null==n?0:n.length)?hr(n,0,-1):[]},An.intersection=Eo,An.intersectionBy=ko,An.intersectionWith=So,An.invert=Af,An.invertBy=Ef,An.invokeMap=Zo,An.iteratee=Fu,An.keyBy=qo,An.keys=Wu,An.keysIn=Bu,An.map=ru,An.mapKeys=function(n,t){var r={};return t=ye(t,3),mt(n,function(n,e,u){st(r,t(n,e,u),n)}),r},An.mapValues=function(n,t){var r={};return t=ye(t,3),mt(n,function(n,e,u){st(r,e,t(n,e,u))}),r},An.matches=function(n){return Ht(_t(n,1))},An.matchesProperty=function(n,t){return Jt(n,_t(t,1))},An.memoize=cu,
|
||||
An.merge=Sf,An.mergeWith=Of,An.method=qf,An.methodOf=Vf,An.mixin=Nu,An.negate=au,An.nthArg=function(n){return n=Eu(n),fr(function(t){return Qt(t,n)})},An.omit=If,An.omitBy=function(n,t){return Lu(n,au(ye(t)))},An.once=function(n){return uu(2,n)},An.orderBy=function(n,t,r,e){return null==n?[]:(ff(t)||(t=null==t?[]:[t]),r=e?T:r,ff(r)||(r=null==r?[]:[r]),Xt(n,t,r))},An.over=Kf,An.overArgs=Xo,An.overEvery=Gf,An.overSome=Hf,An.partial=nf,An.partialRight=tf,An.partition=Vo,An.pick=Rf,An.pickBy=Lu,An.property=Zu,
|
||||
An.propertyOf=function(n){return function(t){return null==n?T:kt(n,t)}},An.pull=Oo,An.pullAll=Ke,An.pullAllBy=function(n,t,r){return n&&n.length&&t&&t.length?er(n,t,ye(r,2)):n},An.pullAllWith=function(n,t,r){return n&&n.length&&t&&t.length?er(n,t,T,r):n},An.pullAt=Io,An.range=Jf,An.rangeRight=Yf,An.rearg=rf,An.reject=function(n,t){return(ff(n)?i:jt)(n,au(ye(t,3)))},An.remove=function(n,t){var r=[];if(!n||!n.length)return r;var e=-1,u=[],i=n.length;for(t=ye(t,3);++e<i;){var o=n[e];t(o,e,n)&&(r.push(o),
|
||||
u.push(e))}return ur(n,u),r},An.rest=function(n,t){if(typeof n!="function")throw new ti("Expected a function");return t=t===T?t:Eu(t),fr(n,t)},An.reverse=Ge,An.sampleSize=function(n,t,r){return t=(r?Oe(n,t,r):t===T)?1:Eu(t),(ff(n)?et:ar)(n,t)},An.set=function(n,t,r){return null==n?n:lr(n,t,r)},An.setWith=function(n,t,r,e){return e=typeof e=="function"?e:T,null==n?n:lr(n,t,r,e)},An.shuffle=function(n){return(ff(n)?ut:sr)(n)},An.slice=function(n,t,r){var e=null==n?0:n.length;return e?(r&&typeof r!="number"&&Oe(n,t,r)?(t=0,
|
||||
r=e):(t=null==t?0:Eu(t),r=r===T?e:Eu(r)),hr(n,t,r)):[]},An.sortBy=Ko,An.sortedUniq=function(n){return n&&n.length?gr(n):[]},An.sortedUniqBy=function(n,t){return n&&n.length?gr(n,ye(t,2)):[]},An.split=function(n,t,r){return r&&typeof r!="number"&&Oe(n,t,r)&&(t=r=T),r=r===T?4294967295:r>>>0,r?(n=Iu(n))&&(typeof t=="string"||null!=t&&!hf(t))&&(t=yr(t),!t&&Rn.test(n))?Or(M(n),0,r):n.split(t,r):[]},An.spread=function(t,r){if(typeof t!="function")throw new ti("Expected a function");return r=null==r?0:Ui(Eu(r),0),
|
||||
fr(function(e){var u=e[r];return e=Or(e,0,r),u&&a(e,u),n(t,this,e)})},An.tail=function(n){var t=null==n?0:n.length;return t?hr(n,1,t):[]},An.take=function(n,t,r){return n&&n.length?(t=r||t===T?1:Eu(t),hr(n,0,0>t?0:t)):[]},An.takeRight=function(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===T?1:Eu(t),t=e-t,hr(n,0>t?0:t,e)):[]},An.takeRightWhile=function(n,t){return n&&n.length?jr(n,ye(t,3),false,true):[]},An.takeWhile=function(n,t){return n&&n.length?jr(n,ye(t,3)):[]},An.tap=function(n,t){return t(n),
|
||||
n},An.throttle=function(n,t,r){var e=true,u=true;if(typeof n!="function")throw new ti("Expected a function");return du(r)&&(e="leading"in r?!!r.leading:e,u="trailing"in r?!!r.trailing:u),fu(n,t,{leading:e,maxWait:t,trailing:u})},An.thru=Qe,An.toArray=mu,An.toPairs=zf,An.toPairsIn=Wf,An.toPath=function(n){return ff(n)?c(n,Me):wu(n)?[n]:Ur(jo(Iu(n)))},An.toPlainObject=Ou,An.transform=function(n,t,e){var u=ff(n),i=u||af(n)||_f(n);if(t=ye(t,4),null==e){var o=n&&n.constructor;e=i?u?new o:[]:du(n)&&_u(o)?eo(di(n)):{};
|
||||
}return(i?r:mt)(n,function(n,r,u){return t(e,n,r,u)}),e},An.unary=function(n){return eu(n,1)},An.union=Ro,An.unionBy=zo,An.unionWith=Wo,An.uniq=function(n){return n&&n.length?br(n):[]},An.uniqBy=function(n,t){return n&&n.length?br(n,ye(t,2)):[]},An.uniqWith=function(n,t){return t=typeof t=="function"?t:T,n&&n.length?br(n,T,t):[]},An.unset=function(n,t){return null==n||xr(n,t)},An.unzip=He,An.unzipWith=Je,An.update=function(n,t,r){return null==n?n:lr(n,t,kr(r)(kt(n,t)),void 0)},An.updateWith=function(n,t,r,e){
|
||||
return e=typeof e=="function"?e:T,null!=n&&(n=lr(n,t,kr(r)(kt(n,t)),e)),n},An.values=Uu,An.valuesIn=function(n){return null==n?[]:S(n,Bu(n))},An.without=Bo,An.words=Mu,An.wrap=function(n,t){return nf(kr(t),n)},An.xor=Lo,An.xorBy=Uo,An.xorWith=Co,An.zip=Do,An.zipObject=function(n,t){return Ar(n||[],t||[],ot)},An.zipObjectDeep=function(n,t){return Ar(n||[],t||[],lr)},An.zipWith=Mo,An.entries=zf,An.entriesIn=Wf,An.extend=yf,An.extendWith=bf,Nu(An,An),An.add=Qf,An.attempt=Ff,An.camelCase=Bf,An.capitalize=Cu,
|
||||
An.ceil=Xf,An.clamp=function(n,t,r){return r===T&&(r=t,t=T),r!==T&&(r=Su(r),r=r===r?r:0),t!==T&&(t=Su(t),t=t===t?t:0),pt(Su(n),t,r)},An.clone=function(n){return _t(n,4)},An.cloneDeep=function(n){return _t(n,5)},An.cloneDeepWith=function(n,t){return t=typeof t=="function"?t:T,_t(n,5,t)},An.cloneWith=function(n,t){return t=typeof t=="function"?t:T,_t(n,4,t)},An.conformsTo=function(n,t){return null==t||gt(n,t,Wu(t))},An.deburr=Du,An.defaultTo=function(n,t){return null==n||n!==n?t:n},An.divide=nc,An.endsWith=function(n,t,r){
|
||||
n=Iu(n),t=yr(t);var e=n.length,e=r=r===T?e:pt(Eu(r),0,e);return r-=t.length,0<=r&&n.slice(r,e)==t},An.eq=lu,An.escape=function(n){return(n=Iu(n))&&H.test(n)?n.replace(K,nt):n},An.escapeRegExp=function(n){return(n=Iu(n))&&en.test(n)?n.replace(rn,"\\$&"):n},An.every=function(n,t,r){var e=ff(n)?u:bt;return r&&Oe(n,t,r)&&(t=T),e(n,ye(t,3))},An.find=Fo,An.findIndex=Ne,An.findKey=function(n,t){return p(n,ye(t,3),mt)},An.findLast=No,An.findLastIndex=Pe,An.findLastKey=function(n,t){return p(n,ye(t,3),At);
|
||||
},An.floor=tc,An.forEach=nu,An.forEachRight=tu,An.forIn=function(n,t){return null==n?n:oo(n,ye(t,3),Bu)},An.forInRight=function(n,t){return null==n?n:fo(n,ye(t,3),Bu)},An.forOwn=function(n,t){return n&&mt(n,ye(t,3))},An.forOwnRight=function(n,t){return n&&At(n,ye(t,3))},An.get=Ru,An.gt=ef,An.gte=uf,An.has=function(n,t){return null!=n&&we(n,t,Rt)},An.hasIn=zu,An.head=qe,An.identity=$u,An.includes=function(n,t,r,e){return n=su(n)?n:Uu(n),r=r&&!e?Eu(r):0,e=n.length,0>r&&(r=Ui(e+r,0)),ju(n)?r<=e&&-1<n.indexOf(t,r):!!e&&-1<v(n,t,r);
|
||||
},An.indexOf=function(n,t,r){var e=null==n?0:n.length;return e?(r=null==r?0:Eu(r),0>r&&(r=Ui(e+r,0)),v(n,t,r)):-1},An.inRange=function(n,t,r){return t=Au(t),r===T?(r=t,t=0):r=Au(r),n=Su(n),n>=Ci(t,r)&&n<Ui(t,r)},An.invoke=kf,An.isArguments=of,An.isArray=ff,An.isArrayBuffer=cf,An.isArrayLike=su,An.isArrayLikeObject=hu,An.isBoolean=function(n){return true===n||false===n||yu(n)&&"[object Boolean]"==Ot(n)},An.isBuffer=af,An.isDate=lf,An.isElement=function(n){return yu(n)&&1===n.nodeType&&!xu(n)},An.isEmpty=function(n){
|
||||
if(null==n)return true;if(su(n)&&(ff(n)||typeof n=="string"||typeof n.splice=="function"||af(n)||_f(n)||of(n)))return!n.length;var t=vo(n);if("[object Map]"==t||"[object Set]"==t)return!n.size;if(ze(n))return!Vt(n).length;for(var r in n)if(oi.call(n,r))return false;return true},An.isEqual=function(n,t){return Mt(n,t)},An.isEqualWith=function(n,t,r){var e=(r=typeof r=="function"?r:T)?r(n,t):T;return e===T?Mt(n,t,T,r):!!e},An.isError=pu,An.isFinite=function(n){return typeof n=="number"&&Wi(n)},An.isFunction=_u,
|
||||
An.isInteger=vu,An.isLength=gu,An.isMap=sf,An.isMatch=function(n,t){return n===t||$t(n,t,xe(t))},An.isMatchWith=function(n,t,r){return r=typeof r=="function"?r:T,$t(n,t,xe(t),r)},An.isNaN=function(n){return bu(n)&&n!=+n},An.isNative=function(n){if(go(n))throw new Hu("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return Ft(n)},An.isNil=function(n){return null==n},An.isNull=function(n){return null===n},An.isNumber=bu,An.isObject=du,An.isObjectLike=yu,An.isPlainObject=xu,An.isRegExp=hf,
|
||||
An.isSafeInteger=function(n){return vu(n)&&-9007199254740991<=n&&9007199254740991>=n},An.isSet=pf,An.isString=ju,An.isSymbol=wu,An.isTypedArray=_f,An.isUndefined=function(n){return n===T},An.isWeakMap=function(n){return yu(n)&&"[object WeakMap]"==vo(n)},An.isWeakSet=function(n){return yu(n)&&"[object WeakSet]"==Ot(n)},An.join=function(n,t){return null==n?"":Bi.call(n,t)},An.kebabCase=Lf,An.last=Ve,An.lastIndexOf=function(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e;if(r!==T&&(u=Eu(r),u=0>u?Ui(e+u,0):Ci(u,e-1)),
|
||||
t===t){for(r=u+1;r--&&n[r]!==t;);n=r}else n=_(n,d,u,true);return n},An.lowerCase=Uf,An.lowerFirst=Cf,An.lt=vf,An.lte=gf,An.max=function(n){return n&&n.length?xt(n,$u,It):T},An.maxBy=function(n,t){return n&&n.length?xt(n,ye(t,2),It):T},An.mean=function(n){return y(n,$u)},An.meanBy=function(n,t){return y(n,ye(t,2))},An.min=function(n){return n&&n.length?xt(n,$u,Kt):T},An.minBy=function(n,t){return n&&n.length?xt(n,ye(t,2),Kt):T},An.stubArray=qu,An.stubFalse=Vu,An.stubObject=function(){return{}},An.stubString=function(){
|
||||
return""},An.stubTrue=function(){return true},An.multiply=rc,An.nth=function(n,t){return n&&n.length?Qt(n,Eu(t)):T},An.noConflict=function(){return $n._===this&&($n._=si),this},An.noop=Pu,An.now=Go,An.pad=function(n,t,r){n=Iu(n);var e=(t=Eu(t))?D(n):0;return!t||e>=t?n:(t=(t-e)/2,ne(Ii(t),r)+n+ne(Oi(t),r))},An.padEnd=function(n,t,r){n=Iu(n);var e=(t=Eu(t))?D(n):0;return t&&e<t?n+ne(t-e,r):n},An.padStart=function(n,t,r){n=Iu(n);var e=(t=Eu(t))?D(n):0;return t&&e<t?ne(t-e,r)+n:n},An.parseInt=function(n,t,r){
|
||||
return r||null==t?t=0:t&&(t=+t),Mi(Iu(n).replace(on,""),t||0)},An.random=function(n,t,r){if(r&&typeof r!="boolean"&&Oe(n,t,r)&&(t=r=T),r===T&&(typeof t=="boolean"?(r=t,t=T):typeof n=="boolean"&&(r=n,n=T)),n===T&&t===T?(n=0,t=1):(n=Au(n),t===T?(t=n,n=0):t=Au(t)),n>t){var e=n;n=t,t=e}return r||n%1||t%1?(r=Ti(),Ci(n+r*(t-n+Cn("1e-"+((r+"").length-1))),t)):ir(n,t)},An.reduce=function(n,t,r){var e=ff(n)?l:j,u=3>arguments.length;return e(n,ye(t,4),r,u,uo)},An.reduceRight=function(n,t,r){var e=ff(n)?s:j,u=3>arguments.length;
|
||||
return e(n,ye(t,4),r,u,io)},An.repeat=function(n,t,r){return t=(r?Oe(n,t,r):t===T)?1:Eu(t),or(Iu(n),t)},An.replace=function(){var n=arguments,t=Iu(n[0]);return 3>n.length?t:t.replace(n[1],n[2])},An.result=function(n,t,r){t=Sr(t,n);var e=-1,u=t.length;for(u||(u=1,n=T);++e<u;){var i=null==n?T:n[Me(t[e])];i===T&&(e=u,i=r),n=_u(i)?i.call(n):i}return n},An.round=ec,An.runInContext=x,An.sample=function(n){return(ff(n)?Qn:cr)(n)},An.size=function(n){if(null==n)return 0;if(su(n))return ju(n)?D(n):n.length;
|
||||
var t=vo(n);return"[object Map]"==t||"[object Set]"==t?n.size:Vt(n).length},An.snakeCase=Df,An.some=function(n,t,r){var e=ff(n)?h:pr;return r&&Oe(n,t,r)&&(t=T),e(n,ye(t,3))},An.sortedIndex=function(n,t){return _r(n,t)},An.sortedIndexBy=function(n,t,r){return vr(n,t,ye(r,2))},An.sortedIndexOf=function(n,t){var r=null==n?0:n.length;if(r){var e=_r(n,t);if(e<r&&lu(n[e],t))return e}return-1},An.sortedLastIndex=function(n,t){return _r(n,t,true)},An.sortedLastIndexBy=function(n,t,r){return vr(n,t,ye(r,2),true);
|
||||
},An.sortedLastIndexOf=function(n,t){if(null==n?0:n.length){var r=_r(n,t,true)-1;if(lu(n[r],t))return r}return-1},An.startCase=Mf,An.startsWith=function(n,t,r){return n=Iu(n),r=null==r?0:pt(Eu(r),0,n.length),t=yr(t),n.slice(r,r+t.length)==t},An.subtract=uc,An.sum=function(n){return n&&n.length?m(n,$u):0},An.sumBy=function(n,t){return n&&n.length?m(n,ye(t,2)):0},An.template=function(n,t,r){var e=An.templateSettings;r&&Oe(n,t,r)&&(t=T),n=Iu(n),t=bf({},t,e,ce),r=bf({},t.imports,e.imports,ce);var u,i,o=Wu(r),f=S(r,o),c=0;
|
||||
r=t.interpolate||jn;var a="__p+='";r=Xu((t.escape||jn).source+"|"+r.source+"|"+(r===Q?pn:jn).source+"|"+(t.evaluate||jn).source+"|$","g");var l=oi.call(t,"sourceURL")?"//# sourceURL="+(t.sourceURL+"").replace(/[\r\n]/g," ")+"\n":"";if(n.replace(r,function(t,r,e,o,f,l){return e||(e=o),a+=n.slice(c,l).replace(wn,z),r&&(u=true,a+="'+__e("+r+")+'"),f&&(i=true,a+="';"+f+";\n__p+='"),e&&(a+="'+((__t=("+e+"))==null?'':__t)+'"),c=l+t.length,t}),a+="';",(t=oi.call(t,"variable")&&t.variable)||(a="with(obj){"+a+"}"),
|
||||
a=(i?a.replace(P,""):a).replace(Z,"$1").replace(q,"$1;"),a="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(u?",__e=_.escape":"")+(i?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+a+"return __p}",t=Ff(function(){return Ju(o,l+"return "+a).apply(T,f)}),t.source=a,pu(t))throw t;return t},An.times=function(n,t){if(n=Eu(n),1>n||9007199254740991<n)return[];var r=4294967295,e=Ci(n,4294967295);for(t=ye(t),n-=4294967295,e=A(e,t);++r<n;)t(r);return e},An.toFinite=Au,
|
||||
An.toInteger=Eu,An.toLength=ku,An.toLower=function(n){return Iu(n).toLowerCase()},An.toNumber=Su,An.toSafeInteger=function(n){return n?pt(Eu(n),-9007199254740991,9007199254740991):0===n?n:0},An.toString=Iu,An.toUpper=function(n){return Iu(n).toUpperCase()},An.trim=function(n,t,r){return(n=Iu(n))&&(r||t===T)?n.replace(un,""):n&&(t=yr(t))?(n=M(n),r=M(t),t=I(n,r),r=R(n,r)+1,Or(n,t,r).join("")):n},An.trimEnd=function(n,t,r){return(n=Iu(n))&&(r||t===T)?n.replace(fn,""):n&&(t=yr(t))?(n=M(n),t=R(n,M(t))+1,
|
||||
Or(n,0,t).join("")):n},An.trimStart=function(n,t,r){return(n=Iu(n))&&(r||t===T)?n.replace(on,""):n&&(t=yr(t))?(n=M(n),t=I(n,M(t)),Or(n,t).join("")):n},An.truncate=function(n,t){var r=30,e="...";if(du(t))var u="separator"in t?t.separator:u,r="length"in t?Eu(t.length):r,e="omission"in t?yr(t.omission):e;n=Iu(n);var i=n.length;if(Rn.test(n))var o=M(n),i=o.length;if(r>=i)return n;if(i=r-D(e),1>i)return e;if(r=o?Or(o,0,i).join(""):n.slice(0,i),u===T)return r+e;if(o&&(i+=r.length-i),hf(u)){if(n.slice(i).search(u)){
|
||||
var f=r;for(u.global||(u=Xu(u.source,Iu(_n.exec(u))+"g")),u.lastIndex=0;o=u.exec(f);)var c=o.index;r=r.slice(0,c===T?i:c)}}else n.indexOf(yr(u),i)!=i&&(u=r.lastIndexOf(u),-1<u&&(r=r.slice(0,u)));return r+e},An.unescape=function(n){return(n=Iu(n))&&G.test(n)?n.replace(V,tt):n},An.uniqueId=function(n){var t=++fi;return Iu(n)+t},An.upperCase=Tf,An.upperFirst=$f,An.each=nu,An.eachRight=tu,An.first=qe,Nu(An,function(){var n={};return mt(An,function(t,r){oi.call(An.prototype,r)||(n[r]=t)}),n}(),{chain:false
|
||||
}),An.VERSION="4.17.15",r("bind bindKey curry curryRight partial partialRight".split(" "),function(n){An[n].placeholder=An}),r(["drop","take"],function(n,t){Un.prototype[n]=function(r){r=r===T?1:Ui(Eu(r),0);var e=this.__filtered__&&!t?new Un(this):this.clone();return e.__filtered__?e.__takeCount__=Ci(r,e.__takeCount__):e.__views__.push({size:Ci(r,4294967295),type:n+(0>e.__dir__?"Right":"")}),e},Un.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}}),r(["filter","map","takeWhile"],function(n,t){
|
||||
var r=t+1,e=1==r||3==r;Un.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:ye(n,3),type:r}),t.__filtered__=t.__filtered__||e,t}}),r(["head","last"],function(n,t){var r="take"+(t?"Right":"");Un.prototype[n]=function(){return this[r](1).value()[0]}}),r(["initial","tail"],function(n,t){var r="drop"+(t?"":"Right");Un.prototype[n]=function(){return this.__filtered__?new Un(this):this[r](1)}}),Un.prototype.compact=function(){return this.filter($u)},Un.prototype.find=function(n){
|
||||
return this.filter(n).head()},Un.prototype.findLast=function(n){return this.reverse().find(n)},Un.prototype.invokeMap=fr(function(n,t){return typeof n=="function"?new Un(this):this.map(function(r){return Lt(r,n,t)})}),Un.prototype.reject=function(n){return this.filter(au(ye(n)))},Un.prototype.slice=function(n,t){n=Eu(n);var r=this;return r.__filtered__&&(0<n||0>t)?new Un(r):(0>n?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==T&&(t=Eu(t),r=0>t?r.dropRight(-t):r.take(t-n)),r)},Un.prototype.takeRightWhile=function(n){
|
||||
return this.reverse().takeWhile(n).reverse()},Un.prototype.toArray=function(){return this.take(4294967295)},mt(Un.prototype,function(n,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),e=/^(?:head|last)$/.test(t),u=An[e?"take"+("last"==t?"Right":""):t],i=e||/^find/.test(t);u&&(An.prototype[t]=function(){function t(n){return n=u.apply(An,a([n],f)),e&&h?n[0]:n}var o=this.__wrapped__,f=e?[1]:arguments,c=o instanceof Un,l=f[0],s=c||ff(o);s&&r&&typeof l=="function"&&1!=l.length&&(c=s=false);var h=this.__chain__,p=!!this.__actions__.length,l=i&&!h,c=c&&!p;
|
||||
return!i&&s?(o=c?o:new Un(this),o=n.apply(o,f),o.__actions__.push({func:Qe,args:[t],thisArg:T}),new On(o,h)):l&&c?n.apply(this,f):(o=this.thru(t),l?e?o.value()[0]:o.value():o)})}),r("pop push shift sort splice unshift".split(" "),function(n){var t=ri[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|shift)$/.test(n);An.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(ff(u)?u:[],n)}return this[r](function(r){return t.apply(ff(r)?r:[],n)});
|
||||
}}),mt(Un.prototype,function(n,t){var r=An[t];if(r){var e=r.name+"";oi.call(Gi,e)||(Gi[e]=[]),Gi[e].push({name:t,func:r})}}),Gi[Jr(T,2).name]=[{name:"wrapper",func:T}],Un.prototype.clone=function(){var n=new Un(this.__wrapped__);return n.__actions__=Ur(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=Ur(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=Ur(this.__views__),n},Un.prototype.reverse=function(){if(this.__filtered__){var n=new Un(this);
|
||||
n.__dir__=-1,n.__filtered__=true}else n=this.clone(),n.__dir__*=-1;return n},Un.prototype.value=function(){var n,t=this.__wrapped__.value(),r=this.__dir__,e=ff(t),u=0>r,i=e?t.length:0;n=i;for(var o=this.__views__,f=0,c=-1,a=o.length;++c<a;){var l=o[c],s=l.size;switch(l.type){case"drop":f+=s;break;case"dropRight":n-=s;break;case"take":n=Ci(n,f+s);break;case"takeRight":f=Ui(f,n-s)}}if(n={start:f,end:n},o=n.start,f=n.end,n=f-o,o=u?f:o-1,f=this.__iteratees__,c=f.length,a=0,l=Ci(n,this.__takeCount__),!e||!u&&i==n&&l==n)return wr(t,this.__actions__);
|
||||
e=[];n:for(;n--&&a<l;){for(o+=r,u=-1,i=t[o];++u<c;){var h=f[u],s=h.type,h=(0,h.iteratee)(i);if(2==s)i=h;else if(!h){if(1==s)continue n;break n}}e[a++]=i}return e},An.prototype.at=To,An.prototype.chain=function(){return Ye(this)},An.prototype.commit=function(){return new On(this.value(),this.__chain__)},An.prototype.next=function(){this.__values__===T&&(this.__values__=mu(this.value()));var n=this.__index__>=this.__values__.length;return{done:n,value:n?T:this.__values__[this.__index__++]}},An.prototype.plant=function(n){
|
||||
for(var t,r=this;r instanceof En;){var e=Fe(r);e.__index__=0,e.__values__=T,t?u.__wrapped__=e:t=e;var u=e,r=r.__wrapped__}return u.__wrapped__=n,t},An.prototype.reverse=function(){var n=this.__wrapped__;return n instanceof Un?(this.__actions__.length&&(n=new Un(this)),n=n.reverse(),n.__actions__.push({func:Qe,args:[Ge],thisArg:T}),new On(n,this.__chain__)):this.thru(Ge)},An.prototype.toJSON=An.prototype.valueOf=An.prototype.value=function(){return wr(this.__wrapped__,this.__actions__)},An.prototype.first=An.prototype.head,
|
||||
wi&&(An.prototype[wi]=Xe),An}();typeof define=="function"&&typeof define.amd=="object"&&define.amd?($n._=rt, define(function(){return rt})):Nn?((Nn.exports=rt)._=rt,Fn._=rt):$n._=rt}).call(this);
|
||||
@@ -0,0 +1 @@
|
||||
<?php return ['akta','belaten','beromd','betydelsefull','bevisad','blandande','effektiv','enastaende','energisk','fangslande','fantastisk','fint','framgangsrik','fullandad','fullgora','glansande','glomd','imponerande','inspirerad','kand','kraftfull','kraftig','kreativ','langtan','legendarisk','lidelsefull','livlig','maktig','minnesvard','oerhord,otrolig','oforglomlig','onskan','otrolig','palitlig','passionerad','praktfull','pris','professionell','saker','sallsynt','sensationell','skapande','speciell','stark','storslagen','stralande','tillfredstalld','trygg','underbar','ungdomlig','uppfylla','uppriktig','utmarkt','utstralande','vasentlig','viktig'];
|
||||
@@ -0,0 +1,2 @@
|
||||
/*! This file is auto-generated */
|
||||
this.wp=this.wp||{},this.wp.wordcount=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=432)}({2:function(e,t){!function(){e.exports=this.lodash}()},432:function(e,t,n){"use strict";n.r(t);var r=n(2),o={HTMLRegExp:/<\/?[a-z][^>]*?>/gi,HTMLcommentRegExp:/<!--[\s\S]*?-->/g,spaceRegExp:/ | /gi,HTMLEntityRegExp:/&\S+?;/g,connectorRegExp:/--|\u2014/g,removeRegExp:new RegExp(["[","!-@[-`{-~","-¿×÷"," -⯿","⸀-","]"].join(""),"g"),astralRegExp:/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,wordsRegExp:/\S\s+/g,characters_excluding_spacesRegExp:/\S/g,characters_including_spacesRegExp:/[^\f\n\r\t\v\u00AD\u2028\u2029]/g,l10n:{type:"words"}},i=function(e,t){if(e.HTMLRegExp)return t.replace(e.HTMLRegExp,"\n")},c=function(e,t){return e.astralRegExp?t.replace(e.astralRegExp,"a"):t},u=function(e,t){return e.HTMLEntityRegExp?t.replace(e.HTMLEntityRegExp,""):t},p=function(e,t){return e.connectorRegExp?t.replace(e.connectorRegExp," "):t},s=function(e,t){return e.removeRegExp?t.replace(e.removeRegExp,""):t},a=function(e,t){return e.HTMLcommentRegExp?t.replace(e.HTMLcommentRegExp,""):t},g=function(e,t){return e.shortcodesRegExp?t.replace(e.shortcodesRegExp,"\n"):t},d=function(e,t){if(e.spaceRegExp)return t.replace(e.spaceRegExp," ")},f=function(e,t){return e.HTMLEntityRegExp?t.replace(e.HTMLEntityRegExp,"a"):t};function l(e,t,n){if(""===e)return 0;if(e){var l=function(e,t){var n=Object(r.extend)(o,t);return n.shortcodes=n.l10n.shortcodes||{},n.shortcodes&&n.shortcodes.length&&(n.shortcodesRegExp=new RegExp("\\[\\/?(?:"+n.shortcodes.join("|")+")[^\\]]*?\\]","g")),n.type=e||n.l10n.type,"characters_excluding_spaces"!==n.type&&"characters_including_spaces"!==n.type&&(n.type="words"),n}(t,n),x=l[t+"RegExp"],E="words"===l.type?function(e,t,n){return e=Object(r.flow)(i.bind(this,n),a.bind(this,n),g.bind(this,n),d.bind(this,n),u.bind(this,n),p.bind(this,n),s.bind(this,n))(e),(e+="\n").match(t)}(e,x,l):function(e,t,n){return e=Object(r.flow)(i.bind(this,n),a.bind(this,n),g.bind(this,n),d.bind(this,n),c.bind(this,n),f.bind(this,n))(e),(e+="\n").match(t)}(e,x,l);return E?E.length:0}}n.d(t,"count",(function(){return l}))}});
|
||||
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
/**
|
||||
* Divi admin integration.
|
||||
*
|
||||
* @since TODO
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Core
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Divi;
|
||||
|
||||
use RankMath\Traits\Hooker;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Divi class.
|
||||
*/
|
||||
class Divi_Admin {
|
||||
|
||||
use Hooker;
|
||||
|
||||
/**
|
||||
* Class constructor.
|
||||
*/
|
||||
public function __construct() {
|
||||
$this->init();
|
||||
}
|
||||
|
||||
/**
|
||||
* Intialize Divi admin.
|
||||
*/
|
||||
public function init() {
|
||||
$screen = get_current_screen();
|
||||
if ( 'toplevel_page_et_divi_options' === $screen->id ) {
|
||||
$this->action( 'admin_enqueue_scripts', 'enqueue_divi_admin_scripts' );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueue scripts for Divi admin options screen.
|
||||
*/
|
||||
public function enqueue_divi_admin_scripts() {
|
||||
wp_enqueue_script(
|
||||
'rank-math-divi-admin',
|
||||
rank_math()->plugin_url() . 'includes/3rdparty/divi/assets/js/divi-admin.js',
|
||||
[
|
||||
'jquery',
|
||||
'react',
|
||||
'react-dom',
|
||||
'wp-components',
|
||||
'wp-element',
|
||||
'wp-i18n',
|
||||
'wp-polyfill',
|
||||
],
|
||||
rank_math()->version,
|
||||
true
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,355 @@
|
||||
<?php
|
||||
/**
|
||||
* Divi integration.
|
||||
*
|
||||
* @since 0.9.0
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Core
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Divi;
|
||||
|
||||
use RankMath\KB;
|
||||
use RankMath\Helper;
|
||||
use RankMath\Helpers\Editor;
|
||||
use RankMath\Helpers\Str;
|
||||
use RankMath\Schema\DB as Schema_DB;
|
||||
use RankMath\Schema\Admin as Schema_Admin;
|
||||
use RankMath\Traits\Hooker;
|
||||
use RankMath\Admin\Metabox\Screen;
|
||||
use WP_Dependencies;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Divi class.
|
||||
*/
|
||||
class Divi {
|
||||
|
||||
use Hooker;
|
||||
|
||||
/**
|
||||
* Screen object.
|
||||
*
|
||||
* @var Screen
|
||||
*/
|
||||
private $screen;
|
||||
|
||||
/**
|
||||
* Class constructor.
|
||||
*/
|
||||
public function __construct() {
|
||||
$this->action( 'wp', 'init' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Intialize.
|
||||
*/
|
||||
public function init() {
|
||||
if ( ! $this->can_add_seo_tab() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->screen = new Screen();
|
||||
$this->screen->load_screen( 'post' );
|
||||
|
||||
$this->action( 'template_redirect', 'set_window_lodash', 0 );
|
||||
$this->action( 'wp_enqueue_scripts', 'register_rankmath_react' );
|
||||
$this->action( 'wp_enqueue_scripts', 'add_json_data', 0 );
|
||||
$this->action( 'wp_footer', 'footer_enqueue_scripts', 11 );
|
||||
remove_action( 'wp_footer', [ rank_math()->json, 'output' ], 0 );
|
||||
add_action( 'wp_footer', [ rank_math()->json, 'output' ], 11 );
|
||||
$this->filter( 'script_loader_tag', 'add_et_tag', 10, 3 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the global lodash variable.
|
||||
*
|
||||
* Lodash's `noConflict` would prevent UnderscoreJS from taking over the underscore (_)
|
||||
* global variable. Because Underscore.js will later also be assigned to the underscore (_)
|
||||
* global this function should run as early as possible.
|
||||
*/
|
||||
public function set_window_lodash() {
|
||||
wp_register_script( 'rm-set-window-lodash', '', [ 'lodash' ], rank_math()->version, false );
|
||||
wp_enqueue_script( 'rm-set-window-lodash' );
|
||||
wp_add_inline_script(
|
||||
'rm-set-window-lodash',
|
||||
join(
|
||||
"\r\n ",
|
||||
[
|
||||
'window.isLodash = function() {',
|
||||
"if ( typeof window._ !== 'function' || typeof window._.forEach !== 'function' ) {",
|
||||
'return false;',
|
||||
'}',
|
||||
'var isLodash = true;',
|
||||
'window._.forEach(',
|
||||
"[ 'cloneDeep', 'at', 'add', 'ary', 'attempt' ],",
|
||||
'function( fn ) {',
|
||||
"if ( isLodash && typeof window._[ fn ] !== 'function' ) {",
|
||||
'isLodash = false;',
|
||||
'}',
|
||||
'}',
|
||||
');',
|
||||
'return isLodash;',
|
||||
'}',
|
||||
'if ( window.isLodash() ) { window.lodash = window._.noConflict(); }',
|
||||
]
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register RankMath React and ReactDOM.
|
||||
*
|
||||
* Registers the native WP version of react with a custom handle for use in the
|
||||
* RankMath module. Divi builder dequeues and deregisters native WP react scripts
|
||||
* and replaces them with their own copy of React. Their copy might not be of the
|
||||
* same version as the one RankMath requires.
|
||||
*/
|
||||
public function register_rankmath_react() {
|
||||
$path = site_url( '/wp-includes/js/dist/vendor/' );
|
||||
$suffix = wp_scripts_get_suffix();
|
||||
wp_register_script( 'rm-react', "{$path}react{$suffix}.js", [ 'wp-polyfill', 'react' ], '16.13.1', true );
|
||||
wp_register_script( 'rm-react-dom', "{$path}react-dom{$suffix}.js", [ 'rm-react', 'react-dom' ], '16.13.1', true );
|
||||
}
|
||||
|
||||
/**
|
||||
* Add JSON data.
|
||||
*/
|
||||
public function add_json_data() {
|
||||
|
||||
if ( Helper::has_cap( 'onpage_snippet' ) ) {
|
||||
|
||||
// Schema.
|
||||
$schemas = $this->get_schema_data( get_the_ID() );
|
||||
Helper::add_json( 'schemas', $schemas );
|
||||
Helper::add_json( 'customSchemaImage', esc_url( rank_math()->plugin_url() . 'includes/modules/schema/assets/img/custom-schema-builder.jpg' ) );
|
||||
|
||||
// Trends.
|
||||
$trends_upgrade_link = KB::get( 'pro', 'Divi General Tab Trends' );
|
||||
Helper::add_json( 'trendsUpgradeLink', esc_url_raw( $trends_upgrade_link ) );
|
||||
Helper::add_json( 'trendsPreviewImage', esc_url( rank_math()->plugin_url() . 'assets/admin/img/trends-preview.jpg' ) );
|
||||
}
|
||||
|
||||
Helper::add_json(
|
||||
'api',
|
||||
[
|
||||
'root' => esc_url_raw( get_rest_url() ),
|
||||
'nonce' => ( wp_installing() && ! is_multisite() ) ? '' : wp_create_nonce( 'wp_rest' ),
|
||||
]
|
||||
);
|
||||
|
||||
Helper::add_json(
|
||||
'keywordsApi',
|
||||
[
|
||||
'url' => 'https://api.rankmath.com/ltkw/v1/',
|
||||
]
|
||||
);
|
||||
|
||||
Helper::add_json( 'links', KB::get_links() );
|
||||
|
||||
Helper::add_json(
|
||||
'validationl10n',
|
||||
[
|
||||
'regexErrorDefault' => __( 'Please use the correct format.', 'rank-math' ),
|
||||
'requiredErrorDefault' => __( 'This field is required.', 'rank-math' ),
|
||||
'emailErrorDefault' => __( 'Please enter a valid email address.', 'rank-math' ),
|
||||
'urlErrorDefault' => __( 'Please enter a valid URL.', 'rank-math' ),
|
||||
]
|
||||
);
|
||||
|
||||
Helper::add_json( 'capitalizeTitle', Helper::get_settings( 'titles.capitalize_titles' ) );
|
||||
Helper::add_json( 'blogName', get_bloginfo( 'name' ) );
|
||||
|
||||
if ( is_admin_bar_showing() && Helper::has_cap( 'admin_bar' ) ) {
|
||||
Helper::add_json( 'objectID', get_the_ID() );
|
||||
Helper::add_json( 'objectType', 'post' );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueue scripts.
|
||||
*/
|
||||
public function footer_enqueue_scripts() {
|
||||
/**
|
||||
* Allow other plugins to enqueue/dequeue admin styles or scripts before plugin assets.
|
||||
*/
|
||||
$this->do_action( 'admin/before_editor_scripts' );
|
||||
|
||||
$divi_deps = [
|
||||
'jquery',
|
||||
'lodash',
|
||||
'rm-react',
|
||||
'rm-react-dom',
|
||||
'rm-set-window-lodash',
|
||||
'et-dynamic-asset-helpers',
|
||||
'wp-api-fetch',
|
||||
'wp-block-editor',
|
||||
'wp-components',
|
||||
'wp-compose',
|
||||
'wp-core-data',
|
||||
'wp-data',
|
||||
'wp-element',
|
||||
'wp-hooks',
|
||||
'wp-media-utils',
|
||||
'rank-math-analyzer',
|
||||
'rank-math-app',
|
||||
];
|
||||
|
||||
if ( is_admin_bar_showing() && Helper::has_cap( 'admin_bar' ) ) {
|
||||
wp_enqueue_style( 'rank-math', rank_math()->assets() . 'css/rank-math.css', null, rank_math()->version );
|
||||
wp_enqueue_script( 'rank-math', rank_math()->assets() . 'js/rank-math.js', [ 'jquery' ], rank_math()->version, true );
|
||||
}
|
||||
|
||||
wp_enqueue_style( 'rank-math-common', rank_math()->plugin_url() . 'assets/admin/css/common.css', null, rank_math()->version );
|
||||
wp_enqueue_style( 'wp-components' );
|
||||
wp_enqueue_style( 'rank-math-editor', rank_math()->plugin_url() . 'includes/3rdparty/divi/assets/css/divi.css', [], rank_math()->version );
|
||||
|
||||
wp_register_script( 'rank-math-analyzer', rank_math()->plugin_url() . 'assets/admin/js/analyzer.js', null, rank_math()->version, true );
|
||||
wp_enqueue_script( 'rank-math-editor', rank_math()->plugin_url() . 'includes/3rdparty/divi/assets/js/divi.js', $divi_deps, rank_math()->version, true );
|
||||
wp_enqueue_script( 'rank-math-divi-iframe', rank_math()->plugin_url() . 'includes/3rdparty/divi/assets/js/divi-iframe.js', [ 'jquery', 'lodash' ], rank_math()->version, true );
|
||||
|
||||
if ( Helper::is_module_active( 'rich-snippet' ) ) {
|
||||
wp_enqueue_style( 'rank-math-schema', rank_math()->plugin_url() . 'includes/modules/schema/assets/css/schema.css', [ 'wp-components' ], rank_math()->version );
|
||||
|
||||
wp_enqueue_script( 'rank-math-schema', rank_math()->plugin_url() . 'includes/modules/schema/assets/js/schema-gutenberg.js', [ 'rank-math-editor' ], rank_math()->version, true );
|
||||
wp_set_script_translations( 'rank-math-schema', 'rank-math', rank_math()->plugin_dir() . 'languages/' );
|
||||
}
|
||||
|
||||
rank_math()->variables->setup();
|
||||
rank_math()->variables->setup_json();
|
||||
|
||||
$this->screen->localize();
|
||||
|
||||
$this->print_react_containers();
|
||||
|
||||
/**
|
||||
* Allow other plugins to enqueue/dequeue admin styles or scripts after plugin assets.
|
||||
*/
|
||||
$this->do_action( 'admin/editor_scripts' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Add et attributes to script tags.
|
||||
*
|
||||
* @param string $tag The <script> tag for the enqueued script.
|
||||
* @param string $handle The script's registered handle.
|
||||
* @param string $src The script's source URL.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function add_et_tag( $tag, $handle, $src ) {
|
||||
$script_handles = [
|
||||
'rm-react',
|
||||
'rm-react-dom',
|
||||
'lodash',
|
||||
'moment',
|
||||
'rank-math',
|
||||
'rank-math-analyzer',
|
||||
'rank-math-schema',
|
||||
'rank-math-editor',
|
||||
'rank-math-content-ai',
|
||||
'rank-math-app',
|
||||
// Scripts required by pro version.
|
||||
'wp-plugins',
|
||||
'jquery-ui-autocomplete',
|
||||
'rank-math-pro-editor',
|
||||
'rank-math-schema-pro',
|
||||
'rank-math-pro-schema-filters',
|
||||
'rank-math-pro-news',
|
||||
];
|
||||
|
||||
$exclude_handles = [
|
||||
'wp-util',
|
||||
'wp-backbone',
|
||||
'wp-plupload',
|
||||
'wp-mediaelement',
|
||||
'wp-color-picker',
|
||||
'wp-color-picker-alpha',
|
||||
'wp-embed',
|
||||
'wp-hooks',
|
||||
];
|
||||
|
||||
if ( in_array( $handle, $exclude_handles, true ) ) {
|
||||
return $tag;
|
||||
}
|
||||
|
||||
if ( Str::starts_with( 'wp-', $handle ) || in_array( $handle, $script_handles, true ) ) {
|
||||
// These tags load in parent window only, not in Divi iframe.
|
||||
return '<script type="text/javascript" src="' . $src . '" class="et_fb_ignore_iframe"></script>' . "\n"; // phpcs:ignore
|
||||
}
|
||||
|
||||
return $tag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Print React containers onto the screen.
|
||||
*/
|
||||
public function print_react_containers() {
|
||||
echo '<div id="rank-math-rm-app-root" class="et_fb_ignore_iframe"></div>';
|
||||
echo '<div id="rank-math-rm-settings-bar-root" class="et_fb_ignore_iframe"></div>';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Can add SEO in Divi Page Builder.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function can_add_seo_tab() {
|
||||
if (
|
||||
! Helper::is_divi_frontend_editor() ||
|
||||
! defined( 'ET_BUILDER_PRODUCT_VERSION' ) ||
|
||||
! version_compare( '4.9.2', ET_BUILDER_PRODUCT_VERSION, 'le' )
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter to show/hide SEO Tab in Divi Editor.
|
||||
*/
|
||||
if ( ! $this->do_filter( 'divi/add_seo_tab', true ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$post_type = get_post_type();
|
||||
if ( $post_type && ! Helper::get_settings( 'titles.pt_' . $post_type . '_add_meta_box' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return Editor::can_add_editor();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Schema Data.
|
||||
*
|
||||
* @param int $post_id Post ID.
|
||||
*
|
||||
* @return array $schemas Schema Data.
|
||||
*/
|
||||
private function get_schema_data( $post_id ) {
|
||||
$schemas = Schema_DB::get_schemas( $post_id );
|
||||
if ( ! empty( $schemas ) || metadata_exists( 'post', $post_id, 'rank_math_rich_snippet' ) ) {
|
||||
return $schemas;
|
||||
}
|
||||
|
||||
$post_type = get_post_type( $post_id );
|
||||
$default_type = ucfirst( Helper::get_default_schema_type( $post_id ) );
|
||||
if ( ! $default_type ) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$schemas['new-9999'] = [
|
||||
'@type' => $default_type,
|
||||
'metadata' => [
|
||||
'title' => Helper::sanitize_schema_title( $default_type ),
|
||||
'type' => 'template',
|
||||
'shortcode' => uniqid( 's-' ),
|
||||
'isPrimary' => true,
|
||||
],
|
||||
];
|
||||
|
||||
return $schemas;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,213 @@
|
||||
<?php
|
||||
/**
|
||||
* Elementor integration.
|
||||
*
|
||||
* @since 0.9.0
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Core
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Elementor;
|
||||
|
||||
use RankMath\Helper;
|
||||
use RankMath\Traits\Hooker;
|
||||
use RankMath\Helpers\Editor;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Elementor class.
|
||||
*/
|
||||
class Elementor {
|
||||
|
||||
use Hooker;
|
||||
|
||||
/**
|
||||
* Class constructor.
|
||||
*/
|
||||
public function __construct() {
|
||||
$this->action( 'init', 'init' );
|
||||
$this->filter( 'rank_math/frontend/robots', 'robots' );
|
||||
$this->filter( 'rank_math/frontend/disable_integration', 'disable_frontend_integration' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Intialize.
|
||||
*/
|
||||
public function init() {
|
||||
if ( ! $this->can_add_seo_tab() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->action( 'elementor/editor/before_enqueue_scripts', 'enqueue' );
|
||||
add_action( 'elementor/editor/footer', [ rank_math()->json, 'output' ], 0 );
|
||||
$this->action( 'elementor/editor/footer', 'start_capturing', 0 );
|
||||
$this->action( 'elementor/editor/footer', 'end_capturing', 999 );
|
||||
$this->filter( 'rank_math/sitemap/content_before_parse_html_images', 'apply_builder_in_content', 10, 2 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable frontend integration on Elementor Maintenance page.
|
||||
*
|
||||
* @since 1.0.91
|
||||
*
|
||||
* @param boolean $value Whether to run the frontend integration.
|
||||
*/
|
||||
public function disable_frontend_integration( $value ) {
|
||||
$mode = get_option( 'elementor_maintenance_mode_mode' );
|
||||
if ( ! in_array( $mode, [ 'maintenance', 'coming_soon' ], true ) ) {
|
||||
return $value;
|
||||
}
|
||||
|
||||
if ( ! get_option( 'elementor_maintenance_mode_template_id' ) ) {
|
||||
return $value;
|
||||
}
|
||||
|
||||
$exclude_mode = get_option( 'elementor_maintenance_mode_exclude_mode', [] );
|
||||
if ( 'logged_in' === $exclude_mode && is_user_logged_in() ) {
|
||||
return $value;
|
||||
}
|
||||
|
||||
if ( 'custom' !== $exclude_mode ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$exclude_roles = get_option( 'elementor_maintenance_mode_exclude_roles', [] );
|
||||
$user = wp_get_current_user();
|
||||
$user_roles = $user->roles;
|
||||
|
||||
if ( is_multisite() && is_super_admin() ) {
|
||||
$user_roles[] = 'super_admin';
|
||||
}
|
||||
|
||||
$compare_roles = array_intersect( $user_roles, $exclude_roles );
|
||||
|
||||
return ! empty( $compare_roles ) ? $value : true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Start capturing buffer.
|
||||
*/
|
||||
public function start_capturing() {
|
||||
ob_start();
|
||||
}
|
||||
|
||||
/**
|
||||
* End capturing buffer and add button.
|
||||
*/
|
||||
public function end_capturing() {
|
||||
$output = \ob_get_clean();
|
||||
$search = '/(<(div|button) class="elementor-component-tab elementor-panel-navigation-tab" data-tab="global">.*<\/(div|button)>)/m';
|
||||
$replace = '${1}<${2} class="elementor-component-tab elementor-panel-navigation-tab" data-tab="rank-math">SEO</${2}>';
|
||||
echo \preg_replace(
|
||||
$search,
|
||||
$replace,
|
||||
$output
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueue scripts.
|
||||
*/
|
||||
public function enqueue() {
|
||||
$deps = [
|
||||
'wp-core-data',
|
||||
'wp-components',
|
||||
'wp-block-editor',
|
||||
'wp-element',
|
||||
'wp-data',
|
||||
'wp-api-fetch',
|
||||
'wp-media-utils',
|
||||
'site-health',
|
||||
'rank-math-analyzer',
|
||||
'backbone-marionette',
|
||||
'elementor-common-modules',
|
||||
'rank-math-app',
|
||||
];
|
||||
|
||||
$mode = \Elementor\Core\Settings\Manager::get_settings_managers( 'editorPreferences' )->get_model()->get_settings( 'ui_theme' );
|
||||
wp_deregister_style( 'rank-math-editor' );
|
||||
|
||||
wp_enqueue_style( 'wp-components' );
|
||||
wp_enqueue_style( 'site-health' );
|
||||
wp_enqueue_style( 'rank-math-editor', rank_math()->plugin_url() . 'includes/3rdparty/elementor/assets/css/elementor.css', [ 'rank-math-common' ], rank_math()->version );
|
||||
$media_query = '';
|
||||
|
||||
$dark_styles = $this->do_filter(
|
||||
'elementor/dark_styles',
|
||||
[
|
||||
'rank-math-elementor-dark' => rank_math()->plugin_url() . 'includes/3rdparty/elementor/assets/css/elementor-dark.css',
|
||||
]
|
||||
);
|
||||
|
||||
if ( 'light' !== $mode ) {
|
||||
$media_query = 'auto' === $mode ? '(prefers-color-scheme: dark)' : 'all';
|
||||
foreach ( $dark_styles as $handle => $src ) {
|
||||
wp_enqueue_style( $handle, $src, [], rank_math()->version, $media_query );
|
||||
}
|
||||
}
|
||||
|
||||
Helper::add_json( 'elementorDarkMode', $dark_styles );
|
||||
|
||||
wp_enqueue_script( 'rank-math-editor', rank_math()->plugin_url() . 'includes/3rdparty/elementor/assets/js/elementor.js', $deps, rank_math()->version, true );
|
||||
rank_math()->variables->setup();
|
||||
rank_math()->variables->setup_json();
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters the post content before it is parsed for Sitmeap images..
|
||||
* Used to apply the Elementor page editor on the post content.
|
||||
*
|
||||
* @since 1.0.38
|
||||
*
|
||||
* @param string $content The post content.
|
||||
* @param int $post_id The post ID.
|
||||
*
|
||||
* @return string The post content.
|
||||
*/
|
||||
public function apply_builder_in_content( $content, $post_id ) {
|
||||
if ( \Elementor\Plugin::$instance->db->is_built_with_elementor( $post_id ) ) {
|
||||
return \Elementor\Plugin::$instance->frontend->get_builder_content( $post_id );
|
||||
}
|
||||
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add SEO tab in Elementor Page Builder.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function can_add_seo_tab() {
|
||||
/**
|
||||
* Filter to show/hide SEO Tab in the Elementor Editor.
|
||||
*/
|
||||
if ( ! $this->do_filter( 'elementor/add_seo_tab', true ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$post_type = isset( $_GET['post'] ) ? get_post_type( $_GET['post'] ) : '';
|
||||
if ( $post_type && ! Helper::get_settings( 'titles.pt_' . $post_type . '_add_meta_box' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return Editor::can_add_editor();
|
||||
}
|
||||
|
||||
/**
|
||||
* Change robots for Elementor Templates pages
|
||||
*
|
||||
* @param array $robots Array of robots to sanitize.
|
||||
*
|
||||
* @return array Modified robots.
|
||||
*/
|
||||
public function robots( $robots ) {
|
||||
if ( is_singular( 'elementor_library' ) ) {
|
||||
$robots['index'] = 'noindex';
|
||||
$robots['follow'] = 'nofollow';
|
||||
}
|
||||
|
||||
return $robots;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,487 @@
|
||||
<?php
|
||||
/**
|
||||
* Admin bar menu.
|
||||
*
|
||||
* @since 0.9.0
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Core
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath;
|
||||
|
||||
use RankMath\Paper\Paper;
|
||||
use RankMath\Traits\Ajax;
|
||||
use RankMath\Traits\Meta;
|
||||
use RankMath\Traits\Hooker;
|
||||
use RankMath\Helpers\Arr;
|
||||
use RankMath\Helpers\Url;
|
||||
use RankMath\Helpers\Param;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Admin_Bar_Menu class.
|
||||
*/
|
||||
class Admin_Bar_Menu {
|
||||
|
||||
use Hooker, Ajax, Meta;
|
||||
|
||||
/**
|
||||
* The unique identifier used for the menu.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const MENU_IDENTIFIER = 'rank-math';
|
||||
|
||||
/**
|
||||
* Hold menu items.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $items = [];
|
||||
|
||||
/**
|
||||
* Constructor method.
|
||||
*/
|
||||
public function __construct() {
|
||||
$this->ajax( 'mark_page_as', 'mark_page_as' );
|
||||
$this->action( 'admin_bar_menu', 'add_menu', 100 );
|
||||
}
|
||||
|
||||
/**
|
||||
* AJAX function to mark page as Pillar Content/Noindex/Nofollow.
|
||||
*/
|
||||
public function mark_page_as() {
|
||||
check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
|
||||
$this->has_cap_ajax( 'onpage_general' );
|
||||
|
||||
$what = Param::post( 'what', '', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK );
|
||||
$object_id = Param::post( 'objectID', 0, FILTER_VALIDATE_INT );
|
||||
$object_type = Param::post( 'objectType', '', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK );
|
||||
|
||||
if ( ! $what || ! $object_id || ! $object_type ) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ( 'pillar_content' === $what ) {
|
||||
$current = $this->get_meta( $object_type, $object_id, 'rank_math_pillar_content' );
|
||||
$updated = 'on' === $current ? 'off' : 'on';
|
||||
$this->update_meta( $object_type, $object_id, 'rank_math_pillar_content', $updated );
|
||||
die( '1' );
|
||||
}
|
||||
|
||||
if ( 'noindex' === $what || 'nofollow' === $what ) {
|
||||
$robots = (array) $this->get_meta( $object_type, $object_id, 'rank_math_robots' );
|
||||
$robots = array_filter( $robots );
|
||||
|
||||
Arr::add_delete_value( $robots, $what );
|
||||
$robots = $this->normalize_robots( $what, array_unique( $robots ) );
|
||||
|
||||
$this->update_meta( $object_type, $object_id, 'rank_math_robots', $robots );
|
||||
|
||||
if ( 'noindex' === $what ) {
|
||||
$this->do_action( 'sitemap/invalidate_object_type', $object_type, $object_id );
|
||||
}
|
||||
|
||||
die( '1' );
|
||||
}
|
||||
|
||||
die();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add SEO item to admin bar with context-specific submenu items.
|
||||
*
|
||||
* @param WP_Admin_Bar $wp_admin_bar Admin bar instance to add the menu to.
|
||||
*/
|
||||
public function add_menu( $wp_admin_bar ) {
|
||||
if ( ! $this->can_add_menu() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->add_root_menu();
|
||||
|
||||
if ( Helper::has_cap( 'titles' ) ) {
|
||||
$this->add_page_menu();
|
||||
}
|
||||
|
||||
if ( $this->is_front() ) {
|
||||
$this->add_seo_tools();
|
||||
}
|
||||
|
||||
if ( $this->can_add_mark_menu() ) {
|
||||
$this->add_mark_page_menu();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add item to rank math admin bar node.
|
||||
*
|
||||
* @param Admin_Bar_Menu $this Class instance.
|
||||
*/
|
||||
$this->do_action( 'admin_bar/items', $this );
|
||||
|
||||
$this->add_order();
|
||||
uasort( $this->items, [ $this, 'sort_by_priority' ] );
|
||||
array_walk( $this->items, [ $wp_admin_bar, 'add_node' ] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalize robots.
|
||||
*
|
||||
* @param string $what Current admin menu process.
|
||||
* @param array $robots Array to normalize.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function normalize_robots( $what, $robots ) {
|
||||
if ( 'noindex' !== $what ) {
|
||||
return $robots;
|
||||
}
|
||||
|
||||
if ( ! in_array( 'noindex', $robots, true ) ) {
|
||||
$robots[] = ! in_array( 'index', $robots, true ) ? 'index' : '';
|
||||
return $robots;
|
||||
}
|
||||
|
||||
if ( false !== ( $key = array_search( 'index', $robots ) ) ) { // @codingStandardsIgnoreLine
|
||||
unset( $robots[ $key ] );
|
||||
}
|
||||
|
||||
return $robots;
|
||||
}
|
||||
|
||||
/**
|
||||
* Keep original order when uasort() deals with equal "priority" values.
|
||||
*/
|
||||
private function add_order() {
|
||||
$order = 0;
|
||||
foreach ( $this->items as &$item ) {
|
||||
$item['order'] = $order++;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add root menu.
|
||||
*/
|
||||
private function add_root_menu() {
|
||||
$first_menu = get_transient( 'rank_math_first_submenu_id' );
|
||||
$first_menu = $first_menu && 'rank-math' !== $first_menu ? str_replace( 'rank-math-', '', $first_menu ) : '';
|
||||
|
||||
$this->items['main'] = [
|
||||
'id' => self::MENU_IDENTIFIER,
|
||||
'title' => '<span class="rank-math-icon">' . $this->get_icon() . '</span><span class="rank-math-text">' . esc_html__( 'Rank Math SEO', 'rank-math' ) . '</span>',
|
||||
'href' => Helper::get_admin_url( $first_menu ),
|
||||
'meta' => [ 'title' => esc_html__( 'Rank Math Dashboard', 'rank-math' ) ],
|
||||
'priority' => 10,
|
||||
];
|
||||
|
||||
if ( current_user_can( 'manage_options' ) ) {
|
||||
$this->add_sub_menu(
|
||||
'dashboard',
|
||||
[
|
||||
'title' => esc_html__( 'Dashboard', 'rank-math' ),
|
||||
'href' => $this->items['main']['href'],
|
||||
'meta' => [ 'title' => esc_html__( 'Dashboard', 'rank-math' ) ],
|
||||
'priority' => 20,
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add page menu.
|
||||
*/
|
||||
private function add_page_menu() {
|
||||
$hash = [
|
||||
'add_home_menu' => is_front_page(),
|
||||
'add_post_type_menu' => is_singular( Helper::get_accessible_post_types() ) || is_home(),
|
||||
'add_date_menu' => is_date(),
|
||||
'add_taxonomy_menu' => is_archive() && ! is_post_type_archive() && ! is_author(),
|
||||
'add_search_menu' => is_search(),
|
||||
];
|
||||
|
||||
foreach ( $hash as $func => $can_run ) {
|
||||
if ( true === $can_run ) {
|
||||
$this->$func();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Add homepage menu
|
||||
*/
|
||||
private function add_home_menu() {
|
||||
$this->add_sub_menu(
|
||||
'home',
|
||||
[
|
||||
'title' => esc_html__( 'Homepage SEO', 'rank-math' ),
|
||||
'href' => Helper::get_admin_url( 'options-titles#setting-panel-homepage' ),
|
||||
'meta' => [ 'title' => esc_html__( 'Edit Homepage SEO Settings', 'rank-math' ) ],
|
||||
'priority' => 35,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add post_type menu
|
||||
*/
|
||||
private function add_post_type_menu() {
|
||||
$post_type = get_post_type();
|
||||
if ( ! $post_type ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$name = get_post_type_object( $post_type )->labels->name;
|
||||
|
||||
if ( is_home() ) {
|
||||
$post_type = 'page';
|
||||
$name = esc_html__( 'Pages', 'rank-math' );
|
||||
}
|
||||
|
||||
$this->add_sub_menu(
|
||||
'posttype',
|
||||
[
|
||||
/* translators: Post Type Singular Name */
|
||||
'title' => sprintf( esc_html__( 'SEO Settings for %s', 'rank-math' ), $name ),
|
||||
'href' => Helper::get_admin_url( 'options-titles#setting-panel-post-type-' . $post_type ),
|
||||
'meta' => [ 'title' => esc_html__( 'Edit default SEO settings for this post type', 'rank-math' ) ],
|
||||
'priority' => 35,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add taxonomy menu
|
||||
*/
|
||||
private function add_taxonomy_menu() {
|
||||
$term = get_queried_object();
|
||||
|
||||
if ( empty( $term ) || ! ( $term instanceof \WP_Term ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$labels = get_taxonomy_labels( get_taxonomy( $term->taxonomy ) );
|
||||
$this->add_sub_menu(
|
||||
'tax',
|
||||
[
|
||||
/* translators: Taxonomy Singular Name */
|
||||
'title' => sprintf( esc_html__( 'SEO Settings for %s', 'rank-math' ), $labels->name ),
|
||||
'href' => Helper::get_admin_url( 'options-titles#setting-panel-taxonomy-' . $term->taxonomy ),
|
||||
'meta' => [ 'title' => esc_html__( 'Edit SEO settings for this archive page', 'rank-math' ) ],
|
||||
'priority' => 35,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add date archive menu
|
||||
*/
|
||||
private function add_date_menu() {
|
||||
$this->add_sub_menu(
|
||||
'date',
|
||||
[
|
||||
'title' => esc_html__( 'SEO Settings for Date Archives', 'rank-math' ),
|
||||
'href' => Helper::get_admin_url( 'options-titles#setting-panel-global' ),
|
||||
'meta' => [ 'title' => esc_html__( 'Edit SEO settings for this archive page', 'rank-math' ) ],
|
||||
'priority' => 35,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add search result menu
|
||||
*/
|
||||
private function add_search_menu() {
|
||||
$this->add_sub_menu(
|
||||
'search',
|
||||
[
|
||||
'title' => esc_html__( 'SEO Settings for Search Page', 'rank-math' ),
|
||||
'href' => Helper::get_admin_url( 'options-titles#setting-panel-global' ),
|
||||
'meta' => [ 'title' => esc_html__( 'Edit SEO settings for the search results page', 'rank-math' ) ],
|
||||
'priority' => 35,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add mark page menu.
|
||||
*/
|
||||
private function add_mark_page_menu() {
|
||||
$this->add_sub_menu(
|
||||
'mark-me',
|
||||
[
|
||||
'title' => esc_html__( 'Mark this page', 'rank-math' ),
|
||||
'href' => '#',
|
||||
'priority' => 100,
|
||||
]
|
||||
);
|
||||
|
||||
$is_pillar_content = '';
|
||||
$dashicon_format = '<span class="dashicons dashicons-%s rm-mark-page-icon"></span>';
|
||||
|
||||
if ( is_singular( Helper::get_accessible_post_types() ) ) {
|
||||
if ( get_post_meta( get_the_ID(), 'rank_math_pillar_content', true ) === 'on' ) {
|
||||
$is_pillar_content = sprintf( $dashicon_format, 'yes' );
|
||||
}
|
||||
|
||||
$this->add_sub_menu(
|
||||
'pillar-content',
|
||||
[
|
||||
'title' => $is_pillar_content . esc_html__( 'As Pillar Content', 'rank-math' ),
|
||||
'href' => '#pillar_content',
|
||||
'meta' => [ 'class' => 'mark-page-as' ],
|
||||
],
|
||||
'mark-me'
|
||||
);
|
||||
}
|
||||
|
||||
if ( Paper::get() ) {
|
||||
$robots = Paper::get()->get_robots();
|
||||
$noindex_check = in_array( 'noindex', $robots, true ) ? sprintf( $dashicon_format, 'yes' ) : '';
|
||||
$this->add_sub_menu(
|
||||
'no-index',
|
||||
[
|
||||
'title' => $noindex_check . esc_html__( 'As NoIndex', 'rank-math' ),
|
||||
'href' => '#noindex',
|
||||
'meta' => [ 'class' => 'mark-page-as' ],
|
||||
],
|
||||
'mark-me'
|
||||
);
|
||||
|
||||
$nofollow_check = in_array( 'nofollow', $robots, true ) ? sprintf( $dashicon_format, 'yes' ) : '';
|
||||
$this->add_sub_menu(
|
||||
'no-follow',
|
||||
[
|
||||
'title' => $nofollow_check . esc_html__( 'As NoFollow', 'rank-math' ),
|
||||
'href' => '#nofollow',
|
||||
'meta' => [ 'class' => 'mark-page-as' ],
|
||||
],
|
||||
'mark-me'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Third party SEO Tools, like the Google Structured Data Testing Tool.
|
||||
*/
|
||||
private function add_seo_tools() {
|
||||
$this->add_sub_menu(
|
||||
'third-party',
|
||||
[
|
||||
'title' => esc_html__( 'External Tools', 'rank-math' ),
|
||||
'href' => '#',
|
||||
'priority' => 200,
|
||||
]
|
||||
);
|
||||
|
||||
$url = rawurlencode( Url::get_current_url() );
|
||||
$items = [
|
||||
'google-pagespeed' => [
|
||||
'title' => esc_html__( 'Google PageSpeed', 'rank-math' ),
|
||||
'href' => 'https://developers.google.com/speed/pagespeed/insights/?url=' . $url,
|
||||
'meta' => [ 'title' => esc_html__( 'Google PageSpeed Insights', 'rank-math' ) ],
|
||||
],
|
||||
|
||||
'google-richresults-mobile' => [
|
||||
'title' => esc_html__( 'Google Rich Results (Mobile)', 'rank-math' ),
|
||||
'href' => 'https://search.google.com/test/rich-results?url=' . $url . '&user_agent=1',
|
||||
'meta' => [ 'title' => esc_html__( 'Google Rich Results Test - Googlebot Smartphone', 'rank-math' ) ],
|
||||
],
|
||||
|
||||
'google-richresults-desktop' => [
|
||||
'title' => esc_html__( 'Google Rich Results (Desktop)', 'rank-math' ),
|
||||
'href' => 'https://search.google.com/test/rich-results?url=' . $url . '&user_agent=2',
|
||||
'meta' => [ 'title' => esc_html__( 'Google Rich Results Test - Googlebot Desktop', 'rank-math' ) ],
|
||||
],
|
||||
|
||||
'google-cache' => [
|
||||
'title' => esc_html__( 'Google Cache', 'rank-math' ),
|
||||
'href' => 'https://webcache.googleusercontent.com/search?q=cache:' . $url,
|
||||
'meta' => [ 'title' => esc_html__( 'See Google\'s cached version of your site', 'rank-math' ) ],
|
||||
],
|
||||
|
||||
'fb-debugger' => [
|
||||
'title' => esc_html__( 'Facebook Debugger', 'rank-math' ),
|
||||
'href' => 'https://developers.facebook.com/tools/debug/sharing/?q=' . $url,
|
||||
'meta' => [ 'title' => esc_html__( 'Facebook Sharing Debugger', 'rank-math' ) ],
|
||||
],
|
||||
];
|
||||
|
||||
foreach ( $items as $id => $args ) {
|
||||
$args['meta']['target'] = '_blank';
|
||||
$this->add_sub_menu( $id, $args, 'third-party' );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add sub menu item
|
||||
*
|
||||
* @param string $id Unique ID for the node.
|
||||
* @param array $args Arguments for adding a node.
|
||||
* @param string $parent Node parent.
|
||||
*/
|
||||
public function add_sub_menu( $id, $args, $parent = '' ) {
|
||||
$args['priority'] = isset( $args['priority'] ) ? $args['priority'] : 999;
|
||||
$args['id'] = 'rank-math-' . $id;
|
||||
$args['parent'] = '' !== $parent ? 'rank-math-' . $parent : self::MENU_IDENTIFIER;
|
||||
$this->items[ $id ] = $args;
|
||||
}
|
||||
|
||||
/**
|
||||
* Can current user has capability for admin menu.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function can_add_menu() {
|
||||
return Helper::has_cap( 'admin_bar' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Can add mark me menu.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function can_add_mark_menu() {
|
||||
return $this->is_front() && Helper::has_cap( 'onpage_general' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Is frontend.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function is_front() {
|
||||
return ! is_admin() && ! is_preview();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sort admin bar items callback.
|
||||
*
|
||||
* @param array $item1 Item A to compare.
|
||||
* @param array $item2 Item B to compare.
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
private function sort_by_priority( $item1, $item2 ) {
|
||||
if ( $item1['priority'] === $item2['priority'] ) {
|
||||
return $item1['order'] < $item2['order'] ? -1 : 1;
|
||||
}
|
||||
|
||||
return $item1['priority'] < $item2['priority'] ? -1 : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Rank Math icon.
|
||||
*
|
||||
* @param integer $width Width of the icon.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function get_icon( $width = 20 ) {
|
||||
return '<svg viewBox="0 0 462.03 462.03" xmlns="http://www.w3.org/2000/svg" width="' . $width . '"><g><path d="m462 234.84-76.17 3.43 13.43 21-127 81.18-126-52.93-146.26 60.97 10.14 24.34 136.1-56.71 128.57 54 138.69-88.61 13.43 21z"/><path d="m54.1 312.78 92.18-38.41 4.49 1.89v-54.58h-96.67zm210.9-223.57v235.05l7.26 3 89.43-57.05v-181zm-105.44 190.79 96.67 40.62v-165.19h-96.67z"/></g></svg>';
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
/**
|
||||
* Breadcrumbs for the Rank Math pages
|
||||
*
|
||||
* @since 1.0.44
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Admin
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Admin;
|
||||
|
||||
use RankMath\Helper;
|
||||
use RankMath\Helpers\Param;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Admin Header class.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class Admin_Breadcrumbs {
|
||||
|
||||
/**
|
||||
* Display Header.
|
||||
*/
|
||||
public function display() {
|
||||
?>
|
||||
<div class="rank-math-breadcrumbs-wrap">
|
||||
<div class="rank-math-breadcrumbs">
|
||||
<span><?php echo esc_html__( 'Dashboard', 'rank-math' ); ?></span>
|
||||
<span class="divider">/</span>
|
||||
<span class="active"><?php echo esc_html( $this->get_page_title() ); ?></span>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Current Admin Page Title.
|
||||
*/
|
||||
private function get_page_title() {
|
||||
$base = __( 'Modules', 'rank-math' );
|
||||
if ( is_network_admin() ) {
|
||||
$base = __( 'Help', 'rank-math' );
|
||||
}
|
||||
$default = 'rank-math' === Param::get( 'page' ) ? $base : get_admin_page_title();
|
||||
return str_replace( '_', ' ', Param::get( 'view', $default, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_BACKTICK ) );
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
<?php
|
||||
/**
|
||||
* The nav tabs on the Dashboard page.
|
||||
*
|
||||
* @since 1.0.40
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Admin
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Admin;
|
||||
|
||||
use RankMath\Helper;
|
||||
use RankMath\Helpers\Security;
|
||||
use RankMath\Helpers\Param;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Admin Dashboard Nav class.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class Admin_Dashboard_Nav {
|
||||
|
||||
/**
|
||||
* Display dashboard tabs.
|
||||
*/
|
||||
public function display() {
|
||||
$nav_links = $this->get_nav_links();
|
||||
if ( empty( $nav_links ) ) {
|
||||
return;
|
||||
}
|
||||
?>
|
||||
<div class="rank-math-tab-nav" role="tablist" aria-orientation="horizontal">
|
||||
<?php
|
||||
foreach ( $nav_links as $id => $link ) {
|
||||
$this->nav_link( $link );
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Get URL for dashboard nav links.
|
||||
*
|
||||
* @param array $link Link data.
|
||||
* @return string Link URL.
|
||||
*/
|
||||
public function get_link_url( $link ) {
|
||||
return is_network_admin() ?
|
||||
Security::add_query_arg(
|
||||
[
|
||||
'page' => 'rank-math',
|
||||
'view' => $link['id'],
|
||||
],
|
||||
network_admin_url( 'admin.php' )
|
||||
) :
|
||||
Helper::get_admin_url( $link['url'], $link['args'] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Output dashboard nav link.
|
||||
*
|
||||
* @param array $link Link data.
|
||||
* @return void
|
||||
*/
|
||||
public function nav_link( $link ) {
|
||||
if ( isset( $link['cap'] ) && ! current_user_can( $link['cap'] ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$default_tab = is_network_admin() ? 'help' : 'modules';
|
||||
?>
|
||||
<a
|
||||
class="rank-math-tab<?php echo Param::get( 'view', $default_tab ) === sanitize_html_class( $link['id'] ) ? ' is-active' : ''; ?>"
|
||||
href="<?php echo esc_url( $this->get_link_url( $link ) ); ?>"
|
||||
title="<?php echo esc_attr( $link['title'] ); ?>">
|
||||
<?php echo esc_html( $link['title'] ); ?>
|
||||
</a>
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Get dashbaord navigation links
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function get_nav_links() {
|
||||
$links = [
|
||||
'modules' => [
|
||||
'id' => 'modules',
|
||||
'url' => '',
|
||||
'args' => 'view=modules',
|
||||
'cap' => 'manage_options',
|
||||
'title' => esc_html__( 'Modules', 'rank-math' ),
|
||||
],
|
||||
'help' => [
|
||||
'id' => 'help',
|
||||
'url' => '',
|
||||
'args' => 'view=help',
|
||||
'cap' => 'manage_options',
|
||||
'title' => esc_html__( 'Help', 'rank-math' ),
|
||||
],
|
||||
'wizard' => [
|
||||
'id' => 'wizard',
|
||||
'url' => 'wizard',
|
||||
'args' => '',
|
||||
'cap' => 'manage_options',
|
||||
'title' => esc_html__( 'Setup Wizard', 'rank-math' ),
|
||||
],
|
||||
];
|
||||
|
||||
if ( Helper::is_advanced_mode() ) {
|
||||
$links['import-export'] = [
|
||||
'id' => 'import-export',
|
||||
'url' => 'status',
|
||||
'args' => 'view=import_export',
|
||||
'cap' => 'install_plugins',
|
||||
'title' => esc_html__( 'Import & Export', 'rank-math' ),
|
||||
];
|
||||
}
|
||||
|
||||
if ( Helper::is_plugin_active_for_network() ) {
|
||||
unset( $links['help'] );
|
||||
}
|
||||
|
||||
if ( is_network_admin() ) {
|
||||
$links = [];
|
||||
}
|
||||
|
||||
return apply_filters( 'rank_math/admin/dashboard_nav_links', $links );
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,151 @@
|
||||
<?php
|
||||
/**
|
||||
* Header for the Rank Math pages
|
||||
*
|
||||
* @since 1.0.44
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Admin
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Admin;
|
||||
|
||||
use RankMath\Helper;
|
||||
use RankMath\KB;
|
||||
use RankMath\Helpers\Param;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Admin Header class.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class Admin_Header {
|
||||
|
||||
/**
|
||||
* Hold current screen ID.
|
||||
*
|
||||
* @var Current screen ID.
|
||||
*/
|
||||
private $screen_id = '';
|
||||
|
||||
/**
|
||||
* Display Header.
|
||||
*/
|
||||
public function display() {
|
||||
$logo_url = '<a href="' . esc_url( Helper::get_admin_url() ) . '"><i class="rm-icon rm-icon-rank-math"></i></a>';
|
||||
$this->screen_id = $this->get_current_screen();
|
||||
?>
|
||||
<div class="rank-math-header">
|
||||
<div class="rank-math-logo">
|
||||
<?php echo $logo_url; // phpcs:ignore ?>
|
||||
</div>
|
||||
<h1 class="rank-math-logo-text">
|
||||
Rank Math SEO
|
||||
<?php do_action( 'rank_math/pro_badge' ); ?>
|
||||
</h1>
|
||||
<?php $this->get_search_options(); ?>
|
||||
<?php $this->get_mode_selector(); ?>
|
||||
|
||||
<?php do_action( 'rank_math/before_help_link' ); ?>
|
||||
<a href="<?php echo esc_url( $this->get_help_link() ); ?>" title="<?php esc_attr_e( 'Rank Math Knowledge Base', 'rank-math' ); ?>" target="_blank" class="button rank-math-help"><i class="dashicons dashicons-editor-help"></i></a>
|
||||
</div>
|
||||
<?php
|
||||
|
||||
// Breadcrumbs.
|
||||
rank_math()->admin->display_admin_breadcrumbs();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Search Options.
|
||||
*/
|
||||
private function get_search_options() {
|
||||
if (
|
||||
! in_array(
|
||||
$this->screen_id,
|
||||
[
|
||||
'rank-math_page_rank-math-options-general',
|
||||
'rank-math_page_rank-math-options-titles',
|
||||
'rank-math_page_rank-math-options-sitemap',
|
||||
],
|
||||
true
|
||||
)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
?>
|
||||
<div class="rank-math-search-options">
|
||||
<div class="search-field">
|
||||
<i class="rm-icon rm-icon-search"></i>
|
||||
<input type="text" value="" placeholder="<?php esc_attr_e( 'Search Options', 'rank-math' ); ?>">
|
||||
<em class="clear-search dashicons dashicons-no-alt"></em>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Mode Selector.
|
||||
*/
|
||||
private function get_mode_selector() {
|
||||
if (
|
||||
! in_array(
|
||||
$this->screen_id,
|
||||
[
|
||||
'toplevel_page_rank-math',
|
||||
'rank-math_page_rank-math-status',
|
||||
],
|
||||
true
|
||||
)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
$is_advanced_mode = Helper::is_advanced_mode();
|
||||
?>
|
||||
<div class="rank-math-mode-selector">
|
||||
<a href="#" class="<?php echo ! $is_advanced_mode ? 'active' : ''; ?>" data-mode="easy"><?php esc_attr_e( 'Easy Mode', 'rank-math' ); ?></a>
|
||||
<a href="#" class="<?php echo $is_advanced_mode ? 'active' : ''; ?>" data-mode="advanced"><?php esc_attr_e( 'Advanced Mode', 'rank-math' ); ?></a>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Current Screen ID.
|
||||
*/
|
||||
private function get_help_link() {
|
||||
$links = [
|
||||
'import-export-settings' => 'import_export' === Param::get( 'view' ),
|
||||
'version-control' => 'version_control' === Param::get( 'view' ) || 'rank-math-status' === Param::get( 'page' ),
|
||||
'general-settings' => 'rank-math-options-general' === Param::get( 'page' ),
|
||||
'titles-meta' => 'rank-math-options-titles' === Param::get( 'page' ),
|
||||
'sitemap-general' => 'rank-math-options-sitemap' === Param::get( 'page' ),
|
||||
'role-manager' => 'rank-math-role-manager' === Param::get( 'page' ),
|
||||
'seo-analysis' => 'rank-math-seo-analysis' === Param::get( 'page' ),
|
||||
'content-ai-restore-credits' => 'rank-math-content-ai-page' === Param::get( 'page' ),
|
||||
];
|
||||
|
||||
$link = KB::get( 'knowledgebase', 'RM Header KB Icon' );
|
||||
foreach ( $links as $key => $value ) {
|
||||
if ( $value ) {
|
||||
$link = KB::get( $key, 'Admin Bar ' . ucwords( str_replace( '-', ' ', $key ) ) );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $link;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Current Screen ID.
|
||||
*/
|
||||
private function get_current_screen() {
|
||||
$screen = get_current_screen();
|
||||
if ( empty( $screen ) ) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return $screen->id;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,468 @@
|
||||
<?php
|
||||
/**
|
||||
* Admin helper Functions.
|
||||
*
|
||||
* This file contains functions needed on the admin screens.
|
||||
*
|
||||
* @since 0.9.0
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Admin
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Admin;
|
||||
|
||||
use RankMath\KB;
|
||||
use RankMath\Helper;
|
||||
use RankMath\Data_Encryption;
|
||||
use RankMath\Helpers\Security;
|
||||
use RankMath\Helpers\Param;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Admin_Helper class.
|
||||
*/
|
||||
class Admin_Helper {
|
||||
|
||||
/**
|
||||
* Get .htaccess related data.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function get_htaccess_data() {
|
||||
if ( ! Helper::is_filesystem_direct() ) {
|
||||
return [
|
||||
'content' => '',
|
||||
'writable' => false,
|
||||
];
|
||||
}
|
||||
|
||||
$wp_filesystem = Helper::get_filesystem();
|
||||
if ( empty( $wp_filesystem ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$htaccess_file = get_home_path() . '.htaccess';
|
||||
return ! $wp_filesystem->exists( $htaccess_file ) ? false : [
|
||||
'content' => $wp_filesystem->get_contents( $htaccess_file ),
|
||||
'writable' => $wp_filesystem->is_writable( $htaccess_file ),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get tooltip HTML.
|
||||
*
|
||||
* @param string $message Message to show in tooltip.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function get_tooltip( $message ) {
|
||||
return '<span class="rank-math-tooltip"><em class="dashicons-before dashicons-editor-help"></em><span>' . $message . '</span></span>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get admin view file.
|
||||
*
|
||||
* @param string $view View filename.
|
||||
*
|
||||
* @return string Complete path to view
|
||||
*/
|
||||
public static function get_view( $view ) {
|
||||
$view = sanitize_key( $view );
|
||||
$view = rank_math()->admin_dir() . "views/{$view}.php";
|
||||
|
||||
if ( ! file_exists( $view ) ) {
|
||||
Helper::redirect( Helper::get_admin_url() );
|
||||
exit;
|
||||
}
|
||||
|
||||
return $view;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get taxonomies as choices.
|
||||
*
|
||||
* @param array $args (Optional) Arguments passed to filter list.
|
||||
*
|
||||
* @return array|bool
|
||||
*/
|
||||
public static function get_taxonomies_options( $args = [] ) {
|
||||
global $wp_taxonomies;
|
||||
|
||||
$args = wp_parse_args( $args, [ 'public' => true ] );
|
||||
$taxonomies = wp_filter_object_list( $wp_taxonomies, $args, 'and', 'label' );
|
||||
|
||||
return empty( $taxonomies ) ? false : [ 'off' => esc_html__( 'None', 'rank-math' ) ] + $taxonomies;
|
||||
}
|
||||
|
||||
/**
|
||||
* Registration data get/update.
|
||||
*
|
||||
* @param array|bool|null $data Array of data to save.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function get_registration_data( $data = null ) {
|
||||
$row = 'rank_math_connect_data';
|
||||
$keys = [
|
||||
'username',
|
||||
'email',
|
||||
'api_key',
|
||||
'plan',
|
||||
];
|
||||
|
||||
// Setter.
|
||||
if ( ! is_null( $data ) ) {
|
||||
if ( false === $data ) {
|
||||
update_option( 'rank_math_registration_skip', 1 );
|
||||
return delete_option( $row );
|
||||
}
|
||||
|
||||
foreach ( $keys as $key ) {
|
||||
if ( isset( $data[ $key ] ) ) {
|
||||
$data[ $key ] = Data_Encryption::encrypt( $data[ $key ] );
|
||||
}
|
||||
}
|
||||
|
||||
Helper::remove_notification( 'rank-math-site-url-mismatch' );
|
||||
update_option( 'rank_math_registration_skip', 1 );
|
||||
$connected = update_option( $row, $data );
|
||||
|
||||
do_action( 'rank_math/connect/account_connected', $data );
|
||||
return $connected;
|
||||
}
|
||||
|
||||
// Getter.
|
||||
$options = Helper::is_plugin_active_for_network() ? get_blog_option( get_main_site_id(), $row, false ) : get_option( $row, false );
|
||||
if ( empty( $options ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach ( $keys as $key ) {
|
||||
if ( isset( $options[ $key ] ) ) {
|
||||
$options[ $key ] = Data_Encryption::decrypt( $options[ $key ] );
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! self::is_valid_registration( $options ) ) {
|
||||
// Delete invalid registration data.
|
||||
delete_option( $row );
|
||||
|
||||
// Ask the user to reconnect.
|
||||
Helper::add_notification(
|
||||
__( 'Unable to validate Rank Math SEO registration data.', 'rank-math' ) .
|
||||
' <a href="' . esc_url( self::get_activate_url() ) . '">' . __( 'Please try reconnecting.', 'rank-math' ) . '</a> ' .
|
||||
sprintf(
|
||||
/* translators: KB Link */
|
||||
__( 'If the issue persists, please try the solution described in our Knowledge Base article: %s', 'rank-math' ),
|
||||
'<a href="' . KB::get( 'unable-to-encrypt', 'Registration Data' ) . '" target="_blank">' . __( '[3. Unable to Encrypt]', 'rank-math' ) . '</a>'
|
||||
),
|
||||
[ 'type' => 'error' ]
|
||||
);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter whether we need to check for URL mismatch or not.
|
||||
*/
|
||||
$do_url_check = apply_filters( 'rank_math/registration/do_url_check', ! get_option( 'rank_math_siteurl_mismatch_notice_dismissed' ) );
|
||||
if ( $do_url_check && isset( $options['site_url'] ) && Helper::get_home_url() !== $options['site_url'] ) {
|
||||
$message = esc_html__( 'Seems like your site URL has changed since you connected to Rank Math.', 'rank-math' ) . ' <a href="' . self::get_activate_url() . '">' . esc_html__( 'Click here to reconnect.', 'rank-math' ) . '</a>';
|
||||
Helper::add_notification(
|
||||
$message,
|
||||
[
|
||||
'type' => 'warning',
|
||||
'id' => 'rank-math-site-url-mismatch',
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure the site_url is returned if it is absent, as it is required for the Content AI.
|
||||
*/
|
||||
if ( empty( $options['site_url'] ) ) {
|
||||
$options['site_url'] = Helper::get_home_url();
|
||||
}
|
||||
|
||||
return $options;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if registration data is valid.
|
||||
*
|
||||
* @param array $data Registration data.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function is_valid_registration( $data ) {
|
||||
if ( empty( $data['username'] ) || empty( $data['email'] ) || empty( $data['api_key'] ) || empty( $data['plan'] ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( ! filter_var( $data['email'], FILTER_VALIDATE_EMAIL ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( strlen( $data['plan'] ) > 32 ) { // This can happen when the decryption fails for some reason.
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user plan.
|
||||
*/
|
||||
public static function get_user_plan() {
|
||||
$data = self::get_registration_data();
|
||||
|
||||
return $data['plan'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Is user plan expired.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public static function is_plan_expired() {
|
||||
$data = self::get_registration_data();
|
||||
if ( ! isset( $data['plan'] ) ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return 'free' === $data['plan'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove registration data and disconnect from RankMath.com.
|
||||
*/
|
||||
public static function deregister_user() {
|
||||
$registered = self::get_registration_data();
|
||||
if ( $registered && isset( $registered['username'] ) && isset( $registered['api_key'] ) ) {
|
||||
Api::get()->deactivate_site( $registered['username'], $registered['api_key'] );
|
||||
self::get_registration_data( false );
|
||||
|
||||
do_action( 'rank_math/deregister_site' );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if current page is media list page.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function is_media_library() {
|
||||
global $pagenow;
|
||||
|
||||
return 'upload.php' === $pagenow;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if current page is post list page.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function is_post_list() {
|
||||
global $pagenow;
|
||||
|
||||
return 'edit.php' === $pagenow;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if current page is post create/edit screen.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function is_post_edit() {
|
||||
global $pagenow;
|
||||
return ! Helper::is_ux_builder() && ( 'post.php' === $pagenow || 'post-new.php' === $pagenow );
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if current page is term create/edit screen.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function is_term_edit() {
|
||||
global $pagenow;
|
||||
|
||||
return 'term.php' === $pagenow || 'edit-tags.php' === $pagenow;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if current page is user create/edit screen.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function is_user_edit() {
|
||||
global $pagenow;
|
||||
|
||||
return 'profile.php' === $pagenow || 'user-edit.php' === $pagenow;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if current page is user or term create/edit screen.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public static function is_term_profile_page() {
|
||||
global $pagenow;
|
||||
|
||||
return self::is_term_edit() || self::is_user_edit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Social Share buttons.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public static function get_social_share() {
|
||||
if ( Helper::is_whitelabel() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$tw_link = KB::get( 'logo', 'Setup Wizard Tweet Button' );
|
||||
$fb_link = rawurlencode( KB::get( 'logo', 'Facebook' ) );
|
||||
/* translators: sitename */
|
||||
$tw_message = rawurlencode( sprintf( esc_html__( 'I just installed @RankMathSEO #WordPress Plugin. It looks great! %s', 'rank-math' ), $tw_link ) );
|
||||
/* translators: sitename */
|
||||
$fb_message = rawurlencode( esc_html__( 'I just installed Rank Math SEO WordPress Plugin. It looks promising!', 'rank-math' ) );
|
||||
|
||||
$tweet_url = Security::add_query_arg(
|
||||
[
|
||||
'text' => $tw_message,
|
||||
'hashtags' => 'SEO',
|
||||
],
|
||||
'https://twitter.com/intent/tweet'
|
||||
);
|
||||
|
||||
$fb_share_url = Security::add_query_arg(
|
||||
[
|
||||
'u' => $fb_link,
|
||||
'quote' => $fb_message,
|
||||
'caption' => esc_html__( 'SEO by Rank Math', 'rank-math' ),
|
||||
],
|
||||
'https://www.facebook.com/sharer/sharer.php'
|
||||
);
|
||||
?>
|
||||
<span class="wizard-share">
|
||||
<a href="#" onclick="window.open('<?php echo $tweet_url; ?>', 'sharewindow', 'resizable,width=600,height=300'); return false;" class="share-twitter">
|
||||
<span class="dashicons dashicons-twitter"></span> <?php esc_html_e( 'Tweet', 'rank-math' ); ?>
|
||||
</a>
|
||||
<a href="#" onclick="window.open('<?php echo $fb_share_url; ?>', 'sharewindow', 'resizable,width=600,height=300'); return false;" class="share-facebook">
|
||||
<span class="dashicons dashicons-facebook-alt"></span> <?php esc_html_e( 'Share', 'rank-math' ); ?>
|
||||
</a>
|
||||
</span>
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Get product activation URL.
|
||||
*
|
||||
* @param string $redirect_to Redirecto url.
|
||||
*
|
||||
* @return string Activate URL.
|
||||
*/
|
||||
public static function get_activate_url( $redirect_to = null ) {
|
||||
if ( empty( $redirect_to ) ) {
|
||||
$redirect_to = Security::add_query_arg_raw(
|
||||
[
|
||||
'page' => 'rank-math',
|
||||
'view' => 'help',
|
||||
'nonce' => wp_create_nonce( 'rank_math_register_product' ),
|
||||
],
|
||||
( is_multisite() && is_plugin_active_for_network( plugin_basename( RANK_MATH_FILE ) ) ) ? network_admin_url( 'admin.php' ) : admin_url( 'admin.php' )
|
||||
);
|
||||
} else {
|
||||
$redirect_to = Security::add_query_arg_raw(
|
||||
[
|
||||
'nonce' => wp_create_nonce( 'rank_math_register_product' ),
|
||||
],
|
||||
$redirect_to
|
||||
);
|
||||
}
|
||||
|
||||
$args = [
|
||||
'site' => rawurlencode( home_url() ),
|
||||
'r' => rawurlencode( $redirect_to ),
|
||||
];
|
||||
|
||||
return apply_filters(
|
||||
'rank_math/license/activate_url',
|
||||
Security::add_query_arg_raw( $args, RANK_MATH_SITE_URL . '/auth' ),
|
||||
$args
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if page is set as Homepage.
|
||||
*
|
||||
* @since 1.0.42
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public static function is_home_page() {
|
||||
$front_page = (int) get_option( 'page_on_front' );
|
||||
|
||||
if ( Helper::is_divi_frontend_editor() ) {
|
||||
$p = get_post();
|
||||
return ! empty( $p->ID ) && $p->ID === $front_page;
|
||||
}
|
||||
|
||||
return $front_page && self::is_post_edit() && (int) Param::get( 'post' ) === $front_page;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if page is set as Posts Page.
|
||||
*
|
||||
* @since 1.0.43
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public static function is_posts_page() {
|
||||
$posts_page = (int) get_option( 'page_for_posts' );
|
||||
|
||||
return $posts_page && self::is_post_edit() && (int) Param::get( 'post' ) === $posts_page;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Trends icon <svg> element.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function get_trends_icon_svg() {
|
||||
return '<svg viewBox="0 0 610 610"><path d="M18.85,446,174.32,290.48l58.08,58.08L76.93,504a14.54,14.54,0,0,1-20.55,0L18.83,466.48a14.54,14.54,0,0,1,0-20.55Z" style="fill:#4285f4"/><path d="M242.65,242.66,377.59,377.6l-47.75,47.75a14.54,14.54,0,0,1-20.55,0L174.37,290.43l47.75-47.75A14.52,14.52,0,0,1,242.65,242.66Z" style="fill:#ea4335"/><polygon points="319.53 319.53 479.26 159.8 537.34 217.88 377.61 377.62 319.53 319.53" style="fill:#fabb05"/><path d="M594.26,262.73V118.61h0a16.94,16.94,0,0,0-16.94-16.94H433.2a16.94,16.94,0,0,0-12,28.92L565.34,274.71h0a16.94,16.94,0,0,0,28.92-12Z" style="fill:#34a853"/><rect width="610" height="610" style="fill:none"/></svg>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if siteurl & home options are both valid URLs.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public static function is_site_url_valid() {
|
||||
return (bool) filter_var( get_option( 'siteurl' ), FILTER_VALIDATE_URL ) && (bool) filter_var( get_option( 'home' ), FILTER_VALIDATE_URL );
|
||||
}
|
||||
|
||||
/**
|
||||
* Maybe show notice about invalid siteurl.
|
||||
*/
|
||||
public static function maybe_show_invalid_siteurl_notice() {
|
||||
if ( ! self::is_site_url_valid() ) {
|
||||
?>
|
||||
<p class="notice notice-warning notice-alt notice-connect-disabled">
|
||||
<?php
|
||||
printf(
|
||||
// Translators: 1 is "WordPress Address (URL)", 2 is "Site Address (URL)", 3 is a link to the General Settings, with "WordPress General Settings" as anchor text.
|
||||
esc_html__( 'Rank Math cannot be connected because your site URL doesn\'t appear to be a valid URL. If the domain name contains special characters, please make sure to use the encoded version in the %1$s & %2$s fields on the %3$s page.', 'rank-math' ),
|
||||
'<strong>' . esc_html__( 'WordPress Address (URL)', 'rank-math' ) . '</strong>',
|
||||
'<strong>' . esc_html__( 'Site Address (URL)', 'rank-math' ) . '</strong>',
|
||||
'<a href="' . esc_url( admin_url( 'options-general.php' ) ) . '">' . esc_html__( 'WordPress General Settings', 'rank-math' ) . '</a>'
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
<?php
|
||||
/**
|
||||
* The admin bootstrap of the plugin.
|
||||
*
|
||||
* @since 1.0.9
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Admin
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Admin;
|
||||
|
||||
use RankMath\Helper;
|
||||
use RankMath\Updates;
|
||||
use RankMath\Traits\Hooker;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Admin_Init class.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class Admin_Init {
|
||||
|
||||
use Hooker;
|
||||
|
||||
/**
|
||||
* The Constructor.
|
||||
*/
|
||||
public function __construct() {
|
||||
|
||||
rank_math()->admin = new Admin();
|
||||
rank_math()->admin_assets = new Assets();
|
||||
|
||||
$this->load_review_reminders();
|
||||
$this->load_pro_notice();
|
||||
$this->load_setup_wizard();
|
||||
$this->load_post_columns_and_filters();
|
||||
|
||||
$this->run(
|
||||
[
|
||||
rank_math()->admin,
|
||||
rank_math()->admin_assets,
|
||||
new Admin_Menu(),
|
||||
new Option_Center(),
|
||||
new Notices(),
|
||||
new CMB2_Fields(),
|
||||
new Metabox\Metabox(),
|
||||
new Import_Export(),
|
||||
new Updates(),
|
||||
new Watcher(),
|
||||
]
|
||||
);
|
||||
|
||||
/**
|
||||
* Fires when admin is loaded.
|
||||
*/
|
||||
$this->do_action( 'admin/loaded' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Load out post list and edit screen class.
|
||||
*/
|
||||
private function load_post_columns_and_filters() {
|
||||
$this->run( [ new Bulk_Actions() ] );
|
||||
|
||||
if ( Admin_Helper::is_post_list() || Admin_Helper::is_media_library() || wp_doing_ajax() ) {
|
||||
$this->run(
|
||||
[
|
||||
new Post_Columns(),
|
||||
new Post_Filters(),
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load review tab in metabox & footer notice.
|
||||
*/
|
||||
private function load_review_reminders() {
|
||||
if ( get_option( 'rank_math_already_reviewed' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->run( [ new Ask_Review() ] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Load Pro reminder notice.
|
||||
*/
|
||||
private function load_pro_notice() {
|
||||
if ( ! is_main_site() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( defined( 'RANK_MATH_PRO_FILE' ) || get_option( 'rank_math_already_upgraded' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->run( [ new Pro_Notice() ] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Run all the runners.
|
||||
*
|
||||
* @param array $runners Instances of runner classes.
|
||||
*/
|
||||
private function run( $runners ) {
|
||||
foreach ( $runners as $runner ) {
|
||||
$runner->hooks();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load setup wizard.
|
||||
*/
|
||||
private function load_setup_wizard() {
|
||||
if ( Helper::is_wizard() ) {
|
||||
new Setup_Wizard();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,269 @@
|
||||
<?php
|
||||
/**
|
||||
* The admin pages of the plugin.
|
||||
*
|
||||
* @since 1.0.9
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Admin
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Admin;
|
||||
|
||||
use RankMath\KB;
|
||||
use RankMath\Helper;
|
||||
use RankMath\Helpers\Param;
|
||||
use RankMath\Runner;
|
||||
use RankMath\Traits\Hooker;
|
||||
use RankMath\Traits\Ajax;
|
||||
use RankMath\Admin\Page;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Admin_Menu class.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class Admin_Menu implements Runner {
|
||||
|
||||
use Hooker, Ajax;
|
||||
|
||||
/**
|
||||
* Register hooks.
|
||||
*/
|
||||
public function hooks() {
|
||||
$this->action( 'init', 'register_pages' );
|
||||
$this->action( 'admin_menu', 'fix_admin_menu', 999 );
|
||||
$this->action( 'admin_head', 'icon_css' );
|
||||
$this->ajax( 'remove_offer_page', 'remove_offer_page' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Register admin pages for plugin.
|
||||
*/
|
||||
public function register_pages() {
|
||||
$this->maybe_deregister();
|
||||
|
||||
if ( Helper::is_invalid_registration() && ! is_network_admin() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$current_user = wp_get_current_user();
|
||||
$capabilities = array_keys( Helper::get_roles_capabilities() );
|
||||
|
||||
if ( empty( array_intersect( $current_user->roles, $capabilities ) ) && ! current_user_can( 'setup_network' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Dashboard / Welcome / About.
|
||||
new Page(
|
||||
'rank-math',
|
||||
esc_html__( 'Rank Math', 'rank-math' ),
|
||||
[
|
||||
'position' => 50,
|
||||
'menu_title' => 'Rank Math',
|
||||
'capability' => 'level_1',
|
||||
'icon' => 'data:image/svg+xml;base64,' . \base64_encode( '<svg viewBox="0 0 462.03 462.03" xmlns="http://www.w3.org/2000/svg" width="20"><g fill="#fff"><path d="m462 234.84-76.17 3.43 13.43 21-127 81.18-126-52.93-146.26 60.97 10.14 24.34 136.1-56.71 128.57 54 138.69-88.61 13.43 21z"/><path d="m54.1 312.78 92.18-38.41 4.49 1.89v-54.58h-96.67zm210.9-223.57v235.05l7.26 3 89.43-57.05v-181zm-105.44 190.79 96.67 40.62v-165.19h-96.67z"/></g></svg>' ),
|
||||
'render' => Admin_Helper::get_view( 'dashboard' ),
|
||||
'classes' => [ 'rank-math-page' ],
|
||||
'assets' => [
|
||||
'styles' => [ 'rank-math-dashboard' => '' ],
|
||||
'scripts' => [
|
||||
'rank-math-dashboard' => '',
|
||||
],
|
||||
],
|
||||
'is_network' => is_network_admin() && Helper::is_plugin_active_for_network(),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fix menu names.
|
||||
*/
|
||||
public function fix_admin_menu() {
|
||||
|
||||
// Replace the main menu name "Rank Math" with "Rank Math SEO".
|
||||
global $menu;
|
||||
foreach ( $menu as $key => $item ) {
|
||||
if ( 'Rank Math' === $item[0] ) {
|
||||
$menu[ $key ][0] = esc_html__( 'Rank Math SEO', 'rank-math' );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Replace the first submenu name "Rank Math" with "Dashboard".
|
||||
global $submenu;
|
||||
if ( ! isset( $submenu['rank-math'] ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( 'Rank Math' === $submenu['rank-math'][0][0] ) {
|
||||
if ( current_user_can( 'manage_options' ) ) {
|
||||
$plan = Helper::get_content_ai_plan();
|
||||
$notification = ( empty( $plan ) || 'free' === $plan ) && get_option( 'rank_math_view_modules' ) ? ' <span class="awaiting-mod count-1"><span class="pending-count" aria-hidden="true">1</span></span>' : '';
|
||||
|
||||
$submenu['rank-math'][0][0] = esc_html__( 'Dashboard', 'rank-math' ) . $notification;
|
||||
} else {
|
||||
unset( $submenu['rank-math'][0] );
|
||||
}
|
||||
}
|
||||
|
||||
if ( empty( $submenu['rank-math'] ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$submenu['rank-math'][] = [ esc_html__( 'Help & Support', 'rank-math' ) . '<i class="dashicons dashicons-external" style="font-size:12px;vertical-align:-2px;height:10px;"></i>', 'level_1', KB::get( 'knowledgebase', 'Sidebar Help Link' ) ];
|
||||
$this->add_offer_link( $submenu );
|
||||
|
||||
// Store ID of first_menu item so we can use it in the Admin menu item.
|
||||
set_transient( 'rank_math_first_submenu_id', array_values( $submenu['rank-math'] )[0][2] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Print icon CSS for admin menu bar.
|
||||
*/
|
||||
public function icon_css() {
|
||||
?>
|
||||
<script type="text/javascript">
|
||||
// Open RM KB menu link in the new tab.
|
||||
jQuery( document ).ready( function( $ ) {
|
||||
$( "ul#adminmenu a[href$='<?php KB::the( 'knowledgebase', 'Sidebar Help Link' ); ?>']" ).attr( 'target', '_blank' );
|
||||
$( "ul#adminmenu a[href$='<?php KB::the( 'offer', 'Offer Menu Item' ); ?>']" ).attr( 'target', '_blank' ).on( 'click', function() {
|
||||
$( this ).remove()
|
||||
$.ajax( {
|
||||
url: window.ajaxurl,
|
||||
type: 'POST',
|
||||
data: {
|
||||
action: 'rank_math_remove_offer_page',
|
||||
security: rankMath.security,
|
||||
},
|
||||
} )
|
||||
} );
|
||||
} );
|
||||
</script>
|
||||
<style>
|
||||
#wp-admin-bar-rank-math .rank-math-icon {
|
||||
display: inline-block;
|
||||
top: 6px;
|
||||
position: relative;
|
||||
padding-right: 10px;
|
||||
max-width: 20px;
|
||||
}
|
||||
#wp-admin-bar-rank-math .rank-math-icon svg {
|
||||
fill-rule: evenodd;
|
||||
fill: #dedede;
|
||||
}
|
||||
#wp-admin-bar-rank-math:hover .rank-math-icon svg {
|
||||
fill-rule: evenodd;
|
||||
fill: #00b9eb;
|
||||
}
|
||||
#toplevel_page_rank-math:not(.wp-has-submenu) {
|
||||
display: none;
|
||||
}
|
||||
.multisite.network-admin #toplevel_page_rank-math {
|
||||
display: block;
|
||||
}
|
||||
#toplevel_page_rank-math a[href$='<?php KB::the( 'offer', 'Offer Menu Item' ); ?>'],
|
||||
#toplevel_page_rank-math a[href$='<?php KB::the( 'offer', 'Offer Menu Item' ); ?>']:hover,
|
||||
#toplevel_page_rank-math a[href$='<?php KB::the( 'offer', 'Offer Menu Item' ); ?>']:focus {
|
||||
background-color: #10AC84;
|
||||
color: #fff;
|
||||
}
|
||||
</style>
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for deactivation.
|
||||
*/
|
||||
private function maybe_deregister() {
|
||||
if ( ! Helper::has_cap( 'general' ) || 'deregister' !== Param::post( 'registration-action' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$nonce = Param::post( '_wpnonce' );
|
||||
if ( ! $nonce || ! wp_verify_nonce( $nonce, 'rank_math_register_product' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
Admin_Helper::deregister_user();
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to add Offer link based on the date range.
|
||||
*
|
||||
* @param array $submenu Submenu items.
|
||||
*/
|
||||
private function add_offer_link( &$submenu ) {
|
||||
$offer = $this->get_active_offer();
|
||||
if ( ! $offer ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$submenu['rank-math'][] = [ current( $offer ) . ' ', 'level_1', KB::get( 'offer', 'Offer Menu Item' ) ];
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajax handler callback to store active offer so it doesn't show up again on the site.
|
||||
*/
|
||||
public function remove_offer_page() {
|
||||
check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
|
||||
$offer = $this->get_active_offer();
|
||||
set_site_transient( 'rank_math_active_offer', key( $offer ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to get active offer
|
||||
*/
|
||||
private function get_active_offer() {
|
||||
// Early Bail if PRO plugin is active.
|
||||
if ( defined( 'RANK_MATH_PRO_FILE' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$timezone = new \DateTimeZone( 'Asia/Kolkata' );
|
||||
$current_date = new \DateTime( 'now', $timezone );
|
||||
$dates = [
|
||||
'christmas' => [
|
||||
'start' => '2023-12-17',
|
||||
'end' => '2023-12-26',
|
||||
'text' => esc_html__( 'Christmas Sale', 'rank-math' ),
|
||||
],
|
||||
'new-year' => [
|
||||
'start' => '2023-12-31',
|
||||
'end' => '2024-01-05',
|
||||
'text' => esc_html__( 'New Year Sale', 'rank-math' ),
|
||||
],
|
||||
'anniversary' => [
|
||||
'start' => '2024-11-06',
|
||||
'end' => '2024-11-13',
|
||||
'text' => esc_html__( 'Anniversary Sale', 'rank-math' ),
|
||||
],
|
||||
'black-friday' => [
|
||||
'start' => '2024-11-27',
|
||||
'end' => '2024-12-01',
|
||||
'text' => esc_html__( 'Black Friday Sale', 'rank-math' ),
|
||||
],
|
||||
'cyber-monday' => [
|
||||
'start' => '2024-12-02',
|
||||
'end' => '2024-12-04',
|
||||
'text' => esc_html__( 'Cyber Monday Sale', 'rank-math' ),
|
||||
],
|
||||
];
|
||||
|
||||
$stored_offer = get_site_transient( 'rank_math_active_offer' );
|
||||
$active_offer = '';
|
||||
foreach ( $dates as $key => $date ) {
|
||||
$start_date = new \DateTime( $date['start'] . ' 16:00:00', $timezone );
|
||||
$end_date = new \DateTime( $date['end'] . ' 16:00:00', $timezone );
|
||||
|
||||
if ( $stored_offer !== $key && $current_date >= $start_date && $current_date <= $end_date ) {
|
||||
$active_offer = [ $key => $date['text'] ];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $active_offer;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,493 @@
|
||||
<?php
|
||||
/**
|
||||
* The admin-specific functionality of the plugin.
|
||||
*
|
||||
* @since 0.9.0
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Admin
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Admin;
|
||||
|
||||
use RankMath\Runner;
|
||||
use RankMath\Helper;
|
||||
use RankMath\Helpers\Str;
|
||||
use RankMath\Helpers\Param;
|
||||
use RankMath\Admin\Admin_Helper;
|
||||
use RankMath\Traits\Ajax;
|
||||
use RankMath\Traits\Hooker;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Admin class.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class Admin implements Runner {
|
||||
|
||||
use Hooker, Ajax;
|
||||
|
||||
/**
|
||||
* Register hooks.
|
||||
*/
|
||||
public function hooks() {
|
||||
$this->action( 'init', 'flush', 999 );
|
||||
$this->filter( 'user_contactmethods', 'update_user_contactmethods' );
|
||||
$this->action( 'admin_footer', 'convert_additional_profile_url_to_textarea' );
|
||||
$this->action( 'save_post', 'canonical_check_notice' );
|
||||
$this->action( 'cmb2_save_options-page_fields', 'update_is_configured_value', 10, 2 );
|
||||
$this->filter( 'action_scheduler_pastdue_actions_check_pre', 'as_exclude_pastdue_actions' );
|
||||
$this->action( 'rank_math/pro_badge', 'offer_icon' );
|
||||
$this->filter( 'load_script_translation_file', 'load_script_translation_file', 10, 3 );
|
||||
|
||||
// AJAX.
|
||||
$this->ajax( 'search_pages', 'search_pages' );
|
||||
$this->ajax( 'is_keyword_new', 'is_keyword_new' );
|
||||
$this->ajax( 'save_checklist_layout', 'save_checklist_layout' );
|
||||
$this->ajax( 'deactivate_plugins', 'deactivate_plugins' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Flush the rewrite rules once if the rank_math_flush_rewrite option is set.
|
||||
*/
|
||||
public function flush() {
|
||||
if ( get_option( 'rank_math_flush_rewrite' ) ) {
|
||||
flush_rewrite_rules();
|
||||
delete_option( 'rank_math_flush_rewrite' );
|
||||
}
|
||||
|
||||
if ( 'rank-math' === Param::get( 'page' ) && get_option( 'rank_math_view_modules' ) ) {
|
||||
delete_option( 'rank_math_view_modules' );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add Facebook and Twitter as user contact methods.
|
||||
*
|
||||
* @param array $contactmethods Current contact methods.
|
||||
* @return array New contact methods with extra items.
|
||||
*
|
||||
* @copyright Copyright (C) 2008-2019, Yoast BV
|
||||
* The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3.
|
||||
*/
|
||||
public function update_user_contactmethods( $contactmethods ) {
|
||||
$contactmethods['twitter'] = esc_html__( 'Twitter username (without @)', 'rank-math' );
|
||||
$contactmethods['facebook'] = esc_html__( 'Facebook profile URL', 'rank-math' );
|
||||
$contactmethods['additional_profile_urls'] = esc_html__( 'Additional profile URLs', 'rank-math' );
|
||||
|
||||
return $contactmethods;
|
||||
}
|
||||
|
||||
/**
|
||||
* Display admin header.
|
||||
*/
|
||||
public function display_admin_header() {
|
||||
$nav_tabs = new Admin_Header();
|
||||
$nav_tabs->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Display admin breadcrumbs.
|
||||
*/
|
||||
public function display_admin_breadcrumbs() {
|
||||
$nav_tabs = new Admin_Breadcrumbs();
|
||||
$nav_tabs->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Display dashboard tabs.
|
||||
*/
|
||||
public function display_dashboard_nav() {
|
||||
$nav_tabs = new Admin_Dashboard_Nav();
|
||||
$nav_tabs->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Show notice when canonical URL is not a valid URL.
|
||||
*
|
||||
* @param int $post_id The post ID.
|
||||
*/
|
||||
public function canonical_check_notice( $post_id ) {
|
||||
$post_type = get_post_type( $post_id );
|
||||
$is_allowed = in_array( $post_type, Helper::get_allowed_post_types(), true );
|
||||
|
||||
if ( ! $is_allowed || Helper::is_autosave() || Helper::is_ajax() || isset( $_REQUEST['bulk_edit'] ) ) {
|
||||
return $post_id;
|
||||
}
|
||||
|
||||
if ( ! empty( $_POST['rank_math_canonical_url'] ) && false === Param::post( 'rank_math_canonical_url', false, FILTER_VALIDATE_URL ) ) {
|
||||
$message = esc_html__( 'The canonical URL you entered does not seem to be a valid URL. Please double check it in the SEO meta box » Advanced tab.', 'rank-math' );
|
||||
Helper::add_notification( $message, [ 'type' => 'error' ] );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Save checklist layout.
|
||||
*/
|
||||
public function save_checklist_layout() {
|
||||
|
||||
check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
|
||||
$this->has_cap_ajax( 'onpage_general' );
|
||||
|
||||
if ( empty( $_POST['layout'] ) || ! is_array( $_POST['layout'] ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$layout = Param::post( 'layout', [], FILTER_DEFAULT, FILTER_REQUIRE_ARRAY );
|
||||
$allowed = [
|
||||
'basic' => 1,
|
||||
'advanced' => 1,
|
||||
'title-readability' => 1,
|
||||
'content-readability' => 1,
|
||||
];
|
||||
$layout = array_intersect_key( $layout, $allowed );
|
||||
|
||||
update_user_meta( get_current_user_id(), 'rank_math_metabox_checklist_layout', $layout );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajax handler to search pages based on the searched string. Used in the Local SEO Settings.
|
||||
*/
|
||||
public function search_pages() {
|
||||
check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
|
||||
$this->has_cap_ajax( 'general' );
|
||||
|
||||
$term = Param::get( 'term' );
|
||||
if ( empty( $term ) ) {
|
||||
exit;
|
||||
}
|
||||
|
||||
global $wpdb;
|
||||
$pages = $wpdb->get_results(
|
||||
$wpdb->prepare(
|
||||
"SELECT ID, post_title FROM {$wpdb->prefix}posts WHERE post_type = 'page' AND post_status = 'publish' AND post_title LIKE %s",
|
||||
"%{$wpdb->esc_like( $term )}%"
|
||||
),
|
||||
ARRAY_A
|
||||
);
|
||||
|
||||
$data = [];
|
||||
foreach ( $pages as $page ) {
|
||||
$data[] = [
|
||||
'id' => $page['ID'],
|
||||
'text' => $page['post_title'],
|
||||
'url' => get_permalink( $page['ID'] ),
|
||||
];
|
||||
}
|
||||
|
||||
wp_send_json( [ 'results' => $data ] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the keyword has been used before for another post.
|
||||
*/
|
||||
public function is_keyword_new() {
|
||||
global $wpdb;
|
||||
|
||||
check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
|
||||
$this->has_cap_ajax( 'onpage_general' );
|
||||
|
||||
$result = [ 'isNew' => true ];
|
||||
if ( empty( $_GET['keyword'] ) ) {
|
||||
$this->success( $result );
|
||||
}
|
||||
|
||||
$keyword = Param::get( 'keyword', '', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_BACKTICK );
|
||||
$object_id = Param::get( 'objectID', 0, FILTER_VALIDATE_INT );
|
||||
$object_type = Param::get( 'objectType', '', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK );
|
||||
$column_ids = [
|
||||
'post' => 'ID',
|
||||
'term' => 'term_id',
|
||||
'user' => 'ID',
|
||||
];
|
||||
if ( ! in_array( $object_type, [ 'post', 'term', 'user' ], true ) ) {
|
||||
$object_type = 'post';
|
||||
}
|
||||
|
||||
$main = $wpdb->{$object_type . 's'};
|
||||
$meta = $wpdb->{$object_type . 'meta'};
|
||||
|
||||
$query = sprintf( 'select %2$s.%1$s from %2$s inner join %3$s on %2$s.%1$s = %3$s.%4$s_id where ', $column_ids[ $object_type ], $main, $meta, $object_type );
|
||||
if ( 'post' === $object_type ) {
|
||||
$query .= sprintf( '%s.post_status = \'publish\' and ', $main );
|
||||
}
|
||||
$query .= sprintf( '%1$s.meta_key = \'rank_math_focus_keyword\' and ( %1$s.meta_value = %2$s OR %1$s.meta_value like %3$s ) and %1$s.%4$s_id != %5$d', $meta, '%s', '%s', $object_type, $object_id );
|
||||
|
||||
$data = $wpdb->get_row( $wpdb->prepare( $query, $keyword, $wpdb->esc_like( $keyword ) . ',%' ) ); // phpcs:ignore
|
||||
|
||||
$result['isNew'] = empty( $data );
|
||||
|
||||
$this->success( $result );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get link suggestions for the current post.
|
||||
*
|
||||
* @param int|WP_Post $post Current post.
|
||||
* @return array
|
||||
*/
|
||||
public function get_link_suggestions( $post ) {
|
||||
global $pagenow;
|
||||
|
||||
if ( 'post-new.php' === $pagenow ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$output = [];
|
||||
$post = get_post( $post );
|
||||
$args = [
|
||||
'post_type' => $post->post_type,
|
||||
'post__not_in' => [ $post->ID ],
|
||||
'posts_per_page' => 5,
|
||||
'meta_key' => 'rank_math_pillar_content',
|
||||
'meta_value' => 'on',
|
||||
'tax_query' => [ 'relation' => 'OR' ],
|
||||
];
|
||||
|
||||
$taxonomies = Helper::get_object_taxonomies( $post, 'names' );
|
||||
$taxonomies = array_filter( $taxonomies, [ $this, 'is_taxonomy_allowed' ] );
|
||||
|
||||
foreach ( $taxonomies as $taxonomy ) {
|
||||
$this->set_term_query( $args, $post->ID, $taxonomy );
|
||||
}
|
||||
|
||||
$posts = get_posts( $args );
|
||||
foreach ( $posts as $related_post ) {
|
||||
$item = [
|
||||
'title' => get_the_title( $related_post->ID ),
|
||||
'url' => get_permalink( $related_post->ID ),
|
||||
'post_id' => $related_post->ID,
|
||||
'focus_keywords' => get_post_meta( $related_post->ID, 'rank_math_focus_keyword', true ),
|
||||
];
|
||||
|
||||
$item['focus_keywords'] = empty( $item['focus_keywords'] ) ? [] : explode( ',', $item['focus_keywords'] );
|
||||
|
||||
$output[] = $item;
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is taxonomy allowed
|
||||
*
|
||||
* @param string $taxonomy Taxonomy to check.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function is_taxonomy_allowed( $taxonomy ) {
|
||||
$exclude_taxonomies = [ 'post_format', 'product_shipping_class' ];
|
||||
if ( Str::starts_with( 'pa_', $taxonomy ) || in_array( $taxonomy, $exclude_taxonomies, true ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set term query.
|
||||
*
|
||||
* @param array $query Array of query.
|
||||
* @param int $post_id Post ID to get terms from.
|
||||
* @param string $taxonomy Taxonomy to get terms for.
|
||||
*/
|
||||
private function set_term_query( &$query, $post_id, $taxonomy ) {
|
||||
$terms = wp_get_post_terms( $post_id, $taxonomy, [ 'fields' => 'ids' ] );
|
||||
if ( empty( $terms ) || is_wp_error( $terms ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$query['tax_query'][] = [
|
||||
'taxonomy' => $taxonomy,
|
||||
'field' => 'term_id',
|
||||
'terms' => $terms,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Output link suggestions.
|
||||
*
|
||||
* @param array $suggestions Link items.
|
||||
* @return string
|
||||
*/
|
||||
public function get_link_suggestions_html( $suggestions ) {
|
||||
$output = '<div class="rank-math-link-suggestions-content" data-count="' . count( $suggestions ) . '">';
|
||||
|
||||
$is_use_fk = 'focus_keywords' === Helper::get_settings( 'titles.pt_' . get_post_type() . '_ls_use_fk' );
|
||||
foreach ( $suggestions as $suggestion ) {
|
||||
$label = $suggestion['title'];
|
||||
if ( $is_use_fk && ! empty( $suggestion['focus_keywords'] ) ) {
|
||||
$label = $suggestion['focus_keywords'][0];
|
||||
}
|
||||
|
||||
$output .= sprintf(
|
||||
'<div class="suggestion-item">
|
||||
<div class="suggestion-actions">
|
||||
<button class="dashicons dashicons-clipboard suggestion-copy" title="%5$s" data-clipboard-text="%2$s"></button>
|
||||
<button class="dashicons dashicons-admin-links suggestion-insert" title="%6$s" data-url="%2$s" data-text="%7$s"></button>
|
||||
</div>
|
||||
<span class="suggestion-title" data-fk=\'%1$s\'><a target="_blank" href="%2$s" title="%3$s">%4$s</a></span>
|
||||
</div>',
|
||||
esc_attr( wp_json_encode( $suggestion['focus_keywords'] ) ),
|
||||
$suggestion['url'],
|
||||
$suggestion['title'],
|
||||
$label,
|
||||
esc_attr__( 'Copy Link URL to Clipboard', 'rank-math' ),
|
||||
esc_attr__( 'Insert Link in Content', 'rank-math' ),
|
||||
esc_attr( $label )
|
||||
);
|
||||
}
|
||||
|
||||
$output .= '</div>';
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the is_configured value.
|
||||
*
|
||||
* @param int $object_id The ID of the current object.
|
||||
* @param string $cmb_id The current box ID.
|
||||
*/
|
||||
public function update_is_configured_value( $object_id, $cmb_id ) {
|
||||
if ( 0 !== strpos( $cmb_id, 'rank_math' ) && 0 !== strpos( $cmb_id, 'rank-math' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
Helper::is_configured( true );
|
||||
}
|
||||
|
||||
/**
|
||||
* Deactivate plugin.
|
||||
*/
|
||||
public function deactivate_plugins() {
|
||||
check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
|
||||
if ( ! current_user_can( 'activate_plugins' ) ) {
|
||||
$this->error( esc_html__( 'You are not authorized to perform this action.', 'rank-math' ) );
|
||||
}
|
||||
$plugin = Param::post( 'plugin', '', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK );
|
||||
if ( 'all' !== $plugin ) {
|
||||
deactivate_plugins( $plugin );
|
||||
die( '1' );
|
||||
}
|
||||
|
||||
Importers\Detector::deactivate_all();
|
||||
die( '1' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Action Scheduler: exclude our actions from the past-due checker.
|
||||
* Since this is a *_pre hook, it replaces the original checker.
|
||||
*
|
||||
* We first do the same check as what ActionScheduler_AdminView->check_pastdue_actions() does,
|
||||
* but then we also count how many of those past-due actions are ours.
|
||||
*
|
||||
* @param null $null Null value.
|
||||
*/
|
||||
public function as_exclude_pastdue_actions( $null ) {
|
||||
$query_args = [
|
||||
'date' => as_get_datetime_object( time() - DAY_IN_SECONDS ),
|
||||
'status' => \ActionScheduler_Store::STATUS_PENDING,
|
||||
'per_page' => 1,
|
||||
];
|
||||
|
||||
$store = \ActionScheduler_Store::instance();
|
||||
$num_pastdue_actions = (int) $store->query_actions( $query_args, 'count' );
|
||||
|
||||
if ( 0 !== $num_pastdue_actions ) {
|
||||
$query_args['group'] = 'rank-math';
|
||||
$num_pastdue_rm_actions = (int) $store->query_actions( $query_args, 'count' );
|
||||
|
||||
$num_pastdue_actions -= $num_pastdue_rm_actions;
|
||||
}
|
||||
|
||||
$threshold_seconds = (int) apply_filters( 'action_scheduler_pastdue_actions_seconds', DAY_IN_SECONDS );
|
||||
$threshhold_min = (int) apply_filters( 'action_scheduler_pastdue_actions_min', 1 );
|
||||
|
||||
$check = ( $num_pastdue_actions >= $threshhold_min );
|
||||
return (bool) apply_filters( 'action_scheduler_pastdue_actions_check', $check, $num_pastdue_actions, $threshold_seconds, $threshhold_min );
|
||||
}
|
||||
|
||||
/**
|
||||
* Check and print the Anniversary icon in the header of Rank Math's setting pages.
|
||||
*/
|
||||
public static function offer_icon() {
|
||||
if ( ! current_user_can( 'manage_options' ) || defined( 'RANK_MATH_PRO_FILE' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Holiday Season related variables.
|
||||
$time = time();
|
||||
$current_year = 2022;
|
||||
$anniversary_start_time = gmmktime( 17, 00, 00, 10, 30, $current_year ); // 30 Oct.
|
||||
$anniversary_end_time = gmmktime( 17, 00, 00, 11, 30, $current_year ); // 30 Nov.
|
||||
$holiday_start_time = gmmktime( 17, 00, 00, 12, 20, $current_year ); // 20 Dec.
|
||||
$holiday_end_time = gmmktime( 17, 00, 00, 01, 07, 2023 ); // 07 Jan.
|
||||
|
||||
if (
|
||||
( $time > $anniversary_start_time && $time < $anniversary_end_time ) ||
|
||||
( $time > $holiday_start_time && $time < $holiday_end_time )
|
||||
) { ?>
|
||||
<a href="https://rankmath.com/pricing/?utm_source=Plugin&utm_medium=Header+Offer+Icon&utm_campaign=WP" target="_blank" class="rank-math-tooltip bottom" style="margin-left:5px;">
|
||||
🎉
|
||||
<span><?php esc_attr_e( 'Exclusive Offer!', 'rank-math' ); ?></span>
|
||||
</a>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Code to convert Addiontal Profile URLs from input type text to textarea.
|
||||
*/
|
||||
public function convert_additional_profile_url_to_textarea() {
|
||||
if ( ! Admin_Helper::is_user_edit() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$field_description = wp_kses_post( __( 'Additional Profiles to add in the <code>sameAs</code> Schema property.', 'rank-math' ) );
|
||||
?>
|
||||
<script type="text/javascript">
|
||||
( function( $ ) {
|
||||
$( function() {
|
||||
const twitterWrapper = $( '.user-twitter-wrap' );
|
||||
twitterWrapper.before( '<tr><th><h2 style="margin: 0;">Rank Math SEO</h2></th><td></td></tr>' );
|
||||
|
||||
const additionalProfileField = $( '#additional_profile_urls' );
|
||||
if ( ! additionalProfileField.length ) {
|
||||
return
|
||||
}
|
||||
|
||||
var $txtarea = $( '<textarea />' );
|
||||
$txtarea.attr( 'id', additionalProfileField[0].id );
|
||||
$txtarea.attr( 'name', additionalProfileField[0].name );
|
||||
$txtarea.attr( 'rows', 5 );
|
||||
$txtarea.val( additionalProfileField[0].value.replaceAll( " ", "\n" ) );
|
||||
additionalProfileField.replaceWith( $txtarea );
|
||||
|
||||
$( '<p class="description"><?php echo $field_description; ?></p>' ).insertAfter( $txtarea );
|
||||
} );
|
||||
})(jQuery);
|
||||
</script>
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to replace domain with seo-by-rank-math in translation file.
|
||||
*
|
||||
* @param string|false $file Path to the translation file to load. False if there isn't one.
|
||||
* @param string $handle Name of the script to register a translation domain to.
|
||||
* @param string $domain The text domain.
|
||||
*/
|
||||
public function load_script_translation_file( $file, $handle, $domain ) {
|
||||
if ( 'rank-math' !== $domain ) {
|
||||
return $file;
|
||||
}
|
||||
|
||||
$data = explode( '/', $file );
|
||||
$data[ count( $data ) - 1 ] = preg_replace( '/rank-math/', 'seo-by-rank-math', $data[ count( $data ) - 1 ], 1 );
|
||||
return implode( '/', $data );
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,278 @@
|
||||
<?php
|
||||
/**
|
||||
* The RankMath API.
|
||||
*
|
||||
* @since 1.5.0
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Admin
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Admin;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Api class.
|
||||
*/
|
||||
class Api {
|
||||
|
||||
/**
|
||||
* Rank Math SEO Checkup API.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $api_url = 'https://rankmath.com/wp-json/rankmath/v1/';
|
||||
|
||||
/**
|
||||
* Was the last request successful.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected $is_success = false;
|
||||
|
||||
/**
|
||||
* Last error.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $last_error = '';
|
||||
|
||||
/**
|
||||
* Last response.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $last_response = [];
|
||||
|
||||
/**
|
||||
* Last response header code.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $last_code = 0;
|
||||
|
||||
/**
|
||||
* User agent.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $user_agent = '';
|
||||
|
||||
/**
|
||||
* Is blocking.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected $is_blocking = true;
|
||||
|
||||
/**
|
||||
* Main instance
|
||||
*
|
||||
* Ensure only one instance is loaded or can be loaded.
|
||||
*
|
||||
* @return Api
|
||||
*/
|
||||
public static function get() {
|
||||
static $instance;
|
||||
|
||||
if ( is_null( $instance ) && ! ( $instance instanceof Api ) ) {
|
||||
$instance = new Api();
|
||||
$instance->is_blocking = true;
|
||||
$instance->user_agent = 'RankMath/' . md5( esc_url( home_url( '/' ) ) );
|
||||
}
|
||||
|
||||
return $instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Was the last request successful?
|
||||
*
|
||||
* @return bool True for success, false for failure
|
||||
*/
|
||||
public function is_success() {
|
||||
return $this->is_success;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the last error returned by either the network transport, or by the API.
|
||||
* If something didn't work, this should contain the string describing the problem.
|
||||
*
|
||||
* @return array|false describing the error
|
||||
*/
|
||||
public function get_error() {
|
||||
return $this->last_error ? $this->last_error : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an array containing the HTTP headers and the body of the API response.
|
||||
*
|
||||
* @return array Assoc array with keys 'headers' and 'body'
|
||||
*/
|
||||
public function get_response() {
|
||||
return $this->last_response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove registration data and disconnect from RankMath.com.
|
||||
*
|
||||
* @param string $username Username.
|
||||
* @param string $api_key Api key.
|
||||
*/
|
||||
public function deactivate_site( $username, $api_key ) {
|
||||
$this->is_blocking = false;
|
||||
$data = wp_json_encode(
|
||||
[
|
||||
'username' => $username,
|
||||
'api_key' => $api_key,
|
||||
'site_url' => esc_url( home_url() ),
|
||||
]
|
||||
);
|
||||
|
||||
$response = wp_remote_post(
|
||||
RANK_MATH_SITE_URL . '/wp-json/rankmath/v1/deactivateSite',
|
||||
[
|
||||
'body' => $data,
|
||||
'headers' => [
|
||||
'Content-Type' => 'application/json',
|
||||
],
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Make an HTTP GET request - for retrieving data.
|
||||
*
|
||||
* @param string $url URL to do request.
|
||||
* @param array $args Assoc array of arguments (usually your data).
|
||||
* @param int $timeout Timeout limit for request in seconds.
|
||||
*
|
||||
* @return array|false Assoc array of API response, decoded from JSON.
|
||||
*/
|
||||
public function http_get( $url, $args = [], $timeout = 10 ) {
|
||||
return $this->make_request( 'GET', $url, $args, $timeout );
|
||||
}
|
||||
|
||||
/**
|
||||
* Make an HTTP POST request - for creating and updating items.
|
||||
*
|
||||
* @param string $url URL to do request.
|
||||
* @param array $args Assoc array of arguments (usually your data).
|
||||
* @param int $timeout Timeout limit for request in seconds.
|
||||
*
|
||||
* @return array|false Assoc array of API response, decoded from JSON.
|
||||
*/
|
||||
public function http_post( $url, $args = [], $timeout = 10 ) {
|
||||
return $this->make_request( 'POST', $url, $args, $timeout );
|
||||
}
|
||||
|
||||
/**
|
||||
* Make an HTTP PUT request - for creating new items.
|
||||
*
|
||||
* @param string $url URL to do request.
|
||||
* @param array $args Assoc array of arguments (usually your data).
|
||||
* @param int $timeout Timeout limit for request in seconds.
|
||||
*
|
||||
* @return array|false Assoc array of API response, decoded from JSON.
|
||||
*/
|
||||
public function http_put( $url, $args = [], $timeout = 10 ) {
|
||||
return $this->make_request( 'PUT', $url, $args, $timeout );
|
||||
}
|
||||
|
||||
/**
|
||||
* Make an HTTP DELETE request - for deleting data.
|
||||
*
|
||||
* @param string $url URL to do request.
|
||||
* @param array $args Assoc array of arguments (usually your data).
|
||||
* @param int $timeout Timeout limit for request in seconds.
|
||||
*
|
||||
* @return array|false Assoc array of API response, decoded from JSON.
|
||||
*/
|
||||
public function http_delete( $url, $args = [], $timeout = 10 ) {
|
||||
return $this->make_request( 'DELETE', $url, $args, $timeout );
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs the underlying HTTP request. Not very exciting.
|
||||
*
|
||||
* @param string $http_verb The HTTP verb to use: get, post, put, patch, delete.
|
||||
* @param string $url URL to do request.
|
||||
* @param array $args Assoc array of parameters to be passed.
|
||||
* @param int $timeout Timeout limit for request in seconds.
|
||||
*
|
||||
* @return array|false Assoc array of decoded result.
|
||||
*/
|
||||
protected function make_request( $http_verb, $url, $args = [], $timeout = 10 ) {
|
||||
$params = [
|
||||
'timeout' => $timeout,
|
||||
'method' => $http_verb,
|
||||
'user-agent' => $this->user_agent,
|
||||
'blocking' => $this->is_blocking,
|
||||
];
|
||||
|
||||
if ( ! empty( $args ) && is_array( $args ) ) {
|
||||
$params['body'] = $args;
|
||||
}
|
||||
|
||||
$this->reset();
|
||||
$response = wp_remote_request( $this->api_url . $url, $params );
|
||||
$this->determine_success( $response );
|
||||
|
||||
return $this->format_response( $response );
|
||||
}
|
||||
|
||||
/**
|
||||
* Decode the response and format any error messages for debugging
|
||||
*
|
||||
* @param array $response The response from the curl request.
|
||||
*
|
||||
* @return array|false The JSON decoded into an array
|
||||
*/
|
||||
protected function format_response( $response ) {
|
||||
$this->last_response = $response;
|
||||
|
||||
if ( is_wp_error( $response ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( ! empty( $response['body'] ) ) {
|
||||
return json_decode( $response['body'], true );
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the response was successful or a failure. If it failed, store the error.
|
||||
*
|
||||
* @param array $response The response from the curl request.
|
||||
*/
|
||||
protected function determine_success( $response ) {
|
||||
if ( is_wp_error( $response ) ) {
|
||||
$this->last_error = 'WP_Error: ' . $response->get_error_message();
|
||||
return;
|
||||
}
|
||||
|
||||
$this->last_code = wp_remote_retrieve_response_code( $response );
|
||||
if ( in_array( $this->last_code, [ 200, 204 ], true ) ) {
|
||||
$this->is_success = true;
|
||||
return;
|
||||
}
|
||||
|
||||
$this->last_error = 'Unknown error, call getLastResponse() to find out what happened.';
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset request.
|
||||
*/
|
||||
protected function reset() {
|
||||
$this->last_code = 0;
|
||||
$this->last_error = '';
|
||||
$this->is_success = false;
|
||||
$this->is_blocking = true;
|
||||
$this->last_response = [
|
||||
'body' => null,
|
||||
'headers' => null,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,241 @@
|
||||
<?php
|
||||
/**
|
||||
* Ask user to review Rank Math on wp.org, in the meta box after 2 weeks.
|
||||
*
|
||||
* @since 0.9.0
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Admin
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Admin;
|
||||
|
||||
use RankMath\Helper;
|
||||
use RankMath\Traits\Ajax;
|
||||
use RankMath\Traits\Hooker;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Ask_Review class.
|
||||
*/
|
||||
class Ask_Review {
|
||||
|
||||
use Hooker, Ajax;
|
||||
|
||||
/**
|
||||
* Now.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $current_time = '';
|
||||
|
||||
/**
|
||||
* Date of release of version 1.0.57. Turned into a timestamp in the constructor.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $record_date = '2021-02-03 13:00';
|
||||
|
||||
/**
|
||||
* Rank Math plugin install date.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $install_date = '';
|
||||
|
||||
/**
|
||||
* Constructor method.
|
||||
*/
|
||||
public function __construct() {
|
||||
$this->current_time = current_time( 'timestamp' );
|
||||
$this->record_date = strtotime( $this->record_date );
|
||||
$this->install_date = get_option( 'rank_math_install_date' );
|
||||
if ( false === $this->install_date ) {
|
||||
$this->install_date = $this->current_time;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Register hooks.
|
||||
*/
|
||||
public function hooks() {
|
||||
$this->ajax( 'already_reviewed', 'already_reviewed' );
|
||||
|
||||
// Post editor tab.
|
||||
if ( $this->current_time > $this->install_date + ( 10 * DAY_IN_SECONDS ) ) {
|
||||
Helper::add_json( 'showReviewTab', true );
|
||||
}
|
||||
|
||||
// Admin notice.
|
||||
$review_notice_date = $this->get_review_notice_date();
|
||||
if ( $this->current_time > $review_notice_date ) {
|
||||
if ( get_option( 'rank_math_review_notice_added' ) === false && ! Helper::has_notification( 'rank_math_pro_notice' ) ) {
|
||||
$this->add_notice();
|
||||
}
|
||||
|
||||
// Make dismiss button work like the "Maybe later" link.
|
||||
$this->action( 'wp_helpers_notification_dismissed', 'review_notice_after_dismiss' );
|
||||
}
|
||||
|
||||
$this->action( 'admin_footer', 'review_notice_js', 15 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Add inline JS related to the review notice.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function review_notice_js() {
|
||||
if ( ! Helper::has_notification( 'rank_math_review_plugin_notice' ) ) {
|
||||
return;
|
||||
}
|
||||
?>
|
||||
<script>
|
||||
(function( $ ) {
|
||||
$( function() {
|
||||
$('.rank-math-dismiss-review-notice').on( 'click', function(e) {
|
||||
var $this = $(this);
|
||||
|
||||
if ( ! $this.hasClass( 'rank-math-review-action' ) ) {
|
||||
e.preventDefault();
|
||||
}
|
||||
|
||||
if ( $this.hasClass( 'rank-math-maybe-later-action' ) ) {
|
||||
$('#rank_math_review_plugin_notice').find( '.notice-dismiss' ).trigger('click');
|
||||
return false;
|
||||
}
|
||||
|
||||
jQuery.ajax( {
|
||||
url: rankMath.ajaxurl,
|
||||
data: { action: 'rank_math_already_reviewed', security: rankMath.security,
|
||||
},
|
||||
} );
|
||||
|
||||
$('#rank_math_review_plugin_notice').find( '.notice-dismiss' ).trigger('click');
|
||||
});
|
||||
});
|
||||
})(jQuery);
|
||||
</script>
|
||||
<style>
|
||||
#rank_math_review_plugin_notice .rank-math-notice.is-dismissible a,
|
||||
#rank_math_pro_notice .rank-math-notice.is-dismissible a {
|
||||
color: #4f52d4;
|
||||
}
|
||||
#rank_math_review_plugin_notice.is-dismissible,
|
||||
#rank_math_pro_notice.is-dismissible {
|
||||
border-width: 0 0 0 4px;
|
||||
border-left-color: #6668BD;
|
||||
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);
|
||||
padding: 5px 10px 5px 65px;
|
||||
}
|
||||
#rank_math_review_plugin_notice.is-dismissible:before,
|
||||
#rank_math_pro_notice.is-dismissible:before {
|
||||
content: '';
|
||||
width: 50px;
|
||||
height: 100%;
|
||||
background: rgba(102, 104, 189, 0.09);
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
#rank_math_review_plugin_notice.is-dismissible:after,
|
||||
#rank_math_pro_notice.is-dismissible:after {
|
||||
content: url('data:image/svg+xml;charset=UTF-8, <svg viewBox="0 0 462.03 462.03" xmlns="http://www.w3.org/2000/svg" width="20"><g fill="white"><path d="m462 234.84-76.17 3.43 13.43 21-127 81.18-126-52.93-146.26 60.97 10.14 24.34 136.1-56.71 128.57 54 138.69-88.61 13.43 21z"></path><path d="m54.1 312.78 92.18-38.41 4.49 1.89v-54.58h-96.67zm210.9-223.57v235.05l7.26 3 89.43-57.05v-181zm-105.44 190.79 96.67 40.62v-165.19h-96.67z"></path></g></svg>' );
|
||||
padding: 3px;
|
||||
border-radius: 3px;
|
||||
position: absolute;
|
||||
left: 12px;
|
||||
top: 18px;
|
||||
background: linear-gradient(-135deg, #2488e1, #724bb7);
|
||||
width: 23px;
|
||||
height: 23px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
line-height: 1;
|
||||
align-items: center;
|
||||
}
|
||||
</style>
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Add admin notice.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function add_notice() {
|
||||
$message = '<p>';
|
||||
|
||||
// Translators: placeholder is the plugin name.
|
||||
$message .= sprintf( esc_html__( 'Hey, we noticed you\'ve been using %s for more than a week now – that\'s awesome!', 'rank-math' ), '<strong>' . _x( 'Rank Math SEO', 'plugin name inside the review notice', 'rank-math' ) . '</strong>' );
|
||||
$message .= '<br>';
|
||||
|
||||
$message .= esc_html__( 'Could you please do us a BIG favor and give it a rating on WordPress.org to help us spread the word and boost our motivation?', 'rank-math' ) . '</p>
|
||||
<p><strong>Bhanu Ahluwalia</strong><br>' . esc_html__( 'Co-founder of Rank Math', 'rank-math' ) . '</p>
|
||||
<p>
|
||||
<a href="https://wordpress.org/support/plugin/seo-by-rank-math/reviews/?filter=5#new-post" class="rank-math-dismiss-review-notice rank-math-review-action rank-math-review-out" target="_blank" rel="noopener noreferrer"><strong>' . esc_html__( 'Yes, you deserve it', 'rank-math' ) . '</strong></a><br>
|
||||
<a href="#" class="rank-math-dismiss-review-notice rank-math-maybe-later-action">' . esc_html__( 'No, maybe later', 'rank-math' ) . '</a><br>
|
||||
<a href="#" class="rank-math-dismiss-review-notice rank-math-already-reviewed-action">' . esc_html__( 'I already did', 'rank-math' ) . '</a>
|
||||
</p>';
|
||||
|
||||
Helper::add_notification(
|
||||
$message,
|
||||
[
|
||||
'type' => 'info',
|
||||
'id' => 'rank_math_review_plugin_notice',
|
||||
'capability' => 'install_plugins',
|
||||
]
|
||||
);
|
||||
|
||||
update_option( 'rank_math_review_notice_added', '1', false );
|
||||
}
|
||||
|
||||
/**
|
||||
* Set "already reviewed" flag after the user dismisses the notice.
|
||||
*
|
||||
* @param string $notification_id Dismissed notice ID.
|
||||
* @return void
|
||||
*/
|
||||
public function review_notice_after_dismiss( $notification_id ) {
|
||||
if ( 'rank_math_review_plugin_notice' !== $notification_id ) {
|
||||
return;
|
||||
}
|
||||
|
||||
delete_option( 'rank_math_review_notice_date' );
|
||||
delete_option( 'rank_math_review_notice_added' );
|
||||
update_option( 'rank_math_review_notice_delayed', true, false );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get stored notice start date.
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function get_review_notice_date() {
|
||||
$review_notice_date = get_option( 'rank_math_review_notice_date' );
|
||||
if ( false !== $review_notice_date ) {
|
||||
return $review_notice_date;
|
||||
}
|
||||
|
||||
$delay_days = 14;
|
||||
if ( $this->install_date < $this->record_date && ! get_option( 'rank_math_review_notice_delayed' ) ) {
|
||||
$delay_days = wp_rand( 7, 30 );
|
||||
}
|
||||
|
||||
$review_notice_date = $this->current_time + ( $delay_days * DAY_IN_SECONDS );
|
||||
update_option( 'rank_math_review_notice_date', $review_notice_date, false );
|
||||
|
||||
return $review_notice_date;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set "already reviewed" flag.
|
||||
*/
|
||||
public function already_reviewed() {
|
||||
check_ajax_referer( 'rank-math-ajax-nonce', 'security' );
|
||||
$this->has_cap_ajax( 'onpage_general' );
|
||||
update_option( 'rank_math_already_reviewed', current_time( 'timestamp' ) );
|
||||
$this->success( 'success' );
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,281 @@
|
||||
<?php
|
||||
/**
|
||||
* Register all the necessary CSS and JS.
|
||||
*
|
||||
* @since 0.9.0
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Admin
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Admin;
|
||||
|
||||
use RankMath\KB;
|
||||
use RankMath\Helper;
|
||||
use RankMath\Runner;
|
||||
use RankMath\Traits\Hooker;
|
||||
use RankMath\Google\Console;
|
||||
use RankMath\Google\Analytics;
|
||||
use RankMath\Analytics\Url_Inspection;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Assets class.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class Assets implements Runner {
|
||||
|
||||
use Hooker;
|
||||
|
||||
/**
|
||||
* Prefix for the enqueue handles.
|
||||
*/
|
||||
const PREFIX = 'rank-math-';
|
||||
|
||||
/**
|
||||
* Register hooks.
|
||||
*/
|
||||
public function hooks() {
|
||||
$this->action( 'admin_enqueue_scripts', 'register' );
|
||||
$this->action( 'admin_enqueue_scripts', 'enqueue' );
|
||||
$this->action( 'admin_enqueue_scripts', 'overwrite_wplink', 99 );
|
||||
|
||||
if ( 'elementor' === \RankMath\Helpers\Param::get( 'action' ) ) {
|
||||
$this->action( 'elementor/editor/before_enqueue_scripts', 'register' );
|
||||
$this->action( 'elementor/editor/before_enqueue_scripts', 'enqueue' );
|
||||
$this->action( 'elementor/editor/before_enqueue_scripts', 'overwrite_wplink', 99 );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Register styles and scripts.
|
||||
*/
|
||||
public function register() {
|
||||
$js = rank_math()->plugin_url() . 'assets/admin/js/';
|
||||
$css = rank_math()->plugin_url() . 'assets/admin/css/';
|
||||
$vendor = rank_math()->plugin_url() . 'assets/vendor/';
|
||||
|
||||
// Styles.
|
||||
wp_register_style( self::PREFIX . 'common', $css . 'common.css', null, rank_math()->version );
|
||||
wp_register_style( self::PREFIX . 'cmb2', $css . 'cmb2.css', null, rank_math()->version );
|
||||
wp_register_style( self::PREFIX . 'dashboard', $css . 'dashboard.css', [ 'rank-math-common', 'wp-components' ], rank_math()->version );
|
||||
wp_register_style( self::PREFIX . 'dashboard-widget', $css . 'dashboard-widget.css', null, rank_math()->version );
|
||||
|
||||
// Scripts.
|
||||
wp_register_script( self::PREFIX . 'common', $js . 'common.js', [ 'jquery', 'wp-i18n', 'lodash' ], rank_math()->version, true );
|
||||
wp_register_script( self::PREFIX . 'dashboard', $js . 'dashboard.js', [ 'jquery', 'clipboard', 'lodash', 'wp-components', 'wp-element' ], rank_math()->version, true );
|
||||
|
||||
// Select2.
|
||||
wp_register_style( 'select2-rm', $vendor . 'select2/select2.min.css', null, '4.0.6-rc.1' );
|
||||
wp_register_script( 'select2-rm', $vendor . 'select2/select2.min.js', null, '4.0.6-rc.1', true );
|
||||
|
||||
// Inline script for core admin page Settings > Permalinks.
|
||||
wp_register_script( self::PREFIX . 'core-permalink-settings', '' ); // phpcs:ignore
|
||||
wp_add_inline_script( self::PREFIX . 'core-permalink-settings', $this->get_permalinks_inline_script() );
|
||||
|
||||
if ( ! wp_script_is( 'wp-hooks', 'registered' ) ) {
|
||||
wp_register_script( 'wp-hooks', rank_math()->plugin_url() . 'assets/vendor/hooks.js', [], rank_math()->version, true );
|
||||
}
|
||||
|
||||
if ( ! wp_script_is( 'wp-wordcount', 'registered' ) ) {
|
||||
wp_register_script( 'wp-wordcount', rank_math()->plugin_url() . 'assets/vendor/wordcount.js', [], rank_math()->version, true );
|
||||
}
|
||||
|
||||
if ( ! wp_script_is( 'wp-autop', 'registered' ) ) {
|
||||
wp_register_script( 'wp-autop', rank_math()->plugin_url() . 'assets/vendor/autop.js', [], rank_math()->version, true );
|
||||
}
|
||||
|
||||
if ( ! wp_script_is( 'wp-url', 'registered' ) ) {
|
||||
wp_register_script( 'wp-url', rank_math()->plugin_url() . 'assets/vendor/url.js', [], rank_math()->version, true );
|
||||
}
|
||||
|
||||
if ( ! wp_script_is( 'wp-i18n', 'registered' ) ) {
|
||||
wp_register_script( 'wp-i18n', rank_math()->plugin_url() . 'assets/vendor/i18n.js', [], rank_math()->version, true );
|
||||
}
|
||||
|
||||
if ( ! wp_script_is( 'clipboard', 'registered' ) ) {
|
||||
wp_register_script( 'clipboard', rank_math()->plugin_url() . 'assets/vendor/clipboard.min.js', [], rank_math()->version, true );
|
||||
}
|
||||
|
||||
if ( ! wp_script_is( 'lodash', 'registered' ) ) {
|
||||
wp_register_script( 'lodash', rank_math()->plugin_url() . 'assets/vendor/lodash.js', [], rank_math()->version );
|
||||
wp_add_inline_script( 'lodash', 'window.lodash = _.noConflict();' );
|
||||
}
|
||||
|
||||
Helper::add_json(
|
||||
'api',
|
||||
[
|
||||
'root' => esc_url_raw( get_rest_url() ),
|
||||
'nonce' => ( wp_installing() && ! is_multisite() ) ? '' : wp_create_nonce( 'wp_rest' ),
|
||||
]
|
||||
);
|
||||
|
||||
Helper::add_json(
|
||||
'keywordsApi',
|
||||
[
|
||||
'url' => 'https://api.rankmath.com/ltkw/v1/',
|
||||
]
|
||||
);
|
||||
|
||||
Helper::add_json(
|
||||
'links',
|
||||
KB::get_links()
|
||||
);
|
||||
|
||||
Helper::add_json(
|
||||
'validationl10n',
|
||||
[
|
||||
'regexErrorDefault' => __( 'Please use the correct format.', 'rank-math' ),
|
||||
'requiredErrorDefault' => __( 'This field is required.', 'rank-math' ),
|
||||
'emailErrorDefault' => __( 'Please enter a valid email address.', 'rank-math' ),
|
||||
'urlErrorDefault' => __( 'Please enter a valid URL.', 'rank-math' ),
|
||||
]
|
||||
);
|
||||
|
||||
Helper::add_json( 'capitalizeTitle', Helper::get_settings( 'titles.capitalize_titles' ) );
|
||||
|
||||
Helper::add_json( 'isConsoleConnected', Console::is_console_connected() );
|
||||
Helper::add_json( 'isAnalyticsConnected', Analytics::is_analytics_connected() );
|
||||
Helper::add_json( 'isUrlInspectionEnabled', Url_Inspection::is_enabled() );
|
||||
|
||||
/**
|
||||
* Allow other plugins to register/deregister admin styles or scripts after plugin assets.
|
||||
*/
|
||||
$this->do_action( 'admin/register_scripts' );
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueue styles and scripts.
|
||||
*/
|
||||
public function enqueue() {
|
||||
$screen = get_current_screen();
|
||||
|
||||
if ( 'dashboard' === $screen->id ) {
|
||||
wp_enqueue_style( self::PREFIX . 'dashboard-widget' );
|
||||
wp_enqueue_script( self::PREFIX . 'dashboard' );
|
||||
}
|
||||
|
||||
// Our screens only.
|
||||
if ( ! in_array( $screen->taxonomy, Helper::get_allowed_taxonomies(), true ) && ! in_array( $screen->id, $this->get_admin_screen_ids(), true ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Add thank you.
|
||||
$this->filter( 'admin_footer_text', 'admin_footer_text' );
|
||||
|
||||
/**
|
||||
* Allow other plugins to enqueue/dequeue admin styles or scripts after plugin assets.
|
||||
*/
|
||||
$this->do_action( 'admin/enqueue_scripts' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Add footer credit on admin pages.
|
||||
*
|
||||
* @param string $text Default text for admin footer.
|
||||
* @return string
|
||||
*/
|
||||
public function admin_footer_text( $text ) {
|
||||
/* translators: plugin url */
|
||||
return Helper::is_whitelabel() ? $text : sprintf( wp_kses_post( __( 'Thank you for using <a href="%s" target="_blank">Rank Math</a>', 'rank-math' ) ), KB::get( 'seo-suite', 'Admin Footer Text' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Overwrite wplink script file.
|
||||
* Rank Math adds new options in the link popup when editing a post.
|
||||
*/
|
||||
public function overwrite_wplink() {
|
||||
|
||||
wp_deregister_script( 'wplink' );
|
||||
wp_register_script( 'wplink', rank_math()->plugin_url() . 'assets/admin/js/wplink.js', [ 'jquery', 'wp-a11y' ], rank_math()->version, true );
|
||||
|
||||
wp_localize_script(
|
||||
'wplink',
|
||||
'wpLinkL10n',
|
||||
[
|
||||
'title' => esc_html__( 'Insert/edit link', 'rank-math' ),
|
||||
'update' => esc_html__( 'Update', 'rank-math' ),
|
||||
'save' => esc_html__( 'Add Link', 'rank-math' ),
|
||||
'noTitle' => esc_html__( '(no title)', 'rank-math' ),
|
||||
'noMatchesFound' => esc_html__( 'No matches found.', 'rank-math' ),
|
||||
'linkSelected' => esc_html__( 'Link selected.', 'rank-math' ),
|
||||
'linkInserted' => esc_html__( 'Link inserted.', 'rank-math' ),
|
||||
'relCheckbox' => __( 'Add <code>rel="nofollow"</code>', 'rank-math' ),
|
||||
'sponsoredCheckbox' => __( 'Add <code>rel="sponsored"</code>', 'rank-math' ),
|
||||
'linkTitle' => esc_html__( 'Link Title', 'rank-math' ),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueues styles.
|
||||
*
|
||||
* @param string $style Name of the style.
|
||||
*/
|
||||
public function enqueue_style( $style ) {
|
||||
wp_enqueue_style( self::PREFIX . $style );
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueues scripts.
|
||||
*
|
||||
* @param string $script Name of the script.
|
||||
*/
|
||||
public function enqueue_script( $script ) {
|
||||
wp_enqueue_script( self::PREFIX . $script );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get admin screen ids.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function get_admin_screen_ids() {
|
||||
$pages = [
|
||||
'toplevel_page_rank-math',
|
||||
'rank-math_page_rank-math-role-manager',
|
||||
'rank-math_page_rank-math-seo-analysis',
|
||||
'rank-math_page_rank-math-404-monitor',
|
||||
'rank-math_page_rank-math-redirections',
|
||||
'rank-math_page_rank-math-link-builder',
|
||||
'rank-math_page_rank-math-analytics',
|
||||
'rank-math_page_rank-math-import-export',
|
||||
'rank-math_page_rank-math-help',
|
||||
'user-edit',
|
||||
'profile',
|
||||
'rank_math_schema',
|
||||
];
|
||||
|
||||
return array_merge( $pages, Helper::get_allowed_post_types() );
|
||||
}
|
||||
|
||||
/**
|
||||
* Inline script to warn the user about the risks of changing the permalinks on a live site.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function get_permalinks_inline_script() {
|
||||
// Don't add the script if site is set to noindex.
|
||||
if ( ! get_option( 'blog_public' ) ) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return "jQuery( window ).load( function() {
|
||||
var noticeShown = false;
|
||||
var showNotice = function() {
|
||||
if ( noticeShown ) {
|
||||
return true;
|
||||
}
|
||||
jQuery( '.rank-math-notice-permalinks-warning' ).removeClass( 'hidden' ).insertBefore( 'p.submit' );
|
||||
noticeShown = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
jQuery( '.available-structure-tags button' ).on( 'click', showNotice );
|
||||
jQuery( 'input[type=text], input[type=radio]' ).on( 'focus change', showNotice );
|
||||
} );";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
<?php
|
||||
/**
|
||||
* The admin post columns functionality.
|
||||
*
|
||||
* @since 1.0.212
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Admin
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Admin;
|
||||
|
||||
use RankMath\Helper;
|
||||
use RankMath\Helpers\Param;
|
||||
use RankMath\Helpers\Url;
|
||||
use RankMath\Runner;
|
||||
use RankMath\Traits\Hooker;
|
||||
use RankMath\Admin\Admin_Helper;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Post_Columns class.
|
||||
*/
|
||||
class Bulk_Actions implements Runner {
|
||||
|
||||
use Hooker;
|
||||
|
||||
/**
|
||||
* SEO data.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $data = [];
|
||||
|
||||
/**
|
||||
* Register hooks.
|
||||
*/
|
||||
public function hooks() {
|
||||
$this->action( 'current_screen', 'init' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Intialize.
|
||||
*/
|
||||
public function init() {
|
||||
if ( ! Helper::has_cap( 'onpage_general' ) || ! $this->can_add() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->register_post_columns();
|
||||
$this->action( 'admin_enqueue_scripts', 'enqueue' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Register post column hooks.
|
||||
*/
|
||||
private function register_post_columns() {
|
||||
$post_types = Helper::get_allowed_post_types();
|
||||
foreach ( $post_types as $post_type ) {
|
||||
$this->filter( "bulk_actions-edit-{$post_type}", 'post_bulk_actions' );
|
||||
}
|
||||
|
||||
$taxonomies = Helper::get_accessible_taxonomies();
|
||||
unset( $taxonomies['post_format'] );
|
||||
$taxonomies = wp_list_pluck( $taxonomies, 'label', 'name' );
|
||||
foreach ( $taxonomies as $taxonomy => $label ) {
|
||||
$this->filter( "bulk_actions-edit-{$taxonomy}", 'post_bulk_actions' );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add bulk actions for applicable posts, pages, CPTs.
|
||||
*
|
||||
* @param array $actions Actions.
|
||||
* @return array New actions.
|
||||
*/
|
||||
public function post_bulk_actions( $actions ) {
|
||||
$new_actions = [ 'rank_math_options' => __( '↓ Rank Math', 'rank-math' ) ];
|
||||
|
||||
if ( Helper::has_cap( 'onpage_advanced' ) ) {
|
||||
$new_actions['rank_math_bulk_robots_noindex'] = __( 'Set to noindex', 'rank-math' );
|
||||
$new_actions['rank_math_bulk_robots_index'] = __( 'Set to index', 'rank-math' );
|
||||
$new_actions['rank_math_bulk_robots_nofollow'] = __( 'Set to nofollow', 'rank-math' );
|
||||
$new_actions['rank_math_bulk_robots_follow'] = __( 'Set to follow', 'rank-math' );
|
||||
$new_actions['rank_math_bulk_remove_canonical'] = __( 'Remove custom canonical URL', 'rank-math' );
|
||||
|
||||
if ( Helper::is_module_active( 'redirections' ) && Helper::has_cap( 'redirections' ) ) {
|
||||
$new_actions['rank_math_bulk_redirect'] = __( 'Redirect', 'rank-math' );
|
||||
$new_actions['rank_math_bulk_stop_redirect'] = __( 'Remove redirection', 'rank-math' );
|
||||
}
|
||||
}
|
||||
|
||||
if ( Helper::is_module_active( 'rich-snippet' ) && Helper::has_cap( 'onpage_snippet' ) ) {
|
||||
$new_actions['rank_math_bulk_schema_none'] = __( 'Set Schema: None', 'rank-math' );
|
||||
$post_type = Param::get( 'post_type', get_post_type() );
|
||||
$post_type_default = Helper::get_settings( 'titles.pt_' . $post_type . '_default_rich_snippet' );
|
||||
|
||||
if ( $post_type_default ) {
|
||||
// Translators: placeholder is the default Schema type setting.
|
||||
$new_actions['rank_math_bulk_schema_default'] = sprintf( __( 'Set Schema: Default (%s)', 'rank-math' ), $post_type_default );
|
||||
}
|
||||
}
|
||||
|
||||
if ( is_array( $actions ) && count( $new_actions ) > 1 ) {
|
||||
return array_merge( $actions, $new_actions );
|
||||
}
|
||||
|
||||
return $actions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueue styles and scripts.
|
||||
*/
|
||||
public function enqueue() {
|
||||
$screen = get_current_screen();
|
||||
wp_enqueue_style( 'rank-math-post-bulk-edit', rank_math()->plugin_url() . 'assets/admin/css/post-list.css', [ 'wp-components' ], rank_math()->version );
|
||||
|
||||
$allow_editing = Helper::get_settings( 'titles.pt_' . $screen->post_type . '_bulk_editing', true );
|
||||
if ( ! $allow_editing || 'readonly' === $allow_editing ) {
|
||||
return;
|
||||
}
|
||||
|
||||
wp_enqueue_script( 'rank-math-post-bulk-edit', rank_math()->plugin_url() . 'assets/admin/js/post-list.js', [ 'lodash', 'wp-element', 'wp-components' ], rank_math()->version, true );
|
||||
Helper::add_json( 'isUserRegistered', Helper::is_site_connected() );
|
||||
Helper::add_json( 'contentAICredits', Helper::get_content_ai_credits() );
|
||||
Helper::add_json( 'contentAIPlan', Helper::get_content_ai_plan() );
|
||||
Helper::add_json( 'isProActive', defined( 'RANK_MATH_PRO_FILE' ) );
|
||||
Helper::add_json( 'connectSiteUrl', Admin_Helper::get_activate_url( Url::get_current_url() ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether to add Bulk actions on the page.
|
||||
*/
|
||||
private function can_add() {
|
||||
global $pagenow;
|
||||
if ( 'edit-tags.php' === $pagenow ) {
|
||||
return Helper::get_settings( 'titles.tax_' . Param::get( 'taxonomy' ) . '_add_meta_box' );
|
||||
}
|
||||
|
||||
if ( Admin_Helper::is_post_list() || Admin_Helper::is_media_library() ) {
|
||||
$screen = get_current_screen();
|
||||
|
||||
$allowed_post_types = Helper::get_allowed_post_types();
|
||||
$allowed_post_types[] = 'attachment';
|
||||
|
||||
return in_array( $screen->post_type, $allowed_post_types, true );
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,290 @@
|
||||
<?php
|
||||
/**
|
||||
* The CMB2 fields for the plugin.
|
||||
*
|
||||
* @since 0.9.0
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Admin
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Admin;
|
||||
|
||||
use RankMath\Runner;
|
||||
use RankMath\Traits\Hooker;
|
||||
use RankMath\Admin\Admin_Helper;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* CMB2_Fields class.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class CMB2_Fields implements Runner {
|
||||
|
||||
use Hooker;
|
||||
|
||||
/**
|
||||
* Register hooks.
|
||||
*/
|
||||
public function hooks() {
|
||||
if ( ! has_action( 'cmb2_render_switch' ) ) {
|
||||
$this->action( 'cmb2_render_switch', 'render_switch', 10, 5 );
|
||||
}
|
||||
|
||||
if ( ! has_action( 'cmb2_render_notice' ) ) {
|
||||
$this->action( 'cmb2_render_notice', 'render_notice' );
|
||||
}
|
||||
|
||||
if ( ! has_action( 'cmb2_render_address' ) ) {
|
||||
$this->action( 'cmb2_render_address', 'render_address', 10, 5 );
|
||||
}
|
||||
|
||||
if ( ! has_action( 'cmb2_render_advanced_robots' ) ) {
|
||||
$this->action( 'cmb2_render_advanced_robots', 'render_advanced_robots', 10, 5 );
|
||||
}
|
||||
|
||||
if ( ! has_action( 'cmb2_render_toggle' ) ) {
|
||||
$this->action( 'cmb2_render_toggle', 'render_toggle', 10, 5 );
|
||||
}
|
||||
|
||||
$this->filter( 'cmb2_sanitize_toggle', 'sanitize_toggle', 10, 2 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Sanitize toggle field.
|
||||
*
|
||||
* @param string $override_value Sanitization override value to return.
|
||||
* @param string $value The field value.
|
||||
*/
|
||||
public function sanitize_toggle( $override_value, $value ) {
|
||||
return is_null( $value ) ? 'off' : $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render toggle field.
|
||||
*
|
||||
* @param array $field The passed in `CMB2_Field` object.
|
||||
* @param mixed $escaped_value The value of this field escaped
|
||||
* It defaults to `sanitize_text_field`.
|
||||
* If you need the unescaped value, you can access it
|
||||
* via `$field->value()`.
|
||||
* @param int $object_id The ID of the current object.
|
||||
* @param string $object_type The type of object you are working with.
|
||||
* Most commonly, `post` (this applies to all post-types),
|
||||
* but could also be `comment`, `user` or `options-page`.
|
||||
* @param object $field_type_object This `CMB2_Types` object.
|
||||
*/
|
||||
public function render_toggle( $field, $escaped_value, $object_id, $object_type, $field_type_object ) {
|
||||
$field_name = $field->_name();
|
||||
$active_value = ! empty( $field->args( 'active_value' ) ) ? $field->args( 'active_value' ) : 'on';
|
||||
$escaped_value = ! empty( $field->args( 'force_enable' ) ) ? 'on' : $escaped_value;
|
||||
|
||||
$args = [
|
||||
'type' => 'checkbox',
|
||||
'id' => $field_name,
|
||||
'name' => $field_name,
|
||||
'desc' => '',
|
||||
'value' => $active_value,
|
||||
'disabled' => isset( $field->args['disabled'] ) ? $field->args['disabled'] : false,
|
||||
];
|
||||
|
||||
if ( $escaped_value === $active_value ) {
|
||||
$args['checked'] = 'checked';
|
||||
}
|
||||
|
||||
echo '<label class="cmb2-toggle">';
|
||||
echo $field_type_object->input( $args );
|
||||
echo '<span class="cmb2-slider">';
|
||||
echo '<svg width="3" height="8" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2 6" class="toggle_on" role="img" aria-hidden="true" focusable="false"><path d="M0 0h2v6H0z"></path></svg>';
|
||||
echo '<svg width="8" height="8" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6 6" class="toggle_off" role="img" aria-hidden="true" focusable="false"><path d="M3 1.5c.8 0 1.5.7 1.5 1.5S3.8 4.5 3 4.5 1.5 3.8 1.5 3 2.2 1.5 3 1.5M3 0C1.3 0 0 1.3 0 3s1.3 3 3 3 3-1.3 3-3-1.3-3-3-3z"></path></svg>';
|
||||
echo '</span>';
|
||||
echo '</label>';
|
||||
$field_type_object->_desc( true, true );
|
||||
}
|
||||
|
||||
/**
|
||||
* Render switch field.
|
||||
*
|
||||
* @param array $field The passed in `CMB2_Field` object.
|
||||
* @param mixed $escaped_value The value of this field escaped
|
||||
* It defaults to `sanitize_text_field`.
|
||||
* If you need the unescaped value, you can access it
|
||||
* via `$field->value()`.
|
||||
* @param int $object_id The ID of the current object.
|
||||
* @param string $object_type The type of object you are working with.
|
||||
* Most commonly, `post` (this applies to all post-types),
|
||||
* but could also be `comment`, `user` or `options-page`.
|
||||
* @param object $field_type_object This `CMB2_Types` object.
|
||||
*/
|
||||
public function render_switch( $field, $escaped_value, $object_id, $object_type, $field_type_object ) {
|
||||
|
||||
if ( empty( $field->args['options'] ) ) {
|
||||
$field->args['options'] = [
|
||||
'off' => esc_html( $field->get_string( 'off', __( 'Off', 'rank-math' ) ) ),
|
||||
'on' => esc_html( $field->get_string( 'on', __( 'On', 'rank-math' ) ) ),
|
||||
];
|
||||
}
|
||||
$field->set_options();
|
||||
|
||||
echo $field_type_object->radio_inline();
|
||||
}
|
||||
|
||||
/**
|
||||
* Render notices
|
||||
*
|
||||
* @param array $field The passed in `CMB2_Field` object.
|
||||
*/
|
||||
public function render_notice( $field ) {
|
||||
$hash = [
|
||||
'error' => 'notice notice-alt notice-error error inline rank-math-notice',
|
||||
'info' => 'notice notice-alt notice-info info inline rank-math-notice',
|
||||
'warning' => 'notice notice-alt notice-warning warning inline rank-math-notice',
|
||||
];
|
||||
|
||||
echo '<div class="' . $hash[ $field->args( 'what' ) ] . '"><p>' . $field->args( 'content' ) . '</p></div>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Render address field.
|
||||
*
|
||||
* @param array $field The passed in `CMB2_Field` object.
|
||||
* @param mixed $escaped_value The value of this field escaped
|
||||
* It defaults to `sanitize_text_field`.
|
||||
* If you need the unescaped value, you can access it
|
||||
* via `$field->value()`.
|
||||
* @param int $object_id The ID of the current object.
|
||||
* @param string $object_type The type of object you are working with.
|
||||
* Most commonly, `post` (this applies to all post-types),
|
||||
* but could also be `comment`, `user` or `options-page`.
|
||||
* @param object $field_type_object This `CMB2_Types` object.
|
||||
*/
|
||||
public function render_address( $field, $escaped_value, $object_id, $object_type, $field_type_object ) {
|
||||
|
||||
// Make sure we assign each part of the value we need.
|
||||
$value = wp_parse_args(
|
||||
$escaped_value,
|
||||
[
|
||||
'streetAddress' => '',
|
||||
'addressLocality' => '',
|
||||
'addressRegion' => '',
|
||||
'postalCode' => '',
|
||||
'addressCountry' => '',
|
||||
]
|
||||
);
|
||||
|
||||
$strings = [
|
||||
'streetAddress' => 'Street Address',
|
||||
'addressLocality' => 'Locality',
|
||||
'addressRegion' => 'Region',
|
||||
'postalCode' => 'Postal Code',
|
||||
'addressCountry' => 'Country',
|
||||
];
|
||||
|
||||
foreach ( array_keys( $value ) as $id ) :
|
||||
echo '<div class="cmb-address-field">' . $field_type_object->input(
|
||||
[
|
||||
'name' => $field_type_object->_name( '[' . $id . ']' ),
|
||||
'id' => $field_type_object->_id( '_' . $id ),
|
||||
'value' => $value[ $id ],
|
||||
'placeholder' => esc_html( $field->get_string( $id . '_text', $strings[ $id ] ) ),
|
||||
]
|
||||
) . '</div>';
|
||||
endforeach;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render Advanced Robots fields.
|
||||
*
|
||||
* @param array $field The passed in `CMB2_Field` object.
|
||||
* @param mixed $escaped_value The value of this field escaped
|
||||
* It defaults to `sanitize_text_field`.
|
||||
* If you need the unescaped value, you can access it
|
||||
* via `$field->value()`.
|
||||
* @param int $object_id The ID of the current object.
|
||||
* @param string $object_type The type of object you are working with.
|
||||
* Most commonly, `post` (this applies to all post-types),
|
||||
* but could also be `comment`, `user` or `options-page`.
|
||||
* @param object $field_type_object This `CMB2_Types` object.
|
||||
*/
|
||||
public function render_advanced_robots( $field, $escaped_value, $object_id, $object_type, $field_type_object ) {
|
||||
// Make sure we assign each part of the value we need.
|
||||
$values = wp_parse_args(
|
||||
$escaped_value,
|
||||
[
|
||||
'max-snippet' => -1,
|
||||
'max-video-preview' => -1,
|
||||
'max-image-preview' => 'large',
|
||||
]
|
||||
);
|
||||
|
||||
$strings = [
|
||||
'max-snippet' => __( 'Snippet', 'rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Specify a maximum text-length, in characters, of a snippet for your page.', 'rank-math' ) ),
|
||||
'max-video-preview' => __( 'Video Preview', 'rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Specify a maximum duration in seconds of an animated video preview.', 'rank-math' ) ),
|
||||
'max-image-preview' => __( 'Image Preview', 'rank-math' ) . Admin_Helper::get_tooltip( esc_html__( 'Specify a maximum size of image preview to be shown for images on this page.', 'rank-math' ) ),
|
||||
];
|
||||
|
||||
echo '<ul class="cmb-advanced-robots-list no-select-all cmb2-list cmb-advanced-robots-field">';
|
||||
foreach ( $values as $id => $value ) :
|
||||
$value = isset( $escaped_value[ $id ] ) ? $escaped_value[ $id ] : $value;
|
||||
|
||||
echo '<li>';
|
||||
echo '<label for="' . $field_type_object->_id( '_' . $id . '_name' ) . '">';
|
||||
echo $field_type_object->checkbox(
|
||||
[
|
||||
'name' => $field_type_object->_name( "[{$id}][enable]" ),
|
||||
'id' => $field_type_object->_id( '_' . $id . '_name' ),
|
||||
'value' => true,
|
||||
'checked' => ! empty( $escaped_value[ $id ] ) || empty( $escaped_value ) ? 'checked' : false,
|
||||
]
|
||||
);
|
||||
echo $field->get_string( $id . '_text', $strings[ $id ] ) . '</label>';
|
||||
|
||||
if ( 'max-image-preview' === $id ) {
|
||||
echo $field_type_object->select(
|
||||
[
|
||||
'name' => $field_type_object->_name( "[{$id}][length]" ),
|
||||
'id' => $field_type_object->_id( '_' . $id . '_name' ),
|
||||
'options' => $this->get_image_sizes( $value ),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
if ( 'max-image-preview' !== $id ) {
|
||||
echo $field_type_object->input(
|
||||
[
|
||||
'name' => $field_type_object->_name( "[{$id}][length]" ),
|
||||
'id' => $field_type_object->_id( '_' . $id . '_length' ),
|
||||
'value' => $value ? $value : -1,
|
||||
'type' => 'number',
|
||||
'min' => -1,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
echo '</li>';
|
||||
endforeach;
|
||||
echo '</ul>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Image sizes.
|
||||
*
|
||||
* @param string $size The selected image size.
|
||||
* @return string $options The image sizes.
|
||||
*/
|
||||
private function get_image_sizes( $size = 'large' ) {
|
||||
$values = [
|
||||
'large' => __( 'Large', 'rank-math' ),
|
||||
'standard' => __( 'Standard', 'rank-math' ),
|
||||
'none' => __( 'None', 'rank-math' ),
|
||||
];
|
||||
$options = '';
|
||||
foreach ( $values as $data => $label ) {
|
||||
$options .= '<option value="' . $data . '" ' . selected( $size, $data, false ) . ' >' . $label . '</option>';
|
||||
}
|
||||
|
||||
return $options;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,224 @@
|
||||
<?php
|
||||
/**
|
||||
* The Dashboard Widget of the plugin.
|
||||
*
|
||||
* @since 1.0.81
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Core
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath;
|
||||
|
||||
use RankMath\KB;
|
||||
use RankMath\Helper;
|
||||
use RankMath\Traits\Hooker;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Dashboard_Widget class.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
class Dashboard_Widget {
|
||||
|
||||
use Hooker;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public function __construct() {
|
||||
$this->action( 'wp_dashboard_setup', 'add_dashboard_widgets' );
|
||||
$this->action( 'rank_math/dashboard/widget', 'dashboard_widget_feed', 98 );
|
||||
$this->action( 'rank_math/dashboard/widget', 'dashboard_widget_footer', 99 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Register dashboard widget.
|
||||
*/
|
||||
public function add_dashboard_widgets() {
|
||||
// Early Bail if action is not registered for the dashboard widget hook.
|
||||
if (
|
||||
( ! Helper::is_module_active( '404-monitor' ) || ! Helper::has_cap( '404_monitor' ) ) &&
|
||||
( ! Helper::is_module_active( 'redirections' ) || ! Helper::has_cap( 'redirections' ) ) &&
|
||||
( ! Helper::is_module_active( 'analytics' ) || ! Helper::has_cap( 'analytics' ) )
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
$icon = '<span class="rank-math-icon"><svg viewBox="0 0 462.03 462.03" xmlns="http://www.w3.org/2000/svg" width="20"><g><path d="m462 234.84-76.17 3.43 13.43 21-127 81.18-126-52.93-146.26 60.97 10.14 24.34 136.1-56.71 128.57 54 138.69-88.61 13.43 21z"></path><path d="m54.1 312.78 92.18-38.41 4.49 1.89v-54.58h-96.67zm210.9-223.57v235.05l7.26 3 89.43-57.05v-181zm-105.44 190.79 96.67 40.62v-165.19h-96.67z"></path></g></svg></span>';
|
||||
|
||||
wp_add_dashboard_widget(
|
||||
'rank_math_dashboard_widget',
|
||||
$icon . esc_html__( 'Rank Math Overview', 'rank-math' ),
|
||||
[ $this, 'render_dashboard_widget' ],
|
||||
null,
|
||||
null,
|
||||
'normal',
|
||||
'high'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Render dashboard widget.
|
||||
*/
|
||||
public function render_dashboard_widget() {
|
||||
echo '<div id="rank-math-dashboard-widget" class="rank-math-loading"></div>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Add Feed data in the admin dashboard widget.
|
||||
*/
|
||||
public function dashboard_widget_feed() {
|
||||
$posts = $this->get_feed();
|
||||
?>
|
||||
<h3 class="rank-math-blog-title"><?php esc_html_e( 'Latest Blog Posts from Rank Math', 'rank-math' ); ?></h3>
|
||||
<?php if ( empty( $posts ) ) : ?>
|
||||
<p><?php esc_html_e( 'Error: the Rank Math blog feed could not be downloaded.', 'rank-math' ); ?></p>
|
||||
<?php
|
||||
return;
|
||||
endif;
|
||||
|
||||
echo '<ul class="rank-math-blog-list">';
|
||||
|
||||
$posts = $this->filter_posts( $posts );
|
||||
$label = $this->get_item_label( $posts );
|
||||
|
||||
foreach ( $posts as $index => $post ) :
|
||||
$link = $this->add_utm_params( $post['link'], $index );
|
||||
?>
|
||||
<li class="rank-math-blog-post">
|
||||
<h4>
|
||||
<?php if ( $label ) : ?>
|
||||
<span class="rank-math-new-badge"><?php echo esc_html( $label ); ?></span>
|
||||
<?php endif; ?>
|
||||
<a target="_blank" href="<?php echo esc_url( $link ); ?>">
|
||||
<?php echo esc_html( $post['title']['rendered'] ); ?>
|
||||
</a>
|
||||
</h4>
|
||||
</li>
|
||||
<?php
|
||||
$label = '';
|
||||
endforeach;
|
||||
echo '</ul>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get label for first post.
|
||||
*
|
||||
* @param array $posts Posts.
|
||||
*/
|
||||
private function get_item_label( $posts ) {
|
||||
$label = '';
|
||||
if ( ! empty( $posts[0]['custom_label'] ) ) {
|
||||
$label = $posts[0]['custom_label'];
|
||||
}
|
||||
|
||||
$is_new = time() - strtotime( $posts[0]['date'] ) < 15 * DAY_IN_SECONDS;
|
||||
if ( $is_new && empty( $label ) ) {
|
||||
$label = esc_html__( 'NEW', 'rank-math' );
|
||||
}
|
||||
|
||||
return $label;
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter posts by display condition.
|
||||
*
|
||||
* @param array $posts Posts.
|
||||
*/
|
||||
private function filter_posts( $posts ) {
|
||||
$posts = array_filter(
|
||||
$posts,
|
||||
function( $post ) {
|
||||
if ( isset( $post['condition'] ) && 'is_free' === $post['condition'] && defined( 'RANK_MATH_PRO_FILE' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
);
|
||||
|
||||
return array_slice( $posts, 0, 3 ); // Max 3 posts.
|
||||
}
|
||||
|
||||
/**
|
||||
* Add UTM tags to links. Only add if UTM params are not already present.
|
||||
*
|
||||
* @param string $link Link.
|
||||
* @param int $index Array index.
|
||||
*/
|
||||
private function add_utm_params( $link, $index ) {
|
||||
// Skip if link has any UTM tags already set.
|
||||
if ( preg_match( '/[?&]utm_[a-z_]+=/', $link ) ) {
|
||||
return $link;
|
||||
}
|
||||
|
||||
$utm_params = [
|
||||
'utm_source' => 'Plugin',
|
||||
'utm_medium' => 'Dashboard%20Widget%20Post%20' . ( $index + 1 ),
|
||||
'utm_campaign' => 'WP',
|
||||
];
|
||||
|
||||
return add_query_arg( $utm_params, $link );
|
||||
}
|
||||
|
||||
/**
|
||||
* Add footer in the admin dashboard widget.
|
||||
*/
|
||||
public function dashboard_widget_footer() {
|
||||
?>
|
||||
<div class="rank-math-widget-footer">
|
||||
<a target="_blank" href="<?php KB::the( 'blog', 'Dashboard Widget Blog' ); ?>">
|
||||
<?php esc_html_e( 'Blog', 'rank-math' ); ?>
|
||||
<span class="screen-reader-text"><?php esc_html_e( '(opens in a new window)', 'rank-math' ); ?></span>
|
||||
<span aria-hidden="true" class="dashicons dashicons-external"></span>
|
||||
</a>
|
||||
<a target="_blank" href="<?php KB::the( 'knowledgebase', 'Dashboard Widget Help' ); ?>">
|
||||
<?php esc_html_e( 'Help', 'rank-math' ); ?>
|
||||
<span class="screen-reader-text"><?php esc_html_e( '(opens in a new window)', 'rank-math' ); ?></span>
|
||||
<span aria-hidden="true" class="dashicons dashicons-external"></span>
|
||||
</a>
|
||||
<?php if ( ! defined( 'RANK_MATH_PRO_FILE' ) ) { ?>
|
||||
<a target="_blank" href="<?php KB::the( 'pro', 'Dashboard Widget PRO' ); ?>" class="rank-math-widget-go-pro">
|
||||
<?php esc_html_e( 'Go Pro', 'rank-math' ); ?>
|
||||
<span class="screen-reader-text"><?php esc_html_e( '(opens in a new window)', 'rank-math' ); ?></span>
|
||||
<span aria-hidden="true" class="dashicons dashicons-external"></span>
|
||||
</a>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Get posts.
|
||||
*/
|
||||
private function get_feed() {
|
||||
$cache_key = 'rank_math_feed_posts_v2';
|
||||
$cache = get_transient( $cache_key );
|
||||
if ( false !== $cache ) {
|
||||
return $cache;
|
||||
}
|
||||
|
||||
$response = wp_remote_get( 'https://rankmath.com/wp-json/wp/v2/posts?dashboard_widget_feed=1' );
|
||||
|
||||
if ( is_wp_error( $response ) || 200 !== (int) wp_remote_retrieve_response_code( $response ) ) {
|
||||
set_transient( $cache_key, [], 2 * HOUR_IN_SECONDS );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$posts = json_decode( wp_remote_retrieve_body( $response ), true );
|
||||
|
||||
if ( empty( $posts ) || ! is_array( $posts ) ) {
|
||||
set_transient( $cache_key, [], 2 * HOUR_IN_SECONDS );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
set_transient( $cache_key, $posts, 12 * HOUR_IN_SECONDS );
|
||||
|
||||
return $posts;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,625 @@
|
||||
<?php
|
||||
/**
|
||||
* The Import Export Class
|
||||
*
|
||||
* @since 0.9.0
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Admin
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Admin;
|
||||
|
||||
use RankMath\Helper;
|
||||
use RankMath\Runner;
|
||||
use RankMath\Traits\Ajax;
|
||||
use RankMath\Traits\Hooker;
|
||||
use RankMath\Helpers\Param;
|
||||
use RankMath\Admin\Importers\Detector;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Import_Export class.
|
||||
*/
|
||||
class Import_Export implements Runner {
|
||||
|
||||
use Hooker, Ajax;
|
||||
|
||||
/**
|
||||
* Register hooks.
|
||||
*/
|
||||
public function hooks() {
|
||||
$this->action( 'admin_init', 'handler' );
|
||||
$this->action( 'admin_enqueue_scripts', 'enqueue', 1 );
|
||||
$this->filter( 'rank_math/tools/pages', 'add_status_page', 30 );
|
||||
$this->filter( 'rank_math/export/settings', 'export_other_panels', 10, 2 );
|
||||
$this->action( 'rank_math/import/settings/pre_import', 'run_backup', 10, 0 );
|
||||
|
||||
$this->ajax( 'create_backup', 'create_backup' );
|
||||
$this->ajax( 'delete_backup', 'delete_backup' );
|
||||
$this->ajax( 'restore_backup', 'restore_backup' );
|
||||
$this->ajax( 'clean_plugin', 'clean_plugin' );
|
||||
$this->ajax( 'import_plugin', 'import_plugin' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Add subpage to Status & Tools screen.
|
||||
*
|
||||
* @param array $pages Pages.
|
||||
* @return array New pages.
|
||||
*/
|
||||
public function add_status_page( $pages ) {
|
||||
if ( Helper::is_advanced_mode() ) {
|
||||
$pages['import_export'] = [
|
||||
'url' => 'status',
|
||||
'args' => 'view=import_export',
|
||||
'cap' => 'manage_options',
|
||||
'title' => __( 'Import & Export', 'rank-math' ),
|
||||
'class' => '\\RankMath\\Admin\\Import_Export',
|
||||
];
|
||||
}
|
||||
|
||||
return $pages;
|
||||
}
|
||||
|
||||
/**
|
||||
* Display Import/Export tools page.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function display() {
|
||||
include $this->get_view( 'main' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Display panels for Import/Export tools.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function show_panels() {
|
||||
foreach ( (array) $this->get_panels() as $panel ) {
|
||||
if ( ! isset( $panel['view'] ) || ! file_exists( $panel['view'] ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
echo '<div class="' . ( isset( $panel['class'] ) ? esc_attr( $panel['class'] ) : '' ) . '">';
|
||||
include $panel['view'];
|
||||
echo '</div>';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get list of panels.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function get_panels() {
|
||||
$dir = dirname( __FILE__ ) . '/views/import-export/';
|
||||
|
||||
$panels = [
|
||||
'import-export' => [
|
||||
'view' => $dir . 'import-export-panel.php',
|
||||
'class' => 'import-export-settings',
|
||||
],
|
||||
'plugins' => [
|
||||
'view' => $dir . 'plugins-panel.php',
|
||||
'class' => 'import-plugins',
|
||||
],
|
||||
'backup' => [
|
||||
'view' => $dir . 'backup-panel.php',
|
||||
'class' => 'settings-backup',
|
||||
],
|
||||
];
|
||||
|
||||
return apply_filters( 'rank_math/admin/import_export_panels', $panels );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get view file.
|
||||
*
|
||||
* @param string $view View filename.
|
||||
*
|
||||
* @return string Complete path to view
|
||||
*/
|
||||
public function get_view( $view ) {
|
||||
$view = sanitize_key( $view );
|
||||
return rank_math()->admin_dir() . "views/import-export/{$view}.php";
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueue files & add JSON.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function enqueue() {
|
||||
if ( ! $this->is_import_export_page() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
\RankMath\Tools\Update_Score::get()->enqueue();
|
||||
|
||||
wp_enqueue_script( 'rank-math-import-export', rank_math()->plugin_url() . 'assets/admin/js/import-export.js', [], rank_math()->version, true );
|
||||
wp_enqueue_style( 'cmb2-styles' );
|
||||
wp_enqueue_style( 'rank-math-common' );
|
||||
wp_enqueue_style( 'rank-math-cmb2' );
|
||||
|
||||
Helper::add_json( 'importSettingsConfirm', esc_html__( 'Are you sure you want to import settings into Rank Math? Don\'t worry, your current configuration will be saved as a backup.', 'rank-math' ) );
|
||||
|
||||
// Translators: %s is the plugin name.
|
||||
Helper::add_json( 'importPluginConfirm', esc_html__( 'Are you sure you want to import data from %s?', 'rank-math' ) );
|
||||
Helper::add_json( 'importPluginSelectAction', esc_html__( 'Select data to import.', 'rank-math' ) );
|
||||
Helper::add_json( 'restoreConfirm', esc_html__( 'Are you sure you want to restore this backup? Your current configuration will be overwritten.', 'rank-math' ) );
|
||||
Helper::add_json( 'deleteBackupConfirm', esc_html__( 'Are you sure you want to delete this backup?', 'rank-math' ) );
|
||||
|
||||
// Translators: %s is the plugin name.
|
||||
Helper::add_json( 'cleanPluginConfirm', esc_html__( 'Are you sure you want erase all traces of %s?', 'rank-math' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if we're on the Tools > Import & Export admin page.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
private function is_import_export_page() {
|
||||
return Param::get( 'page' ) === 'rank-math-status' && Param::get( 'view' ) === 'import_export';
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle import or export.
|
||||
*/
|
||||
public function handler() {
|
||||
$object_id = Param::post( 'object_id' );
|
||||
if ( false === $object_id ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! Helper::has_cap( 'general' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( 'export-plz' === $object_id && check_admin_referer( 'rank-math-export-settings' ) ) {
|
||||
$this->export();
|
||||
}
|
||||
|
||||
if ( isset( $_FILES['import-me'] ) && 'import-plz' === $object_id && check_admin_referer( 'rank-math-import-settings' ) ) {
|
||||
$this->import();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles AJAX run plugin clean.
|
||||
*/
|
||||
public function clean_plugin() {
|
||||
$this->verify_nonce( 'rank-math-ajax-nonce' );
|
||||
$this->has_cap_ajax( 'general' );
|
||||
|
||||
$result = Detector::run_by_slug( Param::post( 'pluginSlug' ), 'cleanup' );
|
||||
|
||||
if ( $result['status'] ) {
|
||||
/* translators: Plugin name */
|
||||
$this->success( sprintf( esc_html__( 'Cleanup of %s data successfully done.', 'rank-math' ), $result['importer']->get_plugin_name() ) );
|
||||
}
|
||||
|
||||
/* translators: Plugin name */
|
||||
$this->error( sprintf( esc_html__( 'Cleanup of %s data failed.', 'rank-math' ), $result['importer']->get_plugin_name() ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles AJAX run plugin import.
|
||||
*/
|
||||
public function import_plugin() {
|
||||
$this->verify_nonce( 'rank-math-ajax-nonce' );
|
||||
$this->has_cap_ajax( 'general' );
|
||||
|
||||
$perform = Param::post( 'perform', '', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK );
|
||||
if ( ! $this->is_action_allowed( $perform ) ) {
|
||||
$this->error( esc_html__( 'Action not allowed.', 'rank-math' ) );
|
||||
}
|
||||
|
||||
try {
|
||||
$result = Detector::run_by_slug( Param::post( 'pluginSlug' ), 'import', $perform );
|
||||
$this->success( $result );
|
||||
} catch ( \Exception $e ) {
|
||||
$this->error( $e->getMessage() );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles AJAX create backup.
|
||||
*/
|
||||
public function create_backup() {
|
||||
$this->verify_nonce( 'rank-math-ajax-nonce' );
|
||||
$this->has_cap_ajax( 'general' );
|
||||
|
||||
$key = $this->run_backup();
|
||||
if ( is_null( $key ) ) {
|
||||
$this->error( esc_html__( 'Unable to create backup this time.', 'rank-math' ) );
|
||||
}
|
||||
|
||||
$this->success(
|
||||
[
|
||||
'key' => $key,
|
||||
/* translators: Backup formatted date */
|
||||
'backup' => sprintf( esc_html__( 'Backup: %s', 'rank-math' ), date_i18n( 'M jS Y, H:i a', $key ) ),
|
||||
'message' => esc_html__( 'Backup created successfully.', 'rank-math' ),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles AJAX delete backup.
|
||||
*/
|
||||
public function delete_backup() {
|
||||
$this->verify_nonce( 'rank-math-ajax-nonce' );
|
||||
$this->has_cap_ajax( 'general' );
|
||||
|
||||
$key = Param::post( 'key', '', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK );
|
||||
if ( ! $key ) {
|
||||
$this->error( esc_html__( 'No backup key found to delete.', 'rank-math' ) );
|
||||
}
|
||||
|
||||
$this->run_backup( 'delete', $key );
|
||||
$this->success( esc_html__( 'Backup successfully deleted.', 'rank-math' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles AJAX restore backup.
|
||||
*/
|
||||
public function restore_backup() {
|
||||
$this->verify_nonce( 'rank-math-ajax-nonce' );
|
||||
$this->has_cap_ajax( 'general' );
|
||||
|
||||
$key = Param::post( 'key', '', FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK );
|
||||
if ( ! $key ) {
|
||||
$this->error( esc_html__( 'No backup key found to restore.', 'rank-math' ) );
|
||||
}
|
||||
|
||||
if ( ! $this->run_backup( 'restore', $key ) ) {
|
||||
$this->error( esc_html__( 'Backup does not exist.', 'rank-math' ) );
|
||||
}
|
||||
|
||||
$this->success( esc_html__( 'Backup restored successfully.', 'rank-math' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Run backup actions.
|
||||
*
|
||||
* @param string $action Action to perform.
|
||||
* @param array $key Key to backup.
|
||||
* @return mixed
|
||||
*/
|
||||
public function run_backup( $action = 'add', $key = null ) {
|
||||
$backups = $this->get_backups();
|
||||
|
||||
// Restore.
|
||||
if ( 'restore' === $action ) {
|
||||
if ( ! isset( $backups[ $key ] ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->do_import_data( $backups[ $key ], true );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Add.
|
||||
if ( 'add' === $action ) {
|
||||
$key = current_time( 'U' );
|
||||
$backups = [ $key => $this->get_export_data() ] + $backups;
|
||||
}
|
||||
|
||||
// Delete.
|
||||
if ( 'delete' === $action && isset( $backups[ $key ] ) ) {
|
||||
unset( $backups[ $key ] );
|
||||
}
|
||||
|
||||
update_option( 'rank_math_backups', $backups, false );
|
||||
|
||||
return $key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle export.
|
||||
*/
|
||||
private function export() {
|
||||
$panels = Param::post( 'panels', [], FILTER_DEFAULT, FILTER_REQUIRE_ARRAY );
|
||||
$data = $this->get_export_data( $panels );
|
||||
$filename = 'rank-math-settings-' . date_i18n( 'Y-m-d-H-i-s' ) . '.json';
|
||||
|
||||
header( 'Content-Type: application/json' );
|
||||
header( 'Content-Disposition: attachment; filename=' . $filename );
|
||||
header( 'Cache-Control: no-cache, no-store, must-revalidate' );
|
||||
header( 'Pragma: no-cache' );
|
||||
header( 'Expires: 0' );
|
||||
|
||||
echo wp_json_encode( $data );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle import.
|
||||
*/
|
||||
private function import() {
|
||||
$file = $this->has_valid_file();
|
||||
if ( false === $file ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Parse Options.
|
||||
$wp_filesystem = Helper::get_filesystem();
|
||||
if ( is_null( $wp_filesystem ) || ! Helper::is_filesystem_direct() ) {
|
||||
Helper::add_notification( esc_html__( 'Uploaded file could not be read.', 'rank-math' ), [ 'type' => 'error' ] );
|
||||
return false;
|
||||
}
|
||||
|
||||
$settings = $wp_filesystem->get_contents( $file['file'] );
|
||||
$settings = json_decode( $settings, true );
|
||||
|
||||
\unlink( $file['file'] );
|
||||
|
||||
if ( is_array( $settings ) && $this->do_import_data( $settings ) ) {
|
||||
Helper::add_notification( esc_html__( 'Settings successfully imported. Your old configuration has been saved as a backup.', 'rank-math' ), [ 'type' => 'success' ] );
|
||||
return;
|
||||
}
|
||||
|
||||
Helper::add_notification( esc_html__( 'No settings found to be imported.', 'rank-math' ), [ 'type' => 'info' ] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Import has valid file.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
private function has_valid_file() {
|
||||
// Add upload hooks.
|
||||
$this->filter( 'upload_mimes', 'allow_txt_upload', 10, 2 );
|
||||
$this->filter( 'wp_check_filetype_and_ext', 'filetype_and_ext', 10, 4 );
|
||||
|
||||
// Do the upload.
|
||||
$file = wp_handle_upload( $_FILES['import-me'], [ 'test_form' => false ] );
|
||||
|
||||
// Remove upload hooks.
|
||||
$this->remove_filter( 'upload_mimes', 'allow_txt_upload', 10 );
|
||||
$this->remove_filter( 'wp_check_filetype_and_ext', 'filetype_and_ext', 10 );
|
||||
|
||||
if ( is_wp_error( $file ) ) {
|
||||
Helper::add_notification( esc_html__( 'Settings could not be imported:', 'rank-math' ) . ' ' . $file->get_error_message(), [ 'type' => 'error' ] );
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( isset( $file['error'] ) ) {
|
||||
Helper::add_notification( esc_html__( 'Settings could not be imported:', 'rank-math' ) . ' ' . $file['error'], [ 'type' => 'error' ] );
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( ! isset( $file['file'] ) ) {
|
||||
Helper::add_notification( esc_html__( 'Settings could not be imported: Upload failed.', 'rank-math' ), [ 'type' => 'error' ] );
|
||||
return false;
|
||||
}
|
||||
|
||||
return $file;
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters the "real" file type of the given file.
|
||||
*
|
||||
* @param array $types {
|
||||
* Values for the extension, mime type, and corrected filename.
|
||||
*
|
||||
* @type string|false $ext File extension, or false if the file doesn't match a mime type.
|
||||
* @type string|false $type File mime type, or false if the file doesn't match a mime type.
|
||||
* @type string|false $proper_filename File name with its correct extension, or false if it cannot be determined.
|
||||
* }
|
||||
* @param string $file Full path to the file.
|
||||
* @param string $filename The name of the file (may differ from $file due to
|
||||
* $file being in a tmp directory).
|
||||
* @param string[] $mimes Array of mime types keyed by their file extension regex.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function filetype_and_ext( $types, $file, $filename, $mimes ) {
|
||||
if ( false !== strpos( $filename, '.json' ) ) {
|
||||
$types['ext'] = 'json';
|
||||
$types['type'] = 'application/json';
|
||||
} elseif ( false !== strpos( $filename, '.txt' ) ) {
|
||||
$types['ext'] = 'txt';
|
||||
$types['type'] = 'text/plain';
|
||||
}
|
||||
|
||||
return $types;
|
||||
}
|
||||
|
||||
/**
|
||||
* Allow txt & json file upload.
|
||||
*
|
||||
* @param array $types Mime types keyed by the file extension regex corresponding to those types.
|
||||
* @param int|WP_User|null $user User ID, User object or null if not provided (indicates current user).
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function allow_txt_upload( $types, $user ) {
|
||||
$types['json'] = 'application/json';
|
||||
$types['txt'] = 'text/plain';
|
||||
|
||||
return $types;
|
||||
}
|
||||
|
||||
/**
|
||||
* Does import data.
|
||||
*
|
||||
* @param array $data Import data.
|
||||
* @param bool $suppress_hooks Suppress hooks or not.
|
||||
* @return bool
|
||||
*/
|
||||
private function do_import_data( array $data, $suppress_hooks = false ) {
|
||||
$this->run_import_hooks( 'pre_import', $data, $suppress_hooks );
|
||||
|
||||
// Import options.
|
||||
$down = $this->set_options( $data );
|
||||
|
||||
// Import capabilities.
|
||||
if ( ! empty( $data['role-manager'] ) ) {
|
||||
$down = true;
|
||||
Helper::set_capabilities( $data['role-manager'] );
|
||||
}
|
||||
|
||||
// Import redirections.
|
||||
if ( ! empty( $data['redirections'] ) ) {
|
||||
$down = true;
|
||||
$this->set_redirections( $data['redirections'] );
|
||||
}
|
||||
|
||||
$this->run_import_hooks( 'after_import', $data, $suppress_hooks );
|
||||
|
||||
return $down;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set options from data.
|
||||
*
|
||||
* @param array $data An array of data.
|
||||
*/
|
||||
private function set_options( $data ) {
|
||||
$set = false;
|
||||
$hash = [
|
||||
'modules' => 'rank_math_modules',
|
||||
'general' => 'rank-math-options-general',
|
||||
'titles' => 'rank-math-options-titles',
|
||||
'sitemap' => 'rank-math-options-sitemap',
|
||||
];
|
||||
|
||||
foreach ( $hash as $key => $option_key ) {
|
||||
if ( ! empty( $data[ $key ] ) ) {
|
||||
$set = true;
|
||||
update_option( $option_key, $data[ $key ] );
|
||||
}
|
||||
}
|
||||
|
||||
return $set;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set redirections.
|
||||
*
|
||||
* @param array $redirections An array of redirections to import.
|
||||
*/
|
||||
private function set_redirections( $redirections ) {
|
||||
foreach ( $redirections as $key => $redirection ) {
|
||||
$matched = \RankMath\Redirections\DB::match_redirections_source( $redirection['sources'] );
|
||||
if ( ! empty( $matched ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$sources = maybe_unserialize( $redirection['sources'] );
|
||||
if ( ! is_array( $sources ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
\RankMath\Redirections\DB::add(
|
||||
[
|
||||
'url_to' => $redirection['url_to'],
|
||||
'sources' => $sources,
|
||||
'header_code' => $redirection['header_code'],
|
||||
'hits' => $redirection['hits'],
|
||||
'created' => $redirection['created'],
|
||||
'updated' => $redirection['updated'],
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Run import hooks
|
||||
*
|
||||
* @param string $hook Hook to fire.
|
||||
* @param array $data Import data.
|
||||
* @param bool $suppress Suppress hooks or not.
|
||||
*/
|
||||
private function run_import_hooks( $hook, $data, $suppress ) {
|
||||
if ( ! $suppress ) {
|
||||
/**
|
||||
* Fires while importing settings.
|
||||
*
|
||||
* @since 0.9.0
|
||||
*
|
||||
* @param array $data Import data.
|
||||
*/
|
||||
$this->do_action( 'import/settings/' . $hook, $data );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets export data.
|
||||
*
|
||||
* @param array $panels Which panels to export. All panels will be exported if this param is empty.
|
||||
* @return array
|
||||
*/
|
||||
private function get_export_data( array $panels = [] ) {
|
||||
if ( ! $panels ) {
|
||||
$panels = [ 'general', 'titles', 'sitemap', 'role-manager', 'redirections' ];
|
||||
}
|
||||
|
||||
$settings = rank_math()->settings->all_raw();
|
||||
foreach ( $panels as $panel ) {
|
||||
if ( isset( $settings[ $panel ] ) ) {
|
||||
$data[ $panel ] = $settings[ $panel ];
|
||||
continue;
|
||||
}
|
||||
|
||||
$data = $this->do_filter( 'export/settings', $data, $panel );
|
||||
}
|
||||
|
||||
$data['modules'] = get_option( 'rank_math_modules', [] );
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Export other panels.
|
||||
*
|
||||
* @param array $data Gathered data.
|
||||
* @param string $panel Panel id.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function export_other_panels( $data, $panel ) {
|
||||
if ( 'role-manager' === $panel ) {
|
||||
$data['role-manager'] = Helper::get_roles_capabilities();
|
||||
}
|
||||
|
||||
if ( 'redirections' === $panel ) {
|
||||
$items = \RankMath\Redirections\DB::get_redirections( [ 'limit' => 1000 ] );
|
||||
|
||||
$data['redirections'] = $items['redirections'];
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if given action is in the list of allowed actions.
|
||||
*
|
||||
* @param string $perform Action to check.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function is_action_allowed( $perform ) {
|
||||
$allowed = [ 'settings', 'postmeta', 'termmeta', 'usermeta', 'redirections', 'blocks', 'deactivate', 'locations', 'news', 'video', 'recalculate' ];
|
||||
return $perform && in_array( $perform, $allowed, true );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get backups from the database.
|
||||
*/
|
||||
public function get_backups() {
|
||||
$backups = get_option( 'rank_math_backups', [] );
|
||||
if ( empty( $backups ) ) {
|
||||
$backups = [];
|
||||
} elseif ( ! is_array( $backups ) ) {
|
||||
$backups = (array) $backups;
|
||||
}
|
||||
|
||||
return $backups;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
/**
|
||||
* The List Table Base CLass.
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Admin
|
||||
* @author RankMath <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Admin;
|
||||
|
||||
use WP_List_Table;
|
||||
use RankMath\Helpers\Param;
|
||||
|
||||
/**
|
||||
* List_Table class.
|
||||
*/
|
||||
class List_Table extends WP_List_Table {
|
||||
|
||||
/**
|
||||
* The Constructor.
|
||||
*
|
||||
* @param array $args Array of arguments.
|
||||
*/
|
||||
public function __construct( $args = [] ) {
|
||||
parent::__construct( $args );
|
||||
}
|
||||
|
||||
/**
|
||||
* Message to be displayed when there are no items.
|
||||
*/
|
||||
public function no_items() {
|
||||
echo isset( $this->_args['no_items'] ) ? $this->_args['no_items'] : esc_html__( 'No items found.', 'rank-math' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get order setting.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function get_order() {
|
||||
$order = Param::request( 'order', 'desc' );
|
||||
return in_array( $order, [ 'desc', 'asc' ], true ) ? strtoupper( $order ) : 'DESC';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get orderby setting.
|
||||
*
|
||||
* @param string $default (Optional) Extract order by from request.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function get_orderby( $default = 'create_date' ) {
|
||||
return Param::get( 'orderby', $default, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_BACKTICK );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get search query variable.
|
||||
*
|
||||
* @return bool|string
|
||||
*/
|
||||
protected function get_search() {
|
||||
return Param::request( 's', false, FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_BACKTICK );
|
||||
}
|
||||
|
||||
/**
|
||||
* Set column headers.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
protected function set_column_headers() {
|
||||
$this->_column_headers = [
|
||||
$this->get_columns(),
|
||||
[],
|
||||
$this->get_sortable_columns(),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,264 @@
|
||||
<?php
|
||||
/**
|
||||
* The admin notices.
|
||||
*
|
||||
* @since 0.9.0
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Admin
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Admin;
|
||||
|
||||
use RankMath\Runner;
|
||||
use RankMath\Helper;
|
||||
use RankMath\Traits\Ajax;
|
||||
use RankMath\Traits\Hooker;
|
||||
use RankMath\Helpers\Sitepress;
|
||||
use RankMath\Helpers\Param;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Notices class.
|
||||
*/
|
||||
class Notices implements Runner {
|
||||
|
||||
use Hooker, Ajax;
|
||||
|
||||
/**
|
||||
* Register hooks.
|
||||
*/
|
||||
public function hooks() {
|
||||
$this->action( 'admin_init', 'notices' );
|
||||
$this->action( 'wp_helpers_notification_dismissed', 'notice_dismissible' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Run all notices routine.
|
||||
*/
|
||||
public function notices() {
|
||||
$this->is_plugin_configured();
|
||||
$this->new_post_type();
|
||||
$this->convert_wpml_settings();
|
||||
$this->permalink_changes_warning();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set known post type after notice dismissal.
|
||||
*
|
||||
* @param string $notification_id Notification id.
|
||||
*/
|
||||
public function notice_dismissible( $notification_id ) {
|
||||
if ( 'new_post_type' === $notification_id ) {
|
||||
$current = get_post_types( [ 'public' => true ] );
|
||||
update_option( 'rank_math_known_post_types', $current );
|
||||
|
||||
if ( Helper::is_module_active( 'sitemap' ) ) {
|
||||
\RankMath\Sitemap\Cache::invalidate_storage();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if ( 'convert_wpml_settings' === $notification_id ) {
|
||||
update_option( 'rank_math_wpml_notice_dismissed', true );
|
||||
}
|
||||
|
||||
if ( 'rank-math-site-url-mismatch' === $notification_id ) {
|
||||
update_option( 'rank_math_siteurl_mismatch_notice_dismissed', true );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* If plugin configuration not done.
|
||||
*/
|
||||
private function is_plugin_configured() {
|
||||
if ( 'mts-install-plugins' === Param::get( 'page' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( rank_math()->notification->get_notification_by_id( 'plugin_not_setup' ) && ! Helper::is_configured() ) {
|
||||
$message = sprintf(
|
||||
'<b>Warning!</b> You didn\'t set up your Rank Math SEO plugin yet, which means you\'re missing out on essential settings and tweaks! <a href="%s">Complete your setup by clicking here.</a>',
|
||||
Helper::get_admin_url( 'wizard' )
|
||||
);
|
||||
Helper::add_notification(
|
||||
$message,
|
||||
[
|
||||
'type' => 'warning',
|
||||
'id' => 'plugin_not_setup',
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add notification if a new post type is detected.
|
||||
*/
|
||||
private function new_post_type() {
|
||||
$known = get_option( 'rank_math_known_post_types', [] );
|
||||
$current = Helper::get_accessible_post_types();
|
||||
$new = array_diff( $current, $known );
|
||||
|
||||
if ( empty( $new ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$list = '<code>' . implode( '</code>, <code>', $new ) . '</code>';
|
||||
/* Translators: placeholder is the post type name. */
|
||||
$message = __( 'Rank Math has detected a new post type: %1$s. You may want to check the settings of the <a href="%2$s">Titles & Meta page</a>.', 'rank-math' );
|
||||
$count = count( $new );
|
||||
if ( $count > 1 ) {
|
||||
/* Translators: placeholder is the post type names separated with commas. */
|
||||
$message = __( 'Rank Math has detected new post types: %1$s. You may want to check the settings of the <a href="%2$s">Titles & Meta page</a>.', 'rank-math' );
|
||||
}
|
||||
|
||||
$message = $this->do_filter( 'admin/notice/new_post_type', $message, $count );
|
||||
$message = sprintf( wp_kses_post( $message ), $list, Helper::get_admin_url( 'options-titles#setting-panel-post-type-' . key( $new ) ), Helper::get_admin_url( 'options-sitemap#setting-panel-sitemap-post-type-' . key( $new ) ) );
|
||||
Helper::add_notification(
|
||||
$message,
|
||||
[
|
||||
'type' => 'info',
|
||||
'id' => 'new_post_type',
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to show Show String Translation plugin notice and convert the settings.
|
||||
*/
|
||||
private function convert_wpml_settings() {
|
||||
if ( ! Sitepress::get()->is_active() || get_option( 'rank_math_wpml_data_converted' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! function_exists( 'icl_add_string_translation' ) ) {
|
||||
if ( ! get_option( 'rank_math_wpml_notice_dismissed' ) ) {
|
||||
Helper::add_notification(
|
||||
__( 'Please activate the WPML String Translation plugin to convert Rank Math Setting values in different languages.', 'rank-math' ),
|
||||
[
|
||||
'type' => 'error',
|
||||
'id' => 'convert_wpml_settings',
|
||||
]
|
||||
);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
$languages = icl_get_languages();
|
||||
foreach ( $languages as $lang_code => $language ) {
|
||||
|
||||
foreach ( [ 'general', 'titles' ] as $option ) {
|
||||
$data = get_option( "rank-math-options-{$option}_$lang_code" );
|
||||
if ( empty( $data ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$common_data = array_intersect( array_keys( $data ), $this->get_translatable_options() );
|
||||
if ( empty( $common_data ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach ( $common_data as $option_key ) {
|
||||
$string_id = icl_get_string_id( Helper::get_settings( "$option.$option_key" ), "admin_texts_rank-math-options-$option" );
|
||||
icl_add_string_translation( $string_id, $lang_code, $data[ $option_key ], 10 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
update_option( 'rank_math_wpml_data_converted', true );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Translatable option keys.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function get_translatable_options() {
|
||||
$options = [
|
||||
'img_alt_format',
|
||||
'img_title_format',
|
||||
'breadcrumbs_separator',
|
||||
'breadcrumbs_prefix',
|
||||
'breadcrumbs_home_link',
|
||||
'breadcrumbs_home_label',
|
||||
'breadcrumbs_archive_format',
|
||||
'breadcrumbs_search_format',
|
||||
'breadcrumbs_404_label',
|
||||
'rss_before_content',
|
||||
'rss_after_content',
|
||||
|
||||
'title_separator',
|
||||
'homepage_title',
|
||||
'homepage_description',
|
||||
'homepage_facebook_title',
|
||||
'homepage_facebook_description',
|
||||
'author_archive_title',
|
||||
'author_archive_description',
|
||||
'date_archive_title',
|
||||
'date_archive_description',
|
||||
'search_title',
|
||||
'404_title',
|
||||
];
|
||||
|
||||
$post_types = Helper::get_accessible_post_types();
|
||||
foreach ( $post_types as $post_type => $data ) {
|
||||
$options = array_merge(
|
||||
$options,
|
||||
[
|
||||
"pt_{$post_type}_title",
|
||||
"pt_{$post_type}_description",
|
||||
"pt_{$post_type}_archive_title",
|
||||
"pt_{$post_type}_archive_description",
|
||||
"pt_{$post_type}_default_snippet_name",
|
||||
"pt_{$post_type}_default_snippet_desc",
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
$taxonomies = Helper::get_accessible_taxonomies();
|
||||
foreach ( $taxonomies as $taxonomy => $data ) {
|
||||
$options = array_merge(
|
||||
$options,
|
||||
[
|
||||
"tax_{$taxonomy}_title",
|
||||
"tax_{$taxonomy}_description",
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
return $options;
|
||||
}
|
||||
|
||||
/**
|
||||
* Maybe add notice on Permalinks page about the risks of changing the permalinks on a live site.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function permalink_changes_warning() {
|
||||
global $pagenow;
|
||||
if ( 'options-permalink.php' !== $pagenow ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->action( 'admin_enqueue_scripts', 'add_permalink_changes_warning', 12 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the notice for the Permalinks page.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function add_permalink_changes_warning() {
|
||||
wp_enqueue_script( 'rank-math-core-permalink-settings' );
|
||||
$message = __( '<b>Rank Math Warning:</b> Changing the permalinks on a live, indexed site may result in serious loss of traffic if done incorrectly. Consider adding a new redirection from the old URL format to the new one.', 'rank-math' );
|
||||
Helper::add_notification(
|
||||
$message,
|
||||
[
|
||||
'type' => 'warning',
|
||||
'screen' => 'options-permalink',
|
||||
'classes' => 'hidden rank-math-notice-permalinks-warning is-dismissible',
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,425 @@
|
||||
<?php
|
||||
/**
|
||||
* The option center of the plugin.
|
||||
*
|
||||
* @since 1.0.9
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Admin
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Admin;
|
||||
|
||||
use RankMath\KB;
|
||||
use RankMath\CMB2;
|
||||
use RankMath\Helper;
|
||||
use RankMath\Runner;
|
||||
use RankMath\Traits\Hooker;
|
||||
use RankMath\Helpers\Arr;
|
||||
use RankMath\Helpers\Param;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Option_Center class.
|
||||
*/
|
||||
class Option_Center implements Runner {
|
||||
|
||||
use Hooker;
|
||||
|
||||
/**
|
||||
* Register hooks.
|
||||
*/
|
||||
public function hooks() {
|
||||
$this->action( 'init', 'register_general_settings', 125 );
|
||||
$this->action( 'init', 'register_title_settings', 125 );
|
||||
$this->filter( 'rank_math/settings/title', 'title_post_type_settings', 1 );
|
||||
$this->filter( 'rank_math/settings/title', 'title_taxonomy_settings', 1 );
|
||||
$this->filter( 'rank_math/settings/general', 'remove_unwanted_general_tabs', 1 );
|
||||
|
||||
// Check for fields and act accordingly.
|
||||
$this->action( 'cmb2_save_options-page_fields_rank-math-options-general_options', 'check_updated_fields', 25, 2 );
|
||||
$this->action( 'cmb2_save_options-page_fields_rank-math-options-titles_options', 'check_updated_fields', 25, 2 );
|
||||
}
|
||||
|
||||
/**
|
||||
* General Settings.
|
||||
*/
|
||||
public function register_general_settings() {
|
||||
$tabs = [
|
||||
'links' => [
|
||||
'icon' => 'rm-icon rm-icon-link',
|
||||
'title' => esc_html__( 'Links', 'rank-math' ),
|
||||
/* translators: Link to kb article */
|
||||
'desc' => sprintf( esc_html__( 'Change how some of the links open and operate on your website. %s.', 'rank-math' ), '<a href="' . KB::get( 'link-settings', 'Options Panel Links Tab' ) . '" target="_blank">' . esc_html__( 'Learn More', 'rank-math' ) . '</a>' ),
|
||||
],
|
||||
'breadcrumbs' => [
|
||||
'icon' => 'rm-icon rm-icon-direction',
|
||||
'title' => esc_html__( 'Breadcrumbs', 'rank-math' ),
|
||||
'classes' => 'rank-math-advanced-option',
|
||||
/* translators: Link to kb article */
|
||||
'desc' => sprintf( esc_html__( 'Here you can set up the breadcrumbs function. %s', 'rank-math' ), '<a href="' . KB::get( 'breadcrumbs', 'Options Panel Breadcrumbs Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'rank-math' ) . '</a>. <br/>' ),
|
||||
'after_row' => current_theme_supports( 'rank-math-breadcrumbs' ) ? '' : '<div class="notice notice-alt notice-warning warning inline rank-math-notice"><p>' . esc_html__( 'Use the following code in your theme template files to display breadcrumbs.', 'rank-math' ) . ' <a href="' . KB::get( 'breadcrumbs-install', 'Options Panel Breadcrumbs Tab' ) . '" target="_blank">' . esc_html__( 'Learn More', 'rank-math' ) . '</a><br /><code><?php if (function_exists(\'rank_math_the_breadcrumbs\')) rank_math_the_breadcrumbs(); ?></code> OR <code>[rank_math_breadcrumb]</code></p></div>',
|
||||
],
|
||||
'webmaster' => [
|
||||
'icon' => 'rm-icon rm-icon-toolbox',
|
||||
'title' => esc_html__( 'Webmaster Tools', 'rank-math' ),
|
||||
/* translators: Link to kb article */
|
||||
'desc' => sprintf( esc_html__( 'Enter verification codes for third-party webmaster tools. %s', 'rank-math' ), '<a href="' . KB::get( 'webmaster-tools', 'Options Panel Webmaster Tools Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'rank-math' ) . '</a>.<br />' ),
|
||||
],
|
||||
'others' => [
|
||||
'icon' => 'rm-icon rm-icon-misc',
|
||||
'title' => esc_html__( 'Others', 'rank-math' ),
|
||||
/* translators: Link to kb article */
|
||||
'desc' => sprintf( esc_html__( 'Change some uncommon but essential settings here. %s.', 'rank-math' ), '<a href="' . KB::get( 'other-settings', 'Options Panel Others Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'rank-math' ) . '</a>' ),
|
||||
'classes' => 'rank-math-advanced-option',
|
||||
],
|
||||
];
|
||||
|
||||
if ( is_super_admin() && 'rank-math-options-general' === Param::get( 'page' ) ) {
|
||||
Arr::insert(
|
||||
$tabs,
|
||||
[
|
||||
'htaccess' => [
|
||||
'icon' => 'rm-icon rm-icon-htaccess',
|
||||
'title' => esc_html__( 'Edit .htaccess', 'rank-math' ),
|
||||
/* translators: Link to kb article */
|
||||
'desc' => sprintf( esc_html__( 'Edit the contents of your .htaccess file easily. %s.', 'rank-math' ), '<a href="' . KB::get( 'edit-htaccess', 'Options Panel htaccess Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'rank-math' ) . '</a>' ),
|
||||
'classes' => 'rank-math-advanced-option',
|
||||
],
|
||||
],
|
||||
5
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Allow developers to add new sections in the General Settings.
|
||||
*
|
||||
* @param array $tabs
|
||||
*/
|
||||
$tabs = $this->do_filter( 'settings/general', $tabs );
|
||||
|
||||
new Options(
|
||||
[
|
||||
'key' => 'rank-math-options-general',
|
||||
'title' => esc_html__( 'SEO Settings', 'rank-math' ),
|
||||
'menu_title' => esc_html__( 'General Settings', 'rank-math' ),
|
||||
'capability' => 'rank_math_general',
|
||||
'folder' => 'general',
|
||||
'tabs' => $tabs,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove unneeded tabs from the General Settings.
|
||||
*
|
||||
* @param array $tabs Hold tabs for optional panel.
|
||||
* @return array
|
||||
*/
|
||||
public function remove_unwanted_general_tabs( $tabs ) {
|
||||
if ( is_multisite() ) {
|
||||
unset( $tabs['robots'] );
|
||||
}
|
||||
|
||||
if ( ! Helper::has_cap( 'edit_htaccess' ) && is_multisite() ) {
|
||||
unset( $tabs['htaccess'] );
|
||||
}
|
||||
|
||||
return $tabs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register SEO Titles & Meta Settings.
|
||||
*/
|
||||
public function register_title_settings() {
|
||||
$tabs = [
|
||||
'global' => [
|
||||
'icon' => 'rm-icon rm-icon-settings',
|
||||
'title' => esc_html__( 'Global Meta', 'rank-math' ),
|
||||
/* translators: Link to KB article */
|
||||
'desc' => sprintf( esc_html__( 'Change Global meta settings that take effect across your website. %s.', 'rank-math' ), '<a href="' . KB::get( 'titles-meta', 'Options Panel Meta Global Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'rank-math' ) . '</a>' ),
|
||||
],
|
||||
'local' => [
|
||||
'icon' => 'rm-icon rm-icon-local-seo',
|
||||
'title' => esc_html__( 'Local SEO', 'rank-math' ),
|
||||
/* translators: Redirection page url */
|
||||
'desc' => sprintf( wp_kses_post( __( 'Optimize for local searches and Knowledge Graph using these settings. %s.', 'rank-math' ) ), '<a href="' . KB::get( 'local-seo-settings', 'Options Panel Meta Local Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'rank-math' ) . '</a>' ),
|
||||
'after_row' => '<div class="notice notice-alt notice-info info inline rank-math-notice"><p>' . __( 'Use the <code>[rank_math_contact_info]</code> shortcode to display contact information in a nicely formatted way. You should also claim your business on Google if you have not already.', 'rank-math' ) . '</p></div>',
|
||||
],
|
||||
'social' => [
|
||||
'icon' => 'rm-icon rm-icon-social',
|
||||
'title' => esc_html__( 'Social Meta', 'rank-math' ),
|
||||
/* translators: Link to social setting KB article */
|
||||
'desc' => sprintf( esc_html__( "Add social account information to your website's Schema and Open Graph. %s.", 'rank-math' ), '<a href="' . KB::get( 'social-meta-settings', 'Options Panel Meta Social Tab' ) . '" target="_blank">' . esc_html__( 'Learn More', 'rank-math' ) . '</a>' ),
|
||||
],
|
||||
'homepage' => [
|
||||
'icon' => 'rm-icon rm-icon-home',
|
||||
'title' => esc_html__( 'Homepage', 'rank-math' ),
|
||||
'desc' => sprintf(
|
||||
/* translators: Link to KB article */
|
||||
esc_html__( 'Add SEO meta and OpenGraph details to your homepage. %s.', 'rank-math' ),
|
||||
'<a href="' . KB::get( 'homepage-settings', 'Options Panel Meta Home Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'rank-math' ) . '</a>'
|
||||
),
|
||||
],
|
||||
'author' => [
|
||||
'icon' => 'rm-icon rm-icon-users',
|
||||
'title' => esc_html__( 'Authors', 'rank-math' ),
|
||||
/* translators: Link to KB article */
|
||||
'desc' => sprintf( esc_html__( 'Change SEO options related to the author archives. %s.', 'rank-math' ), '<a href="' . KB::get( 'author-settings', 'Options Panel Meta Author Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'rank-math' ) . '</a>' ),
|
||||
],
|
||||
'misc' => [
|
||||
'icon' => 'rm-icon rm-icon-misc',
|
||||
'title' => esc_html__( 'Misc Pages', 'rank-math' ),
|
||||
/* translators: Link to KB article */
|
||||
'desc' => sprintf( esc_html__( 'Customize SEO meta settings of pages like search results, 404s, etc. %s.', 'rank-math' ), '<a href="' . KB::get( 'misc-settings', 'Options Panel Meta Misc Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'rank-math' ) . '</a>' ),
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
* Allow developers to add new section in the Title Settings.
|
||||
*
|
||||
* @param array $tabs
|
||||
*/
|
||||
$tabs = $this->do_filter( 'settings/title', $tabs );
|
||||
|
||||
new Options(
|
||||
[
|
||||
'key' => 'rank-math-options-titles',
|
||||
'title' => esc_html__( 'SEO Titles & Meta', 'rank-math' ),
|
||||
'menu_title' => esc_html__( 'Titles & Meta', 'rank-math' ),
|
||||
'capability' => 'rank_math_titles',
|
||||
'folder' => 'titles',
|
||||
'tabs' => $tabs,
|
||||
]
|
||||
);
|
||||
|
||||
if ( is_admin() ) {
|
||||
Helper::add_json( 'postTitle', 'Post Title' );
|
||||
Helper::add_json( 'postUri', home_url( '/post-title' ) );
|
||||
Helper::add_json( 'blogName', get_bloginfo( 'name' ) );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add post type tabs in the Title Settings panel.
|
||||
*
|
||||
* @param array $tabs Holds the tabs of the options panel.
|
||||
* @return array
|
||||
*/
|
||||
public function title_post_type_settings( $tabs ) {
|
||||
$icons = Helper::choices_post_type_icons();
|
||||
$links = [
|
||||
'post' => '<a href="' . KB::get( 'post-settings', 'Options Panel Meta Posts Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'rank-math' ) . '</a>.',
|
||||
'page' => '<a href="' . KB::get( 'page-settings', 'Options Panel Meta Pages Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'rank-math' ) . '</a>.',
|
||||
'product' => '<a href="' . KB::get( 'product-settings', 'Options Panel Meta Products Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'rank-math' ) . '</a>.',
|
||||
'attachment' => '<a href="' . KB::get( 'media-settings', 'Options Panel Meta Attachments Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'rank-math' ) . '</a>.',
|
||||
];
|
||||
|
||||
$names = [
|
||||
'post' => 'single %s',
|
||||
'page' => 'single %s',
|
||||
'product' => 'product pages',
|
||||
'attachment' => 'media %s',
|
||||
];
|
||||
|
||||
$tabs['p_types'] = [
|
||||
'title' => esc_html__( 'Post Types:', 'rank-math' ),
|
||||
'type' => 'seprator',
|
||||
];
|
||||
|
||||
foreach ( Helper::get_accessible_post_types() as $post_type ) {
|
||||
$obj = get_post_type_object( $post_type );
|
||||
$link = isset( $links[ $obj->name ] ) ? $links[ $obj->name ] : '';
|
||||
$obj_name = isset( $names[ $obj->name ] ) ? sprintf( $names[ $obj->name ], $obj->name ) : $obj->name;
|
||||
|
||||
$tabs[ 'post-type-' . $obj->name ] = [
|
||||
'title' => 'attachment' === $post_type ? esc_html__( 'Attachments', 'rank-math' ) : $obj->label,
|
||||
'icon' => isset( $icons[ $obj->name ] ) ? $icons[ $obj->name ] : $icons['default'],
|
||||
/* translators: 1. post type name 2. link */
|
||||
'desc' => sprintf( esc_html__( 'Change Global SEO, Schema, and other settings for %1$s. %2$s', 'rank-math' ), $obj_name, $link ),
|
||||
'post_type' => $obj->name,
|
||||
'file' => rank_math()->includes_dir() . 'settings/titles/post-types.php',
|
||||
'classes' => 'attachment' === $post_type ? 'rank-math-advanced-option' : '',
|
||||
];
|
||||
}
|
||||
|
||||
return $tabs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add taxonomy tabs in the Title Settings panel.
|
||||
*
|
||||
* @param array $tabs Holds the tabs of the options panel.
|
||||
* @return array
|
||||
*/
|
||||
public function title_taxonomy_settings( $tabs ) {
|
||||
$icons = Helper::choices_taxonomy_icons();
|
||||
|
||||
$hash_name = [
|
||||
'category' => 'category archive pages',
|
||||
'product_cat' => 'Product category pages',
|
||||
'product_tag' => 'Product tag pages',
|
||||
];
|
||||
|
||||
$hash_link = [
|
||||
'category' => '<a href="' . KB::get( 'category-settings', 'Options Panel Meta Categories Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'rank-math' ) . '</a>.',
|
||||
'post_tag' => '<a href="' . KB::get( 'tag-settings', 'Options Panel Meta Tags Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'rank-math' ) . '</a>.',
|
||||
'product_cat' => '<a href="' . KB::get( 'product-categories-settings', 'Options Panel Meta Product Categories Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'rank-math' ) . '</a>.',
|
||||
'product_tag' => '<a href="' . KB::get( 'product-tags-settings', 'Options Panel Meta Product Tags Tab' ) . '" target="_blank">' . esc_html__( 'Learn more', 'rank-math' ) . '</a>.',
|
||||
];
|
||||
|
||||
$taxonomies_data = [];
|
||||
foreach ( Helper::get_accessible_taxonomies() as $taxonomy ) {
|
||||
$attached = implode( ' + ', $taxonomy->object_type );
|
||||
|
||||
$taxonomies_data[ $attached ][ $taxonomy->name ] = $taxonomy;
|
||||
}
|
||||
|
||||
foreach ( $taxonomies_data as $attached => $taxonomies ) {
|
||||
// Seprator.
|
||||
$tabs[ $attached ] = [
|
||||
'title' => ucwords( $attached ) . ':',
|
||||
'type' => 'seprator',
|
||||
];
|
||||
|
||||
foreach ( $taxonomies as $taxonomy ) {
|
||||
$link = isset( $hash_link[ $taxonomy->name ] ) ? $hash_link[ $taxonomy->name ] : '';
|
||||
$taxonomy_name = isset( $hash_name[ $taxonomy->name ] ) ? $hash_name[ $taxonomy->name ] : $taxonomy->label;
|
||||
|
||||
$tabs[ 'taxonomy-' . $taxonomy->name ] = [
|
||||
'icon' => isset( $icons[ $taxonomy->name ] ) ? $icons[ $taxonomy->name ] : $icons['default'],
|
||||
'title' => $taxonomy->label,
|
||||
/* translators: 1. taxonomy name 2. link */
|
||||
'desc' => sprintf( esc_html__( 'Change Global SEO, Schema, and other settings for %1$s. %2$s', 'rank-math' ), $taxonomy_name, $link ),
|
||||
'taxonomy' => $taxonomy->name,
|
||||
'file' => rank_math()->includes_dir() . 'settings/titles/taxonomies.php',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
if ( isset( $tabs['taxonomy-post_format'] ) ) {
|
||||
$tab = $tabs['taxonomy-post_format'];
|
||||
unset( $tabs['taxonomy-post_format'] );
|
||||
$tab['title'] = esc_html__( 'Post Formats', 'rank-math' );
|
||||
$tab['page_title'] = esc_html__( 'Post Formats Archive', 'rank-math' );
|
||||
Arr::insert( $tabs, [ 'taxonomy-post_format' => $tab ], 5 );
|
||||
}
|
||||
|
||||
return $tabs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if certain fields got updated.
|
||||
*
|
||||
* @param int $object_id The ID of the current object.
|
||||
* @param array $updated Array of field ids that were updated.
|
||||
* Will only include field ids that had values change.
|
||||
*/
|
||||
public function check_updated_fields( $object_id, $updated ) {
|
||||
|
||||
/**
|
||||
* Filter: Allow developers to add option fields which will flush the rewrite rules when updated.
|
||||
*
|
||||
* @param array $flush_fields Array of field IDs for which we need to flush.
|
||||
*/
|
||||
$flush_fields = $this->do_filter(
|
||||
'flush_fields',
|
||||
[
|
||||
'strip_category_base',
|
||||
'disable_author_archives',
|
||||
'url_author_base',
|
||||
'attachment_redirect_urls',
|
||||
'attachment_redirect_default',
|
||||
'nofollow_external_links',
|
||||
'nofollow_image_links',
|
||||
'nofollow_domains',
|
||||
'nofollow_exclude_domains',
|
||||
'new_window_external_links',
|
||||
'redirections_header_code',
|
||||
'redirections_post_redirect',
|
||||
'redirections_debug',
|
||||
]
|
||||
);
|
||||
|
||||
foreach ( $flush_fields as $field_id ) {
|
||||
if ( in_array( $field_id, $updated, true ) ) {
|
||||
Helper::schedule_flush_rewrite();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$this->update_htaccess();
|
||||
}
|
||||
|
||||
/**
|
||||
* Update .htaccess.
|
||||
*/
|
||||
private function update_htaccess() {
|
||||
if ( empty( Param::post( 'htaccess_accept_changes' ) ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Writing to .htaccess file and escaping for HTML will break functionality.
|
||||
$content = wp_unslash( $_POST['htaccess_content'] );
|
||||
if ( empty( $content ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! $this->do_htaccess_backup() ) {
|
||||
Helper::add_notification(
|
||||
esc_html__( 'Failed to backup .htaccess file. Please check file permissions.', 'rank-math' ),
|
||||
[ 'type' => 'error' ]
|
||||
);
|
||||
return;
|
||||
}
|
||||
if ( ! $this->do_htaccess_update( $content ) ) {
|
||||
Helper::add_notification(
|
||||
esc_html__( 'Failed to update .htaccess file. Please check file permissions.', 'rank-math' ),
|
||||
[ 'type' => 'error' ]
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
Helper::add_notification( esc_html__( '.htaccess file updated successfully.', 'rank-math' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Create htaccess backup.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function do_htaccess_backup() {
|
||||
if ( ! Helper::is_filesystem_direct() ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$wp_filesystem = Helper::get_filesystem();
|
||||
|
||||
$path = get_home_path();
|
||||
$file = $path . '.htaccess';
|
||||
if ( ! $wp_filesystem->is_writable( $path ) || ! $wp_filesystem->exists( $file ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$backup = $path . uniqid( '.htaccess_back_' );
|
||||
return $wp_filesystem->copy( $file, $backup, true );
|
||||
}
|
||||
|
||||
/**
|
||||
* Update htaccess file.
|
||||
*
|
||||
* @param string $content Htaccess content.
|
||||
* @return string|bool
|
||||
*/
|
||||
private function do_htaccess_update( $content ) {
|
||||
if ( empty( $content ) || ! Helper::is_filesystem_direct() ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$wp_filesystem = Helper::get_filesystem();
|
||||
$htaccess_file = get_home_path() . '.htaccess';
|
||||
|
||||
return ! $wp_filesystem->is_writable( $htaccess_file ) ? false : $wp_filesystem->put_contents( $htaccess_file, $content );
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,361 @@
|
||||
<?php
|
||||
/**
|
||||
* The option page functionality of the plugin.
|
||||
*
|
||||
* @since 0.9.0
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Admin
|
||||
* @author Rank Math <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Admin;
|
||||
|
||||
use WP_Http;
|
||||
use RankMath\KB;
|
||||
use RankMath\CMB2;
|
||||
use RankMath\Helper;
|
||||
use RankMath\Traits\Hooker;
|
||||
use RankMath\Helpers\Str;
|
||||
use RankMath\Helpers\Param;
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
/**
|
||||
* Options class.
|
||||
*/
|
||||
class Options {
|
||||
|
||||
use Hooker;
|
||||
|
||||
/**
|
||||
* Page title.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $title = 'Settings';
|
||||
|
||||
/**
|
||||
* Menu title.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $menu_title = 'Settings';
|
||||
|
||||
/**
|
||||
* Hold tabs for page.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $tabs = [];
|
||||
|
||||
/**
|
||||
* Hold folder name for tab files.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $folder = '';
|
||||
|
||||
/**
|
||||
* Menu Position.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $position = 10;
|
||||
|
||||
/**
|
||||
* The capability required for this menu to be displayed to the user.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $capability = 'manage_options';
|
||||
|
||||
/**
|
||||
* CMB2 option page id.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $cmb_id = null;
|
||||
|
||||
/**
|
||||
* Options key.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $key = '';
|
||||
|
||||
/**
|
||||
* The Constructor
|
||||
*
|
||||
* @param array $config Array of configuration.
|
||||
*/
|
||||
public function __construct( $config ) {
|
||||
|
||||
$this->config( $config );
|
||||
$this->cmb_id = $this->key . '_options';
|
||||
|
||||
$this->action( 'cmb2_admin_init', 'register_option_page', $this->position );
|
||||
$this->action( 'admin_post_' . $this->key, 'reset_options', 2 );
|
||||
|
||||
if ( true === empty( get_option( $this->key ) ) ) {
|
||||
$this->action( 'cmb2_init_hookup_' . $this->cmb_id, 'set_defaults', 11 );
|
||||
}
|
||||
|
||||
if ( ! $this->is_current_page() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->action( 'admin_enqueue_scripts', 'enqueue' );
|
||||
$this->action( 'admin_body_class', 'body_class' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Create cmb2 box.
|
||||
*
|
||||
* @return CMB2
|
||||
*/
|
||||
private function create_cmb2() {
|
||||
return new_cmb2_box(
|
||||
[
|
||||
'id' => $this->cmb_id,
|
||||
'title' => $this->title,
|
||||
'menu_title' => $this->menu_title,
|
||||
'capability' => $this->capability,
|
||||
'object_types' => [ 'options-page' ],
|
||||
'option_key' => $this->key,
|
||||
'parent_slug' => 'rank-math',
|
||||
'cmb_styles' => false,
|
||||
'display_cb' => [ $this, 'display' ],
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create option object and add settings.
|
||||
*/
|
||||
public function register_option_page() {
|
||||
$cmb = $this->create_cmb2();
|
||||
$tabs = $this->get_tabs();
|
||||
|
||||
$cmb->add_field(
|
||||
[
|
||||
'id' => 'setting-panel-container-' . $this->cmb_id,
|
||||
'type' => 'tab_container_open',
|
||||
'classes' => 'before-header',
|
||||
'tabs' => $tabs,
|
||||
]
|
||||
);
|
||||
|
||||
foreach ( $tabs as $id => $tab ) {
|
||||
$located = $this->locate_file( $id, $tab );
|
||||
if ( false === $located ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$cmb->add_field(
|
||||
[
|
||||
'name' => esc_html__( 'Panel', 'rank-math' ),
|
||||
'id' => 'setting-panel-' . $id,
|
||||
'type' => 'tab',
|
||||
'open' => true,
|
||||
'classes' => isset( $tab['classes'] ) ? $tab['classes'] : '',
|
||||
]
|
||||
);
|
||||
|
||||
$cmb->add_field(
|
||||
[
|
||||
'id' => $id . '_section_title',
|
||||
'type' => 'title',
|
||||
'name' => isset( $tab['page_title'] ) ? $tab['page_title'] : ( isset( $tab['title'] ) ? $tab['title'] : '' ),
|
||||
'desc' => isset( $tab['desc'] ) ? $tab['desc'] : '',
|
||||
'after' => isset( $tab['after'] ) ? $tab['after'] : '',
|
||||
'classes' => 'tab-header',
|
||||
'after_row' => isset( $tab['after_row'] ) ? $tab['after_row'] : '',
|
||||
]
|
||||
);
|
||||
|
||||
include $located;
|
||||
|
||||
$this->do_action( "admin/settings/{$id}", $cmb, $tab );
|
||||
|
||||
$cmb->add_field(
|
||||
[
|
||||
'id' => 'setting-panel-' . $id . '-close',
|
||||
'type' => 'tab',
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
$cmb->add_field(
|
||||
[
|
||||
'id' => 'setting-panel-container-close-' . $this->cmb_id,
|
||||
'type' => 'tab_container_close',
|
||||
]
|
||||
);
|
||||
|
||||
CMB2::pre_init( $cmb );
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the default values if not set.
|
||||
*
|
||||
* @param CMB2 $cmb The CMB2 object to hookup.
|
||||
*/
|
||||
public function set_defaults( $cmb ) {
|
||||
foreach ( $cmb->prop( 'fields' ) as $id => $field_args ) {
|
||||
$field = $cmb->get_field( $id );
|
||||
if ( isset( $field_args['default'] ) || isset( $field_args['default_cb'] ) ) {
|
||||
$defaults[ $id ] = $field->get_default();
|
||||
}
|
||||
}
|
||||
|
||||
// Save Defaults if any.
|
||||
if ( ! empty( $defaults ) ) {
|
||||
add_option( $this->key, $defaults );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset options.
|
||||
*/
|
||||
public function reset_options() {
|
||||
|
||||
if ( ! check_admin_referer( 'rank-math-reset-options' ) || ! current_user_can( 'manage_options' ) ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$url = wp_get_referer();
|
||||
if ( ! $url ) {
|
||||
$url = admin_url();
|
||||
}
|
||||
|
||||
if ( filter_has_var( INPUT_POST, 'reset-cmb' ) && Param::post( 'action' ) === $this->key ) {
|
||||
delete_option( $this->key );
|
||||
Helper::redirect( esc_url_raw( $url ), WP_Http::SEE_OTHER );
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueue styles and scripts.
|
||||
*/
|
||||
public function enqueue() {
|
||||
$screen = get_current_screen();
|
||||
|
||||
if ( ! Str::contains( $this->key, $screen->id ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
\CMB2_Hookup::enqueue_cmb_css();
|
||||
rank_math()->variables->setup_json();
|
||||
wp_enqueue_style( 'rank-math-options', rank_math()->plugin_url() . 'assets/admin/css/option-panel.css', [ 'select2-rm', 'rank-math-common', 'rank-math-cmb2' ], rank_math()->version );
|
||||
wp_enqueue_script( 'rank-math-options', rank_math()->plugin_url() . 'assets/admin/js/option-panel.js', [ 'underscore', 'select2-rm', 'lodash', 'rank-math-common', 'wp-api-fetch' ], rank_math()->version, true );
|
||||
|
||||
// Add thank you.
|
||||
Helper::add_json( 'indexUrl', rank_math()->plugin_url() . 'assets/admin/js/search-index/' );
|
||||
Helper::add_json( 'optionPage', str_replace( 'rank-math-options-', '', $this->key ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Add classes to <body> of WordPress admin.
|
||||
*
|
||||
* @param string $classes List of CSS classes.
|
||||
* @return string
|
||||
*/
|
||||
public function body_class( $classes = '' ) {
|
||||
$mode = Helper::is_advanced_mode() ? 'advanced' : 'basic';
|
||||
return $classes . ' rank-math-page rank-math-mode-' . $mode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Display Setting on a page.
|
||||
*
|
||||
* @param CMB2_Options $machine Current CMB2 box object.
|
||||
*/
|
||||
public function display( $machine ) {
|
||||
$cmb = $machine->cmb;
|
||||
|
||||
// Header.
|
||||
rank_math()->admin->display_admin_header();
|
||||
?>
|
||||
|
||||
<?php if ( ! defined( 'RANK_MATH_PRO_FILE' ) ) : ?>
|
||||
<div class="rank-math-unlock-pro-notice" id="rank-math-unlock-pro-notice">
|
||||
<a href="<?php KB::the( 'pro', 'Unlock PRO Options Panel Notice' ); ?>" target="_blank" class="pro-link">
|
||||
<p>
|
||||
<?php esc_html_e( 'Take your SEO to the Next Level!', 'rank-math' ); ?>
|
||||
<strong><?php esc_html_e( 'Get Rank Math PRO!', 'rank-math' ); ?></strong>
|
||||
<span><?php esc_html_e( 'Click here to see all the exciting features.', 'rank-math' ); ?></span>
|
||||
</p>
|
||||
<div class="close-notice">
|
||||
<span class="dashicons dashicons-dismiss"></span>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="wrap rank-math-wrap rank-math-wrap-settings">
|
||||
|
||||
<span class="wp-header-end"></span>
|
||||
|
||||
<form class="cmb-form" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>" method="POST" id="<?php echo esc_attr( $cmb->cmb_id ); ?>" enctype="multipart/form-data" encoding="multipart/form-data">
|
||||
|
||||
<input type="hidden" name="action" value="<?php echo esc_attr( $machine->option_key ); ?>">
|
||||
<?php $machine->options_page_metabox(); ?>
|
||||
|
||||
<footer class="form-footer rank-math-ui settings-footer wp-clearfix">
|
||||
<?php wp_nonce_field( 'rank-math-reset-options' ); ?>
|
||||
<input type="submit" name="submit-cmb" id="submit-cmb" title="<?php echo esc_html__( 'Ctrl/Cmd + Enter', 'rank-math' ); ?>" class="button button-primary save-options" value="<?php esc_attr_e( 'Save Changes', 'rank-math' ); ?>">
|
||||
<input type="submit" name="reset-cmb" id="rank-math-reset-cmb" value="<?php esc_attr_e( 'Reset Options', 'rank-math' ); ?>" class="button button-secondary reset-options alignleft">
|
||||
</footer>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
<?php
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if we are on the correct page.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function is_current_page() {
|
||||
return Param::request( 'page' ) === $this->key || Param::request( 'action' ) === $this->key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get setting tabs.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function get_tabs() {
|
||||
|
||||
$filter = str_replace( '-', '_', str_replace( 'rank-math-', '', $this->key ) );
|
||||
/**
|
||||
* Allow developers to add new tabs into option panel.
|
||||
*
|
||||
* The dynamic part of hook is, page name without 'rank-math-' prefix.
|
||||
*
|
||||
* @param array $tabs
|
||||
*/
|
||||
return $this->do_filter( "admin/options/{$filter}_tabs", $this->tabs );
|
||||
}
|
||||
|
||||
/**
|
||||
* Locate tab options file.
|
||||
*
|
||||
* @param string $id Tab id.
|
||||
* @param array $tab Tab options.
|
||||
* @return string|boolean
|
||||
*/
|
||||
private function locate_file( $id, $tab ) {
|
||||
if ( isset( $tab['type'] ) && 'seprator' === $tab['type'] ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$file = isset( $tab['file'] ) && ! empty( $tab['file'] ) ? $tab['file'] : rank_math()->includes_dir() . "settings/{$this->folder}/{$id}.php";
|
||||
|
||||
return file_exists( $file ) ? $file : false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,326 @@
|
||||
<?php
|
||||
/**
|
||||
* The admin-page functionality.
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @package RankMath
|
||||
* @subpackage RankMath\Admin
|
||||
* @author RankMath <support@rankmath.com>
|
||||
*/
|
||||
|
||||
namespace RankMath\Admin;
|
||||
|
||||
use RankMath\Helpers\Param;
|
||||
|
||||
/**
|
||||
* Page class.
|
||||
*/
|
||||
class Page {
|
||||
|
||||
/**
|
||||
* Unique ID used for menu_slug.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $id = null;
|
||||
|
||||
/**
|
||||
* The text to be displayed in the title tags of the page.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $title = null;
|
||||
|
||||
/**
|
||||
* The slug name for the parent menu.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $parent = null;
|
||||
|
||||
/**
|
||||
* The The on-screen name text for the menu.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $menu_title = null;
|
||||
|
||||
/**
|
||||
* The capability required for this menu to be displayed to the user.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $capability = 'manage_options';
|
||||
|
||||
/**
|
||||
* The icon for this menu.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $icon = 'dashicons-art';
|
||||
|
||||
/**
|
||||
* The position in the menu order this menu should appear.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
public $position = -1;
|
||||
|
||||
/**
|
||||
* The function/file that displays the page content for the menu page.
|
||||
*
|
||||
* @var string|callable
|
||||
*/
|
||||
public $render = null;
|
||||
|
||||
/**
|
||||
* The function that run on page POST to save data.
|
||||
*
|
||||
* @var callable
|
||||
*/
|
||||
public $onsave = null;
|
||||
|
||||
/**
|
||||
* Hold contextual help tabs.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $help = null;
|
||||
|
||||
/**
|
||||
* Hold scripts and styles.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $assets = null;
|
||||
|
||||
/**
|
||||
* Check if plugin is network active.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $is_network = false;
|
||||
|
||||
/**
|
||||
* Hold classes for body tag.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $classes = null;
|
||||
|
||||
/**
|
||||
* The Constructor.
|
||||
*
|
||||
* @param string $id Admin page unique id.
|
||||
* @param string $title Title of the admin page.
|
||||
* @param array $config Optional. Override page settings.
|
||||
*/
|
||||
public function __construct( $id, $title, $config = [] ) {
|
||||
|
||||
// Early bail!
|
||||
if ( ! $id ) {
|
||||
wp_die( esc_html__( '$id variable required', 'rank-math' ), esc_html__( 'Variable Required', 'rank-math' ) );
|
||||
}
|
||||
|
||||
if ( ! $title ) {
|
||||
wp_die( esc_html__( '$title variable required', 'rank-math' ), esc_html__( 'Variable Required', 'rank-math' ) );
|
||||
}
|
||||
|
||||
$this->id = $id;
|
||||
$this->title = $title;
|
||||
foreach ( $config as $key => $value ) {
|
||||
$this->$key = $value;
|
||||
}
|
||||
|
||||
if ( ! $this->menu_title ) {
|
||||
$this->menu_title = $title;
|
||||
}
|
||||
|
||||
add_action( 'init', [ $this, 'init' ], 25 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Init admin page when WordPress Initialises.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function init() {
|
||||
$priority = $this->parent ? intval( $this->position ) : -1;
|
||||
add_action( $this->is_network ? 'network_admin_menu' : 'admin_menu', [ $this, 'register_menu' ], $priority );
|
||||
|
||||
// If not the page is not this page stop here.
|
||||
if ( ! $this->is_current_page() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$hooks = [
|
||||
'admin_init' => [
|
||||
'callback' => 'save',
|
||||
'condition' => ! is_null( $this->onsave ) && is_callable( $this->onsave ),
|
||||
],
|
||||
'admin_enqueue_scripts' => [
|
||||
'callback' => 'enqueue',
|
||||
'condition' => ! empty( $this->assets ),
|
||||
],
|
||||
'admin_head' => [
|
||||
'callback' => 'contextual_help',
|
||||
'condition' => ! empty( $this->help ),
|
||||
],
|
||||
'admin_body_class' => [
|
||||
'callback' => 'body_class',
|
||||
'condition' => ! empty( $this->classes ),
|
||||
],
|
||||
];
|
||||
|
||||
foreach ( $hooks as $hook => $data ) {
|
||||
if ( true === $data['condition'] ) {
|
||||
add_action( $hook, [ $this, $data['callback'] ] );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Register Admin Menu.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function register_menu() {
|
||||
if ( ! $this->parent ) {
|
||||
add_menu_page( $this->title, $this->menu_title, $this->capability, $this->id, [ $this, 'display' ], $this->icon, $this->position );
|
||||
return;
|
||||
}
|
||||
|
||||
add_submenu_page( $this->parent, $this->title, $this->menu_title, $this->capability, $this->id, [ $this, 'display' ] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueue styles and scripts.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function enqueue() {
|
||||
$this->enqueue_styles();
|
||||
$this->enqueue_scripts();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add classes to <body> of WordPress admin.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param string $classes Space-separated list of CSS classes.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function body_class( $classes = '' ) {
|
||||
return $classes . ' ' . join( ' ', $this->classes );
|
||||
}
|
||||
|
||||
/**
|
||||
* Save anything you want using onsave function.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function save() {
|
||||
call_user_func( $this->onsave, $this );
|
||||
}
|
||||
|
||||
/**
|
||||
* Contextual Help.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function contextual_help() {
|
||||
$screen = get_current_screen();
|
||||
|
||||
foreach ( $this->help as $tab_id => $tab ) {
|
||||
$tab['id'] = $tab_id;
|
||||
$tab['content'] = $this->get_help_content( $tab );
|
||||
$screen->add_help_tab( $tab );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Render admin page content using render function you passed in config.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
public function display() {
|
||||
if ( is_null( $this->render ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( is_callable( $this->render ) ) {
|
||||
call_user_func( $this->render, $this );
|
||||
return;
|
||||
}
|
||||
|
||||
if ( is_string( $this->render ) ) {
|
||||
include_once $this->render;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the page is currrent page.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function is_current_page() {
|
||||
return Param::get( 'page' ) === $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueue styles
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
private function enqueue_styles() {
|
||||
if ( ! isset( $this->assets['styles'] ) || empty( $this->assets['styles'] ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ( $this->assets['styles'] as $handle => $src ) {
|
||||
wp_enqueue_style( $handle, $src, null, rank_math()->version );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Enqueue scripts.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
private function enqueue_scripts() {
|
||||
if ( ! isset( $this->assets['scripts'] ) || empty( $this->assets['scripts'] ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ( $this->assets['scripts'] as $handle => $src ) {
|
||||
wp_enqueue_script( $handle, $src, null, rank_math()->version, true );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get tab content
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @param array $tab Tab to get content for.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function get_help_content( $tab ) {
|
||||
ob_start();
|
||||
|
||||
// If it is a function.
|
||||
if ( isset( $tab['content'] ) && is_callable( $tab['content'] ) ) {
|
||||
call_user_func( $tab['content'] );
|
||||
}
|
||||
|
||||
// If it is a file.
|
||||
if ( isset( $tab['view'] ) && $tab['view'] ) {
|
||||
require $tab['view'];
|
||||
}
|
||||
|
||||
return ob_get_clean();
|
||||
}
|
||||
}
|
||||