From 5c3afbf6f40e0800ece88b7aca7d117f3a4b56ad Mon Sep 17 00:00:00 2001 From: d8ahazard Date: Fri, 25 Nov 2016 09:21:14 -0600 Subject: [PATCH 001/170] Add Tab Colors Closes mescon/Muximux#92 Re-commit. New PR due to technical issues. Spectrum is minified, debug commits removed, no references to browser-specific values, new functions commented. --- css/spectrum.min.css | 1 + css/style.css | 19 +++- index.php | 2 + js/main.js | 16 ++- js/spectrum.min.js | 217 +++++++++++++++++++++++++++++++++++++++ muximux.php | 10 +- settings.ini.php-example | 23 +++++ 7 files changed, 282 insertions(+), 6 deletions(-) create mode 100644 css/spectrum.min.css create mode 100644 js/spectrum.min.js diff --git a/css/spectrum.min.css b/css/spectrum.min.css new file mode 100644 index 0000000..73c7668 --- /dev/null +++ b/css/spectrum.min.css @@ -0,0 +1 @@ +.sp-container{position:absolute;top:0;left:0;display:inline-block;*display:inline;*zoom:1;z-index:9999994;overflow:hidden}.sp-container.sp-flat{position:relative}.sp-container,.sp-container *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.sp-top{position:relative;width:100%;display:inline-block}.sp-top-inner{position:absolute;top:0;left:0;bottom:0;right:0}.sp-color{position:absolute;top:0;left:0;bottom:0;right:20%}.sp-hue{position:absolute;top:0;right:0;bottom:0;left:84%;height:100%}.sp-clear-enabled .sp-hue{top:33px;height:77.5%}.sp-fill{padding-top:80%}.sp-sat,.sp-val{position:absolute;top:0;left:0;right:0;bottom:0}.sp-alpha-enabled .sp-top{margin-bottom:18px}.sp-alpha-enabled .sp-alpha{display:block}.sp-alpha-handle{position:absolute;top:-4px;bottom:-4px;width:6px;left:50%;cursor:pointer;border:1px solid black;background:white;opacity:.8}.sp-alpha{display:none;position:absolute;bottom:-14px;right:0;left:0;height:8px}.sp-alpha-inner{border:solid 1px #333}.sp-clear{display:none}.sp-clear.sp-clear-display{background-position:center}.sp-clear-enabled .sp-clear{display:block;position:absolute;top:0;right:0;bottom:0;left:84%;height:28px}.sp-container,.sp-replacer,.sp-preview,.sp-dragger,.sp-slider,.sp-alpha,.sp-clear,.sp-alpha-handle,.sp-container.sp-dragging .sp-input,.sp-container button{-webkit-user-select:none;-moz-user-select:-moz-none;-o-user-select:none;user-select:none}.sp-container.sp-input-disabled .sp-input-container{display:none}.sp-container.sp-buttons-disabled .sp-button-container{display:none}.sp-container.sp-palette-buttons-disabled .sp-palette-button-container{display:none}.sp-palette-only .sp-picker-container{display:none}.sp-palette-disabled .sp-palette-container{display:none}.sp-initial-disabled .sp-initial{display:none}.sp-sat{background-image:-webkit-gradient(linear,0 0,100% 0,from(#FFF),to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(left,#FFF,rgba(204,154,129,0));background-image:-moz-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-o-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:-ms-linear-gradient(left,#fff,rgba(204,154,129,0));background-image:linear-gradient(to right,#fff,rgba(204,154,129,0));-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType = 1, startColorstr=#FFFFFFFF, endColorstr=#00CC9A81)";filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#FFFFFFFF',endColorstr='#00CC9A81')}.sp-val{background-image:-webkit-gradient(linear,0 100%,0 0,from(#000000),to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(bottom,#000000,rgba(204,154,129,0));background-image:-moz-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-o-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:-ms-linear-gradient(bottom,#000,rgba(204,154,129,0));background-image:linear-gradient(to top,#000,rgba(204,154,129,0));-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#00CC9A81, endColorstr=#FF000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00CC9A81',endColorstr='#FF000000')}.sp-hue{background:-moz-linear-gradient(top,#ff0000 0%,#ffff00 17%,#00ff00 33%,#00ffff 50%,#0000ff 67%,#ff00ff 83%,#ff0000 100%);background:-ms-linear-gradient(top,#ff0000 0%,#ffff00 17%,#00ff00 33%,#00ffff 50%,#0000ff 67%,#ff00ff 83%,#ff0000 100%);background:-o-linear-gradient(top,#ff0000 0%,#ffff00 17%,#00ff00 33%,#00ffff 50%,#0000ff 67%,#ff00ff 83%,#ff0000 100%);background:-webkit-gradient(linear,left top,left bottom,from(#ff0000),color-stop(.17,#ffff00),color-stop(.33,#00ff00),color-stop(.5,#00ffff),color-stop(.67,#0000ff),color-stop(.83,#ff00ff),to(#ff0000));background:-webkit-linear-gradient(top,#ff0000 0%,#ffff00 17%,#00ff00 33%,#00ffff 50%,#0000ff 67%,#ff00ff 83%,#ff0000 100%);background:linear-gradient(to bottom,#ff0000 0%,#ffff00 17%,#00ff00 33%,#00ffff 50%,#0000ff 67%,#ff00ff 83%,#ff0000 100%)}.sp-1{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0000',endColorstr='#ffff00')}.sp-2{height:16%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff00',endColorstr='#00ff00')}.sp-3{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ff00',endColorstr='#00ffff')}.sp-4{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ffff',endColorstr='#0000ff')}.sp-5{height:16%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0000ff',endColorstr='#ff00ff')}.sp-6{height:17%;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff00ff',endColorstr='#ff0000')}.sp-hidden{display:none!important}.sp-cf:before,.sp-cf:after{content:"";display:table}.sp-cf:after{clear:both}.sp-cf{*zoom:1}@media (max-device-width:480px){.sp-color{right:40%}.sp-hue{left:63%}.sp-fill{padding-top:60%}}.sp-dragger{border-radius:5px;height:5px;width:5px;border:1px solid #fff;background:#000;cursor:pointer;position:absolute;top:0;left:0}.sp-slider{position:absolute;top:0;cursor:pointer;height:3px;left:-1px;right:-1px;border:1px solid #000;background:white;opacity:.8}.sp-container{border-radius:0;background-color:#ECECEC;border:solid 1px #f0c49B;padding:0}.sp-container,.sp-container button,.sp-container input,.sp-color,.sp-hue,.sp-clear{font:normal 12px "Lucida Grande","Lucida Sans Unicode","Lucida Sans",Geneva,Verdana,sans-serif;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.sp-top{margin-bottom:3px}.sp-color,.sp-hue,.sp-clear{border:solid 1px #666}.sp-input-container{float:right;width:100px;margin-bottom:4px}.sp-initial-disabled .sp-input-container{width:100%}.sp-input{font-size:12px!important;border:1px inset;padding:4px 5px;margin:0;width:100%;background:transparent;border-radius:3px;color:#222}.sp-input:focus{border:1px solid orange}.sp-input.sp-validation-error{border:1px solid red;background:#fdd}.sp-picker-container,.sp-palette-container{float:left;position:relative;padding:10px;padding-bottom:300px;margin-bottom:-290px}.sp-picker-container{width:172px;border-left:solid 1px #fff}.sp-palette-container{border-right:solid 1px #ccc}.sp-palette-only .sp-palette-container{border:0}.sp-palette .sp-thumb-el{display:block;position:relative;float:left;width:24px;height:15px;margin:3px;cursor:pointer;border:solid 2px transparent}.sp-palette .sp-thumb-el:hover,.sp-palette .sp-thumb-el.sp-thumb-active{border-color:orange}.sp-thumb-el{position:relative}.sp-initial{float:left;border:solid 1px #333}.sp-initial span{width:30px;height:25px;border:none;display:block;float:left;margin:0}.sp-initial .sp-clear-display{background-position:center}.sp-palette-button-container,.sp-button-container{float:right}.sp-replacer{margin:0;overflow:hidden;cursor:pointer;padding:4px;display:inline-block;*zoom:1;*display:inline;border:solid 1px #91765d;background:#eee;color:#333;vertical-align:middle}.sp-replacer:hover,.sp-replacer.sp-active{border-color:#F0C49B;color:#111}.sp-replacer.sp-disabled{cursor:default;border-color:silver;color:silver}.sp-dd{padding:2px 0;height:16px;line-height:16px;font-size:10px}.sp-preview{position:relative;width:25px;height:20px;border:solid 1px #222;margin-right:5px;z-index:0}.sp-palette{*width:220px;max-width:220px}.sp-palette .sp-thumb-el{width:16px;height:16px;margin:2px 1px;border:solid 1px #d0d0d0}.sp-container{padding-bottom:0}.sp-container button{background-color:#eee;background-image:-webkit-linear-gradient(top,#eeeeee,#cccccc);background-image:-moz-linear-gradient(top,#eeeeee,#cccccc);background-image:-ms-linear-gradient(top,#eeeeee,#cccccc);background-image:-o-linear-gradient(top,#eeeeee,#cccccc);background-image:linear-gradient(to bottom,#eeeeee,#cccccc);border:1px solid #ccc;border-bottom:1px solid #bbb;border-radius:3px;color:#333;font-size:14px;line-height:1;padding:5px 4px;text-align:center;text-shadow:0 1px 0 #eee;vertical-align:middle}.sp-container button:hover{background-color:#ddd;background-image:-webkit-linear-gradient(top,#dddddd,#bbbbbb);background-image:-moz-linear-gradient(top,#dddddd,#bbbbbb);background-image:-ms-linear-gradient(top,#dddddd,#bbbbbb);background-image:-o-linear-gradient(top,#dddddd,#bbbbbb);background-image:linear-gradient(to bottom,#dddddd,#bbbbbb);border:1px solid #bbb;border-bottom:1px solid #999;cursor:pointer;text-shadow:0 1px 0 #ddd}.sp-container button:active{border:1px solid #aaa;border-bottom:1px solid #888;-webkit-box-shadow:inset 0 0 5px 2px #aaaaaa,0 1px 0 0 #eee;-moz-box-shadow:inset 0 0 5px 2px #aaaaaa,0 1px 0 0 #eee;-ms-box-shadow:inset 0 0 5px 2px #aaaaaa,0 1px 0 0 #eee;-o-box-shadow:inset 0 0 5px 2px #aaaaaa,0 1px 0 0 #eee;box-shadow:inset 0 0 5px 2px #aaaaaa,0 1px 0 0 #eee}.sp-cancel{font-size:11px;color:#d93f3f!important;margin:0;padding:2px;margin-right:5px;vertical-align:middle;text-decoration:none}.sp-cancel:hover{color:#d93f3f!important;text-decoration:underline}.sp-palette span:hover,.sp-palette span.sp-thumb-active{border-color:#000}.sp-preview,.sp-alpha,.sp-thumb-el{position:relative;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.sp-preview-inner,.sp-alpha-inner,.sp-thumb-inner{display:block;position:absolute;top:0;left:0;bottom:0;right:0}.sp-palette .sp-thumb-inner{background-position:50% 50%;background-repeat:no-repeat}.sp-palette .sp-thumb-light.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIVJREFUeNpiYBhsgJFMffxAXABlN5JruT4Q3wfi/0DsT64h8UD8HmpIPCWG/KemIfOJCUB+Aoacx6EGBZyHBqI+WsDCwuQ9mhxeg2A210Ntfo8klk9sOMijaURm7yc1UP2RNCMbKE9ODK1HM6iegYLkfx8pligC9lCD7KmRof0ZhjQACDAAceovrtpVBRkAAAAASUVORK5CYII=)}.sp-palette .sp-thumb-dark.sp-thumb-active .sp-thumb-inner{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAMdJREFUOE+tkgsNwzAMRMugEAahEAahEAZhEAqlEAZhEAohEAYh81X2dIm8fKpEspLGvudPOsUYpxE2BIJCroJmEW9qJ+MKaBFhEMNabSy9oIcIPwrB+afvAUFoK4H0tMaQ3XtlrggDhOVVMuT4E5MMG0FBbCEYzjYT7OxLEvIHQLY2zWwQ3D+9luyOQTfKDiFD3iUIfPk8VqrKjgAiSfGFPecrg6HN6m/iBcwiDAo7WiBeawa+Kwh7tZoSCGLMqwlSAzVDhoK+6vH4G0P5wdkAAAAASUVORK5CYII=)}.sp-clear-display{background-repeat:no-repeat;background-position:center;background-image:url(data:image/gif;base64,R0lGODlhFAAUAPcAAAAAAJmZmZ2dnZ6enqKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq/Hx8fLy8vT09PX19ff39/j4+Pn5+fr6+vv7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAP8ALAAAAAAUABQAAAihAP9FoPCvoMGDBy08+EdhQAIJCCMybCDAAYUEARBAlFiQQoMABQhKUJBxY0SPICEYHBnggEmDKAuoPMjS5cGYMxHW3IiT478JJA8M/CjTZ0GgLRekNGpwAsYABHIypcAgQMsITDtWJYBR6NSqMico9cqR6tKfY7GeBCuVwlipDNmefAtTrkSzB1RaIAoXodsABiZAEFB06gIBWC1mLVgBa0AAOw==)} \ No newline at end of file diff --git a/css/style.css b/css/style.css index 4a2e05f..98fa650 100644 --- a/css/style.css +++ b/css/style.css @@ -349,7 +349,7 @@ body ul { /*Settings*/ -input[type='text'] { +input[type='text']:not(.appName) { width: 300px; height: 25px; -webkit-border-radius: 5px 5px 5px 5px; @@ -357,6 +357,23 @@ input[type='text'] { margin: 5px 5px 5px 10px; padding: 2px; } +input[type='text']:(.appName) { + width: 200px; + height: 25px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + margin: 5px 5px 5px 10px; + padding: 2px; +} + +input[type='color'] { + width: 20px; + height: 25px; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + margin: 5px 5px 5px 10px; + padding: 2px; +} input[type='text'], select { color: #000; diff --git a/index.php b/index.php index 0b97d49..78acb5a 100644 --- a/index.php +++ b/index.php @@ -23,6 +23,7 @@ + <?php echo getTitle(); ?> @@ -154,6 +155,7 @@ + $('#upgradeModal').modal();"; ?> ","
","
",""].join(''),markup=(function(){var gradientFix="";if(IE){for(var i=1;i<=6;i++){gradientFix+="
"}} +return["
","
","
","
","","
","
","
","
","
","
","
","
","
","
","
","
","
","
","
","
","
",gradientFix,"
","
","
","
","
","","
","
","
","","","
","
","
"].join("")})();function paletteTemplate(p,color,className,opts){var html=[];for(var i=0;i')}else{var cls='sp-clear-display';html.push($('
').append($('').attr('title',opts.noColorSelectedText)).html())}} +return "
"+html.join('')+"
"} +function hideAll(){for(var i=0;iMath.abs(dragY-oldDragY);shiftMovementDirection=furtherFromX?"x":"y"} +var setSaturation=!shiftMovementDirection||shiftMovementDirection==="x";var setValue=!shiftMovementDirection||shiftMovementDirection==="y";if(setSaturation){currentSaturation=parseFloat(dragX/dragWidth)} +if(setValue){currentValue=parseFloat((dragHeight-dragY)/dragHeight)} +isEmpty=!1;if(!opts.showAlpha){currentAlpha=1} +move()},dragStart,dragStop);if(!!initialColor){set(initialColor);updateUI();currentPreferredFormat=opts.preferredFormat||tinycolor(initialColor).format;addColorToSelectionPalette(initialColor)} +else{updateUI()} +if(flat){show()} +function paletteElementClick(e){if(e.data&&e.data.ignore){set($(e.target).closest(".sp-thumb-el").data("color"));move()} +else{set($(e.target).closest(".sp-thumb-el").data("color"));move();updateOriginalInput(!0);if(opts.hideAfterPaletteSelect){hide()}} +return!1} +var paletteEvent=IE?"mousedown.spectrum":"click.spectrum touchstart.spectrum";paletteContainer.delegate(".sp-thumb-el",paletteEvent,paletteElementClick);initialColorContainer.delegate(".sp-thumb-el:nth-child(1)",paletteEvent,{ignore:!0},paletteElementClick)} +function updateSelectionPaletteFromStorage(){if(localStorageKey&&window.localStorage){try{var oldPalette=window.localStorage[localStorageKey].split(",#");if(oldPalette.length>1){delete window.localStorage[localStorageKey];$.each(oldPalette,function(i,c){addColorToSelectionPalette(c)})}} +catch(e){} +try{selectionPalette=window.localStorage[localStorageKey].split(";")} +catch(e){}}} +function addColorToSelectionPalette(color){if(showSelectionPalette){var rgb=tinycolor(color).toRgbString();if(!paletteLookup[rgb]&&$.inArray(rgb,selectionPalette)===-1){selectionPalette.push(rgb);while(selectionPalette.length>maxSelectionSize){selectionPalette.shift()}} +if(localStorageKey&&window.localStorage){try{window.localStorage[localStorageKey]=selectionPalette.join(";")} +catch(e){}}}} +function getUniqueSelectionPalette(){var unique=[];if(opts.showPalette){for(var i=0;iviewWidth&&viewWidth>dpWidth)?Math.abs(offset.left+dpWidth-viewWidth):0);offset.top-=Math.min(offset.top,((offset.top+dpHeight>viewHeight&&viewHeight>dpHeight)?Math.abs(dpHeight+inputHeight-extraY):extraY));return offset} +function noop(){} +function stopPropagation(e){e.stopPropagation()} +function bind(func,obj){var slice=Array.prototype.slice;var args=slice.call(arguments,2);return function(){return func.apply(obj,args.concat(slice.call(arguments)))}} +function draggable(element,onmove,onstart,onstop){onmove=onmove||function(){};onstart=onstart||function(){};onstop=onstop||function(){};var doc=document;var dragging=!1;var offset={};var maxHeight=0;var maxWidth=0;var hasTouch=('ontouchstart' in window);var duringDragEvents={};duringDragEvents.selectstart=prevent;duringDragEvents.dragstart=prevent;duringDragEvents["touchmove mousemove"]=move;duringDragEvents["touchend mouseup"]=stop;function prevent(e){if(e.stopPropagation){e.stopPropagation()} +if(e.preventDefault){e.preventDefault()} +e.returnValue=!1} +function move(e){if(dragging){if(IE&&doc.documentMode<9&&!e.button){return stop()} +var t0=e.originalEvent&&e.originalEvent.touches&&e.originalEvent.touches[0];var pageX=t0&&t0.pageX||e.pageX;var pageY=t0&&t0.pageY||e.pageY;var dragX=Math.max(0,Math.min(pageX-offset.left,maxWidth));var dragY=Math.max(0,Math.min(pageY-offset.top,maxHeight));if(hasTouch){prevent(e)} +onmove.apply(element,[dragX,dragY,e])}} +function start(e){var rightclick=(e.which)?(e.which==3):(e.button==2);if(!rightclick&&!dragging){if(onstart.apply(element,arguments)!==!1){dragging=!0;maxHeight=$(element).height();maxWidth=$(element).width();offset=$(element).offset();$(doc).bind(duringDragEvents);$(doc.body).addClass("sp-dragging");move(e);prevent(e)}}} +function stop(){if(dragging){$(doc).unbind(duringDragEvents);$(doc.body).removeClass("sp-dragging");setTimeout(function(){onstop.apply(element,arguments)},0)} +dragging=!1} +$(element).bind("touchstart mousedown",start)} +function throttle(func,wait,debounce){var timeout;return function(){var context=this,args=arguments;var throttler=function(){timeout=null;func.apply(context,args)};if(debounce)clearTimeout(timeout);if(debounce||!timeout)timeout=setTimeout(throttler,wait)}} +function inputTypeColorSupport(){return $.fn.spectrum.inputTypeColorSupport()} +var dataID="spectrum.id";$.fn.spectrum=function(opts,extra){if(typeof opts=="string"){var returnValue=this;var args=Array.prototype.slice.call(arguments,1);this.each(function(){var spect=spectrums[$(this).data(dataID)];if(spect){var method=spect[opts];if(!method){throw new Error("Spectrum: no such method: '"+opts+"'")} +if(opts=="get"){returnValue=spect.get()} +else if(opts=="container"){returnValue=spect.container} +else if(opts=="option"){returnValue=spect.option.apply(spect,args)} +else if(opts=="destroy"){spect.destroy();$(this).removeData(dataID)} +else{method.apply(spect,args)}}});return returnValue} +return this.spectrum("destroy").each(function(){var options=$.extend({},opts,$(this).data());var spect=spectrum(this,options);$(this).data(dataID,spect.id)})};$.fn.spectrum.load=!0;$.fn.spectrum.loadOpts={};$.fn.spectrum.draggable=draggable;$.fn.spectrum.defaults=defaultOpts;$.fn.spectrum.inputTypeColorSupport=function inputTypeColorSupport(){if(typeof inputTypeColorSupport._cachedResult==="undefined"){var colorInput=$("")[0];inputTypeColorSupport._cachedResult=colorInput.type==="color"&&colorInput.value!==""} +return inputTypeColorSupport._cachedResult};$.spectrum={};$.spectrum.localization={};$.spectrum.palettes={};$.fn.spectrum.processNativeColorInputs=function(){var colorInputs=$("input[type=color]");if(colorInputs.length&&!inputTypeColorSupport()){colorInputs.spectrum({preferredFormat:"hex6"})}};(function(){var trimLeft=/^[\s,#]+/,trimRight=/\s+$/,tinyCounter=0,math=Math,mathRound=math.round,mathMin=math.min,mathMax=math.max,mathRandom=math.random;var tinycolor=function(color,opts){color=(color)?color:'';opts=opts||{};if(color instanceof tinycolor){return color} +if(!(this instanceof tinycolor)){return new tinycolor(color,opts)} +var rgb=inputToRGB(color);this._originalInput=color,this._r=rgb.r,this._g=rgb.g,this._b=rgb.b,this._a=rgb.a,this._roundA=mathRound(100*this._a)/100,this._format=opts.format||rgb.format;this._gradientType=opts.gradientType;if(this._r<1){this._r=mathRound(this._r)} +if(this._g<1){this._g=mathRound(this._g)} +if(this._b<1){this._b=mathRound(this._b)} +this._ok=rgb.ok;this._tc_id=tinyCounter++};tinycolor.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var rgb=this.toRgb();return(rgb.r*299+rgb.g*587+rgb.b*114)/1000},setAlpha:function(value){this._a=boundAlpha(value);this._roundA=mathRound(100*this._a)/100;return this},toHsv:function(){var hsv=rgbToHsv(this._r,this._g,this._b);return{h:hsv.h*360,s:hsv.s,v:hsv.v,a:this._a}},toHsvString:function(){var hsv=rgbToHsv(this._r,this._g,this._b);var h=mathRound(hsv.h*360),s=mathRound(hsv.s*100),v=mathRound(hsv.v*100);return(this._a==1)?"hsv("+h+", "+s+"%, "+v+"%)":"hsva("+h+", "+s+"%, "+v+"%, "+this._roundA+")"},toHsl:function(){var hsl=rgbToHsl(this._r,this._g,this._b);return{h:hsl.h*360,s:hsl.s,l:hsl.l,a:this._a}},toHslString:function(){var hsl=rgbToHsl(this._r,this._g,this._b);var h=mathRound(hsl.h*360),s=mathRound(hsl.s*100),l=mathRound(hsl.l*100);return(this._a==1)?"hsl("+h+", "+s+"%, "+l+"%)":"hsla("+h+", "+s+"%, "+l+"%, "+this._roundA+")"},toHex:function(allow3Char){return rgbToHex(this._r,this._g,this._b,allow3Char)},toHexString:function(allow3Char){return '#'+this.toHex(allow3Char)},toHex8:function(){return rgbaToHex(this._r,this._g,this._b,this._a)},toHex8String:function(){return '#'+this.toHex8()},toRgb:function(){return{r:mathRound(this._r),g:mathRound(this._g),b:mathRound(this._b),a:this._a}},toRgbString:function(){return(this._a==1)?"rgb("+mathRound(this._r)+", "+mathRound(this._g)+", "+mathRound(this._b)+")":"rgba("+mathRound(this._r)+", "+mathRound(this._g)+", "+mathRound(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:mathRound(bound01(this._r,255)*100)+"%",g:mathRound(bound01(this._g,255)*100)+"%",b:mathRound(bound01(this._b,255)*100)+"%",a:this._a}},toPercentageRgbString:function(){return(this._a==1)?"rgb("+mathRound(bound01(this._r,255)*100)+"%, "+mathRound(bound01(this._g,255)*100)+"%, "+mathRound(bound01(this._b,255)*100)+"%)":"rgba("+mathRound(bound01(this._r,255)*100)+"%, "+mathRound(bound01(this._g,255)*100)+"%, "+mathRound(bound01(this._b,255)*100)+"%, "+this._roundA+")"},toName:function(){if(this._a===0){return "transparent"} +if(this._a<1){return!1} +return hexNames[rgbToHex(this._r,this._g,this._b,!0)]||!1},toFilter:function(secondColor){var hex8String='#'+rgbaToHex(this._r,this._g,this._b,this._a);var secondHex8String=hex8String;var gradientType=this._gradientType?"GradientType = 1, ":"";if(secondColor){var s=tinycolor(secondColor);secondHex8String=s.toHex8String()} +return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")"},toString:function(format){var formatSet=!!format;format=format||this._format;var formattedString=!1;var hasAlpha=this._a<1&&this._a>=0;var needsAlphaFormat=!formatSet&&hasAlpha&&(format==="hex"||format==="hex6"||format==="hex3"||format==="name");if(needsAlphaFormat){if(format==="name"&&this._a===0){return this.toName()} +return this.toRgbString()} +if(format==="rgb"){formattedString=this.toRgbString()} +if(format==="prgb"){formattedString=this.toPercentageRgbString()} +if(format==="hex"||format==="hex6"){formattedString=this.toHexString()} +if(format==="hex3"){formattedString=this.toHexString(!0)} +if(format==="hex8"){formattedString=this.toHex8String()} +if(format==="name"){formattedString=this.toName()} +if(format==="hsl"){formattedString=this.toHslString()} +if(format==="hsv"){formattedString=this.toHsvString()} +return formattedString||this.toHexString()},_applyModification:function(fn,args){var color=fn.apply(null,[this].concat([].slice.call(args)));this._r=color._r;this._g=color._g;this._b=color._b;this.setAlpha(color._a);return this},lighten:function(){return this._applyModification(lighten,arguments)},brighten:function(){return this._applyModification(brighten,arguments)},darken:function(){return this._applyModification(darken,arguments)},desaturate:function(){return this._applyModification(desaturate,arguments)},saturate:function(){return this._applyModification(saturate,arguments)},greyscale:function(){return this._applyModification(greyscale,arguments)},spin:function(){return this._applyModification(spin,arguments)},_applyCombination:function(fn,args){return fn.apply(null,[this].concat([].slice.call(args)))},analogous:function(){return this._applyCombination(analogous,arguments)},complement:function(){return this._applyCombination(complement,arguments)},monochromatic:function(){return this._applyCombination(monochromatic,arguments)},splitcomplement:function(){return this._applyCombination(splitcomplement,arguments)},triad:function(){return this._applyCombination(triad,arguments)},tetrad:function(){return this._applyCombination(tetrad,arguments)}};tinycolor.fromRatio=function(color,opts){if(typeof color=="object"){var newColor={};for(var i in color){if(color.hasOwnProperty(i)){if(i==="a"){newColor[i]=color[i]} +else{newColor[i]=convertToPercentage(color[i])}}} +color=newColor} +return tinycolor(color,opts)};function inputToRGB(color){var rgb={r:0,g:0,b:0};var a=1;var ok=!1;var format=!1;if(typeof color=="string"){color=stringInputToObject(color)} +if(typeof color=="object"){if(color.hasOwnProperty("r")&&color.hasOwnProperty("g")&&color.hasOwnProperty("b")){rgb=rgbToRgb(color.r,color.g,color.b);ok=!0;format=String(color.r).substr(-1)==="%"?"prgb":"rgb"} +else if(color.hasOwnProperty("h")&&color.hasOwnProperty("s")&&color.hasOwnProperty("v")){color.s=convertToPercentage(color.s);color.v=convertToPercentage(color.v);rgb=hsvToRgb(color.h,color.s,color.v);ok=!0;format="hsv"} +else if(color.hasOwnProperty("h")&&color.hasOwnProperty("s")&&color.hasOwnProperty("l")){color.s=convertToPercentage(color.s);color.l=convertToPercentage(color.l);rgb=hslToRgb(color.h,color.s,color.l);ok=!0;format="hsl"} +if(color.hasOwnProperty("a")){a=color.a}} +a=boundAlpha(a);return{ok:ok,format:color.format||format,r:mathMin(255,mathMax(rgb.r,0)),g:mathMin(255,mathMax(rgb.g,0)),b:mathMin(255,mathMax(rgb.b,0)),a:a}} +function rgbToRgb(r,g,b){return{r:bound01(r,255)*255,g:bound01(g,255)*255,b:bound01(b,255)*255}} +function rgbToHsl(r,g,b){r=bound01(r,255);g=bound01(g,255);b=bound01(b,255);var max=mathMax(r,g,b),min=mathMin(r,g,b);var h,s,l=(max+min)/2;if(max==min){h=s=0} +else{var d=max-min;s=l>0.5?d/(2-max-min):d/(max+min);switch(max){case r:h=(g-b)/d+(g1)t-=1;if(t<1/6)return p+(q-p)*6*t;if(t<1/2)return q;if(t<2/3)return p+(q-p)*(2/3-t)*6;return p} +if(s===0){r=g=b=l} +else{var q=l<0.5?l*(1+s):l+s-l*s;var p=2*l-q;r=hue2rgb(p,q,h+1/3);g=hue2rgb(p,q,h);b=hue2rgb(p,q,h-1/3)} +return{r:r*255,g:g*255,b:b*255}} +function rgbToHsv(r,g,b){r=bound01(r,255);g=bound01(g,255);b=bound01(b,255);var max=mathMax(r,g,b),min=mathMin(r,g,b);var h,s,v=max;var d=max-min;s=max===0?0:d/max;if(max==min){h=0} +else{switch(max){case r:h=(g-b)/d+(g>1))+720)%360;--results;){hsl.h=(hsl.h+part)%360;ret.push(tinycolor(hsl))} +return ret} +function monochromatic(color,results){results=results||6;var hsv=tinycolor(color).toHsv();var h=hsv.h,s=hsv.s,v=hsv.v;var ret=[];var modification=1/results;while(results--){ret.push(tinycolor({h:h,s:s,v:v}));v=(v+modification)%1} +return ret} +tinycolor.mix=function(color1,color2,amount){amount=(amount===0)?0:(amount||50);var rgb1=tinycolor(color1).toRgb();var rgb2=tinycolor(color2).toRgb();var p=amount/100;var w=p*2-1;var a=rgb2.a-rgb1.a;var w1;if(w*a==-1){w1=w}else{w1=(w+a)/(1+w*a)} +w1=(w1+1)/2;var w2=1-w1;var rgba={r:rgb2.r*w1+rgb1.r*w2,g:rgb2.g*w1+rgb1.g*w2,b:rgb2.b*w1+rgb1.b*w2,a:rgb2.a*p+rgb1.a*(1-p)};return tinycolor(rgba)};tinycolor.readability=function(color1,color2){var c1=tinycolor(color1);var c2=tinycolor(color2);var rgb1=c1.toRgb();var rgb2=c2.toRgb();var brightnessA=c1.getBrightness();var brightnessB=c2.getBrightness();var colorDiff=(Math.max(rgb1.r,rgb2.r)-Math.min(rgb1.r,rgb2.r)+Math.max(rgb1.g,rgb2.g)-Math.min(rgb1.g,rgb2.g)+Math.max(rgb1.b,rgb2.b)-Math.min(rgb1.b,rgb2.b));return{brightness:Math.abs(brightnessA-brightnessB),color:colorDiff}};tinycolor.isReadable=function(color1,color2){var readability=tinycolor.readability(color1,color2);return readability.brightness>125&&readability.color>500};tinycolor.mostReadable=function(baseColor,colorList){var bestColor=null;var bestScore=0;var bestIsReadable=!1;for(var i=0;i125&&readability.color>500;var score=3*(readability.brightness/125)+(readability.color/500);if((readable&&!bestIsReadable)||(readable&&bestIsReadable&&score>bestScore)||((!readable)&&(!bestIsReadable)&&score>bestScore)){bestIsReadable=readable;bestScore=score;bestColor=tinycolor(colorList[i])}} +return bestColor};var names=tinycolor.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"};var hexNames=tinycolor.hexNames=flip(names);function flip(o){var flipped={};for(var i in o){if(o.hasOwnProperty(i)){flipped[o[i]]=i}} +return flipped} +function boundAlpha(a){a=parseFloat(a);if(isNaN(a)||a<0||a>1){a=1} +return a} +function bound01(n,max){if(isOnePointZero(n)){n="100%"} +var processPercent=isPercentage(n);n=mathMin(max,mathMax(0,parseFloat(n)));if(processPercent){n=parseInt(n*max,10)/100} +if((math.abs(n-max)<0.000001)){return 1} +return(n%max)/parseFloat(max)} +function clamp01(val){return mathMin(1,mathMax(0,val))} +function parseIntFromHex(val){return parseInt(val,16)} +function isOnePointZero(n){return typeof n=="string"&&n.indexOf('.')!=-1&&parseFloat(n)===1} +function isPercentage(n){return typeof n==="string"&&n.indexOf('%')!=-1} +function pad2(c){return c.length==1?'0'+c:''+c} +function convertToPercentage(n){if(n<=1){n=(n*100)+"%"} +return n} +function convertDecimalToHex(d){return Math.round(parseFloat(d)*255).toString(16)} +function convertHexToDecimal(h){return(parseIntFromHex(h)/255)} +var matchers=(function(){var CSS_INTEGER="[-\\+]?\\d+%?";var CSS_NUMBER="[-\\+]?\\d*\\.\\d+%?";var CSS_UNIT="(?:"+CSS_NUMBER+")|(?:"+CSS_INTEGER+")";var PERMISSIVE_MATCH3="[\\s|\\(]+("+CSS_UNIT+")[,|\\s]+("+CSS_UNIT+")[,|\\s]+("+CSS_UNIT+")\\s*\\)?";var PERMISSIVE_MATCH4="[\\s|\\(]+("+CSS_UNIT+")[,|\\s]+("+CSS_UNIT+")[,|\\s]+("+CSS_UNIT+")[,|\\s]+("+CSS_UNIT+")\\s*\\)?";return{rgb:new RegExp("rgb"+PERMISSIVE_MATCH3),rgba:new RegExp("rgba"+PERMISSIVE_MATCH4),hsl:new RegExp("hsl"+PERMISSIVE_MATCH3),hsla:new RegExp("hsla"+PERMISSIVE_MATCH4),hsv:new RegExp("hsv"+PERMISSIVE_MATCH3),hsva:new RegExp("hsva"+PERMISSIVE_MATCH4),hex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex8:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}})();function stringInputToObject(color){color=color.replace(trimLeft,'').replace(trimRight,'').toLowerCase();var named=!1;if(names[color]){color=names[color];named=!0} +else if(color=='transparent'){return{r:0,g:0,b:0,a:0,format:"name"}} +var match;if((match=matchers.rgb.exec(color))){return{r:match[1],g:match[2],b:match[3]}} +if((match=matchers.rgba.exec(color))){return{r:match[1],g:match[2],b:match[3],a:match[4]}} +if((match=matchers.hsl.exec(color))){return{h:match[1],s:match[2],l:match[3]}} +if((match=matchers.hsla.exec(color))){return{h:match[1],s:match[2],l:match[3],a:match[4]}} +if((match=matchers.hsv.exec(color))){return{h:match[1],s:match[2],v:match[3]}} +if((match=matchers.hsva.exec(color))){return{h:match[1],s:match[2],v:match[3],a:match[4]}} +if((match=matchers.hex8.exec(color))){return{a:convertHexToDecimal(match[1]),r:parseIntFromHex(match[2]),g:parseIntFromHex(match[3]),b:parseIntFromHex(match[4]),format:named?"name":"hex8"}} +if((match=matchers.hex6.exec(color))){return{r:parseIntFromHex(match[1]),g:parseIntFromHex(match[2]),b:parseIntFromHex(match[3]),format:named?"name":"hex"}} +if((match=matchers.hex3.exec(color))){return{r:parseIntFromHex(match[1]+''+match[1]),g:parseIntFromHex(match[2]+''+match[2]),b:parseIntFromHex(match[3]+''+match[3]),format:named?"name":"hex"}} +return!1} +window.tinycolor=tinycolor})();$(function(){if($.fn.spectrum.load){$.fn.spectrum.processNativeColorInputs()}})}) \ No newline at end of file diff --git a/muximux.php b/muximux.php index 1f5cea6..03a5190 100644 --- a/muximux.php +++ b/muximux.php @@ -138,6 +138,8 @@ function parse_ini() $pageOutput .= "
"; else if ($key == "name") { $pageOutput .= "
"; + } else if ($key == "color") { + $pageOutput .= "

