PageRenderTime 31ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 1ms

/portlets/opensocial-portlet/docroot/gadget/js/main.js

https://github.com/l15k4/liferay-plugins
JavaScript | 922 lines | 713 code | 209 blank | 0 comment | 81 complexity | 9bba6d6c708de61358c3ff4b2f7ea597 MD5 | raw file
  1. AUI().add(
  2. 'liferay-open-social-gadget',
  3. function(A) {
  4. var Lang = A.Lang;
  5. var containsString = Lang.String.contains;
  6. var getClassName = A.getClassName;
  7. var isArray = Lang.isArray;
  8. var isString = Lang.isString;
  9. var CSS_CLASS_GADGET = getClassName('gadget');
  10. var GADGET_IFRAME_PREFIX = 'remote_iframe_';
  11. var MAP = {};
  12. var PREFIX = 'gadget:';
  13. var STR_EMPTY = '';
  14. var TPL_IFRAME = '<iframe id="{iframeId}" name="{iframeId}" class="' + CSS_CLASS_GADGET + '" src="{src}" frameborder="no" scrolling="{scrolling}" {height} {width}></iframe>';
  15. var Gadget = A.Component.create(
  16. {
  17. _id: 0,
  18. NAME: 'liferaygadget',
  19. ATTRS: {
  20. additionalParams: {},
  21. appId: {},
  22. content: {},
  23. country: {
  24. value: 'ALL'
  25. },
  26. debug: {},
  27. height: {
  28. setter: function(v) {
  29. if (v > 0) {
  30. return v;
  31. }
  32. else {
  33. return null;
  34. }
  35. }
  36. },
  37. iframeId: {
  38. getter: '_getIframeId'
  39. },
  40. iframeUrl: {
  41. getter: '_getIframeUrl'
  42. },
  43. language: {
  44. value: 'ALL'
  45. },
  46. moduleId: {
  47. valueFn: function() {
  48. return Gadget._id++;
  49. }
  50. },
  51. nocache: {
  52. value: 1
  53. },
  54. parentUrl: {
  55. value: document.location.protocol + '://' + document.location.host,
  56. setter: '_setParentUrl'
  57. },
  58. portletId:{},
  59. pubsubURILoadTimeout: {
  60. setter: function(v) {
  61. if (v > 0) {
  62. return v;
  63. }
  64. else {
  65. return null;
  66. }
  67. }
  68. },
  69. requiresPubsub:{},
  70. rpcRelay: {},
  71. rpcToken: {
  72. value: Math.round(0x7FFFFFFF * Math.random())
  73. },
  74. scrolling: {
  75. setter: function(v) {
  76. if (v) {
  77. return 'yes';
  78. }
  79. else {
  80. return 'no';
  81. }
  82. }
  83. },
  84. serverBase: {},
  85. secureToken: {
  86. value: 'john.doe:john.doe:appid:cont:url:0:default'
  87. },
  88. specUrl: {},
  89. store: {
  90. valueFn: function() {
  91. return new ExpandoStore();
  92. }
  93. },
  94. userPrefs: {
  95. value: {}
  96. },
  97. view: {
  98. value: 'default'
  99. },
  100. viewParams: {},
  101. width: {
  102. setter: function(v) {
  103. if (v > 0) {
  104. return v;
  105. }
  106. else {
  107. return null;
  108. }
  109. }
  110. }
  111. },
  112. prototype: {
  113. initializer: function() {
  114. var instance = this;
  115. Gadget.register(instance);
  116. gadgets.pubsub2router.init(
  117. {
  118. hub: managedHub
  119. }
  120. );
  121. },
  122. renderUI: function() {
  123. var instance = this;
  124. var height = instance.get('height');
  125. var iframeId = instance.get('iframeId');
  126. var scrolling = instance.get('scrolling');
  127. var secureToken = instance.get('secureToken');
  128. var width = instance.get('width');
  129. if (instance.get('requiresPubsub')) {
  130. var iframeAttrs = {
  131. className: CSS_CLASS_GADGET,
  132. frameborder: 'no',
  133. scrolling: scrolling
  134. };
  135. if (height) {
  136. iframeAttrs.height = height;
  137. }
  138. if (width) {
  139. iframeAttrs.width = width;
  140. }
  141. var container = gadgets.pubsub2router.hub.getContainer(iframeId);
  142. if (container) {
  143. delete gadgets.pubsub2router.hub._containers[iframeId];
  144. }
  145. container = new OpenAjax.hub.IframeContainer(
  146. gadgets.pubsub2router.hub,
  147. iframeId,
  148. {
  149. Container: {
  150. onSecurityAlert: function(source, alertType) {
  151. gadgets.error('Security error for container ' + source.getClientID() + ' : ' + alertType);
  152. source.getIframe().src = 'about:blank';
  153. }
  154. },
  155. IframeContainer: {
  156. iframeAttrs: iframeAttrs,
  157. parent: instance.get('contentBox'),
  158. timeout: instance.get('pubsubURILoadTimeout'),
  159. tunnelURI: shindig.uri(instance.get('serverBase') + instance.get('rpcRelay')).resolve(shindig.uri(window.location.href)),
  160. uri: instance.get('iframeUrl')
  161. }
  162. }
  163. );
  164. instance._iframe = container.getIframe();
  165. }
  166. else {
  167. var iframe = Lang.sub(
  168. TPL_IFRAME,
  169. {
  170. height: (height ? 'height="' + height + '"' : STR_EMPTY),
  171. iframeId: iframeId,
  172. scrolling: scrolling,
  173. src: instance.get('iframeUrl'),
  174. width: (width ? 'width="' + width + '"' : STR_EMPTY)
  175. }
  176. );
  177. var iframeNode = A.Node.create(iframe);
  178. instance.get('contentBox').appendChild(iframeNode);
  179. instance._iframe = iframeNode.getDOM();
  180. gadgets.rpc.setRelayUrl(iframeId, instance.get('serverBase') + instance.get('rpcRelay'));
  181. gadgets.rpc.setAuthToken(iframeId, instance.get('rpcToken'));
  182. }
  183. },
  184. bindUI: function() {
  185. var instance = this;
  186. instance.after(
  187. {
  188. additionalParamsChange: instance._afterAdditionalParamsChange,
  189. countryChange: instance._afterCountryChange,
  190. debugChange: instance._afterDebugChange,
  191. heightChange: instance._afterIframeHeightChange,
  192. languageChange: instance._afterLanguageChange,
  193. nocacheChange: instance._afterNocacheChange,
  194. parentUrlChange: instance._afterParentUrlChange,
  195. scrollingChange: instance._afterIframeScrollingChange,
  196. secureTokenChange: instance._afterSecureTokenChange,
  197. specUrlChange: instance._afterSpecUrlChange,
  198. userPrefsChange: instance._afterUserPrefsChange,
  199. viewChange: instance._afterViewChange,
  200. viewParamsChange: instance._afterViewParamsChange,
  201. widthChange: instance._afterIframeWidthChange
  202. }
  203. );
  204. },
  205. syncUI: function() {
  206. var instance = this;
  207. instance.get('store').getPrefs(instance, A.bind(instance._syncPrefs, instance));
  208. },
  209. getUserPrefParams: function() {
  210. var instance = this;
  211. var userPrefs = instance.get('userPrefs');
  212. var buffer = [];
  213. for (var i in userPrefs) {
  214. buffer.push('&up_' + encodeURIComponent(i) + '=' + encodeURIComponent(userPrefs[i]));
  215. }
  216. return buffer.join(STR_EMPTY);
  217. },
  218. _afterAdditionalParamsChange: function(event) {
  219. var instance = this;
  220. var src = instance._iframe.src;
  221. var prevAdditionalParams = event.prevVal;
  222. for (var i in prevAdditionalParams) {
  223. src = instance._setSrcParameter(encodeURIComponent(i), '', src);
  224. }
  225. var newAdditionalParams = event.newVal;
  226. for (var i in newAdditionalParams) {
  227. src = instance._setSrcParameter(encodeURIComponent(i), encodeURIComponent(newAdditionalParams[i]), src);
  228. }
  229. instance._iframe.src = src;
  230. },
  231. _afterCountryChange: function(event) {
  232. var instance = this;
  233. instance._refreshSrcParameter('country', event.newVal);
  234. },
  235. _afterDebugChange: function(event) {
  236. var instance = this;
  237. var debug = 0;
  238. if (instance.get('debug')) {
  239. debug = 1;
  240. }
  241. instance._refreshSrcParameter('debug', debug);
  242. },
  243. _afterIframeHeightChange: function(event) {
  244. var instance = this;
  245. instance._uiSetIframeHeight(event.newVal);
  246. },
  247. _afterIframeScrollingChange: function(event) {
  248. var instance = this;
  249. instance._uiSetIframeScrolling(event.newVal);
  250. },
  251. _afterIframeWidthChange: function(event) {
  252. var instance = this;
  253. instance._uiSetIframeWidth(event.newVal);
  254. },
  255. _afterLanguageChange: function(event) {
  256. var instance = this;
  257. instance._refreshSrcParameter('lang', event.newVal);
  258. },
  259. _afterNocacheChange: function(event) {
  260. var instance = this;
  261. instance._refreshSrcParameter('nocache', event.newVal);
  262. },
  263. _afterParentUrlChange: function(event) {
  264. var instance = this;
  265. var parentUrl = event.newVal;
  266. if (parentUrl) {
  267. instance._refreshSrcParameter('parent', parentUrl);
  268. }
  269. },
  270. _afterSecureTokenChange: function(event) {
  271. var instance = this;
  272. var secureToken = event.newVal;
  273. if (secureToken) {
  274. instance._refreshSrcParameter('st', secureToken);
  275. }
  276. },
  277. _afterSpecUrlChange: function(event) {
  278. var instance = this;
  279. instance._refreshSrcParameter('url', event.newVal);
  280. },
  281. _afterUserPrefsChange: function(event) {
  282. var instance = this;
  283. if (!event.SYNC) {
  284. instance.get('store').savePrefs(instance);
  285. }
  286. },
  287. _afterViewChange: function(event) {
  288. var instance = this;
  289. instance._refreshSrcParameter('view', event.newVal);
  290. },
  291. _afterViewParamsChange: function(event) {
  292. var instance = this;
  293. var viewParams = event.newVal;
  294. if (parentUrl) {
  295. instance._refreshSrcParameter('view-params', encodeURIComponent(A.JSON.stringify(viewParams)));
  296. }
  297. },
  298. _getIframeId: function(value) {
  299. var instance = this;
  300. return GADGET_IFRAME_PREFIX + instance.get('moduleId');
  301. },
  302. _getIframeUrl: function(value) {
  303. var instance = this;
  304. var url = STR_EMPTY;
  305. var urlData = {
  306. aid: instance.get('appId'),
  307. container: instance._CONTAINER,
  308. mid: instance.get('moduleId'),
  309. nocache: instance.get('nocache'),
  310. country: instance.get('country'),
  311. lang: instance.get('language'),
  312. view: instance.get('view'),
  313. url: instance.get('specUrl')
  314. };
  315. var parentUrl = instance.get('parentUrl');
  316. if (parentUrl) {
  317. urlData.parent = parentUrl;
  318. }
  319. if (instance.get('debug')) {
  320. urlData.debug = 1;
  321. }
  322. url = instance.get('serverBase') + 'ifr?' + A.QueryString.stringify(urlData);
  323. var content = instance.get('content');
  324. if (content) {
  325. url += '&rawxml=' + content;
  326. }
  327. var secureToken = instance.get('secureToken');
  328. url += instance.get('additionalParams');
  329. url += instance.getUserPrefParams();
  330. if (secureToken) {
  331. url += '&st=' + secureToken;
  332. }
  333. if (!instance.get('requiresPubsub')) {
  334. url += '#rpctoken=' + instance.get('rpcToken');
  335. }
  336. var viewParams = instance.get('viewParams');
  337. if (viewParams) {
  338. url += '&view-params=' + encodeURIComponent(A.JSON.stringify(viewParams));
  339. }
  340. return url;
  341. },
  342. _refreshSrcParameter: function(key, value) {
  343. var instance = this;
  344. var src = instance._iframe.src;
  345. src = instance._setSrcParameter(key, value, src);
  346. instance._iframe.src = src;
  347. },
  348. _refreshUserPrefs: function() {
  349. var instance = this;
  350. var src = instance._iframe.src;
  351. var userPrefs = instance.get('userPrefs');
  352. for (var i in userPrefs) {
  353. src = instance._setSrcParameter('&up_' + encodeURIComponent(i), encodeURIComponent(userPrefs[i]), src);
  354. }
  355. instance._iframe.src = src;
  356. },
  357. _setParentUrl: function(value) {
  358. var instance = this;
  359. if (!value.match(/^http[s]?:\/\//)) {
  360. value = document.location.href.match(/^[^?#]+\//)[0] + value;
  361. }
  362. return value;
  363. },
  364. _setSrcParameter: function(key, value, src) {
  365. var instance = this;
  366. var parameters = src.split('&');
  367. var parameterFound = false;
  368. for (var i = 0; i < parameters.length; i++) {
  369. var parameter = parameters[i].split('=');
  370. if (parameter[0] == key) {
  371. parameter[1] = value;
  372. parameters[i] = parameter.join('=');
  373. parameterFound = true;
  374. break;
  375. }
  376. }
  377. if (!parameterFound) {
  378. var newParameter = key + '=' + value;
  379. parameters[parameters.length] = newParameter;
  380. }
  381. return parameters.join('&');
  382. },
  383. _syncPrefs: function(prefs) {
  384. var instance = this;
  385. instance.set(
  386. 'userPrefs',
  387. prefs,
  388. {
  389. SYNC: true
  390. }
  391. );
  392. instance._refreshUserPrefs();
  393. },
  394. _uiSetIframeHeight: function(value) {
  395. var instance = this;
  396. instance._iframe.setAttribute('height', value);
  397. },
  398. _uiSetIframeScrolling: function(value) {
  399. var instance = this;
  400. instance._iframe.setAttribute('scrolling', value);
  401. },
  402. _uiSetIframeWidth: function(value) {
  403. var instance = this;
  404. instance._iframe.setAttribute('width', value);
  405. },
  406. _CONTAINER: 'default'
  407. }
  408. }
  409. );
  410. var DefaultStore = A.Component.create(
  411. {
  412. ATTRS: {
  413. userPrefsKey: {}
  414. },
  415. EXTENDS: A.Base,
  416. NAME: 'gadgetstoredefault',
  417. prototype: {
  418. getPrefs: Lang.emptyFn,
  419. savePrefs: Lang.emptyFn
  420. }
  421. }
  422. );
  423. var CookieStore = A.Component.create(
  424. {
  425. EXTENDS: DefaultStore,
  426. NAME: 'gadgetstorecookie',
  427. prototype: {
  428. getPrefs: function(gadget, callback) {
  429. var instance = this;
  430. if (Lang.isFunction(callback)) {
  431. callback(A.Cookie.getSubs(instance.get('userPrefsKey')) || {});
  432. }
  433. },
  434. savePrefs: function(gadget) {
  435. var instance = this;
  436. return A.Cookie.setSubs(instance.get('userPrefsKey'), gadget.get('userPrefs'));
  437. }
  438. }
  439. }
  440. );
  441. var ExpandoStore = A.Component.create(
  442. {
  443. EXTENDS: DefaultStore,
  444. NAME: 'gadgetstoreexpando',
  445. prototype: {
  446. getPrefs: function(gadget, callback) {
  447. var instance = this;
  448. Liferay.Service.Expando.ExpandoValue.getJSONData(
  449. {
  450. companyId: themeDisplay.getCompanyId(),
  451. className: instance._CLASS_NAME,
  452. tableName: instance._TABLE_NAME,
  453. columnName: instance.get('userPrefsKey'),
  454. classPK: themeDisplay.getPlid()
  455. },
  456. function(userPrefs) {
  457. if (Lang.isFunction(callback)) {
  458. if (!userPrefs.exception) {
  459. callback(userPrefs || {});
  460. }
  461. }
  462. }
  463. );
  464. },
  465. savePrefs: function(gadget) {
  466. var instance = this;
  467. var serviceParameterTypes = [
  468. 'long',
  469. 'java.lang.String',
  470. 'java.lang.String',
  471. 'java.lang.String',
  472. 'long',
  473. 'java.lang.String'
  474. ];
  475. return Liferay.Service.Expando.ExpandoValue.addValue(
  476. {
  477. companyId: themeDisplay.getCompanyId(),
  478. className: instance._CLASS_NAME,
  479. tableName: instance._TABLE_NAME,
  480. columnName: instance.get('userPrefsKey'),
  481. classPK: themeDisplay.getPlid(),
  482. data: A.JSON.stringify(gadget.get('userPrefs')),
  483. serviceParameterTypes: A.JSON.stringify(serviceParameterTypes)
  484. }
  485. );
  486. },
  487. _CLASS_NAME: 'com.liferay.portal.model.Layout',
  488. _TABLE_NAME: 'OPEN_SOCIAL_DATA_'
  489. }
  490. }
  491. );
  492. var Store = {
  493. Cookie: CookieStore,
  494. Default: DefaultStore,
  495. Expando: ExpandoStore
  496. };
  497. var _instances = {};
  498. Gadget.register = function(gadget) {
  499. if (gadget) {
  500. var id = gadget.get('moduleId');
  501. _instances[id] = gadget;
  502. }
  503. return gadget;
  504. };
  505. Gadget.get = function(id) {
  506. id = String(id);
  507. if (id.indexOf(GADGET_IFRAME_PREFIX) === 0) {
  508. id = id.replace(GADGET_IFRAME_PREFIX, STR_EMPTY);
  509. }
  510. return _instances[id];
  511. };
  512. Liferay._detachInitialFn = Liferay.detach;
  513. Liferay._fireInitialFn = Liferay.fire;
  514. Liferay._onInitialFn = Liferay.on;
  515. Liferay.detach = function(topic, fn) {
  516. var handle = topic;
  517. var gadgetTopic = topic;
  518. var subscriptionId;
  519. if (handle && !handle.detach) {
  520. subscriptionId = getSubscriptionId(topic, fn);
  521. }
  522. if (subscriptionId) {
  523. unsubscribeTopic(gadgetTopic, subscriptionId);
  524. }
  525. return Liferay._detachInitialFn.apply(Liferay, arguments);
  526. };
  527. Liferay.fire = function(topic, data) {
  528. if (containsString(topic, PREFIX)) {
  529. var eventType = topic.replace(PREFIX, STR_EMPTY);
  530. gadgets.pubsub2router.hub.publish(eventType, data);
  531. }
  532. return Liferay._fireInitialFn.apply(Liferay, arguments);
  533. };
  534. Liferay.on = function(topic, fn) {
  535. var handle;
  536. var gadgetTopic;
  537. var subscriptionId;
  538. if (isArray(topic)) {
  539. gadgetTopic = [];
  540. subscriptionId = [];
  541. var eventName;
  542. for (var i = 0; i < topic.length; i++) {
  543. eventName = topic[i];
  544. if (containsString(eventName, PREFIX)) {
  545. gadgetTopic.push(eventName);
  546. subscriptionId.push(subscribeGadgetEvent(eventName, fn));
  547. }
  548. }
  549. }
  550. else if (containsString(topic, PREFIX)) {
  551. gadgetTopic = topic;
  552. subscriptionId = subscribeGadgetEvent(topic, fn);
  553. }
  554. if (subscriptionId && subscriptionId.length) {
  555. handle = Liferay._onInitialFn(topic, Lang.emptyFn);
  556. handle._LFR_HANDLE_DETACH = handle.detach;
  557. handle._LFR_GADGET_TOPIC = gadgetTopic;
  558. handle._LFR_SUB_ID = subscriptionId;
  559. handle.detach = function() {
  560. handle.detach = handle._LFR_HANDLE_DETACH;
  561. unsubscribeTopic(topic, subscriptionId);
  562. };
  563. }
  564. else {
  565. handle = Liferay._onInitialFn.apply(Liferay, arguments);
  566. }
  567. return handle;
  568. };
  569. var getSubscriptionId = function(topic, fn) {
  570. var subscriptionId = null;
  571. if (topic) {
  572. var eventType = topic.replace(PREFIX, STR_EMPTY);
  573. var eventMap = MAP[eventType];
  574. var allIds = (!fn);
  575. if (allIds) {
  576. subscriptionId = [];
  577. }
  578. if (eventMap) {
  579. for (var i in eventMap) {
  580. if (allIds) {
  581. subscriptionId.push(i);
  582. }
  583. else if (eventMap[i] == fn) {
  584. subscriptionId = i;
  585. break;
  586. }
  587. }
  588. }
  589. }
  590. return subscriptionId;
  591. };
  592. var subscribeGadgetEvent = function(topic, fn) {
  593. var eventType = topic.replace(PREFIX, STR_EMPTY);
  594. var eventMap = MAP[eventType] || {};
  595. var subscriptionId = gadgets.pubsub2router.hub.subscribe(eventType, fn);
  596. eventMap[subscriptionId] = fn;
  597. MAP[eventType] = eventMap;
  598. return subscriptionId;
  599. };
  600. var unsubscribeGadgetEvent = function(topic, subscriptionId, fn) {
  601. var eventType = topic.replace(PREFIX, STR_EMPTY);
  602. var eventMap = MAP[eventType];
  603. if (!fn || eventMap[subscriptionId] == fn) {
  604. gadgets.pubsub2router.hub.unsubscribe(subscriptionId);
  605. delete eventMap[subscriptionId];
  606. }
  607. };
  608. var unsubscribeTopic = function(topic, subscriptionId, fn) {
  609. if (isString(topic) && isString(subscriptionId)) {
  610. unsubscribeGadgetEvent(topic, subscriptionId, fn);
  611. }
  612. else if (isString(topic) && isArray(subscriptionId)) {
  613. for (var i = 0; i < subscriptionId.length; i++) {
  614. unsubscribeGadgetEvent(topic, subscriptionId[i], fn);
  615. }
  616. }
  617. else if (isArray(topic) && isArray(subscriptionId)) {
  618. for (var i = 0; i < subscriptionId.length; i++) {
  619. unsubscribeGadgetEvent(topic[i], subscriptionId[i]);
  620. }
  621. }
  622. };
  623. var managedHub = new OpenAjax.hub.ManagedHub(
  624. {
  625. onPublish: function(topic, data, pcont, scont) {
  626. if (!containsString(topic, PREFIX)) {
  627. var eventType = PREFIX + topic;
  628. Liferay._fireInitialFn(eventType, data);
  629. }
  630. return true;
  631. },
  632. onSubscribe: Lang.emptyFnTrue,
  633. onUnsubscribe: Lang.emptyFn
  634. }
  635. );
  636. var inlineContainer = new OpenAjax.hub.InlineContainer(managedHub , "liferay",
  637. {
  638. Container: {
  639. onSecurityAlert: function(source, alertType) {},
  640. onConnect: function(container) {},
  641. onDisconnect: function(container) {}
  642. }
  643. }
  644. );
  645. var hubClient = new OpenAjax.hub.InlineHubClient(
  646. {
  647. HubClient: {
  648. onSecurityAlert: function(source, alertType) {}
  649. },
  650. InlineHubClient: {
  651. container: inlineContainer
  652. }
  653. }
  654. );
  655. gadgets.rpc.register(
  656. 'resize_iframe',
  657. function(height) {
  658. var gadget = Gadget.get(this.f);
  659. if (gadget) {
  660. gadget.set('height', height);
  661. }
  662. }
  663. );
  664. var viewWindowStateMap = {
  665. canvas: 'maximized',
  666. 'default': 'normal',
  667. home: 'normal',
  668. profile: 'normal'
  669. };
  670. gadgets.rpc.register(
  671. 'requestNavigateTo',
  672. function(view, viewParams) {
  673. var gadget = Gadget.get(this.f);
  674. var portletURL = Liferay.PortletURL.createRenderURL();
  675. portletURL.setPortletId(gadget.get('portletId'));
  676. portletURL.setParameter('returnToFullPageURL', document.location.href);
  677. portletURL.setParameter('view', view);
  678. var windowState = viewWindowStateMap[view];
  679. if (windowState) {
  680. portletURL.setWindowState(windowState);
  681. }
  682. if (Lang.isString(viewParams)) {
  683. portletURL.setParameter('viewParams', viewParams);
  684. }
  685. document.location.href = portletURL.toString();
  686. }
  687. );
  688. gadgets.rpc.register(
  689. 'set_pref',
  690. function(editToken, name, value) {
  691. var gadget = Gadget.get(this.f);
  692. if (gadget) {
  693. var length = arguments.length;
  694. var userPrefs = gadget.get('userPrefs');
  695. for (var i = 1; i < length; i += 2) {
  696. arg = arguments[i];
  697. userPrefs[arg] = arguments[i + 1];
  698. }
  699. gadget.set('userPrefs', userPrefs);
  700. }
  701. }
  702. );
  703. gadgets.rpc.register('set_title', Lang.emptyFn);
  704. gadgets.rpc.register('requestSendMessage', Lang.emptyFn);
  705. var OpenSocial = Liferay.namespace('OpenSocial');
  706. OpenSocial.Gadget = Gadget;
  707. OpenSocial.Store = Store;
  708. },
  709. '',
  710. {
  711. requires: ['aui-base', 'aui-io', 'cookie', 'json', 'liferay-portlet-url', 'liferay-service', 'querystring']
  712. }
  713. );