Gå til innhold

js: Legge til noe før markert text i en <textarea>


Anbefalte innlegg

Hei.

 

Dette blir det første jeg trenger javascript til (og da bruker), så vær snill med meg :)

 

Greia er at jeg har en <textarea> med masse tekst inni. Det jeg vil er at man kan markere en bit av den texten som er inne i <textarea>'en, og legge til noe før og etter den.

 

altså om jeg markerer texten "asdfasdf" og trykker en link/knapp så blir den markerte teksten "<h2>asdfasdf</h2>"

 

Er dette mulig?

Noen som klarer å google frem noe brukbart?

Eventuelt kunne tenke seg å lage noe hvis du orker?

Lenke til kommentar
Videoannonse
Annonse

Dæven, 1700 poster, og har ikke sett den funksjonen før nå.. :blush:

 

Skal vi se, jeg fant denne greia i kildekoden:

<input type="button" accesskey="b" value=" B " onclick="simpletag('B')" class="codebuttons" name="B" style="font-weight: bold;" onmouseover="hstat('bold')" />
		<input type="button" accesskey="i" value=" I " onclick="simpletag('I')" class="codebuttons" name="I" style="font-style: italic;" onmouseover="hstat('italic')" />
		<input type="button" accesskey="u" value=" U " onclick="simpletag('U')" class="codebuttons" name="U" style="text-decoration: underline;" onmouseover="hstat('under')" />

 

Desverre så finner jeg ingen ting når jeg søker etter simpletag. Finner heller ikke noe i "https://www.diskusjon.no/jscripts/ipb_global.js" på samme søk. Er det noen flere javascript filer som blir brukt, som jeg ikke finner?

 

Noen som kan sparke meg bortover i riktig rettning?

Lenke til kommentar

Ta en titt på ipb_bbcode.js...

 

//--------------------------------------------
// Set up our simple tag open values
//--------------------------------------------

var B_open = 0;
var I_open = 0;
var U_open = 0;
var QUOTE_open = 0;
var CODE_open = 0;
var SQL_open = 0;
var HTML_open = 0;

var bbtags   = new Array();

var fombj    = document.REPLIER;

//==========================================
// prep and set up
//==========================================

prep_mode();

function prep_mode()
{
cvalue = my_getcookie( "bbmode" );

if (cvalue == 'ezmode')
{
 fombj.bbmode[0].checked = true;
}
else
{
 fombj.bbmode[1].checked = true;
}
}

//==========================================
// Set BBCode mode
//==========================================

function setmode(mVal)
{
my_setcookie( 'bbmode', mVal, 1 );
}


function get_easy_mode_state()
{
//--------------------------------------------
// Returns true if we've chosen easy mode
//--------------------------------------------

if ( fombj.bbmode[0].checked )
{
 return true;
}
else
{
 return false;
}
}

//==========================================
// Set the help bar status
//==========================================

function hstat(msg)
{
fombj.helpbox.value = eval( "help_" + msg );
}

//==========================================
// Set the number of tags open box
//==========================================

function cstat()
{
var c = stacksize(bbtags);

if ( (c < 1) || (c == null) ) {
 c = 0;
}

if ( ! bbtags[0] ) {
 c = 0;
}

fombj.tagcount.value = c;
}


//==========================================
// Close all tags
//==========================================

function closeall()
{
if (bbtags[0])
{
 while (bbtags[0])
 {
 	tagRemove = popstack(bbtags)
 	fombj.Post.value += "[/" + tagRemove + "]";
 	
 	//--------------------------------------------
 	// Change the button status
 	// Ensure we're not looking for FONT, SIZE or COLOR as these
 	// buttons don't exist, they are select lists instead.
 	//--------------------------------------------
 	
 	if ( (tagRemove != 'FONT') && (tagRemove != 'SIZE') && (tagRemove != 'COLOR') )
 	{
   eval("fombj." + tagRemove + ".value = ' " + tagRemove + " '");
   eval(tagRemove + "_open = 0");
 	}
 }
}

//--------------------------------------------
// Ensure we got them all
//--------------------------------------------

fombj.tagcount.value = 0;
bbtags = new Array();
fombj.Post.focus();
}

