parent
26488e5883
commit
e01c63cfa2
@ -0,0 +1,102 @@ |
||||
// Source & more langs: https://gist.github.com/sgmurphy/3095196
|
||||
|
||||
|
||||
const char_map = { |
||||
// Latin
|
||||
'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE', 'Ç': 'C', |
||||
'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I', 'Î': 'I', 'Ï': 'I', |
||||
'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O', 'Õ': 'O', 'Ö': 'O', 'Ő': 'O', |
||||
'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U', 'Ü': 'U', 'Ű': 'U', 'Ý': 'Y', 'Þ': 'TH', |
||||
'ß': 'ss', |
||||
'à': 'a', 'á': 'a', 'â': 'a', 'ã': 'a', 'ä': 'a', 'å': 'a', 'æ': 'ae', 'ç': 'c', |
||||
'è': 'e', 'é': 'e', 'ê': 'e', 'ë': 'e', 'ì': 'i', 'í': 'i', 'î': 'i', 'ï': 'i', |
||||
'ð': 'd', 'ñ': 'n', 'ò': 'o', 'ó': 'o', 'ô': 'o', 'õ': 'o', 'ö': 'o', 'ő': 'o', |
||||
'ø': 'o', 'ù': 'u', 'ú': 'u', 'û': 'u', 'ü': 'u', 'ű': 'u', 'ý': 'y', 'þ': 'th', |
||||
'ÿ': 'y', |
||||
|
||||
// Latin symbols
|
||||
'©': '(c)', |
||||
|
||||
// Czech
|
||||
'Č': 'C', 'Ď': 'D', 'Ě': 'E', 'Ň': 'N', 'Ř': 'R', 'Š': 'S', 'Ť': 'T', 'Ů': 'U', |
||||
'Ž': 'Z', |
||||
'č': 'c', 'ď': 'd', 'ě': 'e', 'ň': 'n', 'ř': 'r', 'š': 's', 'ť': 't', 'ů': 'u', |
||||
'ž': 'z', |
||||
|
||||
// Polish
|
||||
'Ą': 'A', 'Ć': 'C', 'Ę': 'e', 'Ł': 'L', 'Ń': 'N', 'Ś': 'S', 'Ź': 'Z', |
||||
'Ż': 'Z', |
||||
'ą': 'a', 'ć': 'c', 'ę': 'e', 'ł': 'l', 'ń': 'n', 'ś': 's', 'ź': 'z', |
||||
'ż': 'z', |
||||
} |
||||
|
||||
const alnum = new RegExp('[^a-z0-9]+', 'ig') |
||||
|
||||
/** |
||||
* Create a web friendly URL slug from a string. |
||||
* |
||||
* Although supported, transliteration is discouraged because |
||||
* 1) most web browsers support UTF-8 characters in URLs |
||||
* 2) transliteration causes a loss of information |
||||
* |
||||
* @author Sean Murphy <sean@iamseanmurphy.com> |
||||
* @copyright Copyright 2012 Sean Murphy. All rights reserved. |
||||
* @license http://creativecommons.org/publicdomain/zero/1.0/
|
||||
* |
||||
* @return string |
||||
* @param {string} s |
||||
* @param {object} opt |
||||
*/ |
||||
function url_slug (s, opt) { |
||||
let k |
||||
|
||||
s = String(s) |
||||
opt = Object(opt) |
||||
|
||||
const defaults = { |
||||
'delimiter': '-', |
||||
'limit': undefined, |
||||
'lowercase': true, |
||||
'replacements': {}, |
||||
'transliterate': true |
||||
} |
||||
|
||||
// Merge options
|
||||
for (k in defaults) { |
||||
if (defaults.hasOwnProperty(k) && !opt.hasOwnProperty(k)) { |
||||
opt[k] = defaults[k] |
||||
} |
||||
} |
||||
|
||||
// Make custom replacements
|
||||
for (k in opt.replacements) { |
||||
if (opt.replacements.hasOwnProperty(k)) { |
||||
s = s.replace(new RegExp(k, 'g'), opt.replacements[k]) |
||||
} |
||||
} |
||||
|
||||
// Transliterate characters to ASCII
|
||||
if (opt.transliterate) { |
||||
for (k in char_map) { |
||||
if (char_map.hasOwnProperty(k)) { |
||||
s = s.replace(new RegExp(k, 'g'), char_map[k]) |
||||
} |
||||
} |
||||
} |
||||
|
||||
// Replace non-alphanumeric characters with our delimiter
|
||||
s = s.replace(alnum, opt.delimiter) |
||||
|
||||
// Remove duplicate delimiters
|
||||
s = s.replace(new RegExp('[' + opt.delimiter + ']{2,}', 'g'), opt.delimiter) |
||||
|
||||
// Truncate slug to max. characters
|
||||
s = s.substring(0, opt.limit) |
||||
|
||||
// Remove delimiter from ends
|
||||
s = s.replace(new RegExp('(^' + opt.delimiter + '|' + opt.delimiter + '$)', 'g'), '') |
||||
|
||||
return opt.lowercase ? s.toLowerCase() : s |
||||
} |
||||
|
||||
module.exports = url_slug; |
@ -0,0 +1,39 @@ |
||||
@extends('layouts.app') |
||||
|
||||
@php |
||||
/** @var \App\Models\Table $table */ |
||||
@endphp |
||||
|
||||
@section('content') |
||||
<div class="container"> |
||||
<div class="row justify-content-center"> |
||||
<h2>{{ $table->title }}</h2> |
||||
</div> |
||||
<div class="row justify-content-center"> |
||||
|
||||
<div class="col-md-8"> |
||||
<table class="table table-hover table-sm"> |
||||
<thead> |
||||
<tr> |
||||
<th>ID</th> |
||||
@foreach($columns as $col) |
||||
<th>{{ $col->title }}</th> |
||||
@endforeach |
||||
</tr> |
||||
</thead> |
||||
<tbody> |
||||
@foreach($rows as $row) |
||||
<tr> |
||||
<td>#{{ $row->id }}</td> |
||||
@php($rdata = json_decode($row['data'], true)) |
||||
@foreach($columns as $col) |
||||
<td data-id="{{ $row->id }}">{{ $rdata[$col->name] }}</td> |
||||
@endforeach |
||||
</tr> |
||||
@endforeach |
||||
</tbody> |
||||
</table> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
@endsection |
Loading…
Reference in new issue