[app] Fix 'commit' and 'reset' in 'transfer' (bug #25)
[abstract.git] / app / chrome / content / transfer.js
blobb85b6a2d912ec94209387b656a93cbc93024187e
1 /* vim:set ts=2 sw=2 sts=2 et cindent tw=79 ft=javascript: */
2 /*
3  * Copyright (C) 2007 Sergey Yanovich <ynvich@gmail.com>
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License as
7  * published by the Free Software Foundation; either version 2 of the
8  * License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public
16  * License along with this program; if not, write to the
17  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18  * Boston, MA 02111-1307, USA.
19  */
21 const nsCI = Components.interfaces;
23 function jsdump(str)
25     Components.classes['@mozilla.org/consoleservice;1']
26       .getService(Components.interfaces.nsIConsoleService)
27       .logStringMessage(str);
30 function objdump(obj)
32   dump(obj + "\n");
33   for (var prop in obj) {
34     try {
35       dump(prop + ": " + obj[prop] + "\n");
36     } catch (e) {
37       dump(prop + ": error: " + e.message + "\n");
38     }
39   }
42 function session()
44   return document.defaultView.QueryInterface(nsCI.nsIInterfaceRequestor)
45     .getInterface(nsCI.nsIWebNavigation).sessionHistory;
48 function loadURI(uri)
49
50   document.defaultView.QueryInterface(nsCI.nsIInterfaceRequestor)
51     .getInterface(nsCI.nsIWebNavigation)
52     .loadURI(uri,nsCI.nsIWebNavigation.LOAD_FLAGS_NONE,null,null,null);
55 var gView = null;
56 var gEvent = null;
57 var gFact = null;
58 var gTransaction = null;
59 var gResource = null;
61 function transferPageLoad()
63   gFact = Components.classes["@aasii.org/base/fact;1"].
64     createInstance(nsCI.aaIFact);
65   gEvent = Components.classes["@aasii.org/base/event;1"].
66     createInstance(nsCI.aaIEvent);
67   dateChange();
68   gView = new aaView();
69   var broadcaster = Components.classes["@mozilla.org/observer-service;1"].
70     getService(nsCI.nsIObserverService);
71   broadcaster.addObserver(gView, "fact-from-flow-change", true);
72   broadcaster.addObserver(gView, "fact-to-flow-change", true);
73   document.getElementById("transfer.date").addEventListener("change",
74       dateChange, false);
75   updateAll();
76   gFact.broadcasting = true;
79 function dateChange()
81   var date = document.getElementById("transfer.date").dateValue;
82   date.setHours(12);
83   gEvent.time = date.getTime()  * 1000;
86 function openFlow(side)
88   session().beginQuery();
89   if (! side)
90     addEventListener("pageshow", chosenFrom, true);
91   else
92     addEventListener("pageshow", chosenTo, true);
93   loadURI("chrome://abstract/content/flow.xul");
96 function amountType()
98   gFact.amount = document.getElementById("transfer.amount").value;
101 function transferCommit()
103   if (gTransaction)
104     return;
105   var transaction = Components.classes["@aasii.org/base/transaction;1"].
106     createInstance(nsCI.aaITransaction);
107   gEvent.appendElement(gFact, false);
108   session().save(gEvent, null);
109   transaction.fact = gFact;
110   session().save(transaction, null);
111   gTransaction = transaction;
112   document.getElementById("canCommit").setAttribute("disabled","true");
113   document.getElementById("canReset").removeAttribute("disabled");
114   document.getElementById("canReset").removeAttribute("collapsed");
115   updateValue();
118 function transferReset()
120   var time = gEvent.time;
121   gTransaction = null;
122   gFact = Components.classes["@aasii.org/base/fact;1"].
123     createInstance(nsCI.aaIFact);
124   gEvent = Components.classes["@aasii.org/base/event;1"].
125     createInstance(nsCI.aaIEvent);
126   gEvent.time = time;
127   document.getElementById("canCommit").removeAttribute("disabled");
128   document.getElementById("canReset").setAttribute("disabled","true");
129   document.getElementById("canReset").setAttribute("collapsed","true");
130   updateAll();
133 function chosenFrom()
135   removeEventListener("pageshow", chosenFrom, true);
136   var buffer = session().queryBuffer;
137   if (buffer)
138     gFact.takeFrom = buffer.QueryInterface(nsCI.aaIFlow);
141 function chosenTo()
143   removeEventListener("pageshow", chosenTo, true);
144   var buffer = session().queryBuffer;
145   if (buffer)
146     gFact.giveTo = buffer.QueryInterface(nsCI.aaIFlow);
149 function updateAll()
151   updateFromFlow();
152   updateToFlow();
153   updateAmount();
154   updateValue();
157 function updateFromFlow()
159   if (gFact && gFact.takeFrom)
160     document.getElementById("transfer.fromFlow").value = gFact.takeFrom.tag;
161   else
162     document.getElementById("transfer.fromFlow").value = document.
163       getElementById("bundle_abstract").getString("link.choose");
166 function updateToFlow()
168   if (gFact && gFact.giveTo)
169     document.getElementById("transfer.toFlow").value = gFact.giveTo.tag;
170   else
171     document.getElementById("transfer.toFlow").value = document.
172       getElementById("bundle_abstract").getString("link.choose");
175 function updateAmount()
177   if (gFact)
178     document.getElementById("transfer.amount").value = gFact.amount;
179   else
180     document.getElementById("transfer.amount").value = "0";
183 function updateValue()
185   if (gTransaction) {
186     document.getElementById("transfer.value").value = gTransaction.value.toFixed(2);
187     document.getElementById("transfer.earnings").value = gTransaction.hasEarnings ? 
188       gTransaction.earnings.toFixed(2) : "";
189   } else {
190     document.getElementById("transfer.value").value = "";
191     document.getElementById("transfer.earnings").value = "";
192   }
195 function aaView()
199 aaView.prototype =
201   QueryInterface : function aaViewQI(iid)
202   {
203     if (iid.equals(nsCI.nsIObserver) ||
204         iid.equals(nsCI.nsISupportsWeakReference) ||
205         iid.equals(nsCI.nsISupports))
206       return this;
208     throw Components.results.NS_ERROR_NO_INTERFACE;
209   },
211   observe: function aaViewObserve(aSubject, aTopic, aData)
212   {
213     if (aSubject == gFact) {
214       if (aTopic == "fact-from-flow-change")
215         updateFromFlow();
216       else if (aTopic == "fact-to-flow-change")
217         updateToFlow();
218     }
219   }