Merge branch 'master' of https://github.com/linuxserver/Heimdall into v1.2

This commit is contained in:
Conny Sjöblom
2018-02-13 18:58:12 +02:00
278 changed files with 22627 additions and 903 deletions

View File

@@ -6,7 +6,33 @@ $.when( $.ready ).then(function() {
{
$('.message-container').fadeOut();
}, 3500);
}
if($('.livestats-container').length) {
$('.livestats-container').each(function(index){
var id = $(this).data('id');
var dataonly = $(this).data('dataonly');
var increaseby = (dataonly == 1) ? 20000 : 1000;
var container = $(this);
var max_timer = 30000;
var timer = 5000;
(function worker() {
$.ajax({
url: '/get_stats/'+id,
success: function(data) {
container.html(data);
if(data != '') timer = increaseby;
else {
if(timer < max_timer) timer += 2000;
}
},
complete: function() {
// Schedule the next request when the current one's complete
setTimeout(worker, timer);
}
});
})();
});
}
@@ -56,6 +82,29 @@ $.when( $.ready ).then(function() {
var app = $('#app');
app.removeClass('sidebar');
}).on('click', '#test_config', function(e) {
e.preventDefault();
var apiurl = $('#create input[name=url]').val();
var override_url = $('#create input[name=override_url]');
if(override_url.length && override_url.val() != '') {
apiurl = override_url;
}
var data = {};
data['url'] = apiurl;
$('input.config-item').each(function(index){
var config = $(this).data('config');
data[config] = $(this).val();
})
$.post(
'/test_config',
{ data }, function(data) {
alert(data);
}
);
});
$('#pinlist').on('click', 'a', function(e) {
e.preventDefault();

View File

@@ -232,7 +232,7 @@ body {
padding: 15px;
padding-right: 55px;
//border: 2px solid rgba(0,0,0,0.4);
box-shadow: 0 0 20px 2px rgba(0,0,0,0.3);
//box-shadow: 0 0 15px 1px rgba(35, 35, 35, 0.44);
color: white;
overflow: hidden;
position: relative;
@@ -240,6 +240,11 @@ body {
outline: 1px solid transparent;
display: flex;
align-items: center;
border: 1px solid #333333;
border: 1px solid rgb(74, 74, 74);
border: 1px solid rgba(76, 76, 76, 0.4);
-webkit-background-clip: padding-box;
background-clip: padding-box;
&:after {
content: "";
position: absolute;
@@ -268,6 +273,9 @@ body {
.title {
font-size: 16px;
}
.details {
width: 100%;
}
}
.text-center {
text-align: center!important;
@@ -349,6 +357,9 @@ body {
}
}
}
.homesearch {
height: 51px;
}
.module-actions {
display: flex;
justify-content:space-between;
@@ -418,7 +429,7 @@ div.create {
.app-icon {
max-width: 60px;
margin-right: 20px;
margin-right: 15px;
}
.sidenav {
@@ -517,17 +528,29 @@ div.create {
}
@-webkit-keyframes autofill {
to {
background:#f5f5f5;
color:#fff;
}
}
input:-webkit-autofill {
-webkit-animation-name: autofill;
-webkit-animation-fill-mode: both;
}
to {
background:#f5f5f5;
color:$app-text;
font-weight: bold;
}
}
@keyframes autofill {
to {
background:#f5f5f5;
color:$app-text;
font-weight: bold;
}
}
input:-webkit-autofill {
-webkit-animation-name: autofill;
-webkit-animation-fill-mode: both;
}
input:autofill {
animation-name: autofill;
animation-fill-mode: both;
}
button.link {
border: none;
appearance: none;
@@ -570,7 +593,8 @@ div.create {
background: white;
border-radius: 5px;
box-shadow: 0px 0px 5px 0 rgba(0,0,0,0.4);
overflow: hidden;
overflow: hidden;
position: relative;
}
input {
padding: 17px 15px;
@@ -581,12 +605,12 @@ div.create {
}
button {
position: absolute;
right: 14px;
top: 14px;
right: 0px;
top: 0px;
border: none;
font-size: 16px;
padding: 7px 15px;
line-height: 37px;
line-height: 38px;
font-weight: 500;
border-top-right-radius: 5px;
border-bottom-right-radius: 5px;
@@ -690,7 +714,18 @@ hr {
padding: 8px 12px;
border-radius: 8px;
font-size: 16px;
}
&.test {
font-size: 16px;
font-weight: 500;
border-top-right-radius: 5px;
border-bottom-right-radius: 5px;
color: white;
text-transform: uppercase;
padding: 8px 50px;
background: #207774;
}
}
.upload-btn-wrapper input[type=file] {
font-size: 100px;
@@ -706,4 +741,55 @@ hr {
img {
margin-right: 15px;
}
}
}
.ui-helper-hidden-accessible {
display: none;
}
.livestats-container {
.livestats {
margin: 5px 0px -5px;
padding: 0;
display: flex;
list-style: none;
justify-content: space-between;
width: 100%;
li {
text-align: center;
margin: 0;
line-height: 1;
}
span {
display: block;
text-transform: uppercase;
font-size: 11px;
font-weight: 500;
opacity: 0.5;
line-height: 1;
}
strong {
display: block;
line-height: 1;
}
}
}
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus
input:-webkit-autofill,
textarea:-webkit-autofill,
textarea:-webkit-autofill:hover
textarea:-webkit-autofill:focus,
select:-webkit-autofill,
select:-webkit-autofill:hover,
select:-webkit-autofill:focus {
border: inherit;
-webkit-text-fill-color: inherit;
-webkit-box-shadow: inherit;
transition: inherit;
color: $app-text!important;
}

View File

@@ -59,6 +59,8 @@ return [
'apps.username' => 'Username',
'apps.password' => 'Password',
'apps.config' => 'Config',
'apps.apikey' => 'Api Key',
'apps.enable' => 'Enable',
'url' => 'Url',
'title' => 'Title',

80
resources/lang/no/app.php Normal file
View File

@@ -0,0 +1,80 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| App Language Lines
|--------------------------------------------------------------------------
|
*/
'settings.system' => 'Systemet',
'settings.appearance' => 'Utseende',
'settings.miscellaneous' => 'Diverse',
'settings.version' => 'Versjon',
'settings.background_image' => 'Bakgrunnsbilde',
'settings.homepage_search' => 'Startside Søk',
'settings.search_provider' => 'Søkemotor',
'settings.language' => 'Språk',
'settings.reset' => 'Tilbakestill tilbake til standard',
'settings.remove' => 'Fjern',
'settings.search' => 'søk',
'settings.no_items' => 'Ingen funn',
'settings.label' => 'Merkelapp',
'settings.value' => 'Verdi',
'settings.edit' => 'Endre',
'settings.view' => 'Se',
'options.none' => '- ikke valgt -',
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.yes' => 'Ja',
'options.no' => 'Nei',
'buttons.save' => 'Lagre',
'buttons.cancel' => 'Avbryt',
'buttons.add' => 'Legg til',
'buttons.upload' => 'Last opp en fil',
'dash.pin_item' => 'Fest objektet til dashboardet',
'dash.no_apps' => 'Det er for øyeblikket ingen festede applikasjoner, :link1 eller :link2',
'dash.link1' => 'Legg til en applikasjon her',
'dash.link2' => 'Fest et objekt til dashboardet',
'dash.pinned_items' => 'Festede Objekter',
'apps.app_list' => 'Applikasjonsliste',
'apps.view_trash' => 'Vis papirkurven',
'apps.add_application' => 'Legg til en applikasjon',
'apps.application_name' => 'Applikasjonsnavn',
'apps.colour' => 'Farge',
'apps.icon' => 'Ikon',
'apps.pinned' => 'Festet',
'apps.title' => 'Tittel',
'apps.hex' => 'Hex-farge',
'apps.username' => 'Brukernavn',
'apps.password' => 'Passord',
'apps.config' => 'Konfigurasjon',
'apps.apikey' => 'Api nøkkel',
'apps.enable' => 'Aktiver',
'url' => 'Url',
'title' => 'Tittel',
'delete' => 'Slett',
'optional' => 'Valgfritt',
'restore' => 'Tilbakestill',
'alert.success.item_created' => 'Objektet ble opprettet',
'alert.success.item_updated' => 'Objektet ble oppdatert',
'alert.success.item_deleted' => 'Objektet ble slettet',
'alert.success.item_restored' => 'Objektet ble gjenopprettet',
'alert.success.setting_updated' => 'Du har oppdatert denne innstillingen',
'alert.error.not_exist' => 'Denne innstillingen eksisterer ikke.',
];

View File

@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used during authentication for various
| messages that we need to display to the user. You are free to modify
| these language lines according to your application's requirements.
|
*/
'failed' => 'Påloggingsinformasjonen stemmer ikke overens med våre data.',
'throttle' => 'For mange påloggingsforsøk. Prøv igjen om :seconds sekunder.',
];

View File

@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; Forrige',
'next' => 'Neste &raquo;',
];

View File

@@ -0,0 +1,22 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Password Reset Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are the default lines which match reasons
| that are given by the password broker for a password update attempt
| has failed, such as for an invalid token or invalid new password.
|
*/
'password' => 'Passord må være minst seks tegn og i samsvar med bekreftelsen.',
'reset' => 'Passordet ditt har blitt tilbakestilt!',
'sent' => 'Vi har sendt deg en e-post med en tilbakestillingslink for ditt passord!',
'token' => 'Denne tilgangstoken er ikke gyldig.',
'user' => "Vi fant ingen med den e-postadressen.",
];

78
resources/lang/tr/app.php Normal file
View File

@@ -0,0 +1,78 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| App Language Lines
|--------------------------------------------------------------------------
|
*/
'settings.system' => 'Sistem',
'settings.appearance' => 'Görünüm',
'settings.miscellaneous' => 'Çeşitli',
'settings.version' => 'Versiyon',
'settings.background_image' => 'Arkaplan Resmi',
'settings.homepage_search' => 'Anasayfa Arama',
'settings.search_provider' => 'Arama Motoru',
'settings.language' => 'Dil',
'settings.reset' => 'Varsayılana Geri Dön',
'settings.remove' => 'Sil',
'settings.search' => 'ara',
'settings.no_items' => 'Öğe bulunamadı',
'settings.label' => 'Etiket',
'settings.value' => 'Değer',
'settings.edit' => 'Düzenle',
'settings.view' => 'Görüntüle',
'options.none' => '- ayarlanmadı -',
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.yes' => 'Evet',
'options.no' => 'Hayır',
'buttons.save' => 'Kaydet',
'buttons.cancel' => 'İptal',
'buttons.add' => 'Ekle',
'buttons.upload' => 'Dosya yükle',
'dash.pin_item' => 'Ana panele iğnele',
'dash.no_apps' => 'Ana panele iğneli öğeler, :link1 or :link2',
'dash.link1' => 'Yeni uygulama ekle',
'dash.link2' => 'Ana panele iğnele',
'dash.pinned_items' => 'İğnelenen öğeler',
'apps.app_list' => 'Uygulama listesi',
'apps.view_trash' => 'Çöpü görüntüle',
'apps.add_application' => 'Uygulama ekle',
'apps.application_name' => 'Uygulama adı',
'apps.colour' => 'Renk',
'apps.icon' => 'İkon',
'apps.pinned' => 'İğneli',
'apps.title' => 'Başlık',
'apps.hex' => 'Hex değeri',
'apps.username' => 'Kullanıcı adı',
'apps.password' => 'Şifre',
'apps.config' => 'Yapılandırma',
'url' => 'Adres',
'title' => 'Başlık',
'delete' => 'Sil',
'optional' => 'İsteğe bağlı',
'restore' => 'Eski haline getir',
'alert.success.item_created' => 'Öğe yaratıldı',
'alert.success.item_updated' => 'Öğe güncellendi',
'alert.success.item_deleted' => 'Öğe silindi',
'alert.success.item_restored' => 'Öğe eski haline getirildi',
'alert.success.setting_updated' => 'Ayarlama kaydedildi',
'alert.error.not_exist' => 'Böyle bir seçenek yok.',
];

View File

@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used during authentication for various
| messages that we need to display to the user. You are free to modify
| these language lines according to your application's requirements.
|
*/
'failed' => 'Kimlik bilgileri doğru değil.',
'throttle' => 'Çok fazla girişim. :seconds saniye sonra tekrar deneyin.',
];

View File

@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; Önceki',
'next' => 'Sonraki &raquo;',
];

View File

@@ -0,0 +1,22 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Password Reset Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are the default lines which match reasons
| that are given by the password broker for a password update attempt
| has failed, such as for an invalid token or invalid new password.
|
*/
'password' => 'Şifre en az altı karakter olmalı ve onaylamasına uymalıdır.',
'reset' => 'Şifreniz sıfırlandı!',
'sent' => 'Şifre sıfırlama bağlantısı eposta adresinize yollandı!',
'token' => 'Şifre sıfırlama simgesi geçerli değil.',
'user' => "Adresle ilişkili kullanıcı adı bulunamadı.",
];

View File

@@ -0,0 +1,121 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
'accepted' => ':attribute kabul edilmelidir.',
'active_url' => ':attribute geçerli bir adres değil.',
'after' => ':attribute :date tarihinden sonra olmalıdır.',
'after_or_equal' => ':attribute :date ile aynı veya daha sonra tarihte olmalıdır.',
'alpha' => ':attribute sadece harf içerebilir.',
'alpha_dash' => ':attribute sadece harf, rakam, veya tire içerebilir.',
'alpha_num' => ':attribute sadece harf ve rakam içerebilir.',
'array' => ':attribute dizi olmalıdır.',
'before' => ':attribute :date tarihinden önce olmalıdır.',
'before_or_equal' => ':attribute :date ile aynı ya da daha önce tarihte olmalıdır.',
'between' => [
'numeric' => ':attribute :min ile :max arasında olmalıdır.',
'file' => ':attribute :min ile :max kilobayt arasında olmalıdır.',
'string' => ':attribute :min ile :max arasında karakter içermelidir.',
'array' => ':attribute :min ile :max arasi öğe içermelidir.',
],
'boolean' => ':attribute alanı doğru ya da yanlış olmalıdır.',
'confirmed' => ':attribute onaylamasına uymuyor.',
'date' => ':attribute geçerli bir tarih değil.',
'date_format' => ':attribute :format düzenine uymuyor.',
'different' => ':attribute ve :other farklı olmalı.',
'digits' => ':attribute :digits haneli olmalıdır.',
'digits_between' => ':attribute :min ile :max arası haneli olmalıdır.',
'dimensions' => ':attribute resim boyutları geçersiz.',
'distinct' => ':attribute alan değeri zaten mevcut.',
'email' => ':attribute geçerli bir eposta adresi olmalıdır.',
'exists' => 'Seçili :attribute geçersiz.',
'file' => ':attribute dosya olmalıdır.',
'filled' => ':attribute alanı değer içermelidir.',
'image' => ':attribute resim olmalıdır.',
'in' => 'Seçili :attribute geçersiz.',
'in_array' => ':attribute :other içinde bulunmalıdır.',
'integer' => ':attribute tamsayı olmalıdır.',
'ip' => ':attribute geçerli IP adresi olmalıdır.',
'ipv4' => ':attribute geçerli IPv4 adresi olmalıdır.',
'ipv6' => ':attribute geçerli IPv6 adresi olmalıdır.',
'json' => ':attribute geçerli JSON dizesi olmalıdır.',
'max' => [
'numeric' => ':attribute :max sayısından küçük olmalıdır.',
'file' => ':attribute :max kilobayttan küçük olmalıdır.',
'string' => ':attribute :max haneden az olmalıdır.',
'array' => ':attribute :max öğeden az içermelidir.',
],
'mimes' => 'Geçerli :attribute dosya tipi: :values.',
'mimetypes' => 'Geçerli :attribute dosya tipi: :values.',
'min' => [
'numeric' => ':attribute en az :min olmalıdır.',
'file' => ':attribute en az :min kilobayt olmalıdır.',
'string' => ':attribute en az :min haneli olmalıdır.',
'array' => ':attribute en az :min öğe içermelidir.',
],
'not_in' => 'Seçili :attribute geçersiz.',
'numeric' => ':attribute sayı olmalıdır.',
'present' => ':attribute alanı dolu olmalı.',
'regex' => ':attribute düzeni geçersiz.',
'required' => ':attribute alanı gereklidir.',
'required_if' => ':other :value ise :attribute alanı gereklidir.',
'required_unless' => ':other :values içinde değilse :attribute alanı gereklidir.',
'required_with' => ':values dolu ise :attribute alanı gereklidir.',
'required_with_all' => ':values dolu ise :attribute alanı gereklidir.',
'required_without' => ':values boş ise :attribute alanı gereklidir.',
'required_without_all' => ':values değerlerinin tamamı boş ise :attribute alanı gereklidir.',
'same' => ':attribute ve :other aynı olmalı.',
'size' => [
'numeric' => ':attribute :size olmalıdır.',
'file' => ':attribute :size kilobayt olmalıdır.',
'string' => ':attribute :size haneli olmalıdır.',
'array' => ':attribute :size öğe içermelidir.',
],
'string' => ':attribute dize olmalıdır.',
'timezone' => ':attribute geçerli bir zaman dilimi olmalıdır.',
'unique' => ':attribute zaten kullanımda.',
'uploaded' => ':attribute yüklenemedi.',
'url' => ':attribute düzeni geçersiz.',
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
|
*/
'attributes' => [],
];

