8 function PrintAuditInit($isAllAdmin =
false) { ?>
9 <?php
if ($isAllAdmin) { ?>
10 $.homecuValidator.setup({formValidate:
"searchForm", formStatusField:
"formValidateDiv"});
12 $.homecuValidator.setup({formValidate:
'auditPrintForm', formStatusField:
'formValidateStatusDiv'});
15 var grid = $(
"#auditGrid").kendoGrid({
18 read:
function(options) {
19 options.success(auditData);
26 rown: {type:
"number"},
28 action: {type:
"string"},
29 actioncode: {type:
"string"},
30 details: {type:
"odata"},
31 user: {type:
"string"},
32 <?php
if ($isAllAdmin) { ?>
33 srcuser: {type:
"string"},
35 script: {type:
"string"},
36 checked: {type:
"boolean"},
37 isPrinting: {type:
"boolean"}
43 {
template:
"<input type='checkbox' class='rowCheckbox'>", attributes: {
"class":
"checkboxTD"},
44 headerTemplate:
"<input type='checkbox' class='allCheckbox'>", width:
"45px", sortable:
false, filterable:
false},
45 {field:
"date", title:
"Date", format:
"{0:G}"},
46 <?php
if ($isAllAdmin) { ?>
47 {field:
"user", title:
"Audit User"},
48 {field:
"srcuser", title:
"Changed by"},
50 {field:
"user", title:
"User"},
52 {field:
"action", title:
"Action Type"},
56 template:
"<tr class='noRecordsDiv'><td colspan='4'>No Records Found</td></tr>" 60 toolbar: [{name:
"print", text:
"Print"}<?php
if ($isAllAdmin) { ?>, {name:
"show", text:
"Show Filter"} <?php } ?>],
61 detailTemplate: kendo.template($(
"#auditDetailTemplate").html()),
64 $(
"#auditGrid").on(
"click",
".auditDetailContainer .auditShowAllBtn",
function() {
65 if ($(
this).text().trim() ==
"Show All") {
66 $(
this).closest(
".auditDetailContainer").removeClass(
"hideAA");
67 $(
this).text(
"Show Changed");
69 $(
this).closest(
".auditDetailContainer").addClass(
"hideAA");
70 $(
this).text(
"Show All");
76 <?php printCheckboxEvents(
"#auditGrid",
".k-grid-print"); ?>
78 $(
".k-grid-print").addClass(
"k-state-disabled");
80 $(
".k-grid-print").click(
function() {
81 if (!$(
this).hasClass(
"k-state-disabled")) {
87 $(
".k-grid-show").click(
function() {
88 if ($(
this).text().trim() ==
"Show Filter") {
89 $(
".auditFilterDiv").show();
90 $(
this).text(
"Hide Filter");
92 $(
".auditFilterDiv").hide();
93 $(
this).text(
"Show Filter");
98 function printAuditOpenPopup() { ?>
99 function auditOpenPopup(auditData) {
100 var dialog = $(
"#auditDetailWindow").data(
"kendoDialog");
101 var
template = kendo.template($(
"#auditDetailTemplate").html());
103 if (dialog ==
null) {
104 dialog = $(
"#previewWindow").kendoDialog({
106 actions: [{text:
"Okay", primary:
true}],
111 if (window.activeWindows !=
null) {
112 window.activeWindows.push(
this);
116 if (window.activeWindows !=
null) {
117 window.activeWindows.pop();
120 }).data(
"kendoDialog");
123 dialog.content(
template(auditData)).open();
125 var maxHeight1 = 600;
126 var maxHeight2 = $(window).height() - 150;
127 var maxHeight = maxHeight2 >= maxHeight1 ? maxHeight1 : maxHeight2;
128 $(dialog.wrapper).css({top: 5});
129 $(
"#previewWindow .auditMaxHeight").css({maxHeight: maxHeight, overflowY:
"auto", overflowX:
"hidden"});
133 function PrintPrintAudits($mode) {
139 function PrintAudits() {
140 $(
"<div id='tempAudit' style='display:none;'><div class='container'><div class='row form-group mockKendoTable auditInsertion'></div></div></div>").appendTo(
"body");
142 var gridData = $(
"#auditGrid").data(
"kendoGrid").dataSource.view();
143 var rowTemplate = kendo.template(
"<div class='tr nobottom'><span class='col-xs-4'>#: action #</span><span class='col-xs-4'>#: user #</span>\ 144 <span class='col-xs-4'>#= kendo.toString(date, 'd') #</span></div>\ 145 <div class='tr notop'><span class='col-xs-12'><div class='container-fluid'><div class=' col-xs-12'>" + $(
"#auditDetailTemplate").html() +
"</div></div></span></div>");
147 $(
".auditInsertion").append(
"<div class='th'><span class='col-xs-4'>Action</span><span class='col-xs-4'>User</span><span class='col-xs-4'>Date</span></div>")
149 for(var i = 0; i != gridData.length; i++) {
150 var record = gridData[i];
151 if (record.checked) {
152 record.isPrinting =
true;
153 $(
".auditInsertion").append(rowTemplate(record));
156 var newWindow = window.open(
"",
"auditPrint");
157 $(
"#auditPrintForm [name='shell']").val($(
"#tempAudit").html());
158 <?php
if ($mode ==
"user") { ?>
159 $(
"#auditPrintForm [name='title']").val(
"User Audit of " + $(
".kWindowCard .k-window-title").text().split(
"/")[2].trim());
160 <?php }
else if ($mode ==
"admin") { ?>
161 $(
"#auditPrintForm [name='title']").val(
"Admin Audit of " + $(
".userHeader .realname.h2").text());
162 <? }
else if ($mode ==
"all admin") { ?>
163 $(
"#auditPrintForm [name='title']").val(
"Admin Audit");
165 $(
"#auditPrintForm").submit();
166 $(
"#tempAudit").
remove();
168 for(var i = 0; i != gridData.length; i++) {
169 var record = gridData[i];
170 if (record.checked) {
171 record.isPrinting =
false;
181 function PrintAuditTemplates($isAllAdmin =
false) { ?>
182 <script type=
"text/x-kendo-template" id=
"auditDetailTemplate">
183 <div
class=
"auditMaxHeight"><div
class=
"container-fluid auditDetailContainer hideAA">
185 # for (var i = 0, iLength = details.length; i != iLength; i++) { # 186 # var tableRow = details[i]; # 187 # if (iLength > 1) { # 188 <?php printHeader(
"#: tableRow.label # # if (tableRow.type != 'mixed') { # (#: tableRow.type # records) # } #"); ?>
190 # for (var j = 0, jLength = tableRow.rows.length; j != jLength; j++) { # 191 # var rowRow = tableRow.rows[j]; var showBefore = true; var showAfter = true; # 192 # switch(rowRow.type) { 193 case "add": showBefore =
false;
break;
194 case "remove": showAfter =
false;
break;
196 var theseClasses = showBefore && showAfter ?
"col-xs-4 col-md-4" :
"col-xs-8 col-md-8"; #
197 # if (tableRow.type == 'mixed') { # <?php printHeader("#: rowRow.type # record:"); ?> # } # 198 <div
class=
"row form-group mockKendoTable">
199 # if (!isPrinting && j == 0 && i == 0) { # 200 <a href=
'\\#' class=
'auditShowAllBtn'>Show All</a><br>
203 <span
class=
"col-xs-3 col-md-4">Column</span>
204 # if (showBefore) { # <span class="#: theseClasses #">Before</span> # } # 205 # if (showAfter) { # <span class="#: theseClasses #">After</span> # } # 206 <div
class=
"clearfix hidden-xs-block"></div>
209 # for (var k = 0, kLength = rowRow.values.length; k != kLength; k++) { # 210 # var colRow = rowRow.values[k]; var same = !isPrinting && colRow.same ? "aa" : "";# 211 <div
class=
"tr #: same #">
212 <span
class=
"col-xs-3 col-md-4">#: colRow.label #</span>
213 # if (showBefore) { # <span class="#: theseClasses #"># if (colRow.before == "") { # # } else { # #: colRow.before # # } #</span> # } # 214 # if (showAfter) { # <span class="#: theseClasses #"># if (colRow.after == "") { # # } else { # #: colRow.after # # } #</span> # } # 215 <div
class=
"clearfix hidden-xs-block"></div>
225 function printFullTabClickEvents($username, $fullDirtyCheck=
false, $onlySaveChanges=
false)
227 $(
".fullTab").on(
"click",
".tabTitles [data-name]",
function() {
228 if (!$(
this).hasClass(
"selected")) <?php
230 var tabs= window.tabs ==
null ? userSupportContents.tabs : window.tabs;
231 var tab= tabs[$(
this).data(
"name")];
232 var selectedTab= tabs[$(
".tabTitles .selected").data(
"name")];
234 <?php
if ($fullDirtyCheck) { ?>
235 var oldTabHash= selectedTab.oldHash;
236 var newTabHash= kendo.stringify(selectedTab.getSaveParameters(
false)).hashCode();
238 if (oldTabHash != newTabHash)
239 $(
".tabTitles .selected").find(
".tabAsterisk").show();
241 $(
".tabTitles .selected").find(
".tabAsterisk").hide();
242 $(
".fullTab").data(
"oldTabHash", newTabHash);
245 <?php
if (!$fullDirtyCheck) { ?>
246 potentiallyCancelChanges(selectedTab, tab);
249 $(
".tabContents").hide();
250 $(
".tabContents[data-name='" + tab.name +
"']").show();
251 tab.setupValidator();
252 $(
".fullTab .selected").removeClass(
"selected");
253 $(
this).addClass(
"selected");
259 $(
".fullTab").on(
"click",
".tabSaveBtn",
function() {
260 var tabs= window.tabs ==
null ? userSupportContents.tabs : window.tabs;
261 var tabSelector= $(
".tabTitles .selected");
262 var tab= tabs[$(tabSelector).data(
"name")];
264 <?php
if (!$fullDirtyCheck) { ?>
265 saveTab(tab,
"stay",
null, tabSelector);
272 $(
".fullTab").on(
"click",
".tabCancelBtn",
function() {
273 var tabs= window.tabs ==
null ? userSupportContents.tabs : window.tabs;
274 <?php
if (!$fullDirtyCheck) { ?>
275 var tabSelector= $(
".tabTitles .selected");
276 var tab= tabs[$(tabSelector).data(
"name")];
277 potentiallyCancelChanges(tab);
279 potentiallyCancelChanges(tabs);
285 function printTabFunctions($self, $username, $authval, $fullDirtyCheck=
false)
293 if (!$fullDirtyCheck) { ?>
294 function saveTab(tab, onlySaveChanges)
296 var oldHash= kendo.stringify(previousParameters).hashCode();
297 var newHash= kendo.stringify(tab.getSaveParameters(
false)).hashCode();
298 if (newHash == oldHash)
300 postSaveTab(tab,
true);
304 if ($.homecuValidator.validate())
306 var parameters= tab.getSaveParameters(
true);
307 parameters.authval=
"<?php echo $authval; ?>";
308 <?php
if ($username ==
"") { ?>
309 parameters.isAdd=
"Y";
311 parameters.username=
"<?php echo $username; ?>";
313 parameters.tab= tab.name;
315 $.post(
"<?php echo $self; ?>&operation=saveUser", parameters,
function(data) {
317 if (data.error.length > 0)
318 $.homecuValidator.displayMessage(data.error, $.homecuValidator.settings.statusError );
319 else if (data.serverIPFoundRelevant && data.serverIPFound ===
false)
320 window.location.href=
"<?php echo $self; ?>";
334 function saveTabs(tabs)
339 if (!$.homecuValidator.validate())
346 for (var tabname in tabs)
348 if (tabname ==
"oldHash")
351 var tab= tabs[tabname];
353 tab.setupValidator();
354 if (!$.homecuValidator.validate())
355 throw new exception(
"Invalid!");
358 for (var tabname in tabs)
360 if (tabname ==
"oldHash")
363 var tab= tabs[tabname];
364 var tabParameters= tab.getSaveParameters(
true);
365 changed= changed || tab.oldHash != kendo.stringify(tabParameters).hashCode();
368 for(var parameter in tabParameters)
370 if (tabParameters.hasOwnProperty(parameter))
371 parameters[parameter]= tabParameters[parameter];
378 if (typeof(postSaveTabs) ==
"function")
379 postSaveTabs(tabs, []);
389 if (valid && changed)
391 parameters.authval=
"<?php echo $authval; ?>";
392 <?php
if ($username ==
"") { ?>
393 parameters.isAdd=
"Y";
395 parameters.username=
"<?php echo $username; ?>";
397 parameters.tab= tab.name;
399 $.post(
"<?php echo $self; ?>&operation=saveUser", parameters,
function(data) {
401 if (data.error.length > 0)
402 $.homecuValidator.displayMessage(data.error, $.homecuValidator.settings.statusError );
405 if (typeof(postSaveTabs) ==
"function")
406 postSaveTabs(tabs, data);
422 function postSaveTab(tab, noNotificationPlease)
424 $(
"#formValidateDiv").hide();
426 if (!noNotificationPlease)
428 previousParameters= tab.getSaveParameters(
false,
true); <?php
429 showSuccessMessage(
"User was saved successfully!");
433 function loadTabInnards(tab, data)
435 var tabTemplate= kendo.template($(
"#tabTemplate").html());
436 var
template= kendo.template(tab.template);
437 var record= data.record[0];
438 record.usernamesUsed= data.usernamesUsed;
439 record.tabname= tab.name;
441 <?php
if (!$fullDirtyCheck) { ?>
442 $(
".fullTab").html(tabTemplate(record));
443 $(
".tabContents").html(
template(record));
445 $(
".fullTab").html(tabTemplate(record));
446 $(
".tabContents").hide();
447 $(
".tabContents[data-name='" + record.tabname +
"']").html(
template(record));
448 $(
".tabContents[data-name='" + record.tabname +
"']").show();
452 previousParameters= tab.getSaveParameters(
false,
true);
463 if (!$fullDirtyCheck) {
465 function loadTab(tab)
468 $.post(
"<?php echo $self; ?>&operation=readUser", {username:
"<?php echo $username; ?>", authval:
"<?php echo $authval; ?>", tab: tab.name},
function(data) {
470 if (data.error.length > 0)
471 $.homecuValidator.displayMessage(data.error, $.homecuValidator.settings.statusError );
474 loadTabInnards(tab, data);
480 function loadTab(tab)
482 if (loadTab.data ==
null)
485 $.post(
"<?php echo $self; ?>&operation=readUser", {username:
"<?php echo $username; ?>"},
function(data) {
487 if (data.error.length > 0)
488 $.homecuValidator.displayMessage(data.error, $.homecuValidator.settings.statusError );
492 loadTabInnards(tab, loadTab.data);
497 loadTabInnards(tab, loadTab.data);
507 if (!$fullDirtyCheck) { ?>
508 function potentiallyCancelChanges(tab, nextTab)
510 var oldHash= kendo.stringify(previousParameters).hashCode();
511 var newHash= kendo.stringify(tab.getSaveParameters(
false,
true)).hashCode();
512 if (newHash == oldHash)
514 if (typeof(tabCancelLogic) ==
"function")
515 tabCancelLogic(tab, nextTab);
519 $(
"#redirectForm").submit();
529 var discardChangesDialog= $(
"#discardChangesDialog").data(
"kendoDialog");
530 if (discardChangesDialog ==
null)
532 discardChangesDialog= $(
"<div id='discardChangesDialog'></div>").appendTo(
"body").kendoDialog({
533 title:
"Discard Changes",
534 content:
"<p>Your changes have not been saved.</p><p>Do you wish to discard your changes?</p>",
537 {text:
"Yes", primary:
true, action:
function() {
538 var nextTab= $(
"#discardChangesDialog").data(
"nextTab");
539 var tab= $(
"#discardChangesDialog").data(
"tab");
540 if (typeof(tabCancelLogic) ==
"function")
541 tabCancelLogic(tab, nextTab);
545 $(
"#redirectForm").submit();
556 if (window.activeWindows !=
null)
557 window.activeWindows.push(
this);
560 if (window.activeWindows !=
null)
561 window.activeWindows.pop();
563 }).data(
"kendoDialog");
566 $(
"#discardChangesDialog").data(
"tab", tab);
569 $(
"#discardChangesDialog").data(
"nextTab",
null);
571 $(
"#discardChangesDialog").data(
"nextTab", nextTab);
572 discardChangesDialog.open();
575 function potentiallyCancelChanges(tabs)
577 var oldHash= tabs.oldHash;
580 var tempParameters= [];
582 for (var tabname in tabs)
584 if (tabs.hasOwnProperty(tabname) && tabname !=
"oldHash")
586 var tab= tabs[tabname];
587 newHash.push(tab.getSaveParameters(
false));
588 tempParameters.push(tab.getSaveParameters(
true));
592 newHash= kendo.stringify(newHash).hashCode();
593 if (newHash == oldHash)
595 if (typeof(tabsCancelLogic) ==
"function")
596 tabsCancelLogic(tabs);
600 var discardChangesDialog= $(
"#discardChangesDialog").data(
"kendoDialog");
601 if (discardChangesDialog ==
null)
603 discardChangesDialog= $(
"<div id='discardChangesDialog'></div>").appendTo(
"body").kendoDialog({
604 title:
"Discard Changes",
605 content:
"<p>Your changes have not been saved.</p><p>Do you wish to discard your changes?</p>",
608 {text:
"Yes", primary:
true, action:
function() {
609 var tabs= $(
"#discardChangesDialog").data(
"tabs");
610 if (typeof(tabsCancelLogic) ==
"function")
611 tabsCancelLogic(tabs);
616 if (window.activeWindows !=
null)
617 window.activeWindows.push(
this);
620 if (window.activeWindows !=
null)
621 window.activeWindows.pop();
623 }).data(
"kendoDialog");
626 $(
"#discardChangesDialog").data(
"tabs", tabs);
627 discardChangesDialog.open();
636 function loginPrintPublicNote()
638 $(
"#publicNote").click(
function(e) {
639 var position= $(
this).offset();
640 var notification= $(
"<div></div>").appendTo(
"body").kendoNotification({
647 }).data(
"kendoNotification");
649 notification.info(
'Public computers are found at libraries, schools, Internet cafes, airports, and many other places. <br>You have no control over who uses public computers. \ 650 <br>Public computers may be running malicious software like keystroke loggers or be on networks that allow others to get your personal information. \ 651 <br><br>We strongly suggest you do <i>NOT</i> use a public computer for digital banking. <br>If you decide to use one anyway, you should check the box so we do not save a security \ 652 token to this public computer.');
661 function loginPrintSaveToken()
663 <div
class=
"well well-sm ">
664 <div
class=
"form-horizontal form-widgets">
665 <div
class=
"form-group">
666 <div
class=
"col-xs-12">
667 <label style=
"cursor: pointer"><input type=
"radio" name=
"chksecure" value=
"Y" checked>
668 This is my Personal or Business Computer<br> (Save security token on
this computer)</label>
670 <label style=
"cursor: pointer">
671 <input type=
"radio" name=
"chksecure" value=
"N">
672 This is a <a href="#" id="publicNote">Public Computer</a><br> (DO NOT Save security token on
this computer)</label>
686 function printValidatePassword($requirePassword=
false)
688 vp1:
function(input) {
689 if (!input.is(
"[name='oldPassword']"))
692 var password= $(input).val().trim();
693 if (password ==
"" <?php
if (!$requirePassword) { ?> && $(
"[name='password']").val().trim() !=
"" <?php }
694 $(input).attr(
"data-vp1-msg",
"Old password is required.");
699 vp2:
function(input) {
700 if (!input.is(
"[name='showHelp']"))
702 if (!$(input).prop(
"checked") <?php
if (!$requirePassword) { ?> && $(
"[name='password']").val().trim() !=
"" <?php }
703 $(input).attr(
"data-vp2-msg",
"Please review the recommended password guidelines before saving your new password.");
708 validatepassword:
function(input) {
709 if (!input.is(
"[name='password']"))
712 var password= $(input).val().trim();
717 var invalidMatches= password.match(/[
'"]/g); 718 if (invalidMatches != null && invalidMatches.length > 0) { 719 msg= msg == "" ? "Password has illegal characters." : msg; 723 var rules= $.homecuValidator.passwordRules; 725 if (rules == null || rules.use == null || rules.use != 1) 726 rules= {len: 6, letter: 1, digit: 1}; 728 if (rules.len != null && password.length < rules.len) { 729 msg= msg == "" ? "Password requires at least " + rules.len + (rules.len == 1 ? " character." : " characters.") : msg; 730 $(".passreq.len").css("color", "red"); 731 $(".passreq.len .fa").addClass("fa-times").removeClass("fa-check"); 734 $(".passreq.len").css("color", "green"); 735 $(".passreq.len .fa").removeClass("fa-times").addClass("fa-check"); 738 var specMatches= password.match(/[!#@$%^&*?_~()-]/g); 739 var lowerMatches= password.match(/[a-z]/g); 740 var upperMatches= password.match(/[A-Z]/g); 741 var digitMatches= password.match(/[0-9]/g); 743 if (rules.spec != null && rules.spec > 0 && (specMatches == null || specMatches.length < rules.spec)) { 744 msg= msg == "" ? "Password requires at least " + rules.spec + " special character" + (rules.spec == 1 ? "." : "s."): msg; 745 $(".passreq.spec").css("color", "red"); 746 $(".passreq.spec .fa").addClass("fa-times").removeClass("fa-check"); 749 $(".passreq.spec").css("color", "green"); 750 $(".passreq.spec .fa").removeClass("fa-times").addClass("fa-check"); 753 if (rules.lower != null && rules.lower > 0 && (lowerMatches == null || lowerMatches.length < rules.lower)) { 754 msg= msg == "" ? "Password requires at least " + rules.lower + " lower character" + (rules.lower == 1 ? "." : "s."): msg; 755 $(".passreq.lower").css("color", "red"); 756 $(".passreq.lower .fa").addClass("fa-times").removeClass("fa-check"); 759 $(".passreq.lower").css("color", "green"); 760 $(".passreq.lower .fa").removeClass("fa-times").addClass("fa-check"); 763 if (rules.upper != null && rules.upper > 0 && (upperMatches == null || upperMatches.length < rules.upper)) { 764 msg= msg == "" ? "Password requires at least " + rules.upper + " upper character" + (rules.upper == 1 ? "." : "s."): msg; 765 $(".passreq.upper").css("color", "red"); 766 $(".passreq.upper .fa").addClass("fa-times").removeClass("fa-check"); 769 $(".passreq.upper").css("color", "green"); 770 $(".passreq.upper .fa").removeClass("fa-times").addClass("fa-check"); 773 if (rules.digit != null && rules.digit > 0 && (digitMatches == null || digitMatches.length < rules.digit)) { 774 msg= msg == "" ? "Password requires at least " + rules.digit + " digit character" + (rules.digit == 1 ? "." : "s."): msg; 775 $(".passreq.digit").css("color", "red"); 776 $(".passreq.digit .fa").addClass("fa-times").removeClass("fa-check"); 779 $(".passreq.digit").css("color", "green"); 780 $(".passreq.digit .fa").removeClass("fa-times").addClass("fa-check"); 783 <?php if ($requirePassword) { ?> 784 if (password == "") { 785 $("[name='confirm
']").removeClass("k-invalid").addClass("k-valid"); 786 msg= "Password is required."; 795 $(input).attr("data-validatepassword-msg", msg); 798 return true; <?php // Got through the validation ?> 802 function printPasswordRequirementTemplate (){ ?> 803 <script type="text/x-kendo-template" id="passwordRequirementTemplate"> 804 # if (pwdRequirements.length > 0) { # 805 <div class="well well-sm row"> 806 <div class="col-xs-12"> 807 <label for="passRequirements">Minimum Password Requirements:</label> 809 <div class="col-xs-12"> 810 <div id="passRequirements" style="width: 200px;"> 811 # for(var i=0, length= pwdRequirements.length; i!= length; i++) { 812 var rec= pwdRequirements[i]; # 813 <span class='passreq #= rec.which #
' style='color: red;
'> 814 <span class='fa fa-times
'></span> 815 <span>#= rec.text #</span> 831 function printMatchPasswords()
833 matchpasswords: function(input)
835 if (!input.is("[name='confirm
']")) 837 if ($(input).val() != $("[name='password
']").val()) 839 $(input).attr("data-matchpasswords-msg", "Password must match confirmation."); 862 function printTabPlugin()
864 <script type="text/x-kendo-template" id="tabHeaderTemplate">
865 # var tabAsterisk= "<div class='tabAsterisk
' style='display:none;
'><i class='fa fa-asterisk fa-6
'></i></div>"; var selectedClass= selected ? "selected" : ""; 866 var lastChildClass= lastChild ? "lastChild" : ""; # 867 <div class="#: spacing # #: selectedClass # #: lastChildClass #" data-name="#: title #" data-tab-index="#: index #"><div># if (icon != "") { #<i class="fa #: icon # fa-6"># } # 868 # if (text != "") { #<div class="hidden-xs hidden-sm text"> #: text #</div># } # #= tabAsterisk #</i></div> 871 <script type="text/javascript"> 874 // plugin: content/definition 875 // element: DOM selector for tabs container 876 // options: user defined settings for tabs 877 $.hcuTabs = function(element, options) { 880 select: function() {}, 881 validate: function() { return true; }, <?php // This actually doesn't validate, it really just returns
if the tab is dirty or not. ?>
882 formValidate:
function(tabId) { return true; }, <?php
883 useDiscardChangesDialog:
false,
884 discardChangesTitle:
"Discard Changes",
885 discardChangesText:
"<p>Do you wish to discard your changes?</p>",
886 discardChangesOkay:
function() { return true; },
887 discardChangesWindowStack: []
892 plugin.settings = {};
895 $(element).html(
"<div class=\"hcu-template\"></div>");
896 var pluginContainer = $(element).find(
".hcu-template");
897 var pluginHeader = $(
"<div class=\"tabTitles\"></div>");
898 var pluginContent = $(
"<div id=\"tabContent\"></div>");
899 var pluginFooter = $(
"<div id=\"tabFooter\"></div>");
903 plugin.init =
function() {
904 plugin.settings = $.extend({}, defaults, options);
907 pluginContainer.append(pluginHeader);
908 pluginContainer.append(pluginContent);
909 pluginContainer.append(pluginFooter);
915 var pluginTabsLength = plugin.settings.tabs.length;
916 var pluginTabsColumns = 0;
918 switch (pluginTabsLength) {
920 pluginTabsColumns = 3;
923 pluginTabsColumns = 3;
926 pluginTabsColumns = 3;
929 pluginTabsColumns = 3;
932 pluginTabsColumns = 3;
936 var headerTemplate = kendo.template($(
"#tabHeaderTemplate").html());
938 for (var i = 0; i < pluginTabsLength; i++) {
939 var tab = plugin.settings.tabs[i];
942 var tabContent =
null;
950 if (typeof tab.content ==
"string") {
953 tabContent = $(
"#" + tab.content);
954 plugin.settings.tabs[i].content = tabContent;
956 tabContent = tab.content;
963 tabContent.attr(
"data-name", tab.title);
964 tabContent.attr(
"data-tab-index", i);
979 tab.lastChild = i == pluginTabsLength - 1;
980 tab.spacing =
"col-xs-" + pluginTabsColumns;
981 tab.icon = tab.icon ==
null ?
"" : tab.icon.trim();
982 tab.text = tab.text ==
null ?
"" : tab.text.trim();
983 tab.selected = tab.selected ==
null ? false : tab.selected;
984 pluginHeader.append(headerTemplate(tab));
985 pluginContent.append(tabContent);
988 if (plugin.settings.useDiscardChangesDialog) {
989 pluginHeader.on(
"click",
"[data-name]",
function() {
992 var activeTab =
null;
993 for (var i = 0; i < plugin.settings.tabs.length; i++) {
994 var tab = plugin.settings.tabs[i];
1002 var tabWarn = $(
".tabTitles [data-tab-index=" + activeTab.index +
"] .tabAsterisk");
1004 var dontAdvance =
false;
1009 if (activeTab.validate) {
1010 if (activeTab.validate()) { <?php
1015 if (plugin.settings.formValidate()) { <?php
1016 plugin.openDiscardChangesDialog(activeTab, $(
this).attr(
"data-tab-index"), tabWarn); <?php
1019 dontAdvance =
true; <?php
1024 plugin.select($(
this).attr(
"data-tab-index"));
1032 pluginHeader.on(
"click",
"[data-name]",
function() {
1033 plugin.select($(
this).attr(
"data-tab-index"));
1039 var footer = plugin.settings.footer;
1040 if (footer !=
null) {
1041 pluginFooter.append(typeof footer ==
"string" ? $(
"#" + footer) : footer);
1049 plugin.select =
function(e) {
1054 var tabCurrent = pluginHeader.find(
".selected");
1055 var tabCurrentIndex = tabCurrent.attr(
"data-tab-index");
1056 var tabCurrentContent = pluginContent.find(
"div[data-tab-index=" + tabCurrentIndex +
"]");
1061 var tabSelectedIndex = e;
1062 var tabSelected = pluginHeader.find(
"div[data-tab-index=" + tabSelectedIndex +
"]");
1063 var tabSelectedContent = pluginContent.find(
"div[data-tab-index=" + tabSelectedIndex +
"]");
1067 tabCurrent.removeClass(
"selected");
1068 tabCurrentContent.hide();
1072 tabSelected.addClass(
"selected");
1073 tabSelectedContent.show();
1076 plugin.settings.tabs[tabCurrent.index()].selected =
false;
1077 plugin.settings.tabs[tabSelected.index()].selected =
true;
1081 plugin.settings.select();
1087 plugin.validate =
function() {
1088 var tabValid =
true;
1090 for (var i = 0; i < plugin.settings.tabs.length; i++) {
1093 var tabWarn = $(
".tabTitles [data-tab-index=" + i +
"] .tabAsterisk");
1098 if (plugin.settings.tabs[i].validate) {
1099 var tabValidate = plugin.settings.tabs[i].validate;
1100 if (tabValidate()) {
1112 tabValid = (tabValid && plugin.settings.validate());
1124 plugin.openDiscardChangesDialog =
function (tab, newIndex, tabWarn) {
1125 var discardChangesDialog = $(
"#discardChangesDialog").data(
"kendoDialog");
1126 var title = tab.discardChangesTitle !== undefined ? tab.discardChangesTitle : plugin.settings.discardChangesTitle;
1127 var content = tab.discardChangesText !== undefined ? tab.discardChangesText : plugin.settings.discardChangesText;
1128 var discardChangesOkay = tab.discardChangesOkay !== undefined ? tab.discardChangesOkay : plugin.settings.discardChangesOkay;
1129 if (discardChangesDialog !=
null) {
1130 discardChangesDialog.destroy();
1131 $(
"#discardChangesDialog").
remove();
1134 discardChangesDialog = $(
"<div id='discardChangesDialog'></div>").appendTo(
"body").kendoDialog({
1139 {text:
"Yes", primary:
true, action:
function() {
1140 (discardChangesOkay)();
1142 plugin.select(newIndex); <?php
1147 if (plugin.settings.discardChangesWindowStack !=
null) {
1148 plugin.settings.discardChangesWindowStack.push(
this);
1152 if (plugin.settings.discardChangesWindowStack !=
null) {
1153 plugin.settings.discardChangesWindowStack.pop();
1156 }).data(
"kendoDialog");
1165 $.fn.hcuTabs =
function(options) {
1169 if (undefined == $(
this).data(
"hcuTabs")) {
1170 plugin =
new $.hcuTabs(
this, options);
1171 $(
this).data(
"hcuTabs", plugin);
1184 function printCheckip()
1186 checkip:
function(input)
1188 if(input.is(
"[name='addCuIpInput']"))
1190 var value= $(input).val().trim();
1191 if (value ==
null || value ==
"")
1193 if (!value.match(/^([0-9]{1,3}\.){3}[0-9]{1,3}$/))
1195 $(input).attr(
"data-checkip-msg",
"IP is not valid.");
1199 values= value.split(
".");
1200 for(var i=0; i!= values.length; i++)
1202 var num= Number(values[i]);
1203 if (num > 255 || num < 0 || (num+
"").trim() != values[i].trim())
1205 $(input).attr(
"data-checkip-msg",
"IP is not valid.");
1210 var data= $(
".ipGrid").data(
"kendoGrid").dataSource.data();
1211 if ($.grep(data,
function(n,i) {
return n.ip == value; }).length != 0)
1213 $(input).attr(
"data-checkip-msg",
"IP already exists.");