begin process at 2008 08 28 21:34:29
1 233 395 membres
487 nouveaux aujourd'hui
14 291 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MANIPULATION DU SYSTÈME DE FICHIER LOCAL EN JAVASCRIPT (IE ET MOZILLA)


Information sur la source

Catégorie :Divers Classé sous : ecriture fichier, lecture fichier, presse-papier, copie fichier Niveau : Initié Date de création : 13/05/2008 Date de mise à jour : 22/05/2008 16:43:32 Vu / téléchargé: 4 868 / 249

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (23)
Ajouter un commentaire et/ou une note

Description

Voici une suite de fonctions javascript compatibles Internet Explorer et Mozilla, qui permettent de créer, lire ou copier des fichiers en locale, ainsi que de manipuler le texte du presse papier (voir zip).

Source

  • var MSIE4 = ((navigator.appName=="Microsoft Internet Explorer") && ( navigator.appVersion.substring(0,1)=="4"));
  • if (MSIE4) {
  • var fso = new ActiveXObject("Scripting.FileSystemObject");
  • compatible = "Internet Explorer 4";
  • }
  • /** renvoi true si le navigator est Microsoft Internet Explorer @return {boolean} */
  • function isMSIE4() {
  • return MSIE4;
  • }
  • var mozex_default_tmpdir = "/tmp"; /* unix */
  • var mozex_dir_separator = '/'; /* unix */
  • var mozex_os = 'unix'; /* unix */
  • if (window.navigator.platform.toLowerCase().indexOf("win") != -1) {
  • mozex_default_tmpdir = "C:\\windows\\temp"; /* windows */
  • mozex_dir_separator = '\\'; /* windows */
  • mozex_os = 'win'; /* windows */
  • }
  • /** renvoi uri de la page courante @return {string} */
  • function basename(uri) {
  • uri = uri.substring(1, uri.lastIndexOf('/'));
  • return uri;
  • }
  • /** renvoi le chemin locale de la fpage courante @return {string} */
  • function getPath() {
  • var currentDir;
  • var url = unescape(self.location.pathname);
  • if (isMSIE4()) {
  • currentDir = fso.GetParentFolderName(url).substr(1);
  • } else {
  • currentDir = (basename(url));
  • }
  • return currentDir;
  • }
  • /** Copie d'un fichier
  • @param {string} srcFile Chemin du fichier source (ex: C:\image.jpg)
  • @param {string} dstFile Chemin du fichier destination (ex: C:\image2.jpg), écraser s'il existe
  • */
  • function copyFile(srcFile,dstFile,overwrite) {
  • if (isMSIE4()) {
  • fso.CopyFile(srcFile,dstFile,overwrite);
  • } else {
  • copyFolderMozilla(srcFile,dstFile,overwrite);
  • }
  • }
  • /** Sauvergarde d'un texte dans un fichier
  • @param {string} content Contenus à sauver
  • @param {string} filename Chemin du fichier destination (ex: C:\texte.txt), écraser s'il existe
  • */
  • function saveToFile(content,filename) {
  • if (isMSIE4()) {
  • saveToFileMSIE(content,filename);
  • } else {
  • saveToFileMozilla(content,filename);
  • }
  • }
  • /** Chargement du contenus d'un fichier dans une chaine
  • @param {string} filename Chemin du fichier à cahrger (ex: C:\texte.txt)
  • @return {string} Contenus du fichier
  • */
  • function loadFromFile(filename) {
  • var str;
  • if (isMSIE4()) {
  • str = loadFromFileMSIE(filename);
  • } else {
  • str = loadFromFileMozilla(filename);
  • }
  • return str;
  • }
  • /** Sauvergarde, sous IE, d'un texte dans un fichier
  • @param {string} content Contenus à sauver
  • @param {string} filename Chemin du fichier destination (ex: C:\texte.txt), écraser s'il existe
  • */
  • function saveToFileMSIE(content,filename) {
  • try {
  • var ts = fso.CreateTextFile(filename);
  • ts.Write(content);
  • ts.Close();
  • } catch(e) {
  • document.write("Exception in saveToFileMSIE");
  • }
  • }
  • /** Chargement, sous IE, du contenus d'un fichier dans une chaine
  • @param {string} filename Chemin du fichier à cahrger (ex: C:\texte.txt)
  • @return {string} Contenus du fichier
  • */
  • function loadFromFileMSIE(filename) {
  • try {
  • var ts;
  • var str = '';
  • if (fso.FileExists(filename)) {
  • ts = fso.OpenTextFile(filename,1,false);
  • str = ts.ReadAll();
  • ts.Close();
  • }
  • return (str);
  • } catch(e) {
  • document.write("Exception in loadFromFileMSIE");
  • }
  • }
  • /** Sauvergarde, sous Mozilla, d'un texte dans un fichier
  • @param {string} content Contenus à sauver
  • @param {string} filename Chemin du fichier destination (ex: C:\texte.txt), écraser s'il existe
  • */
  • function saveToFileMozilla(content,filename) {
  • try {
  • netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
  • } catch (e) {
  • alert("Permission to save file was denied.");
  • }
  • var file = Components.classes["@mozilla.org/file/local;1"]
  • .createInstance(Components.interfaces.nsILocalFile);
  • filename = filename.replace(/\//gi,mozex_dir_separator);
  • file.initWithPath( filename );
  • if ( file.exists() == false ) {
  • file.create( Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 420 );
  • }
  • var outputStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
  • .createInstance( Components.interfaces.nsIFileOutputStream );
  • /* Open flags
  • #define PR_RDONLY 0x01
  • #define PR_WRONLY 0x02
  • #define PR_RDWR 0x04
  • #define PR_CREATE_FILE 0x08
  • #define PR_APPEND 0x10
  • #define PR_TRUNCATE 0x20
  • #define PR_SYNC 0x40
  • #define PR_EXCL 0x80
  • */
  • /*
  • ** File modes ....
  • **
  • ** CAVEAT: 'mode' is currently only applicable on UNIX platforms.
  • ** The 'mode' argument may be ignored by PR_Open on other platforms.
  • **
  • ** 00400 Read by owner.
  • ** 00200 Write by owner.
  • ** 00100 Execute (search if a directory) by owner.
  • ** 00040 Read by group.
  • ** 00020 Write by group.
  • ** 00010 Execute by group.
  • ** 00004 Read by others.
  • ** 00002 Write by others
  • ** 00001 Execute by others.
  • **
  • */
  • outputStream.init( file, 0x04 | 0x08 | 0x20, 420, 0 );
  • var result = outputStream.write( content, content.length );
  • outputStream.close();
  • }
  • /** Chargement, sous Mozilla, du contenus d'un fichier dans une chaine
  • @param {string} filename Chemin du fichier à cahrger (ex: C:\texte.txt)
  • @return {string} Contenus du fichier
  • */
  • function loadFromFileMozilla(filename) {
  • try {
  • netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
  • } catch (e) {
  • alert("Permission to read file was denied.");
  • }
  • var file = Components.classes["@mozilla.org/file/local;1"]
  • .createInstance(Components.interfaces.nsILocalFile);
  • filename = filename.replace(/\//gi,mozex_dir_separator);
  • file.initWithPath( filename );
  • if ( file.exists() == true ) {
  • var is = Components.classes["@mozilla.org/network/file-input-stream;1"]
  • .createInstance( Components.interfaces.nsIFileInputStream );
  • is.init( file,0x01, 00004, null);
  • var sis = Components.classes["@mozilla.org/scriptableinputstream;1"]
  • .createInstance( Components.interfaces.nsIScriptableInputStream );
  • sis.init( is );
  • return sis.read( sis.available() );
  • } else {
  • return '';
  • }
  • }
  • /** Copie, sous Mozilla, d'un fichier
  • @param {string} srcFile Chemin du fichier source (ex: C:\image.jpg)
  • @param {string} dstFile Chemin du fichier destination (ex: C:\image2.jpg), écraser s'il existe
  • */
  • function copyFileMozilla(srcFile, dstFile) {
  • try {
  • netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
  • } catch (e) {
  • alert("Permission to read file was denied.");
  • }
  • var ios = Components.classes["@mozilla.org/network/io-service;1"]
  • .getService(Components.interfaces.nsIIOService);
  • var pngFile = Components.classes["@mozilla.org/file/local;1"]
  • .createInstance(Components.interfaces.nsILocalFile);
  • srcFile = srcFile.replace(/\//gi,mozex_dir_separator);
  • pngFile.initWithPath(srcFile);
  • var istream = Components.classes["@mozilla.org/network/file-input-stream;1"]
  • .createInstance(Components.interfaces.nsIFileInputStream);
  • istream.init(pngFile, -1, -1, false);
  • var bstream = Components.classes["@mozilla.org/binaryinputstream;1"]
  • .createInstance(Components.interfaces.nsIBinaryInputStream);
  • bstream.setInputStream(istream);
  • var bytes = bstream.readBytes(bstream.available());
  • // pngBinary already exists
  • var aFile = Components.classes["@mozilla.org/file/local;1"]
  • .createInstance(Components.interfaces.nsILocalFile);
  • dstFile = dstFile.replace(/\//gi,mozex_dir_separator);
  • aFile.initWithPath( dstFile );
  • aFile.createUnique( Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 600);
  • var stream = Components.classes["@mozilla.org/network/safe-file-output-stream;1"]
  • .createInstance(Components.interfaces.nsIFileOutputStream);
  • stream.init(aFile, 0x04 | 0x08 | 0x20, 0600, 0); // write, create, truncate
  • stream.write(bytes, bytes.length);
  • if (stream instanceof Components.interfaces.nsISafeOutputStream) {
  • stream.finish();
  • } else {
  • stream.close();
  • }
  • return bytes;
  • }
  • function copyFolderMozilla(sourceFolder,destFolder,overwrite)
  • {
  • try {
  • netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
  • } catch (e) {
  • alert("Permission to read file was denied.");
  • }
  • var destParentFolder = getParentFolder(destFolder);
  • var destFolderName = getFolderName(destFolder);
  • sourceFolder = sourceFolder.replace(/\//gi,mozex_dir_separator);
  • destFolder = destFolder.replace(/\//gi,mozex_dir_separator);
  • destParentFolder = destParentFolder.replace(/\//gi,mozex_dir_separator);
  • destFolderName = destFolderName.replace(/\//gi,mozex_dir_separator);
  • // récupérer un composant pour le fichier à copier
  • var aFile = Components.classes["@mozilla.org/file/local;1"]
  • .createInstance(Components.interfaces.nsILocalFile);
  • if (!aFile) return false;
  • // récupérer un composant pour le répertoire où la copie va s'effectuer.
  • var aDir = Components.classes["@mozilla.org/file/local;1"]
  • .createInstance(Components.interfaces.nsILocalFile);
  • if (!aDir) return false;
  • // ensuite, on initialise les chemins
  • aFile.initWithPath(sourceFolder);
  • aDir.initWithPath(destParentFolder);
  • // Au final, on copie le dossier en le renommant
  • if( !fileExists(destFolder) || overwrite ) {
  • // S'il n'existe pas, ou si on peut l'écraser on le copie
  • aFile.copyTo(aDir,destFolderName);
  • }
  • }
  • //------------------------------------------------------------------------------
  • function getFileBrowser( dirName ) {
  • if (MSIE4) {
  • return getFileBrowserMSIE( dirName );
  • } else {
  • return getFileBrowserMozilla( dirName );
  • }
  • }
  • //------------------------------------------------------------------------------
  • function getFileBrowserMSIE( dirName ) {
  • var result = "";
  • var inp = document.createElement("input");
  • inp.type="file";
  • inp.value=dirName; // Ne marche pas : pas trouvé de solution !!!
  • inp.id = 'hiddenfile';
  • inp.name = 'fileSelect';
  • inp.style.visibility='hidden';
  • document.body.appendChild(inp);
  • inp.click();
  • result = inp.value;
  • document.body.removeChild(inp);
  • inp = null;
  • return result;
  • }
  • //------------------------------------------------------------------------------
  • function getFileBrowserMozilla( dirName ) {
  • var result = "";
  • try {
  • netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
  • } catch (e) {
  • alert("Permission to access file was denied.");
  • }
  • var nsIFilePicker = Components.interfaces.nsIFilePicker;
  • var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
  • var dir = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
  • dirName = dirName.replace(/\//gi,mozex_dir_separator);
  • dir.initWithPath( dirName );
  • fp.displayDirectory = dir;
  • fp.init(window, "Sélectionnez un fichier", nsIFilePicker.modeOpen);
  • // fp.appendFilter("Fichiers Images","*.jpg; *.jpeg");
  • fp.appendFilters(nsIFilePicker.filterImages);
  • var res = fp.show();
  • if (res == nsIFilePicker.returnOK){
  • result = fp.file.path;
  • }
  • return result;
  • }
  • //------------------------------------------------------------------------------
  • function deleteFile( filename ) {
  • if (MSIE4) {
  • return deleteFileMSIE( filename );
  • } else {
  • return deleteFileMozilla( filename );
  • }
  • }
  • function deleteFolder( filename ) {
  • if (MSIE4) {
  • return deleteFolderMSIE( filename );
  • } else {
  • return deleteFolderMozilla( filename );
  • }
  • }
  • //------------------------------------------------------------------------------
  • function deleteFileMSIE( filename ) {
  • var result = false;
  • try {
  • if (fso.FileExists(filename)) {
  • fso.DeleteFile(filename);
  • result = true;
  • }
  • } catch(e) {
  • document.write("Exception in deleteFileMSIE");
  • }
  • return result;
  • }
  • function deleteFolderMSIE( filename ) {
  • var result = false;
  • try {
  • if (fso.FolderExists(filename)) {
  • fso.DeleteFolder(filename);
  • result = true;
  • }
  • } catch(e) {
  • document.write("Exception in deleteFolderMSIE");
  • }
  • return result;
  • }
  • function deleteFolderMozilla( filename ) {
  • var result = false;
  • try {
  • netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
  • } catch (e) {
  • alert("Permission to access file was denied.");
  • }
  • var aFile = Components.classes["@mozilla.org/file/local;1"].createInstance();
  • if (aFile instanceof Components.interfaces.nsILocalFile){
  • filename = filename.replace(/\//gi,mozex_dir_separator);
  • aFile.initWithPath( filename );
  • if(!folderExists(filename)) return false;
  • aFile.remove( true );
  • result = true;
  • }
  • return result;
  • }
  • //------------------------------------------------------------------------------
  • function deleteFileMozilla( filename ) {
  • var result = false;
  • try {
  • netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
  • } catch (e) {
  • alert("Permission to access file was denied.");
  • }
  • var aFile = Components.classes["@mozilla.org/file/local;1"].createInstance();
  • if (aFile instanceof Components.interfaces.nsILocalFile){
  • filename = filename.replace(/\//gi,mozex_dir_separator);
  • aFile.initWithPath( filename );
  • if(!fileExists(filename)) return false;
  • aFile.remove( false );
  • result = true;
  • }
  • return result;
  • }
  • //------------------------------------------------------------------------------
  • function getFiles( dirname ) {
  • if (MSIE4) {
  • return getFilesMSIE( dirname );
  • } else {
  • return getFilesMozilla( dirname );
  • }
  • }
  • //------------------------------------------------------------------------------
  • function getFilesMSIE( dirname )
  • {
  • var result = [];
  • try
  • {
  • var idx=0
  • var parentFolder = fso.GetFolder(dirname);
  • var enumFiles = new Enumerator(parentFolder.files);
  • for (; !enumFiles.atEnd(); enumFiles.moveNext())
  • {
  • var fileItem = enumFiles.item();
  • result.push( fileItem.name );
  • }
  • return result;
  • }
  • catch (_err)
  • {
  • alert ("Failed to Populate File List:\n");
  • return null;
  • }
  • }
  • //------------------------------------------------------------------------------
  • function getFilesMozilla( dirname )
  • {
  • var result = [];
  • try {
  • netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
  • } catch (e) {
  • alert("Permission to access file was denied.");
  • }
  • var dir = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
  • dirname = dirname.replace(/\//gi,mozex_dir_separator);
  • dir.initWithPath( dirname );
  • alert(dirname);
  • var entries = dir.directoryEntries;
  • while(entries.hasMoreElements())
  • {
  • var entry = entries.getNext();
  • entry.QueryInterface(Components.interfaces.nsIFile);
  • result.push(entry.path);
  • }
  • return result;
  • }
  • //------------------------------------------------------------------------------
  • function fileExists( filename ) {
  • if (MSIE4) {
  • return fso.FileExists(filename);
  • } else {
  • return fileExistsMozilla( filename );
  • }
  • }
  • function folderExists( foldername ) {
  • if (MSIE4) {
  • return fso.FolderExists(foldername);
  • } else {
  • return folderExistsMozilla( foldername );
  • }
  • }
  • function folderExistsMozilla( foldername ) {
  • try {
  • netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
  • } catch (e) {
  • alert("Permission to save file was denied.");
  • }
  • var folder = Components.classes["@mozilla.org/file/local;1"]
  • .createInstance(Components.interfaces.nsILocalFile);
  • foldername = foldername.replace(/\//gi,mozex_dir_separator);
  • folder.initWithPath( foldername );
  • if(folder.exists()) return true;
  • else return false;
  • }
  • //------------------------------------------------------------------------------
  • function fileExistsMozilla(filename) {
  • var result = false;
  • try {
  • netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
  • } catch (e) {
  • alert("Permission to read file was denied.");
  • }
  • var file = Components.classes["@mozilla.org/file/local;1"]
  • .createInstance(Components.interfaces.nsILocalFile);
  • filename = filename.replace(/\//gi,mozex_dir_separator);
  • file.initWithPath( filename );
  • result = file.exists();
  • return result;
  • }
  • function createFolder( directoryname ) {
  • if (MSIE4) {
  • fso.CreateFolder(directoryname);
  • } else {
  • createFolderMozilla( directoryname );
  • }
  • }
  • function createFolderMozilla(directoryname) {
  • try {
  • netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
  • } catch (e) {
  • alert("Permission to save file was denied.");
  • }
  • var directory = Components.classes["@mozilla.org/file/local;1"]
  • .createInstance(Components.interfaces.nsILocalFile);
  • directoryname = directoryname.replace(/\//gi,mozex_dir_separator);
  • directory.initWithPath( directoryname );
  • if( !directory.exists() || !directory.isDirectory() ) { // S'il n'existe pas, le créer
  • directory.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0664);
  • }
  • }
  • function relativeToAbsolute(path){
  • return getPath() +"/"+ path;
  • }
  • function absoluteToRelative(path,homeFolder){
  • var resultat = path.search(new RegExp("(.*)(/"+homeFolder+"/)(.*)","gi"));
  • if(resultat != -1) return RegExp.$3;
  • else return null;
  • }
  • function getFilePath(filePath) {
  • var resultat = filePath.search(new RegExp(/(.*)\/((.*)\.(....?))/gi));
  • if(resultat != -1) return RegExp.$1;
  • else return filePath;
  • }
  • function getFileString(filePath) {
  • var resultat = filePath.search(new RegExp(/(.*)\/((.*)\.(....?))/gi));
  • if(resultat != -1) return RegExp.$2;
  • else return filePath;
  • }
  • function getFileName(filePath) {
  • var resultat = filePath.search(new RegExp(/(.*)\/((.*)\.(....?))/gi));
  • if(resultat != -1) return RegExp.$3;
  • else return filePath;
  • }
  • function getFileExtension(filePath) {
  • var resultat = filePath.search(new RegExp(/(.*)\/((.*)\.(....?))/gi));
  • if(resultat != -1) return RegExp.$4;
  • else return null;
  • }
  • function copyFolder(folderSrc,folderDest,overwrite){
  • if (MSIE4) {
  • fso.CopyFolder(folderSrc,folderDest,overwrite);
  • } else {
  • copyFolderMozilla( folderSrc,folderDest,overwrite );
  • }
  • }
  • function getParentFolder(path) {
  • var resultat = path.search(new RegExp(/(.*)\/([^\/]*)/gi));
  • if(resultat != -1) return RegExp.$1;
  • else return path;
  • }
  • function getFolderName(path) {
  • var resultat = path.search(new RegExp(/(.*)\/([^\/]*)/gi));
  • if(resultat != -1) return RegExp.$2;
  • else return path;
  • }
  • var nn = !!document.layers;
  • var ie = !!document.all;
  • /** reagarde si XPCOM est supporté*/
  • var mozilla = !!window.Components;
  • var pageChargee = false;
  • window.onload = function()
  • {
  • window.clipboard = new Clipboard();
  • pageChargee = true;
  • }
  • /** Focntion qui permet d'attendre que la page se charge*/
  • function waitForLoad(_function) {
  • if (pageChargee){
  • _function
  • } else {
  • setTimeout('waitForLoad()', 100);
  • }
  • }
  • /** Créer une nouvelle instance de Clipboard compatible Netscape, IE et Mozilla
  • *
  • * @class Permet de lire et d'écrire du texte dans le presse papier du système
  • * @return {Clipboard} Retourne un objet de type Clipboard
  • * @type {Object}
  • * @constructor
  • */
  • function Clipboard()
  • {
  • if ( nn )
  • {
  • netscape.security.PrivilegeManager.enablePrivilege( 'UniversalSystemClipboardAccess' );
  • var tmp = new java.awt.Frame();
  • this.clipboard = fr.getToolkit().getSystemClipboard();
  • }
  • else if ( ie )
  • {
  • this.clipboard = document.createElement( 'INPUT' );
  • with ( this.clipboard.style )
  • {
  • position = 'absolute';
  • left = '0px';
  • top = '0px';
  • visibility = 'hidden';
  • }
  • document.body.appendChild( this.clipboard );
  • }
  • else if ( mozilla )
  • {
  • netscape.security.PrivilegeManager.enablePrivilege( 'UniversalXPConnect' );
  • this.clipboardid = Components.interfaces.nsIClipboard;
  • this.clipboard = Components.classes['@mozilla.org/widget/clipboard;1'].getService( this.clipboardid );
  • this.clipboardstring = Components.classes['@mozilla.org/supports-string;1'].createInstance( Components.interfaces.nsISupportsString );
  • }
  • this.copy = Clipboard_copy;
  • this.paste = Clipboard_paste;
  • }
  • /** Copie une chaine de caractère dans le presse papier. Des priviliges sont recquis
  • * @param {string} text Texte à copier
  • */
  • function Clipboard_copy( text )
  • {
  • if ( nn )
  • {
  • field.select();
  • this.clipboard.setContents( new java.awt.datatransfer.StringSelection( text ), null );
  • }
  • else if ( ie )
  • {
  • this.clipboard.value = text;
  • this.clipboard.select();
  • var textRange = this.clipboard.createTextRange();
  • textRange.execCommand( 'copy' );
  • }
  • else if ( mozilla )
  • {
  • netscape.security.PrivilegeManager.enablePrivilege( 'UniversalXPConnect' );
  • this.clipboardstring.data = text;
  • var transfer = Components.classes['@mozilla.org/widget/transferable;1'].createInstance( Components.interfaces.nsITransferable );
  • transfer.setTransferData( 'text/unicode', this.clipboardstring, text.length*2 );
  • this.clipboard.setData( transfer, null, this.clipboardid.kGlobalClipboard );
  • }
  • }
  • /** Renvoie le texte contenus dans le presse papier
  • * @return {String} Attention, seul le texte pur sera renvoyé
  • */
  • function Clipboard_paste()
  • {
  • if ( nn )
  • {
  • var content = this.clipboard.getContents( null );
  • if ( content != null )
  • {
  • return content.getTransferData( java.awt.datatransfer.DataFlavor.stringFlavor );
  • }
  • }
  • else if ( ie )
  • {
  • this.clipboard.value = '';
  • var textRange = this.clipboard.createTextRange();
  • textRange.execCommand( 'paste' );
  • return this.clipboard.value;
  • }
  • else if ( mozilla )
  • {
  • netscape.security.PrivilegeManager.enablePrivilege( 'UniversalXPConnect' );
  • var transfer = Components.classes['@mozilla.org/widget/transferable;1'].createInstance( Components.interfaces.nsITransferable );
  • transfer.addDataFlavor( 'text/unicode' );
  • this.clipboard.getData( transfer, this.clipboardid.kGlobalClipboard );
  • var str = new Object();
  • var strLength = new Object();
  • transfer.getTransferData( 'text/unicode', str, strLength );
  • str = str.value.QueryInterface( Components.interfaces.nsISupportsString );
  • return str.data.substring( 0, strLength.value / 2 );
  • }
  • }
  • function findPos(obj) {
  • var curleft = curtop = 0;
  • if (obj.offsetParent) {
  • do {
  • curleft += obj.offsetLeft;
  • curtop += obj.offsetTop;
  • } while (obj = obj.offsetParent);
  • return [curleft,curtop];
  • }
  • }
var MSIE4 = ((navigator.appName=="Microsoft Internet Explorer") && ( navigator.appVersion.substring(0,1)=="4"));

if (MSIE4) {
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  compatible = "Internet Explorer 4";
}

/** renvoi true si le navigator est Microsoft Internet Explorer @return {boolean}   */
function isMSIE4() {
  return MSIE4;
}

var mozex_default_tmpdir = "/tmp";  /* unix */
var mozex_dir_separator = '/';      /* unix */
var mozex_os = 'unix';              /* unix */
if (window.navigator.platform.toLowerCase().indexOf("win") != -1) {
    mozex_default_tmpdir = "C:\\windows\\temp";     /* windows */
    mozex_dir_separator = '\\';                     /* windows */
    mozex_os = 'win';                               /* windows */
} 

/** renvoi uri de la page courante @return {string}   */
function basename(uri) {
  uri = uri.substring(1, uri.lastIndexOf('/'));
  return uri;
}
/** renvoi le chemin locale de la fpage courante @return {string}   */
function getPath() {
  var currentDir;
  var url = unescape(self.location.pathname);  
  if (isMSIE4()) {
    currentDir = fso.GetParentFolderName(url).substr(1);
  } else {
    currentDir = (basename(url));
  }
  return currentDir;
}
/** Copie d'un fichier 
	@param {string} srcFile Chemin du fichier source (ex: C:\image.jpg)
	@param {string} dstFile Chemin du fichier destination (ex: C:\image2.jpg), écraser s'il existe
*/
function copyFile(srcFile,dstFile,overwrite) {
  if (isMSIE4()) {
    fso.CopyFile(srcFile,dstFile,overwrite);
  } else {
    copyFolderMozilla(srcFile,dstFile,overwrite);
  }
}
/** Sauvergarde d'un texte dans un fichier
	@param {string} content Contenus à sauver
	@param {string} filename Chemin du fichier destination (ex: C:\texte.txt), écraser s'il existe
*/
function saveToFile(content,filename) {
  if (isMSIE4()) {
    saveToFileMSIE(content,filename);
  } else {
    saveToFileMozilla(content,filename);
  }
}
/** Chargement du contenus d'un fichier dans une chaine
	@param {string} filename Chemin du fichier à cahrger (ex: C:\texte.txt)
	@return {string} Contenus du fichier
*/
function loadFromFile(filename) {
  var str;
  if (isMSIE4()) {
    str = loadFromFileMSIE(filename);
  } else {
    str = loadFromFileMozilla(filename);
  }
  return str;
}
 /** Sauvergarde, sous IE, d'un texte dans un fichier
	@param {string} content Contenus à sauver
	@param {string} filename Chemin du fichier destination (ex: C:\texte.txt), écraser s'il existe
*/
function saveToFileMSIE(content,filename) {
  try {
    var ts = fso.CreateTextFile(filename);
    ts.Write(content);
    ts.Close();
  } catch(e) {
    document.write("Exception in saveToFileMSIE");
  }
}
/** Chargement, sous IE, du contenus d'un fichier dans une chaine
	@param {string} filename Chemin du fichier à cahrger (ex: C:\texte.txt)
	@return {string} Contenus du fichier
*/  
function loadFromFileMSIE(filename) {
  try {
   	var ts;
    var str = '';
    if (fso.FileExists(filename)) {
      ts = fso.OpenTextFile(filename,1,false);
      str = ts.ReadAll();
      ts.Close();
    }
    return (str);
  } catch(e) {
    	document.write("Exception in loadFromFileMSIE");
  }
}
 /** Sauvergarde, sous Mozilla, d'un texte dans un fichier
	@param {string} content Contenus à sauver
	@param {string} filename Chemin du fichier destination (ex: C:\texte.txt), écraser s'il existe
*/  
function saveToFileMozilla(content,filename) {
	try {
		netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
	} catch (e) {
		alert("Permission to save file was denied.");
	}
	var file = Components.classes["@mozilla.org/file/local;1"]
		.createInstance(Components.interfaces.nsILocalFile);
	filename = filename.replace(/\//gi,mozex_dir_separator);
	file.initWithPath( filename );
	if ( file.exists() == false ) {
		file.create( Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 420 );
	}
	var outputStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
		.createInstance( Components.interfaces.nsIFileOutputStream );
	/* Open flags 
	#define PR_RDONLY       0x01
	#define PR_WRONLY       0x02
	#define PR_RDWR         0x04
	#define PR_CREATE_FILE  0x08
	#define PR_APPEND      0x10
	#define PR_TRUNCATE     0x20
	#define PR_SYNC         0x40
	#define PR_EXCL         0x80
	*/
	/*
	** File modes ....
	**
	** CAVEAT: 'mode' is currently only applicable on UNIX platforms.
	** The 'mode' argument may be ignored by PR_Open on other platforms.
	**
	**   00400   Read by owner.
	**   00200   Write by owner.
	**   00100   Execute (search if a directory) by owner.
	**   00040   Read by group.
	**   00020   Write by group.
	**   00010   Execute by group.
	**   00004   Read by others.
	**   00002   Write by others
	**   00001   Execute by others.
	**
	*/
	outputStream.init( file, 0x04 | 0x08 | 0x20, 420, 0 );
	var result = outputStream.write( content, content.length );
	outputStream.close();
}
/** Chargement, sous Mozilla, du contenus d'un fichier dans une chaine
	@param {string} filename Chemin du fichier à cahrger (ex: C:\texte.txt)
	@return {string} Contenus du fichier
*/
function loadFromFileMozilla(filename) {
  try {
		netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
	} catch (e) {
		alert("Permission to read file was denied.");
	}
	
	var file = Components.classes["@mozilla.org/file/local;1"]
		.createInstance(Components.interfaces.nsILocalFile);
	
	filename = filename.replace(/\//gi,mozex_dir_separator);
	file.initWithPath( filename );
	if ( file.exists() == true ) {
  	 var is = Components.classes["@mozilla.org/network/file-input-stream;1"]
		  .createInstance( Components.interfaces.nsIFileInputStream );
	   is.init( file,0x01, 00004, null);
	 var sis = Components.classes["@mozilla.org/scriptableinputstream;1"]
		.createInstance( Components.interfaces.nsIScriptableInputStream );
	 sis.init( is );
	 return sis.read( sis.available() );
	} else {
	 return '';
  }
}
/** Copie, sous Mozilla, d'un fichier 
	@param {string} srcFile Chemin du fichier source (ex: C:\image.jpg)
	@param {string} dstFile Chemin du fichier destination (ex: C:\image2.jpg), écraser s'il existe
*/

function copyFileMozilla(srcFile, dstFile) {
  try {
		netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
	} catch (e) {
		alert("Permission to read file was denied.");
	}
	
	var ios = Components.classes["@mozilla.org/network/io-service;1"]
    .getService(Components.interfaces.nsIIOService);
  var pngFile = Components.classes["@mozilla.org/file/local;1"]
    .createInstance(Components.interfaces.nsILocalFile);
	srcFile = srcFile.replace(/\//gi,mozex_dir_separator);
	pngFile.initWithPath(srcFile);
  var istream = Components.classes["@mozilla.org/network/file-input-stream;1"]
    .createInstance(Components.interfaces.nsIFileInputStream);
  istream.init(pngFile, -1, -1, false);
  var bstream = Components.classes["@mozilla.org/binaryinputstream;1"]
    .createInstance(Components.interfaces.nsIBinaryInputStream);
  bstream.setInputStream(istream);
  var bytes = bstream.readBytes(bstream.available());

  // pngBinary already exists
  var aFile = Components.classes["@mozilla.org/file/local;1"]
    .createInstance(Components.interfaces.nsILocalFile);
	dstFile = dstFile.replace(/\//gi,mozex_dir_separator);
  aFile.initWithPath( dstFile );
  aFile.createUnique( Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 600);
  var stream = Components.classes["@mozilla.org/network/safe-file-output-stream;1"]
    .createInstance(Components.interfaces.nsIFileOutputStream);
  stream.init(aFile, 0x04 | 0x08 | 0x20, 0600, 0); // write, create, truncate
  stream.write(bytes, bytes.length);
  if (stream instanceof Components.interfaces.nsISafeOutputStream) {
    stream.finish();
  } else {
    stream.close();
  }

	return bytes;
}

function copyFolderMozilla(sourceFolder,destFolder,overwrite)
{
	try {
		netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
	} catch (e) {
		alert("Permission to read file was denied.");
	}
	var destParentFolder = getParentFolder(destFolder);
	var destFolderName = getFolderName(destFolder);
	
	sourceFolder = sourceFolder.replace(/\//gi,mozex_dir_separator);
	destFolder = destFolder.replace(/\//gi,mozex_dir_separator);
	destParentFolder = destParentFolder.replace(/\//gi,mozex_dir_separator);
	destFolderName = destFolderName.replace(/\//gi,mozex_dir_separator);

	// récupérer un composant pour le fichier à copier
	var aFile = Components.classes["@mozilla.org/file/local;1"]
	.createInstance(Components.interfaces.nsILocalFile);
	if (!aFile) return false;

	// récupérer un composant pour le répertoire où la copie va s'effectuer.
	var aDir = Components.classes["@mozilla.org/file/local;1"]
	.createInstance(Components.interfaces.nsILocalFile);
	if (!aDir) return false;

	// ensuite, on initialise les chemins
	aFile.initWithPath(sourceFolder);
	aDir.initWithPath(destParentFolder);

	// Au final, on copie le dossier en le renommant
	if( !fileExists(destFolder) || overwrite ) {   
		// S'il n'existe pas, ou si on peut l'écraser on le copie
		aFile.copyTo(aDir,destFolderName);
	}

}


//------------------------------------------------------------------------------
function getFileBrowser( dirName ) {
  if (MSIE4) {
    return getFileBrowserMSIE( dirName );
  } else {
    return getFileBrowserMozilla( dirName );
  }
}

//------------------------------------------------------------------------------
function getFileBrowserMSIE( dirName ) {
  var result = "";
  var inp = document.createElement("input");
  inp.type="file";
	inp.value=dirName; // Ne marche pas : pas trouvé de solution !!!
  inp.id = 'hiddenfile';
  inp.name = 'fileSelect';
  inp.style.visibility='hidden';
  document.body.appendChild(inp);
  inp.click();
  result = inp.value;
  document.body.removeChild(inp);
  inp = null;
  return result;
}

//------------------------------------------------------------------------------
function getFileBrowserMozilla( dirName ) {
  var result = "";
	try {
	   netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
	} catch (e) {
		 alert("Permission to access file was denied.");
	}
  var nsIFilePicker = Components.interfaces.nsIFilePicker;
  var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);

 	var dir = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
	dirName = dirName.replace(/\//gi,mozex_dir_separator);
	dir.initWithPath( dirName );
  fp.displayDirectory = dir;
  fp.init(window, "Sélectionnez un fichier", nsIFilePicker.modeOpen);	
  // fp.appendFilter("Fichiers Images","*.jpg; *.jpeg");		
  fp.appendFilters(nsIFilePicker.filterImages);		
  var res = fp.show();
  if (res == nsIFilePicker.returnOK){
    result = fp.file.path;
  }
  return result;
}

//------------------------------------------------------------------------------
function deleteFile( filename ) {
  if (MSIE4) {
    return deleteFileMSIE( filename );
  } else {
    return deleteFileMozilla( filename );
  }
}

function deleteFolder( filename ) {
  if (MSIE4) {
    return deleteFolderMSIE( filename );
  } else {
    return deleteFolderMozilla( filename );
  }
}
//------------------------------------------------------------------------------
function deleteFileMSIE( filename ) {
  var result = false;
  try {
    if (fso.FileExists(filename)) {
      fso.DeleteFile(filename);
      result = true;
    }
  } catch(e) {
    	document.write("Exception in deleteFileMSIE");
  }
  return result;
}

function deleteFolderMSIE( filename ) {
  var result = false;
  try {
    if (fso.FolderExists(filename)) {
      fso.DeleteFolder(filename);
      result = true;
    }
  } catch(e) {
    	document.write("Exception in deleteFolderMSIE");
  }
  return result;
}

function deleteFolderMozilla( filename ) {
  var result = false;
	try {
	   netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
	} catch (e) {
		 alert("Permission to access file was denied.");
	}
  var aFile = Components.classes["@mozilla.org/file/local;1"].createInstance();
  if (aFile instanceof Components.interfaces.nsILocalFile){
	filename = filename.replace(/\//gi,mozex_dir_separator);
    aFile.initWithPath( filename );
	if(!folderExists(filename)) return false;
    aFile.remove( true );
    result = true;
  }
  return result;
}
//------------------------------------------------------------------------------
function deleteFileMozilla( filename ) {
  var result = false;
	try {
	   netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
	} catch (e) {
		 alert("Permission to access file was denied.");
	}
  var aFile = Components.classes["@mozilla.org/file/local;1"].createInstance();
  if (aFile instanceof Components.interfaces.nsILocalFile){
	filename = filename.replace(/\//gi,mozex_dir_separator);
    aFile.initWithPath( filename );
	if(!fileExists(filename)) return false;
    aFile.remove( false );
    result = true;
  }
  return result;
}

//------------------------------------------------------------------------------
function getFiles( dirname ) {
  if (MSIE4) {
    return getFilesMSIE( dirname );
  } else {
    return getFilesMozilla( dirname );
  }
}

//------------------------------------------------------------------------------
function getFilesMSIE( dirname )
{
	var result = [];
	try
	{
		var idx=0
		var parentFolder = fso.GetFolder(dirname);
		var enumFiles = new Enumerator(parentFolder.files);

		for (; !enumFiles.atEnd(); enumFiles.moveNext())
		{
			var fileItem = enumFiles.item();
			result.push( fileItem.name );
		}
		return result;
	}
	catch (_err)
	{
		alert ("Failed to Populate File List:\n");	
		return null;
	}
}

//------------------------------------------------------------------------------
function getFilesMozilla( dirname )
{
	var result = [];
	try {
	   netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
	} catch (e) {
		 alert("Permission to access file was denied.");
	}
 	var dir = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
	dirname = dirname.replace(/\//gi,mozex_dir_separator);
	dir.initWithPath( dirname );
	alert(dirname);
  var entries = dir.directoryEntries;
  while(entries.hasMoreElements())
  {
    var entry = entries.getNext();
    entry.QueryInterface(Components.interfaces.nsIFile);
    result.push(entry.path);
  }
	return result;
}

//------------------------------------------------------------------------------
function fileExists( filename ) {
  if (MSIE4) {
    return fso.FileExists(filename);
  } else {
    return fileExistsMozilla( filename );
  }
}

function folderExists( foldername ) {
  if (MSIE4) {
    return fso.FolderExists(foldername);
  } else {
    return folderExistsMozilla( foldername );
  }
}
function folderExistsMozilla( foldername ) {
  try {
		netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
	} catch (e) {
		alert("Permission to save file was denied.");
	}
	var folder = Components.classes["@mozilla.org/file/local;1"]
		.createInstance(Components.interfaces.nsILocalFile);
	foldername = foldername.replace(/\//gi,mozex_dir_separator);
	folder.initWithPath( foldername );
	
	if(folder.exists()) return true;
	else return false;
}
//------------------------------------------------------------------------------
function fileExistsMozilla(filename) {
  var result = false;
  try {
		netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
	} catch (e) {
		alert("Permission to read file was denied.");
	}
	
	var file = Components.classes["@mozilla.org/file/local;1"]
		.createInstance(Components.interfaces.nsILocalFile);
	filename = filename.replace(/\//gi,mozex_dir_separator);
	file.initWithPath( filename );
	result = file.exists();
  return result;
}

function createFolder( directoryname ) {
  if (MSIE4) {
    fso.CreateFolder(directoryname);
  } else {
    createFolderMozilla( directoryname );
  }
}
function createFolderMozilla(directoryname) {
	try {
		netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
	} catch (e) {
		alert("Permission to save file was denied.");
	}
	var directory = Components.classes["@mozilla.org/file/local;1"]
		.createInstance(Components.interfaces.nsILocalFile);
	directoryname = directoryname.replace(/\//gi,mozex_dir_separator);
	directory.initWithPath( directoryname );
	
	if( !directory.exists() || !directory.isDirectory() ) {   // S'il n'existe pas, le créer
		directory.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0664);
	}
}
function relativeToAbsolute(path){
	return getPath() +"/"+ path;
}
function absoluteToRelative(path,homeFolder){
	var resultat = path.search(new RegExp("(.*)(/"+homeFolder+"/)(.*)","gi"));
	if(resultat != -1) return RegExp.$3;
	else return null;
}

function getFilePath(filePath) {
	var resultat = filePath.search(new RegExp(/(.*)\/((.*)\.(....?))/gi));
	if(resultat != -1) return RegExp.$1;
	else return filePath;
}
function getFileString(filePath) {
	var resultat = filePath.search(new RegExp(/(.*)\/((.*)\.(....?))/gi));
	if(resultat != -1) return RegExp.$2;
	else return filePath;
}
function getFileName(filePath) {
	var resultat = filePath.search(new RegExp(/(.*)\/((.*)\.(....?))/gi));
	if(resultat != -1) return RegExp.$3;
	else return filePath;
}

function getFileExtension(filePath) {
	var resultat = filePath.search(new RegExp(/(.*)\/((.*)\.(....?))/gi));
	if(resultat != -1) return RegExp.$4;
	else return null;
}

function copyFolder(folderSrc,folderDest,overwrite){
	if (MSIE4) {
	    fso.CopyFolder(folderSrc,folderDest,overwrite);
	} else {
	    copyFolderMozilla( folderSrc,folderDest,overwrite );
	}

}

function getParentFolder(path) {
	var resultat = path.search(new RegExp(/(.*)\/([^\/]*)/gi));
	if(resultat != -1) return RegExp.$1;
	else return path;
}
function getFolderName(path) {
	var resultat = path.search(new RegExp(/(.*)\/([^\/]*)/gi));
	if(resultat != -1) return RegExp.$2;
	else return path;
}

var nn = !!document.layers;
var ie = !!document.all;
/** reagarde si XPCOM est supporté*/
var mozilla = !!window.Components;
var pageChargee = false;
window.onload = function()
{
	window.clipboard = new Clipboard();
	pageChargee = true;
}
/** Focntion qui permet d'attendre que la page se charge*/
function waitForLoad(_function) {
   if (pageChargee){
      _function
   } else {
      setTimeout('waitForLoad()', 100);
   }
}


/**  Créer une nouvelle instance de Clipboard compatible Netscape, IE et Mozilla
*
* 	@class 		Permet de lire et d'écrire du texte dans le presse papier du système
* 	@return {Clipboard}	Retourne un objet de type Clipboard
* 	@type {Object}
* 	@constructor	
*/
function Clipboard()
{
    if ( nn )
    {
        netscape.security.PrivilegeManager.enablePrivilege( 'UniversalSystemClipboardAccess' );
        var tmp = new java.awt.Frame();
        this.clipboard = fr.getToolkit().getSystemClipboard();
    }
    else if ( ie )
    {
        this.clipboard = document.createElement( 'INPUT' );
        with ( this.clipboard.style )
        {
            position = 'absolute';
            left = '0px';
            top = '0px';
            visibility = 'hidden';
        }
        document.body.appendChild( this.clipboard );
    }
    else if ( mozilla )
    {
        netscape.security.PrivilegeManager.enablePrivilege( 'UniversalXPConnect' );
        this.clipboardid = Components.interfaces.nsIClipboard;
        this.clipboard = Components.classes['@mozilla.org/widget/clipboard;1'].getService( this.clipboardid );
        this.clipboardstring = Components.classes['@mozilla.org/supports-string;1'].createInstance( Components.interfaces.nsISupportsString );
    }

    this.copy = Clipboard_copy;
    this.paste = Clipboard_paste;
}

/** Copie une chaine de caractère dans le presse papier. Des priviliges sont recquis
 * @param {string} text Texte à copier
 */
function Clipboard_copy( text )
{
    if ( nn )
    {
        field.select();
        this.clipboard.setContents( new java.awt.datatransfer.StringSelection( text ), null );
    }
    else if ( ie )
    {
        this.clipboard.value = text;
        this.clipboard.select();
        var textRange = this.clipboard.createTextRange();
        textRange.execCommand( 'copy' );
    }
    else if ( mozilla )
    {
        netscape.security.PrivilegeManager.enablePrivilege( 'UniversalXPConnect' );
        this.clipboardstring.data = text;
        var transfer = Components.classes['@mozilla.org/widget/transferable;1'].createInstance( Components.interfaces.nsITransferable );
        transfer.setTransferData( 'text/unicode', this.clipboardstring, text.length*2 );
        this.clipboard.setData( transfer, null, this.clipboardid.kGlobalClipboard );
    }
}

/** Renvoie le texte contenus dans le presse papier
 * @return {String} Attention, seul le texte pur sera renvoyé
 */
function Clipboard_paste()
{
    if ( nn )
    {
        var content = this.clipboard.getContents( null );

        if ( content != null )
        {
            return content.getTransferData( java.awt.datatransfer.DataFlavor.stringFlavor );
        }
    }
    else if ( ie )
    {
        this.clipboard.value = '';
        var textRange = this.clipboard.createTextRange();
        textRange.execCommand( 'paste' );

        return this.clipboard.value;
    }
    else if ( mozilla )
    {
        netscape.security.PrivilegeManager.enablePrivilege( 'UniversalXPConnect' );
        var transfer = Components.classes['@mozilla.org/widget/transferable;1'].createInstance( Components.interfaces.nsITransferable );
        transfer.addDataFlavor( 'text/unicode' );
        this.clipboard.getData( transfer, this.clipboardid.kGlobalClipboard );
        var str = new Object();
        var strLength = new Object();
        transfer.getTransferData( 'text/unicode', str, strLength );
        str = str.value.QueryInterface( Components.interfaces.nsISupportsString );
        return str.data.substring( 0, strLength.value / 2 );
    }
}
function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	return [curleft,curtop];
}
}
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

13 mai 2008 14:05:32 :
Mise à jours de sources
22 mai 2008 16:43:33 :
Nouvelles fonctions dans fileio: copie de repertoires, suppression fichiers et repertoires, browser, recuperation de la liste des fichiers d'un repertoire, chemin absolu <-> chemin relatif, fonctions sur les chemins, existence fichiers/repertoire, gestion presse papier... Nouvelles fonctions dans tools (nécéssite jquery):Nettoie un code des balises word, chercher dans un code toutes les images dont l'url est dans le dossier temporaire (windows) et copie les dans un dossier locale, rècupere le texte selectionner par la souris... Nouveau fichier argumenturl : permet en pur javascript et html de faire passer des arguments grace à l'url
  • signaler à un administrateur
    Commentaire de bultez le 13/05/2008 17:21:09


    depuis le temps qu'on me disait : impossible
    de gérer les fichiers avec FF ! ce serait
    une énorme faille de sécurité !

    enfin !!! javascript va pouvoir être utilisé
    avec FF pour des applications au vrai sens
    du terme.

    bravo.

    pas tout testé ni regardé de près, loin de là,
    mais ça ouvre de réelles perspectives.

    un regret ? l'absence d'exemples d'utilisation...

    des trucs tout bête, comme ça :

    émetteur  : <input type="file" id="em" />
    récepteur : <input type="text" id="re" />
    <input type="button"
    onclick="copyFile(
    document.getElementById('em').value,
    document.getElementById('re').value); " value="copier"/>

    cordialement.

  • signaler à un administrateur
    Commentaire de Arto_8000 le 13/05/2008 22:49:00

    Le regret que j'ai quand je lis ton commentaires c'est que tu sautes aux conclusions un peu trop vite et que tu ne prends même pas la peine de vérifier ce que tu dis. Les fonctions qui sont utilisés sont beaucoup mieux contrôler sur Mozilla/Firefox que sur Internet Explorer.

    Aller tu liras ceci (anglais):
    http://www.mozilla.org/projects/security/components/jssec.html

  • signaler à un administrateur
    Commentaire de bultez le 14/05/2008 08:37:21


    ce n'est pas le lieu pour une polémique
    stupide, ridicule et mal venue.

    merci encore et bravo à Ghostwan de nous avoir
    donné cette manipulation compatible IE et FF.

  • signaler à un administrateur
    Commentaire de lakichemole le 14/05/2008 09:34:37 10/10

    Oui je voudrais bien un petit exemple :)

  • signaler à un administrateur
    Commentaire de ghostwan le 14/05/2008 13:41:49

    Merci, je doit dire que sans ça, j'aurais bien été embêter pour faire mon projet.
    Je vais vous faire quelques exemples, mais je ne vous garantit pas qu'il marcheront en mode serveur, je m'explique;
    Je bosse totalement en local donc je n'ai pas tester les fonctions sur un serveur distant, par ailleurs vous remarquerez
    #  try {
    # netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
    # } catch (e) {
    # alert("Permission to save file was denied.");
    # }
    que la modification des privilèges pour l'écriture sur le système de fichier locale, n'est pas garantit.

  • signaler à un administrateur
    Commentaire de bultez le 14/05/2008 13:54:18


    ça devrait intéresser de nombreux internautes,

    sans exemples d'utilisation ça risquerait
    d'être difficile pour les "débutants",
    ce que nous sommes tous.

    les cas "plus complexes" comme ceux que tu cites,
    ceux qui s'y attaquent devraient y parvenir,
    maintenant qu'on a les billes.

  • signaler à un administrateur
    Commentaire de ghostwan le 14/05/2008 14:01:22

    Exemples javascript pour la copie de fichier:


    /*getPath() renvoie le chemin absolue du répertoire où se trouve la page courante*/
    var src = getPath()+"\\..\\img\\toto.jpg";
    var dest = getPath()+"\\..\\img\\toto_copie.jpg";

    /*test si le fichier n'est pas déja présent*/
    var imageFile = loadFromFile( dest );
    /*S'il n'existe pas on le créé dans le repertoire*/
    if ( imageFile.length == 0 ) copyFile(src ,dest );


    Exemples javascript pour le chargement et la sauvegarde d'un fichier texte:

    var vlFilename = getPath()+"\\..\\txt\\toto.txt";

    /*Charge le fichier dans une variable*/
    var fichierText = loadFromFile( vlFilename );

    /*Test si le chargement c'est bien effectué*/
    if ( fichierText.length == 0 ) {
    var str = "Erreur, problème d'accès au fichier : \n"
    + vlFilename + "\n Environnement invalide.";
    alert(str);
    }
    else {
    /*modifie la valeur du fichier*/
      fichierText = "autre chose";
      try {
    /*sauvegarde le contenus*/
    saveToFile( fichierText , vlFilename );
    } catch (e) {
    var str = "Erreur, enregistrement fichier : \n" + vlFilename;
    alert( str);
    }
    }


  • signaler à un administrateur
    Commentaire de lakichemole le 14/05/2008 14:59:34

    Re, bon j'ai fait une petite page de test rapide (à l'arrache) qui utilise loadfile et savefile
    https://serveur.kicheland.com/Tutorial/test.html
    (c un serv perso pas de blague :))
    Mes conclusions rapide:
    - J'ai cru à la magie mais il y a bien un activX derière tous ça!
    - Sous IE6 à distance ça marche niquel
    - Sous firefox (2.x) blocage (pas de droit de lecture) j'ai pas poussé plus loin.

  • signaler à un administrateur
    Commentaire de ghostwan le 14/05/2008 15:10:34

    Y'a jamais eu de magie et c'est pour ça que j'ai 2 fonctions copyFileMozilla et copyFileMSIE. On est obligé de passé par un activeX sous ie mais le soucis c'est de trouver un équivalent sous mozilla.
    Je suis passé par une de leur technique décrite sur leur site, il me semble aussi (faut que je remette la main sur l'article) qu'ils  donnaient la technique pour paramétré mozilla, pour que ça marche a distance. Cette manip oblige l'internaute à être conscient des risques de ce type de fonctions et ajoute une notion de sécurité non négligeable, ce que Arto_8000 avait illustré par son propos:
    >> Les fonctions qui sont utilisés sont beaucoup mieux contrôler sur Mozilla/Firefox que sur Internet Explorer.

  • signaler à un administrateur
    Commentaire de ghostwan le 14/05/2008 15:29:35

    Essaye réciproquement pour loadFromFileMozilla et saveToFileMozilla ces deux fonctions: netscape.security.PrivilegeManager.enablePrivilege("UniversalPreferencesRead")
            et
    netscape.security.PrivilegeManager.enablePrivilege("UniversalPreferencesWrite")

    à la place de netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
    sachant que sur le site http://www.mozilla.org/projects/security/components/jssec.html, ils disent que :
    When the script calls this function, if the signature is valid or codebase principal are enabled, expanded privileges can be granted. If a user has not accessed this principal before, a dialog asks the user if he wants to accept the signed code. Unlike Communicator 4.x, Mozilla does not display a detailed Java grant dialog, rather a simple dialog asking if the principal can be trusted. The user can accept or deny and allow their choice to be remembered by the browser.

    "Quand le script appelle cette fonction, et si la signature est valide ou que "codebase principal" est activé, l'expansion des privilèges est alors garantit."
    Et en gros mozilla est censé vous demander si vous voulez faire confiance au script suivant.

    Je creuserait la question plus tard pour ma part, je taff totalement en local donc pour l'instant le problème ne se pose pas. Mais je pense que Mozilla n'a pas mit en place ce mécanisme que pour la consultation en local.

  • signaler à un administrateur
    Commentaire de lakichemole le 14/05/2008 16:09:11

    oki merci pour ces infos :)

  • signaler à un administrateur
    Commentaire de dominion le 15/05/2008 01:34:48

    Je me disais aussi que Mozilla aurait jamais permit ça....

    Pour ceux que ça intéresse, le dernier GNU Linux Magazine France (n°105) propose un article qui permet de sauver des fichiers, via l'utilisation d'un hack par serveur distant. En ajax, donc, et totalement compatible avec tous les navigateurs qui savent télécharger des fichiers. C'est très bien pensé.

    Sinon, l'idéal serait que Mozilla propose de débloquer certains site seulement pour la gestion des fichiers locaux, comme c'est déjà le cas pour les popus, par exemple...
    Avis aux éventuels développeurs de Mozilla ;-)

  • signaler à un administrateur
    Commentaire de Arto_8000 le 15/05/2008 03:45:33

    Allez lire le lien que j'ai mis un peu plus haut ... ça explique à peu près tout.

    "Once you have written the script, you sign it using Netscape's SignTool. SignTool associates a digital signature with HTML and JS files. That digital signature is owned by a particular principal (a real-world entity such as Netscape or John Smith). The digital signature and the files it signs are both placed in a Java Archive (JAR) file.

    The associated principal allows the user to confirm the identity of the entity which signed the script. It also allows the user to ensure that the script hasn't been tampered with since it was signed. The user then can decide whether to grant privileges based on the validated identity of the certificate owner and integrity of the script."

    Donc, il faut faire signer son script pour pouvoir offrir la possibilité d'utiliser le script et encore là il faut que l'utilisateur accepte. Ce qui largement mieux comme protection que la simple fenêtre qui ne veut pas dire grand chose de Internet Explorer.

  • signaler à un administrateur
    Commentaire de bultez le 15/05/2008 08:54:24


    à Arto_8000 : mais on s'en contrefiche !

    1° si tu connaissais un ch'tit peu mieux IE,
    tu saurais que tout ce que tu dis peut
    aussi se paramétrer avec ce navigateur !
    ( scripts signés ou pas , activeX acceptés ou pas,
      paramétrages différents en local, intranet,
      internet, sites de confiance ... )
    mais quel rapport avec cette source ?
    quel est ton intérêt à vou