View File

@@ -6,7 +6,23 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{ config('app.name') }}</title>
<link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
<link rel="icon" type="image/png" sizes="192x192" href="/android-icon-192x192.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/manifest.json">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="/ms-icon-144x144.png">
<meta name="theme-color" content="#ffffff">
<link rel="stylesheet" href="{{ mix('css/app.css') }}" type="text/css" />
</head>
@@ -56,18 +72,13 @@
@yield('content')
<div id="config-buttons">
@if(!Route::is('dash'))
<a id="dash" class="config" href="{{ route('dash') }}"><i class="fas fa-th"></i></a>
@endif
@if(!Request::is(['items', 'items/*']))
<a id="items" class="config" href="{{ route('items.index') }}"><i class="fas fa-list"></i></a>
@endif
@if(!Request::is(['settings', 'settings/*']))
<a id="settings" class="config" href="{{ route('settings.index') }}"><i class="fas fa-cogs"></i></a>
@endif
@if(Route::is('dash'))
<a id="config-button" class="config" href=""><i class="fas fa-exchange"></i></a>
@endif
<a id="dash" class="config" href="{{ route('dash') }}"><i class="fas fa-th"></i></a>
<a id="items" class="config" href="{{ route('items.index') }}"><i class="fas fa-list"></i></a>
<a id="settings" class="config" href="{{ route('settings.index') }}"><i class="fas fa-cogs"></i></a>
</div>
</main>

