Hi Walter,

again, you were right!

I just put the pre-tag into my layout:
<pre id="file_contents" onclick="activateEditor()">
  <%= yield :main %>
</pre>
And the JS-stuff for the InPlaceEditor, too.

Thanks so much for your help!

Tom.
(now using a grinding machine to get those two dents of my hellish
head...)

On Apr 23, 3:14 pm, Walter Lee Davis <[EMAIL PROTECTED]> wrote:
> You may have to change where exactly your partial goes, and where the
> editor goes. The issue, as I see it, is that your partial is emitting
> the same id it is supposed to be replacing the *contents* of.
>
> Try doing it this way, and see if that helps.
>
> <pre id="xyz" onclick="activateEditor()">
> (partial creates this bit) some gnarly text here (/partial)
> </pre>
>
> Walter
>
> On Apr 23, 2007, at 8:46 AM, Tom V. wrote:
>
>
>
> > Hi Walter,
>
> > thanks for your code, it works great!
> > However, yet another problem has occurred.
> > Maybe you could solve this,too...
>
> > In order to format file contents properly I added a pre-Tag to my
> > partial:
>
> > <pre class="sourcecode" id="editme" onclick="activateEditor();"><%= h
> > file_contents %></pre>
> > <script>
> >     //...
> >     var editor = new Ajax.InPlaceEditor('editme', '<%=
> > escape_javascript(url_for({ :action => "save_file", :path => path}))
> > %>')
> >     //...
> > </script>
>
> > Before I click the rendered file contents, the respective HTML (in
> > Firebug) looks sort of like this:
>
> > <div id="file.rb" class="DHTMLSuite_paneContentInner" style="display:
> > block;">
> >     <pre id="editme" class="sourcecode" onclick="activateEditor();">
> >         file contents with lots of special chars...
> >     </pre>
> >     <script type="text/javascript">
> >         // code for the InPlaceEditor
> >     </script>
> > </div>
>
> > After clicking, a form-tag is added: <form id="editme-inplaceeditor"
> > class="inplaceeditor-form">
>
> > When I click "save/ok", the pre-tag gets doubled:
>
> > <div id="two_controller.rb" class="DHTMLSuite_paneContentInner"
> > style="display: block;">
> >     <pre id="editme" class="sourcecode" onclick="activateEditor();"
> > title="Click to edit" style="...">
> >         <pre id="editme" class="sourcecode"
> > onclick="activateEditor();">
> >             file contents with lots of special chars...
> >         </pre>
> >     </pre>
> >     <script type="text/javascript">
> >         // code for the InPlaceEditor
> >     </script>
> > </div>
>
> > When I click on the file contents again, the whole text disappears and
> > Firebug yells at me:
>
> > string has no properties
> > convertHTMLLineBreaks(null)controls.js (line 591)
> > createEditField()controls.js (line 622)
> > createForm()controls.js (line 562)
> > enterEditMode(click clientX=0, clientY=0)controls.js (line 547)
> > bindAsEventListener(click clientX=0, clientY=0)
>
> > control.js:
> > convertHTMLLineBreaks: function(string) {
> >     return string.replace(/<br>/gi, "\n").replace(/<br\/>/gi,
> > "\n").replace(/<\/p>/gi, "\n").replace(/<p>/gi, "");
> > },
>
> > I don't know whether these two errors are related to eachother.
> > I also have no idea why the "string" disappeared...
> > Using InPlaceEditor without your extension, this error does not
> > appear.
> > But then I am missing your great work ;-)
> > The action for saving InPlaceEditor-contents looks like this:
>
> > def save_file
> >   file_path = params[:path]
> >   file_content = params[:value]
> >   begin
> >     # ...
> >     edited_file = File.open(file, "w")
> >     edited_file << file_content
> >     edited_file.close
> >     render :partial => 'ide/partials/file_contents', :locals =>
> > { :path => file_path, :file_contents =>
> > _get_file_contents(file_path) }, :layout => false
> >   rescue
> >     # ...
> >   end
> > end
>
> > The file is saved to the file system without any errors.
> > I tried to solve this over the weekend but failed again.
> > And those two dents I got are now medicated the hellboy-way ;-)
>
> > Cheers,
> >   Tom.
>
> > On Apr 22, 2:29 am, Walter Lee Davis <[EMAIL PROTECTED]> wrote:
> >> Object.extend(Ajax.InPlaceEditor.prototype, {
> >>         onLoadedExternalText: function(transport) {
> >>         Element.removeClasName(this.form,
> >> this.options.loadingClasName);
> >>         this.editField.disabled = false;
> >>         this.editField.value = transport.responseText;
> >>         Field.scrolFreActivate(this.editField);
> >>         }});
>
> >> Object.extend(Ajax.InPlaceEditor.prototype, {
> >>         getText: function() {
> >>         return this.element.childNodes[0] ?
> >> this.element.childNodes[0].nodeValue : '';
> >>         }
>
> >> });
>
> >> Add these two extensions afterprotaculous8-) loads. The first one
> >> removes the stripTags feature from the editor. The second one replaces
> >> the innerHTML with nodeValue. Those two together are what I did to get
> >> < and > and so forth to show up properly.
>
> >> It is very important if you do this not to put htmlspecialchars() into
> >> the mix. Something in prototype already does this, and it made quite a
> >> dent in my forehead until I realized that. Double-escaped entities --
> >> very nasty.
>
> >> Walter


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Spinoffs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-spinoffs?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to