");
+ demo_settings.append(skins_list);
+
+ tab_pane.append(demo_settings);
+ $("#control-sidebar-home-tab").after(tab_pane);
+
+ setup();
+
+ /**
+ * Toggles layout classes
+ *
+ * @param String cls the layout class to toggle
+ * @returns void
+ */
+ function change_layout(cls) {
+ $("body").toggleClass(cls);
+ AdminLTE.layout.fixSidebar();
+ //Fix the problem with right sidebar and layout boxed
+ if (cls == "layout-boxed")
+ AdminLTE.controlSidebar._fix($(".control-sidebar-bg"));
+ if ($('body').hasClass('fixed') && cls == 'fixed') {
+ AdminLTE.pushMenu.expandOnHover();
+ AdminLTE.layout.activate();
+ }
+ AdminLTE.controlSidebar._fix($(".control-sidebar-bg"));
+ AdminLTE.controlSidebar._fix($(".control-sidebar"));
+ }
+
+ /**
+ * Replaces the old skin with the new skin
+ * @param String cls the new skin class
+ * @returns Boolean false to prevent link's default action
+ */
+ function change_skin(cls) {
+ $.each(my_skins, function (i) {
+ $("body").removeClass(my_skins[i]);
+ });
+
+ $("body").addClass(cls);
+ store('skin', cls);
+ return false;
+ }
+
+ /**
+ * Store a new settings in the browser
+ *
+ * @param String name Name of the setting
+ * @param String val Value of the setting
+ * @returns void
+ */
+ function store(name, val) {
+ if (typeof (Storage) !== "undefined") {
+ localStorage.setItem(name, val);
+ } else {
+ window.alert('Please use a modern browser to properly view this template!');
+ }
+ }
+
+ /**
+ * Get a prestored setting
+ *
+ * @param String name Name of of the setting
+ * @returns String The value of the setting | null
+ */
+ function get(name) {
+ if (typeof (Storage) !== "undefined") {
+ return localStorage.getItem(name);
+ } else {
+ window.alert('Please use a modern browser to properly view this template!');
+ }
+ }
+
+ /**
+ * Retrieve default settings and apply them to the template
+ *
+ * @returns void
+ */
+ function setup() {
+ var tmp = get('skin');
+ if (tmp && $.inArray(tmp, my_skins))
+ change_skin(tmp);
+
+ //Add the change skin listener
+ $("[data-skin]").on('click', function (e) {
+ e.preventDefault();
+ change_skin($(this).data('skin'));
+ });
+
+ //Add the layout manager
+ $("[data-layout]").on('click', function () {
+ change_layout($(this).data('layout'));
+ });
+
+ $("[data-controlsidebar]").on('click', function () {
+ change_layout($(this).data('controlsidebar'));
+ var slide = !AdminLTE.options.controlSidebarOptions.slide;
+ AdminLTE.options.controlSidebarOptions.slide = slide;
+ if (!slide)
+ $('.control-sidebar').removeClass('control-sidebar-open');
+ });
+
+ $("[data-sidebarskin='toggle']").on('click', function () {
+ var sidebar = $(".control-sidebar");
+ if (sidebar.hasClass("control-sidebar-dark")) {
+ sidebar.removeClass("control-sidebar-dark")
+ sidebar.addClass("control-sidebar-light")
+ } else {
+ sidebar.removeClass("control-sidebar-light")
+ sidebar.addClass("control-sidebar-dark")
+ }
+ });
+
+ $("[data-enable='expandOnHover']").on('click', function () {
+ $(this).attr('disabled', true);
+ AdminLTE.pushMenu.expandOnHover();
+ if (!$('body').hasClass('sidebar-collapse'))
+ $("[data-layout='sidebar-collapse']").click();
+ });
+
+ // Reset options
+ if ($('body').hasClass('fixed')) {
+ $("[data-layout='fixed']").attr('checked', 'checked');
+ }
+ if ($('body').hasClass('layout-boxed')) {
+ $("[data-layout='layout-boxed']").attr('checked', 'checked');
+ }
+ if ($('body').hasClass('sidebar-collapse')) {
+ $("[data-layout='sidebar-collapse']").attr('checked', 'checked');
+ }
+
+ }
+})(jQuery, $.AdminLTE);
diff --git a/template/app/templates/theme3_v5/js/pages/dashboard.js b/template/app/templates/theme3_v5/js/pages/dashboard.js
new file mode 100644
index 00000000..9c4ff7b2
--- /dev/null
+++ b/template/app/templates/theme3_v5/js/pages/dashboard.js
@@ -0,0 +1,210 @@
+/*
+ * Author: Abdullah A Almsaeed
+ * Date: 4 Jan 2014
+ * Description:
+ * This is a demo file used only for the main dashboard (index.html)
+ **/
+
+$(function () {
+
+ "use strict";
+
+ //Make the dashboard widgets sortable Using jquery UI
+ $(".connectedSortable").sortable({
+ placeholder: "sort-highlight",
+ connectWith: ".connectedSortable",
+ handle: ".box-header, .nav-tabs",
+ forcePlaceholderSize: true,
+ zIndex: 999999
+ });
+ $(".connectedSortable .box-header, .connectedSortable .nav-tabs-custom").css("cursor", "move");
+
+ //jQuery UI sortable for the todo list
+ $(".todo-list").sortable({
+ placeholder: "sort-highlight",
+ handle: ".handle",
+ forcePlaceholderSize: true,
+ zIndex: 999999
+ });
+
+ //bootstrap WYSIHTML5 - text editor
+ $(".textarea").wysihtml5();
+
+ $('.daterange').daterangepicker({
+ ranges: {
+ 'Today': [moment(), moment()],
+ 'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
+ 'Last 7 Days': [moment().subtract(6, 'days'), moment()],
+ 'Last 30 Days': [moment().subtract(29, 'days'), moment()],
+ 'This Month': [moment().startOf('month'), moment().endOf('month')],
+ 'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
+ },
+ startDate: moment().subtract(29, 'days'),
+ endDate: moment()
+ }, function (start, end) {
+ window.alert("You chose: " + start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
+ });
+
+ /* jQueryKnob */
+ $(".knob").knob();
+
+ //jvectormap data
+ var visitorsData = {
+ "US": 398, //USA
+ "SA": 400, //Saudi Arabia
+ "CA": 1000, //Canada
+ "DE": 500, //Germany
+ "FR": 760, //France
+ "CN": 300, //China
+ "AU": 700, //Australia
+ "BR": 600, //Brazil
+ "IN": 800, //India
+ "GB": 320, //Great Britain
+ "RU": 3000 //Russia
+ };
+ //World map by jvectormap
+ $('#world-map').vectorMap({
+ map: 'world_mill_en',
+ backgroundColor: "transparent",
+ regionStyle: {
+ initial: {
+ fill: '#e4e4e4',
+ "fill-opacity": 1,
+ stroke: 'none',
+ "stroke-width": 0,
+ "stroke-opacity": 1
+ }
+ },
+ series: {
+ regions: [{
+ values: visitorsData,
+ scale: ["#92c1dc", "#ebf4f9"],
+ normalizeFunction: 'polynomial'
+ }]
+ },
+ onRegionLabelShow: function (e, el, code) {
+ if (typeof visitorsData[code] != "undefined")
+ el.html(el.html() + ': ' + visitorsData[code] + ' new visitors');
+ }
+ });
+
+ //Sparkline charts
+ var myvalues = [1000, 1200, 920, 927, 931, 1027, 819, 930, 1021];
+ $('#sparkline-1').sparkline(myvalues, {
+ type: 'line',
+ lineColor: '#92c1dc',
+ fillColor: "#ebf4f9",
+ height: '50',
+ width: '80'
+ });
+ myvalues = [515, 519, 520, 522, 652, 810, 370, 627, 319, 630, 921];
+ $('#sparkline-2').sparkline(myvalues, {
+ type: 'line',
+ lineColor: '#92c1dc',
+ fillColor: "#ebf4f9",
+ height: '50',
+ width: '80'
+ });
+ myvalues = [15, 19, 20, 22, 33, 27, 31, 27, 19, 30, 21];
+ $('#sparkline-3').sparkline(myvalues, {
+ type: 'line',
+ lineColor: '#92c1dc',
+ fillColor: "#ebf4f9",
+ height: '50',
+ width: '80'
+ });
+
+ //The Calender
+ $("#calendar").datepicker();
+
+ //SLIMSCROLL FOR CHAT WIDGET
+ $('#chat-box').slimScroll({
+ height: '250px'
+ });
+
+ /* Morris.js Charts */
+ // Sales chart
+ var area = new Morris.Area({
+ element: 'revenue-chart',
+ resize: true,
+ data: [
+ {y: '2011 Q1', item1: 2666, item2: 2666},
+ {y: '2011 Q2', item1: 2778, item2: 2294},
+ {y: '2011 Q3', item1: 4912, item2: 1969},
+ {y: '2011 Q4', item1: 3767, item2: 3597},
+ {y: '2012 Q1', item1: 6810, item2: 1914},
+ {y: '2012 Q2', item1: 5670, item2: 4293},
+ {y: '2012 Q3', item1: 4820, item2: 3795},
+ {y: '2012 Q4', item1: 15073, item2: 5967},
+ {y: '2013 Q1', item1: 10687, item2: 4460},
+ {y: '2013 Q2', item1: 8432, item2: 5713}
+ ],
+ xkey: 'y',
+ ykeys: ['item1', 'item2'],
+ labels: ['Item 1', 'Item 2'],
+ lineColors: ['#a0d0e0', '#3c8dbc'],
+ hideHover: 'auto'
+ });
+ var line = new Morris.Line({
+ element: 'line-chart',
+ resize: true,
+ data: [
+ {y: '2011 Q1', item1: 2666},
+ {y: '2011 Q2', item1: 2778},
+ {y: '2011 Q3', item1: 4912},
+ {y: '2011 Q4', item1: 3767},
+ {y: '2012 Q1', item1: 6810},
+ {y: '2012 Q2', item1: 5670},
+ {y: '2012 Q3', item1: 4820},
+ {y: '2012 Q4', item1: 15073},
+ {y: '2013 Q1', item1: 10687},
+ {y: '2013 Q2', item1: 8432}
+ ],
+ xkey: 'y',
+ ykeys: ['item1'],
+ labels: ['Item 1'],
+ lineColors: ['#efefef'],
+ lineWidth: 2,
+ hideHover: 'auto',
+ gridTextColor: "#fff",
+ gridStrokeWidth: 0.4,
+ pointSize: 4,
+ pointStrokeColors: ["#efefef"],
+ gridLineColor: "#efefef",
+ gridTextFamily: "Open Sans",
+ gridTextSize: 10
+ });
+
+ //Donut Chart
+ var donut = new Morris.Donut({
+ element: 'sales-chart',
+ resize: true,
+ colors: ["#3c8dbc", "#f56954", "#00a65a"],
+ data: [
+ {label: "Download Sales", value: 12},
+ {label: "In-Store Sales", value: 30},
+ {label: "Mail-Order Sales", value: 20}
+ ],
+ hideHover: 'auto'
+ });
+
+ //Fix for charts under tabs
+ $('.box ul.nav a').on('shown.bs.tab', function () {
+ area.redraw();
+ donut.redraw();
+ line.redraw();
+ });
+
+ /* The todo list plugin */
+ $(".todo-list").todolist({
+ onCheck: function (ele) {
+ window.console.log("The element has been checked");
+ return ele;
+ },
+ onUncheck: function (ele) {
+ window.console.log("The element has been unchecked");
+ return ele;
+ }
+ });
+
+});
diff --git a/template/app/templates/theme3_v5/js/pages/dashboard2.js b/template/app/templates/theme3_v5/js/pages/dashboard2.js
new file mode 100644
index 00000000..a892b5b4
--- /dev/null
+++ b/template/app/templates/theme3_v5/js/pages/dashboard2.js
@@ -0,0 +1,275 @@
+$(function () {
+
+ 'use strict';
+
+ /* ChartJS
+ * -------
+ * Here we will create a few charts using ChartJS
+ */
+
+ //-----------------------
+ //- MONTHLY SALES CHART -
+ //-----------------------
+
+ // Get context with jQuery - using jQuery's .get() method.
+ var salesChartCanvas = $("#salesChart").get(0).getContext("2d");
+ // This will get the first returned node in the jQuery collection.
+ var salesChart = new Chart(salesChartCanvas);
+
+ var salesChartData = {
+ labels: ["January", "February", "March", "April", "May", "June", "July"],
+ datasets: [
+ {
+ label: "Electronics",
+ fillColor: "rgb(210, 214, 222)",
+ strokeColor: "rgb(210, 214, 222)",
+ pointColor: "rgb(210, 214, 222)",
+ pointStrokeColor: "#c1c7d1",
+ pointHighlightFill: "#fff",
+ pointHighlightStroke: "rgb(220,220,220)",
+ data: [65, 59, 80, 81, 56, 55, 40]
+ },
+ {
+ label: "Digital Goods",
+ fillColor: "rgba(60,141,188,0.9)",
+ strokeColor: "rgba(60,141,188,0.8)",
+ pointColor: "#3b8bba",
+ pointStrokeColor: "rgba(60,141,188,1)",
+ pointHighlightFill: "#fff",
+ pointHighlightStroke: "rgba(60,141,188,1)",
+ data: [28, 48, 40, 19, 86, 27, 90]
+ }
+ ]
+ };
+
+ var salesChartOptions = {
+ //Boolean - If we should show the scale at all
+ showScale: true,
+ //Boolean - Whether grid lines are shown across the chart
+ scaleShowGridLines: false,
+ //String - Colour of the grid lines
+ scaleGridLineColor: "rgba(0,0,0,.05)",
+ //Number - Width of the grid lines
+ scaleGridLineWidth: 1,
+ //Boolean - Whether to show horizontal lines (except X axis)
+ scaleShowHorizontalLines: true,
+ //Boolean - Whether to show vertical lines (except Y axis)
+ scaleShowVerticalLines: true,
+ //Boolean - Whether the line is curved between points
+ bezierCurve: true,
+ //Number - Tension of the bezier curve between points
+ bezierCurveTension: 0.3,
+ //Boolean - Whether to show a dot for each point
+ pointDot: false,
+ //Number - Radius of each point dot in pixels
+ pointDotRadius: 4,
+ //Number - Pixel width of point dot stroke
+ pointDotStrokeWidth: 1,
+ //Number - amount extra to add to the radius to cater for hit detection outside the drawn point
+ pointHitDetectionRadius: 20,
+ //Boolean - Whether to show a stroke for datasets
+ datasetStroke: true,
+ //Number - Pixel width of dataset stroke
+ datasetStrokeWidth: 2,
+ //Boolean - Whether to fill the dataset with a color
+ datasetFill: true,
+ //String - A legend template
+ legendTemplate: "
-legend\"><% for (var i=0; i
\"><%=datasets[i].label%>
<%}%>
",
+ //Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container
+ maintainAspectRatio: true,
+ //Boolean - whether to make the chart responsive to window resizing
+ responsive: true
+ };
+
+ //Create the line chart
+ salesChart.Line(salesChartData, salesChartOptions);
+
+ //---------------------------
+ //- END MONTHLY SALES CHART -
+ //---------------------------
+
+ //-------------
+ //- PIE CHART -
+ //-------------
+ // Get context with jQuery - using jQuery's .get() method.
+ var pieChartCanvas = $("#pieChart").get(0).getContext("2d");
+ var pieChart = new Chart(pieChartCanvas);
+ var PieData = [
+ {
+ value: 700,
+ color: "#f56954",
+ highlight: "#f56954",
+ label: "Chrome"
+ },
+ {
+ value: 500,
+ color: "#00a65a",
+ highlight: "#00a65a",
+ label: "IE"
+ },
+ {
+ value: 400,
+ color: "#f39c12",
+ highlight: "#f39c12",
+ label: "FireFox"
+ },
+ {
+ value: 600,
+ color: "#00c0ef",
+ highlight: "#00c0ef",
+ label: "Safari"
+ },
+ {
+ value: 300,
+ color: "#3c8dbc",
+ highlight: "#3c8dbc",
+ label: "Opera"
+ },
+ {
+ value: 100,
+ color: "#d2d6de",
+ highlight: "#d2d6de",
+ label: "Navigator"
+ }
+ ];
+ var pieOptions = {
+ //Boolean - Whether we should show a stroke on each segment
+ segmentShowStroke: true,
+ //String - The colour of each segment stroke
+ segmentStrokeColor: "#fff",
+ //Number - The width of each segment stroke
+ segmentStrokeWidth: 1,
+ //Number - The percentage of the chart that we cut out of the middle
+ percentageInnerCutout: 50, // This is 0 for Pie charts
+ //Number - Amount of animation steps
+ animationSteps: 100,
+ //String - Animation easing effect
+ animationEasing: "easeOutBounce",
+ //Boolean - Whether we animate the rotation of the Doughnut
+ animateRotate: true,
+ //Boolean - Whether we animate scaling the Doughnut from the centre
+ animateScale: false,
+ //Boolean - whether to make the chart responsive to window resizing
+ responsive: true,
+ // Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container
+ maintainAspectRatio: false,
+ //String - A legend template
+ legendTemplate: "