/* Setup ============================================================ */ $(document).ready(function() { $().styleswitcher(); }); (function($) { /* Styleswitcher ============================================================ */ $.fn.styleswitcher = function() { var ss = $.fn.styleswitcher; ss.setup_styleswitcher(); ss.setup_fields(); ss.setup_color_sync(); ss.setup_reset_button(); } /* Defaults ------------------------------------------------------------ */ $.fn.styleswitcher.options = { ss: '#styleswitcher', open_button: '#ss_open-button', colorpicker: '.colorpicker', layout_color_selector: '#ss_layout-color-selector div', layout_def_color: '#75263d', content_color_selector: '#ss_content-color-selector div', content_def_color: '#75263d', color_sync_option: '#ss_color-sync', google_heading_font_css_file: '#google_heading_font_css_file', google_body_font_css_file: '#google_body_font_css_file', google_font_option_class: 'google-font', heading_font_select: '#ss_heading-font', body_font_select: '#ss_body-font', body_font_size_select: '#ss_body-font-size', reset_button: 'input[type=reset]#ss_reset', cookie_name: 'polyon_ss' }; /* Setup StyleSwitcher ------------------------------------------------------------ */ $.fn.styleswitcher.setup_styleswitcher = function() { var ss = $.fn.styleswitcher; var o = ss.options; // Peekaboo var peekaboo = $().multi_cookie(o.cookie_name, 'peekaboo'); if(peekaboo == false && $('body').hasClass('with-topbar-content')) { $(o.ss).css('left', 0).delay(2300).animate({left: '-205'}, 250); $().multi_cookie(o.cookie_name, 'peekaboo', 'true'); } // Mouse Enter $(o.open_button).mouseenter(function(){ $(o.ss).animate({left: '0'}, 250); }); // Mouse Leave var mouseout_elements = '.wrapper, header.main, #topbar, #welcomebar, #main, footer.main'; $(mouseout_elements).mouseenter(function(){ $(o.ss).animate({left: '-205'}, 250); }); } /* Setup Fields ------------------------------------------------------------ */ $.fn.styleswitcher.setup_fields = function() { var ss = $.fn.styleswitcher; var o = ss.options; // Color ss.setup_colorpicker(o.layout_color_selector, o.layout_def_color, 'set_layout_color'); ss.setup_colorpicker(o.content_color_selector, o.content_def_color, 'set_content_color'); ss.add_body_class_by_checkbox(o.color_sync_option, 'color-sync'); // Fonts ss.setup_font_by_select(o.heading_font_select, '#topbar #punchline, ' + 'h2, h3, h4'); ss.setup_font_by_select(o.body_font_select, '#body-container, '+ 'input, textarea, ' + 'input[type=checkbox] + label, ' + 'input[type=radio] + label, ' + 'blockquote p.source, ' + 'nav.main > ul > li > a'); ss.setup_body_font_size('#body-container'); // Generic ss.add_body_class_by_checkbox('#ss_minimal', 'minimal'); ss.add_body_class_by_checkbox('#ss_no-rounded-corners', 'no-rounded-corners'); // Content ss.add_body_class_by_checkbox('#ss_no-header-top-border', 'no-header-top-border'); ss.add_body_class_by_checkbox('#ss_simple-nav', 'simple-nav'); ss.remove_body_class_by_checkbox('#ss_simple-nav', 'button-nav'); ss.add_body_class_by_checkbox('#ss_no-topbar', 'no-topbar'); ss.add_body_class_by_checkbox('#ss_no-topbar-shine', 'no-topbar-shine'); ss.disable_field_by_checkbox('#ss_no-topbar', '#ss_no-topbar-shine'); ss.add_body_class_by_checkbox('#ss_show-header-bottom-border', 'show-header-bottom-border'); ss.enable_field_by_checkbox('#ss_no-topbar', '#ss_show-header-bottom-border'); // Footer ss.add_body_class_by_checkbox('#ss_no-footer', 'no-footer'); ss.add_body_class_by_checkbox('#ss_no-footer-top-border', 'no-footer-top-border'); ss.disable_field_by_checkbox('#ss_no-footer', '#ss_no-footer-top-border'); ss.add_body_class_by_checkbox('#ss_no-footerbar', 'no-footerbar'); // Disable Fields on Frontpage if($('body').hasClass('with-topbar-content')) { $('#ss_no-topbar').attr('disabled', true); //$('#ss_no-topbar-shine').attr('disabled', true); $('#ss_show-header-bottom-border').attr('disabled', true); } } /* Setup Color Sync ------------------------------------------------------------ */ $.fn.styleswitcher.setup_color_sync = function() { var ss = $.fn.styleswitcher; var o = ss.options; $(o.color_sync_option).bind('click change', function() { // No keyup to let Content Color live after page refresh if($(this).is(':checked')) { ss.set_content_color($(o.layout_color_selector).css('backgroundColor')); } }); } /* Setup Reset Button ------------------------------------------------------------ */ $.fn.styleswitcher.setup_reset_button = function() { var ss = $.fn.styleswitcher; var o = ss.options; $(o.reset_button).bind('click', function() { // Reset all checkboxes $(o.ss).find('input[type=checkbox]').each(function() { ss.set_check('#'+$(this).attr('id'), false); }); // Reset Selects to first option $(o.heading_font_select).val($(o.heading_font_select+' option:first').val()).keyup(); $(o.body_font_select).val($(o.body_font_select+' option:first').val()).keyup(); $(o.body_font_size_select).val($(o.body_font_size_select+' option:nth-of-type(4)').val()).keyup(); // Reset Color ss.set_layout_color(o.layout_def_color); ss.set_content_color(o.content_def_color); //return false; }); } /* Setup Font by Select ------------------------------------------------------------ */ $.fn.styleswitcher.setup_font_by_select = function(select_id, css_tags) { var ss = $.fn.styleswitcher; var o = ss.options; var select = $(select_id); select.bind('click change keyup', function() { if(select.val() != '') { // If Google Web Font is selected if(ss.set_google_web_font(select_id, select.val())) var font = $(select_id + ' option:selected').text(); else var font = select.val(); // To preserve SS font, get font-family var ss_ff = $(o.ss).css('fontFamily'); // Set font $(css_tags).css('fontFamily', font+', sans-serif'); // Override SS font-family with preserved font $(o.ss+' label,'+o.ss+' h5,'+o.reset_button).css('fontFamily', ss_ff); // Save status to cookie $().multi_cookie(o.cookie_name, select_id, select.val()); } }); // Set Select value automatically after load ss.set_select_option_by_cookie(select_id); } /* Setup Body Font Size ------------------------------------------------------------ */ $.fn.styleswitcher.setup_body_font_size = function(css_tags) { var ss = $.fn.styleswitcher; var o = ss.options; $(o.body_font_size_select).bind('click change keyup', function() { // Preserve font-size of elements that don't belong to the body text var h2_fs = $('h2').css('fontSize'); var h3_fs = $('h3').css('fontSize'); var h4_fs = $('h4').css('fontSize'); var widget_h3_fs = $('.widget h3').css('fontSize'); var punchline_fs = $('#topbar #punchline').css('fontSize'); // Set font-size $(css_tags).css('fontSize', $(o.body_font_size_select).val()); // Overwrite font-size of elements that don't belong to the body text $('h2').css('fontSize', h2_fs); $('h3').css('fontSize', h3_fs); $('h4').css('fontSize', h4_fs); $('.widget h3').css('fontSize', widget_h3_fs); $('#topbar #punchline').css('fontSize', punchline_fs); $().multi_cookie(o.cookie_name, o.body_font_size_select, $(o.body_font_size_select).val()); }); // Set Select value automatically after load ss.set_select_option_by_cookie(o.body_font_size_select); } /* Set Google Web Font ------------------------------------------------------------ */ $.fn.styleswitcher.set_google_web_font = function(select_id, font) { var o = $.fn.styleswitcher.options; // If Heading Font is selected if(select_id == o.heading_font_select) { // Get selected Option var heading_select_option = $(o.heading_font_select + ' option:selected'); // If option contains a Google Web Font if(heading_select_option.attr('class') == o.google_font_option_class) { // Get Font from Google $(o.google_heading_font_css_file).attr('href', 'http://fonts.googleapis.com/css?family=' + font); return true; } return false; } // If Body Font is selected else if(select_id == o.body_font_select) { // Get selected Option var body_select_option = $(o.body_font_select + ' option:selected'); // If option contains a Google Web Font if(body_select_option.attr('class') == o.google_font_option_class) { // Get Font from Google $(o.google_body_font_css_file).attr('href', 'http://fonts.googleapis.com/css?family=' + font); return true; } return false; } return false; } /* Setup ColorPicker ------------------------------------------------------------ */ $.fn.styleswitcher.setup_colorpicker = function(selector_id, def_color, the_function) { var ss = $.fn.styleswitcher; var o = ss.options; var cookie_color = $().multi_cookie(o.cookie_name, selector_id); var color = def_color; // Set Color from Cookie if(cookie_color != null && cookie_color != '') var color = cookie_color; // Set Color Selector $.fn.styleswitcher[the_function](color); // Setup ColorPicker $(selector_id).ColorPicker({ color: color, onShow: function (colpkr) { $(colpkr).fadeIn(150); return false; }, onHide: function (colpkr) { $(colpkr).fadeOut(150); return false; }, onChange: function (hsb, hex, rgb) { var hex_color = '#' + hex; $.fn.styleswitcher[the_function](hex_color); } }); } /* Set Layout Color ------------------------------------------------------------ */ $.fn.styleswitcher.set_layout_color = function(color) { var ss = $.fn.styleswitcher; var o = ss.options; // Set Color for Color Selector $(o.layout_color_selector).css('background', color); // Save Color to Cookie $().multi_cookie(o.cookie_name, o.layout_color_selector, color); var css_tags = '#topbar'; $(css_tags).css('backgroundColor', color); css_tags = 'header.main, footer.main'; $(css_tags).css('border-top-color', color); css_tags = 'header.main'; $(css_tags).css('border-bottom-color', color); // Sync Colors? if($(o.color_sync_option).is(':checked')) { ss.set_content_color(color); } } /* Set Content Color ------------------------------------------------------------ */ $.fn.styleswitcher.set_content_color = function(color) { var o = $.fn.styleswitcher.options; // Set Color for Color Selector $(o.content_color_selector).css('background', color); // Save Color to Cookie $().multi_cookie(o.cookie_name, o.content_color_selector, color); var css_tags = '.dropcap.colored,' + '#welcomebar h2,' + '.entry-content a:not(.button),' + '.paginator .current,' + '#comments .comment a.comment-reply-link,' + '#comments .comment .main cite a,' + '.contact-widget a,' + '.twitter-widget a,' + 'nav.main > ul > li.current > a,' + '#footerbar a'; $(css_tags).css('color', color); // Hover Color css_tags = 'h2 a, h3 a, h4 a, h5 a, h6 a,' + 'a.passive,' + '#comments .comment a.comment-reply-link,' + '#comments .comment .main cite a,' + '#comments .comment .main a.meta-data,' + '.widget ul li a,' + '.list-widget ul li a,' + '.double-list-widget ul li a,' + '.social-widget ul li a,' + '.posts-widget ul li .post-title,' + '.posts-widget ul li .post-date,' + 'button,' + 'a.button,' + 'input[type=submit],' + 'input[type=reset]:not(#ss_reset),' + '.paginator a,' + '.paginator span,' + 'nav.main ul li a'; css_tags = css_tags.split(','); $.each(css_tags, function(key, value) { var def_color = $(value).css('color'); $(value).hover( function(){ $(this).css({ color: color }); //mouseover }, function(){ $(this).css({ color: def_color }); // mouseout } ); }); css_tags = '.highlight, .dropcap-circle.colored, .dropcap-square.colored'; $(css_tags).css('backgroundColor', color); css_tags = '.entry-content tfoot tr th, .entry-content tfoot tr td'; $(css_tags).css('border-top-color', color); css_tags = '.entry-content table thead tr th'; $(css_tags).css('border-bottom-color', color); } /* Add Body Class by Checkbox ------------------------------------------------------------ */ $.fn.styleswitcher.add_body_class_by_checkbox = function(checkbox, body_class) { var ss = $.fn.styleswitcher; var o = ss.options; var checkbox_id = checkbox var checkbox = $(checkbox); // Set checkbox automatically after page load ss.set_checkbox_by_cookie(checkbox_id); if(checkbox.is(":checked")) $('body').addClass(body_class); checkbox.bind('click change keyup', function() { checkbox_id = '#'+$(this).attr('id'); if($(this).is(":checked")) { $('body').addClass(body_class); $().multi_cookie(o.cookie_name, checkbox_id, 'true'); } else { $('body').removeClass(body_class); $().multi_cookie(o.cookie_name, checkbox_id, 'false'); } }); } /* Remove Body Class by Checkbox ------------------------------------------------------------ */ $.fn.styleswitcher.remove_body_class_by_checkbox = function(checkbox, body_class) { var ss = $.fn.styleswitcher; var o = ss.options; var checkbox_id = checkbox; var checkbox = $(checkbox); // Set checkbox automatically after page load ss.set_checkbox_by_cookie(checkbox_id); if(checkbox.is(":checked")) $('body').removeClass(body_class); checkbox.bind('click change keyup', function() { checkbox_id = '#'+$(this).attr('id'); if($(this).is(":checked")) { $('body').removeClass(body_class); $().multi_cookie(o.cookie_name, checkbox_id, 'true'); } else { $('body').addClass(body_class); $().multi_cookie(o.cookie_name, checkbox_id, 'false'); } }); } /* Enable Field by Checkbox ------------------------------------------------------------ */ $.fn.styleswitcher.enable_field_by_checkbox = function(checkbox, field) { var checkbox = $(checkbox); var field = $(field); if(checkbox.is(":not(:checked)")) field.attr('disabled', true); checkbox.bind('click change keyup', function() { if($(this).is(":checked")) field.removeAttr('disabled'); else field.attr('disabled', true); }); } /* Disable Field by Checkbox ------------------------------------------------------------ */ $.fn.styleswitcher.disable_field_by_checkbox = function(checkbox, field) { var checkbox = $(checkbox); var field = $(field); if(checkbox.is(":checked")) field.attr('disabled', true); checkbox.bind('click change keyup', function() { if($(this).is(":checked")) field.attr('disabled', true); else field.removeAttr('disabled'); }); } /* Set Checkbox by Cookie ------------------------------------------------------------ */ $.fn.styleswitcher.set_checkbox_by_cookie = function(key) { var ss = $.fn.styleswitcher; var o = ss.options; var value = $().multi_cookie(o.cookie_name, key); if(value == 'true') ss.set_check(key, value); } /* Set Select Option by Cookie ------------------------------------------------------------ */ $.fn.styleswitcher.set_select_option_by_cookie = function(key) { var ss = $.fn.styleswitcher; var o = ss.options; var value = $().multi_cookie(o.cookie_name, key); if(value != null && value != '') ss.set_value(key, value); } /* Set Value ------------------------------------------------------------ */ $.fn.styleswitcher.set_value = function(id, value) { var o = $.fn.styleswitcher.options; $().multi_cookie(o.cookie_name, id, value); $(id).val(value).keyup(); } /* Set Checkbox ------------------------------------------------------------ */ $.fn.styleswitcher.set_check = function(id, value) { var o = $.fn.styleswitcher.options; $().multi_cookie(o.cookie_name, id, value); $(id).attr('checked', value).keyup(); } /* Get Filename From URL ------------------------------------------------------------ */ /* $.fn.styleswitcher.get_file_name_from_url = function(include_extension) { url = window.location; if(url) { if(include_extension) var m = url.toString().match(/.*\/(.+?)$/); else var m = url.toString().match(/.*\/(.+?)\./); if(m != null && m.length > 1) return m[1]; return ''; } return ''; } */ })(jQuery);