Skip to content
Snippets Groups Projects
Verified Commit 0304149c authored by Andrej Ramašeuski's avatar Andrej Ramašeuski
Browse files

Podpora title

parent 41e533f7
No related branches found
No related tags found
No related merge requests found
Pipeline #11091 passed
2.3.0 2.4.0
...@@ -3,6 +3,7 @@ use Mojo::Base 'Mojolicious::Controller', -signatures; ...@@ -3,6 +3,7 @@ use Mojo::Base 'Mojolicious::Controller', -signatures;
use Data::Validate::URI qw(is_uri); use Data::Validate::URI qw(is_uri);
use Image::PNG::QRCode 'qrpng'; use Image::PNG::QRCode 'qrpng';
use Mojo::UserAgent;
use constant SHORTCUT => qr/^[a-z\d\-]{1,8}$/; use constant SHORTCUT => qr/^[a-z\d\-]{1,8}$/;
...@@ -49,7 +50,7 @@ sub create ($c) { ...@@ -49,7 +50,7 @@ sub create ($c) {
$c->openapi->valid_input or return; $c->openapi->valid_input or return;
my $args = $c->req->json; my $args = $c->req->json;
my $url = $args->{url}; my $url = $c->sanitize_url($args->{url});
return $c->error(400, 'Chybná URL adresa!') if ! is_uri($url); return $c->error(400, 'Chybná URL adresa!') if ! is_uri($url);
my $custom = lc($args->{shortcut}); my $custom = lc($args->{shortcut});
...@@ -65,8 +66,16 @@ sub create ($c) { ...@@ -65,8 +66,16 @@ sub create ($c) {
return $c->error(400, "Zkratka $custom už je použitá") if $exists; return $c->error(400, "Zkratka $custom už je použitá") if $exists;
} }
my $title = '';
my $ua = Mojo::UserAgent->new;
eval {
$title = $ua->get($url)->result->dom->at('title')->text;
};
my $shortcut = $c->user->add_to_shortcuts({ my $shortcut = $c->user->add_to_shortcuts({
url => $c->sanitize_url($url), url => $url,
title => $title,
shortcut => ($custom || $c->schema->resultset('Shortcut')->generate()) shortcut => ($custom || $c->schema->resultset('Shortcut')->generate())
}); });
...@@ -87,6 +96,7 @@ sub update ($c) { ...@@ -87,6 +96,7 @@ sub update ($c) {
$shortcut->update({ $shortcut->update({
code => $c->req->json->{code}, code => $c->req->json->{code},
url => $c->req->json->{url}, url => $c->req->json->{url},
title => $c->req->json->{title},
}); });
$c->render(status => 204, text => '' ); $c->render(status => 204, text => '' );
} }
......
...@@ -37,6 +37,10 @@ components: ...@@ -37,6 +37,10 @@ components:
type: string type: string
description: URL pro přesměrování description: URL pro přesměrování
maxLength: 1024 maxLength: 1024
title:
type: string
description: Titulek stránky
maxLength: 4096
code: code:
type: integer type: integer
description: Kód přesměrování description: Kód přesměrování
......
...@@ -41,11 +41,11 @@ ...@@ -41,11 +41,11 @@
</thead> </thead>
<tbody> <tbody>
<tr v-for="shortcut in shortcuts" > <tr v-for="shortcut in shortcuts" >
<td class="text-bold w-32" @click="showEdit(shortcut)" >{{shortcut.shortcut}}</td> <td v-bind:title="shortcut.title" class="text-bold w-32" @click="showInfo(shortcut)" >{{shortcut.shortcut}}</td>
<td class="text-bold w-32" @click="showEdit(shortcut)" >{{ formatTimestamp(shortcut.created) }}</td> <td class="text-bold w-32" @click="showInfo(shortcut)" >{{ formatTimestamp(shortcut.created) }}</td>
<td v-bind:title="shortcut.url" @click="showEdit(shortcut)" >{{ stripURL(shortcut.url) }}</td> <td v-bind:title="shortcut.url" @click="showInfo(shortcut)" >{{ stripURL(shortcut.url) }}</td>
<td class="w-24" @click="showEdit(shortcut)">{{ shortcut.code == 301 ? '301 trvalé' : '302 dočasné'}}</td> <td class="w-24" @click="showInfo(shortcut)">{{ shortcut.code == 301 ? '301 trvalé' : '302 dočasné'}}</td>
<td class="w-16 text-right" @click="showEdit(shortcut)">{{shortcut.counter}}</td> <td class="w-16 text-right" @click="showInfo(shortcut)">{{shortcut.counter}}</td>
<td class="w-40"> <td class="w-40">
<i class="ico--link cursor-pointer mx-1" @click="showInfo(shortcut)" title="Zkopirovat odkaz"></i> <i class="ico--link cursor-pointer mx-1" @click="showInfo(shortcut)" title="Zkopirovat odkaz"></i>
<i class="ico--calendar cursor-pointer mx-1" @click="window.location.href ='/shortcut/' + shortcut.id" title="Statistika"></i> <i class="ico--calendar cursor-pointer mx-1" @click="window.location.href ='/shortcut/' + shortcut.id" title="Statistika"></i>
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
<div class="card__body w-80 text-center"> <div class="card__body w-80 text-center">
<p class="card-body-text">Zkratka byla zkopírovana do schránky. Pro její sdílení můžete používat i QR kód</p> <p class="card-body-text">Zkratka byla zkopírovana do schránky. Pro její sdílení můžete používat i QR kód</p>
<img v-bind:src="'/' + selectedShortcut.shortcut + '/qr.png'" class="mx-auto my-8"> <img v-bind:src="'/' + selectedShortcut.shortcut + '/qr.png'" class="mx-auto my-8">
<b>{{ selectedShortcut.full_url }}</b> <b><a v-bind:href="selectedShortcut.full_url">{{ selectedShortcut.full_url }}</a></b>
</div> </div>
</div> </div>
</div> </div>
...@@ -111,7 +111,7 @@ ...@@ -111,7 +111,7 @@
<form class="my-4"> <form class="my-4">
<div class="form-field form-field--error form-field--required mb-4"> <div class="form-field form-field--required mb-4">
<label class="form-field__label" for="url">URL</label> <label class="form-field__label" for="url">URL</label>
<div class="form-field__wrapper form-field__wrapper--shadowed"> <div class="form-field__wrapper form-field__wrapper--shadowed">
<input type="text" class="text-input form-field__control form-field--required" value="" v-model="selectedShortcut.url" id="url" /> <input type="text" class="text-input form-field__control form-field--required" value="" v-model="selectedShortcut.url" id="url" />
...@@ -119,7 +119,7 @@ ...@@ -119,7 +119,7 @@
<div class="form-field__error" v-if="selectedShortcut.url === ''"></div> <div class="form-field__error" v-if="selectedShortcut.url === ''"></div>
</div> </div>
<div class="form-field form-field--error form-field--required mb-4"> <div class="form-field form-field--required mb-4">
<label class="form-field__label" for="code">Typ přesměrování</label> <label class="form-field__label" for="code">Typ přesměrování</label>
<div class="form-field__wrapper form-field__wrapper--shadowed select"> <div class="form-field__wrapper form-field__wrapper--shadowed select">
<select v-model="selectedShortcut.code" class="select__control form-field__control "> <select v-model="selectedShortcut.code" class="select__control form-field__control ">
...@@ -127,7 +127,13 @@ ...@@ -127,7 +127,13 @@
<option value="302">302 dočasné</option> <option value="302">302 dočasné</option>
</select> </select>
</div> </div>
<div class="form-field__error" v-if="shortcut.url === ''"></div> </div>
<div class="form-field mb-4">
<label class="form-field__label" for="code">Titulek</label>
<div class="form-field__wrapper form-field__wrapper--shadowed">
<textarea class="text-input form-field__control" v-model="selectedShortcut.title" rows="5" cols="40" placeholder="Titulek stránky"></textarea>
</div>
</div> </div>
<button class="btn btn--grey-500 btn--hoveractive" @click.prevent="updateShortcut"> <button class="btn btn--grey-500 btn--hoveractive" @click.prevent="updateShortcut">
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment