1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 | 104x 104x 104x 104x 104x 104x 104x 104x 104x 104x 104x 104x 104x 104x 56x 48x 104x 104x 104x 6383x 6383x 104x 3133x 3147x 3147x 3147x 104x 104x 757x 104x 1072x 104x 104x 622x 622x 47x 575x 3017x 577x 2440x 575x 104x 359x 104x 319x 147x 319x 1117x 1117x 1117x 1117x 1117x 104x 208x 1117x 104x 102x 102x | /* Copyright 2007-2010 University of Cambridge Copyright 2007-2009 University of Toronto Copyright 2010-2011 Lucendo Development Ltd. Copyright 2010-2016 OCAD University Copyright 2013-2014 Raising the Floor - US Copyright 2005-2013 jQuery Foundation, Inc. and other contributors Licensed under the Educational Community License (ECL), Version 2.0 or the New BSD license. You may not use this file except in compliance with one these Licenses. You may obtain a copy of the ECL 2.0 License and BSD License at https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt */ /** This file contains functions which depend on the presence of a DOM document * but which do not depend on the contents of Fluid.js **/ var fluid_3_0_0 = fluid_3_0_0 || {}; (function ($, fluid) { "use strict"; // polyfill for $.browser which was removed in jQuery 1.9 and later // Taken from jquery-migrate-1.2.1.js, // jQuery Migrate - v1.2.1 - 2013-05-08 // https://github.com/jquery/jquery-migrate // Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors; Licensed MIT fluid.uaMatch = function (ua) { ua = ua.toLowerCase(); var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || /(webkit)[ \/]([\w.]+)/.exec( ua ) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || /(msie) ([\w.]+)/.exec( ua ) || ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || []; return { browser: match[ 1 ] || "", version: match[ 2 ] || "0" }; }; var matched, browser; // Don't clobber any existing jQuery.browser in case it's different Eif (!$.browser) { Iif (!!navigator.userAgent.match(/Trident\/7\./)) { browser = { // From http://stackoverflow.com/questions/18684099/jquery-fail-to-detect-ie-11 msie: true, version: 11 }; } else { matched = fluid.uaMatch(navigator.userAgent); browser = {}; Eif (matched.browser) { browser[matched.browser] = true; browser.version = matched.version; } // Chrome is Webkit, but Webkit is also Safari. if (browser.chrome) { browser.webkit = true; } else Iif (browser.webkit) { browser.safari = true; } } $.browser = browser; } // Private constants. var NAMESPACE_KEY = "fluid-scoped-data"; /* * Gets stored state from the jQuery instance's data map. * This function is unsupported: It is not really intended for use by implementors. */ fluid.getScopedData = function (target, key) { var data = $(target).data(NAMESPACE_KEY); return data ? data[key] : undefined; }; /* * Stores state in the jQuery instance's data map. Unlike jQuery's version, * accepts multiple-element jQueries. * This function is unsupported: It is not really intended for use by implementors. */ fluid.setScopedData = function (target, key, value) { $(target).each(function () { var data = $.data(this, NAMESPACE_KEY) || {}; data[key] = value; $.data(this, NAMESPACE_KEY, data); }); }; /** Global focus manager - makes use of "focusin" event supported in jquery 1.4.2 or later. */ var lastFocusedElement = null; $(document).on("focusin", function (event) { lastFocusedElement = event.target; }); fluid.getLastFocusedElement = function () { return lastFocusedElement; }; var ENABLEMENT_KEY = "enablement"; /** Queries or sets the enabled status of a control. An activatable node * may be "disabled" in which case its keyboard bindings will be inoperable * (but still stored) until it is reenabled again. * This function is unsupported: It is not really intended for use by implementors. */ fluid.enabled = function (target, state) { target = $(target); if (state === undefined) { return fluid.getScopedData(target, ENABLEMENT_KEY) !== false; } else { $("*", target).add(target).each(function () { if (fluid.getScopedData(this, ENABLEMENT_KEY) !== undefined) { fluid.setScopedData(this, ENABLEMENT_KEY, state); } else Iif (/select|textarea|input/i.test(this.nodeName)) { $(this).prop("disabled", !state); } }); fluid.setScopedData(target, ENABLEMENT_KEY, state); } }; fluid.initEnablement = function (target) { fluid.setScopedData(target, ENABLEMENT_KEY, true); }; // This utility is required through the use of newer versions of jQuery which will obscure the original // event responsible for interaction with a target. This is currently use in Tooltip.js and FluidView.js // "dead man's blur" but would be of general utility fluid.resolveEventTarget = function (event) { while (event.originalEvent && event.originalEvent.target) { event = event.originalEvent; } return event.target; }; // These function (fluid.focus() and fluid.blur()) serve several functions. They should be used by // all implementation both in test cases and component implementation which require to trigger a focus // event. Firstly, they restore the old behaviour in jQuery versions prior to 1.10 in which a focus // trigger synchronously relays to a focus handler. In newer jQueries this defers to the real browser // relay with numerous platform and timing-dependent effects. // Secondly, they are necessary since simulation of focus events by jQuery under IE // is not sufficiently good to intercept the "focusin" binding. Any code which triggers // focus or blur synthetically throughout the framework and client code must use this function, // especially if correct cross-platform interaction is required with the "deadMansBlur" function. function applyOp(node, func) { node = $(node); node.trigger("fluid-" + func); node.triggerHandler(func); node[func](); return node; } $.each(["focus", "blur"], function (i, name) { fluid[name] = function (elem) { return applyOp(elem, name); }; }); /* Sets the value to the DOM element and triggers the change event on the element. * Note: when using jQuery val() function to change the node value, the change event would * not be fired automatically, it requires to be initiated by the user. * * @param {A jQueryable DOM element} node - A selector, a DOM node, or a jQuery instance * @param {String|Number|Array} value - A string of text, a number, or an array of strings * corresponding to the value of each matched element to set in the node */ fluid.changeElementValue = function (node, value) { node = $(node); node.val(value).change(); }; })(jQuery, fluid_3_0_0); |