OSDN Git Service

git-svn-id: https://svn.sourceforge.jp/svnroot/nucleus-jp/plugin@1020 1ca29b6e-896d...
[nucleus-jp/nucleus-plugins.git] / NP_TrackBack / branches / DOM-branch / trackback / js / rico / ricoLiveGridMenu.js
1 if(typeof Rico=='undefined')\r
2   throw("GridMenu requires the Rico JavaScript framework");\r
3 \r
4 \r
5 /**\r
6  * Standard menu for LiveGrid\r
7  */\r
8 Rico.GridMenu = Class.create();
9
10 Rico.GridMenu.prototype = {
11
12 initialize: function(options) {
13   this.options = {\r
14     width           : '20em',\r
15     dataMenuHandler : null          // put custom items on the menu\r
16   };\r
17   Object.extend(this.options, options || {});\r
18   Object.extend(this, new Rico.Menu(this.options));\r
19   this.sortmenu = new Rico.Menu(this.options);\r
20   this.filtermenu = new Rico.Menu(this.options);\r
21   this.exportmenu = new Rico.Menu(this.options);\r
22   this.hideshowmenu = new Rico.Menu(this.options);\r
23   this.createDiv();\r
24   this.sortmenu.createDiv();\r
25   this.filtermenu.createDiv();\r
26   this.exportmenu.createDiv();\r
27   this.hideshowmenu.createDiv();\r
28 },\r
29 \r
30 // Build context menu for grid\r
31 buildGridMenu: function(r,c) {\r
32   this.clearMenu();\r
33   var totrows=this.liveGrid.buffer.totalRows;\r
34   var onBlankRow=r >= totrows;\r
35   var column=this.liveGrid.columns[c];\r
36   if (this.options.dataMenuHandler) {\r
37      var showMenu=this.options.dataMenuHandler(this.liveGrid,r,c,onBlankRow);\r
38      if (!showMenu) return false;\r
39   }\r
40 \r
41   // menu items for sorting\r
42   if (column.sortable && totrows>0) {\r
43     this.sortmenu.clearMenu();\r
44     this.addSubMenuItem(RicoTranslate.getPhrase("Sort by")+": "+column.displayName, this.sortmenu, false);\r
45     this.sortmenu.addMenuItem("Ascending", column.sortAsc.bind(column), true);\r
46     this.sortmenu.addMenuItem("Descending", column.sortDesc.bind(column), true);\r
47   }\r
48 \r
49   // menu items for filtering\r
50   if (column.canFilter() && (!onBlankRow || column.filterType == Rico.TableColumn.USERFILTER)) {\r
51     this.filtermenu.clearMenu();\r
52     this.addSubMenuItem(RicoTranslate.getPhrase("Filter by")+": "+column.displayName, this.filtermenu, false);    \r
53     column.userFilter=column.getValue(r);\r
54     if (column.filterType == Rico.TableColumn.USERFILTER) {\r
55       this.filtermenu.addMenuItem("Remove filter", column.setUnfiltered.bind(column), true);\r
56       this.filtermenu.addMenuItem("Refresh", this.liveGrid.filterHandler.bind(this.liveGrid), true);\r
57       if (column.filterOp=='LIKE')\r
58         this.filtermenu.addMenuItem("Change keyword...", column.setFilterKW.bind(column), true);\r
59       if (column.filterOp=='NE' && !onBlankRow)\r
60         this.filtermenu.addMenuItem("Exclude this value also", column.addFilterNE.bind(column), true);\r
61     } else if (!onBlankRow) {\r
62       this.filtermenu.addMenuItem("Include only this value", column.setFilterEQ.bind(column), true);\r
63       this.filtermenu.addMenuItem("Greater than or equal to this value", column.setFilterGE.bind(column), column.userFilter!='');\r
64       this.filtermenu.addMenuItem("Less than or equal to this value", column.setFilterLE.bind(column), column.userFilter!='');\r
65       if (column.isText)\r
66         this.filtermenu.addMenuItem("Contains keyword...", column.setFilterKW.bind(column), true);\r
67       this.filtermenu.addMenuItem("Exclude this value", column.setFilterNE.bind(column), true);\r
68     }\r
69     if (this.liveGrid.filterCount() > 0)\r
70       this.filtermenu.addMenuItem("Remove all filters", this.liveGrid.clearFilters.bind(this.liveGrid), true);\r
71   }\r
72 \r
73   // menu items for Print/Export\r
74   if (this.liveGrid.options.maxPrint > 0 && totrows>0) {\r
75     this.exportmenu.clearMenu();\r
76     this.addSubMenuItem('Print\t/Export',this.exportmenu);\r
77     this.exportmenu.addMenuItem("Visible rows to web page", this.liveGrid.printVisible.bind(this.liveGrid,'plain'), true);\r
78     this.exportmenu.addMenuItem("All rows to web page", this.liveGrid.printAll.bind(this.liveGrid,'plain'), this.liveGrid.buffer.totalRows <= this.liveGrid.options.maxPrint);\r
79     if (Prototype.Browser.IE) {\r
80       this.exportmenu.addMenuBreak();\r
81       this.exportmenu.addMenuItem("Visible rows to spreadsheet", this.liveGrid.printVisible.bind(this.liveGrid,'owc'), true);\r
82       this.exportmenu.addMenuItem("All rows to spreadsheet", this.liveGrid.printAll.bind(this.liveGrid,'owc'), this.liveGrid.buffer.totalRows <= this.liveGrid.options.maxPrint);\r
83     }\r
84   }\r
85 \r
86   // menu items for hide/unhide\r
87   var hiddenCols=this.liveGrid.listInvisible();\r
88   for (var showableCnt=0,x=0; x<hiddenCols.length; x++)\r
89     if (hiddenCols[x].canHideShow()) showableCnt++;\r
90   if (showableCnt > 0 || column.canHideShow()) {\r
91     this.hideshowmenu.clearMenu();\r
92     this.addSubMenuItem('Hide\t/Show',this.hideshowmenu);\r
93     var visibleCnt=this.liveGrid.columns.length-hiddenCols.length;\r
94     var enabled=(visibleCnt>1 && column.visible && column.canHideShow());\r
95     this.hideshowmenu.addMenuItem(RicoTranslate.getPhrase('Hide')+': '+column.displayName, column.hideColumn.bind(column), enabled);\r
96     for (var cnt=0,x=0; x<hiddenCols.length; x++) {\r
97       if (hiddenCols[x].canHideShow()) {\r
98         if (cnt++==0) this.hideshowmenu.addMenuBreak();\r
99         this.hideshowmenu.addMenuItem(RicoTranslate.getPhrase('Show')+': '+hiddenCols[x].displayName, hiddenCols[x].showColumn.bind(hiddenCols[x]));\r
100       }\r
101     }\r
102     if (hiddenCols.length > 1)\r
103       this.hideshowmenu.addMenuItem(RicoTranslate.getPhrase('Show All'), this.liveGrid.showAll.bind(this.liveGrid));\r
104   }\r
105   return true;\r
106 }\r
107 \r
108 }\r
109 \r
110 Rico.includeLoaded('ricoLiveGridMenu.js');