+++ /dev/null
-%# BEGIN BPS TAGGED BLOCK {{{
-%#
-%# COPYRIGHT:
-%#
-%# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC
-%# <sales@bestpractical.com>
-%#
-%# (Except where explicitly superseded by other copyright notices)
-%#
-%#
-%# LICENSE:
-%#
-%# This work is made available to you under the terms of Version 2 of
-%# the GNU General Public License. A copy of that license should have
-%# been provided with this software, but in any event can be snarfed
-%# from www.gnu.org.
-%#
-%# This work is distributed in the hope that it will be useful, but
-%# WITHOUT ANY WARRANTY; without even the implied warranty of
-%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-%# General Public License for more details.
-%#
-%# You should have received a copy of the GNU General Public License
-%# along with this program; if not, write to the Free Software
-%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-%# 02110-1301 or visit their web page on the internet at
-%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-%#
-%#
-%# CONTRIBUTION SUBMISSION POLICY:
-%#
-%# (The following paragraph is not intended to limit the rights granted
-%# to you to modify and distribute this software under the terms of
-%# the GNU General Public License and is only of importance to you if
-%# you choose to contribute your changes and enhancements to the
-%# community by submitting them to Best Practical Solutions, LLC.)
-%#
-%# By intentionally submitting any modifications, corrections or
-%# derivatives to this work, or any other work intended for use with
-%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-%# you are the copyright holder for those contributions and you grant
-%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
-%# royalty-free, perpetual, license to use, copy, create derivative
-%# works based on those contributions, and sublicense and distribute
-%# those contributions and any derivatives thereof.
-%#
-%# END BPS TAGGED BLOCK }}}
-/* Visibility */
-
-function show(id) { delClass( id, 'hidden' ) }
-function hide(id) { addClass( id, 'hidden' ) }
-
-function hideshow(id) { return toggleVisibility( id ) }
-function toggleVisibility(id) {
- var e = jQuery('#' + id);
-
- if ( e.hasClass('hidden') ) {
- e.removeClass('hidden');
- }
- else {
- e.addClass('hidden');
- }
-
- return false;
-}
-
-function setVisibility(id, visibility) {
- if ( visibility ) show(id);
- else hide(id);
-}
-
-function switchVisibility(id1, id2) {
- // Show both and then hide the one we want
- show(id1);
- show(id2);
- hide(id2);
- return false;
-}
-
-/* Classes */
-function jQueryWrap( id ) {
- return typeof id == 'object' ? jQuery(id) : jQuery('#'+id);
-}
-
-function addClass(id, value) {
- jQueryWrap(id).addClass(value);
-}
-
-function delClass(id, value) {
- jQueryWrap(id).removeClass(value);
-}
-
-/* Rollups */
-
-function rollup(id) {
- var e = jQueryWrap(id);
- var e2 = e.parent();
-
- if (e.hasClass('hidden')) {
- set_rollup_state(e,e2,'shown');
- createCookie(id,1,365);
- }
- else {
- set_rollup_state(e,e2,'hidden');
- createCookie(id,0,365);
- }
- return false;
-}
-
-function set_rollup_state(e,e2,state) {
- if (e && e2) {
- if (state == 'shown') {
- show(e);
- delClass( e2, 'rolled-up' );
- }
- else if (state == 'hidden') {
- hide(e);
- addClass( e2, 'rolled-up' );
- }
- }
-}
-
-/* other utils */
-
-function focusElementById(id) {
- var e = jQuery('#'+id);
- if (e) e.focus();
-}
-
-function setCheckbox(form, name, val) {
- var myfield = form.getElementsByTagName('input');
- for ( var i = 0; i < myfield.length; i++ ) {
- if ( myfield[i].type != 'checkbox' ) continue;
- if ( name ) {
- if ( name instanceof RegExp ) {
- if ( ! myfield[i].name.match( name ) ) continue;
- }
- else {
- if ( myfield[i].name != name ) continue;
- }
-
- }
-
- myfield[i].checked = val;
- }
-}
-
-/* apply callback to nodes or elements */
-
-function walkChildNodes(parent, callback)
-{
- if( !parent || !parent.childNodes ) return;
- var list = parent.childNodes;
- for( var i = 0; i < list.length; i++ ) {
- callback( list[i] );
- }
-}
-
-function walkChildElements(parent, callback)
-{
- walkChildNodes( parent, function(node) {
- if( node.nodeType != 1 ) return;
- return callback( node );
- } );
-}
-
-/* shredder things */
-
-function showShredderPluginTab( plugin )
-{
- var plugin_tab_id = 'shredder-plugin-'+ plugin +'-tab';
- var root = jQuery('#shredder-plugin-tabs');
-
- root.children(':not(.hidden)').addClass('hidden');
- root.children('#' + plugin_tab_id).removeClass('hidden');
-
- if( plugin ) {
- show('shredder-submit-button');
- } else {
- hide('shredder-submit-button');
- }
-}
-
-function checkAllObjects()
-{
- var check = jQuery('#shredder-select-all-objects-checkbox').attr('checked');
- var elements = jQuery('#shredder-search-form :checkbox[name=WipeoutObject]');
-
- if( check ) {
- elements.attr('checked', true);
- } else {
- elements.attr('checked', false);
- }
-}
-
-function checkboxToInput(target,checkbox,val){
- var tar = jQuery('#' + escapeCssSelector(target));
- var box = jQuery('#' + escapeCssSelector(checkbox));
- if(box.attr('checked')){
- if (tar.val()==''){
- tar.val(val);
- }
- else{
- tar.val( val+', '+ tar.val() );
- }
- }
- else{
- tar.val(tar.val().replace(val+', ',''));
- tar.val(tar.val().replace(val,''));
- }
- jQuery('#UpdateIgnoreAddressCheckboxes').val(true);
-}
-
-// ahah for back compatibility as plugins may still use it
-function ahah( url, id ) {
- jQuery('#'+id).load(url);
-}
-
-// only for back compatibility, please JQuery() instead
-function doOnLoad( js ) {
- jQuery(js);
-}
-
-jQuery(function() {
- var opts = {
- dateFormat: 'yy-mm-dd',
- constrainInput: false,
- showButtonPanel: true,
- changeMonth: true,
- changeYear: true,
- showOtherMonths: true,
- selectOtherMonths: true
- };
- jQuery(".ui-datepicker:not(.withtime)").datepicker(opts);
- jQuery(".ui-datepicker.withtime").datetimepicker( jQuery.extend({}, opts, {
- stepHour: 1,
- // We fake this by snapping below for the minute slider
- //stepMinute: 5,
- hourGrid: 6,
- minuteGrid: 15,
- showSecond: false,
- timeFormat: 'hh:mm:ss'
- }) ).each(function(index, el) {
- var tp = jQuery.datepicker._get( jQuery.datepicker._getInst(el), 'timepicker');
- if (!tp) return;
-
- // Hook after _injectTimePicker so we can modify the minute_slider
- // right after it's first created
- tp._base_injectTimePicker = tp._injectTimePicker;
- tp._injectTimePicker = function() {
- this._base_injectTimePicker.apply(this, arguments);
-
- // Now that we have minute_slider, modify it to be stepped for mouse movements
- var slider = jQuery.data(this.minute_slider[0], "slider");
- slider._base_normValueFromMouse = slider._normValueFromMouse;
- slider._normValueFromMouse = function() {
- var value = this._base_normValueFromMouse.apply(this, arguments);
- var old_step = this.options.step;
- this.options.step = 5;
- var aligned = this._trimAlignValue( value );
- this.options.step = old_step;
- return aligned;
- };
- };
- });
-});
-
-function textToHTML(value) {
- return value.replace(/&/g, "&")
- .replace(/</g, "<")
- .replace(/>/g, ">")
- .replace(/-- \n/g,"-- \n")
- .replace(/\n/g, "\n<br />");
-};
-
-function ReplaceAllTextareas() {
- var sAgent = navigator.userAgent.toLowerCase();
- if (!CKEDITOR.env.isCompatible ||
- sAgent.indexOf('iphone') != -1 ||
- sAgent.indexOf('ipad') != -1 ||
- sAgent.indexOf('android') != -1 )
- return false;
-
- // replace all content and signature message boxes
- var allTextAreas = document.getElementsByTagName("textarea");
-
- for (var i=0; i < allTextAreas.length; i++) {
- var textArea = allTextAreas[i];
- if (jQuery(textArea).hasClass("messagebox")) {
- // Turn the original plain text content into HTML
- var type = jQuery("#"+textArea.name+"Type");
- if (type.val() != "text/html")
- textArea.value = textToHTML(textArea.value);
-
- // Set the type
- type.val("text/html");
-
- CKEDITOR.replace(textArea.name,{width:'100%',height:<% RT->Config->Get('MessageBoxRichTextHeight') |n,j%>});
- CKEDITOR.basePath = <%RT->Config->Get('WebPath')|n,j%>+"/NoAuth/RichText/";
-
- jQuery("#" + textArea.name + "___Frame").addClass("richtext-editor");
- }
- }
-};
-
-function toggle_addprincipal_validity(input, good, title) {
- if (good) {
- jQuery(input).nextAll(".warning").hide();
- jQuery("#acl-AddPrincipal input[type=checkbox]").removeAttr("disabled");
- } else {
- jQuery(input).nextAll(".warning").css("display", "block");
- jQuery("#acl-AddPrincipal input[type=checkbox]").attr("disabled", "disabled");
- }
-
- if (title == null)
- title = jQuery(input).val();
-
- update_addprincipal_title( title );
-}
-
-function update_addprincipal_title(title) {
- var h3 = jQuery("#acl-AddPrincipal h3");
- h3.html( h3.text().replace(/: .*$/,'') + ": " + title );
-}
-
-// when a value is selected from the autocompleter
-function addprincipal_onselect(ev, ui) {
-
- // if principal link exists, we shall go there instead
- var principal_link = jQuery(ev.target).closest('form').find('ul.ui-tabs-nav a[href="#acl-' + ui.item.id + '"]:first');
- if (principal_link.size()) {
- jQuery(this).val('').blur();
- update_addprincipal_title( '' ); // reset title to blank for #acl-AddPrincipal
- principal_link.click();
- return false;
- }
-
- // pass the item's value along as the title since the input's value
- // isn't actually updated yet
- toggle_addprincipal_validity(this, true, ui.item.value);
-}
-
-// when the input is actually changed, through typing or autocomplete
-function addprincipal_onchange(ev, ui) {
- // if we have a ui.item, then they selected from autocomplete and it's good
- if (!ui.item) {
- var input = jQuery(this);
- // Check using the same autocomplete source if the value typed would
- // have been autocompleted and is therefore valid
- jQuery.ajax({
- url: input.autocomplete("option", "source"),
- data: {
- op: "=",
- term: input.val()
- },
- dataType: "json",
- success: function(data) {
- if (data)
- toggle_addprincipal_validity(input, data.length ? true : false );
- else
- toggle_addprincipal_validity(input, true);
- }
- });
- } else {
- toggle_addprincipal_validity(this, true);
- }
-}
-
-
-function escapeCssSelector(str) {
- return str.replace(/([^A-Za-z0-9_-])/g,'\\$1');
-}