]> git.mjollnir.org Git - s9y.git/commitdiff
Fix bug #1209706 - uploading image error for Opera+IE
authorgarvinhicking <garvinhicking>
Fri, 27 May 2005 11:53:23 +0000 (11:53 +0000)
committergarvinhicking <garvinhicking>
Fri, 27 May 2005 11:53:23 +0000 (11:53 +0000)
include/admin/images.inc.php

index e22f6e83c667d96ea1c0d595c26aaf0ad295355f..f6773edf744fe2c351e5cf0e5632e088db93e639 100644 (file)
@@ -368,6 +368,46 @@ switch ($serendipity['GET']['adminAction']) {
     <?php echo ADD_MEDIA_BLAHBLAH; ?>
 
     <script type="text/javascript">
+    // Function prototype inspired by http://molily.de/javascript-nodelist
+    function showNodes(n) {
+        var html;
+        html = '<!--nodeset--><li>';
+
+        switch (n.nodeType) {
+            case 1:
+                html += 'Type is <em>' + n.nodeName + '<\/em>';
+                if (n.hasChildNodes()) {
+                    ausgabe += ' - childNodes: ' + n.childNodes.length;
+                }
+                break;
+
+            case 3:
+                var nval = n.nodeValue.replace(/</g, '&lt;').replace(/\n/g, '\\n');
+                html += 'Content: <strong>' + nval + '<\/strong>';
+                break;
+
+            case 8:
+                var nval = n.nodeValue.replace(/</g, '&lt;').replace(/\n/g, '\\n');
+                html += 'Hidden: <em>' + nval + '<\/em>';
+                break;
+
+            default:
+                html += 'Type is ' + n.nodeType + ', Content is <strong>' + n.nodeValue + '<\/strong>';
+        }
+
+        if (n.hasChildNodes()) {
+            html += '\n<ol>\n';
+            for (i=0; i < n.childNodes.length; i++) {
+                j = n.childNodes[i];
+                html += showNodes(j);
+            }
+            html += '</ol>\n';
+        }
+        html += '</li>\n';
+
+        return html;
+    }
+
     function getfilename(value) {
         re = /^.+[\/\\]+?(.+)$/;
         return value.replace(re, "$1");
@@ -388,12 +428,34 @@ switch ($serendipity['GET']['adminAction']) {
         fields.id = 'upload_form_' + fieldcount;
         fields.style.display = 'block';
 
-        // Now, this is easy... ;-)
-        userfile       = fields.childNodes[1].childNodes[1].childNodes[0].childNodes[3].childNodes[0];
-        targetfilename = fields.childNodes[1].childNodes[1].childNodes[4].childNodes[3].childNodes[0];
-        targetdir      = fields.childNodes[1].childNodes[1].childNodes[6].childNodes[3].childNodes[0];
-        columncount    = fields.childNodes[3].childNodes[0];
-
+        // Get the DOM outline be uncommenting this:
+        // document.getElementById('debug').innerHTML = showNodes(fields);
+        
+        // garvin: This gets a bit weird. Opera, Mozilla and IE all have their own numbering.
+        // We cannot operate on "ID" basis, since a unique ID is not yet set before instancing.
+        if (fields.childNodes[0].nodeValue == null) {
+            // This is Internet Explorer, it does not have a linebreak as first element.
+            userfile       = fields.childNodes[0].childNodes[0].childNodes[0].childNodes[1].childNodes[0];
+            targetfilename = fields.childNodes[0].childNodes[0].childNodes[2].childNodes[1].childNodes[0];
+            targetdir      = fields.childNodes[0].childNodes[0].childNodes[3].childNodes[1].childNodes[0];
+            columncount    = fields.childNodes[1].childNodes[0];
+        } else {
+            // We have a browser which has \n's as their own nodes. Don't ask me. Now let's check if it's Opera or Mozilla.
+            if (fields.childNodes[1].childNodes[0].nodeValue == null) {
+                // This is Opera.
+                userfile       = fields.childNodes[1].childNodes[0].childNodes[0].childNodes[1].childNodes[0];
+                targetfilename = fields.childNodes[1].childNodes[0].childNodes[2].childNodes[1].childNodes[0];
+                targetdir      = fields.childNodes[1].childNodes[0].childNodes[3].childNodes[1].childNodes[0];
+                columncount    = fields.childNodes[3].childNodes[0];
+            } else {
+                // This is Mozilla.
+                userfile       = fields.childNodes[1].childNodes[1].childNodes[0].childNodes[3].childNodes[0];
+                targetfilename = fields.childNodes[1].childNodes[1].childNodes[4].childNodes[3].childNodes[0];
+                targetdir      = fields.childNodes[1].childNodes[1].childNodes[6].childNodes[3].childNodes[0];
+                columncount    = fields.childNodes[3].childNodes[0];
+            }
+        }
+        
         userfile.id   = 'userfile_' + fieldcount;
         userfile.name = 'serendipity[userfile][' + fieldcount + ']';
         
@@ -531,6 +593,9 @@ switch ($serendipity['GET']['adminAction']) {
            <div id="ccounter"><input type="hidden" name="serendipity[column_count][1]" id="column_count_1" value="true" /></div>
            </div>
            
+           <div id="debug">
+           </div>
+
            <script type="text/javascript">
                 document.getElementById('upload_template').style.display  = 'none';
                 document.write('<span id="upload_form"><' + '/span>');