Avatar billede pfp Nybegynder
27. november 2003 - 00:16 Der er 9 kommentarer og
1 løsning

Betalt Javascript opgave

Hej,

Jeg søger en Javascipt programmør der kan hjælpe mig med en lille funktion.

Opgaven:
Jeg har en DHTML editor som man skal kunne indsætte indhold i kopieret fra et word dokument. Problemet er at når man kopierer direkte fra Word så medtages der også font tags for skrifttype og størrelse osv. Disse tags har jeg brug for at få fjernet så de ikke går ind og "overrider" mit CSS dokument.

Altså en pasteFromWord-funktion....

For en øvet Javascripter (der evt. har erfaring med CMS) skulle det være en hurtig opgave.

Det er en hasteopgave!

Kontakt mig gerne hurtigst muligt, og stil endelig spørgsmål hvis der er noget der skal uddybes.

Venligst,
Peter F. Poulsen
peter@dotpeter.dk
Avatar billede swaxi Nybegynder
27. november 2003 - 01:13 #1
det er _ikke_ en triviel opgave. output fra word er noget frygteligt rod.
hvis du vil have et ordentligt resultat, bør du sende koden til serveren, filtrere den gennem htmltidy og returnere den. (det kan gøres uden at skulle reloade siden, vha. MSXML).
hvis du ikke kan/vil bruge htmltidy, men _vil_ have en javascriptløsning, så tag et kig på htmlarea, hvor de faktisk har implementteret den funktion :
http://dynarch.com/htmlarea/
Avatar billede pfp Nybegynder
27. november 2003 - 02:51 #2
Det er ligegyldigt om det er med MSXML eller javascript
Avatar billede swaxi Nybegynder
27. november 2003 - 03:45 #3
msxml er en activex-component ... en slags udviddelse af javascript, men kun for internet explorer (mozilla har iøvrigt en pendand, der hedder xmlextras) ... det er blot en måde at hente data clientside (altså i et javascriptprogram) uden at skulle genloade siden. i den metode, jeg beskriver, bruges msxml til at etablere forbindelsen til serveren (kunne også gøres i en form i en skjult iframe), mens det er htmltidy som laver selve clean-up funktionen.
htmltidy er et program specielt udviklet til at rydde op i rodet htmlkode (og den er ret effektiv med word-skrammel), men du skal altså have adgang til at installere og køre dette program på din server, og du skal have et serverside script til at håndtere kommunikationen mellem htmltidy og javascript-programmet.

(gav det mening?)
Avatar billede pfp Nybegynder
27. november 2003 - 12:54 #4
Jeg har i forvejen denne cleanFromWord funktion:function cleanFromWord()
    {
    var oEditorTmp = eval("idContentTmp"+this.oName);
    for (var i = 0; i < oEditorTmp.document.body.all.length; i++)
        {
        oEditorTmp.document.body.all[i].removeAttribute("className","",0);
        oEditorTmp.document.body.all[i].removeAttribute("style","",0);
        }
    var sHTML = oEditorTmp.document.body.innerHTML;

    var str = sHTML;

    var arrTmp = str.split('<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />');
    if (arrTmp.length > 1) str = arrTmp.join("");

    var arrTmp = str.split("<o:p>");
    if (arrTmp.length > 1) str = arrTmp.join("");

    var arrTmp = str.split("</o:p>");
    if (arrTmp.length > 1) str = arrTmp.join("");

    var arrTmp = str.split("<o:p>&nbsp;</o:p>");
    if (arrTmp.length > 1) str = arrTmp.join("");

    return  str;
    }

