jquery-plugin-orLinkify.js (3395B)
1 import $ from "../jquery-global.js"; 2 import Workbench from "../openrat/workbench.js"; 3 import Api from "../openrat/api.js"; 4 5 /** 6 * JQuery-Plugin, enable clicking on an area. 7 * It searches for an anchor (<a href="..." />) in the child elements and virtually clicks on it. 8 */ 9 export default function( options ) 10 { 11 // Create some defaults, extending them with any options that were provided 12 var settings = $.extend( { 13 'openAction' : function(name,action,id) { 14 Workbench.getInstance().openNewAction( name,action,id ); 15 } 16 }, options); 17 18 $(this).addClass('linkified'); 19 20 // Disable all links in this linkified area. 21 // The user is already able to open the link in a new tab. 22 if ( $(this).is('a') ) 23 $(this).addClass('act-prevented-link').click( function(event) { 24 event.preventDefault(); 25 } ); 26 else 27 $(this).find('a').addClass('act-prevented-sublink').click( function(event) { 28 event.preventDefault(); 29 } ); 30 31 return $(this).click(function(event) 32 { 33 34 // Searching for the first link in all children. 35 let $el = $(this); 36 let $link; 37 38 if ( $el.is('a') ) 39 $link = $el; 40 else 41 $link = $el.find('a').first(); 42 43 let type = $link.attr('data-type'); 44 45 // Inaktive Menüpunkte sind natürlich nicht anklickbar. 46 if ( $link.parent().hasClass('dropdown-entry--inactive') ) 47 return; 48 49 switch( type ) 50 { 51 /** 52 * Creating a temporary form element for submitting a POST request. 53 */ 54 case 'post': 55 56 let api = new Api(); 57 let formData = new FormData(); 58 59 let params = JSON.parse( $link.attr('data-data') ); 60 params.output = 'json'; 61 62 // Add formular data... 63 Object.keys( params ).forEach( (key) => { 64 formData.append( key, params[key] ); 65 } ); 66 if (!formData.get('id') ) 67 formData.set('id',Workbench.state.id); 68 if (!formData.get('action') ) 69 formData.set('action',Workbench.state.action); 70 71 // Submit the form. 72 api.sendData( formData ); 73 74 if ( $link.data('afterSuccess') === 'reload' ) 75 Workbench.getInstance().reloadViews(); 76 if ( $link.data('afterSuccess') === 'reloadAll' ) 77 Workbench.getInstance().reloadAll(); 78 79 break; 80 81 case 'edit': 82 case 'dialog': 83 let dialog = Workbench.getInstance().createDialog(); 84 let name = $link.attr('data-name'); 85 if ( !name ) 86 name = $link.text(); // get the name from the combined text of all children. 87 88 let extraValue = Workbench.htmlDecode($link.attr('data-extra')); 89 let extraData = JSON.parse(extraValue); 90 91 dialog.start(name,$link.attr('data-action'),$link.attr('data-method'),$link.attr('data-id'),extraData ); 92 break; 93 94 case 'external': 95 window.open( $link.attr('data-url'),' _blank' ); 96 break; 97 case 'window': 98 window.location.href = View.createUrl($link.attr('data-action'), $link.attr('data-method'), $link.attr('data-id')); 99 break; 100 101 case 'popup': 102 Workbench.popupWindow = window.open( $link.attr('data-url'), 'Popup', 'location=no,menubar=no,scrollbars=yes,toolbar=no,resizable=yes'); 103 break; 104 105 case 'help': 106 help($link,$link.attr('data-url'),$link.attr('data-suffix') ); 107 break; 108 109 case 'fullscreen': 110 fullscreen($link); 111 break; 112 113 case 'open': 114 settings.openAction( $link.text().trim(),$link.attr('data-action'),$link.attr('data-id') ); 115 break; 116 117 default: 118 throw "UI error: Unknown link type: "+type+" in link "+$link.html(); 119 } 120 }); 121 }; 122 123 124