Ignore:
Timestamp:
10/02/08 17:07:26 (11 years ago)
Author:
douglas
Message:

FIXED Ticket #1176 Merging new dialogs branch back to trunk.

Location:
trunk/modules/InsertImage
Files:
2 added
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/modules/InsertImage/insert_image.js

    r1001 r1044  
    1  
    21  /*--------------------------------------:noTabs=true:tabSize=2:indentSize=2:-- 
    32    --  Xinha (is not htmlArea) - http://xinha.org 
     
    87    --  Copyright (c) 2005-2008 Xinha Developer Team and contributors 
    98    -- 
    10     --  This is the standard implementation of the Xinha.prototype._insertImage method, 
    11     --  which provides the functionality to insert an image in the editor. 
     9    --  This is the Xinha standard implementation of an image insertion plugin 
    1210    -- 
    13     --  The file is loaded as a special plugin by the Xinha Core when no alternative method (plugin) is loaded. 
     11    --  he file is loaded as a special plugin by the Xinha Core when no alternative method (plugin) is loaded. 
    1412    -- 
    1513    -- 
    16     --  $HeadURL:http://svn.xinha.webfactional.com/trunk/modules/InsertImage/insert_image.js $ 
    17     --  $LastChangedDate:2008-04-12 23:02:13 +0200 (Sa, 12 Apr 2008) $ 
    18     --  $LastChangedRevision:992 $ 
    19     --  $LastChangedBy:ray $ 
     14    --  $HeadURL$ 
     15    --  $LastChangedDate$ 
     16    --  $LastChangedRevision$ 
     17    --  $LastChangedBy$ 
    2018    --------------------------------------------------------------------------*/ 
     19   
    2120InsertImage._pluginInfo = { 
    2221  name          : "InsertImage", 
    2322  origin        : "Xinha Core", 
    24   version       : "$LastChangedRevision:992 $".replace(/^[^:]*:\s*(.*)\s*\$$/, '$1'), 
     23  version       : "$LastChangedRevision$".replace(/^[^:]*:\s*(.*)\s*\$$/, '$1'), 
    2524  developer     : "The Xinha Core Developer Team", 
    26   developer_url : "$HeadURL:http://svn.xinha.webfactional.com/trunk/modules/InsertImage/insert_image.js $".replace(/^[^:]*:\s*(.*)\s*\$$/, '$1'), 
     25  developer_url : "$HeadURL$".replace(/^[^:]*:\s*(.*)\s*\$$/, '$1'), 
    2726  sponsor       : "", 
    2827  sponsor_url   : "", 
     
    3130 
    3231function InsertImage(editor) { 
    33 }                                       
     32        this.editor = editor; 
     33        var cfg = editor.config; 
     34        var self = this; 
    3435 
    35 // Called when the user clicks on "InsertImage" button.  If an image is already 
    36 // there, it will just modify it's properties. 
    37 Xinha.prototype._insertImage = function(image) 
    38 { 
    39   var editor = this;  // for nested functions 
    40   var outparam; 
    41   if ( typeof image == "undefined" ) 
    42   { 
    43     image = this.getParentElement(); 
    44     if ( image && image.tagName.toLowerCase() != 'img' ) 
    45     { 
    46       image = null; 
    47     } 
     36   editor.config.btnList.insertimage[3] = function() { self.show(); } 
    4837  } 
    4938   
    50   var base; 
    51   if ( typeof editor.config.baseHref != 'undefined' && editor.config.baseHref !== null ) { 
    52     base = editor.config.baseHref; 
     39InsertImage.prototype._lc = function(string) { 
     40        return Xinha._lc(string, 'Xinha'); 
     41}; 
     42 
     43InsertImage.prototype.onGenerateOnce = function() 
     44{ 
     45        InsertImage.loadAssets(); 
     46}; 
     47 
     48InsertImage.loadAssets = function() 
     49{ 
     50        var self = InsertImage; 
     51        if (self.loading) return; 
     52        self.loading = true; 
     53        Xinha._getback(_editor_url + 'modules/InsertImage/dialog.html', function(getback) { self.html = getback; self.dialogReady = true; }); 
     54        Xinha._getback(_editor_url + 'modules/InsertImage/pluginMethods.js', function(getback) { eval(getback); self.methodsReady = true; }); 
     55}; 
     56InsertImage.prototype.onUpdateToolbar = function() 
     57{  
     58  if (!(InsertImage.dialogReady && InsertImage.methodsReady)) 
     59        { 
     60          this.editor._toolbarObjects.insertimage.state("enabled", false); 
    5361  } 
    54   else { 
    55     var bdir = window.location.toString().split("/"); 
    56     bdir.pop(); 
    57     base = bdir.join("/"); 
    58   } 
     62  else this.onUpdateToolbar = null; 
     63}; 
    5964   
    60   if ( image ) 
     65InsertImage.prototype.prepareDialog = function() 
    6166  { 
    62     function getSpecifiedAttribute(element,attribute) 
    63     { 
    64       var a = element.attributes; 
    65       for (var i=0;i<a.length;i++) 
    66       { 
    67         if (a[i].nodeName == attribute && a[i].specified) 
    68         { 
    69           return a[i].value; 
    70         } 
    71       } 
    72       return ''; 
    73   } 
    74   /* if you want to understand why the above function is required, uncomment the two lines below and launch InsertImage in both Mozilla & IE with an image selected that hath neither value set and compare the results 
    75   alert(image.vspace +' '+ image.getAttribute('vspace') + ' ' + image.getAttribute('vspace',2) + ' ' + getSpecifiedAttribute(image,'vspace') ); 
    76     alert(image.hspace +' '+ image.getAttribute('hspace') + ' ' + image.getAttribute('hspace',2) + ' ' + getSpecifiedAttribute(image,'hspace') ); 
    77   */ 
    78   outparam = 
    79     { 
    80       f_base   : base, 
    81       f_url    : this.stripBaseURL(image.getAttribute('src',2)), // the second parameter makes IE return the value as it is set, as opposed to an "interpolated" (as MSDN calls it) value 
    82       f_alt    : image.alt, 
    83       f_border : image.border, 
    84       f_align  : image.align, 
    85       f_vert   : getSpecifiedAttribute(image,'vspace'), 
    86       f_horiz  : getSpecifiedAttribute(image,'hspace'), 
    87       f_width  : image.width, 
    88       f_height : image.height 
    89     }; 
    90   } 
    91   else{ 
    92     outparam = 
    93     { 
    94       f_base   : base, 
    95       f_url    : ""       
    96     }; 
    97   } 
     67        var self = this; 
     68        var editor = this.editor; 
    9869   
    99   Dialog( 
    100     editor.config.URIs.insert_image, 
    101     function(param) 
    102     { 
    103       // user must have pressed Cancel 
    104       if ( !param ) 
    105       { 
     70        var dialog = this.dialog = new Xinha.Dialog(editor, InsertImage.html, 'Xinha',{width:410}) 
     71        // Connect the OK and Cancel buttons 
     72        dialog.getElementById('ok').onclick = function() {self.apply();} 
     73 
     74        dialog.getElementById('cancel').onclick = function() { self.dialog.hide()}; 
     75 
     76        dialog.getElementById('preview').onclick = function() {  
     77          var f_url = dialog.getElementById("f_url"); 
     78          var url = f_url.value; 
     79          var base = dialog.getElementById("f_base").value; 
     80          if (!url) { 
     81            alert(dialog._lc("You must enter the URL")); 
     82            f_url.focus(); 
    10683        return false; 
    10784      } 
    108       var img = image; 
    109       if ( !img ) 
     85          dialog.getElementById('ipreview').src = Xinha._resolveRelativeUrl(base, url); 
     86          return false; 
     87        } 
     88        this.dialog.onresize = function () 
    11089      { 
    111         if ( Xinha.is_ie ) 
    112         { 
    113           var sel = editor.getSelection(); 
    114           var range = editor.createRange(sel); 
    115           editor._doc.execCommand("insertimage", false, param.f_url); 
    116           img = range.parentElement(); 
    117           // wonder if this works... 
    118           if ( img.tagName.toLowerCase() != "img" ) 
    119           { 
    120             img = img.previousSibling; 
     90                 
     91                 
     92                var newHeightForPreview =  
     93                parseInt(this.height,10)  
     94                - this.getElementById('h1').offsetHeight  
     95                - this.getElementById('buttons').offsetHeight 
     96                - this.getElementById('inputs').offsetHeight  
     97                - parseInt(this.rootElem.style.paddingBottom,10); // we have a padding at the bottom, gotta take this into acount 
     98                 
     99                 
     100                this.getElementById("ipreview").style.height = ((newHeightForPreview > 0) ? newHeightForPreview : 0) + "px"; // no-go beyond 0 
     101                 
     102                this.getElementById("ipreview").style.width = this.width - 2   + 'px'; // and the width 
     103 
    121104          } 
    122         } 
    123         else 
    124         { 
    125           img = document.createElement('img'); 
    126           img.src = param.f_url; 
    127           editor.insertNodeAtSelection(img); 
    128           if ( !img.tagName ) 
    129           { 
    130             // if the cursor is at the beginning of the document 
    131             img = range.startContainer.firstChild; 
    132           } 
    133         } 
    134       } 
    135       else 
    136       { 
    137         img.src = param.f_url; 
    138       } 
    139  
    140       for ( var field in param ) 
    141       { 
    142         var value = param[field]; 
    143         switch (field) 
    144         { 
    145           case "f_alt": 
    146             if (value) 
    147               img.alt = value; 
    148             else 
    149               img.removeAttribute("alt"); 
    150             break; 
    151           case "f_border": 
    152             if (value) 
    153               img.border = parseInt(value || "0"); 
    154             else 
    155               img.removeAttribute("border"); 
    156             break; 
    157           case "f_align": 
    158             if (value) 
    159               img.align = value; 
    160             else 
    161               img.removeAttribute("align"); 
    162             break; 
    163           case "f_vert": 
    164             if (value != "") 
    165               img.vspace = parseInt(value || "0"); 
    166             else 
    167               img.removeAttribute("vspace"); 
    168             break; 
    169           case "f_horiz": 
    170             if (value != "") 
    171               img.hspace = parseInt(value || "0"); 
    172             else 
    173               img.removeAttribute("hspace"); 
    174             break; 
    175           case "f_width": 
    176             if (value) 
    177               img.width = parseInt(value || "0"); 
    178             else 
    179               img.removeAttribute("width"); 
    180             break; 
    181           case "f_height": 
    182             if (value) 
    183               img.height = parseInt(value || "0"); 
    184             else 
    185               img.removeAttribute("height"); 
    186             break; 
    187         } 
    188       } 
    189     }, 
    190     outparam); 
     105        this.dialogReady = true; 
    191106}; 
Note: See TracChangeset for help on using the changeset viewer.