//==========================================
// EMOTICONS
//==========================================

function emoticon(theSmilie)
{
doInsert(" " + theSmilie + " ", "", false);
}

//==========================================
// ADD CODE
//==========================================

function add_code(NewCode)
{
   fombj.Post.value += NewCode;
   fombj.Post.focus();
}

//==========================================
// ALTER FONT
//==========================================

function alterfont(theval, thetag)
{
   if (theval == 0)
   	return;

if(doInsert("[" + thetag + "=" + theval + "]", "[/" + thetag + "]", true))
 pushstack(bbtags, thetag);

   fombj.ffont.selectedIndex  = 0;
   fombj.fsize.selectedIndex  = 0;
   fombj.fcolor.selectedIndex = 0;
   
   cstat();

}


//==========================================
// SIMPLE TAGS (such as B, I U, etc)
//==========================================

function simpletag(thetag)
{
var tagOpen = eval(thetag + "_open");

if ( get_easy_mode_state() )
{
 inserttext = prompt(prompt_start + "\n[" + thetag + "]xxx[/" + thetag + "]");
 if ( (inserttext != null) && (inserttext != "") )
 {
 	doInsert("[" + thetag + "]" + inserttext + "[/" + thetag + "] ", "", false);
 }
}
else
{
 if (tagOpen == 0)
 {
 	if(doInsert("[" + thetag + "]", "[/" + thetag + "]", true))
 	{
   eval(thetag + "_open = 1");
   
   //--------------------------------------------
   // Change the button status
   //--------------------------------------------
   
   eval("fombj." + thetag + ".value += '*'");
 
   pushstack(bbtags, thetag);
   cstat();
   hstat('click_close');
 	}
 }
 else
 {
 	//--------------------------------------------
 	// Find the last occurance of the opened tag
 	//--------------------------------------------
 	lastindex = 0;
 	
 	for (i = 0; i < bbtags.length; i++ )
 	{
   if ( bbtags[i] == thetag )
   {
   	lastindex = i;
   }
 	}
 	
 	//--------------------------------------------
 	// Close all tags opened up to that tag was opened
 	//--------------------------------------------
 	
 	while (bbtags[lastindex])
 	{
   tagRemove = popstack(bbtags);
   doInsert("[/" + tagRemove + "]", "", false)
   
   //--------------------------------------------
   // Change the button status
   //--------------------------------------------
   
   if ( (tagRemove != 'FONT') && (tagRemove != 'SIZE') && (tagRemove != 'COLOR') )
   {
   	eval("fombj." + tagRemove + ".value = ' " + tagRemove + " '");
   	eval(tagRemove + "_open = 0");
   }
 	}
 	
 	cstat();
 }
}
}

//==========================================
// List tag
//==========================================

function tag_list()
{
var listvalue = "init";
var thelist = "";

while ( (listvalue != "") && (listvalue != null) )
{
 listvalue = prompt(list_prompt, "");
 if ( (listvalue != "") && (listvalue != null) )
 {
 	thelist = thelist+"[*]"+listvalue+"\n";
 }
}

if ( thelist != "" )
{
 doInsert( "[LIST]\n" + thelist + "[/LIST]\n", "", false);
}
}

//==========================================
// URL tag
//==========================================

function tag_url()
{
   var FoundErrors = '';
   var enterURL   = prompt(text_enter_url, "http://");
   var enterTITLE = prompt(text_enter_url_name, "My Webpage");

   if (!enterURL) {
       FoundErrors += " " + error_no_url;
   }
   if (!enterTITLE) {
       FoundErrors += " " + error_no_title;
   }

   if (FoundErrors) {
       alert("Error!"+FoundErrors);
       return;
   }

doInsert("[URL="+enterURL+"]"+enterTITLE+"[/URL]", "", false);
}

//==========================================
// Insert attachment tag
//==========================================

function insert_attach_to_textarea(aid)
{
doInsert( "[attachmentid="+aid+"]" );
}

