/* * INFORMATION * Plugin Name: Client Data Jquery Plugin * Created Date: 09/07/2012 * Version: 0.0.1 * Deployed to: \\uploadb\imagestore\theknot\jscripts\jquery\plugins\jquery-clientdata.0.0.1.js * TFS: $/Editorial/Trunk/Websites/common/jscripts/jquery/plugins/jquery-clientdata/jquery.clientdata.js * Author: Santiago Chen * Email: 545438641@qq.com * * DEPENDENCIES * jQuery (Attention: tested only with 1.4.3) * standardModal * * SAMPLE FOR USING CLIENTDATA PLUGIN * $.fn.clientData({ * modalWidth: "550", //define modal's width * modalHeight: "auto", //define modal's height * thickBorderWidth: 15, //define border's width * thickBorderOpacity: .5, //define border's opacity * showOverlay: true, //define whether the overlay is needed or not * overlayOpacity: 0, //define overlay's opacity * closeOnOverlayClick: false, //define whether can close modal by overlay clicking or not * onSelect:function(param){ //onSelect is a function you can defined by yourself to do something you want to. //param is optional, but it is needed when you want to handle with the object about client data returned by GetComponentsJson call. * //just write codes to do whatever you want here. Aha! * } * }); * * CHANGELOG * 09/07/2012 drafted by Santiago. * */ (function($){ $.fn.clientData = function(options){ //PARAMS: var defaults = { modalWidth: "550", modalHeight: "auto", thickBorderWidth: 15, thickBorderOpacity: .5, showOverlay: true, overlayOpacity: 0, closeOnOverlayClick: false, onSelect: function(param){console.log(param)} }; var opts = $.extend(defaults, options); //load contents with standModal (function initialData(){ XO.standardModal.makeModal("clientData", { width: opts.modalWidth + 'px' , height: 'auto', thickBorderWidth: opts.thickBorderWidth, thickBorderOpacity: opts.thickBorderOpacity, showOverlay: opts.showOverlay, overlayOpacity: opts.overlayOpacity, closeDestroysModal: true, restoreContentOnDestroy: false, closeOnOverlayClick: opts.closeOnOverlayClick, content: domFactory.searchBox.initial(), //contents loaded here events: { onClose: function(){domFactory.closeAndRestore()}} }); domFactory.searchBox.clientCheck(); $('.xo_stdModalContent').resize(function(){ $(".xo_stdModalThickBorder").height($('.xo_stdModal').height()+2*(opts.thickBorderWidth+6));//6 pixel is the width of xo_stdModal's border }); domElement.contentWrap.bind('selectCallBack',function(event){opts.onSelect(event.message);}) })() } //parts for dom var domElement = { //wrap contentWrap: $("<div></div>"), //searchbox searchBox: $('<table id="searchBox"></table>'), checkBox: $('<tr><td>Include Expired Campaigns:</td><td><input type="checkbox" id="checkBox" disabled="disabled"/></td><li>'), clientRow: $('<tr><td>Client:</td><td><input type="text" id="txtClient"/></td><li>'), campaignRow: $('<tr><td>Campaign:</td><td><select id="campaignSelect" disabled="disabled"></select></td><li>'), //droplist dropList: $('<ul></ul>'), //resultbox resultCounter: $('<div style="text-align:left;padding:6px 6px 16px 6px;"></div>'), //resultTable resultTable: $('<table style="width:100%;text-align:left;padding:12px 0; border-top:solid 1px #999; border-bottom: solid 1px #999;"></table>'), resultTableTop: $('<tr style="font-Size:12px; font-weight:bold; color:#999999;"><td width="17%">Component Id</td><td width="13%">FatTail Id</td><td width="14%">Description</td><td width="30%">Notes</td><td width="13%">Start Date</td><td width="13%">End Date</td></tr>'), //paging paging: $('<div style="margin:12px 0; font-size:12px;"><span id="prePage" style="margin:0 30px 0 0"><Previous Page</span><span id="currentPage" style="margin:0 30px 0 0"></span><span id="nextPage">Next Page></span></div>'), //txt loader txtLoader: $('<span style="color:#336; font-size:10px; width:22px; height:16px; display:inline-block; background:url(http://www.xoedge.com/clientdata/img/loading_size_16.gif) no-repeat 4px 0; vertical-align: middle;"></span>'), txtLoader2: $('<span style="color:#336; font-size:10px; width:106px; height:9px; display:inline-block; background:url(http://www.xoedge.com/clientdata/img/loading_size_32.gif) no-repeat 4px 0; vertical-align: middle;"></span>'), //tips: no record noRecord: $('<span style="color:#B00; font-size:10px;;"> No Record</span>') }; //domFactory var domFactory = { searchBox:{ //initial initial: function(){ domElement.searchBox.prepend(domElement.checkBox,domElement.clientRow,domElement.campaignRow); domElement.contentWrap.prepend(domElement.searchBox) return domElement.contentWrap }, tempClient: '', //restrict the times of search event //clientCheck clientCheck: function(){ //var tempClient; domFactory.dropList.initial(); $("#txtClient").keyup(function(){ if(domFactory.searchBox.tempClient !== $(this).val().replace(/^\s*/, '')){ domFactory.searchBox.tempClient = $(this).val().replace(/^\s*/, ''); if(domFactory.searchBox.tempClient.length >= 3){ serverCall.callClient(domFactory.searchBox.tempClient); } else{ $('#checkBox').attr('disabled','disabled'); domFactory.dropList.reStore(); if(domElement.txtLoader)domElement.txtLoader.remove(); } } }) }, reStore: function(){ $("#checkBox").attr("checked",false); $("#txtClient").val(""); if(domElement.clientRow.find('span').length>0){ domElement.clientRow.find('span').remove(); } } }, //dom for droplist dropList: { initial: function(){ domElement.dropList.css({ position:'absolute', left: $('#txtClient').position().left, top: $('#txtClient').position().top+$('#txtClient').height()+6, //width of border from some dom elemnts background: "#ffffff", width: $('#txtClient').width(), padding: '0px', margin: '0px', border: "solid 2px #cccccc" }); }, onChange: function(obj){ domElement.dropList.empty(); if(obj.length>0){ $('#checkBox').attr('disabled',''); if(domElement.clientRow.find('span').length>0){ domElement.clientRow.find('span').remove(); } $.each(obj,function(index,element){ domElement.dropList.append( $("<li>"+element.ClientName+"</li>").attr('data-accountID',element.ClientAccountID) .css({cursor: "pointer"}) .click(function(){ domFactory.searchBox.tempClient = $(this).html(); $('#txtClient').val($(this).html()) serverCall.callCampaign($(this).attr('data-accountID')); domFactory.dropList.reStore(); $('#checkBox').attr('disabled','disabled'); }) ); }) domElement.contentWrap.append(domElement.dropList); } else{ $('#checkBox').attr('disabled','disabled'); (domElement.txtLoader)?domElement.txtLoader.replaceWith(domElement.noRecord):$('#txtClient').after(domElement.noRecord); } }, reStore: function(){ domElement.dropList.empty().remove(); } }, campaignRow:{ onChange: function(obj){ domFactory.campaignRow.reStore(); $('#campaignSelect').unbind('change'); if(obj.length>0){ $.each(obj,function(index,element){ $('#campaignSelect').append($('<option>' + element.CampaignName + '</option>').attr('value',element.CampaignID)) }) if(obj.length>1){$('#campaignSelect').prepend('<option value="undefine">Please select</option>')} $('#campaignSelect').attr('disabled',''); //the below is handler for ajax callComponent. if(obj.length==1){ serverCall.callComponent(obj[0].CampaignID); } $('#campaignSelect').change(function(){ serverCall.callComponent($(this).val()); }) } else{ (domElement.txtLoader)?domElement.txtLoader.replaceWith(domElement.noRecord):$('#campaignSelect').after(domElement.noRecord); $('#campaignSelect').attr('disabled','disabled'); } }, reStore: function(){ domElement.campaignRow.find('#campaignSelect').empty().attr({'value':'','disabled':'disabled'}); } }, //resultCounter resultCounter:{ initial: function(param){ domFactory.resultCounter.reStore(); domElement.resultCounter.html(param.totalAmount+((param.totalAmount==1)?' result found':' results found')).insertAfter(domElement.searchBox); }, reStore: function(){ domElement.resultCounter.empty().remove(); } }, //resultTable resultTable:{ initial: function(param){ domFactory.resultTable.reStore(); domElement.resultTable.insertAfter(domElement.resultCounter); domElement.resultTable.append(domElement.resultTableTop); domFactory.resultTable.onConstruct(param); }, onConstruct: function(param){ for(var i=0; i<param.components.length; i++){ domElement.resultTable.append( $('<tr><td width="17%"><a>'+param.components[i].ClientCampaignComponentID+'</a></td>' +'<td width="13%">'+param.components[i].SourceComponentID+'</td>' +'<td width="14%">'+param.components[i].ComponentDesc+'</td>' +'<td width="30%">'+param.components[i].Notes+'</td>' +'<td width="13%">'+utils.covertDate(param.components[i].ComponentStartDate)+'</td>' +'<td width="13%">'+utils.covertDate(param.components[i].ComponentEndDate)+'</td></tr>') .css({fontSize: '10px',verticalAlign: 'top'}) ); } domElement.resultTable.find('a') .css({textDecoration:'underline',cursor:'pointer',color:'#0037AA'}) .click(function(){domElement.contentWrap.trigger({type:'selectCallBack', message:param})}); }, reStore: function(){ domElement.resultTable.empty().remove(); } }, //paging paging:{ initial:function(param,page){ domElement.paging.insertAfter(domElement.resultTable); domFactory.paging.countPage(param,page) }, countPage: function(param,page){ //display current pageNum $('#currentPage').html('Page '+page+' of '+param.totalPages); //modify pre Btn; if(page>1){ $('#prePage').css({ cursor:'pointer', color: '#333' }).click(function(){ serverCall.callComponent(param.components[0].CampaignID,(page-1)); }) } if(page==1){ $('#prePage').css({cursor:'default',color: '#ccc'}).unbind('click') } //modify next Btn if(page<param.totalPages){ $('#nextPage').css({ cursor:'pointer', color: '#333' }).click(function(){ serverCall.callComponent(param.components[0].CampaignID,(page+1)); }) } if(page==param.totalPages){ $('#nextPage').css({cursor:'default',color:'#ccc'}).unbind('click'); } }, reStore: function(){ domElement.paging.remove(); } }, //closeAndResore closeAndRestore:function(){ domFactory.searchBox.reStore(); domFactory.dropList.reStore(); domFactory.campaignRow.reStore(); domFactory.resultCounter.reStore(); domFactory.resultTable.reStore(); domFactory.paging.reStore(); } }; //serverCall var serverCall = { baseURL: "http://www.theknot.com/national/clientdata/api/v1/", callClient: function(param){ (domElement.clientRow.find('span').length>0)?domElement.clientRow.find('span').replaceWith(domElement.txtLoader):$('#txtClient').after(domElement.txtLoader); var postData = "client="+encodeURIComponent(param); $.ajax({ url: serverCall.baseURL + "GetClientsJson", dataType: 'jsonp', type: 'GET', cache: false, data: postData, success: function(data, status) { domFactory.dropList.onChange(data); }, error: function(xhr, desc, err) {alert('Ajax error on GetClientsJson(): ' + desc);}, complete: function(){if(domElement.txtLoader)domElement.txtLoader.remove();} }) }, callCampaign: function(param){ (domElement.campaignRow.find('span').length>0)?domElement.campaignRow.find('span').replaceWith(domElement.txtLoader):$('#campaignSelect').after(domElement.txtLoader); $('#campaignSelect').attr('disabled','disabled'); var expired = $('#checkBox').attr('checked'); var postData = "ClientAccountID="+encodeURIComponent(param)+"&expired="+expired; $.ajax({ url: serverCall.baseURL + "GetCampaignsJson", dataType: 'jsonp', type: 'GET', cache: false, data: postData, success: function(data, status) { domFactory.campaignRow.onChange(data); }, error: function(xhr, desc, err) {alert('Ajax error on GetCampaignsJson(): ' + desc);}, complete: function(){if(domElement.txtLoader)domElement.txtLoader.remove();} }) }, callComponent: function(param, pageindex){ if(param !=='undefine'){ domElement.resultCounter.remove(); domElement.resultTable.remove(); domElement.paging.remove(); domElement.searchBox.after(domElement.txtLoader2); var _index = pageindex || 1; var postData = "CampaignID="+encodeURIComponent(param)+"&pageIndex="+_index; $.ajax({ url: serverCall.baseURL + "GetComponentsJson", dataType: 'jsonp', type: 'GET', cache: false, data: postData, success: function(data, status) { domFactory.resultCounter.initial(data); //count result found if(data.totalAmount>0){ domFactory.resultTable.initial(data);//display result found domFactory.paging.initial(data,_index); //display paging } }, error: function(xhr, desc, err) {alert('Ajax error on GetComponentsJson(): ' + desc);}, complete: function(){if(domElement.txtLoader2)domElement.txtLoader2.remove();} }) } } }; var utils = { covertDate : function (dateString) { if(dateString){ var dateNo = dateString.split('(')[1].split(')')[0], obj = eval('(' + "{Date: new Date(" + dateNo + ")}" + ')'), dateValue = obj["Date"]; return (dateValue.getMonth() + 1) + "/" + dateValue.getDate() + "/" + dateValue.getFullYear(); } else{return "";} }, configHandler :function(){ //css var cssLink = document.createElement('link'); cssLink.href = 'http://www.xoedge.com/clientdata/style/style.css'; cssLink.rel = 'stylesheet'; document.head.appendChild(cssLink); //standard modal var smScript = document.createElement('script'); smScript.src = 'http://www.xoedge.com/jscripts/shared/xo/xo.modal/xo.standardModal-0.0.2.min.js'; document.body.appendChild(smScript); }() }; /* * jQuery resize event - v1.1 - 3/14/2010 * http://benalman.com/projects/jquery-resize-plugin/ * * Copyright (c) 2010 "Cowboy" Ben Alman * Dual licensed under the MIT and GPL licenses. * http://benalman.com/about/license/ */ (function($,h,c){var a=$([]),e=$.resize=$.extend($.resize,{}),i,k="setTimeout",j="resize",d=j+"-special-event",b="delay",f="throttleWindow";e[b]=10;e[f]=true;$.event.special[j]={setup:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.add(l);$.data(this,d,{w:l.width(),h:l.height()});if(a.length===1){g()}},teardown:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.not(l);l.removeData(d);if(!a.length){clearTimeout(i)}},add:function(l){if(!e[f]&&this[k]){return false}var n;function m(s,o,p){var q=$(this),r=$.data(this,d);r.w=o!==c?o:q.width();r.h=p!==c?p:q.height();n.apply(this,arguments)}if($.isFunction(l)){n=l;return m}else{n=l.handler;l.handler=m}}};function g(){i=h[k](function(){a.each(function(){var n=$(this),m=n.width(),l=n.height(),o=$.data(this,d);if(m!==o.w||l!==o.h){n.trigger(j,[o.w=m,o.h=l])}});g()},e[b])}})(jQuery,this); })(jQuery)
![](https://img2024.cnblogs.com/blog/35695/202407/35695-20240713070336838-1837943664.jpg)