Merge lp:~mardy/unity-webapps-qml/oa-api2 into lp:unity-webapps-qml

Proposed by Alberto Mardegan
Status: Superseded
Proposed branch: lp:~mardy/unity-webapps-qml/oa-api2
Merge into: lp:unity-webapps-qml
Diff against target: 688 lines (+136/-386)
5 files modified
examples/api-bindings/online-accounts/www/index.html (+13/-4)
examples/api-bindings/online-accounts/www/js/app.js (+45/-36)
src/Ubuntu/UnityWebApps/UnityWebAppsBackendComponents.js (+23/-13)
src/Ubuntu/UnityWebApps/bindings/online-accounts/client/online-accounts.js (+51/-333)
src/Ubuntu/UnityWebApps/common/js/unity-binding-bridge.js (+4/-0)
To merge this branch: bzr merge lp:~mardy/unity-webapps-qml/oa-api2
Reviewer Review Type Date Requested Status
WebApps Pending
Review via email: mp+208369@code.launchpad.net

This proposal has been superseded by a proposal from 2014-02-26.

Commit message

API cleanups

Add a getAccounts() method, and remove the getAccountsInfoFor() and getAccessTokenFor() methods.

Description of the change

API cleanups

Add a getAccounts() method, and remove the getAccountsInfoFor() and getAccessTokenFor() methods.

