On 06/10/2014 11:24 AM, Zhou Zheng Sheng wrote:
on 2014/06/10 22:19, Zhou Zheng Sheng wrote:
on 2014/06/10 21:24, Aline Manera wrote:
On 06/09/2014 11:20 PM, Zhou Zheng Sheng wrote:
on 2014/06/10 03:21, Aline Manera wrote:
On 06/09/2014 07:08 AM, shaohef@linux.vnet.ibm.com wrote:
diff --git a/plugins/sample/ui/config/tab-ext.xml
b/plugins/sample/ui/config/tab-ext.xml
index 948fa07..8e0b3d3 100644
--- a/plugins/sample/ui/config/tab-ext.xml
+++ b/plugins/sample/ui/config/tab-ext.xml
@@ -1,7 +1,7 @@
   <?xml version="1.0" encoding="utf-8"?>
-<!--<tabs-ext>
+<tabs-ext>
       <tab>
-        <title>Test</title>
-        <filePath>plugins/sample/ui/tab.html</filePath>
+        <title>SampleTab</title>
+        <path>plugins/sample/tab.html</path>
The UI files should be in a dedicated dir, as we have for kimchi
And we could remove tab.html (which does not have any meaning) to
sampleplugin.html or something like that

Hi, this file is not handle by back-end. It's just served by back-end,
and the front-end parses this file to get the clue on where the html
file of the plugin is.

          
So "plugins/sample/ui/tab.html" here is a virtual
URI, which is mapped to pages/tab.html under the specific ui dir of this
plugin.
1. This patch set uses plugins/sample/tab/html instead of
plugins/sample/ui/tab.html

Sorry! I wanted to say "plugins/sample/tab.html is virtual URI", and
"plugins/sample/ui/tab.htmls" is the real file. Sorry for the misleading.

2. Where is the map to pages/tab.html?

It works like this:

1. plugins.sample.Drawings inherits Root, and it is mounted on URI
"/plugins/sample". It also sets "self.paths = PluginPaths('sample')"

2. GET plugins/sample/tab.html -> Drawings(Root).default("tab.html") ->
template.render("tab.html").

3. When the template needs to get the actual template file name, it calls
 paths = cherrypy.request.app.root.paths
 filename = paths.get_template_path(resource)

So here paths is actually "PluginPaths('sample')", and calling
  paths.get_template_path()
returns the result of
  os.path.join(self.ui_dir, 'pages/%s.tmpl' % resource)

So actually the filename is
  self.ui_dir + 'pages/tab.html'
should be self.ui_dir + 'pages/tab.html.tmpl'

and PluginPaths.__init__ sets
 self.ui_dir = self.add_prefix(os.path.join(self.plugin_dir, 'ui'))

so at last the filename is
  'plugins/sample/ui' + 'pages/tab.html'
should be 'plugins/sample/ui' + 'pages/tab.html.tmpl'

Let me add Mark Wu to the cc list. He is the designer of the plugin
framework.


Thanks a lot for the explanation, Zhou Zheng! =)

Got the flow now!

Sorry about too many question. I was just trying to understand that