annotate sites/all/modules/imce/js/imce_set_app.js @ 0:ff03f76ab3fe

initial version
author danieleb <danielebarchiesi@me.com>
date Wed, 21 Aug 2013 18:51:11 +0100
parents
children
rev   line source
danielebarchiesi@0 1 /*
danielebarchiesi@0 2 * IMCE Integration by URL
danielebarchiesi@0 3 * Ex-1: http://example.com/imce?app=XEditor|url@urlFieldId|width@widthFieldId|height@heightFieldId
danielebarchiesi@0 4 * Creates "Insert file" operation tab, which fills the specified fields with url, width, height properties
danielebarchiesi@0 5 * of the selected file in the parent window
danielebarchiesi@0 6 * Ex-2: http://example.com/imce?app=XEditor|sendto@functionName
danielebarchiesi@0 7 * "Insert file" operation calls parent window's functionName(file, imceWindow)
danielebarchiesi@0 8 * Ex-3: http://example.com/imce?app=XEditor|imceload@functionName
danielebarchiesi@0 9 * Parent window's functionName(imceWindow) is called as soon as IMCE UI is ready. Send to operation
danielebarchiesi@0 10 * needs to be set manually. See imce.setSendTo() method in imce.js
danielebarchiesi@0 11 */
danielebarchiesi@0 12
danielebarchiesi@0 13 (function($) {
danielebarchiesi@0 14
danielebarchiesi@0 15 var appFields = {}, appWindow = (top.appiFrm||window).opener || parent;
danielebarchiesi@0 16
danielebarchiesi@0 17 // Execute when imce loads.
danielebarchiesi@0 18 imce.hooks.load.push(function(win) {
danielebarchiesi@0 19 var index = location.href.lastIndexOf('app=');
danielebarchiesi@0 20 if (index == -1) return;
danielebarchiesi@0 21 var data = decodeURIComponent(location.href.substr(index + 4)).split('|');
danielebarchiesi@0 22 var arr, prop, str, func, appName = data.shift();
danielebarchiesi@0 23 // Extract fields
danielebarchiesi@0 24 for (var i = 0, len = data.length; i < len; i++) {
danielebarchiesi@0 25 str = data[i];
danielebarchiesi@0 26 if (!str.length) continue;
danielebarchiesi@0 27 if (str.indexOf('&') != -1) str = str.split('&')[0];
danielebarchiesi@0 28 arr = str.split('@');
danielebarchiesi@0 29 if (arr.length > 1) {
danielebarchiesi@0 30 prop = arr.shift();
danielebarchiesi@0 31 appFields[prop] = arr.join('@');
danielebarchiesi@0 32 }
danielebarchiesi@0 33 }
danielebarchiesi@0 34 // Run custom onload function if available
danielebarchiesi@0 35 if (appFields.imceload && (func = isFunc(appFields.imceload))) {
danielebarchiesi@0 36 func(win);
danielebarchiesi@0 37 delete appFields.imceload;
danielebarchiesi@0 38 }
danielebarchiesi@0 39 // Set custom sendto function. appFinish is the default.
danielebarchiesi@0 40 var sendtoFunc = appFields.url ? appFinish : false;
danielebarchiesi@0 41 //check sendto@funcName syntax in URL
danielebarchiesi@0 42 if (appFields.sendto && (func = isFunc(appFields.sendto))) {
danielebarchiesi@0 43 sendtoFunc = func;
danielebarchiesi@0 44 delete appFields.sendto;
danielebarchiesi@0 45 }
danielebarchiesi@0 46 // Check old method windowname+ImceFinish.
danielebarchiesi@0 47 else if (win.name && (func = isFunc(win.name +'ImceFinish'))) {
danielebarchiesi@0 48 sendtoFunc = func;
danielebarchiesi@0 49 }
danielebarchiesi@0 50 // Highlight file
danielebarchiesi@0 51 if (appFields.url) {
danielebarchiesi@0 52 // Support multiple url fields url@field1,field2..
danielebarchiesi@0 53 if (appFields.url.indexOf(',') > -1) {
danielebarchiesi@0 54 var arr = appFields.url.split(',');
danielebarchiesi@0 55 for (var i in arr) {
danielebarchiesi@0 56 if ($('#'+ arr[i], appWindow.document).size()) {
danielebarchiesi@0 57 appFields.url = arr[i];
danielebarchiesi@0 58 break;
danielebarchiesi@0 59 }
danielebarchiesi@0 60 }
danielebarchiesi@0 61 }
danielebarchiesi@0 62 var filename = $('#'+ appFields.url, appWindow.document).val() || '';
danielebarchiesi@0 63 imce.highlight(filename.substr(filename.lastIndexOf('/')+1));
danielebarchiesi@0 64 }
danielebarchiesi@0 65 // Set send to
danielebarchiesi@0 66 sendtoFunc && imce.setSendTo(Drupal.t('Insert file'), sendtoFunc);
danielebarchiesi@0 67 });
danielebarchiesi@0 68
danielebarchiesi@0 69 // Default sendTo function
danielebarchiesi@0 70 var appFinish = function(file, win) {
danielebarchiesi@0 71 var $doc = $(appWindow.document);
danielebarchiesi@0 72 for (var i in appFields) {
danielebarchiesi@0 73 $doc.find('#'+ appFields[i]).val(file[i]);
danielebarchiesi@0 74 }
danielebarchiesi@0 75 if (appFields.url) {
danielebarchiesi@0 76 try{
danielebarchiesi@0 77 $doc.find('#'+ appFields.url).blur().change().focus();
danielebarchiesi@0 78 }catch(e){
danielebarchiesi@0 79 try{
danielebarchiesi@0 80 $doc.find('#'+ appFields.url).trigger('onblur').trigger('onchange').trigger('onfocus');//inline events for IE
danielebarchiesi@0 81 }catch(e){}
danielebarchiesi@0 82 }
danielebarchiesi@0 83 }
danielebarchiesi@0 84 appWindow.focus();
danielebarchiesi@0 85 win.close();
danielebarchiesi@0 86 };
danielebarchiesi@0 87
danielebarchiesi@0 88 // Checks if a string is a function name in the given scope.
danielebarchiesi@0 89 // Returns function reference. Supports x.y.z notation.
danielebarchiesi@0 90 var isFunc = function(str, scope) {
danielebarchiesi@0 91 var obj = scope || appWindow;
danielebarchiesi@0 92 var parts = str.split('.'), len = parts.length;
danielebarchiesi@0 93 for (var i = 0; i < len && (obj = obj[parts[i]]); i++);
danielebarchiesi@0 94 return obj && i == len && (typeof obj == 'function' || typeof obj != 'string' && !obj.nodeName && obj.constructor != Array && /^[\s[]?function/.test(obj.toString())) ? obj : false;
danielebarchiesi@0 95 }
danielebarchiesi@0 96
danielebarchiesi@0 97 })(jQuery);