View File

@@ -3,10 +3,14 @@
@if($app->icon)
<img class="app-icon" src="{{ asset('storage/'.$app->icon) }}" />
@else
<i class="fas fa-app-store-ios"></i>
<img class="app-icon" src="{{ asset('img/heimdall-icon-small.png') }}" />
@endif
<div class="title">{{ $app->title }}</div>
<div class="details">
<div class="title">{{ $app->title }}</div>
@if(isset($app->config->enabled) && ((bool)$app->config->enabled === true))
<div data-id="{{ $app->id }}" data-dataonly="{{ $app->config->dataonly or '0' }}" class="livestats-container"></div>
@endif
</div>
<a class="link" href="{{ $app->url }}"><i class="fas fa-arrow-alt-to-right"></i></a>
</div>
<a class="item-edit" href="{{ route('items.edit', $app->id) }}"><i class="fas fa-pencil"></i></a>

View File

@@ -2,7 +2,7 @@
@section('content')
{!! Form::open(array('route' => 'items.store', 'files' => true, 'method'=>'POST')) !!}
{!! Form::open(array('route' => 'items.store', 'id' => 'itemform', 'files' => true, 'method'=>'POST')) !!}
@include('items.form')
{!! Form::close() !!}

View File

@@ -2,7 +2,7 @@
@section('content')
{!! Form::model($item, ['method' => 'PATCH', 'files' => true, 'route' => ['items.update', $item->id]]) !!}
{!! Form::model($item, ['method' => 'PATCH', 'id' => 'itemform', 'files' => true, 'route' => ['items.update', $item->id]]) !!}
@include('items.form')
{!! Form::close() !!}

