From: <fg...@us...> - 2010-06-17 19:09:15
|
Revision: 2663 http://openutils.svn.sourceforge.net/openutils/?rev=2663&view=rev Author: fgiust Date: 2010-06-17 19:09:09 +0000 (Thu, 17 Jun 2010) Log Message: ----------- MEDIA-142 better layout for the xspf url box (avoid message boxes when possible) and some work on i18n (MEDIA-155) Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/css/playlist-view.css trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages.properties trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages_it.properties trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.html Removed Paths: ------------- trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/js/playlist-view.js Modified: trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/css/playlist-view.css =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/css/playlist-view.css 2010-06-17 19:03:03 UTC (rev 2662) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/css/playlist-view.css 2010-06-17 19:09:09 UTC (rev 2663) @@ -1,3 +1,19 @@ .x-grid3-col-title,.x-grid3-col-description,.x-grid3-col-tags { white-space: normal; } + +#xspfLink { + background-image: url("../icons/16/xspf.png"); + background-repeat: no-repeat; + background-position: left; + padding-left: 20px; + color: #000; +} + +#xspfLinkBox { + width: 100%; +} + +.hidden { + display: none !important; +} \ No newline at end of file Deleted: trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/js/playlist-view.js =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/js/playlist-view.js 2010-06-17 19:03:03 UTC (rev 2662) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-resources/media/js/playlist-view.js 2010-06-17 19:09:09 UTC (rev 2663) @@ -1,321 +0,0 @@ -var playlist, container, playlistView, grid; - -function initPlaylistView(){ - container = parent.viewport.getComponent('center-panel'); - - var dataStore = new Ext.data.SimpleStore({ - fields: ['thumbnail', 'type', 'title', 'description', 'tags', 'handle', 'mediaHandle', 'mediaDialog'] - }); - dataStore.loadData(playlist.entries); - - var colModel = new Ext.grid.ColumnModel([ - { - header: 'Thumbnail', - renderer : function(v, p, record){ - return v ? '<img border="0" alt="" src="' + contextPath + v + '" title="' + record.data['mediaHandle'] + '" />' : ''; - } - }, - {header: 'Type'}, - { - id: 'title', - header: 'Title' - }, - { - id: 'description', - header: 'Description' - }, - { - id: 'tags', - header: 'Tags' - } - ]); - - var tbar = [ - { - text: playlist.msgs.addEntry, - icon: contextPath + '/.resources/media/icons/ico16-add.png', - iconCls: 'button-add', - handler: function(){ - //parent.openWindow('.magnolia/dialogs/playlistentry.html?mgnlPath=' + playlist.handle + '&mgnlRepository=playlists'); - var mgnlWin = parent.parent; - mgnlWin.setNewMedia = function(nodeid, uuid, file, thumb){ - Ext.Ajax.request({ - form: 'addEntryForm', - params: { - mgnlPath: playlist.handle, - media: uuid - }, - success: function(){ - parent.openPlaylist(playlist.handle); - }, - failure: function(){ - // todo - } - }); - }; - mgnlWin.mgnlOpenWindow('/.magnolia/pages/mediaBrowser.html?nodeid=media&selectMedia=true&mgnlCK=' + mgnlWin.mgnlGetCacheKiller(), 800, 500); - } - }, - { - text: playlist.msgs.addEntries, - icon: contextPath + '/.resources/media/icons/ico16-addmany.png', - iconCls: 'button-addmany', - handler: function(){ - var mgnlWin = parent.parent; - parent.openWindow(".magnolia/pages/mediaFolderSelection.html?parentFrame=playlistView&action=addEntries&mgnlCK=" + mgnlWin.mgnlGetCacheKiller()); - } - }, - { - id: 'removeEntryBtn', - text: playlist.msgs.removeEntry, - icon: contextPath + '/.resources/media/icons/ico16-remove.png', - iconCls: 'button-remove', - disabled: true, - handler: function(){ - Ext.MessageBox.confirm('Confirm', 'Are you sure?', function(btn){ - if (btn != 'yes') return; - var s = grid.getSelectionModel().getSelections(); - for(var i = 0, r; r = s[i]; i++){ - removeEntry(r); - } - }); - } - }, - { - id: 'editMediaBtn', - text: playlist.msgs.editMedia, - icon: contextPath + '/.resources/media/icons/ico16-edit.png', - iconCls: 'button-edit', - disabled: true, - handler: function(){ - var s = grid.getSelectionModel().getSelections(); - parent.openWindow('.magnolia/dialogs/' + s[0].data['mediaDialog'] + '.html' - + '?mgnlPath=' + s[0].data['mediaHandle'] - + '&mgnlRepository=media'); - } - } - ]; - - function removeEntry(r){ - Ext.Ajax.request({ - method: 'post', - url: contextPath + '/.magnolia/trees/playlists.html', - params: { - browseMode: false, - deleteNode: r.data['handle'].match(/\/?([^\/]+)$/)[1], - mgnlCK: (new Date()).getTime(), - path: playlist.handle, - treeMode: 'snippet' - }, - success: function(){ - grid.store.remove(r); - } - }); - } - - var dd = new Ext.ux.dd.GridDragDropRowOrder({}); - - var playlistForm = new Ext.FormPanel({ - items: { - xtype: 'fieldset', - labelWidth: 90, - title: 'Playlist details', - defaults: {width: 140}, // Default config options for child items - defaultType: 'textfield', - autoHeight: true, - bodyStyle: Ext.isIE ? 'padding:0 0 5px 15px;' : 'padding:10px 15px;', - border: false, - style: { - "margin-left": "10px", // when you add custom margin in IE 6... - "margin-right": Ext.isIE6 ? (Ext.isStrict ? "-10px" : "-13px") : "0" // you have to adjust for it somewhere else - }, - items: [{ - xtype: 'hidden', - name: 'command', - value: 'save' - }, { - xtype: 'hidden', - name: 'mgnlCK', - value: (new Date()).getTime() - }, { - xtype: 'hidden', - name: 'path', - value: playlist.handle - }, { - fieldLabel: 'Title', - name: 'title', - value: playlist.title, - anchor: '100% none' - }, { - xtype: 'textarea', - fieldLabel: 'Description', - name: 'description', - value: playlist.description, - anchor: '100% none' - }], - buttons: [{ - text: 'Save', - handler: function(){ - if(playlistForm.getForm().isValid()){ - playlistForm.getForm().submit({ - url: contextPath + '/.magnolia/pages/playlistView.html', - success: function(){ - Ext.Msg.alert('Success', 'Playlist successfully saved'); - }, - failure: function(){ - Ext.Msg.alert('Failure', 'Can\'t save the playlist'); - } - }); - } - } - }] - } - }); - - playlistView = new Ext.Panel({ - id: 'playlistView', - frame: true, - labelAlign: 'left', - layout: 'column', - items: [{ - columnWidth: 0.6, - layout: 'fit', - items: { - xtype: 'grid', - id: 'playlistEntries', - viewConfig: { - forceFit: true, - autoFill : true - }, - store: dataStore, - cm: colModel, - selModel: new Ext.grid.RowSelectionModel({ - singleSelect: true, - listeners: { - rowselect: function(sm, row, rec) { - // nothing to do - }, - rowdeselect: function(sm, row, rec) { - // nothing to do - } - } - }), - autoSizeColumns: true, - enableColLock: false, - tbar: tbar, - stripeRows: true, - plugins: [dd] - } - },{ - columnWidth: 0.4, - items: [ - playlistForm, - { - xtype: 'panel', - bodyStyle: 'padding:0 35px;', - html: '<a id="xspfLink" href="' + contextPath + '" class="x-form-item">xspf playlist</a>' - } - ] - }], - renderTo: Ext.getBody() - }); - - grid = Ext.getCmp('playlistEntries'); - - var xspfLink = Ext.get('xspfLink'); - xspfLink.on('click', function() { - Ext.Msg.show({ - title : 'xspf playlist', - msg : 'xspf playlist', - buttons: Ext.Msg.OK, - minWidth: 400, - prompt: true, - value: this.dom.href + '/playlists' + playlist.handle + '.xspf' - }); - Ext.Msg.getDialog().focusEl.dom.select(); - }, xspfLink, {stopEvent:true}); - - dd.on('beforerowmove', function(dropTarget, i1, i2){ - if (i2 > i1 && i2 == grid.store.data.length - 1) return false; - Ext.Ajax.request({ - method: 'post', - url: contextPath + '/.magnolia/trees/playlists.html', - params: { - browseMode: false, - mgnlCK: (new Date()).getTime(), - pasteType: 0, - path: playlist.handle, - pathClipboard: grid.store.getAt(i1).data['handle'], - pathSelected: grid.store.getAt(i2 + (i1 < i2 ? 1 : 0)).data['handle'], - treeAction: 0, - treeMode: 'snippet' - } - }); - }); - grid.getSelectionModel().on('selectionchange', function(sm){ - Ext.getCmp('removeEntryBtn').setDisabled(sm.getCount() < 1); - Ext.getCmp('editMediaBtn').setDisabled(sm.getCount() < 1); - }); - - container.on('bodyresize', resizeGrid); - resizeGrid(); -} - -function disposePlaylistView(){ - if (!container) return; - container.un('bodyresize', resizeGrid); - delete container; -} - -function resizeGrid(){ - playlistView.setWidth(container.body.getWidth(true)); - grid.setHeight(container.body.getHeight(true) - 13); -}; - -function performAction(action, sourceNode, destPath){ - Ext.MessageBox.show({ - title: 'Wait', - msg: 'Adding entries...', - progressText: 'Loading folder...', - width: 300, - progress: true, - closable: false - }); - Ext.Ajax.request({ - method: 'post', - url: contextPath + '/.magnolia/pages/playlistView.html', - params: { - command: 'mediaFolder', - path: destPath - }, - success: function(r){ - var items = Ext.decode(r.responseText).items; - var index = 0; - var addNextEntry = function(){ - if (index == items.length){ - Ext.MessageBox.updateProgress(1, 'All entries added!'); - (function(){ - Ext.MessageBox.hide(); - parent.openPlaylist(playlist.handle); - }).defer(1500); - } - else{ - Ext.Ajax.request({ - form: 'addEntryForm', - params: { - mgnlPath: playlist.handle, - media: items[index] - }, - success: function(){ - var p = (index + 1) / items.length; - Ext.MessageBox.updateProgress(p, parseInt(p * 100, 10) + '% completed'); - index++; - addNextEntry(); - } - }); - } - }; - addNextEntry(); - } - }); -} Modified: trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages.properties =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages.properties 2010-06-17 19:03:03 UTC (rev 2662) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages.properties 2010-06-17 19:09:09 UTC (rev 2663) @@ -112,6 +112,14 @@ playlist.entries.addMany=Add entries playlist.entries.remove=Remove entry playlist.media.edit=Edit media +playlist.xspf.export=XSPF playlist +playlist.saved=Playlist successfully saved +playlist.cantsave=Can''t save the playlist +playlist.details.header=Playlist details +playlist.details.description=Title +playlist.details.description=Description +playlist.save=Save +playlist.folder.added=All entries added! config.search.filters.locale=Locale config.search.filters.text=Text @@ -125,3 +133,4 @@ config.search.filters.options.all=All config.search.filters.options.published=Published config.search.filters.options.notpublished=Not published + Modified: trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages_it.properties =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages_it.properties 2010-06-17 19:03:03 UTC (rev 2662) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/media/lang/messages_it.properties 2010-06-17 19:09:09 UTC (rev 2663) @@ -115,6 +115,14 @@ playlist.entries.addMany=Aggiungi elementi playlist.entries.remove=Rimuovi elemento playlist.media.edit=Modifica media +playlist.xspf.export=Playlist in formato XSPF +playlist.saved=Playlist salvata correttamente +playlist.cantsave=Impossibile salvare la playlist +playlist.details.header=Dettagli Playlist +playlist.details.description=Titolo +playlist.details.description=Descrizione +playlist.save=Salva +playlist.folder.added=Tutti i media sono stati aggiunti config.search.filters.locale=Locale config.search.filters.text=Testo Modified: trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.html =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.html 2010-06-17 19:03:03 UTC (rev 2662) +++ trunk/openutils-mgnlmedia/src/main/resources/net/sourceforge/openutils/mgnlmedia/playlist/pages/PlaylistView.html 2010-06-17 19:09:09 UTC (rev 2663) @@ -1,5 +1,6 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +[#setting url_escaping_charset="UTF-8"] +[#assign mgnlEl = this.getStatic("it.openutils.mgnlutils.el.MgnlUtilsElFunctions")] <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <link rel="stylesheet" type="text/css" href="${this.request.contextPath}/.resources/ext/css/ext-all.css" /> @@ -8,10 +9,336 @@ <script type="text/javascript" src="${this.request.contextPath}/.resources/ext/ext-base.js"></script> <script type="text/javascript" src="${this.request.contextPath}/.resources/ext/ext-all.js"></script> <script type="text/javascript" src="${this.request.contextPath}/.resources/media/js/ext-grid-dd-roworder.js"></script> - <script type="text/javascript" src="${this.request.contextPath}/.resources/media/js/playlist-view.js"></script> <script type="text/javascript"> // <![CDATA[ var contextPath = '${this.request.contextPath}'; + +var playlist, container, playlistView, grid; + +function initPlaylistView(){ + container = parent.viewport.getComponent('center-panel'); + + var dataStore = new Ext.data.SimpleStore({ + fields: ['thumbnail', 'type', 'title', 'description', 'tags', 'handle', 'mediaHandle', 'mediaDialog'] + }); + dataStore.loadData(playlist.entries); + + var colModel = new Ext.grid.ColumnModel([ + { + header: 'Thumbnail', + renderer : function(v, p, record){ + return v ? '<img border="0" alt="" src="' + contextPath + v + '" title="' + record.data['mediaHandle'] + '" />' : ''; + } + }, + {header: 'Type'}, + { + id: 'title', + header: 'Title' + }, + { + id: 'description', + header: 'Description' + }, + { + id: 'tags', + header: 'Tags' + } + ]); + + var tbar = [ + { + text: playlist.msgs.addEntry, + icon: contextPath + '/.resources/media/icons/ico16-add.png', + iconCls: 'button-add', + handler: function(){ + //parent.openWindow('.magnolia/dialogs/playlistentry.html?mgnlPath=' + playlist.handle + '&mgnlRepository=playlists'); + var mgnlWin = parent.parent; + mgnlWin.setNewMedia = function(nodeid, uuid, file, thumb){ + Ext.Ajax.request({ + form: 'addEntryForm', + params: { + mgnlPath: playlist.handle, + media: uuid + }, + success: function(){ + parent.openPlaylist(playlist.handle); + }, + failure: function(){ + // todo + } + }); + }; + mgnlWin.mgnlOpenWindow('/.magnolia/pages/mediaBrowser.html?nodeid=media&selectMedia=true&mgnlCK=' + mgnlWin.mgnlGetCacheKiller(), 800, 500); + } + }, + { + text: playlist.msgs.addEntries, + icon: contextPath + '/.resources/media/icons/ico16-addmany.png', + iconCls: 'button-addmany', + handler: function(){ + var mgnlWin = parent.parent; + parent.openWindow(".magnolia/pages/mediaFolderSelection.html?parentFrame=playlistView&action=addEntries&mgnlCK=" + mgnlWin.mgnlGetCacheKiller()); + } + }, + { + id: 'removeEntryBtn', + text: playlist.msgs.removeEntry, + icon: contextPath + '/.resources/media/icons/ico16-remove.png', + iconCls: 'button-remove', + disabled: true, + handler: function(){ + Ext.MessageBox.confirm('Confirm', 'Are you sure?', function(btn){ + if (btn != 'yes') return; + var s = grid.getSelectionModel().getSelections(); + for(var i = 0, r; r = s[i]; i++){ + removeEntry(r); + } + }); + } + }, + { + id: 'editMediaBtn', + text: playlist.msgs.editMedia, + icon: contextPath + '/.resources/media/icons/ico16-edit.png', + iconCls: 'button-edit', + disabled: true, + handler: function(){ + var s = grid.getSelectionModel().getSelections(); + parent.openWindow('.magnolia/dialogs/' + s[0].data['mediaDialog'] + '.html' + + '?mgnlPath=' + s[0].data['mediaHandle'] + + '&mgnlRepository=media'); + } + } + ]; + + function removeEntry(r){ + Ext.Ajax.request({ + method: 'post', + url: contextPath + '/.magnolia/trees/playlists.html', + params: { + browseMode: false, + deleteNode: r.data['handle'].match(/\/?([^\/]+)$/)[1], + mgnlCK: (new Date()).getTime(), + path: playlist.handle, + treeMode: 'snippet' + }, + success: function(){ + grid.store.remove(r); + } + }); + } + + var dd = new Ext.ux.dd.GridDragDropRowOrder({}); + + var playlistForm = new Ext.FormPanel({ + items: { + xtype: 'fieldset', + labelWidth: 90, + title: '${this.msgs.get('playlist.details.header')?js_string}', + defaults: {width: 140}, // Default config options for child items + defaultType: 'textfield', + autoHeight: true, + bodyStyle: Ext.isIE ? 'padding:0 0 5px 15px;' : 'padding:10px 15px;', + border: false, + style: { + "margin-left": "10px", // when you add custom margin in IE 6... + "margin-right": Ext.isIE6 ? (Ext.isStrict ? "-10px" : "-13px") : "0" // you have to adjust for it somewhere else + }, + items: [{ + xtype: 'hidden', + name: 'command', + value: 'save' + }, { + xtype: 'hidden', + name: 'mgnlCK', + value: (new Date()).getTime() + }, { + xtype: 'hidden', + name: 'path', + value: playlist.handle + }, { + fieldLabel: '${this.msgs.get('playlist.details.title')?js_string}', + name: 'title', + value: playlist.title, + anchor: '100% none' + }, { + xtype: 'textarea', + fieldLabel: '${this.msgs.get('playlist.details.description')?js_string}', + name: 'description', + value: playlist.description, + anchor: '100% none' + }], + buttons: [{ + text: '${this.msgs.get('playlist.save')?js_string}', + handler: function(){ + if(playlistForm.getForm().isValid()){ + playlistForm.getForm().submit({ + url: contextPath + '/.magnolia/pages/playlistView.html', + success: function(){ + Ext.Msg.alert('', '${this.msgs.get('playlist.saved')?js_string}'); + }, + failure: function(){ + Ext.Msg.alert('', '${this.msgs.get('playlist.cantsave')?js_string}'); + } + }); + } + } + }] + } + }); + + playlistView = new Ext.Panel({ + id: 'playlistView', + frame: true, + labelAlign: 'left', + layout: 'column', + items: [{ + columnWidth: 0.6, + layout: 'fit', + items: { + xtype: 'grid', + id: 'playlistEntries', + viewConfig: { + forceFit: true, + autoFill : true + }, + store: dataStore, + cm: colModel, + selModel: new Ext.grid.RowSelectionModel({ + singleSelect: true, + listeners: { + rowselect: function(sm, row, rec) { + // nothing to do + }, + rowdeselect: function(sm, row, rec) { + // nothing to do + } + } + }), + autoSizeColumns: true, + enableColLock: false, + tbar: tbar, + stripeRows: true, + plugins: [dd] + } + },{ + columnWidth: 0.4, + items: [ + playlistForm, + { + xtype: 'panel', + bodyStyle: 'padding:0 35px;', + html: '<a id="xspfLink" href="${mgnlEl.baseUrl()}' + '/playlists' + playlist.handle + '.xml' + '" class="x-form-item">${this.msgs.get('playlist.xspf.export')}</a>' + }, + { + xtype: 'panel', + bodyStyle: 'padding:0 35px;', + html: '<input id="xspfLinkBox" class="hidden" value="${mgnlEl.baseUrl()}' + '/playlists' + playlist.handle + '.xspf' + '" class="x-form-item" readonly="readonly"/>' + } + ] + }], + renderTo: Ext.getBody() + }); + + grid = Ext.getCmp('playlistEntries'); + + var xspfLink = Ext.get('xspfLink'); + xspfLink.on('click', function() { + Ext.get('xspfLinkBox').toggleClass('hidden'); + Ext.get('xspfLinkBox').dom.select(); + }, xspfLink, {stopEvent:true}); + + dd.on('beforerowmove', function(dropTarget, i1, i2){ + if (i2 > i1 && i2 == grid.store.data.length - 1) return false; + Ext.Ajax.request({ + method: 'post', + url: contextPath + '/.magnolia/trees/playlists.html', + params: { + browseMode: false, + mgnlCK: (new Date()).getTime(), + pasteType: 0, + path: playlist.handle, + pathClipboard: grid.store.getAt(i1).data['handle'], + pathSelected: grid.store.getAt(i2 + (i1 < i2 ? 1 : 0)).data['handle'], + treeAction: 0, + treeMode: 'snippet' + } + }); + }); + grid.getSelectionModel().on('selectionchange', function(sm){ + Ext.getCmp('removeEntryBtn').setDisabled(sm.getCount() < 1); + Ext.getCmp('editMediaBtn').setDisabled(sm.getCount() < 1); + }); + + container.on('bodyresize', resizeGrid); + resizeGrid(); +} + +function disposePlaylistView(){ + if (!container) return; + container.un('bodyresize', resizeGrid); + delete container; +} + +function resizeGrid(){ + playlistView.setWidth(container.body.getWidth(true)); + grid.setHeight(container.body.getHeight(true) - 13); +}; + +function performAction(action, sourceNode, destPath){ + Ext.MessageBox.show({ + title: 'Wait', + msg: 'Adding entries...', + progressText: 'Loading folder...', + width: 300, + progress: true, + closable: false + }); + Ext.Ajax.request({ + method: 'post', + url: contextPath + '/.magnolia/pages/playlistView.html', + params: { + command: 'mediaFolder', + path: destPath + }, + success: function(r){ + var items = Ext.decode(r.responseText).items; + var index = 0; + var addNextEntry = function(){ + if (index == items.length){ + Ext.MessageBox.updateProgress(1, '${this.msgs.get('playlist.folder.added')?js_string}'); + (function(){ + Ext.MessageBox.hide(); + parent.openPlaylist(playlist.handle); + }).defer(1500); + } + else{ + Ext.Ajax.request({ + form: 'addEntryForm', + params: { + mgnlPath: playlist.handle, + media: items[index] + }, + success: function(){ + var p = (index + 1) / items.length; + Ext.MessageBox.updateProgress(p, parseInt(p * 100, 10) + '% completed'); + index++; + addNextEntry(); + } + }); + } + }; + addNextEntry(); + } + }); +} + + + + + + + Ext.onReady(function(){ [#if this.playlist?exists] playlist = { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |