// ==UserScript== // @name Gitlab, open file in phpstorm // @namespace micoli.phpstorm.openlinks // @version 0.7 // @description add a link to phpstorm in gitlab ci merge requests files // @author You // @match https://gitlab.com/* // @downloadURL none // ==/UserScript== (function () { // defaults write com.google.Chrome URLWhitelist -array "phpstorm://* 'use strict'; let config = {}; let linkCounter = 0; document.querySelectorAll('a[href*="redirectFromReferer"]').forEach((link)=> { link.href = link.href+'?referer='+window.location.href }); const project = $('nav.breadcrumbs ul.js-breadcrumbs-list li a')[1].pathname; const loadPreferences = function () { if (!window.localStorage.getItem('openInPhpStormSettings')) { return {}; } config = JSON.parse(window.localStorage.getItem('openInPhpStormSettings')); } const savePreferences = function () { window.localStorage.setItem('openInPhpStormSettings', JSON.stringify(config)) removeLinks(); setLinks(); } const icon = function (color) { return ` ` }; const phpStormMimeLink = function(link){ const prefix = config[project] || ''; document.location = `phpstorm://open?file=${prefix}${link}`; }; document.phpStormRestApiLink = function (link) { const prefix = config[project] || ''; const hrefLink = `http://localhost:63342/api/file?file=${prefix}${link}`; const linkWindow = window.open(hrefLink,'autoOpen'); setTimeout(function(){ linkWindow.close(); },1000); }; const openLinkInHiddenForm = function (action,parameters) { let hiddenDiv = document.getElementById('phpstorm-autoform'); if (hiddenDiv){ hiddenDiv.parentNode.removeChild(hiddenDiv); } console.log(action); document.querySelector('body').insertAdjacentHTML('beforeEnd', `
`); document.getElementById('phpstorm-autoform').submit(); }; const setLinks = function () { document.querySelectorAll('.diff-file').forEach(function (divDiffFile) { let jsEditInPhpStormButtonFound = false; let linkCounter = 0; divDiffFile.querySelectorAll('button[data-clipboard-text]').forEach( function (buttonClipboard) { const fileUrl = JSON.parse(buttonClipboard.getAttribute('data-clipboard-text'))['text']; divDiffFile.querySelectorAll('.js-edit-in-phpstorm').forEach(function (buttonEditInPhpStorm) { if (buttonEditInPhpStorm.getAttribute('data-link') === fileUrl) { jsEditInPhpStormButtonFound = true; } }); if (jsEditInPhpStormButtonFound) { return; } linkCounter++; const jsEditInPhpStormId = `js-edit-in-phpstorm-${divDiffFile.id}-${linkCounter}`; buttonClipboard .insertAdjacentHTML('afterend', `