web/drupal/modules/imce/js/imce_set_app.js
author cavaliet@caf4f556-3d62-0410-8435-a86758001935
Fri, 21 Aug 2009 16:26:26 +0000
branchdrupal
changeset 74 0ff3ba646492
permissions -rw-r--r--
Create branch for drupal with first commit from local working copy

// $Id: imce_set_app.js,v 1.3.2.6 2009/02/20 21:17:25 ufku Exp $
//When imce url contains &app=appName|fileProperty1@correspondingFieldId1|fileProperty2@correspondingFieldId2|...
//the specified fields are filled with the specified properties of the selected file.

var appFields = {}, appWindow = (top.appiFrm||window).opener;

//execute when imce loads.
imce.hooks.load.push(function(win) {
  var data = decodeURIComponent(location.href.substr(location.href.lastIndexOf('app=')+4)).split('|');
  var appName = data.shift();
  //extract fields
  for (var i in data) {
    var arr = data[i].split('@');
    appFields[arr[0]] = arr[1];
  }
  //run custom onload function if available.
  if (appFields['onload'] && $.isFunction(appWindow[appFields['onload']])) {
    appWindow[appFields['onload']](win);
    delete appFields['onload'];
  }
  //set custom sendto function. appFinish is the default.
  var sendtoFunc = appFields['url'] ? appFinish : false;
  //check sendto@funcName syntax in URL
  if (appFields['sendto'] && $.isFunction(appWindow[appFields['sendto']])) {
    sendtoFunc = appWindow[appFields['sendto']];
    delete appFields['sendto'];
  }
  //check windowname+ImceFinish. old method
  else if (win.name && $.isFunction(appWindow[win.name +'ImceFinish'])) {
    sendtoFunc = appWindow[win.name +'ImceFinish'];
  }
  //highlight file
  if (appFields['url']) {
    if (appFields['url'].indexOf(',') > -1) {//support multiple url fields url@field1,field2..
      var arr = appFields['url'].split(',');
      for (var i in arr) {
        if ($('#'+ arr[i], appWindow.document).size()) {
          appFields['url'] = arr[i];
          break;
        }
      }
    }
    var filename = $('#'+ appFields['url'], appWindow.document).val();
    imce.highlight(filename.substr(filename.lastIndexOf('/')+1));
  }
  //set send to
  if (sendtoFunc) {
    imce.setSendTo(Drupal.t('Send to @app', {'@app': appName}), sendtoFunc);
  }
});

//sendTo function
var appFinish = function(file, win) {
  var doc = $(appWindow.document);
  for (var i in appFields) {
    doc.find('#'+ appFields[i]).val(file[i]);
  }
  if (appFields['url']) {
    try{doc.find('#'+ appFields['url']).blur().change().focus()}catch(e){};
    try{doc.find('#'+ appFields['url']).trigger('onblur').trigger('onchange').trigger('onfocus')}catch(e){};//inline events
  }
  appWindow.focus();
  win.close();
};