Pluginy pro Windows Live Writer aneb jak celý den řešit jednu pitomou kravinu

Tomáš Herceg       07.06.2008             10396 zobrazení

Windows Live Writer je velmi pěkná aplikace. Používám ji třeba pro psaní článků sem na VbNet, ale i na správu obsahu jiných webů, do kterých jsem MetaWeblog API, tedy protokol, jímž Writer s webem komunikuje, implementoval.

Jak jste si možná všimli, do článku Naučte se programátorsky myslet - Algoritmy pro třídění 2 jsem se pokusil vytvořit Silverlightovou animaci. Windows Live Writer podporuje přepnutí se a editaci HTML výsledného článku, takže jsem kód pro zobrazení animace vepsal ručně. Protože tento způsob mi nepřišel právě elegantní, rozhodl jsem se napsat plugin pro vkládání Silverlightových aplikací do článků. To jsem si ještě naivně myslel, že za hodinku mám hotovo.

Plugin jsem po celodenních útrapách napsal, ale asi 5 hodin jsem řešil jednu věc. Když k článku přiložíte soubor (třeba obrázek, ale i cokoliv jiného), zkopíruje si ho Windows Live Writer do dočasného adresáře a do HTML kódu umístí odkaz na toto dočasné umístění. Při publikování článku pak uploaduje soubory na web, zjistí si adresy, na kterých nacházeti se budou, pak HTML projde, adresy nahradí a odešle samotný článek.

Co čert nechtěl, napsal jsem plugin, který uploaduje dva soubory, např. Page.xaml s definicí vzhledu aplikace a Page.xaml.js s kódem na pozadí. Druhý soubor se vkládá do stránky jako normální vložený javascript, tedy takto:

 <script type="text/javascript" src="Page.xaml.js"></script>

Adresa v tomto kousku se nahradila naprosto správně, tak, jak by člověk čekal. Na první soubor se ovšem odkazuje pouze ve volání javascriptové funkce a Windows Live Writer tuto adresu nenahradí!

 createSilverlightFromPlugin(parametr, parametr, "Page.xaml", parametr); 

Zůstane tam původní adresa z klienta. Abych pravdu řekl, vůbec mě tohle nenapadlo, Při generování tohoto HTML kódu volám a na příslušné místo dosazuji content.Files.GetUri(soubor), takže bych očekával, že si WLW při nahrazování adres tuto funkci zavolá a GetUri bude prostě vracet finální cesty tak, jak jsou na webu. Navíc když třída SmartContentSource, kterou plugin dědí, má metody GenerateEditorHtml a GeneratePublishingHtml.

Fakt bych nečekal, že Live Writer bude procházet HTML kód článku nezávisle na tom, co chtějí generovat pluginy, a nahradí cesty jenom ve značkách a, link a img. Takovéhle detaily v dokumentaci nejsou, přišel jsem na to až z Reflectoru. Už jsem totiž podezříval, že Live Writer má problémy uploadovat více než 2 soubory jedním pluginem. Pak jsem ale zjistil tohle.

Řešení je mimořádně hnusné, ale lepší mě bohužel nenapadlo. Před místo, kde se má zobrazit Silverlightová aplikace vygeneruji skrytý a href, do kterého plácnu adresu. Tu mi Writer nahradí, a já si ji pak javascriptem vytáhnu. Je to škaredé, ale funguje to.

Ještě musím nějak vyřešit situaci, když někdo do aplikace přidá externí soubory. Je nutné celý XAML soubor projít a najít v něm všechny reference, ty pak nějak uploadovat a opět cesty v XAML souboru nahradit (a to by mě zajímalo jak, když to nemám šanci programově ve WLW zjistit). Jednoduché aplikace fungují v pořádku, ale složitější, s těmi je prostě problém. Co nejdříve se pokusím svůj plugin dodělat a dát ho k dispozici.

 

hodnocení článku

0       Hodnotit mohou jen registrované uživatelé.

 

Nový příspěvek

 

Diskuse: Pluginy pro Windows Live Writer aneb jak celý den řešit jednu pitomou kravinu

Nechci, aby to vyznělo škodolibě, ale docela mě potěšilo slyšet, že i takový formát jako Vy má někdy problém, který nelze řešit elegantně :) Akorát škoda, že Vás to připravilo o tolik času, který jistě nemáte nazbyt.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To není o dovednostech a zkušenostech, to je prostě tím, že občas člověka něco nenapadne, nebo čeká, že tobude tak, a ono je to jinak. Když mám někde v kódu chybu já, tak ji většinou za chvíli najdu a opravím, ale takovéhle chyby, kde nevím, jestli prostě v kódu mám chybu já, nebo oni, anebo nikdo, protože se to dělá jinak, ty se hledají špatně.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback