1var LiveCampaign = { 2 ModuleId: -1, 3 PortalId: -1, 4 AjaxHandler: -1, 5 ReportImageURL: -1, 6 intervalIDs: '', 7 MsgQueue: null, 8 MsgSent: null, 9 MsgFailed: null, 10 MsgNextAttempt: null, 11 MsgWaiting: null, 12 MsgPreparing: null, 13 MsgProcessing: null, 14 MsgEmail: null, 15 MsgSending: null, 16 Processing: null, 17 Loading: null, 18 InitProgressbar: function (PortalId, ModuleId, TabId, URL, MsgQueue, MsgSent, MsgFailed, MsgNextAttempt, MsgWaiting, MsgPreparing, MsgProcessing, MsgEmail, Sending, Processing, Loading) { 19 LiveCampaign.ModuleId = ModuleId; 20 LiveCampaign.PortalId = PortalId; 21 LiveCampaign.AjaxHandler = URL + 'Handlers/Ajax.ashx'; 22 LiveCampaign.ReportImageURL = URL + 'Resources/Images/report.png'; 23 LiveCampaign.MsgWaiting = MsgWaiting; 24 LiveCampaign.MsgPreparing = MsgPreparing; 25 LiveCampaign.MsgProcessing = MsgProcessing; 26 LiveCampaign.MsgEmail = MsgEmail; 27 LiveCampaign.Processing = Processing; 28 LiveCampaign.MsgSending = Sending; 29 LiveCampaign.Loading = Loading; 30 LiveCampaign.MsgProcessingEmail; 31 LiveCampaign.MsgQueue = MsgQueue; 32 LiveCampaign.MsgSent = MsgSent; 33 LiveCampaign.MsgFailed = MsgFailed; 34 LiveCampaign.MsgNextAttempt = MsgNextAttempt; 35 LiveCampaign.GetCampaignStatus(TabId);//TabId 36 setInterval(function () { 37 LiveCampaign.GetCampaignStatus(TabId);//TabId 38 }, 10000); 39 jQuery('.CampaignProgressGraph .StatusPending, .CampaignProgressGraph .StatusPreparing, .CampaignProgressGraph .StatusProcessing').hide(); 40 }, 41 Init: function (PortalId, ModuleId) { 42 LiveCampaign.ModuleId = ModuleId; 43 LiveCampaign.PortalId = PortalId; 44 }, 45 GetCampaignStatus: function (TabId) { //GetCampaignStatus: function (CampaignId, CampaignName, URL) { 46 jQuery.ajax({ 47 url: LiveCampaign.AjaxHandler + '?PortalId=' + LiveCampaign.PortalId + '&ModuleId=' + LiveCampaign.ModuleId + '&Action=GetCampaignStatus' + '&TabId=' + TabId, 48 dataType: 'json', 49 success: function (data) { 50 jQuery.each(data, function (key, ca) { 51 52 if (jQuery('#CampaignProgress' + ca.CampaignId).length <= 0) { 53 var Template = ''; 54 jQuery('.LCProgressbar').prepend('<div id=CampaignProgress' + ca.CampaignId + ' class="CampaignProgressGraph">') 55 Template += '<div class="CampaignStatus">' + ca.Name + '<span><span style="float: right;"><span>'; 56 Template += '<a href=' + ca.URL + '>Edit</a> / <a href=' + ca.ReportURL + '>Report</a></span></span></span></div>'; 57 Template += '<div class="CampaignCurrentStatus StatusPending" style="display: none;">' + LiveCampaign.MsgWaiting + '<br><img class="Progressbar" src="' + LiveCampaign.Loading + '" alt="Progress"><br></div>'; 58 Template += '<div class="CampaignCurrentStatus StatusPreparing" style="display: none;">' + LiveCampaign.MsgPreparing + '<br><img class="Progressbar" src="' + LiveCampaign.Loading + '" alt="Progress"><br></div>'; 59 Template += '<div class="CampaignCurrentStatus StatusProcessing" style="display: block;"><span class="Statusbar">
59' + LiveCampaign.MsgProcessing + '</span><span class="ProcessingEmail"></span>' + LiveCampaign.MsgEmail + '<span class="ProcessingRemaining"></span><br><img class="Progressbar" src="' + LiveCampaign.Loading + '" alt="Progress"><br><div class="common inqueue">' + ca.QueueCount + '<br><span style="font-size: 12px;padding-top: 10px;display: block;">' + LiveCampaign.MsgQueue + '</span></div><div class="common sent">' + ca.SuccessCount + '<br><span style="font-size: 12px;padding-top: 10px;display: block;">' + LiveCampaign.MsgSent + '</span></div><div class="common failed">' + ca.ErrorCount + '<br><span style="font-size: 12px;padding-top: 10px;display: block;">' + LiveCampaign.MsgFailed + '</span></div><div style="clear: both;"></div><div class="StatusNextSchedulingTime" style="margin-top: 20px;font-size: 11px;">' + LiveCampaign.MsgNextAttempt + '</div></div>'; 60 jQuery('#CampaignProgress' + ca.CampaignId).append(Template); 61 } 62 jQuery('#CampaignProgress' + ca.CampaignId + ' .Status' + ca.Status).show(); 63 if (ca.Status.toLowerCase() == 'processing') { 64 jQuery('#CampaignProgress' + ca.CampaignId + ' .StatusProcessing .Statusbar').text(LiveCampaign.Processing); 65 var Percentage = Math.round((ca.StatusNotIsNew / ca.TotalCount) * 100) 66 jQuery('#CampaignProgress' + ca.CampaignId + ' .StatusPending, #CampaignProgress' + ca.CampaignId + ' .StatusPreparing').hide(); 67 jQuery('#CampaignProgress' + ca.CampaignId + ' .StatusProcessing .ProcessingRemaining,#CampaignProgress' + ca.CampaignId + ' .StatusProcessing .ProcessingEmail').empty();//clear progressing percentage 68 if (Percentage > 0) { 69 if (Percentage >= 100) { 70 var SendingEmailsPercentage = Math.round(((ca.TotalCount - ca.QueueCount) / ca.TotalCount) * 100) 71 if (ca.QueueCount > 0) 72 jQuery('#CampaignProgress' + ca.CampaignId + ' .StatusProcessing .ProcessingEmail').text(' ' + ca.QueueCount + ' '); 73 else 74 jQuery('#CampaignProgress' + ca.CampaignId + ' .StatusProcessing .ProcessingEmail').text(''); 75 76 if (ca.TotalCount > 0) 77 jQuery('#CampaignProgress' + ca.CampaignId + ' .StatusProcessing .ProcessingRemaining').append(SendingEmailsPercentage + '% done'); 78 79 jQuery('#CampaignProgress' + ca.CampaignId + ' .StatusProcessing .Statusbar').empty().text(LiveCampaign.MsgSending); 80 } 81 else { 82 if (ca.StatusIsNew > 0) 83 jQuery('#CampaignProgress' + ca.CampaignId + ' .StatusProcessing .ProcessingEmail').text(' ' + ca.StatusIsNew + ' '); 84 jQuery('#CampaignProgress' + ca.CampaignId + ' .StatusProcessing .ProcessingRemaining').append(Percentage + '% done'); 85 } 86 } 87 jQuery('#CampaignProgress' + ca.CampaignId + ' .inqueue').empty().append(ca.QueueCount + '<br><span style="font-size: 12px;padding-top: 10px;display: block;">' + LiveCampaign.MsgQueue + '</span>'); 88 jQuery('#CampaignProgress' + ca.CampaignId + ' .sent').empty().append(ca.SuccessCount + '<br><span style="font-size: 12px;padding-top: 10px;display: block;">' + LiveCampaign.MsgSent + '</span>'); 89 jQuery('#CampaignProgress' + ca.CampaignId + ' .failed').empty().append(ca.ErrorCount + '<br><span style="font-size: 12px;padding-top: 10px;display: block;">' + LiveCampaign.MsgFailed + '</span>'); 90 91 if (ca.MailQueueError > 0 && ca.NextAttempt != null) 92 jQuery('#CampaignProgress' + ca.CampaignId + ' .StatusNextSchedulingTime').empty().append(LiveCampaign.MsgNextAttempt.replace("[SchedulingTime]", ca.NextAttempt)); 93 else 94 jQuery('#CampaignProgress' + ca.CampaignId + ' .StatusNextSchedulingTime').empty() 95 96 } 97 else if (ca.Status.toLowerCase() == 'pending') 98 jQuery('#CampaignProgress' + ca.CampaignId + ' .StatusProcessing, #CampaignProgress' + ca.CampaignId + ' .StatusPreparing').hide(); 99 else if (ca.Status.toLowerCase() == 'preparing') 100 jQuery('#CampaignProgress' + ca.CampaignId + ' .StatusProcessing, #CampaignProgress' + ca.CampaignId + ' .StatusPending').hide(); 101 else 102 jQuery('#CampaignProgress' + ca.CampaignId + ' .StatusPending, #CampaignProgress' + ca.CampaignId + ' .StatusPreparing, #CampaignProgress' + ca.CampaignId + ' .StatusPreparing').hide(); 103 104 105 }); 106 } 107 }); 108 }, 109 InitReportChart: function (CampaignId, URL) { 110 jQuery.get(URL + 'Handlers/Ajax.ashx?PortalId=' + LiveCampaign.PortalId + '&ModuleId=' + LiveCampaign.ModuleId + '&CampaignId=' + CampaignId + '&Action=ReportChart', function (data) { 111 112 data = JSON.parse(data); 113 var chart = undefined; 114 for (var i = 0; i < charts.length; i++) { 115 var existingchart = charts[i];
116 if (existingchart != undefined && existingchart.div == "Graph") { 117 chart = existingchart.chartobject; 118 break; 119 } 120 } 121 if (chart == undefined) { 122 chart = new CanvasJS.Chart("Graph", 123 { 124 zoomEnabled: true, 125 axisY: { 126 includeZero: false 127 }, 128 data: [ 129 { 130 type: "area", 131 name: "Views", 132 showInLegend: "true", 133 xValueType: "dateTime", 134 color: "rgba(79, 129, 188,0.9)", 135 dataPoints: data.Views 136 }, 137 { 138 type: "area", 139 name: "Clicks", 140 showInLegend: "true", 141 xValueType: "dateTime", 142 color: "rgba(192, 80, 78,0.8)", 143 dataPoints: data.Clicks 144 } 145 ] 146 }); 147 chart.render(); 148 charts.push({ 149 div: "Graph", chartobject: chart 150 }); 151 } 152 else { 153 var ddataviewscnt = data.Views.length; 154 var ddataclickscnt = data.Clicks.length; 155 var adataviewscnt = chart.options.data[0].dataPoints.length; //views 156 var adataclickscnt = chart.options.data[1].dataPoints.length; //clicks 157 for (var i = 0; i < adataviewscnt; i++) { 158 chart.options.data[0].dataPoints.shift(); 159 } 160 for (var i = 0; i < adataclickscnt; i++) { 161 chart.options.data[1].dataPoints.shift(); 162 } 163 for (var i = 0; i < ddataviewscnt; i++) { 164 chart.options.data[0].dataPoints.push(data.Views[i]); 165 } 166 for (var i = 0; i < ddataclickscnt; i++) { 167 chart.options.data[1].dataPoints.push(data.Clicks[i]); 168 } 169 170 chart.render(); 171 } 172 173 }); 174 }, 175 InitReportPie: function (CampaignId, URL) { 176 177 jQuery.ajax({ 178 url: URL + 'Handlers/Ajax.ashx?PortalId=' + LiveCampaign.PortalId + '&ModuleId=' + LiveCampaign.ModuleId + '&CampaignId=' + CampaignId + '&Action=ReportPie', 179 dataType: 'json', 180 type: 'POST', 181 success: function (data) { 182 var chart = undefined; 183 184 for (var i = 0; i < charts.length; i++) { 185 var existingchart = charts[i]; 186 if (existingchart != undefined && existingchart.div == "Pie") { 187 chart = existingchart.chartobject; 188 break; 189 } 190 } 191 if (chart == undefined) { 192 chart = new CanvasJS.Chart("Pie", 193 { 194 theme: "theme2", 195 animationEnabled: true, 196 legend: { 197 198 fontSize: 15, 199 fontFamily: "arial" 200 }, 201 toolTip: { 202 enabled: true 203 }, 204 205 data: [ 206 { 207 type: "pie", 208 showInLegend: true, 209 indexLabelFontSize: 20, 210 indexLabelFontWeight: "bold", 211 indexLabelFontColor: "White", 212 indexLabelPlacement: "inside", 213 toolTipContent: "{y} - {legendText}", 214 dataPoints: data 215 } 216 ] 217 }); 218 219 chart.render(); 220 charts.push({ 221 div: "Pie", chartobject: chart 222 }); 223 } 224 else { 225 var ddatacnt = data.length; 226 var adatacnt = chart.options.data[0].dataPoints.length; 227 for (var i = 0; i < adatacnt; i++) { 228 chart.options.data[0].dataPoints.shift(); 229 } 230 for (var i = 0; i < ddatacnt; i++) { 231 chart.options.data[0].dataPoints.push(data[i]); 232 } 233 234 235 chart.render(); 236 } 237 238 } 239 }); 240 241 }, 242 InitClientUsagePie: function (CampaignId, URL) { 243 244 jQuery.ajax({ 245 url: URL + 'Handlers/Ajax.ashx?PortalId=' + LiveCampaign.PortalId + '&ModuleId=' + LiveCampaign.ModuleId + '&CampaignId=' + CampaignId + '&Action=ClientUsagePie', 246 dataType: 'json', 247 type: 'POST', 248 success: function (data) { 249 var chart = undefined; 250 251 for (var i = 0; i < charts.length; i++) { 252 var existingchart = charts[i];
253 if (existingchart != undefined && existingchart.div == "ClientUsagePie") { 254 chart = existingchart.chartobject; 255 break; 256 } 257 } 258 if (chart == undefined) { 259 chart = new CanvasJS.Chart("ClientUsagePie", 260 { 261 theme: "theme2", 262 animationEnabled: true, 263 legend: { 264 verticalAlign: "bottom", 265 horizontalAlign: "center" 266 }, 267 toolTip: { 268 enabled: true 269 }, 270 data: [ 271 { 272 type: "pie", 273 color: "{color}", 274 toolTipContent: "{indexLabel} - {device}", 275 dataPoints: data 276 } 277 ] 278 }); 279 280 chart.render(); 281 charts.push({ 282 div: "ClientUsagePie", chartobject: chart 283 }); 284 } 285 else { 286 var ddatacnt = data.length; 287 var adatacnt = chart.options.data[0].dataPoints.length; 288 for (var i = 0; i < adatacnt; i++) { 289 chart.options.data[0].dataPoints.shift(); 290 } 291 for (var i = 0; i < ddatacnt; i++) { 292 chart.options.data[0].dataPoints.push(data[i]); 293 } 294 295 296 297 chart.render(); 298 } 299 300 301 } 302 }); 303 304 }, 305 InitServerUsagePie: function (CampaignId, URL) { 306 307 jQuery.ajax({ 308 url: URL + 'Handlers/Ajax.ashx?PortalId=' + LiveCampaign.PortalId + '&ModuleId=' + LiveCampaign.ModuleId + '&CampaignId=' + CampaignId + '&Action=ServerPie', 309 dataType: 'json', 310 type: 'POST', 311 success: function (data) { 312 var chart = undefined; 313 314 for (var i = 0; i < charts.length; i++) { 315 var existingchart = charts[i]; 316 if (existingchart != undefined && existingchart.div == "PieServer") { 317 chart = existingchart.chartobject; 318 break; 319 } 320 } 321 if (chart == undefined) { 322 chart = new CanvasJS.Chart("PieServer", 323 { 324 theme: "theme2", 325 animationEnabled: true, 326 legend: { 327 328 fontSize: 12, 329 fontFamily: "arial" 330 }, 331 332 data: [ 333 { 334 type: "pie", 335 showInLegend: true, 336 indexLabelFontSize: 20, 337 indexLabelFontWeight: "bold", 338 indexLabelFontColor: "White", 339 indexLabelPlacement: "inside", 340 toolTipContent: "{legendText}-{y} Email(s) Sent", 341 dataPoints: data 342 } 343 ] 344 }); 345 346 chart.render(); 347 charts.push({ 348 div: "PieServer", chartobject: chart 349 }); 350 } 351 else { 352 var ddatacnt = data.length; 353 var adatacnt = chart.options.data[0].dataPoints.length; 354 for (var i = 0; i < adatacnt; i++) { 355 chart.options.data[0].dataPoints.shift(); 356 } 357 for (var i = 0; i < ddatacnt; i++) { 358 chart.options.data[0].dataPoints.push(data[i]); 359 } 360 361 362 363 chart.render(); 364 } 365 366 367 } 368 }); 369 370 }, 371 InitSorting: function (PortalId, ModuleId, Selector, AjaxHandler) { 372 373 jQuery('#' + Selector + ' tbody').sortable({ 374 update: function (event, ui) { 375 LiveCampaign.SortStates(PortalId, ModuleId, AjaxHandler, Selector); 376 }, 377 items: 'tr', 378 axis: 'y', 379 containment: 'parent' 380 }); 381 }, 382 383 SortStates: function (PortalId, ModuleId, AjaxHandler, Selector) { 384 385 var items = jQuery('#' + Selector + ' .SortItems'); 386 var SortOrders = ''; 387 388 for (var x = 0; x < items.length; x++) { 389 SortOrders += items[x].alt + ','; 390 }; 391 392 SortOrders = SortOrders.substring(0, SortOrders.length - 1); 393 394 jQuery.post(AjaxHandler, { 395 Action: 'SortSmtpGrid', 396 SortOrders: SortOrders, 397 PortalId: PortalId, 398 ModuleId: ModuleId 399 }, function (data) { 400 401 }); 402 }, 403 404 405 406 407 408 409 Join: function (PortalId, ModuleId, TabId, AjaxHandler, mfirstname, mlastname, memail, namechecked) { 410 var Firstname = ''; 411 var Lastname = '';
412 var Email = jQuery('#LCSignUp' + ModuleId + ' .email').val(); 413 var ErrorMessage = ''; 414 415 if (namechecked.toLowerCase() == 'true') { 416 Firstname = jQuery("#LCSignUp" + ModuleId + " .first-name").val(); 417 Lastname = jQuery("#LCSignUp" + ModuleId + " .last-name").val(); 418 if (Firstname == '') 419 ErrorMessage += mfirstname + '\n'; 420 if (Lastname == '') 421 ErrorMessage += mlastname + '\n'; 422 } 423 424 if (Email == "") 425 ErrorMessage += memail + "\n"; 426 else if (!LiveCampaign.IsValidEmail(Email)) 427 ErrorMessage += memail + "\n"; 428 var Data = []; 429 jQuery('#cblSubscriber' + ModuleId + ' input:checkbox').each(function () { 430 Data.push(new LiveCampaign.SubscriberList(jQuery(this).val(), jQuery(this).is(":checked"))); 431 }); 432 433 Data = JSON.stringify(Data); 434 if (ErrorMessage == '') { 435 436 437 LCampaignwebapi.webApi.post('request/Join', 'FirstName=' + Firstname + '&LastName=' + Lastname + '&Email=' + Email, Data).success(function (data) { 438 if (data.indexOf("check-mark.png") > 0) { 439 jQuery("#LCSignUp" + ModuleId).css("minheight", jQuery("#LCSignUp" + ModuleId).height() + "px"); 440 jQuery("#LCSignUp" + ModuleId).html(data); 441 } 442 else 443 jQuery("#LCSignUp" + ModuleId).prepend(data); 444 }); 445 446 } 447 else 448 alert(ErrorMessage); 449 }, 450 451 SubscriberList: function (ListID, Enabled) { 452 this.ListID = ListID; 453 this.Enabled = Enabled; 454 }, 455 IsValidEmail: function (Email) { 456 var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i); 457 return pattern.test(Email); 458 } 459};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.