source: trunk/modules/InsertImage/insert_image.js @ 992

Last change on this file since 992 was 992, checked in by ray, 11 years ago

#1186 strip xinha_config.baseHref AND location.href from paths

  • Property svn:keywords set to LastChangedDate LastChangedRevision LastChangedBy HeadURL Id
File size: 5.6 KB
Line 
1
2  /*--------------------------------------:noTabs=true:tabSize=2:indentSize=2:--
3    --  Xinha (is not htmlArea) - http://xinha.org
4    --
5    --  Use of Xinha is granted by the terms of the htmlArea License (based on
6    --  BSD license)  please read license.txt in this package for details.
7    --
8    --  Copyright (c) 2005-2008 Xinha Developer Team and contributors
9    --
10    --  This is the standard implementation of the Xinha.prototype._insertImage method,
11    --  which provides the functionality to insert an image in the editor.
12    --
13    --  The file is loaded as a special plugin by the Xinha Core when no alternative method (plugin) is loaded.
14    --
15    --
16    --  $HeadURL$
17    --  $LastChangedDate$
18    --  $LastChangedRevision$
19    --  $LastChangedBy$
20    --------------------------------------------------------------------------*/
21InsertImage._pluginInfo = {
22  name          : "InsertImage",
23  origin        : "Xinha Core",
24  version       : "$LastChangedRevision$".replace(/^[^:]*: (.*) \$$/, '$1'),
25  developer     : "The Xinha Core Developer Team",
26  developer_url : "$HeadURL$".replace(/^[^:]*: (.*) \$$/, '$1'),
27  sponsor       : "",
28  sponsor_url   : "",
29  license       : "htmlArea"
30};
31
32function InsertImage(editor) {
33}                                     
34
35// Called when the user clicks on "InsertImage" button.  If an image is already
36// there, it will just modify it's properties.
37Xinha.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    }
48  }
49 
50  var base;
51  if ( typeof editor.config.baseHref != 'undefined' && editor.config.baseHref !== null ) {
52    base = editor.config.baseHref;
53  }
54  else {
55    var bdir = window.location.toString().split("/");
56    bdir.pop();
57    base = bdir.join("/");
58  }
59 
60  if ( image )
61  {
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  }
98 
99  Dialog(
100    editor.config.URIs.insert_image,
101    function(param)
102    {
103      // user must have pressed Cancel
104      if ( !param )
105      {
106        return false;
107      }
108      var img = image;
109      if ( !img )
110      {
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;
121          }
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);
191};
Note: See TracBrowser for help on using the repository browser.