Permalink
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
match/app/templates/element/javascript.php
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
… (CO-2488) (#41)
204 lines (180 sloc)
7.75 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* COmanage Match jQuery onload JavaScript | |
* Applies jQuery widgets and flash messages | |
* | |
* Portions licensed to the University Corporation for Advanced Internet | |
* Development, Inc. ("UCAID") under one or more contributor license agreements. | |
* See the NOTICE file distributed with this work for additional information | |
* regarding copyright ownership. | |
* | |
* UCAID licenses this file to you under the Apache License, Version 2.0 | |
* (the "License"); you may not use this file except in compliance with the | |
* License. You may obtain a copy of the License at: | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
* | |
* @link http://www.internet2.edu/comanage COmanage Project | |
* @package match | |
* @since COmanage Match v1.0.0 | |
* @license Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0) | |
*/ | |
?> | |
<script> | |
$(function() { | |
// Focus any designated form element | |
$('.focusFirst').focus(); | |
// DESKTOP MENU DRAWER BEHAVIOR | |
// Check the drawer half-closed cookie on first load and set the drawer state appropriately | |
if (Cookies.get("desktop-drawer-state") == "half-closed") { | |
$("#navigation-drawer").addClass("half-closed"); | |
$("#main").addClass("drawer-half-closed"); | |
} else { | |
// Preserve the state of the most recently selected menu item if it is expandable (a "menuTop" item) | |
// (we only use this behavior when the the drawer is fully-open) | |
var mainMenuSelectedParentId = Cookies.get("main-menu-selected-parent-id"); | |
if(mainMenuSelectedParentId != undefined && mainMenuSelectedParentId != "") { | |
$("#" + mainMenuSelectedParentId).addClass("active"); | |
$("#" + mainMenuSelectedParentId + " > a.menuTop").attr("aria-expanded","true"); | |
$("#" + mainMenuSelectedParentId + " > ul").addClass("in"); | |
} | |
} | |
// Hamburger menu-drawer toggle | |
$('#co-hamburger').click(function () { | |
if($(window).width() < 768) { | |
// Mobile mode | |
$("#navigation-drawer").removeClass("half-closed").toggle(); | |
} else { | |
// Desktop mode | |
if ($("#navigation-drawer").hasClass("half-closed")) { | |
$("#navigation-drawer").removeClass("half-closed"); | |
$("#main").removeClass("drawer-half-closed"); | |
// set a cookie to hold drawer half-open state between requests | |
Cookies.set("desktop-drawer-state", "open"); | |
} else { | |
$("#navigation-drawer").addClass("half-closed"); | |
$("#main").addClass("drawer-half-closed"); | |
// set a cookie to hold drawer half-open state between requests | |
Cookies.set("desktop-drawer-state", "half-closed"); | |
} | |
} | |
}); | |
// Catch the edge-case of browser resize causing menu-drawer | |
// to remain hidden and vice versa. | |
$(window).resize(function() { | |
if($( window ).width() > 767) { | |
$("#navigation-drawer").show(); | |
} else { | |
$("#navigation-drawer").hide(); | |
} | |
}); | |
// Desktop half-closed drawer behavior & expandable menu items | |
$('#navigation-drawer a.menuTop').click(function () { | |
if (Cookies.get("desktop-drawer-state") == "half-closed") { | |
$("#navigation-drawer").toggleClass("half-closed"); | |
} | |
// Save the ID of the most recently expanded menuTop item for use on reload | |
if ($(this).attr("aria-expanded") == "true") { | |
var parentId = $(this).parent().attr("id"); | |
Cookies.set("main-menu-selected-parent-id", parentId); | |
} else { | |
Cookies.set("main-menu-selected-parent-id", ""); | |
} | |
}); | |
// END DESKTOP MENU DRAWER BEHAVIOR | |
// Click outside behaviors | |
$(document).on('click', function (e) { | |
// Hide popovers on click outside but don't close current popover when interacting with content inside it | |
$('#content [data-bs-toggle="popover"]').each(function () { | |
if (!$(this).is(e.target) && $('.popover.show').has(e.target).length === 0) { | |
$(this).popover('hide'); | |
} | |
}); | |
}); | |
// TOP SEARCH FILTER FORM | |
// Send only non-empty fields in the form | |
$("#top-search-form").submit(function() { | |
$("#top-search-form *").filter(':input').each(function () { | |
if($(this).val() == '') { | |
$(this).prop('disabled',true); | |
} | |
}); | |
}); | |
// Toggle the top search filter box | |
$("#top-search-toggle, #top-search-toggle button.cm-toggle").click(function(e) { | |
e.preventDefault(); | |
e.stopPropagation(); | |
if ($("#top-search-fields").is(":visible")) { | |
$("#top-search-fields").hide(); | |
$("#top-search-toggle button.cm-toggle").attr("aria-expanded","false"); | |
$("#top-search-toggle button.cm-toggle .drop-arrow").text("arrow_drop_down"); | |
} else { | |
$("#top-search-fields").show(); | |
$("#top-search-toggle button.cm-toggle").attr("aria-expanded","true"); | |
$("#top-search-toggle button.cm-toggle .drop-arrow").text("arrow_drop_up"); | |
} | |
}); | |
// Clear a specific top search filter by clicking the filter button | |
$("#top-search-toggle button.top-search-active-filter").click(function(e) { | |
e.preventDefault(); | |
e.stopPropagation(); | |
$(this).hide(); | |
filterId = '#' + $(this).attr("aria-controls"); | |
$(filterId).val(""); | |
$(this).closest('form').submit(); | |
}); | |
// Clear all top filters from the filter bar | |
$("#top-search-clear-all-button").click(function(e) { | |
e.preventDefault(); | |
e.stopPropagation(); | |
$(this).hide(); | |
$("#top-search-toggle .top-search-active-filter").hide(); | |
$("#top-search-clear").click(); | |
}); | |
// Make all submit buttons pretty (Bootstrap) | |
$("input:submit").addClass("spin submit-button btn btn-primary"); | |
// Make all select form controls Bootstrappy | |
$("select").addClass("form-select"); | |
// Enable Bootstrap Popovers. Unless needed elsewhere, constrain this to #content | |
$('#content [data-bs-toggle="popover"]').popover(); | |
// Generic row click handling for div-based rows | |
$('div.linked-row').click(function (e) { | |
location.href = $(this).find('a.row-link').attr('href'); | |
}); | |
// Generic row click handling for table rows | |
$('td.row-link').each(function (e) { | |
url = $(this).find('a').attr('href'); | |
if(url != undefined && url != '') { | |
$(this).closest('tr').addClass('linked-row').attr('data-cm-target',url).click(function (e) { | |
location.href = $(this).attr('data-cm-target'); | |
}).find('a').on('click',function(e){ | |
// don't propagate on other links to avoid redirecting dialog boxes | |
e.stopPropagation(); | |
}); | |
} | |
}); | |
// Add loading animation when a form is submitted, when any item with a "spin" class is clicked, | |
// or on any button or anchor tag lacking the .nospin class. | |
$("input[type='submit'], button:not(.nospin), a:not(.nospin), .spin").click(function(e) { | |
// Start a spinner only if CTRL, CMD, or SHIFT is not pressed (which loads a new tab or window). | |
if(!(e.ctrlKey || e.metaKey || e.shiftKey)) { | |
displaySpinner(); | |
// Test for invalid fields (HTML5) and turn off spinner explicitly if found | |
if (document.querySelectorAll(":invalid").length) { | |
stopSpinner(); | |
} | |
} | |
}); | |
}); | |
// Define default text for confirm dialog | |
var defaultConfirmOk = "<?php print __('op.ok'); ?>"; | |
var defaultConfirmCancel = "<?php print __('op.cancel'); ?>"; | |
var defaultConfirmTitle = "<?php print __('op.confirm'); ?>"; | |
</script> | |
<?= $this->Flash->render() ?> |