View File

@@ -6,32 +6,28 @@
<a href="{{ route('items.index') }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
</div>
</header>
<div class="create">
<div id="create" class="create">
{!! csrf_field() !!}
<!--<div class="input">
<label>Application name</label>
{!! Form::select('supported', \App\Item::supportedOptions(), array('placeholder' => 'Title','class' => 'form-control')) !!}
</div>-->
<div class="input">
<label>{{ __('app.apps.application_name') }} *</label>
{!! Form::text('title', null, array('placeholder' => __('app.apps.title'), 'id' => 'appname', 'class' => 'form-control')) !!}
<hr />
<label>{{ strtoupper(__('app.url')) }}</label>
{!! Form::text('url', null, array('placeholder' => __('app.url'),'class' => 'form-control')) !!}
{!! Form::text('url', null, array('placeholder' => __('app.url'), 'id' => 'appurl', 'class' => 'form-control')) !!}
</div>
<div class="input">
<label>{{ __('app.apps.colour') }} *</label>
{!! Form::text('colour', null, array('placeholder' => __('app.apps.hex'),'class' => 'form-control color-picker')) !!}
<hr />
<label>{{ __('app.apps.pinned') }}</label>
{!! Form::hidden('pinned', '0') !!}
<label class="switch">
<?php
$checked = false;
if(isset($item->pinned) && (bool)$item->pinned === true) $checked = true;
$set_checked = ($checked) ? ' checked="checked"' : '';
?>
{!! Form::hidden('pinned', '0') !!}
?>
<input type="checkbox" name="pinned" value="1"<?php echo $set_checked;?> />
<span class="slider round"></span>
</label>
@@ -40,19 +36,23 @@
<label>{{ __('app.apps.icon') }}</label>
<div class="icon-container">
<div id="appimage">
@if(isset($item->icon) && !empty($item->icon))
<img src="{{ asset('storage/'.$item->icon) }}" />
{!! Form::hidden('icon', $item->icon, ['class' => 'form-control']) !!}
@if(isset($item->icon) && !empty($item->icon) || old('icon'))
<?php
if(isset($item->icon)) $icon = $item->icon;
else $icon = old('icon');
?>
<img src="{{ asset('storage/'.$icon) }}" />
{!! Form::hidden('icon', $icon, ['class' => 'form-control']) !!}
@endif
</div>
<div class="upload-btn-wrapper">
<button class="btn">{{ __('app.buttons.upload')}} </button>
<input type="file" name="myfile" />
<input type="file" name="file" />
</div>
</div>
</div>
@if(isset($item) && $item->config)
@if(isset($item) && isset($item->config->view))
<div id="sapconfig" style="display: block;">
@if(isset($item))
@include('supportedapps.'.$item->config->view)

