%PDF- %PDF-
Direktori : /home1/lightco1/www/plugins/system/jsnframework/assets/joomlashine/js/ |
Current File : //home1/lightco1/www/plugins/system/jsnframework/assets/joomlashine/js/visualdesignstyle.js |
define([ 'jquery', 'jquery.ui', 'jquery.tmpl', 'jquery.colorpicker', 'jquery.select2', 'jquery.gradientPicker', 'jquery.json'], function ($) { var JSNVisualDesignStyle = function (params) { this.params = params; this.lang = params.language; } JSNVisualDesignStyle.prototype = { createModalGenerateStyle:function (_this, options, valueDefault, buttons, title, width, height) { $(".jsn-block").removeClass("jsn-edit-state"); $(_this).parents(".jsn-block").addClass("jsn-edit-state"); var self = this; $("#jsn-block-container").remove(); var dialog = $("<div/>", { "id":"jsn-block-container" }).append( $("<div/>", { "class":"ui-dialog-content-inner jsn-bootstrap" }).append( $("<div/>", {"class":"form-horizontal"}).append(self.generate(options, valueDefault)) ) ); $("body").append(dialog); $(dialog).dialog({ height:height, width:width, title:title, draggable:false, resizable:false, autoOpen:true, modal:true, buttons:buttons }); $(dialog).next().find("button").attr("class", "ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"); self.registerEvent($(dialog)); }, generate:function (options, defaultValue) { var self = this; var tabs = $("<ul/>"), html = $("<div/>", {"class":"jsn-tabs"}).append($(tabs)); $.each(options, function (key, val) { $(tabs).append($("<li/>").append($("<a/>", {"href":"#" + key, "id":"tab_" + key, "text":val.title}))); var containerTabs = $("<div/>", {"id":key}), containerContent; if (val.tabContent) { containerContent = self.generateTabsStyle(val.tabContent, defaultValue); $.each(containerContent, function () { $(containerTabs).append(this); }); } if (val.subTabs) { var stabs = $("<ul/>"); var subtabs = $("<div/>", {"class":"jsn-tabs"}).append($(stabs)); $(containerTabs).append(subtabs); $.each(val.subTabs, function (skey, sval) { $(stabs).append($("<li/>").append($("<a/>", {"href":"#" + skey, "id":"tab_" + skey, "text":sval.title}))); var containerSubTabs = $("<div/>", {"id":skey}), containerContent = ""; if (sval.tabContent) { containerContent = self.generateTabsStyle(sval.tabContent, defaultValue); $.each(containerContent, function () { $(containerSubTabs).append(this); }); $(subtabs).append($(containerSubTabs)); } }); } $(html).append(containerTabs); }); return $(html); }, registerEvent:function (container) { var self = this; $(container).find(".jsn-select-color").each(function () { var inputParent = $(this).parent(); var selfColor = this; $(this).find("div").css("background-color", $(inputParent).find("input").val()); $(this).ColorPicker({ color:$(inputParent).find("input").val(), onChange:function (hsb, hex, rgb) { $(inputParent).find("input").val("#" + hex); $(inputParent).find("div.jsn-select-color div").css("background-color", "#" + hex); } }); }); $(container).find(".jsn-grad-ex").each(function () { var parentGradEx = $(this).parent(); var inputParent = $(parentGradEx).find("input.jsn-grad-ex"); var valuePicker = inputParent.val() ? inputParent.val() : '-moz-linear-gradient(-90deg, #ffffff 0%, #ffffff 100%)'; valuePicker = valuePicker.match(/\((.*?)\)/); valuePicker = valuePicker[1].split(','); var valueP = []; $.each(valuePicker, function (i, val) { if (val && val != "-90deg" && val != "left") { valueP.push($.trim(val)); } }); $(this).gradientPicker({ change:function (points, styles) { for (i = 0; i < styles.length; ++i) { inputParent.val(styles[i]); } }, fillDirection:"-90deg", controlPoints:valueP }); }); $(container).find(".jsn-fontFaceType").each(function () { self.changeFontFaceType($(this)); }); $(container).find(".jsn-fontFaceType").change(function () { self.changeFontFaceType($(this)); }); $(container).find(".jsn-tabs").tabs(); $(".jsn-backgroundType").change(function () { self.changeBackgroundType(); }).trigger("change"); }, generateTabsStyle:function (tabContent, values) { var self = this, container = []; $.each(tabContent, function () { if (this.type == "fieldset") { var fieldSetContents = $("<fieldset/>").append( $("<legend/>", {"text":this.title}) ); $.each(this.fieldsetContent, function (i, val) { var comboSubContent = $("<div/>", {"class":"controls clearafter"}); if (val && val.type && val.type == "comboContent") { $.each(val.content, function () { var attrClass = this.class ? this.class : ""; var attrId = this.id ? this.id : ""; if (this.type) { $(comboSubContent).append($("<div/>", {"class":"combo-item " + attrClass, "id":attrId}).append(self.createElementStyle(this, values[this.name]))); } }); $(fieldSetContents).append($("<div/>", {"class":"control-group combo-group"}).append($("<label/>", {"class":"control-label", "text":val.title})).append($(comboSubContent))).append('<div class="clearbreak"></div>'); } else if (val && val.type) { $(fieldSetContents).append($("<div/>", {"class":"control-group"}).append($("<label/>", {"class":"control-label", "text":val.label})).append($("<div/>", {"class":"controls"}).append(self.createElementStyle(this, values[this.name])))); } }); container.push(fieldSetContents); } }); return container; }, changeFontFaceType:function (_this) { var self = this; var divParent = $(_this).parents(".controls"); if ($(_this).val() == "standard fonts") { var listFontStandard = self.listFontFaceStandard(); $(divParent).find("select.jsn-fontFace").html(""); $.each(listFontStandard, function (i, val) { if (i == $(divParent).find("select.jsn-fontFace").attr("data-selected")) { $(divParent).find("select.jsn-fontFace").append( $("<option/>", {"selected":"selected", "value":i, "text":val, "class":"jsn-fontFace-" + i.toLowerCase().replace(/\ /g, "-")}) ) } else { $(divParent).find("select.jsn-fontFace").append( $("<option/>", {"value":i, "text":val, "class":"jsn-fontFace-" + i.toLowerCase().replace(/\ /g, "-")}) ) } }); } else if ($(_this).val() == "google fonts") { var listFontGoogle = self.listFontFaceGoogle(); $(divParent).find("select.jsn-fontFace").html(""); $.each(listFontGoogle, function (i, val) { if (i == $(divParent).find("select.jsn-fontFace").attr("data-selected")) { $(divParent).find("select.jsn-fontFace").append( $("<option/>", {"selected":"selected", "value":i, "text":val, "class":"jsn-fontFace-" + i.toLowerCase().replace(/\ /g, "-")}) ) } else { $(divParent).find("select.jsn-fontFace").append( $("<option/>", {"value":i, "text":val, "class":"jsn-fontFace-" + i.toLowerCase().replace(/\ /g, "-")}) ) } }); } $(divParent).find("select.jsn-fontFace").select2({ dropdownCssClass:'jsn-list-fontFace' }); $(divParent).find("select.jsn-fontFaceType").select2({ minimumResultsForSearch:99 }); }, changeBackgroundType:function () { $(".jsn-backgroundType").each(function () { var parents = $(this).parents(".control-group"), soildColor = $(parents).find(".jsn-soildColor"), gradientColor = $(parents).find(".jsn-gradientColor"); if ($(this).val() == "Solid") { $(soildColor).parents(".combo-item").show(); $(gradientColor).parents(".combo-item").hide(); } else { $(soildColor).parents(".combo-item").hide(); $(gradientColor).parents(".combo-item").show(); } }); }, createElementStyle:function (options, value) { var control = null; var element = $('<div/>'); var setAttributes = function (element, attrs) { var elm = $(element), field = elm.is(':input') ? elm : elm.find(':input'); field.attr(attrs); }; var templates = { 'checkbox':'<input type="checkbox" value="1" name="${options.name}" id="${id}" {{if value==1 || value == "1"}}checked{{/if}} />', 'radio':'<div class="form-inline">{{each(i, val) options.options}}<label for="${id}-${i}" class="radio"><input type="radio" class="jsn-m-radio" name="${options.name}" value="${i}" id="${id}-${i}" {{if value==val}}checked{{/if}} />${val}</label>{{/each}}</div>', 'gradient-color':'<input type="hidden" name="${options.name}" id="${id}" class="jsn-grad-ex" value="${value}"><div class="jsn-grad-ex"></div>', 'number-px':'<div class="input-append"><input type="number" id="${id}" class="jsn-input-number input-mini" name="${options.name}" value="${value}"><span class="add-on">px</span></div>', 'input-prepend':'<div class="input-prepend"><span title="${options.titlePrefix}" class="add-on">${options.prefix}</span><input type="${options.attType}" id="${id}" class="jsn-input-number input-mini" name="${options.name}" value="${value}"></div>', 'input-append':'<div class="input-prepend"><input type="${options.attType}" id="${id}" class="jsn-input-number input-mini" name="${options.name}" value="${value}"><span title="${options.titlePrefix}" class="add-on">${options.prefix}</span></div>', 'input-append-prepend':'<div class="input-prepend input-append"><span title="${options.titlePrefixTop}" class="add-on">${options.prefixTop}</span><input type="${options.attType}" id="${id}" class="jsn-input-number input-mini" name="${options.name}" value="${value}"><span title="${options.titlePrefixBottom}" class="add-on">${options.prefixBottom}</span></div>', 'number':'<input type="number" class="jsn-input-number input-mini" id="${id}" name="${options.name}" value="${value}">', 'text':'<input type="text" class="jsn-input-number" id="${id}" name="${options.name}" value="${value}">', 'textarea':'<textarea name="${options.name}" id="${id}" rows="3" class="textarea jsn-input-xxlarge-fluid">${value}</textarea>', 'select':'<select name="${options.name}" id="${id}" data-selected="${value}" class="select jsn-input-fluid">{{each(i, val) options.options}}<option value="${i}" {{if val==value || (typeof(i) == "string" && i==value)}}selected{{/if}}>${val}</option>{{/each}}</select>', 'color':'<input type="text" value="{{if value == ""}}#ffffff{{else}}${value}{{/if}}" name="${options.name}" class="jsn-input-fluid" id="${id}" /><div class="jsn-select-color"><div style="background: #ccccc;"></div></div>', 'spacing-top':'<div class="input-prepend input-append"><span title="${options.titlePrefix}" class="add-on"><i class="icon-arrow-up"></i></span><input type="number" id="${id}" class="jsn-input-number input-mini" name="${options.name}" value="${value}"><span class="add-on">px</span></div>', 'spacing-right':'<div class="input-prepend input-append"><span title="${options.titlePrefix}" class="add-on"><i class="icon-arrow-right"></i></span><input type="number" id="${id}" class="jsn-input-number input-mini" name="${options.name}" value="${value}"><span class="add-on">px</span></div> ', 'spacing-bottom':'<div class="input-prepend input-append"><span title="${options.titlePrefix}" class="add-on"><i class="icon-arrow-down"></i></span><input type="number" id="${id}" class="jsn-input-number input-mini" name="${options.name}" value="${value}"><span class="add-on">px</span></div>', 'spacing-left':'<div class="input-prepend input-append"><span title="${options.titlePrefix}" class="add-on"><i class="icon-arrow-left"></i></span><input type="number" id="${id}" class="jsn-input-number input-mini" name="${options.name}" value="${value}"><span class="add-on">px</span></div>' }; var elementId = 'option-' + options.name + '-' + options.type; if (templates[options.type] !== undefined) { if (!value) { value = options.value; } control = $.tmpl(templates[options.type], { options:options, value:value, id:elementId }); if ($.isPlainObject(options.attrs)) setAttributes(control, options.attrs); } return control; }, listFontFaceStandard:function () { var listFont = { "Verdana":"Verdana", "Georgia":"Georgia", "Courier New":"Courier New", "Arial":"Arial", "Tahoma":"Tahoma", "Trebuchet MS":"Trebuchet MS" } return listFont; }, listFontFaceGoogle:function () { var listFont = { "Open Sans":"Open Sans", "Oswald":"Oswald", "Droid Sans":"Droid Sans", "Lato":"Lato", "Open Sans Condensed":"Open Sans Condensed", "PT Sans":"PT Sans", "Ubuntu":"Ubuntu", "PT Sans Narrow":"PT Sans Narrow", "Yanone Kaffeesatz":"Yanone Kaffeesatz", "Roboto Condensed":"Roboto Condensed", "Source Sans Pro":"Source Sans Pro", "Nunito":"Nunito", "Francois One":"Francois One", "Roboto":"Roboto", "Raleway":"Raleway", "Arimo":"Arimo", "Cuprum":"Cuprum", "Play":"Play", "Dosis":"Dosis", "Abel":"Abel", "Droid Serif":"Droid Serif", "Arvo":"Arvo", "Lora":"Lora", "Rokkitt":"Rokkitt", "PT Serif":"PT Serif", "Bitter":"Bitter", "Merriweather":"Merriweather", "Vollkorn":"Vollkorn", "Cantata One":"Cantata One", "Kreon":"Kreon", "Josefin Slab":"Josefin Slab", "Playfair Display":"Playfair Display", "Bree Serif":"Bree Serif", "Crimson Text":"Crimson Text", "Old Standard TT":"Old Standard TT", "Sanchez":"Sanchez", "Crete Round":"Crete Round", "Cardo":"Cardo", "Noticia Text":"Noticia Text", "Judson":"Judson", "Lobster":"Lobster", "Unkempt":"Unkempt", "Changa One":"Changa One", "Special Elite":"Special Elite", "Chewy":"Chewy", "Comfortaa":"Comfortaa", "Boogaloo":"Boogaloo", "Fredoka One":"Fredoka One", "Luckiest Guy":"Luckiest Guy", "Cherry Cream Soda":"Cherry Cream Soda", "Lobster Two":"Lobster Two", "Righteous":"Righteous", "Squada One":"Squada One", "Black Ops One":"Black Ops One", "Happy Monkey":"Happy Monkey", "Passion One":"Passion One", "Nova Square":"Nova Square", "Metamorphous":"Metamorphous", "Poiret One":"Poiret One", "Bevan":"Bevan", "Shadows Into Light":"Shadows Into Light", "The Girl Next Door":"The Girl Next Door", "Coming Soon":"Coming Soon", "Dancing Script":"Dancing Script", "Pacifico":"Pacifico", "Crafty Girls":"Crafty Girls", "Calligraffitti":"Calligraffitti", "Rock Salt":"Rock Salt", "Amatic SC":"Amatic SC", "Leckerli One":"Leckerli One", "Tangerine":"Tangerine", "Reenie Beanie":"Reenie Beanie", "Satisfy":"Satisfy", "Gloria Hallelujah":"Gloria Hallelujah", "Permanent Marker":"Permanent Marker", "Covered By Your Grace":"Covered By Your Grace", "Walter Turncoat":"Walter Turncoat", "Patrick Hand":"Patrick Hand", "Schoolbell":"Schoolbell", "Indie Flower":"Indie Flower" } return listFont; }, generateStyleCombo:function (name, type, options) { var listStyle = {}; listStyle.comboDimension = { type:"comboContent", title:"Dimension", content:{ width:{ name:name + "_width", label:"", type:'input-append-prepend', prefixTop:'W', prefixBottom:'px', titlePrefixTop:'Width', attType:"number", attrs:{ 'class':'jsn-width input-mini' } }, height:{ name:name + "_height", label:"", type:'input-append-prepend', prefixTop:'H', prefixBottom:'px', titlePrefixTop:'Height', attType:"number", attrs:{ 'class':'jsn-height input-mini' } } } }; listStyle.comboContentBorder = { type:"comboContent", title:"Border", content:{ borderThickness:{ name:name + "_borderThickness", label:"", type:'number-px', attrs:{ 'class':'jsn-borderThickness input-mini' } }, borderStyle:{ type:'select', label:"", name:name + "_borderStyle", options:{ 'solid':'Solid', 'dotted':'Dotted', 'dashed':'Dashed', 'double':'Double', 'groove':'Groove', 'ridge':'Ridge', 'inset':'Inset', 'outset':'Outset' }, attrs:{ 'class':'jsn-borderStyle input-medium' } }, borderColor:{ name:name + "_borderColor", label:"", type:'color', attrs:{ class:"jsn-select-color jsn-borderColor input-small" } } } }; listStyle.comboContentBackground = { title:"Background Type", type:"comboContent", content:{ backgroundType:{ type:'select', label:"", name:name + "_backgroundType", options:{ 'Solid':'Solid Color', 'Gradient':'Gradient Color' }, attrs:{ 'class':'jsn-backgroundType jsn-input-fluid' } }, soildColor:{ name:name + "_soildColor", label:"", type:'color', attrs:{ class:"jsn-select-color jsn-soildColor input-small" } }, gradientColor:{ name:name + "_gradientColor", label:"", type:'gradient-color', attrs:{ 'class':'jsn-grad-ex jsn-gradientColor' } } } }; listStyle.comboContentShadow = { type:"comboContent", title:"Shadow", content:{ shadowSpread:{ name:name + "_shadowSpread", label:"", type:'number-px', attrs:{ class:"jsn-input-number input-mini" } }, shadowColor:{ name:name + "_shadowColor", label:"", type:'color', attrs:{ class:"jsn-select-color jsn-shadowColor input-mini" } } } }; listStyle.comboContentRadius = { name:name + "_roundedCornerRadius", label:"Rounded Corner Radius", type:'number-px', attrs:{ 'class':'jsn-roundedCornerRadius input-mini' } }; var spacingPosition = {'top':'top', 'right':'right', 'bottom':'bottom', 'left':'left'}; var spacingLeft = {}, spacingRight = {}, spacingTop = {}, spacingBottom = {}; if (options) { spacingPosition = options; } var j = 0; $.each(spacingPosition, function (i, val) { j++; var attrclass = ""; if (j == 3) { attrclass = "clearbreak"; } var spacingContent = {}; if (type == "comboMargin") { spacingContent = { name:name + "_margin" + val, label:"", type:'spacing-' + val, class:attrclass } } if (type == "comboPadding") { spacingContent = { name:name + "_padding" + val, label:"", type:'spacing-' + val, class:attrclass } } if (val == "left") { spacingLeft = spacingContent; spacingLeft.titlePrefix = "Left Padding"; } if (val == "right") { spacingRight = spacingContent; spacingRight.titlePrefix = "Right Padding"; } if (val == "bottom") { spacingBottom = spacingContent; spacingBottom.titlePrefix = "Bottom Padding"; } if (val == "top") { spacingTop = spacingContent; spacingTop.titlePrefix = "Top Padding"; } }); listStyle.comboPadding = { type:"comboContent", title:"Padding", content:{ spacingLeft:spacingLeft, spacingRight:spacingRight, spacingBottom:spacingBottom, spacingTop:spacingTop } } listStyle.comboMargin = { type:"comboContent", title:"Margin", content:{ spacingLeft:spacingLeft, spacingRight:spacingRight, spacingBottom:spacingBottom, spacingTop:spacingTop } } listStyle.comboContentFace = { type:"comboContent", title:"Font Face", content:{ fontFaceType:{ type:'select', label:"", name:name + "_fontFaceType", options:{ 'standard fonts':'Standard fonts', 'google fonts':'Google fonts' }, attrs:{ 'class':'jsn-fontFaceType input-medium' } }, fontFace:{ type:'select', label:"", name:name + "_fontFace", options:{ 'standard fonts':'Standard fonts', 'google fonts':'Google fonts' }, attrs:{ 'class':'jsn-fontFace input-medium', 'style':'width:250px' } } } }; listStyle.comboContentAttributes = { type:"comboContent", title:"Font Attributes", content:{ fontSize:{ name:name + "_fontSize", label:"", type:'number-px' }, fontStyle:{ type:'select', label:'', name:name + "_fontStyle", options:{ 'inherit':'Inherit', 'italic':'Italic', 'normal':'Normal', 'bold':'Bold' } }, fontColor:{ name:name + "_fontColor", label:"Font Color", type:'color', value:'#000000', attrs:{ class:"jsn-select-color jsn-fontColor input-small" } } } }; listStyle.comboContent = { type:"comboContent", title:"Border", content:{ borderThickness:{ name:name + "_sublevel1_bo_borderThickness", label:"", type:'number-px', attrs:{ 'class':'jsn-borderThickness input-mini' } }, borderStyle:{ type:'select', label:"", name:name + "_sublevel1_bo_borderStyle", options:{ 'solid':'Solid', 'dotted':'Dotted', 'dashed':'Dashed', 'double':'Double', 'groove':'Groove', 'ridge':'Ridge', 'inset':'Inset', 'outset':'Outset' }, attrs:{ 'class':'jsn-borderStyle input-medium' } }, borderColor:{ name:name + "_sublevel1_bo_borderColor", label:"", type:'color', attrs:{ class:"jsn-select-color jsn-borderColor input-small" } } } }; if (listStyle[type]) { return listStyle[type]; } }, getBoxStyle:function (element) { var style = { width:element.width(), height:element.height(), outerHeight:element.outerHeight(), outerWidth:element.outerWidth(), offset:element.offset(), margin:{ left:parseInt(element.css('margin-left')), right:parseInt(element.css('margin-right')), top:parseInt(element.css('margin-top')), bottom:parseInt(element.css('margin-bottom')) }, padding:{ left:parseInt(element.css('padding-left')), right:parseInt(element.css('padding-right')), top:parseInt(element.css('padding-top')), bottom:parseInt(element.css('padding-bottom')) } }; return style; } } return JSNVisualDesignStyle; })