From ac4bbceb2f58e0da4573defe23bfb8a6848d9694 Mon Sep 17 00:00:00 2001 From: David Date: Mon, 22 Apr 2019 16:38:07 +0200 Subject: [PATCH 1/3] New Translations, Fixes for current translation Added new translations Minor language-issues fixed - Changed 'Toepassing' to 'Applicatie' (Both Acronyms were used) - Changed 'Reeks' to 'Tekenreeks' --- resources/lang/nl/app.php | 38 +++++++++++++++++++++----------- resources/lang/nl/validation.php | 4 ++-- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/resources/lang/nl/app.php b/resources/lang/nl/app.php index a2bba533..b37cebba 100644 --- a/resources/lang/nl/app.php +++ b/resources/lang/nl/app.php @@ -12,38 +12,47 @@ return [ 'settings.system' => 'Systeem', 'settings.appearance' => 'Uiterlijk', 'settings.miscellaneous' => 'Overige', + 'settings.support' => 'Ondersteuning', + 'settings.donate' => 'Doneren', 'settings.version' => 'Versie', 'settings.background_image' => 'Achtergrondafbeelding', + 'settings.window_target' => 'Link opent in', + 'settings.window_target.current' => 'In de huidige tab openen', + 'settings.window_target.one' => 'In dezelfde tab openen', + 'settings.window_target.new' => 'In een nieuwe tab openen', 'settings.homepage_search' => 'Zoeken op thuispagina', 'settings.search_provider' => 'Zoekaanbieder', 'settings.language' => 'Taal', - 'settings.reset' => 'Standaard instellingen herstellen', + 'settings.reset' => 'Standaardinstellingen herstellen', 'settings.remove' => 'Verwijderen', 'settings.search' => 'zoeken', 'settings.no_items' => 'Geen items gevonden', - - 'settings.label' => 'Label', - 'settings.value' => 'Waarde', - 'settings.edit' => 'Bewerken', - 'settings.view' => 'Weergeven', + + 'settings.label' => 'Label', + 'settings.value' => 'Waarde', + 'settings.edit' => 'Bewerken', + 'settings.view' => 'Weergeven', 'options.none' => '- niet ingesteld -', 'options.google' => 'Google', 'options.ddg' => 'DuckDuckGo', 'options.bing' => 'Bing', + 'options.startpage' => 'StartPage', 'options.yes' => 'Ja', 'options.no' => 'Nee', + 'options.nzbhydra' => 'NZBHydra', 'buttons.save' => 'Opslaan', 'buttons.cancel' => 'Annuleren', 'buttons.add' => 'Toevoegen', 'buttons.upload' => 'Een bestand uploaden', + 'buttons.downloadapps' => 'Applicatielijst bijwerken', 'dash.pin_item' => 'Item aan dashboard vastpinnen', - 'dash.no_apps' => 'Er zijn momenteel geen vastgepinde toepassingen, :link1 of :link2', - 'dash.link1' => 'Voeg hier een toepassing toe', + 'dash.no_apps' => 'Er zijn momenteel geen vastgepinde applicaties, :link1 of :link2', + 'dash.link1' => 'Voeg hier een applicatie toe', 'dash.link2' => 'Een item aan het dashboard vastpinnen', 'dash.pinned_items' => 'Vastgepinde Items', @@ -66,26 +75,29 @@ return [ 'apps.tag_name' => 'Tag naam', 'apps.tags' => 'Tags', 'apps.override' => 'Indien anders dan hoofd-url', - + 'apps.preview' => 'Voorbeeld', + 'apps.apptype' => 'Applicatietype', + 'user.user_list' => 'Gebruikers', 'user.add_user' => 'Gebruiker toevoegen', 'user.username' => 'Gebruikersnaam', 'user.avatar' => 'Avatar', - 'user.email' => 'Email', + 'user.email' => 'E-mail', 'user.password_confirm' => 'Bevestig wachtwoord', 'user.secure_front' => 'Sta publieke toegang toe tot voorkant - Alleen geforceerd indien een wachtwoord is ingesteld.', 'user.autologin' => 'Sta inloggen vanaf een specifieke URL toe. Iedereen met de link kan inloggen.', 'url' => 'URL', 'title' => 'Titel', - 'delete' => 'Verwijderen', + 'delete' => 'Verwijderen', 'optional' => 'Optioneel', - 'restore' => 'Herstellen', + 'restore' => 'Herstellen', 'alert.success.item_created' => 'Item met succes aangemaakt', 'alert.success.item_updated' => 'Item met succes bewerkt', 'alert.success.item_deleted' => 'Item met succes verwijderd', 'alert.success.item_restored' => 'Item met succes hersteld', + 'alert.success.updating' => 'Applicatielijst wordt bijgewerkt', 'alert.success.tag_created' => 'Tag met succes aangemaakt', 'alert.success.tag_updated' => 'Tag met succes bewerkt', @@ -94,7 +106,7 @@ return [ 'alert.success.setting_updated' => 'Deze instelling is met succes gewijzigd', 'alert.error.not_exist' => 'Deze instelling bestaat niet.', - + 'alert.success.user_created' => 'Gebruiker met succes aangemaakt', 'alert.success.user_updated' => 'Gebruiker met succes bewerkt', 'alert.success.user_deleted' => 'Gebruiker met succes verwijderd', diff --git a/resources/lang/nl/validation.php b/resources/lang/nl/validation.php index bfbb1729..209c8693 100644 --- a/resources/lang/nl/validation.php +++ b/resources/lang/nl/validation.php @@ -49,7 +49,7 @@ return [ 'ip' => ':attribute moet een geldig IP-adres zijn.', 'ipv4' => ':attribute moet een geldig IPv4-adres zijn.', 'ipv6' => ':attribute moet een geldig IPv6-adres zijn.', - 'json' => ':attribute moet een geldige JSON-reeks zijn.', + 'json' => ':attribute moet een geldige JSON-tekenreekswaarde zijn.', 'max' => [ 'numeric' => ':attribute mag niet groter dan :max zijn.', 'file' => ':attribute mag niet groter dan :max kilobyte in omvang zijn.', @@ -82,7 +82,7 @@ return [ 'string' => ':attribute moet :size karakters bevatten.', 'array' => ':attribute moet :size items bevatten.', ], - 'string' => ':attribute moet een reekswaarde zijn.', + 'string' => ':attribute moet een tekenreekswaarde zijn.', 'timezone' => ':attribute moet een geldige zone bevatten.', 'unique' => ':attribute is reeds in gebruik.', 'uploaded' => 'Het uploaden van :attribute is niet gelukt.', From b5b25458db19836ecbd50c29af65a37fd847f616 Mon Sep 17 00:00:00 2001 From: Guillaume Taquet Gasperini Date: Mon, 20 May 2019 21:42:42 +0200 Subject: [PATCH 2/3] turn off livestats update when the tab isn't active Fixes #330: Turning off the updating when the tab isn't active When the tab is not visible from the user, the livestats refresh are stopped. As soon as its visibility changes (from visibilitychange API), the livestats are refreshed as usual. This will prevent unnecessary calls to the different services when the tab is hidden from the user. --- public/js/app.js | 2 +- resources/assets/js/app.js | 52 ++++++++++++++++++++++++++++++++++---- 2 files changed, 48 insertions(+), 6 deletions(-) diff --git a/public/js/app.js b/public/js/app.js index 338c0fb0..3cc22f06 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -1 +1 @@ -!function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}("undefined"!=typeof window?window:this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var n=this._events=this._events||{},i=n[t]=n[t]||[];return-1==i.indexOf(e)&&i.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var n=this._onceEvents=this._onceEvents||{};return(n[t]=n[t]||{})[e]=!0,this}},e.off=function(t,e){var n=this._events&&this._events[t];if(n&&n.length){var i=n.indexOf(e);return-1!=i&&n.splice(i,1),this}},e.emitEvent=function(t,e){var n=this._events&&this._events[t];if(n&&n.length){var i=0,o=n[i];e=e||[];for(var s=this._onceEvents&&this._onceEvents[t];o;){var r=s&&s[o];r&&(this.off(t,o),delete s[o]),o.apply(this,e),i+=r?0:1,o=n[i]}return this}},t}),function(t,e){"function"==typeof define&&define.amd?define("unipointer/unipointer",["ev-emitter/ev-emitter"],function(n){return e(t,n)}):"object"==typeof module&&module.exports?module.exports=e(t,require("ev-emitter")):t.Unipointer=e(t,t.EvEmitter)}(window,function(t,e){function n(){}function i(){}var o=i.prototype=Object.create(e.prototype);o.bindStartEvent=function(t){this._bindStartEvent(t,!0)},o.unbindStartEvent=function(t){this._bindStartEvent(t,!1)},o._bindStartEvent=function(e,n){n=void 0===n||!!n;var i=n?"addEventListener":"removeEventListener";t.navigator.pointerEnabled?e[i]("pointerdown",this):t.navigator.msPointerEnabled?e[i]("MSPointerDown",this):(e[i]("mousedown",this),e[i]("touchstart",this))},o.handleEvent=function(t){var e="on"+t.type;this[e]&&this[e](t)},o.getTouch=function(t){for(var e=0;e.5;var o=this.colorGrid[e.toUpperCase()];this.updateCursor(o),this.setTexts(),this.setBackgrounds(),n||this.emitEvent("change",[e,t.hue,t.sat,t.lum])}},p.setTexts=function(){if(this.setTextElems)for(var t=0;t.5;var o=this.colorGrid[e.toUpperCase()];this.updateCursor(o),this.setTexts(),this.setBackgrounds(),n||this.emitEvent("change",[e,t.hue,t.sat,t.lum])}},h.setTexts=function(){if(this.setTextElems)for(var t=0;t0&&(void 0===document.addEventListener||void 0===t?console.log("This browser does not support visibilityChange"):document.addEventListener(e,function(){document[t]?function(){for(var t of n)window.clearTimeout(t)}():function(){for(var t of i)t()}()},!1),o.each(function(t){var e=$(this).data("id"),o=1==$(this).data("dataonly")?2e4:1e3,s=$(this),r=5e3,a=function i(){$.ajax({url:"/get_stats/"+e,dataType:"json",success:function(t){s.html(t.html),"active"==t.status?r=o:r<3e4&&(r+=2e3)},complete:function(){n[t]=window.setTimeout(i,r)}})};i[t]=a,a()})),$("#upload").change(function(){!function(t){if(t.files&&t.files[0]){var e=new FileReader;e.onload=function(t){$("#appimage img").attr("src",t.target.result)},e.readAsDataURL(t.files[0])}}(this)}),$("#sortable").sortable({stop:function(t,e){var n=$("#sortable").sortable("toArray",{attribute:"data-id"});$.post("/order",{order:n})}}),$("#sortable").sortable("disable"),$("#app").on("click","#config-button",function(t){t.preventDefault();var e=$("#app"),n=e.hasClass("header");e.toggleClass("header"),n?($(".add-item").hide(),$(".item-edit").hide(),$("#app").removeClass("sidebar"),$("#sortable").sortable("disable")):($("#sortable").sortable("enable"),setTimeout(function(){$(".add-item").fadeIn(),$(".item-edit").fadeIn()},350))}).on("click","#add-item, #pin-item",function(t){t.preventDefault();var e=$("#app");e.hasClass("sidebar");e.toggleClass("sidebar")}).on("click",".close-sidenav",function(t){t.preventDefault(),$("#app").removeClass("sidebar")}).on("click","#test_config",function(t){t.preventDefault();var e=$("#create input[name=url]").val(),n=$('#create input[name="config[override_url]"]').val();n.length&&""!=n&&(e=n);var i={};i.url=e,$(".config-item").each(function(t){var e=$(this).data("config");i[e]=$(this).val()}),$.post("/test_config",{data:i},function(t){alert(t)})}),$("#pinlist").on("click","a",function(t){t.preventDefault();var e=$(this),n=e.data("id");$.get("items/pintoggle/"+n+"/true",function(t){var n=$(t).filter("#sortable").html();$("#sortable").html(n),e.toggleClass("active")})})}); diff --git a/resources/assets/js/app.js b/resources/assets/js/app.js index 6deed36a..99590e7a 100644 --- a/resources/assets/js/app.js +++ b/resources/assets/js/app.js @@ -8,15 +8,55 @@ $.when( $.ready ).then(function() { }, 3500); } - if($('.livestats-container').length) { - $('.livestats-container').each(function(index){ + // from https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API + // Set the name of the hidden property and the change event for visibility + var hidden, visibilityChange; + if (typeof document.hidden !== "undefined") { // Opera 12.10 and Firefox 18 and later support + hidden = "hidden"; + visibilityChange = "visibilitychange"; + } else if (typeof document.msHidden !== "undefined") { + hidden = "msHidden"; + visibilityChange = "msvisibilitychange"; + } else if (typeof document.webkitHidden !== "undefined") { + hidden = "webkitHidden"; + visibilityChange = "webkitvisibilitychange"; + } + + var livestatsRefreshTimeouts = []; + var livestatsFuncs = []; + var livestatsContainers = $('.livestats-container'); + function stopLivestatsRefresh() { + for (var timeoutId of livestatsRefreshTimeouts) { + window.clearTimeout(timeoutId); + } + } + function startLivestatsRefresh() { + for (var fun of livestatsFuncs) { + fun(); + } + } + + if (livestatsContainers.length > 0) { + if (typeof document.addEventListener === "undefined" || hidden === undefined) { + console.log("This browser does not support visibilityChange"); + } else { + document.addEventListener(visibilityChange, function() { + if (document[hidden]) { + stopLivestatsRefresh(); + } else { + startLivestatsRefresh(); + } + }, false); + } + + livestatsContainers.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() { + var fun = function worker() { $.ajax({ url: '/get_stats/'+id, dataType: 'json', @@ -29,10 +69,12 @@ $.when( $.ready ).then(function() { }, complete: function() { // Schedule the next request when the current one's complete - setTimeout(worker, timer); + livestatsRefreshTimeouts[index] = window.setTimeout(worker, timer); } }); - })(); + }; + livestatsFuncs[index] = fun; + fun(); }); } From dd2ca62eafc8afc3d187a3fb208c21b64e9d5ac8 Mon Sep 17 00:00:00 2001 From: KodeStar Date: Tue, 11 Jun 2019 11:00:44 +0100 Subject: [PATCH 3/3] Add private subnets to trusted proxies for reverse proxy use --- app/Http/Middleware/TrustProxies.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php index 6a0a1a44..4d7d39c8 100644 --- a/app/Http/Middleware/TrustProxies.php +++ b/app/Http/Middleware/TrustProxies.php @@ -12,7 +12,7 @@ class TrustProxies extends Middleware * * @var array */ - protected $proxies; + protected $proxies = ['192.168.0.0/16', '172.16.0.0/12','10.0.0.0/8']; /** * The current proxy header mappings.