PDA

View Full Version : Administrative and Maintenance Tools - Adding EditArea for Template & Plugin Editing


sweede
19 Dec 2007, 16:03
This isnt a Plugin or Mod, but a collection of code changes to allow the use of Edit Area to edit vbulletin templates and in the plugin code editor areas.

http://cdolivet.net/editarea/


Edit area
Here is EditArea, a free javascript editor for source code. (That is no way a WYSIWYG editor).
This editor is designed to edit souce code files in a textarea. The main goal is to allow text formatting, search and replace and real-time syntax highlight (for small text).

Download the zip file from the website above and unpack the zip file. Upload the edit_area folder into your /clientscript/ directory in your vbb installation. (See additional instructions at the bottom). You should now have a /clientscript/edit_area folder with files such as edit_area.css , edit_area.js and so on in it. Be sure that you also uploaded the images, langs, plugs and reg_syntax folders.


This requires changes to two files, one of them being optional.

The first file to edit is the includes/adminfunctions.php file
Using the UNMODIFIED 3.7.0 beta 2 version (Unsure of actual locations of the code in 3.6.8 and ealier versions, but the edits are basicly the same)

The first edit is adding the javascript to the page.
Open up the file includes/adminfunctions.php and look for the first
<script type=\"text/javascript\">
It should be around line 295.

Before that line, add
<script language=\"Javascript\" type=\"text/javascript\" src=\"../clientscript/edit_area/edit_area_full.js\"></script>
*Read http://cdolivet.net/editarea/editarea/docs/include.html for advanced options.

Now, we will look for the function print_textarea_row which starts around line 894

This is where the majority of the code changes are.

Comment out line 915 (add // infront of the line)
$resizer = "<div class=\"smallfont\"><a href=\"#\" $ie_reflow_css onclick=\"return resize_textarea(1, '{$vbulletin->textarea_id}')\">$vbphrase[increase_size]</a> <a href=\"#\" $ie_reflow_css onclick=\"return resize_textarea(-1, '{$vbulletin->textarea_id}')\">$vbphrase[decrease_size]</a></div>";

And then add the following code after the line you just commented out.

if (!$doeditbutton OR strpos($name,'[') !== false)
{
$javascript_source = '';
} else {
$javascript_source = '
<script language="Javascript" type="text/javascript">
// initialisation
editAreaLoader.init({
id: "'.$vbulletin->textarea_id.'"
,language: "en"
,syntax: "html"
,start_highlight: true
,font_size: "8"
,font_family: "verdana, monospace"
,allow_resize: "both"
,allow_toggle: true
,replace_tab_by_spaces: 4
,min_height: 350
,syntax_selection_allow: "css,html,js,php,xml"
,toolbar: " search, go_to_line,fullscreen, |, undo, redo, |, select_font,|, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help"
});
</script>
';
}


Please read up on http://cdolivet.net/editarea/editarea/docs/configuration.html to adjust some of the settings to your new editor interface

The last change in this file is a few lines down from the code you just pasted. Should be line 943.

Add
$javascript_source.
to the begining of the following line
"<div id=\"ctrl_$name\"><textarea name=\"$name\" id=\"{$vbulletin->textarea_id}\"" . iif($textareaclass, " class=\"$textareaclass\"") . " rows=\"$rows\" cols=\"$cols\" wrap=\"virtual\" dir=\"$direction\" tabindex=\"1\"" . iif($vbulletin->debug, " title=\"name=&quot;$name&quot;\"") . ">" . iif($htmlise, htmlspecialchars_uni($value), $value) . "</textarea>$resizer</div>",

It should look like

$javascript_source . "<div id=\"ctrl_$name\"> ...

Save and close this file!

Right now, the template editor usable and with a full screen option built into it, you shouldnt need a reason to use the Large Edit Box option. However, those changes are also quite easy to do so i will add those.

Open up the file admincp/textarea.php

On line 48,
opener.document.getElementsByName('<?php echo $vbulletin->GPC['name']; ?>')[0].value = textarea.value;
Change too
opener.document.getElementsByName('<?php echo $vbulletin->GPC['name']; ?>')[0].value = editAreaLoader.getValue("popuptextarea");

Before the closing </head> tag, add
<script language="Javascript" type="text/javascript" src="/clientscript/edit_area/edit_area_full.js"></script>
*Read http://cdolivet.net/editarea/editarea/docs/include.html for advanced options.

Replace the existing <body> tag (the entire line) with the following

<body onload="self.focus(); editAreaLoader.setValue('popuptextarea', opener.editAreaLoader.getValue('<?php echo $vbulletin->GPC['name']; ?>'));" style="margin:0px">
<script language="Javascript" type="text/javascript">
// initialisation
editAreaLoader.init({
id: "popuptextarea"
,language: "en"
,syntax: "html"
,start_highlight: true
,font_size: "8"
,font_family: "verdana, monospace"
,allow_resize: "both"
,allow_toggle: true
,replace_tab_by_spaces: 4
,syntax_selection_allow: "css,html,js,php,xml"
,toolbar: " search, go_to_line, fullscreen, |, undo, redo, |, select_font,|, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help"
});
</script>


And you're done.


Some screenshots of the result..

**Note:
For whatever reason, you cannot save text from the Large Edit Box into the main window IF you have the Edit Area editor enabled! you MUST uncheck the Toggle Editor checkbox before clicking the Large Edit Box button. If you fail to do that, you may or may not save your changes and you may loose the textarea data all together.

For whatever reasons, while
editAreaLoader.setValue('popuptextarea',
opener.editAreaLoader.getValue('<?php echo $vbulletin->GPC['name']; ?>'))
works, the reverse
opener.editAreaLoader.setValue('<?php echo $vbulletin->GPC['name']; ?>',
editAreaLoader.getValue('popuptextarea'));

does not, if anyone knows the secret to getting this to work, please post here!

---------------------------------------
**Addition
In the adminfunctions.php file, the line that we added that says
,syntax: "html"
change to
,syntax: "'.$syntax_type.'"

Before the line that reads
if (!$doeditbutton OR strpos($name,'[') !== false)

add


switch ($name) {
case "installcode":
$syntax_type = "php";
break;
case "uninstallcode":
$syntax_type = "php";
break;
case "phpcode":
$syntax_type = "php";
break;
case "template":
$syntax_type = "html";
break;
default:
$syntax_type = "html";
}


Anything in the template editor will default to HTML syntax, anything in the plugin section will default to PHP syntax and anywhere else, HTML syntax.

you can also add other lines here that could disable the javascript editor from showing, one example is adding

case "searchstring":
$doeditbutton = false;
break;

before the default: line and this would disable the EditArea box. An alternative to searching and replacing text in many of the files.

you can also prevent the Large Area Button from being displayed by adding
$openwindowbutton = '<div style="width: 150px">&nbsp;</div>';

in whatever case statements you would like (i have it in the install/uninstall, phpcode and template editors along with the default selection).

soulface
19 Dec 2007, 17:00
Just gr8!

/me installed

Elmer
19 Dec 2007, 17:50
Thnks! installed.

ChurchMedia
19 Dec 2007, 17:50
This is WAY cool! It's going to save me a lot of cutting and pasting. Thanks for sharing this. Great work!

:)

Magnumutz
19 Dec 2007, 18:09
Dude, this is really awesome. Does it support a replace function of a text editor? :D

sweede
19 Dec 2007, 18:12
Click the binacular icon, if you're using IE though that stupid "scripted window" warning pops up and either refreshes your page or blows the world up or something like that. i hate that popup warning.

see attached

Magnumutz
19 Dec 2007, 19:46
It's awesome. Good job dude.
I'll nominate this for MOTM.

sweede
19 Dec 2007, 22:06
Ive noticed that this box appears in places that you may not want it to, such as the Search Templates area.

to disable the box from appearing (Which btw, also disables the Large Edit Box button), you just need to add a few more of the options to the print_textarea_row() function call in the appropriate area.


------------ See the **Addition section to the modifications post

Ba$im
20 Dec 2007, 10:12
thanx.

sweede
21 Dec 2007, 06:54
There are no changes to the original files between vb 3.7.0 beta 2 and vb 3.7.0 beta 3. if you update to the latest beta, be sure not to overwrite the two files you have edited.

Triky
21 Dec 2007, 11:08
Is there a search function?

Snake
21 Dec 2007, 15:26
Nice release!

sweede
21 Dec 2007, 20:07
Is there a search function?

See my 3rd post.

hocphp
26 Dec 2007, 16:41
i will install . thank

Wayne Luke
28 Dec 2007, 18:51
Click the binacular icon, if you're using IE though that stupid "scripted window" warning pops up and either refreshes your page or blows the world up or something like that. i hate that popup warning.


It can be turned off in the options. I do not get prompts for this. I can't remember which option does it though.

gothicuser
29 Dec 2007, 15:51
This walks on water, great and thanks.

One (major) problem for me is that it only fully works in M$ IE thingy :(
In FF it just displays the normal small edit box, and clicking on the 'Large Edit' opens the window and displays "False" (and nothing else) at the top of the window.

In Safari I get the full editor in the small window but again get the "False" in the large edit box.

p.s. I use FF on Linux and Safari on my Mac (where I do all my work)

sweede
29 Dec 2007, 16:08
This walks on water, great and thanks.

One (major) problem for me is that it only fully works in M$ IE thingy :(
In FF it just displays the normal small edit box, and clicking on the 'Large Edit' opens the window and displays "False" (and nothing else) at the top of the window.

In Safari I get the full editor in the small window but again get the "False" in the large edit box.

p.s. I use FF on Linux and Safari on my Mac (where I do all my work)

Ya, the interaction between the normal in window (or parent) text area and when you click on the large edit box is a mess. It doesnt seem to want to communicate between the parent window (opener) and the new window both directions, I can only get it to work one way on IE.

I gave up on using the large edit box all together and used the fullscreen option in the normal parent window.

gothicuser
29 Dec 2007, 16:55
http://www.cornishserver.com/09.gif Oops. found that the Scriptblocker addon in FF was on steroids and over enthusiastically thought the editor was not nice. All working nicely (bar the Large Edit) But yes, full page will suffice :D

KURTZ
29 Dec 2007, 18:25
i think that this isn't ad add-on but a templates edit ... :)

sweede
29 Dec 2007, 18:34
i think that this isn't ad add-on but a templates edit ... :)

It's a code modification, no templates are edited.

wolfe
09 Jan 2008, 18:45
one word FANTASTIC :P

Mutt
06 Apr 2009, 02:49
just wanted to say thanks. just installed this on 3.82 with no issues. (partial instalation)

I only installed it on textarea.php because I don't think I'll always need it. sometimes I'm just doing a quick edit and don't see the point in having all this. BUT if I want the full editor, I can click the "Large Edit Box" and get it. that gives me this editor on the template editor & the plugin editor while only having to edit 1 file.

I just checked and there's a 'Large Edit Box' button on the email users page too which opens this. not sure I need it there but here, it's pretty cool.

Ducks
17 May 2009, 13:23
Adding the AJAX save button would be very nice

theksmith
24 Jul 2009, 14:52
this is the greatest thing ever created! ever!

installed on vBulletin 3.8.3 using the latest release of the "Edit Area" component, which was 0.8.1.1, and no problems so far

the original link given is no longer working, the component can now be found here: http://www.cdolivet.com/index.php?page=editArea or here: http://sourceforge.net/projects/editarea/files/

nerbert
24 Sep 2012, 06:14
I got all this working for vB4 and I'm sure it will still work for vB3. I got the editArea editor working in the large edit window and it returns the text to the main page. The large editor window is now larger too. See attached image.

After you upload editArea to forum/clientscript follow these steps:

Make a copy of forum/admincp/textarea.php, renaming it textarea_original.php

Now upload my textarea.php to forum/admincp.

Make a copy of my file, renaming it textarea_ce.php to save it next time you upgrade.


Now you have the usual text editor in the aminCP page and a code editor in the large edit window. Test it out to be sure everything works. If you want editArea in the main page follow these additional steps:

Make a copy of forum/includes/adminfunctions.php, renaming it adminfunctions_original.php.

Open the new version of textarea.php and copy the new function at the bottom of the file.

Open forum/includes/adminfunctions.php and find function print_textarea_row(). In vB4.1.12 it's on line 999 but before that in earlier versions. Rename it print_textarea_row_old(). Now just above it paste in the new version and Save.

Now copy forum/includes/adminfunctions.php, renaming it adminfunctions_new.php to save it for next time you upgrade.


You're done, no further editing required.

nerbert
24 Sep 2012, 16:12
OOPS! There's a glitch with this file. This works fine for templates and plug-ins but for pages with multiple textarea inputs it converts only the last one to the code editor (products, custom profile fields, etc).

I'm working on a solution and will post when I get a fix.

nerbert
24 Sep 2012, 17:04
File fixed. If you have already uploaded the file you need to upload the new version and edit the corrected function into adminfunctions.php.

Sorry for the bug.