//==========================================
// Image tag
//==========================================

function tag_image()
{
   var FoundErrors = '';
   var enterURL   = prompt(text_enter_image, "http://");

   if (!enterURL) {
       FoundErrors += " " + error_no_url;
   }

   if (FoundErrors) {
       alert("Error!"+FoundErrors);
       return;
   }

doInsert("[IMG="+enterURL+"]", "", false);
}

function tag_email()
{
   var emailAddress = prompt(text_enter_email, "");

   if (!emailAddress) { 
 alert(error_no_email); 
 return; 
}

doInsert("[EMAIL]"+emailAddress+"[/EMAIL]", "", false);
}

//--------------------------------------------
// GENERAL INSERT FUNCTION
//--------------------------------------------
// ibTag: opening tag
// ibClsTag: closing tag, used if we have selected text
// isSingle: true if we do not close the tag right now
// return value: true if the tag needs to be closed later

//

function doInsert(ibTag, ibClsTag, isSingle)
{
var isClose = false;
var obj_ta = fombj.Post;

//----------------------------------------
// It's IE!
//----------------------------------------
if ( (ua_vers >= 4) && is_ie && is_win)
{
 if (obj_ta.isTextEdit)
 {
 	obj_ta.focus();
 	var sel = document.selection;
 	var rng = sel.createRange();
 	rng.colapse;
 	if((sel.type == "Text" || sel.type == "None") && rng != null)
 	{
   if(ibClsTag != "" && rng.text.length > 0)
   	ibTag += rng.text + ibClsTag;
   else if(isSingle)
   	isClose = true;

   rng.text = ibTag;
 	}
 }
 else
 {
 	if(isSingle)
 	{
   isClose = true;
 	}
 	
 	obj_ta.value += ibTag;
 }
}
//----------------------------------------
// It's MOZZY!
//----------------------------------------

else if ( obj_ta.selectionEnd )
{ 
 var ss = obj_ta.selectionStart;
 var st = obj_ta.scrollTop;
 var es = obj_ta.selectionEnd;
 
 if (es <= 2)
 {
 	es = obj_ta.textLength;
 }
 
 var start  = (obj_ta.value).substring(0, ss);
 var middle = (obj_ta.value).substring(ss, es);
 var end    = (obj_ta.value).substring(es, obj_ta.textLength);
 
 //-----------------------------------
 // text range?
 //-----------------------------------
 
 if (obj_ta.selectionEnd - obj_ta.selectionStart > 0)
 {
 	middle = ibTag + middle + ibClsTag;
 }
 else
 {
 	middle = ibTag + middle;
 	
 	if (isSingle)
 	{
   isClose = true;
 	}
 }
 
 obj_ta.value = start + middle + end;
 
 var cpos = ss + (middle.length);
 
 obj_ta.selectionStart = cpos;
 obj_ta.selectionEnd   = cpos;[CODE]
 obj_ta.scrollTop      = st;


}
//----------------------------------------
// It's CRAPPY!
//----------------------------------------
else
{
 if (isSingle)
 {
 	isClose = true;
 }
 
 obj_ta.value += ibTag;
}

obj_ta.focus();

return isClose;
}	

Lenke til kommentar

Har lest igjennom masse av dette nå, og det er et par ting jeg lurer litt på..

 

Under "prep and set up", så er det noen variabler(?) som inneholder ting som my_getcookie( "bbmode" ) o.l. Trenger jeg de for at ting skal fungere videre utover i skriptet?

 

//==========================================
// SIMPLE TAGS (such as B, I U, etc)
//==========================================

