font-size: 8pt;\r
padding-left: 10px;\r
}\r
+div.pied a {\r
+ margin-left: 10px;\r
+}\r
\r
*/\r
function doRecherche()\r
{\r
- // empèche de faire deux recherches successive en moins de 500ms\r
+ // empèche de faire deux recherches successive en moins de 800ms\r
var now = new Date();\r
- if (now.getTime() < derniereRecherche.getTime() + 500)\r
+ if (now.getTime() < derniereRecherche.getTime() + 800)\r
+ {\r
+ // si une recherche à était demandé mais n'a pu aboutir alors on la refait dans certain temps\r
+ setTimeout("doRecherche()", 810 - (now.getTime() - derniereRecherche.getTime()));\r
return;\r
+ }\r
+ derniereRecherche = now;\r
\r
var afficherTout = false;\r
// si aucun choix n'est fait pour la recherche on affiche tout\r
\r
// mise à jour de l'affichage du nombre de film total/affiché\r
document.getElementById("nbFilms").textContent = nbFilmAffiche + " / " + nbFilm + " film" + (nbFilm > 1 ? "s" : "")\r
+ \r
}\r
\r
/**\r
dest = $*[0] if $*.length > 1\r
\r
# pour windows\r
-['xml', 'xsl', 'js', 'css', 'img'].each{|rep|\r
+['xml', 'xsl', 'js', 'css', 'img', 'xpi'].each{|rep|\r
`mkdir #{dest}\\#{rep}`\r
`xcopy /Y /F #{rep} #{dest}\\#{rep}`\r
-}
\ No newline at end of file
+}\r
-# Attention, le but de ce fichier n'est pas d'être le plus clair possible ^-^´´\r
+# Attention, le but de ce fichier n'est pas d'être le plus clair possible ^-^´´\r
\r
require 'rexml/document'\r
require 'net/http'\r
\r
# Synopsis \r
/Synopsis.*?<h4>(.*?)<\/h4>/m =~ ficheHtml\r
- @synopsis = $1 unless $1.nil?\r
- @synopsis.gsub!(/<br\s*\/>|<br\s*>/, "\n")\r
- @synopsis.virerBalisesHTML!\r
+ unless $1.nil\r
+ {\r
+ @synopsis = $1\r
+ @synopsis.gsub!(/<br\s*\/>|<br\s*>/, "\n")\r
+ @synopsis.virerBalisesHTML!\r
+ }\r
\r
# Budget \r
/Budget<\/b> : (.+?) millions d'euros<\/h4>/ =~ ficheHtml\r
--- /dev/null
+function divxlistGetPreferencesService()\r
+{\r
+ return Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("");\r
+}\r
+\r
+function divxlistGetRoot()\r
+{\r
+ return divxlistGetPreferencesService().getCharPref("divxlist.root");\r
+}\r
+function divxlistSetRoot(root)\r
+{\r
+ return divxlistGetPreferencesService().setCharPref("divxlist.root", root);\r
+}\r
+\r
+function divxlistGetCommandes()\r
+{\r
+ var commandes = divxlistGetPreferencesService().getCharPref("divxlist.commandes");\r
+ var regex = /'[^']*'/g\r
+ var res = commandes.match(regex);\r
+ var commandesTab = new Array()\r
+ if (res != null)\r
+ for(var i = 0; i < res.length; i += 2)\r
+ {\r
+ var motifCommande = new Array(2);\r
+ motifCommande[0] = res[i].slice(1, res[i].length-1)\r
+ motifCommande[1] = res[i+1].slice(1, res[i+1].length-1)\r
+ commandesTab.push(motifCommande); \r
+ }\r
+ return commandesTab;\r
+}\r
+\r
+function divxlistSetCommandes(commandes)\r
+{\r
+ var commandesStr = "{"\r
+ for (var i = 0; i < commandes.length; i++)\r
+ { \r
+ if (i != 0) commandesStr += ", "\r
+ commandesStr += "'" + commandes[i][0] + "' => "\r
+ commandesStr += "'" + commandes[i][1] + "'"\r
+ }\r
+ commandesStr += "}"\r
+ \r
+ return divxlistGetPreferencesService().setCharPref("divxlist.commandes", commandesStr);\r
+}
\ No newline at end of file
-function doAnnuler(event)\r
+/*** Evénements ***/\r
+function divxlistOnOk()\r
{\r
+ divxlistSauverParametres();\r
}\r
\r
-function doOK(event)\r
+function divxlistOnLoad()\r
{\r
+ divxlistChargerParametres();\r
}\r
\r
+function divxlistChargerParametres()\r
+{ \r
+ var root = divxlistGetRoot();\r
+ document.getElementById("dossierDivx").value = root;\r
+ \r
+ var commandes = divxlistGetCommandes();\r
+ \r
+ var listeAppli = document.getElementById("listeAppli");\r
+ \r
+ for (var i = 0; i < commandes.length; i += 1)\r
+ {\r
+ var item = listeAppli.appendItem("", "")\r
+ var textMotif = document.createElement("textbox")\r
+ textMotif.setAttribute("value",commandes[i][0])\r
+ item.appendChild(textMotif);\r
+ var textCommande = document.createElement("textbox")\r
+ textCommande.setAttribute("value",commandes[i][1])\r
+ item.appendChild(textCommande); \r
+ }\r
+}\r
+\r
+function divxlistSauverParametres()\r
+{\r
+ var listeAppli = document.getElementById("listeAppli");\r
+ var items = listeAppli.childNodes;\r
+ \r
+ var commandes = new Array();\r
+ \r
+ for (var i = 2; i < items.length; i++)\r
+ {\r
+ var motifCommande = new Array(2);\r
+ motifCommande[0] = items[i].firstChild.value\r
+ motifCommande[1] = items[i].firstChild.nextSibling.value\r
+ commandes.push(motifCommande)\r
+ }\r
+ \r
+ divxlistSetCommandes(commandes);\r
+ divxlistSetRoot(document.getElementById("dossierDivx").value);\r
+}\r
\r
+function divxlistAjouterCommande()\r
+{\r
+ var listeAppli = document.getElementById("listeAppli");\r
+ var ligne = document.createElement("listitem");\r
+ ligne.appendChild(document.createElement("textbox"));\r
+ ligne.appendChild(document.createElement("textbox"));\r
+ listeAppli.appendChild(ligne);\r
+}\r
+\r
+function divxlistEnleverCommande()\r
+{\r
+ var listeAppli = document.getElementById("listeAppli");\r
+ var ligne = listeAppli.selectedItem;\r
+ ligne.parentNode.removeChild(ligne);\r
+}\r
+\r
+function divxlistMonterCommande()\r
+{\r
+ var listeAppli = document.getElementById("listeAppli");\r
+ var ligne = listeAppli.selectedItem;\r
+ var motif = ligne.firstChild.value\r
+ var commande = ligne.firstChild.nextSibling.value\r
+ var ligneAvant = ligne.previousSibling\r
+ if (ligneAvant.nodeName == 'listitem')\r
+ {\r
+ ligneAvant.parentNode.insertBefore(ligne, ligneAvant) \r
+ }\r
+ ligne.firstChild.value = motif;\r
+ ligne.firstChild.nextSibling.value = commande\r
+}\r
+\r
+function divxlistDescendreCommande()\r
+{\r
+ var listeAppli = document.getElementById("listeAppli");\r
+ var ligne = listeAppli.selectedItem;\r
+ var motif = ligne.firstChild.value\r
+ var commande = ligne.firstChild.nextSibling.value\r
+ var ligneApres = ligne.nextSibling.nextSibling\r
+ if (ligneApres == null)\r
+ ligne.parentNode.appendChild(ligne)\r
+ else\r
+ ligneApres.parentNode.insertBefore(ligne, ligneApres) \r
+ ligne.firstChild.value = motif;\r
+ ligne.firstChild.nextSibling.value = commande\r
+}\r
\r
// Les événements\r
-$(hbox > button[@label=Annuler]).addEventListener('command', doAnnuler, true);\r
-$(hbox > button[@label=OK]).addEventListener('command', doOK, true);
\ No newline at end of file
+//$("dialog").addEventListener('load', onLoad, true);\r
+//$("dialog").bind("load", divxlistOnLoad);\r
+//$(hbox > button[@label=OK]).addEventListener('command', onOK, true);\r
+//var poulpe = document.getElementById("yopyop-settings");\r
+//.addEventListener('load', divxlistOnLoad, true);yxc\r
<?xml version="1.0" encoding="UTF-8"?>\r
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>\r
-<script src="settings.js"/>\r
-<script src="jquery.js"/>\r
-<window\r
+\r
+<!DOCTYPE dialog SYSTEM "chrome://webdeveloper/locale/options.dtd">\r
+\r
+<dialog\r
+ buttons="accept, cancel"\r
id="yopyop-settings"\r
+ onload="divxlistOnLoad()"\r
+ ondialogaccept="divxlistOnOk()"\r
title="Paramètres de 'Divx-list'"\r
orient="vertical"\r
+ height="400"\r
+ width="600"\r
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">\r
\r
+<script type="application/x-javascript" src="jquery.js"/>\r
+<script type="application/x-javascript" src="prefs.js"/>\r
+<script type="application/x-javascript" src="settings.js"/>\r
+\r
<popupset>\r
<popup id="menuAppliAsso" >\r
- <menuitem label="Supprimer" />\r
- <menuitem label="Ajouter" />\r
+ <menuitem label="Supprimer" oncommand="divxlistEnleverCommande();" />\r
+ <menuitem label="Ajouter" oncommand="divxlistAjouterCommande();" />\r
+ <menuitem label="Monter" oncommand="divxlistMonterCommande();" />\r
+ <menuitem label="Descendre" oncommand="divxlistDescendreCommande();" />\r
</popup>\r
</popupset>\r
<groupbox>\r
</groupbox>\r
<groupbox flex="1">\r
<caption label="Application(s) associée(s)" />\r
- <listbox flex="1" context="menuAppliAsso">\r
+ <listbox flex="1" id="listeAppli" context="menuAppliAsso">\r
<listhead>\r
<listheader label="Motif" />\r
<listheader label="Commande" />\r
<listcol minwidth="70" />\r
<listcol flex="1"/>\r
</listcols>\r
- <listitem>\r
- <textbox />\r
- <textbox />\r
- </listitem>\r
</listbox>\r
</groupbox>\r
- <hbox>\r
- <spacer flex="1" />\r
- <button label="OK" />\r
- <button label="Annuler"/>\r
- </hbox>\r
\r
-</window>
\ No newline at end of file
+</dialog>
\ No newline at end of file
-// Le composant définit pour cette extension
+// voir : http://www.nexgenmedia.net/docs/protocol/\r
+\r
+// le composant pour cette extension
const DIVXPROT_HANDLER_CONTRACTID = "@mozilla.org/network/protocol;1?name=divx";
const DIVXPROT_HANDLER_CID = Components.ID("{65aa548e-1dda-11dc-8314-0800200c9a66}");
-// Les composants utilisés
+// les composants utilisés\r
const URI_CONTRACTID = "@mozilla.org/network/simple-uri;1";
const kIOSERVICE_CONTRACTID = "@mozilla.org/network/io-service;1";\r
-// Les interfaces utilisées
+// les interfaces utilisées
const nsIProtocolHandler = Components.interfaces.nsIProtocolHandler;
const nsIURI = Components.interfaces.nsIURI;
const nsISupports = Components.interfaces.nsISupports;
const nsIIOService = Components.interfaces.nsIIOService;
+\r
+/******* COPIER-COLLER de pref.js dans /chrome/content *******/\r
+/******* TODO : trouver un moyen d'inclure pref.js *******/\r
+function divxlistGetPreferencesService()\r
+{\r
+ return Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("");\r
+}\r
+function divxlistGetRoot()\r
+{\r
+ return divxlistGetPreferencesService().getCharPref("divxlist.root");\r
+}\r
+function divxlistSetRoot(root)\r
+{\r
+ return divxlistGetPreferencesService().setCharPref("divxlist.root", root);\r
+}\r
+function divxlistGetCommandes()\r
+{\r
+ var commandes = divxlistGetPreferencesService().getCharPref("divxlist.commandes");\r
+ var regex = /'[^']*'/g\r
+ var res = commandes.match(regex);\r
+ var commandesTab = new Array()\r
+ if (res != null)\r
+ for(var i = 0; i < res.length; i += 2)\r
+ {\r
+ var motifCommande = new Array(2);\r
+ motifCommande[0] = res[i].slice(1, res[i].length-1)\r
+ motifCommande[1] = res[i+1].slice(1, res[i+1].length-1)\r
+ commandesTab.push(motifCommande); \r
+ }\r
+ return commandesTab;\r
+}\r
+function divxlistSetCommandes(commandes)\r
+{\r
+ var commandesStr = "{"\r
+ for (var i = 0; i < commandes.length; i++)\r
+ { \r
+ if (i != 0) commandesStr += ", "\r
+ commandesStr += "'" + commandes[i][0] + "' => "\r
+ commandesStr += "'" + commandes[i][1] + "'"\r
+ }\r
+ commandesStr += "}"\r
+ \r
+ return divxlistGetPreferencesService().setCharPref("divxlist.commandes", commandesStr);\r
+}\r
/**\r
* Classe ProtocolHandler.\r
*/
-function ProtocolHandler(scheme)
+function DivxProtocolHandler(scheme)
{
this.scheme = scheme;
}
-// attributs par défaut
+// attributs par défaut
DivxProtocolHandler.prototype.defaultPort = -1;
DivxProtocolHandler.prototype.protocolFlags = nsIProtocolHandler.URI_NORELATIVE;
\r
/**\r
- * est-ce qu'un port est autorisé.\r
+ * est-ce qu'un port est autorisé \r
*/
DivxProtocolHandler.prototype.allowPort = function(aPort, aScheme)
{
{\r
var chemin = aURI.spec;\r
\r
- var root = "F:/Films/";\r
- chemin = chemin.replace("divx://", root)\r
+ // détermine quel commande utilisé en comparant le motif et le nom du fichier\r
+ var commandes = divxlistGetCommandes();\r
+ var commande;\r
+ for (var i = 0; i < commandes.length; i++)\r
+ {\r
+ var regexp = new RegExp(commandes[i][0], "i");\r
+ if (regexp.test(chemin))\r
+ {\r
+ commande = commandes[i][1]\r
+ break;\r
+ }\r
+ }\r
+ \r
+ // ajoute le chemin (spécifié dans les options)\r
+ var root = divxlistGetRoot();\r
+ chemin = chemin.replace("divx://", root + "/")\r
+ \r
+ // extrait le chemin de l'application de la commande\r
+ // puis l'enlève de la commande\r
+ var application;\r
+ var regexp = /^\s*"([^"]+)"\s*/;\r
+ var res = regexp.exec(commande);\r
+ if (res == null)\r
+ {\r
+ regexp = /^\s*(\S+)\s*/;\r
+ res = regexp.exec(commande);\r
+ }\r
+ application = res[1]\r
+ commande = commande.replace(regexp, "");\r
\r
- //dump(chemin);\r
+ // sépare les paramètres restant, %f est remplacé par le chemin du fichier\r
+ var parametres = commande.split(' ');\r
+ for (var i = 0; i < parametres.length; i++)\r
+ {\r
+ parametres[i] = parametres[i].replace("%f", chemin)\r
+ }\r
\r
- // crée un nouveau fichier\r
+ // crée un nouveau fichier\r
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);\r
- file.initWithPath("C:\\Program Files\\VideoLAN\\VLC\\vlc.exe");\r
+ file.initWithPath(application);\r
\r
- // crée un nouveau processus\r
+ // crée un nouveau processus\r
var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);\r
process.init(file);\r
\r
// lance le processus. false pour ne pas être blockant\r
- var args = [chemin, "-f"];\r
- process.run(false, args, args.length);\r
- \r
- // trouver une méthode plus simple pour qu'il ne fasse rien..\r
+ process.run(false, parametres, parametres.length);\r
+ \r
+ // trouver une méthode plus simple pour qu'il ne fasse rien..\r
+ var finalURL = ""\r
var ios = Components.classes[kIOSERVICE_CONTRACTID].getService(nsIIOService);\r
return ios.newChannel("javascript:document.location='" + finalURL + "'", null, null);
}
}
\r
/**\r
- * Est-ce que le module peut être déchargé ?\r
+ * Est-ce que le module peut être déchargé\r
*/
DIVXModule.canUnload = function(compMgr)
{
}
/**\r
- * Le point d'entré, retourne le module.\r
+ * Le point d'entré, retourne le module.\r
*/
function NSGetModule(compMgr, fileSpec)
{
-pref("divxlist.root", "F:\\Films\\");
\ No newline at end of file
+pref("divxlist.root", "F:\\Films\\");\r
+pref("divxlist.commandes", "{'.*' => '"C:/Program Files/VideoLAN/VLC/vlc.exe" -f %f'}");
\ No newline at end of file
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"\r
xmlns:em="http://www.mozilla.org/2004/em-rdf#">\r
\r
- <Description about="urn:mozilla:install-manifest"\r
- chrome:settingsURL="chrome://divxlist/content/settings.xul">\r
+ <Description about="urn:mozilla:install-manifest">\r
<em:id>divxlist@divx.euphorik.ch</em:id>\r
<em:version>1.0</em:version>\r
<em:type>2</em:type><!-- 2 = extension -->\r
+ <em:optionsURL>chrome://divxlist/content/settings.xul</em:optionsURL>\r
\r
<!-- Target Application this extension can install into, \r
with minimum and maximum supported versions. --> \r
</table> \r
</div>\r
\r
- <div class="pied"><p>by pifou</p></div>\r
+ <div class="pied"><p>by pifou <a href="../xpi/divxlist.xpi">extension firefox</a></p></div>\r
</body>
</html>