(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 += '
'; 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 += '
'; } 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 += ''; 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);