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. 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(); }); } diff --git a/resources/lang/nl/app.php b/resources/lang/nl/app.php index 4cdb6759..408d523c 100644 --- a/resources/lang/nl/app.php +++ b/resources/lang/nl/app.php @@ -12,39 +12,48 @@ 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.qwant' => 'Qwant', + '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', @@ -67,26 +76,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', @@ -95,7 +107,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.',