├── images ├── logo.png ├── image-1.png ├── image-2.png ├── image-3.png ├── image-4.png └── image-5.png ├── application ├── icons │ ├── icon-56-56.png │ ├── icon-112-112.png │ ├── icon-112-112.svg │ └── icon-56-56.svg ├── assets │ ├── icons │ │ ├── icon-56-56.png │ │ ├── icon-112-112.png │ │ ├── icon-112-112.svg │ │ └── icon-56-56.svg │ ├── manifest.webapp │ ├── css │ │ ├── main.min.css │ │ ├── grid.min.css │ │ ├── main.css │ │ └── grid.css │ ├── assets │ │ ├── css │ │ │ ├── main.min.css │ │ │ ├── grid.min.css │ │ │ ├── main.css │ │ │ └── grid.css │ │ └── js │ │ │ ├── script.min.js │ │ │ ├── helper.js │ │ │ ├── applait.finder.min.js │ │ │ └── client.min.js │ ├── js │ │ ├── script.min.js │ │ ├── uv.js │ │ ├── helper.js │ │ ├── applait.finder.min.js │ │ └── client.min.js │ └── index.html ├── manifest.webapp └── index.html ├── custom-launcher.min.json ├── custom-launcher.json ├── LICENSE.md └── README.md /images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/strukturart/qlauncher/HEAD/images/logo.png -------------------------------------------------------------------------------- /images/image-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/strukturart/qlauncher/HEAD/images/image-1.png -------------------------------------------------------------------------------- /images/image-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/strukturart/qlauncher/HEAD/images/image-2.png -------------------------------------------------------------------------------- /images/image-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/strukturart/qlauncher/HEAD/images/image-3.png -------------------------------------------------------------------------------- /images/image-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/strukturart/qlauncher/HEAD/images/image-4.png -------------------------------------------------------------------------------- /images/image-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/strukturart/qlauncher/HEAD/images/image-5.png -------------------------------------------------------------------------------- /application/icons/icon-56-56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/strukturart/qlauncher/HEAD/application/icons/icon-56-56.png -------------------------------------------------------------------------------- /application/icons/icon-112-112.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/strukturart/qlauncher/HEAD/application/icons/icon-112-112.png -------------------------------------------------------------------------------- /application/assets/icons/icon-56-56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/strukturart/qlauncher/HEAD/application/assets/icons/icon-56-56.png -------------------------------------------------------------------------------- /application/assets/icons/icon-112-112.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/strukturart/qlauncher/HEAD/application/assets/icons/icon-112-112.png -------------------------------------------------------------------------------- /custom-launcher.min.json: -------------------------------------------------------------------------------- 1 | [{"app_name":"Telegram"},{"app_name":"Audio"},{"app_name":"Gallery"},{"app_name":"rss-reader"},{"app_name":"osm-map","dir":"outdoor"},{"app_name":"knots","dir":"outdoor"},{"app_name":"shellCMD","dir":"tools"},{"app_name":"Note","dir":"tools"},{"app_name":"Calendar"},{"sleep_mode":{"startTime":"23:30","duration_h":"8","duration_m":"0"}},{"weather":{"owm_api_key":"6d385b079ea964532d681348","location":{"biel":{"position_lat":"47.0","position_long":"7.0"},"prag":{"position_lat":"50.073658","position_long":"14.418540"}}}}] -------------------------------------------------------------------------------- /custom-launcher.json: -------------------------------------------------------------------------------- 1 | [ 2 | {"app_name":"Telegram"}, 3 | {"app_name":"Audio"}, 4 | {"app_name":"Gallery"}, 5 | {"app_name":"rss-reader"}, 6 | {"app_name":"osm-map", "dir":"outdoor"}, 7 | {"app_name":"knots", "dir":"outdoor"}, 8 | {"app_name":"shellCMD", "dir":"tools"}, 9 | {"app_name":"Note", "dir":"tools"}, 10 | {"app_name":"Calendar"}, 11 | 12 | { 13 | "sleep_mode": 14 | { 15 | "startTime":"23:30", 16 | "duration_h":"8", 17 | "duration_m":"0" 18 | } 19 | }, 20 | 21 | 22 | { 23 | "weather": 24 | { 25 | "owm_api_key":"6d385b079ea964532d681348", 26 | 27 | "location": 28 | { 29 | "biel": 30 | { 31 | "position_lat":"47.0", 32 | "position_long":"7.0" 33 | 34 | }, 35 | "prag": 36 | { 37 | "position_lat":"50.073658", 38 | "position_long":"14.418540" 39 | 40 | } 41 | } 42 | 43 | } 44 | } 45 | ] -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | 2 | The MIT License (MIT) 3 | 4 | Copyright (c) 2019 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | -------------------------------------------------------------------------------- /application/manifest.webapp: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0.0", 3 | "name": "qlauncher", 4 | "description": "A launcher for your favorit apps", 5 | "launch_path": "/index.html", 6 | "type": "certified", 7 | 8 | 9 | "icons": { 10 | "56": "/icons/icon-56-56.png", 11 | "112": "/icons/icon-112-112.png" 12 | }, 13 | 14 | "developer": 15 | { 16 | "name": "strukturart", 17 | "url": "https://github.com/strukturart/custom-launcher" 18 | }, 19 | 20 | 21 | "messages": [ 22 | { "alarm": "/index.html" }, 23 | { "notification": "/index.html" } 24 | ], 25 | 26 | 27 | "permissions": 28 | { 29 | 30 | "desktop-notification":{}, 31 | "alarms": { 32 | "description": "Required to schedule alarms" 33 | }, 34 | 35 | "geolocation": { 36 | "description": "Required to show user's location" 37 | }, 38 | 39 | "device-storage:sdcard": { 40 | "description": "Read from sd-card", 41 | "access": "readonly" 42 | }, 43 | 44 | "open-remote-window":{}, 45 | 46 | "device-storage:apps":{ "access": "readonly" }, 47 | "webapps-manage":{ }, 48 | 49 | 50 | "settings": 51 | { 52 | "access":"readwrite" 53 | }, 54 | 55 | "wifi-manage":{}, 56 | "bluetooth":{}, 57 | 58 | "telephony": { 59 | "description": "Required to control telephony functions" 60 | }, 61 | 62 | "wake-lock":{}, 63 | 64 | "browser:embedded-system-app":{}, 65 | 66 | 67 | "spatialnavigation-app-manage": { 68 | "navigator.spatialNavigationEnabled": false 69 | }, 70 | 71 | "systemXHR": { 72 | "description": "Required to load remote content" 73 | } 74 | 75 | 76 | 77 | } 78 | 79 | 80 | 81 | } -------------------------------------------------------------------------------- /application/assets/manifest.webapp: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0.0", 3 | "name": "custom-launcher", 4 | "description": "A launcher for your favorit apps", 5 | "launch_path": "/index.html", 6 | "type": "certified", 7 | 8 | 9 | "icons": { 10 | "56": "/icons/icon-56-56.png", 11 | "112": "/icons/icon-112-112.png" 12 | }, 13 | 14 | "developer": 15 | { 16 | "name": "strukturart", 17 | "url": "https://github.com/strukturart/custom-launcher" 18 | }, 19 | 20 | 21 | "messages": [ 22 | { "alarm": "/index.html" }, 23 | { "notification": "/index.html" } 24 | ], 25 | 26 | 27 | "permissions": 28 | { 29 | 30 | "desktop-notification":{}, 31 | "alarms": { 32 | "description": "Required to schedule alarms" 33 | }, 34 | 35 | "geolocation": { 36 | "description": "Required to show user's location" 37 | }, 38 | 39 | "device-storage:sdcard": { 40 | "description": "Read from sd-card", 41 | "access": "readonly" 42 | }, 43 | 44 | "open-remote-window":{}, 45 | 46 | "device-storage:apps":{ "access": "readonly" }, 47 | "webapps-manage":{ }, 48 | 49 | 50 | "settings": 51 | { 52 | "access":"readwrite" 53 | }, 54 | 55 | "wifi-manage":{}, 56 | "bluetooth":{}, 57 | 58 | "wake-lock":{}, 59 | 60 | "browser:embedded-system-app":{}, 61 | 62 | "telephony": { 63 | "description": "Required to control telephony functions" 64 | }, 65 | 66 | 67 | 68 | "spatialnavigation-app-manage": { 69 | "navigator.spatialNavigationEnabled": false 70 | }, 71 | 72 | "systemXHR": { 73 | "description": "Required to load remote content" 74 | } 75 | 76 | 77 | 78 | } 79 | 80 | 81 | 82 | } -------------------------------------------------------------------------------- /application/assets/css/main.min.css: -------------------------------------------------------------------------------- 1 | :root{--color-one:black;--color-two:yellow;--color-three:silver;--color-four:rgb(99,99,99);--color-five:rgb(38,38,38);--color-six:rgb(78,206,144);--color-seven:gainsboro}*,:after,:before{border:0;padding:0;margin:0;box-sizing:border-box}::-webkit-scrollbar{width:0!important}body,html{font-weight:100;width:100%;color:var(--color-four);position:relative;margin:0;padding:0;font-size:.95rem;line-height:1.4rem;-webkit-appearance:none;height:100%;margin:0}div#zoom-level{position:fixed;z-index:1000;top:10px;left:10px;background:#000;color:#fff;font-size:16px}div#man-page{display:none;position:fixed;z-index:3000;top:0;background:#000;color:#fff;font-size:12px;width:100%;height:100vh;padding:5px}div#man-page h1{text-align:center;font-weight:800;margin:0 0 10px 0;font-size:14px}div#man-page li div{padding:0 0 0 10px}div#location{position:absolute;z-index:3000;top:40px;left:10px;background:#000;color:#fff;font-size:14px;display:none}div#currentPosition{position:absolute;z-index:-3000;top:40px;background:#000;color:#fff;font-size:14px;width:100%;height:100vh;padding:5px}div#currentPosition>div{text-align:center}#map{height:100%;width:100vw}.gpx{border:2px #aaa solid;border-radius:5px;box-shadow:0 0 3px 3px #ccc;width:800px;margin:1em auto}.gpx header{padding:.5em}.gpx h3{margin:0;padding:0;font-weight:700}.gpx .start{font-size:smaller;color:#444}.gpx .map{border:1px #888 solid;border-left:none;border-right:none;width:800px;height:500px;margin:0}.gpx footer{background:#f0f0f0;padding:.5em}.gpx ul.info{list-style:none;margin:0;padding:0;font-size:smaller}.gpx ul.info li{color:#666;padding:2px;display:inline}.gpx ul.info li span{color:#000} -------------------------------------------------------------------------------- /application/assets/assets/css/main.min.css: -------------------------------------------------------------------------------- 1 | :root{--color-one:black;--color-two:yellow;--color-three:silver;--color-four:rgb(99,99,99);--color-five:rgb(38,38,38);--color-six:rgb(78,206,144);--color-seven:gainsboro}*,:after,:before{border:0;padding:0;margin:0;box-sizing:border-box}::-webkit-scrollbar{width:0!important}body,html{font-weight:100;width:100%;color:var(--color-four);position:relative;margin:0;padding:0;font-size:.95rem;line-height:1.4rem;-webkit-appearance:none;height:100%;margin:0}div#zoom-level{position:fixed;z-index:1000;top:10px;left:10px;background:#000;color:#fff;font-size:16px}div#man-page{display:none;position:fixed;z-index:3000;top:0;background:#000;color:#fff;font-size:12px;width:100%;height:100vh;padding:5px}div#man-page h1{text-align:center;font-weight:800;margin:0 0 10px 0;font-size:14px}div#man-page li div{padding:0 0 0 10px}div#location{position:absolute;z-index:3000;top:40px;left:10px;background:#000;color:#fff;font-size:14px;display:none}div#currentPosition{position:absolute;z-index:-3000;top:40px;background:#000;color:#fff;font-size:14px;width:100%;height:100vh;padding:5px}div#currentPosition>div{text-align:center}#map{height:100%;width:100vw}.gpx{border:2px #aaa solid;border-radius:5px;box-shadow:0 0 3px 3px #ccc;width:800px;margin:1em auto}.gpx header{padding:.5em}.gpx h3{margin:0;padding:0;font-weight:700}.gpx .start{font-size:smaller;color:#444}.gpx .map{border:1px #888 solid;border-left:none;border-right:none;width:800px;height:500px;margin:0}.gpx footer{background:#f0f0f0;padding:.5em}.gpx ul.info{list-style:none;margin:0;padding:0;font-size:smaller}.gpx ul.info li{color:#666;padding:2px;display:inline}.gpx ul.info li span{color:#000} -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![logo](/images/logo.png) 2 | 3 | custom-launcher 4 | 5 | ![image-1](/images/image-1.png) 6 | ![image-2](/images/image-2.png) 7 | ![image-3](/images/image-3.png) 8 | ![image-4](/images/image-4.png) 9 | ![image-5](/images/image-5.png) 10 | 11 | 12 | 13 | ## Features 14 | 15 | - Start apps 16 | - enable/disaple bluetooth,wifi,mobile-data,tethering, airplain 17 | - sleep mode 18 | - weather forecast 19 | 20 | ## Installation 21 | 22 | 23 | 1. download [/build/launcher.zip](/build/launcher.zip) 24 | 2. copy in sdcard/downloads/ on your phone 25 | 3. installl the app with the GerdaOs Installer App. 26 | 4. Put on your sd card a file with the name custom-launcher.json with the following structure: 27 | 28 | ``` 29 | [ 30 | {"app_name":"Telegram"}, 31 | {"app_name":"Audio"}, 32 | {"app_name":"Gallery"}, 33 | {"app_name":"rss-reader"}, 34 | {"app_name":"osm-map", "dir":"outdoor"}, 35 | {"app_name":"knots", "dir":"outdoor"}, 36 | {"app_name":"shellCMD", "dir":"tools"}, 37 | {"app_name":"Note", "dir":"tools"}, 38 | {"app_name":"Calendar"}, 39 | 40 | { 41 | "sleep_mode": 42 | { 43 | "startTime":"22:40", 44 | "duration_h":"8", 45 | "duration_m":"0" 46 | } 47 | }, 48 | 49 | { 50 | "weather": 51 | { 52 | "owm_api_key":"6d385b079ea964532d681348", 53 | 54 | "location": 55 | { 56 | "brüssel": 57 | { 58 | "position_lat":" 50.846557", 59 | "position_long":"4.3516970" 60 | 61 | }, 62 | "prag": 63 | { 64 | "position_lat":"50.073658", 65 | "position_long":"14.418540" 66 | 67 | } 68 | } 69 | 70 | } 71 | } 72 | ] 73 | 74 | ``` 75 | 76 | 5. you can also nest the apps in folders, "you": "myDir". They have to be put in order DirA, DirA, DirB, DirB as in my example. 77 | 6. if you want the weather forecast feature get your own api key from [openweathermap.org](openweathermap.org) and put the api-key in "owm_api_key". You can set your default locations. Press soft-left to select your location. 78 | 79 | ## How to use 80 | 81 | + Navigation up/right/down/left 82 | + Start apps or toggle options enter 83 | + on the app page press 0 to show all apps 84 | + sleep mode pause: select the time and press enter 85 | 86 | 87 | 88 | ## To do 89 | 90 | Calendar Page: List next coming events 91 | 92 | ## Dependencies 93 | 94 | https://jquery.com/ 95 | https://www.chartjs.org/ 96 | 97 | 98 | ## Donation 99 | 100 | You like the app and you have enough money 101 | 102 | [![](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=Q8QLA8CNMWAWG) 103 | 104 | 105 | -------------------------------------------------------------------------------- /application/assets/js/script.min.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function(){var t=.001,a=0,e=0,n=16,i=0,l="";$("div#location").text("ready");var c=L.map("map",{zoomControl:!1,dragging:!1,keyboard:!0}).fitWorld();L.tileLayer("https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4NXVycTA2emYycXBndHRqcmZ3N3gifQ.rJcFIG214AriISLbB6B5aw",{maxZoom:18,attribution:'Map data © OpenStreetMap contributors, CC-BY-SA, Imagery © Mapbox',id:"mapbox.streets"}).addTo(c),c.on("locationfound",function(o){var t=o.accuracy/2;l=L.marker(o.latlng).addTo(c),L.circle(o.latlng,t).addTo(c),i=o.latlng,a=i.lng,e=i.lat,$("div#location div#lat").text(e),$("div#location div#lng").text(a)}),c.on("locationerror",function(o){alert(o.message)}),c.locate({setView:!0,maxZoom:16}),n=16,s();var o={url:"https://nominatim.openstreetmap.org/search?format=json&q={s}",jsonpParam:"json_callback",formatData:function(o){var t,a,e={},n=[];for(var i in o)t=(n=o[i].display_name.split(","))[0]+", "+n[1],a=L.latLng(o[i].lat,o[i].lon),e[t]=a;return e},textPlaceholder:"Search...",autoType:!0,tipAutoSubmit:!0,autoCollapse:!0,collapsed:!1,autoCollapseTime:1e4,delayType:800,marker:{icon:!0}},r=new L.Control.Search(o);function d(t){function o(o){l.setLatLng([o.coords.latitude,o.coords.longitude]).update(),c.flyTo(new L.LatLng(o.coords.latitude,o.coords.longitude),16),n=16,s(),a=o.coords.longitude,e=o.coords.latitude,$("div#location div#lat").text(e),$("div#location div#lng").text(a),1==t&&$("div#location").css("display","block")}navigator.geolocation?navigator.geolocation.getCurrentPosition(o):alert("New Position not found.")}function s(){return n<6&&(t=1,document.getElementById("zoom-level").innerHTML=n+t),6OpenStreetMap contributors, CC-BY-SA, Imagery © Mapbox',id:"mapbox.streets"}).addTo(c),c.on("locationfound",function(o){var t=o.accuracy/2;l=L.marker(o.latlng).addTo(c),L.circle(o.latlng,t).addTo(c),i=o.latlng,a=i.lng,e=i.lat,$("div#location div#lat").text(e),$("div#location div#lng").text(a)}),c.on("locationerror",function(o){alert(o.message)}),c.locate({setView:!0,maxZoom:16}),n=16,s();var o={url:"https://nominatim.openstreetmap.org/search?format=json&q={s}",jsonpParam:"json_callback",formatData:function(o){var t,a,e={},n=[];for(var i in o)t=(n=o[i].display_name.split(","))[0]+", "+n[1],a=L.latLng(o[i].lat,o[i].lon),e[t]=a;return e},textPlaceholder:"Search...",autoType:!0,tipAutoSubmit:!0,autoCollapse:!0,collapsed:!1,autoCollapseTime:1e4,delayType:800,marker:{icon:!0}},r=new L.Control.Search(o);function d(t){function o(o){l.setLatLng([o.coords.latitude,o.coords.longitude]).update(),c.flyTo(new L.LatLng(o.coords.latitude,o.coords.longitude),16),n=16,s(),a=o.coords.longitude,e=o.coords.latitude,$("div#location div#lat").text(e),$("div#location div#lng").text(a),1==t&&$("div#location").css("display","block")}navigator.geolocation?navigator.geolocation.getCurrentPosition(o):alert("New Position not found.")}function s(){return n<6&&(t=1,document.getElementById("zoom-level").innerHTML=n+t),6 3): 37 | return "#F9A825"; 38 | break; 39 | 40 | case (val <= 7 && val > 6): 41 | return "#EF6C00"; 42 | break; 43 | 44 | case (val < 11 && val >= 8): 45 | return "#B71C1C"; 46 | break; 47 | 48 | case (val >= 11): 49 | return "#6A1B9A"; 50 | break; 51 | 52 | } 53 | 54 | } 55 | 56 | 57 | 58 | 59 | $("#uv-index-0 > div.uv").text(uv_value_0); 60 | $("#uv-index-0 > div.uv").css("background", color_index(uv_value_0)); 61 | $("#uv-index-0 > div.time").text(moment(data.result[0].uv_time).format("hh:mm")); 62 | 63 | 64 | $("#uv-index-1 > div.uv").text(uv_value_1); 65 | $("#uv-index-1 > div.uv").css("background", color_index(uv_value_1)); 66 | $("#uv-index-1 > div.time").text(moment(data.result[3].uv_time).format("hh:mm")); 67 | 68 | 69 | $("#uv-index-2 > div.uv").text(uv_value_2); 70 | $("#uv-index-2 > div.uv").css("background", color_index(uv_value_2)); 71 | $("#uv-index-2 > div.time").text(moment(data.result[6].uv_time).format("hh:mm")); 72 | 73 | $("#uv-index-3 > div.uv").text(uv_value_3); 74 | $("#uv-index-3 > div.uv").css("background", color_index(uv_value_3)); 75 | $("#uv-index-3 > div.time").text(moment(data.result[9].uv_time).format("hh:mm")); 76 | 77 | 78 | 79 | } 80 | }; 81 | 82 | if (xhttp.status === 403) { 83 | toaster("403", 4000) 84 | return "403"; 85 | 86 | } 87 | 88 | if (xhttp.status === 404) {} 89 | 90 | ////Redirection 91 | if (xhttp.status === 301) {} 92 | 93 | if (xhttp.status === 0) { 94 | //toaster("Can't load UV-Index", 5000); 95 | //return "Can't load UV-Index"; 96 | } 97 | 98 | xhttp.onerror = function() {}; 99 | xhttp.send(null); 100 | } -------------------------------------------------------------------------------- /application/assets/js/helper.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | 4 | function notify(param_title, param_text, param_silent) { 5 | 6 | var options = { 7 | body: param_text, 8 | silent: true 9 | } 10 | // Let's check if the browser supports notifications 11 | if (!("Notification" in window)) { 12 | alert("This browser does not support desktop notification"); 13 | } 14 | 15 | // Let's check whether notification permissions have already been granted 16 | else if (Notification.permission === "granted") { 17 | // If it's okay let's create a notification 18 | var notification = new Notification(param_title, options); 19 | 20 | } 21 | 22 | // Otherwise, we need to ask the user for permission 23 | else if (Notification.permission !== "denied") { 24 | Notification.requestPermission().then(function(permission) { 25 | // If the user accepts, let's create a notification 26 | if (permission === "granted") { 27 | var notification = new Notification(param_title, options); 28 | 29 | 30 | } 31 | }); 32 | } 33 | 34 | } 35 | 36 | 37 | function localStorageWriteRead(item, value) { 38 | if (item != "" && value != "") { 39 | localStorage.setItem(item, value) 40 | } 41 | return localStorage.getItem(item) 42 | } 43 | 44 | 45 | //delete file 46 | function deleteFile(storage, path, notification) { 47 | let sdcard = navigator.getDeviceStorages("sdcard"); 48 | 49 | let requestDel = sdcard[storage].delete(path); 50 | 51 | requestDel.onsuccess = function() { 52 | if (notification == "notification") { 53 | toaster('File "' + name + '" successfully deleted frome the sdcard storage area'); 54 | } 55 | } 56 | 57 | requestDel.onerror = function() { 58 | toaster('Unable to delete the file: ' + this.error); 59 | } 60 | 61 | } 62 | 63 | 64 | 65 | 66 | 67 | function notify(param_title, param_text, param_silent, requireInteraction) { 68 | 69 | var options = { 70 | body: param_text, 71 | silent: param_silent, 72 | requireInteraction: requireInteraction 73 | 74 | 75 | } 76 | 77 | 78 | // Let's check if the browser supports notifications 79 | if (!("Notification" in window)) { 80 | alert("This browser does not support desktop notification"); 81 | } 82 | 83 | // Let's check whether notification permissions have already been granted 84 | else if (Notification.permission === "granted") { 85 | // If it's okay let's create a notification 86 | var notification = new Notification(param_title, options); 87 | 88 | 89 | 90 | } 91 | 92 | // Otherwise, we need to ask the user for permission 93 | else if (Notification.permission !== "denied") { 94 | Notification.requestPermission().then(function(permission) { 95 | // If the user accepts, let's create a notification 96 | if (permission === "granted") { 97 | var notification = new Notification(param_title, options, action); 98 | 99 | document.addEventListener('visibilitychange', function() { 100 | if (document.visibilityState === 'visible') { 101 | // The tab has become visible so clear the now-stale Notification. 102 | notification.close(); 103 | 104 | toaster("yes", 2000) 105 | 106 | 107 | } 108 | }); 109 | 110 | 111 | } 112 | }); 113 | } 114 | 115 | } 116 | 117 | 118 | 119 | 120 | //silent notification 121 | function toaster(text, time) { 122 | 123 | 124 | $("div#toast").html(text) 125 | 126 | $("div#toast").animate({ top: "0px" }, time, "linear", function() { 127 | $("div#toast").delay(time).animate({ top: "-110vh" }, time); 128 | 129 | }); 130 | 131 | } 132 | 133 | 134 | //check if internet connection 135 | function check_iconnection() { 136 | function updateOfflineStatus() { 137 | toaster("Your Browser is offline", 5000) 138 | return false; 139 | } 140 | 141 | window.addEventListener('offline', updateOfflineStatus); 142 | } 143 | 144 | //bottom bar 145 | function bottom_bar(left, center, right) { 146 | $("div#bottom-bar div#button-left").text(left) 147 | $("div#bottom-bar div#button-center").text(center) 148 | $("div#bottom-bar div#button-right").text(right) 149 | 150 | left == "" ? $("div#bottom-bar div#button-left").css("opacity", "0") : $("div#bottom-bar div#button-left").css("opacity", "1"); 151 | center == "" ? $("div#bottom-bar div#button-center").css("opacity", "0") : $("div#bottom-bar div#button-center").css("opacity", "1"); 152 | left == "" ? $("div#bottom-bar div#button-right").css("opacity", "0") : $("div#bottom-bar div#button-right").css("opacity", "1"); 153 | } -------------------------------------------------------------------------------- /application/assets/assets/js/helper.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | 4 | function notify(param_title, param_text, param_silent) { 5 | 6 | var options = { 7 | body: param_text, 8 | silent: true 9 | } 10 | // Let's check if the browser supports notifications 11 | if (!("Notification" in window)) { 12 | alert("This browser does not support desktop notification"); 13 | } 14 | 15 | // Let's check whether notification permissions have already been granted 16 | else if (Notification.permission === "granted") { 17 | // If it's okay let's create a notification 18 | var notification = new Notification(param_title, options); 19 | 20 | } 21 | 22 | // Otherwise, we need to ask the user for permission 23 | else if (Notification.permission !== "denied") { 24 | Notification.requestPermission().then(function(permission) { 25 | // If the user accepts, let's create a notification 26 | if (permission === "granted") { 27 | var notification = new Notification(param_title, options); 28 | 29 | 30 | } 31 | }); 32 | } 33 | 34 | } 35 | 36 | 37 | function localStorageWriteRead(item, value) { 38 | if (item != "" && value != "") { 39 | localStorage.setItem(item, value) 40 | } 41 | 42 | 43 | return localStorage.getItem(item) 44 | 45 | } 46 | 47 | 48 | //delete file 49 | function deleteFile(storage, path, notification) { 50 | let sdcard = navigator.getDeviceStorages("sdcard"); 51 | 52 | let requestDel = sdcard[storage].delete(path); 53 | 54 | requestDel.onsuccess = function() { 55 | if (notification == "notification") { 56 | toaster('File "' + name + '" successfully deleted frome the sdcard storage area'); 57 | } 58 | } 59 | 60 | requestDel.onerror = function() { 61 | toaster('Unable to delete the file: ' + this.error); 62 | } 63 | 64 | } 65 | 66 | 67 | 68 | 69 | 70 | function notify(param_title, param_text, param_silent, requireInteraction) { 71 | 72 | var options = { 73 | body: param_text, 74 | silent: param_silent, 75 | requireInteraction: requireInteraction 76 | 77 | 78 | } 79 | 80 | 81 | // Let's check if the browser supports notifications 82 | if (!("Notification" in window)) { 83 | alert("This browser does not support desktop notification"); 84 | } 85 | 86 | // Let's check whether notification permissions have already been granted 87 | else if (Notification.permission === "granted") { 88 | // If it's okay let's create a notification 89 | var notification = new Notification(param_title, options); 90 | 91 | 92 | 93 | } 94 | 95 | // Otherwise, we need to ask the user for permission 96 | else if (Notification.permission !== "denied") { 97 | Notification.requestPermission().then(function(permission) { 98 | // If the user accepts, let's create a notification 99 | if (permission === "granted") { 100 | var notification = new Notification(param_title, options, action); 101 | 102 | document.addEventListener('visibilitychange', function() { 103 | if (document.visibilityState === 'visible') { 104 | // The tab has become visible so clear the now-stale Notification. 105 | notification.close(); 106 | 107 | toaster("yes", 2000) 108 | 109 | 110 | } 111 | }); 112 | 113 | 114 | } 115 | }); 116 | } 117 | 118 | } 119 | 120 | 121 | 122 | 123 | //silent notification 124 | function toaster(text, time) { 125 | 126 | 127 | $("div#toast").html(text) 128 | 129 | $("div#toast").animate({ top: "0px" }, time, "linear", function() { 130 | $("div#toast").delay(time).animate({ top: "-110vh" }, time); 131 | 132 | }); 133 | 134 | } 135 | 136 | 137 | //check if internet connection 138 | function check_iconnection() { 139 | 140 | 141 | 142 | 143 | function updateOfflineStatus() { 144 | toaster("Your Browser is offline", 5000) 145 | return false; 146 | } 147 | 148 | window.addEventListener('offline', updateOfflineStatus); 149 | } 150 | 151 | //bottom bar 152 | function bottom_bar(left, center, right) { 153 | $("div#bottom-bar div#button-left").text(left) 154 | $("div#bottom-bar div#button-center").text(center) 155 | $("div#bottom-bar div#button-right").text(right) 156 | 157 | left == "" ? $("div#bottom-bar div#button-left").css("opacity", "0") : $("div#bottom-bar div#button-left").css("opacity", "1"); 158 | center == "" ? $("div#bottom-bar div#button-center").css("opacity", "0") : $("div#bottom-bar div#button-center").css("opacity", "1"); 159 | left == "" ? $("div#bottom-bar div#button-right").css("opacity", "0") : $("div#bottom-bar div#button-right").css("opacity", "1"); 160 | 161 | 162 | 163 | } -------------------------------------------------------------------------------- /application/assets/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Custom-Launcher 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
33 | 34 |
35 | 36 |
37 | 38 | 39 | 40 | 41 |
42 |
43 |
44 | 45 | 46 | 47 | 48 | 49 |
50 | 51 |
wifi
52 |
bluetooth
53 |
mobile data
54 |
tethering
55 |
airplane
56 |
57 |

