Skocz do zawartości
"Idzie nowe..." - o zmianach i nie tylko ×
Przeniesienie zakupów z IPS Marketplace / Moving bought items from IPS Marketplace ×

Dodek

Użytkownik
  • Postów

    29
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez Dodek

  1. Okey rozwiązane, dzięki za pomoc. Jeszcze raz opróżniłem tabele 'masspms', 'message_posts', 'message_topics' + 'message_topic_user_map' I tak jak mówiłeś opróżniłem w tabeli 'members' kolumny 'msg_count_new', 'msg_count_total', 'msg_count_reset', 'msg_show_notification' Kwadracik zniknął, leci dla cb plusik
  2. witam mam taki problem bo ostatnio, musiałem zrobić refresh wszystkich PW. Ktoś polecił mi żebym zrobił to przez bazę danych, więc tak zrobiłem wyczyściłem plik z wiadomościami i z tematami wiadomości. Potem zauważyłem że na starych kontach widać pusty kwadracik w skrzynce, a użytkownicy którzy dołączyli bo "czystce" tego nie mają. zdjęcie poniżej. Dodatkowo podam także że przy wysyłaniu przez konto admina wiadomości typu "zaproszenie" (do kilku użytkowników) wyświetla się błąd bazy danych, lecz po sprawdzeniu kont użytkowników do których miała dojść wiadomość - to wiadomość doszła tylko mi (adminowi) ukazał się błąd bazy danych.
  3. Nie mam takiej opcji do zaznaczenia przy edycji użytkownika i w ACP (edycja użytkownika) Jedynie mogę korzystać z edytora tekstu w ACP, jak już robię to jak zwykły użytkownik nie mogę.
  4. Powiem tak Logując się na inne konta użytkowników to mogę korzystać z paska edytora tekstu. U mnie na moim koncie już tak nie ma, nie dawno dodawałem kod nie pamiętam - jakiś skomplikowany i po zapisaniu go przestało działać, nawet gdy go usunąłem nadal nie mogę korzystać w pełni z edytora. w ACP sprawdzałem jest ustawione że tak.
  5. Podczas edycji mojej sygnatury, nie mogę korzystać z paska edytora tekstu. Wygląda jakbym mógł pisać tylko jako czysty HTML tekst. Jak przywrócić pełną sprawność edytora? Zdjęcie w załączniku.
  6. Wysłałem do administratora pytanie. Zobaczymy czy to autorska modyfikacja. Jeżeli jednak ktoś wie gdzie można ją pobrać lub jak się nazywa, proszę pisać
  7. To jest strona główna aplikacji, na dole jest także druga aplikacja której poszukuje (System Gildii) Nie wiem jaką wersje ma to forum nie podano w stopce.
  8. Chciałbym zainstalować tą aplikację na swoim forum. Jednak nie wiem jak się nazywa. Zna ktoś? http://forums.d2trade.pl/index.php?app=fgSystem&module=logs To nie jest IPBeconomy, ani simple points Czy to nie jest przypadkiem iPoints System? Jeżeli tak to skąd można pobrać spolszczenie i samą aplikacje? PS. przepraszam za zły dział dopiero teraz się zorientowałem.
  9. Witam, mam problem. Posiadam jedną bazę danych i chiałbym do forum IP Board dodać drugi serwis (coś ala kwejk). Przy instalacji IP Board nie pomyślałem żeby napisać prefixu (np. "ipb_members"), mam samo "members" Dlatego pojawił się mój problem. Chciałbym dodać do wszystkich tabel IP Board dodatkowe prefixy żeby dane na "kwjeku" nie mieszały mi się z danymi na IP Board. Znalazłem już w "conf_global.php" $INFO['sql_tbl_prefix'] = ''; Czy ktoś wie jak automatycznie dodać w MYSQL (PHPMYADMIN) dodatkowe prefixy. Troche tych tabel jest a ręcznie zrobić to, zajmie mi parę godzin.
  10. Naprawiłem, wgrywając jeszcze raz cały admin panel od nowa. Pomogło, lecz wszystkich aplikacji już nie ma Przepraszam za double post.
  11. Nie dawno przeniosłem (zapewne nie udolnie) forum do głównego katalogu i od tego momentu zaczęły się problemy. Jednak usunąłem wszystkie pliki forum i wgrałem jeszcze raz (pliki z komputera, wcześniej robiłem kopie zapasową) i wszystko było okey nawet udało mi się odzyskać dostęp do admina (wcześniej nie miałem), wszystkie obrazki i CSS itd. Jedyna rzecz która została bez zmian to brak jquery w adminie + wszystkie aplikacje np. Shoutbox, Masspm nie działają (lecz są wgrane). (Najbardziej zależy mi na naprawie tego jquery myślę że bez tego nie uda mi się naprawić aplikacji). Minify mam wyłączone. Może ktoś mi coś doradzić?
  12. zobacz, normalne post wyświetlają się tak a np. jak piszę PW to tak, chciałym żeby było tak jak piszę na PW normalne posty.
  13. Dodek

    Background rang

    już mam, udało mi się dojść do tego
  14. http://dragonicapolska.pl/
  15. Dodek

    Background rang

    Witam chciałbym zrobić tło do mojego forum pod rangami, tak jak jest na tym forum > http://codegame.net/index/ Na razie mam sam kolor np. czerwony dla administratora
  16. Witam, aktualnie na swoim forum mam układ poziomy postów napisanych w temacie, chciałbym żeby był klasyczny taki że po lewej stronie mam avatar i dane a obok po prawej stronie miejsce na treść. (tak jak na tym forum) Wie ktoś jak przestawić ten układ?
  17. Mam problem mam nadzieje że ma to związek właśnie z tą aplikacją. Mianowicie po włączeniu ponownym ADS Sidebar na mojej stronie pojawił się taki napis (tylko strona główna) Fatal error: Class 'boardIndexRecentTopics' not found in/home/dodek2/public_html/hooks/dp3_fi_boardsClassActionOverloader_b901e2d40fbd34eaa5ae2204e857bec0.php Zobaczyłem całą to linie ale nie wiem co jest tam źle. 17 linia zaczyna się class dp3... class dp3_fi_boardsClassActionOverloader extends boardIndexRecentTopics { /** * Builds an array of category data for output * * @return array */ public function processAllCategories() Naprawiałem tabele w myphpadmin, usuwałem i ponownie wgrywałem plik (ten sam) próbowałem co dodawać do tego kodu, przez ACP włączałem i wyłączałem aplikacje Forum Icon, a także usunąłem cały hooks Ads in sidebar. Sprawdzałem uprawnienia dosłownie wszystko co mogłem sam zrobić. Jak zupełnie usunąłem ten plik to błąd znalazło w drugim o nazwiedp3_fi_forumsClassActionOverloader_6d2403889bf71771384bff7562152414.php Mam nadzieje że ktoś mi pomoże potrzebuje pomocy jak najszybciej.
  18. Mam problem mam nadzieje że ma to związek właśnie z tą aplikacją. Mianowicie po włączeniu ponownym ADS Sidebar na mojej stronie pojawił się taki napis (tylko strona główna) Fatal error: Class 'boardIndexRecentTopics' not found in/home/dodek2/public_html/hooks/dp3_fi_boardsClassActionOverloader_b901e2d40fbd34eaa5ae2204e857bec0.php Zobaczyłem całą to linie ale nie wiem co jest tam źle. 17 linia zaczyna się class dp3... class dp3_fi_boardsClassActionOverloader extends boardIndexRecentTopics { /** * Builds an array of category data for output * * @return array */ public function processAllCategories() Naprawiałem tabele w myphpadmin, usuwałem i ponownie wgrywałem plik (ten sam) próbowałem co dodawać do tego kodu, przez ACP włączałem i wyłączałem aplikacje Forum Icon, a także usunąłem cały hooks Ads in sidebar. Sprawdzałem uprawnienia dosłownie wszystko co mogłem sam zrobić. Jak zupełnie usunąłem ten plik to błąd znalazło w drugim o nazwie dp3_fi_forumsClassActionOverloader_6d2403889bf71771384bff7562152414.php Mam nadzieje że ktoś mi pomoże potrzebuje pomocy jak najszybciej.
  19. Tak dla przyszłych ludzi z tym samym problemem, wirus był na moim komputerze, miałem 10 usunąłem przez ESETA. następnie usunąłem wszystkie pliki związane z forum. W przeglądarce wyczyściłem wszystkie dane (historie,coockie,pobieranie,pamięć podręczna, ZAPISANE HASŁA itd.), a no i usunąłem wszystkie pliki które zawierały moje hasło do FTP (czyli m.in. FilleZilla),a potem zalogowałem się do mojego cPanelu i zmieniłem hasło. Nastpnie mogłem już wrzucać wszystkie pliki. Dziękuje za wszelką pomoc temat do zamknięcia.
  20. Tak dla przyszłych ludzi z tym samym problemem, wirus był na moim komputerze, miałem 10 usunąłem przez ESETA. następnie usunąłem wszystkie pliki związane z forum. W przeglądarce wyczyściłem wszystkie dane (historie,coockie,pobieranie,pamięć podręczna, ZAPISANE HASŁA itd.), a no i usunąłem wszystkie pliki które zawierały moje hasło do FTP (czyli m.in. FilleZilla),a potem zalogowałem się do mojego cPanelu i zmieniłem hasło. Nastpnie mogłem już wrzucać wszystkie pliki. Dziękuje za wszelką pomoc temat do zamknięcia.
  21. Okey dodałem już podobny temat tylko chodziło tam o coś innego. Błąd przy wgrywaniu FTP został wyjaśniony a mianowicie, podczas wgrywania plików wyskakuje mi informacja o wirusie w pliku. Sprawdziłem w których np. plikach takie coś jest. No np. taki FTP cPanel wykrył że w editor.js (public) jest otworzyłem ten plik ale nic tam "obcego" nie ma. Dalej napisałem do operatorów mojego hostingu że zaistniał taki problem no i odpowiedzieli. TREŚĆ MOJEGO POSTU TREŚĆ ODPOWIEDZI ADMINISTARTORÓW Poszukałem tego wirusa w internecie i znalazłem. (dokładny opis tego wirusa) http://www.malwarepa...ch.pl?id=318724 Administratorzy mojego hostingu powiedzieli mi że mam usunąć ten link pod "DECODED SIGNATURE:" ale jak otwieram mój plik z wirusem tego tam nie ma. I teraz moje pytanie, jak usunąć ten wirus? Dodaje że wirus jest w większości moich plików na forum, więc prosiłbym o rozwiązanie jakieś globalne. Nie wiem jak to działa, ale może jakiś skan plików lub coś innego nie wiem już co mam robić pomóżcie.
  22. ips.editor.js (ips.editor.js): Virus Detected; File not Uploaded! (MBL_318724.UNOFFICIAL FOUND) Tu np. masz jeden plik którego nie mogę wrzucić. Kodu takiego jak tamten koleś nie mam, ale cały czas jest ten błąd. tutaj struktura: /************************************************//* IPB3 Javascript *//* -------------------------------------------- *//* ips.editor.js - Editor class *//* (c) IPS, Inc 2008 *//* -------------------------------------------- *//* Author: Rikki Tissier (based on Matt's code) *//************************************************/var _editor = window.IPBoard;var isRTL = ( isRTL ) ? isRTL : false;/* ===================================================================================================== *//* Values for the IPB text editor */IPBoard.prototype.editor_values = $H({'templates': $A(),'colors_perrow': 8,'colors': [ '000000' , 'A0522D' , '556B2F' , '006400' , '483D8B' , '000080' , '4B0082' , '2F4F4F' , '8B0000' , 'FF8C00' , '808000' , '008000' , '008080' , '0000FF' , '708090' , '696969' , 'FF0000' , 'F4A460' , '9ACD32' , '2E8B57' , '48D1CC' , '4169E1' , '800080' , '808080' , 'FF00FF' , 'FFA500' , 'FFFF00' , '00FF00' , '00FFFF' , '00BFFF' , '9932CC' , 'C0C0C0' , 'FFC0CB' , 'F5DEB3' , 'FFFACD' , '98FB98' , 'AFEEEE' , 'ADD8E6' , 'DDA0DD' , 'FFFFFF' ],// You can add new fonts here if you wish, HOWEVER, if you use// non-standard fonts, users without those fonts on their computer// will not see them. The default list below has the generally accepted// safe fonts; add others at your own risk!'primary_fonts': $H({ arial: "Arial", arialblack: "Arial Black", arialnarrow: "Arial Narrow", bookantiqua: "Book Antiqua", centurygothic: "Century Gothic", comicsansms: "Comic Sans MS", couriernew: "Courier New", franklingothicmedium: "Franklin Gothic Medium", garamond: "Garamond", georgia: "Georgia", impact: "Impact", lucidaconsole: "Lucida Console", lucidasansunicode: "Lucida Sans Unicode", microsoftsansserif: "Microsoft Sans Serif", palatinolinotype: "Palatino Linotype", tahoma: "Tahoma", timesnewroman: "Times New Roman", trebuchetms: "Trebuchet MS", verdana: "Verdana" }),'font_sizes': $A([ 1, 2, 3, 4, 5, 6, 7 ]) });// =============================================================================================================//// Class for RTE EDITOR which is inherited by main Editor class_editor_rte = Class.create({_identifyType: function(){ Debug.write( "(Editor " + this.id + ") This is the RTE class" );},togglesource_pre_show_html: function(){},togglesource_post_show_html: function(){},editor_write_contents: function( text, do_init ){ if ( ( Object.isUndefined(text) || text === false || text.blank() ) && Prototype.Browser.Gecko ) { text = '<br />'; } else if ( Object.isUndefined(text) || text === false ) { text = ''; } if ( this.editor_document && this.editor_document.initialized ) { this.editor_document.body.innerHTML = text; } else { if ( do_init ) { this.editor_document.designMode = 'on'; } this.editor_document = this.editor_window.document; this.editor_document.open( 'text/html', 'replace' ); this.editor_document.write( this.ips_frame_html.replace( '{:content:}', text ) ); this.editor_document.close(); if ( do_init ) { this.editor_document.body.contentEditable = true; this.editor_document.initialized = true; } }},removeformat: function(e){ this.apply_formatting( 'unlink' , false, false ); this.apply_formatting( 'removeformat', false, false ); /*this.apply_formatting( 'killword', false, false );*/ var text = this.get_selection(); if ( text ) { text = this.strip_html( text ); text = this.strip_empty_html( text ); text = text.replace( /\r/g, "" ); text = text.replace( /\n/g, "<br />" ); text = text.replace( /<!--(.*?)-->/g, "" ); text = text.replace( /<!--(.*?)-->/g, "" ); this.insert_text( text ); }},editor_get_contents: function(){ return this.editor_document.body.innerHTML;},editor_set_content: function( init_text ){ if( $( this.id + '_iframe' ) ) { this.editor_box = $( this.id + '_iframe' ); } else { // Create iframe var iframe = new Element('iframe', { 'id': this.id + '_iframe', 'tabindex': 0 } ); if( Prototype.Browser.IE && window.location.protocol == 'https:' ) { iframe.writeAttribute( 'src', this.options.file_path + '/index.html' ); } // Insert into DOM this.items['text_obj'].up().insert( iframe ); this.editor_box = iframe; } if( !Prototype.Browser.IE ) { this.editor_box.setStyle( 'border: 1px inset' ); } else { // Bug #17772 if( !Object.isUndefined( init_text ) && init_text != false ) { init_text = init_text.replace( /§/g, "&sect"); } } //----------------------------------------- // Is there a height in the cookies? //----------------------------------------- var test_height = ipb.Cookie.get( 'ips_rte_height' ); /*Debug.write( "Height is " + test_height );*/ if ( Object.isNumber( test_height ) && test_height > 50 ) { this.items['text_obj'].setStyle( { height: test_height + 'px' } ); Debug.write( "Set text_obj height to " + test_height ); } // Set up var tobj_dims = this.items['text_obj'].getDimensions(); if( Object.isUndefined( tobj_dims ) || tobj_dims['height'] == 0 ) { tobj_dims['height'] = 250; } //Debug.write( tobj_dims ); /*Debug.write( this.items['text_obj'].getDimensions()['height'] );*/ this.editor_box.setStyle( { width: '100%', height: tobj_dims.height + 'px', className: this.items['text_obj'].className }); this.items['text_obj'].hide(); //--------- this.editor_window = this.editor_box.contentWindow; this.editor_document = this.editor_window.document; if ( ! this.items['text_obj'].value && ( init_text === false || Object.isUndefined( init_text ) ) ) { /* Wipe editor */ this.editor_write_contents(false, true); } else { this.editor_write_contents( (Object.isUndefined( init_text ) || ! init_text ? this.items['text_obj'].value : init_text), true ); } this.editor_document.editor_id = this.editor_id; this.editor_window.editor_id = this.editor_id; this.editor_window.has_focus = false; // Go on.. cursor, flash you bastard try { Debug.write( "Attempt to get focus" ); this.editor_check_focus(); // Sometimes moves the focus to the RTE this.editor_document.execCommand("InsertHorizontalRule", false, null); this.editor_document.execCommand("undo" , false, null); } catch(error) { Debug.write( "#011 " + error ); } //----------------------------------------- // Kill tags //----------------------------------------- //document.getElementById( this.editor_id + '_cmd_justifyfull' ).style.display = 'none';},apply_formatting: function(cmd, dialog, argument){ dialog = ( Object.isUndefined( dialog ) ? false : dialog); argument = ( Object.isUndefined( argument ) ? true : argument); if ( Prototype.Browser.IE && this.forum_fix_ie_newlines ) { if ( cmd == 'justifyleft' || cmd == 'justifycenter' || cmd == 'justifyright' ) { var _a = cmd.replace( "justify", "" ); this.wrap_tags_lite( "[" + _a + "]", "[/" + _a + "]" ); return true; } else if ( cmd == 'outdent' || cmd == 'indent' || cmd == 'insertorderedlist' || cmd == 'insertunorderedlist' ) { this.editor_check_focus(); var sel = this.editor_document.selection; var ts = this.editor_document.selection.createRange(); var t = ts.htmlText.replace(/<p([^>]*)>(.*)<\/p>/i, '$2'); if ( (sel.type == "Text" || sel.type == "None") ) { ts.pasteHTML( t + "<p />\n" ); } else { this.editor_document.body.innerHTML += "<p />"; } } } //alert( "Here" ); /*Debug.write( "Apply formatting selection is: " + this.get_selection() + ", cmd is " + cmd );*/ if( Prototype.Browser.IE && this._ie_cache != null ) { this.editor_check_focus(); this._ie_cache.select(); } this.editor_document.execCommand( cmd, dialog, argument ); this._ie_cache = null; return false;},/* ! get_selection */get_selection: function(){ var rng = this._ie_cache ? this._ie_cache : this.editor_document.selection.createRange(); //Debug.write( 'get selection: ie_cache:' + this._ie_cache.htmlText + '.' ); if ( rng.htmlText ) { Debug.write( 'htmlTest:' + rng.htmlText + '.' ); return rng.htmlText; } else { var rtn = ''; for (var i = 0; i < rng.length; i++) { rtn += rng.item(i).outerHTML; } } return rtn;},editor_set_functions: function(){ //Debug.write( this.editor_document ); Event.observe( this.editor_document, 'mouseup', this.events.editor_document_onmouseup.bindAsEventListener( this ) ); Event.observe( this.editor_document, 'keyup', this.events.editor_document_onkeyup.bindAsEventListener( this ) ); Event.observe( this.editor_document, 'keydown', this.events.editor_document_onkeydown.bindAsEventListener( this ) ); Event.observe( this.editor_window, 'blur', this.events.editor_window_onblur.bindAsEventListener( this ) ); Event.observe( this.editor_window, 'focus', this.events.editor_window_onfocus.bindAsEventListener( this ) );},set_context: function( cmd ){ // Showing HTML? if ( this._showing_html ) { return false; } this.button_update.each( function(item) { //Debug.write( this.id + '_cmd_' + item ); var obj = $( this.id + '_cmd_' + item ); if( obj != null ) { try { var state = new String( this.editor_document.queryCommandState( item ) ); if( obj.readAttribute('state') != state ) { obj.writeAttribute( 'state', new String( state ) ); this.set_button_context( obj, ( obj.readAttribute('cmd') == cmd ? 'mouseover' : 'mouseout' ) ); } } catch( error ) { Debug.write( "#1 " + error ); } } }.bind(this) ); //----------------------------------------- // Check and set font context //----------------------------------------- this.button_set_font_context(); //----------------------------------------- // Check and set size context //----------------------------------------- this.button_set_size_context();},button_set_font_context: function( font_state ){ changeto = ''; // Showing HTML? if ( this._showing_html ) { return false; } if( this.items['buttons']['fontname'] ) { if( Object.isUndefined( font_state ) ){ font_state = this.editor_document.queryCommandValue('fontname') || ''; } if( font_state.blank() ){ if ( !Prototype.Browser.IE && window.getComputedStyle ) { font_state = this.editor_document.body.style.fontFamily; } } else if( font_state == null ){ font_state = ''; } if( font_state != this.font_state ) { this.font_state = font_state; var fontword = font_state; var commapos = fontword.indexOf(","); if( commapos != -1 ){ fontword = fontword.substr(0, commapos); } fontword = fontword.toLowerCase(); changeto = ''; ipb.editor_values.get('primary_fonts').any( function(font){ if( font.value.toLowerCase() == fontword ){ changeto = font.value; return true; } else { return false; } }); changeto = ( changeto == '' ) ? this.fontoptions['_default'] : changeto; this.items['buttons']['fontname'].update( changeto ); } }}, button_set_size_context: function( size_state ){ if( this.items['buttons']['fontsize'] ) { if( Object.isUndefined( size_state ) ){ size_state = this.editor_document.queryCommandValue('fontsize'); } if( size_state == null || size_state == '' ) { if ( Prototype.Browser.Gecko ) { size_state = this.convert_size( this.editor_document.body.style.fontSize, 0 ); if ( ! size_state ) { size_state = '2'; } } } changeto = ''; if ( size_state != this.size_state ) { this.size_state = size_state; ipb.editor_values.get('font_sizes').any( function(size){ if( parseInt( size ) == parseInt( this.size_state ) ){ changeto = size; return true; } else { return false; } }.bind(this)); changeto = ( changeto == '' ) ? this.sizeoptions['_default'] : changeto; this.items['buttons']['fontsize'].update( changeto ); } }},/* ! insert_text */insert_text: function(text){ Debug.write( "Inserting " + text + "." ); this.editor_check_focus(); if ( typeof( this.editor_document.selection ) != 'undefined' && this.editor_document.selection.type != 'Text' && this.editor_document.selection.type != 'None' ) { this.editor_document.selection.clear(); } var sel = this._ie_cache ? this._ie_cache : this.editor_document.selection.createRange(); sel.pasteHTML(text); sel.select(); this._ie_cache = null;},/* ! insert_emoticon */insert_emoticon: function( emo_id, emo_image, emo_code, event ){ Debug.write( "Adding emoticon " + emo_code ); try { //this._ie_cache = null; // INIT var _emo_url = ipb.vars['emoticon_url'] + "/" + emo_image; var _emo_html = ' <img src="' + _emo_url + '" class="bbc_emoticon" alt="' + this.unhtmlspecialchars( emo_code ) + '" />'; this.wrap_tags_lite( " " + _emo_html, " ", false); } catch( error ) { Debug.write( "#2 " + error ); //alert( error ); } /*if ( this.emoticon_window_id != '' && typeof( this.emoticon_window_id ) != 'undefined' ) { this.emoticon_window_id.focus(); }*/},togglesource: function( e, update ){ Event.stop(e); // Already showing? if( this._showing_html ) { if( update ) { this.editor_document.initialized = false; this.editor_write_contents( $( this.id + '_htmlsource' ).value, true ); //this.editor_document.body.innerHTML = $( this.id + '_htmlsource' ).value; } $( this.editor_box ).show(); $( this.items['controls'] ).show(); // Remove source editor $( this.id + '_htmlsource' ).remove(); $( this.id + '_ts_controls' ).remove(); // Post process //this.togglesource_post_show_html(); this._showing_html = false; // Set context this.editor_check_focus(); //this.set_context(); } else { this._showing_html = true; this.togglesource_pre_show_html(); // Create a new textarea var textarea = new Element( 'textarea', { id: this.id + '_htmlsource', tabindex: 3 } ); textarea.className = this.items['text_obj'].className; var dims = this.items['text_obj'].getDimensions(); /*textarea.setStyle('width: ' + dims.width + 'px; height: ' + dims.height + 'px;');*/ textarea.value = this.clean_html( this.editor_get_contents() ); // Build controls var controlbar = ipb.editor_values.get('templates')['togglesource'].evaluate( { id: this.id } ); // Insert into page $( this.items['text_obj'] ).insert( { after: textarea } ); $( textarea ).insert( { after: controlbar } ); // Hook up events $( this.id + '_ts_update' ).writeAttribute('cmd', 'togglesource').writeAttribute('editor_id', this.id).observe('click', this.togglesource.bindAsEventListener( this, 1 ) ); $( this.id + '_ts_cancel' ).writeAttribute('cmd', 'togglesource').writeAttribute('editor_id', this.id).observe('click', this.togglesource.bindAsEventListener( this, 0 ) ); // Hide editor $( this.items['controls'] ).hide(); $( this.editor_box ).hide(); // Set context this.editor_check_focus(); //this.set_context(); } },update_for_form_submit: function(){ Debug.write("Updating for submit"); this.items['text_obj'].value = this.editor_get_contents(); Debug.write( "Before: " + this.items['text_obj'].value ); // IE does crappy things. </3 if ( Prototype.Browser.IE ) { this.items['text_obj'].value = this.items['text_obj'].value.replace( / /g, ' ' ); this.items['text_obj'].value = this.items['text_obj'].value.replace( /\s+?$/, '' ); } // http://trac.webkit.org/changeset/47640 // Safari bug with execcommand and underline + strikethrough if( Prototype.Browser.WebKit ) { this.items['text_obj'].value = this.items['text_obj'].value.replace( /<span class="Apple-style-span" style="text-decoration: underline;">([^>]*)<\/span>/gi, "<u>$1</u>" ); this.items['text_obj'].value = this.items['text_obj'].value.replace( /<span class="Apple-style-span" style="text-decoration: line-through;">([^>]*)<\/span>/gi, "<strike>$1</strike>" ); } Debug.write( "After: " + this.items['text_obj'].value ); return true;}});// =============================================================================================================//// Class for STANDARD EDITOR which is inherited by main Editor class_editor_std = Class.create({_identifyType: function(){ Debug.write( "(Editor " + this.id + ") This is the STD class" );},editor_set_content: function( init_text ){ var iframe = this.items['text_obj'].up().down('iframe', 0); if ( !Object.isUndefined( iframe ) ) { var iframeDims = iframe.getDimensions(); $( this.items['text_obj'] ).setStyle( { 'width': iframeDims.width, 'height': iframeDims.height } ).show(); $( iframe ).setStyle( 'width: 0px; height: 0px; border: none;' ); } this.editor_window = this.items['text_obj']; this.editor_document = this.items['text_obj']; this.editor_box = this.items['text_obj']; if( !Object.isUndefined( init_text ) && init_text !== false ) { this.editor_write_contents( init_text ); } this.editor_document.editor_id = this.id; this.editor_window.editor_id = this.id; // Hide those pesky buttons we dont need if( !Prototype.Browser.IE && $( this.id + '_cmd_spellcheck' ) ){ $( this.id + '_cmd_spellcheck').hide(); } if( $(this.id + '_cmd_removeformat') ){ $( this.id + '_cmd_removeformat' ).hide(); } if( $(this.id + '_cmd_togglesource' ) ){ $( this.id + '_cmd_togglesource' ).hide(); } if( $(this.id + '_cmd_justifyfull' ) ){ $( this.id + '_cmd_justifyfull' ).hide(); } if( $(this.id + '_cmd_outdent' ) ){ $( this.id + '_cmd_outdent' ).hide(); } if( $(this.id + '_cmd_switcheditor' ) ){ $( this.id + '_cmd_switcheditor' ).hide(); }},editor_write_contents: function(text){ if ( text !== false ) { this.items['text_obj'].value = text; }},editor_get_contents: function(){ return this.editor_document.value;},apply_formatting: function(cmd, dialog, argument){ /*Debug.write("Click");*/ switch (cmd) { case 'bold': case 'italic': case 'underline': { this.wrap_tags(cmd.substr(0, 1), false); return; } case 'justifyleft': case 'justifycenter': case 'justifyright': { this.wrap_tags(cmd.substr(7), false); return; } case 'indent': { this.wrap_tags(cmd, false); return; } case 'createlink': { var sel = this.get_selection(); if (sel) { this.wrap_tags('url', argument); } else { this.wrap_tags('url', argument, argument); } return; } case 'fontname': { this.wrap_tags('font', argument); return; } case 'fontsize': { this.wrap_tags('size', argument); return; } case 'forecolor': { this.wrap_tags('color', argument); return; } case 'backcolor': { this.wrap_tags('background', argument); return; } case 'insertimage': { this.wrap_tags('img', false, argument); return; } case 'strikethrough': { this.wrap_tags('s', false); return; } case 'superscript': { this.wrap_tags('sup', false); return; } case 'subscript': { this.wrap_tags('sub', false); return; } case 'removeformat': return; }},editor_set_functions: function(){ Event.observe( this.editor_document, 'keypress', this.events.editor_document_onkeypress.bindAsEventListener(this) ); Event.observe( this.editor_window, 'focus', this.events.editor_window_onfocus.bindAsEventListener( this ) ); Event.observe( this.editor_window, 'blur', this.events.editor_window_onblur.bindAsEventListener( this ) );},set_context: function(){ //Debug.write('Set context');},get_selection: function(){ if ( !Object.isUndefined( this.editor_document.selectionstart ) ) { return this.editor_document.value.substr(this.editor_document.selectionstart, this.editor_document.selectionend - this.editor_document.selectionstart); } else if ( ( document.selection && document.selection.createRange ) || this._ie_cache ) { return ( ! document.selection.createRange().text && this._ie_cache ) ? this._ie_cache.text : document.selection.createRange().text; } else if ( window.getSelection ) { return window.getSelection() + ''; } else { return false; }},insert_text: function(text){ this.editor_check_focus(); if ( !Object.isUndefined( this.editor_document.selectionstart ) ) { var open = this.editor_document.selectionstart + 0; var st = this.editor_document.scrollTop; var end = open + text.length; /* Opera doesn't count the linebreaks properly for some reason */ if( Prototype.Browser.Opera ) { var opera_len = text.match( /\n/g ); try { end += parseInt(opera_len.length); } catch(e) { Debug.write( "#3 " + e ); } } this.editor_document.value = this.editor_document.value.substr(0, this.editor_document.selectionstart) + text + this.editor_document.value.substr(this.editor_document.selectionend); // Don't adjust selection if we're simply adding , etc if ( ! text.match( new RegExp( "\\" + this.open_brace + "(\\S+?)" + "\\" + this.close_brace + "\\" + this.open_brace + "/(\\S+?)" + "\\" + this.close_brace ) ) ) { this.editor_document.selectionstart = open; this.editor_document.selectionend = end; this.editor_document.scrollTop = st; Debug.write("Insert 0"); } else { // Only firefox seems to need this... if( Prototype.Browser.Gecko ){ this.editor_document.scrollTop = st; } } this.editor_document.setSelectionRange( open, end ); Debug.write("Insert 1"); } else if ( ( document.selection && document.selection.createRange ) || this._ie_cache ) { var sel = this._ie_cache ? this._ie_cache : document.selection.createRange(); sel.text = text.replace(/\r?\n/g, '\r\n'); sel.select(); Debug.write("Insert 2"); } else { this.editor_document.value += text; Debug.write("Insert 3"); } this._ie_cache = null;},insert_emoticon: function( emo_id, emo_image, emo_code, event ){ this.editor_check_focus(); emo_code = this.unhtmlspecialchars( emo_code ); this.wrap_tags_lite( " " + emo_code, " "); /*if ( Prototype.Browser.IE ) { if ( this.emoticon_window_id != '' && !Object.isUndefined( this.emoticon_window_id ) ) { this.emoticon_window_id.focus(); } }*/},insertorderedlist: function(e){ this.insertlist( 'ol');},insertunorderedlist: function(e){ this.insertlist( 'ul');},insertlist: function( list_type ){ var open_tag; var close_tag; var item_open_tag = '<li>'; var item_close_tag = '</li>'; var regex = ''; var all_add = ''; if ( this.use_bbcode ) { regex = new RegExp('([\r\n]+|^[\r\n]*)(?!\\[\\*\\]|\\[\\/?list)(?=[^\r\n])', 'gi'); open_tag = list_type == 'ol' ? '[list=1]\n' : '[list]\n'; close_tag = '[/list]'; item_open_tag = '[*]'; item_close_tag = ''; } else { regex = new RegExp('([\r\n]+|^[\r\n]*)(?!<li>|<\\/?ol|ul)(?=[^\r\n])', 'gi'); open_tag = list_type == 'ol' ? '<ol>\n' : '<ul>\n'; close_tag = list_type == 'ol' ? '</ol>\n' : '</ul>\n'; } if ( text = this.get_selection() ) { text = open_tag + text.replace( regex, "\n" + item_open_tag + '$1' + item_close_tag ) + '\n' + close_tag; if ( this.use_bbcode ) { text = text.replace( new RegExp( '\\[\\*\\][\r\n]+', 'gi' ), item_open_tag ); } this.insert_text( text ); } else { // http://community.invisionpower.com/tracker/issue-19347-insert-list/ // Commenting this out fixes the above bug report //if ( Prototype.Browser.Gecko ) //{ // //this.insert_text( open_tag + close_tag ); // this.insert_text( open_tag ); // // /* SKINNOTE: use proper lang for these */ // while ( val = prompt( ipb.lang['editor_enter_list'], '') ) // { // this.insert_text( item_open_tag + val + item_close_tag + '\n' ); // //all_add += item_open_tag + val + item_close_tag + '\n'; // } // this.insert_text( close_tag ); //} //else //{ var to_insert = open_tag; var listitems = ''; while ( val = prompt( ipb.lang['editor_enter_list'], '') ) { listitems += item_open_tag + val + item_close_tag + '\n'; } //this.insert_text( close_tag ); if( listitems ) { to_insert += listitems; to_insert += close_tag; this.insert_text( to_insert ); } //} }},removeformat: function(){ var text = this.get_selection(); if ( text ) { text = this.strip_html( text ); this.insert_text( text ); }},unlink: function(){ var text = this.get_selection(); var link_regex = ''; var link_text = ''; if ( text !== false ) { if ( text.match( link_regex ) ) { text = ( this.use_bbcode ) ? text.replace( /\[url=([^\]]+?)\]([^\[]+?)\[\/url\]/ig, "$2" ) : text.replace( /<a href=['\"]([^\"']+?)['\"]([^>]+?)?>(.+?)<\/a>/ig, "$3" ); } this.insert_text( text ); }},undo: function(){ this.history_record_state( this.editor_get_contents() ); this.history_time_shift( -1 ); if ( ( text = this.history_fetch_recording() ) !== false ) { this.editor_document.value = text; }},redo: function(){ this.history_time_shift( 1 ); if ( ( text = this.history_fetch_recording() ) !== false ) { this.editor_document.value = text; }},update_for_form_submit: function(subjecttext, minchars){ return true;}});//==============================================================================================================//// MAIN EDITOR CODEif( USE_RTE ){//&& !Prototype.Browser.WebKit ){ // Dont support safariDebug.write("Extending with RTE");_type = _editor_rte;} else {Debug.write("Extending with STD");_type = _editor_std;}_editor.prototype.editor = Class.create(_type, {initialize: function( editor_id, mode, initial_content, options ){ this.id = editor_id; this.is_rte = mode; this.use_bbcode = !mode; this.events = null; this.options = []; this.items = []; this.settings = {}; this.open_brace = ''; this.close_brace = ''; this.allow_advanced = 0; this.initialized = 0; this.ips_frame_html = ''; this.forum_fix_ie_newlines = 1; this.has_focus = null; this.history_recordings = []; this.history_pointer = -1; this._ie_cache = null; this._showing_html = false; this._loading = false; this.original = $H(); this.hidden_objects = []; this.fontoptions = $A(); this.sizeoptions = $A(); this.font_state = null; this.size_state = null; this.palettes = {}; this.defaults = {}; this.key_handlers = []; this.showing_sidebar = false; this.emoticons_loaded = false; this.emoClick = false; this.options = Object.extend({ file_path: '', forum_fix_ie_newlines: 1, char_set: 'UTF-8', ignore_controls: [], button_update: [] }, arguments[3] || {}); this.button_update = $A( [ "bold", "italic", "underline", "justifyleft", "justifycenter", "justifyright", "insertorderedlist", "insertunorderedlist", "superscript", "subscript", "strikethrough" ].concat( this.options.button_update ) ); this.values = ipb.editor_values; // The values for things like font list, colors etc. this.items['text_obj'] = $( this.id + "_textarea" ); this.items['buttons'] = $A(); this.items['controls'] = $( this.id + '_controls' ); //Other configuration this.open_brace = this.use_bbcode ? '[' : '<'; this.close_brace = this.use_bbcode ? ']' : '>'; this.allow_advanced = this.use_bbcode ? 0 : 1; this.doc_body = $$('body')[0]; //Object.extend( this._history, _editor_history ); this.events = new _editor_events(); this._identifyType(); // Any custom BBCodes to build? if( this.values.get('bbcodes') && $( this.id + '_cmd_otherstyles' ) ) // check for existence of other styles menu { this.buildCustomStyles(); } // Lets try and find the form this belongs to, and add a submit // event to convert the text properly if( this.items['text_obj'].up('form') ){ this.items['text_obj'].up('form').observe( 'submit', function(e){ this.update_for_form_submit(); }.bindAsEventListener(this) ); } this.init( initial_content ); Debug.write("All editor initialization complete");},/* ------------------------------ *//** * Initialization*/init: function( initial_text ){ try { if ( this.initialized ){ return; } // Set WYSIWYG flag if( $( this.id + '_wysiwyg_used' ) ){ $( this.id + '_wysiwyg_used' ).value = parseInt( this.is_rte ); } if( ipb.Cookie.get('emoticon_sidebar') == '1' && $( this.id + '_sidebar' ) ) { this.buildEmoticons(); $( this.id + '_sidebar' ).show(); $( 'editor_' + this.id ).addClassName('with_sidebar'); ipb.Cookie.set( 'emoticon_sidebar', 1, 1 ); this.showing_sidebar = true; } // Get default frame HTML this.ips_frame_html = this.get_frame_html(); // Set editor up this.editor_set_content( initial_text ); // Set mouse events this.editor_set_functions(); // Set controls up this.editor_set_controls(); // Having this here forces the page to jump down to the editor when it loads // which is highly undesirable. Tested STD and RTE in FF and IE8, and Safari with STd // with this commented out and seems fine... Bug 15476 //this.editor_check_focus(); this.initialized = true; } catch(err){ Debug.error( "#4 " + err ); }},/* ------------------------------ *//** * Builds custom styles menu & toolbars */buildCustomStyles: function(){ var buttons = false; var other_styles = false; // Create the toolbar to start with var toolbar = ipb.editor_values.get('templates')['toolbar'].evaluate( { 'id': this.id, 'toolbarid': '3' } ); $( this.id + '_toolbar_2' ).insert( { after: toolbar } ); // And init the other styles menu this.init_editor_menu( $( this.id + '_cmd_otherstyles' ) ); this.values.get('bbcodes').each( function( bbcode ){ if( !bbcode.value['image'].blank() ) { $( this.id + '_toolbar_3' ).insert( ipb.editor_values.get('templates')['button'].evaluate( { 'id': this.id, 'cmd': bbcode.key, 'title': bbcode.value['title'], 'img': bbcode.value['image'] } ) ); buttons = true; } else { $( this.id + '_popup_otherstyles_menu' ).insert( ipb.editor_values.get('templates')['menu_item'].evaluate( { 'id': this.id, 'cmd': bbcode.key, 'title': bbcode.value['title'] } ) ); other_styles = true; } if( !( bbcode.value['useoption'] == '0' && bbcode.value['single_tag'] == '1' ) ) { var item_wrap = new Element('div', { id: this.id + '_palette_otherstyles_' + bbcode.key } ); item_wrap.addClassName('ipb_palette').addClassName('extended'); item_wrap.writeAttribute("styleid", bbcode.key); var _content = this.values.get('templates')['generic'].evaluate( { id: this.id + '_' + bbcode.key, title: bbcode.value['title'], example: bbcode.value['example'], option_text: bbcode.value['menu_option_text'] || '', value_text: bbcode.value['menu_content_text'] || '' } ); item_wrap.update( _content ); this.doc_body.insert( { top: item_wrap } ); // Figure out what needs to be shown if( bbcode.value['useoption'] == '0' ){ item_wrap.select('.optional').invoke('remove'); } if( bbcode.value['single_tag'] == '1' ){ item_wrap.select('.tagcontent').invoke('remove'); } this.palettes[ 'otherstyles_' + bbcode.key ] = new ipb.Menu( $( this.id + '_cmd_custom_' + bbcode.key ), item_wrap, { stopClose: true, offsetX: 0, offsetY: 42, positionSource: $( this.id + '_cmd_otherstyles' ) } ); item_wrap.down('input[type="submit"]').observe('click', this.events.handle_custom_onclick.bindAsEventListener( this ) ); } // Set up events $( this.id + '_cmd_custom_' + bbcode.key ).observe('click', this.events.handle_custom_command.bindAsEventListener( this, bbcode.key )); }.bind(this)); if( buttons ){ $( this.id + '_toolbar_3' ).show(); } if( other_styles ){ $( this.id + '_cmd_otherstyles' ).show(); } },/* ------------------------------ *//** * Resizes the content area*/resize_to: function( size ){ var afterFinish = function(){}; // Bug #17799 // Opera 10 wouldn't resize the emoticon pane when the editor resize buttons were used // Have to manually recalculate height, resize editor, then remove height if( Prototype.Browser.Opera && $( this.id + '_emoticon_holder' ) ) { var height = $( this.id + '_emoticon_holder' ).getHeight(); var currentSize = ( this.is_rte ) ? $( this.editor_box ).getHeight() : $( this.items['text_obj'] ).getHeight(); var diff = currentSize - size; var newSize = height - diff; $( this.id + '_emoticon_holder' ).setStyle('height: ' + newSize + 'px'); var afterFinish = function(e){ $( this.id + '_emoticon_holder' ).setStyle('height: auto;'); }.bind( this ); //window.opera.postError("Height: " + height + "; diff: " + diff + "; newSize: " + newSize); } try { if( this.is_rte ) { new Effect.Morph( $( this.editor_box ), { style: 'height: ' + size + 'px', duration: 0.3, afterFinish: afterFinish } ); $( this.items['text_obj'] ).setStyle( 'height: ' + size + 'px' ); } else { new Effect.Morph( $( this.items['text_obj'] ), { style: 'height: ' + size + 'px', duration: 0.3, afterFinish: afterFinish } ); if( $( this.editor_box ) ){ $( this.editor_box ).setStyle( 'height: ' + size + 'px' ); } } } catch(err) { Debug.write( "#5 " + err ); } },/* ------------------------------ *//** * Returns HTML for the RTE frame*/get_frame_html: function(){ var ips_frame_html = ""; ips_frame_html += "<html id=\""+this.id+"_html\">\n"; ips_frame_html += "<head>\n"; ips_frame_html += "<meta http-equiv=\"content-type\" content=\"text/html; charset=" + this.options.char_set + "\" />"; ips_frame_html += "<style type='text/css' media='all'>\n"; ips_frame_html += "body {\n"; ips_frame_html += " background: #FFFFFF;\n"; ips_frame_html += " margin: 0px;\n"; ips_frame_html += " padding: 4px;\n"; ips_frame_html += " font-family: arial, verdana, tahoma, sans-serif;\n"; ips_frame_html += " font-size: 9pt;\n"; ips_frame_html += "}\n"; ips_frame_html += "font[size=\"1\"] {\n"; ips_frame_html += " font-size: 9px;\n"; ips_frame_html += "}\n"; ips_frame_html += "font[size=\"2\"] {\n"; ips_frame_html += " font-size: 13px;\n"; ips_frame_html += "}\n"; ips_frame_html += "font[size=\"3\"] {\n"; ips_frame_html += " font-size: 15px;\n"; ips_frame_html += "}\n"; ips_frame_html += "font[size=\"4\"] {\n"; ips_frame_html += " font-size: 17px;\n"; ips_frame_html += "}\n"; ips_frame_html += "font[size=\"5\"] {\n"; ips_frame_html += " font-size: 21px;\n"; ips_frame_html += "}\n"; ips_frame_html += "font[size=\"6\"] {\n"; ips_frame_html += " font-size: 26px;\n"; ips_frame_html += "}\n"; ips_frame_html += "font[size=\"7\"] {\n"; ips_frame_html += " font-size: 36px;\n"; ips_frame_html += "}\n"; ips_frame_html += "</style>\n"; if( isRTL && rtlFull ) { ips_frame_html += "<link rel='stylesheet' type='text/css' media='screen' href='" + rtlFull + "' />\n"; if( rtlIe && Prototype.Browser.IE ) { ips_frame_html += "<!--[if lte IE 7]>\n"; ips_frame_html += "<link rel='stylesheet' type='text/css' media='screen' href='" + rtlIe + "' />\n"; ips_frame_html += "<![endif]-->\n"; } } ips_frame_html += "</head>\n"; ips_frame_html += "<body class='withRTL'>\n"; ips_frame_html += "{:content:}\n"; ips_frame_html += "</body>\n"; ips_frame_html += "</html>"; return ips_frame_html;},editor_check_focus: function(){ if( this.is_rte ) { Debug.write( "Focussing RTE" ); try { this.editor_window.focus(); } catch(err) { Debug.write( "Could not focus editor window" ); } } else { Debug.write( "Focussing STD Textarea" ); if( !this._ie_cache ) { this.items['text_obj'].focus(); } } /*if ( ! this.editor_window.has_focus ){ this.editor_window.focus(); }*/},editor_set_controls: function(){ //Debug.write( $( this.id + '_controls' ).select('span') ); controls = $( this.id + '_controls' ).select('.rte_control').each( function(elem) { if( !elem.id ){ return; } if( this.options.ignore_controls.include( elem.id.toLowerCase() ) ){ return; } if( elem.hasClassName('rte_button') ){ this.init_editor_button( elem ); } else if ( elem.hasClassName( 'rte_menu' ) && !elem.hasClassName( 'rte_special') ){ this.init_editor_menu( elem ); // SKINNOTE: IE error on this line } else if ( elem.hasClassName( 'rte_palette' ) ){ this.init_editor_palette( elem ); } else { return; } this.set_control_unselectable( elem ); }.bind(this)); if( $( this.id + '_resizer' ) ){ this.init_editor_button( $( this.id + '_cmd_r_small' ) ); this.set_control_unselectable( $( this.id + '_cmd_r_small' ) ); this.init_editor_button( $( this.id + '_cmd_r_big' ) ); this.set_control_unselectable( $( this.id + '_cmd_r_big' ) ); } },set_button_context: function(obj, state, type){ //----------------------------------------- // Showing HTML? //----------------------------------------- if ( this._showing_html ){ return false; } if ( Object.isUndefined( type ) ){ type = 'button'; } if ( state == 'mousedown' && ( obj.readAttribute('cmd') == 'undo' || obj.readAttribute('cmd') == 'redo' ) ){ return false; } switch ( obj.readAttribute('state') ) { case 'true': { switch (state) { case 'mouseout': this.editor_set_ctl_style(obj, 'button', 'selected'); break; case 'mouseover': case 'mousedown': case 'mouseup': this.editor_set_ctl_style(obj, type, 'down'); break; } break; } default: { switch (state) { case 'mouseout': this.editor_set_ctl_style(obj, type, 'normal'); break; case 'mousedown': this.editor_set_ctl_style(obj, type, 'down'); break; case 'mouseover': case 'mouseup': this.editor_set_ctl_style(obj, type, 'hover'); break; } break; } }},editor_set_ctl_style: function( obj, type, mode ){ if ( obj.readAttribute('mode') == mode ){ return; } // Add in -menu class var extra = ''; if ( type == 'menu' ){ extra = '_menu'; } else if ( type == 'menubutton' ) { extra = '_menubutton'; } // Add in -color if it's a color box extra += obj.readAttribute('colorname') ? '_color' : ''; // Add in -emo if it's an emo extra += obj.readAttribute('emo_id') ? '_emo' : ''; // Set mode... obj.writeAttribute('mode', mode); try { switch ( mode ) { case "normal": obj.addClassName('rte_normal' + extra).removeClassName('rte_hover').removeClassName('rte_selected'); break; case "hover": obj.addClassName('rte_hover' + extra ).removeClassName('rte_normal').removeClassName('rte_selected'); break; case "selected": case "down": obj.addClassName('rte_selected' + extra ).removeClassName('rte_normal').removeClassName('rte_hover'); break; } } catch (err) { Debug.write( "#6 " + err ); }},set_control_unselectable: function(elem){ if( !$(elem) ){ return; } $( elem ).descendants().each( function(dec){ dec.writeAttribute( 'unselectable', 'on' ); }); $(elem).writeAttribute( 'unselectable', 'on' );},init_editor_button: function( elem ){ // What command are we running? elem.writeAttribute( 'cmd', elem.id.replace( this.id + '_cmd_', '' ) ); elem.writeAttribute( 'editor_id', this.id ); // Add to buttons array this.items['buttons'][ elem.readAttribute('cmd') ] = elem; // Set up defaults elem.writeAttribute('state', false); elem.writeAttribute('mode', 'normal'); elem.writeAttribute('real_type', 'button'); elem.observe( 'click', this.events.button_onmouse_event.bindAsEventListener( this ) ); elem.observe( 'mousedown', this.events.button_onmouse_event.bindAsEventListener( this ) ); elem.observe( 'mouseover', this.events.button_onmouse_event.bindAsEventListener( this ) ); elem.observe( 'mouseout', this.events.button_onmouse_event.bindAsEventListener( this ) );},/* ------------------------------ *//** * Builds a simple menu * * @var {element} elem The relevant element*/init_editor_menu: function( elem ){ // Build the details elem.writeAttribute( 'cmd', elem.id.replace( this.id + '_cmd_', '' ) ); elem.writeAttribute( 'editor_id', this.id ); this.items['buttons'][ elem.readAttribute('cmd') ] = elem; // Build wrapper var wrap = new Element('ul', { id: this.id + '_popup_' + elem.readAttribute('cmd') + '_menu' } ); wrap.writeAttribute( 'cmd', elem.readAttribute('cmd' ) ).addClassName('ipbmenu_content'); wrap.hide(); if( elem.hasClassName('rte_font') ) { this.fontoptions[ '_default' ] = elem.innerHTML; ipb.editor_values.get('primary_fonts').each( function(font){ var item = new Element( 'li', { 'id': this.id + '_fontoption_' + font.key } ); item.setStyle( 'font-family: "' + font.value + '"; cursor: pointer' ).addClassName('fontitem'); item.update( font.value ); $( item ).observe( 'click', this.events.font_format_option_onclick.bindAsEventListener( this ) ); wrap.insert( item ); this.fontoptions[ font.key ] = item; }.bind(this)); elem.insert( { after: wrap } ); } else if( elem.hasClassName('rte_fontsize') ) { this.sizeoptions[ '_default' ] = elem.innerHTML; ipb.editor_values.get('font_sizes').each( function( size ){ var item = new Element( 'li', { id: this.id + '_sizeoption_' + size } ); item.setStyle( 'font-size: ' + this.convert_size( size, 1 ) + 'px; cursor: pointer' ).addClassName('fontitem'); item.update( size ); $( item ).observe( 'click', this.events.font_format_option_onclick.bindAsEventListener( this ) ); wrap.insert( item ); wrap.addClassName("fontsizes"); this.sizeoptions.push( size ); }.bind(this)); elem.insert( { after: wrap } ); } else if( elem.hasClassName('rte_special') ) { /*ipb.editor_values.get('other_styles').each( function(style){ var item = new Element( 'li', { id: this.id + '_otherstyle_' + style.key } ).setStyle('cursor: pointer;').addClassName('specialitem'); item.update( style.value[0] ); //$( item ).observe( 'click', this.events.other_styles_onclick.bindAsEventListener( this ) ); wrap.insert( item ); // Set up palette var item_wrap = new Element('div', {id: this.id + '_palette_other_' + style.key } ); item_wrap.hide().addClassName('ipb_palette').addClassName('extended'); item_wrap.writeAttribute("styleid", style.key); var _content = ipb.editor_values.get('templates')['generic'].evaluate( { id: this.id + '_' + style.key, title: style.value[0], example: style.value[3], option_text: style.value[5] || '', value_text: style.value[4] || '' } ); item_wrap.update( _content ); item_wrap.down('input[type="submit"]').observe('click', this.events.other_styles_onclick.bindAsEventListener( this ) ); $( this.id + '_controls').insert( { bottom: item_wrap } ); if( !style.value[2] ) { item_wrap.select('.optional').invoke('remove'); } this.palettes[ 'otherstyles_' + style.key ] = new ipb.Menu( $( item ), item_wrap, { stopClose: true, offsetX: 50, offsetY: 50 } ); $( item ).observe('click', this.events.other_styles_preshow_onclick.bindAsEventListener( this, style.key ) ); }.bind(this)); */ elem.insert( { after: wrap } ); } // Init function for IE var beforeOpen = function( menu ){ this.editor_check_focus(); this.preserve_ie_range(); Debug.write("Preserved IE Range"); }.bind(this); // Create new menu new ipb.Menu( $( elem ), wrap, {}, { beforeOpen: beforeOpen } ); },/* ------------------------------ *//** * Builds a palette * * @var {element} elem The relevant element*/init_editor_palette: function( elem ){ elem.writeAttribute( 'cmd', elem.id.replace( this.id + '_cmd_', '' ) ); elem.writeAttribute( 'editor_id', this.id ); this.items['buttons'][ elem.readAttribute('cmd') ] = elem; wrap = new Element('div', { id: this.id + '_palette_' + elem.readAttribute('cmd') } ); wrap.writeAttribute( 'cmd', elem.readAttribute('cmd') ).addClassName('ipb_palette'); wrap.hide(); opt = {}; var handleReturn = false; switch( elem.readAttribute('cmd') ) { case 'forecolor': case 'backcolor': var table = new Element('table', { id: this.id + '_' + elem.readAttribute('cmd') + '_palette' }).addClassName('rte_colors'); // At this point IE would quite like you to have a tbody too var tbody = new Element('tbody'); table.insert( tbody ); var tr = null; var td = null; var color = ''; for( i=0; i < ipb.editor_values.get('colors').length; i++ ) { color = ipb.editor_values.get('colors')[i]; if( i % ipb.editor_values.get('colors_perrow') == 0 ){ tr = new Element('tr'); tbody.insert( tr ); } td = new Element('td', { id: this.id + '_' + elem.readAttribute('cmd') + '_color_' + color } ); td.setStyle('background-color: #' + color).setStyle('background-image: none').writeAttribute('colorname', color); tr.insert( td ); // Events $( td ).observe('click', this.events.color_cell_onclick.bindAsEventListener( this ) ); } wrap.insert( table ).addClassName('color_palette'); elem.insert( { after: wrap } ); break; /*case 'emoticons': if( Object.isUndefined( ipb.editor_values.get('emoticons') ) ) { elem.hide(); return; } /*var table = new Element( 'ul', { id: this.id + '_emoticons_palette' } ).addClassName('rte_emoticons'); var perrow = 10; var row = null; var i = 0; ipb.editor_values.get('emoticons').each( function(emote){ var _tmp = emote.value.split(','); var img = new Element('img', { id: 'smid_' + _tmp[0], src: ipb.vars['emoticon_url'] + '/' + _tmp[1] } ); var li = new Element('li', { id: this.id + '_emoticons_emote_' + _tmp[0] } ).setStyle('').addClassName('emote'); li.writeAttribute('emo_id', _tmp[0] ); li.writeAttribute('emo_img', _tmp[1] ); li.writeAttribute('emo_code', emote.key); table.insert( li.insert( img ) ); $( li ).observe('click', this.events.emoticon_onclick.bindAsEventListener( this ) ); }.bind(this)); //------------- var table = new Element( 'table', { id: this.id + '_emoticons_palette' } ).addClassName('rte_emoticons'); // Same as before, tbody please, says IE var tbody = new Element('tbody'); table.insert( tbody ); var tr = null; var td = null; var perrow = 10; var i = 0; //Debug.write( ipb.editor_values.get('emoticons') ); ipb.editor_values.get('emoticons').each( function(emote){ if( i % perrow == 0 ) { tr = new Element( 'tr' ); tbody.insert( tr ); } i++; var _tmp = emote.value.split(','); var img = new Element('img', { id: 'smid_' + _tmp[0], src: ipb.vars['emoticon_url'] + '/' + _tmp[1] } ); td = new Element('td', { id: this.id + '_emoticons_emote_' + _tmp[0] } ).setStyle('cursor: pointer; text-align: center').addClassName('emote'); td.writeAttribute('emo_id', _tmp[0] ); td.writeAttribute('emo_img', _tmp[1] ); td.writeAttribute('emo_code', emote.key); td.insert( img ); tr.insert( td ); $( td ).observe('click', this.events.emoticon_onclick.bindAsEventListener( this ) ); }.bind(this)); // IE sucks if( Prototype.Browser.IE ) { var tmpdiv = new Element( 'div' ).setStyle('overflow-x: scroll'); wrap.insert( tmpdiv.insert( table ) ).addClassName('emoticons_palette'); elem.insert( { after: wrap } ); } else { wrap.insert( table ).addClassName('emoticons_palette'); elem.insert( { after: wrap } ); } if( this.values.get('show_emoticon_link') ) { var emote_link = this.values.get('templates')['emoticons_showall'].evaluate( { id: this.id } ); wrap.insert( { bottom: emote_link } ); $( this.id + '_all_emoticons' ).observe( 'click', this.events.show_emoticon_sidebar.bindAsEventListener( this ) ); } break;*/ case 'link': case 'image': case 'email': case 'media': if( Object.isUndefined( ipb.editor_values.get('templates')[ elem.readAttribute('cmd') ] ) ) { elem.hide(); return; } try { wrap.update( ipb.editor_values.get('templates')[ elem.readAttribute('cmd') ].evaluate( { id: this.id } ) ); wrap.down('input[type="submit"]').observe('click', this.events.palette_submit.bindAsEventListener( this ) ); } catch( err ) { Debug.write("#7 " + err); } this.doc_body.insert( { top: wrap } ); if( elem.readAttribute('cmd') == 'link' ) { try { this.defaults['link_text'] = $F( this.id + '_urltext' ); this.defaults['link_url'] = $F( this.id + '_url' ); } catch( err ){ Debug.write( "#8 " + err ); } $( elem ).observe('click', this.events.link_onclick.bindAsEventListener( this ) ); } if( elem.readAttribute('cmd') == 'image' ) { try { this.defaults['img'] = $F( this.id + '_img' ); } catch( err ){ Debug.write( "#15 " + err ); } $( elem ).observe('click', this.events.image_onclick.bindAsEventListener( this ) ); } if( elem.readAttribute('cmd') == 'email' ) { try { this.defaults['email_text'] = $F( this.id + '_emailtext' ); this.defaults['email'] = $F( this.id + '_email' ); } catch( err ){ Debug.write( "#8 " + err ); } $( elem ).observe('click', this.events.email_onclick.bindAsEventListener( this ) ); } if( elem.readAttribute('cmd') == 'media' ) { try { this.defaults['media'] = $F( this.id + '_media' ); } catch( err ){ Debug.write( "#17 " + err ); } $( elem ).observe('click', this.events.media_onclick.bindAsEventListener( this ) ); } this.key_handlers[ elem.readAttribute('cmd') ] = false; break; default: this.items['buttons'][ elem.readAttribute( 'cmd' ) ] = null; elem.hide(); // Hide since we dont know what to do with it wrap.remove(); break; } // Insert title if( elem.readAttribute('title' ) ) { title = new Element( 'div' ); title.update( elem.readAttribute('title') ).addClassName('rte_title'); wrap.insert( { top: title } ); } if( !elem.readAttribute('cmd').endsWith('color') ){ opt = { stopClose: true }; } $( elem ).observe('mouseover', this.events.palette_button_onmouseover.bindAsEventListener( this ) ); $( elem ).observe('mouseover', this.events.palette_onmouse_event.bindAsEventListener( this ) ); $( elem ).observe('mouseout', this.events.palette_onmouse_event.bindAsEventListener( this ) ); // Init function for IE var beforeOpen = function( menu ){ this.editor_check_focus(); this.preserve_ie_range(); Debug.write("Preserved IE Range"); }.bind(this); //this.doc_body.insert( wrap.setStyle('position: absolute; top:0px; left:0px;') ); this.palettes[ elem.readAttribute('cmd') ] = new ipb.Menu( $( elem ), wrap, opt, { beforeOpen: beforeOpen } );},convert_size: function( size, type ){ if( type == 1 ) { switch( size ) { case 1: return 9; break; case 2: return 13; break; case 3: return 15; break; case 4: return 17; break; case 5: return 21; break; case 6: return 26; break; case 7: return 36; break; default: return 13; } } else { switch( size ) { case '7.5pt': case '9px': return 1; case '13px': return 2; case '15px': return 3; case '17px': return 4; case '21px': return 5; case '26px': return 6; case '36px': return 7; default: return ''; } }},format_text: function( e, command, arg ){ // Check for special commands if( command.startsWith( 'resize_' ) ){ // } if( command == 'switcheditor' ){ try { ipb.switchEditor( this.id ); } catch(err) { Debug.error( "#9 " + err ); } } // Recording state? if ( ! this.is_rte && command != 'redo' ){ this.history_record_state( this.editor_get_contents() ); } this.editor_check_focus(); // Execute command if ( this[ command ] ) { var return_val = this[ command ](e); } else { try { /*Debug.write( "In format text, selection is: " + this.get_selection() );*/ var return_val = this.apply_formatting( command, false, (typeof arg == 'undefined' ? true : arg) ); } catch(e) { Debug.warn( "#10 " + e ); var return_val = false; } } // Recording state if ( ! this.is_rte && command != 'undo' ){ this.history_record_state( this.editor_get_contents() ); } // Set context this.set_context(command); // Check focus this.editor_check_focus(); return return_val;},spellcheck: function(){ // Only IE can use this if( !Prototype.Browser.IE ){ return; } try { if ( this.rte_mode ){ var tmpis = new ActiveXObject("ieSpell.ieSpellExtension").CheckDocumentNode( this.editor_document ); } else { var tmpis = new ActiveXObject("ieSpell.ieSpellExtension").CheckAllLinkedDocuments( this.editor_document ); } } catch( exception ) { if ( exception.number == -2146827859 ) { if ( confirm( ipb.lang['js_rte_erroriespell'] ? ipb.lang['js_rte_erroriespell'] : "ieSpell not detected. Click Ok to go to download page." ) ) { window.open("http://www.iespell.com/download.php", "Download"); } } else { alert( ipb.lang['js_rte_errorloadingiespell'] ? ipb.lang['js_rte_errorloadingiespell'] : "Error Loading ieSpell: Exception " + exception.number); } } },wrap_tags: function(tag_name, has_option, selected_text){ //----------------------------------------- // Fix up for HTML use //----------------------------------------- var tag_close = tag_name; if ( ! this.use_bbcode ) { switch( tag_name ) { case 'url': tag_name = 'a href'; tag_close = 'a'; break; case'email': tag_name = 'a href'; tag_close = 'a'; has_option = 'mailto:' + has_option; break; case 'img': tag_name = 'img src'; tag_close = ''; break; case 'font': tag_name = 'font face'; tag_close = 'font'; break; case 'size': tag_name = 'font size'; tag_close = 'font'; break; case 'color': tag_name = 'font color'; tag_close = 'font'; break; case 'background': tag_name = 'font bgcolor'; tag_close = 'font'; break; case 'indent': tag_name = tag_close = 'blockquote'; break; case 'left': case 'right': case 'center': has_option = tag_name; tag_name = 'div align'; tag_close = 'div'; break; } } //----------------------------------------- // Got selected text? //----------------------------------------- if ( Object.isUndefined( selected_text ) ) { selected_text = this.get_selection(); selected_text = (selected_text === false) ? '' : new String(selected_text); } //----------------------------------------- // Using option? //----------------------------------------- if ( has_option === true ) { var option = prompt( ips_language_arrayp['js_rte_optionals'] ? ips_language_arrayp['js_rte_optionals'] : "Enter the optional arguments for this tag", ''); if ( option ) { var opentag = this.open_brace + tag_name + '="' + option + '"' + this.close_brace; } else { return false; } } else if ( has_option !== false ) { var opentag = this.open_brace + tag_name + '="' + has_option + '"' + this.close_brace; } else { var opentag = this.open_brace + tag_name + this.close_brace; } var closetag = ( tag_close != '' ) ? this.open_brace + '/' + tag_close + this.close_brace : ''; var text = opentag + selected_text + closetag; //Debug.write( text ); /*Debug.write("Wrap tags selection is: " + this.get_selection() );*/ this.insert_text( text ); return false;},/* ! wrap_tags_lite */wrap_tags_lite: function( start_text, close_text, replace_selection ){ selected_text = ''; if( Object.isUndefined( replace_selection ) || replace_selection == 0 ) { // Got selected text? selected_text = this.get_selection(); selected_text = (selected_text === false) ? '' : new String(selected_text); } this.insert_text( start_text + selected_text + close_text ); return false;},/* ! preserve_ie_range */preserve_ie_range: function(){ if ( Prototype.Browser.IE && document.selection && ! this.emoClick ) { /* Don't preserve range for emoticon click. It buggers things up epically */ this._ie_cache = this.is_rte ? ( this.editor_document.selection.createRange ) ? this.editor_document.selection.createRange() : null : document.selection.createRange(); Debug.write( "Preserved IE Range: "); this.emoClick = false; }},clean_html: function( t ){ if ( t.blank() || Object.isUndefined(t) ) { return t; } // Sort out BR tags t = t.replace( /<br>/ig, "<br />"); // Remove empty <p> tags t = t.replace( /<p>(\s+?)?<\/p>/ig, ""); // HR issues t = t.replace( /<p><hr \/><\/p>/ig , "<hr />"); t = t.replace( /<p> <\/p><hr \/><p> <\/p>/ig, "<hr />"); // Attempt to fix some formatting issues... t = t.replace( /<(p|div)([^&]*)>/ig , "\n<$1$2>\n" ); t = t.replace( /<\/(p|div)([^&]*)>/ig , "\n</$1$2>\n"); t = t.replace( /<br \/>(?!<\/td)/ig , "<br />\n" ); // And some table issues... t = t.replace( /<\/(td|tr|tbody|table)>/ig , "</$1>\n"); t = t.replace( /<(tr|tbody|table(.+?)?)>/ig , "<$1>\n" ); t = t.replace( /<(td(.+?)?)>/ig , "\t<$1>" ); // Newlines t = t.replace( /<p> <\/p>/ig , "<br />"); t = t.replace( /<br \/>/ig , "<br />\n"); t = t.replace( /<br>/ig , "<br />\n"); t = t.replace( /<td><br \/>\n<\/td>/ig , "<td><br /></td>" ); // Script tags t = t.replace( /<script/g , "<script" ); t = t.replace( /<\/script>/g , "</script>" ); t = t.replace( /^[\s\n\t]+/g, '' ); t = t.replace( /[\s\n\t]+$/g, '' ); t = t.replace( /<br \/>$/g, '' ); return t;},strip_empty_html: function( html ){ html = html.replace( '<([^>]+?)></([^>]+?)>', ""); return html;},strip_html: function( html ){ html = html.replace( /<\/?([^>]+?)>/ig, ""); return html;},history_record_state: function( content ){ // Make sure we're not recording twice if ( this.history_recordings[ this.history_pointer ] != content ) { this.history_pointer++; this.history_recordings[ this.history_pointer ] = content; // Make sure we've not gone back in time if ( !Object.isUndefined( this.history_recordings[this.history_pointer + 1] ) ) { this.history_recordings[this.history_pointer + 1] = null; } }},unhtmlspecialchars: function( html ){ html = html.replace( /"/g, '"' ); html = html.replace( /</g , '<' ); html = html.replace( />/g , '>' ); html = html.replace( /&/g , '&' ); return html;},htmlspecialchars: function( html ){ html = html.replace(/&/g, "&"); html = html.replace(/"/g, """); html = html.replace(/</g, "<"); html = html.replace(/>/g, ">"); return html;},history_time_shift: function( inc ){ var i = this.history_pointer + inc; if ( i >= 0 && this.history_recordings[ i ] != null && typeof this.history_recordings[ i ] != 'undefined' ) { this.history_pointer += inc; }},history_fetch_recording: function(){ if ( !Object.isUndefined( this.history_recordings[ this.history_pointer ] ) && this.history_recordings[ this.history_pointer ] != null ) { return this.history_recordings[ this.history_pointer ]; } else { return false; }},ipb_quote: function(){ this.wrap_tags_lite( '[quote]', '[/quote]', 0);},ipb_code: function(){ this.wrap_tags_lite( '[code]', '[/code] ', 0);},toggleEmoticons: function( e ){ if( this.showing_sidebar ) { $( this.id + '_sidebar').hide(); $( 'editor_' + this.id ).removeClassName('with_sidebar'); ipb.Cookie.set( 'emoticon_sidebar', 0, 0 ); this.showing_sidebar = false; } else { if( this.emoticons_loaded ) { $( this.id + '_emoticon_holder' ).show(); } else { this.buildEmoticons(); } $( this.id + '_sidebar' ).show(); $( 'editor_' + this.id ).addClassName('with_sidebar'); ipb.Cookie.set( 'emoticon_sidebar', 1, 1 ); this.showing_sidebar = true; } },buildEmoticons: function(){ var table = new Element( 'table', { id: this.id + '_emoticons_palette' } ).addClassName('rte_emoticons'); var tbody = new Element('tbody'); // IE needs a tbody table.insert( tbody ); var perrow = 2; var classname = '1'; var i = 0; //Cycle through emoticons list to build ipb.editor_values.get('emoticons').each( function(emote){ if( i % perrow == 0 ) { tr = new Element( 'tr' ).addClassName('row' + classname); tbody.insert( tr ); classname = ( classname == '1' ) ? '2' : '1'; } i++; var _tmp = emote.value.split(','); var img = new Element('img', { id: 'smid_' + _tmp[0], src: ipb.vars['emoticon_url'] + '/' + _tmp[1] } ); td = new Element('td', { id: this.id + '_emoticons_emote_' + _tmp[0] } ).setStyle('cursor: pointer; text-align: center').addClassName('emote'); td.writeAttribute('emo_id', _tmp[0] ); td.writeAttribute('emo_img', _tmp[1] ); td.writeAttribute('emo_code', emote.key); td.insert( img ); tr.insert( td ); $( td ).observe('click', this.events.emoticon_onclick.bindAsEventListener( this ) ); }.bind(this)); $( this.id + '_emoticon_holder' ).update( table ).show(); this.emoticons_loaded = true; if( $( this.id + '_showall_emoticons' ) ){ $( this.id + '_showall_emoticons' ).observe('click', this.showAllEmoticons.bindAsEventListener( this )); } if( $( this.id + '_close_sidebar' ) ){ $( this.id + '_close_sidebar' ).observe('click', this.toggleEmoticons.bindAsEventListener( this ) ); }},showAllEmoticons: function( e ){ // Get the emoticons if( Object.isUndefined( inACP ) || inACP == false ){ var url = ipb.vars['base_url']; } else { var url = ipb.vars['front_url']; } url += "app=forums&module=ajax&section=emoticons&editor_id=" + this.id + "&secure_key=" + ipb.vars['secure_hash']; new Ajax.Request( url.replace(/&/g, '&'), { method: 'get', onSuccess: function(t) { $( this.id + '_emoticon_holder').update( t.responseText ); if( $( this.id + '_showall_bar' ) ){ $( this.id + '_showall_bar' ).hide(); $( this.id + '_emoticon_holder').addClassName('no_bar'); } }.bind(this) }); }});//==============================================================================================================//// MOZ SPECIFIC CODEif( ( Prototype.Browser.Gecko || Prototype.Browser.WebKit ) && USE_RTE ){_editor.prototype.editor.prototype.ORIGINAL_editor_set_content = _editor.prototype.editor.prototype.editor_set_content;_editor.prototype.editor.prototype.ORIGINAL_apply_formatting = _editor.prototype.editor.prototype.apply_formatting;Debug.write( "Adding mozilla-specific methods" );_editor.prototype.editor.addMethods({ _moz_test: function() { return "Test: " + this.id; }, togglesource_pre_show_html: function() { this.editor_document.designMode = 'off'; }, togglesource_post_show_html: function() { this.editor_document.designMode = 'on'; }, editor_set_content: function( initial_text ) { this.ORIGINAL_editor_set_content( initial_text ); Event.observe( this.editor_document, 'keypress', this.events.editor_document_onkeypress.bindAsEventListener(this) ); // Remove spellcheck button if( $( this.id + '_cmd_spellcheck' ) ){ $( this.id + '_cmd_spellcheck' ).hide(); this.hidden_objects[ this.id + '_cmd_spellcheck' ] = 1; } // Kill tags if ( this.use_bbcode && $( this.id + '_cmd_justifyfull' ) ) { $( this.id + '_cmd_justifyfull' ).hide(); this.hidden_objects[ this.id + '_cmd_justifyfull' ] = 1; } // Go on.. cursor, flash you bastard try { var _y = parseInt( window.pageYOffset ); // Sometimes moves the focus to the RTE this.editor_document.execCommand("inserthtml", false, " "); this.editor_document.execCommand("undo" , false, null); // Restore Y scroll( 0, _y ); } catch(error) { Debug.write( "#11 " + error ); } }, editor_set_functions: function() { Event.observe( this.editor_document, 'mouseup', this.events.editor_document_onmouseup.bindAsEventListener(this) ); Event.observe( this.editor_document, 'keyup', this.events.editor_document_onkeyup.bindAsEventListener(this) ); Event.observe( this.editor_document, 'keydown', this.events.editor_document_onkeydown.bindAsEventListener(this) ); Event.observe( this.editor_window, 'focus', this.events.editor_window_onfocus.bindAsEventListener( this ) ); Event.observe( this.editor_window, 'blur', this.events.editor_window_onblur.bindAsEventListener( this ) ); }, apply_formatting: function(cmd, dialog, arg) { // Moz fix to allow list button click before clicking in RTE if ( cmd != 'redo' ) { this.editor_document.execCommand("inserthtml", false, " "); this.editor_document.execCommand("undo" , false, null); } this.editor_document.execCommand( 'useCSS', false, true ); this.editor_document.execCommand( 'styleWithCSS', false, false ); return this.ORIGINAL_apply_formatting(cmd, dialog, arg); }, get_selection: function() { var selection = this.editor_window.getSelection(); this.editor_check_focus(); var range = selection ? selection.getRangeAt(0) : this.editor_document.createRange(); return this.moz_read_nodes( range.cloneContents(), false ); }, moz_add_range: function(node, text_length) { /*Debug.write( "In moz_add_range" );*/ this.editor_check_focus(); var sel = this.editor_window.getSelection(); var range = this.editor_document.createRange(); range.selectNodeContents(node); if ( text_length ) { range.setEnd( node, text_length); range.setStart(node, text_length); } sel.removeAllRanges(); sel.addRange(range); }, moz_read_nodes: function(root, toptag) { var html = ""; var moz_check = /_moz/i; switch (root.nodeType) { case Node.ELEMENT_NODE: case Node.DOCUMENT_FRAGMENT_NODE: { var closed; if (toptag) { closed = ! root.hasChildNodes(); html = '<' + root.tagName.toLowerCase(); var attr = root.attributes; for (var i = 0; i < attr.length; ++i) { var a = attr.item(i); if (!a.specified || a.name.match(moz_check) || a.value.match(moz_check)) { continue; } html += " " + a.name.toLowerCase() + '="' + a.value + '"'; } html += closed ? " />" : ">"; } for (var i = root.firstChild; i; i = i.nextSibling) { html += this.moz_read_nodes(i, true); } if (toptag && !closed) { html += "</" + root.tagName.toLowerCase() + ">"; } } break; case Node.TEXT_NODE: { html = this.htmlspecialchars(root.data); } break; } return html; }, moz_goto_parent_then_body: function( n ) { var o = n; while (n.parentNode != null && n.parentNode.nodeName == 'HTML') { n = n.parentNode; } if (n) { for ( var c = 0; c < n.childNodes.length; c++ ) { if ( n.childNodes[c].nodeName == 'BODY' ) { return n.childNodes[c]; } } } return o; }, moz_insert_node_at_selection: function(text, text_length) { this.editor_check_focus(); var sel = this.editor_window.getSelection(); var range = sel ? sel.getRangeAt(0) : this.editor_document.createRange(); sel.removeAllRanges(); range.deleteContents(); var node = range.startContainer; var pos = range.startOffset; text_length = text_length ? text_length : 0; if ( node.nodeName == 'HTML' ) { node = this.moz_goto_parent_then_body( node ); } switch (node.nodeType) { case Node.ELEMENT_NODE: { if (text.nodeType == Node.DOCUMENT_FRAGMENT_NODE) { selNode = text.firstChild; } else { selNode = text; } node.insertBefore(text, node.childNodes[pos]); this.moz_add_range(selNode, text_length); } break; case Node.TEXT_NODE: { if (text.nodeType == Node.TEXT_NODE) { var text_length = pos + text.length; node.insertData(pos, text.data); range = this.editor_document.createRange(); range.setEnd(node, text_length); range.setStart(node, text_length); sel.addRange(range); } else { node = node.splitText(pos); var selNode; if (text.nodeType == Node.DOCUMENT_FRAGMENT_NODE) { selNode = text.firstChild; } else { selNode = text; } node.parentNode.insertBefore(text, node); this.moz_add_range(selNode, text_length); } } break; } sel.removeAllRanges(); }, insert_text: function(str, len) { fragment = this.editor_document.createDocumentFragment(); holder = this.editor_document.createElement('span'); holder.innerHTML = str; while (holder.firstChild){ fragment.appendChild( holder.firstChild ); } var my_length = parseInt( len ) > 0 ? len : 0; this.moz_insert_node_at_selection( fragment, my_length ); }, insert_emoticon: function( emo_id, emo_image, emo_code, event ) { this.editor_check_focus(); try { // INIT var _emo_url = ipb.vars['emoticon_url'] + "/" + emo_image; this.editor_document.execCommand('InsertImage', false, _emo_url); var images = this.editor_document.getElementsByTagName('img'); //---------------------------------- // Sort through and fix emo //---------------------------------- if ( images.length > 0 ) { for ( var i = 0 ; i <= images.length ; i++ ) { if ( !Object.isUndefined( images[i] ) && images[i].src.match( new RegExp( _emo_url + "$" ) ) ) { if ( ! images[i].getAttribute('alt') ) { images[i].setAttribute( 'alt', this.unhtmlspecialchars( emo_code ) ); images[i].setAttribute( 'class', 'bbc_emoticon' ); } } } } } catch(error) { Debug.write( "#12 " + error ); //alert( error ); } if ( this.emoticon_window_id != '' && typeof( this.emoticon_window_id ) != 'undefined' ) { this.emoticon_window_id.focus(); } }});};//==============================================================================================================//// OPERA SPECIFIC CODEif( Prototype.Browser.Opera && USE_RTE ){_editor.prototype.editor.prototype.ORIGINAL_editor_set_content = _editor.prototype.editor.prototype.editor_set_content;_editor.prototype.editor.addMethods({ editor_set_content: function(initial_text) { this.ORIGINAL_editor_set_content(initial_text); // Opera doesn't auto 100% the height, so // lets force the body to be 100% high this.editor_document.body.style.height = '95%'; Event.observe( this.editor_document, 'keypress', this.events.editor_document_onkeypress.bindAsEventListener( this ) ); // Remove spellcheck button if ( $( this.id + '_cmd_spellcheck' ) ) { $( this.id + '_cmd_spellcheck' ).hide(); this.hidden_objects[ this.id + '_cmd_spellcheck' ] = 1; } // Kill tags if ( this.use_bbcode ) { $( this.id + '_cmd_justifyfull' ).hide(); this.hidden_objects[ this.id + '_cmd_justifyfull' ] = 1; } // Go on.. cursor, flash you bastard try { var _y = parseInt( window.pageYOffset ); // Sometimes moves the focus to the RTE this.editor_document.execCommand("inserthtml", false, "-"); this.editor_document.execCommand("undo" , false, null); // Restore Y scroll( 0, _y ); } catch(error) { Debug.write( "#13 " + error ); } }, insert_text: function(str) { this.editor_document.execCommand('insertHTML', false, str); }, get_selection: function() { var selection = this.editor_window.getSelection(); this.editor_check_focus(); var range = selection ? selection.getRangeAt(0) : this.editor_document.createRange(); var lsserializer = document.implementation.createLSSerializer(); return lsserializer.writeToString(range.cloneContents()); }, editor_set_functions: function() { Event.observe( this.editor_document, 'mouseup', this.events.editor_document_onmouseup.bindAsEventListener( this ) ); Event.observe( this.editor_document, 'keyup', this.events.editor_document_onkeyup.bindAsEventListener( this ) ); Event.observe( this.editor_window, 'focus', this.events.editor_window_onfocus.bindAsEventListener( this ) ); Event.observe( this.editor_window, 'blur', this.events.editor_window_onblur.bindAsEventListener( this ) ); }});}//==============================================================================================================//// EVENTS_editor_events = Class.create({handle_custom_command: function( e, cmd ){ Event.stop(e); //Debug.write( Event.element(e) ); var elem = ( $( Event.element(e) ).hasClassName('specialitem') ) ? $( Event.element(e) ) : $( Event.element( e ) ).up('.specialitem'); if( !$( elem ) ){ return; } var cmd = $( elem ).id.replace( this.id + '_cmd_custom_', '' ); var info = this.values.get('bbcodes').get( cmd ); Debug.write( cmd ); if( info['single_tag'] == '1' && info['useoption'] == '0' ) { this.wrap_tags_lite( '[' + info['tag'] + ']', '', 1); ipb.menus.registered.get( this.id + '_cmd_otherstyles' ).doClose(); return; } else { var selection = this.get_selection(); try { window.setTimeout( function() { if( info['useoption'] == '1' && info['single_tag'] == '1' ) { if( $( this.id + '_' + cmd + '_option') ){ $( this.id + '_' + cmd + '_option' ).focus(); } } else { if( selection ) { $( this.id + '_' + cmd + '_text' ).value = selection; } if( $( this.id + '_' + cmd + '_option') ){ $( this.id + '_' + cmd + '_option' ).focus(); } else { $( this.id + '_' + cmd + '_text' ).activate(); } } }.bind(this), 200 ); } catch( err ){ Debug.write( err ); } }},handle_custom_onclick: function(e){ Debug.write("Here 5"); var elem = Event.element(e); if( !elem.hasClassName('ipb_palette') ){ elem = Event.findElement(e, '.ipb_palette'); } var styleid = elem.readAttribute("styleid"); if( !styleid || Object.isUndefined( this.values.get('bbcodes').get( styleid ) ) ) { return; } var info = this.values.get('bbcodes').get( styleid ); Debug.write("Here 4"); // Check for required option if( info['useoption'] == '1' && info['optional_option'] == '0' && $F( this.id + '_' + styleid + '_option' ).blank() ) { alert( ipb.lang['option_is_empty'] ); try { $( this.id + '_' + styleid + '_option' ).focus(); } catch( err ){ } return; } Debug.write("Here 3"); // Now work out what kind of tag to build... if( info['useoption'] == '1' && info['single_tag'] == '1' ) { var option = $F( this.id + '_' + styleid + '_option' ); if( info['optional_option'] == '1' && option.blank() ){ this.wrap_tags_lite( '[' + info['tag'] + ']', '', 1 ); } else { this.wrap_tags_lite( '[' + info['tag'] + "='" + option + "']", '', 1 ); } } else { Debug.write("Here 1"); var value = $F( this.id + '_' + styleid + '_text' ); Debug.write("Here 2"); var option = ( $(this.id + '_' + styleid + '_option') ) ? $F( this.id + '_' + styleid + '_option' ) : ''; // If this is RTE, change newlines to br tags. // @link http://community.invisionpower.com/tracker/issue-21173-line-breaks-arent-converted-to-%26lt%3Bbr%26gt%3B-in-code-popup-in-rte/ if( USE_RTE ) { value = value.replace( /\n/g, '<br />' ); } if( ( info['optional_option'] == '1' && option.blank() ) || info['useoption'] == '0' ){ this.wrap_tags_lite( '[' + info['tag'] + ']' + value, '[/' + info['tag'] + ']', 1 ); } else { this.wrap_tags_lite( '[' + info['tag'] + "='" + option + "']" + value, '[/' + info['tag'] + ']', 1 ); } } /*var value = $F( this.id + '_' + styleid + '_text' ); if( style[2] ){ var option = $F( this.id + '_' + styleid + '_option' ); this.wrap_tags_lite( '[' + style[1] + "='" + option + "']" + value, '[/' + style[1] + ']' ); } else { this.wrap_tags_lite( '[' + style[1] + ']' + value, '[/' + style[1] + ']' ); }*/ this.palettes[ 'otherstyles_' + styleid ].doClose();},/* ! editor_document_onmouseup */editor_document_onmouseup: function(e){ Debug.write("Mouse up"); ipb.menus.closeAll(); // Close menus this.set_context(); if ( Prototype.Browser.IE ) { //this.preserve_ie_range(); }},editor_document_onkeyup: function(e){ this.set_context();},editor_document_onkeydown: function(e){ //alert( this.forum_fix_ie_newlines + " " + Prototype.Browser.IE + " " + e.keyCode ); if ( this.forum_fix_ie_newlines && Prototype.Browser.IE && e.keyCode == Event.KEY_RETURN ) // Enter key { var _test = ['Indent', 'Outdent', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'InsertOrderedList', 'InsertUnorderedList']; for ( i=0; i< _test.length; i++ ) { if ( this.editor_document.queryCommandState( _test[ i ] ) ) { return true; } } var sel = this.editor_document.selection; var ts = this.editor_document.selection.createRange(); var t = ts.htmlText.replace(/<p([^>]*)>(.*)<\/p>/i, '$2'); if ( (sel.type == "Text" || sel.type == "None") ) { ts.pasteHTML( "<br />" + t + "\n" ); } else { this.editor_document.innerHTML += "<br />\n"; } this.editor_window.event.returnValue = false; ts.select(); this.editor_check_focus(); }},editor_document_onkeypress: function(e){ if ( e.ctrlKey ) { switch (String.fromCharCode(e.charCode).toLowerCase()) { case 'b': cmd = 'bold'; break; case 'i': cmd = 'italic'; break; case 'u': cmd = 'underline'; break; default: return; } //e.preventDefault(); Event.stop(e); this.apply_formatting(cmd, false, null); return false; }},editor_window_onfocus: function(e){ this.has_focus = true;},editor_window_onblur: function(e){ this.has_focus = false;},button_onmouse_event: function(e){ if( !Event.element(e).hasClassName( 'rte_control' ) ){ elem = $( Event.element(e) ).up('.rte_control'); } else { elem = Event.element(e); } Debug.write( elem.readAttribute('cmd') ); if ( e.type == 'click' ) { if( elem.readAttribute('cmd').startsWith('custom_') ) { // Return so that the custom styles code can run interruptedb return; } else if( elem.readAttribute('cmd') == 'help' ) { //Event.stop(e); if( inACP ) { window.open( ipb.vars['front_url'] + "&app=forums&module=extras&section=legends&do=bbcode", "bbcode", "status=0,toolbar=0,width=1024,height=800,scrollbars=1"); } else { window.open( ipb.vars['base_url'] + "&app=forums&module=extras&section=legends&do=bbcode", "bbcode", "status=0,toolbar=0,width=1024,height=800,scrollbars=1"); } Event.stop(e); return false; } else if( elem.readAttribute('cmd').startsWith('r_') ) { // Resize commands var editorSize = $( this.id + '_textarea' ).getHeight(); if( elem.readAttribute('cmd') == 'r_small' ){ this.resize_to( editorSize - 100 ); } else { this.resize_to( editorSize + 100 ); } } else if( elem.readAttribute('cmd') == 'emoticons' ) { this.toggleEmoticons( e ); } else { this.format_text( e, elem.readAttribute('cmd'), false, true); } } Event.stop(e); // Removed if(IE) check this.set_button_context(elem, e.type);},font_format_option_onclick: function(e){ if( !Event.element(e).hasClassName('fontitem') ){ elem = Event.element(e).up('.fontitem'); } else { elem = Event.element(e); } cmd = $( elem ).up('.ipbmenu_content').readAttribute('cmd'); //this.editor_check_focus(); //this.preserve_ie_range(); /*Debug.write( "Selection: " + this.get_selection() ); Debug.write( "Format text option: " + elem.innerHTML );*/ this.format_text(e, cmd, elem.innerHTML);},color_cell_onclick: function(e){ elem = Event.element(e); cmd = $( elem ).up('.ipb_palette').readAttribute('cmd'); this.format_text(e, cmd, '#' + elem.readAttribute('colorname')); this.palettes[ cmd ].doClose();},palette_button_onmouseover: function(e){ if( !Event.element(e).hasClassName( 'rte_palette' ) ){ elem = $( Event.element(e) ).up('.rte_palette'); } else { elem = Event.element(e); } elem.setStyle('cursor: pointer;');},palette_onmouse_event: function(e){ if( !Event.element(e).hasClassName( 'rte_control' ) ){ elem = $( Event.element(e) ).up('.rte_control'); } else { elem = Event.element(e); } if( e.type == 'mouseover' ){ $( elem ).addClassName('rte_hover'); } else { $( elem ).removeClassName('rte_hover'); }},palette_return_key: function(e){ /*elem = Event.element(e); palette = elem.up('.ipb_palette'); if( !palette ){ return; } cmd = palette.readAttribute('cmd'); if( e.keyCode == Event.KEY_RETURN ) { Debug.write( cmd ); var test = this.events.palette_submit.bind( this, e ); test(); test = null; Event.stop(e); }*/},palette_submit: function(e){ elem = Event.element(e); palette = elem.up('.ipb_palette'); if( !palette ){ return; } cmd = palette.readAttribute('cmd'); Debug.write( $( elem ).id + " " + $( palette ).id + " " + cmd ); // What are we doing? switch( cmd ) { case 'link': var url = $F( this.id + '_url' ); var text = $F( this.id + '_urltext' ); if( url == 'http://' || url.blank() ){ return; }; if( text.blank() ){ text = url; } this.wrap_tags( 'url', url, text ); break; case 'image': var img = $F( this.id + '_img' ); if( img == 'http://' || img.blank() ){ return; }; if ( ! this.is_rte ){ this.wrap_tags( 'img', false, img ); } else { this.wrap_tags( 'img', img, '' ); } break; case 'email': var email = $F( this.id + '_email' ); var text = $F( this.id + '_emailtext' ); if( email.blank() || email.indexOf('@') == -1 ){ return; } if( text.blank() ){ text = email; } this.wrap_tags( 'email', email, text ); break; case 'media': var url = $F( this.id + '_media' ); if( url.blank() ){ return; } if( ! this.is_rte ){ this.wrap_tags( 'media', false, url ); } else { this.wrap_tags_lite( ' ' + url, '' ); } break; } this.palettes[ cmd ].doClose();},emoticon_onclick: function(e){ Event.stop(e); var elem = Event.element(e); var emo = elem.up('.emote'); if( !emo ) { return false; } this.insert_emoticon( emo.readAttribute('emo_id'), emo.readAttribute('emo_img'), emo.readAttribute('emo_code'), e );},link_onclick: function(e){ // Any selected text? var selection = this.get_selection(); var _active = null; try { if( selection ) { Debug.write( "**selection: " + selection ); /* Got an image? */ if( selection.match( /<img/ ) || selection.match( /\[img\]/ ) ) { /* Make sure it's valid BBcode */ if ( ! this.is_rte ) { selection = selection.gsub( /<img src=['"]([^'"]+?)['"]\s+?\/>/, function( match ) { return ""; } ); } $( this.id + '_url' ).value = this.defaults['link_url']; $( this.id + '_urltext' ).value = selection; } else if( selection.match(/<a/) ) { if ( res = selection.match( /href="([^"]+?)"([^>]+?)?>([^<]+?)<\/a>/i ) ) { Debug.write( res ); if ( res.length ) { $( this.id + '_url' ).value = res[1]; $( this.id + '_urltext' ).value = res[3]; } else { $( this.id + '_url' ).value = selection.strip(); $( this.id + '_urltext' ).value = this.defaults['link_text']; } _active = $( this.id + '_urltext' ); } } else if( selection.match(/[A-Za-z]+:\/\/[A-Za-z0-9\.-]{3,}\.[A-Za-z]{3}/) ){ $( this.id + '_url' ).value = selection.strip(); $( this.id + '_urltext' ).value = this.defaults['link_text']; _active = $( this.id + '_urltext' ); } else { $( this.id + '_urltext' ).value = selection.strip(); $( this.id + '_url' ).value = this.defaults['link_url']; _active = $( this.id + '_url' ); } } else { $( this.id + '_urltext' ).value = this.defaults['link_text']; $( this.id + '_url' ).value = this.defaults['link_url']; _active = $( this.id + '_url' ); } if( !this.key_handlers[ 'url' ] ) { $( this.id + '_url' ).observe('keypress', this.events.palette_return_key.bindAsEventListener( this )); $( this.id + '_urltext' ).observe('keypress', this.events.palette_return_key.bindAsEventListener( this )); this.key_handlers[ 'url' ] = true; } window.setTimeout( function() { $( _active ).activate(); }.bind(this), 200 ); } catch(err){ Debug.write( "#13 " + err ); }},image_onclick: function(e){ var selection = this.get_selection(); var msg = ( selection && !selection.startsWith('<IMG') ) ? selection : this.defaults['img']; try { $( this.id + '_img' ).value = msg; if( !this.key_handlers[ 'image' ] ) { $( this.id + '_img' ).observe('keypress', this.events.palette_return_key.bindAsEventListener( this )); this.key_handlers[ 'image' ] = true; } window.setTimeout( function() { $( this.id + '_img' ).activate(); }.bind(this), 200 ); } catch(err){ Debug.write( "#14 " + err ); }},media_onclick: function(e){ var selection = this.get_selection(); var msg = ( selection ) ? selection : this.defaults['media']; try { $( this.id + '_media' ).value = msg; if( !this.key_handlers[ 'media' ] ) { $( this.id + '_media' ).observe('keypress', this.events.palette_return_key.bindAsEventListener( this )); this.key_handlers[ 'media' ] = true; } window.setTimeout( function() { $( this.id + '_media' ).activate(); }.bind(this), 200 ); } catch(err){ Debug.write( "#18 " + err ); }},email_onclick: function(e){ var selection = this.get_selection(); var _active = $( this.id + '_email' ); try { if( selection ) { if( selection.match(/([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+/) ) { $( this.id + '_email' ).value = selection.strip(); $( this.id + '_emailtext' ).value = this.defaults['email_text']; _active = $( this.id + '_emailtext' ); } else { $( this.id + '_emailtext' ).value = selection.strip(); $( this.id + '_email' ).value = this.defaults['email']; } } else { $( this.id + '_emailtext' ).value = this.defaults['email_text']; $( this.id + '_email' ).value = this.defaults['email']; } if( !this.key_handlers[ 'email' ] ) { $( this.id + '_email' ).observe('keypress', this.events.palette_return_key.bindAsEventListener( this )); $( this.id + '_emailtext' ).observe('keypress', this.events.palette_return_key.bindAsEventListener( this )); this.key_handlers[ 'email' ] = true; } window.setTimeout( function() { $( _active ).activate(); }.bind(this), 200 ); } catch( err ){ Debug.write( "#16 " + err ); }},show_emoticon_sidebar: function( e ){ // Get the emoticons if( Object.isUndefined( inACP ) || inACP == false ){ var url = ipb.vars['base_url']; } else { var url = ipb.vars['front_url']; } url += "app=forums&module=ajax&section=emoticons&editor_id=" + this.id; new Ajax.Request( url.replace(/&/g, '&'), { method: 'get', onSuccess: function(t) { // Add the sidebar $('editor_' + this.id).addClassName('with_sidebar'); var div = $('editor_' + this.id).down('.sidebar'); div.update( this.values.get('templates')['emoticon_wrapper'].evaluate( { id: this.id } ) ); $( this.id + '_emoticon_holder').update( t.responseText ); div.show(); this.palettes[ 'emoticons' ].doClose(); }.bind(this) });},//called staticallyaddEmoticon: function( code, id, img, editorid ){ try { this.insert_emoticon( '', img, code, '' ); } catch(err) { Debug.error( err ); }}});var x_expanded = new Array();function editorMinimize( key ){Debug.write( 'shrinking: ' + key );x_expanded[key] = 0;$(key + '_textarea').setStyle( { height: '70px' } );$('editor_' + key).removeClassName('ips_editor');$(key + '_controls').hide();/* is there value? */if ( $(key + '_textarea').value ){ editorExpand( key );}$(key + '_textarea').observe( 'focus', function(e) { editorExpand( key );} );}function editorExpand( key ){$H(x_expanded).each( function(i){ /* Shrink set up editors */ if ( i.key != key ) { editorCollapse( i.key ); }} );if ( !x_expanded[key] || x_expanded[key] == 0 ){ Debug.write(" expanding: " + key); $(key + '_controls').appear(); $('editor_' + key).addClassName('ips_editor'); ipb.editors[key] = new ipb.editor( key, USE_RTE ); $( ipb.editors[key ] ).resize_to( 250 ); x_expanded[ key ] = 1; try { ipb.editors[key].editor_window.focus(); } catch(err) { Debug.write( err ); }}}function editorCollapse(key){}/*_editor.prototype.switchEditor = function( editorID ){if( !ipb.editors[ editorID ] ){ Debug.error( "No editor found for ID " + editorID ); }var editor = ipb.editors[ editorID ];var url = ipb.vars['base_url'] + "app=";var newmode = !ipb.editors[ editorID ].is_rte;if( editor._loading ){ Debug.info("Editor is already loading") return false;} else { editor._loading = true;}}*/
  23. no dobra a jak już znajdę te pliki to co mam je usunąć, czy co?
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.