/* ------------------------------------------------------------------------------ * * # Content widgets * * Demo JS code for widgets_content.html page * * ---------------------------------------------------------------------------- */ // Setup module // ------------------------------ var ContentWidgets = function() { // // Setup module components // // Dropzone file uploader var _componentDropzone = function() { if (typeof Dropzone == 'undefined') { console.warn('Warning - dropzone.min.js is not loaded.'); return; } // Configure dropzone Dropzone.options.dropzoneMultiple = { paramName: 'file', dictDefaultMessage: 'Drop file to upload or CLICK', maxFilesize: 0.1 }; }; // Uniform var _componentUniform = function() { if (!$().uniform) { console.warn('Warning - uniform.min.js is not loaded.'); return; } // Initialize $('.form-input-styled').uniform({ fileButtonClass: 'action btn bg-pink-400', fileButtonHtml: '' }); }; // Switchery var _componentSwitchery = function() { if (typeof Switchery == 'undefined') { console.warn('Warning - switchery.min.js is not loaded.'); return; } // Initialize multiple switches var elems = Array.prototype.slice.call(document.querySelectorAll('.form-input-switchery')); elems.forEach(function(html) { var switchery = new Switchery(html); }); }; // Select2 var _componentSelect2 = function() { if (!$().select2) { console.warn('Warning - select2.min.js is not loaded.'); return; } // Initialize $('.form-control-select2').select2({ minimumResultsForSearch: Infinity }); }; // Datepicker var _componentUiDatepicker = function() { if (!$().datepicker) { console.warn('Warning - jQuery UI components are not loaded.'); return; } // Initialize $('.form-control-datepicker').datepicker(); }; // Chart var _chatMessagesStats = function() { if (typeof d3 == 'undefined') { console.warn('Warning - d3.min.js is not loaded.'); return; } // Main variables var element = document.getElementById('messages-stats'), height = 60, color = '#26A69A'; // Initialize chart only if element exsists in the DOM if(element) { // Define main variables var d3Container = d3.select(element), margin = {top: 0, right: 0, bottom: 0, left: 0}, width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right, height = height - margin.top - margin.bottom; // Date and time format var parseDate = d3.time.format('%Y-%m-%d').parse; // Create SVG // ------------------------------ // Container var container = d3Container.append('svg'); // SVG element var svg = container .attr('width', width + margin.left + margin.right) .attr('height', height + margin.top + margin.bottom) .append('g') .attr('transform', 'translate(' + margin.left + ',' + margin.top + ')') // Construct chart layout // ------------------------------ // Area var area = d3.svg.area() .x(function(d) { return x(d.date); }) .y0(height) .y1(function(d) { return y(d.value); }) .interpolate('monotone') // Construct scales // ------------------------------ // Horizontal var x = d3.time.scale().range([0, width ]); // Vertical var y = d3.scale.linear().range([height, 0]); // Load data // ------------------------------ d3.json('../../../../global_assets/demo_data/dashboard/monthly_sales.json', function (error, data) { // Show what's wrong if error if (error) return console.error(error); // Pull out values data.forEach(function (d) { d.date = parseDate(d.date); d.value = +d.value; }); // Get the maximum value in the given array var maxY = d3.max(data, function(d) { return d.value; }); // Reset start data for animation var startData = data.map(function(datum) { return { date: datum.date, value: 0 }; }); // Set input domains // ------------------------------ // Horizontal x.domain(d3.extent(data, function(d, i) { return d.date; })); // Vertical y.domain([0, d3.max( data, function(d) { return d.value; })]); // // Append chart elements // // Add area path svg.append('path') .datum(data) .attr('class', 'd3-area') .style('fill', color) .attr('d', area) .transition() // begin animation .duration(1000) .attrTween('d', function() { var interpolator = d3.interpolateArray(startData, data); return function (t) { return area(interpolator (t)); } }); // Resize chart // ------------------------------ // Call function on window resize $(window).on('resize', messagesAreaResize); // Call function on sidebar width change $(document).on('click', '.sidebar-control', messagesAreaResize); // Resize function // // Since D3 doesn't support SVG resize by default, // we need to manually specify parts of the graph that need to // be updated on window resize function messagesAreaResize() { // Layout variables width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right; // Layout // ------------------------- // Main svg width container.attr("width", width + margin.left + margin.right); // Width of appended group svg.attr("width", width + margin.left + margin.right); // Horizontal range x.range([0, width]); // Chart elements // ------------------------- // Area path svg.selectAll('.d3-area').datum( data ).attr("d", area); } }); } }; // // Return objects assigned to module // return { init: function() { _componentUniform(); _componentSwitchery(); _componentSelect2(); _componentUiDatepicker(); _chatMessagesStats(); }, initDropzone: function() { _componentDropzone(); } } }(); // Initialize module // ------------------------------ // When content loaded document.addEventListener('DOMContentLoaded', function() { ContentWidgets.init(); }); // Dropzone has specific condition ContentWidgets.initDropzone();