[pLog-svn] r4145 - in plog/branches/lifetype-1.1.2: js/ui templates/admin

oscar at devel.lifetype.net oscar at devel.lifetype.net
Fri Oct 20 21:05:52 GMT 2006


Author: oscar
Date: 2006-10-20 21:05:51 +0000 (Fri, 20 Oct 2006)
New Revision: 4145

Modified:
   plog/branches/lifetype-1.1.2/js/ui/common.js
   plog/branches/lifetype-1.1.2/templates/admin/editpost.template
   plog/branches/lifetype-1.1.2/templates/admin/newpost.template
Log:
no more clumsy code to implement the post preview feature and no more problems with locale. I finally managed to find a way to submit a form to a window created via window.open() so we can now safely let the browswer do all the encoding of characters and forget about our hacks. This seems to work fine with IE 6, Firefox 2.0 and Safari 2.0 and it should fix issue 1066 (http://bugs.lifetype.net/view.php?id=1066)


Modified: plog/branches/lifetype-1.1.2/js/ui/common.js
===================================================================
--- plog/branches/lifetype-1.1.2/js/ui/common.js	2006-10-19 11:08:45 UTC (rev 4144)
+++ plog/branches/lifetype-1.1.2/js/ui/common.js	2006-10-20 21:05:51 UTC (rev 4145)
@@ -239,154 +239,7 @@
   }
 }
 
-function getPostEditFormElements( formId )
-{
-	var formData = '';
-	
-	form = document.getElementById( formId );
-	
-	for(i = 0; i < form.elements.length; i++ ) {
-		itemName = form.elements[i].name;
-		itemValue = form.elements[i].value;
-		
-		if( itemName != "op" ) {
-			// we don't want to send more than one "op" parameter... do we?
-			if( itemName == "postCategories[]" ) {
-				// we need to have a special case for this one because it's a list that
-				// allows multiple selection... only using the "value" attribute will
-				// return one of the items and we would like to have them all
-				for (var j = 0; j < form.elements[i].options.length; j++) {
-					if (form.elements[i].options[j].selected) 
-						formData = formData + itemName + "=" + form.elements[i].options[j].value + "&";
-				}
-			}
-			else if( itemName == "postText" && htmlAreaEnabled ) {
-			    if ( blogLocale == "UTF-8" ) {
-				    formData = formData + itemName + "=" + encodeURIComponent(tinyMCE.getContent('postText')) + "&";
-				} else {
-				    formData = formData + itemName + "=" + escape(tinyMCE.getContent('postText')) + "&";
-				}
-			}
-			else if( itemName == "postExtendedText" && htmlAreaEnabled ) {
-				if ( blogLocale == "UTF-8" ) {
-				    formData = formData + itemName + "=" + encodeURIComponent(tinyMCE.getContent('postExtendedText')) + "&";
-			    } else {
-				    formData = formData + itemName + "=" + escape(tinyMCE.getContent('postExtendedText')) + "&";
-                }
-			}
-			else {
-				// for all other elements, normal handling
-				if ( blogLocale == "UTF-8" ) {
-				    formData = formData + itemName + "=" + encodeURIComponent(itemValue) + "&";
-				} else {
-				    formData = formData + itemName + "=" + escape(itemValue) + "&";
-			    }
-			}
-		}
-    }	
-    
-    return formData;
-}
-
 /**
- * opens a new window where the post preview will be shown
- */
-function previewNewPost( htmlAreaEnabled )
-{
-	previewPost( "newPost", htmlAreaEnabled );
-}
-
-function previewUpdatedPost( htmlAreaEnabled )
-{
-	previewPost( "editPost", htmlAreaEnabled );
-}
-	
-function previewPost_old( formId )
-{
-	form = document.getElementById( formId );
-	
-	// we will only open this window if there is at least one category selected, otherwise it
-	// will cause problems!
-	if( submitNewPost( form )) {
-		url = "?op=previewPost&" + getPostEditFormElements( formId );
-		//window.alert(url);
-		postPreview = window.open( url,'Preview','scrollbars=yes,resizable=yes,toolbar=no');
-	}
-	
-	return true;
-}
-
-function previewPost( formId, htmlAreaEnabled )
-{
-    form = document.getElementById( formId )
-    
-    if( submitNewPost( form )) { 
-        preview = window.open( '', '', 'scrollbars=yes,resizable=yes,toolbar=no' );
-        preview.focus();
-        
-        // write the contents as a form with hidden fields        
-        preview.document.open();
-        preview.document.write( '<html>' +
-                                '<meta http-equiv="content-type" content="text/html;charset=' + blogLocale + '" />' +
-                                '<body><div style="display:none">' +
-                                '<form name="previewForm" method="post" action="admin.php" accept-charset="' + blogLocale + '">' +
-                                '<input type="hidden" name="op" value="previewPost">' );
-        // post text, slug and topic... if we put everything in textareas, we avoid the need to escape things
-        // also we should keep in mind whether we're using htmlarea or not, since then we should use a different method
-        // to get the value out of the textareas
-        if( htmlAreaEnabled ) {
-        	postText = tinyMCE.getContent('postText');
-        	postExtendedText = tinyMCE.getContent('postExtendedText');
-		}
-        else {
-        	postText = form.postText.value;
-        	postExtendedText = form.postExtendedText.value;
-		}
-        preview.document.write( '<textarea name="postText">' + postText + '</textarea>' +
-                                '<textarea name="postTopic">' + form.postTopic.value + '</textarea>' +
-                                '<textarea name="postExtendedText">' + postExtendedText + '</textarea>' +
-                                '<input type="hidden" name="postSlug" value="' + form.postSlug.value + '" />' );
-        // post date and time
-        preview.document.write( '<input type="hidden" name="postDateTime" value="' + form.postDateTime.value + '" /> ' );
-        
-        // article categories
-        preview.document.write( '<select name="postCategories[]" multiple="multiple">' );
-        for( var i = 0; i < form.postCategories.options.length; i++ ) {
-            if( form.postCategories.options[i].selected )
-                preview.document.write( '<option selected="selected" value="' + form.postCategories.options[i].value + '">test</option>' );
-        }
-        preview.document.write( '</select>' );                        
-        // custom fields -- since we don't know their exact names and amount, we need to loop through the whole form to find them!        
-        for(var i = 0; i < form.elements.length; i++ ) {
-            var itemName = form.elements[i].name;
-            if( itemName ) {
-                if( itemName.substr(0,11) == "customField" ) {
-                    if( form.elements[i].type == "checkbox" ) 
-                        preview.document.write( '<input type="hidden" name="' + itemName + '" value="' + form.elements[i].value + '" />' );
-                    else
-                        preview.document.write( '<textarea name="' + itemName + '">' + form.elements[i].value + '</textarea>' );
-                }
-            }
-        }
-                                
-        // footer
-        preview.document.write( '</form></div>' +
-                                '<b>Loading preview, please wait...</b>' +
-                                '</body></html>' );
-        preview.document.close();
-    
-        // and submit the form
-		preview.document.previewForm.submit();
-    }
-}
-
-/*****
- *
- * functions for dealing with the "edit blog" screen
- *
- *****/
-
-/**
  * generic function for moving elements from one list to another!
  */
 function moveElement(srcList, dstList)

Modified: plog/branches/lifetype-1.1.2/templates/admin/editpost.template
===================================================================
--- plog/branches/lifetype-1.1.2/templates/admin/editpost.template	2006-10-19 11:08:45 UTC (rev 4144)
+++ plog/branches/lifetype-1.1.2/templates/admin/editpost.template	2006-10-20 21:05:51 UTC (rev 4145)
@@ -22,10 +22,29 @@
   var msgSaving = "{$locale->tr("saving_message")}";  
   var msgShowOptionPanel = "{$locale->tr("show_option_panel")}";
   var msgHideOptionPanel = "{$locale->tr("hide_option_panel")}";  
+  var preview = false;
     
   {include file="$admintemplatepath/calendarstuff.template"}
