<h2>Cytoplasm Settings</h2> <form id="site_settings_form" action="" method="post"> <p class="callback_message" id="success_message"></p> <p class="callback_message" id="status_message"></p> <p class="callback_message" id="error_message"></p> <table id="layout_settings_table" class='cytoTable' cellpadding=0 cellspacing=0> <tr><td class='headercell' colspan=2><h3>General</h3></td></tr> <tr> <td class='labelcell'>Layout Mode:</td> <td> <input type="radio" name="layout_mode" value="fluid" data-label="Fluid" class="cytoRadio" /> <input type="radio" name="layout_mode" value="boxed" data-label="Boxed" /> </td> </tr> <tr> <td class='labelcell'>Layout Padding:</td> <td><input type="hidden" name="layout_padding" class="cytoSlider" value="20" data-max="200" data-unit="px" data-label="Amount of padding for your content" /></td> </tr> <tr> <td class='labelcell'>jQuery-UI Theme:</td> <td> <select name="layout_jqueryui_theme" class="cytoSelect"> <option value="ui-lightness">UI lightness</option> <option value="ui-darkness">UI darkness</option> <option value="smoothness">Smoothness</option> <option value="start">Start</option> <option value="redmond">Redmond</option> <option value="sunny">Sunny</option> <option value="overcast">Overcast</option> <option value="le-frog">Le Frog</option> <option value="flick">Flick</option> <option value="pepper-grinder">Pepper Grinder</option> <option value="eggplant">Eggplant</option> <option value="dark-hive">Dark Hive</option> <option value="cupertino">Cupertino</option> <option value="south-street">South Street</option> <option value="blitzer">Blitzer</option> <option value="humanity">Humanity</option> <option value="hot-sneaks">Hot Sneaks</option> <option value="excite-bike">Excite Bike</option> <option value="vader">Vader</option> <option value="dot-luv">Dot Luv</option> <option value="mint-choc">Mint Choc</option> <option value="black-tie">Black Tie</option> <option value="trontastic">Trontastic</option> <option value="swanky-purse">Swanky Purse</option> </select> </td> </tr> <tr><td class='headercell' colspan=2><h3>Logo</h3></td></tr> <tr> <td class='labelcell'>Logo Image:</td> <td><input type="file" name="logo_image" class="cytoUpload" /></td> </tr> <tr> <td class='labelcell'>Logo Position:</td> <td> <input type="radio" name="logo_position" data-label="Badge" value="badge" class="cytoRadio" /> <input type="radio" name="logo_position" data-label="Inside NavBar" value="nav" /> <input type="radio" name="logo_position" data-label="Custom..." value="custom" /> <div id="logo_position_custom_settings"> <h4>Advanced Logo Settings</h4> <div class="inline-input"> <label for="logo_position_mode">Logo Position Mode:</label> <input type="radio" name="logo_position_mode" data-label="Static" value="static" class="cytoRadio" /> <input type="radio" name="logo_position_mode" data-label="Relative" value="relative" /> <input type="radio" name="logo_position_mode" data-label="Absolute" value="absolute" /> <input type="radio" name="logo_position_mode" data-label="Fixed" value="fixed" /> </div> <input type="hidden" name="logo_x_offset" class="cytoSlider" data-label="Logo X Offset" data-unit="px" /> <input type="hidden" name="logo_y_offset" class="cytoSlider" data-label="Logo Y Offset" data-unit="px" /> </div> </td> </tr> <tr> <td class='labelcell'>Logo Side:</td> <td> <input type="radio" name="logo_side" data-label="Left" value="left" class="cytoRadio" /> <input type="radio" name="logo_side" data-label="Center" value="center" /> <input type="radio" name="logo_side" data-label="Right" value="right" /> </td> </tr> <tr><td class='headercell' colspan=2><h3>Navigation</h3></td></tr> <tr> <td class='labelcell'>Alignment:</td> <td> <input type="radio" name="nav_side" data-label="Left" value="left" class="cytoRadio" /> <input type="radio" name="nav_side" data-label="Center" value="center" /> <input type="radio" name="nav_side" data-label="Right" value="right" /> </td> </tr> <tr> <td class='labelcell'>Background:</td> <td> <div class="inline-input"> <input type="radio" name="nav_background_mode" data-label="Transparent" value="transparent" class="cytoRadio" /> <input type="radio" name="nav_background_mode" data-label="Color..." value="color" /> <input type="radio" name="nav_background_mode" data-label="Gradient..." value="gradient" /> <input type="radio" name="nav_background_mode" data-label="Image..." value="image" /> </div> <div class="inline-input nav-mode-wrapper" data-mode="color"> <input type="colorpicker" name="nav_background_color" class="cytoColorPicker" /> </div> <div class="inline-input nav-mode-wrapper" data-mode="gradient"> <input type="colorpicker" name="nav_background_gradient_start" class="cytoColorPicker" /> <input type="colorpicker" name="nav_background_gradient_stop" class="cytoColorPicker" /> </div> <div class="inline-input nav-mode-wrapper" data-mode="image"> <input type="file" name="nav_background_file" class="cytoUpload" /> </div> </td> </tr> <tr><td class='headercell' colspan=2><h3>Fonts</h3></td></tr> <tr> <td class='labelcell'>Font Directory:</td> <td> <input type="radio" name="fonts_directory" data-label="Standard Web Fonts" value="standard" data-exclude="true" class="cytoRadio" /> <input type="radio" name="fonts_directory" data-label="Font Squirrel API" value="fontsquirrel" data-exclude="true" /> <input type="radio" name="fonts_directory" data-label="Google Web Fonts" value="googlewebfonts" data-exclude="true" /> </td> </tr> <tr> <td class='labelcell'>Font Family:</td> <td> <select name="fonts_family" id="fontfamilyselect" data-exclude="true" class="cytoSelect"></select> <button id="font_import_button" class="cytoButton large">Import Font Family</button> </td> </tr> <tr><td class='infocell' colspan=2>Select individual fonts below if desired.</td></tr> <% ['Light','Regular','Bold'].each do |style| %> <tr> <td class='labelcell'><%=style%>:</td> <td> <a href="#" target="_blank" class="font-preview"><img src="" style="display:none" /></a> <select data-exclude="true" name="fonts_<%=style.downcase%>_family" class="ind_font_fam_select cytoSelect"> <option value="Arial, Helvetica, sans-serif">Arial</option> <option value="Arial Black, Gadget, sans-serif">Arial Black</option> <option value="Comic Sans MS, cursive">Comic Sans MS</option> <option value="Courier New, monospace">Courier New</option> <option value="Georgia, serif">Georgia</option> <option value="Impact, Charcoal">Impact</option> <option value="Lucida Console, Monaco, monospace">Lucida Console</option> <option value="Lucida Sans Unicode, Lucida Grande, sans-serif">Lucida Sans Unicode</option> <option value="Palatino Linotype, Book Antiqua, Palatino, serif">Palatino Linotype</option> <option value="Tahoma, Geneva, sans-serif">Tahoma</option> <option value="Times New Roman, Times, serif">Times New Roman</option> <option value="Trebuchet MS, sans-serif">Trebuchet MS</option> <option value="Verdana, Geneva, sans-serif">Verdana</option> </select> <select name="fonts_<%=style.downcase%>" id="fontselect_<%=style.downcase%>" class="ind_font_select cytoSelect" data-style="<%=style%>"></select> </td> </tr> <% end %> <tr> <td class='labelcell'>Font Sizes:</td> <td> <input type="hidden" name="fonts_sizes_huge" class="cytoSlider" data-label="Huge" data-unit="px" /> </td> </tr> <tr><td class='headercell' colspan=2><h3>Color Palette</h3></td></tr> <% ['Background','Text','Accent'].each do |color| %> <tr> <td class='labelcell'><%=color%> Color:</td> <td><input type="colorpicker" name="colors_<%=color.downcase%>" class="cytoColorPicker" /></td> </tr> <% end %> <tr><td class='headercell' colspan=2><h3>Table Settings</h3></td></tr> <tr> <td class='labelcell'>Background Colors:</td> <td> <input type="hidden" name="colors_table_background_offset" class="cytoSlider" data-label="Background Offset" data-unit="%" data-min=-100 data-max=100 /> <input type="hidden" name="colors_table_opacity_offset" class="cytoSlider" data-label="Table Opacity" data-unit="%" /> <input type="hidden" name="colors_table_border_offset" class="cytoSlider" data-min=-100 data-max=100 data-label="Border Offset" data-unit="%" /> </td> </tr> <tr> <td class='labelcell'>Button Settings:</td> <td> <input type="hidden" name="button_gradient_amount" class="cytoSlider" data-label="Gradient Amount" data-unit="%" /> <input type="hidden" name="button_border_offset" class="cytoSlider" data-label="Border Offset" data-unit="%" data-min=-100 data-max=100 /> </td> </tr> <tr><td colspan=2><button class="cytoButton large">Save Settings</button></td></tr> </table> </form> <script type="text/javascript"> (function($){ $.Cytoplasm("ready",function(){ // Get data about what we're editing from PHP var _editing = "<%=params[:editing]%>"; // Layout // Layout Mode $('input[name=layout_mode]').cytoRadio("value",$.Cytoplasm("vars","layout.mode")); // Main Content Padding $('input[name=layout_padding]').cytoSlider("options",{widget:{slider:{options:{change:function(e,ui){ $('#main_content').css("padding",$(this).slider("value")); setTimeout(function(){$(window).trigger("resize");},1000); }}}}}); // jQuery UI Theme $('select[name=layout_jqueryui_theme]').cytoSelect("value",$.Cytoplasm("conf","jqueryui.theme")); // Logo // Logo Position var top; var custom_settings = $('#logo_position_custom_settings').hide().children('h4:first-child').css({margin:"10px 0px",padding:0}).end(); $('input[name=logo_position]').cytoRadio("options",{ events:{ change:function(e){ switch ($(this).cytoRadio("value")) { case "badge": top = 10; if (custom_settings.is(':visible')) custom_settings.hide(400); break; case "nav": top = -66; if (custom_settings.is(':visible')) custom_settings.hide(400); break; case "custom": custom_settings.show(400,function(){$('input[name=logo_position_mode]').cytoRadio("refresh");}); break; default:return false; } $('#logo').css({top:top}); } } }).cytoRadio("value",$.Cytoplasm("vars","layout.header.logo.position")); $('input[name=logo_position_mode]').cytoRadio("options",{events:{change:function(e){$('#logo').css('position',$(this).cytoRadio('value'));}}}).cytoRadio("value",$.Cytoplasm("vars","layout.header.logo.position")); $('input[name=logo_x_offset]').cytoSlider("value",$.Cytoplasm("vars","layout.header.logo.x")); $('input[name=logo_y_offset]').cytoSlider("value",$.Cytoplasm("vars","layout.header.logo.y")); // Logo Side $('input[name=logo_side]').cytoRadio("options",{ events:{ change:function(e){ switch ($(this).cytoRadio("value")) { case "left": $('#logo').css({left:10,right:''}); break; case "center": $('#logo').css({left:($(window).width()/2)-($('#logo').width()/2),right:''}); break; case "right": $('#logo').css({right:10,left:''}); break; default:return false; } } } }).cytoRadio("value",$.Cytoplasm("vars","layout.header.logo.align")); // Offset sliders $('input[name=logo_x_offset]').cytoSlider("options",{ widget:{ slider:{ options:{ min:-($(window).width()-$('#logo').outerWidth(true)), max:($(window).width()-$('#logo').outerWidth(true)) } } }, events:{ change:function(e){ var side = $('input[name=logo_side]').cytoRadio("value"); var invert = (side == "right") ? -1 : 1; $('#logo').css(side,parseInt($(this).val())*invert); } } }); $('input[name=logo_y_offset]').cytoSlider("options",{ widget:{ slider:{ options:{ min:-($(window).height()-$('#logo').outerHeight(true)), max:($(window).height()-$('#logo').outerHeight(true)) } } }, events:{change:function(e){$('#logo').css("top",$(this).val());}} }); // Nav // Nav Side $('input[name=nav_side]').cytoRadio("options",{events:{change:function(e){$('header > nav > ul').css("text-align",$(this).cytoRadio("value"));}}}).cytoRadio("value",$.Cytoplasm("vars","layout.header.nav.align")); // Nav Background $('input[name=nav_background_mode]').cytoRadio("options",{ events:{ change:function(e){ var $this = $(this); var showIt = function(){$(".nav-mode-wrapper[data-mode='"+$this.cytoRadio("value")+"']").show(400,function(){$(this).find('input[type=colorpicker]').cytoColorPicker("resize");});}; if ($('.nav-mode-wrapper:visible').length) $('.nav-mode-wrapper:visible').hide(400,showIt); else showIt(); } } }).cytoRadio("value",$.Cytoplasm("vars","layout.header.nav.background")); $('input[name=nav_background_color],input[name=nav_background_gradient_start],input[name=nav_background_gradient_stop]').cytoColorPicker("options",{widget:{wrapper:{css:{'margin-top':10}}}}); $('input[name=nav_background_color]').cytoColorPicker("value",$.Cytoplasm("vars","layout.header.nav.background")); // Fetch fonts $.cytoAjax("/cytoplasm/fonts/fetch_all",function(data){ console.log(data); // Directory select var fds = $('input[name=fonts_directory]'); var ffs = $('#fontfamilyselect'); var iffs = $('.ind_font_fam_select'); var ifs = $('.ind_font_select'); /* // Fetch family details $.cytoAjax("settings/fs_fetch_family.php",{family:f.family_urlname},function(data){ ifs.each(function(){ var select = $(this); // Populate list var fam = {}; $.each(data.family,function(i,member){ fam[member.fontface_name] = member; select.append($('<option />').val(member.fontface_name).html(member.fontface_name+" ("+member.style_name+")")); }); // Try to select defaults var font = _page.less["fonts_"+select.data('style').toLowerCase()] if (font.charAt(0)=='"') font = font.slice(1,-1); if (fam[font] != null) select.val(font); else $.each(fam,function(ffname,member){ if (member.style_name.indexOf(select.data('style'))>-1 || member.style_name.indexOf(select.data('style').toLowerCase())>-1) { select.val(ffname); return false; } }); // Set preview image and refresh cytoSelect select.parent().siblings('a.font-preview').css({background:'white',display:'block',width:"100%","text-align":"center","padding-top":5,"border-top-left-radius":5,"border-top-right-radius":5,"box-shadow":"0px 0px 10px rgba(0,0,0,0.5)"}).children('img').attr("src",fam[select.val()].listing_image).show(); select.cytoSelect("refresh").data('font',fam[select.val()]); }); }); */ fds.cytoRadio("value",$.Cytoplasm("conf","fontloader.directory")).cytoRadio("options",{ events:{ change:$.debounce(100,true,function(e){ var fonts = {}; var imported = {}; switch ($(this).cytoRadio("value")) { case "fontsquirrel": if (!$('#font_import_button').is(':visible')) $('#font_import_button').show(400); var importedFamily = {}; $.each(data.fontsquirrel,function(fam,f){fonts[fam] = f.family_name;}); if (data.imported.length>0) { $.each(data.imported,function(fam,f){imported[fam] = fam;}); iffs.cytoSelect("update",imported); } break; case "googlewebfonts": if ($('#font_import_button').is(':visible')) $('#font_import_button').hide(400); $.each(data.googlewebfonts,function(fam,f){fonts[fam] = fam;}); break; default:return false; } ffs.cytoSelect("update",fonts); }) } }); ffs.cytoSelect("options",{ events:{ change:function(cy,e){ var dir = fds.cytoRadio("value"); var f = data[dir][$(this).cytoSelect("value")]; if (f!=null) switch (dir) { case "fontsquirrel": // Check if font has already been imported if (data.imported.length>0 && data.imported[f.family_urlname] != null) $('#font_import_button').addClass('active').html("Font Family Imported"); else $('#font_import_button').removeClass('active').html("Import Font Family"); break; case "googlewebfonts": break; } } } }); // Font Import Button $('#font_import_button').css({"margin-top":10}).click(function(e){ e.preventDefault(); var $this = $(this); var f = data[fds.cytoRadio("value")][ffs.cytoSelect("value")]; if (!$this.hasClass('active')) { // Import font $.cytoAjax("settings/fs_import.php",{family:f},function(data){ $.cytoAjaxResponse('Font "'+f.family_name+'" has been imported successfully.<br /><a href="#" onClick="window.location.reload();">You must reload to apply these changes.</a>'); $this.addClass('active').html("Font Family Imported"); }); } else { // Remove font if (confirm("Are you sure you want to remove this font from your fonts library?")) $.cytoAjax("settings/fs_remove.php",{family:f},function(data){ $.cytoAjaxResponse('Font "'+f.family_name+'" has been removed successfully.<br /><a href="#" onClick="window.location.reload();">You must reload to apply these changes.</a>'); $this.removeClass('active').html("Import Font Family"); }); } }); // Individual font selects $('.font-preview').css({background:'white',display:'block',width:"100%","text-align":"center","padding-top":5,"border-top-left-radius":5,"border-top-right-radius":5,"box-shadow":"0px 0px 10px rgba(0,0,0,0.5)"}); iffs.cytoSelect("options",{ widget:{ valueButton:{ css:{ 'border-top-left-radius':0, 'border-bottom-left-radius':0 } }, arrowButton:{ css:{ 'border-top-right-radius':0, 'border-bottom-right-radius':0 } } }, events:{ change:function(cy,e){ if (data.imported[$(this).cytoSelect("value")] == undefined) return; var subsets = {}; var fs = $('select[name="'+$(this).attr('name').split("_").slice(0,-1).join("_")+'"]'); $.each(data.imported[$(this).cytoSelect("value")],function(i,f){subsets[f.fontface_name] = f.fontface_name;}); fs.cytoSelect("update",subsets).cytoSelect("value",$.Cytoplasm("vars","fonts.faces."+fs.data('style').toLowerCase())); } } }); ifs.cytoSelect("options",{ widget:{ valueButton:{css:{'border-top-left-radius':0}}, arrowButton:{css:{'border-top-right-radius':0}}, optionsList:{ li:{ hover:function(cy,e){ var $this = cy.widget.wrapper.element.children('select.cytoSelect'); var fs = $('select[name="'+$this.attr('name')+'_family"]'); $(this).css({background:$.Cytoplasm("vars","colors.global.accent")}); if (data.imported.length>0) { var font = data.imported[fs.cytoSelect("value")][$this.cytoSelect("value")]; cy.widget.wrapper.element.siblings('a.font-preview').attr('href',"http://www.fontsquirrel.com/fonts/"+font.family_urlname).children('img').attr("src",font.listing_image).show(); } else { } } } } }, events:{ change:function(cy,e){ var fs = $('select[name="'+$(this).attr('name')+'_family"]'); if (data.imported>0) { var font = data.imported[fs.cytoSelect("value")][$(this).cytoSelect("value")]; cy.widget.wrapper.element.siblings('a.font-preview').attr('href',"http://www.fontsquirrel.com/fonts/"+font.family_urlname).children('img').attr("src",font.listing_image).show(); } else { } } } }); }); // Font size sliders $.each(['fonts_small','fonts_normal','fonts_huge'],function(i,prop){$('input[name='+prop+']').cytoSlider("options",{events:{change:function(cy){cy.widget.label.element.css("font-size",$(this).val());}}});}); // Color Pickers var colorTweak = function(color,h,s,l,a) { if (color==null || h==null) return color; if (s==null) s=0; if (l==null) l=0; if (a==null) a=1; color = color.hue(color.hue()+h).saturation(color.saturation()+s).lightness(color.lightness()+l).alpha(a); return color.toHslaString(); }; var percentToDecimal = function(percent) {return parseInt(percent)/100;}; var layoutColorUpdate = function() { var color = $('input[name=colors_background]').val(); try { color = $.Color(color); var l = (color.lightness!=null) ? parseFloat(color.lightness()) : 0; $('body').css({ "background-color":color, color:$('input[name=colors_text]').val() }); $('.formTable td').css({ "background-color":colorTweak(color,0,0,percentToDecimal($('input[name=colors_table_background_offset]').val()),percentToDecimal($('input[name=colors_table_opacity_offset]').val())), "border-color":colorTweak(color,0,0,percentToDecimal($('input[name=colors_table_border_offset]').val())) }); /*$('button').css({ "border-color":"1px solid "+((l<0.5)?colorTweak(color,0,0,percentToDecimal($('input[name=button_border_offset]').val())):"#333333"), "background":"linear-gradient(to bottom,"+colorTweak(color,0,0,percentToDecimal($('input[name=button_gradient_amount]').val()))+" 0%,"+colorTweak(color,0,0,-percentToDecimal($('input[name=button_gradient_amount]').val()))+" 100%) no-repeat scroll 0 0 transparent", "color":((l<0.5)?"white":"black") });*/ } catch (e) { console.warn("There was an error updating the layout! "+e); return false; } }; $('input[name=colors_background]').cytoColorPicker("value",$.Cytoplasm("vars","colors.global.background")); $('input[type=colorpicker]').cytoColorPicker("options",{events:{change:layoutColorUpdate}}); // Set up sliders $.each(['colors_table_background_offset','colors_table_opacity_offset','colors_table_border_offset','button_gradient_amount','button_border_offset'],function(i,prop){$('input[name="'+prop+'"]').cytoSlider("options",{events:{change:layoutColorUpdate}});}); // Form Submission $('#site_settings_form').submit(function(e){ e.preventDefault(); $.cytoAjax("settings/save_layout.php",{form:$(':input:not([data-exclude=true])',this).serializeArray()},function(data){ $.cytoAjaxResponse("Your settings were saved successfully.<br /><a href='dash'>Return to dashboard</a>"); }); }); }); })(jQuery); </script>