"; } else if ($key == "icon") { $pageOutput .= "
"; } elseif ($key == "default") { @@ -153,7 +155,7 @@ function parse_ini() else $pageOutput .= ">
"; } else if ($key == "landingpage") { - $pageOutput .= "
Landing page: +
\n
"; @@ -200,9 +202,9 @@ function menuItems() if (!empty($section["enabled"]) && !($section["enabled"] == "false") && ($section["enabled"] == "true") && (!isset($section["dd"]) || $section["dd"] == "false")) { if (!empty($section["default"]) && !($section["default"] == "false") && ($section["default"] == "true")) { - $standardmenu .= "
  • " . $section["name"] . "
  • \n"; + $standardmenu .= "
  • " . $section["name"] . "
  • \n"; } else { - $standardmenu .= "
  • " . $section["name"] . "
  • \n"; + $standardmenu .= "
  • " . $section["name"] . "
  • \n"; } } if (isset($section["dd"]) && ($section["dd"] == "true") && !empty($section["enabled"]) && !($section["enabled"] == "false") && ($section["enabled"] == "true") && $section['name'] == "Settings") { diff --git a/settings.ini.php-example b/settings.ini.php-example index 49438b6..b28870f 100644 --- a/settings.ini.php-example +++ b/settings.ini.php-example @@ -13,10 +13,21 @@ landingpage = "false" icon = "fa fa-cog" dd = "true" +[Diskstation] +name = "Diskstation" +url = "http://localhost:5000" +icon = "fa-hdd-o" +color="#3d6fae" +enabled = "true" +default = "true" +landingpage = "false" +dd = "false" + [RuTorrent] name = "RuTorrent" url = "https://github.com/Novik/ruTorrent" icon = "fa-globe" +color="#1a1bfe" enabled = "true" default = "false" landingpage = "false" @@ -26,6 +37,7 @@ dd = "true" name = "NZBGet" url = "https://nzbget.net/" icon = "fa-download" +color="#3f8927" enabled = "true" default = "false" landingpage = "false" @@ -44,6 +56,7 @@ dd = "true" name = "Pydio" url = "https://pydio.com/" icon = "fa-cloud" +color = "#FF796B" enabled = "true" default = "false" landingpage = "false" @@ -53,6 +66,7 @@ dd = "true" name = "Sonarr" url = "https://sonarr.tv/" icon = "fa-calendar" +color = "#35c5f4" enabled = "true" default = "true" landingpage = "false" @@ -62,6 +76,7 @@ dd = "false" name = "SickBeard" url = "http://sickbeard.com/" icon = "fa-calendar" +color = "#b6f000" enabled = "true" default = "false" landingpage = "false" @@ -71,6 +86,7 @@ dd = "false" name = "CouchPotato" url = "https://couchpota.to/" icon = "fa-film" +color = "#f85c22" enabled = "true" default = "false" landingpage = "false" @@ -80,6 +96,7 @@ dd = "false" name = "Headphones" url = "https://github.com/rembo10/headphones" icon = "fa-headphones" +color = "#444444" enabled = "true" default = "false" landingpage = "false" @@ -89,6 +106,7 @@ dd = "false" name = "PlexRequests" url = "https://github.com/lokenx/plexrequests-meteor" icon = "fa-bullhorn" +color = "#df691a" enabled = "true" default = "false" landingpage = "false" @@ -98,6 +116,7 @@ dd = "false" name = "PlexPy" url = "https://github.com/drzoidberg33/plexpy" icon = "fa-list" +color = "#ba8e36" enabled = "true" default = "false" landingpage = "false" @@ -107,6 +126,7 @@ dd = "false" name = "Glances" url = "https://github.com/nicolargo/glances" icon = "fa-eye" +color = "#59D16C" enabled = "true" default = "false" landingpage = "false" @@ -116,6 +136,7 @@ dd = "false" name = "NZB Hydra" url = "https://github.com/theotherp/nzbhydra" icon = "fa-search" +color = "#108f34" enabled = "true" default = "false" landingpage = "false" @@ -125,6 +146,7 @@ dd = "false" name = "Plex" url = "https://www.plex.tv/" icon = "fa-play-circle" +color = "#f9be03" enabled = "true" default = "false" landingpage = "false" @@ -134,6 +156,7 @@ dd = "false" name = "Deluge" url = "http://deluge-torrent.org/" icon = "fa-tint" +color = "#D1DAE5" enabled = "true" default = "false" landingpage = "false" From 5947538b85bbf70b57d8ae9d88ed273ef87c32fb Mon Sep 17 00:00:00 2001 From: d8ahazard Date: Fri, 25 Nov 2016 10:27:33 -0600 Subject: [PATCH 002/170] Close dropdown menu on item selection. Fixes mescon/Muximux#29 Replace CSS hover method with javascript method to detect click on menu button. --- css/style.css | 7 ++++++- js/main.js | 11 +++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/css/style.css b/css/style.css index 98fa650..912496c 100644 --- a/css/style.css +++ b/css/style.css @@ -225,7 +225,7 @@ Main components .main-nav > li:hover { color: #f1f3f2; - background-color: rgba(233, 230, 202, 0.3); + } .main-nav > li { @@ -306,6 +306,11 @@ Main components display: block; } +*/ +.drop-nav:hide-nav { + display: none; +} + .drop-nav > li:hover, .drop-nav > li:hover a { color: #f1f3f2; background-color: rgba(233, 230, 202, 0.3); diff --git a/js/main.js b/js/main.js index d8658a8..8e13988 100644 --- a/js/main.js +++ b/js/main.js @@ -71,6 +71,17 @@ jQuery(document).ready(function ($) { $('.drop-nav').on('mouseout', function () { $('.main-nav a span:first').removeClass('dd-active'); }); + + $('li.dd').on('click', function () { + console.log("Nav: Click"); + if ($('.drop-nav').hasClass('.open')) { + $('.drop-nav').css('display','none'); + $('.drop-nav').removeClass('.open'); + } else { + $('.drop-nav').css('display','block'); + $('.drop-nav').addClass('.open'); + } + }); // This fetches the broweser-appropriate box-shadow value so we can set it From 5d11075e511d2cb17ffebf63e1d830fdcf5b48a1 Mon Sep 17 00:00:00 2001 From: d8ahazard Date: Fri, 25 Nov 2016 11:59:59 -0600 Subject: [PATCH 003/170] Fix mobile menu (for real) Initial commit only worked on mobile emulator, not actual mobile device. This is tested and working on Chrome/android as well as mobile emulator on desktop. --- css/style.css | 8 ++++++-- js/main.js | 25 +++++++++++++------------ 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/css/style.css b/css/style.css index 912496c..9c8513b 100644 --- a/css/style.css +++ b/css/style.css @@ -302,15 +302,19 @@ Main components border-bottom: 1px solid rgba(255, 255, 255, .2); } -.dd:hover > .drop-nav { +.dd:hover > .drop-nav:not .hide-nav { display: block; } */ -.drop-nav:hide-nav { +.hide-nav { display: none; } +.show-nav { + display: block; +} + .drop-nav > li:hover, .drop-nav > li:hover a { color: #f1f3f2; background-color: rgba(233, 230, 202, 0.3); diff --git a/js/main.js b/js/main.js index 8e13988..1d799bf 100644 --- a/js/main.js +++ b/js/main.js @@ -12,9 +12,10 @@ jQuery(document).ready(function ($) { // Set default title to the selected item on load var activeTitle = $('li .selected').attr("data-title"); setTitle(activeTitle); - //get appropriate CSS3 box-shadow property - var boxshadowprop=getsupportedprop(['boxShadow', 'MozBoxShadow', 'WebkitBoxShadow']) - + //get appropriate CSS3 box-shadow property + var boxshadowprop=getsupportedprop(['boxShadow', 'MozBoxShadow', 'WebkitBoxShadow']) + //Hide the nav to start + $('.drop-nav').toggleClass('hide-nav'); tabs.each(function () { var tab = $(this), tabItems = tab.find('ul.cd-tabs-navigation, .main-nav'), @@ -73,14 +74,7 @@ jQuery(document).ready(function ($) { }); $('li.dd').on('click', function () { - console.log("Nav: Click"); - if ($('.drop-nav').hasClass('.open')) { - $('.drop-nav').css('display','none'); - $('.drop-nav').removeClass('.open'); - } else { - $('.drop-nav').css('display','block'); - $('.drop-nav').addClass('.open'); - } + toggleClasses(); }); // This fetches the broweser-appropriate box-shadow value so we can set it @@ -175,4 +169,11 @@ function muximuxMobileResize() { $(".drop-nav").children('.cd-tab').appendTo('.cd-tabs-navigation nav'); $('.drop-nav').css('max-height', ''); } -} \ No newline at end of file +} + +// Simple method to toggle show/hide classes in navigation + +function toggleClasses() { + $('.drop-nav').toggleClass('hide-nav'); + $('.drop-nav').toggleClass('show-nav'); +} From 3f2cb5fb09a47c895e87b7b80303f4bac6ad8311 Mon Sep 17 00:00:00 2001 From: d8ahazard Date: Fri, 25 Nov 2016 12:09:50 -0600 Subject: [PATCH 004/170] Add flag for mobile detection. Will be used to enable a mobile override menu item. --- js/main.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/js/main.js b/js/main.js index 1d799bf..b483dd2 100644 --- a/js/main.js +++ b/js/main.js @@ -1,3 +1,4 @@ +var isMobile; jQuery(document).ready(function ($) { // Custom function to do case-insensitive selector matching $.extend($.expr[":"], { @@ -160,12 +161,12 @@ $( window ).resize(muximuxMobileResize); function muximuxMobileResize() { if($( window ).width() < 800) { - // isMobile = true; + isMobile = true; $('.cd-tabs-navigation nav').children().appendTo(".drop-nav"); var menuHeight = $( window ).height() * .80; $('.drop-nav').css('max-height', menuHeight+'px'); } else { - // isMobile = false; + isMobile = false; $(".drop-nav").children('.cd-tab').appendTo('.cd-tabs-navigation nav'); $('.drop-nav').css('max-height', ''); } From b90187031b0284e1437522dcc93c65e898a1dd3c Mon Sep 17 00:00:00 2001 From: d8ahazard Date: Fri, 25 Nov 2016 16:29:36 -0600 Subject: [PATCH 005/170] More work on Menu, Tab colors Resolve other strange behavior with new menu toggles. Set "tab color" to apply to text in mobile menu, show highlight in destop menu. Adjust scaling method to handle color switch on re-scale. Adjust layout of settings menu to better display color picker, create room for additional WIP settings. Adjust scaling of settings menu to handle mobile view, render more uniformly, and minimize unused space. --- css/style.css | 17 ++++------- js/main.js | 81 ++++++++++++++++++++++++++++++++++----------------- muximux.php | 14 ++++----- 3 files changed, 68 insertions(+), 44 deletions(-) diff --git a/css/style.css b/css/style.css index 9c8513b..816c214 100644 --- a/css/style.css +++ b/css/style.css @@ -358,16 +358,9 @@ body ul { /*Settings*/ -input[type='text']:not(.appName) { - width: 300px; - height: 25px; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - margin: 5px 5px 5px 10px; - padding: 2px; -} -input[type='text']:(.appName) { - width: 200px; +input[type='text'] { + max-width: 300px; + width: 90%; height: 25px; -webkit-border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px; @@ -430,7 +423,8 @@ input[type='button']:hover { } .modal-dialog { - width: 80%; + width: 90%; + max-width: 550px; } .modal-body { @@ -462,6 +456,7 @@ input[type='button']:hover { font-size: 16px; font-size: 1.6rem; border: 1px solid #FFF; + max-width: 500px; width: 90%; padding: 10px; margin-left: auto; diff --git a/js/main.js b/js/main.js index b483dd2..d21d9b0 100644 --- a/js/main.js +++ b/js/main.js @@ -1,4 +1,5 @@ var isMobile; +var color; jQuery(document).ready(function ($) { // Custom function to do case-insensitive selector matching $.extend($.expr[":"], { @@ -12,6 +13,7 @@ jQuery(document).ready(function ($) { // Set default title to the selected item on load var activeTitle = $('li .selected').attr("data-title"); + muximuxMobileResize(); setTitle(activeTitle); //get appropriate CSS3 box-shadow property var boxshadowprop=getsupportedprop(['boxShadow', 'MozBoxShadow', 'WebkitBoxShadow']) @@ -24,10 +26,19 @@ jQuery(document).ready(function ($) { tabNavigation = tab.find('nav'); tabItems.on('click', 'a:not(#reload, #hamburger)', function (event) { + + // Set up menu for desktip view + + if (!isMobile) { + $('.drop-nav').addClass('hide-nav'); + $('.drop-nav').removeClass('show-nav'); + $('.main-nav a span:first').removeClass('dd-active'); + } + resizeIframe(); // Call resizeIframe when document is ready event.preventDefault(); var selectedItem = $(this); - var color = selectedItem.attr("data-color"); + color = selectedItem.attr("data-color"); if (!selectedItem.hasClass('selected')) { var selectedTab = selectedItem.data('content'), selectedContent = tabContentWrapper.find('li[data-content="' + selectedTab + '"]'), @@ -41,20 +52,23 @@ jQuery(document).ready(function ($) { if (sifsrc === undefined || sifsrc === "") { selectedContent.children('iframe').attr('src', selectedContent.children('iframe').data('src')); } - $(".selected").css("Box-Shadow",""); - tabItems.find('a.selected').removeClass('selected'); - selectedItem.addClass('selected'); - - // Change window title after class "selected" has been added to item - var activeTitle = selectedItem.attr("data-title"); - setTitle(activeTitle); - - selectedContent.addClass('selected').siblings('li').removeClass('selected'); - // animate tabContentWrapper height when content changes - $(".selected").css("Box-Shadow","inset 0 5px 0 " + color + ""); - tabContentWrapper.animate({ - 'height': selectedContentHeight - }, 200); + + // Fix issue with color not resetting on settings close + if (!(selectedItem.attr("data-title") == "Settings")) { + clearColors(); + tabItems.find('a.selected').removeClass('selected'); + selectedItem.addClass('selected'); + setSelectedColor(); + // Change window title after class "selected" has been added to item + var activeTitle = selectedItem.attr("data-title"); + setTitle(activeTitle); + + selectedContent.addClass('selected').siblings('li').removeClass('selected'); + // animate tabContentWrapper height when content changes + tabContentWrapper.animate({ + 'height': selectedContentHeight + }, 200); + } } }); @@ -64,15 +78,7 @@ jQuery(document).ready(function ($) { checkScrolling($(this)); }); }); - - // Keep hamburger-menu white when hovering items UNDER the hamburger menu. - $('.drop-nav').on('mouseover', function () { - $('.main-nav a span:first').addClass('dd-active'); - }); - - $('.drop-nav').on('mouseout', function () { - $('.main-nav a span:first').removeClass('dd-active'); - }); + $('li.dd').on('click', function () { toggleClasses(); @@ -124,8 +130,7 @@ jQuery(document).ready(function ($) { jQuery.fn.reverse = [].reverse; // Move items to the dropdown on mobile devices - muximuxMobileResize(); - + settingsEventHandlers(); scaleFrames(); resizeIframe(); // Call resizeIframe when document is ready @@ -170,6 +175,8 @@ function muximuxMobileResize() { $(".drop-nav").children('.cd-tab').appendTo('.cd-tabs-navigation nav'); $('.drop-nav').css('max-height', ''); } + clearColors(); + setSelectedColor(); } // Simple method to toggle show/hide classes in navigation @@ -177,4 +184,26 @@ function muximuxMobileResize() { function toggleClasses() { $('.drop-nav').toggleClass('hide-nav'); $('.drop-nav').toggleClass('show-nav'); + $('.main-nav a span:first').toggleClass('dd-active'); +} +// Clear color values from tabs + +function clearColors() { + + $(".selected").children("span").css("color",""); + $(".selected").css("color",""); + $(".selected").css("Box-Shadow",""); + +} +// Add relevant color value to tabs + +function setSelectedColor() { + + color = $('li .selected').attr("data-color"); + if (isMobile) { + $(".selected").children("span").css("color","" + color + ""); + $(".selected").css("color","" + color + ""); + } else { + $(".selected").css("Box-Shadow","inset 0 5px 0 " + color + ""); + } } diff --git a/muximux.php b/muximux.php index 03a5190..efe91be 100644 --- a/muximux.php +++ b/muximux.php @@ -114,8 +114,8 @@ function parse_ini() $pageOutput = "
    "; $pageOutput .= "

    General

    "; - $pageOutput .= ""; - $pageOutput .= "
    Branch tracking:"; + $pageOutput .= "
    get('general', 'enabledropdown') == true) $pageOutput .= "checked>
    $showUpdates


    "; else @@ -135,15 +135,15 @@ function parse_ini() $pageOutput .= "
    "; foreach ($name as $key => $val) { if ($key == "url") - $pageOutput .= "
    "; + $pageOutput .= "
    "; else if ($key == "name") { - $pageOutput .= "
    "; + $pageOutput .= "
    "; } else if ($key == "color") { - $pageOutput .= "

    "; + $pageOutput .= "
    "; } else if ($key == "icon") { - $pageOutput .= "
    "; + $pageOutput .= "
    "; } elseif ($key == "default") { - $pageOutput .= "
    Default: Date: Fri, 25 Nov 2016 16:31:43 -0600 Subject: [PATCH 006/170] Adjust colors to better match iFrame contents. I noticed the main bar has a bluish tint to it, this seems to clash somewhat with most other web-apps (Couchpotato, Plex, Sonarr, PlexPy, etc.). Adjusting to a "not-bluish" tint seems to make the bar fit more with rendered content. Also, change iFrame default background color to black - looks better in the short time between frame loads. --- css/style.css | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/css/style.css b/css/style.css index 816c214..7e37086 100644 --- a/css/style.css +++ b/css/style.css @@ -40,7 +40,7 @@ p { iframe { width: 100%; height: 926px; - background-color: #fff; + background-color: #000; border: 0; padding: 0; margin: 0; @@ -127,7 +127,7 @@ Main components -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-weight: 700; - color: #747b8b; + color: #818181; padding-top: 32px; } @@ -141,7 +141,7 @@ Main components } .cd-tabs-navigation a.selected:not(#reload) { - background-color: #41434f !important; /* Selected tab colour */ + background-color: #3f3f3f !important; /* Selected tab colour */ color: #f1f3f2; /* Selected text colour */ } @@ -149,7 +149,7 @@ Main components .cd-tabs-navigation { /* tabbed on top of devices */ width: 100%; - background-color: #343843; /* Main nav colour */ + background-color: #222222; /* Main nav colour */ box-shadow: inset 0 -2px 3px rgba(203, 196, 130, 0.06); } @@ -213,7 +213,7 @@ Main components } .main-nav, .drop-nav { - background: #343843; + background: #222222; box-shadow: inset 0 -2px 3px rgba(203, 196, 130, 0.06); z-index: 100002; } @@ -255,7 +255,7 @@ Main components -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-weight: 700; - color: #747b8b; + color: #818181; } .dd { @@ -428,11 +428,11 @@ input[type='button']:hover { } .modal-body { - background: #343843; + background: #222222; } .modal-header, .modal-footer { - background: #41434f; + background: #3f3f3f; } .upgradeBody { @@ -525,7 +525,7 @@ input[type='button']:hover { } #updateContainer { - background-color: #343843; + background-color: #222222; color: #f1f3f2; display: none; font-size: 14px; @@ -569,4 +569,4 @@ input[type='button']:hover { form input { background-color: #fff; color: #000; -} \ No newline at end of file +} From bc8c4c6c9dc78a0d4f6288aeaa93f05efe00d701 Mon Sep 17 00:00:00 2001 From: d8ahazard Date: Fri, 25 Nov 2016 22:29:14 -0600 Subject: [PATCH 007/170] More menu refinements, color tuning, fix "no overflow" breaks settings access... Add logic for disabling overflow menu, and a settings button when disabled. Fixes mescon/muximux#37. Adjust menu element positions in code to float items to right - this will help with a "mobile override" option to come. Add missing code for "new item" in menu for color picker. Refine settings UI more for continuity between mobile and desktop views. --- css/style.css | 22 ++++++-------- js/functions.js | 9 +++--- js/main.js | 9 +++--- muximux.php | 81 +++++++++++++++++++++++++++++++++++++++---------- 4 files changed, 84 insertions(+), 37 deletions(-) diff --git a/css/style.css b/css/style.css index 7e37086..93fcce3 100644 --- a/css/style.css +++ b/css/style.css @@ -112,30 +112,26 @@ Main components float: left; } -.cd-tabs-navigation li:last-child { - float: right; - right: 0px; -} - -.cd-tabs-navigation a, #reload { +.cd-tabs-navigation a, #reload, #settings { position: relative; display: block; - height: 160px; - width: 30px; + height: 35px; + width: 35px; + padding-top: 10px; text-align: center; font-size: 1.6rem; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-weight: 700; color: #818181; - padding-top: 32px; + } #reload, .cd-tabs-navigation li { cursor: pointer; } -.no-touch .cd-tabs-navigation a:hover, #reload:hover { +.no-touch .cd-tabs-navigation a:hover, #reload:hover, #settings:hover { color: #f1f3f2; /* Hover text colour */ background-color: rgba(233, 230, 202, 0.3); } @@ -153,7 +149,7 @@ Main components box-shadow: inset 0 -2px 3px rgba(203, 196, 130, 0.06); } - .cd-tabs-navigation a, #reload { + .cd-tabs-navigation a:not(#reload) { height: 40px; line-height: 40px; width: 100%; @@ -424,7 +420,9 @@ input[type='button']:hover { .modal-dialog { width: 90%; - max-width: 550px; + margin-left: auto; + margin-right: auto; + max-width: 550px; } .modal-body { diff --git a/js/functions.js b/js/functions.js index 7a7049d..acf5734 100644 --- a/js/functions.js +++ b/js/functions.js @@ -134,11 +134,12 @@ function settingsEventHandlers() { var rand = Math.floor((Math.random() * 999999) + 1); $('#sortable').append( '
    ' + - '
    ' + - '
    ' + - '
    ' + + '

    ' + + '

    ' + + '

    ' + + '
    ' + '
    ' + - '
    ' + + '

    ' + '
    ' + '
    ' + '
    '); diff --git a/js/main.js b/js/main.js index d21d9b0..fe8b26d 100644 --- a/js/main.js +++ b/js/main.js @@ -32,7 +32,7 @@ jQuery(document).ready(function ($) { if (!isMobile) { $('.drop-nav').addClass('hide-nav'); $('.drop-nav').removeClass('show-nav'); - $('.main-nav a span:first').removeClass('dd-active'); + $('.main-nav #hamburger span:first').removeClass('dd-active'); } resizeIframe(); // Call resizeIframe when document is ready @@ -68,7 +68,6 @@ jQuery(document).ready(function ($) { tabContentWrapper.animate({ 'height': selectedContentHeight }, 200); - } } }); @@ -124,8 +123,8 @@ jQuery(document).ready(function ($) { scaleFrames(); // Scale frames when window is resized. }); - $('.main-nav').hover(function () { - dropDownFixPosition($('.main-nav'), $('.drop-nav')); + $('.dd').hover(function () { + dropDownFixPosition($('.dd'), $('.drop-nav')); }); jQuery.fn.reverse = [].reverse; @@ -184,7 +183,7 @@ function muximuxMobileResize() { function toggleClasses() { $('.drop-nav').toggleClass('hide-nav'); $('.drop-nav').toggleClass('show-nav'); - $('.main-nav a span:first').toggleClass('dd-active'); + $('.main-nav #hamburger span:first').toggleClass('dd-active'); } // Clear color values from tabs diff --git a/muximux.php b/muximux.php index efe91be..56d3a86 100644 --- a/muximux.php +++ b/muximux.php @@ -200,34 +200,83 @@ function menuItems() } } - if (!empty($section["enabled"]) && !($section["enabled"] == "false") && ($section["enabled"] == "true") && (!isset($section["dd"]) || $section["dd"] == "false")) { + if (!empty($section["enabled"]) && !($section["enabled"] == "false") && ($section["enabled"] == "true") && ((!isset($section["dd"]) || $section["dd"] == "false") || ($enabledropdown != "true"))) { if (!empty($section["default"]) && !($section["default"] == "false") && ($section["default"] == "true")) { - $standardmenu .= "
  • " . $section["name"] . "
  • \n"; + $standardmenu .= " +
  • + + " . $section["name"] . " + +
  • "; } else { - $standardmenu .= "
  • " . $section["name"] . "
  • \n"; + $standardmenu .= " +
  • + + " . $section["name"] . " + +
  • "; } } if (isset($section["dd"]) && ($section["dd"] == "true") && !empty($section["enabled"]) && !($section["enabled"] == "false") && ($section["enabled"] == "true") && $section['name'] == "Settings") { - $dropdownmenu .= "
  • " . $section["name"] . "
  • \n"; - } else if (isset($section["dd"]) && ($section["dd"] == "true") && !empty($section["enabled"]) && !($section["enabled"] == "false") && ($section["enabled"] == "true")) { - $dropdownmenu .= "
  • " . $section["name"] . "
  • \n"; + $dropdownmenu .= " +
  • + + " . $section["name"] . " + +
  • "; + } else if (($enabledropdown == "true") && isset($section["dd"]) && ($section["dd"] == "true") && !empty($section["enabled"]) && !($section["enabled"] == "false") && ($section["enabled"] == "true")) { + $dropdownmenu .= " +
  • + + " . $section["name"] . " + +
  • "; } else { $dropdownmenu .= ""; } } if ($enabledropdown == "true") { - $item = "
      -
    • - -
        \n" . $dropdownmenu . - "
    \n\n\n
    "; + $item = " +
      +
    • + + + +
    • +
    • + + + +
        " . + $dropdownmenu ." +
      +
    • +
    \n\n\n +
      +
    + "; } else { - $item = ""; + $item = " + +
      +
    + "; } return $item; } From ff60b3218891f31f048a9abf9b7767dc7b530d51 Mon Sep 17 00:00:00 2001 From: d8ahazard Date: Fri, 25 Nov 2016 23:21:06 -0600 Subject: [PATCH 008/170] Fix issue with dashes in tab names. Fixes mescon/Muximux#36 Replace all usages of a " - " or "-" or '-' in code with a less common string like "_-_" fixes parsing issues. --- muximux.php | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/muximux.php b/muximux.php index 56d3a86..0eba6da 100644 --- a/muximux.php +++ b/muximux.php @@ -58,7 +58,7 @@ function write_ini() $config = new Config_Lite(CONFIG); foreach ($_POST as $parameter => $value) { - $splitParameter = explode('-', $parameter); + $splitParameter = explode('_-_', $parameter); if ($value == "on") $value = "true"; $config->set($splitParameter[0], $splitParameter[1], $value); @@ -108,26 +108,26 @@ function parse_ini() } else { $develop = ""; } if ($config->get('general', 'updatepopup', 'false') == "true") { - $showUpdates = "
    "; - } else { $showUpdates = "
    "; } + $showUpdates = "
    "; + } else { $showUpdates = "
    "; } $pageOutput = ""; - $pageOutput .= "

    General

    "; - $pageOutput .= "
    "; - $pageOutput .= "
    get('general', 'title', 'Muximux - Application Management Console') . "'>"; + $pageOutput .= "
    "; + $pageOutput .= "
    get('general', 'enabledropdown') == true) $pageOutput .= "checked>
    $showUpdates


    "; else $pageOutput .= ">
    $showUpdates

    "; - $pageOutput .= "" . - "" . - "" . - "" . - "" . - "" . - ""; + $pageOutput .= "" . + "" . + "" . + "" . + "" . + "" . + ""; $pageOutput .= "
    "; foreach ($config as $section => $name) { @@ -135,33 +135,33 @@ function parse_ini() $pageOutput .= "
    "; foreach ($name as $key => $val) { if ($key == "url") - $pageOutput .= "
    "; + $pageOutput .= "
    "; else if ($key == "name") { - $pageOutput .= "
    "; + $pageOutput .= "
    "; } else if ($key == "color") { - $pageOutput .= "
    "; + $pageOutput .= "
    "; } else if ($key == "icon") { - $pageOutput .= "
    "; + $pageOutput .= "
    "; } elseif ($key == "default") { - $pageOutput .= "
    Default:Enabled: Enabled: Landing page: Landing page: Put in dropdown: Put in dropdown: - "; $pageOutput .= $scaleRange ."
    \n
    "; } @@ -455,4 +455,4 @@ function exec_enabled() if(empty($_GET)) { createSecret(); -} +} \ No newline at end of file From 39fc152a6cbc9563f1ac13e86e7a12f296a8b6ac Mon Sep 17 00:00:00 2001 From: d8ahazard Date: Fri, 25 Nov 2016 23:21:33 -0600 Subject: [PATCH 009/170] Lost a bracket... --- js/main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/main.js b/js/main.js index fe8b26d..caa7a35 100644 --- a/js/main.js +++ b/js/main.js @@ -68,6 +68,7 @@ jQuery(document).ready(function ($) { tabContentWrapper.animate({ 'height': selectedContentHeight }, 200); + } } }); @@ -110,8 +111,7 @@ jQuery(document).ready(function ($) { setTitle(activeTitle); }); - - + $(window).on('resize', function () { tabs.each(function () { var tab = $(this); From f00c2bb4fca39f9f50a0ba0bef7602793f4b4a3b Mon Sep 17 00:00:00 2001 From: d8ahazard Date: Sat, 26 Nov 2016 01:09:58 -0600 Subject: [PATCH 010/170] Show selected zoom percentage in settings. Either I broke this, or I never noticed it wasn't working before. It works now. --- muximux.php | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/muximux.php b/muximux.php index 0eba6da..ec3ccec 100644 --- a/muximux.php +++ b/muximux.php @@ -166,13 +166,19 @@ function parse_ini() $pageOutput .= " checked>
    "; else $pageOutput .= ">
    "; - } + } else if ($key == "scale") { + $scaleRange2 = "0"; + $scaleRange2 = buildScale($val); + $pageOutput .= "
    + + +
    "; + + } + } - $pageOutput .= " -
    -
    \n"; + $pageOutput .= ""; + } } $pageOutput .= " @@ -184,6 +190,26 @@ function parse_ini() return $pageOutput; } +// Build a custom scale using our set value, show it as selected +function buildScale($selectValue) +{ + $f=10; + $scaleRange = ""; + while($f<251) { + $pra = $f / 100; + if ($pra == $selectValue) { + + $scaleRange .= "\n"; + $f++; + } else { + + $scaleRange .= "\n"; + $f++; + } + } + return $scaleRange; + +} function menuItems() { From c0d64d13bd91d210a69db892b84fbc8b42f39dee Mon Sep 17 00:00:00 2001 From: d8ahazard Date: Sat, 26 Nov 2016 11:40:12 -0600 Subject: [PATCH 011/170] Add Mobile Override Button Fixes mescon/Muximux#68 Add a settings item for a "Mobile override button". When enabled, and when Muximux is rendering in Mobile mode, the button will be displayed next to the refresh button. When pressed, the button toggles between rendering for desktop and mobile mode, causing app tiles to be displayed in the top bar. --- css/style.css | 13 ++++++++++-- js/main.js | 46 +++++++++++++++++++++++++++++++--------- muximux.php | 40 +++++++++++++++++++++++++++------- settings.ini.php-example | 1 + 4 files changed, 80 insertions(+), 20 deletions(-) diff --git a/css/style.css b/css/style.css index 93fcce3..c326bca 100644 --- a/css/style.css +++ b/css/style.css @@ -112,7 +112,7 @@ Main components float: left; } -.cd-tabs-navigation a, #reload, #settings { +.cd-tabs-navigation a, #reload, #settings, #override { position: relative; display: block; height: 35px; @@ -131,7 +131,7 @@ Main components cursor: pointer; } -.no-touch .cd-tabs-navigation a:hover, #reload:hover, #settings:hover { +.cd-tabs-navigation a:hover, #reload:hover, #settings:hover { color: #f1f3f2; /* Hover text colour */ background-color: rgba(233, 230, 202, 0.3); } @@ -277,6 +277,15 @@ Main components color: #f1f3f2; } +.or-active { + background-color: rgba(233, 230, 202, 0.3); +} + +.or-active > span { + color: #ffffff; /* Hover text colour */ + +} + .drop-nav { position: absolute; display: none; diff --git a/js/main.js b/js/main.js index caa7a35..8b9c392 100644 --- a/js/main.js +++ b/js/main.js @@ -1,5 +1,4 @@ -var isMobile; -var color; +var isMobile, overrideMobile, color; jQuery(document).ready(function ($) { // Custom function to do case-insensitive selector matching $.extend($.expr[":"], { @@ -14,6 +13,12 @@ jQuery(document).ready(function ($) { // Set default title to the selected item on load var activeTitle = $('li .selected').attr("data-title"); muximuxMobileResize(); + if (isMobile) { + $('#override').css('display','block'); + } else { + $('#override').css('display','none'); + } + overrideMobile=false; setTitle(activeTitle); //get appropriate CSS3 box-shadow property var boxshadowprop=getsupportedprop(['boxShadow', 'MozBoxShadow', 'WebkitBoxShadow']) @@ -25,7 +30,7 @@ jQuery(document).ready(function ($) { tabContentWrapper = tab.children('ul.cd-tabs-content'), tabNavigation = tab.find('nav'); - tabItems.on('click', 'a:not(#reload, #hamburger)', function (event) { + tabItems.on('click', 'a:not(#reload, #hamburger, #override)', function (event) { // Set up menu for desktip view @@ -68,8 +73,8 @@ jQuery(document).ready(function ($) { tabContentWrapper.animate({ 'height': selectedContentHeight }, 200); - } - } + } + } }); // hide the .cd-tabs::after element when tabbed navigation has scrolled to the end (mobile version) @@ -100,6 +105,18 @@ jQuery(document).ready(function ($) { selectedFrame.attr('src', selectedFrame.attr('src')); }); +// Detect click on override button, fire resize + + $('#override').on('click', function () { + overrideMobile = !overrideMobile; + muximuxMobileResize(); + if (overrideMobile && isMobile) { + $('#override').addClass('or-active'); + } else { + $('#override').removeClass('or-active'); + } + }); + // When settings modal is open, set title to "Settings" $('#settingsModal').on('show.bs.modal', function () { setTitle("Settings"); @@ -166,14 +183,23 @@ $( window ).resize(muximuxMobileResize); function muximuxMobileResize() { if($( window ).width() < 800) { isMobile = true; - $('.cd-tabs-navigation nav').children().appendTo(".drop-nav"); - var menuHeight = $( window ).height() * .80; - $('.drop-nav').css('max-height', menuHeight+'px'); } else { isMobile = false; - $(".drop-nav").children('.cd-tab').appendTo('.cd-tabs-navigation nav'); - $('.drop-nav').css('max-height', ''); } + if (isMobile) { + $('#override').css('display','block'); + } else { + $('#override').css('display','none'); + } + if (isMobile && !overrideMobile) { + console.log("Resize called, rendering mobile."); + $('.cd-tabs-navigation nav').children().appendTo(".drop-nav"); + var menuHeight = $( window ).height() * .80; + $('.drop-nav').css('max-height', menuHeight+'px'); + } else { + $(".drop-nav").children('.cd-tab').appendTo('.cd-tabs-navigation nav'); + $('.drop-nav').css('max-height', ''); + } clearColors(); setSelectedColor(); } diff --git a/muximux.php b/muximux.php index ec3ccec..1931f4a 100644 --- a/muximux.php +++ b/muximux.php @@ -108,9 +108,14 @@ function parse_ini() } else { $develop = ""; } if ($config->get('general', 'updatepopup', 'false') == "true") { - $showUpdates = "
    "; - } else { $showUpdates = "
    "; } + $showUpdates = "

    "; + } else { $showUpdates = "

    "; } + if ($config->get('general', 'mobileoverride', 'false') == "true") { + $showUpdates .= "
    "; + } else { $showUpdates .= "
    "; } + + $pageOutput = ""; $pageOutput .= "

    General

    "; @@ -224,6 +229,11 @@ function menuItems() } else { $enabledropdown = "false"; } + if (isset($section["mobileoverride"]) && ($section["mobileoverride"] == "true")) { + $mobileoverride = "true"; + } else { + $mobileoverride = "false"; + } } if (!empty($section["enabled"]) && !($section["enabled"] == "false") && ($section["enabled"] == "true") && ((!isset($section["dd"]) || $section["dd"] == "false") || ($enabledropdown != "true"))) { @@ -261,16 +271,29 @@ function menuItems() $dropdownmenu .= ""; } } + + if ($mobileoverride == "true") { + $moButton = " + + "; + } else { + $moButton = ""; + } if ($enabledropdown == "true") { $item = " -
      -
    • +
        " . + $moButton ." + -
      • +
    + "; } return $item; } From 4a410df133ea44710ab66c94821f129735367f58 Mon Sep 17 00:00:00 2001 From: d8ahazard Date: Sun, 27 Nov 2016 12:32:37 -0600 Subject: [PATCH 015/170] Partial fix for Async, PHP Cleanup Fixes async errors caused by internal methods, some still occur as a result of using outdated JQuery. Need to investigate the .form extension and see if we can do without it. Reformat PHP returns so that resulting source code is pretty. Makes dev-work much easier, can be minified for release builds if desired. --- index.php | 18 ++-- js/functions.js | 39 ++------- js/main.js | 10 +-- muximux.php | 178 +++++++++++++++++++++++++-------------- settings.ini.php-example | 2 + 5 files changed, 138 insertions(+), 109 deletions(-) diff --git a/index.php b/index.php index 78acb5a..2cbedb5 100644 --- a/index.php +++ b/index.php @@ -34,8 +34,8 @@ your browser to improve your experience.

    -
    - +
    +
      @@ -43,6 +43,7 @@
    +
    - -
    diff --git a/js/functions.js b/js/functions.js index 3ff5dc6..bfe3d26 100644 --- a/js/functions.js +++ b/js/functions.js @@ -177,9 +177,11 @@ function settingsEventHandlers() { }); $('#tabcolorCheckbox').click(function(event) { if ($(this).prop('checked')) { - $('.appsColor').removeClass('hidden'); + $('.appsColor').toggle('slide', {direction: 'left'}, 200); + $('.generalColor').toggle('slide', {direction: 'left'}, 200); } else { - $('.appsColor').addClass('hidden'); + $('.appsColor').toggle('slide', {direction: 'left'}, 200); + $('.generalColor').toggle('slide', {direction: 'left'}, 200); } }); @@ -453,14 +455,4 @@ function htmlDecode(value) { return $('
    ').html(value).text(); } -function rgb2hex(rgb) { - if ( rgb.search("rgb") == -1 ) { - return rgb; - } else { - rgb = rgb.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/); - function hex(x) { - return ("0" + parseInt(x).toString(16)).slice(-2); - } - return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]); - } -} + diff --git a/js/main.js b/js/main.js index 4ef65ea..3999a7e 100644 --- a/js/main.js +++ b/js/main.js @@ -9,12 +9,14 @@ jQuery(document).ready(function($) { branch = $("#branch-data").attr('data'); hasDrawer = ($('#drawer').attr('data') == 'true'); tabColor = ($("#tabcolor").attr('data') == 'true'); - themeColor = rgb2hex($('.colorgrab').css("color")); + themeColor = $('#themeColor-data').attr("data"); + authentication = $('#authentication-data').attr("data"); tabs = $('.cd-tabs'); activeTitle = $('li .selected').attr("data-title"); getSecret(); muximuxMobileResize(); $('#override').css('display', (isMobile ? 'block' : 'none')); + $('.inputdiv').css('display',(authentication ? 'block' : 'none')); overrideMobile = false; setTitle(activeTitle); //get appropriate CSS3 box-shadow property @@ -105,9 +107,9 @@ jQuery(document).ready(function($) { // this function will get executed every time the #home element is clicked (or tab-spacebar changed) if ($(this).is(":checked")) // "this" refers to the element that fired the event { - $('.userinput').removeClass('hidden'); + $('.inputdiv').slideDown('fast'); } else { - $('.userinput').addClass('hidden'); + $('.inputdiv').slideUp('fast'); } }); $("#logout").click(function() { @@ -168,9 +170,11 @@ jQuery(document).ready(function($) { menuItem.trigger("click"); } if ($('#tabcolorCheckbox').prop('checked')) { - $('.appsColor').removeClass('hidden'); + $('.appsColor').show(); + $('.generalColor').hide(); } else { - $('.appsColor').addClass('hidden'); + $('.appsColor').hide(); + $('.generalColor').show(); } diff --git a/muximux.php b/muximux.php index 0c8ec06..3d2950d 100644 --- a/muximux.php +++ b/muximux.php @@ -120,6 +120,23 @@ function parse_ini() fetchBranches(false); $branchArray = getBranches(); $branchList = ""; + if ($config->get('settings', 'sha', '0') == "0") { + $mySha = fetchSha(); + } else { + $mySha = $config->get('settings', 'sha', '0'); + } + $css = './css/theme/' . getTheme() . '.css'; + $tabColorEnabled = $config->getBool('general', 'tabcolor', false); + $enableDropDown = $config->getBool('general', 'enabledropdown', false); + $updatePopup = $config->getBool('general', 'updatepopup', false); + $mobileOverride = $config->getBool('general', 'mobileoverride', false); + $cssColor = ((parseCSS($css,'.colorgrab','color') != false) ? parseCSS($css,'.colorgrab','color') : '#FFFFFF'); + $themeColor = $config->get('general','color',$cssColor); + $autoHide = $config->getBool('general', 'autohide', false); + $userName = $config->get('general', 'userNameInput', 'admin'); + $passHash = $config->get('general', 'password', 'Muximux'); + $authentication = $config->getBool('general', 'authentication', false); + foreach ($branchArray as $branchName => $shaSum ) { $branchList .= " "; @@ -148,34 +165,40 @@ function parse_ini()
    - getBool('general', 'enabledropdown', false) ? 'checked' : '') ." +
    - getBool('general', 'updatepopup', false) ? 'checked' : '') ."> +
    - getBool('general', 'mobileoverride', false) ? 'checked' : '')."> +

    +
    + + +
    - - getBool('general', 'tabcolor', false) ? 'checked' : '')."> + +
    - getBool('general', 'autohide', false) ? 'checked' : '')."> +
    - getBool('general', 'authentication', false) ? 'checked' : '')."> -

    -
    - +

    -
    - +
    +
    + +

    +
    + +
    @@ -228,15 +251,16 @@ function parse_ini()
    -
    +
    +
    + + +
    +
    -
    - - -
    @@ -195,7 +195,7 @@ function parse_ini()
    -

    +
    @@ -479,13 +479,17 @@ function fetchBranches($skip) { $config = new Config_Lite(CONFIG); $last = $config->get('settings', 'last_check', "0"); if ((time() >= $last + 3600) || $skip) { // Check to make sure we haven't checked in an hour or so, to avoid making GitHub mad - $curl_handle=curl_init(); - curl_setopt($curl_handle, CURLOPT_URL,'https://api.github.com/repos/mescon/Muximux/branches'); - curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2); - curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Muximux'); - $json = curl_exec($curl_handle); - curl_close($curl_handle); + $url = 'https://api.github.com/repos/mescon/Muximux/branches'; + $options = array( + 'http'=>array( + 'method'=>"GET", + 'header'=>"Accept-language: en\r\n" . + "User-Agent: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:10\r\n" // i.e. An iPad + ) + ); + + $context = stream_context_create($options); + $json = file_get_contents($url,false,$context); if ($json == false) { $result = false; } else { @@ -525,6 +529,14 @@ function fetchBranches($skip) { return $result; } + +function console_log( $data ) { + $output = ""; + echo $output; +} + // We run this when parsing settings to make sure that we have a SHA saved just as // soon as we know we'll need it (on install or new settings). This is how we track whether or not // we need to update. @@ -742,10 +754,13 @@ function downloadUpdate($sha) { $zip = new ZipArchive; $res = $zip->open($zipFile); if ($res === TRUE) { - //$zip->extractTo('./stage'); - //$zip->close(); - //cpy("./stage/Muximux-".$sha, "./"); - //deleteDir("./stage"); + $extracted = $zip->extractTo('./.stage'); + $zip->close(); + cpy("./stage/Muximux-".$sha, "./"); + deleteDir("./stage"); + if ($extracted === TRUE) { + $gone = unlink($zipFile); + } $config = new Config_Lite(CONFIG); $config->set('settings','sha',$sha); try { @@ -759,11 +774,7 @@ function downloadUpdate($sha) { } return $result; } -function console_log( $data ){ - echo ''; -} + function cpy($source, $dest){ if(is_dir($source)) { $dir_handle=opendir($source); From deed9a764db2daa3b5b165f6c38346a9e32adf01 Mon Sep 17 00:00:00 2001 From: d8ahazard Date: Mon, 12 Dec 2016 16:33:25 -0600 Subject: [PATCH 073/170] Update Config_Lite extension Update extension to latest revision. --- vendor/pear-pear.php.net/Config_Lite/Config/Lite.php | 11 ++++------- .../Config_Lite/Config/Lite/Exception.php | 2 +- .../Config/Lite/Exception/InvalidArgument.php | 2 +- .../Config_Lite/Config/Lite/Exception/Runtime.php | 2 +- .../Config/Lite/Exception/UnexpectedValue.php | 2 +- 5 files changed, 8 insertions(+), 11 deletions(-) diff --git a/vendor/pear-pear.php.net/Config_Lite/Config/Lite.php b/vendor/pear-pear.php.net/Config_Lite/Config/Lite.php index 2a6cc49..a55ad73 100644 --- a/vendor/pear-pear.php.net/Config_Lite/Config/Lite.php +++ b/vendor/pear-pear.php.net/Config_Lite/Config/Lite.php @@ -380,7 +380,7 @@ public function getString($sec, $key, $default = null) * if the option is not set, this is practical when dealing with * editable files, to keep an application stable with default settings. * - * @param string $sec Section|null - null to get global option + * @param string $sec Section|null - null,$key to get global option * @param string $key Key * @param mixed $default return default value if is $key is not set * @@ -392,9 +392,9 @@ public function getString($sec, $key, $default = null) */ public function get($sec = null, $key = null, $default = null) { - // handle get without parameters, because we can + // handle get without parameters if ((null === $sec) && (null === $key) && (null === $default)) { - return $this; // arrayaccess or $this->sections; + return $this->sections; } if ((null !== $sec) && array_key_exists($sec, $this->sections) && isset($this->sections[$sec][$key]) @@ -409,10 +409,7 @@ public function get($sec = null, $key = null, $default = null) if ((null === $key) && array_key_exists($sec, $this->sections)) { return $this->sections[$sec]; } - // all sections - if (null === $sec && array_key_exists($sec, $this->sections)) { - return $this->sections; - } + if (null !== $default) { return $default; } diff --git a/vendor/pear-pear.php.net/Config_Lite/Config/Lite/Exception.php b/vendor/pear-pear.php.net/Config_Lite/Config/Lite/Exception.php index 68f06c0..c842694 100644 --- a/vendor/pear-pear.php.net/Config_Lite/Config/Lite/Exception.php +++ b/vendor/pear-pear.php.net/Config_Lite/Config/Lite/Exception.php @@ -25,7 +25,7 @@ * @author Patrick C. Engel * @copyright 2010-2011 * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version Release: 0.2.4 + * @version Release: 0.2.5 * @link https://github.com/pce/config_lite */ diff --git a/vendor/pear-pear.php.net/Config_Lite/Config/Lite/Exception/InvalidArgument.php b/vendor/pear-pear.php.net/Config_Lite/Config/Lite/Exception/InvalidArgument.php index b48da83..a10f4dd 100644 --- a/vendor/pear-pear.php.net/Config_Lite/Config/Lite/Exception/InvalidArgument.php +++ b/vendor/pear-pear.php.net/Config_Lite/Config/Lite/Exception/InvalidArgument.php @@ -25,7 +25,7 @@ * @author Patrick C. Engel * @copyright 2010-2011 * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version Release: 0.2.4 + * @version Release: 0.2.5 * @link https://github.com/pce/config_lite */ class Config_Lite_Exception_InvalidArgument diff --git a/vendor/pear-pear.php.net/Config_Lite/Config/Lite/Exception/Runtime.php b/vendor/pear-pear.php.net/Config_Lite/Config/Lite/Exception/Runtime.php index 323356e..3d1f33c 100644 --- a/vendor/pear-pear.php.net/Config_Lite/Config/Lite/Exception/Runtime.php +++ b/vendor/pear-pear.php.net/Config_Lite/Config/Lite/Exception/Runtime.php @@ -25,7 +25,7 @@ * @author Patrick C. Engel * @copyright 2010-2011 * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version Release: 0.2.4 + * @version Release: 0.2.5 * @link https://github.com/pce/config_lite */ diff --git a/vendor/pear-pear.php.net/Config_Lite/Config/Lite/Exception/UnexpectedValue.php b/vendor/pear-pear.php.net/Config_Lite/Config/Lite/Exception/UnexpectedValue.php index 3f60ac1..df72385 100644 --- a/vendor/pear-pear.php.net/Config_Lite/Config/Lite/Exception/UnexpectedValue.php +++ b/vendor/pear-pear.php.net/Config_Lite/Config/Lite/Exception/UnexpectedValue.php @@ -25,7 +25,7 @@ * @author Patrick C. Engel * @copyright 2010-2011 * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 - * @version Release: 0.2.4 + * @version Release: 0.2.5 * @link https://github.com/pce/config_lite */ From 541b995f5a3a05fa7637a98d53af4dc8235eeccd Mon Sep 17 00:00:00 2001 From: d8ahazard Date: Mon, 12 Dec 2016 21:28:39 -0600 Subject: [PATCH 074/170] Fix extraction path Fix the path where we copy our update from. --- muximux.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/muximux.php b/muximux.php index d6d7abb..ffa8ed8 100644 --- a/muximux.php +++ b/muximux.php @@ -756,8 +756,8 @@ function downloadUpdate($sha) { if ($res === TRUE) { $extracted = $zip->extractTo('./.stage'); $zip->close(); - cpy("./stage/Muximux-".$sha, "./"); - deleteDir("./stage"); + cpy("./.stage/Muximux-".$sha, "./"); + deleteDir("./.stage"); if ($extracted === TRUE) { $gone = unlink($zipFile); } From 3671c27cd12cb48bc736711e6ab2b69127f0daf6 Mon Sep 17 00:00:00 2001 From: d8ahazard Date: Mon, 12 Dec 2016 22:31:25 -0600 Subject: [PATCH 075/170] Fix delete error Syntax... --- muximux.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/muximux.php b/muximux.php index ffa8ed8..c6a3bf7 100644 --- a/muximux.php +++ b/muximux.php @@ -805,7 +805,7 @@ function deleteDir($dirPath) { $files = glob($dirPath . '*', GLOB_MARK); foreach ($files as $file) { if (is_dir($file)) { - self::deleteDir($file); + $this->deleteDir($file); } else { unlink($file); } From 1218b3c7ca5ac4a4df7b0b257659120c73a995fc Mon Sep 17 00:00:00 2001 From: d8ahazard Date: Tue, 13 Dec 2016 07:34:47 -0600 Subject: [PATCH 076/170] Slight changes --- js/functions.js | 9 +++++---- js/main.js | 6 +++++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/js/functions.js b/js/functions.js index b75aeab..782e128 100644 --- a/js/functions.js +++ b/js/functions.js @@ -242,6 +242,7 @@ function viewChangelog() { }); $('#refreshUpdate').click(function(){ refreshBranches(); + updateBox(true); }); @@ -332,8 +333,8 @@ function setTitle(title) { $(document).attr("title", title + " - " + $('#maintitle').attr('data')); } // Idea and implementation graciously borrowed from PlexPy (https://github.com/drzoidberg33/plexpy) -function updateBox() { - if (!sessionStorage.getItem('JSONData')) { +function updateBox($force) { + if ((!sessionStorage.getItem('JSONData')) || ($force === true)) { updateJson(); } json = JSON.parse(sessionStorage.getItem('JSONData')); @@ -351,9 +352,9 @@ function updateBox() { if (difference > 0) { if (!getCookie('updateDismiss')) { - $('#updateContainer').html("" + + $('#updateContainer').html("" + "You are currently " + difference + " "+ ((difference > 1) ? 'commits' : 'commit')+" behind!
    " + - "See changelog or
    click here
    to install now.
    "); + "See changelog or
    click here
    to install now."); $('#updateContainer').fadeIn("slow"); $('#downloadModal').click(function(){ downloadUpdate(json[0].sha); diff --git a/js/main.js b/js/main.js index f7b2e1b..4b45de3 100644 --- a/js/main.js +++ b/js/main.js @@ -90,6 +90,10 @@ jQuery(document).ready(function($) { } } $('#reload').on('click', function() { + $('.fa-refresh').addClass('fa-spin'); + setTimeout(function() { + $('.fa-refresh').removeClass('fa-spin'); + }, 3900); var selectedFrame = $('.cd-tabs-content').find('.selected').children('iframe'); selectedFrame.attr('src', selectedFrame.attr('src')); }); @@ -186,7 +190,7 @@ jQuery(document).ready(function($) { window $(window).load(function() { if ($('#popupdate').attr('data') == 'true') { - var updateCheck = setInterval(updateBox(), 1000 * 60 * 10); + var updateCheck = setInterval(updateBox(false), 1000 * 60 * 10); } }); // Close modal on escape key From 51fb27fdee3d1d1ca36ade6ddc81fcefdd75375e Mon Sep 17 00:00:00 2001 From: d8ahazard Date: Tue, 13 Dec 2016 10:59:47 -0600 Subject: [PATCH 077/170] Hey, look, no more config_lite errors Fix some issues with config_lite extension throwing errors. Will need to submit a PR for this to main. --- .../Config_Lite/Config/Lite.php | 50 +++++++++++-------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/vendor/pear-pear.php.net/Config_Lite/Config/Lite.php b/vendor/pear-pear.php.net/Config_Lite/Config/Lite.php index a55ad73..e584e25 100644 --- a/vendor/pear-pear.php.net/Config_Lite/Config/Lite.php +++ b/vendor/pear-pear.php.net/Config_Lite/Config/Lite.php @@ -1,5 +1,8 @@ sections; } - if ((null !== $sec) && array_key_exists($sec, $this->sections) - && isset($this->sections[$sec][$key]) - ) { - return $this->sections[$sec][$key]; - } + if (is_array($this->sections)) { + if ((null !== $sec) && array_key_exists(strval($sec), $this->sections) + && isset($this->sections[$sec][$key]) + ) { + return $this->sections[$sec][$key]; + } + } // global value if ((null === $sec) && array_key_exists($key, $this->sections)) { return $this->sections[$key]; @@ -461,23 +466,24 @@ public function getBool($sec, $key, $default = null) return $this->_booleans[$value]; } } - } - if (array_key_exists($key, $this->sections[$sec])) { - if (empty($this->sections[$sec][$key])) { - return false; - } - $value = strtolower($this->sections[$sec][$key]); - if (!in_array($value, $this->_booleans) && (null === $default)) { - throw new Config_Lite_Exception_InvalidArgument( - sprintf( - 'Not a boolean: %s, and no default value given.', - $value - ) - ); - } else { - return $this->_booleans[$value]; - } - } + } else if (is_array($this->sections[strval($sec)])) { + if (array_key_exists($key, $this->sections[$sec])) { + if (empty($this->sections[$sec][$key])) { + return false; + } + $value = strtolower($this->sections[$sec][$key]); + if (!in_array($value, $this->_booleans) && (null === $default)) { + throw new Config_Lite_Exception_InvalidArgument( + sprintf( + 'Not a boolean: %s, and no default value given.', + $value + ) + ); + } else { + return $this->_booleans[$value]; + } + } + } if (null !== $default) { return $default; } From 84d66a48eb27537042ddefbc055a30ca9640a147 Mon Sep 17 00:00:00 2001 From: d8ahazard Date: Tue, 13 Dec 2016 11:50:50 -0600 Subject: [PATCH 078/170] Use a recursive delete function that works This one doesn't throw errors. --- muximux.php | 45 ++++++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/muximux.php b/muximux.php index c6a3bf7..b61528e 100644 --- a/muximux.php +++ b/muximux.php @@ -754,11 +754,12 @@ function downloadUpdate($sha) { $zip = new ZipArchive; $res = $zip->open($zipFile); if ($res === TRUE) { - $extracted = $zip->extractTo('./.stage'); + $result = $zip->extractTo('./.stage'); $zip->close(); - cpy("./.stage/Muximux-".$sha, "./"); - deleteDir("./.stage"); - if ($extracted === TRUE) { + + if ($result === TRUE) { + cpy("./.stage/Muximux-".$sha, "./"); + deleteContent("./.stage"); $gone = unlink($zipFile); } $config = new Config_Lite(CONFIG); @@ -770,7 +771,6 @@ function downloadUpdate($sha) { } rewrite_config_header(); } - $result = $res; } return $result; } @@ -795,23 +795,26 @@ function cpy($source, $dest){ copy($source, $dest); } } -function deleteDir($dirPath) { - if (! is_dir($dirPath)) { - throw new InvalidArgumentException("$dirPath must be a directory"); - } - if (substr($dirPath, strlen($dirPath) - 1, 1) != '/') { - $dirPath .= '/'; - } - $files = glob($dirPath . '*', GLOB_MARK); - foreach ($files as $file) { - if (is_dir($file)) { - $this->deleteDir($file); - } else { - unlink($file); - } - } - rmdir($dirPath); +function deleteContent($path){ + try{ + $iterator = new DirectoryIterator($path); + foreach ( $iterator as $fileinfo ) { + if($fileinfo->isDot())continue; + if($fileinfo->isDir()){ + if(deleteContent($fileinfo->getPathname())) + @rmdir($fileinfo->getPathname()); + } + if($fileinfo->isFile()){ + @unlink($fileinfo->getPathname()); + } + } + } catch ( Exception $e ){ + // write log + return false; + } + return true; } + function is_session_started() { if ( php_sapi_name() !== 'cli' ) { if ( version_compare(phpversion(), '5.4.0', '>=') ) { From 75b78b2e7b8690947353a5007a90e51c6f4cc98a Mon Sep 17 00:00:00 2001 From: d8ahazard Date: Tue, 13 Dec 2016 16:39:54 -0600 Subject: [PATCH 079/170] Add Logging Feature Because everybody is happier when they can see what a program is doing. --- css/style.css | 13 ++ css/theme/classic.css | 412 +++++++++++++++++++++--------------------- css/theme/modern.css | 408 +++++++++++++++++++++-------------------- index.php | 19 ++ js/functions.js | 12 ++ login.php | 118 ++++++------ muximux.php | 95 +++++++++- 7 files changed, 618 insertions(+), 459 deletions(-) diff --git a/css/style.css b/css/style.css index 3fd8722..5eb9eaa 100644 --- a/css/style.css +++ b/css/style.css @@ -399,6 +399,19 @@ input[type='button'] { font-size: 1.6rem; display: none; } +#logContainer { + width: 90%; + margin: auto; + padding: 10px 10px; + text-align: left; + font-size: 16px; + font-size: 1.6rem; + display: block; +} + +.logLine { + display: block; +} #changelog, #changelogContainer h3 { margin-left: auto; diff --git a/css/theme/classic.css b/css/theme/classic.css index 2968fcd..35af66f 100644 --- a/css/theme/classic.css +++ b/css/theme/classic.css @@ -1,202 +1,212 @@ - - -body { - background: #41434f; -} - -.logo { - color: #ffffff; -} - -.logo path { - fill: #31ac63; -} - -.login-block { - background: #36363b; - border-top: 5px solid #31ac63; -} - -.colorgrab { - color:#31ac63; -} - -.login-block h1 { - color: #41434f; -} - -.login-block input { - border: 1px solid #8A8A8A; -} - -.login-block input:active, .login-block input:focus { - border: 1px solid #31ac63; -} - -.login-block button { - background: #31ac63; - border: 1px solid #31ac63; - color: #fff; -} - -.login-block button:hover { - background: #31ac63; -} - - - -iframe { - background-color: #41434f; -} - -.modal-title { - color: #f1f3f2; -} - -.cd-tabs nav { - box-shadow: inset 0 -2px 3px rgba(203, 196, 130, 0.06); -} - -.cd-tabs-navigation a { - color: #747b8b; - -} - -.cd-tabs-navigation a:hover { - color: #f1f3f2; /* Hover text colour */ - background-color: rgba(233, 230, 202, 0.3); -} - -.cd-tabs-navigation a.selected { - background-color: #535358 !important; /* Selected tab colour */ - color: #f1f3f2; /* Selected text colour */ -} - -@media only screen and (min-width: 0px) { - .cd-tabs-navigation { - background-color: #343843; /* Main nav colour */ - box-shadow: inset 0 -2px 3px rgba(203, 196, 130, 0.06); - } - - - .cd-tabs-navigation a.selected { - box-shadow: inset 0 5px 0 #31ac63; /* Selected tab marker colour */ - } - -} - -.cd-tabs-content { - background: #36363b; /* Content background colour */ -} - -.cd-tabs-content li p { - color: #8493bf; -} - -.main-nav, .drop-nav { - background: #343843; - box-shadow: inset 0 -2px 3px rgba(203, 196, 130, 0.06); -} - - -.main-nav > li:hover { - color: #f1f3f2; - background-color: rgba(233, 230, 202, 0.3); -} - -.main-nav a { - color: #747b8b; -} - -.dd a:hover { - color: #f1f3f2; - background-color: rgba(233, 230, 202, 0.3); -} -.navbtn a:hover { - color: #f1f3f2; - background-color: rgba(233, 230, 202, 0.3); -} -.or-active { - background-color: rgba(233, 230, 202, 0.3); -} - -.or-active > span { - color: #ffffff; /* Hover text colour */ - -} - -.drop-nav { - -webkit-box-shadow: -9px 10px 13px -2px rgba(0, 0, 0, 0.3); - -moz-box-shadow: -9px 10px 13px -2px rgba(0, 0, 0, 0.3); - box-shadow: -9px 10px 13px -2px rgba(0, 0, 0, 0.3); -} - -.drop-nav li { - border-bottom: 1px solid rgba(255, 255, 255, .2); -} - -.drop-nav > li:hover, .drop-nav > li:hover a { - color: #f1f3f2; - background-color: rgba(233, 230, 202, 0.3); - -webkit-box-shadow: inset 0px 0px 13px 5px rgba(0, 0, 0, 0.3); - -moz-box-shadow: inset 0px 0px 13px 5px rgba(0, 0, 0, 0.3); - box-shadow: inset 0px 0px 13px 5px rgba(0, 0, 0, 0.3); -} - -input[type='text'], select { - color: #000; -} - -input[type="text"][disabled] { - color: #696969; -} - -input[disabled]:hover { - background-color: #8b0000; - color: #fff; -} - -input[type='button'] { - color: #FFF; - background: #8b0000; -} - -input[type='button']:hover { - background: #003147; -} - -.modal-body { - background: #343843; -} - -.modal-header, .modal-footer { - background: #41434f; -} - -.applicationContainer { - background: #f5f6f7; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - -webkit-box-shadow: 5px 5px 5px 1px #000; - box-shadow: 5px 5px 5px 1px #000; - color: #000; -} - -#updateContainer { - background-color: #343843; - color: #f1f3f2; -} - -.close { - color: #f1f3f2; -} - -.close:hover, -.close:focus { - color: #fff; -} - -form input { - background-color: #fff; - color: #000; + + +body { + background: #41434f; +} + +.logo { + color: #ffffff; +} + +.logo path { + fill: #31ac63; +} + +.login-block { + background: #36363b; + border-top: 5px solid #31ac63; +} + +.colorgrab { + color:#31ac63; +} + +.login-block h1 { + color: #41434f; +} + +.login-block input { + border: 1px solid #8A8A8A; +} + +.login-block input:active, .login-block input:focus { + border: 1px solid #31ac63; +} + +.login-block button { + background: #31ac63; + border: 1px solid #31ac63; + color: #fff; +} + +.login-block button:hover { + background: #31ac63; +} + +iframe { + background-color: #41434f; +} + +.modal-title { + color: #f1f3f2; +} + +.cd-tabs nav { + box-shadow: inset 0 -2px 3px rgba(203, 196, 130, 0.06); +} + +.cd-tabs-navigation a { + color: #747b8b; + +} + +.cd-tabs-navigation a:hover { + color: #f1f3f2; /* Hover text colour */ + background-color: rgba(233, 230, 202, 0.3); +} + +.cd-tabs-navigation a.selected { + background-color: #535358 !important; /* Selected tab colour */ + color: #f1f3f2; /* Selected text colour */ +} + +@media only screen and (min-width: 0px) { + .cd-tabs-navigation { + background-color: #343843; /* Main nav colour */ + box-shadow: inset 0 -2px 3px rgba(203, 196, 130, 0.06); + } + + + .cd-tabs-navigation a.selected { + box-shadow: inset 0 5px 0 #31ac63; /* Selected tab marker colour */ + } + +} + +.cd-tabs-content { + background: #36363b; /* Content background colour */ +} + +.cd-tabs-content li p { + color: #8493bf; +} + +.main-nav, .drop-nav { + background: #343843; + box-shadow: inset 0 -2px 3px rgba(203, 196, 130, 0.06); +} + + +.main-nav > li:hover { + color: #f1f3f2; + background-color: rgba(233, 230, 202, 0.3); +} + +.main-nav a { + color: #747b8b; +} + +.dd a:hover { + color: #f1f3f2; + background-color: rgba(233, 230, 202, 0.3); +} +.navbtn a:hover { + color: #f1f3f2; + background-color: rgba(233, 230, 202, 0.3); +} +.or-active { + background-color: rgba(233, 230, 202, 0.3); +} + +.or-active > span { + color: #ffffff; /* Hover text colour */ + +} + +.drop-nav { + -webkit-box-shadow: -9px 10px 13px -2px rgba(0, 0, 0, 0.3); + -moz-box-shadow: -9px 10px 13px -2px rgba(0, 0, 0, 0.3); + box-shadow: -9px 10px 13px -2px rgba(0, 0, 0, 0.3); +} + +.drop-nav li { + border-bottom: 1px solid rgba(255, 255, 255, .2); +} + +.drop-nav > li:hover, .drop-nav > li:hover a { + color: #f1f3f2; + background-color: rgba(233, 230, 202, 0.3); + -webkit-box-shadow: inset 0px 0px 13px 5px rgba(0, 0, 0, 0.3); + -moz-box-shadow: inset 0px 0px 13px 5px rgba(0, 0, 0, 0.3); + box-shadow: inset 0px 0px 13px 5px rgba(0, 0, 0, 0.3); +} + +input[type='text'], select { + color: #000; +} + +input[type="text"][disabled] { + color: #696969; +} + +input[disabled]:hover { + background-color: #8b0000; + color: #fff; +} + +input[type='button'] { + color: #FFF; + background: #8b0000; +} + +input[type='button']:hover { + background: #003147; +} + +.modal-body { + background: #343843; +} + +.modal-header, .modal-footer { + background: #41434f; +} + +.redLine { + color: #ff0000; +} + +.greenLine { + color: #00b300; +} + +.blackLine { + color: #000000; +} + +.applicationContainer { + background: #f5f6f7; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + -webkit-box-shadow: 5px 5px 5px 1px #000; + box-shadow: 5px 5px 5px 1px #000; + color: #000; +} + +#updateContainer { + background-color: #343843; + color: #f1f3f2; +} + +.close { + color: #f1f3f2; +} + +.close:hover, +.close:focus { + color: #fff; +} + +form input { + background-color: #fff; + color: #000; } \ No newline at end of file diff --git a/css/theme/modern.css b/css/theme/modern.css index 1b40b82..d057a0a 100644 --- a/css/theme/modern.css +++ b/css/theme/modern.css @@ -1,200 +1,210 @@ - - -body { - background: #222222; -} - -.logo { - color: #ffffff; -} - -.logo path { - fill: #ff4c4d; -} - -.login-block { - background: #3f3f3f; - border-top: 5px solid #ff4c4d; -} - -.colorgrab { - color:#ff4c4d; -} - -.login-block h1 { - color: #fff; -} - -.login-block input { - border: 1px solid #8A8A8A; -} - -.login-block input:active, .login-block input:focus { - border: 1px solid #ff656c; -} - -.login-block button { - background: #ff656c; - border: 1px solid #e15960; - color: #fff; -} - -.login-block button:hover { - background: #ff7b81; -} - -iframe { - background-color: #000; -} - -.modal-title { - color: #f1f3f2; -} - -.cd-tabs nav { - box-shadow: inset 0 -2px 3px rgba(203, 196, 130, 0.06); -} - -.cd-tabs-navigation a { - color: #818181; -} - -.cd-tabs-navigation a:hover { - color: #f1f3f2; /* Hover text colour */ - background-color: rgba(233, 230, 202, 0.3); -} - -.cd-tabs-navigation a.selected { - background-color: #3f3f3f !important; /* Selected tab colour */ - color: #f1f3f2; /* Selected text colour */ -} - -@media only screen and (min-width: 0px) { - .cd-tabs-navigation { - background-color: #222222; /* Main nav colour */ - box-shadow: inset 0 -2px 3px rgba(203, 196, 130, 0.06); - } - - - .cd-tabs-navigation a.selected { - box-shadow: inset 0 5px 0 #36363b; /* Selected tab marker colour */ - } - -} - -.cd-tabs-content { - background: #36363b; /* Content background colour */ -} - -.cd-tabs-content li p { - color: #8493bf; -} - -.main-nav, .drop-nav { - background: #222222; - box-shadow: inset 0 -2px 3px rgba(203, 196, 130, 0.06); -} - - -.main-nav > li:hover { - color: #f1f3f2; - background-color: rgba(233, 230, 202, 0.3); -} - - -.main-nav a { - color: #818181; -} - -.dd a:hover { - color: #f1f3f2; - background-color: rgba(233, 230, 202, 0.3); -} - -.navbtn a:hover { - color: #f1f3f2; - background-color: rgba(233, 230, 202, 0.3); -} -.or-active { - background-color: rgba(233, 230, 202, 0.3); -} - -.or-active > span { - color: #ffffff; /* Hover text colour */ -} - -.drop-nav { - -webkit-box-shadow: -9px 10px 13px -2px rgba(0, 0, 0, 0.3); - -moz-box-shadow: -9px 10px 13px -2px rgba(0, 0, 0, 0.3); - box-shadow: -9px 10px 13px -2px rgba(0, 0, 0, 0.3); -} - -.drop-nav li { - border-bottom: 1px solid rgba(255, 255, 255, .2); -} - -.drop-nav > li:hover, .drop-nav > li:hover a { - color: #f1f3f2; - background-color: rgba(233, 230, 202, 0.3); - -} - - - -input[type='text'], select { - color: #000; -} - -input[type="text"][disabled] { - color: #696969; -} - -input[disabled]:hover { - background-color: #8b0000; - color: #fff; -} - -input[type='button'] { - color: #FFF; - background: #8b0000; -} - -input[type='button']:hover { - background: #003147; -} - -.modal-body { - background: #222222; -} - -.modal-header, .modal-footer { - background: #3f3f3f; -} - -.applicationContainer { - background: #f5f6f7; - -webkit-border-radius: 5px 5px 5px 5px; - border-radius: 5px 5px 5px 5px; - -webkit-box-shadow: 5px 5px 5px 1px #000; - box-shadow: 5px 5px 5px 1px #000; - color: #000; -} - -#updateContainer { - background-color: #222222; - color: #f1f3f2; -} - -.close { - color: #f1f3f2; -} - -.close:hover, -.close:focus { - color: #fff; -} - -form input { - background-color: #fff; - color: #000; + + +body { + background: #222222; +} + +.logo { + color: #ffffff; +} + +.logo path { + fill: #ff4c4d; +} + +.login-block { + background: #3f3f3f; + border-top: 5px solid #ff4c4d; +} + +.colorgrab { + color:#ff4c4d; +} + +.login-block h1 { + color: #fff; +} + +.login-block input { + border: 1px solid #8A8A8A; +} + +.login-block input:active, .login-block input:focus { + border: 1px solid #ff656c; +} + +.login-block button { + background: #ff656c; + border: 1px solid #e15960; + color: #fff; +} + +.login-block button:hover { + background: #ff7b81; +} + +iframe { + background-color: #000; +} + +.modal-title { + color: #f1f3f2; +} + +.cd-tabs nav { + box-shadow: inset 0 -2px 3px rgba(203, 196, 130, 0.06); +} + +.cd-tabs-navigation a { + color: #818181; +} + +.cd-tabs-navigation a:hover { + color: #f1f3f2; /* Hover text colour */ + background-color: rgba(233, 230, 202, 0.3); +} + +.cd-tabs-navigation a.selected { + background-color: #3f3f3f !important; /* Selected tab colour */ + color: #f1f3f2; /* Selected text colour */ +} + +@media only screen and (min-width: 0px) { + .cd-tabs-navigation { + background-color: #222222; /* Main nav colour */ + box-shadow: inset 0 -2px 3px rgba(203, 196, 130, 0.06); + } + + + .cd-tabs-navigation a.selected { + box-shadow: inset 0 5px 0 #36363b; /* Selected tab marker colour */ + } + +} + +.cd-tabs-content { + background: #36363b; /* Content background colour */ +} + +.cd-tabs-content li p { + color: #8493bf; +} + +.main-nav, .drop-nav { + background: #222222; + box-shadow: inset 0 -2px 3px rgba(203, 196, 130, 0.06); +} + + +.main-nav > li:hover { + color: #f1f3f2; + background-color: rgba(233, 230, 202, 0.3); +} + + +.main-nav a { + color: #818181; +} + +.dd a:hover { + color: #f1f3f2; + background-color: rgba(233, 230, 202, 0.3); +} + +.navbtn a:hover { + color: #f1f3f2; + background-color: rgba(233, 230, 202, 0.3); +} +.or-active { + background-color: rgba(233, 230, 202, 0.3); +} + +.or-active > span { + color: #ffffff; /* Hover text colour */ +} + +.drop-nav { + -webkit-box-shadow: -9px 10px 13px -2px rgba(0, 0, 0, 0.3); + -moz-box-shadow: -9px 10px 13px -2px rgba(0, 0, 0, 0.3); + box-shadow: -9px 10px 13px -2px rgba(0, 0, 0, 0.3); +} + +.drop-nav li { + border-bottom: 1px solid rgba(255, 255, 255, .2); +} + +.drop-nav > li:hover, .drop-nav > li:hover a { + color: #f1f3f2; + background-color: rgba(233, 230, 202, 0.3); + +} + +input[type='text'], select { + color: #000; +} + +input[type="text"][disabled] { + color: #696969; +} + +input[disabled]:hover { + background-color: #8b0000; + color: #fff; +} + +input[type='button'] { + color: #FFF; + background: #8b0000; +} + +input[type='button']:hover { + background: #003147; +} + +.modal-body { + background: #222222; +} + +.modal-header, .modal-footer { + background: #3f3f3f; +} + +.redLine { + color: #ff0000; +} + +.greenLine { + color: #00b300; +} + +.blackLine { + color: #000000; +} + +.applicationContainer { + background: #f5f6f7; + -webkit-border-radius: 5px 5px 5px 5px; + border-radius: 5px 5px 5px 5px; + -webkit-box-shadow: 5px 5px 5px 1px #000; + box-shadow: 5px 5px 5px 1px #000; + color: #000; +} + +#updateContainer { + background-color: #222222; + color: #f1f3f2; +} + +.close { + color: #f1f3f2; +} + +.close:hover, +.close:focus { + color: #fff; +} + +form input { + background-color: #fff; + color: #000; } \ No newline at end of file diff --git a/index.php b/index.php index e774436..b5c7e37 100644 --- a/index.php +++ b/index.php @@ -167,6 +167,25 @@
    +
    diff --git a/js/functions.js b/js/functions.js index 782e128..a57b9a0 100644 --- a/js/functions.js +++ b/js/functions.js @@ -414,6 +414,18 @@ function downloadUpdate($sha) { } } +function write_log($text,$lvl) { + + $.ajax({ + async: true, + url: "muximux.php", + type: 'GET', + data: {action: "writeLog", secret: secret, msg: $text,lvl: $lvl}, + }); + +} + + function setStatus($message) { $('#updateContainer').hide(); $('#updateContainer').html("" + diff --git a/login.php b/login.php index d828d63..73e97ab 100644 --- a/login.php +++ b/login.php @@ -1,58 +1,62 @@ -get('general', 'password', '0'); -$title = $config->get('general', 'title', '0'); -$username = $config->get('general', 'userNameInput', '0'); -if(isset($_GET['logout'])) { - $_SESSION['username'] = ''; - if (!is_session_started()) session_start(); - session_destroy(); - header('Location: ' . $_SERVER['PHP_SELF']); -} -if(isset($_POST['username'])) { - if ($_POST['username'] == $username && password_verify($_POST['password'],$hash)) { - $_SESSION['username'] = $_POST['username']; - header('Location: ' . $_SERVER['PHP_SELF']); - exit(); - } -} -echo ' - - - - - - - - - - - - - - Login to '.getTitle().' - - - -
    - - -
    - -'; -exit; +get('general', 'password', '0'); +$title = $config->get('general', 'title', '0'); +$username = $config->get('general', 'userNameInput', '0'); +if(isset($_GET['logout'])) { + $_SESSION['username'] = ''; + write_log('Successfully logged out.'); + if (!is_session_started()) session_start(); + session_destroy(); + header('Location: ' . $_SERVER['PHP_SELF']); +} +if(isset($_POST['username'])) { + if ($_POST['username'] == $username && password_verify($_POST['password'],$hash)) { + $_SESSION['username'] = $_POST['username']; + header('Location: ' . $_SERVER['PHP_SELF']); + write_log('Successfully logged in.'); + exit(); + } else { + write_log('Error logging in.','E'); + } +} +echo ' + + + + + + + + + + + + + + Login to '.getTitle().' + + + +
    + + +
    + +'; +exit; ?> \ No newline at end of file diff --git a/muximux.php b/muximux.php index b61528e..c269762 100644 --- a/muximux.php +++ b/muximux.php @@ -11,12 +11,14 @@ copy('config.ini.php', 'backup.ini.php'); unlink('config.ini.php'); $upgrade = true; + write_log('Converting configuration file from previous Muximux installation.'); } else { $upgrade = false; } function openFile($file, $mode) { if ((file_exists($file) && (!is_writable(dirname($file)) || !is_writable($file))) || !is_writable(dirname($file))) { // If file exists, check both file and directory writeable, else check that the directory is writeable. printf('Either the file %s and/or it\'s parent directory is not writable by the PHP process. Check the permissions & ownership and try again.', $file); + write_log('Error writing to file ' . $file); if (PHP_SHLIB_SUFFIX === "so") { //Check for POSIX systems. printf("
    Current permission mode of %s: %d", $file, decoct(fileperms($file) & 0777)); printf("
    Current owner of %s: %s", $file, posix_getpwuid(fileowner($file))['name']); @@ -64,6 +66,7 @@ function write_ini() $value = "true"; if ($splitParameter[1] == "password") { if ($value != $oldHash) { + write_log('Successfully updated password.'); $value = password_hash($value, PASSWORD_BCRYPT); $terminate = true; } @@ -88,7 +91,8 @@ function write_ini() $config->save(); } catch (Config_Lite_Exception $e) { echo "\n" . 'Exception Message: ' . $e->getMessage(); - } + write_log('Error saving configuration.','E'); + } rewrite_config_header(); if ($terminate) { session_start(); @@ -366,7 +370,13 @@ function menuItems() { " . $section["name"] . " - "; + +
  • + + Log + +
  • + "; } else if ($enabledropdown && $dropdown && $enabled) { $dropdownmenu .= "
  • @@ -433,6 +443,11 @@ function menuItems() {
  • + "; - } else if ($enabledropdown && $dropdown && $enabled) { + } else if ($dropdown && $enabled) { $dropdownmenu .= "
  • @@ -614,7 +611,7 @@ function metaTags() { $branch = $config->get('general', 'branch', 'master'); $branchUrl = "https://api.github.com/repos/mescon/Muximux/commits?sha=" . $branch; $popupdate = var_export($config->getBool('general', 'updatepopup', true),true); - $enabledropdown = var_export($config->getBool('general', 'enabledropdown', true),true); + $enabledropdown = var_export($config->getBool('settings', 'enabledropdown', true),true); $maintitle = $config->get('general', 'title', 'Muximux'); $tabcolor = var_export($config->getBool('general', 'tabcolor', false),true); $css = './css/theme/' . getTheme() . '.css'; From e0384c6e5e6e79b4b0a56156cbfff510ad1acaba Mon Sep 17 00:00:00 2001 From: d8ahazard Date: Wed, 14 Dec 2016 16:11:30 -0600 Subject: [PATCH 090/170] Fix Landing Page Yeah, that was kind of a glaring issue. --- muximux.php | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/muximux.php b/muximux.php index 27c59e4..3f588a4 100644 --- a/muximux.php +++ b/muximux.php @@ -445,11 +445,6 @@ function menuItems() {
  • -
    "; - + $splashScreen = $config->getBool('general', 'splashscreen', false); + $moButton = "