(function($) {
$.fn.adsForm = function(options) {
var settings = {
callback: function() { }
};
if (options) $.extend(settings, options);
var _this = $(this).parent();
/**
* 显示面板
*/
var showPanel = function() {
_this.addClass('adsForm_container');
drawPanel();
};
/**
* 隐藏面板
*/
var hidePanel = function() {
_this.find('.adsForm_panel').remove();
_this.removeClass('adsForm_container');
};
/**
* 事件绑定
*/
var bindingEvent = function() {
var _panel = _this.find('div.adsForm_panel');
// 关闭按钮
_this.find('a.btn-close').click(function() {
// 如果有改动提示用户是否需要保存
if ( $('input.modify').val() == '1' && confirm("You have unsaved settings, are you sure?\n\nClick OK to save, or click CANCEL to close without saving.") ) {
_this.find('input.btn-submit').click();
return false;
}
hidePanel();
});
// 提交按钮
_this.find('input.btn-submit').click(function() {
var panel = _this.find('div.adsForm_panel');
var hidden = _this.find('div.hidden');
var dom = new Array('.ad-position', '.ad-alignment', '.ad-type', '.ad-format', '.ad-title', '.ad-custom-title', '.ad-title-hide', '.ad-margin', '.ad-google-id', '.ad-channel-id', '.ad-colors', '.ad-border-style', '.ad-number-post');
var obj = {};
// 将颜色的5个属性值存放在一个input域里
var inputTags = _this.find('div.ad-color input');
if ( inputTags.size() ) {
for ( var i = 0; i < 5; i++ ) {
inputTags.eq(5).val( inputTags.eq(5).val() + inputTags.eq(i).val() + ';' );
}
}
// 循环查找每个dom组件,如果存在就获取其值,并且设置hidden域的值
for ( var i = 0; i < dom.length; i++ ) {
obj = panel.find( dom[i] );
if ( obj.size() ) {
value = _getSelectValue( obj );
hidden.find( dom[i] ).val( value );
}
}
hidePanel();
});
// 阻止任何地方的回车按键把整个表单都提交了
_this.find('input').keydown(function(e) {
if ( e.keyCode == 13 ) return false;
});
// 显示下拉菜单的默认值,一个被选中显示选中值,多个被选中则显示random
_this.find('p.select span').each(function() {
var __this = $(this);
var parent = __this.parents('div:first');
var value = parent.find('input.ad-select-value').val();
if ( value.split(';').length == 1 ) {
__this.text( _this.find('#k_' + value).next().text() );
} else {
__this.text('Random');
}
});
// 模拟下拉菜单
_this.find('p.select').click(function(){
var __this = $(this);
var parent = __this.parent();
var span = __this.find('span');
// if exists, then hide it
if ( span.hasClass('selected') ) {
span.removeClass('selected');
parent.find('ul').hide();
return false;
};
// get the initial value
var array = parent.find('input.ad-select-value').val().split(';');
// 勾选checbox
parent.find('ul input').removeAttr('checked');
for ( var i = 0; i < array.length; i++ ) {
parent.find('#k_' + array[i]).attr('checked', 'checked');
}
// show the panel
span.addClass('selected');
parent.find('ul').show();
});
// 关闭下拉菜单
_this.find('li.close a').click(function() {
var parent = $(this).parents('div:first');
var span = parent.find('p.select span');
var array = new Array();
// get all the checkbox value, filter the checked value in an array
parent.find('ul input').each(function() {
if ( $(this).attr('checked') ) array.push($(this).val());
});
if ( !array.length ) {
alert('You must select one or more format for this ad');
return false;
}
// set the select value for display
if ( array.length == 1 ) {
span.text( _this.find('#k_' + array[0]).next().text() );
} else {
span.text('Random');
}
// join the array to a string
parent.find('input.ad-select-value').val( array.join(';') );
// hide the select panle
span.removeClass('selected');
parent.find('ul').hide();
return false;
});
// 任何输入都会把input[@class=modify]设置为true
var inputModify = _this.find('input.modify');
_panel.find('input, select').change(function() {
_changeModify(inputModify);
});
/*_panel.find('input').blur(function() {
_changeModify(inputModify);
});*/
_panel.find('div.ad-color a').click(function() {
_changeModify(inputModify);
});
};
// 修改modify的值
var _changeModify = function(inputModify) {
inputModify.val('1');
};
var _getSelectValue = function(obj) {
var value = 0;
// INPUT
if ( obj.get(0).nodeName == 'INPUT' ) {
// text
if ( obj.attr('type') == 'text' || obj.attr('type') == 'hidden' ) {
value = obj.val();
}
// checkbox
if ( obj.attr('type') == 'checkbox' ) {
value = new Number( obj.attr('checked') );
}
// radio
if ( obj.attr('type') == 'radio' ) {
obj.each(function() {
if ( $(this).attr('checked') ) value = $(this).val();
});
}
}
// SELECT
if ( obj.get(0).nodeName == 'SELECT' ) {
obj.find('option').each(function() {
if ( $(this).attr('selected') ) value = $(this).val();
});
}
return value;
};
/**
* 生成loading动画
*/
var drawLoading = function() {
var html = '
';
html += '
Loading...
';
html += '
';
return html;
};
/**
* 生成单个板块html
*/
var _unit_subject = function( param ) {
var html = '';
var subject = '';
switch( param ) {
case 'ad-top':
subject = 'Header ad settings';
break;
case 'ad-bottom':
subject = 'Footer ad settings';
break;
case 'ad-rand':
subject = 'Post content ad settings';
break;
case 'ad-widget-text':
subject = 'Sidebar ad settings';
break;
case 'ad-widget-link':
subject = 'Sidebar link ad settings';
break;
case 'ad-widget-search':
subject = 'Sidebar searchbox ad settings';
break;
}
html += '
' + subject + '
';
return html;
};
var _unit_position = function( param ) {
var html = '';
var obj = _this.find('input.ad-position');
if ( obj.size() ) {
var val = obj.val();
switch ( param ) {
case 'ad-top':
html += '
';
html += '';
html += '
';
html += '';
html += '
';
html += '';
html += '
';
break;
case 'ad-bottom':
html += '
';
html += '';
html += '
';
html += '';
html += '
';
html += '';
html += '
';
break;
case 'ad-rand':
html += '
';
html += '';
html += '
';
html += '
';
html += '
';
html += '';
html += '';
html += '';
html += '';
html += '';
html += '';
html += '';
html += '';
html += '';
html += '
';
html += '
';
html += '';
html += '
';
html += '';
html += '
';
break;
default:
html = '';
break;
}
}
return html;
};
var _unit_alignment = function( param ) {
var html = '';
var obj = _this.find('input.ad-alignment');
if ( param != 'ad-rand' ) {
var val = obj.val();
html += '
';
html += '';
html += '
';
html += '';
html += '
';
html += '';
html += '
';
}
return html;
};
var _unit_type = function( param ) {
var html = '';
var obj = _this.find('input.ad-type');
if ( obj.size() && param != 'ad-widget-search' ) {
var val = obj.val();
html += '
';
html += '';
html += '
';
html += '';
html += '
';
html += '';
html += '
';
}
return html;
};
var _unit_format = function( param ) {
var html = '';
var obj = _this.find('input.ad-format');
if ( obj.size() && param != 'ad-widget-search' ) {
var val = obj.val();
html += '
';
html += '';
html += '
';
html += '
';
html += '
';
html += '';
html += '';
html += '';
html += '';
html += '';
html += '';
html += '';
html += '';
html += '';
html += '';
html += '';
html += '';
html += '
';
html += '
';
html += '';
html += '
';
html += '';
html += '
';
}
return html;
};
var _unit_title = function(param) {
var html = '';
var obj = _this.find('input.ad-title');
if ( obj.size() ) {
val = obj.val();
val_hide = _this.find('input.ad-title-hide').val();
val_custom = _this.find('input.ad-custom-title').val();
// 或者图片存放地址
var img_url = $('#main-plugin input.wp-adsense-url').val() + '/templates/images/';
switch( param ) {
case 'ad-widget-search':
html += '
';
html += '
';
html += '';
html += '';
html += '
';
html += '
';
html += '';
html += '';
html += '
';
html += '
';
html += '';
html += '';
html += '
';
html += '
';
html += '';
html += '';
html += '';
html += '
';
html += '';
html += '
';
break;
default:
html += '
';
html += '';
html += '
';
html += '';
html += '
';
html += '
';
html += '';
html += '';
html += '
';
html += '';
html += '
';
break;
}
}
html += '';
return html;
};
var _unit_margin = function(param) {
var html = '';
var obj = _this.find('input.ad-margin');
if ( obj.size() ) {
var val = obj.val();
html += '
';
html += '';
html += '
';
html += '';
html += '
';
html += '
px
';
html += '';
html += '
';
}
return html;
};
var _unit_channel_id = function(param) {
var html = '';
var obj = _this.find('input.ad-channel-id');
if ( obj.size() ) {
var val = obj.val();
html += '
';
html += '';
html += '
';
html += '';
html += '
';
html += '';
html += '
';
}
return html;
};
var _unit_google_id = function(param) {
var html = '';
var obj = _this.find('input.ad-google-id');
if ( obj.size() ) {
var val = obj.val();
html += '
';
html += '';
html += '
';
html += '';
html += '
';
html += '';
html += '
';
if ( param != 'ad-widget-search' ) html += '';
}
return html;
}
var _unit_color = function(param) {
var html = '';
var obj = _this.find('input.ad-colors');
if ( obj.size() ) {
var html = '';
var val = obj.val();
var colors = val.split(';');
html += '';
// 边框
html += '
';
html += '';
html += '';
html += '';
// 标题
html += '';
html += '';
html += '';
// 背景色
html += '';
html += '';
html += '';
// 文字
html += '';
html += '';
html += '';
// 链接
html += '';
html += '';
html += '';
// 隐藏域
html += '';
html += '
';
}
return html;
};
var _unit_border = function(param) {
var html = '';
var obj = _this.find('input.ad-border-style');
if ( obj.size() ) {
var val = obj.val();
if ( param != 'ad-widget-search' ) html += '
';
html += '
';
html += '';
html += '
';
html += '';
html += '
';
html += '';
html += '
';
}
return html;
};
var _unit_number_post = function(param) {
var html = '';
var obj = _this.find('input.ad-number-post');
if ( obj.size() && param == 'ad-rand' ) {
var val = obj.val();
html += '
';
html += '';
html += '
';
html += '';
html += '
';
html += '';
html += '
';
}
return html;
};
var _unit_submit = function(param) {
var html = '';
html += '
';
html += '';
html += '';
html += '
';
return html;
};
/**
* 生成表单html
*/
var drawHtml = function() {
var html = '';
var className = _this.find('input.btn-edit').attr('name');
html += '
';
// 关闭按钮
html += 'Close';
// 位置
var name = _this.find('input.btn-edit').attr('name');
html += _unit_subject( name );
html += _unit_title( name );
html += _unit_position( name );
html += _unit_alignment( name );
html += _unit_type( name );
html += _unit_format( name );
html += _unit_color( name );
html += _unit_border( name );
html += _unit_margin( name );
html += _unit_channel_id( name );
html += _unit_google_id( name );
html += _unit_number_post( name );
html += _unit_submit( name );
return html;
};
/**
* 生成面板
*/
var drawPanel = function() {
html = drawLoading();
_this.append(html);
html += drawHtml();
_this.append(html);
_this.find('.adsForm_load').remove();
bindingEvent();
};
_this.find('.adsForm_panel').size() ? hidePanel() : showPanel();
}
})(jQuery);