DHTML editor – kompatibilní se všemi prohlížeči

10. ledna 2002

V předchozím článku jste získali editor umožňující snadno upravovat vzhled textu ve formuláři. Uvedený editor ovšem funguje jen v Internet Exploreru, v ostatních prohlížečích nepracuje korektně. V tomto pokračování se dozvíte, jak lze editor udělat použitelný ve všech prohlížečích.

Na začátku je třeba si uvědomit, že vestavěný editor HTML pracuje skutečně jen v Exploreru a v jiném prohlížeči ho prostě nenajdete. Doplnění kompatibility tedy spočívá „jen“ v rozpoznání prohlížeče a v závislosti na vygenerování stránky s DHTML editorem nebo stránky s klasickým polem textarea s přidaným jednoduchým panelem nástrojů, který usnadní vkládání standardních HTML značek.

V našem příkladě je použito PHP, ale podle potřeby jistě nebude pro zájemce složité upravit si ho pro použití ASP nebo jen JavaScriptu, případně podmíněných komentářů IE5+.

Základem kompatibilního editoru bude tento PHP skript:

<?
if(ereg("MSIE",$HTTP_USER_AGENT) && !ereg("Mac",$HTTP_USER_AGENT)) {
$enh=1;
?>
<link rel="stylesheet" type="text/css" href="enhed.css">
<script language="JavaScript" src="enhed.js"></script>
<?PHP } else { ?>
<script language="JavaScript">
<!–
function InsSm(sm)
{
document.form1.body.focus();
document.form1.body.value=document.form1.body.value+sm;
}
// –>
</script>
<?PHP } ?>
<table bgcolor="#999999" cellspacing="2" cellpadding="0" border="0" <?PHP echo (isset($enh) ? "class=\"dhtmed-bg\"" : "" ?>>
<form action="skript.php" name="form1" method="post" <?PHP echo (isset($enh) ? "onSubmit=\"return SendData()\"" : "" ?>>
<tr>
<td nowrap>
<?PHP
if (isset($enh))
include("enhed.php");
else
include("stded.php");
?>
<br><input type="Submit" value="Uložit" <?PHP echo (isset($enh) ? "class=\"button\"" : "" ?>></td>
</tr>
</form>
</table>

Nejprve se otestuje, zda jde o Internet Explorer (slušelo by se otestovat i zda je verze vyšší než 4, ale pro jednoduchost to vynechávám). Vyloučen je Explorer na MACu – zde, jak jsem psal, způsobí aktivace DHTML editoru zamrznutí prohlížeče.

V Exploreru vygenerujete stránky přilinkování souboru stylů pro DHTML editor a kód, který zavede podpůrný skript DHTML editoru. Také si nastavte pomocnou proměnnou $enh, kterou použijete později. V jiném prohlížeči se vygeneruje pouze část Javascriptu s funkcí pro již zmíněný jednoduchý panel nástrojů. Dále je ještě v závislosti na proměnné $enh vygenerován parametr pro styl tabulky editoru a povel onsubmit formuláře.

Hlavní rozdíl ve stránce pro Explorer a pro ostatní prohlížeče je v buňce tabulky formuláře. V závislosti na proměnné $enh se vygeneruje kompletní panel nástrojů a aktivuje se DHTML editor ve vloženém rámci (pomocí include se vloží soubor enhed.php), nebo jen jednoduchý panel nástrojů a editační pole textarea (tato část je v souboru stded.php).

Soubor enhed.php je částí DHTML editoru, který již znáte z minulého článku:

<input type="hidden" name="body" id="ID"><input type="hidden" name="NET">
<img alt="Režim HTML / Vizuální" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="swappmodeE" onclick="swappMode()" height="20" src="images/html.gif" width="20">
<span id="formatToolbar"><img height="18" src="images/spc.gif" width="2">
<img alt="Tučné (Ctrl+B)" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="boldE" onclick="DoCommand(‚Bold‘)" src="images/bold.gif" width="20" height="20">
<img alt="Kurzíva (Ctrl+I)" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="italE" onclick="DoCommand(‚Italic‘)" src="images/italic.gif" width="20" height="20">
<img alt="Podtržené (Ctrl+U)" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="underE" onclick="DoCommand(‚Underline‘)" src="images/underline.gif" width="20" height="20">
<img height="18" src="images/spc.gif" width="2">
<img alt="Velké písmo" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="ibigE" onclick="ExtBig()" height="20" src="images/big.gif" width="20">
<img alt="Malé písmo" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="ismallE" onclick="ExtSmall()" height="20" src="images/small.gif" width="20">
<img height="18" src="images/spc.gif" width="2">
<img alt="Číslovaný seznam" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="iolE" onclick="DoCommand(‚InsertOrderedList‘)" height="20" src="images/numbered.gif" width="20">
<img alt="Nečíslovaný seznam" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="iulE" onclick="DoCommand(‚InsertUnorderedList‘)" height="20" src="images/buleted.gif" width="20">
<img height="18" src="images/spc.gif" width="2">
<img alt="Vodorovná čára" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="ihlE" onclick="DoCommand(‚InsertHorizontalRule‘)" height="20" src="images/hr.gif" width="20">
<img alt="Běžící text" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="marqueeE" onclick="ExtMarq()" height="20" src="images/marquee.gif" width="20">
<img alt="Obrázek" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="imageE" onclick="DoCommand(‚InsertImage‘,true)" height="20" src="images/image.gif" width="20">
<img alt="Multimédia" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="embedE" onclick="ExtMedia()" height="20" src="images/media.gif" width="20">
<img height="18" src="images/spc.gif" width="2">
<img alt="Vložit e-mail" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="emailE" onclick="ExtMail()" height="20" src="images/mail.gif" width="20">
<img alt="Vložit odkaz (Ctrl+K)" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="hyperlinkE" onclick="DoCommand(‚CreateLink‘,true)" height="20" src="images/hyperlink.gif" width="20">
</span>
<iframe ID="Editor" Width="100%" Height="200" src="enhedsup.htm"></iframe>
<script language="javascript" type="text/javascript">
<!–
frames.Editor.document.designMode = "On";
//–>
</script><br>
[Enter] – odstavec<br>
[Shift + Enter] – nový řádek

Pro ostatní prohlížeče se použije část v souboru stded.php:

<a tabindex=‘-1′ href="javascript:void InsSm(‚<b>zde bude text tučně</b> ‚)"><img src="images/bold.gif" width="20" height="20" border=0 alt="Tučné"></a>
<a tabindex=‘-1′ href="javascript:void InsSm(‚<i>zde bude text kurzívou</i>‘)"><img src="images/italic.gif" width="20" height="20" border=0 alt="Kurzíva"></a>
<a tabindex=‘-1′ href="javascript:void InsSm(‚<u>zde bude podtržený text</u>‘)"><img src="images/underline.gif" width="20" height="20" border=0 alt="Podtržené"></a>
<img src="images/spc.gif" height="18" width="2" border="0">
<a tabindex=‘-1′ href="javascript:void InsSm(‚<big>zde bude velký text</big> ‚)"><img src="images/big.gif" width="20" height="20" border=0 alt="Velké písmo"></a>
<a tabindex=‘-1′ href="javascript:void InsSm(‚<small>zde bude malý text</small> ‚)"><img src="images/small.gif" width="20" height="20" border=0 alt="Malé písmo"></a>
<img src="images/spc.gif" height="18" width="2" border="0">
<a tabindex=‘-1′ href="javascript:void InsSm(‚<hr>‘)"><img src="images/hr.gif" width="20" alt="Vodorovná čára" height="20" border=0></a>
<a tabindex=‘-1′ href="javascript:void InsSm(‚<blink><marquee>zde bude běžící text</marquee></blink>‘)"><img src="images/marquee.gif" width="20" alt="Běžící text" height="20" border=0></a>
<a tabindex=‘-1′ href="javascript:void InsSm(‚<img src=http://…adresa obrázku v síti Internet…>‘)"><img src="images/image.gif" width="20" height="20" border=0 alt="Obrázek"></a>
<img src="images/spc.gif" height="18" width="2" border="0">
<a tabindex=‘-1′ href="javascript:void InsSm(‚<a href=mailto:…emailová adresa>text odkazu</a>‘)"><img src="images/mail.gif" width="20" height="20" border=0 alt="Vložit e-mail"></a>
<a tabindex=‘-1′ href="javascript:void InsSm(‚<a href=http://…adresa odkazu v síti Internet>text odkazu</a>‘)"><img src="images/hyperlink.gif" width="20" height="20" border=0 alt="Vložit odkaz"></a>
<br>
<textarea name="body" cols="46" rows="6" class="sform"></textarea>
<br>

V prohlížečích, ve kterých DHTML editor nepracuje, je tak k dispozici náhradní řešení, které (byť nepříliš komfortně) umožňuje vkládat text formátovaný pomocí HTML značek. Tlačítka panelu nástrojů sice jen vkládají standardní HTML kód s nápovědou, ovšem i tak je to výrazně lepší, než vůbec nefunkční stránka s DHTML editorem, nebo jen čisté pole textarea. Například při klepnutí na tlačítko s popiskem "Vložit e-mail" se do editační části vloží text: <a href=mailto:…emailová adresa>text odkazu</a>. Předpokládáte-li méně duchaplné uživatele, můžete doplnit důkladnější nápovědu. Pak již bude i tento omezený editor snadno použitelný. Ještě doplňuji, že k  funkci panelu nástrojů je nutná podpora JavaScriptu.

Kompletní aplikaci kompatibilního HTML editoru najdete zde.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Předchozí článek Chudým vstup zakázán

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *