source: DASISH/t5.6/client/branches/webannotator-basic-current-xsd/chrome/markingcollection/content/markingcollection/templatefolder.js @ 5703

Last change on this file since 5703 was 5703, checked in by stephanie.roth@snd.gu.se, 10 years ago

Initial commit of current status quo from GitHub. TODO: Adjust client code to work with updated xsd file.

  • Property svn:executable set to *
File size: 13.9 KB
Line 
1var mcTreeTemplateFolder = {
2
3        get STRING() { return document.getElementById("mcMainString"); },
4
5        get DataSource() { return window.top.bitsObjectMng.DataSource; },
6        get Common()     { return window.top.bitsObjectMng.Common;     },
7        get Database()   { return window.top.bitsObjectMng.Database;   },
8        get XML()     { return window.top.bitsObjectMng.XML;           },
9        get gBrowser()   { return window.top.bitsObjectMng.getBrowser();},
10
11        get DEFAULT_TEMPLATE(){
12                var defname = mcTreeTemplateFolder.STRING.getString("MARKER_FOLDER");
13                var note = mcTreeTemplateFolder.STRING.getString("TEMPLATE_MARKER_FOLDER_COMMENT");
14                var tmpArr = [
15                        '<?xml version="1.0" encoding="utf-8"?>',
16                        '<!DOCTYPE TEMPLATE>',
17                        '<TEMPLATE>',
18                        '  <TITLE>'+defname+'</TITLE>',
19                        '  <NOTE>'+note+'</NOTE>',
20                        '  <FOLDER title="'+defname+'" style="" note="">',
21                        '    <FOLDER title="'+defname+'1" style="' + mcTreeTemplateFolder.STRING.getString("MARKER_CUSTOM_1") + '" note="" />',
22                        '    <FOLDER title="'+defname+'2" style="' + mcTreeTemplateFolder.STRING.getString("MARKER_CUSTOM_2") + '" note="" />',
23                        '    <FOLDER title="'+defname+'3" style="' + mcTreeTemplateFolder.STRING.getString("MARKER_CUSTOM_3") + '" note="" />',
24                        '    <FOLDER title="'+defname+'4" style="' + mcTreeTemplateFolder.STRING.getString("MARKER_CUSTOM_4") + '" note="" />',
25                        '    <FOLDER title="'+defname+'5" style="' + mcTreeTemplateFolder.STRING.getString("MARKER_CUSTOM_5") + '" note="" />',
26                        '    <FOLDER title="'+defname+'6" style="' + mcTreeTemplateFolder.STRING.getString("MARKER_CUSTOM_6") + '" note="" />',
27                        '    <FOLDER title="'+defname+'7" style="' + mcTreeTemplateFolder.STRING.getString("MARKER_CUSTOM_7") + '" note="" />',
28                        '    <FOLDER title="'+defname+'8" style="' + mcTreeTemplateFolder.STRING.getString("MARKER_CUSTOM_8") + '" note="" />',
29                        '  </FOLDER>',
30                        '</TEMPLATE>'
31                ];
32                return tmpArr.join("\n");
33        },
34
35        init : function(){
36                var file = this.getTemplateDir();
37                var num = 0;
38                var entries = file.directoryEntries;
39                while(entries.hasMoreElements()){
40                        var entry = entries.getNext().QueryInterface(Components.interfaces.nsILocalFile);
41                        if(!entry.isFile()) continue;
42                        num++;
43                }
44                if(num==0){
45                        var defname = this.STRING.getString("TEMPLATE_MARKER_TITLE");
46                        file.append(escape(defname));
47                        this.Common.writeFile(file, this.DEFAULT_TEMPLATE, "UTF-8");
48                }
49        },
50
51        done : function(){},
52
53        createFolder : function(aNode,aPfid,aRes){
54                var title = aNode.getAttribute("title");
55                var style = aNode.getAttribute("style");
56                var dbtype = this.DataSource.getProperty(aRes,"dbtype");
57                var newFolder = this.Database.newFolder(undefined,dbtype);
58                newFolder.fid_title = title;
59                newFolder.fid_style = style;
60                newFolder.pfid = ""+aPfid;
61                newFolder.fid_mode = ""+0;
62                if(!this.Database.addFolder(newFolder,dbtype)) return null;
63                var pfid = newFolder.fid;
64                var newID = this.DataSource.identify(newFolder.fid);
65                var newItem = this.Common.newItem();
66                newItem.about = this.DataSource.ABOUT_ITEM + newID;
67                newItem.id = newFolder.fid;
68                newItem.pfid = newFolder.pfid;
69                newItem.title = title;
70                newItem.type = "folder";
71                newItem.style = style;
72                newItem.cssrule = 'css_'+dbtype+'_'+newID;
73                newItem.editmode = newFolder.fid_mode;
74                newItem.dbtype = dbtype;
75                var tarResName = aRes.Value;
76                var tarRelIdx;
77                try{
78                        var cont = this.DataSource.getContainer(tarResName, false);
79                        tarRelIdx = cont.GetCount();
80                }catch(ex){
81                        tarRelIdx = -1;
82                }
83                var newRes = this.DataSource.addItem(newItem, tarResName, tarRelIdx, dbtype);
84                if(newRes && newRes.Value){
85                        this.DataSource.flush();
86                        this.DataSource.createEmptySeq(newRes.Value);
87                }else{
88                        this.Database.removeFolder({fid:pfid},dbtype);
89                        return null;
90                }
91                var pfid_order=0;
92                var childNodes = aNode.childNodes;
93                for(var i=0;i<childNodes.length;i++){
94                        switch(childNodes[i].nodeName){
95                                case "FOLDER":
96                                        var rtn = mcTreeTemplateFolder.createFolder(childNodes[i],pfid,newRes);
97                                        if(rtn){
98                                                pfid_order++;
99                                                this.Database.updateFolder({fid:rtn.fid,pfid_order:pfid_order},dbtype);
100                                        }else{
101                                                this.Database.removeFolder({fid:pfid},dbtype);
102                                                return null;
103                                        }
104                                        break;
105                                default:
106                                        break;
107                        }
108                }
109                return {fid:pfid,res:newRes};
110        },
111
112        onCommand : function(aEvent,aIndex){
113                setTimeout(function(){ mcTreeTemplateFolder._onCommand(aEvent,aIndex); },0);
114        },
115
116        _onCommand : function(aEvent,aIndex){
117                var curIdx = aIndex;
118                var curRes = null;
119                if(curIdx>=0){
120                        if(!mcTreeHandler.TREE.view.isContainer(curIdx)) return;
121                        curRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(curIdx);
122                        if(!mcTreeHandler.TREE.view.isContainerOpen(curIdx)) mcTreeHandler.TREE.view.toggleOpenState(curIdx);
123                }else{
124                        return;
125                }
126                var pfid = this.DataSource.getProperty(curRes,"id");
127                var dbtype = this.DataSource.getProperty(curRes,"dbtype");
128                var rtn;
129                var uri = this.Common.convertFilePathToURL(aEvent.target.id);
130                var xmldoc = window.top.bitsMarkingCollection.loadXMLDocument(uri);
131                if(xmldoc){
132                        var elem = xmldoc.getElementsByTagName("TEMPLATE");
133                        if(elem && elem.length>0){
134                                var contResList = this.DataSource.seqResources(curRes);
135                                var pfid_order=contResList.length;
136                                var childNodes = elem[0].childNodes;
137                                for(var i=0;i<childNodes.length;i++){
138                                        switch(childNodes[i].nodeName){
139                                                case "FOLDER":
140                                                        rtn = mcTreeTemplateFolder.createFolder(childNodes[i],pfid,curRes);
141                                                        if(rtn){
142                                                                pfid_order++;
143                                                                this.Database.updateFolder({fid:rtn.fid,pfid_order:pfid_order},dbtype);
144                                                        }else{
145                                                                return;
146                                                        }
147                                                        break;
148                                                default:
149                                                        break;
150                                        }
151                                }
152                        }
153                }
154                if(!rtn) return;
155                mcTreeCssService.init();
156                mcTreeHandler.TREE.builder.rebuild();
157                var newRes = this.Common.RDF.GetResource(rtn.res.Value);
158                var newIdx = mcTreeHandler.TREE.builderView.getIndexOfResource(newRes);
159                if(!mcTreeHandler.TREE.view.isContainerOpen(newIdx)) mcTreeHandler.TREE.view.toggleOpenState(newIdx);
160                mcTreeHandler.TREE.view.selection.select(newIdx);
161                mcTreeHandler.TREE.focus();
162                var result = mcController.property(newRes);
163                if(result){
164                        window.top.bitsMarkingCollection.reOrder(curRes);
165                }else{
166                        mcTreeHandler.remove(undefined,undefined,true);
167                }
168                mcController.rebuildLocal();
169                var selectIdx = newIdx;
170                if(selectIdx>=0){
171                        mcTreeHandler.TREE.currentIndex = selectIdx;
172                        if(!mcTreeHandler.TREE.view.selection.isSelected(mcTreeHandler.TREE.currentIndex)) mcTreeHandler.TREE.view.selection.select(mcTreeHandler.TREE.currentIndex);
173                        mcTreeHandler.TREE.focus();
174                        mcTreeHandler.TREE.treeBoxObject.ensureRowIsVisible(selectIdx);
175                        mcPropertyView.dispProperty(mcTreeHandler.object);
176                }
177
178        },
179
180        createMenu : function(aParentNode,aEntry){
181                if(aEntry.isFile()){
182                        var elemMenuitem = aParentNode.ownerDocument.createElement("menuitem");
183                        if(elemMenuitem){
184                                var label = unescape(aEntry.leafName);
185                                if(label.lastIndexOf(".xml")>=0) label = label.substr(0,label.lastIndexOf(".xml"));
186                                elemMenuitem.setAttribute("id",aEntry.path);
187                                elemMenuitem.setAttribute("label",label+"...");
188                                elemMenuitem.setAttribute("image","chrome://markingcollection/skin/add-template-folder.png");
189                                elemMenuitem.setAttribute("class","menuitem-iconic");
190                                aParentNode.appendChild(elemMenuitem);
191                        }
192                }else if(aEntry.isDirectory()){
193                        var elemMenuSub = top.document.createElement("menu");
194                        var elemMenuSubpopup = top.document.createElement("menupopup");
195                        if(!elemMenuSub || !elemMenuSubpopup) return;
196                        elemMenuSub.setAttribute("label",unescape(aEntry.leafName));
197                        elemMenuSub.setAttribute("class","menu-iconic");
198                        elemMenuSub.setAttribute("image","chrome://markingcollection/skin/treefolder.png");
199                        elemMenuSubpopup.setAttribute("id",aEntry.path);
200                        elemMenuSub.appendChild(elemMenuSubpopup);
201                        aParentNode.appendChild(elemMenuSub);
202                        var entries = aEntry.directoryEntries;
203                        while(entries.hasMoreElements()){
204                                var entry = entries.getNext().QueryInterface(Components.interfaces.nsILocalFile);
205                                mcTreeTemplateFolder.createMenu(elemMenuSubpopup,entry);
206                        }
207                }
208        },
209
210        onPopupShowingMng : function(aEvent){
211                var fileNum = 0;
212                var dir  = mcTreeTemplateFolder.getTemplateDir();
213                var entries = dir.directoryEntries;
214                while(entries.hasMoreElements()){
215                        var entry = entries.getNext().QueryInterface(Components.interfaces.nsILocalFile);
216                        if(unescape(entry.leafName) == this.STRING.getString("TEMPLATE_MARKER_TITLE")) continue;
217                        fileNum++;
218                }
219                if(fileNum==0){
220                        document.getElementById("mcPopupTemplateFolderRemove").setAttribute("disabled","true");
221                        document.getElementById("mcPopupFolderTemplateFolderRemove").setAttribute("disabled","true");
222                }else{
223                        document.getElementById("mcPopupTemplateFolderRemove").removeAttribute("disabled");
224                        document.getElementById("mcPopupFolderTemplateFolderRemove").removeAttribute("disabled");
225                }
226        },
227
228        onPopupShowing : function(aEvent){
229                var dir  = mcTreeTemplateFolder.getTemplateDir();
230                var entries = dir.directoryEntries;
231                while(entries.hasMoreElements()){
232                        var entry = entries.getNext().QueryInterface(Components.interfaces.nsILocalFile);
233                        mcTreeTemplateFolder.createMenu(aEvent.target,entry);
234                }
235        },
236
237        onPopupHiding : function(aEvent){
238                var elem = aEvent.target.lastChild;
239                for(var i=aEvent.target.childNodes.length-1;i>=0;i--){
240                        if(aEvent.target.childNodes[i].nodeName == "menuseparator") break;
241                        aEvent.target.removeChild(aEvent.target.childNodes[i]);
242                }
243        },
244
245
246        onClick : function(aEvent,aIndex){
247                var curIdx = aIndex;
248                var aRes = null;
249                if(curIdx>=0){
250                        if(!mcTreeHandler.TREE.view.isContainer(curIdx)) return;
251                        aRes = mcTreeHandler.TREE.builderView.getResourceAtIndex(curIdx);
252                        var result = {};
253                        result.title = this.DataSource.getProperty(aRes,"title");
254                        result.note = this.DataSource.getProperty(aRes,"note");
255                        result.accept = true;
256                        window.openDialog("chrome://markingcollection/content/templatefolderproperty.xul", "", "chrome,centerscreen,modal", result);
257                        if(result.accept){
258                                var file  = mcTreeTemplateFolder.getTemplateDir();
259                                file.append(escape(result.title));
260                                if(file.exists()){
261                                        var confirm_mng = mcTreeTemplateFolder.STRING.getString("CONFIRM_TEMPLATE_UPDATE");
262                                        if(this.Common.confirm(confirm_mng)){
263                                                file.remove(false);
264                                        }else{
265                                                mcTreeTemplateFolder.onClick(aEvent,aIndex);
266                                                return;
267                                        }
268                                }
269                                file.create(file.NORMAL_FILE_TYPE, 0666);
270                                ostream = Components.classes['@mozilla.org/network/file-output-stream;1'].createInstance(Components.interfaces.nsIFileOutputStream);
271                                ostream.init(file, 2, 0x200, false);
272                                result.title = result.title.replace(/&/mg,"&amp;").replace(/</mg,"&lt;").replace(/>/mg,"&gt;").replace(/\"/mg,"&quot;");
273                                result.note = result.note.replace(/&/mg,"&amp;").replace(/</mg,"&lt;").replace(/>/mg,"&gt;").replace(/\"/mg,"&quot;");
274                                var aContent = '<?xml version="1.0" encoding="utf-8"?>\n<!DOCTYPE TEMPLATE>\n<TEMPLATE>\n  <TITLE>'+result.title+'</TITLE>\n  <NOTE>'+result.note+'</NOTE>\n';
275                                this.Common.UNICODE.charset = "UTF-8";
276                                aContent = this.Common.UNICODE.ConvertFromUnicode(aContent);
277                                ostream.write(aContent, aContent.length);
278                                mcTreeTemplateFolder.createTemplate(aRes,ostream);
279                                aContent = "</TEMPLATE>\n";
280                                this.Common.UNICODE.charset = "UTF-8";
281                                aContent = this.Common.UNICODE.ConvertFromUnicode(aContent);
282                                ostream.write(aContent, aContent.length);
283                                ostream.close();
284                        }
285                }else{
286                        return;
287                }
288        },
289
290        onRemove : function(aEvent){
291                var result = {
292                        accept : false,
293                        list   : [],
294                        title  : mcTreeTemplateFolder.STRING.getString("DEL_TEMPLATE_MARKER"),
295                };
296                var dir  = mcTreeTemplateFolder.getTemplateDir();
297                var entries = dir.directoryEntries;
298                while(entries.hasMoreElements()){
299                        var entry = entries.getNext().QueryInterface(Components.interfaces.nsILocalFile);
300                        if(entry.isFile()){
301                                if(unescape(entry.leafName) == this.STRING.getString("TEMPLATE_MARKER_TITLE")) continue;
302                                result.list.push(entry);
303                        }else if(entry.isDirectory()){
304                        }
305                }
306                window.openDialog("chrome://markingcollection/content/removeDialog.xul", "", "chrome,centerscreen,modal", result);
307                if(result.accept){
308                }
309        },
310
311        getTemplateDir : function(){
312                var dir  = window.top.bitsMarkingCollection.getExtensionDir().clone();
313                dir.append("template");
314                if(!dir.exists()) dir.create(dir.DIRECTORY_TYPE, 0700);
315                return dir;
316        },
317
318        createTemplate : function(aRes,aFile,aDepth){
319                var ostream = aFile;
320                var title = this.DataSource.getProperty(aRes,"title");
321                var note = this.DataSource.getProperty(aRes,"note");
322                var style = this.DataSource.getProperty(aRes,"style");
323                if(aDepth == undefined) aDepth = 0;
324                if(aFile == undefined){
325                        var file  = mcTreeTemplateFolder.getTemplateDir();
326                        file.append(escape(title));
327                        if(file.exists()){
328                                file.remove(false);
329                        }
330                        file.create(file.NORMAL_FILE_TYPE, 0666);
331                        ostream = Components.classes['@mozilla.org/network/file-output-stream;1'].createInstance(Components.interfaces.nsIFileOutputStream);
332                        ostream.init(file, 2, 0x200, false);
333                }
334                var aTab = "";
335                for(var i=0;i<=aDepth;i++){
336                        aTab += "  ";
337                }
338                var contResList = this.DataSource.flattenResources(aRes, 1, false);
339                title = title.replace(/&/mg,"&amp;").replace(/</mg,"&lt;").replace(/>/mg,"&gt;").replace(/\"/mg,"&quot;");
340                if(style) style = style.replace(/&/mg,"&amp;").replace(/</mg,"&lt;").replace(/>/mg,"&gt;").replace(/\"/mg,"&quot;");
341                if(note) note = note.replace(/&/mg,"&amp;").replace(/</mg,"&lt;").replace(/>/mg,"&gt;").replace(/\"/mg,"&quot;");
342                var aContent = aTab + '<FOLDER title="'+title+'" style="'+style+'" note="'+note+'"';
343                if(contResList.length<=1) aContent += ' /';
344                aContent += '>\n';
345                this.Common.UNICODE.charset = "UTF-8";
346                aContent = this.Common.UNICODE.ConvertFromUnicode(aContent);
347                ostream.write(aContent, aContent.length);
348                var contResList = this.DataSource.flattenResources(aRes, 1, false);
349                if(contResList.length>1){
350                        for(var i=0;i<contResList.length;i++){
351                                if(contResList[i].Value == aRes.Value) continue;
352                                mcTreeTemplateFolder.createTemplate(contResList[i],ostream,aDepth+1);
353                        }
354                        aContent = aTab + '</FOLDER>\n';
355                        this.Common.UNICODE.charset = "UTF-8";
356                        aContent = this.Common.UNICODE.ConvertFromUnicode(aContent);
357                        ostream.write(aContent, aContent.length);
358                }
359                if(aFile == undefined){
360                        ostream.close();
361                }
362        },
363
364};
Note: See TracBrowser for help on using the repository browser.