Kan den ikke udvides så jeg slipper af med font tags?
Avatar billede swaxi Nybegynder
27. november 2003 - 19:44 #5
// Word Clean Function v1.0.4;
function wordClean(wordData)
{
    // Format data for cleanup
    wordData = wordData.replace(/[\r\n]+|\&nbsp\;| [ ]*/g, ' ');
    if ((wordData.indexOf('class=Mso')>=0) | (wordData.indexOf('class="Mso')>=0))
    { 
        // kill unwanted tags
        wordData = wordData.replace(/<\?xml:[^>]*>/g,''); // Word xml         
        wordData = wordData.replace(/<\/?st1:[^>]*>/g,'');  // Word SmartTags         
        wordData = wordData.replace(/<\/?[a-z]\:[^>]*>/g,'');  // All other funny Word non-HTML stuff         
        wordData = wordData.replace(/<\/?(span|div)[^>]*>/gi,'');
        wordData = wordData.replace(/<\/?font[^>]*>/gi,''); // Disable if you want to keep font formatting         
        wordData = wordData.replace(/<!--[^>]*>/gi,''); // Word comments         
        // preserve formatting         
        wordData = wordData.replace(/(<P [^>]*(MARGIN: 0in 0in 0pt 0\.5*in|margin-left: 0\.5*in)[^>]*>.*?<\/p>)/gi,'<blockquote>$1</blockquote>'); // Indent         
        wordData = wordData.replace(/<p [^>]*TEXT-ALIGN: ([a-z]*)[^>]*>/gi,'<p align=$1>'); // Alignment
        // keep tags, strip attributes
        wordData = wordData.replace(/ class=[^\s|>]*/gi,'');         
        wordData = wordData.replace(/ style=\"[^>]*\"/gi,'');         
        wordData = wordData.replace(/<(b|i|li|ul) [^>]*>/gi,"<$1>");         
        // remove empty tags         
        wordData = wordData.replace(/>[ ]*</g,'><');         
        wordData = wordData.replace(/<p[^>]*><\/p>/gi,'\n'); // Preserve Formatting         
        wordData = wordData.replace(/<span[^>]*><\/span>|<strong><\/strong>|<em><\/em>|<h[1-6]><\/h[1-6]>/gi,'');
        // preserve single spacing         
        wordData = wordData.replace(/<\/blockquote><blockquote>/gi,''); // Extra blockquotes         
        wordData = wordData.replace(/(<\/p><p[^>]*>)/gi,'<br>'); // Should be <br>, not <p>     
    }     
   
    wordData = wordData.replace(/<(\/?)b>/gi,'<$1strong>');         
    wordData = wordData.replace(/<(\/?)i>/gi,'<$1em>');     

    // format     
    wordData = wordData.replace(/<\/(p|h[1-6]|table|tr|ol|ul|li|blockquote)>/gi,"<\/$1>\r\n");     
    wordData = wordData.replace(/<br[ \/]*>/gi,"<br \/>\r\n");       
    return wordData;     
}
Avatar billede pfp Nybegynder
27. november 2003 - 19:48 #6
Hej swaxi,

Den ser rigtig imponerende ud, men hvordan integrerer jeg den med min editor? Jeg kan vel ikke bare erstatte min eksisterende funktion med denne eller hvad?
Avatar billede pfp Nybegynder
27. november 2003 - 19:50 #7
Eller skal jeg bare kalde funktionen med et bestemt argument ved paste eller?
Avatar billede swaxi Nybegynder
27. november 2003 - 20:00 #8
hvis jeg har forstået din kode ret, kan du koble dem sammen såddan her :
// erstatter den gamle funktion
function cleanFromWord()
{
    var oEditorTmp = eval("idContentTmp"+this.oName);
    var sHTML = oEditorTmp.document.body.innerHTML;

    var str = sHTML;
    return  wordClean(str);
}
Avatar billede pfp Nybegynder
27. november 2003 - 20:07 #9
Det virker sgu! Så er jeg da godt nok noget irriteret over at der er sat en anden mand på opgaven...
Avatar billede swaxi Nybegynder
27. november 2003 - 20:12 #10
well ... du må da gerne sende mig en check ;)

anyway ... som sagt - det er en lappeløsning ... hvis du vil have et ordentligt resultat, er du nødt til at køre det igennem htmltidy.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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