gulli:board Logo

Anzeige

gulli:Newsbox


  Antwort
BuggerT
Mitglied
ex-Moderator
 
Registrierungsdatum: Feb 2000
Beiträge: 6.896
[phpBB] Einfügen von Smilies etc an Cursorposition

Mit Firefox gibt es bei sehr vielen Boards das Problem, dass man Smilies etc. immer nur am Ende des Beitrages einfügen kann und diese dann hochschieben muss. Das ist sehr lästig.

Hier im Gulli-Board wurde ein Script (?) so abgeändert, dass auch mit Firefox die Smilies dort erscheinen, wo der Cursor im Moment steht. Einen entsprechenden Thread habe ich im Feedback-Forum auch gefunden.

Nun habe ich einen Admin auf einem anderen Board darauf angesprochen; dort wird ein phpBB 2.0.10 verwendet. Leider haben seine bisherigen Versuche nicht zum Erfolg geführt.

Weiß jemand, was man dort ändern muss, so dass auch mittels Firefox (wohl auch Opera betroffen) die Smilies usw. an der Cursorposition eingefügt werden?


Schonmal danke!


grtz
BuggerT
Alt 05. 02. 2005, 00:28 BuggerT is offline Mit Zitat antworten #1
natbornkiller
selbsthilfe durch google
ex-Moderator
 
Benutzerbild von natbornkiller
 
Registrierungsdatum: May 2002
Beiträge: 6.389
Hier findest Du deine Lsg.
http://www.portedmods.com/kb-article-67.html

mfGr
Alt 05. 02. 2005, 01:31 natbornkiller is offline Mit Zitat antworten #2
BuggerT
Mitglied
ex-Moderator
(Threadstarter)
 
Registrierungsdatum: Feb 2000
Beiträge: 6.896
Thx, nbk. Ich hab's dem Admin geemailt. Mal sehen, ob der das hinkriegt .


grtz
BuggerT
Alt 05. 02. 2005, 01:53 BuggerT is offline Mit Zitat antworten #3
Levy
Desastreuse
 
Registrierungsdatum: Jan 2003
Beiträge: 359
Danke für den Lösungslink, selbes Fehlerchen auch bei uns noch gewesen.

*geht Usi-Techi antreiben*
Alt 05. 02. 2005, 12:53 Levy is offline Mit Zitat antworten #4
UserX
Kasuist
ex-Moderator
 
Benutzerbild von UserX
 
Registrierungsdatum: Mar 2000
Ort: Gehenna
Beiträge: 4.380
Im Firefox funktioniert es damit prima jetzt.

Im Opera ist es noch schlimmer geworden, der schmeisst jetzt nicht nur den Smilie immer noch ans Ende, sondern gleich den ganzen Postingtext nochmal in Kopie mit dazu.
Alt 06. 02. 2005, 16:45 UserX is offline Mit Zitat antworten #5
natbornkiller
selbsthilfe durch google
ex-Moderator
 
Benutzerbild von natbornkiller
 
Registrierungsdatum: May 2002
Beiträge: 6.389
Tja usi,
das Problem ist Opera scheint gar keine Möglichkeit zu bieten herauszufinden, wo der Cursor sich gerade aufhält.
Ich gebe erstmal folgenden Workaround, so das zumindest der Smilie am Ende eingefügt wird.

Code:
function emoticon(text) { text = ' ' + text + ' '; if (document.post.message.createTextRange && document.post.message.caretPos) { var caretPos = document.post.message.caretPos; caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text; document.post.message.focus(); } else if(typeof document.post.message.selectionStart != 'undefined') { posttextarea = document.post.message; selected=(posttextarea.value).substring(posttextarea.selectionStart,posttextarea.selectionEnd); str=' ' + text + ' '; posttextarea.focus(); start=posttextarea.selectionStart; end=posttextarea.textLength; endtext=posttextarea.value.substring(posttextarea.selectionEnd,end); starttext=posttextarea.value.substring(0,start); posttextarea.value=starttext + str + endtext; posttextarea.selectionStart=start; posttextarea.selectionEnd=start; return; } /* für die übrigen Browser */ else { //Opera kann cursorposition anscheinend nicht document.post.message.value+= text; document.post.message.focus(); }
Edit: ein leerzeichen entfernt, der war doppelt.
mfGr

Geändert von natbornkiller (07. 02. 2005 um 09:31 Uhr).
Alt 07. 02. 2005, 00:14 natbornkiller is offline Mit Zitat antworten #6
UserX
Kasuist
ex-Moderator
 
Benutzerbild von UserX
 
Registrierungsdatum: Mar 2000
Ort: Gehenna
Beiträge: 4.380
Prima, schon eingebaut.

Dankeschön.
Alt 07. 02. 2005, 08:30 UserX is offline Mit Zitat antworten #7
BuggerT
Mitglied
ex-Moderator
(Threadstarter)
 
Registrierungsdatum: Feb 2000
Beiträge: 6.896
Mmhh, beim aktuellen phpBB 2.0.13 kann ich die entsprechenden Stellen nicht finden. Genauer gesagt, da wurde einiges abgeändert.


Gibt es einen neuen Hack?


grtz
BuggerT
Alt 11. 03. 2005, 22:44 BuggerT is offline Mit Zitat antworten #8
natbornkiller
selbsthilfe durch google
ex-Moderator
 
Benutzerbild von natbornkiller
 
Registrierungsdatum: May 2002
Beiträge: 6.389
Die Javascipt function findet sich jetzt in der posting_smilies.tpl und da kann man den obigen Hack wuie gehabt ersetzen.
mfGr
Alt 13. 03. 2005, 17:32 natbornkiller is offline Mit Zitat antworten #9
BuggerT
Mitglied
ex-Moderator
(Threadstarter)
 
Registrierungsdatum: Feb 2000
Beiträge: 6.896
Sorry, nbk, aber bei mir unterscheidet sich das auch in der "posting_smilies.tpl".


Die sieht bei mir so aus:

PHP-Code:
<script language="javascript" type="text/javascript">
<!--
function 
emoticon(text) {
    
text ' ' text ' ';
    if (
opener.document.forms['post'].message.createTextRange && opener.document.forms['post'].message.caretPos) {
        var 
caretPos opener.document.forms['post'].message.caretPos;
        
caretPos.text caretPos.text.charAt(caretPos.text.length 1) == ' ' text ' ' text;
        
opener.document.forms['post'].message.focus();
    } else {
    
opener.document.forms['post'].message.value  += text;
    
opener.document.forms['post'].message.focus();
    }
}
//-->
</script>

<table width="100%" border="0" cellspacing="0" cellpadding="10">
    <tr>
        <td><table width="100%" border="0" cellspacing="1" cellpadding="4" class="forumline">
            <tr>
                <th class="thHead" height="25">{L_EMOTICONS}</th>
            </tr>
            <tr>
                <td><table width="100" border="0" cellspacing="0" cellpadding="5">
                    <!-- BEGIN smilies_row -->
                    <tr align="center" valign="middle"> 
                        <!-- BEGIN smilies_col -->
                        <td><a href="javascript:emoticon('{smilies_row.smilies_col.SMILEY_CODE}')"><img src="{smilies_row.smilies_col.SMILEY_IMG}" border="0" alt="{smilies_row.smilies_col.SMILEY_DESC}" title="{smilies_row.smilies_col.SMILEY_DESC}" /></a></td>
                        <!-- END smilies_col -->
                    </tr>
                    <!-- END smilies_row -->
                    <!-- BEGIN switch_smilies_extra -->
                    <tr align="center"> 
                        <td colspan="{S_SMILIES_COLSPAN}"><span  class="nav"><a href="{U_MORE_SMILIES}" onclick="open_window('{U_MORE_SMILIES}', 250, 300);return false" target="_smilies" class="nav">{L_MORE_SMILIES}</a></td>
                    </tr>
                    <!-- END switch_smilies_extra -->
                </table></td>
            </tr>
            <tr>
                <td align="center"><br /><span class="genmed"><a href="javascript:window.close();" class="genmed">{L_CLOSE_WINDOW}</a></span></td>
            </tr>
        </table></td>
    </tr>
</table> 


Wie du siehst, passt das von portedmods.com nicht richtig. Ich nehme an, ich kann das nicht einfach so ersetzen.


grtz
BuggerT
Alt 13. 03. 2005, 18:43 BuggerT is offline Mit Zitat antworten #10
natbornkiller
selbsthilfe durch google
ex-Moderator
 
Benutzerbild von natbornkiller
 
Registrierungsdatum: May 2002
Beiträge: 6.389
hm.
Ich habe mich verwirren lassen.
Also in der posting_body.tpl findet sich das Zeile 75 ff
PHP-Code:
function checkForm() {

    
formErrors false;    

    if (
document.post.message.value.length 2) {
        
formErrors "{L_EMPTY_MESSAGE}";
    }

    if (
formErrors) {
        
alert(formErrors);
        return 
false;
    } else {
        
bbstyle(-1);
        
//formObj.preview.disabled = true;
        //formObj.submit.disabled = true;
        
return true;
    }
}

function 
emoticon(text) {
    var 
txtarea document.post.message;
    
text ' ' text ' ';
    if (
txtarea.createTextRange && txtarea.caretPos) {
        var 
caretPos txtarea.caretPos;
        
caretPos.text caretPos.text.charAt(caretPos.text.length 1) == ' ' caretPos.text text ' ' caretPos.text text;
        
txtarea.focus();
    } else {
        
txtarea.value  += text;
        
txtarea.focus();
    }
}

function 
bbfontstyle(bbopenbbclose) {
    var 
txtarea document.post.message;

    if ((
clientVer >= 4) && is_ie && is_win) {
        
theSelection document.selection.createRange().text;
        if (!
theSelection) {
            
txtarea.value += bbopen bbclose;
            
txtarea.focus();
            return;
        }
        
document.selection.createRange().text bbopen theSelection bbclose;
        
txtarea.focus();
        return;
    }
    else if (
txtarea.selectionEnd && (txtarea.selectionEnd txtarea.selectionStart 0))
    {
        
mozWrap(txtareabbopenbbclose);
        return;
    }
    else
    {
        
txtarea.value += bbopen bbclose;
        
txtarea.focus();
    }
    
storeCaret(txtarea);

Und das wird ersetzt durch meine obige function emoticon nicht die von portedmods.com, warum musst Du noch mal oben nachlesen.
PHP-Code:
function checkForm() {

    
formErrors false;    

    if (
document.post.message.value.length 2) {
        
formErrors "{L_EMPTY_MESSAGE}";
    }

    if (
formErrors) {
        
alert(formErrors);
        return 
false;
    } else {
        
bbstyle(-1);
        
//formObj.preview.disabled = true;
        //formObj.submit.disabled = true;
        
return true;
    }
}
function 
emoticon(text) { 
   
text ' ' text ' '
   if (
document.post.message.createTextRange && document.post.message.caretPos) { 
      var 
caretPos document.post.message.caretPos
      
caretPos.text caretPos.text.charAt(caretPos.text.length 1) == ' ' text ' ' text
      
document.post.message.focus(); 
   } 
   else if(
typeof document.post.message.selectionStart != 'undefined')
    { 
   
posttextarea document.post.message
   
selected=(posttextarea.value).substring(posttextarea.selectionStart,posttextarea.selectionEnd); 
   
str=' ' text ' '
   
posttextarea.focus(); 
   
start=posttextarea.selectionStart
   
end=posttextarea.textLength
   
endtext=posttextarea.value.substring(posttextarea.selectionEnd,end); 
   
starttext=posttextarea.value.substring(0,start); 
   
posttextarea.value=starttext str endtext
   
posttextarea.selectionStart=start
   
posttextarea.selectionEnd=start
   return; 
   }
   
/* für die übrigen Browser */
  
else
  {
  
//Opera kann cursorposition anscheinend nicht 
      
      
document.post.message.value+= text;
      
      
document.post.message.focus();
  }
  }

function 
bbfontstyle(bbopenbbclose) {
    var 
txtarea document.post.message;

    if ((
clientVer >= 4) && is_ie && is_win) {
        
theSelection document.selection.createRange().text;
        if (!
theSelection) {
            
txtarea.value += bbopen bbclose;
            
txtarea.focus();
            return;
        }
        
document.selection.createRange().text bbopen theSelection bbclose;
        
txtarea.focus();
        return;
    }
    else if (
txtarea.selectionEnd && (txtarea.selectionEnd txtarea.selectionStart 0))
    {
        
mozWrap(txtareabbopenbbclose);
        return;
    }
    else
    {
        
txtarea.value += bbopen bbclose;
        
txtarea.focus();
    }
    
storeCaret(txtarea);

mfGr
Alt 13. 03. 2005, 20:05 natbornkiller is offline Mit Zitat antworten #11
natbornkiller
selbsthilfe durch google
ex-Moderator
 
Benutzerbild von natbornkiller
 
Registrierungsdatum: May 2002
Beiträge: 6.389
Nachtrag zur posting_smilies.tpl
Dieses Template betrifft die Funktion weitere Buttons, wenn man sich mit den Standardsmilies nicht anfreunden kann oder als zu wenig empfindet. Diese muss natürlich auch Firefox und opera kompatibel gemacht werden.

Dazu ersetzt man die vorhanden emoticon Funktion durch folgende
wie man sieht hat sich nur der Bezug geändert im Gegensatz zur oben genannten Änderung, da man ja als Objekt der Einsetzung die Textarea der posting.php manipulieren will und nicht das per Javascript geöffnete Fenster.
PHP-Code:
function emoticon(text) { 
   
text ' ' text ' '
   if (
opener.document.forms['post'].message.createTextRange && opener.document.forms['post'].message.caretPos) { 
      var 
caretPos opener.document.forms['post'].message.caretPos
      
caretPos.text caretPos.text.charAt(caretPos.text.length 1) == ' ' text ' ' text
      
opener.document.forms['post'].message.focus(); 
   } 
   else if(
typeof opener.document.forms['post'].message.selectionStart != 'undefined'
    { 
   
posttextarea opener.document.forms['post'].message
   
selected=(posttextarea.value).substring(posttextarea.selectionStart,posttextarea.selectionEnd); 
   
str=' ' text ' '
   
posttextarea.focus(); 
   
start=posttextarea.selectionStart
   
end=posttextarea.textLength
   
endtext=posttextarea.value.substring(posttextarea.selectionEnd,end); 
   
starttext=posttextarea.value.substring(0,start); 
   
posttextarea.value=starttext str endtext
   
posttextarea.selectionStart=start
   
posttextarea.selectionEnd=start
   return; 
   } 
   
/* für die übrigen Browser */ 
  
else 
  { 
  
//Opera kann cursorposition anscheinend nicht 
       
      
opener.document.forms['post'].message.value+= text
       
      
opener.document.forms['post'].post.message.focus(); 
  } 
  } 

//-->
</script> 
mfGr
Alt 13. 03. 2005, 20:19 natbornkiller is offline Mit Zitat antworten #12
Themen-Optionen Antwort


Themen-Optionen

Gehe zu



Alle Zeitangaben in UTC +1. Es ist jetzt 00:36 Uhr.
Angetrieben von vBulletin
Copyright ©2000 - 2006, Jelsoft Enterprises Ltd.
neurotypical.gullisys.net

Anmelden

Benutzername
Kennwort

Anzeige

© copyright 1998-2009 gulli.com home | regeln | sitemap | kontakt | impressum | partner | downloads | disclaimer |
Message Boards and Forums Directory