Extension:EditPageMultipleInputTextAreas

From MediaWiki.org
Jump to: navigation, search
MediaWiki extensions manualManual:Extensions
Crystal Clear action run.svg
Editpage Multiple Input Textareas

Release status:Extension status beta

EditInputBoxes.jpg
ImplementationTemplate:Extension#type Page action
DescriptionTemplate:Extension#description Multiple inputboxes to be combined as one text
Author(s)Template:Extension#username Boudewijn Vahrmeijer
Latest versionTemplate:Extension#version 0.5 (2007-11-04)
MediaWikiTemplate:Extension#mediawiki >1.8.3, not yet tested on lower versions!
LicenseTemplate:Extension#license No license specified
Download see below
Readme
ExampleTemplate:Extension#example Testdemo
Hooks usedTemplate:Extension#hook
EditPage::showEditForm:fieldsManual:Hooks/EditPage::showEditForm:fields
EditPage::attemptSaveManual:Hooks/EditPage::attemptSave
EditPage::showEditForm:initialManual:Hooks/EditPage::showEditForm:initial
OutputPageBeforeHTMLManual:Hooks/OutputPageBeforeHTML

Translate the EditPageMultipleInputTextAreas extension if it is available at translatewiki.net

Check usage and version matrix.

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 do[edit]

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 features[edit]

  • 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!

Code[edit]

<?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;
}