Extension:EditPageMultipleInputTextAreas
This extension stores its source code on a wiki page. Please be aware that this code may be unreviewed or maliciously altered. They may contain security holes, outdated interfaces that are no longer compatible etc. Note: No localisation updates are provided for this extension by translatewiki.net . |
This extension is currently not actively maintained! Although it may still work, any bug reports or feature requests will more than likely be ignored. |
Editpage Multiple Input Textareas Release status: unmaintained |
|
---|---|
![]() |
|
Implementation | Page action |
Description | Multiple inputboxes to be combined as one text |
Author(s) | Boudewijn Vahrmeijer |
Latest version | 0.5 (2007-11-04) |
MediaWiki | 1.8.3+, not yet tested on lower versions! |
License | No license specified |
Download | see below Readme |
Example | Testdemo |
EditPageMultipleInputTextAreas is a new extension to get multiple input fields within the Editpage
This extension is in 'progress', started from 19-9-2007.
See for support: http://www.leerwiki.nl/EditPageInputBox_Mediawiki
What can it doEdit
The Editforms extension is developed to enable different types of input for a Wiki. In this way a Wiki could be build up much faster, but also with more quality and clearer structure.
Features:
- Choice between traditional or custom structure
- Unlimited inputfields
- Automatic enlargement textarea when typing
Desired featuresEdit
- Custom structure per page
Progress report / current status:Edit
Latest version 04-11-2007
- 0.5 WORKING CODE!!
- fixed errors with button display
- fixed initial presentation
- fixed random errors with spaces within header names
- fixed errors with bullets (added "\n")
Previous working versions
- 0.4 Issues fixed with importing page without structure
- 0.3 Choice added to use template or not 21-09-2007
- 0.2 Including textarea expanding javascript 20-09-2007
- 0.1 Improved customization 19-09-2007
- 0.0.1 Combining and separating textareas working fine
Who's using it?Edit
Please add your working-wiki here!
CodeEdit
<?php
if ( ! defined( 'MEDIAWIKI' ) )
die();
//---------- Note Author--- 11-2007-------------------
// The Editforms extension is developed to enable
// different types of input for a Wiki. In this way
// a Wiki could be build up much faster, but also
// with more quality and clearer structure.
//
// See http://www.leerwiki.nl for either updates
// or other extensions such as the Ajax Rating Script-,
// Image shadow- or EditpageMultipleInputboxes extension.
// good luck with your Wiki!
// B.Vahrmeijer
//----------------------------------------------------
$wgExtensionCredits['other'][] = array(
'name' => 'EditTextAreas',
'author' => 'Boudewijn Vahrmeijer',
'url' => 'http://www.mediawiki.org/wiki/Extension:EditPageMultipleInputTextAreas',
'version' => '0.5',
'description' => 'Extension to fasten article making and improve structure',
);
//####### Choose parameters ##############
$BoxNames=array('Introduction', 'Core', 'Conclusion'); //choose titles, minimum is ONE
$Separator='.//.'; //Choose dummy separator for combining text input
//####### Used Hooks ######################
$wgHooks['EditPage::showEditForm:fields'][] = 'TextareaDisplay';
$wgHooks['EditPage::attemptSave'][] = 'CombineBeforeSave';
$wgHooks['EditPage::showEditForm:initial'][] = 'OptionSetting';
$wgHooks['OutputPageBeforeHTML'][] = 'LastMinuteStyleChange';
//####### Formula preparation ##############
$TotalTB=count($BoxNames);
########## Hook 1 #################
function TextareaDisplay(&$q, &$out) {
global $TotalTB, $BoxNames, $Separator, $wgTitle;
$title=$wgTitle;
######### HTML 1 #######
$out->addHTML(<<<END
<script type="text/javascript">
function CUSTOM()
{
document.getElementById("div1").style.display = 'block';
document.getElementById("yes").style.display = 'none';
document.getElementById("no").style.display = 'block';
document.getElementById("wpStructure").value = 'CUSTOM';
}
function TRADITIONAL()
{
document.getElementById("div1").style.display = 'none';
document.getElementById("yes").style.display = 'block';
document.getElementById("no").style.display = 'none';
document.getElementById("wpStructure").value = 'TRADITIONAL';
}
</script>
<script type="text/javascript">
function resizeTextarea(t) {
n = navigator;
nua = n.userAgent.toLowerCase();
a = t.value.split('\\n');
b=1;
for (x=0;x < a.length; x++) {
if (a[x].length >= t.cols) b+= Math.floor(a[x].length/t.cols);
}
b+= a.length;
if (b > t.rows && nua.indexOf('opera') == -1) t.rows = b;
}
</script>
<style> textarea { width: 550px; padding: .1em; }</style>
END
);
############# CUT TEXT AND PUT IN BOXES #############
if(TotalTB>1) return true;
$AllText=$q->textbox1;
$ArrayTextTemp=explode($Separator,$AllText);
if(count($ArrayTextTemp)>1){
$out->addHTML("
<div id='yes' style='display:none'><input type='button' value='CUSTOM STRUCTURE' OnClick='CUSTOM()'/></div>
<div id='no' style='display:block'><input type='button' value='TRADITIONAL STRUCTURE' OnClick='TRADITIONAL()'/></div>
<div id='div1' style='display:block'>
<input value='CUSTOM' type='hidden' name='wpStructure' id='wpStructure'/>");
} else {
$out->addHTML("
<div id='yes' style='display:block'><input type='button' value='CUSTOM STRUCTURE' OnClick='CUSTOM()'/></div>
<div id='no' style='display:none'><input type='button' value='TRADITIONAL STRUCTURE' OnClick='TRADITIONAL()'/></div>
<div id='div1' style='display:none'>
<input value='TRADITIONAL' type='hidden' name='wpStructure' id='wpStructure'/>");
}
for($i=0;$i<$TotalTB-1;$i++){
$out->addHTML($BoxNames[$i]."<br><textarea tabindex='1' onKeyUp='resizeTextarea(this)' accesskey=',' // display new textareas
name='Box".$i."' id='Box".$i."' rows='4' cols='40'>".$ArrayTextTemp[$i+1]."</textarea><br>");
}
$out->addHTML( $BoxNames[$TotalTB-1]."</div>");
if(count($ArrayTextTemp)>1){
$q->textbox1= $ArrayTextTemp[$TotalTB];
}
return true;
}
########## Hook 2 #################
function CombineBeforeSave(&$q) {
global $wgRequest, $TotalTB, $BoxNames, $Separator;
$request=$wgRequest;
$q->Structure = $request->getVal( 'wpStructure' );
if($q->Structure=='CUSTOM'){
for($i=0;$i<$TotalTB-1;$i++){
$temp='Box'.$i;
$allextraTB.= $Separator."\n".$q->safeUnicodeInput( $request, $temp )."\n";
}
$q->textbox1 = $allextraTB.$Separator.$q->textbox1;
}
else{
$q->textbox1 = $q->textbox1;
}
return true;
}
########## Hook 3 #################
function OptionSetting(&$q) {
global $wgUser;
$wgUser->setOption('rows',10);
$wgUser->setOption('showtoolbar',0);
return true;
}
########## Hook 4 #################
function LastMinuteStyleChange(&$q,&$b) {
global $Separator, $BoxNames, $wgTitle;
$title=$wgTitle;
if ($_GET['action'] != "") return true; //not the edit areas
$k=explode($Separator,$b);
if(count($k)<2) return true; //if no separator existing, no structure wanted
$b=''; //clear dummy top ie. 11.//.22
for($i=1;$i<count($k);$i++){
$b.='<h2>'.$BoxNames[$i-1].'</h2>'.$k[$i].'';
}
return true;
}