');
effectItem.find('.label').append(arrow);
effectItem.find('.label').append(enabledCheckbox);
effectItem.find('.label').append(label);
effectItem.find('.label').append(closeButton);
effectItem.append(effectParams);
effectParams.hide();
if(effectSettings.enabled){
enabledCheckbox.attr('checked', 'true');
}
effectsModal.prepend(effectItem);
var paramObj=[];
paramObj.field=effectDefinition;
paramObj.settings=effectSettings;
paramObj.target=effectParams;
paramObj.type='extrafields';
label.click(function (e){
if(effectParams.is(':visible')){
arrow.animateRotate(0);
}else{
arrow.animateRotate(90);
}
e.preventDefault();
effectParams.slideToggle();
});
arrow.click(function (e){
if(effectParams.is(':visible')){
arrow.animateRotate(0);
}else{
arrow.animateRotate(90);
}
e.preventDefault();
effectParams.slideToggle();
});
closeButton.click(function (e){
e.preventDefault();
self.removeEffect(effectSettings.uniqueId, effectItem);
});
enabledCheckbox.click(function (e){
if($(this).is(':checked')){
self.enableEffect(effectSettings.uniqueId, effectItem);
}else{
self.disableEffect(effectSettings.uniqueId, effectItem);
}});
self.addSettingsField(paramObj, loadDefaults);
effectItem.data('settings', effectSettings);
return effectItem;
};
self.getEffectDefinitionByName=function (effectId){
if(!self.effects) return false;
for (var i=0; i < self.effects.length; i++){
var effect=self.effects[i];
if(effect.settingName===effectId){
return effect;
}}
return false;
};
self.getStyleDefinitionByName=function (styleId){
if(!self.styles) return false;
for (var i=0; i < self.styles.length; i++){
var style=self.styles[i];
if(style.settingName===styleId){
return style;
}}
return false;
};
self.enableEffect=function (effectId, $effectItem){
if(!self.currentPreset.effects) return false;
var effect=self.getElementsEffect(effectId);
effect.enabled=1;
if(self.effectSliders[effectId]){
self.effectSliders[effectId].show();
}
self.updateTextShadowEffects(self.currentElement);
};
self.disableEffect=function (effectId, $effectItem){
if(!self.currentPreset.effects) return false;
var effect=self.getElementsEffect(effectId);
effect.enabled=0;
self.removeShadowEffect(effectId);
if(self.effectSliders[effectId]){
self.effectSliders[effectId].hide();
}};
self.removeEffect=function (effectId, $effectItem){
if(!confirm('Remove the effect?')) return;
if(!self.currentPreset.effects) return false;
for (var i=0; i < self.currentPreset.effects.length; i++){
var effect=self.currentPreset.effects[i];
if(effect.uniqueId===effectId){
self.currentPreset.effects.splice(i, 1);
}}
self.removeShadowEffect(effectId);
if(self.effectSliders[effectId]){
self.effectSliders[effectId].remove();
}
$effectItem.remove();
};
self.getElementsEffect=function (effectId){
if(!self.currentPreset.effects) return false;
for (var i=0; i < self.currentPreset.effects.length; i++){
var effect=self.currentPreset.effects[i];
if(effect.uniqueId===effectId){
return effect;
}}
};
self.drawEffects=function (options){
if(!self.shadowSupport) return false;
var depth=options.distance / 10,
subjectColor=options.target.css('color'),
color=options.color,
subjectColorRgb=self.parseRgb(subjectColor),
rColor=subjectColorRgb.r,
gColor=subjectColorRgb.g,
bColor=subjectColorRgb.b,
i=0,
j=0,
speed=i,
xDist=0,
yDist=0,
effect=self.getElementsEffect(options.effectId),
angle=options.deg;
if(color){
var colorRgb=self.html2rgb(color.replace('#', ''));
}else{
colorRgb=subjectColorRgb;
}
if(angle===undefined){
angle=290;
}
effect.calculated='';
for (i=0; i < options.effectsList.length; i++){
depth=options.distance / 10;
var effectName=options.effectsList[i];
switch (effectName){
case 'textShadow':
effect.calculated +=options.completeValue;
break;
case 'stroke':
var spread=2;
if(options.spread){
spread=options.spread;
}
if(options.distance > 4){
effect.calculated +=options.distance + 'px ' + options.distance + 'px ' + spread + 'px ' + color + ', ';
effect.calculated +=-options.distance + 'px ' + options.distance + 'px ' + spread + 'px ' + color + ', ';
effect.calculated +=options.distance + 'px ' + -options.distance + 'px ' + spread + 'px ' + color + ', ';
effect.calculated +=-options.distance + 'px ' + -options.distance + 'px ' + spread + 'px ' + color + ', ';
effect.calculated +=options.distance + 'px 0px ' + spread + 'px ' + color + ', ';
effect.calculated +=-options.distance + 'px 0px ' + spread + 'px ' + color + ', ';
effect.calculated +='0px ' + options.distance + 'px ' + spread + 'px ' + color + ', ';
effect.calculated +='0px ' + -options.distance + 'px ' + spread + 'px ' + color + ', ';
}else{
effect.calculated +=options.distance + 'px ' + options.distance + 'px ' + spread + 'px ' + color + ', ';
effect.calculated +=-options.distance + 'px ' + options.distance + 'px ' + spread + 'px ' + color + ', ';
effect.calculated +=options.distance + 'px ' + -options.distance + 'px ' + spread + 'px ' + color + ', ';
effect.calculated +=-options.distance + 'px ' + -options.distance + 'px ' + spread + 'px ' + color + ', ';
}
case 'extrude3d':
rColor=colorRgb.r;
gColor=colorRgb.g;
bColor=colorRgb.b;
rColor=rColor / 100 * 80,
gColor=gColor / 100 * 80,
bColor=bColor / 100 * 80;
for (j=0; j < depth; j++){
speed=1.2;
xDist +=speed * Math.sin(angle * Math.PI / 180);
yDist +=speed * -Math.cos(angle * Math.PI / 180);
xDist=xDist;
yDist=yDist;
var percentageDone=j / depth;
var light=10 - percentageDone * 10;
rColor=Math.floor(rColor / 100 * 91 + light);
gColor=Math.floor(gColor / 100 * 91 + light);
bColor=Math.floor(bColor / 100 * 91 + light);
color='rgb(' + rColor + ', ' + gColor + ', ' + bColor + ')';
effect.calculated +=xDist.toFixed(2) + 'px ' + yDist.toFixed(2) + 'px ' + 0.3 + 'px ' + color + ', ';
}
break;
case 'shadow3d':
rColor=colorRgb.r;
gColor=colorRgb.g;
bColor=colorRgb.b;
for (j=0; j < depth; j++){
if(j > 3&&i % 3) continue;
speed=6;
xDist +=speed * Math.sin(angle * Math.PI / 180);
yDist +=speed * -Math.cos(angle * Math.PI / 180);
xDist=xDist;
yDist=yDist;
rColor=Math.floor(rColor / 90 * 100);
gColor=Math.floor(gColor / 90 * 100);
bColor=Math.floor(bColor / 90 * 100);
var opacity=options.opacity;
if(!opacity) opacity=0.3;
color='rgba(' + rColor + ', ' + gColor + ', ' + bColor + ', ' + opacity + ')';
effect.calculated +=xDist.toFixed(2) + 'px ' + yDist.toFixed(2) + 'px ' + ((j + 1) * 2) + 'px ' + color + ', ';
}
break;
}}
effect.calculated=effect.calculated.replace(/, +$/, '');
self.updateTextShadowEffects(options.target);
};
self.removeShadowEffect=function (effectId){
delete self.currentPreset.shadowEffects[effectId];
self.updateTextShadowEffects(self.currentElement);
};
self.updateTextShadowEffects=function (subject){
var allShadows='';
for (var i=0; i < self.currentPreset.effects.length; i++){
var effect=self.currentPreset.effects[i];
if(effect.calculated&&effect.enabled){
if(allShadows) allShadows +=', ';
allShadows +=effect.calculated;
}}
if(allShadows===''){
allShadows='none';
}
subject.each(function (){
$(this).style('textShadow', allShadows, 'important');
});
self.updateCssSettings('text-shadow', allShadows);
};
self.createPreset=function (presetName, selector){
var property,
newPreset,
newPresetId;
if(selector===undefined||!selector){
selector='PICK AN ELEMENT NOW - or type CSS selector(advanced)';
}
newPreset={};
newPreset.name=presetName;
newPreset.selector=selector;
newPreset.fontid='';
newPreset.fontName='';
newPreset.effects=[];
newPreset.styles={};
for (property in newPreset.styles){
newPreset.styles[property]='';
}
newPresetId=self.options.presets.push(newPreset) - 1;
self.$presetsDropdown.append('
' + presetName + ' ');
self.loadPreset(newPresetId);
};
self.renamePreset=function (){
var currPresetOption=self.$presetsDropdown.find('option[value=' + self.currentPresetNo + ']'),
presetName=prompt('New preset name i.e. paragraph', currPresetOption.text()),
property;
if(!presetName){
return;
}
self.$presetsDropdown.find('option[value=' + self.currentPresetNo + ']').text(presetName);
self.currentPreset.name=presetName;
};
self.deletePreset=function (presetNo, silent){
if(silent===undefined){
if(!confirm("Are you sure you want to delete this preset?")){
return false;
}}
if(self.options.presets.length===1){
alert('At least one preset has to be present');
return;
}
if(silent===undefined){
self.unhighlightCurrent();
}
self.options.presets.splice(presetNo, 1);
self.$presetsDropdown.find('option[value=' + presetNo + ']').remove();
self.$presetsDropdown.html('');
for (var i=0; i < self.options.presets.length; i +=1){
var preset=self.options.presets[i],
presetName=self.options.presets[i].name,
presetId=i;
if(preset.selector.indexOf('ELEMENT NOW')===-1&&preset.selector.indexOf('PICK ELEMENT')===-1){
$(preset.selector).data('wired', false);
}
self.$presetsDropdown.append('
' + presetName + ' ');
}
if(silent===undefined){
self.outlineAllPresets();
alert('When resetting settings or deleting preset you have to save to see the change');
self.loadPreset(0);
}else if(self.options.presets&&self.options.presets[1]){
self.loadPreset(1);
}else{
self.loadPreset(0);
}};
self.deleteCurrentPreset=function (){
self.deletePreset(self.currentPresetNo);
};
self.reloadPreset=function (){
self.loadPreset(self.currentPresetNo);
};
self.loadPreset=function (presetNo){
var preset;
presetNo=parseInt(presetNo, 10);
var preset=self.options.presets[presetNo];
self.unloadPreset();
if(!preset){
return;
}
if(self.mode==='postPage') return;
if(presetNo===0){
self.$apr.hide();
}else{
self.$apr.show();
}
if(self.options.presets.length==1){
self.settingFields.presets.hide();
self.$selectorPicker2.hide();
}else{
self.settingFields.presets.show();
self.$selectorPicker2.show();
}
self.unloadCurrentElementEffects();
self.currentPresetNo=presetNo;
self.currentPreset=preset;
if(self.currentPreset.selector.indexOf('ELEMENT NOW')!==-1||self.currentPreset.selector.indexOf('PICK ELEMENT')!==-1){
self.currentElement=false;
}else{
self.currentElement=$(self.currentPreset.selector);
}
self.currentPreset.shadowEffects=[];
self.$presetsDropdown.val(presetNo);
self.populateStyles(preset);
self.highlightCurrent();
self.loadEffectSettings();
self.loadFontPreview();
};
self.populateStyles=function (preset){
var property,
found;
for (property in preset){
found=$('body').find('input[title=' + property + ']');
if(found.length){
found.val(preset[property]);
found.trigger('change');
}}
for (property in preset.styles){
found=$('body').find('input[title=' + property + ']');
if(found.length){
found.val(preset.styles[property]);
found.trigger('change');
}}
};
self.unloadPreset=function (){
var $field,
$input,
$dropdown,
key;
for (key in self.settingFields){
$dropdown=[];
$field=self.settingFields[key];
if(!$field||!($field instanceof $)){
continue;
}
$input=$field.find('input');
$input.val('');
$dropdown=$field.find('select');
if($dropdown.length){
$dropdown.val('');
$input.hide();
}}
};
self.loadFontPreview=function (){
var preset=self.currentPreset,
imageUrl='',
originalBg=$('#fontfaceSettings').data('originalBackground');
if(preset['fontid']&&preset['fontName']){
if(!originalBg){
$('#fontfaceSettings').data('originalBackground', $('#fontfaceSettings').css('backgroundImage'));
}
imageUrl=self.options.FFW_baseUrl + '/public/fonts/' + preset['fontid'] + '/' + preset['fontName'] + '.png';
$('#fontfaceSettings').css({'backgroundImage': 'url(' + imageUrl + ')'});
}else if(originalBg){
$('#fontfaceSettings').css({'backgroundImage': $('#fontfaceSettings').data('originalBackground')});
}}
self.createFontPanel=function (){
var i;
var iframe='
';
self.$el.show();
self.$el.append($('
'));
self.$el.append('
');
self.$el.append('
');
self.$el.append('
');
self.$el.append('
' + iframe + '
');
self.$el.find('.tab').hide();
self.$el.find('.tab').eq(0).show();
self.$el.find('.tablink').on('click', function (e){
var target,
tab;
e.preventDefault();
self.$el.find('.tab').hide();
target=$(this).attr('href');
tab=self.$el.find('#' + target).show();
if(target==='uploaded'){
self.loadPrivateFonts();
}
return false;
});
self.$el.css('left', '0')
.draggable({
handle: self.$el.find('.draggableModalBar')
});
$('body').on('mousedown', '.draggableModal', function (){
self.modalToTop(this);
});
self.$el.find('a.closeModal').on('click', function (){
self.$el.hide();
return false;
});
};
self.showFontsBrowser=function (){
if(!this.fontInitialized){
self.createFontPanel();
self.loadFontCategories();
this.fontInitialized=true;
}else{
self.$el.toggle();
}
self.modalToTop(self.$el);
};
self.initCarousel=function (){
var carousel=self.$el.find('#FFW_browser_carousel').fcarousel({
buttonNextHTML: '
',
buttonPrevHTML: '
',
animation: 1000,
scroll: 2
});
};
self.loadFontCategories=function (){
self.xhrPost({
url: self.options.FFW_baseUrl + '/fontcategories/fontplugininit',
data: {
apikey: self.options.apikey,
blogurl: fontBlogUrl,
ver: self.version
},
format: 'html'
},
function (data){
if(!data||data===''){
self.$el.html('
An error has occurde Please try again later
');
}
self.$el.find('#loading').remove();
self.$el.find('#fontslist').html(data);
self.$el.find('a.close_link').on('click', function (){
self.$el.toggle();
});
self.initCarousel();
});
};
self.bindShowCategoriesAction=function (){
$('body').on('click', self.baseSelector + ' #categoriesList > ul li a.categoryChoose', function (){
var categoryId=$(this).attr('name');
self.$el.find('#subcategoriesList li').hide();
self.$el.find('#subcategoriesList li.instructions').show();
self.$el.find('#subcategoriesList li#FFW_parentcategory_' + categoryId).show();
self.$el.find('.fcarousel-next').click();
return false;
});
};
self.bindShowFontsAction=function (){
$('body').on('click', self.baseSelector + ' #subcategoriesList > ul li a.categoryChoose', function (){
var categoryId=$(this).attr('name');
self.xhrPost({
url: self.options.FFW_baseUrl + '/fontcategories/wpfontsforwebcategoryfonts/catid/' + categoryId,
data: {
apikey: self.options.apikey,
blogurl: fontBlogUrl
},
format: 'html'
},
function (data){
if(!data||data===''){
self.$el.html('
An error has occurde Please reload page and try again later
');
}
self.$el.find('#fontList').html(data);
self.$el.find('.fcarousel-next').click();
});
return false;
});
$('body').on('click', self.baseSelector + ' #uploaded a.delete', function (){
if(!confirm("Are you sure you want to delete this font?")){
return false;
}
var fontId=$(this).attr('name');
self.xhrPost({
url: self.options.FFW_baseUrl + '/api',
data: {
action: 'deletefont',
apikey: self.options.apikey,
blogurl: fontBlogUrl,
fontid: fontId
}}, function (data){
if(data.success==='true'){
self.loadPrivateFonts();
}else{
alert('Font deleting error.');
$('.fontUploadForm').show();
$('.fontUploading').hide();
}});
return false;
});
};
self.setFontOnclick=function (){
var selector;
$('body').on('click', self.baseSelector + ' #fontList a.font_pick, ' + self.baseSelector + ' .fontsList a.font_pick', function (){
var element,
fontName=$(this).parent().attr('title'),
selector;
if(self.mode==='postPage'){
self.setTinyMCEFont($(this).attr('name'), fontName);
return false;
}else{
selector=self.currentPreset.selector;
if(selector.indexOf('ELEMENT NOW')!=-1||selector.indexOf('PICK ELEMENT')!=-1){
return;
}
self.currentPreset.fontid=$(this).attr('name');
self.currentPreset.fontName=fontName;
if($("#header1preview").length){
element=$("#header1preview").contents().find();
self.applyFont(element);
}else{
self.applyFont();
}
self.loadFontPreview();
return false;
}});
};
self.applyFont=function (frame){
var element,
elements,
fontName=self.currentPreset.fontName,
selector=self.currentPreset.selector,
head,
linkElement;
if(frame===undefined){
element=$(document);
head=document.getElementsByTagName('head')[0];
}else{
element=frame;
head=element[0].getElementsByTagName('head')[0];
}
linkElement=$(document.createElement('link'));
linkElement.attr({
href: self.options.FFW_baseUrl + '/font/generatepreviewcss/?id=' + self.currentPreset.fontid,
rel: 'stylesheet',
type: 'text/css'
});
linkElement.appendTo(head);
elements=element.find(selector);
elements.each(function (){
$(this).style("font-family", fontName, 'important');
});
}
self.loadPrivateFonts=function (){
var apikey=self.options.apikey||false;
self.xhrPost({
url: self.options.FFW_baseUrl + '/font/getuserfonts',
data: {
apikey: apikey,
blogurl: fontBlogUrl,
blogname: fontBlogName
},
format: 'html'
}, function (data){
self.$el.find('#uploaded').html(data);
});
};
self.initUploadForm=function (){
$('body').on('submit', self.baseSelector + ' #fontUpload', function (){
self.ajaxFontUpload.start();
});
};
self.ajaxFontUpload=(function (){
return {
start: function (){
$('.fontUploadForm').hide();
$('.fontUploading').show();
$('#fontUploadIframe').load(function (){
self.loadPrivateFonts();
});
}};}());
self.bindGetSelector=function (add){
var selector=self.currentPreset.selector;
if(!self.$cancelSelecting){
self.$cancelSelecting=$('
Stop selecting ');
$('body').append(self.$cancelSelecting);
self.$cancelSelecting.data('cancelSelecting', true);
self.$presets.hide();
}else{
self.$cancelSelecting.show();
self.$presets.hide();
}
$('a, button').on('click.selectionMode', function (e){
e.preventDefault();
self.handleSelectionClick($(this), add);
return false;
});
$('body').on('click.selectionMode', '*', function (e){
e.preventDefault();
self.handleSelectionClick($(this), add);
return false;
});
$('body').on('mouseover', '*', function (){
if($(this).data('cancelSelecting')){
return;
}
self.hoverSelector=self.getSelector(this);
self.hoverHighlightCurrent();
$(this).css('outline', '3px dashed rgba(50,50,250,0.7)');
(function (){
var element=$(this);
setTimeout(function (){
element.css('outline', 'none');
}, 100);
}());
return false;
});
$('body').on('mouseout', '*', function (){
$(this).css('outline', 'none');
return false;
});
};
self.handleSelectionClick=function ($el, add){
if($el.hasClass('cancelSelecting')){
self.stopSelectionMode();
self.reloadPreset();
return;
}
if($el.data('wired')){
self.$cancelSelecting.css('outline', 'none');
self.stopSelectionMode();
self.loadPreset($el.data('presetNo'));
return false;
}
var sel=self.getSelector($el[0]),
selectorInput,
comma;
if(!add){
self.stopSelectionMode();
var val=prompt('Name the selection i.e. title, header or paragraph. It\'ll be now listed in the upper left corner.');
if(!val){
self.bindGetSelector(add);
return false;
}else{
self.createPreset(val, sel);
}}
self.outlineAllPresets();
selectorInput=self.getField('selector');
if(add){
comma=selectorInput.val() ? ', ':'';
selectorInput.val(selectorInput.val() + comma + sel);
}else{
selectorInput.val(sel);
}
selectorInput.trigger('change');
self.stopSelectionMode();
self.highlightCurrent();
if(add){
self.reloadPreset();
}};
self.stopSelectionMode=function (){
$('body').off('mouseover', '*');
$('body').off('click.selectionMode', '*');
$('a').off('.selectionMode');
$('button').off('.selectionMode');
$(this).css('outline', 'none');
$('body').off('mouseout', '*');
self.$cancelSelecting.hide();
self.$presets.show();
};
self.getSelector=function (element){
var selector=$(element).parents()
.map(function (){
return this.tagName;
})
.get().reverse().join(" "),
id,
classNames,
selectorsArr,
sel,
parents=[],
selectors=[];
for (var i=0;
(i < $(element).parents().length&&i < 4); i++){
var $parent=$(element).parents().eq(i),
parentSelector=$parent[0].nodeName;
if(i < 2){
classNames=$parent.attr("class");
if(classNames){
parentSelector +="." + $.trim(classNames).replace(/\s/gi, ".");
}}
selectors.push(parentSelector);
}
selector=selectors.reverse().join(' ');
if(selector){
selector +=" " + $(element)[0].nodeName;
}
id=$(element).attr("id");
if(id){
selector +="#" + id;
}
classNames=$(element).attr("class");
if(classNames){
selector +="." + $.trim(classNames).replace(/\s/gi, ".");
}
return selector;
};
self.scrollToSelection=function (){
var selector=self.currentPreset.selector,
container,
found;
container=$('body');
if(selector.indexOf('ELEMENT NOW')!==-1||selector.indexOf('PICK ELEMENT')!==-1){
return;
}
found=container.find(selector);
if(!found.length){
return;
}
$('html, body').animate({
scrollTop: (parseInt(found.offset().top, 10) - 150)
}, 'slow');
};
self.hoverHighlightCurrent=function (){
var selector=self.hoverSelector;
if(self.tempHightlighted){
self.tempHightlighted.css('outline', 'none');
}
if(selector.indexOf('ELEMENT NOW')!==-1||selector.indexOf('PICK ELEMENT')!==-1){
return;
}
self.tempHightlighted=$(selector);
self.tempHightlighted.css('outline', '3px dashed rgba(100,250,100,0.7)');
};
self.outlineAllPresets=function (){
for (var i=0; i < self.options.presets.length; i++){
if(parseInt(i, 10)===parseInt(self.currentPresetNo, 10)) continue;
var preset=self.options.presets[i];
var selector=preset.selector;
if(selector.indexOf('ELEMENT NOW')!=-1||selector.indexOf('PICK ELEMENT')!=-1){
continue;
}
var litme=$(selector);
litme.css('outline', '2px dashed rgba(150,150,250,0.3)');
$('.deletePreset').remove();
litme.css("cursor", 'pointer', 'important');
if(litme.data('wired')===true){
continue;
}
litme.data('wired', true);
(function (){
var ind=i;
litme.data('presetNo', ind);
litme.click(function (e){
if(parseInt($(this).data('presetNo'), 10)!==parseInt(self.currentPresetNo, 10)){
e.preventDefault();
self.loadPreset(ind);
}});
litme.hover(function (){
if(parseInt($(this).data('presetNo'), 10)!==parseInt(self.currentPresetNo, 10)){
$(this).css('outline', '2px dashed rgba(150,150,250,0.9)');
}},
function (){
if(parseInt($(this).data('presetNo'), 10)!==parseInt(self.currentPresetNo, 10)){
$(this).css('outline', '2px dashed rgba(150,150,250,0.3)');
}}
);
}());
}};
self.highlightCurrent=function (){
var selector=self.currentPreset.selector,
btn;
self.outlineAllPresets();
if(selector.indexOf('ELEMENT NOW')!=-1||selector.indexOf('PICK ELEMENT')!=-1){
return;
}
self.hightlighted=$(selector);
self.hightlighted.css('outline', '3px dashed rgba(250,50,30,0.7)');
self.hightlighted.style("cursor", 'move', 'important');
if(!self.hightlighted.find('.deletePreset')[0]){
btn=$('
X ')
self.hightlighted.append(btn);
btn.click(function (e){
e.preventDefault();
self.deleteCurrentPreset();
return false;
});
}
self.makeCurrentDraggable();
};
self.unhighlightCurrent=function (){
var selector=self.currentPreset.selector;
self.outlineAllPresets();
if(selector.indexOf('ELEMENT NOW')!=-1||selector.indexOf('PICK ELEMENT')!=-1){
return;
}
self.hightlighted=$(selector);
self.hightlighted.css('outline', 'none');
self.hightlighted.style("cursor", '');
self.hightlighted.draggable("destroy");
};
self.makeCurrentDraggable=function (){
var isMozilla=$.browser&&$.browser.mozilla;
self.hightlighted.draggable({
drag: function (event, ui){
var top=ui.position.top,
left=ui.position.left,
$el=self.hightlighted;
$el.each(function (){
$(this).style("position", 'relative', 'important');
if(isMozilla){
self.updateCssSettings('top', (parseInt(top, 10) + parseInt($(window).scrollTop(), 10)) + 'px');
}else{
self.updateCssSettings('top', top + 'px');
}
self.updateCssSettings('left', left + 'px');
self.updateCssSettings('position', 'relative');
});
setTimeout(function (){
$el.each(function (){
if(isMozilla){
$(this).style("top", (parseInt(top, 10) + parseInt($(window).scrollTop(), 10)) + 'px', 'important');
}else{
$(this).style("top", top + 'px', 'important');
}
$(this).style("left", left + 'px', 'important');
});
}, 10);
}});
};
self.html2rgb=function (htmlcol){
var rgb=new Object();
rgb.r=self.html2dec(htmlcol.substr(0, 2));
rgb.g=self.html2dec(htmlcol.substr(2, 2));
rgb.b=self.html2dec(htmlcol.substr(4, 2));
return rgb;
};
self.parseRgb=function (rgbString){
return self.html2rgb(self.rgbString2hex(rgbString));
};
self.rgbString2hex=function (rgbString){
var parts=rgbString.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
if(!parts) return '000000';
delete(parts[0]);
for (var i=1; i <=3; ++i){
parts[i]=parseInt(parts[i]).toString(16);
if(parts[i].length==1) parts[i]='0' + parts[i];
}
var hexString=parts.join('');
return hexString;
};
self.html2dec=function (h){
return parseInt(h, 16);
};
self.createNewModal=function (options){
var modal=$('
');
modal.css({
left: options.left ? options.left:'auto',
right: options.right ? options.right:'auto',
top: options.top,
width: options.width,
position: 'fixed',
zIndex: 1000000
});
if(options.nobar){
modal.find('h1.draggableModalBar').hide();
}
if(!options.show){
modal.hide();
}
if(options.id){
modal.attr('id', options.id);
}
self.modals[options.name]=modal;
modal.draggable({
handle: modal.find('.draggableModalBar'),
start: function (){
$(this).css('bottom', 'auto');
}});
modal.find('.closeModal').click(function (){
modal.hide();
return;
});
modal.appendTo($('body'));
return modal;
};
self.bindLinkOverlay=function (){
$('body').on('click', 'a.font_url, a.overlay_url, button.overlay_url', function (){
var modal,
frameSrc,
iframe,
overlay,
href=$(this).attr('href');
if($(this).attr('data-upgrade')==='true'){
self.setupApikeyCheckingInterval();
}
overlay=$('
');
overlay.appendTo(document.body);
overlay.css({
position: 'fixed',
top: 0,
left: 0,
width: '100%',
height: '100%',
'background-color': '#333',
filter: 'alpha(opacity=50)',
'-moz-opacity': 0.5,
'-khtml-opacity': 0.5,
opacity: 0.5,
'z-index': 200000001
});
modal=$('
');
modal.css({
position: 'fixed',
left: '-475px',
marginLeft: '50%',
width: '950px',
top: '40px',
zIndex: 200000001
});
modal.find('.closeModal').bind('mousedown', function (){
modal.remove();
overlay.remove();
return;
});
frameSrc=href;
iframe=$('
');
iframe.appendTo(modal);
modal.appendTo($('body')).show();
overlay.click(function (){
modal.remove();
$(this).remove();
});
return false;
});
return;
};
self.adaptOptionsToMode=function (){
if(self.mode==='postPage'){
self.settingFields.presets.hide();
self.$presets.hide();
self.$apr.show();
self.settingFields.selector.hide();
$('#fontSaveSettings').hide();
$('#effectsButton').hide();
}};
self.toggleModal=function (modalName){
if(self.modals[modalName]===undefined){
return;
}
if(modalName==='effects'){
if(document.createElement("detect").style.textShadow!==""){
alert('Sorry, but your browser does not support advanced effects. Please upgrade to Chrome, Firefox or Internet Explorer 10');
return;
}}
self.modals[modalName].toggle();
self.modalToTop(self.modals[modalName]);
};
self.modalToTop=function (selectedModal){
var highestZindex=1000000;
for (var index in self.modals){
var modal=self.modals[index],
modalZindex=modal.css('zIndex');
if(parseInt(modalZindex, 10) > parseInt(highestZindex, 10)){
highestZindex=modalZindex;
}}
$(selectedModal).css({
'zIndex': parseInt(highestZindex, 10) + 1
});
};
self.setTinyMCEFont=function (fontId, fontName){
var selection=tinyMCE.activeEditor.selection.getContent(),
selectorValid,
$selectorContents,
fontClass,
node,
newSpan,
newHTML,
inserted,
$tempDiv,
multipleSelectors;
if(!selection){
return;
}
fontClass="fontplugin_fontid_" + fontId + "_" + fontName;
node=tinyMCE.activeEditor.selection.getNode();
selectorValid=true;
try {
$selectorContents=$(selection);
} catch (e){
selectorValid=false;
}
if(selectorValid&&$selectorContents.length > 1){
selectorValid=false;
multipleSelectors=true;
}
if(selectorValid&&($.trim($(node).html())===$.trim(selection)||$.trim($(node).html())===$.trim($(selection).html()))){
tinyMCE.activeEditor.dom.setAttrib(node, 'class', fontClass);
}else if(multipleSelectors){
$selectorContents.each(function (){
$(this).removePrefixedClasses('fontplugin_fontid_');
$(this).addClass(fontClass);
$(this).attr('class').split(' ');
});
$tempDiv=$('
').append($selectorContents);
newHTML=$tempDiv.html();
inserted=tinyMCE.activeEditor.selection.setContent(newHTML);
}else{
newSpan=$("
" + selection + ' ');
newHTML=$('
').append(newSpan.clone()).html();
inserted=tinyMCE.activeEditor.selection.setContent(newHTML);
tinyMCE.activeEditor.selection.select(tinyMCE.activeEditor.dom.select('span.' + fontClass)[0]);
}
self.loadFontFace(fontId);
};
self.loadFontFace=function (fontId){
var head=self.postIframe[0].getElementsByTagName('head')[0],
linkElement=$(document.createElement('link'));
linkElement.attr({
href: self.options.FFW_baseUrl + '/font/generatepreviewcss/?id=' + fontId,
rel: 'stylesheet',
type: 'text/css'
});
linkElement.appendTo(head);
};
self.xhrPost=function (params, callback){
var data=params;
if(params.format===undefined){
params.format='json';
}
data.action='cross_domain_request';
return $.ajax({
type: "POST",
url: ajaxproxy,
data: data,
success: function (response){
if(typeof callback==='function'){
callback(response);
}},
dataType: params.format,
error: function (xhr, textStatus, errorThrown){
alert("An error occurde. This might be a conflict with another plugin. Error message: " + textStatus);
}});
};
self.showLoading=function (){
if($('.fontLoading').length){
$('.fontLoading').show();
$('.fontLoading').show();
}else{
$('body').append('
');
}};
self.hideLoading=function (){
$('.fontLoading').hide();
$('.fontLoading').hide();
};
self.detectMode=function (){
var iframe=$('#content_ifr');
if(iframe.length){
self.mode='postPage';
self.postIframe=iframe.contents();
}else{
self.mode='global';
}
if(document.createElement("detect").style.textShadow===""){
self.shadowSupport=true;
}else{
self.shadowSupport=false;
}};
self.init();
};
$.fontPlugin.defaultOptions={
FFW_baseUrl: 'http://fontsforweb.com'
};
$.fn.fontPlugin=function (options){
return this.each(function (){
var fontPlugin=new $.fontPlugin(this, options);
});
};
var XYSlider=function (el, options){
var self=this;
self.$el=$(el);
self.$el.data('XYSlider', self);
self.init=function (){
var handleHolder=self.$el.data(options.settingName),
handle=(handleHolder&&handleHolder[0]) ? handleHolder.find('.XYSlider'):false;
if(!handleHolder||!handleHolder[0]){
handleHolder=$('
');
handle=$('
' + options.label + '
');
handleHolder.append(handle);
self.$el.append(handleHolder);
}
self.$el.data(options.settingName, handleHolder);
self.$handleHolder=handleHolder;
self.$handle=handle;
handle.each(function (){
$(this).parent().show();
$(this).draggable({
drag: function (event, ui){
var top=ui.position.top,
left=ui.position.left,
y=-top,
x=options.invertX ? -left:left;
self.commitDrag(x, y, true);
}});
});
};
self.setPosition=function (x, y){
var handle=self.$handle;
if(x!==false){
self.x=x;
}else if(self.x===undefined){
x=0;
self.x=0;
}else{
x=self.x;
}
if(y!==false){
y=y;
self.y=y;
}else if(self.y===undefined){
y=0;
self.y=0;
}else{
y=self.y;
}
if(x===false&&y===false){
return;
}
handle.css({
'top': -y + 'px',
'left': (options.invertX ? -x:x) + 'px'
});
self.commitDrag(x, y, true);
};
self.commitDrag=function (x, y, stop){
var rad=Math.atan2(x, y),
deg=rad * (180 / Math.PI),
distance=0;
if(stop===undefined){
stop=false;
}
if(deg < 0){
deg=360 + deg;
}
deg=Math.round(deg);
distance=Math.sqrt(x * x + y * y);
self.setCurrentValues(x, y, deg, distance);
options.actions.call(this, x, y, deg, distance);
};
self.setCurrentValues=function (x, y, deg, distance){
self.x=x;
self.y=y;
self.deg=deg;
self.distance=distance;
return self;
};
self.getCurrentValues=function (){
return {
'x': self.x,
'y': self.y,
'deg': self.deg,
'distance': self.distance
};};
self.init();
};
$.fn.XYSlider=function (options){
return this.each(function (){
new XYSlider(this, options);
});
};}(jQuery));