function simpletag(thetag)
{
var tagOpen = eval(thetag + "_open");

if ( get_easy_mode_state() )
{
inserttext = prompt(prompt_start + "\n[" + thetag + "]xxx[/" + thetag + "]");
if ( (inserttext != null) && (inserttext != "") )
{
 doInsert("[" + thetag + "]" + inserttext + "[/" + thetag + "] ", "", false);
}
}
else
{
if (tagOpen == 0)
{
 if(doInsert("[" + thetag + "]", "[/" + thetag + "]", true))
 {
  eval(thetag + "_open = 1");
  
  //--------------------------------------------
  // Change the button status
  //--------------------------------------------
  
  eval("fombj." + thetag + ".value += '*'");

  pushstack(bbtags, thetag);
  cstat();
  hstat('click_close');
 }
}
else
{
 //--------------------------------------------
 // Find the last occurance of the opened tag
 //--------------------------------------------
 lastindex = 0;

 for (i = 0; i < bbtags.length; i++ )
 {
  if ( bbtags[i] == thetag )
  {
   lastindex = i;
  }
 }

 //--------------------------------------------
 // Close all tags opened up to that tag was opened
 //--------------------------------------------

 while (bbtags[lastindex])
 {
  tagRemove = popstack(bbtags);
  doInsert("[/" + tagRemove + "]", "", false)
  
  //--------------------------------------------
  // Change the button status
  //--------------------------------------------
  
  if ( (tagRemove != 'FONT') && (tagRemove != 'SIZE') && (tagRemove != 'COLOR') )
  {
   eval("fombj." + tagRemove + ".value = ' " + tagRemove + " '");
   eval(tagRemove + "_open = 0");
  }
 }

 cstat();
}
}
}

 

Trenger jeg egentlig noe mer av "ipb_bbcode.js" da?

 

Jeg må virkelig si at jeg setter pris på hjelpen deres!

Lenke til kommentar
  • 2 uker senere...

Hva er vitsen med all den dritten der når du kan bruken denne her som jeg har mekka:

 

	
<?PHP

function bbcode($string) {
 $patterns[0] = '/\[b\]/';
 $patterns[1] = '/\[\/b\]/';
 $patterns[2] = '/\[u\]/';
 $patterns[3] = '/\[\/u\]/';
 $patterns[4] = '/\[i\]/';
 $patterns[5] = '/\[\/i\]/';
 $replacements[5] = '</i>';
 $replacements[4] = '<i>';
 $replacements[3] = '</u>';
 $replacements[2] = '<u>';
 $replacements[1] = '</b>';
 $replacements[0] = '<b>';
 
 ksort($patterns);
 ksort($replacements);

 $result = preg_replace("/\[url\]http\:\/\/(.*)\[\/url\]/i","<a href=\"http://$1\" target=\"_blank\">$1</a>", $string);
 $result = preg_replace("/\[url\](.*)\[\/url\]/i","<a href=\"http://$1\" target=\"_blank\">$1</a>",$result);
 $result = preg_replace($patterns,$replacements,$result);
 return $result;
}

?>

Endret av Masticore-
Lenke til kommentar

Det der er serverside, jeg trenger clientside. Det jeg leter etter er et script som plasserer text før og etter markert text i en <textarea> når man trykker på en knapp. Det er noe som skjer i "realtime" og ikke via at man blir videresendt til en annen side

Lenke til kommentar
  • 6 måneder senere...
  • 4 uker senere...

1. Du kan bruke denne versjonen jeg laget ved å kombinere de gode teknikkene fra flere forskjellige BBCODE-script. Hvis du har valgt en tekst omringes den av tag's, har du ikke valg en tekst, ber den deg skrive inn noe i et javascript:prompt og setter det inn på slutten av teksten.

:D

http://www.anderseinar.net/filer/bbcode.js

 

Jeg tar gjerne imot kommentarer på dette scriptet pr PM.

Et eksempel på hvordan det brukes er i kommentaren på slutten av scriptet.

 

2. Du kan bruke dette scriptet som fikk meg til å lage mitt eget

:)

http://www.thecodebehind.com/code/javascri...old-italic.aspx

 

3. Du kan bruke funksjonen doInsert(ibTag, ibClsTag, isSingle) fra ipb_bbcode.js

:(

og

//=====

// Set up

//=====

med tilhørende kode fra ipb_global.js.

 

Edit: Etter fjerde redigering tror jeg jeg har fått sagt det jeg vil med denne posten. :innocent:

Endret av Kagee
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...