initial commit
This commit is contained in:
commit
ab862b1cee
2 changed files with 299 additions and 0 deletions
134
alberello.php
Normal file
134
alberello.php
Normal file
|
@ -0,0 +1,134 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Plugin Name: Albërellì
|
||||||
|
* Plugin URI: https://www.your-site.com/
|
||||||
|
* Description: linktree-like interface for wordpress
|
||||||
|
* Version: 0.1
|
||||||
|
* Author: boyska+pinke
|
||||||
|
* Author URI: https://www.your-site.com/
|
||||||
|
**/
|
||||||
|
|
||||||
|
define('ALB_LINK_URI', 'links');
|
||||||
|
|
||||||
|
/* Render {{{ */
|
||||||
|
function parse_code($text) {
|
||||||
|
$links = [];
|
||||||
|
$regexp = '@^(.*)\s+(https?://.*)$@';
|
||||||
|
foreach(explode("\n", $text) as $line) {
|
||||||
|
$ret = preg_match($regexp, rtrim($line, "\n\r"), $matches);
|
||||||
|
if($ret === false || count($matches) < 3) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$link = [
|
||||||
|
'text' => rtrim($matches[1]),
|
||||||
|
'url' => $matches[2]
|
||||||
|
];
|
||||||
|
$links[] = $link;
|
||||||
|
}
|
||||||
|
return $links;
|
||||||
|
}
|
||||||
|
function alb_request() {
|
||||||
|
$is_front = get_option('alb_option_front');
|
||||||
|
$uri = $is_front ? '/' : '/' . ALB_LINK_URI;
|
||||||
|
if($_SERVER["REQUEST_URI"] == $uri ||
|
||||||
|
$_SERVER["REQUEST_URI"] == '/' . ALB_LINK_URI
|
||||||
|
) {
|
||||||
|
$raw = get_option('alb_option_menucode');
|
||||||
|
$links = parse_code($raw);
|
||||||
|
// XXX: fai un foglio di stile e una grafica puffosa
|
||||||
|
echo '<html><head><link href="' . plugins_url('style.css', __FILE__) . '" rel="stylesheet" />';
|
||||||
|
echo "</head><body><main>\n";
|
||||||
|
echo "<header><h1>" . get_bloginfo('name') .
|
||||||
|
"</h1><small class=\"description\">" . get_bloginfo('description') . "</small></header>";
|
||||||
|
echo "<div class=\"links\">";
|
||||||
|
foreach($links as $link) {
|
||||||
|
echo '<a class="link" href="' . esc_html($link['url']) . '">' . esc_html($link['text']) . "</a>";
|
||||||
|
}
|
||||||
|
echo "</div>";
|
||||||
|
echo "</main></body></html>";
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
add_action('init', 'alb_request');
|
||||||
|
/* Render }}} */
|
||||||
|
|
||||||
|
|
||||||
|
/* Settings page {{{ */
|
||||||
|
function alb_settings_menu() {
|
||||||
|
add_options_page('Modifica menu albero', 'Albero dei link', 'activate_plugins', 'alb_settings', 'alb_settings_render', 5);
|
||||||
|
}
|
||||||
|
function alb_register_settings() {
|
||||||
|
register_setting('alb_options', 'alb_option_menucode', 'alb_validate_options');
|
||||||
|
register_setting('alb_options', 'alb_option_front', 'alb_validate_options');
|
||||||
|
add_settings_section('alb_menu', 'Menu', 'alb_settings_section_menu', 'alb_settings');
|
||||||
|
add_settings_field('alb_menucode', 'Versione testuale del menu', 'alb_settings_field_menucode', 'alb_settings', 'alb_menu');
|
||||||
|
add_settings_field('alb_front', 'Il menu deve sovrascrivere l\'homepage?', 'alb_settings_field_front', 'alb_settings', 'alb_menu');
|
||||||
|
}
|
||||||
|
add_action('admin_init', 'alb_register_settings');
|
||||||
|
function alb_settings() {
|
||||||
|
}
|
||||||
|
function alb_settings_render() {
|
||||||
|
?>
|
||||||
|
<h2>Albero dei link</h2>
|
||||||
|
<form action="options.php" method="post">
|
||||||
|
<?php
|
||||||
|
settings_fields('alb_options');
|
||||||
|
do_settings_sections('alb_settings');
|
||||||
|
?>
|
||||||
|
<input name="submit" class="button button-primary" type="submit" value="Save" />
|
||||||
|
</form>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
function alb_settings_section_menu() {
|
||||||
|
$link = get_site_url();
|
||||||
|
if(!get_option('alb_option_front')) {
|
||||||
|
$link .= '/' . ALB_LINK_URI;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<div>
|
||||||
|
Il tuo menu è disponibile all'indirizzo <a href="<?php echo $link; ?>"><?php echo esc_html($link); ?></a>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
function alb_settings_field_menucode() {
|
||||||
|
$value = get_option('alb_option_menucode');
|
||||||
|
if($value === false) {
|
||||||
|
$value = "My website " . get_site_url();
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
<textarea style="width: 100%;" id="alb_option_menucode" name="alb_option_menucode" rows="10" wrap="off" type="text" >
|
||||||
|
<?php
|
||||||
|
echo esc_html($value);
|
||||||
|
?>
|
||||||
|
</textarea>
|
||||||
|
<div>
|
||||||
|
<p>Per ogni link che vuoi aggiungere, scrivi il titolo seguito dall'URL.
|
||||||
|
Vai a capo dopo ogni link.</p>
|
||||||
|
|
||||||
|
<p>Esempio:
|
||||||
|
<pre>
|
||||||
|
Il mio utente mastodon https://mastodon.bida.im/@noblogs
|
||||||
|
Il mio sito preferito https://autistici.org/
|
||||||
|
Un'ottima enciclopedia https://it.wikipedia.org/
|
||||||
|
</pre></p>
|
||||||
|
|
||||||
|
<p>Le righe vuote (o non valide) vengono ignorate</p>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function alb_settings_field_front() {
|
||||||
|
$value = get_option('alb_option_front');
|
||||||
|
?>
|
||||||
|
<input type="checkbox" <?php echo $value ? 'checked' : '' ?> name="alb_option_front" id="alb_option_front" />
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
function alb_validate_options( $input ) {
|
||||||
|
// XXX: protesta quando ci sono linee non vuote che però hanno errori
|
||||||
|
return $input;
|
||||||
|
}
|
||||||
|
add_action('admin_menu', 'alb_settings_menu');
|
||||||
|
/* Settings page }}} */
|
165
style.css
Normal file
165
style.css
Normal file
|
@ -0,0 +1,165 @@
|
||||||
|
/* Stylesheet for alberello link-tree-style */
|
||||||
|
|
||||||
|
|
||||||
|
@import url(
|
||||||
|
"https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700;800;900&display=swap");
|
||||||
|
|
||||||
|
* {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: "Montserrat", sans-serif;
|
||||||
|
background-color: #060c21;
|
||||||
|
}
|
||||||
|
|
||||||
|
main {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
font-size: 1.125rem;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
header { text-align: center;
|
||||||
|
font-size: 2rem;
|
||||||
|
font-weight: 700;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
color: white;
|
||||||
|
padding-top: 10%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.links {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
row-gap: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link {
|
||||||
|
height: 3rem;
|
||||||
|
width: 600px;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
color: #000;
|
||||||
|
|
||||||
|
margin: 0.5rem 0;
|
||||||
|
border-radius: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.about {
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link span {
|
||||||
|
width: 80%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link img {
|
||||||
|
height: 2rem;
|
||||||
|
aspect-ratio: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.linkIcon {
|
||||||
|
height: 2rem !important;
|
||||||
|
aspect-ratio: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link:nth-child(1) {
|
||||||
|
background: #845ec2;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link:nth-child(2) {
|
||||||
|
background: #d65db1;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link:nth-child(3) {
|
||||||
|
background: #ff6f91;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link:nth-child(4) {
|
||||||
|
background: #ff9671;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link:nth-child(5) {
|
||||||
|
background: #ffc75f;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link:nth-child(6) {
|
||||||
|
background: #f9f871;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link:nth-child(7) {
|
||||||
|
background: linear-gradient(90deg,
|
||||||
|
rgba(241, 241, 241, 0.1) 30%,
|
||||||
|
rgba(113, 113, 113, 0.3) 100%),
|
||||||
|
#352e5c;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link:nth-child(8) {
|
||||||
|
background: linear-gradient(90deg,
|
||||||
|
rgba(241, 241, 241, 0.1) 30%,
|
||||||
|
rgba(113, 113, 113, 0.3) 100%),
|
||||||
|
#211d38;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link:hover {
|
||||||
|
filter: drop-shadow(0px 5px 1px rgba(0, 0, 0, 0.2));
|
||||||
|
transform: scale(1.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
.link>* {
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
transition-delay: 0.1s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link:hover>* {
|
||||||
|
transform: scale(1.1);
|
||||||
|
filter: drop-shadow(0px 5px 1px rgba(0, 0, 0, 0.2));
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
body {
|
||||||
|
background-size: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo img {
|
||||||
|
width: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link span {
|
||||||
|
width: 70%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link {
|
||||||
|
width: 95vw;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link:hover {
|
||||||
|
transform: scale(1.01);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue