Alfresco媒体查看器Web预览可扩展性

时间:2014-10-08 06:33:32

标签: alfresco alfresco-share

因此,我遵循了Will Abson's指南和源代码,以便在Alfresco中扩展自定义媒体查看器。 我有几个问题。 我已经使用了4.2+ Alfresco,所以不需要使用head.ftl作为弃用,我使用第二个可扩展性模块自动添加我自己的配置,但是: 如何访问jsNode中的web-preview.get.js?或者更好的是,有没有办法访问正在显示的节点的属性值和方面? 我知道服务器端和客户端var jsNode = new Alfresco.util.Node(model.widgets[i].options.nodeRef)var jsNode = AlfrescoUtil.getNodeDetails(model.widgets[i].options.nodeRef);  在另一个问题here中提到过,但似乎除了默认值,例如mimeType,size,nodeRef,我不能使用它们从文件中获取数据。 这些是我的改变:

我的自定义媒体查看器的-config文件夹中的

web-preview.get.js

    //<import resource="classpath:/alfresco/templates/org/alfresco/import/alfresco-util.js">
if (model.widgets)
{
   for (var i = 0; i < model.widgets.length; i++)
   {
      var at = "test";
      //var jsNode = AlfrescoUtil.getNodeDetails(model.widgets[i].options.nodeRef);
      //var author = jsNode.properties["cm:author"];
      var widget = model.widgets[i];
      if (widget.id == "WebPreview")
      {
         var conditions = [];
         // Insert new pluginCondition(s) at start of the chain
         conditions.push({
            attributes: {
               mimeType: "application/pdf"
            },
            plugins: [{
               name: "PDF",
               attributes: {
               }
            }]
         });
         var oldConditions = eval("(" + widget.options.pluginConditions + ")");
         // Add the other conditions back in
         for (var j = 0; j < oldConditions.length; j++)
         {
            conditions.push(oldConditions[j]);
         }
         // Override the original conditions
         model.pluginConditions = jsonUtils.toJSONString(conditions);
         widget.options.pluginConditions = model.pluginConditions;
      }
   }
}

PDF.js

/**
 * Copyright (C) 2014 Will Abson
 */

/**
 * This is the "PDF" plug-in used to display documents directly in the web browser.
 *
 * Supports the "application/pdf" mime types.
 *
 * @namespace Alfresco.WebPreview.prototype.Plugins
 * @class Alfresco.WebPreview.prototype.Plugins.PDF
 */
(function()
{
    /**
     * PDF plug-in constructor
     *
     * @param wp {Alfresco.WebPreview} The Alfresco.WebPreview instance that decides which plugin to use
     * @param attributes {Object} Arbitrary attributes brought in from the <plugin> element
     */
    Alfresco.WebPreview.prototype.Plugins.PDF = function(wp, attributes)
    {
       this.wp = wp;
       this.attributes = YAHOO.lang.merge(Alfresco.util.deepCopy(this.attributes), attributes);
       //this.wp.options.nodeRef = this.wp.nodeRef;
       return this;
    };

    Alfresco.WebPreview.prototype.Plugins.PDF.prototype =
    {
       /**
        * Attributes
        */
       attributes:
       {
          /**
           * Maximum size to display given in bytes if the node's content is used.
           * If the node content is larger than this value the image won't be displayed.
           * Note! This doesn't apply if src is set to a thumbnail.
           *
           * @property srcMaxSize
           * @type String
           * @default "2000000"
           */
          srcMaxSize: "2000000"
       },

       /**
        * Tests if the plugin can be used in the users browser.
        *
        * @method report
        * @return {String} Returns nothing if the plugin may be used, otherwise returns a message containing the reason
        *         it cant be used as a string.
        * @public
        */
       report: function PDF_report()
       {
          // TODO: Detect whether Adobe PDF plugin is installed, or if navigator is Chrome
          // See https://stackoverflow.com/questions/185952/how-do-i-detect-the-adobe-acrobat-version-installed-in-firefox-via-javascript
          var srcMaxSize = this.attributes.srcMaxSize;
          if (!this.attributes.src && srcMaxSize.match(/^\d+$/) && this.wp.options.size > parseInt(srcMaxSize))
          {
             return this.wp.msg("pdf.tooLargeFile", this.wp.options.name, Alfresco.util.formatFileSize(this.wp.options.size), Alfresco.util.formatFileSize(this.attributes.srcMaxSize));
          }
       },

       /**
        * Display the node.
        *
        * @method display
        * @public
        */
       display: function PDF_display()
       {
          // TODO: Support rendering the content of the thumbnail specified
          var src = this.wp.getContentUrl();
          var test = this.attributes.author;
          //var test = this.wp.options.nodeRef;
          //var jsNode = new Alfresco.util.Node(test);
          //var jsNode = AlfrescoUtil.getNodeDetails(this.wp.options.nodeRef);
          //var author = jsNode.properties["cm:author"];
          //var test = this.wp.options.author;
          //var test1 = this.wp.options.mimeType;
          //var test = this.attributes.author.replace(/[^\w_\-\. ]/g, "");
          //.replace(/[^\w_\-\. ]/g, "");
          return '<iframe name="' + test + '" src="' + src + '"></iframe>';
       }
    };

})();

正如您在注释部分中所看到的,我尝试了不同的方法来访问节点属性/值,甚至是简单的字符串,但我确实错过了一些东西。 感谢。

1 个答案:

答案 0 :(得分:2)

如果您查看源代码,您会看到帮助方法只是远程调用var url = '/slingshot/doclib2/node/' + nodeRef.replace('://', '/');

因此,请查看Repository WebScript返回的内容,并将其与您需要的属性相匹配。

我通常不使用这个,我确定/api/metadata returns所有属性。