View File

@@ -1,12 +1,15 @@
<h2>{{ __('app.apps.config') }} ({{ __('app.optional') }})</h2>
<div class="items">
<input type="hidden" name="config[type]" value="\App\SupportedApps\Nzbget" />
<input type="hidden" data-config="type" class="config-item" name="config[type]" value="\App\SupportedApps\Nzbget" />
<div class="input">
<label>{{ __('app.apps.username') }}</label>
{!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'class' => 'form-control')) !!}
{!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!}
</div>
<div class="input">
<label>{{ __('app.apps.password') }}</label>
{!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'class' => 'form-control')) !!}
{!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!}
</div>
<div class="input">
<button style="margin-top: 32px;" class="btn test" id="test_config">Test</button>
</div>
</div>

View File

@@ -0,0 +1,21 @@
<h2>{{ __('app.apps.config') }} ({{ __('app.optional') }})</h2>
<div class="items">
<input type="hidden" data-config="type" class="config-item" name="config[type]" value="\App\SupportedApps\Pihole" />
<input type="hidden" data-config="dataonly" class="config-item" name="config[dataonly]" value="1" />
<div class="input">
<label>{{ __('app.apps.enable') }}</label>
{!! Form::hidden('config[enabled]', '0') !!}
<label class="switch">
<?php
$checked = false;
if(isset($item->config->enabled) && (bool)$item->config->enabled === true) $checked = true;
$set_checked = ($checked) ? ' checked="checked"' : '';
?>
<input type="checkbox" name="config[enabled]" value="1"<?php echo $set_checked;?> />
<span class="slider round"></span>
</label>
</div>
<div class="input">
<button style="margin-top: 32px;" class="btn test" id="test_config">Test</button>
</div>
</div>

View File

@@ -0,0 +1,11 @@
<h2>{{ __('app.apps.config') }} ({{ __('app.optional') }})</h2>
<div class="items">
<input type="hidden" data-config="type" class="config-item" name="config[type]" value="\App\SupportedApps\Sabnzbd" />
<div class="input">
<label>{{ __('app.apps.apikey') }}</label>
{!! Form::text('config[apikey]', null, array('placeholder' => __('app.apps.apikey'), 'data-config' => 'apikey', 'class' => 'form-control config-item')) !!}
</div>
<div class="input">
<button style="margin-top: 32px;" class="btn test" id="test_config">Test</button>
</div>
</div>