NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name jenkins-role-strategy-ui-enhancer // @namespace com.michelin.cio.jenkins.tools // @include */role-strategy/assign-roles // @version 1.0 // ==/UserScript== /* * The MIT License * * Copyright (c) 2012, Manufacture Francaise des Pneumatiques Michelin, Daniel Petisme * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * Bootstrap to inject a custom JS function into the page and take advantage * of the javascript libraries included in the host page. */ window.addEventListener("load", function() { createScript(main); }, false); /** * Create a script element and inject a JS function into. */ function createScript(fn) { var script = document.createElement('script'); script.setAttribute("type", "application/javascript"); script.textContent = '(' + fn + ')();'; //The JS function to run document.body.appendChild(script); // run the script document.body.removeChild(script); // clean up } /** * The function injected in the page */ function main(){ var builToolTips = function(tableId){ Event.observe(tableId, 'mouseover', function(event) { /** * This is a trick to make the cell as event catcher. The cell's mouseover event triggers the input's tooltip construction. * If you build the Tooltip when the mouse is over the table cell, then you have to reproduce a mouse over event to display it. */ var cell = $(Event.element(event)).down('input').up('tr.permission-row td'); //The username is stored in the parent row var username = cell.up('tr').readAttribute('name'); //The tooltip will be built againt the checkbox input var input = cell.down('input') //The role is stored in the child checkbox input var role = input.readAttribute('name'); //Compute an id for this input var inputId = username + "-" + role; if (!input.hasAttribute('id')) { input.setAttribute('id', inputId); /** * UI enhancement Bascially it take off the "[ ]" and split the pair on 2 lines. * From [username]-[rolename] or anonymous-[rolename] to * User: username * Role: rolename */ var tooltipText = inputId.sub(/(\[)?(.*?)(\])?-\[(.*?)\]/, 'User: #{2}<br />Role: #{4}'); /* * Finally, create a tooltip for the input embeds in this table cell * We use the present YUI! libraries to build a YAHOO tooltip */ new YAHOO.widget.Tooltip("Tooltip " + inputId, { context:inputId, text:tooltipText }); } }); } builToolTips(globalRoles); builToolTips(projectRoles); }