+
+{literal} 
+
+function selectOperation( t )
+{
+	if( preview ) {	
+		document.editPost.op.value="previewPost";
+		window.open("", t, "scrollbars=yes,resizable=yes,toolbar=no" );
+		return true;
+	}
+	else {
+		document.editPost.op.value="updatePost";
+		document.editPost.target="";
+		document.editPost.action="admin.php";
+		return true;
+	}
+}
+{/literal}
  </script>
-  <form name="editPost" id="editPost" action="admin.php" method="post">
+  <form name="editPost" id="editPost" method="post" onSubmit="return selectOperation(this.target);" target="admin">   
    <fieldset class="inputField">
    <legend>{$locale->tr("editPost")}</legend>
 
@@ -159,8 +178,8 @@
 	</div>
 	</fieldset>
 	<div class="buttons">  
-      <input type="button" name="previewPost" value="{$locale->tr("preview")}" onclick="javascript:previewUpdatedPost(htmlAreaEnabled)" />	
-      <input type="submit" name="updatePost" value="{$locale->tr("update")}"/>
+      <input type="submit" name="previewPost" value="{$locale->tr("preview")}" onClick="preview=true" />	
+      <input type="submit" name="updatePost" value="{$locale->tr("update")}" onClick="preview=false"/>
       <input type="hidden" name="op" value="updatePost"/>
       <input type="hidden" name="postId" id="postId" value="{$postId}"/>
 	</div>  	

Modified: plog/branches/lifetype-1.1.2/templates/admin/newpost.template
===================================================================
--- plog/branches/lifetype-1.1.2/templates/admin/newpost.template	2006-10-19 11:08:45 UTC (rev 4144)
+++ plog/branches/lifetype-1.1.2/templates/admin/newpost.template	2006-10-20 21:05:51 UTC (rev 4145)
@@ -34,16 +34,35 @@
   
   var todayDay = '{$today->getDay()}';
   var todayMonth = '{$today->getMonth()}';
-  var todayYear = '{$today->getYear()}';  
+  var todayYear = '{$today->getYear()}'; 
   
+  // this needs to be pre-initialized
+  var preview = false;
+  
   {include file="$admintemplatepath/calendarstuff.template"}
-  
- </script>
  
-  <form name="newPost" id="newPost" action="admin.php" method="post">
+{literal} 
+
+function selectOperation( t )
+{
+	if( preview ) {	
+		document.newPost.op.value="previewPost";
+		window.open("", t, "scrollbars=yes,resizable=yes,toolbar=no" );
+		return true;
+	}
+	else {
+		document.newPost.op.value="addPost";
+		document.newPost.target="";
+		document.newPost.action="admin.php";
+		return true;
+	}
+}
+{/literal}
+</script>
+ 
+  <form name="newPost" id="newPost" method="post" onSubmit="return selectOperation(this.target);" target="admin">   
    <fieldset class="inputField">
    <legend>{$locale->tr("newPost")}</legend>
-
    <div class="optionIcon">
      <a id="optionIconLink" href="#" title="{$locale->tr("hide_option_panel")}" onclick="switchOptionPanel()">{$locale->tr("hide_option_panel")}</a>
    </div> 
@@ -192,10 +211,10 @@
 		{if $browser->has_feature("xmlhttpreq")}
 		<input type="button" name="saveDraftAndContinue" value="{$locale->tr("save_draft_and_continue")}" onclick="javascript:saveDraftArticleAjax()" />
 		{/if}	
-		<input type="button" name="previewPost" value="{$locale->tr("preview")}" onclick="javascript:previewNewPost(htmlAreaEnabled)" />
-		<input type="submit" name="addPost" value="{$locale->tr("add_post")}" />
+		<input type="submit" name="previewPost" value="{$locale->tr("preview")}" onClick="preview=true"/>
+		<input type="submit" name="addPost" value="{$locale->tr("add_post")}" onClick="preview=false" />
 		<input type="hidden" name="isDraft" value="" />
-		<input type="hidden" name="op" value="addPost"/>
+		<input type="hidden" name="op" value="addPost" />
 		<input type="hidden" name="postId" id="postId" value="{$postId}" />
     </div>
   </form>



More information about the pLog-svn mailing list