PluginProbe ʕ •ᴥ•ʔ
Admin Columns / 7.1.4
Admin Columns v7.1.4
7.1.4 7.0.19 2.3.5 2.4 2.4.1 2.4.10 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.6.1 2.5.6.2 2.5.6.3 2.5.6.4 3.0 3.0.1 3.0.2 3.0.3 3.0.5 3.0.7 3.1 3.1.1 3.1.10 3.1.2 3.1.3 3.1.5 3.2.3 3.2.7 3.3.1 3.4.1 3.4.6 3.4.8 4.0.1 4.0.3 4.1.6 4.2.2 4.2.5 4.3 4.3.2 4.4.1 4.4.4 4.4.5 4.5.5 4.6.1 4.7.18 4.7.19 4.7.20 4.7.7 7.0.13 7.0.14 7.0.16 trunk 1.0 1.1 1.1.3 1.2 1.2.1 1.3 1.3.1 1.4 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.5.1 1.4.6 1.4.6.1 1.4.6.2 1.4.6.3 1.4.6.4 1.4.7 1.4.8 1.4.9 2.0.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.2 2.2.1 2.2.1.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.5.1 2.2.6 2.2.6.1 2.2.6.2 2.2.6.3 2.2.6.4 2.2.7 2.2.8 2.2.8.1 2.2.9 2.3.1 2.3.2 2.3.3
codepress-admin-columns / classes / Type / Link.php
codepress-admin-columns / classes / Type Last commit date
Url 2 days ago ColumnFactoryDefinition.php 2 days ago ColumnId.php 2 days ago ColumnWidth.php 2 days ago DateRange.php 2 days ago EditorUrlFactory.php 2 days ago FileSize.php 2 days ago Group.php 2 days ago Groups.php 2 days ago Integration.php 2 days ago Integrations.php 2 days ago KeyGenerator.php 2 days ago Labels.php 2 days ago Link.php 2 days ago ListScreenId.php 2 days ago ListScreenIdGenerator.php 2 days ago ListScreenStatus.php 2 days ago OriginalColumn.php 2 days ago OriginalColumns.php 2 days ago PostTypeSlug.php 2 days ago Promo.php 2 days ago PromoCollection.php 2 days ago StartingPrice.php 2 days ago TableId.php 2 days ago TableIdCollection.php 2 days ago TableScreenContext.php 2 days ago TaxonomySlug.php 2 days ago ToggleOptions.php 2 days ago Uri.php 2 days ago Url.php 2 days ago UserId.php 2 days ago UserRole.php 2 days ago UserRoles.php 2 days ago Value.php 2 days ago ValueCollection.php 2 days ago
Link.php
119 lines
1 <?php
2
3 declare(strict_types=1);
4
5 namespace AC\Type;
6
7 use AC\Renderable;
8
9 final class Link implements Renderable
10 {
11 private string $url;
12
13 private ?string $label;
14
15 private array $attributes;
16
17 /**
18 * @var array<string>|null Allowed protocols passed to esc_url(). Null uses WordPress' defaults.
19 */
20 private ?array $protocols;
21
22 /**
23 * @param array<string, string> $attributes
24 * @param array<string>|null $protocols
25 */
26 public function __construct(
27 string $url,
28 ?string $label = null,
29 array $attributes = [],
30 ?array $protocols = null
31 ) {
32 $this->url = $url;
33 $this->label = $label;
34 $this->attributes = $attributes;
35 $this->protocols = $protocols;
36 }
37
38 public function get_url(): string
39 {
40 return $this->url;
41 }
42
43 public function get_label(): ?string
44 {
45 return $this->label;
46 }
47
48 public function with_label(?string $label): self
49 {
50 return new self($this->url, $label, $this->attributes, $this->protocols);
51 }
52
53 public function with_attribute(string $name, string $value): self
54 {
55 $attributes = $this->attributes;
56 $attributes[$name] = $value;
57
58 return new self($this->url, $this->label, $attributes, $this->protocols);
59 }
60
61 public function with_tooltip(string $tooltip): self
62 {
63 return $this->with_attribute('data-ac-tip', $tooltip);
64 }
65
66 /**
67 * @param array<string, string> $attributes
68 */
69 public function with_attributes(array $attributes): self
70 {
71 return new self(
72 $this->url,
73 $this->label,
74 array_merge($this->attributes, $attributes),
75 $this->protocols
76 );
77 }
78
79 /**
80 * @param array<string> $protocols
81 */
82 public function with_protocols(array $protocols): self
83 {
84 return new self($this->url, $this->label, $this->attributes, $protocols);
85 }
86
87 private function render_attributes(): string
88 {
89 $rendered = [];
90
91 foreach ($this->attributes as $name => $value) {
92 $value = trim((string)$value);
93
94 // An empty value renders a boolean attribute (e.g. "download").
95 $rendered[] = '' !== $value
96 ? sprintf('%s="%s"', $name, esc_attr($value))
97 : (string)$name;
98 }
99
100 return $rendered ? ' ' . implode(' ', $rendered) : '';
101 }
102
103 public function render(): string
104 {
105 return sprintf(
106 '<a href="%s"%s>%s</a>',
107 esc_url($this->url, $this->protocols),
108 $this->render_attributes(),
109 (string)$this->label
110 );
111 }
112
113 public function __toString(): string
114 {
115 return $this->render();
116 }
117
118 }
119