/*! * UI development toolkit for HTML5 (OpenUI5) * (c) Copyright 2009-2018 SAP SE or an SAP affiliate company. * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. */ // A bridge between the jQuery.sap plugin and the SAPUI5 Core sap.ui.define([ 'jquery.sap.global', 'sap/base/util/ObjectPath', 'sap/ui/dom/jquery/control' /* cyclic: 'sap/ui/core/Core' */ ], function(jQuery, ObjectPath /* jQueryControl */) { "use strict"; function fgetUIAreaOfCtrl(oCtrl){ return oCtrl.getUIArea().getInterface(); } function fUIAreaFilter(){ // @evo-todo: remove this global access (for now requiring the Core module would introduce a circular dependency) return sap.ui.getCore().getUIArea(this.id) != null; } function fgetUIArea(){ // @evo-todo: remove this global access (for now requiring the Core module would introduce a circular dependency) return sap.ui.getCore().getUIArea(this.id); } /** * @param {object} oRootControl The root control * @returns {jQuery} Returns itself * @name jQuery#root * @function * @public * @deprecated since 1.58 */ jQuery.fn.root = function(oRootControl) { // handle 'setRoot' if (oRootControl) { // @evo-todo: remove this global access (for now requiring the Core module would introduce a circular dependency) sap.ui.getCore().setRoot(this.get(0), oRootControl); return this; } // and 'getRoot' behavior. // requires control dependency var aControls = this.control(); if (aControls.length > 0) { return aControls.map(fgetUIAreaOfCtrl); } // requires uiarea dependency var aUIAreas = this.uiarea(); if (aUIAreas.length > 0) { // we have UIAreas return aUIAreas; } // create UIAreas this.each(function(){ // @evo-todo: remove this global access (for now requiring the Core module would introduce a circular dependency) sap.ui.getCore().createUIArea(this); }); return this; }; /** * Returns a single UIArea if an index is provided or an array of UIAreas. * * @param {int} iIdx Index of the UIArea * @returns {Object|Array} The UIArea if an index is provided or an array of UIAreas * @name jQuery#uiarea * @function * @public * @deprecated since 1.58 */ jQuery.fn.uiarea = function(iIdx) { // UIAreas need to have IDs... so reduce to those elements first var aUIAreas = this.slice("[id]").filter(fUIAreaFilter).map(fgetUIArea).get(); return typeof (iIdx) === "number" ? aUIAreas[iIdx] : aUIAreas; }; /** * EXPERIMENTAL!! * Creates a new control of the given type and places it into the first DOM object of the jQuery collection. * The type string is case sensitive. * * @param {string} sControlType The control type (fully qualified, like sap.ui.dev.GoogleMap; if no package is given, the package sap.ui.commons is assumed) * @param {string} [sId] Optional ID for the new control; generated automatically if no non-empty ID is given * @param {object} [oConfiguration] Optional map/JSON-object with initial values for the new control * @returns {jQuery} the given jQuery object * @private * @deprecated since 1.58 */ jQuery.fn.sapui = function(sControlType, sId, oConfiguration) { return this.each(function() { // TODO: hack for Steffen; (point is not clear, as this adds identical controls to many DOM elements...); remove soon var oControl = null; if (this) { // allow omitting the package prefix because this looks less Java-like... sap.ui.commons is the default package if (sControlType.indexOf(".") == -1) { sControlType = "sap.ui.commons." + sControlType; } // instantiate the control var fnClass = ObjectPath.get(sControlType); if (fnClass) { // TODO: hack for Steffen; remove later if (typeof oConfiguration == 'object' && typeof oConfiguration.press == 'function') { oConfiguration.press = jQuery.proxy(oConfiguration.press, this); } oControl = new (fnClass)(sId, oConfiguration); // sId might actually contain oConfiguration, the Element constructor will take care of this // placeAt first DomRef in collection oControl.placeAt(this); } } }); }; return jQuery; });