$(document).ready( function() { var all_icons = $("[data-section-icon]").map(function() { return $(this).attr('data-section-icon'); }).get(); all_icons = _.uniq(all_icons).join(" "); function update_title_bar( event ) { if($(event.currentSlide).is('[data-section-title-hidden]') ) { $(".title-bar").css('opacity', '0'); } else { $(".title-bar").css('opacity', '1'); } // event.previousSlide, event.currentSlide, event.indexh, event.indexv var title = $(event.currentSlide).attr('data-section-title') || ""; /* Only update when title has changed */ if($(".title-bar .title span:first").text() !== title) { $(""+title+"").hide().appendTo(".title-bar .title").fadeIn("normal"); $(".title-bar .title span:not(:last)").fadeOut("normal", function() { $(this).remove(); }); } var edit_url = $(event.currentSlide).attr('data-edit-url'); $(".title-bar a.title").attr('href', edit_url); // Only update if a is found var icon = $(event.currentSlide).attr('data-section-icon') || ""; if( !$(".title-bar .title i").hasClass(icon) ) { $(".title-bar .title i") .removeClass(all_icons) .addClass(icon); } } /* Slides: with "wheel" */ function wheel_toggle_slides(el) { $("[data-wheel-order]").removeClass('active'); $(el).addClass('active'); var order = $(el).attr('data-wheel-order'); var related = $('[data-wheel-order="' + order +'"]').not('.wheel-image'); related.addClass('active'); $('.wheel-text [data-type="wysihtml5"]').hide(); related.show(); } $(".top-bar .links a").click(function() { $(".top-bar.expanded .toggle-topbar").trigger("click.fndtn.topbar"); }); /* Presentation? */ if( $('.page-presentation-play').length) { /* Initialize reveal.js */ Reveal.initialize({ // Display controls in the bottom right corner controls: true, // Display a presentation progress bar progress: true, // Push each slide change to the browser history history: true, // Enable keyboard shortcuts for navigation keyboard: true, // Enable the slide overview mode overview: false, // Vertical centering of slides center: false, // Enables touch navigation on devices with touch input touch: true, // Loop the presentation loop: false, // Change the presentation direction to be RTL rtl: false, // Number of milliseconds between automatically proceeding to the // next slide, disabled when set to 0, this value can be overwritten // by using a data-autoslide attribute on your slides autoSlide: 0, // Enable slide navigation via mouse wheel mouseWheel: false, // Apply a 3D roll to links on hover rollingLinks: false, // Transition style transition: 'linear', // default/cube/page/concave/zoom/linear/fade/none // Factor of the display size that should remain empty around the content margin: 0.15, // The "normal" size of the presentation, aspect ratio will be preserved // when the presentation is scaled to fit different resolutions. Can be // specified using percentage units. //width: 960, //height: 700, width: 768, // Note: Could set this to 100% and make presentation content responsive instead of using zoom; height: 576, minScale: 0.2, maxScale: 1 // FIXME: use user agent / device width ? }); Reveal.addEventListener( 'ready', function(event) { /* On small screen? disable transitions */ var small_screen = $(window).width() < 480; if( small_screen ) { Reveal.configure({ transition: 'none' }); } update_title_bar(event); /* Load chart if one exists on current slide (animate) */ if( $(event.currentSlide).find('[class^="graph-"]').length) { $(event.currentSlide).find('[class^="graph-"]').graph('load'); } }); Reveal.addEventListener( 'slidechanged', function( event ) { /* Update title bar */ update_title_bar(event); /* Chart slide - Wait until it is current to load (animate) */ if( $(event.currentSlide).find('[class^="graph-"]').length) { $(event.currentSlide).find('[class^="graph-"]').graph('load'); } /* Disable touch on specific slides*/ if( $(event.currentSlide).find("[data-swipe-disable]").length ) { Reveal.configure({ touch: false }); } else { Reveal.configure({ touch: true }); } /* Search previous slide for video elements and pause them */ $(event.previousSlide).find("video").each(function(i, el) { el.pause(); }); /* Setup/Reset wheel state on wheel-slide enter */ if( $(event.currentSlide).find('.wheel').length) { $('.wheel-text [data-wheel-order]').hide(); $('[data-wheel-order]').removeClass('active'); $('[data-wheel-order="1"]').addClass('active').show(); } } ); $(".wheel-images .wheel-image .trigger, .wheel-head .trigger").on('mousedown', function(e) { wheel_toggle_slides(this); }); /* Hover fix for touch: Only bind on hover for non-touch devices */ $(".no-touch .wheel-images .wheel-image .trigger, .no-touch .wheel-head .trigger").on('mouseenter', function(e) { wheel_toggle_slides(this); }); } /* Swipebox */ $('a.fancybox').swipebox(); /* Video */ $('video').mediaelementplayer({ success: function (mediaElement, domObject) { /* Track video plays */ mediaElement.addEventListener( 'play', function(e) { mixpanel.track("Played video."); }, false); } }); /* Skip home if you are on the play-slide */ $("[data-goto-first-slide]").on('click', function(e) { e.preventDefault(); $(".top-bar.expanded .toggle-topbar").trigger("click.fndtn.topbar"); Reveal.slide(0, 0); }); /* Slide: Sick cost calculator */ function get_salary() { var industry_pk = parseInt($("#id_calc_industry").val(), 10); /* Note: stb_industries is defined in the calculator.html-template */ var industry = _.findWhere(stb_industries, {pk: industry_pk}); if(industry === undefined) { return 0; } return industry.fields.yearly_salary; } function calc_cost(sick_rate, num_staff) { var salary = get_salary(); sick_rate = sick_rate / 100.0; // percent return sick_rate * num_staff * salary; } /* Format norwegian */ function format_number_norwegian(num) { num = num.toString(); var formatted_str = ""; /* Add spaces backwards every third char */ for(var i=0; i< num.length; i++){ if(i % 3 === 0) { formatted_str += " "; } formatted_str += num.charAt(num.length-i-1); } /* reverse the string */ return formatted_str.split("").reverse().join(""); } function calc_savings(sick_rate, goal_sick_rate, num_staff) { var current = calc_cost(sick_rate, num_staff); var goal = calc_cost(goal_sick_rate, num_staff); return current - goal; //total savings per year } function recalc() { /* Get data */ var num_staff = parseInt($(".num-staff").slider('value'), 10); var sick_rate = $(".sick-rate").slider('value'); var sick_rate_float = parseFloat(sick_rate); var goal_sick_rate = $(".goal-sick-rate").slider('value'); var goal_sick_rate_float = parseFloat(goal_sick_rate); /* Calculate */ var cost = calc_cost(sick_rate_float, num_staff); cost = parseInt(Math.round( cost / 100), 10) * 100; var savings = calc_savings(sick_rate_float, goal_sick_rate, num_staff); savings = parseInt(Math.round( savings / 1000), 10) * 1000; /* Output data */ $("[data-calc-staff]").text(num_staff); $("[data-calc-rate]").text(Math.round(sick_rate_float * 10) / 10); $("[data-calc-goal-rate]").text(Math.round(goal_sick_rate_float * 10) / 10); $("[data-calc-savings]").text(format_number_norwegian(savings)); $("[data-calc-savings-employee]").text(format_number_norwegian(Math.round(savings / num_staff))); /* cost */ $("[data-calc-cost]").text(format_number_norwegian(cost)); $("[data-calc-cost-employee]").text(format_number_norwegian(Math.round(cost / num_staff))); } if($(".sick-cost-calculator").length) { $( ".num-staff" ).slider({ animate: "fast", value: 600, min: 1, max: 2000, step: 1, stop: recalc, slide: recalc }); $( ".sick-rate" ).slider({ animate: "fast", value: 10.2, min: 1, max: 15, step: 0.2, stop: recalc, slide: recalc }); $( ".goal-sick-rate" ).slider({ animate: "fast", value: 5, min: 1, max: 15, step: 0.2, stop: recalc, slide: recalc }); $(".sick-cost-industry-form").on('change', function(e) { recalc(); }); recalc(); // Initial calc /* Workaround for slider not working on touch devices * Click/touch and change */ $("[data-calc-staff], [data-calc-rate], [data-calc-goal-rate]").on('click', function(e) { $(".set-value-modal").attr('data-updating', $(this).attr('data-updating')); var old_value = $(this).text(); $("input[name=set-value]").val(old_value); $(".set-value-modal").foundation('reveal', 'open'); }); $(".set-value-button").on('click', function(e) { var new_value = $("input[name=set-value]").val(); var key = "#" + $(".set-value-modal").attr('data-updating'); $( key ).slider({ value: parseFloat(new_value)}); $(".set-value-modal").foundation('reveal', 'close'); recalc(); }); } /* Slide: Public treatment comparison */ if($(".public-treatment-comparison").length) { var options = { valueNames: [ 'region', 'hospital', 'city', 'diagnose', 'waittime' ] }; var featureList = new List('treatment-list', options); featureList.sort('waittime', { asc: false }); $('.filter-region, .filter-diagnose').change(function() { featureList.filter(function(item) { var diagnose = $('.filter-diagnose').val(); var region = $(".filter-region").val(); return (item.values().region == region || region == "Alle") && item.values().diagnose == diagnose; }); return false; }); $('.filter-none').click(function() { featureList.filter(); return false; }); $(".filter-diagnose").trigger('change'); } function init_treatment_map() { // mapbox.com: nikolaik.map-hyrf1sef var tile_url = 'http://{s}.tiles.mapbox.com/v3/nikolaik.map-hyrf1sef/{z}/{x}/{y}.png'; var tiles = L.tileLayer(tile_url, {maxZoom: 17, minZoom: 4}); var latlng = L.latLng(65.57, 12.56); var map = L.map('treament-network-map', {center: latlng, zoom: 4, layers: [tiles]}); var markers = L.markerClusterGroup({ showCoverageOnHover: false}); /* Marker icon style */ var static_url = $('meta[name="x-django-static-url"]').attr('content'); var icon = L.icon({ iconUrl: static_url + 'dist/images/storebrand_map_marker.png', iconSize: new L.Point(35, 35), iconAnchor: new L.Point(35, 35), popupAnchor: new L.Point(-17.5, -35), shadowUrl: '', shadowSize: new L.Point(0, 0), }); /* Add specialist markers */ var _url = 'http://zeppelin.brill.no/blifrisk/data/no.json'; $.getJSON(_url, function(data) { _.each(data.specialists, function(s, i) { if(s.position) { var marker = L.marker(new L.LatLng(s.position.lat, s.position.lng), { title: s.name, icon: icon }); marker.bindPopup("
"+ s.address +"
"+ s.postalCode +" "+ s.city +"