Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Форма с расширенными возможностями (https://forum.antichat.xyz/showthread.php?t=83218)

0x22b 01.09.2008 14:14

Форма с расширенными возможностями
 
Все видели форму, когда постят на форум.. вот мне нужна такая же, только всего с двумя кнопками: сделать выделенный текст жирным, вставить ссылку. Если есть что предложить, или уже есть готовый вариант, пишите цену..

BlackSun 01.09.2008 14:21

<form method="POST" id="mforum">
<textarea name="msg" ..
Код:

script>
function inc_tag(st_t, en_t)
{
        obj = document.forms.mforum.msg;
        obj2 = document.forms.mforum;
        if ((document.selection))
        {
                obj.focus();
                obj2.document.selection.createRange().text = st_t+obj2.document.selection.createRange().text+en_t;
        } else
        {
                obj.focus();
                obj.value += st_t+en_t;
        }
}
</script>

inc_tag(st_t, en_t) - st_t - начальный тег ([*B] например), en_t - закрывающий.
Пробелы незабудь вырезать, которые ачат вставил.

0x22b 01.09.2008 14:47

Ок, спс. Сча испытаю..

0x22b 01.09.2008 15:02

Код:

<html>
</head>
<script>
        function inc_tag(st_t, en_t)
        {
                obj=document.forms.mforum.msg;
                obj2=document.forms.mforum;
                if ((document.selection))
                {
                        obj.focus();
                        obj2.document.selection.createRange().text=st_t+obj2.document.selection.createRange().text+en_t;
                }
                else
                {
                        obj.focus();
                        obj.value+=st_t+en_t;
                }
        }
</script>
</head>
<body>
<form method="POST" id="mforum">
<textarea name="msg" WRAP="virtual" COLS="40" ROWS="3">
</TEXTAREA><br>
<INPUT TYPE="button" VALUE="B" onClick="inc_tag([тег], [/тег])">
</form>
</body>
</html>

Вот тут накидал, тестовый вариант.. я с яваскриптом на вы.. только он как то работать не особо желает.. Пробелы убрал..

Naydav 01.09.2008 15:23

Цитата:

onClick="inc_tag([тег], [/тег])"
попробуй так, хота логика скрипта странная
onClick="inc_tag('<b>', '</b>')", (вместо "<", ">" нужно поставить "[", "]" ) так как в текстареа будет результат,
<b>Выделенный текст</b>, а не сразу выделенный текст болдом

поставь любой визивик, например TinyMCE, и укажи в настройках, какие кнопки отображать, делов 5 минут

Jer1cho 01.09.2008 15:26

Когда-то выдерал из форума phpbb его бб-коды:
PHP код:

<html>
 <
head>
    <
title>test</title>
    <
script type="text/javascript">
        var 
imageTag false;
        var 
theSelection false;
        var 
clientPC navigator.userAgent.toLowerCase();
        var 
clientVer parseInt(navigator.appVersion);
        var 
is_ie = ((clientPC.indexOf("msie") != -1) && (clientPC.indexOf("opera") == -1));
        var 
is_nav = ((clientPC.indexOf('mozilla')!=-1) && (clientPC.indexOf('spoofer')==-1)
        && (
clientPC.indexOf('compatible') == -1) && (clientPC.indexOf('opera')==-1)
        && (
clientPC.indexOf('webtv')==-1) && (clientPC.indexOf('hotjava')==-1));
        var 
is_moz 0;
        var 
is_win = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1));
        var 
is_mac = (clientPC.indexOf("mac")!=-1);
        
bbcode = new Array();
        
bbtags = new Array('[b]','[/b]','[i]','[/i]','[u]','[/u]','[s]','[/s]','[quote]','[/quote]','[code]','[/code]','[list]','[/list]','[list=]','[/list]','[url]','[/url]');
        
imageTag false;
        function 
getarraysize(thearray) {
        for (
0thearray.lengthi++) {
        if ((
thearray[i] == "undefined") || (thearray[i] == "") || (thearray[i] == null))
        return 
i;}
        return 
thearray.length;}
        function 
arraypush(thearray,value) {
        
thearraygetarraysize(thearray) ] = value;}
        function 
arraypop(thearray) {
        
thearraysize getarraysize(thearray);
        
retval thearray[thearraysize 1];
        
delete thearray[thearraysize 1];
        return 
retval;}
        function 
bbstyle(bbnumber) {
        var 
txtarea document.post.message;
        
txtarea.focus();
        
donotinsert false;
        
theSelection false;
        
bblast 0;
        if (
bbnumber == -1) {
        while (
bbcode[0]) {
        
butnumber arraypop(bbcode) - 1;
        
txtarea.value += bbtags[butnumber 1];
        
buttext = eval('document.post.addbbcode' butnumber '.value');
        eval(
'document.post.addbbcode' butnumber '.value ="' buttext.substr(0,(buttext.length 1)) + '"');}
        
imageTag false;
        
txtarea.focus();
        return;}
        if ((
clientVer >= 4) && is_ie && is_win){
        
theSelection document.selection.createRange().text;
        if (
theSelection) {
        
document.selection.createRange().text bbtags[bbnumber] + theSelection bbtags[bbnumber+1];
        
txtarea.focus();
        
theSelection '';
        return;}}
        else if (
txtarea.selectionEnd && (txtarea.selectionEnd txtarea.selectionStart 0)){
        
mozWrap(txtareabbtags[bbnumber], bbtags[bbnumber+1]);
        return;}
        for (
0bbcode.lengthi++) {
        if (
bbcode[i] == bbnumber+1) {
        
bblast i;
        
donotinsert true;}}
        if (
donotinsert) {
        while (
bbcode[bblast]) {
        
butnumber arraypop(bbcode) - 1;
        
txtarea.value += bbtags[butnumber 1];
        
buttext = eval('document.post.addbbcode' butnumber '.value');
        eval(
'document.post.addbbcode' butnumber '.value ="' buttext.substr(0,(buttext.length 1)) + '"');
        
imageTag false;}
        
txtarea.focus();
        return;
        } else {
        if (
imageTag && (bbnumber != 14)) {
        
txtarea.value += bbtags[15];
        
lastValue arraypop(bbcode) - 1;
        
document.post.addbbcode14.value "Img";
        
imageTag false;}
        
txtarea.value += bbtags[bbnumber];
        if ((
bbnumber == 14) && (imageTag == false)) imageTag 1;
        
arraypush(bbcode,bbnumber+1);
        eval(
'document.post.addbbcode'+bbnumber+'.value += "*"');
        
txtarea.focus();
        return;}
        
storeCaret(txtarea);}
        function 
mozWrap(txtareaopenclose){
        var 
selLength txtarea.textLength;
        var 
selStart txtarea.selectionStart;
        var 
selEnd txtarea.selectionEnd;
        if (
selEnd == || selEnd == 2
        
selEnd selLength;
        var 
s1 = (txtarea.value).substring(0,selStart);
        var 
s2 = (txtarea.value).substring(selStartselEnd)
        var 
s3 = (txtarea.value).substring(selEndselLength);
        
txtarea.value s1 open s2 close s3;
        return;
        }
    </
script>
 </
head>
 <
body>
    <
form action="" name="post" method="post">
        <
input type="button" value="B" onclick="bbstyle(0)"/>
        <
input type="button" value="i" onclick="bbstyle(2)"/>
        <
input type="button" value="u" onclick="bbstyle(4)"/>
        <
input type="button" value="s" onclick="bbstyle(6)"/>
        <
input type="button" value="Quote" onclick="bbstyle(8)"/>
        <
input type="button" value="Code" onclick="bbstyle(10)"/>
        <
input type="button" value="List" onclick="bbstyle(12)"/>
        <
input type="button" value="List=" onclick="bbstyle(14)"/>
        <
input type="button" value="URL" onclick="bbstyle(16)"/><br/>
        <
textarea name="message" rows="10" cols="50"></textarea>
    </
form>
 </
body>
</
html


.:EnoT:. 01.09.2008 16:06

Всё гораздо проще)) + ко всему кроссбраузерность.
Я в своих проектах его использую)
Код:

/* BB-codes */
function bbcode(open, close){
        msgfield = (document.all) ? document.all.msg : document.forms['post']['msg'];

        /* IE */
        if (document.selection && document.selection.createRange){
                msgfield.focus();
                sel = document.selection.createRange();
                sel.text = open + sel.text + close;
                msgfield.focus();
        }
        /* Mozilla */
        else if (msgfield.selectionStart || msgfield.selectionStart == '0'){
                var startPos = msgfield.selectionStart;
                var endPos = msgfield.selectionEnd;

                msgfield.value = msgfield.value.substring(0, startPos) + open + msgfield.value.substring(startPos, endPos) + close + msgfield.value.substring(endPos, msgfield.value.length);
                msgfield.selectionStart = msgfield.selectionEnd = endPos + open.length + close.length;
                msgfield.focus();
        }
        /* Main browsers */
        else{
                msgfield.value += open + close;
                msgfield.focus();
        }
}

PHP код:

<form id="post" action="" method="post">
<
button type="button" onclick="bbcode('[b]','[/b]')"><b>B</b></button>
<
button type="button" onclick="bbcode('[i]','[/i]')"><i>I</i></button>
<
textarea name="msg"></textarea>
</
form


0x22b 01.09.2008 16:17

Ооо, спасибо вам огромное!
to BlackSun спасибо за кодес!
to Naydav спс, забыл просто теги в ковычки поставить!
to Jer1cho спасиб огромное!
кстати вот скромное вознаграждение, по два в руки(только для участников предэдущих постов)..
13983333
16424444
17641111
18048888
19626666
25305555
С меня еще + :) ну прям выручили, я уж искать заколебался.. отпишитесь какие номерки забрать хотите..

ай яй, Енот, обожди сча еще два добавлю.. ))

BlackSun 01.09.2008 16:19

Мну ненадо) отдай нужнаюшимся

0x22b 01.09.2008 16:20

Значит BlackSun не нужно, всеравно спасибо!


Время: 01:52