To post a comment you must log in.

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'examples/api-bindings/online-accounts/www/index.html'
--- examples/api-bindings/online-accounts/www/index.html 2014-01-17 15:51:27 +0000
+++ examples/api-bindings/online-accounts/www/index.html 2014-02-26 13:33:27 +0000
@@ -8,15 +8,24 @@
8 <body>8 <body>
9 9
10 <div>10 <div>
11 Service: <input type="text" id="service"></input>
12 Get authentication token: <input type="button" id="getauth"></input>
13 </div>
14 <div>
15 Results:11 Results:
16 <div id="results">12 <div id="results">
17 </div>13 </div>
18 </div>14 </div>
1915
16 <div style="margin-top: 30px">
17 <div>
18 Provider: <input type="text" id="provider"></input>
19 Service: <input type="text" id="service"></input>
20 <input type="button" id="refreshAccounts" value="List accounts"></input>
21 </div>
22 Accounts (click on an account to authenticate):
23 <div id='accounts'>
24 <ul>
25 </ul>
26 </div>
27 </div>
28
20 </body>29 </body>
21 30
22</html>31</html>
2332
=== modified file 'examples/api-bindings/online-accounts/www/js/app.js'
--- examples/api-bindings/online-accounts/www/js/app.js 2014-02-09 15:35:36 +0000
+++ examples/api-bindings/online-accounts/www/js/app.js 2014-02-26 13:33:27 +0000
@@ -1,43 +1,52 @@
1window.onload = function() {1window.onload = function() {
2 document.getElementById('getauth').addEventListener('click', doGetAuth);2 document.getElementById('refreshAccounts').addEventListener('click', listAccounts);
3
4 var api = external.getUnityObject('1.0');
5 var oa = api.OnlineAccounts;
6
7 function listAccounts() {
8 var filters = {};
9 var service = document.getElementById('service').value;
10 if (service) {
11 filters['service'] = service
12 }
13 var provider = document.getElementById('provider').value;
14 if (provider) {
15 filters['provider'] = provider
16 }
17
18 oa.api.getAccounts(filters, function(accounts) {
19 var ul = document.querySelector('#accounts ul');
20 if (accounts.length === 0) {
21 var li = document.createElement('li');
22 li.appendChild(document.createTextNode('No accounts found'));
23 ul.appendChild(li);
24 }
25 else {
26 for(var i = 0; i < accounts.length; ++i) {
27 var li = document.createElement('li');
28 li.innerHTML = 'id: ' + accounts[i].accountId()
29 + ', name: ' + accounts[i].displayName()
30 + ', provider: ' + JSON.stringify(accounts[i].provider())
31 + ', service: ' + JSON.stringify(accounts[i].service());
32 ul.appendChild(li);
33
34 (function(i) {
35 function authcallback(results) {
36 setResults('Authentication result: ' + JSON.stringify(results));
37 };
38
39 li.addEventListener('click', function() {
40 accounts[i].authenticate(authcallback);
41 });
42 })(i);
43 }
44 }
45 });
46 }
347
4 function setResults(data) {48 function setResults(data) {
5 var results = document.getElementById('results');49 var results = document.getElementById('results');
6 results.innerHTML += data;50 results.innerHTML += data;
7 };51 };
8
9 function doGetAuth() {
10 setResults('');
11
12 var api = external.getUnityObject('1.0');
13 var oa = api.OnlineAccounts;
14
15 oa.api.getAccountsInfoFor(null, 'facebook', function(result) {
16 if (result.length != undefined && result.length === 0) {
17 setResults("No account found");
18 }
19 else {
20 for (var i = 0; i < result.length; ++i) {
21 setResults("name: " + result[i].displayName
22 + ', id: ' + result[i].accountId
23 + ', providerName: ' + result[i].providerName
24 + ', serviceName: ' + result[i].serviceName
25 + ', enabled: ' + (result[i].enabled ? "true" : "false")
26 + '<br>');
27 }
28 }
29
30 oa.api.getAccessTokenFor(null, 'facebook', null, function(result) {
31 if (result.error) {
32 setAuthToken("Error: " + result.error);
33 return;
34 }
35
36 setResults("<br><br>Authenticated: "
37 + result.authenticated
38 + ", token: "
39 + result.data);
40 });
41 });
42 }
43};52};
4453
=== modified file 'src/Ubuntu/UnityWebApps/UnityWebAppsBackendComponents.js'
--- src/Ubuntu/UnityWebApps/UnityWebAppsBackendComponents.js 2014-02-11 01:10:34 +0000
+++ src/Ubuntu/UnityWebApps/UnityWebAppsBackendComponents.js 2014-02-26 13:33:27 +0000
@@ -155,8 +155,9 @@
155 return "";155 return "";
156 var extracted = "";156 var extracted = "";
157 for (var p in params) {157 for (var p in params) {
158 if (params.hasOwnProperty(p))158 if (params.hasOwnProperty(p) && params[p] != null) {
159 extracted += p + ":" + JSON.stringify(params[p]) + "; ";159 extracted += p + ":" + JSON.stringify(params[p]) + "; ";
160 }
160 }161 }
161 return extracted;162 return extracted;
162}163}
@@ -621,7 +622,7 @@
621 onAuthenticated = function(reply) {622 onAuthenticated = function(reply) {
622 callback({error: null,623 callback({error: null,
623 authenticated: true,624 authenticated: true,
624 data: reply.AccessToken});625 data: reply});
625626
626 self._object.onAuthenticated.disconnect(onAuthenticated);627 self._object.onAuthenticated.disconnect(onAuthenticated);
627 self._object.onAuthenticationError.disconnect(onAuthenticationError);628 self._object.onAuthenticationError.disconnect(onAuthenticationError);
@@ -783,9 +784,9 @@
783 }784 }
784 };785 };
785786
786 function AccountServiceModel() {787 function AccountServiceModel(filterParams) {
787 var result = backendDelegate.createQmlObject(788 var result = backendDelegate.createQmlObject(
788 PLUGIN_URI, VERSION, 'AccountServiceModel');789 PLUGIN_URI, VERSION, 'AccountServiceModel', filterParams);
789 this._id = result.id;790 this._id = result.id;
790 this._object = result.object;791 this._object = result.object;
791792
@@ -901,7 +902,7 @@
901 internal: {902 internal: {
902903
903 // special case for an object wrapper904 // special case for an object wrapper
904 accountServiceHandleAtIndex: function(self, idx) {905 accountServiceAtIndex: function(self, idx) {
905 self._validate();906 self._validate();
906907
907 var accountServiceHandle = self._modelAdaptor.itemAt(idx, "accountServiceHandle");908 var accountServiceHandle = self._modelAdaptor.itemAt(idx, "accountServiceHandle");
@@ -961,15 +962,9 @@
961962
962 // api963 // api
963 getAccountsInfoFor: function(service, provider, callback) {964 getAccountsInfoFor: function(service, provider, callback) {
964 var serviceModel = new AccountServiceModel();965 var serviceModel = new AccountServiceModel({'service': service, 'provider': provider});
965
966 if (service)
967 serviceModel.setService(service);
968 if (provider)
969 serviceModel.setProvider(provider);
970966
971 var count = serviceModel.internal.count(serviceModel);967 var count = serviceModel.internal.count(serviceModel);
972 console.log(count)
973 var accountsInfo = []968 var accountsInfo = []
974 for (var i = 0; i < count; ++i) {969 for (var i = 0; i < count; ++i) {
975 var displayName = serviceModel.internal.itemAt(serviceModel, i, "displayName");970 var displayName = serviceModel.internal.itemAt(serviceModel, i, "displayName");
@@ -990,6 +985,21 @@
990 callback(accountsInfo);985 callback(accountsInfo);
991 },986 },
992987
988 getAccounts: function(filters, callback) {
989 var serviceModel = new AccountServiceModel(filters);
990 var count = serviceModel.internal.count(serviceModel);
991 var accounts = []
992 for (var i = 0; i < count; ++i) {
993 var service = serviceModel.internal.accountServiceAtIndex(serviceModel, i);
994 if (service) {
995 var s = service.serialize();
996 console.debug(JSON.stringify(s.content))
997 accounts.push(s);
998 }
999 }
1000 callback(accounts);
1001 },
1002
993 getAccountById: function(accountId, callback) {1003 getAccountById: function(accountId, callback) {
994 var manager = new Manager();1004 var manager = new Manager();
995 var account = manager.internal.loadAccount(manager, accountId);1005 var account = manager.internal.loadAccount(manager, accountId);
@@ -1018,7 +1028,7 @@
1018 callback(results);1028 callback(results);
1019 };1029 };
1020 serviceModel.internal1030 serviceModel.internal
1021 .accountServiceHandleAtIndex(serviceModel, accountIdx)1031 .accountServiceAtIndex(serviceModel, accountIdx)
1022 .authenticate(onAuthenticated);1032 .authenticate(onAuthenticated);
1023 }1033 }
1024 else {1034 else {
10251035
=== modified file 'src/Ubuntu/UnityWebApps/bindings/online-accounts/client/online-accounts.js'
--- src/Ubuntu/UnityWebApps/bindings/online-accounts/client/online-accounts.js 2014-02-10 19:03:49 +0000
+++ src/Ubuntu/UnityWebApps/bindings/online-accounts/client/online-accounts.js 2014-02-26 13:33:27 +0000
@@ -8,33 +8,54 @@
8 var PLUGIN_URI = 'OnlineAccounts';8 var PLUGIN_URI = 'OnlineAccounts';
99
10/**10/**
11 * Account represents an single online account.11 * AccountService.
1212
13 * @class Account13 * @class AccountService
14 * @constructor14 * @constructor
15 */15 */
16 function Account(id, content) {16 function AccountService(id, content) {
17 this._proxy = backendBridge.createRemoteObject(17 this._proxy = backendBridge.createRemoteObject(
18 PLUGIN_URI, 'Account', id);18 PLUGIN_URI, 'AccountService', id);
1919
20 this._accountId = content && content.accountId20 this._accountId = content && content.accountId
21 ? content.accountId : null;21 ? content.accountId : null;
22 this._enabled = content && content.enabled
23 ? content.enabled : null;
24 this._serviceEnabled = content && content.serviceEnabled
25 ? content.serviceEnabled : null;
26 this._displayName = content && content.displayName
27 ? content.displayName : null;
22 this._provider = content && content.provider28 this._provider = content && content.provider
23 ? content.provider : null;29 ? content.provider : null;
30 this._service = content && content.service
31 ? content.service : null;
24 };32 };
25 Account.prototype = {33 AccountService.prototype = {
26
27 // properties34 // properties
35 accountId: function(callback) {
36 if (callback && typeof(callback) === 'function') {
37 this._proxy.call('accountId', [], callback);
38 return;
39 }
40 return this._accountId;
41 },
2842
29 enabled: function(callback) {43 enabled: function(callback) {
30 this._proxy.call('enabled', [], callback);44 if (callback && typeof(callback) === 'function') {
45 this._proxy.call('enabled', [], callback);
46 return;
47 }
48 return this._enabled;
31 },49 },
3250
33 displayName: function(callback) {51 displayName: function(callback) {
34 this._proxy.call('displayName', [], callback);52 if (callback && typeof(callback) === 'function') {
53 this._proxy.call('displayName', [], callback);
54 return;
55 }
56 return this._displayName;
35 },57 },
3658
37 // immutable
38 provider: function(callback) {59 provider: function(callback) {
39 if (callback && typeof(callback) === 'function') {60 if (callback && typeof(callback) === 'function') {
40 this._proxy.call('provider', [], callback);61 this._proxy.call('provider', [], callback);
@@ -43,86 +64,12 @@
43 return this._provider;64 return this._provider;
44 },65 },
4566
46 // immutable67 service: function(callback) {
47 accountId: function(callback) {
48 if (callback && typeof(callback) === 'function') {68 if (callback && typeof(callback) === 'function') {
49 this._proxy.call('accountId', [], callback);69 this._proxy.call('service', [], callback);
50 return;70 return;
51 }71 }
52 return this._accountId;72 return this._service;
53 },
54
55 // method
56
57 updateDisplayName: function(displayName) {
58 this._proxy.call('displayName', []);
59 },
60
61 updateEnabled: function(enabled) {
62 this._proxy.call('updateEnabled', [enabled]);
63 },
64
65 remove: function(enabled) {
66 this._proxy.call('remove', [enabled]);
67 },
68
69 // extras
70
71 destroy: function() {
72 this._proxy.call('destroy', []);
73 },
74 };
75
76/**
77 * AccountService.
78
79 * @class AccountService
80 * @constructor
81 */
82 function AccountService(id) {
83 this._proxy = backendBridge.createRemoteObject(
84 PLUGIN_URI, 'AccountService', id);
85 };
86 AccountService.prototype = {
87 // properties
88 accountId: function(callback) {
89 this._proxy.call('accountId', [], callback);
90 },
91 setAccountId: function(accountId) {
92 this._proxy.call('setAccountId', [accountId]);
93 },
94
95 enabled: function(callback) {
96 this._proxy.call('enabled', [], callback);
97 },
98 setEnabled: function(enabled) {
99 this._proxy.call('setEnabled', [enabled]);
100 },
101
102 serviceEnabled: function(callback) {
103 this._proxy.call('serviceEnabled', [], callback);
104 },
105 setServiceEnabled: function(serviceEnabled) {
106 this._proxy.call('setServiceEnabled', [serviceEnabled]);
107 },
108
109 autoSync: function(callback) {
110 this._proxy.call('autoSync', [], callback);
111 },
112 setAutoSync: function(autoSync) {
113 this._proxy.call('setAutoSync', [autoSync]);
114 },
115
116 displayName: function(callback) {
117 this._proxy.call('displayName', [], callback);
118 },
119
120 provider: function(callback) {
121 this._proxy.call('provider', [], callback);
122 },
123
124 service: function(callback) {
125 this._proxy.call('service', [], callback);
126 },73 },
12774
128 // methods75 // methods
@@ -138,151 +85,8 @@
138 },85 },
139 };86 };
14087
141 function Manager(id) {
142 this._proxy = backendBridge.createRemoteObject(
143 PLUGIN_URI, 'Manager', id);
144 };
145 Manager.prototype = {
146 createAccount: function(providerName, callback) {
147 this._proxy.call('createAccount', [providerName], callback);
148 },
149 loadAccount: function(id, callback) {
150 this._proxy.call('loadAccount', [id], callback);
151 },
152
153 // extras
154
155 destroy: function() {
156 this._proxy.call('destroy', []);
157 },
158 };
159
160 function ProviderModel(id) {
161 this._proxy = backendBridge.createRemoteObject(
162 PLUGIN_URI, 'ProviderModel', id);
163 };
164 ProviderModel.prototype = {
165 // properties
166 count: function(callback) {
167 this._proxy.call('count', [], callback);
168 },
169
170 applicationId: function(callback) {
171 this._proxy.call('applicationId', [], callback);
172 },
173 setApplicationId: function(applicationId, callback) {
174 this._proxy.call('setApplicationId', [applicationId, callback]);
175 },
176
177 // QAbtractListModel prototype
178
179 at: function(idx, callback) {
180 this._proxy.call('at',
181 [idx],
182 callback);
183 },
184
185 // extras
186
187 destroy: function() {
188 this._proxy.call('destroy', []);
189 },
190 };
191
192 function AccountServiceModel(id) {
193 this._proxy = backendBridge.createRemoteObject(
194 PLUGIN_URI, 'AccountServiceModel', id);
195 };
196 AccountServiceModel.prototype = {
197 // properties
198 count: function(callback) {
199 this._proxy.call('count', [], callback);
200 },
201
202 service: function(callback) {
203 this._proxy.call('service', [], callback);
204 },
205 setService: function(service, callback) {
206 this._proxy.call('setService', [service, callback]);
207 },
208
209 provider: function(callback) {
210 this._proxy.call('provider', [], callback);
211 },
212 setProvider: function(provider, callback) {
213 this._proxy.call('setProvider', [provider, callback]);
214 },
215
216 serviceType: function(callback) {
217 this._proxy.call('serviceType', [], callback);
218 },
219 setServiceType: function(serviceType, callback) {
220 this._proxy.call('setServiceType', [serviceType, callback]);
221 },
222
223 includeDisabled: function(callback) {
224 this._proxy.call('includeDisabled', [], callback);
225 },
226 setIncludeDisabled: function(includeDisabled, callback) {
227 this._proxy.call('setIncludeDisabled', [includeDisabled, callback]);
228 },
229
230 accountId: function(callback) {
231 this._proxy.call('accountId', [], callback);
232 },
233 setAccountId: function(accountId, callback) {
234 this._proxy.call('setAccountId', [accountId, callback]);
235 },
236
237 // QAbtractListModel prototype
238
239 at: function(idx, callback) {
240 this._proxy.call('at',
241 [idx],
242 callback);
243 },
244
245 // extras
246
247 destroy: function() {
248 this._proxy.call('destroy', []);
249 },
250 };
251
252 function ApplicationModel(id) {
253 this._proxy = backendBridge.createRemoteObject(
254 PLUGIN_URI, 'ApplicationModel', id);
255 };
256 ApplicationModel.prototype = {
257 // method
258 service: function(callback) {
259 this._proxy.call('service', [], callback);
260 },
261 setService: function(service, callback) {
262 this._proxy.call('setService', [service, callback]);
263 },
264
265 // QAbtractListModel prototype
266
267 at: function(idx, callback) {
268 this._proxy.call('at',
269 [idx],
270 callback);
271 },
272
273 // extras
274
275 destroy: function() {
276 this._proxy.call('destroy', []);
277 },
278 };
279
280 function _constructorFromName(className) {88 function _constructorFromName(className) {
281 var constructorPerName = {89 var constructorPerName = {
282 "AccountServiceModel": AccountServiceModel,
283 "Account": Account,
284 "ProviderModel": ProviderModel,
285 "Manager": Manager,
286 "AccountService": AccountService,90 "AccountService": AccountService,
287 };91 };
288 return className in constructorPerName92 return className in constructorPerName
@@ -301,126 +105,40 @@
301 var api = external.getUnityObject(1.0);105 var api = external.getUnityObject(1.0);
302 var oa = api.OnlineAccounts;106 var oa = api.OnlineAccounts;
303107
304 oa.api.getAccountsInfoFor(null, 'facebook', function(result) { [...] });108 oa.api.getAccounts({'provider': 'facebook'}, function(result) { [...] });
305 */109 */
306 return {110 return {
307111
308 Account: {
309 RemovalOptions: {
310 RemoveAccountOnly: 0,
311 RemoveCredentials: 1
312 }
313 },
314
315 /**
316 * Creates a AccountServiceModel object.
317 *
318 * @method createAccountServiceModel
319 * @param callback {Function (ProviderModel)}
320 */
321 createAccountServiceModel: function(callback) {
322 backendBridge.call('OnlineAccounts.createAccountServiceModel'
323 , []
324 , callback);
325 },
326
327 /**
328 * Creates a Manager object.
329 *
330 * @method createManager
331 * @param callback {Function (Manager)}
332 */
333 createManager: function(callback) {
334 backendBridge.call('OnlineAccounts.createManager'
335 , []
336 , callback);
337 },
338
339 /**
340 * Creates a ProviderModel object.
341 *
342 * @method createProviderModel
343 * @param callback {Function (ProviderModel)}
344 */
345 createProviderModel: function(callback) {
346 backendBridge.call('OnlineAccounts.createProviderModel'
347 , []
348 , callback);
349 },
350
351 api: {112 api: {
352 /**113 /**
353 * Gets the access token for a given set of filtering parameters.114 * Gets the configured accounts satisfying the given filters.
354 * 115 *
355 * @method api.getAccessTokenFor116 * @method api.getAccounts
356 * @param service {String} If set, the access token will be retrieved for the accounts that correspond to that specific service.117 * @param filters {Object} A dictionary of parameters to filter the result. The filtering keys are:
357 * @param provider {String} If set, the access token will be retrieved for the accounts that correspond to that specific service.118 * - application: the ID of a application (see /usr/share/accounts/applications/ or ~/.local/share/accounts/applications/ for a list of the available applications)
358 * @param accountId {Integer} If set, the access token will be retrieved for the accounts that correspond to that specific service.119 * - provider: the ID of a provider (see /usr/share/accounts/providers/ or ~/.local/share/accounts/providers/ for a list of the available providers)
359 * It is used when multiple accounts are found, otherwise the first account is selected.120 * - service: the ID of a service (see /usr/share/accounts/services/ or ~/.local/share/accounts/services/ for a list of the available services)
360 * @param callback {Function(Object(error:, authenticated: Bool, data: ))} Callback that receives the result or null121 *
361 * 122 * @param callback {Function(List of AccountService objects)} Callback that receives the result or null
362 * @example
363
364 var api = external.getUnityObject(1.0);
365 var oa = api.OnlineAccounts;
366
367 oa.api.getAccessTokenFor(null, 'facebook', null, function(result) {
368 if (result.error) {
369 console.log("Error: " + result.error);
370 return;
371 }
372 console.log("Authenticated: "
373 + result.authenticated
374 + ", token: "
375 + result.data);
376 });
377 */
378 getAccessTokenFor: function(service, provider, accountId, callback) {
379 backendBridge.call('OnlineAccounts.getAccessTokenFor'
380 , [service, provider, accountId]
381 , callback);
382 },
383
384 /**
385 * Gets the account information for a given set of filtering parameters.
386 *
387 * @method api.getAccountsInfoFor
388 * @param service {String} If set, the access token will be retrieved for the accounts that correspond to that specific service.
389 * @param provider {String} If set, the access token will be retrieved for the accounts that correspond to that specific service.
390 * @param callback {Function(List of Object(displayName:, accountId: Bool, providerName: String, serviceName: String, enabled: Bool))} Callback that receives the result or null
391 *123 *
392 * @example124 * @example
393 var api = external.getUnityObject(1.0);125 var api = external.getUnityObject(1.0);
394 var oa = api.OnlineAccounts;126 var oa = api.OnlineAccounts;
395 127
396 oa.api.getAccountsInfoFor(null, 'facebook', function(result) {128 oa.api.getAccounts({'provider': 'facebook'}, function(result) {
397 for (var i = 0; i < result.length; ++i) {129 for (var i = 0; i < result.length; ++i) {
398 console.log("name: " + result[i].displayName130 console.log("name: " + result[i].displayName()
399 + ', id: ' + result[i].accountId131 + ', id: ' + result[i].accountId()
400 + ', providerName: ' + result[i].providerName132 + ', providerName: ' + result[i].provider().displayName
401 + ', serviceName: ' + result[i].serviceName133 + ', enabled: ' + (result[i].enabled() ? "true" : "false")
402 + ', enabled: ' + (result[i].enabled ? "true" : "false")
403 );134 );
404 } 135 }
405 });136 });
406137
407 */138 */
408 getAccountsInfoFor: function(service, provider, callback) {139 getAccounts: function(filters, callback) {
409 backendBridge.call('OnlineAccounts.getAccountsInfoFor'140 backendBridge.call('OnlineAccounts.getAccounts'
410 , [service, provider]141 , [filters]
411 , callback);
412 },
413
414 /**
415 * Gets the account that corresponds to a given id.
416 *
417 * @method api.getAccountById
418 * @param accountId {Integer} The account id.
419 * @param callback {Function(Account)} Callback that receives the result or null
420 */
421 getAccountById: function(accountId, callback) {
422 backendBridge.call('OnlineAccounts.getAccountById'
423 , [accountId]
424 , callback);142 , callback);
425 },143 },
426 },144 },
427145
=== modified file 'src/Ubuntu/UnityWebApps/common/js/unity-binding-bridge.js'
--- src/Ubuntu/UnityWebApps/common/js/unity-binding-bridge.js 2014-01-21 19:58:04 +0000
+++ src/Ubuntu/UnityWebApps/common/js/unity-binding-bridge.js 2014-02-26 13:33:27 +0000
@@ -172,6 +172,10 @@
172 arg.content);172 arg.content);
173 return narg;173 return narg;
174 }174 }
175 else if (arg instanceof Array) {
176 return self._translateArgs(arg);
177 }
178
175 return arg;179 return arg;
176 });180 });
177 return _args;181 return _args;

Subscribers

People subscribed via source and target branches

to all changes: