App-RPi-EnvUI

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

        - fix issue in Auth, where we were calling API::user() by class, not by
          object, broke during recent update to API code. (fixes #50)
        - add API::env_light_aux() and DB::db() to POD
        - added new sig handler for warn with env var SUPPRESS_WARN=1 to quiet
          warnings. Recommended only while testing
        - fix issue where the month in the UI date was off-by-one (fixes #46)
        - renamed "log_level" config file variable to "debug_level"
        - removed config/ from the distribution, and consolidated the testing()
          and _ui_testing() configuration to use the config file in t/ instead
        - added new config directive, "devel", if set to 1, we'll turn the
          background of the time display in the UI red to signify this isn't
          a production system (closes #47)
        - fix logic bugs and other JS weirdness in core.js that was completely
          breaking the UI's interpretation of aux override (fixes #53)
        - rewrite logic in core.js so that if override is disabled, setting aux
          state doesn't happen (fixes #54)
        - disabled "toggle" in the base config file for the light aux (updated
          tests)
        - updated API::_bool() to allow the $bool param to be both true/false
          and 1/0, as we do call it in both of those contexts, so we don't
          have to translate the param in code before sending it in

lib/App/RPi/EnvUI/Configuration.pod  view on Meta::CPAN


Value: Integer, C<-1> through C<7>. Sets the debug logging level.

Default: C<-1> (off)

=head3 devel

Value: Bool. True to signify that this is not a production system, False to
signify it is.

When enabled, the UI's time/date bar's background colour will change to red for
easy identification of a development system.

Default: C<0> (off)

=head2 CONTROL CONFIGURATION SECTION

The C<control> configuration section specifies parameters for specific actions
within the system.

=head3 temp_limit

public/css/envui.css  view on Meta::CPAN

}

.inner_aux {
    width: 33.33333%;
}

/* main menu */

#time {
	padding: 10px 20px;
	background: #c0c0c0;
	color: #FFF;
}

.menuHeader {
	padding: 10px 20px;
	display: block;
	text-decoration: none;
	color: #FFF;
}
.menuHeader:hover {
	background: green;
}

.menuBackground {
	background: #c0c0c0;
	text-align: left;
}
.dropDownMenu a {
	color: #FFF;
}

.dropDownMenu,
.dropDownMenu ul {
	list-style: none;
	margin: 0;

public/css/envui.css  view on Meta::CPAN

}
.dropDownMenu li {
	position: relative;
}
.dropDownMenu a {
	padding: 10px 20px;
	display: block;
	text-decoration: none;
}
.dropDownMenu a:hover {
	background: green;
}

/* Level 1 Drop Down */
.dropDownMenu > li {
	display: inline-block;
	vertical-align: top;
	margin-left: -4px; /* solve the 4 pixels spacing between list-items */
}

.dropDownMenu > li:first-child {
	margin-left: 0;
}

/* Level 2 */
.dropDownMenu ul {
	box-shadow: 2px 2px 15px 0 rgba(0,0,0, 0.5);
}
.dropDownMenu > li > ul {
	text-align: left;
	display: none;
	background: #c0c0c0;
	position: absolute;
	top: 100%;
	left: 0;
	width: 240px;
	z-index: 999999;
}

/* Level 3 */
.dropDownMenu > li > ul > li > ul {
	text-align: left;
	display: none;
	background: #c0c0c0;
	position: absolute;
	left: 100%;
	top: 0;
	z-index: 9999999;
}

.graph_container {
	box-sizing: border-box;
	width: 600px;
	height: 200px;
	padding: 20px 15px 15px 15px;
	margin: 15px auto 30px auto;
	border: 1px solid #ddd;
	background: #fff;
	background: linear-gradient(#f6f6f6 0, #fff 50px);
	background: -o-linear-gradient(#f6f6f6 0, #fff 50px);
	background: -ms-linear-gradient(#f6f6f6 0, #fff 50px);
	background: -moz-linear-gradient(#f6f6f6 0, #fff 50px);
	background: -webkit-linear-gradient(#f6f6f6 0, #fff 50px);
	box-shadow: 0 3px 10px rgba(0,0,0,0.15);
	-o-box-shadow: 0 3px 10px rgba(0,0,0,0.1);
	-ms-box-shadow: 0 3px 10px rgba(0,0,0,0.1);
	-moz-box-shadow: 0 3px 10px rgba(0,0,0,0.1);
	-webkit-box-shadow: 0 3px 10px rgba(0,0,0,0.1);
}

.graph {
	width: 100%;
	height: 100%;

public/css/flipswitch.css  view on Meta::CPAN

}
/* Icon-only buttons */
.ui-btn-icon-notext.ui-btn-corner-all,
.ui-btn-icon-notext.ui-corner-all {
	-webkit-border-radius: 1em;
	border-radius: 1em;
}
/* Radius clip workaround for cleaning up corner trapping */
.ui-btn-corner-all,
.ui-corner-all {
	-webkit-background-clip: padding;
	background-clip: padding-box;
}


/* Bar: Toolbars, dividers, slider track */
.ui-bar-a,
.ui-page-theme-a .ui-bar-inherit,
html .ui-bar-a .ui-bar-inherit,
html .ui-body-a .ui-bar-inherit,
html body .ui-group-theme-a .ui-bar-inherit {
	background-color: 			#e9e9e9 /*{a-bar-background-color}*/;
	border-color:	 		#ddd /*{a-bar-border}*/;
	color: 					#333 /*{a-bar-color}*/;
	font-weight: bold;
}

/* Button up */
.ui-page-theme-a .ui-btn,
html .ui-bar-a .ui-btn,
html .ui-body-a .ui-btn,
html body .ui-group-theme-a .ui-btn,
html head + body .ui-btn.ui-btn-a,
/* Button visited */
.ui-page-theme-a .ui-btn:visited,
html .ui-bar-a .ui-btn:visited,
html .ui-body-a .ui-btn:visited,
html body .ui-group-theme-a .ui-btn:visited,
html head + body .ui-btn.ui-btn-a:visited {
	background-color: 			#f6f6f6 /*{a-bup-background-color}*/;
	border-color:	 		#ddd /*{a-bup-border}*/;
	color: 					#333 /*{a-bup-color}*/;
}
/* Button hover */
.ui-page-theme-a .ui-btn:hover,
html .ui-bar-a .ui-btn:hover,
html .ui-body-a .ui-btn:hover,
html body .ui-group-theme-a .ui-btn:hover,
html head + body .ui-btn.ui-btn-a:hover {
	background-color: 			#ededed /*{a-bhover-background-color}*/;
	border-color:	 		#ddd /*{a-bhover-border}*/;
	color: 					#333 /*{a-bhover-color}*/;
}
/* Button down */
.ui-page-theme-a .ui-btn:active,
html .ui-bar-a .ui-btn:active,
html .ui-body-a .ui-btn:active,
html body .ui-group-theme-a .ui-btn:active,
html head + body .ui-btn.ui-btn-a:active {
	background-color: 			#e8e8e8 /*{a-bdown-background-color}*/;
	border-color:	 		#ddd /*{a-bdown-border}*/;
	color: 					#333 /*{a-bdown-color}*/;
}

/* Active button */
.ui-page-theme-a .ui-btn.ui-btn-active,
html .ui-bar-a .ui-btn.ui-btn-active,
html .ui-body-a .ui-btn.ui-btn-active,
html body .ui-group-theme-a .ui-btn.ui-btn-active,
html head + body .ui-btn.ui-btn-a.ui-btn-active,
/* Active checkbox icon */
.ui-page-theme-a .ui-checkbox-on:after,
html .ui-bar-a .ui-checkbox-on:after,
html .ui-body-a .ui-checkbox-on:after,
html body .ui-group-theme-a .ui-checkbox-on:after,
.ui-btn.ui-checkbox-on.ui-btn-a:after,
/* Active flipswitch background */
.ui-page-theme-a .ui-flipswitch-active,
html .ui-bar-a .ui-flipswitch-active,
html .ui-body-a .ui-flipswitch-active,
html body .ui-group-theme-a .ui-flipswitch-active,
html body .ui-flipswitch.ui-bar-a.ui-flipswitch-active,
/* Active slider track */
.ui-page-theme-a .ui-slider-track .ui-btn-active,
html .ui-bar-a .ui-slider-track .ui-btn-active,
html .ui-body-a .ui-slider-track .ui-btn-active,
html body .ui-group-theme-a .ui-slider-track .ui-btn-active,
html body div.ui-slider-track.ui-body-a .ui-btn-active {
	background-color: 		green /*{a-active-background-color}*/;
	border-color:	 		green /*{a-active-border}*/;
	color: 					black /*{a-active-color}*/;
}

public/css/flipswitch.struct.css  view on Meta::CPAN

}
.ui-loader {
	display: none;
	z-index: 9999999;
	position: fixed;
	top: 50%;
	left: 50%;
	border:0;
}
.ui-loader-default {
	background: none;
	filter: Alpha(Opacity=18);
	opacity: .18;
	width: 2.875em;
	height: 2.875em;
	margin-left: -1.4375em;
	margin-top: -1.4375em;
}
.ui-loader-verbose {
	width: 12.5em;
	filter: Alpha(Opacity=88);

public/css/flipswitch.struct.css  view on Meta::CPAN

	width: 0;
	height: 0;
	overflow: hidden;
}
.ui-loader-verbose h1 {
	font-size: 1em;
	margin: 0;
	text-align: center;
}
.ui-loader .ui-icon-loading {
	background-color: #000;
	display: block;
	margin: 0;
	width: 2.75em;
	height: 2.75em;
	padding: .0625em;
	-webkit-border-radius: 2.25em;
	border-radius: 2.25em;
}
.ui-loader-verbose .ui-icon-loading {
	margin: 0 auto .625em;

public/css/flipswitch.struct.css  view on Meta::CPAN


.ui-flipswitch {
	display: inline-block;
	vertical-align: middle;
	width: 6.875em; /* Override this and padding-left in next rule if you use labels other than "on/off" and need more space */
	height: 1.875em;
	border-width: 1px;
	border-style: solid;
	margin: .5em 0;
	overflow: hidden;
	-webkit-transition-property: padding, width, background-color, color, border-color;
	-moz-transition-property: padding, width, background-color, color, border-color;
	-o-transition-property: padding, width, background-color, color, border-color;
	transition-property: padding, width, background-color, color, border-color;
	-webkit-transition-duration: 100ms;
	-moz-transition-duration: 100ms;
	-o-transition-duration: 100ms;
	transition-duration: 100ms;
	-webkit-touch-callout: none;
	-webkit-user-select: none;
	-moz-user-select: none;
	-ms-user-select: none;
	user-select: none;
	cursor: pointer;

public/js/core.js  view on Meta::CPAN

    $('div.ui-page-active .button').on('change', aux_action);

    // main menu

    $('div.ui-page-active .myMenu ul li').hover(function() {
        $(this).children('ul').stop(true, false, true).slideToggle(300);
    });

    $.get('/get_config/devel', function(devel){
        if (parseInt(devel) == '1'){
            $('#time').css({'background-color': 'red'});
        }
    });

    // draggable widgets

    var s_positions = localStorage.positions || "{}";
    var positions = $.parseJSON(s_positions);

    $.each(positions, function (id, pos){
        $('div.ui-page-active #'+ id).css(pos);

public/js/flot.js  view on Meta::CPAN

 *
 * Version 1.1.
 *
 * Inspiration from jQuery color animation plugin by John Resig.
 *
 * Released under the MIT license by Ole Laursen, October 2009.
 *
 * Examples:
 *
 *   $.color.parse("#fff").scale('rgb', 0.25).add('a', -0.5).toString()
 *   var c = $.color.extract($("#mydiv"), 'background-color');
 *   console.log(c.r, c.g, c.b, c.a);
 *   $.color.make(100, 50, 25, 0.4).toString() // returns "rgba(100,50,25,0.4)"
 *
 * Note that .scale() and .add() return the same modified object
 * instead of making a new one.
 *
 * V. 1.1: Fix error handling so e.g. parsing an empty string does
 * produce a color rather than just crashing.
 */
(function($){$.color={};$.color.make=function(r,g,b,a){var o={};o.r=r||0;o.g=g||0;o.b=b||0;o.a=a!=null?a:1;o.add=function(c,d){for(var i=0;i<c.length;++i)o[c.charAt(i)]+=d;return o.normalize()};o.scale=function(c,f){for(var i=0;i<c.length;++i)o[c.cha...

public/js/flot.js  view on Meta::CPAN

                // the color theme used for graphs
                colors: ["#edc240", "#afd8f8", "#cb4b4b", "#4da74d", "#9440ed"],
                legend: {
                    show: true,
                    noColumns: 1, // number of colums in legend table
                    labelFormatter: null, // fn: string -> string
                    labelBoxBorderColor: "#ccc", // border color for the little label boxes
                    container: null, // container (as jQuery object) to put legend in, null means default on top of graph
                    position: "ne", // position of default legend container within plot
                    margin: 5, // distance from grid edge to default legend container within plot
                    backgroundColor: null, // null means auto-detect
                    backgroundOpacity: 0.85, // set to 0 to avoid background
                    sorted: null    // default to no legend sorting
                },
                xaxis: {
                    show: null, // null = auto-detect, true = always, false = never
                    position: "bottom", // or "top"
                    mode: null, // null or "time"
                    font: null, // null (derived from CSS in placeholder) or object like { size: 11, lineHeight: 13, style: "italic", weight: "bold", family: "sans-serif", variant: "small-caps" }
                    color: null, // base color, labels, ticks
                    tickColor: null, // possibly different color of ticks, e.g. "rgba(0,0,0,0.15)"
                    transform: null, // null or f: number -> number to transform axis

public/js/flot.js  view on Meta::CPAN

                        horizontal: false,
                        zero: true
                    },
                    shadowSize: 3,
                    highlightColor: null
                },
                grid: {
                    show: true,
                    aboveData: false,
                    color: "#545454", // primary color used for outline and labels
                    backgroundColor: null, // null for transparent, else color
                    borderColor: null, // set if different from the grid color
                    tickColor: null, // color for the ticks, e.g. "rgba(0,0,0,0.15)"
                    margin: 0, // distance from the canvas edge to the grid
                    labelMargin: 5, // in pixels
                    axisMargin: 8, // in pixels
                    borderWidth: 2, // in pixels
                    minBorderMargin: null, // in pixels, null means taken from points radius
                    markings: null, // array of ranges or fn: axes -> array of ranges
                    markingsColor: "#f4f4f4",
                    markingsLineWidth: 2,

public/js/flot.js  view on Meta::CPAN

        }

        function draw() {

            surface.clear();

            executeHooks(hooks.drawBackground, [ctx]);

            var grid = options.grid;

            // draw background, if any
            if (grid.show && grid.backgroundColor)
                drawBackground();

            if (grid.show && !grid.aboveData) {
                drawGrid();
            }

            for (var i = 0; i < series.length; ++i) {
                executeHooks(hooks.drawSeries, [ctx, series[i]]);
                drawSeries(series[i]);
            }

public/js/flot.js  view on Meta::CPAN

                to = tmp;
            }

            return { from: from, to: to, axis: axis };
        }

        function drawBackground() {
            ctx.save();
            ctx.translate(plotOffset.left, plotOffset.top);

            ctx.fillStyle = getColorOrGradient(options.grid.backgroundColor, plotHeight, 0, "rgba(255, 255, 255, 0)");
            ctx.fillRect(0, 0, plotWidth, plotHeight);
            ctx.restore();
        }

        function drawGrid() {
            var i, axes, bw, bc;

            ctx.save();
            ctx.translate(plotOffset.left, plotOffset.top);

public/js/flot.js  view on Meta::CPAN

                    m = [m, m];
                if (p.charAt(0) == "n")
                    pos += 'top:' + (m[1] + plotOffset.top) + 'px;';
                else if (p.charAt(0) == "s")
                    pos += 'bottom:' + (m[1] + plotOffset.bottom) + 'px;';
                if (p.charAt(1) == "e")
                    pos += 'right:' + (m[0] + plotOffset.right) + 'px;';
                else if (p.charAt(1) == "w")
                    pos += 'left:' + (m[0] + plotOffset.left) + 'px;';
                var legend = $('<div class="legend">' + table.replace('style="', 'style="position:absolute;' + pos +';') + '</div>').appendTo(placeholder);
                if (options.legend.backgroundOpacity != 0.0) {
                    // put in the transparent background
                    // separately to avoid blended labels and
                    // label boxes
                    var c = options.legend.backgroundColor;
                    if (c == null) {
                        c = options.grid.backgroundColor;
                        if (c && typeof c == "string")
                            c = $.color.parse(c);
                        else
                            c = $.color.extract(legend, 'background-color');
                        c.a = 1;
                        c = c.toString();
                    }
                    var div = legend.children();
                    $('<div style="position:absolute;width:' + div.width() + 'px;height:' + div.height() + 'px;' + pos +'background-color:' + c + ';"> </div>').prependTo(legend).css('opacity', options.legend.backgroundOpacity);
                }
            }
        }


        // interactive features

        var highlights = [],
            redrawTimeout = null;



( run in 0.898 second using v1.01-cache-2.11-cpan-d8267643d1d )