Support des modèles Office 2007/2010 dans Alfresco 3.4d (2ème partie)

Suite à mon précédent post, nous disposons des miniatures et du rendu flash (pour la prévisualisation) dans Share. C’est une bonne chose, mais nous pouvons encore aller plus loin.
En effet, si nous basculons en mode « vue simplifiée », l’affichage est le suivant :

Les modèles Word ne bénéficient pas d'une icône significative


On y voit que les icônes représentant les fichiers sont de simples pages blanches. On aurait préférer y trouver un élément un peu plus significatif permettant d’un coup d’œil de comprendre le format du fichier.

Pour afficher cette icône, Share utilise l’extension du fichier afin de sélectionner l’image correspondante selon la construction : /components/images/filetypes/-file-32.png (cf. alfresco.js, méthode getFileIcon).
Pour définir le type de fichier, Share dispose d’une liste de correspondance entre extension et type :

  • doc => doc
  • docx => doc
  • ppt => ppt
  • pptx => ppt
  • xls => xls
  • xlsx => xls
  • pdf => pdf
  • bmp => img
  • gif => img
  • jpg => img
  • jpeg => img
  • png => img
  • txt => text

Cette liste de correspondance est visible dans le fichier alfresco.js à la méthode getFileIcon.
Pour ajouter « rapidement et salement » la prise en compte d’une nouvelle extension, il suffit d’ajouter une nouvelle entrée dans cette liste dans le fichier alfresco-min.js (version optimisée de alfresco.js). Attention, il n’existe pas une icône pour chaque type de fichier et il sera nécessaire d’en ajouter pour les types un peu « exotiques ».

Par exemple, il est possible de définir quelque chose du genre :
Alfresco.util.getFileIcon = function(p_fileName, p_fileType, p_iconSize)
{
// Mapping from extn to icon name for cm:content
var extns =
{
"doc": "doc",
"docx": "doc",
"dotx": "doc",
"dot": "doc",
"ppt": "ppt",
"pptx": "ppt",
"xls": "xls",
"xlsx": "xls",
"pdf": "pdf",
"bmp": "img",
"gif": "img",
"jpg": "img",
"jpeg": "img",
"png": "img",
"txt": "text"
};

Le résultat obtenu est le suivant :

Les modèles Word bénéficient maintenant d'une icône significative

Cette modification est, comme je l’écrivais plus haut « rapide et sale » et nécessite donc d’être améliorer pour être pleinement maintenable.
Les étapes à mener sont :

  1. Création d’une extension JavaScript pour ajouter nos nouveaux paramétrages
  2. Référencer notre extension dans les WebScripts en faisant usage
  3. Recharger les WebScripts

Pour le 1/, nous allons créer une arborescence dans la webapp afin d’isoler nos ajouts du reste des éléments standards : <webapp>/extension/js/. Dans ce dossier, nous allons créer deux fichiers : alfresco-extension-template-office.js et alfresco-extension-template-office-min.js. Le premier contiendra notre code JavaScript « lisible », le second correspond à la version optimisée.
Pour ce premier fichier, on définira quelque chose du genre :
/**
* Given a filename, returns either a filetype icon or generic icon file stem
* This is an extension of standard Alfresco.util.getFileIcon in order to add
* more file types
*
* @method Alfresco.util.getFileIcon
* @param p_fileName {string} File to find icon for
* @param p_fileType {string} Optional: Filetype to offer further hinting
* @param p_iconSize {int} Icon size: 32
* @return {string} The icon name, e.g. doc-file-32.png
* @static
*/
Alfresco.util.getFileIcon = function(p_fileName, p_fileType, p_iconSize)
{
var prefix = "generic",
fileType = typeof p_fileType === "string" ? p_fileType : "cm:content",
iconSize = typeof p_iconSize === "number" ? p_iconSize : 32;

// If type = cm:content, then use extn look-up
var type = Alfresco.util.getFileIcon.types[fileType];
if (type === "file")
{
var extn = p_fileName.substring(p_fileName.lastIndexOf(".") + 1).toLowerCase();
if (extn in Alfresco.util.getFileIcon.extns)
{
prefix = Alfresco.util.getFileIcon.extns[extn];
}
}
else if (typeof type == "undefined")
{
type = "file";
}
return prefix + "-" + type + "-" + iconSize + ".png";
};

Alfresco.util.getFileIcon.extns =
{
"doc": "doc",
"docx": "doc",
"dotx": "doc",
"dot": "doc",
"ppt": "ppt",
"pptx": "ppt",
"xls": "xls",
"xlsx": "xls",
"pdf": "pdf",
"bmp": "img",
"gif": "img",
"jpg": "img",
"jpeg": "img",
"png": "img",
"txt": "text"
};
Alfresco.util.getFileIcon.types =
{
"{http://www.alfresco.org/model/content/1.0}cmobject": "file",
"cm:cmobject": "file",
"{http://www.alfresco.org/model/content/1.0}content": "file",
"cm:content": "file",
"{http://www.alfresco.org/model/content/1.0}thumbnail": "file",
"cm:thumbnail": "file",
"{http://www.alfresco.org/model/content/1.0}folder": "folder",
"cm:folder": "folder",
"{http://www.alfresco.org/model/content/1.0}category": "category",
"cm:category": "category",
"{http://www.alfresco.org/model/content/1.0}person": "user",
"cm:person": "user",
"{http://www.alfresco.org/model/content/1.0}authorityContainer": "group",
"cm:authorityContainer": "group",
"tag": "tag",
"{http://www.alfresco.org/model/site/1.0}sites": "site",
"st:sites": "site",
"{http://www.alfresco.org/model/site/1.0}site": "site",
"st:site": "site",
"{http://www.alfresco.org/model/transfer/1.0}transferGroup": "server-group",
"trx:transferGroup": "server-group",
"{http://www.alfresco.org/model/transfer/1.0}transferTarget": "server",
"trx:transferTarget": "server"
};

Remarque : nous sommes dans l’obligation de redéfinir autant de code car Alfresco.util.getFileIcon.extns est embarqué dans la définition de Alfresco.util.getFileIcon dans le code original d’Alfresco. J’ai demandé une amélioration dans ce sens : ALF-9320.

Pour le 2/, il faut repérer les WebScripts faisant usage de Alfresco.util.getFileIcon. Les principaux sont :

  • documentlist dans org/alfresco/components/documentlibrary
  • datalists dans org/alfresco/components/data-lists
  • my-documents dans org/alfresco/components/dashlets

Pour chacun de ces webscript, il va falloir redéfinir le le fichier get.head.ftl et y ajouter en fin de fichier la ligne :
<@script type="text/javascript" src="${page.url.context}/res/extension/js/alfresco-extension-template-office.js"></@script>

Pour le 3/, il s’uffit d’appuyer sur le bouton en bas de la page d’accueil des WebSripts : http://localhost:8080/share/page/index

Cette entrée a été publiée dans Alfresco, avec comme mot(s)-clef(s) , , , , . Vous pouvez la mettre en favoris avec ce permalien.

Une réponse à Support des modèles Office 2007/2010 dans Alfresco 3.4d (2ème partie)

  1. Ping : Accélérer le chargement du visualiseur Flash de Alfresco Share | ECM & Co

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Protected by WP Anti Spam