Avatar billede loproc Praktikant
05. juli 2005 - 13:40 Der er 4 kommentarer og
1 løsning

FCKeditor menubar

Hejsa

Jeg er ved at udvikle et system hvori FCKeditor skal integreres. Der er bare lige den lille ting, at værktøjslinien i fckeditoren ikke skal være i forbindelse med selve indtastningsområdet, men i toppen af vinduet (fixed position). Et alernativ kunne være at den var floating, så brugeren selv kan flytte den rundt.

Jeg har ikke kunnet finde noget om emnet, så umiddelbart tror jeg ikke at det lader sig gøre, uden heftige modifikationer i FCKeditor'en.

Det kan dog, er jeg sikker på, lade sig gøre at udstede kommandoer til FCKeditor'en via JavaScript, så man kan lave sin egen menubar. Her er problemet så bare at læse "status" på en knap (om den aktuelle markering er fed el. lign. for at "trykke den pågældende knap ned").

Findes der et sted derude et eksempel på hvordan det kan lade sig gøre at flytte den eksisterende menu, eller konstruere en ny?

På forhånd tak
Martin K
Avatar billede olebole Juniormester
05. juli 2005 - 14:01 #1
<ole>

Det ligner en betalingsopgave under kategorien 'Opgaver'  :)

/mvh
</bole>
Avatar billede loproc Praktikant
07. juli 2005 - 08:54 #2
Nu har det lykkedes mig at lave det meste selv... I får lige noget nyttigt kode:

//Selve menuen
<div id="mlToolbar" style="visibility: hidden;">
<img src="../fckeditor/editor/skins/silver/images/toolbar.start.gif" border="0">
<a href="#" name="Cut" onclick="press(this);"><img src="../fckeditor/editor/skins/silver/toolbar/cut.gif" border="0"></a>
<a href="#" name="Copy" onclick="press(this);"><img src="../fckeditor/editor/skins/silver/toolbar/copy.gif" border="0"></a>
<a href="#" name="Paste" onclick="press(this);"><img src="../fckeditor/editor/skins/silver/toolbar/paste.gif" border="0"></a>
<a href="#" name="Undo" onclick="press(this);"><img src="../fckeditor/editor/skins/silver/toolbar/undo.gif" border="0"></a>
<a href="#" name="Redo" onclick="press(this);"><img src="../fckeditor/editor/skins/silver/toolbar/redo.gif" border="0"></a>
<a href="#" name="Bold" onclick="press(this);"><img src="../fckeditor/editor/skins/silver/toolbar/bold.gif" border="0"></a>
<a href="#" name="Italic" onclick="press(this);"><img src="../fckeditor/editor/skins/silver/toolbar/italic.gif" border="0"></a>
<a href="#" name="Underline" onclick="press(this);"><img src="../fckeditor/editor/skins/silver/toolbar/underline.gif" border="0"></a>
<a href="#" name="StrikeThrough" onclick="press(this);"><img src="../fckeditor/editor/skins/silver/toolbar/strikethrough.gif" border="0"></a>
<a href="#" name="Superscript" onclick="press(this);"><img src="../fckeditor/editor/skins/silver/toolbar/superscript.gif" border="0"></a>
<a href="#" name="Subscript" onclick="press(this);"><img src="../fckeditor/editor/skins/silver/toolbar/subscript.gif" border="0"></a>
</div>

//Funktion der læser status på knapperne i FCKeditor (disabled, on, off)
function updateToolbar() {
    var toolbar = document.getElementById('mlToolbar');
   
    var items = toolbar.getElementsByTagName('a');
    var i;
    for (i=0; i < items.length; i++) {
        var item = items[i];
        if (item.name) updateButton (item);
    }
   
    setTimeout('updateToolbar()', 300);
}

//Funktion der opdaterer en enkelt knap's status
function updateButton( button ) {
    var command = button.name;
    var state = getState(command);
   
    switch (state) {
        case -1:
            if (button.className != 'disabled') button.className = 'disabled';
            break;
        case 0:
            if (button.className != '') button.className = '';
            break;
        case 1:
            if (button.className != 'down') button.className = 'down';
            break;
    }   
}

//Funktion, der kontakter FCKeditor instansen, og returnerer status for en knap
function getState( commandName ) {
    var oEditor = FCKeditorAPI.GetInstance('PageContent') ;
    return oEditor.Commands.GetCommand( commandName ).GetState();
}

//Funktion til at eksekvere en kommando i FCKeditor
function press( button ) {
    var commandName = button.name;
    var oEditor = FCKeditorAPI.GetInstance('PageContent') ;
    oEditor.Commands.GetCommand( commandName ).Execute() ;
}

//FCKeditor eksekverer denne, når den er færdig med at loade
function FCKeditor_OnComplete( editorInstance ) {
    // Vis masterlab toolbar'en
    document.getElementById('mlToolbar').style.visibility = '';
    updateToolbar();
}
Avatar billede loproc Praktikant
07. juli 2005 - 08:59 #3
Nu er problemet bare at kunne vælge farver, og vælge i comboboxes...
Der er en kommando til at vælge farve, der hedder TextColor, men den virker bare ikke. Der sker intet når man sender den. Derfor forsøger jeg med at finde en dialog frem, hvori man kan vælge en farve.
Det skal foregå ved at der et sted, derinde i det praktisk talt udokumenterede mørke, findes noget der hedder FCKDialog, som har en OpenDialog kommando. Den kan jeg selvfølgelig bare ikke liiige finde frem til. Er der nogen der ved hvor denne kunne være til at finde? Eller eventuelt ved hvordan man får den lille smarte "dropdown" farve-selektor frem i editoren?
Avatar billede loproc Praktikant
07. juli 2005 - 13:45 #4
Fandt en langt nemmere løsning:

function getToolbar(fldName) {
    var editor_frame = document.getElementById(fldName + "___Frame");
    return editor_frame.contentWindow.document.getElementById('eToolbar');
}

kaldes med navnet på instansen af editoren, og derefter kan man bruge:

var tb = getToolbar('PageContent');
tb.style.position = 'fixed';
tb.style.top = 300;
Avatar billede loproc Praktikant
07. juli 2005 - 13:46 #5
Ovenstående var vel et svar ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester