8 function getCancelFunction() {
13 $(
"#invalidRequestClientSide").val(
false);
14 $(
"#invalidRequestServerSide").val(
false);
22 function getParseCrudGridFunction() {
30 function parseCrudGrid(data, isDetail)
32 var statusField= typeof(isDetail) !=
"undefined" && isDetail ?
"formValidatePopupDetailDiv" :
"formValidatePopupDiv";
33 var errorLocation= data.operation ==
"update" || data.operation ==
"add" ? statusField :
"formValidateMainDiv";
34 $(
"#invalidRequestServerSide").val(errorsAreShown(data, errorLocation));
40 function getSetupValidatorInGridFunction() {
47 function setupValidatorInGrid(e, isDetail, validatorDefinition, stillHomecuValidator)
49 if ($(
"#invalidRequestClientSide").length == 0)
50 $(
"body").append(
"<input type='hidden' id='invalidRequestClientSide'>");
51 if ($(
"#invalidRequestServerSide").length == 0)
52 $(
"body").append(
"<input type='hidden' id='invalidRequestServerSide'>");
53 var form=
"popupForm";
54 var statusField=
"formValidatePopupDiv";
55 if (typeof(isDetail) !=
"undefined" && isDetail)
57 form=
"popupFormDetail";
58 statusField=
"formValidatePopupDetailDiv";
61 if (typeof(validatorDefinition) ==
"undefined")
62 $.homecuValidator.setup({formValidate: form, formErrorTitle:
'The following errors were detected:',
63 formStatusField: statusField});
64 else if (stillHomecuValidator !=
null && stillHomecuValidator)
65 $.homecuValidator.setup(validatorDefinition);
67 $(
"#"+form).kendoValidator(validatorDefinition);
70 e.sender.editable.validatable.validate =
function () {
return true; };
71 e.sender.editable.validatable.validateInput =
function(input) {
return true; };
76 $(
"#invalidRequestClientSide").val(
false);
77 $(
"#invalidRequestServerSide").val(
false);
79 var cancelClicked=
false;
81 $(
".k-popup-edit-form .k-grid-cancel").click(
function () {
85 $(
".k-popup-edit-form .k-grid-update").click(
function () {
87 if (!$(
this).hasClass(
"k-state-disabled"))
89 $(
this).addClass(
"k-state-disabled");
98 var window = e.sender.editable.element.data(
"kendoWindow");
99 window.bind(
"close",
function(eWindow){
100 var invalidRequestClientSide= $(
"#invalidRequestClientSide").val() ==
"true";
101 var invalidRequestServerSide= $(
"#invalidRequestServerSide").val() ==
"true";
102 if (!cancelClicked && (invalidRequestClientSide || invalidRequestServerSide))
104 eWindow.preventDefault();
105 $(
".k-popup-edit-form .k-grid-update").removeClass(
"k-state-disabled");
112 function getUseValidatorInGridFunction() {
117 function useValidatorInGrid(e, isDetail, useCommonValidator)
119 if ($(
"#invalidRequestClientSide").length == 0)
120 $(
"body").append(
"<input type='hidden' id='invalidRequestClientSide'>");
121 if ($(
"#invalidRequestServerSide").length == 0)
122 $(
"body").append(
"<input type='hidden' id='invalidRequestServerSide'>");
123 var statusField= typeof(isDetail) !=
"undefined" && isDetail ?
"formValidatePopupDetailDiv" :
"formValidatePopupDiv";
125 if (typeof(useCommonValidator) ==
"undefined" || !useCommonValidator)
126 $.homecuValidator.validate();
128 $(
"#"+statusField).data(
"kendoValidator").validate();
129 if ($(
"#" + statusField).is(
":visible"))
131 $(
"#invalidRequestClientSide").val(
true);
133 $(
".k-popup-edit-form .k-grid-update").removeClass(
"k-state-disabled");
137 else $(
"#invalidRequestClientSide").val(
false);
141 function getEscapeHTMLFunction() {
145 function escapeHTML(s)
147 if (s ==
null || (s+
"").trim() ==
"")
149 return s.replace(/&/g,
'&')
150 .replace(/
"/g, '"') 151 .replace(/</g, '<') 152 .replace(/>/g, '>'); 156 function getUnescapeHTMLFunction() { 157 /* Reverse of previous function. 158 * Parameters: String s-- the string to unescape. */ 160 function unescapeHTML(s) 162 if (s == null || (s+"").trim() == "") 164 return s.replace(/&/g, '&') 165 .replace(/"/g, '"') 166 .replace(/</g, '<
') 167 .replace(/>/g, '>
'); 171 function getShowSQLFunction($showSQL) { 172 /* Function is called in the parseCrudGrid function which is used in nearly every grid. For any other grid, this function is called directly. 173 * In the inc.php, there is a boolean for showing SQL. If it is set, then #showSQL will be 1 and any AJAX calls will also return an array of SQL used. 174 * This function will separate the SQL by a line in the DIV provided for showing SQL. 175 * Parameters: Object data-- full data from any AJAX call, Boolean shouldAppend-- if set to true, SQL will be added on the end of the DIV, rather than replace a previous AJAX call's SQL. */
177 function showSQL(data, shouldAppend)
181 if (typeof shouldAppend ==
"undefined" || !shouldAppend)
182 $(
"#sqlOutput").empty();
184 $(
"#sqlOutput").append(
"<br /><br />");
187 if (typeof(data.sql) ==
"undefined")
188 $(
"#sqlOutput").append(
"(No SQL available)");
190 for (var i=0; i!= data.sql.length; i++)
193 $(
"#sqlOutput").append(
"<br /><br />");
194 $(
"#sqlOutput").append(escapeHTML(data.sql[i]));
201 function getErrorsAreShownFunction() {
209 function errorsAreShown(data, outputDiv, shouldAppend, notId)
211 var selector= notId ==
null ?
"#"+outputDiv : outputDiv;
212 if (data.error.length > 0)
214 if (typeof shouldAppend ==
"undefined" || !shouldAppend)
216 $(selector).append(
"<p>The following errors were detected:</p><ul></ul>");
217 for (var i=0; i!= data.error.length; i++)
218 $(selector+
" ul").append(
"<li>"+escapeHTML(data.error[i])+
"</li>");
226 return data.error.length > 0;
230 function getAddMinifiedActionStyleFunction() {
237 function addMinifiedActionStyle(gridElement, useTooltips, additionalTooltips)
239 var position=
"left";
241 var tooltipHandles= [];
243 var tooltips= [{filter:
".k-grid-add", content:
"Add new record"},
244 {filter:
".k-grid-customDelete", content:
"Delete"},
245 {filter:
".k-grid-edit", content:
"Edit"}
248 if (typeof(additionalTooltips) !=
"undefined" && additionalTooltips.length > 0)
250 tooltips= tooltips.concat(additionalTooltips);
254 if (typeof(useTooltips) ==
"undefined" || useTooltips)
257 $(gridElement).addClass(
"minifiedActionGrid");
259 for(var i=0; i!= tooltips.length; i++)
261 tooltipHandles.push($(gridElement).kendoTooltip({
262 filter: tooltips[i].filter,
263 content: tooltips[i].content,
265 showAfter: showAfter,
267 }).data(
"kendoTooltip"));
271 $(gridElement).addClass(
"actionGrid");
272 return tooltipHandles;
276 function getAddDuplicateErrorFunction() {
280 function addDuplicateError(e, field, onSave)
282 addError(e,field, onSave,
"duplicate");
286 function getAddErrorFunction() {
296 function addError(e, field, onSave, errorType, formValidateDiv, byId)
299 var input= byId !=
null && byId ?
"#" + field +
"Input" :
"input[name='"+field+
"']";
300 var invalidMsgDiv= $(
".k-invalid-msg[data-for='"+ field+
"']");
301 var invalidMsg= $(input).attr(
"data-"+ errorType +
"-msg");
302 $(invalidMsgDiv).addClass(
"k-widget k-tooltip k-tooltip-validation");
303 $(invalidMsgDiv).attr(
"data-role",
"alert");
304 $(invalidMsgDiv).attr(
"title", invalidMsg);
305 $(invalidMsgDiv).html(
"<span class='k-icon k-warning'></span>");
306 $(invalidMsgDiv).show();
308 var div= typeof(formValidateDiv) ==
"undefined" ?
"formValidatePopupDiv" : formValidateDiv;
311 if ($(
".k-animation-container.tooltipFor_"+field).length == 0)
314 var possibleMsgs= [];
315 $(input).each(
function (e) {
316 $.each(this.attributes,
function(i, attrib){
317 var name = attrib.name.trim();
318 var value = attrib.value.trim();
320 if (name.match(/^data-\w+-msg$/))
321 possibleMsgs.push(value);
327 $(
".k-animation-container .k-tooltip-content").each(
function (e) {
328 var value= $(
this).text().trim();
329 if ($.grep(possibleMsgs,
function(n, i) {
return n == value; }).length != 0)
333 $(
this).closest(
".k-animation-container").addClass(
"tooltipFor_"+field);
336 else $(
this).closest(
".k-animation-container").remove();
342 if ($(
".k-animation-container.tooltipFor_"+field).length != 0)
344 var previousMsg= $(
".k-animation-container.tooltipFor_"+field).text();
345 if (previousMsg != invalidMsgDiv)
346 $(
"#" + div+
" li:contains('"+ previousMsg +
"')").each(
function (e) {
347 if ($(
this).text().trim() == previousMsg)
348 $(
this).addClass(
"removeLi");
350 $(
".k-animation-container.tooltipFor_"+field+
" .k-tooltip-content").text(invalidMsg);
356 $(
"#" + div +
" .removeLi").
remove();
357 if ($(
"#" + div +
" #"+ errorType +
"Error").length != 0)
358 $(
"#" + div +
" #"+ errorType +
"Error").text(invalidMsg);
359 else if ($(
"#" + div +
" ul").length != 0)
360 $(
"#" + div +
" ul").append(
"<li id='"+ errorType +
"Error'>"+invalidMsg+
"</li>");
361 else $(
"#" + div).html(
"<p>The following errors were detected:</p><ul><li id='" + errorType +
"Error'>"+invalidMsg+
"</li></ul>");
363 $(
"#invalidRequestClientSide").val(
true);
365 $(
".k-popup-edit-form .k-grid-update").removeClass(
"k-state-disabled");
372 function getSetupDeleteConfirmDialogFunction() {
380 var gridIdToDelete=
null;
381 function setupDeleteConfirmDialog(deleteOperation, gridElement, gridId, dialogWindowSelector, runWhenDeletedFunc, runWhenOpenedFunc, additionalParameters)
383 var grid= $(gridElement).data(
"kendoGrid");
384 var deleteConfirm= $(
"#"+dialogWindowSelector).data(
"kendoWindow");
386 if (deleteConfirm ==
null)
388 deleteConfirm= $(
"<div id='"+dialogWindowSelector+
"'></div>").kendoWindow({
389 content: {
template: $(
"#deleteConfirmTemplate").html()},
392 title:
"Confirm deletion",
397 if (window.activeWindows !=
null)
398 window.activeWindow.push(
this);
401 if (window.activeWindows !=
null)
402 window.activeWindows.pop();
404 }).data(
"kendoWindow");
406 $(
"#"+dialogWindowSelector).closest(
".k-window").addClass(
"k-windowDelete");
408 var continueBtn= $(
"#"+dialogWindowSelector).find(
".deleteConfirmContinueBtn");
409 $(continueBtn).click(
function () {
410 var parameters= typeof(additionalParameters) ==
"object" ? additionalParameters : {};
411 parameters[gridId]= gridIdToDelete;
413 $.post(deleteOperation, parameters,
418 if (!errorsAreShown(data,
"formValidateMainDiv"))
420 var data= grid.dataSource.data().slice(0);
421 data= $.grep(data,
function(n,i) {
return n[gridId] != gridIdToDelete; });
422 grid.dataSource.data(data);
424 if (typeof(runWhenDeletedFunc) ==
"function")
425 (runWhenDeletedFunc)();
428 deleteConfirm.close();
432 var cancelBtn= $(
"#"+dialogWindowSelector).find(
".deleteConfirmCancelBtn");
433 $(cancelBtn).click(
function () {
434 deleteConfirm.close();
439 $(gridElement).find(
".k-grid-customDelete").click(
function(e){
440 var tr= $(e.target).closest(
"tr");
441 gridIdToDelete= grid.dataItem(tr)[gridId];
443 deleteConfirm.open();
444 if (window.activeWindows !=
null)
445 window.activeWindows.push(deleteConfirm);
447 if (typeof(runWhenOpenedFunc) ==
"function")
448 (runWhenOpenedFunc)(e);
454 function getSetupDeleteConfirmDialogFunction_v2($gridId, $gridPrimary, $gridError, $deleteDialogId, $deleteOperation=
null, $template=
null)
456 function initDelete()
458 $(
"<div id='<?php echo $deleteDialogId; ?>'></div>").appendTo(
"body");
460 $(
"#<?php echo $gridId; ?>").on(
"click",
".k-grid-custdelete",
function() {
461 var deleteDialog= $(
"#<?php echo $deleteDialogId; ?>").data(
"kendoWindow");
462 var tr= $(
this).closest(
"tr");
463 $(
"#<?php echo $deleteDialogId; ?>").data(
"tr", tr);
465 if (deleteDialog ==
null)
467 <?php
if (isset($template)) {?>
468 var
template=
'<?php echo $template; ?>';
470 var
template=
'<div class="k-edit-form-container"><div class="container_12">\ 471 <div class="grid_12 message">Are you sure that you want to delete?</div>\ 472 <div class="k-edit-buttons k-state-default"><a class="k-button k-button-icontext deleteConfirmContinueBtn" href="\\#"><span class="k-icon k-update"></span>\ 473 Continue</a><a class="k-button k-button-icontext deleteConfirmCancelBtn" href="\\#"><span class="k-icon k-cancel"></span>Cancel</a> </div></div>';
476 deleteDialog= $(
"#<?php echo $deleteDialogId; ?>").kendoWindow({
477 content: {
template:
template},
480 title:
"Confirm deletion",
485 if (window.activeWindows !=
null)
486 window.activeWindows.pop();
488 }).data(
"kendoWindow");
490 $(
"#<?php echo $deleteDialogId; ?>").closest(
".k-window").css({<?php printTopCenterCss(200,
"",
"jsGuts"); ?>});
494 if (window.activeWindows !=
null)
495 window.activeWindows.push(deleteDialog);
498 $(
"#<?php echo $deleteDialogId; ?>").on(
"click",
".deleteConfirmContinueBtn",
function() {
499 var tr= $(
"#<?php echo $deleteDialogId; ?>").data(
"tr");
500 var grid= $(
"#<?php echo $gridId; ?>").data(
"kendoGrid");
501 var primary= grid.dataItem(tr).<?php echo $gridPrimary; ?>;
502 <?php
if (isset($deleteOperation)) { ?>
504 $.post(
"<?php echo $deleteOperation; ?>", {<?php echo $gridPrimary; ?>: primary},
function(data) {
506 if (!errorsAreShown(data,
"<?php echo $gridError; ?>"))
514 $(
"#<?php echo $deleteDialogId; ?>").data(
"kendoWindow").close();
518 $(
"#<?php echo $deleteDialogId; ?>").on(
"click",
".deleteConfirmCancelBtn",
function() {
519 $(
"#<?php echo $deleteDialogId; ?>").data(
"kendoWindow").close();
525 function getShowWaitFunctions() {
530 function showWaitWindow()
532 if ($(
"#hideSubmitWait").length == 0)
534 $(
"body").append(
"<div id='hideSubmitWait' style='position:relative; left:-2000px;top:-2000px;'></div>");
535 $(
"#hideSubmitWait").append(
"<div id='homecuSubmitWait' class='k-block'></div>");
536 $(
"#homecuSubmitWait").append(
"<div class='k-loading-image'></div>");
539 var submitWaitWindow = $(
"#homecuSubmitWait").data(
'kendoWindow');
540 if (submitWaitWindow ==
null)
541 submitWaitWindow= $(
"#homecuSubmitWait").kendoWindow({
550 }).data(
"kendoWindow");
551 submitWaitWindow.center().open();
554 function hideWaitWindow()
556 if ($(
"#hideSubmitWait").length == 0)
558 $(
"body").append(
"<div id='hideSubmitWait' style='position:relative; left:-2000px;top:-2000px;'></div>");
559 $(
"#hideSubmitWait").append(
"<div id='homecuSubmitWait' class='k-block'></div>");
560 $(
"#homecuSubmitWait").append(
"<div class='k-loading-image'></div>");
563 var submitWaitWindow = $(
"#homecuSubmitWait").data(
'kendoWindow');
564 if (submitWaitWindow !=
null)
565 submitWaitWindow.close();
569 function getContextMenuForSingleLevelGrid() {
573 function getFullContextMenuSingle(gridSelector, contextMenuSelector, deleteDialogSelector, gridId, deleteUrl)
575 var fullContextMenu=
this;
576 this.contextMenuSelector= contextMenuSelector;
577 this.contextMenu=
null;
578 this.gridSelector= gridSelector;
579 this.grid= $(
"#" + gridSelector).data(
"kendoGrid");
580 this.deleteUrl= deleteUrl;
582 this.deleteDialogSelector= deleteDialogSelector;
584 this.selectFunc=
null;
586 this.gridCancel=
function ()
588 var rows= $(
"#" + this.gridSelector +
" .k-grid-content tr");
591 $(rows).off(
"click");
592 $(rows).on(
"click",
function () {
593 grid.editRow($(
this));
596 $(rows).off(
"mouseenter");
597 $(rows).on(
"mouseenter",
function () {
598 $(
this).addClass(
"k-state-hover");
601 $(rows).off(
"mouseleave");
602 $(rows).on(
"mouseleave",
function () {
603 $(
this).removeClass(
"k-state-hover");
607 this.gridDatabound=
function (initialized)
609 var rows= $(
"#" + this.gridSelector +
" .k-grid-content tr");
612 $(rows).on(
"click",
function () {
613 grid.editRow($(
this));
616 $(rows).on(
"mouseenter",
function () {
617 $(
this).addClass(
"k-state-hover");
620 $(rows).on(
"mouseleave",
function () {
621 $(
this).removeClass(
"k-state-hover");
624 this.initContextMenu();
627 this.addFunctions=
function(openFunc, selectFunc)
629 this.openFunc= openFunc;
630 this.selectFunc= selectFunc;
633 this.initContextMenu=
function ()
635 this.contextMenu= $(
"#" + this.contextMenuSelector).data(
"kendoContextMenu");
636 if (this.contextMenu ==
null)
638 var dataItemForDelete=
null;
639 var deleteConfirm= $(
"<div id='" + this.deleteDialogSelector +
"'></div>").kendoWindow({
640 content: {
template: $(
"#deleteConfirmTemplate").html()},
643 title:
"Confirm deletion",
648 if (window.activeWindows !=
null)
649 window.activeWindows.pop();
651 }).data(
"kendoWindow");
653 $(
"#" + this.deleteDialogSelector).closest(
".k-window.k-widget").css({<?php printTopCenterCss(200,
"",
"jsGuts"); ?>})
655 var gridId= this.gridId;
656 var deleteUrl= this.deleteUrl;
659 $(
"#" + this.deleteDialogSelector +
" .deleteConfirmContinueBtn").click(
function () {
661 parameters[gridId]= dataItemForDelete[gridId];
663 $.post(deleteUrl, parameters,
function (data){
668 if (!errorsAreShown(data,
"formValidateMainDiv"))
670 var data= grid.dataSource.data().slice(0);
671 data= $.grep(data,
function(n,i) {
return n[gridId] != dataItemForDelete[gridId]; });
672 grid.dataSource.data(data);
675 deleteConfirm.close();
679 $(
"#" + this.deleteDialogSelector +
" .deleteConfirmCancelBtn").click(
function () {
680 deleteConfirm.close();
684 var openFunc= this.openFunc;
685 var selectFunc= this.selectFunc;
686 this.contextMenu= $(
"<div id='" + this.contextMenuSelector +
"'></div>").kendoContextMenu({
687 target:
"#" + this.gridSelector,
688 filter:
".k-grid-content tr",
690 orientation:
"vertical",
691 popupCollision:
false,
696 var options= [{text:
"Edit", cssClass:
"editLi"}, {text:
"Delete", cssClass:
"deleteLi"}];
697 var tr= $(e.event.target).closest(
"tr");
698 var dataItem= grid.dataItem($(tr));
700 if (typeof(openFunc) ==
"function")
701 (openFunc)(options, dataItem);
702 this.append(options);
707 var tr= $(e.target).closest(
"tr");
708 var dataItem= grid.dataItem($(tr));
710 if ($(item).hasClass(
"editLi"))
714 else if ($(item).hasClass(
"deleteLi"))
716 dataItemForDelete= dataItem;
717 deleteConfirm.open();
718 if (window.activeWindows !=
null)
719 window.activeWindows.push(deleteConfirm);
722 if (typeof(selectFunc) ==
"function")
723 (selectFunc)(item, dataItem);
725 }).data(
"kendoContextMenu");
731 function getContextMenuForDoubleLevelGrid() {
735 function getFullContextMenu(grid, contextMenuId, masterId, detailId)
737 var fullContextMenu=
this;
739 this.contextMenu=
null;
741 this.contextMenuId= contextMenuId;
742 this.masterId= masterId;
743 this.detailId= detailId;
744 this.detailGrids= [];
745 this.limitFromDatabound= [];
746 this.getDetailData=
null;
748 this.masterDeleteOperation=
null;
749 this.detailDeleteOperation=
null;
750 this.postDeleteFunc=
null;
751 this.getNumDetailsFunc=
null;
753 this.setDeleteOptions=
function(dataFile, masterDeleteOperation, detailDeleteOperation, postDeleteFunc, getNumDetailsFunc)
755 this.dataFile= dataFile;
756 this.masterDeleteOperation= masterDeleteOperation;
757 this.detailDeleteOperation= detailDeleteOperation;
758 this.postDeleteFunc= postDeleteFunc;
759 this.getNumDetailsFunc= getNumDetailsFunc;
762 this.setOptionFuncs=
function(masterOptionFunc, detailOptionFunc, additionalSelectOptionFunc)
764 this.masterOptionFunc= masterOptionFunc;
765 this.detailOptionFunc= detailOptionFunc;
766 this.additionalSelectOptionFunc= additionalSelectOptionFunc;
769 this.setLimitFromDatabound=
function(limitFromDatabound)
771 this.limitFromDatabound= limitFromDatabound;
774 this.gridCancel=
function (e, grid, isMaster)
779 rows= $(grid.tbody).find(
"tr.k-master-row");
781 if (this.limitFromDatabound.indexOf(
"click") == -1)
784 $(rows).find(
"[role='gridcell']").off(
"click");
785 $(rows).find(
"[role='gridcell']").on(
"click",
function () {
786 grid.editRow($(
this).parent());
793 rows= $(grid.tbody).find(
"tr");
795 if (this.limitFromDatabound.indexOf(
"click") == -1)
797 $(rows).off(
"click");
798 $(rows).on(
"click",
function () {
799 grid.editRow($(
this));
804 if (this.limitFromDatabound.indexOf(
"mouseenter") == -1)
806 $(rows).off(
"mouseenter");
807 $(rows).on(
"mouseenter",
function () {
808 $(
this).addClass(
"k-state-hover");
812 if (this.limitFromDatabound.indexOf(
"mouseleave") == -1)
814 $(rows).off(
"mouseleave");
815 $(rows).on(
"mouseleave",
function () {
816 $(
this).removeClass(
"k-state-hover");
822 this.gridDatabound=
function (isMaster, initialized, thisGrid)
827 rows= $(thisGrid.tbody).find(
"tr.k-master-row");
831 $(rows).each(
function() {
832 thisGrid.expandRow($(
this));
833 thisGrid.collapseRow($(
this));
836 this.initContextMenu();
838 if (this.limitFromDatabound.indexOf(
"click") == -1)
840 $(rows).find(
"[role='gridcell']").on(
"click",
function () {
841 thisGrid.editRow($(
this).parent());
846 rows= $(thisGrid.tbody).find(
"tr");
848 if (this.limitFromDatabound.indexOf(
"click") == -1)
849 $(rows).on(
"click",
function () {
850 thisGrid.editRow($(
this));
854 if (this.limitFromDatabound.indexOf(
"mouseenter") == -1)
855 $(rows).on(
"mouseenter",
function () {
856 $(
this).addClass(
"k-state-hover");
860 if (this.limitFromDatabound.indexOf(
"mouseleave") == -1)
861 $(rows).on(
"mouseleave",
function () {
862 $(
this).removeClass(
"k-state-hover");
866 this.addToDetailGrid=
function (detailGridId, detailGrid)
868 this.detailGrids[detailGridId]= detailGrid;
871 this.initContextMenu=
function ()
873 contextMenu= $(
"#" + contextMenuId).data(
"kendoContextMenu");
874 if (contextMenu ==
null)
876 var dataItemForDelete=
null;
877 var gridForDelete=
null;
880 var detailData= this.detailData;
881 var dataFile= this.dataFile;
882 var masterDeleteOperation= this.masterDeleteOperation;
883 var detailDeleteOperation= this.detailDeleteOperation;
884 var postDeleteFunc= this.postDeleteFunc;
886 var deleteConfirm= $(
"<div id='deleteDialog'></div>").kendoWindow({
887 content: {
template: $(
"#deleteConfirmTemplate").html()},
890 title:
"Confirm deletion",
895 if (window.activeWindows !=
null)
896 window.activeWindows.pop();
898 }).data(
"kendoWindow");
900 $(
"#deleteDialog").closest(
".k-window.k-widget").css({<?php printTopCenterCss(200,
"",
"jsGuts"); ?> });
902 $(
"#deleteDialog .deleteConfirmContinueBtn").click(
function () {
903 var isMaster= $(gridForDelete.tbody).find(
"tr.k-master-row").length > 0;
904 var url= dataFile +
"?operation=";
906 parameters[masterId]= dataItemForDelete[masterId];
909 url+= masterDeleteOperation;
913 url+= detailDeleteOperation;
914 parameters[detailId]= dataItemForDelete[detailId];
917 $.post(url, parameters,
function (data){
922 if (!errorsAreShown(data,
"formValidateMainDiv"))
924 if (typeof(postDeleteFunc) ==
"function")
925 (postDeleteFunc)(isMaster, dataItemForDelete);
928 deleteConfirm.close();
932 $(
"#deleteDialog .deleteConfirmCancelBtn").click(
function () {
933 deleteConfirm.close();
937 var detailOptionFunc= this.detailOptionFunc;
938 var masterOptionFunc= this.masterOptionFunc;
939 var additionalSelectOptionFunc= this.additionalSelectOptionFunc;
940 var getNumDetailsFunc= this.getNumDetailsFunc;
942 contextMenu= $(
"<div id='" + contextMenuId +
"'></div>").kendoContextMenu({
944 filter:
".k-master-row [role='gridcell'], .detailGrid .k-grid-content tr",
946 orientation:
"vertical",
947 popupCollision:
false,
951 if ($(e.item).is(
"[role='menuitem']"))
957 var grid= $(e.event.target).closest(
".k-grid").data(
"kendoGrid");
958 var tr= $(e.event.target).closest(
"tr");
959 var dataItem= grid.dataItem($(tr));
961 if ($(grid.tbody).find(
".k-master-row").length != 0)
963 if (typeof(masterOptionFunc) !=
"function")
964 options= [{text:
"Edit", cssClass:
"editLi"}, {text:
"Delete", cssClass:
"deleteLi"}, {text:
"Add detail", cssClass:
"addDetailLi"}];
966 (masterOptionFunc)(options, dataItem);
970 if (typeof(detailOptionFunc) !=
"function")
971 options= [{text:
"Edit", cssClass:
"editLi"}, {text:
"Delete", cssClass:
"deleteLi"}];
973 (detailOptionFunc)(options, dataItem);
976 this.append(options);
981 var tr= $(e.target).closest(
"tr");
982 var grid= $(e.target).closest(
".k-grid").data(
"kendoGrid");
983 var dataItem= grid.dataItem($(tr));
985 if ($(item).hasClass(
"editLi"))
989 else if ($(item).hasClass(
"deleteLi"))
991 var numDetails= $(e.target).closest(
".detailGrid") > 0 ? 0 : (typeof(getNumDetailsFunc) ==
"function" ? (getNumDetailsFunc)(dataItem) : 0);
994 $(
"#detailDeleteMsg").show();
995 $(
"#detailDeleteMsg span").text(numDetails);
999 $(
"#detailDeleteMsg").hide();
1001 dataItemForDelete= dataItem;
1002 gridForDelete= grid;
1003 deleteConfirm.open();
1004 if (window.activeWindows !=
null)
1005 window.activeWindows.push(deleteConfirm);
1007 else if ($(item).hasClass(
"addDetailLi"))
1009 fullContextMenu.detailGrids[dataItem[masterId]].addRow();
1012 if (typeof(additionalSelectOptionFunc) ==
"function")
1013 (additionalSelectOptionFunc)(item, tr, grid, dataItem);
1015 }).data(
"kendoContextMenu");
1021 function printDeleteTemplate() {
1023 <script
id=
"deleteConfirmTemplate" type=
"text/x-kendo-template">
1024 <div
class=
"k-edit-form-container">
1025 <div
class=
"container_12">
1026 <div
class=
"grid_12 message">Are you sure that you want to
delete? <span
id=
"detailDeleteMsg" style=
"display:none;">This will also delete <span>1</span> detail(s) as well.</div>
1028 <div
class=
"k-edit-buttons k-state-default">
1029 <a
class=
"k-button k-button-icontext deleteConfirmContinueBtn" href=
"\#">
1030 <span
class=
"k-icon k-update"></span>
1033 <a
class=
"k-button k-button-icontext deleteConfirmCancelBtn" href=
"\#">
1034 <span
class=
"k-icon k-cancel"></span>
1042 function printShuttleGrid($shuttleDiv, $idColumn=
"id", $shortColumn=
"short", $longColumn=
"long", $selectedColumn=
"selected", $prevSelectedColumn=
"prevSelected")
1044 $schema=
"schema: {\n\tmodel: {\n\t\tid: \"$idColumn\",\n\t\tfields: {\n\t\t\t$idColumn: {type: \"string\"},\n\t\t\t$shortColumn: {type: \"string\"},\n\t\t\t$longColumn: {type: \"string\"}," 1045 .
"\n\t\t\t$selectedColumn: {type: \"boolean\"},\n\t\t\t$prevSelectedColumn: {type: \"boolean\"}\n\t\t}\n\t}\n}";
1047 function initShuttleGrid(shuttleData)
1049 $(
"#<?php echo $shuttleDiv;?>").html(
"<div class='grid_12 dontPrint'>\n<div class='grid_7 alpha'>\n<a href='#' class='k-button allAvailable'>Select All</a>\n</div>\n" 1050 +
"<div class='grid_1'>\n </div>\n<div class='grid_4 omega'>\n<a href='#' class='k-button allSelected'>Select All</a>\n</div>\n</div>\n" 1051 +
"<div class='grid_12'>\n<div class='grid_7 alpha dontPrint'>\n<div class='availableGrid' style='width:100%'></div>\n</div>\n" 1052 +
"<div class='grid_1 dontPrint'><a href='#' class='k-button toSelected shuttleNav' style='width:100%'>↦</a>\n" 1053 +
"<a href='#' class='k-button toAvailable shuttleNav' style='width:100%'>↤</a>\n</div>\n<div class='printOnly grid_3 alpha' style='display:none;'>Selected Programs:</div>" 1054 +
"\n<div class='grid_4 omega'>\n<div class='selectedGrid' style='width:100%'></div>\n</div>\n</div>");
1056 $(
"#<?php echo $shuttleDiv; ?>").data(
"changed",
false);
1059 var alreadyExists=
false;
1060 for(var i=0; i!= shuttleData.length; i++)
1064 if (shuttleData[i].<?php echo $prevSelectedColumn; ?> !=
null)
1068 shuttleData[i].<?php echo $prevSelectedColumn; ?>= shuttleData[i].<?php echo $selectedColumn; ?>;
1071 var shuttleDataSource=
new kendo.data.DataSource({
1072 data:
new kendo.data.ObservableArray(shuttleData),
1073 <?php echo $schema; ?>,
1074 sort: {field:
"<?php echo $shortColumn; ?>", dir:
"asc"}
1078 var availableGrid= $(
"#<?php echo $shuttleDiv; ?> .availableGrid").kendoGrid({
1079 dataSource: shuttleDataSource,
1081 {title:
"Available", width:
"33%"},
1082 {title:
"Description"}
1084 rowTemplate:
function(model)
1086 return model.<?php echo $selectedColumn;?> ?
"" :
"<tr data-uid='" + model.uid +
"'" + (rowA++ % 2 == 1 ?
" class='k-alt'" :
"") +
"><td>" 1087 + model.<?php echo $shortColumn; ?> +
"</td><td>" + model.<?php echo $longColumn; ?> +
"</td></tr>";
1089 dataBound:
function()
1094 }).data(
"kendoGrid");
1097 var selectedGrid= $(
"#<?php echo $shuttleDiv; ?> .selectedGrid").kendoGrid({
1098 dataSource: shuttleDataSource,
1100 {field:
"<?php echo $shortColumn; ?>", title:
"Selected"}
1102 rowTemplate:
function(model)
1104 return !model.<?php echo $selectedColumn;?> ?
"" :
"<tr data-uid='" + model.uid +
"'" + (rowB++ % 2 == 1 ?
" class='k-alt'" :
"") +
"><td>" 1105 + model.<?php echo $shortColumn; ?> +
"</td></tr>";
1107 dataBound:
function()
1112 }).data(
"kendoGrid");
1114 $(
"#<?php echo $shuttleDiv; ?>").on(
"click",
".k-grid tbody tr",
function() {
1115 $(
this).toggleClass(
"k-state-selected");
1119 $(
"#<?php echo $shuttleDiv; ?> .toSelected").click(
function() {
1122 $(
"#<?php echo $shuttleDiv; ?> .availableGrid .k-state-selected").each(
function() {
1123 uids[$(
this).data(
"uid")]=
true;
1127 var data= shuttleDataSource.data();
1128 for(var i=0; i!= data.length; i++)
1130 if (uids[data[i].uid] !=
null)
1132 data[i].<?php echo $selectedColumn;?>=
true;
1138 shuttleDataSource.read();
1139 $(
"#<?php echo $shuttleDiv; ?>").data(
"changed",
true);
1143 $(
"#<?php echo $shuttleDiv; ?> .toAvailable").click(
function() {
1146 $(
"#<?php echo $shuttleDiv; ?> .selectedGrid .k-state-selected").each(
function() {
1147 uids[$(
this).data(
"uid")]=
true;
1151 var data= shuttleDataSource.data();
1152 for(var i=0; i!= data.length; i++)
1154 if (uids[data[i].uid] !=
null)
1156 data[i].<?php echo $selectedColumn;?>=
false;
1162 shuttleDataSource.read();
1163 $(
"#<?php echo $shuttleDiv; ?>").data(
"changed",
true);
1167 $(
"#<?php echo $shuttleDiv; ?> .allSelected").click(
function() {
1168 $(
"#<?php echo $shuttleDiv; ?> .selectedGrid tbody tr:not(.k-state-selected)").addClass(
"k-state-selected");
1172 $(
"#<?php echo $shuttleDiv; ?> .allAvailable").click(
function() {
1173 $(
"#<?php echo $shuttleDiv; ?> .availableGrid tbody tr:not(.k-state-selected)").addClass(
"k-state-selected");
1177 var availableData= availableGrid.dataSource.data();
1178 var selectedData= selectedGrid.dataSource.data();
1179 if (availableData.length == 0)
1180 $(
"#<?php echo $shuttleDiv; ?> .toSelected").enable(
false);
1181 if (selectedData.length == 0)
1182 $(
"#<?php echo $shuttleDiv; ?> .toAvailable").enable(
false);
1186 function printClickOverlayEvent() { ?>
1187 $(
"body").on(
"click",
".k-overlay",
function() {
if (activeWindows.length > 0) activeWindows[activeWindows.length-1].close();
return false; });
1190 function printTopCenterCss($offset=0, $class=
"", $mode=
"css")
1192 $class= $class ==
"" ?
".k-widget.k-window" :
"$class";
1193 $offset= intval($offset);
1194 $guts= array(
"text-align" =>
"left",
"position" =>
"absolute",
"top" =>
"10px",
"left" =>
"calc(50% - ${offset}px)");
1198 foreach($guts as $key => $value)
1200 $jsGuts[]=
"\"$key\": \"$value\"";
1201 $cssGuts[]=
"$key: $value";
1203 $jsGuts= implode(
", ", $jsGuts);
1204 $cssGuts= implode(
";\n", $cssGuts);
1209 print
"\$(\"$class\").css({$jsGuts});";
1216 print
"$class {\n$cssGuts;\n}\n";
1228 function IEFixStartsWith()
1230 if (!String.prototype.startsWith) {
1231 String.prototype.startsWith =
function(searchString, position){
1232 position = position || 0;
1233 return this.substr(position, searchString.length) === searchString;
1243 function printExtendShowOverflown()
1245 jQuery.extend(jQuery.expr[
':'], {
1246 overflown: function (el) {
1247 return el.offsetHeight < el.scrollHeight || el.offsetWidth < el.scrollWidth;