Sleep Mode

58 |
59 |
60 | 61 |
62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 |
70 | 71 |
72 | Please wait... 73 |
74 | 75 | 76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 | 84 |
85 | 86 |
87 |
88 |

89 | 90 |
temprain
91 |
92 |
93 | 94 |
95 | 96 |
97 | 98 |
99 | 100 |
101 | 102 |
103 |
104 |
105 |
106 | 107 |
108 | 109 |
110 |
111 |
112 |
113 |
m/sec
114 |
115 |
116 | 117 |
118 |
119 |
hpa
120 |
121 |
122 | 123 |
124 | 125 |
126 | 127 |
128 | 129 | 130 |
131 | 132 | 133 | 134 | 135 |
136 | 137 | 138 | 139 | -------------------------------------------------------------------------------- /application/assets/css/grid.min.css: -------------------------------------------------------------------------------- 1 | .grid-col-1{min-width:10px;max-width:10px}.grid-col-2{min-width:20px;max-width:20px}.grid-col-3{min-width:30px;max-width:30px}.grid-col-4{min-width:40px;max-width:40px}.grid-col-5{min-width:50px;max-width:50px}.grid-col-6{min-width:60px;max-width:60px}.grid-col-7{min-width:70px;max-width:70px}.grid-col-8{min-width:80px;max-width:80px}.grid-col-9{min-width:90px;max-width:90px}.grid-col-10{min-width:100px;max-width:100px}.grid-col-11{min-width:110px;max-width:110px}.grid-col-12{min-width:120px;max-width:120px}.grid-col-13{min-width:130px;max-width:130px}.grid-col-14{min-width:140px;max-width:140px}.grid-col-15{min-width:150px;max-width:150px}.grid-col-16{min-width:160px;max-width:160px}.grid-col-17{min-width:170px;max-width:170px}.grid-col-18{min-width:180px;max-width:180px}.grid-col-19{min-width:190px;max-width:190px}.grid-col-20{min-width:200px;max-width:200px}.grid-col-21{min-width:210px;max-width:210px}.grid-col-22{min-width:220px;max-width:220px}.grid-col-23{min-width:230px;max-width:230px}.grid-col-24{min-width:240px;max-width:240px}.grid-col-25{min-width:250px;max-width:250px}.grid-col-26{min-width:260px;max-width:260px}.grid-col-27{min-width:270px;max-width:270px}.grid-col-28{min-width:280px;max-width:280px}.grid-col-29{min-width:290px;max-width:290px}.grid-col-30{min-width:300px;max-width:300px}.grid-col-31{min-width:310px;max-width:310px}.grid-col-32{min-width:320px;max-width:320px}.grid-col-33{min-width:330px;max-width:330px}.grid-col-34{min-width:340px;max-width:340px}.grid-col-35{min-width:350px;max-width:350px}.grid-col-36{min-width:360px;max-width:360px}.grid-col-37{min-width:370px;max-width:370px}.grid-col-38{min-width:380px;max-width:380px}.grid-col-39{min-width:390px;max-width:390px}.grid-col-40{min-width:400px;max-width:400px}.grid-col-41{min-width:410px;max-width:410px}.grid-col-42{min-width:420px;max-width:420px}.grid-col-43{min-width:430px;max-width:430px}.grid-col-44{min-width:440px;max-width:440px}.grid-col-45{min-width:450px;max-width:450px}.grid-col-46{min-width:460px;max-width:460px}.grid-col-47{min-width:470px;max-width:470px}.grid-col-48{min-width:480px;max-width:480px}.grid-col-49{min-width:490px;max-width:490px}.grid-col-50{min-width:500px;max-width:500px}.grid-col-51{min-width:510px;max-width:510px}.grid-col-52{min-width:520px;max-width:520px}.grid-col-53{min-width:530px;max-width:530px}.grid-col-54{min-width:540px;max-width:540px}.grid-col-55{min-width:550px;max-width:550px}.grid-col-56{min-width:560px;max-width:560px}.grid-col-57{min-width:570px;max-width:570px}.grid-col-58{min-width:580px;max-width:580px}.grid-col-59{min-width:590px;max-width:590px}.grid-col-60{min-width:600px;max-width:600px}.grid-col-61{min-width:610px;max-width:610px}.grid-col-62{min-width:620px;max-width:620px}.grid-col-63{min-width:630px;max-width:630px}.grid-col-64{min-width:640px;max-width:640px}.grid-col-65{min-width:650px;max-width:650px}.grid-col-66{min-width:660px;max-width:660px}.grid-col-67{min-width:670px;max-width:670px}.grid-col-68{min-width:680px;max-width:680px}.grid-col-69{min-width:690px;max-width:690px}.grid-col-70{min-width:700px;max-width:700px}.grid-col-71{min-width:710px;max-width:710px}.grid-col-72{min-width:720px;max-width:720px}.grid-col-73{min-width:730px;max-width:730px}.grid-col-74{min-width:740px;max-width:740px}.grid-col-75{min-width:750px;max-width:750px}.grid-col-76{min-width:760px;max-width:760px}.grid-col-77{min-width:770px;max-width:770px}.grid-col-78{min-width:780px;max-width:780px}.grid-col-79{min-width:790px;max-width:790px}.grid-col-80{min-width:800px;max-width:800px}.grid-col-81{min-width:810px;max-width:810px}.grid-col-82{min-width:820px;max-width:820px}.grid-col-83{min-width:830px;max-width:830px}.grid-col-84{min-width:840px;max-width:840px}.grid-col-85{min-width:850px;max-width:850px}.grid-col-86{min-width:860px;max-width:860px}.grid-col-87{min-width:870px;max-width:870px}.grid-col-88{min-width:880px;max-width:880px}.grid-col-88{min-width:880px;max-width:880px}.grid-col-89{min-width:890px;max-width:890px}.grid-col-90{min-width:900px;max-width:900px}.grid-col-91{min-width:910px;max-width:910px}.grid-col-92{min-width:920px;max-width:920px}.grid-col-93{min-width:930px;max-width:930px}.grid-col-94{min-width:940px;max-width:940px}.grid-col-95{min-width:950px;max-width:950px}.grid-col-96{min-width:960px;max-width:960px}.flex{display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;flex-wrap:wrap}.flex-column{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.flex-shrink-1{max-width:50%;outline:2px solid red}.justify-content-start{-webkit-align-items:flex-start;align-items:flex-start}.justify-content-end{-webkit-justify-content:flex-end;justify-content:flex-end}.algin-item-start{-webkit-align-items:flex-start;align-items:flex-start}.algin-item-end{-webkit-align-items:flex-end;align-items:flex-end}.align-item-center{-webkit-align-items:center;-ms-flex-align:center;align-items:center}.justify-content-spacebetween{-webkit-justify-content:space-between;justify-content:space-between}.justify-content-spacearound{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around;-webkit-align-content:space-around;-ms-flex-line-pack:distribute;align-content:space-around}.justify-content-center{-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.width-100{min-width:100%}.width-50{min-width:50%}.width-30{min-width:30%;max-width:30%}.center{transform:translate(50%,0)}.col-3{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-count:3;-webkit-column-gap:30px;-moz-column-count:3;-moz-column-gap:30px;column-count:3;column-gap:30px}.col-dont-break-inside{-webkit-column-break-inside:avoid;page-break-inside:avoid;break-inside:avoid}.block{display:block} -------------------------------------------------------------------------------- /application/assets/assets/css/grid.min.css: -------------------------------------------------------------------------------- 1 | .grid-col-1{min-width:10px;max-width:10px}.grid-col-2{min-width:20px;max-width:20px}.grid-col-3{min-width:30px;max-width:30px}.grid-col-4{min-width:40px;max-width:40px}.grid-col-5{min-width:50px;max-width:50px}.grid-col-6{min-width:60px;max-width:60px}.grid-col-7{min-width:70px;max-width:70px}.grid-col-8{min-width:80px;max-width:80px}.grid-col-9{min-width:90px;max-width:90px}.grid-col-10{min-width:100px;max-width:100px}.grid-col-11{min-width:110px;max-width:110px}.grid-col-12{min-width:120px;max-width:120px}.grid-col-13{min-width:130px;max-width:130px}.grid-col-14{min-width:140px;max-width:140px}.grid-col-15{min-width:150px;max-width:150px}.grid-col-16{min-width:160px;max-width:160px}.grid-col-17{min-width:170px;max-width:170px}.grid-col-18{min-width:180px;max-width:180px}.grid-col-19{min-width:190px;max-width:190px}.grid-col-20{min-width:200px;max-width:200px}.grid-col-21{min-width:210px;max-width:210px}.grid-col-22{min-width:220px;max-width:220px}.grid-col-23{min-width:230px;max-width:230px}.grid-col-24{min-width:240px;max-width:240px}.grid-col-25{min-width:250px;max-width:250px}.grid-col-26{min-width:260px;max-width:260px}.grid-col-27{min-width:270px;max-width:270px}.grid-col-28{min-width:280px;max-width:280px}.grid-col-29{min-width:290px;max-width:290px}.grid-col-30{min-width:300px;max-width:300px}.grid-col-31{min-width:310px;max-width:310px}.grid-col-32{min-width:320px;max-width:320px}.grid-col-33{min-width:330px;max-width:330px}.grid-col-34{min-width:340px;max-width:340px}.grid-col-35{min-width:350px;max-width:350px}.grid-col-36{min-width:360px;max-width:360px}.grid-col-37{min-width:370px;max-width:370px}.grid-col-38{min-width:380px;max-width:380px}.grid-col-39{min-width:390px;max-width:390px}.grid-col-40{min-width:400px;max-width:400px}.grid-col-41{min-width:410px;max-width:410px}.grid-col-42{min-width:420px;max-width:420px}.grid-col-43{min-width:430px;max-width:430px}.grid-col-44{min-width:440px;max-width:440px}.grid-col-45{min-width:450px;max-width:450px}.grid-col-46{min-width:460px;max-width:460px}.grid-col-47{min-width:470px;max-width:470px}.grid-col-48{min-width:480px;max-width:480px}.grid-col-49{min-width:490px;max-width:490px}.grid-col-50{min-width:500px;max-width:500px}.grid-col-51{min-width:510px;max-width:510px}.grid-col-52{min-width:520px;max-width:520px}.grid-col-53{min-width:530px;max-width:530px}.grid-col-54{min-width:540px;max-width:540px}.grid-col-55{min-width:550px;max-width:550px}.grid-col-56{min-width:560px;max-width:560px}.grid-col-57{min-width:570px;max-width:570px}.grid-col-58{min-width:580px;max-width:580px}.grid-col-59{min-width:590px;max-width:590px}.grid-col-60{min-width:600px;max-width:600px}.grid-col-61{min-width:610px;max-width:610px}.grid-col-62{min-width:620px;max-width:620px}.grid-col-63{min-width:630px;max-width:630px}.grid-col-64{min-width:640px;max-width:640px}.grid-col-65{min-width:650px;max-width:650px}.grid-col-66{min-width:660px;max-width:660px}.grid-col-67{min-width:670px;max-width:670px}.grid-col-68{min-width:680px;max-width:680px}.grid-col-69{min-width:690px;max-width:690px}.grid-col-70{min-width:700px;max-width:700px}.grid-col-71{min-width:710px;max-width:710px}.grid-col-72{min-width:720px;max-width:720px}.grid-col-73{min-width:730px;max-width:730px}.grid-col-74{min-width:740px;max-width:740px}.grid-col-75{min-width:750px;max-width:750px}.grid-col-76{min-width:760px;max-width:760px}.grid-col-77{min-width:770px;max-width:770px}.grid-col-78{min-width:780px;max-width:780px}.grid-col-79{min-width:790px;max-width:790px}.grid-col-80{min-width:800px;max-width:800px}.grid-col-81{min-width:810px;max-width:810px}.grid-col-82{min-width:820px;max-width:820px}.grid-col-83{min-width:830px;max-width:830px}.grid-col-84{min-width:840px;max-width:840px}.grid-col-85{min-width:850px;max-width:850px}.grid-col-86{min-width:860px;max-width:860px}.grid-col-87{min-width:870px;max-width:870px}.grid-col-88{min-width:880px;max-width:880px}.grid-col-88{min-width:880px;max-width:880px}.grid-col-89{min-width:890px;max-width:890px}.grid-col-90{min-width:900px;max-width:900px}.grid-col-91{min-width:910px;max-width:910px}.grid-col-92{min-width:920px;max-width:920px}.grid-col-93{min-width:930px;max-width:930px}.grid-col-94{min-width:940px;max-width:940px}.grid-col-95{min-width:950px;max-width:950px}.grid-col-96{min-width:960px;max-width:960px}.flex{display:-webkit-flex;display:flex;-webkit-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;flex-wrap:wrap}.flex-column{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.flex-shrink-1{max-width:50%;outline:2px solid red}.justify-content-start{-webkit-align-items:flex-start;align-items:flex-start}.justify-content-end{-webkit-justify-content:flex-end;justify-content:flex-end}.algin-item-start{-webkit-align-items:flex-start;align-items:flex-start}.algin-item-end{-webkit-align-items:flex-end;align-items:flex-end}.align-item-center{-webkit-align-items:center;-ms-flex-align:center;align-items:center}.justify-content-spacebetween{-webkit-justify-content:space-between;justify-content:space-between}.justify-content-spacearound{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around;-webkit-align-content:space-around;-ms-flex-line-pack:distribute;align-content:space-around}.justify-content-center{-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.width-100{min-width:100%}.width-50{min-width:50%}.width-30{min-width:30%;max-width:30%}.center{transform:translate(50%,0)}.col-3{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-count:3;-webkit-column-gap:30px;-moz-column-count:3;-moz-column-gap:30px;column-count:3;column-gap:30px}.col-dont-break-inside{-webkit-column-break-inside:avoid;page-break-inside:avoid;break-inside:avoid}.block{display:block} -------------------------------------------------------------------------------- /application/icons/icon-112-112.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 22 | 24 | 45 | 47 | 48 | 50 | image/svg+xml 51 | 53 | 54 | 55 | 56 | 57 | 62 | 70 | 73 | 76 | 78 | 81 | 83 | 92 | 100 | 101 | 104 | 113 | 121 | 122 | 125 | 134 | 142 | 143 | 146 | 155 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | -------------------------------------------------------------------------------- /application/assets/icons/icon-112-112.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 22 | 24 | 45 | 47 | 48 | 50 | image/svg+xml 51 | 53 | 54 | 55 | 56 | 57 | 62 | 70 | 73 | 76 | 78 | 81 | 83 | 92 | 100 | 101 | 104 | 113 | 121 | 122 | 125 | 134 | 142 | 143 | 146 | 155 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | -------------------------------------------------------------------------------- /application/icons/icon-56-56.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 22 | 24 | 46 | 48 | 49 | 51 | image/svg+xml 52 | 54 | 55 | 56 | 57 | 58 | 63 | 71 | 74 | 77 | 79 | 82 | 84 | 93 | 101 | 102 | 105 | 114 | 122 | 123 | 126 | 135 | 143 | 144 | 147 | 156 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | -------------------------------------------------------------------------------- /application/assets/icons/icon-56-56.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 22 | 24 | 46 | 48 | 49 | 51 | image/svg+xml 52 | 54 | 55 | 56 | 57 | 58 | 63 | 71 | 74 | 77 | 79 | 82 | 84 | 93 | 101 | 102 | 105 | 114 | 122 | 123 | 126 | 135 | 143 | 144 | 147 | 156 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | -------------------------------------------------------------------------------- /application/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Custom-Launcher 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
32 | 33 |
34 | 35 | 36 | 37 | 38 |
39 |
40 |
41 | 42 | 43 | 44 | 45 | 46 |
47 | 48 |
wifi
49 |
bluetooth
50 |
mobile data
51 |
tethering
52 |
airplane
53 |
54 |

Sleep Mode

55 |
56 |
activ
57 |
58 | 59 |
60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 |
68 | 69 |
70 | Please wait... 71 |
72 | 73 | 74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 | 82 |
83 | 84 |
85 |
86 |

87 | 88 |
temprain
89 |
90 | 91 |
92 |

UV-Index

93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 | 106 |
107 |
108 |
109 |
110 |
111 | 112 | 113 | 114 | 115 |
116 | 117 |
118 | 119 |
120 | 121 |
122 | 123 |
124 | 125 |
126 |
127 |
128 |
129 | 130 |
131 | 132 |
133 |
134 |
135 |
136 |
m/sec
137 |
138 |
139 | 140 |
141 |
142 |
hpa
143 |
144 |
145 | 146 |
147 | 148 |
149 | 150 |
151 | 152 | 153 |
154 | 155 | 156 | 157 | 158 |
159 | 160 | 161 | 162 | -------------------------------------------------------------------------------- /application/assets/assets/css/main.css: -------------------------------------------------------------------------------- 1 | /*GENERAL*/ 2 | 3 | :root { 4 | --color-one: black; 5 | --color-two: yellow; 6 | --color-three: silver; 7 | --color-four: rgb(99, 99, 99); 8 | --color-five: rgb(38, 38, 38); 9 | --color-six: rgb(78, 206, 144); 10 | --color-seven: gainsboro; 11 | } 12 | 13 | *, 14 | *:before, 15 | *:after { 16 | border: 0px; 17 | padding: 0px; 18 | margin: 0px; 19 | box-sizing: border-box; 20 | } 21 | 22 | *::-webkit-scrollbar { 23 | width: 0!important; 24 | background-color: transparent!Important; 25 | display: none!Important; 26 | background: black; 27 | } 28 | 29 | *::-moz-focus-inner { 30 | border: 0; 31 | } 32 | 33 | *:focus { 34 | border: 0; 35 | } 36 | 37 | 38 | /* 1 */ 39 | 40 | ::-webkit-scrollbar-button { 41 | display: none!Important; 42 | } 43 | 44 | 45 | /* 2 */ 46 | 47 | ::-webkit-scrollbar-track { 48 | display: none!Important; 49 | background: black; 50 | } 51 | 52 | 53 | /* 3 */ 54 | 55 | ::-webkit-scrollbar-track-piece { 56 | display: none!Important; 57 | background: black; 58 | } 59 | 60 | 61 | /* 4 */ 62 | 63 | ::-webkit-scrollbar-thumb { 64 | display: none!Important; 65 | background: black; 66 | } 67 | 68 | 69 | /* 5 */ 70 | 71 | ::-webkit-scrollbar-corner { 72 | display: none!Important; 73 | background: black; 74 | } 75 | 76 | html, 77 | body { 78 | font-weight: 100; 79 | width: 100vw; 80 | position: relative; 81 | margin: 0px; 82 | padding: 0px; 83 | font-size: 1.0rem; 84 | line-height: 1.4rem; 85 | -webkit-appearance: none; 86 | height: 100%; 87 | margin: 0; 88 | } 89 | 90 | h1 { 91 | margin: 0 0 20px 0; 92 | font-size: 1.2rem; 93 | } 94 | 95 | h2 { 96 | font-size: 1.0rem; 97 | } 98 | 99 | .debug { 100 | border: 1px solid red; 101 | } 102 | 103 | 104 | /*/////////////////////////// 105 | ///HELPER////////////////*/ 106 | 107 | div#bottom-bar { 108 | position: fixed; 109 | bottom: 10px; 110 | left: 0px; 111 | height: 15px; 112 | z-index: 5; 113 | background: gray; 114 | } 115 | 116 | div#bottom-bar div#inner { 117 | position: relative; 118 | } 119 | 120 | div#bottom-bar div { 121 | background: gray; 122 | color: white; 123 | padding: 2px; 124 | } 125 | 126 | div#bottom-bar div#button-center { 127 | background: gray; 128 | color: white; 129 | padding: 2px; 130 | width: 30%; 131 | text-align: center; 132 | } 133 | 134 | div#bottom-bar div#button-left { 135 | background: gray; 136 | color: white; 137 | padding: 2px; 138 | width: 20px; 139 | text-align: left; 140 | width: 30%; 141 | } 142 | 143 | div#bottom-bar div#button-right { 144 | background: gray; 145 | color: white; 146 | padding: 2px; 147 | width: 30%; 148 | text-align: right; 149 | } 150 | 151 | div#toast { 152 | position: fixed; 153 | height: auto; 154 | overflow: none; 155 | top: -100px; 156 | background: black; 157 | color: white; 158 | z-index: 5000; 159 | min-width: 100%; 160 | padding: 5px; 161 | text-align: center; 162 | } 163 | 164 | 165 | /*/////////////////////////// 166 | ///FINDER////////////////*/ 167 | 168 | div#finder { 169 | position: relative; 170 | background: black; 171 | padding: 5px; 172 | color: white; 173 | } 174 | 175 | div#finder div#app-list { 176 | background: black; 177 | color: white; 178 | margin: 0 0 3px 0; 179 | padding: 3px; 180 | overflow: hidden; 181 | } 182 | 183 | div#finder div#app-list .child-of-dir { 184 | display: none; 185 | } 186 | 187 | div#finder div#app-list .dir { 188 | border-left: 4px solid silver; 189 | padding: 0 0 0 3px; 190 | } 191 | 192 | div#finder div#app-list .dir span.app-name { 193 | display: none; 194 | } 195 | 196 | div#finder div#app-list div { 197 | min-width: 100%; 198 | margin: 0 0 5px 0; 199 | } 200 | 201 | div#finder div:focus { 202 | background: yellow; 203 | color: black; 204 | border: 0; 205 | } 206 | 207 | div#weather-wrapper { 208 | display: none; 209 | background: black; 210 | } 211 | 212 | div#quick-settings { 213 | display: none; 214 | position: relative; 215 | background: black; 216 | padding: 5px; 217 | color: white; 218 | } 219 | 220 | div#quick-settings div:focus { 221 | background: yellow; 222 | color: black; 223 | } 224 | 225 | div#quick-settings div.alarms { 226 | margin: 15px 0 0 0; 227 | } 228 | 229 | div#quick-settings div.alarms div { 230 | padding: 0 10px 0 0; 231 | } 232 | 233 | div#quick-settings div.alarms div:first:after { 234 | content: "-"; 235 | } 236 | 237 | 238 | /*/////////////////////////// 239 | ///LOCATION////////////////*/ 240 | 241 | div#chart { 242 | position: relative; 243 | margin: 25px 0 10px 0; 244 | height: 240px; 245 | width: 95vw; 246 | max-width: 95vw; 247 | } 248 | 249 | div#chart #myChart { 250 | margin: 0 0 0 -5px!Important; 251 | } 252 | 253 | div#chart div.legend span { 254 | margin: 5px 5px 0 0; 255 | } 256 | 257 | div#chart div.legend span:first-child { 258 | color: red; 259 | } 260 | 261 | div#chart div.legend span:nth-child(2) { 262 | color: blue; 263 | } 264 | 265 | div#location { 266 | position: absolute; 267 | z-index: 2; 268 | left: 0; 269 | top: 0; 270 | background: black; 271 | color: white; 272 | font-size: 14px; 273 | padding: 5px 10px 50px 5px; 274 | overflow: hidden; 275 | display: none; 276 | } 277 | 278 | div#weather-wrapper div#locations { 279 | display: none; 280 | position: fixed; 281 | z-index: 3; 282 | background: black; 283 | top: 0px; 284 | left: 0px; 285 | } 286 | 287 | div#weather-wrapper div#locations:first-child { 288 | outline: 2px solid red; 289 | } 290 | 291 | div#weather-wrapper div#locations div { 292 | display: block; 293 | background: black; 294 | color: white; 295 | width: 100%; 296 | height: auto; 297 | margin: 0 0 5px 0; 298 | } 299 | 300 | div#weather-wrapper div#locations div:focus { 301 | background: yellow; 302 | color: black; 303 | } 304 | 305 | div#weather-wrapper div#message { 306 | position: absolute; 307 | z-index: 5; 308 | color: white; 309 | top: 40%; 310 | text-align: center; 311 | } 312 | 313 | div#location div#weather { 314 | margin: 10px 0 0 0; 315 | } 316 | 317 | div#location div#temp { 318 | font-size: 1.7rem; 319 | } 320 | 321 | div#location div#weather section { 322 | border-top: 2px dashed white; 323 | margin: 0 0 0px 0; 324 | padding: 12px 5px 12px 0px; 325 | background: black; 326 | } 327 | 328 | div#location div#weather div#weather-bar div#icon { 329 | margin: 8px 0 0 0; 330 | } 331 | 332 | div#location div#weather div#wind-dir { 333 | font-size: 1.7rem; 334 | max-height: 1.7rem!Important; 335 | } 336 | 337 | div#location div#weather div#wind-speed { 338 | font-size: 0.7rem; 339 | max-height: 1.7rem!Important; 340 | margin: -10px 0 0 0; 341 | } 342 | 343 | div#location div#weather div#wind-speed div#wind-speed-val { 344 | max-height: 0.7rem; 345 | } 346 | 347 | div#location div#weather div#wind-speed div#wind-speed-unit { 348 | max-height: 0.7rem; 349 | } 350 | 351 | div#message-box { 352 | display: none; 353 | position: fixed; 354 | bottom: 5px; 355 | left: 0px; 356 | padding: 5px; 357 | min-width: 100vw; 358 | height: auto; 359 | background: pink; 360 | color: black; 361 | z-index: 2; 362 | } 363 | 364 | 365 | /* KaiOS portrait devices (240x320) */ 366 | 367 | @media only screen and (orientation: portrait) { 368 | /* styles */ 369 | } 370 | 371 | 372 | /* KaiOS landscape devices (320x240) */ 373 | 374 | @media screen and (orientation: landscape) { 375 | /* styles */ 376 | } -------------------------------------------------------------------------------- /application/assets/js/applait.finder.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * EventEmitter v4.2.9 - git.io/ee 3 | * Oliver Caldwell 4 | * MIT license 5 | * @preserve 6 | */ 7 | (function(){"use strict";function EventEmitter(){}function indexOfListener(listeners,listener){for(var i=listeners.length;i--;)if(listeners[i].listener===listener)return i;return-1}function alias(name){return function(){return this[name].apply(this,arguments)}}var proto=EventEmitter.prototype,exports=this,originalGlobalValue=exports.EventEmitter;proto.getListeners=function(evt){var response,key,events=this._getEvents();if(evt instanceof RegExp){response={};for(key in events)events.hasOwnProperty(key)&&evt.test(key)&&(response[key]=events[key])}else response=events[evt]||(events[evt]=[]);return response},proto.flattenListeners=function(listeners){var i,flatListeners=[];for(i=0;i-1&&this.checkhidden(fullpath)}; 26 | -------------------------------------------------------------------------------- /application/assets/assets/js/applait.finder.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * EventEmitter v4.2.9 - git.io/ee 3 | * Oliver Caldwell 4 | * MIT license 5 | * @preserve 6 | */ 7 | (function(){"use strict";function EventEmitter(){}function indexOfListener(listeners,listener){for(var i=listeners.length;i--;)if(listeners[i].listener===listener)return i;return-1}function alias(name){return function(){return this[name].apply(this,arguments)}}var proto=EventEmitter.prototype,exports=this,originalGlobalValue=exports.EventEmitter;proto.getListeners=function(evt){var response,key,events=this._getEvents();if(evt instanceof RegExp){response={};for(key in events)events.hasOwnProperty(key)&&evt.test(key)&&(response[key]=events[key])}else response=events[evt]||(events[evt]=[]);return response},proto.flattenListeners=function(listeners){var i,flatListeners=[];for(i=0;i-1&&this.checkhidden(fullpath)}; 26 | -------------------------------------------------------------------------------- /application/assets/css/main.css: -------------------------------------------------------------------------------- 1 | /*GENERAL*/ 2 | 3 | :root { 4 | --color-one: black; 5 | --color-two: yellow; 6 | --color-three: silver; 7 | --color-four: rgb(99, 99, 99); 8 | --color-five: rgb(38, 38, 38); 9 | --color-six: rgb(78, 206, 144); 10 | --color-seven: gainsboro; 11 | } 12 | 13 | *, 14 | *:before, 15 | *:after { 16 | border: 0px; 17 | padding: 0px; 18 | margin: 0px; 19 | box-sizing: border-box; 20 | } 21 | 22 | *::-webkit-scrollbar { 23 | width: 0!important; 24 | background-color: transparent!Important; 25 | display: none!Important; 26 | background: black; 27 | } 28 | 29 | *::-moz-focus-inner { 30 | border: 0; 31 | } 32 | 33 | *:focus { 34 | border: 0; 35 | } 36 | 37 | 38 | /* 1 */ 39 | 40 | ::-webkit-scrollbar-button { 41 | display: none!Important; 42 | } 43 | 44 | 45 | /* 2 */ 46 | 47 | ::-webkit-scrollbar-track { 48 | display: none!Important; 49 | background: black; 50 | } 51 | 52 | 53 | /* 3 */ 54 | 55 | ::-webkit-scrollbar-track-piece { 56 | display: none!Important; 57 | background: black; 58 | } 59 | 60 | 61 | /* 4 */ 62 | 63 | ::-webkit-scrollbar-thumb { 64 | display: none!Important; 65 | background: black; 66 | } 67 | 68 | 69 | /* 5 */ 70 | 71 | ::-webkit-scrollbar-corner { 72 | display: none!Important; 73 | background: black; 74 | } 75 | 76 | html, 77 | body { 78 | font-weight: 100; 79 | width: 100vw; 80 | position: relative; 81 | margin: 0px; 82 | padding: 0px; 83 | font-size: 1.0rem; 84 | line-height: 1.4rem; 85 | -webkit-appearance: none; 86 | height: 100%; 87 | margin: 0; 88 | } 89 | 90 | h1 { 91 | margin: 0 0 20px 0; 92 | font-size: 1.2rem; 93 | } 94 | 95 | h2 { 96 | font-size: 1.0rem; 97 | } 98 | 99 | .debug { 100 | border: 1px solid red; 101 | } 102 | 103 | 104 | /*/////////////////////////// 105 | ///HELPER////////////////*/ 106 | 107 | div#bottom-bar { 108 | position: fixed; 109 | bottom: 10px; 110 | left: 0px; 111 | height: 15px; 112 | z-index: 5; 113 | background: gray; 114 | } 115 | 116 | div#bottom-bar div#inner { 117 | position: relative; 118 | } 119 | 120 | div#bottom-bar div { 121 | background: gray; 122 | color: white; 123 | padding: 2px; 124 | } 125 | 126 | div#bottom-bar div#button-center { 127 | background: gray; 128 | color: white; 129 | padding: 2px; 130 | width: 30%; 131 | text-align: center; 132 | } 133 | 134 | div#bottom-bar div#button-left { 135 | background: gray; 136 | color: white; 137 | padding: 2px; 138 | width: 20px; 139 | text-align: left; 140 | width: 30%; 141 | } 142 | 143 | div#bottom-bar div#button-right { 144 | background: gray; 145 | color: white; 146 | padding: 2px; 147 | width: 30%; 148 | text-align: right; 149 | } 150 | 151 | div#toast { 152 | position: fixed; 153 | height: auto; 154 | overflow: none; 155 | top: -100px; 156 | background: black; 157 | color: white; 158 | z-index: 5000; 159 | min-width: 100%; 160 | padding: 5px; 161 | text-align: center; 162 | } 163 | 164 | 165 | /*/////////////////////////// 166 | ///FINDER////////////////*/ 167 | 168 | div#finder { 169 | position: relative; 170 | background: black; 171 | padding: 5px; 172 | color: white; 173 | } 174 | 175 | div#finder div#app-list { 176 | background: black; 177 | color: white; 178 | margin: 0 0 3px 0; 179 | padding: 3px; 180 | overflow: hidden; 181 | } 182 | 183 | div#finder div#app-list .child-of-dir { 184 | display: none; 185 | } 186 | 187 | div#finder div#app-list .dir { 188 | border-left: 4px solid silver; 189 | padding: 0 0 0 3px; 190 | } 191 | 192 | div#finder div#app-list .dir span.app-name { 193 | display: none; 194 | } 195 | 196 | div#finder div#app-list div { 197 | min-width: 100%; 198 | margin: 0 0 5px 0; 199 | } 200 | 201 | div#finder div:focus { 202 | background: yellow; 203 | color: black; 204 | border: 0; 205 | } 206 | 207 | div#weather-wrapper { 208 | display: none; 209 | background: black; 210 | } 211 | 212 | div#quick-settings { 213 | display: none; 214 | position: relative; 215 | background: black; 216 | padding: 5px; 217 | color: white; 218 | } 219 | 220 | div#quick-settings div:focus { 221 | background: yellow; 222 | color: black; 223 | } 224 | 225 | div#quick-settings div.alarms { 226 | margin: 15px 0 0 0; 227 | } 228 | 229 | div#quick-settings div.alarms div { 230 | padding: 0 10px 0 0; 231 | } 232 | 233 | div#quick-settings div.alarms div:first:after { 234 | content: "-"; 235 | } 236 | 237 | div#quick-settings div#sleepMode { 238 | display: none; 239 | color: red; 240 | } 241 | 242 | 243 | /*/////////////////////////// 244 | ///LOCATION////////////////*/ 245 | 246 | div#chart { 247 | position: relative; 248 | margin: 25px 0 10px 0; 249 | height: 240px; 250 | width: 95vw; 251 | max-width: 95vw; 252 | } 253 | 254 | div#chart #myChart { 255 | margin: 0 0 0 -5px!Important; 256 | } 257 | 258 | div#chart div.legend span { 259 | margin: 5px 5px 0 0; 260 | } 261 | 262 | div#chart div.legend span:first-child { 263 | color: red; 264 | } 265 | 266 | div#chart div.legend span:nth-child(2) { 267 | color: blue; 268 | } 269 | 270 | div#location { 271 | position: absolute; 272 | z-index: 2; 273 | left: 0; 274 | top: 0; 275 | background: black; 276 | color: white; 277 | font-size: 14px; 278 | padding: 5px 10px 50px 5px; 279 | overflow: hidden; 280 | display: none; 281 | } 282 | 283 | 284 | /* 285 | UV-Index 286 | */ 287 | 288 | div#weather-wrapper div#uv-index { 289 | padding: 5px; 290 | margin: 0 0 30px 0; 291 | } 292 | 293 | div#weather-wrapper div#uv-index h3 { 294 | margin: 0 0 5px 0; 295 | } 296 | 297 | div#weather-wrapper div#uv-index div.time { 298 | text-align: center; 299 | } 300 | 301 | div#weather-wrapper div#locations { 302 | display: none; 303 | position: fixed; 304 | z-index: 3; 305 | background: black; 306 | top: 0px; 307 | left: 0px; 308 | } 309 | 310 | div#weather-wrapper div#locations:first-child { 311 | outline: 2px solid red; 312 | } 313 | 314 | div#weather-wrapper div#locations div { 315 | display: block; 316 | background: black; 317 | color: white; 318 | width: 100%; 319 | height: auto; 320 | margin: 0 0 5px 0; 321 | } 322 | 323 | div#weather-wrapper div#locations div:focus { 324 | background: yellow; 325 | color: black; 326 | } 327 | 328 | div#weather-wrapper div#message { 329 | position: absolute; 330 | z-index: 5; 331 | color: white; 332 | top: 40%; 333 | text-align: center; 334 | } 335 | 336 | div#location div#weather { 337 | margin: 10px 0 0 0; 338 | } 339 | 340 | div#location div#temp { 341 | font-size: 1.7rem; 342 | } 343 | 344 | div#location div#weather section { 345 | border-top: 2px dashed white; 346 | margin: 0 0 0px 0; 347 | padding: 12px 5px 12px 0px; 348 | background: black; 349 | } 350 | 351 | div#location div#weather div#weather-bar div#icon { 352 | margin: 8px 0 0 0; 353 | } 354 | 355 | div#location div#weather div#wind-dir { 356 | font-size: 1.7rem; 357 | max-height: 1.7rem!Important; 358 | } 359 | 360 | div#location div#weather div#wind-speed { 361 | font-size: 0.7rem; 362 | max-height: 1.7rem!Important; 363 | margin: -10px 0 0 0; 364 | } 365 | 366 | div#location div#weather div#wind-speed div#wind-speed-val { 367 | max-height: 0.7rem; 368 | } 369 | 370 | div#location div#weather div#wind-speed div#wind-speed-unit { 371 | max-height: 0.7rem; 372 | } 373 | 374 | div#message-box { 375 | display: none; 376 | position: fixed; 377 | bottom: 5px; 378 | left: 0px; 379 | padding: 5px; 380 | min-width: 100vw; 381 | height: auto; 382 | background: pink; 383 | color: black; 384 | z-index: 2; 385 | } 386 | 387 | 388 | /* KaiOS portrait devices (240x320) */ 389 | 390 | @media only screen and (orientation: portrait) { 391 | /* styles */ 392 | } 393 | 394 | 395 | /* KaiOS landscape devices (320x240) */ 396 | 397 | @media screen and (orientation: landscape) { 398 | /* styles */ 399 | } -------------------------------------------------------------------------------- /application/assets/assets/css/grid.css: -------------------------------------------------------------------------------- 1 | /* G R I D */ 2 | 3 | .grid-col-1 { 4 | min-width: 10px; 5 | max-width: 10px; 6 | } 7 | 8 | .grid-col-2 { 9 | min-width: 20px; 10 | max-width: 20px; 11 | } 12 | 13 | .grid-col-3 { 14 | min-width: 30px; 15 | max-width: 30px; 16 | } 17 | 18 | .grid-col-4 { 19 | min-width: 40px; 20 | max-width: 40px; 21 | } 22 | 23 | .grid-col-5 { 24 | min-width: 50px; 25 | max-width: 50px; 26 | } 27 | 28 | .grid-col-6 { 29 | min-width: 60px; 30 | max-width: 60px; 31 | } 32 | 33 | .grid-col-7 { 34 | min-width: 70px; 35 | max-width: 70px; 36 | } 37 | 38 | .grid-col-8 { 39 | min-width: 80px; 40 | max-width: 80px; 41 | } 42 | 43 | .grid-col-9 { 44 | min-width: 90px; 45 | max-width: 90px; 46 | } 47 | 48 | .grid-col-10 { 49 | min-width: 100px; 50 | max-width: 100px; 51 | } 52 | 53 | .grid-col-11 { 54 | min-width: 110px; 55 | max-width: 110px; 56 | } 57 | 58 | .grid-col-12 { 59 | min-width: 120px; 60 | max-width: 120px; 61 | } 62 | 63 | .grid-col-13 { 64 | min-width: 130px; 65 | max-width: 130px; 66 | } 67 | 68 | .grid-col-14 { 69 | min-width: 140px; 70 | max-width: 140px; 71 | } 72 | 73 | .grid-col-15 { 74 | min-width: 150px; 75 | max-width: 150px; 76 | } 77 | 78 | .grid-col-16 { 79 | min-width: 160px; 80 | max-width: 160px; 81 | } 82 | 83 | .grid-col-17 { 84 | min-width: 170px; 85 | max-width: 170px; 86 | } 87 | 88 | .grid-col-18 { 89 | min-width: 180px; 90 | max-width: 180px; 91 | } 92 | 93 | .grid-col-19 { 94 | min-width: 190px; 95 | max-width: 190px; 96 | } 97 | 98 | .grid-col-20 { 99 | min-width: 200px; 100 | max-width: 200px; 101 | } 102 | 103 | .grid-col-21 { 104 | min-width: 210px; 105 | max-width: 210px; 106 | } 107 | 108 | .grid-col-22 { 109 | min-width: 220px; 110 | max-width: 220px; 111 | } 112 | 113 | .grid-col-23 { 114 | min-width: 230px; 115 | max-width: 230px; 116 | } 117 | 118 | .grid-col-24 { 119 | min-width: 240px; 120 | max-width: 240px; 121 | } 122 | 123 | .grid-col-25 { 124 | min-width: 250px; 125 | max-width: 250px; 126 | } 127 | 128 | .grid-col-26 { 129 | min-width: 260px; 130 | max-width: 260px; 131 | } 132 | 133 | .grid-col-27 { 134 | min-width: 270px; 135 | max-width: 270px; 136 | } 137 | 138 | .grid-col-28 { 139 | min-width: 280px; 140 | max-width: 280px; 141 | } 142 | 143 | .grid-col-29 { 144 | min-width: 290px; 145 | max-width: 290px; 146 | } 147 | 148 | .grid-col-30 { 149 | min-width: 300px; 150 | max-width: 300px; 151 | } 152 | 153 | .grid-col-31 { 154 | min-width: 310px; 155 | max-width: 310px; 156 | } 157 | 158 | .grid-col-32 { 159 | min-width: 320px; 160 | max-width: 320px; 161 | } 162 | 163 | .grid-col-33 { 164 | min-width: 330px; 165 | max-width: 330px; 166 | } 167 | 168 | .grid-col-34 { 169 | min-width: 340px; 170 | max-width: 340px; 171 | } 172 | 173 | .grid-col-35 { 174 | min-width: 350px; 175 | max-width: 350px; 176 | } 177 | 178 | .grid-col-36 { 179 | min-width: 360px; 180 | max-width: 360px; 181 | } 182 | 183 | .grid-col-37 { 184 | min-width: 370px; 185 | max-width: 370px; 186 | } 187 | 188 | .grid-col-38 { 189 | min-width: 380px; 190 | max-width: 380px; 191 | } 192 | 193 | .grid-col-39 { 194 | min-width: 390px; 195 | max-width: 390px; 196 | } 197 | 198 | .grid-col-40 { 199 | min-width: 400px; 200 | max-width: 400px; 201 | } 202 | 203 | .grid-col-41 { 204 | min-width: 410px; 205 | max-width: 410px; 206 | } 207 | 208 | .grid-col-42 { 209 | min-width: 420px; 210 | max-width: 420px; 211 | } 212 | 213 | .grid-col-43 { 214 | min-width: 430px; 215 | max-width: 430px; 216 | } 217 | 218 | .grid-col-44 { 219 | min-width: 440px; 220 | max-width: 440px; 221 | } 222 | 223 | .grid-col-45 { 224 | min-width: 450px; 225 | max-width: 450px; 226 | } 227 | 228 | .grid-col-46 { 229 | min-width: 460px; 230 | max-width: 460px; 231 | } 232 | 233 | .grid-col-47 { 234 | min-width: 470px; 235 | max-width: 470px; 236 | } 237 | 238 | .grid-col-48 { 239 | min-width: 480px; 240 | max-width: 480px; 241 | } 242 | 243 | .grid-col-49 { 244 | min-width: 490px; 245 | max-width: 490px; 246 | } 247 | 248 | .grid-col-50 { 249 | min-width: 500px; 250 | max-width: 500px; 251 | } 252 | 253 | .grid-col-51 { 254 | min-width: 510px; 255 | max-width: 510px; 256 | } 257 | 258 | .grid-col-52 { 259 | min-width: 520px; 260 | max-width: 520px; 261 | } 262 | 263 | .grid-col-53 { 264 | min-width: 530px; 265 | max-width: 530px; 266 | } 267 | 268 | .grid-col-54 { 269 | min-width: 540px; 270 | max-width: 540px; 271 | } 272 | 273 | .grid-col-55 { 274 | min-width: 550px; 275 | max-width: 550px; 276 | } 277 | 278 | .grid-col-56 { 279 | min-width: 560px; 280 | max-width: 560px; 281 | } 282 | 283 | .grid-col-57 { 284 | min-width: 570px; 285 | max-width: 570px; 286 | } 287 | 288 | .grid-col-58 { 289 | min-width: 580px; 290 | max-width: 580px; 291 | } 292 | 293 | .grid-col-59 { 294 | min-width: 590px; 295 | max-width: 590px; 296 | } 297 | 298 | .grid-col-60 { 299 | min-width: 600px; 300 | max-width: 600px; 301 | } 302 | 303 | .grid-col-61 { 304 | min-width: 610px; 305 | max-width: 610px; 306 | } 307 | 308 | .grid-col-62 { 309 | min-width: 620px; 310 | max-width: 620px; 311 | } 312 | 313 | .grid-col-63 { 314 | min-width: 630px; 315 | max-width: 630px; 316 | } 317 | 318 | .grid-col-64 { 319 | min-width: 640px; 320 | max-width: 640px; 321 | } 322 | 323 | .grid-col-65 { 324 | min-width: 650px; 325 | max-width: 650px; 326 | } 327 | 328 | .grid-col-66 { 329 | min-width: 660px; 330 | max-width: 660px; 331 | } 332 | 333 | .grid-col-67 { 334 | min-width: 670px; 335 | max-width: 670px; 336 | } 337 | 338 | .grid-col-68 { 339 | min-width: 680px; 340 | max-width: 680px; 341 | } 342 | 343 | .grid-col-69 { 344 | min-width: 690px; 345 | max-width: 690px; 346 | } 347 | 348 | .grid-col-70 { 349 | min-width: 700px; 350 | max-width: 700px; 351 | } 352 | 353 | .grid-col-71 { 354 | min-width: 710px; 355 | max-width: 710px; 356 | } 357 | 358 | .grid-col-72 { 359 | min-width: 720px; 360 | max-width: 720px; 361 | } 362 | 363 | .grid-col-73 { 364 | min-width: 730px; 365 | max-width: 730px; 366 | } 367 | 368 | .grid-col-74 { 369 | min-width: 740px; 370 | max-width: 740px; 371 | } 372 | 373 | .grid-col-75 { 374 | min-width: 750px; 375 | max-width: 750px; 376 | } 377 | 378 | .grid-col-76 { 379 | min-width: 760px; 380 | max-width: 760px; 381 | } 382 | 383 | .grid-col-77 { 384 | min-width: 770px; 385 | max-width: 770px; 386 | } 387 | 388 | .grid-col-78 { 389 | min-width: 780px; 390 | max-width: 780px; 391 | } 392 | 393 | .grid-col-79 { 394 | min-width: 790px; 395 | max-width: 790px; 396 | } 397 | 398 | .grid-col-80 { 399 | min-width: 800px; 400 | max-width: 800px; 401 | } 402 | 403 | .grid-col-81 { 404 | min-width: 810px; 405 | max-width: 810px; 406 | } 407 | 408 | .grid-col-82 { 409 | min-width: 820px; 410 | max-width: 820px; 411 | } 412 | 413 | .grid-col-83 { 414 | min-width: 830px; 415 | max-width: 830px; 416 | } 417 | 418 | .grid-col-84 { 419 | min-width: 840px; 420 | max-width: 840px; 421 | } 422 | 423 | .grid-col-85 { 424 | min-width: 850px; 425 | max-width: 850px; 426 | } 427 | 428 | .grid-col-86 { 429 | min-width: 860px; 430 | max-width: 860px; 431 | } 432 | 433 | .grid-col-87 { 434 | min-width: 870px; 435 | max-width: 870px; 436 | } 437 | 438 | .grid-col-88 { 439 | min-width: 880px; 440 | max-width: 880px; 441 | } 442 | 443 | .grid-col-88 { 444 | min-width: 880px; 445 | max-width: 880px; 446 | } 447 | 448 | .grid-col-89 { 449 | min-width: 890px; 450 | max-width: 890px; 451 | } 452 | 453 | .grid-col-90 { 454 | min-width: 900px; 455 | max-width: 900px; 456 | } 457 | 458 | .grid-col-91 { 459 | min-width: 910px; 460 | max-width: 910px; 461 | } 462 | 463 | .grid-col-92 { 464 | min-width: 920px; 465 | max-width: 920px; 466 | } 467 | 468 | .grid-col-93 { 469 | min-width: 930px; 470 | max-width: 930px; 471 | } 472 | 473 | .grid-col-94 { 474 | min-width: 940px; 475 | max-width: 940px; 476 | } 477 | 478 | .grid-col-95 { 479 | min-width: 950px; 480 | max-width: 950px; 481 | } 482 | 483 | .grid-col-96 { 484 | min-width: 960px; 485 | max-width: 960px; 486 | } 487 | 488 | .text-center { 489 | text-align: center; 490 | } 491 | 492 | .flex { 493 | display: -webkit-flex; 494 | display: flex; 495 | -webkit-flex-direction: row; 496 | flex-direction: row; 497 | -webkit-flex-wrap: wrap; 498 | flex-wrap: wrap; 499 | } 500 | 501 | .flex-column { 502 | -webkit-flex-direction: column; 503 | -ms-flex-direction: column; 504 | flex-direction: column; 505 | } 506 | 507 | .flex-shrink-1 { 508 | //flex: 1 1 509 | min-width: 50%; 510 | max-width: 50%; 511 | outline: 2px solid red; 512 | } 513 | 514 | .justify-content-start { 515 | -webkit-align-items: flex-start; 516 | align-items: flex-start; 517 | } 518 | 519 | .justify-content-end { 520 | -webkit-justify-content: flex-end; 521 | justify-content: flex-end; 522 | } 523 | 524 | .algin-item-start { 525 | -webkit-align-items: flex-start; 526 | align-items: flex-start; 527 | } 528 | 529 | .algin-item-end { 530 | -webkit-align-items: flex-end; 531 | align-items: flex-end; 532 | } 533 | 534 | .align-item-center { 535 | -webkit-align-items: center; 536 | -ms-flex-align: center; 537 | align-items: center; 538 | } 539 | 540 | .justify-content-spacebetween { 541 | -webkit-justify-content: space-between; 542 | justify-content: space-between; 543 | } 544 | 545 | .justify-content-spacearound { 546 | -webkit-justify-content: space-around; 547 | -ms-flex-pack: distribute; 548 | justify-content: space-around; 549 | -webkit-align-content: space-around; 550 | -ms-flex-line-pack: distribute; 551 | align-content: space-around; 552 | } 553 | 554 | .justify-content-center { 555 | -webkit-justify-content: center; 556 | -ms-flex-pack: center; 557 | justify-content: center; 558 | } 559 | 560 | .width-100 { 561 | min-width: 100vw; 562 | max-width: 100vw; 563 | } 564 | 565 | .height-100 { 566 | min-height: 100vh; 567 | } 568 | 569 | .width-50 { 570 | min-width: 50%; 571 | } 572 | 573 | .width-30 { 574 | min-width: 30%; 575 | max-width: 30%; 576 | } 577 | 578 | .center { 579 | transform: translate(50%, -0%); 580 | } 581 | 582 | .block { 583 | display: block; 584 | } 585 | 586 | [class*='grid-'] {} -------------------------------------------------------------------------------- /application/assets/css/grid.css: -------------------------------------------------------------------------------- 1 | /* G R I D */ 2 | 3 | .grid-col-1 { 4 | min-width: 10px; 5 | max-width: 10px; 6 | } 7 | 8 | .grid-col-2 { 9 | min-width: 20px; 10 | max-width: 20px; 11 | } 12 | 13 | .grid-col-3 { 14 | min-width: 30px; 15 | max-width: 30px; 16 | } 17 | 18 | .grid-col-4 { 19 | min-width: 40px; 20 | max-width: 40px; 21 | } 22 | 23 | .grid-col-5 { 24 | min-width: 50px; 25 | max-width: 50px; 26 | } 27 | 28 | .grid-col-6 { 29 | min-width: 60px; 30 | max-width: 60px; 31 | } 32 | 33 | .grid-col-7 { 34 | min-width: 70px; 35 | max-width: 70px; 36 | } 37 | 38 | .grid-col-8 { 39 | min-width: 80px; 40 | max-width: 80px; 41 | } 42 | 43 | .grid-col-9 { 44 | min-width: 90px; 45 | max-width: 90px; 46 | } 47 | 48 | .grid-col-10 { 49 | min-width: 100px; 50 | max-width: 100px; 51 | } 52 | 53 | .grid-col-11 { 54 | min-width: 110px; 55 | max-width: 110px; 56 | } 57 | 58 | .grid-col-12 { 59 | min-width: 120px; 60 | max-width: 120px; 61 | } 62 | 63 | .grid-col-13 { 64 | min-width: 130px; 65 | max-width: 130px; 66 | } 67 | 68 | .grid-col-14 { 69 | min-width: 140px; 70 | max-width: 140px; 71 | } 72 | 73 | .grid-col-15 { 74 | min-width: 150px; 75 | max-width: 150px; 76 | } 77 | 78 | .grid-col-16 { 79 | min-width: 160px; 80 | max-width: 160px; 81 | } 82 | 83 | .grid-col-17 { 84 | min-width: 170px; 85 | max-width: 170px; 86 | } 87 | 88 | .grid-col-18 { 89 | min-width: 180px; 90 | max-width: 180px; 91 | } 92 | 93 | .grid-col-19 { 94 | min-width: 190px; 95 | max-width: 190px; 96 | } 97 | 98 | .grid-col-20 { 99 | min-width: 200px; 100 | max-width: 200px; 101 | } 102 | 103 | .grid-col-21 { 104 | min-width: 210px; 105 | max-width: 210px; 106 | } 107 | 108 | .grid-col-22 { 109 | min-width: 220px; 110 | max-width: 220px; 111 | } 112 | 113 | .grid-col-23 { 114 | min-width: 230px; 115 | max-width: 230px; 116 | } 117 | 118 | .grid-col-24 { 119 | min-width: 240px; 120 | max-width: 240px; 121 | } 122 | 123 | .grid-col-25 { 124 | min-width: 250px; 125 | max-width: 250px; 126 | } 127 | 128 | .grid-col-26 { 129 | min-width: 260px; 130 | max-width: 260px; 131 | } 132 | 133 | .grid-col-27 { 134 | min-width: 270px; 135 | max-width: 270px; 136 | } 137 | 138 | .grid-col-28 { 139 | min-width: 280px; 140 | max-width: 280px; 141 | } 142 | 143 | .grid-col-29 { 144 | min-width: 290px; 145 | max-width: 290px; 146 | } 147 | 148 | .grid-col-30 { 149 | min-width: 300px; 150 | max-width: 300px; 151 | } 152 | 153 | .grid-col-31 { 154 | min-width: 310px; 155 | max-width: 310px; 156 | } 157 | 158 | .grid-col-32 { 159 | min-width: 320px; 160 | max-width: 320px; 161 | } 162 | 163 | .grid-col-33 { 164 | min-width: 330px; 165 | max-width: 330px; 166 | } 167 | 168 | .grid-col-34 { 169 | min-width: 340px; 170 | max-width: 340px; 171 | } 172 | 173 | .grid-col-35 { 174 | min-width: 350px; 175 | max-width: 350px; 176 | } 177 | 178 | .grid-col-36 { 179 | min-width: 360px; 180 | max-width: 360px; 181 | } 182 | 183 | .grid-col-37 { 184 | min-width: 370px; 185 | max-width: 370px; 186 | } 187 | 188 | .grid-col-38 { 189 | min-width: 380px; 190 | max-width: 380px; 191 | } 192 | 193 | .grid-col-39 { 194 | min-width: 390px; 195 | max-width: 390px; 196 | } 197 | 198 | .grid-col-40 { 199 | min-width: 400px; 200 | max-width: 400px; 201 | } 202 | 203 | .grid-col-41 { 204 | min-width: 410px; 205 | max-width: 410px; 206 | } 207 | 208 | .grid-col-42 { 209 | min-width: 420px; 210 | max-width: 420px; 211 | } 212 | 213 | .grid-col-43 { 214 | min-width: 430px; 215 | max-width: 430px; 216 | } 217 | 218 | .grid-col-44 { 219 | min-width: 440px; 220 | max-width: 440px; 221 | } 222 | 223 | .grid-col-45 { 224 | min-width: 450px; 225 | max-width: 450px; 226 | } 227 | 228 | .grid-col-46 { 229 | min-width: 460px; 230 | max-width: 460px; 231 | } 232 | 233 | .grid-col-47 { 234 | min-width: 470px; 235 | max-width: 470px; 236 | } 237 | 238 | .grid-col-48 { 239 | min-width: 480px; 240 | max-width: 480px; 241 | } 242 | 243 | .grid-col-49 { 244 | min-width: 490px; 245 | max-width: 490px; 246 | } 247 | 248 | .grid-col-50 { 249 | min-width: 500px; 250 | max-width: 500px; 251 | } 252 | 253 | .grid-col-51 { 254 | min-width: 510px; 255 | max-width: 510px; 256 | } 257 | 258 | .grid-col-52 { 259 | min-width: 520px; 260 | max-width: 520px; 261 | } 262 | 263 | .grid-col-53 { 264 | min-width: 530px; 265 | max-width: 530px; 266 | } 267 | 268 | .grid-col-54 { 269 | min-width: 540px; 270 | max-width: 540px; 271 | } 272 | 273 | .grid-col-55 { 274 | min-width: 550px; 275 | max-width: 550px; 276 | } 277 | 278 | .grid-col-56 { 279 | min-width: 560px; 280 | max-width: 560px; 281 | } 282 | 283 | .grid-col-57 { 284 | min-width: 570px; 285 | max-width: 570px; 286 | } 287 | 288 | .grid-col-58 { 289 | min-width: 580px; 290 | max-width: 580px; 291 | } 292 | 293 | .grid-col-59 { 294 | min-width: 590px; 295 | max-width: 590px; 296 | } 297 | 298 | .grid-col-60 { 299 | min-width: 600px; 300 | max-width: 600px; 301 | } 302 | 303 | .grid-col-61 { 304 | min-width: 610px; 305 | max-width: 610px; 306 | } 307 | 308 | .grid-col-62 { 309 | min-width: 620px; 310 | max-width: 620px; 311 | } 312 | 313 | .grid-col-63 { 314 | min-width: 630px; 315 | max-width: 630px; 316 | } 317 | 318 | .grid-col-64 { 319 | min-width: 640px; 320 | max-width: 640px; 321 | } 322 | 323 | .grid-col-65 { 324 | min-width: 650px; 325 | max-width: 650px; 326 | } 327 | 328 | .grid-col-66 { 329 | min-width: 660px; 330 | max-width: 660px; 331 | } 332 | 333 | .grid-col-67 { 334 | min-width: 670px; 335 | max-width: 670px; 336 | } 337 | 338 | .grid-col-68 { 339 | min-width: 680px; 340 | max-width: 680px; 341 | } 342 | 343 | .grid-col-69 { 344 | min-width: 690px; 345 | max-width: 690px; 346 | } 347 | 348 | .grid-col-70 { 349 | min-width: 700px; 350 | max-width: 700px; 351 | } 352 | 353 | .grid-col-71 { 354 | min-width: 710px; 355 | max-width: 710px; 356 | } 357 | 358 | .grid-col-72 { 359 | min-width: 720px; 360 | max-width: 720px; 361 | } 362 | 363 | .grid-col-73 { 364 | min-width: 730px; 365 | max-width: 730px; 366 | } 367 | 368 | .grid-col-74 { 369 | min-width: 740px; 370 | max-width: 740px; 371 | } 372 | 373 | .grid-col-75 { 374 | min-width: 750px; 375 | max-width: 750px; 376 | } 377 | 378 | .grid-col-76 { 379 | min-width: 760px; 380 | max-width: 760px; 381 | } 382 | 383 | .grid-col-77 { 384 | min-width: 770px; 385 | max-width: 770px; 386 | } 387 | 388 | .grid-col-78 { 389 | min-width: 780px; 390 | max-width: 780px; 391 | } 392 | 393 | .grid-col-79 { 394 | min-width: 790px; 395 | max-width: 790px; 396 | } 397 | 398 | .grid-col-80 { 399 | min-width: 800px; 400 | max-width: 800px; 401 | } 402 | 403 | .grid-col-81 { 404 | min-width: 810px; 405 | max-width: 810px; 406 | } 407 | 408 | .grid-col-82 { 409 | min-width: 820px; 410 | max-width: 820px; 411 | } 412 | 413 | .grid-col-83 { 414 | min-width: 830px; 415 | max-width: 830px; 416 | } 417 | 418 | .grid-col-84 { 419 | min-width: 840px; 420 | max-width: 840px; 421 | } 422 | 423 | .grid-col-85 { 424 | min-width: 850px; 425 | max-width: 850px; 426 | } 427 | 428 | .grid-col-86 { 429 | min-width: 860px; 430 | max-width: 860px; 431 | } 432 | 433 | .grid-col-87 { 434 | min-width: 870px; 435 | max-width: 870px; 436 | } 437 | 438 | .grid-col-88 { 439 | min-width: 880px; 440 | max-width: 880px; 441 | } 442 | 443 | .grid-col-88 { 444 | min-width: 880px; 445 | max-width: 880px; 446 | } 447 | 448 | .grid-col-89 { 449 | min-width: 890px; 450 | max-width: 890px; 451 | } 452 | 453 | .grid-col-90 { 454 | min-width: 900px; 455 | max-width: 900px; 456 | } 457 | 458 | .grid-col-91 { 459 | min-width: 910px; 460 | max-width: 910px; 461 | } 462 | 463 | .grid-col-92 { 464 | min-width: 920px; 465 | max-width: 920px; 466 | } 467 | 468 | .grid-col-93 { 469 | min-width: 930px; 470 | max-width: 930px; 471 | } 472 | 473 | .grid-col-94 { 474 | min-width: 940px; 475 | max-width: 940px; 476 | } 477 | 478 | .grid-col-95 { 479 | min-width: 950px; 480 | max-width: 950px; 481 | } 482 | 483 | .grid-col-96 { 484 | min-width: 960px; 485 | max-width: 960px; 486 | } 487 | 488 | .text-center { 489 | text-align: center; 490 | } 491 | 492 | .flex { 493 | display: -webkit-flex; 494 | display: flex; 495 | -webkit-flex-direction: row; 496 | flex-direction: row; 497 | -webkit-flex-wrap: wrap; 498 | flex-wrap: wrap; 499 | } 500 | 501 | .flex-column { 502 | -webkit-flex-direction: column; 503 | -ms-flex-direction: column; 504 | flex-direction: column; 505 | } 506 | 507 | .flex-shrink-1 { 508 | //flex: 1 1 509 | min-width: 50%; 510 | max-width: 50%; 511 | outline: 2px solid red; 512 | } 513 | 514 | .justify-content-start { 515 | -webkit-align-items: flex-start; 516 | align-items: flex-start; 517 | } 518 | 519 | .justify-content-end { 520 | -webkit-justify-content: flex-end; 521 | justify-content: flex-end; 522 | } 523 | 524 | .algin-item-start { 525 | -webkit-align-items: flex-start; 526 | align-items: flex-start; 527 | } 528 | 529 | .algin-item-end { 530 | -webkit-align-items: flex-end; 531 | align-items: flex-end; 532 | } 533 | 534 | .align-item-center { 535 | -webkit-align-items: center; 536 | -ms-flex-align: center; 537 | align-items: center; 538 | } 539 | 540 | .justify-content-spacebetween { 541 | -webkit-justify-content: space-between; 542 | justify-content: space-between; 543 | } 544 | 545 | .justify-content-spacearound { 546 | -webkit-justify-content: space-around; 547 | -ms-flex-pack: distribute; 548 | justify-content: space-around; 549 | -webkit-align-content: space-around; 550 | -ms-flex-line-pack: distribute; 551 | align-content: space-around; 552 | } 553 | 554 | .justify-content-center { 555 | -webkit-justify-content: center; 556 | -ms-flex-pack: center; 557 | justify-content: center; 558 | } 559 | 560 | .width-100 { 561 | min-width: 100vw; 562 | max-width: 100vw; 563 | } 564 | 565 | .height-100 { 566 | min-height: 100vh; 567 | } 568 | 569 | .width-50 { 570 | min-width: 50%; 571 | } 572 | 573 | .width-30 { 574 | min-width: 30%; 575 | max-width: 30%; 576 | } 577 | 578 | .width-25 { 579 | min-width: 25%; 580 | max-width: 25%; 581 | } 582 | 583 | .center { 584 | transform: translate(50%, -0%); 585 | } 586 | 587 | .block { 588 | display: block; 589 | } 590 | 591 | [class*='grid-'] {} -------------------------------------------------------------------------------- /application/assets/js/client.min.js: -------------------------------------------------------------------------------- 1 | (function(f){var d,e,p=function(){d=(new (window.UAParser||exports.UAParser)).getResult();e=new Detector;return this};p.prototype={getSoftwareVersion:function(){return"0.1.11"},getBrowserData:function(){return d},getFingerprint:function(){var b=d.ua,c=this.getScreenPrint(),a=this.getPlugins(),g=this.getFonts(),n=this.isLocalStorage(),f=this.isSessionStorage(),h=this.getTimeZone(),u=this.getLanguage(),m=this.getSystemLanguage(),e=this.isCookie(),C=this.getCanvasPrint();return murmurhash3_32_gc(b+"|"+ 2 | c+"|"+a+"|"+g+"|"+n+"|"+f+"|"+h+"|"+u+"|"+m+"|"+e+"|"+C,256)},getCustomFingerprint:function(){for(var b="",c=0;c 1.0",2,15);c.fillStyle="rgba(102, 204, 0, 0.7)";c.fillText("ClientJS,org 1.0",4,17);return b.toDataURL()}};"object"=== 13 | typeof module&&"undefined"!==typeof exports&&(module.exports=p);f.ClientJS=p})(window);var deployJava=function(){function f(a){c.debug&&(console.log?console.log(a):alert(a))}function d(a){if(null==a||0==a.length)return"http://java.com/dt-redirect";"&"==a.charAt(0)&&(a=a.substring(1,a.length));return"http://java.com/dt-redirect?"+a}var e=["id","class","title","style"];"classid codebase codetype data type archive declare standby height width usemap name tabindex align border hspace vspace".split(" ").concat(e,["lang","dir"],"onclick ondblclick onmousedown onmouseup onmouseover onmousemove onmouseout onkeypress onkeydown onkeyup".split(" ")); 14 | var p="codebase code name archive object width height alt align hspace vspace".split(" ").concat(e),b;try{b=-1!=document.location.protocol.indexOf("http")?"//java.com/js/webstart.png":"http://java.com/js/webstart.png"}catch(a){b="http://java.com/js/webstart.png"}var c={debug:null,version:"20120801",firefoxJavaVersion:null,myInterval:null,preInstallJREList:null,returnPage:null,brand:null,locale:null,installType:null,EAInstallEnabled:!1,EarlyAccessURL:null,oldMimeType:"application/npruntime-scriptable-plugin;DeploymentToolkit", 15 | mimeType:"application/java-deployment-toolkit",launchButtonPNG:b,browserName:null,browserName2:null,getJREs:function(){var a=[];if(this.isPluginInstalled())for(var g=this.getPlugin().jvms,b=0;b'}d||(c+='');h&&(b+=' code="dummy"');document.write(b+">\n"+c+"\n")},versionCheck:function(a){var g=0,b=a.match("^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?(\\*|\\+)?$");if(null!=b){for(var c=a=!1,h=[],d=1;dh.length&&(c=!1,a=!0);g=this.getJREs();for(d=0;d':"Netscape Family"==c&&(d='');"undefined"==document.body||null==document.body? 26 | (document.write(d),document.location=b):(a=document.createElement("div"),a.id="div1",a.style.position="relative",a.style.left="-10000px",a.style.margin="0px auto",a.className="dynamicDiv",a.innerHTML=d,document.body.appendChild(a))},createWebStartLaunchButtonEx:function(a,b){null==this.returnPage&&(this.returnPage=a);document.write('')}, 27 | createWebStartLaunchButton:function(a,b){null==this.returnPage&&(this.returnPage=a);document.write('')},launch:function(a){document.location=a;return!0},isPluginInstalled:function(){var a= 28 | this.getPlugin();return a&&a.jvms?!0:!1},isAutoUpdateEnabled:function(){return this.isPluginInstalled()?this.getPlugin().isAutoUpdateEnabled():!1},setAutoUpdateEnabled:function(){return this.isPluginInstalled()?this.getPlugin().setAutoUpdateEnabled():!1},setInstallerType:function(a){this.installType=a;return this.isPluginInstalled()?this.getPlugin().setInstallerType(a):!1},setAdditionalPackages:function(a){return this.isPluginInstalled()?this.getPlugin().setAdditionalPackages(a):!1},setEarlyAccess:function(a){this.EAInstallEnabled= 29 | a},isPlugin2:function(){if(this.isPluginInstalled()&&this.versionCheck("1.6.0_10+"))try{return this.getPlugin().isPlugin2()}catch(a){}return!1},allowPlugin:function(){this.getBrowser();return"Safari"!=this.browserName2&&"Opera"!=this.browserName2},getPlugin:function(){this.refresh();var a=null;this.allowPlugin()&&(a=document.getElementById("deployJavaPlugin"));return a},compareVersionToPattern:function(a,b,c,d){if(void 0==a||void 0==b)return!1;var h=a.match("^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$"); 30 | if(null!=h){var f=0;a=[];for(var m=1;mb[m])break}return!0}for(m=0;m "+a);-1!=a.indexOf("msie")&&-1==a.indexOf("opera")?this.browserName2=this.browserName= 31 | "MSIE":-1!=a.indexOf("iphone")?(this.browserName="Netscape Family",this.browserName2="iPhone"):-1!=a.indexOf("firefox")&&-1==a.indexOf("opera")?(this.browserName="Netscape Family",this.browserName2="Firefox"):-1!=a.indexOf("chrome")?(this.browserName="Netscape Family",this.browserName2="Chrome"):-1!=a.indexOf("safari")?(this.browserName="Netscape Family",this.browserName2="Safari"):-1!=a.indexOf("mozilla")&&-1==a.indexOf("opera")?(this.browserName="Netscape Family",this.browserName2="Other"):-1!= 32 | a.indexOf("opera")?(this.browserName="Netscape Family",this.browserName2="Opera"):(this.browserName="?",this.browserName2="unknown");f("[getBrowser()] Detected browser name:"+this.browserName+", "+this.browserName2)}return this.browserName},testUsingActiveX:function(a){a="JavaWebStart.isInstalled."+a+".0";if("undefined"==typeof ActiveXObject||!ActiveXObject)return f("[testUsingActiveX()] Browser claims to be IE, but no ActiveXObject object?"),!1;try{return null!=new ActiveXObject(a)}catch(b){return!1}}, 33 | testForMSVM:function(){if("undefined"!=typeof oClientCaps){var a=oClientCaps.getComponentVersion("{08B0E5C0-4FCB-11CF-AAA5-00401C608500}","ComponentID");return""==a||"5,0,5000,0"==a?!1:!0}return!1},testUsingMimeTypes:function(a){if(!navigator.mimeTypes)return f("[testUsingMimeTypes()] Browser claims to be Netscape family, but no mimeTypes[] array?"),!1;for(var b=0;bd[0]?!0:c[0]d[1]?!0:c[1]d[2]?!0:c[2]'):"Netscape Family"==a&&this.allowPlugin()&&this.writeEmbedTag()},refresh:function(){navigator.plugins.refresh(!1);"Netscape Family"==this.getBrowser()&&this.allowPlugin()&&null== 38 | document.getElementById("deployJavaPlugin")&&this.writeEmbedTag()},writeEmbedTag:function(){var a=!1;if(null!=navigator.mimeTypes){for(var b=0;b