summaryrefslogtreecommitdiff
path: root/js/dojo-1.6/dojox/atom
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo-1.6/dojox/atom')
-rw-r--r--js/dojo-1.6/dojox/atom/README53
-rw-r--r--js/dojo-1.6/dojox/atom/io/Connection.js443
-rw-r--r--js/dojo-1.6/dojox/atom/io/Connection.xd.js448
-rw-r--r--js/dojo-1.6/dojox/atom/io/model.js1304
-rw-r--r--js/dojo-1.6/dojox/atom/io/model.xd.js1311
-rw-r--r--js/dojo-1.6/dojox/atom/widget/FeedEntryEditor.js1230
-rw-r--r--js/dojo-1.6/dojox/atom/widget/FeedEntryEditor.xd.js1243
-rw-r--r--js/dojo-1.6/dojox/atom/widget/FeedEntryViewer.js794
-rw-r--r--js/dojo-1.6/dojox/atom/widget/FeedEntryViewer.xd.js805
-rw-r--r--js/dojo-1.6/dojox/atom/widget/FeedViewer.js809
-rw-r--r--js/dojo-1.6/dojox/atom/widget/FeedViewer.xd.js818
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ar/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ar/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ar/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ar/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ar/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ar/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ar/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ar/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ca/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ca/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ca/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ca/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ca/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ca/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ca/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ca/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/cs/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/cs/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/cs/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/cs/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/cs/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/cs/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/cs/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/cs/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/da/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/da/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/da/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/da/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/da/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/da/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/da/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/da/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/de/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/de/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/de/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/de/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/de/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/de/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/de/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/de/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/el/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/el/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/el/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/el/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/el/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/el/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/el/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/el/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/es/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/es/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/es/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/es/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/es/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/es/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/es/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/es/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/fi/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/fi/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/fi/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/fi/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/fi/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/fi/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/fi/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/fi/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/fr/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/fr/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/fr/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/fr/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/fr/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/fr/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/fr/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/fr/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/he/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/he/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/he/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/he/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/he/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/he/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/he/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/he/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/hu/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/hu/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/hu/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/hu/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/hu/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/hu/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/hu/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/hu/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/it/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/it/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/it/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/it/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/it/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/it/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/it/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/it/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ja/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ja/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ja/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ja/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ja/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ja/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ja/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ja/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/kk/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/kk/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/kk/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/kk/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/kk/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/kk/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/kk/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/kk/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ko/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ko/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ko/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ko/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ko/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ko/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ko/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ko/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/nb/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/nb/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/nb/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/nb/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/nb/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/nb/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/nb/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/nb/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/nl/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/nl/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/nl/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/nl/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/nl/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/nl/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/nl/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/nl/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pl/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pl/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pl/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pl/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pl/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pl/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pl/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pl/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pt-pt/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pt-pt/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pt/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pt/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pt/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pt/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pt/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pt/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pt/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/pt/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ro/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ro/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ro/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ro/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ro/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ro/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ro/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ro/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ru/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ru/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ru/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ru/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ru/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ru/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ru/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/ru/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sk/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sk/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sk/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sk/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sk/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sk/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sk/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sk/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sl/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sl/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sl/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sl/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sl/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sl/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sl/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sl/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sv/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sv/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sv/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sv/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sv/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sv/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sv/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/sv/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/th/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/th/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/th/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/th/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/th/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/th/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/th/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/th/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/tr/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/tr/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/tr/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/tr/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/tr/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/tr/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/tr/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/tr/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/zh-tw/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/zh-tw/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/zh/FeedEntryEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/zh/FeedEntryEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/zh/FeedEntryViewer.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/zh/FeedEntryViewer.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/zh/FeedViewerEntry.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/zh/FeedViewerEntry.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/zh/PeopleEditor.js1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/nls/zh/PeopleEditor.xd.js5
-rw-r--r--js/dojo-1.6/dojox/atom/widget/templates/EntryHeader.html1
-rw-r--r--js/dojo-1.6/dojox/atom/widget/templates/FeedEntryEditor.html195
-rw-r--r--js/dojo-1.6/dojox/atom/widget/templates/FeedEntryViewer.html158
-rw-r--r--js/dojo-1.6/dojox/atom/widget/templates/FeedViewer.html6
-rw-r--r--js/dojo-1.6/dojox/atom/widget/templates/FeedViewerEntry.html15
-rw-r--r--js/dojo-1.6/dojox/atom/widget/templates/FeedViewerGrouping.html4
-rw-r--r--js/dojo-1.6/dojox/atom/widget/templates/PeopleEditor.html6
-rw-r--r--js/dojo-1.6/dojox/atom/widget/templates/css/EntryHeader.css35
-rw-r--r--js/dojo-1.6/dojox/atom/widget/templates/css/HtmlFeedEntryEditor.css98
-rw-r--r--js/dojo-1.6/dojox/atom/widget/templates/css/HtmlFeedEntryViewer.css107
-rw-r--r--js/dojo-1.6/dojox/atom/widget/templates/css/HtmlFeedViewer.css16
-rw-r--r--js/dojo-1.6/dojox/atom/widget/templates/css/HtmlFeedViewerEntry.css70
-rw-r--r--js/dojo-1.6/dojox/atom/widget/templates/css/HtmlFeedViewerGrouping.css8
264 files changed, 10697 insertions, 0 deletions
diff --git a/js/dojo-1.6/dojox/atom/README b/js/dojo-1.6/dojox/atom/README
new file mode 100644
index 0000000..2e4936a
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/README
@@ -0,0 +1,53 @@
+-------------------------------------------------------------------------------
+DojoX Data
+-------------------------------------------------------------------------------
+Version 1.0
+Release date: 11/18/2008
+-------------------------------------------------------------------------------
+Project state: experimental
+-------------------------------------------------------------------------------
+Project authors
+ Jared Jurkiewicz (jared.jurkiewicz@gmail.com)
+ Benjamin Schell (Corporate CLA)
+
+-------------------------------------------------------------------------------
+Project description
+
+The DojoX Atom project is an implementation of the ATOM document format in a
+JavaScript model and a full Atom Publishing Protocol (APP) io library for working
+with ATOM feeds
+
+-------------------------------------------------------------------------------
+Dependencies:
+
+DojoX Atom has dependencies on core dojo (dojo.data) and the D.O.H. unit test
+framework.
+-------------------------------------------------------------------------------
+Documentation:
+
+See the Dojo API tool (http://dojotoolkit.org/api)
+as well as dojocampus (http://docs.dojocampus.org/dojox/atom)
+-------------------------------------------------------------------------------
+Contributions:
+
+Constributions of documentation, examples, and fixes are always welcome.
+
+-------------------------------------------------------------------------------
+Installation instructions
+
+Grab the following from the Dojo SVN Repository:
+http://svn.dojotoolkit.org/src/dojo/dojox/trunk/atom/*
+
+Install into the following directory structure:
+/dojox/atom/
+
+...which should be at the same level as your Dojo checkout.
+
+/dojox/atom/*
+
+Require in the sections you wish to use (the model, IO library, etc)
+-------------------------------------------------------------------------------
+Additional Notes:
+ This library is still undergoing some work and as such the API may change
+ hence the marking of 'experimental'.
+
diff --git a/js/dojo-1.6/dojox/atom/io/Connection.js b/js/dojo-1.6/dojox/atom/io/Connection.js
new file mode 100644
index 0000000..8fdcf16
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/io/Connection.js
@@ -0,0 +1,443 @@
+/*
+ Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource['dojox.atom.io.Connection']){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource['dojox.atom.io.Connection'] = true;
+dojo.provide('dojox.atom.io.Connection');
+dojo.require('dojox.atom.io.model');
+
+dojo.declare("dojox.atom.io.Connection",null,{
+ // summary: This object implements a transport layer for working with ATOM feeds and ATOM publishing protocols.
+ // description: This object implements a transport layer for working with ATOM feeds and ATOM publishing protocols.
+ // Specifically, it provides a mechanism by which feeds can be fetched and entries can be fetched, created
+ // deleted, and modified. It also provides access to the introspection data.
+
+ constructor: function(/* Boolean */sync, /* Boolean */preventCache){
+ // summary:
+ // initializer
+ this.sync = sync;
+ this.preventCache = preventCache;
+ },
+
+ preventCache: false, //Flag to denote if the instance should use the xhr prevent cache mechanism
+
+ alertsEnabled: false, //Flag to turn on alerts instead of throwing errors.
+
+ getFeed: function(/*String*/url, /*Function*/callback, /*Function*/errorCallback, scope){
+ // summary:
+ // Function to obtain a s specific ATOM feed from a given ATOM Feed url.
+ // description:
+ // This function takes the URL for a specific ATOM feed and returns
+ // the data from that feed to the caller through the use of a callback
+ // handler.
+ //
+ // url: String
+ // The URL of the ATOM feed to fetch.
+ // callback:
+ // Function
+ // A function reference that will handle the feed when it has been retrieved.
+ // The callback should accept two parameters: The feed object and the original complete DOM object.
+ // scope: Object
+ // The scope to use for all callbacks.
+ //
+ // returns:
+ // Nothing. The return is handled through the callback handler.
+ this._getXmlDoc(url, "feed", new dojox.atom.io.model.Feed(), dojox.atom.io.model._Constants.ATOM_NS, callback, /*handleDocumentRetrieved,*/ errorCallback, scope);
+ },
+
+ getService: function(url, callback, errorCallback, scope){
+ // summary:
+ // Function to retrieve an introspection document from the given URL.
+ // description:
+ // This function takes the URL for an ATOM item and feed and returns
+ // the introspection document.
+ //
+ // url:
+ // String
+ // The URL of the ATOM document to obtain the introspection document of.
+ // callback:
+ // Function
+ // A function reference that will handle the introspection document when it has been retrieved.
+ // The callback should accept two parameters: The introspection document object and the original complete DOM object.
+ //
+ // returns:
+ // Nothing. The return is handled through the callback handler.
+ this._getXmlDoc(url, "service", new dojox.atom.io.model.Service(url), dojox.atom.io.model._Constants.APP_NS, callback, errorCallback, scope);
+ },
+
+ getEntry: function(url, callback, errorCallback, scope){
+ // summary:
+ // Function to retrieve a single entry from an ATOM feed from the given URL.
+ // description:
+ // This function takes the URL for an ATOM entry and returns the constructed dojox.atom.io.model.Entry object through
+ // the specified callback.
+ //
+ // url:
+ // String
+ // The URL of the ATOM Entry document to parse.
+ // callback:
+ // Function
+ // A function reference that will handle the Entry object obtained.
+ // The callback should accept two parameters, the dojox.atom.io.model.Entry object and the original dom.
+ //
+ // returns:
+ // Nothing. The return is handled through the callback handler.
+ this._getXmlDoc(url, "entry", new dojox.atom.io.model.Entry(), dojox.atom.io.model._Constants.ATOM_NS, callback, errorCallback, scope);
+ },
+
+ _getXmlDoc: function(url, nodeName, newNode, namespace, callback, errorCallback, scope){
+ // summary:
+ // Internal Function to retrieve an XML document and pass the results to a callback.
+ // description:
+ // This internal function takes the URL for an XML document and and passes the
+ // parsed contents to a specified callback.
+ //
+ // url:
+ // String
+ // The URL of the XML document to retrieve
+ // callback:
+ // Function
+ // A function reference that will handle the retrieved XML data.
+ // The callback should accept one parameter, the DOM of the parsed XML document.
+ //
+ // returns:
+ // Nothing. The return is handled through the callback handler.
+ if(!scope){
+ scope = dojo.global;
+ }
+ var ae = this.alertsEnabled;
+ var xhrArgs = {
+ url: url,
+ handleAs: "xml",
+ sync: this.sync,
+ preventCache: this.preventCache,
+ load: function(data, args){
+ var node = null;
+ var evaldObj = data;
+ var nodes;
+ if(evaldObj){
+ //find the first node of the appropriate name
+ if(typeof(evaldObj.getElementsByTagNameNS)!= "undefined"){
+ nodes = evaldObj.getElementsByTagNameNS(namespace,nodeName);
+ if(nodes && nodes.length > 0){
+ node = nodes.item(0);
+ }else if(evaldObj.lastChild){
+ // name_spaces can be used without declaration of atom (for example
+ // gooogle feeds often returns iTunes name_space qualifiers on elements)
+ // Treat this situation like name_spaces not enabled.
+ node = evaldObj.lastChild;
+ }
+ }else if(typeof(evaldObj.getElementsByTagName)!= "undefined"){
+ // Find the first eith the correct tag name and correct namespace.
+ nodes = evaldObj.getElementsByTagName(nodeName);
+ if(nodes && nodes.length > 0){
+ for(var i=0; i<nodes.length; i++){
+ if(nodes[i].namespaceURI == namespace){
+ node = nodes[i];
+ break;
+ }
+ }
+ }else if(evaldObj.lastChild){
+ node = evaldObj.lastChild;
+ }
+ }else if(evaldObj.lastChild){
+ node = evaldObj.lastChild;
+ }else{
+ callback.call(scope, null, null, args);
+ return;
+ }
+ newNode.buildFromDom(node);
+ if(callback){
+ callback.call(scope, newNode, evaldObj, args);
+ }else if(ae){
+ throw new Error("The callback value does not exist.");
+ }
+ }else{
+ callback.call(scope, null, null, args);
+ }
+ }
+ };
+
+ if(this.user && this.user !== null){
+ xhrArgs.user = this.user;
+ }
+ if(this.password && this.password !== null){
+ xhrArgs.password = this.password;
+ }
+
+ if(errorCallback){
+ xhrArgs.error = function(error, args){errorCallback.call(scope, error, args);};
+ }else{
+ xhrArgs.error = function(){
+ throw new Error("The URL requested cannot be accessed");
+ };
+ }
+ dojo.xhrGet(xhrArgs);
+ },
+
+ updateEntry: function(entry, callback, errorCallback, retrieveUpdated, xmethod, scope){
+ // summary:
+ // Function to update a specific ATOM entry by putting the new changes via APP.
+ // description:
+ // This function takes a specific dojox.atom.io.model.Entry object and pushes the
+ // changes back to the provider of the Entry.
+ // The entry MUST have a link tag with rel="edit" for this to work.
+ //
+ // entry:
+ // Object
+ // The dojox.atom.io.model.Entry object to update.
+ // callback:
+ // Function
+ // A function reference that will handle the results from the entry update.
+ // The callback should accept two parameters: The first is an Entry object, and the second is the URL of that Entry
+ // Either can be null, depending on the value of retrieveUpdated.
+ // retrieveUpdated:
+ // boolean
+ // A boolean flag denoting if the entry that was updated should then be
+ // retrieved and returned to the caller via the callback.
+ // xmethod:
+ // boolean
+ // Whether to use POST for PUT/DELETE items and send the X-Method-Override header.
+ // scope:
+ // Object
+ // The scope to use for all callbacks.
+ //
+ // returns:
+ // Nothing. The return is handled through the callback handler.
+ if(!scope){
+ scope = dojo.global;
+ }
+ entry.updated = new Date();
+ var url = entry.getEditHref();
+ if(!url){
+ throw new Error("A URL has not been specified for editing this entry.");
+ }
+
+ var self = this;
+ var ae = this.alertsEnabled;
+ var xhrArgs = {
+ url: url,
+ handleAs: "text",
+ contentType: "text/xml",
+ sync: this.sync,
+ preventCache: this.preventCache,
+ load: function(data, args){
+ var location = null;
+ if(retrieveUpdated){
+ location = args.xhr.getResponseHeader("Location");
+ if(!location){location = url;}
+
+ //Function to handle the callback mapping of a getEntry after an update to return the
+ //entry and location.
+ var handleRetrieve = function(entry, dom, args){
+ if(callback){
+ callback.call(scope, entry, location, args);
+ }else if(ae){
+ throw new Error("The callback value does not exist.");
+ }
+ };
+ self.getEntry(location,handleRetrieve);
+ }else{
+ if(callback){
+ callback.call(scope, entry, args.xhr.getResponseHeader("Location"), args);
+ }else if(ae){
+ throw new Error("The callback value does not exist.");
+ }
+ }
+ return data;
+ }
+ };
+
+ if(this.user && this.user !== null){
+ xhrArgs.user = this.user;
+ }
+ if(this.password && this.password !== null){
+ xhrArgs.password = this.password;
+ }
+
+ if(errorCallback){
+ xhrArgs.error = function(error, args){errorCallback.call(scope, error, args);};
+ }else{
+ xhrArgs.error = function(){
+ throw new Error("The URL requested cannot be accessed");
+ };
+ }
+
+ if(xmethod){
+ xhrArgs.postData = entry.toString(true); //Set the content to send.
+ xhrArgs.headers = {"X-Method-Override": "PUT"};
+ dojo.rawXhrPost(xhrArgs);
+ }else{
+ xhrArgs.putData = entry.toString(true); //Set the content to send.
+ var xhr = dojo.rawXhrPut(xhrArgs);
+ }
+ },
+
+ addEntry: function(entry, url, callback, errorCallback, retrieveEntry, scope){
+ // summary:
+ // Function to add a new ATOM entry by posting the new entry via APP.
+ // description:
+ // This function takes a specific dojox.atom.io.model.Entry object and pushes the
+ // changes back to the provider of the Entry.
+ //
+ // entry:
+ // Object
+ // The dojox.atom.io.model.Entry object to publish.
+ // callback:
+ // Function
+ // A function reference that will handle the results from the entry publish.
+ // The callback should accept two parameters: The first is an dojox.atom.io.model.Entry object, and the second is the location of the entry
+ // Either can be null, depending on the value of retrieveUpdated.
+ // retrieveEntry:
+ // boolean
+ // A boolean flag denoting if the entry that was created should then be
+ // retrieved and returned to the caller via the callback.
+ // scope:
+ // Object
+ // The scope to use for all callbacks.
+ //
+ // returns:
+ // Nothing. The return is handled through the callback handler.
+ if(!scope){
+ scope = dojo.global;
+ }
+
+ entry.published = new Date();
+ entry.updated = new Date();
+
+ var feedUrl = entry.feedUrl;
+ var ae = this.alertsEnabled;
+
+ //Determine which URL to use for the post.
+ if(!url && feedUrl){url = feedUrl;}
+ if(!url){
+ if(ae){
+ throw new Error("The request cannot be processed because the URL parameter is missing.");
+ }
+ return;
+ }
+
+ var self = this;
+ var xhrArgs = {
+ url: url,
+ handleAs: "text",
+ contentType: "text/xml",
+ sync: this.sync,
+ preventCache: this.preventCache,
+ postData: entry.toString(true),
+ load: function(data, args){
+ var location = args.xhr.getResponseHeader("Location");
+ if(!location){
+ location = url;
+ }
+ if(!args.retrieveEntry){
+ if(callback){
+ callback.call(scope, entry, location, args);
+ }else if(ae){
+ throw new Error("The callback value does not exist.");
+ }
+ }else{
+ //Function to handle the callback mapping of a getEntry after an update to return the
+ //entry and location.
+ var handleRetrieve = function(entry, dom, args){
+ if(callback){
+ callback.call(scope, entry, location, args);
+ }else if(ae){
+ throw new Error("The callback value does not exist.");
+ }
+ };
+ self.getEntry(location,handleRetrieve);
+ }
+ return data;
+ }
+ };
+
+ if(this.user && this.user !== null){
+ xhrArgs.user = this.user;
+ }
+ if(this.password && this.password !== null){
+ xhrArgs.password = this.password;
+ }
+
+ if(errorCallback){
+ xhrArgs.error = function(error, args){errorCallback.call(scope, error, args);};
+ }else{
+ xhrArgs.error = function(){
+ throw new Error("The URL requested cannot be accessed");
+ };
+ }
+ dojo.rawXhrPost(xhrArgs);
+ },
+
+ deleteEntry: function(entry,callback,errorCallback,xmethod,scope){
+ // summary:
+ // Function to delete a specific ATOM entry via APP.
+ // description:
+ // This function takes a specific dojox.atom.io.model.Entry object and calls for a delete on the
+ // service housing the ATOM Entry database.
+ // The entry MUST have a link tag with rel="edit" for this to work.
+ //
+ // entry:
+ // Object
+ // The dojox.atom.io.model.Entry object to delete.
+ // callback:
+ // Function
+ // A function reference that will handle the results from the entry delete.
+ // The callback is called only if the delete is successful.
+ //
+ // returns:
+ // Nothing. The return is handled through the callback handler.
+ if(!scope){
+ scope = dojo.global;
+ }
+
+ var url = null;
+ if(typeof(entry) == "string"){
+ url = entry;
+ }else{
+ url = entry.getEditHref();
+ }
+ if(!url){
+ callback.call(scope, false, null);
+ throw new Error("The request cannot be processed because the URL parameter is missing.");
+ }
+
+ var xhrArgs = {
+ url: url,
+ handleAs: "text",
+ sync: this.sync,
+ preventCache: this.preventCache,
+ load: function(data, args){
+ callback.call(scope, args);
+ return data;
+ }
+ };
+
+ if(this.user && this.user !== null){
+ xhrArgs.user = this.user;
+ }
+ if(this.password && this.password !== null){
+ xhrArgs.password = this.password;
+ }
+
+ if(errorCallback){
+ xhrArgs.error = function(error, args){errorCallback.call(scope, error, args);};
+ }else{
+ xhrArgs.error = function(){
+ throw new Error("The URL requested cannot be accessed");
+ };
+ }
+ if(xmethod){
+ xhrArgs.headers = {"X-Method-Override": "DELETE"};
+ dojo.xhrPost(xhrArgs);
+ }else{
+ dojo.xhrDelete(xhrArgs);
+ }
+ }
+});
+
+}
diff --git a/js/dojo-1.6/dojox/atom/io/Connection.xd.js b/js/dojo-1.6/dojox/atom/io/Connection.xd.js
new file mode 100644
index 0000000..92f5674
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/io/Connection.xd.js
@@ -0,0 +1,448 @@
+/*
+ Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", 'dojox.atom.io.Connection'],
+["require", 'dojox.atom.io.model']],
+defineResource: function(dojo, dijit, dojox){if(!dojo._hasResource['dojox.atom.io.Connection']){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource['dojox.atom.io.Connection'] = true;
+dojo.provide('dojox.atom.io.Connection');
+dojo.require('dojox.atom.io.model');
+
+dojo.declare("dojox.atom.io.Connection",null,{
+ // summary: This object implements a transport layer for working with ATOM feeds and ATOM publishing protocols.
+ // description: This object implements a transport layer for working with ATOM feeds and ATOM publishing protocols.
+ // Specifically, it provides a mechanism by which feeds can be fetched and entries can be fetched, created
+ // deleted, and modified. It also provides access to the introspection data.
+
+ constructor: function(/* Boolean */sync, /* Boolean */preventCache){
+ // summary:
+ // initializer
+ this.sync = sync;
+ this.preventCache = preventCache;
+ },
+
+ preventCache: false, //Flag to denote if the instance should use the xhr prevent cache mechanism
+
+ alertsEnabled: false, //Flag to turn on alerts instead of throwing errors.
+
+ getFeed: function(/*String*/url, /*Function*/callback, /*Function*/errorCallback, scope){
+ // summary:
+ // Function to obtain a s specific ATOM feed from a given ATOM Feed url.
+ // description:
+ // This function takes the URL for a specific ATOM feed and returns
+ // the data from that feed to the caller through the use of a callback
+ // handler.
+ //
+ // url: String
+ // The URL of the ATOM feed to fetch.
+ // callback:
+ // Function
+ // A function reference that will handle the feed when it has been retrieved.
+ // The callback should accept two parameters: The feed object and the original complete DOM object.
+ // scope: Object
+ // The scope to use for all callbacks.
+ //
+ // returns:
+ // Nothing. The return is handled through the callback handler.
+ this._getXmlDoc(url, "feed", new dojox.atom.io.model.Feed(), dojox.atom.io.model._Constants.ATOM_NS, callback, /*handleDocumentRetrieved,*/ errorCallback, scope);
+ },
+
+ getService: function(url, callback, errorCallback, scope){
+ // summary:
+ // Function to retrieve an introspection document from the given URL.
+ // description:
+ // This function takes the URL for an ATOM item and feed and returns
+ // the introspection document.
+ //
+ // url:
+ // String
+ // The URL of the ATOM document to obtain the introspection document of.
+ // callback:
+ // Function
+ // A function reference that will handle the introspection document when it has been retrieved.
+ // The callback should accept two parameters: The introspection document object and the original complete DOM object.
+ //
+ // returns:
+ // Nothing. The return is handled through the callback handler.
+ this._getXmlDoc(url, "service", new dojox.atom.io.model.Service(url), dojox.atom.io.model._Constants.APP_NS, callback, errorCallback, scope);
+ },
+
+ getEntry: function(url, callback, errorCallback, scope){
+ // summary:
+ // Function to retrieve a single entry from an ATOM feed from the given URL.
+ // description:
+ // This function takes the URL for an ATOM entry and returns the constructed dojox.atom.io.model.Entry object through
+ // the specified callback.
+ //
+ // url:
+ // String
+ // The URL of the ATOM Entry document to parse.
+ // callback:
+ // Function
+ // A function reference that will handle the Entry object obtained.
+ // The callback should accept two parameters, the dojox.atom.io.model.Entry object and the original dom.
+ //
+ // returns:
+ // Nothing. The return is handled through the callback handler.
+ this._getXmlDoc(url, "entry", new dojox.atom.io.model.Entry(), dojox.atom.io.model._Constants.ATOM_NS, callback, errorCallback, scope);
+ },
+
+ _getXmlDoc: function(url, nodeName, newNode, namespace, callback, errorCallback, scope){
+ // summary:
+ // Internal Function to retrieve an XML document and pass the results to a callback.
+ // description:
+ // This internal function takes the URL for an XML document and and passes the
+ // parsed contents to a specified callback.
+ //
+ // url:
+ // String
+ // The URL of the XML document to retrieve
+ // callback:
+ // Function
+ // A function reference that will handle the retrieved XML data.
+ // The callback should accept one parameter, the DOM of the parsed XML document.
+ //
+ // returns:
+ // Nothing. The return is handled through the callback handler.
+ if(!scope){
+ scope = dojo.global;
+ }
+ var ae = this.alertsEnabled;
+ var xhrArgs = {
+ url: url,
+ handleAs: "xml",
+ sync: this.sync,
+ preventCache: this.preventCache,
+ load: function(data, args){
+ var node = null;
+ var evaldObj = data;
+ var nodes;
+ if(evaldObj){
+ //find the first node of the appropriate name
+ if(typeof(evaldObj.getElementsByTagNameNS)!= "undefined"){
+ nodes = evaldObj.getElementsByTagNameNS(namespace,nodeName);
+ if(nodes && nodes.length > 0){
+ node = nodes.item(0);
+ }else if(evaldObj.lastChild){
+ // name_spaces can be used without declaration of atom (for example
+ // gooogle feeds often returns iTunes name_space qualifiers on elements)
+ // Treat this situation like name_spaces not enabled.
+ node = evaldObj.lastChild;
+ }
+ }else if(typeof(evaldObj.getElementsByTagName)!= "undefined"){
+ // Find the first eith the correct tag name and correct namespace.
+ nodes = evaldObj.getElementsByTagName(nodeName);
+ if(nodes && nodes.length > 0){
+ for(var i=0; i<nodes.length; i++){
+ if(nodes[i].namespaceURI == namespace){
+ node = nodes[i];
+ break;
+ }
+ }
+ }else if(evaldObj.lastChild){
+ node = evaldObj.lastChild;
+ }
+ }else if(evaldObj.lastChild){
+ node = evaldObj.lastChild;
+ }else{
+ callback.call(scope, null, null, args);
+ return;
+ }
+ newNode.buildFromDom(node);
+ if(callback){
+ callback.call(scope, newNode, evaldObj, args);
+ }else if(ae){
+ throw new Error("The callback value does not exist.");
+ }
+ }else{
+ callback.call(scope, null, null, args);
+ }
+ }
+ };
+
+ if(this.user && this.user !== null){
+ xhrArgs.user = this.user;
+ }
+ if(this.password && this.password !== null){
+ xhrArgs.password = this.password;
+ }
+
+ if(errorCallback){
+ xhrArgs.error = function(error, args){errorCallback.call(scope, error, args);};
+ }else{
+ xhrArgs.error = function(){
+ throw new Error("The URL requested cannot be accessed");
+ };
+ }
+ dojo.xhrGet(xhrArgs);
+ },
+
+ updateEntry: function(entry, callback, errorCallback, retrieveUpdated, xmethod, scope){
+ // summary:
+ // Function to update a specific ATOM entry by putting the new changes via APP.
+ // description:
+ // This function takes a specific dojox.atom.io.model.Entry object and pushes the
+ // changes back to the provider of the Entry.
+ // The entry MUST have a link tag with rel="edit" for this to work.
+ //
+ // entry:
+ // Object
+ // The dojox.atom.io.model.Entry object to update.
+ // callback:
+ // Function
+ // A function reference that will handle the results from the entry update.
+ // The callback should accept two parameters: The first is an Entry object, and the second is the URL of that Entry
+ // Either can be null, depending on the value of retrieveUpdated.
+ // retrieveUpdated:
+ // boolean
+ // A boolean flag denoting if the entry that was updated should then be
+ // retrieved and returned to the caller via the callback.
+ // xmethod:
+ // boolean
+ // Whether to use POST for PUT/DELETE items and send the X-Method-Override header.
+ // scope:
+ // Object
+ // The scope to use for all callbacks.
+ //
+ // returns:
+ // Nothing. The return is handled through the callback handler.
+ if(!scope){
+ scope = dojo.global;
+ }
+ entry.updated = new Date();
+ var url = entry.getEditHref();
+ if(!url){
+ throw new Error("A URL has not been specified for editing this entry.");
+ }
+
+ var self = this;
+ var ae = this.alertsEnabled;
+ var xhrArgs = {
+ url: url,
+ handleAs: "text",
+ contentType: "text/xml",
+ sync: this.sync,
+ preventCache: this.preventCache,
+ load: function(data, args){
+ var location = null;
+ if(retrieveUpdated){
+ location = args.xhr.getResponseHeader("Location");
+ if(!location){location = url;}
+
+ //Function to handle the callback mapping of a getEntry after an update to return the
+ //entry and location.
+ var handleRetrieve = function(entry, dom, args){
+ if(callback){
+ callback.call(scope, entry, location, args);
+ }else if(ae){
+ throw new Error("The callback value does not exist.");
+ }
+ };
+ self.getEntry(location,handleRetrieve);
+ }else{
+ if(callback){
+ callback.call(scope, entry, args.xhr.getResponseHeader("Location"), args);
+ }else if(ae){
+ throw new Error("The callback value does not exist.");
+ }
+ }
+ return data;
+ }
+ };
+
+ if(this.user && this.user !== null){
+ xhrArgs.user = this.user;
+ }
+ if(this.password && this.password !== null){
+ xhrArgs.password = this.password;
+ }
+
+ if(errorCallback){
+ xhrArgs.error = function(error, args){errorCallback.call(scope, error, args);};
+ }else{
+ xhrArgs.error = function(){
+ throw new Error("The URL requested cannot be accessed");
+ };
+ }
+
+ if(xmethod){
+ xhrArgs.postData = entry.toString(true); //Set the content to send.
+ xhrArgs.headers = {"X-Method-Override": "PUT"};
+ dojo.rawXhrPost(xhrArgs);
+ }else{
+ xhrArgs.putData = entry.toString(true); //Set the content to send.
+ var xhr = dojo.rawXhrPut(xhrArgs);
+ }
+ },
+
+ addEntry: function(entry, url, callback, errorCallback, retrieveEntry, scope){
+ // summary:
+ // Function to add a new ATOM entry by posting the new entry via APP.
+ // description:
+ // This function takes a specific dojox.atom.io.model.Entry object and pushes the
+ // changes back to the provider of the Entry.
+ //
+ // entry:
+ // Object
+ // The dojox.atom.io.model.Entry object to publish.
+ // callback:
+ // Function
+ // A function reference that will handle the results from the entry publish.
+ // The callback should accept two parameters: The first is an dojox.atom.io.model.Entry object, and the second is the location of the entry
+ // Either can be null, depending on the value of retrieveUpdated.
+ // retrieveEntry:
+ // boolean
+ // A boolean flag denoting if the entry that was created should then be
+ // retrieved and returned to the caller via the callback.
+ // scope:
+ // Object
+ // The scope to use for all callbacks.
+ //
+ // returns:
+ // Nothing. The return is handled through the callback handler.
+ if(!scope){
+ scope = dojo.global;
+ }
+
+ entry.published = new Date();
+ entry.updated = new Date();
+
+ var feedUrl = entry.feedUrl;
+ var ae = this.alertsEnabled;
+
+ //Determine which URL to use for the post.
+ if(!url && feedUrl){url = feedUrl;}
+ if(!url){
+ if(ae){
+ throw new Error("The request cannot be processed because the URL parameter is missing.");
+ }
+ return;
+ }
+
+ var self = this;
+ var xhrArgs = {
+ url: url,
+ handleAs: "text",
+ contentType: "text/xml",
+ sync: this.sync,
+ preventCache: this.preventCache,
+ postData: entry.toString(true),
+ load: function(data, args){
+ var location = args.xhr.getResponseHeader("Location");
+ if(!location){
+ location = url;
+ }
+ if(!args.retrieveEntry){
+ if(callback){
+ callback.call(scope, entry, location, args);
+ }else if(ae){
+ throw new Error("The callback value does not exist.");
+ }
+ }else{
+ //Function to handle the callback mapping of a getEntry after an update to return the
+ //entry and location.
+ var handleRetrieve = function(entry, dom, args){
+ if(callback){
+ callback.call(scope, entry, location, args);
+ }else if(ae){
+ throw new Error("The callback value does not exist.");
+ }
+ };
+ self.getEntry(location,handleRetrieve);
+ }
+ return data;
+ }
+ };
+
+ if(this.user && this.user !== null){
+ xhrArgs.user = this.user;
+ }
+ if(this.password && this.password !== null){
+ xhrArgs.password = this.password;
+ }
+
+ if(errorCallback){
+ xhrArgs.error = function(error, args){errorCallback.call(scope, error, args);};
+ }else{
+ xhrArgs.error = function(){
+ throw new Error("The URL requested cannot be accessed");
+ };
+ }
+ dojo.rawXhrPost(xhrArgs);
+ },
+
+ deleteEntry: function(entry,callback,errorCallback,xmethod,scope){
+ // summary:
+ // Function to delete a specific ATOM entry via APP.
+ // description:
+ // This function takes a specific dojox.atom.io.model.Entry object and calls for a delete on the
+ // service housing the ATOM Entry database.
+ // The entry MUST have a link tag with rel="edit" for this to work.
+ //
+ // entry:
+ // Object
+ // The dojox.atom.io.model.Entry object to delete.
+ // callback:
+ // Function
+ // A function reference that will handle the results from the entry delete.
+ // The callback is called only if the delete is successful.
+ //
+ // returns:
+ // Nothing. The return is handled through the callback handler.
+ if(!scope){
+ scope = dojo.global;
+ }
+
+ var url = null;
+ if(typeof(entry) == "string"){
+ url = entry;
+ }else{
+ url = entry.getEditHref();
+ }
+ if(!url){
+ callback.call(scope, false, null);
+ throw new Error("The request cannot be processed because the URL parameter is missing.");
+ }
+
+ var xhrArgs = {
+ url: url,
+ handleAs: "text",
+ sync: this.sync,
+ preventCache: this.preventCache,
+ load: function(data, args){
+ callback.call(scope, args);
+ return data;
+ }
+ };
+
+ if(this.user && this.user !== null){
+ xhrArgs.user = this.user;
+ }
+ if(this.password && this.password !== null){
+ xhrArgs.password = this.password;
+ }
+
+ if(errorCallback){
+ xhrArgs.error = function(error, args){errorCallback.call(scope, error, args);};
+ }else{
+ xhrArgs.error = function(){
+ throw new Error("The URL requested cannot be accessed");
+ };
+ }
+ if(xmethod){
+ xhrArgs.headers = {"X-Method-Override": "DELETE"};
+ dojo.xhrPost(xhrArgs);
+ }else{
+ dojo.xhrDelete(xhrArgs);
+ }
+ }
+});
+
+}
+
+}};});
diff --git a/js/dojo-1.6/dojox/atom/io/model.js b/js/dojo-1.6/dojox/atom/io/model.js
new file mode 100644
index 0000000..1f949b5
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/io/model.js
@@ -0,0 +1,1304 @@
+/*
+ Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.atom.io.model"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.atom.io.model"] = true;
+dojo.provide("dojox.atom.io.model");
+
+dojo.require("dojox.xml.parser");
+dojo.require("dojo.string");
+dojo.require("dojo.date.stamp");
+
+dojox.atom.io.model._Constants = {
+ // summary:
+ // Container for general constants.
+ // description:
+ // Container for general constants.
+ "ATOM_URI": "http://www.w3.org/2005/Atom",
+ "ATOM_NS": "http://www.w3.org/2005/Atom",
+ "PURL_NS": "http://purl.org/atom/app#",
+ "APP_NS": "http://www.w3.org/2007/app"
+};
+
+dojox.atom.io.model._actions = {
+ // summary:
+ // Container for tag handling functions.
+ // description:
+ // Container for tag handling functions. Each child of this container is
+ // a handler function for the given type of node. Each accepts two parameters:
+ // obj: Object.
+ // The object to insert data into.
+ // node: DOM Node.
+ // The dom node containing the data
+ "link": function(obj,node){
+ if(obj.links === null){obj.links = [];}
+ var link = new dojox.atom.io.model.Link();
+ link.buildFromDom(node);
+ obj.links.push(link);
+ },
+ "author": function(obj,node){
+ if(obj.authors === null){obj.authors = [];}
+ var person = new dojox.atom.io.model.Person("author");
+ person.buildFromDom(node);
+ obj.authors.push(person);
+ },
+ "contributor": function(obj,node){
+ if(obj.contributors === null){obj.contributors = [];}
+ var person = new dojox.atom.io.model.Person("contributor");
+ person.buildFromDom(node);
+ obj.contributors.push(person);
+ },
+ "category": function(obj,node){
+ if(obj.categories === null){obj.categories = [];}
+ var cat = new dojox.atom.io.model.Category();
+ cat.buildFromDom(node);
+ obj.categories.push(cat);
+ },
+ "icon": function(obj,node){
+ obj.icon = dojox.xml.parser.textContent(node);
+ },
+ "id": function(obj,node){
+ obj.id = dojox.xml.parser.textContent(node);
+ },
+ "rights": function(obj,node){
+ obj.rights = dojox.xml.parser.textContent(node);
+ },
+ "subtitle": function(obj,node){
+ var cnt = new dojox.atom.io.model.Content("subtitle");
+ cnt.buildFromDom(node);
+ obj.subtitle = cnt;
+ },
+ "title": function(obj,node){
+ var cnt = new dojox.atom.io.model.Content("title");
+ cnt.buildFromDom(node);
+ obj.title = cnt;
+ },
+ "updated": function(obj,node){
+ obj.updated = dojox.atom.io.model.util.createDate(node);
+ },
+ // Google news
+ "issued": function(obj,node){
+ obj.issued = dojox.atom.io.model.util.createDate(node);
+ },
+ // Google news
+ "modified": function(obj,node){
+ obj.modified = dojox.atom.io.model.util.createDate(node);
+ },
+ "published": function(obj,node){
+ obj.published = dojox.atom.io.model.util.createDate(node);
+ },
+ "entry": function(obj,node){
+ if(obj.entries === null){obj.entries = [];}
+ //The object passed in should be a Feed object, since only feeds can contain Entries
+ var entry = obj.createEntry ? obj.createEntry() : new dojox.atom.io.model.Entry();
+ entry.buildFromDom(node);
+ obj.entries.push(entry);
+ },
+ "content": function(obj, node){
+ var cnt = new dojox.atom.io.model.Content("content");
+ cnt.buildFromDom(node);
+ obj.content = cnt;
+ },
+ "summary": function(obj, node){
+ var summary = new dojox.atom.io.model.Content("summary");
+ summary.buildFromDom(node);
+ obj.summary = summary;
+ },
+
+ "name": function(obj,node){
+ obj.name = dojox.xml.parser.textContent(node);
+ },
+ "email" : function(obj,node){
+ obj.email = dojox.xml.parser.textContent(node);
+ },
+ "uri" : function(obj,node){
+ obj.uri = dojox.xml.parser.textContent(node);
+ },
+ "generator" : function(obj,node){
+ obj.generator = new dojox.atom.io.model.Generator();
+ obj.generator.buildFromDom(node);
+ }
+};
+
+dojox.atom.io.model.util = {
+ createDate: function(/*DOM node*/node){
+ // summary:
+ // Utility function to create a date from a DOM node's text content.
+ // description:
+ // Utility function to create a date from a DOM node's text content.
+ //
+ // node:
+ // The DOM node to inspect.
+ // returns:
+ // Date object from a DOM Node containing a ISO-8610 string.
+ var textContent = dojox.xml.parser.textContent(node);
+ if(textContent){
+ return dojo.date.stamp.fromISOString(dojo.trim(textContent));
+ }
+ return null;
+ },
+ escapeHtml: function(/*String*/str){
+ // summary:
+ // Utility function to escape XML special characters in an HTML string.
+ // description:
+ // Utility function to escape XML special characters in an HTML string.
+ //
+ // str:
+ // The string to escape
+ // returns:
+ // HTML String with special characters (<,>,&, ", etc,) escaped.
+ return str.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;")
+ .replace(/'/gm, "&#39;"); // String
+ },
+ unEscapeHtml: function(/*String*/str){
+ // summary:
+ // Utility function to un-escape XML special characters in an HTML string.
+ // description:
+ // Utility function to un-escape XML special characters in an HTML string.
+ //
+ // str:
+ // The string to un-escape.
+ // returns:
+ // HTML String converted back to the normal text (unescaped) characters (<,>,&, ", etc,).
+ return str.replace(/&lt;/gm, "<").replace(/&gt;/gm, ">").replace(/&quot;/gm, "\"")
+ .replace(/&#39;/gm, "'").replace(/&amp;/gm, "&"); // String
+ },
+ getNodename: function(/*DOM node*/node){
+ // summary:
+ // Utility function to get a node name and deal with IE's bad handling of namespaces
+ // on tag names.
+ // description:
+ // Utility function to get a node name and deal with IE's bad handling of namespaces
+ // on tag names.
+ //
+ // node:
+ // The DOM node whose name to retrieve.
+ // returns:
+ // String
+ // The name without namespace prefixes.
+ var name = null;
+ if(node !== null){
+ name = node.localName ? node.localName: node.nodeName;
+ if(name !== null){
+ var nsSep = name.indexOf(":");
+ if(nsSep !== -1){
+ name = name.substring((nsSep + 1), name.length);
+ }
+ }
+ }
+ return name;
+ }
+};
+
+dojo.declare('dojox.atom.io.model.Node', null, {
+ constructor: function(name_space,name, attributes,content, shortNs){
+ this.name_space = name_space;
+ this.name = name;
+ this.attributes = [];
+ if(attributes){
+ this.attributes = attributes;
+ }
+ this.content = [];
+ this.rawNodes = [];
+ this.textContent = null;
+ if(content){
+ this.content.push(content);
+ }
+ this.shortNs = shortNs;
+ this._objName = "Node";//for debugging purposes
+ },
+ buildFromDom: function(node){
+ this._saveAttributes(node);
+ this.name_space = node.namespaceURI;
+ this.shortNs = node.prefix;
+ this.name = dojox.atom.io.model.util.getNodename(node);
+ for(var x=0; x < node.childNodes.length; x++){
+ var c = node.childNodes[x];
+ if(dojox.atom.io.model.util.getNodename(c) != "#text" ){
+ this.rawNodes.push(c);
+ var n = new dojox.atom.io.model.Node();
+ n.buildFromDom(c, true);
+ this.content.push(n);
+ }else{
+ this.content.push(c.nodeValue);
+ }
+ }
+ this.textContent = dojox.xml.parser.textContent(node);
+ },
+ _saveAttributes: function(node){
+ if(!this.attributes){this.attributes = [];}
+ // Work around lack of hasAttributes() in IE
+ var hasAttributes = function(node){
+ var attrs = node.attributes;
+ if(attrs === null){return false;}
+ return (attrs.length !== 0);
+ };
+
+ if(hasAttributes(node) && this._getAttributeNames){
+ var names = this._getAttributeNames(node);
+ if(names && names.length > 0){
+ for(var x in names){
+ var attrib = node.getAttribute(names[x]);
+ if(attrib){this.attributes[names[x]] = attrib;}
+ }
+ }
+ }
+ },
+ addAttribute: function(name, value){
+ this.attributes[name]=value;
+ },
+ getAttribute: function(name){
+ return this.attributes[name];
+ },
+ //if child objects want their attributes parsed, they should override
+ //to return an array of attrib names
+ _getAttributeNames: function(node){
+ var names = [];
+ for(var i =0; i<node.attributes.length; i++){
+ names.push(node.attributes[i].nodeName);
+ }
+ return names;
+ },
+ toString: function(){
+ var xml = [];
+ var x;
+ var name = (this.shortNs?this.shortNs+":":'')+this.name;
+ var cdata = (this.name == "#cdata-section");
+ if(cdata){
+ xml.push("<![CDATA[");
+ xml.push(this.textContent);
+ xml.push("]]>");
+ }else{
+ xml.push("<");
+ xml.push(name);
+ if(this.name_space){
+ xml.push(" xmlns='" + this.name_space + "'");
+ }
+ if(this.attributes){
+ for(x in this.attributes){
+ xml.push(" " + x + "='" + this.attributes[x] + "'");
+ }
+ }
+ if(this.content){
+ xml.push(">");
+ for(x in this.content){
+ xml.push(this.content[x]);
+ }
+ xml.push("</" + name + ">\n");
+ }else{
+ xml.push("/>\n");
+ }
+ }
+ return xml.join('');
+ },
+ addContent: function(content){
+ this.content.push(content);
+ }
+});
+//Types are as follows: links: array of Link, authors: array of Person, categories: array of Category
+//contributors: array of Person, ico
+dojo.declare("dojox.atom.io.model.AtomItem",dojox.atom.io.model.Node,{
+ constructor: function(args){
+ this.ATOM_URI = dojox.atom.io.model._Constants.ATOM_URI;
+ this.links = null; //Array of Link
+ this.authors = null; //Array of Person
+ this.categories = null; //Array of Category
+ this.contributors = null; //Array of Person
+ this.icon = this.id = this.logo = this.xmlBase = this.rights = null; //String
+ this.subtitle = this.title = null; //Content
+ this.updated = this.published = null; //Date
+ // Google news
+ this.issued = this.modified = null; //Date
+ this.content = null; //Content
+ this.extensions = null; //Array of Node, non atom based
+ this.entries = null; //Array of Entry
+ this.name_spaces = {};
+ this._objName = "AtomItem"; //for debugging purposes
+ },
+ // summary: Class container for generic Atom items.
+ // description: Class container for generic Atom items.
+ _getAttributeNames: function(){return null;},
+ _accepts: {},
+ accept: function(tag){return Boolean(this._accepts[tag]);},
+ _postBuild: function(){},//child objects can override this if they want to be called after a Dom build
+ buildFromDom: function(node){
+ var i, c, n;
+ for(i=0; i<node.attributes.length; i++){
+ c = node.attributes.item(i);
+ n = dojox.atom.io.model.util.getNodename(c);
+ if(c.prefix == "xmlns" && c.prefix != n){
+ this.addNamespace(c.nodeValue, n);
+ }
+ }
+ c = node.childNodes;
+ for(i = 0; i< c.length; i++){
+ if(c[i].nodeType == 1) {
+ var name = dojox.atom.io.model.util.getNodename(c[i]);
+ if(!name){continue;}
+ if(c[i].namespaceURI != dojox.atom.io.model._Constants.ATOM_NS && name != "#text"){
+ if(!this.extensions){this.extensions = [];}
+ var extensionNode = new dojox.atom.io.model.Node();
+ extensionNode.buildFromDom(c[i]);
+ this.extensions.push(extensionNode);
+ }
+ if(!this.accept(name.toLowerCase())){
+ continue;
+ }
+ var fn = dojox.atom.io.model._actions[name];
+ if(fn) {
+ fn(this,c[i]);
+ }
+ }
+ }
+ this._saveAttributes(node);
+ if(this._postBuild){this._postBuild();}
+ },
+ addNamespace: function(fullName, shortName){
+ if(fullName && shortName){
+ this.name_spaces[shortName] = fullName;
+ }
+ },
+ addAuthor: function(/*String*/name, /*String*/email, /*String*/uri){
+ // summary:
+ // Function to add in an author to the list of authors.
+ // description:
+ // Function to add in an author to the list of authors.
+ //
+ // name:
+ // The author's name.
+ // email:
+ // The author's e-mail address.
+ // uri:
+ // A URI associated with the author.
+ if(!this.authors){this.authors = [];}
+ this.authors.push(new dojox.atom.io.model.Person("author",name,email,uri));
+ },
+ addContributor: function(/*String*/name, /*String*/email, /*String*/uri){
+ // summary:
+ // Function to add in an author to the list of authors.
+ // description:
+ // Function to add in an author to the list of authors.
+ //
+ // name:
+ // The author's name.
+ // email:
+ // The author's e-mail address.
+ // uri:
+ // A URI associated with the author.
+ if(!this.contributors){this.contributors = [];}
+ this.contributors.push(new dojox.atom.io.model.Person("contributor",name,email,uri));
+ },
+ addLink: function(/*String*/href,/*String*/rel,/*String*/hrefLang,/*String*/title,/*String*/type){
+ // summary:
+ // Function to add in a link to the list of links.
+ // description:
+ // Function to add in a link to the list of links.
+ //
+ // href:
+ // The href.
+ // rel:
+ // String
+ // hrefLang:
+ // String
+ // title:
+ // A title to associate with the link.
+ // type:
+ // The type of link is is.
+ if(!this.links){this.links=[];}
+ this.links.push(new dojox.atom.io.model.Link(href,rel,hrefLang,title,type));
+ },
+ removeLink: function(/*String*/href, /*String*/rel){
+ // summary:
+ // Function to remove a link from the list of links.
+ // description:
+ // Function to remove a link from the list of links.
+ //
+ // href:
+ // The href.
+ // rel:
+ // String
+ if(!this.links || !dojo.isArray(this.links)){return;}
+ var count = 0;
+ for(var i = 0; i < this.links.length; i++){
+ if((!href || this.links[i].href === href) && (!rel || this.links[i].rel === rel)){
+ this.links.splice(i,1); count++;
+ }
+ }
+ return count;
+ },
+ removeBasicLinks: function(){
+ // summary:
+ // Function to remove all basic links from the list of links.
+ // description:
+ // Function to remove all basic link from the list of links.
+ if(!this.links){return;}
+ var count = 0;
+ for(var i = 0; i < this.links.length; i++){
+ if(!this.links[i].rel){this.links.splice(i,1); count++; i--;}
+ }
+ return count;
+ },
+ addCategory: function(/*String*/scheme, /*String*/term, /*String*/label){
+ // summary:
+ // Function to add in a category to the list of categories.
+ // description:
+ // Function to add in a category to the list of categories.
+ //
+ // scheme:
+ // String
+ // term:
+ // String
+ // label:
+ // String
+ if(!this.categories){this.categories = [];}
+ this.categories.push(new dojox.atom.io.model.Category(scheme,term,label));
+ },
+ getCategories: function(/*String*/scheme){
+ // summary:
+ // Function to get all categories that match a particular scheme.
+ // description:
+ // Function to get all categories that match a particular scheme.
+ //
+ // scheme:
+ // String
+ // The scheme to filter on.
+ if(!scheme){return this.categories;}
+ //If categories belonging to a particular scheme are required, then create a new array containing these
+ var arr = [];
+ for(var x in this.categories){
+ if(this.categories[x].scheme === scheme){arr.push(this.categories[x]);}
+ }
+ return arr;
+ },
+ removeCategories: function(/*String*/scheme, /*String*/term){
+ // summary:
+ // Function to remove all categories that match a particular scheme and term.
+ // description:
+ // Function to remove all categories that match a particular scheme and term.
+ //
+ // scheme:
+ // The scheme to filter on.
+ // term:
+ // The term to filter on.
+ if(!this.categories){return;}
+ var count = 0;
+ for(var i=0; i<this.categories.length; i++){
+ if((!scheme || this.categories[i].scheme === scheme) && (!term || this.categories[i].term === term)){
+ this.categories.splice(i, 1); count++; i--;
+ }
+ }
+ return count;
+ },
+ setTitle: function(/*String*/str, /*String*/type){
+ // summary:
+ // Function to set the title of the item.
+ // description:
+ // Function to set the title of the item.
+ //
+ // str:
+ // The title to set.
+ // type:
+ // The type of title format, text, xml, xhtml, etc.
+ if(!str){return;}
+ this.title = new dojox.atom.io.model.Content("title");
+ this.title.value = str;
+ if(type){this.title.type = type;}
+ },
+ addExtension: function(/*String*/name_space,/*String*/name, /*Array*/attributes, /*String*/content, /*String*/shortNS){
+ // summary:
+ // Function to add in an extension namespace into the item.
+ // description:
+ // Function to add in an extension namespace into the item.
+ //
+ // name_space:
+ // The namespace of the extension.
+ // name:
+ // The name of the extension
+ // attributes:
+ // The attributes associated with the extension.
+ // content:
+ // The content of the extension.
+ if(!this.extensions){this.extensions=[];}
+ this.extensions.push(new dojox.atom.io.model.Node(name_space,name,attributes,content, shortNS || "ns"+this.extensions.length));
+ },
+ getExtensions: function(/*String*/name_space, /*String*/name){
+ // summary:
+ // Function to get extensions that match a namespace and name.
+ // description:
+ // Function to get extensions that match a namespace and name.
+ //
+ // name_space:
+ // The namespace of the extension.
+ // name:
+ // The name of the extension
+ var arr = [];
+ if(!this.extensions){return arr;}
+ for(var x in this.extensions){
+ if((this.extensions[x].name_space === name_space || this.extensions[x].shortNs === name_space) && (!name || this.extensions[x].name === name)){
+ arr.push(this.extensions[x]);
+ }
+ }
+ return arr;
+ },
+ removeExtensions: function(/*String*/name_space, /*String*/name){
+ // summary:
+ // Function to remove extensions that match a namespace and name.
+ // description:
+ // Function to remove extensions that match a namespace and name.
+ //
+ // name_space:
+ // The namespace of the extension.
+ // name:
+ // The name of the extension
+ if(!this.extensions){return;}
+ for(var i=0; i< this.extensions.length; i++){
+ if((this.extensions[i].name_space == name_space || this.extensions[i].shortNs === name_space) && this.extensions[i].name === name){
+ this.extensions.splice(i,1);
+ i--;
+ }
+ }
+ },
+ destroy: function() {
+ this.links = null;
+ this.authors = null;
+ this.categories = null;
+ this.contributors = null;
+ this.icon = this.id = this.logo = this.xmlBase = this.rights = null;
+ this.subtitle = this.title = null;
+ this.updated = this.published = null;
+ // Google news
+ this.issued = this.modified = null;
+ this.content = null;
+ this.extensions = null;
+ this.entries = null;
+ }
+});
+
+dojo.declare("dojox.atom.io.model.Category",dojox.atom.io.model.Node,{
+ // summary:
+ // Class container for 'Category' types.
+ // description:
+ // Class container for 'Category' types.
+ constructor: function(/*String*/scheme, /*String*/term, /*String*/label){
+ this.scheme = scheme; this.term = term; this.label = label;
+ this._objName = "Category";//for debugging
+ },
+ _postBuild: function(){},
+ _getAttributeNames: function(){
+ return ["label","scheme","term"];
+ },
+ toString: function(){
+ // summary:
+ // Function to construct string form of the category tag, which is an XML structure.
+ // description:
+ // Function to construct string form of the category tag, which is an XML structure.
+ var s = [];
+ s.push('<category ');
+ if(this.label){s.push(' label="'+this.label+'" ');}
+ if(this.scheme){s.push(' scheme="'+this.scheme+'" ');}
+ if(this.term){s.push(' term="'+this.term+'" ');}
+ s.push('/>\n');
+ return s.join('');
+ },
+ buildFromDom: function(/*DOM node*/node){
+ // summary:
+ // Function to do construction of the Category data from the DOM node containing it.
+ // description:
+ // Function to do construction of the Category data from the DOM node containing it.
+ //
+ // node:
+ // The DOM node to process for content.
+ this._saveAttributes(node);//just get the attributes from the node
+ this.label = this.attributes.label;
+ this.scheme = this.attributes.scheme;
+ this.term = this.attributes.term;
+ if(this._postBuild){this._postBuild();}
+ }
+});
+
+dojo.declare("dojox.atom.io.model.Content",dojox.atom.io.model.Node,{
+ // summary:
+ // Class container for 'Content' types. Such as summary, content, username, and so on types of data.
+ // description:
+ // Class container for 'Content' types. Such as summary, content, username, and so on types of data.
+ constructor: function(tagName, value, src, type,xmlLang){
+ this.tagName = tagName; this.value = value; this.src = src; this.type=type; this.xmlLang = xmlLang;
+ this.HTML = "html"; this.TEXT = "text"; this.XHTML = "xhtml"; this.XML="xml";
+ this._useTextContent = "true";
+ },
+ _getAttributeNames: function(){return ["type","src"];},
+ _postBuild: function(){},
+ buildFromDom: function(/*DOM node*/node){
+ // summary:
+ // Function to do construction of the Content data from the DOM node containing it.
+ // description:
+ // Function to do construction of the Content data from the DOM node containing it.
+ //
+ // node:
+ // The DOM node to process for content.
+ //Handle checking for XML content as the content type
+ var type = node.getAttribute("type");
+ if(type){
+ type = type.toLowerCase();
+ if(type == "xml" || "text/xml"){
+ type = this.XML;
+ }
+ }else{
+ type="text";
+ }
+ if(type === this.XML){
+ if(node.firstChild){
+ var i;
+ this.value = "";
+ for(i = 0; i < node.childNodes.length; i++){
+ var c = node.childNodes[i];
+ if(c){
+ this.value += dojox.xml.parser.innerXML(c);
+ }
+ }
+ }
+ } else if(node.innerHTML){
+ this.value = node.innerHTML;
+ }else{
+ this.value = dojox.xml.parser.textContent(node);
+ }
+
+ this._saveAttributes(node);
+
+ if(this.attributes){
+ this.type = this.attributes.type;
+ this.scheme = this.attributes.scheme;
+ this.term = this.attributes.term;
+ }
+ if(!this.type){this.type = "text";}
+
+ //We need to unescape the HTML content here so that it can be displayed correctly when the value is fetched.
+ var lowerType = this.type.toLowerCase();
+ if(lowerType === "html" || lowerType === "text/html" || lowerType === "xhtml" || lowerType === "text/xhtml"){
+ this.value = this.value?dojox.atom.io.model.util.unEscapeHtml(this.value):"";
+ }
+
+ if(this._postBuild){this._postBuild();}
+ },
+ toString: function(){
+ // summary:
+ // Function to construct string form of the content tag, which is an XML structure.
+ // description:
+ // Function to construct string form of the content tag, which is an XML structure.
+ var s = [];
+ s.push('<'+this.tagName+' ');
+ if(!this.type){this.type = "text";}
+ if(this.type){s.push(' type="'+this.type+'" ');}
+ if(this.xmlLang){s.push(' xml:lang="'+this.xmlLang+'" ');}
+ if(this.xmlBase){s.push(' xml:base="'+this.xmlBase+'" ');}
+
+ //all HTML must be escaped
+ if(this.type.toLowerCase() == this.HTML){
+ s.push('>'+dojox.atom.io.model.util.escapeHtml(this.value)+'</'+this.tagName+'>\n');
+ }else{
+ s.push('>'+this.value+'</'+this.tagName+'>\n');
+ }
+ var ret = s.join('');
+ return ret;
+ }
+});
+
+dojo.declare("dojox.atom.io.model.Link",dojox.atom.io.model.Node,{
+ // summary:
+ // Class container for 'link' types.
+ // description:
+ // Class container for 'link' types.
+ constructor: function(href,rel,hrefLang,title,type){
+ this.href = href; this.hrefLang = hrefLang; this.rel = rel; this.title = title;this.type = type;
+ },
+ _getAttributeNames: function(){return ["href","jrefLang","rel","title","type"];},
+ _postBuild: function(){},
+ buildFromDom: function(node){
+ // summary:
+ // Function to do construction of the link data from the DOM node containing it.
+ // description:
+ // Function to do construction of the link data from the DOM node containing it.
+ //
+ // node:
+ // The DOM node to process for link data.
+ this._saveAttributes(node);//just get the attributes from the node
+ this.href = this.attributes.href;
+ this.hrefLang = this.attributes.hreflang;
+ this.rel = this.attributes.rel;
+ this.title = this.attributes.title;
+ this.type = this.attributes.type;
+ if(this._postBuild){this._postBuild();}
+ },
+ toString: function(){
+ // summary:
+ // Function to construct string form of the link tag, which is an XML structure.
+ // description:
+ // Function to construct string form of the link tag, which is an XML structure.
+ var s = [];
+ s.push('<link ');
+ if(this.href){s.push(' href="'+this.href+'" ');}
+ if(this.hrefLang){s.push(' hrefLang="'+this.hrefLang+'" ');}
+ if(this.rel){s.push(' rel="'+this.rel+'" ');}
+ if(this.title){s.push(' title="'+this.title+'" ');}
+ if(this.type){s.push(' type = "'+this.type+'" ');}
+ s.push('/>\n');
+ return s.join('');
+ }
+});
+
+dojo.declare("dojox.atom.io.model.Person",dojox.atom.io.model.Node,{
+ // summary:
+ // Class container for 'person' types, such as Author, controbutors, and so on.
+ // description:
+ // Class container for 'person' types, such as Author, controbutors, and so on.
+ constructor: function(personType, name, email, uri){
+ this.author = "author";
+ this.contributor = "contributor";
+ if(!personType){
+ personType = this.author;
+ }
+ this.personType = personType;
+ this.name = name || '';
+ this.email = email || '';
+ this.uri = uri || '';
+ this._objName = "Person";//for debugging
+ },
+ _getAttributeNames: function(){return null;},
+ _postBuild: function(){},
+ accept: function(tag){return Boolean(this._accepts[tag]);},
+ buildFromDom: function(node){
+ // summary:
+ // Function to do construction of the person data from the DOM node containing it.
+ // description:
+ // Function to do construction of the person data from the DOM node containing it.
+ //
+ // node:
+ // The DOM node to process for person data.
+ var c = node.childNodes;
+ for(var i = 0; i< c.length; i++){
+ var name = dojox.atom.io.model.util.getNodename(c[i]);
+
+ if(!name){continue;}
+
+ if(c[i].namespaceURI != dojox.atom.io.model._Constants.ATOM_NS && name != "#text"){
+ if(!this.extensions){this.extensions = [];}
+ var extensionNode = new dojox.atom.io.model.Node();
+ extensionNode.buildFromDom(c[i]);
+ this.extensions.push(extensionNode);
+ }
+ if(!this.accept(name.toLowerCase())){
+ continue;
+ }
+ var fn = dojox.atom.io.model._actions[name];
+ if(fn) {
+ fn(this,c[i]);
+ }
+ }
+ this._saveAttributes(node);
+ if(this._postBuild){this._postBuild();}
+ },
+ _accepts: {
+ 'name': true,
+ 'uri': true,
+ 'email': true
+ },
+ toString: function(){
+ // summary:
+ // Function to construct string form of the Person tag, which is an XML structure.
+ // description:
+ // Function to construct string form of the Person tag, which is an XML structure.
+ var s = [];
+ s.push('<'+this.personType+'>\n');
+ if(this.name){s.push('\t<name>'+this.name+'</name>\n');}
+ if(this.email){s.push('\t<email>'+this.email+'</email>\n');}
+ if(this.uri){s.push('\t<uri>'+this.uri+'</uri>\n');}
+ s.push('</'+this.personType+'>\n');
+ return s.join('');
+ }
+});
+
+dojo.declare("dojox.atom.io.model.Generator",dojox.atom.io.model.Node,{
+ // summary:
+ // Class container for 'Generator' types.
+ // description:
+ // Class container for 'Generator' types.
+ constructor: function(/*String*/uri, /*String*/version, /*String*/value){
+ this.uri = uri;
+ this.version = version;
+ this.value = value;
+ },
+ _postBuild: function(){},
+ buildFromDom: function(node){
+ // summary:
+ // Function to do construction of the generator data from the DOM node containing it.
+ // description:
+ // Function to do construction of the generator data from the DOM node containing it.
+ //
+ // node:
+ // The DOM node to process for link data.
+
+ this.value = dojox.xml.parser.textContent(node);
+ this._saveAttributes(node);
+
+ this.uri = this.attributes.uri;
+ this.version = this.attributes.version;
+
+ if(this._postBuild){this._postBuild();}
+ },
+ toString: function(){
+ // summary:
+ // Function to construct string form of the Generator tag, which is an XML structure.
+ // description:
+ // Function to construct string form of the Generator tag, which is an XML structure.
+ var s = [];
+ s.push('<generator ');
+ if(this.uri){s.push(' uri="'+this.uri+'" ');}
+ if(this.version){s.push(' version="'+this.version+'" ');}
+ s.push('>'+this.value+'</generator>\n');
+ var ret = s.join('');
+ return ret;
+ }
+});
+
+dojo.declare("dojox.atom.io.model.Entry",dojox.atom.io.model.AtomItem,{
+ // summary:
+ // Class container for 'Entry' types.
+ // description:
+ // Class container for 'Entry' types.
+ constructor: function(/*String*/id){
+ this.id = id; this._objName = "Entry"; this.feedUrl = null;
+ },
+ _getAttributeNames: function(){return null;},
+ _accepts: {
+ 'author': true,
+ 'content': true,
+ 'category': true,
+ 'contributor': true,
+ 'created': true,
+ 'id': true,
+ 'link': true,
+ 'published': true,
+ 'rights': true,
+ 'summary': true,
+ 'title': true,
+ 'updated': true,
+ 'xmlbase': true,
+ 'issued': true,
+ 'modified': true
+ },
+ toString: function(amPrimary){
+ // summary:
+ // Function to construct string form of the entry tag, which is an XML structure.
+ // description:
+ // Function to construct string form of the entry tag, which is an XML structure.
+ var s = [];
+ var i;
+ if(amPrimary){
+ s.push("<?xml version='1.0' encoding='UTF-8'?>");
+ s.push("<entry xmlns='"+dojox.atom.io.model._Constants.ATOM_URI+"'");
+ }else{s.push("<entry");}
+ if(this.xmlBase){s.push(' xml:base="'+this.xmlBase+'" ');}
+ for(i in this.name_spaces){s.push(' xmlns:'+i+'="'+this.name_spaces[i]+'"');}
+ s.push('>\n');
+ s.push('<id>' + (this.id ? this.id: '') + '</id>\n');
+ if(this.issued && !this.published){this.published = this.issued;}
+ if(this.published){s.push('<published>'+dojo.date.stamp.toISOString(this.published)+'</published>\n');}
+ if(this.created){s.push('<created>'+dojo.date.stamp.toISOString(this.created)+'</created>\n');}
+ //Google News
+ if(this.issued){s.push('<issued>'+dojo.date.stamp.toISOString(this.issued)+'</issued>\n');}
+
+ //Google News
+ if(this.modified){s.push('<modified>'+dojo.date.stamp.toISOString(this.modified)+'</modified>\n');}
+
+ if(this.modified && !this.updated){this.updated = this.modified;}
+ if(this.updated){s.push('<updated>'+dojo.date.stamp.toISOString(this.updated)+'</updated>\n');}
+ if(this.rights){s.push('<rights>'+this.rights+'</rights>\n');}
+ if(this.title){s.push(this.title.toString());}
+ if(this.summary){s.push(this.summary.toString());}
+ var arrays = [this.authors,this.categories,this.links,this.contributors,this.extensions];
+ for(var x in arrays){
+ if(arrays[x]){
+ for(var y in arrays[x]){
+ s.push(arrays[x][y]);
+ }
+ }
+ }
+ if(this.content){s.push(this.content.toString());}
+ s.push("</entry>\n");
+ return s.join(''); //string
+ },
+ getEditHref: function(){
+ // summary:
+ // Function to get the href that allows editing of this feed entry.
+ // description:
+ // Function to get the href that allows editing of this feed entry.
+ //
+ // returns:
+ // The href that specifies edit capability.
+ if(this.links === null || this.links.length === 0){
+ return null;
+ }
+ for(var x in this.links){
+ if(this.links[x].rel && this.links[x].rel == "edit"){
+ return this.links[x].href; //string
+ }
+ }
+ return null;
+ },
+ setEditHref: function(url){
+ if(this.links === null){
+ this.links = [];
+ }
+ for(var x in this.links){
+ if(this.links[x].rel && this.links[x].rel == "edit"){
+ this.links[x].href = url;
+ return;
+ }
+ }
+ this.addLink(url, 'edit');
+ }
+});
+
+dojo.declare("dojox.atom.io.model.Feed",dojox.atom.io.model.AtomItem,{
+ // summary:
+ // Class container for 'Feed' types.
+ // description:
+ // Class container for 'Feed' types.
+ _accepts: {
+ 'author': true,
+ 'content': true,
+ 'category': true,
+ 'contributor': true,
+ 'created': true,
+ 'id': true,
+ 'link': true,
+ 'published': true,
+ 'rights': true,
+ 'summary': true,
+ 'title': true,
+ 'updated': true,
+ 'xmlbase': true,
+ 'entry': true,
+ 'logo': true,
+ 'issued': true,
+ 'modified': true,
+ 'icon': true,
+ 'subtitle': true
+ },
+ addEntry: function(/*object*/entry){
+ // summary:
+ // Function to add an entry to this feed.
+ // description:
+ // Function to add an entry to this feed.
+ // entry:
+ // The entry object to add.
+ if(!entry.id){
+ throw new Error("The entry object must be assigned an ID attribute.");
+ }
+ if(!this.entries){this.entries = [];}
+ entry.feedUrl = this.getSelfHref();
+ this.entries.push(entry);
+ },
+ getFirstEntry: function(){
+ // summary:
+ // Function to get the first entry of the feed.
+ // description:
+ // Function to get the first entry of the feed.
+ //
+ // returns:
+ // The first entry in the feed.
+ if(!this.entries || this.entries.length === 0){return null;}
+ return this.entries[0]; //object
+ },
+ getEntry: function(/*String*/entryId){
+ // summary:
+ // Function to get an entry by its id.
+ // description:
+ // Function to get an entry by its id.
+ //
+ // returns:
+ // The entry desired, or null if none.
+ if(!this.entries){return null;}
+ for(var x in this.entries){
+ if(this.entries[x].id == entryId){
+ return this.entries[x];
+ }
+ }
+ return null;
+ },
+ removeEntry: function(/*object*/entry){
+ // summary:
+ // Function to remove an entry from the list of links.
+ // description:
+ // Function to remove an entry from the list of links.
+ //
+ // entry:
+ // The entry.
+ if(!this.entries){return;}
+ var count = 0;
+ for(var i = 0; i < this.entries.length; i++){
+ if(this.entries[i] === entry){
+ this.entries.splice(i,1);
+ count++;
+ }
+ }
+ return count;
+ },
+ setEntries: function(/*array*/arrayOfEntry){
+ // summary:
+ // Function to add a set of entries to the feed.
+ // description:
+ // Function to get an entry by its id.
+ //
+ // arrayOfEntry:
+ // An array of entry objects to add to the feed.
+ for(var x in arrayOfEntry){
+ this.addEntry(arrayOfEntry[x]);
+ }
+ },
+ toString: function(){
+ // summary:
+ // Function to construct string form of the feed tag, which is an XML structure.
+ // description:
+ // Function to construct string form of the feed tag, which is an XML structure.
+ var s = [];
+ var i;
+ s.push('<?xml version="1.0" encoding="utf-8"?>\n');
+ s.push('<feed xmlns="'+dojox.atom.io.model._Constants.ATOM_URI+'"');
+ if(this.xmlBase){s.push(' xml:base="'+this.xmlBase+'"');}
+ for(i in this.name_spaces){s.push(' xmlns:'+i+'="'+this.name_spaces[i]+'"');}
+ s.push('>\n');
+ s.push('<id>' + (this.id ? this.id: '') + '</id>\n');
+ if(this.title){s.push(this.title);}
+ if(this.copyright && !this.rights){this.rights = this.copyright;}
+ if(this.rights){s.push('<rights>' + this.rights + '</rights>\n');}
+
+ // Google news
+ if(this.issued){s.push('<issued>'+dojo.date.stamp.toISOString(this.issued)+'</issued>\n');}
+ if(this.modified){s.push('<modified>'+dojo.date.stamp.toISOString(this.modified)+'</modified>\n');}
+
+ if(this.modified && !this.updated){this.updated=this.modified;}
+ if(this.updated){s.push('<updated>'+dojo.date.stamp.toISOString(this.updated)+'</updated>\n');}
+ if(this.published){s.push('<published>'+dojo.date.stamp.toISOString(this.published)+'</published>\n');}
+ if(this.icon){s.push('<icon>'+this.icon+'</icon>\n');}
+ if(this.language){s.push('<language>'+this.language+'</language>\n');}
+ if(this.logo){s.push('<logo>'+this.logo+'</logo>\n');}
+ if(this.subtitle){s.push(this.subtitle.toString());}
+ if(this.tagline){s.push(this.tagline.toString());}
+ //TODO: need to figure out what to do with xmlBase
+ var arrays = [this.alternateLinks,this.authors,this.categories,this.contributors,this.otherLinks,this.extensions,this.entries];
+ for(i in arrays){
+ if(arrays[i]){
+ for(var x in arrays[i]){
+ s.push(arrays[i][x]);
+ }
+ }
+ }
+ s.push('</feed>');
+ return s.join('');
+ },
+ createEntry: function(){
+ // summary:
+ // Function to Create a new entry object in the feed.
+ // description:
+ // Function to Create a new entry object in the feed.
+ // returns:
+ // An empty entry object in the feed.
+ var entry = new dojox.atom.io.model.Entry();
+ entry.feedUrl = this.getSelfHref();
+ return entry; //object
+ },
+ getSelfHref: function(){
+ // summary:
+ // Function to get the href that refers to this feed.
+ // description:
+ // Function to get the href that refers to this feed.
+ // returns:
+ // The href that refers to this feed or null if none.
+ if(this.links === null || this.links.length === 0){
+ return null;
+ }
+ for(var x in this.links){
+ if(this.links[x].rel && this.links[x].rel == "self"){
+ return this.links[x].href; //string
+ }
+ }
+ return null;
+ }
+});
+
+dojo.declare("dojox.atom.io.model.Service",dojox.atom.io.model.AtomItem,{
+ // summary:
+ // Class container for 'Feed' types.
+ // description:
+ // Class container for 'Feed' types.
+ constructor: function(href){
+ this.href = href;
+ },
+ //builds a Service document. each element of this, except for the namespace, is the href of
+ //a service that the server supports. Some of the common services are:
+ //"create-entry" , "user-prefs" , "search-entries" , "edit-template" , "categories"
+ buildFromDom: function(/*DOM node*/node){
+ // summary:
+ // Function to do construction of the Service data from the DOM node containing it.
+ // description:
+ // Function to do construction of the Service data from the DOM node containing it.
+ //
+ // node:
+ // The DOM node to process for content.
+ var i;
+ this.workspaces = [];
+ if(node.tagName != "service"){
+ // FIXME: Need 0.9 DOM util...
+ //node = dojox.xml.parser.firstElement(node,"service");
+ //if(!node){return;}
+ return;
+ }
+ if(node.namespaceURI != dojox.atom.io.model._Constants.PURL_NS && node.namespaceURI != dojox.atom.io.model._Constants.APP_NS){return;}
+ var ns = node.namespaceURI;
+ this.name_space = node.namespaceURI;
+ //find all workspaces, and create them
+ var workspaces ;
+ if(typeof(node.getElementsByTagNameNS)!= "undefined"){
+ workspaces = node.getElementsByTagNameNS(ns,"workspace");
+ }else{
+ // This block is IE only, which doesn't have a 'getElementsByTagNameNS' function
+ workspaces = [];
+ var temp = node.getElementsByTagName('workspace');
+ for(i=0; i<temp.length; i++){
+ if(temp[i].namespaceURI == ns){
+ workspaces.push(temp[i]);
+ }
+ }
+ }
+ if(workspaces && workspaces.length > 0){
+ var wkLen = 0;
+ var workspace;
+ for(i = 0; i< workspaces.length; i++){
+ workspace = (typeof(workspaces.item)==="undefined"?workspaces[i]:workspaces.item(i));
+ var wkspace = new dojox.atom.io.model.Workspace();
+ wkspace.buildFromDom(workspace);
+ this.workspaces[wkLen++] = wkspace;
+ }
+ }
+ },
+ getCollection: function(/*String*/url){
+ // summary:
+ // Function to collections that match a specific url.
+ // description:
+ // Function to collections that match a specific url.
+ //
+ // url:
+ // e URL to match collections against.
+ for(var i=0;i<this.workspaces.length;i++){
+ var coll=this.workspaces[i].collections;
+ for(var j=0;j<coll.length;j++){
+ if(coll[j].href == url){
+ return coll;
+ }
+ }
+ }
+ return null;
+ }
+});
+
+dojo.declare("dojox.atom.io.model.Workspace",dojox.atom.io.model.AtomItem,{
+ // summary:
+ // Class container for 'Workspace' types.
+ // description:
+ // Class container for 'Workspace' types.
+ constructor: function(title){
+ this.title = title;
+ this.collections = [];
+ },
+
+ buildFromDom: function(/*DOM node*/node){
+ // summary:
+ // Function to do construction of the Workspace data from the DOM node containing it.
+ // description:
+ // Function to do construction of the Workspace data from the DOM node containing it.
+ //
+ // node:
+ // The DOM node to process for content.
+ var name = dojox.atom.io.model.util.getNodename(node);
+ if(name != "workspace"){return;}
+ var c = node.childNodes;
+ var len = 0;
+ for(var i = 0; i< c.length; i++){
+ var child = c[i];
+ if(child.nodeType === 1){
+ name = dojox.atom.io.model.util.getNodename(child);
+ if(child.namespaceURI == dojox.atom.io.model._Constants.PURL_NS || child.namespaceURI == dojox.atom.io.model._Constants.APP_NS){
+ if(name === "collection"){
+ var coll = new dojox.atom.io.model.Collection();
+ coll.buildFromDom(child);
+ this.collections[len++] = coll;
+ }
+ }else if(child.namespaceURI === dojox.atom.io.model._Constants.ATOM_NS){
+ if(name === "title"){
+ this.title = dojox.xml.parser.textContent(child);
+ }
+ }
+ //FIXME: Add an extension point so others can impl different namespaces. For now just
+ //ignore unknown namespace tags.
+ }
+ }
+ }
+});
+
+dojo.declare("dojox.atom.io.model.Collection",dojox.atom.io.model.AtomItem,{
+ // summary:
+ // Class container for 'Collection' types.
+ // description:
+ // Class container for 'Collection' types.
+ constructor: function(href, title){
+ this.href = href;
+ this.title = title;
+ this.attributes = [];
+ this.features = [];
+ this.children = [];
+ this.memberType = null;
+ this.id = null;
+ },
+
+ buildFromDom: function(/*DOM node*/node){
+ // summary:
+ // Function to do construction of the Collection data from the DOM node containing it.
+ // description:
+ // Function to do construction of the Collection data from the DOM node containing it.
+ //
+ // node:
+ // The DOM node to process for content.
+ this.href = node.getAttribute("href");
+ var c = node.childNodes;
+ for(var i = 0; i< c.length; i++){
+ var child = c[i];
+ if(child.nodeType === 1){
+ var name = dojox.atom.io.model.util.getNodename(child);
+ if(child.namespaceURI == dojox.atom.io.model._Constants.PURL_NS || child.namespaceURI == dojox.atom.io.model._Constants.APP_NS){
+ if(name === "member-type"){
+ this.memberType = dojox.xml.parser.textContent(child);
+ }else if(name == "feature"){//this IF stmt might need some more work
+ if(child.getAttribute("id")){this.features.push(child.getAttribute("id"));}
+ }else{
+ var unknownTypeChild = new dojox.atom.io.model.Node();
+ unknownTypeChild.buildFromDom(child);
+ this.children.push(unknownTypeChild);
+ }
+ }else if(child.namespaceURI === dojox.atom.io.model._Constants.ATOM_NS){
+ if(name === "id"){
+ this.id = dojox.xml.parser.textContent(child);
+ }else if(name === "title"){
+ this.title = dojox.xml.parser.textContent(child);
+ }
+ }
+ }
+ }
+ }
+});
+
+}
diff --git a/js/dojo-1.6/dojox/atom/io/model.xd.js b/js/dojo-1.6/dojox/atom/io/model.xd.js
new file mode 100644
index 0000000..58833f0
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/io/model.xd.js
@@ -0,0 +1,1311 @@
+/*
+ Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.io.model"],
+["require", "dojox.xml.parser"],
+["require", "dojo.string"],
+["require", "dojo.date.stamp"]],
+defineResource: function(dojo, dijit, dojox){if(!dojo._hasResource["dojox.atom.io.model"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.atom.io.model"] = true;
+dojo.provide("dojox.atom.io.model");
+
+dojo.require("dojox.xml.parser");
+dojo.require("dojo.string");
+dojo.require("dojo.date.stamp");
+
+dojox.atom.io.model._Constants = {
+ // summary:
+ // Container for general constants.
+ // description:
+ // Container for general constants.
+ "ATOM_URI": "http://www.w3.org/2005/Atom",
+ "ATOM_NS": "http://www.w3.org/2005/Atom",
+ "PURL_NS": "http://purl.org/atom/app#",
+ "APP_NS": "http://www.w3.org/2007/app"
+};
+
+dojox.atom.io.model._actions = {
+ // summary:
+ // Container for tag handling functions.
+ // description:
+ // Container for tag handling functions. Each child of this container is
+ // a handler function for the given type of node. Each accepts two parameters:
+ // obj: Object.
+ // The object to insert data into.
+ // node: DOM Node.
+ // The dom node containing the data
+ "link": function(obj,node){
+ if(obj.links === null){obj.links = [];}
+ var link = new dojox.atom.io.model.Link();
+ link.buildFromDom(node);
+ obj.links.push(link);
+ },
+ "author": function(obj,node){
+ if(obj.authors === null){obj.authors = [];}
+ var person = new dojox.atom.io.model.Person("author");
+ person.buildFromDom(node);
+ obj.authors.push(person);
+ },
+ "contributor": function(obj,node){
+ if(obj.contributors === null){obj.contributors = [];}
+ var person = new dojox.atom.io.model.Person("contributor");
+ person.buildFromDom(node);
+ obj.contributors.push(person);
+ },
+ "category": function(obj,node){
+ if(obj.categories === null){obj.categories = [];}
+ var cat = new dojox.atom.io.model.Category();
+ cat.buildFromDom(node);
+ obj.categories.push(cat);
+ },
+ "icon": function(obj,node){
+ obj.icon = dojox.xml.parser.textContent(node);
+ },
+ "id": function(obj,node){
+ obj.id = dojox.xml.parser.textContent(node);
+ },
+ "rights": function(obj,node){
+ obj.rights = dojox.xml.parser.textContent(node);
+ },
+ "subtitle": function(obj,node){
+ var cnt = new dojox.atom.io.model.Content("subtitle");
+ cnt.buildFromDom(node);
+ obj.subtitle = cnt;
+ },
+ "title": function(obj,node){
+ var cnt = new dojox.atom.io.model.Content("title");
+ cnt.buildFromDom(node);
+ obj.title = cnt;
+ },
+ "updated": function(obj,node){
+ obj.updated = dojox.atom.io.model.util.createDate(node);
+ },
+ // Google news
+ "issued": function(obj,node){
+ obj.issued = dojox.atom.io.model.util.createDate(node);
+ },
+ // Google news
+ "modified": function(obj,node){
+ obj.modified = dojox.atom.io.model.util.createDate(node);
+ },
+ "published": function(obj,node){
+ obj.published = dojox.atom.io.model.util.createDate(node);
+ },
+ "entry": function(obj,node){
+ if(obj.entries === null){obj.entries = [];}
+ //The object passed in should be a Feed object, since only feeds can contain Entries
+ var entry = obj.createEntry ? obj.createEntry() : new dojox.atom.io.model.Entry();
+ entry.buildFromDom(node);
+ obj.entries.push(entry);
+ },
+ "content": function(obj, node){
+ var cnt = new dojox.atom.io.model.Content("content");
+ cnt.buildFromDom(node);
+ obj.content = cnt;
+ },
+ "summary": function(obj, node){
+ var summary = new dojox.atom.io.model.Content("summary");
+ summary.buildFromDom(node);
+ obj.summary = summary;
+ },
+
+ "name": function(obj,node){
+ obj.name = dojox.xml.parser.textContent(node);
+ },
+ "email" : function(obj,node){
+ obj.email = dojox.xml.parser.textContent(node);
+ },
+ "uri" : function(obj,node){
+ obj.uri = dojox.xml.parser.textContent(node);
+ },
+ "generator" : function(obj,node){
+ obj.generator = new dojox.atom.io.model.Generator();
+ obj.generator.buildFromDom(node);
+ }
+};
+
+dojox.atom.io.model.util = {
+ createDate: function(/*DOM node*/node){
+ // summary:
+ // Utility function to create a date from a DOM node's text content.
+ // description:
+ // Utility function to create a date from a DOM node's text content.
+ //
+ // node:
+ // The DOM node to inspect.
+ // returns:
+ // Date object from a DOM Node containing a ISO-8610 string.
+ var textContent = dojox.xml.parser.textContent(node);
+ if(textContent){
+ return dojo.date.stamp.fromISOString(dojo.trim(textContent));
+ }
+ return null;
+ },
+ escapeHtml: function(/*String*/str){
+ // summary:
+ // Utility function to escape XML special characters in an HTML string.
+ // description:
+ // Utility function to escape XML special characters in an HTML string.
+ //
+ // str:
+ // The string to escape
+ // returns:
+ // HTML String with special characters (<,>,&, ", etc,) escaped.
+ return str.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;")
+ .replace(/'/gm, "&#39;"); // String
+ },
+ unEscapeHtml: function(/*String*/str){
+ // summary:
+ // Utility function to un-escape XML special characters in an HTML string.
+ // description:
+ // Utility function to un-escape XML special characters in an HTML string.
+ //
+ // str:
+ // The string to un-escape.
+ // returns:
+ // HTML String converted back to the normal text (unescaped) characters (<,>,&, ", etc,).
+ return str.replace(/&lt;/gm, "<").replace(/&gt;/gm, ">").replace(/&quot;/gm, "\"")
+ .replace(/&#39;/gm, "'").replace(/&amp;/gm, "&"); // String
+ },
+ getNodename: function(/*DOM node*/node){
+ // summary:
+ // Utility function to get a node name and deal with IE's bad handling of namespaces
+ // on tag names.
+ // description:
+ // Utility function to get a node name and deal with IE's bad handling of namespaces
+ // on tag names.
+ //
+ // node:
+ // The DOM node whose name to retrieve.
+ // returns:
+ // String
+ // The name without namespace prefixes.
+ var name = null;
+ if(node !== null){
+ name = node.localName ? node.localName: node.nodeName;
+ if(name !== null){
+ var nsSep = name.indexOf(":");
+ if(nsSep !== -1){
+ name = name.substring((nsSep + 1), name.length);
+ }
+ }
+ }
+ return name;
+ }
+};
+
+dojo.declare('dojox.atom.io.model.Node', null, {
+ constructor: function(name_space,name, attributes,content, shortNs){
+ this.name_space = name_space;
+ this.name = name;
+ this.attributes = [];
+ if(attributes){
+ this.attributes = attributes;
+ }
+ this.content = [];
+ this.rawNodes = [];
+ this.textContent = null;
+ if(content){
+ this.content.push(content);
+ }
+ this.shortNs = shortNs;
+ this._objName = "Node";//for debugging purposes
+ },
+ buildFromDom: function(node){
+ this._saveAttributes(node);
+ this.name_space = node.namespaceURI;
+ this.shortNs = node.prefix;
+ this.name = dojox.atom.io.model.util.getNodename(node);
+ for(var x=0; x < node.childNodes.length; x++){
+ var c = node.childNodes[x];
+ if(dojox.atom.io.model.util.getNodename(c) != "#text" ){
+ this.rawNodes.push(c);
+ var n = new dojox.atom.io.model.Node();
+ n.buildFromDom(c, true);
+ this.content.push(n);
+ }else{
+ this.content.push(c.nodeValue);
+ }
+ }
+ this.textContent = dojox.xml.parser.textContent(node);
+ },
+ _saveAttributes: function(node){
+ if(!this.attributes){this.attributes = [];}
+ // Work around lack of hasAttributes() in IE
+ var hasAttributes = function(node){
+ var attrs = node.attributes;
+ if(attrs === null){return false;}
+ return (attrs.length !== 0);
+ };
+
+ if(hasAttributes(node) && this._getAttributeNames){
+ var names = this._getAttributeNames(node);
+ if(names && names.length > 0){
+ for(var x in names){
+ var attrib = node.getAttribute(names[x]);
+ if(attrib){this.attributes[names[x]] = attrib;}
+ }
+ }
+ }
+ },
+ addAttribute: function(name, value){
+ this.attributes[name]=value;
+ },
+ getAttribute: function(name){
+ return this.attributes[name];
+ },
+ //if child objects want their attributes parsed, they should override
+ //to return an array of attrib names
+ _getAttributeNames: function(node){
+ var names = [];
+ for(var i =0; i<node.attributes.length; i++){
+ names.push(node.attributes[i].nodeName);
+ }
+ return names;
+ },
+ toString: function(){
+ var xml = [];
+ var x;
+ var name = (this.shortNs?this.shortNs+":":'')+this.name;
+ var cdata = (this.name == "#cdata-section");
+ if(cdata){
+ xml.push("<![CDATA[");
+ xml.push(this.textContent);
+ xml.push("]]>");
+ }else{
+ xml.push("<");
+ xml.push(name);
+ if(this.name_space){
+ xml.push(" xmlns='" + this.name_space + "'");
+ }
+ if(this.attributes){
+ for(x in this.attributes){
+ xml.push(" " + x + "='" + this.attributes[x] + "'");
+ }
+ }
+ if(this.content){
+ xml.push(">");
+ for(x in this.content){
+ xml.push(this.content[x]);
+ }
+ xml.push("</" + name + ">\n");
+ }else{
+ xml.push("/>\n");
+ }
+ }
+ return xml.join('');
+ },
+ addContent: function(content){
+ this.content.push(content);
+ }
+});
+//Types are as follows: links: array of Link, authors: array of Person, categories: array of Category
+//contributors: array of Person, ico
+dojo.declare("dojox.atom.io.model.AtomItem",dojox.atom.io.model.Node,{
+ constructor: function(args){
+ this.ATOM_URI = dojox.atom.io.model._Constants.ATOM_URI;
+ this.links = null; //Array of Link
+ this.authors = null; //Array of Person
+ this.categories = null; //Array of Category
+ this.contributors = null; //Array of Person
+ this.icon = this.id = this.logo = this.xmlBase = this.rights = null; //String
+ this.subtitle = this.title = null; //Content
+ this.updated = this.published = null; //Date
+ // Google news
+ this.issued = this.modified = null; //Date
+ this.content = null; //Content
+ this.extensions = null; //Array of Node, non atom based
+ this.entries = null; //Array of Entry
+ this.name_spaces = {};
+ this._objName = "AtomItem"; //for debugging purposes
+ },
+ // summary: Class container for generic Atom items.
+ // description: Class container for generic Atom items.
+ _getAttributeNames: function(){return null;},
+ _accepts: {},
+ accept: function(tag){return Boolean(this._accepts[tag]);},
+ _postBuild: function(){},//child objects can override this if they want to be called after a Dom build
+ buildFromDom: function(node){
+ var i, c, n;
+ for(i=0; i<node.attributes.length; i++){
+ c = node.attributes.item(i);
+ n = dojox.atom.io.model.util.getNodename(c);
+ if(c.prefix == "xmlns" && c.prefix != n){
+ this.addNamespace(c.nodeValue, n);
+ }
+ }
+ c = node.childNodes;
+ for(i = 0; i< c.length; i++){
+ if(c[i].nodeType == 1) {
+ var name = dojox.atom.io.model.util.getNodename(c[i]);
+ if(!name){continue;}
+ if(c[i].namespaceURI != dojox.atom.io.model._Constants.ATOM_NS && name != "#text"){
+ if(!this.extensions){this.extensions = [];}
+ var extensionNode = new dojox.atom.io.model.Node();
+ extensionNode.buildFromDom(c[i]);
+ this.extensions.push(extensionNode);
+ }
+ if(!this.accept(name.toLowerCase())){
+ continue;
+ }
+ var fn = dojox.atom.io.model._actions[name];
+ if(fn) {
+ fn(this,c[i]);
+ }
+ }
+ }
+ this._saveAttributes(node);
+ if(this._postBuild){this._postBuild();}
+ },
+ addNamespace: function(fullName, shortName){
+ if(fullName && shortName){
+ this.name_spaces[shortName] = fullName;
+ }
+ },
+ addAuthor: function(/*String*/name, /*String*/email, /*String*/uri){
+ // summary:
+ // Function to add in an author to the list of authors.
+ // description:
+ // Function to add in an author to the list of authors.
+ //
+ // name:
+ // The author's name.
+ // email:
+ // The author's e-mail address.
+ // uri:
+ // A URI associated with the author.
+ if(!this.authors){this.authors = [];}
+ this.authors.push(new dojox.atom.io.model.Person("author",name,email,uri));
+ },
+ addContributor: function(/*String*/name, /*String*/email, /*String*/uri){
+ // summary:
+ // Function to add in an author to the list of authors.
+ // description:
+ // Function to add in an author to the list of authors.
+ //
+ // name:
+ // The author's name.
+ // email:
+ // The author's e-mail address.
+ // uri:
+ // A URI associated with the author.
+ if(!this.contributors){this.contributors = [];}
+ this.contributors.push(new dojox.atom.io.model.Person("contributor",name,email,uri));
+ },
+ addLink: function(/*String*/href,/*String*/rel,/*String*/hrefLang,/*String*/title,/*String*/type){
+ // summary:
+ // Function to add in a link to the list of links.
+ // description:
+ // Function to add in a link to the list of links.
+ //
+ // href:
+ // The href.
+ // rel:
+ // String
+ // hrefLang:
+ // String
+ // title:
+ // A title to associate with the link.
+ // type:
+ // The type of link is is.
+ if(!this.links){this.links=[];}
+ this.links.push(new dojox.atom.io.model.Link(href,rel,hrefLang,title,type));
+ },
+ removeLink: function(/*String*/href, /*String*/rel){
+ // summary:
+ // Function to remove a link from the list of links.
+ // description:
+ // Function to remove a link from the list of links.
+ //
+ // href:
+ // The href.
+ // rel:
+ // String
+ if(!this.links || !dojo.isArray(this.links)){return;}
+ var count = 0;
+ for(var i = 0; i < this.links.length; i++){
+ if((!href || this.links[i].href === href) && (!rel || this.links[i].rel === rel)){
+ this.links.splice(i,1); count++;
+ }
+ }
+ return count;
+ },
+ removeBasicLinks: function(){
+ // summary:
+ // Function to remove all basic links from the list of links.
+ // description:
+ // Function to remove all basic link from the list of links.
+ if(!this.links){return;}
+ var count = 0;
+ for(var i = 0; i < this.links.length; i++){
+ if(!this.links[i].rel){this.links.splice(i,1); count++; i--;}
+ }
+ return count;
+ },
+ addCategory: function(/*String*/scheme, /*String*/term, /*String*/label){
+ // summary:
+ // Function to add in a category to the list of categories.
+ // description:
+ // Function to add in a category to the list of categories.
+ //
+ // scheme:
+ // String
+ // term:
+ // String
+ // label:
+ // String
+ if(!this.categories){this.categories = [];}
+ this.categories.push(new dojox.atom.io.model.Category(scheme,term,label));
+ },
+ getCategories: function(/*String*/scheme){
+ // summary:
+ // Function to get all categories that match a particular scheme.
+ // description:
+ // Function to get all categories that match a particular scheme.
+ //
+ // scheme:
+ // String
+ // The scheme to filter on.
+ if(!scheme){return this.categories;}
+ //If categories belonging to a particular scheme are required, then create a new array containing these
+ var arr = [];
+ for(var x in this.categories){
+ if(this.categories[x].scheme === scheme){arr.push(this.categories[x]);}
+ }
+ return arr;
+ },
+ removeCategories: function(/*String*/scheme, /*String*/term){
+ // summary:
+ // Function to remove all categories that match a particular scheme and term.
+ // description:
+ // Function to remove all categories that match a particular scheme and term.
+ //
+ // scheme:
+ // The scheme to filter on.
+ // term:
+ // The term to filter on.
+ if(!this.categories){return;}
+ var count = 0;
+ for(var i=0; i<this.categories.length; i++){
+ if((!scheme || this.categories[i].scheme === scheme) && (!term || this.categories[i].term === term)){
+ this.categories.splice(i, 1); count++; i--;
+ }
+ }
+ return count;
+ },
+ setTitle: function(/*String*/str, /*String*/type){
+ // summary:
+ // Function to set the title of the item.
+ // description:
+ // Function to set the title of the item.
+ //
+ // str:
+ // The title to set.
+ // type:
+ // The type of title format, text, xml, xhtml, etc.
+ if(!str){return;}
+ this.title = new dojox.atom.io.model.Content("title");
+ this.title.value = str;
+ if(type){this.title.type = type;}
+ },
+ addExtension: function(/*String*/name_space,/*String*/name, /*Array*/attributes, /*String*/content, /*String*/shortNS){
+ // summary:
+ // Function to add in an extension namespace into the item.
+ // description:
+ // Function to add in an extension namespace into the item.
+ //
+ // name_space:
+ // The namespace of the extension.
+ // name:
+ // The name of the extension
+ // attributes:
+ // The attributes associated with the extension.
+ // content:
+ // The content of the extension.
+ if(!this.extensions){this.extensions=[];}
+ this.extensions.push(new dojox.atom.io.model.Node(name_space,name,attributes,content, shortNS || "ns"+this.extensions.length));
+ },
+ getExtensions: function(/*String*/name_space, /*String*/name){
+ // summary:
+ // Function to get extensions that match a namespace and name.
+ // description:
+ // Function to get extensions that match a namespace and name.
+ //
+ // name_space:
+ // The namespace of the extension.
+ // name:
+ // The name of the extension
+ var arr = [];
+ if(!this.extensions){return arr;}
+ for(var x in this.extensions){
+ if((this.extensions[x].name_space === name_space || this.extensions[x].shortNs === name_space) && (!name || this.extensions[x].name === name)){
+ arr.push(this.extensions[x]);
+ }
+ }
+ return arr;
+ },
+ removeExtensions: function(/*String*/name_space, /*String*/name){
+ // summary:
+ // Function to remove extensions that match a namespace and name.
+ // description:
+ // Function to remove extensions that match a namespace and name.
+ //
+ // name_space:
+ // The namespace of the extension.
+ // name:
+ // The name of the extension
+ if(!this.extensions){return;}
+ for(var i=0; i< this.extensions.length; i++){
+ if((this.extensions[i].name_space == name_space || this.extensions[i].shortNs === name_space) && this.extensions[i].name === name){
+ this.extensions.splice(i,1);
+ i--;
+ }
+ }
+ },
+ destroy: function() {
+ this.links = null;
+ this.authors = null;
+ this.categories = null;
+ this.contributors = null;
+ this.icon = this.id = this.logo = this.xmlBase = this.rights = null;
+ this.subtitle = this.title = null;
+ this.updated = this.published = null;
+ // Google news
+ this.issued = this.modified = null;
+ this.content = null;
+ this.extensions = null;
+ this.entries = null;
+ }
+});
+
+dojo.declare("dojox.atom.io.model.Category",dojox.atom.io.model.Node,{
+ // summary:
+ // Class container for 'Category' types.
+ // description:
+ // Class container for 'Category' types.
+ constructor: function(/*String*/scheme, /*String*/term, /*String*/label){
+ this.scheme = scheme; this.term = term; this.label = label;
+ this._objName = "Category";//for debugging
+ },
+ _postBuild: function(){},
+ _getAttributeNames: function(){
+ return ["label","scheme","term"];
+ },
+ toString: function(){
+ // summary:
+ // Function to construct string form of the category tag, which is an XML structure.
+ // description:
+ // Function to construct string form of the category tag, which is an XML structure.
+ var s = [];
+ s.push('<category ');
+ if(this.label){s.push(' label="'+this.label+'" ');}
+ if(this.scheme){s.push(' scheme="'+this.scheme+'" ');}
+ if(this.term){s.push(' term="'+this.term+'" ');}
+ s.push('/>\n');
+ return s.join('');
+ },
+ buildFromDom: function(/*DOM node*/node){
+ // summary:
+ // Function to do construction of the Category data from the DOM node containing it.
+ // description:
+ // Function to do construction of the Category data from the DOM node containing it.
+ //
+ // node:
+ // The DOM node to process for content.
+ this._saveAttributes(node);//just get the attributes from the node
+ this.label = this.attributes.label;
+ this.scheme = this.attributes.scheme;
+ this.term = this.attributes.term;
+ if(this._postBuild){this._postBuild();}
+ }
+});
+
+dojo.declare("dojox.atom.io.model.Content",dojox.atom.io.model.Node,{
+ // summary:
+ // Class container for 'Content' types. Such as summary, content, username, and so on types of data.
+ // description:
+ // Class container for 'Content' types. Such as summary, content, username, and so on types of data.
+ constructor: function(tagName, value, src, type,xmlLang){
+ this.tagName = tagName; this.value = value; this.src = src; this.type=type; this.xmlLang = xmlLang;
+ this.HTML = "html"; this.TEXT = "text"; this.XHTML = "xhtml"; this.XML="xml";
+ this._useTextContent = "true";
+ },
+ _getAttributeNames: function(){return ["type","src"];},
+ _postBuild: function(){},
+ buildFromDom: function(/*DOM node*/node){
+ // summary:
+ // Function to do construction of the Content data from the DOM node containing it.
+ // description:
+ // Function to do construction of the Content data from the DOM node containing it.
+ //
+ // node:
+ // The DOM node to process for content.
+ //Handle checking for XML content as the content type
+ var type = node.getAttribute("type");
+ if(type){
+ type = type.toLowerCase();
+ if(type == "xml" || "text/xml"){
+ type = this.XML;
+ }
+ }else{
+ type="text";
+ }
+ if(type === this.XML){
+ if(node.firstChild){
+ var i;
+ this.value = "";
+ for(i = 0; i < node.childNodes.length; i++){
+ var c = node.childNodes[i];
+ if(c){
+ this.value += dojox.xml.parser.innerXML(c);
+ }
+ }
+ }
+ } else if(node.innerHTML){
+ this.value = node.innerHTML;
+ }else{
+ this.value = dojox.xml.parser.textContent(node);
+ }
+
+ this._saveAttributes(node);
+
+ if(this.attributes){
+ this.type = this.attributes.type;
+ this.scheme = this.attributes.scheme;
+ this.term = this.attributes.term;
+ }
+ if(!this.type){this.type = "text";}
+
+ //We need to unescape the HTML content here so that it can be displayed correctly when the value is fetched.
+ var lowerType = this.type.toLowerCase();
+ if(lowerType === "html" || lowerType === "text/html" || lowerType === "xhtml" || lowerType === "text/xhtml"){
+ this.value = this.value?dojox.atom.io.model.util.unEscapeHtml(this.value):"";
+ }
+
+ if(this._postBuild){this._postBuild();}
+ },
+ toString: function(){
+ // summary:
+ // Function to construct string form of the content tag, which is an XML structure.
+ // description:
+ // Function to construct string form of the content tag, which is an XML structure.
+ var s = [];
+ s.push('<'+this.tagName+' ');
+ if(!this.type){this.type = "text";}
+ if(this.type){s.push(' type="'+this.type+'" ');}
+ if(this.xmlLang){s.push(' xml:lang="'+this.xmlLang+'" ');}
+ if(this.xmlBase){s.push(' xml:base="'+this.xmlBase+'" ');}
+
+ //all HTML must be escaped
+ if(this.type.toLowerCase() == this.HTML){
+ s.push('>'+dojox.atom.io.model.util.escapeHtml(this.value)+'</'+this.tagName+'>\n');
+ }else{
+ s.push('>'+this.value+'</'+this.tagName+'>\n');
+ }
+ var ret = s.join('');
+ return ret;
+ }
+});
+
+dojo.declare("dojox.atom.io.model.Link",dojox.atom.io.model.Node,{
+ // summary:
+ // Class container for 'link' types.
+ // description:
+ // Class container for 'link' types.
+ constructor: function(href,rel,hrefLang,title,type){
+ this.href = href; this.hrefLang = hrefLang; this.rel = rel; this.title = title;this.type = type;
+ },
+ _getAttributeNames: function(){return ["href","jrefLang","rel","title","type"];},
+ _postBuild: function(){},
+ buildFromDom: function(node){
+ // summary:
+ // Function to do construction of the link data from the DOM node containing it.
+ // description:
+ // Function to do construction of the link data from the DOM node containing it.
+ //
+ // node:
+ // The DOM node to process for link data.
+ this._saveAttributes(node);//just get the attributes from the node
+ this.href = this.attributes.href;
+ this.hrefLang = this.attributes.hreflang;
+ this.rel = this.attributes.rel;
+ this.title = this.attributes.title;
+ this.type = this.attributes.type;
+ if(this._postBuild){this._postBuild();}
+ },
+ toString: function(){
+ // summary:
+ // Function to construct string form of the link tag, which is an XML structure.
+ // description:
+ // Function to construct string form of the link tag, which is an XML structure.
+ var s = [];
+ s.push('<link ');
+ if(this.href){s.push(' href="'+this.href+'" ');}
+ if(this.hrefLang){s.push(' hrefLang="'+this.hrefLang+'" ');}
+ if(this.rel){s.push(' rel="'+this.rel+'" ');}
+ if(this.title){s.push(' title="'+this.title+'" ');}
+ if(this.type){s.push(' type = "'+this.type+'" ');}
+ s.push('/>\n');
+ return s.join('');
+ }
+});
+
+dojo.declare("dojox.atom.io.model.Person",dojox.atom.io.model.Node,{
+ // summary:
+ // Class container for 'person' types, such as Author, controbutors, and so on.
+ // description:
+ // Class container for 'person' types, such as Author, controbutors, and so on.
+ constructor: function(personType, name, email, uri){
+ this.author = "author";
+ this.contributor = "contributor";
+ if(!personType){
+ personType = this.author;
+ }
+ this.personType = personType;
+ this.name = name || '';
+ this.email = email || '';
+ this.uri = uri || '';
+ this._objName = "Person";//for debugging
+ },
+ _getAttributeNames: function(){return null;},
+ _postBuild: function(){},
+ accept: function(tag){return Boolean(this._accepts[tag]);},
+ buildFromDom: function(node){
+ // summary:
+ // Function to do construction of the person data from the DOM node containing it.
+ // description:
+ // Function to do construction of the person data from the DOM node containing it.
+ //
+ // node:
+ // The DOM node to process for person data.
+ var c = node.childNodes;
+ for(var i = 0; i< c.length; i++){
+ var name = dojox.atom.io.model.util.getNodename(c[i]);
+
+ if(!name){continue;}
+
+ if(c[i].namespaceURI != dojox.atom.io.model._Constants.ATOM_NS && name != "#text"){
+ if(!this.extensions){this.extensions = [];}
+ var extensionNode = new dojox.atom.io.model.Node();
+ extensionNode.buildFromDom(c[i]);
+ this.extensions.push(extensionNode);
+ }
+ if(!this.accept(name.toLowerCase())){
+ continue;
+ }
+ var fn = dojox.atom.io.model._actions[name];
+ if(fn) {
+ fn(this,c[i]);
+ }
+ }
+ this._saveAttributes(node);
+ if(this._postBuild){this._postBuild();}
+ },
+ _accepts: {
+ 'name': true,
+ 'uri': true,
+ 'email': true
+ },
+ toString: function(){
+ // summary:
+ // Function to construct string form of the Person tag, which is an XML structure.
+ // description:
+ // Function to construct string form of the Person tag, which is an XML structure.
+ var s = [];
+ s.push('<'+this.personType+'>\n');
+ if(this.name){s.push('\t<name>'+this.name+'</name>\n');}
+ if(this.email){s.push('\t<email>'+this.email+'</email>\n');}
+ if(this.uri){s.push('\t<uri>'+this.uri+'</uri>\n');}
+ s.push('</'+this.personType+'>\n');
+ return s.join('');
+ }
+});
+
+dojo.declare("dojox.atom.io.model.Generator",dojox.atom.io.model.Node,{
+ // summary:
+ // Class container for 'Generator' types.
+ // description:
+ // Class container for 'Generator' types.
+ constructor: function(/*String*/uri, /*String*/version, /*String*/value){
+ this.uri = uri;
+ this.version = version;
+ this.value = value;
+ },
+ _postBuild: function(){},
+ buildFromDom: function(node){
+ // summary:
+ // Function to do construction of the generator data from the DOM node containing it.
+ // description:
+ // Function to do construction of the generator data from the DOM node containing it.
+ //
+ // node:
+ // The DOM node to process for link data.
+
+ this.value = dojox.xml.parser.textContent(node);
+ this._saveAttributes(node);
+
+ this.uri = this.attributes.uri;
+ this.version = this.attributes.version;
+
+ if(this._postBuild){this._postBuild();}
+ },
+ toString: function(){
+ // summary:
+ // Function to construct string form of the Generator tag, which is an XML structure.
+ // description:
+ // Function to construct string form of the Generator tag, which is an XML structure.
+ var s = [];
+ s.push('<generator ');
+ if(this.uri){s.push(' uri="'+this.uri+'" ');}
+ if(this.version){s.push(' version="'+this.version+'" ');}
+ s.push('>'+this.value+'</generator>\n');
+ var ret = s.join('');
+ return ret;
+ }
+});
+
+dojo.declare("dojox.atom.io.model.Entry",dojox.atom.io.model.AtomItem,{
+ // summary:
+ // Class container for 'Entry' types.
+ // description:
+ // Class container for 'Entry' types.
+ constructor: function(/*String*/id){
+ this.id = id; this._objName = "Entry"; this.feedUrl = null;
+ },
+ _getAttributeNames: function(){return null;},
+ _accepts: {
+ 'author': true,
+ 'content': true,
+ 'category': true,
+ 'contributor': true,
+ 'created': true,
+ 'id': true,
+ 'link': true,
+ 'published': true,
+ 'rights': true,
+ 'summary': true,
+ 'title': true,
+ 'updated': true,
+ 'xmlbase': true,
+ 'issued': true,
+ 'modified': true
+ },
+ toString: function(amPrimary){
+ // summary:
+ // Function to construct string form of the entry tag, which is an XML structure.
+ // description:
+ // Function to construct string form of the entry tag, which is an XML structure.
+ var s = [];
+ var i;
+ if(amPrimary){
+ s.push("<?xml version='1.0' encoding='UTF-8'?>");
+ s.push("<entry xmlns='"+dojox.atom.io.model._Constants.ATOM_URI+"'");
+ }else{s.push("<entry");}
+ if(this.xmlBase){s.push(' xml:base="'+this.xmlBase+'" ');}
+ for(i in this.name_spaces){s.push(' xmlns:'+i+'="'+this.name_spaces[i]+'"');}
+ s.push('>\n');
+ s.push('<id>' + (this.id ? this.id: '') + '</id>\n');
+ if(this.issued && !this.published){this.published = this.issued;}
+ if(this.published){s.push('<published>'+dojo.date.stamp.toISOString(this.published)+'</published>\n');}
+ if(this.created){s.push('<created>'+dojo.date.stamp.toISOString(this.created)+'</created>\n');}
+ //Google News
+ if(this.issued){s.push('<issued>'+dojo.date.stamp.toISOString(this.issued)+'</issued>\n');}
+
+ //Google News
+ if(this.modified){s.push('<modified>'+dojo.date.stamp.toISOString(this.modified)+'</modified>\n');}
+
+ if(this.modified && !this.updated){this.updated = this.modified;}
+ if(this.updated){s.push('<updated>'+dojo.date.stamp.toISOString(this.updated)+'</updated>\n');}
+ if(this.rights){s.push('<rights>'+this.rights+'</rights>\n');}
+ if(this.title){s.push(this.title.toString());}
+ if(this.summary){s.push(this.summary.toString());}
+ var arrays = [this.authors,this.categories,this.links,this.contributors,this.extensions];
+ for(var x in arrays){
+ if(arrays[x]){
+ for(var y in arrays[x]){
+ s.push(arrays[x][y]);
+ }
+ }
+ }
+ if(this.content){s.push(this.content.toString());}
+ s.push("</entry>\n");
+ return s.join(''); //string
+ },
+ getEditHref: function(){
+ // summary:
+ // Function to get the href that allows editing of this feed entry.
+ // description:
+ // Function to get the href that allows editing of this feed entry.
+ //
+ // returns:
+ // The href that specifies edit capability.
+ if(this.links === null || this.links.length === 0){
+ return null;
+ }
+ for(var x in this.links){
+ if(this.links[x].rel && this.links[x].rel == "edit"){
+ return this.links[x].href; //string
+ }
+ }
+ return null;
+ },
+ setEditHref: function(url){
+ if(this.links === null){
+ this.links = [];
+ }
+ for(var x in this.links){
+ if(this.links[x].rel && this.links[x].rel == "edit"){
+ this.links[x].href = url;
+ return;
+ }
+ }
+ this.addLink(url, 'edit');
+ }
+});
+
+dojo.declare("dojox.atom.io.model.Feed",dojox.atom.io.model.AtomItem,{
+ // summary:
+ // Class container for 'Feed' types.
+ // description:
+ // Class container for 'Feed' types.
+ _accepts: {
+ 'author': true,
+ 'content': true,
+ 'category': true,
+ 'contributor': true,
+ 'created': true,
+ 'id': true,
+ 'link': true,
+ 'published': true,
+ 'rights': true,
+ 'summary': true,
+ 'title': true,
+ 'updated': true,
+ 'xmlbase': true,
+ 'entry': true,
+ 'logo': true,
+ 'issued': true,
+ 'modified': true,
+ 'icon': true,
+ 'subtitle': true
+ },
+ addEntry: function(/*object*/entry){
+ // summary:
+ // Function to add an entry to this feed.
+ // description:
+ // Function to add an entry to this feed.
+ // entry:
+ // The entry object to add.
+ if(!entry.id){
+ throw new Error("The entry object must be assigned an ID attribute.");
+ }
+ if(!this.entries){this.entries = [];}
+ entry.feedUrl = this.getSelfHref();
+ this.entries.push(entry);
+ },
+ getFirstEntry: function(){
+ // summary:
+ // Function to get the first entry of the feed.
+ // description:
+ // Function to get the first entry of the feed.
+ //
+ // returns:
+ // The first entry in the feed.
+ if(!this.entries || this.entries.length === 0){return null;}
+ return this.entries[0]; //object
+ },
+ getEntry: function(/*String*/entryId){
+ // summary:
+ // Function to get an entry by its id.
+ // description:
+ // Function to get an entry by its id.
+ //
+ // returns:
+ // The entry desired, or null if none.
+ if(!this.entries){return null;}
+ for(var x in this.entries){
+ if(this.entries[x].id == entryId){
+ return this.entries[x];
+ }
+ }
+ return null;
+ },
+ removeEntry: function(/*object*/entry){
+ // summary:
+ // Function to remove an entry from the list of links.
+ // description:
+ // Function to remove an entry from the list of links.
+ //
+ // entry:
+ // The entry.
+ if(!this.entries){return;}
+ var count = 0;
+ for(var i = 0; i < this.entries.length; i++){
+ if(this.entries[i] === entry){
+ this.entries.splice(i,1);
+ count++;
+ }
+ }
+ return count;
+ },
+ setEntries: function(/*array*/arrayOfEntry){
+ // summary:
+ // Function to add a set of entries to the feed.
+ // description:
+ // Function to get an entry by its id.
+ //
+ // arrayOfEntry:
+ // An array of entry objects to add to the feed.
+ for(var x in arrayOfEntry){
+ this.addEntry(arrayOfEntry[x]);
+ }
+ },
+ toString: function(){
+ // summary:
+ // Function to construct string form of the feed tag, which is an XML structure.
+ // description:
+ // Function to construct string form of the feed tag, which is an XML structure.
+ var s = [];
+ var i;
+ s.push('<?xml version="1.0" encoding="utf-8"?>\n');
+ s.push('<feed xmlns="'+dojox.atom.io.model._Constants.ATOM_URI+'"');
+ if(this.xmlBase){s.push(' xml:base="'+this.xmlBase+'"');}
+ for(i in this.name_spaces){s.push(' xmlns:'+i+'="'+this.name_spaces[i]+'"');}
+ s.push('>\n');
+ s.push('<id>' + (this.id ? this.id: '') + '</id>\n');
+ if(this.title){s.push(this.title);}
+ if(this.copyright && !this.rights){this.rights = this.copyright;}
+ if(this.rights){s.push('<rights>' + this.rights + '</rights>\n');}
+
+ // Google news
+ if(this.issued){s.push('<issued>'+dojo.date.stamp.toISOString(this.issued)+'</issued>\n');}
+ if(this.modified){s.push('<modified>'+dojo.date.stamp.toISOString(this.modified)+'</modified>\n');}
+
+ if(this.modified && !this.updated){this.updated=this.modified;}
+ if(this.updated){s.push('<updated>'+dojo.date.stamp.toISOString(this.updated)+'</updated>\n');}
+ if(this.published){s.push('<published>'+dojo.date.stamp.toISOString(this.published)+'</published>\n');}
+ if(this.icon){s.push('<icon>'+this.icon+'</icon>\n');}
+ if(this.language){s.push('<language>'+this.language+'</language>\n');}
+ if(this.logo){s.push('<logo>'+this.logo+'</logo>\n');}
+ if(this.subtitle){s.push(this.subtitle.toString());}
+ if(this.tagline){s.push(this.tagline.toString());}
+ //TODO: need to figure out what to do with xmlBase
+ var arrays = [this.alternateLinks,this.authors,this.categories,this.contributors,this.otherLinks,this.extensions,this.entries];
+ for(i in arrays){
+ if(arrays[i]){
+ for(var x in arrays[i]){
+ s.push(arrays[i][x]);
+ }
+ }
+ }
+ s.push('</feed>');
+ return s.join('');
+ },
+ createEntry: function(){
+ // summary:
+ // Function to Create a new entry object in the feed.
+ // description:
+ // Function to Create a new entry object in the feed.
+ // returns:
+ // An empty entry object in the feed.
+ var entry = new dojox.atom.io.model.Entry();
+ entry.feedUrl = this.getSelfHref();
+ return entry; //object
+ },
+ getSelfHref: function(){
+ // summary:
+ // Function to get the href that refers to this feed.
+ // description:
+ // Function to get the href that refers to this feed.
+ // returns:
+ // The href that refers to this feed or null if none.
+ if(this.links === null || this.links.length === 0){
+ return null;
+ }
+ for(var x in this.links){
+ if(this.links[x].rel && this.links[x].rel == "self"){
+ return this.links[x].href; //string
+ }
+ }
+ return null;
+ }
+});
+
+dojo.declare("dojox.atom.io.model.Service",dojox.atom.io.model.AtomItem,{
+ // summary:
+ // Class container for 'Feed' types.
+ // description:
+ // Class container for 'Feed' types.
+ constructor: function(href){
+ this.href = href;
+ },
+ //builds a Service document. each element of this, except for the namespace, is the href of
+ //a service that the server supports. Some of the common services are:
+ //"create-entry" , "user-prefs" , "search-entries" , "edit-template" , "categories"
+ buildFromDom: function(/*DOM node*/node){
+ // summary:
+ // Function to do construction of the Service data from the DOM node containing it.
+ // description:
+ // Function to do construction of the Service data from the DOM node containing it.
+ //
+ // node:
+ // The DOM node to process for content.
+ var i;
+ this.workspaces = [];
+ if(node.tagName != "service"){
+ // FIXME: Need 0.9 DOM util...
+ //node = dojox.xml.parser.firstElement(node,"service");
+ //if(!node){return;}
+ return;
+ }
+ if(node.namespaceURI != dojox.atom.io.model._Constants.PURL_NS && node.namespaceURI != dojox.atom.io.model._Constants.APP_NS){return;}
+ var ns = node.namespaceURI;
+ this.name_space = node.namespaceURI;
+ //find all workspaces, and create them
+ var workspaces ;
+ if(typeof(node.getElementsByTagNameNS)!= "undefined"){
+ workspaces = node.getElementsByTagNameNS(ns,"workspace");
+ }else{
+ // This block is IE only, which doesn't have a 'getElementsByTagNameNS' function
+ workspaces = [];
+ var temp = node.getElementsByTagName('workspace');
+ for(i=0; i<temp.length; i++){
+ if(temp[i].namespaceURI == ns){
+ workspaces.push(temp[i]);
+ }
+ }
+ }
+ if(workspaces && workspaces.length > 0){
+ var wkLen = 0;
+ var workspace;
+ for(i = 0; i< workspaces.length; i++){
+ workspace = (typeof(workspaces.item)==="undefined"?workspaces[i]:workspaces.item(i));
+ var wkspace = new dojox.atom.io.model.Workspace();
+ wkspace.buildFromDom(workspace);
+ this.workspaces[wkLen++] = wkspace;
+ }
+ }
+ },
+ getCollection: function(/*String*/url){
+ // summary:
+ // Function to collections that match a specific url.
+ // description:
+ // Function to collections that match a specific url.
+ //
+ // url:
+ // e URL to match collections against.
+ for(var i=0;i<this.workspaces.length;i++){
+ var coll=this.workspaces[i].collections;
+ for(var j=0;j<coll.length;j++){
+ if(coll[j].href == url){
+ return coll;
+ }
+ }
+ }
+ return null;
+ }
+});
+
+dojo.declare("dojox.atom.io.model.Workspace",dojox.atom.io.model.AtomItem,{
+ // summary:
+ // Class container for 'Workspace' types.
+ // description:
+ // Class container for 'Workspace' types.
+ constructor: function(title){
+ this.title = title;
+ this.collections = [];
+ },
+
+ buildFromDom: function(/*DOM node*/node){
+ // summary:
+ // Function to do construction of the Workspace data from the DOM node containing it.
+ // description:
+ // Function to do construction of the Workspace data from the DOM node containing it.
+ //
+ // node:
+ // The DOM node to process for content.
+ var name = dojox.atom.io.model.util.getNodename(node);
+ if(name != "workspace"){return;}
+ var c = node.childNodes;
+ var len = 0;
+ for(var i = 0; i< c.length; i++){
+ var child = c[i];
+ if(child.nodeType === 1){
+ name = dojox.atom.io.model.util.getNodename(child);
+ if(child.namespaceURI == dojox.atom.io.model._Constants.PURL_NS || child.namespaceURI == dojox.atom.io.model._Constants.APP_NS){
+ if(name === "collection"){
+ var coll = new dojox.atom.io.model.Collection();
+ coll.buildFromDom(child);
+ this.collections[len++] = coll;
+ }
+ }else if(child.namespaceURI === dojox.atom.io.model._Constants.ATOM_NS){
+ if(name === "title"){
+ this.title = dojox.xml.parser.textContent(child);
+ }
+ }
+ //FIXME: Add an extension point so others can impl different namespaces. For now just
+ //ignore unknown namespace tags.
+ }
+ }
+ }
+});
+
+dojo.declare("dojox.atom.io.model.Collection",dojox.atom.io.model.AtomItem,{
+ // summary:
+ // Class container for 'Collection' types.
+ // description:
+ // Class container for 'Collection' types.
+ constructor: function(href, title){
+ this.href = href;
+ this.title = title;
+ this.attributes = [];
+ this.features = [];
+ this.children = [];
+ this.memberType = null;
+ this.id = null;
+ },
+
+ buildFromDom: function(/*DOM node*/node){
+ // summary:
+ // Function to do construction of the Collection data from the DOM node containing it.
+ // description:
+ // Function to do construction of the Collection data from the DOM node containing it.
+ //
+ // node:
+ // The DOM node to process for content.
+ this.href = node.getAttribute("href");
+ var c = node.childNodes;
+ for(var i = 0; i< c.length; i++){
+ var child = c[i];
+ if(child.nodeType === 1){
+ var name = dojox.atom.io.model.util.getNodename(child);
+ if(child.namespaceURI == dojox.atom.io.model._Constants.PURL_NS || child.namespaceURI == dojox.atom.io.model._Constants.APP_NS){
+ if(name === "member-type"){
+ this.memberType = dojox.xml.parser.textContent(child);
+ }else if(name == "feature"){//this IF stmt might need some more work
+ if(child.getAttribute("id")){this.features.push(child.getAttribute("id"));}
+ }else{
+ var unknownTypeChild = new dojox.atom.io.model.Node();
+ unknownTypeChild.buildFromDom(child);
+ this.children.push(unknownTypeChild);
+ }
+ }else if(child.namespaceURI === dojox.atom.io.model._Constants.ATOM_NS){
+ if(name === "id"){
+ this.id = dojox.xml.parser.textContent(child);
+ }else if(name === "title"){
+ this.title = dojox.xml.parser.textContent(child);
+ }
+ }
+ }
+ }
+ }
+});
+
+}
+
+}};});
diff --git a/js/dojo-1.6/dojox/atom/widget/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/FeedEntryEditor.js
new file mode 100644
index 0000000..3addd32
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/FeedEntryEditor.js
@@ -0,0 +1,1230 @@
+/*
+ Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.atom.widget.FeedEntryEditor"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.atom.widget.FeedEntryEditor"] = true;
+dojo.provide("dojox.atom.widget.FeedEntryEditor");
+
+dojo.require("dojox.atom.widget.FeedEntryViewer");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Container");
+dojo.require("dijit.Editor");
+dojo.require("dijit.form.TextBox");
+dojo.require("dijit.form.SimpleTextarea");
+dojo.requireLocalization("dojox.atom.widget", "FeedEntryEditor", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+dojo.requireLocalization("dojox.atom.widget", "PeopleEditor", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+
+dojo.experimental("dojox.atom.widget.FeedEntryEditor");
+
+dojo.declare("dojox.atom.widget.FeedEntryEditor",dojox.atom.widget.FeedEntryViewer,{
+ // summary:
+ // An ATOM feed entry editor that allows viewing of the individual attributes of an entry.
+ // description:
+ // An ATOM feed entry editor that allows viewing of the individual attributes of an entry.
+ _contentEditor: null,
+ _oldContent: null,
+ _setObject: null,
+ enableEdit: false,
+ _contentEditorCreator: null,
+ _editors: {},
+ entryNewButton: null,
+ _editable: false, //Flag denoting if the current entry is editable or not.
+
+ //Templates for the HTML rendering. Need to figure these out better, admittedly.
+ templateString: dojo.cache("dojox.atom", "widget/templates/FeedEntryEditor.html", "<div class=\"feedEntryViewer\">\r\n <table border=\"0\" width=\"100%\" class=\"feedEntryViewerMenuTable\" dojoAttachPoint=\"feedEntryViewerMenu\" style=\"display: none;\">\r\n <tr width=\"100%\" dojoAttachPoint=\"entryCheckBoxDisplayOptions\">\r\n \t<td align=\"left\" dojoAttachPoint=\"entryNewButton\">\r\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"doNew\" dojoAttachEvent=\"onclick:_toggleNew\"></span>\r\n \t</td>\r\n <td align=\"left\" dojoAttachPoint=\"entryEditButton\" style=\"display: none;\">\r\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"edit\" dojoAttachEvent=\"onclick:_toggleEdit\"></span>\r\n </td>\r\n <td align=\"left\" dojoAttachPoint=\"entrySaveCancelButtons\" style=\"display: none;\">\r\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"save\" dojoAttachEvent=\"onclick:saveEdits\"></span>\r\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"cancel\" dojoAttachEvent=\"onclick:cancelEdits\"></span>\r\n </td>\r\n <td align=\"right\">\r\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"displayOptions\" dojoAttachEvent=\"onclick:_toggleOptions\"></span>\r\n </td>\r\n </tr>\r\n <tr class=\"feedEntryViewerDisplayCheckbox\" dojoAttachPoint=\"entryCheckBoxRow\" width=\"100%\" style=\"display: none;\">\r\n <td dojoAttachPoint=\"feedEntryCelltitle\">\r\n <input type=\"checkbox\" name=\"title\" value=\"Title\" dojoAttachPoint=\"feedEntryCheckBoxTitle\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelTitle\"></label>\r\n </td>\r\n <td dojoAttachPoint=\"feedEntryCellauthors\">\r\n <input type=\"checkbox\" name=\"authors\" value=\"Authors\" dojoAttachPoint=\"feedEntryCheckBoxAuthors\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelAuthors\"></label>\r\n </td>\r\n <td dojoAttachPoint=\"feedEntryCellcontributors\">\r\n <input type=\"checkbox\" name=\"contributors\" value=\"Contributors\" dojoAttachPoint=\"feedEntryCheckBoxContributors\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelContributors\"></label>\r\n </td>\r\n <td dojoAttachPoint=\"feedEntryCellid\">\r\n <input type=\"checkbox\" name=\"id\" value=\"Id\" dojoAttachPoint=\"feedEntryCheckBoxId\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelId\"></label>\r\n </td>\r\n <td rowspan=\"2\" align=\"right\">\r\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"close\" dojoAttachEvent=\"onclick:_toggleOptions\"></span>\r\n </td>\r\n\t\t</tr>\r\n\t\t<tr class=\"feedEntryViewerDisplayCheckbox\" dojoAttachPoint=\"entryCheckBoxRow2\" width=\"100%\" style=\"display: none;\">\r\n <td dojoAttachPoint=\"feedEntryCellupdated\">\r\n <input type=\"checkbox\" name=\"updated\" value=\"Updated\" dojoAttachPoint=\"feedEntryCheckBoxUpdated\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelUpdated\"></label>\r\n </td>\r\n <td dojoAttachPoint=\"feedEntryCellsummary\">\r\n <input type=\"checkbox\" name=\"summary\" value=\"Summary\" dojoAttachPoint=\"feedEntryCheckBoxSummary\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelSummary\"></label>\r\n </td>\r\n <td dojoAttachPoint=\"feedEntryCellcontent\">\r\n <input type=\"checkbox\" name=\"content\" value=\"Content\" dojoAttachPoint=\"feedEntryCheckBoxContent\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelContent\"></label>\r\n </td>\r\n </tr>\r\n </table>\r\n \r\n <table class=\"feedEntryViewerContainer\" border=\"0\" width=\"100%\">\r\n <tr class=\"feedEntryViewerTitle\" dojoAttachPoint=\"entryTitleRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryTitleHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td>\r\n \t<select dojoAttachPoint=\"entryTitleSelect\" dojoAttachEvent=\"onchange:_switchEditor\" style=\"display: none\">\r\n \t\t<option value=\"text\">Text</option>\r\n\t\t\t\t\t\t\t\t<option value=\"html\">HTML</option>\r\n\t\t\t\t\t\t\t\t<option value=\"xhtml\">XHTML</option>\r\n \t</select>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"2\" dojoAttachPoint=\"entryTitleNode\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n\r\n <tr class=\"feedEntryViewerAuthor\" dojoAttachPoint=\"entryAuthorRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryAuthorHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entryAuthorNode\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n\r\n <tr class=\"feedEntryViewerContributor\" dojoAttachPoint=\"entryContributorRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryContributorHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entryContributorNode\" class=\"feedEntryViewerContributorNames\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n \r\n <tr class=\"feedEntryViewerId\" dojoAttachPoint=\"entryIdRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryIdHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entryIdNode\" class=\"feedEntryViewerIdText\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n \r\n <tr class=\"feedEntryViewerUpdated\" dojoAttachPoint=\"entryUpdatedRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryUpdatedHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entryUpdatedNode\" class=\"feedEntryViewerUpdatedText\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n \r\n <tr class=\"feedEntryViewerSummary\" dojoAttachPoint=\"entrySummaryRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\" colspan=\"2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entrySummaryHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td>\r\n \t<select dojoAttachPoint=\"entrySummarySelect\" dojoAttachEvent=\"onchange:_switchEditor\" style=\"display: none\">\r\n \t\t<option value=\"text\">Text</option>\r\n\t\t\t\t\t\t\t\t<option value=\"html\">HTML</option>\r\n\t\t\t\t\t\t\t\t<option value=\"xhtml\">XHTML</option>\r\n \t</select>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entrySummaryNode\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n \r\n <tr class=\"feedEntryViewerContent\" dojoAttachPoint=\"entryContentRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryContentHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td>\r\n \t<select dojoAttachPoint=\"entryContentSelect\" dojoAttachEvent=\"onchange:_switchEditor\" style=\"display: none\">\r\n \t\t<option value=\"text\">Text</option>\r\n\t\t\t\t\t\t\t\t<option value=\"html\">HTML</option>\r\n\t\t\t\t\t\t\t\t<option value=\"xhtml\">XHTML</option>\r\n \t</select>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entryContentNode\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>\r\n"),
+
+ postCreate: function(){
+ if(this.entrySelectionTopic !== ""){
+ this._subscriptions = [dojo.subscribe(this.entrySelectionTopic, this, "_handleEvent")];
+ }
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedEntryViewer");
+ this.displayOptions.innerHTML = _nlsResources.displayOptions;
+ this.feedEntryCheckBoxLabelTitle.innerHTML = _nlsResources.title;
+ this.feedEntryCheckBoxLabelAuthors.innerHTML = _nlsResources.authors;
+ this.feedEntryCheckBoxLabelContributors.innerHTML = _nlsResources.contributors;
+ this.feedEntryCheckBoxLabelId.innerHTML = _nlsResources.id;
+ this.close.innerHTML = _nlsResources.close;
+ this.feedEntryCheckBoxLabelUpdated.innerHTML = _nlsResources.updated;
+ this.feedEntryCheckBoxLabelSummary.innerHTML = _nlsResources.summary;
+ this.feedEntryCheckBoxLabelContent.innerHTML = _nlsResources.content;
+
+ _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedEntryEditor");
+ this.doNew.innerHTML = _nlsResources.doNew;
+ this.edit.innerHTML = _nlsResources.edit;
+ this.save.innerHTML = _nlsResources.save;
+ this.cancel.innerHTML = _nlsResources.cancel;
+ },
+
+ setEntry: function(/*object*/entry, /*object*/feed, /*boolean*/leaveMenuState){
+ // summary:
+ // Function to set the current entry that is being edited.
+ // description:
+ // Function to set the current entry that is being edited.
+ //
+ // entry:
+ // Instance of dojox.atom.io.model.Entry to display for reading/editing.
+ if(this._entry !== entry){
+ //If we swap entries, we don't want to keep the menu states and modes.
+ this._editMode=false;
+ leaveMenuState=false;
+ }else{
+ leaveMenuState = true;
+ }
+ dojox.atom.widget.FeedEntryEditor.superclass.setEntry.call(this, entry, feed);
+ this._editable = this._isEditable(entry);
+ if(!leaveMenuState && !this._editable){
+ dojo.style(this.entryEditButton, 'display', 'none');
+ dojo.style(this.entrySaveCancelButtons, 'display', 'none');
+ }
+ if(this._editable && this.enableEdit){
+ if(!leaveMenuState){
+ dojo.style(this.entryEditButton, 'display', '');
+ //TODO double check this &&...
+ if(this.enableMenuFade && this.entrySaveCancelButton){
+ dojo.fadeOut({node: this.entrySaveCancelButton,duration: 250}).play();
+ }
+ }
+ }
+ },
+
+ _toggleEdit: function(){
+ // summary:
+ // Internal function for toggling/enabling the display of edit mode
+ // description:
+ // Internal function for toggling/enabling the display of edit mode
+ //
+ // returns:
+ // Nothing.
+ if(this._editable && this.enableEdit){
+ dojo.style(this.entryEditButton, 'display', 'none');
+ dojo.style(this.entrySaveCancelButtons, 'display', '');
+ this._editMode = true;
+
+ //Rebuild the view using the same entry and feed.
+ this.setEntry(this._entry, this._feed, true);
+ }
+ },
+
+ _handleEvent: function(/*object*/entrySelectionEvent){
+ // summary:
+ // Internal function for listening to a topic that will handle entry notification.
+ // description:
+ // Internal function for listening to a topic that will handle entry notification.
+ //
+ // entrySelectionEvent:
+ // The topic message containing the entry that was selected for view.
+ //
+ // returns:
+ // Nothing.
+ if(entrySelectionEvent.source != this && entrySelectionEvent.action == "delete" &&
+ entrySelectionEvent.entry && entrySelectionEvent.entry == this._entry){
+ dojo.style(this.entryEditButton, 'display', 'none');
+ }
+ dojox.atom.widget.FeedEntryEditor.superclass._handleEvent.call(this, entrySelectionEvent);
+ },
+
+ _isEditable: function(/*object*/entry){
+ // summary:
+ // Internal function for determining of a particular entry is editable.
+ // description:
+ // Internal function for determining of a particular entry is editable.
+ // This is used for determining if the delete action should be displayed or not.
+ //
+ // entry:
+ // The dojox.atom.io.model.Entry object to examine
+ //
+ // returns:
+ // Boolean denoting if the entry seems editable or not..
+ var retVal = false;
+ if(entry && entry !== null && entry.links && entry.links !== null){
+ for(var x in entry.links){
+ if(entry.links[x].rel && entry.links[x].rel == "edit"){
+ retVal = true;
+ break;
+ }
+ }
+ }
+ return retVal;
+ },
+
+ // The following set<Attribute> functions override the corresponding functions in FeedEntryViewer. These handle
+ // the editMode flag by inserting appropriate editor widgets inside of just splashing the content in the page.
+ setTitle: function(/*DOM node*/titleAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the title node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the title node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // titleAnchorNode:
+ // The DOM node to attach the title data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ //
+ if(!editMode){
+ dojox.atom.widget.FeedEntryEditor.superclass.setTitle.call(this, titleAnchorNode, editMode, entry);
+ if(entry.title && entry.title.value && entry.title.value !== null){
+ this.setFieldValidity("title", true);
+ }
+ }else{
+ if(entry.title && entry.title.value && entry.title.value !== null){
+ if(!this._toLoad){
+ this._toLoad = [];
+ }
+ this.entryTitleSelect.value = entry.title.type;
+
+ var editor = this._createEditor(titleAnchorNode, entry.title, true, entry.title.type === "html" || entry.title.type === "xhtml");
+ editor.name = "title";
+ this._toLoad.push(editor);
+ this.setFieldValidity("titleedit",true);
+ this.setFieldValidity("title",true);
+ }
+ }
+ },
+
+ setAuthors: function(/*DOM node*/authorsAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the author node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the author node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // authorsAnchorNode:
+ // The DOM node to attach the author data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(!editMode){
+ dojox.atom.widget.FeedEntryEditor.superclass.setAuthors.call(this, authorsAnchorNode, editMode, entry);
+ if(entry.authors && entry.authors.length > 0){
+ this.setFieldValidity("authors", true);
+ }
+ }else{
+ if(entry.authors && entry.authors.length > 0){
+ this._editors.authors = this._createPeopleEditor(this.entryAuthorNode, {data: entry.authors, name: "Author"});
+ this.setFieldValidity("authors", true);
+ }
+ }
+ },
+
+
+ setContributors: function(/*DOM node*/contributorsAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the contributor node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the contributor node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // contributorsAnchorNode:
+ // The DOM node to attach the contributor data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(!editMode){
+ dojox.atom.widget.FeedEntryEditor.superclass.setContributors.call(this, contributorsAnchorNode, editMode, entry);
+ if(entry.contributors && entry.contributors.length > 0){
+ this.setFieldValidity("contributors", true);
+ }
+ }else{
+ if(entry.contributors && entry.contributors.length > 0){
+ this._editors.contributors = this._createPeopleEditor(this.entryContributorNode, {data: entry.contributors, name: "Contributor"});
+ this.setFieldValidity("contributors", true);
+ }
+ }
+ },
+
+
+ setId: function(/*DOM node*/idAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the ID node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the ID node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // idAnchorNode:
+ // The DOM node to attach the ID data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(!editMode){
+ dojox.atom.widget.FeedEntryEditor.superclass.setId.call(this, idAnchorNode, editMode, entry);
+ if(entry.id && entry.id !== null){
+ this.setFieldValidity("id", true);
+ }
+ }else{
+ if(entry.id && entry.id !== null){
+ this._editors.id = this._createEditor(idAnchorNode, entry.id);
+ this.setFieldValidity("id",true);
+ }
+ }
+ },
+
+ setUpdated: function(/*DOM node*/updatedAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the updated node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the updated node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // updatedAnchorNode:
+ // The DOM node to attach the udpated data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(!editMode){
+ dojox.atom.widget.FeedEntryEditor.superclass.setUpdated.call(this, updatedAnchorNode, editMode, entry);
+ if(entry.updated && entry.updated !== null){
+ this.setFieldValidity("updated", true);
+ }
+ }else{
+ if(entry.updated && entry.updated !== null){
+ this._editors.updated = this._createEditor(updatedAnchorNode, entry.updated);
+ this.setFieldValidity("updated",true);
+ }
+ }
+ },
+
+
+ setSummary: function(/*DOM node*/summaryAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the summary node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the summary node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // summaryAnchorNode:
+ // The DOM node to attach the summary data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(!editMode){
+ dojox.atom.widget.FeedEntryEditor.superclass.setSummary.call(this, summaryAnchorNode, editMode, entry);
+ if(entry.summary && entry.summary.value && entry.summary.value !== null){
+ this.setFieldValidity("summary", true);
+ }
+ }else{
+ if(entry.summary && entry.summary.value && entry.summary.value !== null){
+ if(!this._toLoad){
+ this._toLoad = [];
+ }
+ this.entrySummarySelect.value = entry.summary.type;
+
+ var editor = this._createEditor(summaryAnchorNode, entry.summary, true, entry.summary.type === "html" || entry.summary.type === "xhtml");
+ editor.name = "summary";
+ this._toLoad.push(editor);
+ this.setFieldValidity("summaryedit",true);
+ this.setFieldValidity("summary",true);
+ }
+ }
+ },
+
+ setContent: function(/*DOM node*/contentAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the content node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the content node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // summaryAnchorNode:
+ // The DOM node to attach the content data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(!editMode){
+ dojox.atom.widget.FeedEntryEditor.superclass.setContent.call(this, contentAnchorNode, editMode, entry);
+ if(entry.content && entry.content.value && entry.content.value !== null){
+ this.setFieldValidity("content",true);
+ }
+ }else{
+ if(entry.content && entry.content.value && entry.content.value !== null){
+ if(!this._toLoad){
+ this._toLoad = [];
+ }
+ this.entryContentSelect.value = entry.content.type;
+ var editor = this._createEditor(contentAnchorNode, entry.content, true, entry.content.type === "html" || entry.content.type === "xhtml");
+ editor.name = "content";
+ this._toLoad.push(editor);
+ this.setFieldValidity("contentedit",true);
+ this.setFieldValidity("content",true);
+ }
+ }
+ },
+
+ _createEditor: function(/*DOM node*/anchorNode, /*DOM node*/node, /*boolean*/multiline, /*object*/rte){
+ // summary:
+ // Function to create an appropriate text editor widget based on the given parameters.
+ // description:
+ // Function to create an appropriate text editor widget based on the given parameters.
+ //
+ // anchorNode:
+ // The DOM node to attach the editor widget to.
+ // node:
+ // An object containing the value to be put into the editor. This ranges from an anonymous object
+ // with a value parameter to a dojox.atom.io.model.Content object.
+ // multiline:
+ // A boolean indicating whether the content should be multiline (such as a textarea) instead of a
+ // single line (such as a textbox).
+ // rte:
+ // A boolean indicating whether the content should be a rich text editor widget.
+ //
+ // returns:
+ // Either a widget (for textarea or textbox widgets) or an anonymous object to be used to create a
+ // rich text area widget.
+ var viewNode;
+ var box;
+ if(!node){
+ if(rte){
+ // Returns an anonymous object which would then be loaded later, after the containing element
+ // exists on the page.
+ return {anchorNode: anchorNode,
+ entryValue: "",
+ editor: null,
+ generateEditor: function(){
+ // The only way I found I could get the editor to behave consistently was to
+ // create the content on a span, and allow the content editor to replace it.
+ // This gets around the dynamic/delayed way in which content editors get created.
+ var node = document.createElement("div");
+ node.innerHTML = this.entryValue;
+ this.anchorNode.appendChild(node);
+ var _editor = new dijit.Editor({}, node);
+ this.editor = _editor;
+ return _editor;
+ }
+ };
+ }
+ if(multiline){
+ // If multiline, create a textarea
+ viewNode = document.createElement("textarea");
+ anchorNode.appendChild(viewNode);
+ dojo.style(viewNode, 'width', '90%');
+ box = new dijit.form.SimpleTextarea({},viewNode);
+ }else{
+ // If single line, create a textbox.
+ viewNode = document.createElement("input");
+ anchorNode.appendChild(viewNode);
+ dojo.style(viewNode, 'width', '95%');
+ box = new dijit.form.TextBox({},viewNode);
+ }
+ box.attr('value', '');
+ return box;
+ }
+
+ // Check through the node parameter to get the value to be used.
+ var value;
+ if(node.value !== undefined){
+ value = node.value;
+ }else if(node.attr){
+ value = node.attr('value');
+ }else{
+ value = node;
+ }
+ if(rte){
+ // Returns an anonymous object which would then be loaded later, after the containing element
+ // exists on the page.
+ if(value.indexOf("<") != -1){
+ value = value.replace(/</g, "&lt;");
+ }
+ return {anchorNode: anchorNode,
+ entryValue: value,
+ editor: null,
+ generateEditor: function(){
+ // The only way I found I could get the editor to behave consistently was to
+ // create the content on a span, and allow the content editor to replace it.
+ // This gets around the dynamic/delayed way in which content editors get created.
+ var node = document.createElement("div");
+ node.innerHTML = this.entryValue;
+ this.anchorNode.appendChild(node);
+ var _editor = new dijit.Editor({}, node);
+ this.editor = _editor;
+ return _editor;
+ }
+ };
+ }
+ if(multiline){
+ // If multiline, create a textarea
+ viewNode = document.createElement("textarea");
+ anchorNode.appendChild(viewNode);
+ dojo.style(viewNode, 'width', '90%');
+ box = new dijit.form.SimpleTextarea({},viewNode);
+ }else{
+ // If single line, create a textbox.
+ viewNode = document.createElement("input");
+ anchorNode.appendChild(viewNode);
+ dojo.style(viewNode, 'width', '95%');
+ box = new dijit.form.TextBox({},viewNode);
+ }
+ box.attr('value', value);
+ return box;
+ },
+
+ _switchEditor: function(/*object*/event){
+ // summary:
+ // Function to switch between editor types.
+ // description:
+ // Function to switch between a rich text editor and a textarea widget. Used for title, summary,
+ // And content when switching between text and html/xhtml content.
+ //
+ // event:
+ // The event generated by the change in the select box on the page.
+ var type = null;
+ var target = null;
+ var parent = null;
+
+ // Determine the source/target of this event (to determine which editor we're switching)
+ if(dojo.isIE){
+ target = event.srcElement;
+ }else{
+ target = event.target;
+ }
+
+ // Determine which editor (title, summary, or content)
+ if(target === this.entryTitleSelect){
+ parent = this.entryTitleNode;
+ type = "title";
+ } else if(target === this.entrySummarySelect){
+ parent = this.entrySummaryNode;
+ type = "summary";
+ }else{
+ parent = this.entryContentNode;
+ type = "content";
+ }
+
+ // Grab the existing editor.
+ var editor = this._editors[type];
+ var newEditor;
+ var value;
+
+ if(target.value === "text"){
+ if(editor.declaredClass === "dijit.Editor"){
+ // If we're changing the type to text and our existing editor is a rich text editor, we need to destroy
+ // it and switch to a multiline editor.
+ value = editor.attr('value', false);
+ editor.close(false,true);
+ editor.destroy();
+ while(parent.firstChild){
+ dojo.destroy(parent.firstChild);
+ }
+ newEditor = this._createEditor(parent, {value: value}, true, false);
+ this._editors[type] = newEditor;
+ }
+ }else{
+ if(editor.declaredClass != "dijit.Editor"){
+ // Otherwise, we're switching to a html or xhtml type, but we currently have a textarea widget. We need
+ // to destroy the existing RTE and create a multiline textarea widget.
+ value = editor.attr('value');
+ editor.destroy();
+ while(parent.firstChild){
+ dojo.destroy(parent.firstChild);
+ }
+ newEditor = this._createEditor(parent, {value: value}, true, true);
+ newEditor = dojo.hitch(newEditor, newEditor.generateEditor)();
+ this._editors[type] = newEditor;
+ }
+ }
+ },
+
+ _createPeopleEditor: function(/*DOM node*/anchorNode, /*DOM node*/node){
+ // summary:
+ // Creates a People Editor widget and returns it.
+ // description:
+ // Creates a People Editor widget, sets its value, and returns it.
+ //
+ // anchorNode:
+ // The node to attach the editor to.
+ // node:
+ // An object containing the value to be put into the editor. Typically, this is an
+ // dojox.atom.io.model.Person object.
+ //
+ // returns: A new People Editor object.
+ var viewNode = document.createElement("div");
+ anchorNode.appendChild(viewNode);
+ return new dojox.atom.widget.PeopleEditor(node,viewNode);
+ },
+
+ saveEdits: function(){
+ // summary:
+ // Saves edits submitted when the 'save' button is pressed.
+ // description:
+ // Saves edits submitted when the 'save' button is pressed. Distinguishes between new and existing
+ // entries and saves appropriately. Fetches the values of the editors, and, if existing, compares them to
+ // the existing values and submits the updates, otherwise creates a new entry and posts it as a new entry.
+ //
+ // returns:
+ // Nothing.
+ dojo.style(this.entrySaveCancelButtons, 'display', 'none');
+ dojo.style(this.entryEditButton, 'display', '');
+ dojo.style(this.entryNewButton, 'display', '');
+ var modifiedEntry = false;
+ var value;
+ var i;
+ var changed;
+ var entry;
+ var authors;
+ var contributors;
+ if(!this._new){
+ entry = this.getEntry();
+ if(this._editors.title && (this._editors.title.attr('value') != entry.title.value || this.entryTitleSelect.value != entry.title.type)){
+ value = this._editors.title.attr('value');
+ if(this.entryTitleSelect.value === "xhtml"){
+ value = this._enforceXhtml(value);
+ if(value.indexOf('<div xmlns="http://www.w3.org/1999/xhtml">') !== 0){
+ value = '<div xmlns="http://www.w3.org/1999/xhtml">' + value + '</div>';
+ }
+ }
+ entry.title = new dojox.atom.io.model.Content("title", value, null, this.entryTitleSelect.value);
+ modifiedEntry = true;
+ }
+
+ if(this._editors.id.attr('value') != entry.id){
+ entry.id = this._editors.id.attr('value');
+ modifiedEntry = true;
+ }
+
+ if(this._editors.summary && (this._editors.summary.attr('value') != entry.summary.value || this.entrySummarySelect.value != entry.summary.type)){
+ value = this._editors.summary.attr('value');
+ if(this.entrySummarySelect.value === "xhtml"){
+ value = this._enforceXhtml(value);
+ if(value.indexOf('<div xmlns="http://www.w3.org/1999/xhtml">') !== 0){
+ value = '<div xmlns="http://www.w3.org/1999/xhtml">' + value + '</div>';
+ }
+ }
+ entry.summary = new dojox.atom.io.model.Content("summary", value, null, this.entrySummarySelect.value);
+ modifiedEntry = true;
+ }
+
+ if(this._editors.content && (this._editors.content.attr('value') != entry.content.value || this.entryContentSelect.value != entry.content.type)){
+ value = this._editors.content.attr('value');
+ if(this.entryContentSelect.value === "xhtml"){
+ value = this._enforceXhtml(value);
+ if(value.indexOf('<div xmlns="http://www.w3.org/1999/xhtml">') !== 0){
+ value = '<div xmlns="http://www.w3.org/1999/xhtml">' + value + '</div>';
+ }
+ }
+ entry.content = new dojox.atom.io.model.Content("content", value, null, this.entryContentSelect.value);
+ modifiedEntry = true;
+ }
+
+ if(this._editors.authors){
+ if(modifiedEntry){
+ entry.authors = [];
+ authors = this._editors.authors.getValues();
+ for(i in authors){
+ if(authors[i].name || authors[i].email || authors[i].uri){
+ entry.addAuthor(authors[i].name, authors[i].email, authors[i].uri);
+ }
+ }
+ }else{
+ var currentAuthors = entry.authors;
+ var searchAuthors = function(name, email, uri){
+ for(i in currentAuthors){
+ if(currentAuthors[i].name === name && currentAuthors[i].email === email && currentAuthors[i].uri === uri){
+ return true;
+ }
+ }
+ return false;
+ };
+ authors = this._editors.authors.getValues();
+ changed = false;
+ for(i in authors){
+ if(!searchAuthors(authors[i].name, authors[i].email, authors[i].uri)){
+ changed = true;
+ break;
+ }
+ }
+ if(changed){
+ entry.authors = [];
+ for(i in authors){
+ if(authors[i].name || authors[i].email || authors[i].uri){
+ entry.addAuthor(authors[i].name, authors[i].email, authors[i].uri);
+ }
+ }
+ modifiedEntry = true;
+ }
+ }
+ }
+
+ if(this._editors.contributors){
+ if(modifiedEntry){
+ entry.contributors = [];
+ contributors = this._editors.contributors.getValues();
+ for(i in contributors){
+ if(contributors[i].name || contributors[i].email || contributors[i].uri){
+ entry.addAuthor(contributors[i].name, contributors[i].email, contributors[i].uri);
+ }
+ }
+ }else{
+ var currentContributors = entry.contributors;
+ var searchContributors = function(name, email, uri){
+ for(i in currentContributors){
+ if(currentContributors[i].name === name && currentContributors[i].email === email && currentContributors[i].uri === uri){
+ return true;
+ }
+ }
+ return false;
+ };
+ contributors = this._editors.contributors.getValues();
+ changed = false;
+ for(i in contributors){
+ if(searchContributors(contributors[i].name, contributors[i].email, contributors[i].uri)){
+ changed = true;
+ break;
+ }
+ }
+ if(changed){
+ entry.contributors = [];
+ for(i in contributors){
+ if(contributors[i].name || contributors[i].email || contributors[i].uri){
+ entry.addContributor(contributors[i].name, contributors[i].email, contributors[i].uri);
+ }
+ }
+ modifiedEntry = true;
+ }
+ }
+ }
+
+ if(modifiedEntry){
+ dojo.publish(this.entrySelectionTopic, [{action: "update", source: this, entry: entry, callback: this._handleSave }]);
+ //TODO: REMOVE BELOW
+ //var atomIO = new dojox.atom.io.Connection();
+ //atomIO.updateEntry(entry, dojo.hitch(this,this._handleSave));
+ //WARNING: Use above when testing with SimpleProxy (or any other servlet which
+ // doesn't actually create a new entry and return it properly)
+ //atomIO.updateEntry(entry, dojo.hitch(this,this._handleSave), true);
+ }
+ }else{
+ this._new = false;
+ entry = new dojox.atom.io.model.Entry();
+
+ value = this._editors.title.attr('value');
+ if(this.entryTitleSelect.value === "xhtml"){
+ value = this._enforceXhtml(value);
+ value = '<div xmlns="http://www.w3.org/1999/xhtml">' + value + '</div>';
+ }
+ entry.setTitle(value, this.entryTitleSelect.value);
+ entry.id = this._editors.id.attr('value');
+
+ authors = this._editors.authors.getValues();
+ for(i in authors){
+ if(authors[i].name || authors[i].email || authors[i].uri){
+ entry.addAuthor(authors[i].name, authors[i].email, authors[i].uri);
+ }
+ }
+
+ contributors = this._editors.contributors.getValues();
+ for(i in contributors){
+ if(contributors[i].name || contributors[i].email || contributors[i].uri){
+ entry.addContributor(contributors[i].name, contributors[i].email, contributors[i].uri);
+ }
+ }
+
+
+ value = this._editors.summary.attr('value');
+ if(this.entrySummarySelect.value === "xhtml"){
+ value = this._enforceXhtml(value);
+ value = '<div xmlns="http://www.w3.org/1999/xhtml">' + value + '</div>';
+ }
+ entry.summary = new dojox.atom.io.model.Content("summary", value, null, this.entrySummarySelect.value);
+
+ value = this._editors.content.attr('value');
+ if(this.entryContentSelect.value === "xhtml"){
+ value = this._enforceXhtml(value);
+ value = '<div xmlns="http://www.w3.org/1999/xhtml">' + value + '</div>';
+ }
+ entry.content = new dojox.atom.io.model.Content("content", value, null, this.entryContentSelect.value);
+
+ dojo.style(this.entryNewButton, 'display', '');
+ dojo.publish(this.entrySelectionTopic, [{action: "post", source: this, entry: entry }]);
+ }
+ this._editMode = false;
+
+ //Rebuild the view using the same entry and feed.
+ this.setEntry(entry, this._feed, true);
+ },
+
+ _handleSave: function(/*object*/entry, /*string*/location){
+ // summary:
+ // Function for handling the save of an entry, cleaning up the display after the edit is completed.
+ // description:
+ // Function for handling the save of an entry, cleaning up the display after the edit is completed.
+ //
+ // entry: dojox.atom.io.model.Entry object
+ // The entry that was saved.
+ // Location: String
+ // A URL to be used, not used here, but part of the call back from the AtomIO
+ // returns:
+ // Nothing.
+ //Close the editor and revert out.
+ this._editMode = false;
+
+ //Rebuild the view using the same entry and feed.
+ this.clear();
+ this.setEntry(entry, this.getFeed(), true);
+ },
+
+ cancelEdits: function(){
+ // summary:
+ // Cancels edits and reverts the editor to its previous state (display mode)
+ // description:
+ // Cancels edits and reverts the editor to its previous state (display mode)
+ //
+ // returns:
+ // Nothing.
+ this._new = false;
+ dojo.style(this.entrySaveCancelButtons, 'display', 'none');
+ if(this._editable){
+ dojo.style(this.entryEditButton, 'display', '');
+ }
+ dojo.style(this.entryNewButton, 'display', '');
+ this._editMode = false;
+
+ //Rebuild the view using the same entry and feed.
+ this.clearEditors();
+ this.setEntry(this.getEntry(), this.getFeed(), true);
+ },
+
+ clear: function(){
+ // summary:
+ // Clears the editor, destorys all editors, leaving the editor completely clear
+ // description:
+ // Clears the editor, destorys all editors, leaving the editor completely clear
+ this._editable=false;
+ this.clearEditors();
+ dojox.atom.widget.FeedEntryEditor.superclass.clear.apply(this);
+ if(this._contentEditor){
+ // Note that the superclass clear destroys the widget since it's in the child widget list,
+ // so this is just ref clearing.
+ this._contentEditor = this._setObject = this._oldContent = this._contentEditorCreator = null;
+ this._editors = {};
+ }
+ },
+
+ clearEditors: function(){
+ for(var key in this._editors){
+ if(this._editors[key].declaredClass === "dijit.Editor"){
+ this._editors[key].close(false, true);
+ }
+ this._editors[key].destroy();
+ }
+ this._editors = {};
+ },
+
+ _enforceXhtml: function(/*string*/html){
+ // summary:
+ // Function for cleaning up/enforcing the XHTML standard in HTML returned from the editor2 widget.
+ // description:
+ // Function for cleaning up/enforcing the XHTML standard in HTML returned from the editor2 widget.
+ //
+ // html:
+ // HTML string to be enforced as xhtml.
+ //
+ // returns:
+ // string of cleaned up HTML.
+ var xhtml = null;
+ if(html){
+ //Handle <BR>
+ var brRegExp = /<br>/g;
+ xhtml = html.replace(brRegExp, "<br/>");
+
+ //Handle <HR>
+ xhtml = this._closeTag(xhtml, "hr");
+
+ //Handle <img>
+ xhtml = this._closeTag(xhtml, "img");
+ }
+ return xhtml;
+ },
+
+ _closeTag: function(/*string*/xhtml, /*string*/tag){
+ // summary:
+ // Function for closing tags in a text of HTML/XHTML
+ // description:
+ // Function for closing tags in a text of HTML/XHTML
+ //
+ // xhtml: String
+ // XHTML string which needs the closing tag.
+ // tag:
+ // The tag to close.
+ //
+ // returns: string of cleaned up HTML.
+ //
+ // NOTE: Probably should redo this function in a more efficient way. This could get expensive.
+ var tagStart = "<" + tag;
+ var tagIndex = xhtml.indexOf(tagStart);
+ if(tagIndex !== -1){
+ while (tagIndex !== -1){
+ var tempString = "";
+ var foundTagEnd = false;
+ for (var i = 0; i < xhtml.length; i++){
+ var c = xhtml.charAt(i);
+ if(i <= tagIndex ||foundTagEnd){
+ tempString += c;
+ }
+ else
+ {
+ if(c === '>'){
+ tempString += "/";
+ foundTagEnd = true;
+ }
+ tempString +=c;
+ }
+ }
+ xhtml = tempString;
+ tagIndex = xhtml.indexOf(tagStart, tagIndex + 1);
+ }
+ }
+ return xhtml;
+ },
+
+ _toggleNew: function(){
+ // summary:
+ // Function to put the editor into a state to create a new entry.
+ // description:
+ // Function to put the editor into a state to create a new entry.
+
+ // Hide the edit/new buttons and show the save/cancel buttons.
+ dojo.style(this.entryNewButton, 'display', 'none');
+ dojo.style(this.entryEditButton, 'display', 'none');
+ dojo.style(this.entrySaveCancelButtons, 'display', '');
+
+ // Reset the type select boxes to text.
+ this.entrySummarySelect.value = "text";
+ this.entryContentSelect.value = "text";
+ this.entryTitleSelect.value = "text";
+
+ // Clear all nodes.
+ this.clearNodes();
+ this._new = true;
+
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedEntryViewer");
+ // Create all headers and editors.
+ var titleHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.title});
+ this.entryTitleHeader.appendChild(titleHeader.domNode);
+
+ this._editors.title = this._createEditor(this.entryTitleNode, null);
+ this.setFieldValidity("title",true);
+
+ var authorHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.authors});
+ this.entryAuthorHeader.appendChild(authorHeader.domNode);
+
+ this._editors.authors = this._createPeopleEditor(this.entryAuthorNode, {name: "Author"});
+ this.setFieldValidity("authors", true);
+
+ var contributorHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.contributors});
+ this.entryContributorHeader.appendChild(contributorHeader.domNode);
+
+ this._editors.contributors = this._createPeopleEditor(this.entryContributorNode, {name: "Contributor"});
+ this.setFieldValidity("contributors", true);
+
+ var idHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.id});
+ this.entryIdHeader.appendChild(idHeader.domNode);
+
+ this._editors.id = this._createEditor(this.entryIdNode, null);
+ this.setFieldValidity("id",true);
+
+ var updatedHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.updated});
+ this.entryUpdatedHeader.appendChild(updatedHeader.domNode);
+
+ this._editors.updated = this._createEditor(this.entryUpdatedNode, null);
+ this.setFieldValidity("updated",true);
+
+ var summaryHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.summary});
+ this.entrySummaryHeader.appendChild(summaryHeader.domNode);
+
+ this._editors.summary = this._createEditor(this.entrySummaryNode, null, true);
+ this.setFieldValidity("summaryedit",true);
+ this.setFieldValidity("summary",true);
+
+ var contentHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.content});
+ this.entryContentHeader.appendChild(contentHeader.domNode);
+
+ this._editors.content = this._createEditor(this.entryContentNode, null, true);
+ this.setFieldValidity("contentedit",true);
+ this.setFieldValidity("content",true);
+
+ // Show the sections.
+ this._displaySections();
+ },
+
+ _displaySections: function(){
+ // summary: Function to display the appropriate sections based on validity.
+ // description: Function to display the appropriate sections based on validity.
+
+ // Hide select boxes.
+ dojo.style(this.entrySummarySelect, 'display', 'none');
+ dojo.style(this.entryContentSelect, 'display', 'none');
+ dojo.style(this.entryTitleSelect, 'display', 'none');
+
+ // Show select boxes if the flags are set.
+ if(this.isFieldValid("contentedit")){
+ dojo.style(this.entryContentSelect, 'display', '');
+ }
+ if(this.isFieldValid("summaryedit")){
+ dojo.style(this.entrySummarySelect, 'display', '');
+ }
+ if(this.isFieldValid("titleedit")){
+ dojo.style(this.entryTitleSelect, 'display', '');
+ }
+ // Call super's _displaySections.
+ dojox.atom.widget.FeedEntryEditor.superclass._displaySections.apply(this);
+
+ // If we have editors to load after the nodes are created on the page, execute those now.
+ if(this._toLoad){
+ for(var i in this._toLoad){
+ var editor;
+ if(this._toLoad[i].generateEditor){
+ editor = dojo.hitch(this._toLoad[i], this._toLoad[i].generateEditor)();
+ }else{
+ editor = this._toLoad[i];
+ }
+ this._editors[this._toLoad[i].name] = editor;
+ this._toLoad[i] = null;
+ }
+ this._toLoad = null;
+ }
+ }
+});
+
+dojo.declare("dojox.atom.widget.PeopleEditor",[dijit._Widget, dijit._Templated, dijit._Container],{
+ // summary:
+ // An editor for dojox.atom.io.model.Person objects.
+ // description:
+ // An editor for dojox.atom.io.model.Person objects. Displays multiple rows for the respective arrays
+ // of people. Can add/remove rows on the fly.
+ templateString: dojo.cache("dojox.atom", "widget/templates/PeopleEditor.html", "<div class=\"peopleEditor\">\r\n\t<table style=\"width: 100%\">\r\n\t\t<tbody dojoAttachPoint=\"peopleEditorEditors\"></tbody>\r\n\t</table>\r\n\t<span class=\"peopleEditorButton\" dojoAttachPoint=\"peopleEditorButton\" dojoAttachEvent=\"onclick:_add\"></span>\r\n</div>\r\n"),
+
+ _rows: [],
+ _editors: [],
+ _index: 0,
+ _numRows: 0,
+
+ postCreate: function(){
+ // Initializer function for the PeopleEditor widget.
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "PeopleEditor");
+ if(this.name){
+ if(this.name == "Author"){
+ this.peopleEditorButton.appendChild(document.createTextNode("["+_nlsResources.addAuthor+"]"));
+ }else if(this.name == "Contributor"){
+ this.peopleEditorButton.appendChild(document.createTextNode("["+_nlsResources.addContributor+"]"));
+ }
+ }else{
+ this.peopleEditorButton.appendChild(document.createTextNode("["+_nlsResources.add+"]"));
+ }
+ this._editors = [];
+
+ if(!this.data || this.data.length===0){
+ this._createEditors(null, null, null, 0, this.name);
+ this._index = 1;
+ }else{
+ for(var i in this.data){
+ this._createEditors(this.data[i].name, this.data[i].email, this.data[i].uri, i);
+ this._index++;
+ this._numRows++;
+ }
+ }
+ },
+
+ destroy: function(){
+ for(var key in this._editors){
+ for(var key2 in this._editors[key]){
+ this._editors[key][key2].destroy();
+ }
+ }
+ this._editors = [];
+ },
+
+ _createEditors: function(/*string*/name, /*string*/email, /*string*/uri, /*int*/index, /*string*/widgetName){
+ // summary:
+ // creates editor boxes (textbox widgets) for the individual values of a Person.
+ // description:
+ // creates editor boxes (textbox widgets) for the individual values of a Person.
+ //
+ // name:
+ // The name of this Person.
+ // email:
+ // The email of this Person.
+ // uri:
+ // The Person's URI.
+ // index:
+ // The row index to use for this Person.
+ var row = document.createElement("tr");
+ this.peopleEditorEditors.appendChild(row);
+ row.id = "removeRow"+index;
+
+ var node = document.createElement("td");
+ node.setAttribute('align', 'right');
+ row.appendChild(node);
+ node.colSpan = 2;
+
+ if(this._numRows>0){
+ var hr = document.createElement("hr");
+ node.appendChild(hr);
+ hr.id = "hr"+index;
+ }
+
+ row = document.createElement("span");
+ node.appendChild(row);
+ row.className = "peopleEditorButton";
+ dojo.style(row, 'font-size', 'x-small');
+ dojo.connect(row, "onclick", this, "_removeEditor");
+ row.id = "remove"+index;
+
+ node = document.createTextNode("[X]");
+ row.appendChild(node);
+
+ row = document.createElement("tr");
+ this.peopleEditorEditors.appendChild(row);
+ row.id = "editorsRow"+index;
+
+ var labelNode = document.createElement("td");
+ row.appendChild(labelNode);
+ dojo.style(labelNode, 'width', '20%');
+
+ node = document.createElement("td");
+ row.appendChild(node);
+
+ row = document.createElement("table");
+ labelNode.appendChild(row);
+ dojo.style(row, 'width', '100%');
+
+ labelNode = document.createElement("tbody");
+ row.appendChild(labelNode);
+
+ row = document.createElement("table");
+ node.appendChild(row);
+ dojo.style(row, 'width', '100%');
+
+ node = document.createElement("tbody");
+ row.appendChild(node);
+
+ this._editors[index] = [];
+ this._editors[index].push(this._createEditor(name, widgetName+'name'+index, 'Name:', labelNode, node));
+ this._editors[index].push(this._createEditor(email, widgetName+'email'+index, 'Email:', labelNode, node));
+ this._editors[index].push(this._createEditor(uri, widgetName+'uri'+index, 'URI:', labelNode, node));
+ },
+
+ _createEditor: function(/*string*/value, /*string*/id, /*string*/name, /*DOM node*/labelNode, /*DOM node*/node){
+ // summary:
+ // Creates an individual editor widget (textbox) for a value.
+ // description:
+ // Creates an individual editor widget (textbox) for a value.
+ //
+ // value:
+ // The initial value of the textbox
+ // id:
+ // The id the textbox should have.
+ // name:
+ // The text to put in the label element for this textbox.
+ // labelNode:
+ // The node to attach the label to.
+ // node:
+ // The node to attach the editor rows to.
+ //
+ // returns:
+ // Editor widget.
+ var row = document.createElement("tr");
+ labelNode.appendChild(row);
+
+ var label = document.createElement("label");
+ label.setAttribute('for', id);
+ label.appendChild(document.createTextNode(name));
+ labelNode = document.createElement("td");
+ labelNode.appendChild(label);
+ row.appendChild(labelNode);
+
+ row = document.createElement("tr");
+ node.appendChild(row);
+
+ node = document.createElement("td");
+ row.appendChild(node);
+
+ var viewNode = document.createElement("input");
+ viewNode.setAttribute('id', id);
+ node.appendChild(viewNode);
+ dojo.style(viewNode, 'width', '95%');
+
+ var box = new dijit.form.TextBox({},viewNode);
+ box.attr('value', value);
+ return box;
+ },
+
+ _removeEditor: function(/*object*/event){
+ // summary:
+ // Removes a Person from our list of editors.
+ // description:
+ // Removes a Person from our list of editors by removing the block of editors that
+ // make up that Person.
+ //
+ // event:
+ // The event generated when the remove button is pressed on the page.
+ var target = null;
+
+ if(dojo.isIE){
+ target = event.srcElement;
+ }else{
+ target = event.target;
+ }
+
+ var id = target.id;
+ id = id.substring(6);
+ for(var key in this._editors[id]){
+ this._editors[id][key].destroy();
+ }
+
+ var node = dojo.byId("editorsRow"+id);
+ var parent = node.parentNode;
+ parent.removeChild(node);
+
+ node = dojo.byId("removeRow"+id);
+ parent = node.parentNode;
+ parent.removeChild(node);
+
+ this._numRows--;
+ if(this._numRows === 1 && parent.firstChild.firstChild.firstChild.tagName.toLowerCase() === "hr"){
+ node = parent.firstChild.firstChild;
+ node.removeChild(node.firstChild);
+ }
+ this._editors[id] = null;
+ },
+
+ _add: function(){
+ // summary:
+ // Adds a new block of blank editors to represent a Person.
+ // description:
+ // Adds a new block of blank editors to represent a Person.
+ this._createEditors(null, null, null, this._index);
+ this._index++;
+ this._numRows++;
+ },
+
+ getValues: function(){
+ // summary:
+ // Gets the values of this editor in an array.
+ // description:
+ // Gets the values of this editor in an array, with each Person as an object within the array.
+ //
+ // returns:
+ // An array of anonymous objects representing dojox.atom.io.model.Persons.
+ var values = [];
+ for(var i in this._editors){
+ if(this._editors[i]){
+ values.push({name: this._editors[i][0].attr('value'), email: this._editors[i][1].attr('value'), uri: this._editors[i][2].attr('value')});
+ }
+ }
+ return values;
+ }
+});
+
+}
diff --git a/js/dojo-1.6/dojox/atom/widget/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..acccd3f
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/FeedEntryEditor.xd.js
@@ -0,0 +1,1243 @@
+/*
+ Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.FeedEntryEditor"],
+["require", "dojox.atom.widget.FeedEntryViewer"],
+["require", "dijit._Widget"],
+["require", "dijit._Templated"],
+["require", "dijit._Container"],
+["require", "dijit.Editor"],
+["require", "dijit.form.TextBox"],
+["require", "dijit.form.SimpleTextarea"],
+["requireLocalization", "dojox.atom.widget", "FeedEntryEditor", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw", "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw"],
+["requireLocalization", "dojox.atom.widget", "PeopleEditor", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw", "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw"]],
+defineResource: function(dojo, dijit, dojox){if(!dojo._hasResource["dojox.atom.widget.FeedEntryEditor"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.atom.widget.FeedEntryEditor"] = true;
+dojo.provide("dojox.atom.widget.FeedEntryEditor");
+
+dojo.require("dojox.atom.widget.FeedEntryViewer");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Container");
+dojo.require("dijit.Editor");
+dojo.require("dijit.form.TextBox");
+dojo.require("dijit.form.SimpleTextarea");
+;
+;
+
+dojo.experimental("dojox.atom.widget.FeedEntryEditor");
+
+dojo.declare("dojox.atom.widget.FeedEntryEditor",dojox.atom.widget.FeedEntryViewer,{
+ // summary:
+ // An ATOM feed entry editor that allows viewing of the individual attributes of an entry.
+ // description:
+ // An ATOM feed entry editor that allows viewing of the individual attributes of an entry.
+ _contentEditor: null,
+ _oldContent: null,
+ _setObject: null,
+ enableEdit: false,
+ _contentEditorCreator: null,
+ _editors: {},
+ entryNewButton: null,
+ _editable: false, //Flag denoting if the current entry is editable or not.
+
+ //Templates for the HTML rendering. Need to figure these out better, admittedly.
+ templateString: dojo.cache("dojox.atom", "widget/templates/FeedEntryEditor.html", "<div class=\"feedEntryViewer\">\r\n <table border=\"0\" width=\"100%\" class=\"feedEntryViewerMenuTable\" dojoAttachPoint=\"feedEntryViewerMenu\" style=\"display: none;\">\r\n <tr width=\"100%\" dojoAttachPoint=\"entryCheckBoxDisplayOptions\">\r\n \t<td align=\"left\" dojoAttachPoint=\"entryNewButton\">\r\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"doNew\" dojoAttachEvent=\"onclick:_toggleNew\"></span>\r\n \t</td>\r\n <td align=\"left\" dojoAttachPoint=\"entryEditButton\" style=\"display: none;\">\r\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"edit\" dojoAttachEvent=\"onclick:_toggleEdit\"></span>\r\n </td>\r\n <td align=\"left\" dojoAttachPoint=\"entrySaveCancelButtons\" style=\"display: none;\">\r\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"save\" dojoAttachEvent=\"onclick:saveEdits\"></span>\r\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"cancel\" dojoAttachEvent=\"onclick:cancelEdits\"></span>\r\n </td>\r\n <td align=\"right\">\r\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"displayOptions\" dojoAttachEvent=\"onclick:_toggleOptions\"></span>\r\n </td>\r\n </tr>\r\n <tr class=\"feedEntryViewerDisplayCheckbox\" dojoAttachPoint=\"entryCheckBoxRow\" width=\"100%\" style=\"display: none;\">\r\n <td dojoAttachPoint=\"feedEntryCelltitle\">\r\n <input type=\"checkbox\" name=\"title\" value=\"Title\" dojoAttachPoint=\"feedEntryCheckBoxTitle\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelTitle\"></label>\r\n </td>\r\n <td dojoAttachPoint=\"feedEntryCellauthors\">\r\n <input type=\"checkbox\" name=\"authors\" value=\"Authors\" dojoAttachPoint=\"feedEntryCheckBoxAuthors\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelAuthors\"></label>\r\n </td>\r\n <td dojoAttachPoint=\"feedEntryCellcontributors\">\r\n <input type=\"checkbox\" name=\"contributors\" value=\"Contributors\" dojoAttachPoint=\"feedEntryCheckBoxContributors\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelContributors\"></label>\r\n </td>\r\n <td dojoAttachPoint=\"feedEntryCellid\">\r\n <input type=\"checkbox\" name=\"id\" value=\"Id\" dojoAttachPoint=\"feedEntryCheckBoxId\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelId\"></label>\r\n </td>\r\n <td rowspan=\"2\" align=\"right\">\r\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"close\" dojoAttachEvent=\"onclick:_toggleOptions\"></span>\r\n </td>\r\n\t\t</tr>\r\n\t\t<tr class=\"feedEntryViewerDisplayCheckbox\" dojoAttachPoint=\"entryCheckBoxRow2\" width=\"100%\" style=\"display: none;\">\r\n <td dojoAttachPoint=\"feedEntryCellupdated\">\r\n <input type=\"checkbox\" name=\"updated\" value=\"Updated\" dojoAttachPoint=\"feedEntryCheckBoxUpdated\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelUpdated\"></label>\r\n </td>\r\n <td dojoAttachPoint=\"feedEntryCellsummary\">\r\n <input type=\"checkbox\" name=\"summary\" value=\"Summary\" dojoAttachPoint=\"feedEntryCheckBoxSummary\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelSummary\"></label>\r\n </td>\r\n <td dojoAttachPoint=\"feedEntryCellcontent\">\r\n <input type=\"checkbox\" name=\"content\" value=\"Content\" dojoAttachPoint=\"feedEntryCheckBoxContent\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelContent\"></label>\r\n </td>\r\n </tr>\r\n </table>\r\n \r\n <table class=\"feedEntryViewerContainer\" border=\"0\" width=\"100%\">\r\n <tr class=\"feedEntryViewerTitle\" dojoAttachPoint=\"entryTitleRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryTitleHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td>\r\n \t<select dojoAttachPoint=\"entryTitleSelect\" dojoAttachEvent=\"onchange:_switchEditor\" style=\"display: none\">\r\n \t\t<option value=\"text\">Text</option>\r\n\t\t\t\t\t\t\t\t<option value=\"html\">HTML</option>\r\n\t\t\t\t\t\t\t\t<option value=\"xhtml\">XHTML</option>\r\n \t</select>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"2\" dojoAttachPoint=\"entryTitleNode\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n\r\n <tr class=\"feedEntryViewerAuthor\" dojoAttachPoint=\"entryAuthorRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryAuthorHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entryAuthorNode\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n\r\n <tr class=\"feedEntryViewerContributor\" dojoAttachPoint=\"entryContributorRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryContributorHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entryContributorNode\" class=\"feedEntryViewerContributorNames\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n \r\n <tr class=\"feedEntryViewerId\" dojoAttachPoint=\"entryIdRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryIdHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entryIdNode\" class=\"feedEntryViewerIdText\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n \r\n <tr class=\"feedEntryViewerUpdated\" dojoAttachPoint=\"entryUpdatedRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryUpdatedHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entryUpdatedNode\" class=\"feedEntryViewerUpdatedText\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n \r\n <tr class=\"feedEntryViewerSummary\" dojoAttachPoint=\"entrySummaryRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\" colspan=\"2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entrySummaryHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td>\r\n \t<select dojoAttachPoint=\"entrySummarySelect\" dojoAttachEvent=\"onchange:_switchEditor\" style=\"display: none\">\r\n \t\t<option value=\"text\">Text</option>\r\n\t\t\t\t\t\t\t\t<option value=\"html\">HTML</option>\r\n\t\t\t\t\t\t\t\t<option value=\"xhtml\">XHTML</option>\r\n \t</select>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entrySummaryNode\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n \r\n <tr class=\"feedEntryViewerContent\" dojoAttachPoint=\"entryContentRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryContentHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td>\r\n \t<select dojoAttachPoint=\"entryContentSelect\" dojoAttachEvent=\"onchange:_switchEditor\" style=\"display: none\">\r\n \t\t<option value=\"text\">Text</option>\r\n\t\t\t\t\t\t\t\t<option value=\"html\">HTML</option>\r\n\t\t\t\t\t\t\t\t<option value=\"xhtml\">XHTML</option>\r\n \t</select>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entryContentNode\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>\r\n"),
+
+ postCreate: function(){
+ if(this.entrySelectionTopic !== ""){
+ this._subscriptions = [dojo.subscribe(this.entrySelectionTopic, this, "_handleEvent")];
+ }
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedEntryViewer");
+ this.displayOptions.innerHTML = _nlsResources.displayOptions;
+ this.feedEntryCheckBoxLabelTitle.innerHTML = _nlsResources.title;
+ this.feedEntryCheckBoxLabelAuthors.innerHTML = _nlsResources.authors;
+ this.feedEntryCheckBoxLabelContributors.innerHTML = _nlsResources.contributors;
+ this.feedEntryCheckBoxLabelId.innerHTML = _nlsResources.id;
+ this.close.innerHTML = _nlsResources.close;
+ this.feedEntryCheckBoxLabelUpdated.innerHTML = _nlsResources.updated;
+ this.feedEntryCheckBoxLabelSummary.innerHTML = _nlsResources.summary;
+ this.feedEntryCheckBoxLabelContent.innerHTML = _nlsResources.content;
+
+ _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedEntryEditor");
+ this.doNew.innerHTML = _nlsResources.doNew;
+ this.edit.innerHTML = _nlsResources.edit;
+ this.save.innerHTML = _nlsResources.save;
+ this.cancel.innerHTML = _nlsResources.cancel;
+ },
+
+ setEntry: function(/*object*/entry, /*object*/feed, /*boolean*/leaveMenuState){
+ // summary:
+ // Function to set the current entry that is being edited.
+ // description:
+ // Function to set the current entry that is being edited.
+ //
+ // entry:
+ // Instance of dojox.atom.io.model.Entry to display for reading/editing.
+ if(this._entry !== entry){
+ //If we swap entries, we don't want to keep the menu states and modes.
+ this._editMode=false;
+ leaveMenuState=false;
+ }else{
+ leaveMenuState = true;
+ }
+ dojox.atom.widget.FeedEntryEditor.superclass.setEntry.call(this, entry, feed);
+ this._editable = this._isEditable(entry);
+ if(!leaveMenuState && !this._editable){
+ dojo.style(this.entryEditButton, 'display', 'none');
+ dojo.style(this.entrySaveCancelButtons, 'display', 'none');
+ }
+ if(this._editable && this.enableEdit){
+ if(!leaveMenuState){
+ dojo.style(this.entryEditButton, 'display', '');
+ //TODO double check this &&...
+ if(this.enableMenuFade && this.entrySaveCancelButton){
+ dojo.fadeOut({node: this.entrySaveCancelButton,duration: 250}).play();
+ }
+ }
+ }
+ },
+
+ _toggleEdit: function(){
+ // summary:
+ // Internal function for toggling/enabling the display of edit mode
+ // description:
+ // Internal function for toggling/enabling the display of edit mode
+ //
+ // returns:
+ // Nothing.
+ if(this._editable && this.enableEdit){
+ dojo.style(this.entryEditButton, 'display', 'none');
+ dojo.style(this.entrySaveCancelButtons, 'display', '');
+ this._editMode = true;
+
+ //Rebuild the view using the same entry and feed.
+ this.setEntry(this._entry, this._feed, true);
+ }
+ },
+
+ _handleEvent: function(/*object*/entrySelectionEvent){
+ // summary:
+ // Internal function for listening to a topic that will handle entry notification.
+ // description:
+ // Internal function for listening to a topic that will handle entry notification.
+ //
+ // entrySelectionEvent:
+ // The topic message containing the entry that was selected for view.
+ //
+ // returns:
+ // Nothing.
+ if(entrySelectionEvent.source != this && entrySelectionEvent.action == "delete" &&
+ entrySelectionEvent.entry && entrySelectionEvent.entry == this._entry){
+ dojo.style(this.entryEditButton, 'display', 'none');
+ }
+ dojox.atom.widget.FeedEntryEditor.superclass._handleEvent.call(this, entrySelectionEvent);
+ },
+
+ _isEditable: function(/*object*/entry){
+ // summary:
+ // Internal function for determining of a particular entry is editable.
+ // description:
+ // Internal function for determining of a particular entry is editable.
+ // This is used for determining if the delete action should be displayed or not.
+ //
+ // entry:
+ // The dojox.atom.io.model.Entry object to examine
+ //
+ // returns:
+ // Boolean denoting if the entry seems editable or not..
+ var retVal = false;
+ if(entry && entry !== null && entry.links && entry.links !== null){
+ for(var x in entry.links){
+ if(entry.links[x].rel && entry.links[x].rel == "edit"){
+ retVal = true;
+ break;
+ }
+ }
+ }
+ return retVal;
+ },
+
+ // The following set<Attribute> functions override the corresponding functions in FeedEntryViewer. These handle
+ // the editMode flag by inserting appropriate editor widgets inside of just splashing the content in the page.
+ setTitle: function(/*DOM node*/titleAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the title node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the title node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // titleAnchorNode:
+ // The DOM node to attach the title data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ //
+ if(!editMode){
+ dojox.atom.widget.FeedEntryEditor.superclass.setTitle.call(this, titleAnchorNode, editMode, entry);
+ if(entry.title && entry.title.value && entry.title.value !== null){
+ this.setFieldValidity("title", true);
+ }
+ }else{
+ if(entry.title && entry.title.value && entry.title.value !== null){
+ if(!this._toLoad){
+ this._toLoad = [];
+ }
+ this.entryTitleSelect.value = entry.title.type;
+
+ var editor = this._createEditor(titleAnchorNode, entry.title, true, entry.title.type === "html" || entry.title.type === "xhtml");
+ editor.name = "title";
+ this._toLoad.push(editor);
+ this.setFieldValidity("titleedit",true);
+ this.setFieldValidity("title",true);
+ }
+ }
+ },
+
+ setAuthors: function(/*DOM node*/authorsAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the author node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the author node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // authorsAnchorNode:
+ // The DOM node to attach the author data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(!editMode){
+ dojox.atom.widget.FeedEntryEditor.superclass.setAuthors.call(this, authorsAnchorNode, editMode, entry);
+ if(entry.authors && entry.authors.length > 0){
+ this.setFieldValidity("authors", true);
+ }
+ }else{
+ if(entry.authors && entry.authors.length > 0){
+ this._editors.authors = this._createPeopleEditor(this.entryAuthorNode, {data: entry.authors, name: "Author"});
+ this.setFieldValidity("authors", true);
+ }
+ }
+ },
+
+
+ setContributors: function(/*DOM node*/contributorsAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the contributor node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the contributor node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // contributorsAnchorNode:
+ // The DOM node to attach the contributor data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(!editMode){
+ dojox.atom.widget.FeedEntryEditor.superclass.setContributors.call(this, contributorsAnchorNode, editMode, entry);
+ if(entry.contributors && entry.contributors.length > 0){
+ this.setFieldValidity("contributors", true);
+ }
+ }else{
+ if(entry.contributors && entry.contributors.length > 0){
+ this._editors.contributors = this._createPeopleEditor(this.entryContributorNode, {data: entry.contributors, name: "Contributor"});
+ this.setFieldValidity("contributors", true);
+ }
+ }
+ },
+
+
+ setId: function(/*DOM node*/idAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the ID node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the ID node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // idAnchorNode:
+ // The DOM node to attach the ID data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(!editMode){
+ dojox.atom.widget.FeedEntryEditor.superclass.setId.call(this, idAnchorNode, editMode, entry);
+ if(entry.id && entry.id !== null){
+ this.setFieldValidity("id", true);
+ }
+ }else{
+ if(entry.id && entry.id !== null){
+ this._editors.id = this._createEditor(idAnchorNode, entry.id);
+ this.setFieldValidity("id",true);
+ }
+ }
+ },
+
+ setUpdated: function(/*DOM node*/updatedAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the updated node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the updated node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // updatedAnchorNode:
+ // The DOM node to attach the udpated data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(!editMode){
+ dojox.atom.widget.FeedEntryEditor.superclass.setUpdated.call(this, updatedAnchorNode, editMode, entry);
+ if(entry.updated && entry.updated !== null){
+ this.setFieldValidity("updated", true);
+ }
+ }else{
+ if(entry.updated && entry.updated !== null){
+ this._editors.updated = this._createEditor(updatedAnchorNode, entry.updated);
+ this.setFieldValidity("updated",true);
+ }
+ }
+ },
+
+
+ setSummary: function(/*DOM node*/summaryAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the summary node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the summary node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // summaryAnchorNode:
+ // The DOM node to attach the summary data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(!editMode){
+ dojox.atom.widget.FeedEntryEditor.superclass.setSummary.call(this, summaryAnchorNode, editMode, entry);
+ if(entry.summary && entry.summary.value && entry.summary.value !== null){
+ this.setFieldValidity("summary", true);
+ }
+ }else{
+ if(entry.summary && entry.summary.value && entry.summary.value !== null){
+ if(!this._toLoad){
+ this._toLoad = [];
+ }
+ this.entrySummarySelect.value = entry.summary.type;
+
+ var editor = this._createEditor(summaryAnchorNode, entry.summary, true, entry.summary.type === "html" || entry.summary.type === "xhtml");
+ editor.name = "summary";
+ this._toLoad.push(editor);
+ this.setFieldValidity("summaryedit",true);
+ this.setFieldValidity("summary",true);
+ }
+ }
+ },
+
+ setContent: function(/*DOM node*/contentAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the content node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the content node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // summaryAnchorNode:
+ // The DOM node to attach the content data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(!editMode){
+ dojox.atom.widget.FeedEntryEditor.superclass.setContent.call(this, contentAnchorNode, editMode, entry);
+ if(entry.content && entry.content.value && entry.content.value !== null){
+ this.setFieldValidity("content",true);
+ }
+ }else{
+ if(entry.content && entry.content.value && entry.content.value !== null){
+ if(!this._toLoad){
+ this._toLoad = [];
+ }
+ this.entryContentSelect.value = entry.content.type;
+ var editor = this._createEditor(contentAnchorNode, entry.content, true, entry.content.type === "html" || entry.content.type === "xhtml");
+ editor.name = "content";
+ this._toLoad.push(editor);
+ this.setFieldValidity("contentedit",true);
+ this.setFieldValidity("content",true);
+ }
+ }
+ },
+
+ _createEditor: function(/*DOM node*/anchorNode, /*DOM node*/node, /*boolean*/multiline, /*object*/rte){
+ // summary:
+ // Function to create an appropriate text editor widget based on the given parameters.
+ // description:
+ // Function to create an appropriate text editor widget based on the given parameters.
+ //
+ // anchorNode:
+ // The DOM node to attach the editor widget to.
+ // node:
+ // An object containing the value to be put into the editor. This ranges from an anonymous object
+ // with a value parameter to a dojox.atom.io.model.Content object.
+ // multiline:
+ // A boolean indicating whether the content should be multiline (such as a textarea) instead of a
+ // single line (such as a textbox).
+ // rte:
+ // A boolean indicating whether the content should be a rich text editor widget.
+ //
+ // returns:
+ // Either a widget (for textarea or textbox widgets) or an anonymous object to be used to create a
+ // rich text area widget.
+ var viewNode;
+ var box;
+ if(!node){
+ if(rte){
+ // Returns an anonymous object which would then be loaded later, after the containing element
+ // exists on the page.
+ return {anchorNode: anchorNode,
+ entryValue: "",
+ editor: null,
+ generateEditor: function(){
+ // The only way I found I could get the editor to behave consistently was to
+ // create the content on a span, and allow the content editor to replace it.
+ // This gets around the dynamic/delayed way in which content editors get created.
+ var node = document.createElement("div");
+ node.innerHTML = this.entryValue;
+ this.anchorNode.appendChild(node);
+ var _editor = new dijit.Editor({}, node);
+ this.editor = _editor;
+ return _editor;
+ }
+ };
+ }
+ if(multiline){
+ // If multiline, create a textarea
+ viewNode = document.createElement("textarea");
+ anchorNode.appendChild(viewNode);
+ dojo.style(viewNode, 'width', '90%');
+ box = new dijit.form.SimpleTextarea({},viewNode);
+ }else{
+ // If single line, create a textbox.
+ viewNode = document.createElement("input");
+ anchorNode.appendChild(viewNode);
+ dojo.style(viewNode, 'width', '95%');
+ box = new dijit.form.TextBox({},viewNode);
+ }
+ box.attr('value', '');
+ return box;
+ }
+
+ // Check through the node parameter to get the value to be used.
+ var value;
+ if(node.value !== undefined){
+ value = node.value;
+ }else if(node.attr){
+ value = node.attr('value');
+ }else{
+ value = node;
+ }
+ if(rte){
+ // Returns an anonymous object which would then be loaded later, after the containing element
+ // exists on the page.
+ if(value.indexOf("<") != -1){
+ value = value.replace(/</g, "&lt;");
+ }
+ return {anchorNode: anchorNode,
+ entryValue: value,
+ editor: null,
+ generateEditor: function(){
+ // The only way I found I could get the editor to behave consistently was to
+ // create the content on a span, and allow the content editor to replace it.
+ // This gets around the dynamic/delayed way in which content editors get created.
+ var node = document.createElement("div");
+ node.innerHTML = this.entryValue;
+ this.anchorNode.appendChild(node);
+ var _editor = new dijit.Editor({}, node);
+ this.editor = _editor;
+ return _editor;
+ }
+ };
+ }
+ if(multiline){
+ // If multiline, create a textarea
+ viewNode = document.createElement("textarea");
+ anchorNode.appendChild(viewNode);
+ dojo.style(viewNode, 'width', '90%');
+ box = new dijit.form.SimpleTextarea({},viewNode);
+ }else{
+ // If single line, create a textbox.
+ viewNode = document.createElement("input");
+ anchorNode.appendChild(viewNode);
+ dojo.style(viewNode, 'width', '95%');
+ box = new dijit.form.TextBox({},viewNode);
+ }
+ box.attr('value', value);
+ return box;
+ },
+
+ _switchEditor: function(/*object*/event){
+ // summary:
+ // Function to switch between editor types.
+ // description:
+ // Function to switch between a rich text editor and a textarea widget. Used for title, summary,
+ // And content when switching between text and html/xhtml content.
+ //
+ // event:
+ // The event generated by the change in the select box on the page.
+ var type = null;
+ var target = null;
+ var parent = null;
+
+ // Determine the source/target of this event (to determine which editor we're switching)
+ if(dojo.isIE){
+ target = event.srcElement;
+ }else{
+ target = event.target;
+ }
+
+ // Determine which editor (title, summary, or content)
+ if(target === this.entryTitleSelect){
+ parent = this.entryTitleNode;
+ type = "title";
+ } else if(target === this.entrySummarySelect){
+ parent = this.entrySummaryNode;
+ type = "summary";
+ }else{
+ parent = this.entryContentNode;
+ type = "content";
+ }
+
+ // Grab the existing editor.
+ var editor = this._editors[type];
+ var newEditor;
+ var value;
+
+ if(target.value === "text"){
+ if(editor.declaredClass === "dijit.Editor"){
+ // If we're changing the type to text and our existing editor is a rich text editor, we need to destroy
+ // it and switch to a multiline editor.
+ value = editor.attr('value', false);
+ editor.close(false,true);
+ editor.destroy();
+ while(parent.firstChild){
+ dojo.destroy(parent.firstChild);
+ }
+ newEditor = this._createEditor(parent, {value: value}, true, false);
+ this._editors[type] = newEditor;
+ }
+ }else{
+ if(editor.declaredClass != "dijit.Editor"){
+ // Otherwise, we're switching to a html or xhtml type, but we currently have a textarea widget. We need
+ // to destroy the existing RTE and create a multiline textarea widget.
+ value = editor.attr('value');
+ editor.destroy();
+ while(parent.firstChild){
+ dojo.destroy(parent.firstChild);
+ }
+ newEditor = this._createEditor(parent, {value: value}, true, true);
+ newEditor = dojo.hitch(newEditor, newEditor.generateEditor)();
+ this._editors[type] = newEditor;
+ }
+ }
+ },
+
+ _createPeopleEditor: function(/*DOM node*/anchorNode, /*DOM node*/node){
+ // summary:
+ // Creates a People Editor widget and returns it.
+ // description:
+ // Creates a People Editor widget, sets its value, and returns it.
+ //
+ // anchorNode:
+ // The node to attach the editor to.
+ // node:
+ // An object containing the value to be put into the editor. Typically, this is an
+ // dojox.atom.io.model.Person object.
+ //
+ // returns: A new People Editor object.
+ var viewNode = document.createElement("div");
+ anchorNode.appendChild(viewNode);
+ return new dojox.atom.widget.PeopleEditor(node,viewNode);
+ },
+
+ saveEdits: function(){
+ // summary:
+ // Saves edits submitted when the 'save' button is pressed.
+ // description:
+ // Saves edits submitted when the 'save' button is pressed. Distinguishes between new and existing
+ // entries and saves appropriately. Fetches the values of the editors, and, if existing, compares them to
+ // the existing values and submits the updates, otherwise creates a new entry and posts it as a new entry.
+ //
+ // returns:
+ // Nothing.
+ dojo.style(this.entrySaveCancelButtons, 'display', 'none');
+ dojo.style(this.entryEditButton, 'display', '');
+ dojo.style(this.entryNewButton, 'display', '');
+ var modifiedEntry = false;
+ var value;
+ var i;
+ var changed;
+ var entry;
+ var authors;
+ var contributors;
+ if(!this._new){
+ entry = this.getEntry();
+ if(this._editors.title && (this._editors.title.attr('value') != entry.title.value || this.entryTitleSelect.value != entry.title.type)){
+ value = this._editors.title.attr('value');
+ if(this.entryTitleSelect.value === "xhtml"){
+ value = this._enforceXhtml(value);
+ if(value.indexOf('<div xmlns="http://www.w3.org/1999/xhtml">') !== 0){
+ value = '<div xmlns="http://www.w3.org/1999/xhtml">' + value + '</div>';
+ }
+ }
+ entry.title = new dojox.atom.io.model.Content("title", value, null, this.entryTitleSelect.value);
+ modifiedEntry = true;
+ }
+
+ if(this._editors.id.attr('value') != entry.id){
+ entry.id = this._editors.id.attr('value');
+ modifiedEntry = true;
+ }
+
+ if(this._editors.summary && (this._editors.summary.attr('value') != entry.summary.value || this.entrySummarySelect.value != entry.summary.type)){
+ value = this._editors.summary.attr('value');
+ if(this.entrySummarySelect.value === "xhtml"){
+ value = this._enforceXhtml(value);
+ if(value.indexOf('<div xmlns="http://www.w3.org/1999/xhtml">') !== 0){
+ value = '<div xmlns="http://www.w3.org/1999/xhtml">' + value + '</div>';
+ }
+ }
+ entry.summary = new dojox.atom.io.model.Content("summary", value, null, this.entrySummarySelect.value);
+ modifiedEntry = true;
+ }
+
+ if(this._editors.content && (this._editors.content.attr('value') != entry.content.value || this.entryContentSelect.value != entry.content.type)){
+ value = this._editors.content.attr('value');
+ if(this.entryContentSelect.value === "xhtml"){
+ value = this._enforceXhtml(value);
+ if(value.indexOf('<div xmlns="http://www.w3.org/1999/xhtml">') !== 0){
+ value = '<div xmlns="http://www.w3.org/1999/xhtml">' + value + '</div>';
+ }
+ }
+ entry.content = new dojox.atom.io.model.Content("content", value, null, this.entryContentSelect.value);
+ modifiedEntry = true;
+ }
+
+ if(this._editors.authors){
+ if(modifiedEntry){
+ entry.authors = [];
+ authors = this._editors.authors.getValues();
+ for(i in authors){
+ if(authors[i].name || authors[i].email || authors[i].uri){
+ entry.addAuthor(authors[i].name, authors[i].email, authors[i].uri);
+ }
+ }
+ }else{
+ var currentAuthors = entry.authors;
+ var searchAuthors = function(name, email, uri){
+ for(i in currentAuthors){
+ if(currentAuthors[i].name === name && currentAuthors[i].email === email && currentAuthors[i].uri === uri){
+ return true;
+ }
+ }
+ return false;
+ };
+ authors = this._editors.authors.getValues();
+ changed = false;
+ for(i in authors){
+ if(!searchAuthors(authors[i].name, authors[i].email, authors[i].uri)){
+ changed = true;
+ break;
+ }
+ }
+ if(changed){
+ entry.authors = [];
+ for(i in authors){
+ if(authors[i].name || authors[i].email || authors[i].uri){
+ entry.addAuthor(authors[i].name, authors[i].email, authors[i].uri);
+ }
+ }
+ modifiedEntry = true;
+ }
+ }
+ }
+
+ if(this._editors.contributors){
+ if(modifiedEntry){
+ entry.contributors = [];
+ contributors = this._editors.contributors.getValues();
+ for(i in contributors){
+ if(contributors[i].name || contributors[i].email || contributors[i].uri){
+ entry.addAuthor(contributors[i].name, contributors[i].email, contributors[i].uri);
+ }
+ }
+ }else{
+ var currentContributors = entry.contributors;
+ var searchContributors = function(name, email, uri){
+ for(i in currentContributors){
+ if(currentContributors[i].name === name && currentContributors[i].email === email && currentContributors[i].uri === uri){
+ return true;
+ }
+ }
+ return false;
+ };
+ contributors = this._editors.contributors.getValues();
+ changed = false;
+ for(i in contributors){
+ if(searchContributors(contributors[i].name, contributors[i].email, contributors[i].uri)){
+ changed = true;
+ break;
+ }
+ }
+ if(changed){
+ entry.contributors = [];
+ for(i in contributors){
+ if(contributors[i].name || contributors[i].email || contributors[i].uri){
+ entry.addContributor(contributors[i].name, contributors[i].email, contributors[i].uri);
+ }
+ }
+ modifiedEntry = true;
+ }
+ }
+ }
+
+ if(modifiedEntry){
+ dojo.publish(this.entrySelectionTopic, [{action: "update", source: this, entry: entry, callback: this._handleSave }]);
+ //TODO: REMOVE BELOW
+ //var atomIO = new dojox.atom.io.Connection();
+ //atomIO.updateEntry(entry, dojo.hitch(this,this._handleSave));
+ //WARNING: Use above when testing with SimpleProxy (or any other servlet which
+ // doesn't actually create a new entry and return it properly)
+ //atomIO.updateEntry(entry, dojo.hitch(this,this._handleSave), true);
+ }
+ }else{
+ this._new = false;
+ entry = new dojox.atom.io.model.Entry();
+
+ value = this._editors.title.attr('value');
+ if(this.entryTitleSelect.value === "xhtml"){
+ value = this._enforceXhtml(value);
+ value = '<div xmlns="http://www.w3.org/1999/xhtml">' + value + '</div>';
+ }
+ entry.setTitle(value, this.entryTitleSelect.value);
+ entry.id = this._editors.id.attr('value');
+
+ authors = this._editors.authors.getValues();
+ for(i in authors){
+ if(authors[i].name || authors[i].email || authors[i].uri){
+ entry.addAuthor(authors[i].name, authors[i].email, authors[i].uri);
+ }
+ }
+
+ contributors = this._editors.contributors.getValues();
+ for(i in contributors){
+ if(contributors[i].name || contributors[i].email || contributors[i].uri){
+ entry.addContributor(contributors[i].name, contributors[i].email, contributors[i].uri);
+ }
+ }
+
+
+ value = this._editors.summary.attr('value');
+ if(this.entrySummarySelect.value === "xhtml"){
+ value = this._enforceXhtml(value);
+ value = '<div xmlns="http://www.w3.org/1999/xhtml">' + value + '</div>';
+ }
+ entry.summary = new dojox.atom.io.model.Content("summary", value, null, this.entrySummarySelect.value);
+
+ value = this._editors.content.attr('value');
+ if(this.entryContentSelect.value === "xhtml"){
+ value = this._enforceXhtml(value);
+ value = '<div xmlns="http://www.w3.org/1999/xhtml">' + value + '</div>';
+ }
+ entry.content = new dojox.atom.io.model.Content("content", value, null, this.entryContentSelect.value);
+
+ dojo.style(this.entryNewButton, 'display', '');
+ dojo.publish(this.entrySelectionTopic, [{action: "post", source: this, entry: entry }]);
+ }
+ this._editMode = false;
+
+ //Rebuild the view using the same entry and feed.
+ this.setEntry(entry, this._feed, true);
+ },
+
+ _handleSave: function(/*object*/entry, /*string*/location){
+ // summary:
+ // Function for handling the save of an entry, cleaning up the display after the edit is completed.
+ // description:
+ // Function for handling the save of an entry, cleaning up the display after the edit is completed.
+ //
+ // entry: dojox.atom.io.model.Entry object
+ // The entry that was saved.
+ // Location: String
+ // A URL to be used, not used here, but part of the call back from the AtomIO
+ // returns:
+ // Nothing.
+ //Close the editor and revert out.
+ this._editMode = false;
+
+ //Rebuild the view using the same entry and feed.
+ this.clear();
+ this.setEntry(entry, this.getFeed(), true);
+ },
+
+ cancelEdits: function(){
+ // summary:
+ // Cancels edits and reverts the editor to its previous state (display mode)
+ // description:
+ // Cancels edits and reverts the editor to its previous state (display mode)
+ //
+ // returns:
+ // Nothing.
+ this._new = false;
+ dojo.style(this.entrySaveCancelButtons, 'display', 'none');
+ if(this._editable){
+ dojo.style(this.entryEditButton, 'display', '');
+ }
+ dojo.style(this.entryNewButton, 'display', '');
+ this._editMode = false;
+
+ //Rebuild the view using the same entry and feed.
+ this.clearEditors();
+ this.setEntry(this.getEntry(), this.getFeed(), true);
+ },
+
+ clear: function(){
+ // summary:
+ // Clears the editor, destorys all editors, leaving the editor completely clear
+ // description:
+ // Clears the editor, destorys all editors, leaving the editor completely clear
+ this._editable=false;
+ this.clearEditors();
+ dojox.atom.widget.FeedEntryEditor.superclass.clear.apply(this);
+ if(this._contentEditor){
+ // Note that the superclass clear destroys the widget since it's in the child widget list,
+ // so this is just ref clearing.
+ this._contentEditor = this._setObject = this._oldContent = this._contentEditorCreator = null;
+ this._editors = {};
+ }
+ },
+
+ clearEditors: function(){
+ for(var key in this._editors){
+ if(this._editors[key].declaredClass === "dijit.Editor"){
+ this._editors[key].close(false, true);
+ }
+ this._editors[key].destroy();
+ }
+ this._editors = {};
+ },
+
+ _enforceXhtml: function(/*string*/html){
+ // summary:
+ // Function for cleaning up/enforcing the XHTML standard in HTML returned from the editor2 widget.
+ // description:
+ // Function for cleaning up/enforcing the XHTML standard in HTML returned from the editor2 widget.
+ //
+ // html:
+ // HTML string to be enforced as xhtml.
+ //
+ // returns:
+ // string of cleaned up HTML.
+ var xhtml = null;
+ if(html){
+ //Handle <BR>
+ var brRegExp = /<br>/g;
+ xhtml = html.replace(brRegExp, "<br/>");
+
+ //Handle <HR>
+ xhtml = this._closeTag(xhtml, "hr");
+
+ //Handle <img>
+ xhtml = this._closeTag(xhtml, "img");
+ }
+ return xhtml;
+ },
+
+ _closeTag: function(/*string*/xhtml, /*string*/tag){
+ // summary:
+ // Function for closing tags in a text of HTML/XHTML
+ // description:
+ // Function for closing tags in a text of HTML/XHTML
+ //
+ // xhtml: String
+ // XHTML string which needs the closing tag.
+ // tag:
+ // The tag to close.
+ //
+ // returns: string of cleaned up HTML.
+ //
+ // NOTE: Probably should redo this function in a more efficient way. This could get expensive.
+ var tagStart = "<" + tag;
+ var tagIndex = xhtml.indexOf(tagStart);
+ if(tagIndex !== -1){
+ while (tagIndex !== -1){
+ var tempString = "";
+ var foundTagEnd = false;
+ for (var i = 0; i < xhtml.length; i++){
+ var c = xhtml.charAt(i);
+ if(i <= tagIndex ||foundTagEnd){
+ tempString += c;
+ }
+ else
+ {
+ if(c === '>'){
+ tempString += "/";
+ foundTagEnd = true;
+ }
+ tempString +=c;
+ }
+ }
+ xhtml = tempString;
+ tagIndex = xhtml.indexOf(tagStart, tagIndex + 1);
+ }
+ }
+ return xhtml;
+ },
+
+ _toggleNew: function(){
+ // summary:
+ // Function to put the editor into a state to create a new entry.
+ // description:
+ // Function to put the editor into a state to create a new entry.
+
+ // Hide the edit/new buttons and show the save/cancel buttons.
+ dojo.style(this.entryNewButton, 'display', 'none');
+ dojo.style(this.entryEditButton, 'display', 'none');
+ dojo.style(this.entrySaveCancelButtons, 'display', '');
+
+ // Reset the type select boxes to text.
+ this.entrySummarySelect.value = "text";
+ this.entryContentSelect.value = "text";
+ this.entryTitleSelect.value = "text";
+
+ // Clear all nodes.
+ this.clearNodes();
+ this._new = true;
+
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedEntryViewer");
+ // Create all headers and editors.
+ var titleHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.title});
+ this.entryTitleHeader.appendChild(titleHeader.domNode);
+
+ this._editors.title = this._createEditor(this.entryTitleNode, null);
+ this.setFieldValidity("title",true);
+
+ var authorHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.authors});
+ this.entryAuthorHeader.appendChild(authorHeader.domNode);
+
+ this._editors.authors = this._createPeopleEditor(this.entryAuthorNode, {name: "Author"});
+ this.setFieldValidity("authors", true);
+
+ var contributorHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.contributors});
+ this.entryContributorHeader.appendChild(contributorHeader.domNode);
+
+ this._editors.contributors = this._createPeopleEditor(this.entryContributorNode, {name: "Contributor"});
+ this.setFieldValidity("contributors", true);
+
+ var idHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.id});
+ this.entryIdHeader.appendChild(idHeader.domNode);
+
+ this._editors.id = this._createEditor(this.entryIdNode, null);
+ this.setFieldValidity("id",true);
+
+ var updatedHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.updated});
+ this.entryUpdatedHeader.appendChild(updatedHeader.domNode);
+
+ this._editors.updated = this._createEditor(this.entryUpdatedNode, null);
+ this.setFieldValidity("updated",true);
+
+ var summaryHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.summary});
+ this.entrySummaryHeader.appendChild(summaryHeader.domNode);
+
+ this._editors.summary = this._createEditor(this.entrySummaryNode, null, true);
+ this.setFieldValidity("summaryedit",true);
+ this.setFieldValidity("summary",true);
+
+ var contentHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.content});
+ this.entryContentHeader.appendChild(contentHeader.domNode);
+
+ this._editors.content = this._createEditor(this.entryContentNode, null, true);
+ this.setFieldValidity("contentedit",true);
+ this.setFieldValidity("content",true);
+
+ // Show the sections.
+ this._displaySections();
+ },
+
+ _displaySections: function(){
+ // summary: Function to display the appropriate sections based on validity.
+ // description: Function to display the appropriate sections based on validity.
+
+ // Hide select boxes.
+ dojo.style(this.entrySummarySelect, 'display', 'none');
+ dojo.style(this.entryContentSelect, 'display', 'none');
+ dojo.style(this.entryTitleSelect, 'display', 'none');
+
+ // Show select boxes if the flags are set.
+ if(this.isFieldValid("contentedit")){
+ dojo.style(this.entryContentSelect, 'display', '');
+ }
+ if(this.isFieldValid("summaryedit")){
+ dojo.style(this.entrySummarySelect, 'display', '');
+ }
+ if(this.isFieldValid("titleedit")){
+ dojo.style(this.entryTitleSelect, 'display', '');
+ }
+ // Call super's _displaySections.
+ dojox.atom.widget.FeedEntryEditor.superclass._displaySections.apply(this);
+
+ // If we have editors to load after the nodes are created on the page, execute those now.
+ if(this._toLoad){
+ for(var i in this._toLoad){
+ var editor;
+ if(this._toLoad[i].generateEditor){
+ editor = dojo.hitch(this._toLoad[i], this._toLoad[i].generateEditor)();
+ }else{
+ editor = this._toLoad[i];
+ }
+ this._editors[this._toLoad[i].name] = editor;
+ this._toLoad[i] = null;
+ }
+ this._toLoad = null;
+ }
+ }
+});
+
+dojo.declare("dojox.atom.widget.PeopleEditor",[dijit._Widget, dijit._Templated, dijit._Container],{
+ // summary:
+ // An editor for dojox.atom.io.model.Person objects.
+ // description:
+ // An editor for dojox.atom.io.model.Person objects. Displays multiple rows for the respective arrays
+ // of people. Can add/remove rows on the fly.
+ templateString: dojo.cache("dojox.atom", "widget/templates/PeopleEditor.html", "<div class=\"peopleEditor\">\r\n\t<table style=\"width: 100%\">\r\n\t\t<tbody dojoAttachPoint=\"peopleEditorEditors\"></tbody>\r\n\t</table>\r\n\t<span class=\"peopleEditorButton\" dojoAttachPoint=\"peopleEditorButton\" dojoAttachEvent=\"onclick:_add\"></span>\r\n</div>\r\n"),
+
+ _rows: [],
+ _editors: [],
+ _index: 0,
+ _numRows: 0,
+
+ postCreate: function(){
+ // Initializer function for the PeopleEditor widget.
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "PeopleEditor");
+ if(this.name){
+ if(this.name == "Author"){
+ this.peopleEditorButton.appendChild(document.createTextNode("["+_nlsResources.addAuthor+"]"));
+ }else if(this.name == "Contributor"){
+ this.peopleEditorButton.appendChild(document.createTextNode("["+_nlsResources.addContributor+"]"));
+ }
+ }else{
+ this.peopleEditorButton.appendChild(document.createTextNode("["+_nlsResources.add+"]"));
+ }
+ this._editors = [];
+
+ if(!this.data || this.data.length===0){
+ this._createEditors(null, null, null, 0, this.name);
+ this._index = 1;
+ }else{
+ for(var i in this.data){
+ this._createEditors(this.data[i].name, this.data[i].email, this.data[i].uri, i);
+ this._index++;
+ this._numRows++;
+ }
+ }
+ },
+
+ destroy: function(){
+ for(var key in this._editors){
+ for(var key2 in this._editors[key]){
+ this._editors[key][key2].destroy();
+ }
+ }
+ this._editors = [];
+ },
+
+ _createEditors: function(/*string*/name, /*string*/email, /*string*/uri, /*int*/index, /*string*/widgetName){
+ // summary:
+ // creates editor boxes (textbox widgets) for the individual values of a Person.
+ // description:
+ // creates editor boxes (textbox widgets) for the individual values of a Person.
+ //
+ // name:
+ // The name of this Person.
+ // email:
+ // The email of this Person.
+ // uri:
+ // The Person's URI.
+ // index:
+ // The row index to use for this Person.
+ var row = document.createElement("tr");
+ this.peopleEditorEditors.appendChild(row);
+ row.id = "removeRow"+index;
+
+ var node = document.createElement("td");
+ node.setAttribute('align', 'right');
+ row.appendChild(node);
+ node.colSpan = 2;
+
+ if(this._numRows>0){
+ var hr = document.createElement("hr");
+ node.appendChild(hr);
+ hr.id = "hr"+index;
+ }
+
+ row = document.createElement("span");
+ node.appendChild(row);
+ row.className = "peopleEditorButton";
+ dojo.style(row, 'font-size', 'x-small');
+ dojo.connect(row, "onclick", this, "_removeEditor");
+ row.id = "remove"+index;
+
+ node = document.createTextNode("[X]");
+ row.appendChild(node);
+
+ row = document.createElement("tr");
+ this.peopleEditorEditors.appendChild(row);
+ row.id = "editorsRow"+index;
+
+ var labelNode = document.createElement("td");
+ row.appendChild(labelNode);
+ dojo.style(labelNode, 'width', '20%');
+
+ node = document.createElement("td");
+ row.appendChild(node);
+
+ row = document.createElement("table");
+ labelNode.appendChild(row);
+ dojo.style(row, 'width', '100%');
+
+ labelNode = document.createElement("tbody");
+ row.appendChild(labelNode);
+
+ row = document.createElement("table");
+ node.appendChild(row);
+ dojo.style(row, 'width', '100%');
+
+ node = document.createElement("tbody");
+ row.appendChild(node);
+
+ this._editors[index] = [];
+ this._editors[index].push(this._createEditor(name, widgetName+'name'+index, 'Name:', labelNode, node));
+ this._editors[index].push(this._createEditor(email, widgetName+'email'+index, 'Email:', labelNode, node));
+ this._editors[index].push(this._createEditor(uri, widgetName+'uri'+index, 'URI:', labelNode, node));
+ },
+
+ _createEditor: function(/*string*/value, /*string*/id, /*string*/name, /*DOM node*/labelNode, /*DOM node*/node){
+ // summary:
+ // Creates an individual editor widget (textbox) for a value.
+ // description:
+ // Creates an individual editor widget (textbox) for a value.
+ //
+ // value:
+ // The initial value of the textbox
+ // id:
+ // The id the textbox should have.
+ // name:
+ // The text to put in the label element for this textbox.
+ // labelNode:
+ // The node to attach the label to.
+ // node:
+ // The node to attach the editor rows to.
+ //
+ // returns:
+ // Editor widget.
+ var row = document.createElement("tr");
+ labelNode.appendChild(row);
+
+ var label = document.createElement("label");
+ label.setAttribute('for', id);
+ label.appendChild(document.createTextNode(name));
+ labelNode = document.createElement("td");
+ labelNode.appendChild(label);
+ row.appendChild(labelNode);
+
+ row = document.createElement("tr");
+ node.appendChild(row);
+
+ node = document.createElement("td");
+ row.appendChild(node);
+
+ var viewNode = document.createElement("input");
+ viewNode.setAttribute('id', id);
+ node.appendChild(viewNode);
+ dojo.style(viewNode, 'width', '95%');
+
+ var box = new dijit.form.TextBox({},viewNode);
+ box.attr('value', value);
+ return box;
+ },
+
+ _removeEditor: function(/*object*/event){
+ // summary:
+ // Removes a Person from our list of editors.
+ // description:
+ // Removes a Person from our list of editors by removing the block of editors that
+ // make up that Person.
+ //
+ // event:
+ // The event generated when the remove button is pressed on the page.
+ var target = null;
+
+ if(dojo.isIE){
+ target = event.srcElement;
+ }else{
+ target = event.target;
+ }
+
+ var id = target.id;
+ id = id.substring(6);
+ for(var key in this._editors[id]){
+ this._editors[id][key].destroy();
+ }
+
+ var node = dojo.byId("editorsRow"+id);
+ var parent = node.parentNode;
+ parent.removeChild(node);
+
+ node = dojo.byId("removeRow"+id);
+ parent = node.parentNode;
+ parent.removeChild(node);
+
+ this._numRows--;
+ if(this._numRows === 1 && parent.firstChild.firstChild.firstChild.tagName.toLowerCase() === "hr"){
+ node = parent.firstChild.firstChild;
+ node.removeChild(node.firstChild);
+ }
+ this._editors[id] = null;
+ },
+
+ _add: function(){
+ // summary:
+ // Adds a new block of blank editors to represent a Person.
+ // description:
+ // Adds a new block of blank editors to represent a Person.
+ this._createEditors(null, null, null, this._index);
+ this._index++;
+ this._numRows++;
+ },
+
+ getValues: function(){
+ // summary:
+ // Gets the values of this editor in an array.
+ // description:
+ // Gets the values of this editor in an array, with each Person as an object within the array.
+ //
+ // returns:
+ // An array of anonymous objects representing dojox.atom.io.model.Persons.
+ var values = [];
+ for(var i in this._editors){
+ if(this._editors[i]){
+ values.push({name: this._editors[i][0].attr('value'), email: this._editors[i][1].attr('value'), uri: this._editors[i][2].attr('value')});
+ }
+ }
+ return values;
+ }
+});
+
+}
+
+}};});
diff --git a/js/dojo-1.6/dojox/atom/widget/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/FeedEntryViewer.js
new file mode 100644
index 0000000..119a488
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/FeedEntryViewer.js
@@ -0,0 +1,794 @@
+/*
+ Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.atom.widget.FeedEntryViewer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.atom.widget.FeedEntryViewer"] = true;
+dojo.provide("dojox.atom.widget.FeedEntryViewer");
+
+dojo.require("dojo.fx");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Container");
+dojo.require("dijit.layout.ContentPane");
+dojo.require("dojox.atom.io.Connection");
+dojo.requireLocalization("dojox.atom.widget", "FeedEntryViewer", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+
+dojo.experimental("dojox.atom.widget.FeedEntryViewer");
+
+dojo.declare("dojox.atom.widget.FeedEntryViewer",[dijit._Widget, dijit._Templated, dijit._Container],{
+ // summary:
+ // An ATOM feed entry editor for publishing updated ATOM entries, or viewing non-editable entries.
+ // description:
+ // An ATOM feed entry editor for publishing updated ATOM entries, or viewing non-editable entries.
+ entrySelectionTopic: "", //The topic to listen on for entries to edit.
+
+ _validEntryFields: {}, //The entry fields that were present on the entry and are being displayed.
+ //This works in conjuntion with what is selected to be displayed.
+ displayEntrySections: "", //What current sections of the entries to display as a comma separated list.
+ _displayEntrySections: null,
+
+ //Control options for the display options menu.
+ enableMenu: false,
+ enableMenuFade: false,
+ _optionButtonDisplayed: true,
+
+ //Templates for the HTML rendering. Need to figure these out better, admittedly.
+ templateString: dojo.cache("dojox.atom", "widget/templates/FeedEntryViewer.html", "<div class=\"feedEntryViewer\">\r\n <table border=\"0\" width=\"100%\" class=\"feedEntryViewerMenuTable\" dojoAttachPoint=\"feedEntryViewerMenu\" style=\"display: none;\">\r\n <tr width=\"100%\" dojoAttachPoint=\"entryCheckBoxDisplayOptions\">\r\n <td align=\"right\">\r\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"displayOptions\" dojoAttachEvent=\"onclick:_toggleOptions\"></span>\r\n </td>\r\n </tr>\r\n <tr class=\"feedEntryViewerDisplayCheckbox\" dojoAttachPoint=\"entryCheckBoxRow\" width=\"100%\" style=\"display: none;\">\r\n <td dojoAttachPoint=\"feedEntryCelltitle\">\r\n <input type=\"checkbox\" name=\"title\" value=\"Title\" dojoAttachPoint=\"feedEntryCheckBoxTitle\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelTitle\"></label>\r\n </td>\r\n <td dojoAttachPoint=\"feedEntryCellauthors\">\r\n <input type=\"checkbox\" name=\"authors\" value=\"Authors\" dojoAttachPoint=\"feedEntryCheckBoxAuthors\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelAuthors\"></label>\r\n </td>\r\n <td dojoAttachPoint=\"feedEntryCellcontributors\">\r\n <input type=\"checkbox\" name=\"contributors\" value=\"Contributors\" dojoAttachPoint=\"feedEntryCheckBoxContributors\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelContributors\"></label>\r\n </td>\r\n <td dojoAttachPoint=\"feedEntryCellid\">\r\n <input type=\"checkbox\" name=\"id\" value=\"Id\" dojoAttachPoint=\"feedEntryCheckBoxId\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelId\"></label>\r\n </td>\r\n <td rowspan=\"2\" align=\"right\">\r\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"close\" dojoAttachEvent=\"onclick:_toggleOptions\"></span>\r\n </td>\r\n\t\t</tr>\r\n\t\t<tr class=\"feedEntryViewerDisplayCheckbox\" dojoAttachPoint=\"entryCheckBoxRow2\" width=\"100%\" style=\"display: none;\">\r\n <td dojoAttachPoint=\"feedEntryCellupdated\">\r\n <input type=\"checkbox\" name=\"updated\" value=\"Updated\" dojoAttachPoint=\"feedEntryCheckBoxUpdated\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelUpdated\"></label>\r\n </td>\r\n <td dojoAttachPoint=\"feedEntryCellsummary\">\r\n <input type=\"checkbox\" name=\"summary\" value=\"Summary\" dojoAttachPoint=\"feedEntryCheckBoxSummary\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelSummary\"></label>\r\n </td>\r\n <td dojoAttachPoint=\"feedEntryCellcontent\">\r\n <input type=\"checkbox\" name=\"content\" value=\"Content\" dojoAttachPoint=\"feedEntryCheckBoxContent\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelContent\"></label>\r\n </td>\r\n </tr>\r\n </table>\r\n \r\n <table class=\"feedEntryViewerContainer\" border=\"0\" width=\"100%\">\r\n <tr class=\"feedEntryViewerTitle\" dojoAttachPoint=\"entryTitleRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryTitleHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entryTitleNode\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n\r\n <tr class=\"feedEntryViewerAuthor\" dojoAttachPoint=\"entryAuthorRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryAuthorHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entryAuthorNode\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n\r\n <tr class=\"feedEntryViewerContributor\" dojoAttachPoint=\"entryContributorRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryContributorHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entryContributorNode\" class=\"feedEntryViewerContributorNames\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n \r\n <tr class=\"feedEntryViewerId\" dojoAttachPoint=\"entryIdRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryIdHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entryIdNode\" class=\"feedEntryViewerIdText\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n \r\n <tr class=\"feedEntryViewerUpdated\" dojoAttachPoint=\"entryUpdatedRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryUpdatedHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entryUpdatedNode\" class=\"feedEntryViewerUpdatedText\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n \r\n <tr class=\"feedEntryViewerSummary\" dojoAttachPoint=\"entrySummaryRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entrySummaryHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entrySummaryNode\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n \r\n <tr class=\"feedEntryViewerContent\" dojoAttachPoint=\"entryContentRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryContentHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entryContentNode\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>\r\n"),
+
+ _entry: null, //The entry that is being viewed/edited.
+ _feed: null, //The feed the entry came from.
+
+ _editMode: false, //Flag denoting the state of the widget, in edit mode or not.
+
+ postCreate: function(){
+ if(this.entrySelectionTopic !== ""){
+ this._subscriptions = [dojo.subscribe(this.entrySelectionTopic, this, "_handleEvent")];
+ }
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedEntryViewer");
+ this.displayOptions.innerHTML = _nlsResources.displayOptions;
+ this.feedEntryCheckBoxLabelTitle.innerHTML = _nlsResources.title;
+ this.feedEntryCheckBoxLabelAuthors.innerHTML = _nlsResources.authors;
+ this.feedEntryCheckBoxLabelContributors.innerHTML = _nlsResources.contributors;
+ this.feedEntryCheckBoxLabelId.innerHTML = _nlsResources.id;
+ this.close.innerHTML = _nlsResources.close;
+ this.feedEntryCheckBoxLabelUpdated.innerHTML = _nlsResources.updated;
+ this.feedEntryCheckBoxLabelSummary.innerHTML = _nlsResources.summary;
+ this.feedEntryCheckBoxLabelContent.innerHTML = _nlsResources.content;
+ },
+
+ startup: function(){
+ if(this.displayEntrySections === ""){
+ this._displayEntrySections = ["title","authors","contributors","summary","content","id","updated"];
+ }else{
+ this._displayEntrySections = this.displayEntrySections.split(",");
+ }
+ this._setDisplaySectionsCheckboxes();
+
+ if(this.enableMenu){
+ dojo.style(this.feedEntryViewerMenu, 'display', '');
+ if(this.entryCheckBoxRow && this.entryCheckBoxRow2){
+ if(this.enableMenuFade){
+ dojo.fadeOut({node: this.entryCheckBoxRow,duration: 250}).play();
+ dojo.fadeOut({node: this.entryCheckBoxRow2,duration: 250}).play();
+ }
+ }
+ }
+ },
+
+ clear: function(){
+ // summary:
+ // Function to clear the state of the widget.
+ // description:
+ // Function to clear the state of the widget.
+ this.destroyDescendants();
+ this._entry=null;
+ this._feed=null;
+ this.clearNodes();
+ },
+
+ clearNodes: function(){
+ // summary:
+ // Function to clear all the display nodes for the ATOM entry from the viewer.
+ // description:
+ // Function to clear all the display nodes for the ATOM entry from the viewer.
+
+ dojo.forEach([
+ "entryTitleRow", "entryAuthorRow", "entryContributorRow", "entrySummaryRow", "entryContentRow",
+ "entryIdRow", "entryUpdatedRow"
+ ], function(node){
+ dojo.style(this[node], "display", "none");
+ }, this);
+
+ dojo.forEach([
+ "entryTitleNode", "entryTitleHeader", "entryAuthorHeader", "entryContributorHeader",
+ "entryContributorNode", "entrySummaryHeader", "entrySummaryNode", "entryContentHeader",
+ "entryContentNode", "entryIdNode", "entryIdHeader", "entryUpdatedHeader", "entryUpdatedNode"
+ ], function(part){
+ while(this[part].firstChild){
+ dojo.destroy(this[part].firstChild);
+ }
+ }
+ ,this);
+
+ },
+
+ setEntry: function(/*object*/entry, /*object*/feed, /*boolean*/leaveMenuState){
+ // summary:
+ // Function to set the current entry that is being edited.
+ // description:
+ // Function to set the current entry that is being edited.
+ //
+ // entry:
+ // Instance of dojox.atom.io.model.Entry to display for reading/editing.
+ this.clear();
+ this._validEntryFields = {};
+ this._entry = entry;
+ this._feed = feed;
+
+ if(entry !== null){
+ // Handle the title.
+ if(this.entryTitleHeader){
+ this.setTitleHeader(this.entryTitleHeader, entry);
+ }
+
+ if(this.entryTitleNode){
+ this.setTitle(this.entryTitleNode, this._editMode, entry);
+ }
+
+ if(this.entryAuthorHeader){
+ this.setAuthorsHeader(this.entryAuthorHeader, entry);
+ }
+
+ if(this.entryAuthorNode){
+ this.setAuthors(this.entryAuthorNode, this._editMode, entry);
+ }
+
+ if(this.entryContributorHeader){
+ this.setContributorsHeader(this.entryContributorHeader, entry);
+ }
+
+ if(this.entryContributorNode){
+ this.setContributors(this.entryContributorNode, this._editMode, entry);
+ }
+
+ if(this.entryIdHeader){
+ this.setIdHeader(this.entryIdHeader, entry);
+ }
+
+ if(this.entryIdNode){
+ this.setId(this.entryIdNode, this._editMode, entry);
+ }
+
+ if(this.entryUpdatedHeader){
+ this.setUpdatedHeader(this.entryUpdatedHeader, entry);
+ }
+
+ if(this.entryUpdatedNode){
+ this.setUpdated(this.entryUpdatedNode, this._editMode, entry);
+ }
+
+ if(this.entrySummaryHeader){
+ this.setSummaryHeader(this.entrySummaryHeader, entry);
+ }
+
+ if(this.entrySummaryNode){
+ this.setSummary(this.entrySummaryNode, this._editMode, entry);
+ }
+
+ if(this.entryContentHeader){
+ this.setContentHeader(this.entryContentHeader, entry);
+ }
+
+ if(this.entryContentNode){
+ this.setContent(this.entryContentNode, this._editMode, entry);
+ }
+ }
+ this._displaySections();
+ },
+
+ setTitleHeader: function(/*DOM node*/titleHeaderNode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the title header node in the template to some value.
+ // description:
+ // Function to set the contents of the title header node in the template to some value.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // titleAchorNode:
+ // The DOM node to attach the title data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ //
+ if(entry.title && entry.title.value && entry.title.value !== null){
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedEntryViewer");
+ var titleHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.title});
+ titleHeaderNode.appendChild(titleHeader.domNode);
+ }
+ },
+
+ setTitle: function(titleAnchorNode, editMode, entry){
+ // summary:
+ // Function to set the contents of the title node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the title node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // titleAchorNode:
+ // The DOM node to attach the title data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.title && entry.title.value && entry.title.value !== null){
+ if(entry.title.type == "text"){
+ var titleNode = document.createTextNode(entry.title.value);
+ titleAnchorNode.appendChild(titleNode);
+ }else{
+ var titleViewNode = document.createElement("span");
+ var titleView = new dijit.layout.ContentPane({refreshOnShow: true, executeScripts: false}, titleViewNode);
+ titleView.attr('content', entry.title.value);
+ titleAnchorNode.appendChild(titleView.domNode);
+ }
+ this.setFieldValidity("title", true);
+ }
+ },
+
+ setAuthorsHeader: function(/*DOM node*/authorHeaderNode, /*object*/entry){
+ // summary:
+ // Function to set the title format for the authors section of the author row in the template to some value from the entry.
+ // description:
+ // Function to set the title format for the authors section of the author row in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the author data is filled out from an entry.
+ //
+ // authorHeaderNode:
+ // The DOM node to attach the author section header data to.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.authors && entry.authors.length > 0){
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedEntryViewer");
+ var authorHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.authors});
+ authorHeaderNode.appendChild(authorHeader.domNode);
+ }
+ },
+
+ setAuthors: function(/*DOM node*/authorsAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the author node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the author node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // authorsAchorNode:
+ // The DOM node to attach the author data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ authorsAnchorNode.innerHTML = "";
+ if(entry.authors && entry.authors.length > 0){
+ for(var i in entry.authors){
+ if(entry.authors[i].name){
+ var anchor = authorsAnchorNode;
+ if(entry.authors[i].uri){
+ var link = document.createElement("a");
+ anchor.appendChild(link);
+ link.href = entry.authors[i].uri;
+ anchor = link;
+ }
+ var name = entry.authors[i].name;
+ if(entry.authors[i].email){
+ name = name + " (" + entry.authors[i].email + ")";
+ }
+ var authorNode = document.createTextNode(name);
+ anchor.appendChild(authorNode);
+ var breakNode = document.createElement("br");
+ authorsAnchorNode.appendChild(breakNode);
+ this.setFieldValidity("authors", true);
+ }
+ }
+ }
+ },
+
+ setContributorsHeader: function(/*DOM node*/contributorsHeaderNode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the contributor header node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the contributor header node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // contributorsHeaderNode:
+ // The DOM node to attach the contributor title to.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.contributors && entry.contributors.length > 0){
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedEntryViewer");
+ var contributorHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.contributors});
+ contributorsHeaderNode.appendChild(contributorHeader.domNode);
+ }
+ },
+
+
+ setContributors: function(/*DOM node*/contributorsAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the contributor node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the contributor node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // contributorsAnchorNode:
+ // The DOM node to attach the contributor data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.contributors && entry.contributors.length > 0){
+ for(var i in entry.contributors){
+ var contributorNode = document.createTextNode(entry.contributors[i].name);
+ contributorsAnchorNode.appendChild(contributorNode);
+ var breakNode = document.createElement("br");
+ contributorsAnchorNode.appendChild(breakNode);
+ this.setFieldValidity("contributors", true);
+ }
+ }
+ },
+
+
+ setIdHeader: function(/*DOM node*/idHeaderNode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the ID node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the ID node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // idAnchorNode:
+ // The DOM node to attach the ID data to.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.id && entry.id !== null){
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedEntryViewer");
+ var idHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.id});
+ idHeaderNode.appendChild(idHeader.domNode);
+ }
+ },
+
+
+ setId: function(/*DOM node*/idAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the ID node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the ID node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // idAnchorNode:
+ // The DOM node to attach the ID data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.id && entry.id !== null){
+ var idNode = document.createTextNode(entry.id);
+ idAnchorNode.appendChild(idNode);
+ this.setFieldValidity("id", true);
+ }
+ },
+
+ setUpdatedHeader: function(/*DOM node*/updatedHeaderNode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the updated header node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the updated header node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // updatedHeaderNode:
+ // The DOM node to attach the updated header data to.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.updated && entry.updated !== null){
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedEntryViewer");
+ var updatedHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.updated});
+ updatedHeaderNode.appendChild(updatedHeader.domNode);
+ }
+ },
+
+ setUpdated: function(/*DOM node*/updatedAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the updated node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the updated node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // updatedAnchorNode:
+ // The DOM node to attach the udpated data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.updated && entry.updated !== null){
+ var updatedNode = document.createTextNode(entry.updated);
+ updatedAnchorNode.appendChild(updatedNode);
+ this.setFieldValidity("updated", true);
+ }
+ },
+
+ setSummaryHeader: function(/*DOM node*/summaryHeaderNode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the summary node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the summary node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // summaryHeaderNode:
+ // The DOM node to attach the summary title to.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.summary && entry.summary.value && entry.summary.value !== null){
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedEntryViewer");
+ var summaryHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.summary});
+ summaryHeaderNode.appendChild(summaryHeader.domNode);
+ }
+ },
+
+
+ setSummary: function(/*DOM node*/summaryAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the summary node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the summary node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // summaryAnchorNode:
+ // The DOM node to attach the summary data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.summary && entry.summary.value && entry.summary.value !== null){
+ var summaryViewNode = document.createElement("span");
+ var summaryView = new dijit.layout.ContentPane({refreshOnShow: true, executeScripts: false}, summaryViewNode);
+ summaryView.attr('content', entry.summary.value);
+ summaryAnchorNode.appendChild(summaryView.domNode);
+ this.setFieldValidity("summary", true);
+ }
+ },
+
+ setContentHeader: function(/*DOM node*/contentHeaderNode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the content node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the content node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // contentHeaderNode:
+ // The DOM node to attach the content data to.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.content && entry.content.value && entry.content.value !== null){
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedEntryViewer");
+ var contentHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.content});
+ contentHeaderNode.appendChild(contentHeader.domNode);
+ }
+ },
+
+ setContent: function(/*DOM node*/contentAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the content node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the content node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // contentAnchorNode:
+ // The DOM node to attach the content data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.content && entry.content.value && entry.content.value !== null){
+ var contentViewNode = document.createElement("span");
+ var contentView = new dijit.layout.ContentPane({refreshOnShow: true, executeScripts: false},contentViewNode);
+ contentView.attr('content', entry.content.value);
+ contentAnchorNode.appendChild(contentView.domNode);
+ this.setFieldValidity("content", true);
+ }
+ },
+
+
+ _displaySections: function(){
+ // summary:
+ // Internal function for determining which sections of the view to actually display.
+ // description:
+ // Internal function for determining which sections of the view to actually display.
+ //
+ // returns:
+ // Nothing.
+ dojo.style(this.entryTitleRow, 'display', 'none');
+ dojo.style(this.entryAuthorRow, 'display', 'none');
+ dojo.style(this.entryContributorRow, 'display', 'none');
+ dojo.style(this.entrySummaryRow, 'display', 'none');
+ dojo.style(this.entryContentRow, 'display', 'none');
+ dojo.style(this.entryIdRow, 'display', 'none');
+ dojo.style(this.entryUpdatedRow, 'display', 'none');
+
+ for(var i in this._displayEntrySections){
+ var section = this._displayEntrySections[i].toLowerCase();
+ if(section === "title" && this.isFieldValid("title")){
+ dojo.style(this.entryTitleRow, 'display', '');
+ }
+ if(section === "authors" && this.isFieldValid("authors")){
+ dojo.style(this.entryAuthorRow, 'display', '');
+ }
+ if(section === "contributors" && this.isFieldValid("contributors")){
+ dojo.style(this.entryContributorRow, 'display', '');
+ }
+ if(section === "summary" && this.isFieldValid("summary")){
+ dojo.style(this.entrySummaryRow, 'display', '');
+ }
+ if(section === "content" && this.isFieldValid("content")){
+ dojo.style(this.entryContentRow, 'display', '');
+ }
+ if(section === "id" && this.isFieldValid("id")){
+ dojo.style(this.entryIdRow, 'display', '');
+ }
+ if(section === "updated" && this.isFieldValid("updated")){
+ dojo.style(this.entryUpdatedRow, 'display', '');
+ }
+
+ }
+ },
+
+ setDisplaySections: function(/*array*/sectionsArray){
+ // summary:
+ // Function for setting which sections of the entry should be displayed.
+ // description:
+ // Function for setting which sections of the entry should be displayed.
+ //
+ // sectionsArray:
+ // Array of string names that indicate which sections to display.
+ //
+ // returns:
+ // Nothing.
+ if(sectionsArray !== null){
+ this._displayEntrySections = sectionsArray;
+ this._displaySections();
+ }else{
+ this._displayEntrySections = ["title","authors","contributors","summary","content","id","updated"];
+ }
+ },
+
+ _setDisplaySectionsCheckboxes: function(){
+ // summary:
+ // Internal function for setting which checkboxes on the display are selected.
+ // description:
+ // Internal function for setting which checkboxes on the display are selected.
+ //
+ // returns:
+ // Nothing.
+ var items = ["title","authors","contributors","summary","content","id","updated"];
+ for(var i in items){
+ if(dojo.indexOf(this._displayEntrySections, items[i]) == -1){
+ dojo.style(this["feedEntryCell"+items[i]], 'display', 'none');
+ }else{
+ this["feedEntryCheckBox"+items[i].substring(0,1).toUpperCase()+items[i].substring(1)].checked=true;
+ }
+ }
+ },
+
+ _readDisplaySections: function(){
+ // summary:
+ // Internal function for reading what is currently checked for display and generating the display list from it.
+ // description:
+ // Internal function for reading what is currently checked for display and generating the display list from it.
+ //
+ // returns:
+ // Nothing.
+ var checkedList = [];
+
+ if(this.feedEntryCheckBoxTitle.checked){
+ checkedList.push("title");
+ }
+ if(this.feedEntryCheckBoxAuthors.checked){
+ checkedList.push("authors");
+ }
+ if(this.feedEntryCheckBoxContributors.checked){
+ checkedList.push("contributors");
+ }
+ if(this.feedEntryCheckBoxSummary.checked){
+ checkedList.push("summary");
+ }
+ if(this.feedEntryCheckBoxContent.checked){
+ checkedList.push("content");
+ }
+ if(this.feedEntryCheckBoxId.checked){
+ checkedList.push("id");
+ }
+ if(this.feedEntryCheckBoxUpdated.checked){
+ checkedList.push("updated");
+ }
+ this._displayEntrySections = checkedList;
+ },
+
+ _toggleCheckbox: function(/*object*/checkBox){
+ // summary:
+ // Internal function for determining of a particular entry is editable.
+ // description:
+ // Internal function for determining of a particular entry is editable.
+ // This is used for determining if the delete action should be displayed or not.
+ //
+ // checkBox:
+ // The checkbox object to toggle the selection on.
+ //
+ // returns:
+ // Nothing
+ if(checkBox.checked){
+ checkBox.checked=false;
+ }else{
+ checkBox.checked=true;
+ }
+ this._readDisplaySections();
+ this._displaySections();
+ },
+
+ _toggleOptions: function(/*object*/checkBox){
+ // summary:
+ // Internal function for determining of a particular entry is editable.
+ // description:
+ // Internal function for determining of a particular entry is editable.
+ // This is used for determining if the delete action should be displayed or not.
+ //
+ // checkBox:
+ // The checkbox object to toggle the selection on.
+ //
+ // returns:
+ // Nothing
+ if(this.enableMenu){
+ var fade = null;
+ var anim;
+ var anim2;
+ if(this._optionButtonDisplayed){
+ if(this.enableMenuFade){
+ anim = dojo.fadeOut({node: this.entryCheckBoxDisplayOptions,duration: 250});
+ dojo.connect(anim, "onEnd", this, function(){
+ dojo.style(this.entryCheckBoxDisplayOptions, 'display', 'none');
+ dojo.style(this.entryCheckBoxRow, 'display', '');
+ dojo.style(this.entryCheckBoxRow2, 'display', '');
+ dojo.fadeIn({node: this.entryCheckBoxRow, duration: 250}).play();
+ dojo.fadeIn({node: this.entryCheckBoxRow2, duration: 250}).play();
+ });
+ anim.play();
+ }else{
+ dojo.style(this.entryCheckBoxDisplayOptions, 'display', 'none');
+ dojo.style(this.entryCheckBoxRow, 'display', '');
+ dojo.style(this.entryCheckBoxRow2, 'display', '');
+ }
+ this._optionButtonDisplayed=false;
+ }else{
+ if(this.enableMenuFade){
+ anim = dojo.fadeOut({node: this.entryCheckBoxRow,duration: 250});
+ anim2 = dojo.fadeOut({node: this.entryCheckBoxRow2,duration: 250});
+ dojo.connect(anim, "onEnd", this, function(){
+ dojo.style(this.entryCheckBoxRow, 'display', 'none');
+ dojo.style(this.entryCheckBoxRow2, 'display', 'none');
+ dojo.style(this.entryCheckBoxDisplayOptions, 'display', '');
+ dojo.fadeIn({node: this.entryCheckBoxDisplayOptions, duration: 250}).play();
+ });
+ anim.play();
+ anim2.play();
+ }else{
+ dojo.style(this.entryCheckBoxRow, 'display', 'none');
+ dojo.style(this.entryCheckBoxRow2, 'display', 'none');
+ dojo.style(this.entryCheckBoxDisplayOptions, 'display', '');
+ }
+ this._optionButtonDisplayed=true;
+ }
+ }
+ },
+
+ _handleEvent: function(/*object*/entrySelectionEvent){
+ // summary:
+ // Internal function for listening to a topic that will handle entry notification.
+ // description:
+ // Internal function for listening to a topic that will handle entry notification.
+ //
+ // entrySelectionEvent:
+ // The topic message containing the entry that was selected for view.
+ //
+ // returns:
+ // Nothing.
+ if(entrySelectionEvent.source != this){
+ if(entrySelectionEvent.action == "set" && entrySelectionEvent.entry){
+ this.setEntry(entrySelectionEvent.entry, entrySelectionEvent.feed);
+ }else if(entrySelectionEvent.action == "delete" && entrySelectionEvent.entry && entrySelectionEvent.entry == this._entry){
+ this.clear();
+ }
+ }
+ },
+
+ setFieldValidity: function(/*string*/field, /*boolean*/isValid){
+ // summary:
+ // Function to set whether a field in the view is valid and displayable.
+ // description:
+ // Function to set whether a field in the view is valid and displayable.
+ // This is needed for over-riding of the set* functions and customization of how data is displayed in the attach point.
+ // So if custom implementations use their own display logic, they can still enable the field.
+ //
+ // field:
+ // The field name to set the valid parameter on. Such as 'content', 'id', etc.
+ // isValid:
+ // Flag denoting if the field is valid or not.
+ //
+ // returns:
+ // Nothing.
+ if(field){
+ var lowerField = field.toLowerCase();
+ this._validEntryFields[field] = isValid;
+ }
+ },
+
+ isFieldValid: function(/*string*/field){
+ // summary:
+ // Function to return if a displayable field is valid or not
+ // description:
+ // Function to return if a displayable field is valid or not
+ //
+ // field:
+ // The field name to get the valid parameter of. Such as 'content', 'id', etc.
+ //
+ // returns:
+ // boolean denoting if the field is valid and set.
+ return this._validEntryFields[field.toLowerCase()];
+ },
+
+ getEntry: function(){
+ return this._entry;
+ },
+
+ getFeed: function(){
+ return this._feed;
+ },
+
+ destroy: function(){
+ this.clear();
+ dojo.forEach(this._subscriptions, dojo.unsubscribe);
+ }
+});
+
+dojo.declare("dojox.atom.widget.EntryHeader",[dijit._Widget, dijit._Templated, dijit._Container],{
+ // summary:
+ // Widget representing a header in a FeedEntryViewer/Editor
+ // description:
+ // Widget representing a header in a FeedEntryViewer/Editor
+ title: "",
+ templateString: dojo.cache("dojox.atom", "widget/templates/EntryHeader.html", "<span dojoAttachPoint=\"entryHeaderNode\" class=\"entryHeaderNode\"></span>\r\n"),
+
+ postCreate: function(){
+ this.setListHeader();
+ },
+
+ setListHeader: function(/*string*/title){
+ this.clear();
+ if(title){
+ this.title = title;
+ }
+ var textNode = document.createTextNode(this.title);
+ this.entryHeaderNode.appendChild(textNode);
+ },
+
+ clear: function(){
+ this.destroyDescendants();
+ if(this.entryHeaderNode){
+ for(var i = 0; i < this.entryHeaderNode.childNodes.length; i++){
+ this.entryHeaderNode.removeChild(this.entryHeaderNode.childNodes[i]);
+ }
+ }
+ },
+
+ destroy: function(){
+ this.clear();
+ }
+});
+
+}
diff --git a/js/dojo-1.6/dojox/atom/widget/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..d268b65
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/FeedEntryViewer.xd.js
@@ -0,0 +1,805 @@
+/*
+ Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.FeedEntryViewer"],
+["require", "dojo.fx"],
+["require", "dijit._Widget"],
+["require", "dijit._Templated"],
+["require", "dijit._Container"],
+["require", "dijit.layout.ContentPane"],
+["require", "dojox.atom.io.Connection"],
+["requireLocalization", "dojox.atom.widget", "FeedEntryViewer", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw", "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw"]],
+defineResource: function(dojo, dijit, dojox){if(!dojo._hasResource["dojox.atom.widget.FeedEntryViewer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.atom.widget.FeedEntryViewer"] = true;
+dojo.provide("dojox.atom.widget.FeedEntryViewer");
+
+dojo.require("dojo.fx");
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Container");
+dojo.require("dijit.layout.ContentPane");
+dojo.require("dojox.atom.io.Connection");
+;
+
+dojo.experimental("dojox.atom.widget.FeedEntryViewer");
+
+dojo.declare("dojox.atom.widget.FeedEntryViewer",[dijit._Widget, dijit._Templated, dijit._Container],{
+ // summary:
+ // An ATOM feed entry editor for publishing updated ATOM entries, or viewing non-editable entries.
+ // description:
+ // An ATOM feed entry editor for publishing updated ATOM entries, or viewing non-editable entries.
+ entrySelectionTopic: "", //The topic to listen on for entries to edit.
+
+ _validEntryFields: {}, //The entry fields that were present on the entry and are being displayed.
+ //This works in conjuntion with what is selected to be displayed.
+ displayEntrySections: "", //What current sections of the entries to display as a comma separated list.
+ _displayEntrySections: null,
+
+ //Control options for the display options menu.
+ enableMenu: false,
+ enableMenuFade: false,
+ _optionButtonDisplayed: true,
+
+ //Templates for the HTML rendering. Need to figure these out better, admittedly.
+ templateString: dojo.cache("dojox.atom", "widget/templates/FeedEntryViewer.html", "<div class=\"feedEntryViewer\">\r\n <table border=\"0\" width=\"100%\" class=\"feedEntryViewerMenuTable\" dojoAttachPoint=\"feedEntryViewerMenu\" style=\"display: none;\">\r\n <tr width=\"100%\" dojoAttachPoint=\"entryCheckBoxDisplayOptions\">\r\n <td align=\"right\">\r\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"displayOptions\" dojoAttachEvent=\"onclick:_toggleOptions\"></span>\r\n </td>\r\n </tr>\r\n <tr class=\"feedEntryViewerDisplayCheckbox\" dojoAttachPoint=\"entryCheckBoxRow\" width=\"100%\" style=\"display: none;\">\r\n <td dojoAttachPoint=\"feedEntryCelltitle\">\r\n <input type=\"checkbox\" name=\"title\" value=\"Title\" dojoAttachPoint=\"feedEntryCheckBoxTitle\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelTitle\"></label>\r\n </td>\r\n <td dojoAttachPoint=\"feedEntryCellauthors\">\r\n <input type=\"checkbox\" name=\"authors\" value=\"Authors\" dojoAttachPoint=\"feedEntryCheckBoxAuthors\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelAuthors\"></label>\r\n </td>\r\n <td dojoAttachPoint=\"feedEntryCellcontributors\">\r\n <input type=\"checkbox\" name=\"contributors\" value=\"Contributors\" dojoAttachPoint=\"feedEntryCheckBoxContributors\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelContributors\"></label>\r\n </td>\r\n <td dojoAttachPoint=\"feedEntryCellid\">\r\n <input type=\"checkbox\" name=\"id\" value=\"Id\" dojoAttachPoint=\"feedEntryCheckBoxId\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelId\"></label>\r\n </td>\r\n <td rowspan=\"2\" align=\"right\">\r\n <span class=\"feedEntryViewerMenu\" dojoAttachPoint=\"close\" dojoAttachEvent=\"onclick:_toggleOptions\"></span>\r\n </td>\r\n\t\t</tr>\r\n\t\t<tr class=\"feedEntryViewerDisplayCheckbox\" dojoAttachPoint=\"entryCheckBoxRow2\" width=\"100%\" style=\"display: none;\">\r\n <td dojoAttachPoint=\"feedEntryCellupdated\">\r\n <input type=\"checkbox\" name=\"updated\" value=\"Updated\" dojoAttachPoint=\"feedEntryCheckBoxUpdated\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelUpdated\"></label>\r\n </td>\r\n <td dojoAttachPoint=\"feedEntryCellsummary\">\r\n <input type=\"checkbox\" name=\"summary\" value=\"Summary\" dojoAttachPoint=\"feedEntryCheckBoxSummary\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelSummary\"></label>\r\n </td>\r\n <td dojoAttachPoint=\"feedEntryCellcontent\">\r\n <input type=\"checkbox\" name=\"content\" value=\"Content\" dojoAttachPoint=\"feedEntryCheckBoxContent\" dojoAttachEvent=\"onclick:_toggleCheckbox\"/>\r\n\t\t\t\t<label for=\"title\" dojoAttachPoint=\"feedEntryCheckBoxLabelContent\"></label>\r\n </td>\r\n </tr>\r\n </table>\r\n \r\n <table class=\"feedEntryViewerContainer\" border=\"0\" width=\"100%\">\r\n <tr class=\"feedEntryViewerTitle\" dojoAttachPoint=\"entryTitleRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryTitleHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entryTitleNode\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n\r\n <tr class=\"feedEntryViewerAuthor\" dojoAttachPoint=\"entryAuthorRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryAuthorHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entryAuthorNode\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n\r\n <tr class=\"feedEntryViewerContributor\" dojoAttachPoint=\"entryContributorRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryContributorHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entryContributorNode\" class=\"feedEntryViewerContributorNames\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n \r\n <tr class=\"feedEntryViewerId\" dojoAttachPoint=\"entryIdRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryIdHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entryIdNode\" class=\"feedEntryViewerIdText\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n \r\n <tr class=\"feedEntryViewerUpdated\" dojoAttachPoint=\"entryUpdatedRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryUpdatedHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entryUpdatedNode\" class=\"feedEntryViewerUpdatedText\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n \r\n <tr class=\"feedEntryViewerSummary\" dojoAttachPoint=\"entrySummaryRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entrySummaryHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entrySummaryNode\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n \r\n <tr class=\"feedEntryViewerContent\" dojoAttachPoint=\"entryContentRow\" style=\"display: none;\">\r\n <td>\r\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\r\n <tr class=\"graphic-tab-lgray\">\r\n\t\t\t\t\t\t<td class=\"lp2\">\r\n\t\t\t\t\t\t\t<span class=\"lp\" dojoAttachPoint=\"entryContentHeader\"></span>\r\n\t\t\t\t\t\t</td>\r\n </tr>\r\n <tr>\r\n <td dojoAttachPoint=\"entryContentNode\">\r\n </td>\r\n </tr>\r\n </table>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>\r\n"),
+
+ _entry: null, //The entry that is being viewed/edited.
+ _feed: null, //The feed the entry came from.
+
+ _editMode: false, //Flag denoting the state of the widget, in edit mode or not.
+
+ postCreate: function(){
+ if(this.entrySelectionTopic !== ""){
+ this._subscriptions = [dojo.subscribe(this.entrySelectionTopic, this, "_handleEvent")];
+ }
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedEntryViewer");
+ this.displayOptions.innerHTML = _nlsResources.displayOptions;
+ this.feedEntryCheckBoxLabelTitle.innerHTML = _nlsResources.title;
+ this.feedEntryCheckBoxLabelAuthors.innerHTML = _nlsResources.authors;
+ this.feedEntryCheckBoxLabelContributors.innerHTML = _nlsResources.contributors;
+ this.feedEntryCheckBoxLabelId.innerHTML = _nlsResources.id;
+ this.close.innerHTML = _nlsResources.close;
+ this.feedEntryCheckBoxLabelUpdated.innerHTML = _nlsResources.updated;
+ this.feedEntryCheckBoxLabelSummary.innerHTML = _nlsResources.summary;
+ this.feedEntryCheckBoxLabelContent.innerHTML = _nlsResources.content;
+ },
+
+ startup: function(){
+ if(this.displayEntrySections === ""){
+ this._displayEntrySections = ["title","authors","contributors","summary","content","id","updated"];
+ }else{
+ this._displayEntrySections = this.displayEntrySections.split(",");
+ }
+ this._setDisplaySectionsCheckboxes();
+
+ if(this.enableMenu){
+ dojo.style(this.feedEntryViewerMenu, 'display', '');
+ if(this.entryCheckBoxRow && this.entryCheckBoxRow2){
+ if(this.enableMenuFade){
+ dojo.fadeOut({node: this.entryCheckBoxRow,duration: 250}).play();
+ dojo.fadeOut({node: this.entryCheckBoxRow2,duration: 250}).play();
+ }
+ }
+ }
+ },
+
+ clear: function(){
+ // summary:
+ // Function to clear the state of the widget.
+ // description:
+ // Function to clear the state of the widget.
+ this.destroyDescendants();
+ this._entry=null;
+ this._feed=null;
+ this.clearNodes();
+ },
+
+ clearNodes: function(){
+ // summary:
+ // Function to clear all the display nodes for the ATOM entry from the viewer.
+ // description:
+ // Function to clear all the display nodes for the ATOM entry from the viewer.
+
+ dojo.forEach([
+ "entryTitleRow", "entryAuthorRow", "entryContributorRow", "entrySummaryRow", "entryContentRow",
+ "entryIdRow", "entryUpdatedRow"
+ ], function(node){
+ dojo.style(this[node], "display", "none");
+ }, this);
+
+ dojo.forEach([
+ "entryTitleNode", "entryTitleHeader", "entryAuthorHeader", "entryContributorHeader",
+ "entryContributorNode", "entrySummaryHeader", "entrySummaryNode", "entryContentHeader",
+ "entryContentNode", "entryIdNode", "entryIdHeader", "entryUpdatedHeader", "entryUpdatedNode"
+ ], function(part){
+ while(this[part].firstChild){
+ dojo.destroy(this[part].firstChild);
+ }
+ }
+ ,this);
+
+ },
+
+ setEntry: function(/*object*/entry, /*object*/feed, /*boolean*/leaveMenuState){
+ // summary:
+ // Function to set the current entry that is being edited.
+ // description:
+ // Function to set the current entry that is being edited.
+ //
+ // entry:
+ // Instance of dojox.atom.io.model.Entry to display for reading/editing.
+ this.clear();
+ this._validEntryFields = {};
+ this._entry = entry;
+ this._feed = feed;
+
+ if(entry !== null){
+ // Handle the title.
+ if(this.entryTitleHeader){
+ this.setTitleHeader(this.entryTitleHeader, entry);
+ }
+
+ if(this.entryTitleNode){
+ this.setTitle(this.entryTitleNode, this._editMode, entry);
+ }
+
+ if(this.entryAuthorHeader){
+ this.setAuthorsHeader(this.entryAuthorHeader, entry);
+ }
+
+ if(this.entryAuthorNode){
+ this.setAuthors(this.entryAuthorNode, this._editMode, entry);
+ }
+
+ if(this.entryContributorHeader){
+ this.setContributorsHeader(this.entryContributorHeader, entry);
+ }
+
+ if(this.entryContributorNode){
+ this.setContributors(this.entryContributorNode, this._editMode, entry);
+ }
+
+ if(this.entryIdHeader){
+ this.setIdHeader(this.entryIdHeader, entry);
+ }
+
+ if(this.entryIdNode){
+ this.setId(this.entryIdNode, this._editMode, entry);
+ }
+
+ if(this.entryUpdatedHeader){
+ this.setUpdatedHeader(this.entryUpdatedHeader, entry);
+ }
+
+ if(this.entryUpdatedNode){
+ this.setUpdated(this.entryUpdatedNode, this._editMode, entry);
+ }
+
+ if(this.entrySummaryHeader){
+ this.setSummaryHeader(this.entrySummaryHeader, entry);
+ }
+
+ if(this.entrySummaryNode){
+ this.setSummary(this.entrySummaryNode, this._editMode, entry);
+ }
+
+ if(this.entryContentHeader){
+ this.setContentHeader(this.entryContentHeader, entry);
+ }
+
+ if(this.entryContentNode){
+ this.setContent(this.entryContentNode, this._editMode, entry);
+ }
+ }
+ this._displaySections();
+ },
+
+ setTitleHeader: function(/*DOM node*/titleHeaderNode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the title header node in the template to some value.
+ // description:
+ // Function to set the contents of the title header node in the template to some value.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // titleAchorNode:
+ // The DOM node to attach the title data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ //
+ if(entry.title && entry.title.value && entry.title.value !== null){
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedEntryViewer");
+ var titleHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.title});
+ titleHeaderNode.appendChild(titleHeader.domNode);
+ }
+ },
+
+ setTitle: function(titleAnchorNode, editMode, entry){
+ // summary:
+ // Function to set the contents of the title node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the title node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // titleAchorNode:
+ // The DOM node to attach the title data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.title && entry.title.value && entry.title.value !== null){
+ if(entry.title.type == "text"){
+ var titleNode = document.createTextNode(entry.title.value);
+ titleAnchorNode.appendChild(titleNode);
+ }else{
+ var titleViewNode = document.createElement("span");
+ var titleView = new dijit.layout.ContentPane({refreshOnShow: true, executeScripts: false}, titleViewNode);
+ titleView.attr('content', entry.title.value);
+ titleAnchorNode.appendChild(titleView.domNode);
+ }
+ this.setFieldValidity("title", true);
+ }
+ },
+
+ setAuthorsHeader: function(/*DOM node*/authorHeaderNode, /*object*/entry){
+ // summary:
+ // Function to set the title format for the authors section of the author row in the template to some value from the entry.
+ // description:
+ // Function to set the title format for the authors section of the author row in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the author data is filled out from an entry.
+ //
+ // authorHeaderNode:
+ // The DOM node to attach the author section header data to.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.authors && entry.authors.length > 0){
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedEntryViewer");
+ var authorHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.authors});
+ authorHeaderNode.appendChild(authorHeader.domNode);
+ }
+ },
+
+ setAuthors: function(/*DOM node*/authorsAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the author node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the author node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // authorsAchorNode:
+ // The DOM node to attach the author data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ authorsAnchorNode.innerHTML = "";
+ if(entry.authors && entry.authors.length > 0){
+ for(var i in entry.authors){
+ if(entry.authors[i].name){
+ var anchor = authorsAnchorNode;
+ if(entry.authors[i].uri){
+ var link = document.createElement("a");
+ anchor.appendChild(link);
+ link.href = entry.authors[i].uri;
+ anchor = link;
+ }
+ var name = entry.authors[i].name;
+ if(entry.authors[i].email){
+ name = name + " (" + entry.authors[i].email + ")";
+ }
+ var authorNode = document.createTextNode(name);
+ anchor.appendChild(authorNode);
+ var breakNode = document.createElement("br");
+ authorsAnchorNode.appendChild(breakNode);
+ this.setFieldValidity("authors", true);
+ }
+ }
+ }
+ },
+
+ setContributorsHeader: function(/*DOM node*/contributorsHeaderNode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the contributor header node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the contributor header node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // contributorsHeaderNode:
+ // The DOM node to attach the contributor title to.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.contributors && entry.contributors.length > 0){
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedEntryViewer");
+ var contributorHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.contributors});
+ contributorsHeaderNode.appendChild(contributorHeader.domNode);
+ }
+ },
+
+
+ setContributors: function(/*DOM node*/contributorsAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the contributor node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the contributor node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // contributorsAnchorNode:
+ // The DOM node to attach the contributor data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.contributors && entry.contributors.length > 0){
+ for(var i in entry.contributors){
+ var contributorNode = document.createTextNode(entry.contributors[i].name);
+ contributorsAnchorNode.appendChild(contributorNode);
+ var breakNode = document.createElement("br");
+ contributorsAnchorNode.appendChild(breakNode);
+ this.setFieldValidity("contributors", true);
+ }
+ }
+ },
+
+
+ setIdHeader: function(/*DOM node*/idHeaderNode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the ID node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the ID node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // idAnchorNode:
+ // The DOM node to attach the ID data to.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.id && entry.id !== null){
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedEntryViewer");
+ var idHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.id});
+ idHeaderNode.appendChild(idHeader.domNode);
+ }
+ },
+
+
+ setId: function(/*DOM node*/idAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the ID node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the ID node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // idAnchorNode:
+ // The DOM node to attach the ID data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.id && entry.id !== null){
+ var idNode = document.createTextNode(entry.id);
+ idAnchorNode.appendChild(idNode);
+ this.setFieldValidity("id", true);
+ }
+ },
+
+ setUpdatedHeader: function(/*DOM node*/updatedHeaderNode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the updated header node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the updated header node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // updatedHeaderNode:
+ // The DOM node to attach the updated header data to.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.updated && entry.updated !== null){
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedEntryViewer");
+ var updatedHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.updated});
+ updatedHeaderNode.appendChild(updatedHeader.domNode);
+ }
+ },
+
+ setUpdated: function(/*DOM node*/updatedAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the updated node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the updated node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // updatedAnchorNode:
+ // The DOM node to attach the udpated data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.updated && entry.updated !== null){
+ var updatedNode = document.createTextNode(entry.updated);
+ updatedAnchorNode.appendChild(updatedNode);
+ this.setFieldValidity("updated", true);
+ }
+ },
+
+ setSummaryHeader: function(/*DOM node*/summaryHeaderNode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the summary node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the summary node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // summaryHeaderNode:
+ // The DOM node to attach the summary title to.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.summary && entry.summary.value && entry.summary.value !== null){
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedEntryViewer");
+ var summaryHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.summary});
+ summaryHeaderNode.appendChild(summaryHeader.domNode);
+ }
+ },
+
+
+ setSummary: function(/*DOM node*/summaryAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the summary node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the summary node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // summaryAnchorNode:
+ // The DOM node to attach the summary data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.summary && entry.summary.value && entry.summary.value !== null){
+ var summaryViewNode = document.createElement("span");
+ var summaryView = new dijit.layout.ContentPane({refreshOnShow: true, executeScripts: false}, summaryViewNode);
+ summaryView.attr('content', entry.summary.value);
+ summaryAnchorNode.appendChild(summaryView.domNode);
+ this.setFieldValidity("summary", true);
+ }
+ },
+
+ setContentHeader: function(/*DOM node*/contentHeaderNode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the content node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the content node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // contentHeaderNode:
+ // The DOM node to attach the content data to.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.content && entry.content.value && entry.content.value !== null){
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedEntryViewer");
+ var contentHeader = new dojox.atom.widget.EntryHeader({title: _nlsResources.content});
+ contentHeaderNode.appendChild(contentHeader.domNode);
+ }
+ },
+
+ setContent: function(/*DOM node*/contentAnchorNode, /*boolean*/editMode, /*object*/entry){
+ // summary:
+ // Function to set the contents of the content node in the template to some value from the entry.
+ // description:
+ // Function to set the contents of the content node in the template to some value from the entry.
+ // This exists specifically so users can over-ride how the title data is filled out from an entry.
+ //
+ // contentAnchorNode:
+ // The DOM node to attach the content data to.
+ // editMode:
+ // Boolean to indicate if the display should be in edit mode or not.
+ // entry:
+ // The Feed Entry to work with.
+ if(entry.content && entry.content.value && entry.content.value !== null){
+ var contentViewNode = document.createElement("span");
+ var contentView = new dijit.layout.ContentPane({refreshOnShow: true, executeScripts: false},contentViewNode);
+ contentView.attr('content', entry.content.value);
+ contentAnchorNode.appendChild(contentView.domNode);
+ this.setFieldValidity("content", true);
+ }
+ },
+
+
+ _displaySections: function(){
+ // summary:
+ // Internal function for determining which sections of the view to actually display.
+ // description:
+ // Internal function for determining which sections of the view to actually display.
+ //
+ // returns:
+ // Nothing.
+ dojo.style(this.entryTitleRow, 'display', 'none');
+ dojo.style(this.entryAuthorRow, 'display', 'none');
+ dojo.style(this.entryContributorRow, 'display', 'none');
+ dojo.style(this.entrySummaryRow, 'display', 'none');
+ dojo.style(this.entryContentRow, 'display', 'none');
+ dojo.style(this.entryIdRow, 'display', 'none');
+ dojo.style(this.entryUpdatedRow, 'display', 'none');
+
+ for(var i in this._displayEntrySections){
+ var section = this._displayEntrySections[i].toLowerCase();
+ if(section === "title" && this.isFieldValid("title")){
+ dojo.style(this.entryTitleRow, 'display', '');
+ }
+ if(section === "authors" && this.isFieldValid("authors")){
+ dojo.style(this.entryAuthorRow, 'display', '');
+ }
+ if(section === "contributors" && this.isFieldValid("contributors")){
+ dojo.style(this.entryContributorRow, 'display', '');
+ }
+ if(section === "summary" && this.isFieldValid("summary")){
+ dojo.style(this.entrySummaryRow, 'display', '');
+ }
+ if(section === "content" && this.isFieldValid("content")){
+ dojo.style(this.entryContentRow, 'display', '');
+ }
+ if(section === "id" && this.isFieldValid("id")){
+ dojo.style(this.entryIdRow, 'display', '');
+ }
+ if(section === "updated" && this.isFieldValid("updated")){
+ dojo.style(this.entryUpdatedRow, 'display', '');
+ }
+
+ }
+ },
+
+ setDisplaySections: function(/*array*/sectionsArray){
+ // summary:
+ // Function for setting which sections of the entry should be displayed.
+ // description:
+ // Function for setting which sections of the entry should be displayed.
+ //
+ // sectionsArray:
+ // Array of string names that indicate which sections to display.
+ //
+ // returns:
+ // Nothing.
+ if(sectionsArray !== null){
+ this._displayEntrySections = sectionsArray;
+ this._displaySections();
+ }else{
+ this._displayEntrySections = ["title","authors","contributors","summary","content","id","updated"];
+ }
+ },
+
+ _setDisplaySectionsCheckboxes: function(){
+ // summary:
+ // Internal function for setting which checkboxes on the display are selected.
+ // description:
+ // Internal function for setting which checkboxes on the display are selected.
+ //
+ // returns:
+ // Nothing.
+ var items = ["title","authors","contributors","summary","content","id","updated"];
+ for(var i in items){
+ if(dojo.indexOf(this._displayEntrySections, items[i]) == -1){
+ dojo.style(this["feedEntryCell"+items[i]], 'display', 'none');
+ }else{
+ this["feedEntryCheckBox"+items[i].substring(0,1).toUpperCase()+items[i].substring(1)].checked=true;
+ }
+ }
+ },
+
+ _readDisplaySections: function(){
+ // summary:
+ // Internal function for reading what is currently checked for display and generating the display list from it.
+ // description:
+ // Internal function for reading what is currently checked for display and generating the display list from it.
+ //
+ // returns:
+ // Nothing.
+ var checkedList = [];
+
+ if(this.feedEntryCheckBoxTitle.checked){
+ checkedList.push("title");
+ }
+ if(this.feedEntryCheckBoxAuthors.checked){
+ checkedList.push("authors");
+ }
+ if(this.feedEntryCheckBoxContributors.checked){
+ checkedList.push("contributors");
+ }
+ if(this.feedEntryCheckBoxSummary.checked){
+ checkedList.push("summary");
+ }
+ if(this.feedEntryCheckBoxContent.checked){
+ checkedList.push("content");
+ }
+ if(this.feedEntryCheckBoxId.checked){
+ checkedList.push("id");
+ }
+ if(this.feedEntryCheckBoxUpdated.checked){
+ checkedList.push("updated");
+ }
+ this._displayEntrySections = checkedList;
+ },
+
+ _toggleCheckbox: function(/*object*/checkBox){
+ // summary:
+ // Internal function for determining of a particular entry is editable.
+ // description:
+ // Internal function for determining of a particular entry is editable.
+ // This is used for determining if the delete action should be displayed or not.
+ //
+ // checkBox:
+ // The checkbox object to toggle the selection on.
+ //
+ // returns:
+ // Nothing
+ if(checkBox.checked){
+ checkBox.checked=false;
+ }else{
+ checkBox.checked=true;
+ }
+ this._readDisplaySections();
+ this._displaySections();
+ },
+
+ _toggleOptions: function(/*object*/checkBox){
+ // summary:
+ // Internal function for determining of a particular entry is editable.
+ // description:
+ // Internal function for determining of a particular entry is editable.
+ // This is used for determining if the delete action should be displayed or not.
+ //
+ // checkBox:
+ // The checkbox object to toggle the selection on.
+ //
+ // returns:
+ // Nothing
+ if(this.enableMenu){
+ var fade = null;
+ var anim;
+ var anim2;
+ if(this._optionButtonDisplayed){
+ if(this.enableMenuFade){
+ anim = dojo.fadeOut({node: this.entryCheckBoxDisplayOptions,duration: 250});
+ dojo.connect(anim, "onEnd", this, function(){
+ dojo.style(this.entryCheckBoxDisplayOptions, 'display', 'none');
+ dojo.style(this.entryCheckBoxRow, 'display', '');
+ dojo.style(this.entryCheckBoxRow2, 'display', '');
+ dojo.fadeIn({node: this.entryCheckBoxRow, duration: 250}).play();
+ dojo.fadeIn({node: this.entryCheckBoxRow2, duration: 250}).play();
+ });
+ anim.play();
+ }else{
+ dojo.style(this.entryCheckBoxDisplayOptions, 'display', 'none');
+ dojo.style(this.entryCheckBoxRow, 'display', '');
+ dojo.style(this.entryCheckBoxRow2, 'display', '');
+ }
+ this._optionButtonDisplayed=false;
+ }else{
+ if(this.enableMenuFade){
+ anim = dojo.fadeOut({node: this.entryCheckBoxRow,duration: 250});
+ anim2 = dojo.fadeOut({node: this.entryCheckBoxRow2,duration: 250});
+ dojo.connect(anim, "onEnd", this, function(){
+ dojo.style(this.entryCheckBoxRow, 'display', 'none');
+ dojo.style(this.entryCheckBoxRow2, 'display', 'none');
+ dojo.style(this.entryCheckBoxDisplayOptions, 'display', '');
+ dojo.fadeIn({node: this.entryCheckBoxDisplayOptions, duration: 250}).play();
+ });
+ anim.play();
+ anim2.play();
+ }else{
+ dojo.style(this.entryCheckBoxRow, 'display', 'none');
+ dojo.style(this.entryCheckBoxRow2, 'display', 'none');
+ dojo.style(this.entryCheckBoxDisplayOptions, 'display', '');
+ }
+ this._optionButtonDisplayed=true;
+ }
+ }
+ },
+
+ _handleEvent: function(/*object*/entrySelectionEvent){
+ // summary:
+ // Internal function for listening to a topic that will handle entry notification.
+ // description:
+ // Internal function for listening to a topic that will handle entry notification.
+ //
+ // entrySelectionEvent:
+ // The topic message containing the entry that was selected for view.
+ //
+ // returns:
+ // Nothing.
+ if(entrySelectionEvent.source != this){
+ if(entrySelectionEvent.action == "set" && entrySelectionEvent.entry){
+ this.setEntry(entrySelectionEvent.entry, entrySelectionEvent.feed);
+ }else if(entrySelectionEvent.action == "delete" && entrySelectionEvent.entry && entrySelectionEvent.entry == this._entry){
+ this.clear();
+ }
+ }
+ },
+
+ setFieldValidity: function(/*string*/field, /*boolean*/isValid){
+ // summary:
+ // Function to set whether a field in the view is valid and displayable.
+ // description:
+ // Function to set whether a field in the view is valid and displayable.
+ // This is needed for over-riding of the set* functions and customization of how data is displayed in the attach point.
+ // So if custom implementations use their own display logic, they can still enable the field.
+ //
+ // field:
+ // The field name to set the valid parameter on. Such as 'content', 'id', etc.
+ // isValid:
+ // Flag denoting if the field is valid or not.
+ //
+ // returns:
+ // Nothing.
+ if(field){
+ var lowerField = field.toLowerCase();
+ this._validEntryFields[field] = isValid;
+ }
+ },
+
+ isFieldValid: function(/*string*/field){
+ // summary:
+ // Function to return if a displayable field is valid or not
+ // description:
+ // Function to return if a displayable field is valid or not
+ //
+ // field:
+ // The field name to get the valid parameter of. Such as 'content', 'id', etc.
+ //
+ // returns:
+ // boolean denoting if the field is valid and set.
+ return this._validEntryFields[field.toLowerCase()];
+ },
+
+ getEntry: function(){
+ return this._entry;
+ },
+
+ getFeed: function(){
+ return this._feed;
+ },
+
+ destroy: function(){
+ this.clear();
+ dojo.forEach(this._subscriptions, dojo.unsubscribe);
+ }
+});
+
+dojo.declare("dojox.atom.widget.EntryHeader",[dijit._Widget, dijit._Templated, dijit._Container],{
+ // summary:
+ // Widget representing a header in a FeedEntryViewer/Editor
+ // description:
+ // Widget representing a header in a FeedEntryViewer/Editor
+ title: "",
+ templateString: dojo.cache("dojox.atom", "widget/templates/EntryHeader.html", "<span dojoAttachPoint=\"entryHeaderNode\" class=\"entryHeaderNode\"></span>\r\n"),
+
+ postCreate: function(){
+ this.setListHeader();
+ },
+
+ setListHeader: function(/*string*/title){
+ this.clear();
+ if(title){
+ this.title = title;
+ }
+ var textNode = document.createTextNode(this.title);
+ this.entryHeaderNode.appendChild(textNode);
+ },
+
+ clear: function(){
+ this.destroyDescendants();
+ if(this.entryHeaderNode){
+ for(var i = 0; i < this.entryHeaderNode.childNodes.length; i++){
+ this.entryHeaderNode.removeChild(this.entryHeaderNode.childNodes[i]);
+ }
+ }
+ },
+
+ destroy: function(){
+ this.clear();
+ }
+});
+
+}
+
+}};});
diff --git a/js/dojo-1.6/dojox/atom/widget/FeedViewer.js b/js/dojo-1.6/dojox/atom/widget/FeedViewer.js
new file mode 100644
index 0000000..ff53394
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/FeedViewer.js
@@ -0,0 +1,809 @@
+/*
+ Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+if(!dojo._hasResource["dojox.atom.widget.FeedViewer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.atom.widget.FeedViewer"] = true;
+dojo.provide("dojox.atom.widget.FeedViewer");
+
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Container");
+dojo.require("dojox.atom.io.Connection");
+dojo.requireLocalization("dojox.atom.widget", "FeedViewerEntry", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
+
+dojo.experimental("dojox.atom.widget.FeedViewer");
+
+dojo.declare("dojox.atom.widget.FeedViewer",[dijit._Widget, dijit._Templated, dijit._Container],{
+ // summary:
+ // An ATOM feed viewer that allows for viewing a feed, deleting entries, and editing entries.
+ // description:
+ // An ATOM feed viewer that allows for viewing a feed, deleting entries, and editing entries.
+ feedViewerTableBody: null, //The body of the feed viewer table so we can access it and populate it. Will be assigned via template.
+ feedViewerTable: null, //The overal table container which contains the feed viewer table. Will be assigned via template.
+ entrySelectionTopic: "", //The topic to broadcast when any entry is clicked so that a listener can pick up it and display it.
+ url: "", //The URL to which to connect to initially on creation.
+ xmethod: false,
+ localSaveOnly: false,
+
+ //Templates for the HTML rendering. Need to figure these out better, admittedly.
+ templateString: dojo.cache("dojox.atom", "widget/templates/FeedViewer.html", "<div class=\"feedViewerContainer\" dojoAttachPoint=\"feedViewerContainerNode\">\r\n\t<table cellspacing=\"0\" cellpadding=\"0\" class=\"feedViewerTable\">\r\n\t\t<tbody dojoAttachPoint=\"feedViewerTableBody\" class=\"feedViewerTableBody\">\r\n\t\t</tbody>\r\n\t</table>\r\n</div>\r\n"),
+
+ _feed: null,
+ _currentSelection: null, // Currently selected entry
+
+ _includeFilters: null,
+
+ alertsEnabled: false,
+
+ postCreate: function(){
+ // summary:
+ // The postCreate function.
+ // description:
+ // The postCreate function. Creates our AtomIO object for future interactions and subscribes to the
+ // event given in markup/creation.
+ this._includeFilters = [];
+
+ if(this.entrySelectionTopic !== ""){
+ this._subscriptions = [dojo.subscribe(this.entrySelectionTopic, this, "_handleEvent")];
+ }
+ this.atomIO = new dojox.atom.io.Connection();
+ this.childWidgets = [];
+ },
+
+ startup: function(){
+ // summary:
+ // The startup function.
+ // description:
+ // The startup function. Parses the filters and sets the feed based on the given url.
+ this.containerNode = this.feedViewerTableBody;
+ var children = this.getDescendants();
+ for(var i in children){
+ var child = children[i];
+ if(child && child.isFilter){
+ this._includeFilters.push(new dojox.atom.widget.FeedViewer.CategoryIncludeFilter(child.scheme, child.term, child.label));
+ child.destroy();
+ }
+ }
+
+ if(this.url !== ""){
+ this.setFeedFromUrl(this.url);
+ }
+ },
+
+ clear: function(){
+ // summary:
+ // Function clearing all current entries in the feed view.
+ // description:
+ // Function clearing all current entries in the feed view.
+ //
+ // returns:
+ // Nothing.
+ this.destroyDescendants();
+ },
+
+ setFeedFromUrl: function(/*string*/url){
+ // summary:
+ // Function setting the feed from a URL which to get the feed.
+ // description:
+ // Function setting the dojox.atom.io.model.Feed data into the view.
+ //
+ // url:
+ // The URL to the feed to load.
+ //
+ // returns:
+ // Nothing.
+ if(url !== ""){
+ if(this._isRelativeURL(url)){
+ var baseUrl = "";
+ if(url.charAt(0) !== '/'){
+ baseUrl = this._calculateBaseURL(window.location.href, true);
+ }else{
+ baseUrl = this._calculateBaseURL(window.location.href, false);
+ }
+ this.url = baseUrl + url;
+ }
+
+ this.atomIO.getFeed(url,dojo.hitch(this,this.setFeed));
+ }
+ },
+
+
+ setFeed: function(/*object*/feed){
+ // summary:
+ // Function setting the dojox.atom.io.model.Feed data into the view.
+ // description:
+ // Function setting the dojox.atom.io.model.Feed data into the view.
+ //
+ // entry:
+ // The dojox.atom.io.model.Feed object to process
+ //
+ // returns:
+ // Nothing.
+ this._feed = feed;
+ this.clear();
+ var entrySorter=function(a,b){
+ var dispA = this._displayDateForEntry(a);
+ var dispB = this._displayDateForEntry(b);
+ if(dispA > dispB){return -1;}
+ if(dispA < dispB){return 1;}
+ return 0;
+ };
+
+ // This function may not be safe in different locales.
+ var groupingStr = function(dateStr){
+ var dpts = dateStr.split(',');
+
+ dpts.pop(); // remove year and time
+ return dpts.join(",");
+ };
+ var sortedEntries = feed.entries.sort(dojo.hitch(this,entrySorter));
+ if(feed){
+ var lastSectionTitle = null;
+ for(var i=0;i<sortedEntries.length;i++){
+
+ var entry = sortedEntries[i];
+
+ if(this._isFilterAccepted(entry)){
+ var time = this._displayDateForEntry(entry);
+ var sectionTitle = "";
+
+ if(time !== null){
+ sectionTitle = groupingStr(time.toLocaleString());
+
+ if(sectionTitle === "" ){
+ //Generally an issue on Opera with how its toLocaleString() works, so do a quick and dirty date construction M/D/Y
+ sectionTitle = "" + (time.getMonth() + 1) + "/" + time.getDate() + "/" + time.getFullYear();
+ }
+ }
+ if((lastSectionTitle === null) || (lastSectionTitle != sectionTitle)){
+ this.appendGrouping(sectionTitle);
+ lastSectionTitle = sectionTitle;
+ }
+ this.appendEntry(entry);
+ }
+ }
+ }
+ },
+
+ _displayDateForEntry: function(/*object*/entry){
+ // summary:
+ // Internal function for determining the appropriate date to display.
+ // description: Internal function for determining of a particular entry is editable.
+ //
+ // entry:
+ // The dojox.atom.io.model.Entry object to examine.
+ //
+ // returns:
+ // An appropriate date for the feed viewer display.
+ if(entry.updated){return entry.updated;}
+ if(entry.modified){return entry.modified;}
+ if(entry.issued){return entry.issued;}
+ return new Date();
+ },
+
+ appendGrouping: function(/*string*/titleText){
+ // summary:
+ // Function for appending a new grouping of entries to the feed view.
+ // description:
+ // Function for appending a grouping of entries to the feed view.
+ //
+ // entry:
+ // The title of the new grouping to create on the view.
+ //
+ // returns:
+ // Nothing.
+ var entryWidget = new dojox.atom.widget.FeedViewerGrouping({});
+ entryWidget.setText(titleText);
+ this.addChild(entryWidget);
+ this.childWidgets.push(entryWidget);
+ },
+
+ appendEntry: function(/*object*/entry){
+ // summary:
+ // Function for appending an entry to the feed view.
+ // description:
+ // Function for appending an entry to the feed view.
+ //
+ // entry:
+ // The dojox.atom.io.model.Entry object to append
+ //
+ // returns:
+ // Nothing.
+ var entryWidget = new dojox.atom.widget.FeedViewerEntry({"xmethod": this.xmethod});
+ entryWidget.setTitle(entry.title.value);
+ entryWidget.setTime(this._displayDateForEntry(entry).toLocaleTimeString());
+ entryWidget.entrySelectionTopic = this.entrySelectionTopic;
+ entryWidget.feed = this;
+ this.addChild(entryWidget);
+ this.childWidgets.push(entryWidget);
+ this.connect(entryWidget, "onClick", "_rowSelected");
+ entry.domNode = entryWidget.entryNode;
+
+ //Need to set up a bi-directional reference here to control events between the two.
+ entry._entryWidget = entryWidget;
+ entryWidget.entry = entry;
+ },
+
+ deleteEntry: function(/*object*/entryRow){
+ // summary:
+ // Function for deleting a row from the view
+ // description:
+ // Function for deleting a row from the view
+ if(!this.localSaveOnly){
+ this.atomIO.deleteEntry(entryRow.entry, dojo.hitch(this, this._removeEntry, entryRow), null, this.xmethod);
+ }else{
+ this._removeEntry(entryRow, true);
+ }
+ dojo.publish(this.entrySelectionTopic, [{ action: "delete", source: this, entry: entryRow.entry }]);
+ },
+
+ _removeEntry: function(/*FeedViewerEntry*/ entry, /* boolean */success){
+ // summary:
+ // callback for when an entry is deleted from a feed.
+ // description:
+ // callback for when an entry is deleted from a feed.
+ if(success){
+ /* Check if this is the last Entry beneath the given date */
+ var idx = dojo.indexOf(this.childWidgets, entry);
+ var before = this.childWidgets[idx-1];
+ var after = this.childWidgets[idx+1];
+ if( before.declaredClass === 'dojox.atom.widget.FeedViewerGrouping' &&
+ (after === undefined || after.declaredClass === 'dojox.atom.widget.FeedViewerGrouping')){
+ before.destroy();
+ }
+
+ /* Destroy the FeedViewerEntry to remove it from the view */
+ entry.destroy();
+ }else{}
+ },
+
+ _rowSelected: function(/*object*/evt){
+ // summary:
+ // Internal function for handling the selection of feed entries.
+ // description:
+ // Internal function for handling the selection of feed entries.
+ //
+ // evt:
+ // The click event that triggered a selection.
+ //
+ // returns:
+ // Nothing.
+ var selectedNode = evt.target;
+ while(selectedNode){
+ if(selectedNode.attributes){
+ var widgetid = selectedNode.attributes.getNamedItem("widgetid");
+ if(widgetid && widgetid.value.indexOf("FeedViewerEntry") != -1){
+ break;
+ }
+ }
+ selectedNode = selectedNode.parentNode;
+ }
+
+ for(var i=0;i<this._feed.entries.length;i++){
+ var entry = this._feed.entries[i];
+ if( (selectedNode === entry.domNode) && (this._currentSelection !== entry) ){
+ //Found it and it isn't already selected.
+ dojo.addClass(entry.domNode, "feedViewerEntrySelected");
+ dojo.removeClass(entry._entryWidget.timeNode, "feedViewerEntryUpdated");
+ dojo.addClass(entry._entryWidget.timeNode, "feedViewerEntryUpdatedSelected");
+
+ this.onEntrySelected(entry);
+ if(this.entrySelectionTopic !== ""){
+ dojo.publish(this.entrySelectionTopic, [{ action: "set", source: this, feed: this._feed, entry: entry }]);
+ }
+ if(this._isEditable(entry)){
+ entry._entryWidget.enableDelete();
+ }
+
+ this._deselectCurrentSelection();
+ this._currentSelection = entry;
+ break;
+ }else if( (selectedNode === entry.domNode) && (this._currentSelection === entry) ){
+ //Found it and it is the current selection, we just want to de-select it so users can 'unselect rows' if they want.
+ dojo.publish(this.entrySelectionTopic, [{ action: "delete", source: this, entry: entry }]);
+ this._deselectCurrentSelection();
+ break;
+ }
+ }
+ },
+
+ _deselectCurrentSelection: function(){
+ // summary:
+ // Internal function for unselecting the current selection.
+ // description:
+ // Internal function for unselecting the current selection.
+ //
+ // returns:
+ // Nothing.
+ if(this._currentSelection){
+ dojo.addClass(this._currentSelection._entryWidget.timeNode, "feedViewerEntryUpdated");
+ dojo.removeClass(this._currentSelection.domNode, "feedViewerEntrySelected");
+ dojo.removeClass(this._currentSelection._entryWidget.timeNode, "feedViewerEntryUpdatedSelected");
+ this._currentSelection._entryWidget.disableDelete();
+ this._currentSelection = null;
+ }
+ },
+
+
+ _isEditable: function(/*object*/entry){
+ // summary:
+ // Internal function for determining of a particular entry is editable.
+ // description:
+ // Internal function for determining of a particular entry is editable.
+ // This is used for determining if the delete action should be displayed or not.
+ //
+ // entry:
+ // The dojox.atom.io.model.Entry object to examine
+ //
+ // returns:
+ // Boolean denoting if the entry seems editable or not..
+ var retVal = false;
+ if(entry && entry !== null && entry.links && entry.links !== null){
+ for(var x in entry.links){
+ if(entry.links[x].rel && entry.links[x].rel == "edit"){
+ retVal = true;
+ break;
+ }
+ }
+ }
+ return retVal;
+ },
+
+ onEntrySelected: function(/*object*/entry){
+ // summary:
+ // Function intended for over-riding/replacement as an attachpoint to for other items to recieve
+ // selection notification.
+ // description: Function intended for over0-riding/replacement as an attachpoint to for other items to recieve
+ // selection notification.
+ //
+ // entry:
+ // The dojox.atom.io.model.Entry object selected.
+ //
+ // returns:
+ // Nothing.
+ },
+
+ _isRelativeURL: function(/*string*/url){
+ // summary:
+ // Method to determine if the URL is relative or absolute.
+ // description:
+ // Method to determine if the URL is relative or absolute. Basic assumption is if it doesn't start
+ // with http:// or file://, it's relative to the current document.
+ //
+ // url:
+ // The URL to inspect.
+ //
+ // returns:
+ // boolean indicating whether it's a relative url or not.
+ var isFileURL = function(url){
+ var retVal = false;
+ if(url.indexOf("file://") === 0){
+ retVal = true;
+ }
+ return retVal;
+ }
+
+ var isHttpURL = function(url){
+ var retVal = false;
+ if(url.indexOf("http://") === 0){
+ retVal = true;
+ }
+ return retVal;
+ }
+
+ var retVal = false;
+ if(url !== null){
+ if(!isFileURL(url) && !isHttpURL(url)){
+ retVal = true;
+ }
+ }
+ return retVal;
+ },
+
+ _calculateBaseURL: function(/*string*/fullURL, /*boolean*/currentPageRelative){
+ // summary:
+ // Internal function to calculate a baseline URL from the provided full URL.
+ // description:
+ // Internal function to calculate a baseline URL from the provided full URL.
+ //
+ // fullURL:
+ // The full URL as a string.
+ // currentPageRelative:
+ // Flag to denote of the base URL should be calculated as just the server base, or relative to the current page/location in the URL.
+ //
+ // returns:
+ // String of the baseline URL
+ var baseURL = null;
+ if(fullURL !== null){
+ //Check to see if we need to strip off any query parameters from the URL.
+ var index = fullURL.indexOf("?");
+ if(index != -1){
+ fullURL = fullURL.substring(0,index);
+ //console.debug("Removed query parameters. URL now: " + fullURL);
+ }
+
+ if(currentPageRelative){
+ //Relative to the 'current page' in the URL, so we need to trim that off.
+ //Now we need to trim if necessary. If it ends in /, then we don't have a filename to trim off
+ //so we can return.
+ index = fullURL.lastIndexOf("/");
+ if((index > 0) && (index < fullURL.length) && (index !== (fullURL.length -1))){
+ //We want to include the terminating /
+ baseURL = fullURL.substring(0,(index + 1));
+ }else{
+ baseURL = fullURL;
+ }
+ }else{
+ //We want to find the first occurance of / after the <protocol>://
+ index = fullURL.indexOf("://");
+ if(index > 0){
+ index = index + 3;
+ var protocol = fullURL.substring(0,index);
+ var fragmentURL = fullURL.substring(index, fullURL.length);
+ index = fragmentURL.indexOf("/");
+ if((index < fragmentURL.length) && (index > 0) ){
+ baseURL = protocol + fragmentURL.substring(0,index);
+ }else{
+ baseURL = protocol + fragmentURL;
+ }
+ }
+ }
+ }
+ return baseURL;
+ },
+
+ _isFilterAccepted: function(/*object*/entry) {
+ // summary:
+ // Internal function to do matching of category filters to widgets.
+ // description:
+ // Internal function to do matching of category filters to widgets.
+ //
+ // returns:
+ // boolean denoting if this entry matched one of the accept filters.
+ var accepted = false;
+ if (this._includeFilters && (this._includeFilters.length > 0)) {
+ for (var i = 0; i < this._includeFilters.length; i++) {
+ var filter = this._includeFilters[i];
+ if (filter.match(entry)) {
+ accepted = true;
+ break;
+ }
+ }
+ }
+ else {
+ accepted = true;
+ }
+ return accepted;
+ },
+
+ addCategoryIncludeFilter: function(/*object*/filter) {
+ // summary:
+ // Function to add a filter for entry inclusion in the feed view.
+ // description:
+ // Function to add a filter for entry inclusion in the feed view.
+ //
+ // filter:
+ // The basic items to filter on and the values.
+ // Should be of format: {scheme: <some text or null>, term: <some text or null>, label: <some text or null>}
+ //
+ // returns:
+ // Nothing.
+ if (filter) {
+ var scheme = filter.scheme;
+ var term = filter.term;
+ var label = filter.label;
+ var addIt = true;
+
+ if (!scheme) {
+ scheme = null;
+ }
+ if (!term) {
+ scheme = null;
+ }
+ if (!label) {
+ scheme = null;
+ }
+
+ if (this._includeFilters && this._includeFilters.length > 0) {
+ for (var i = 0; i < this._includeFilters.length; i++) {
+ var eFilter = this._includeFilters[i];
+ if ((eFilter.term === term) && (eFilter.scheme === scheme) && (eFilter.label === label)) {
+ //Verify we don't have this filter already.
+ addIt = false;
+ break;
+ }
+ }
+ }
+
+ if (addIt) {
+ this._includeFilters.push(dojox.atom.widget.FeedViewer.CategoryIncludeFilter(scheme, term, label));
+ }
+ }
+ },
+
+ removeCategoryIncludeFilter: function(/*object*/filter) {
+ // summary:
+ // Function to remove a filter for entry inclusion in the feed view.
+ // description:
+ // Function to remove a filter for entry inclusion in the feed view.
+ //
+ // filter:
+ // The basic items to identify the filter that is present.
+ // Should be of format: {scheme: <some text or null>, term: <some text or null>, label: <some text or null>}
+ //
+ // returns:
+ // Nothing.
+ if (filter) {
+ var scheme = filter.scheme;
+ var term = filter.term;
+ var label = filter.label;
+
+ if (!scheme) {
+ scheme = null;
+ }
+ if (!term) {
+ scheme = null;
+ }
+ if (!label) {
+ scheme = null;
+ }
+
+ var newFilters = [];
+ if (this._includeFilters && this._includeFilters.length > 0) {
+ for (var i = 0; i < this._includeFilters.length; i++) {
+ var eFilter = this._includeFilters[i];
+ if (!((eFilter.term === term) && (eFilter.scheme === scheme) && (eFilter.label === label))) {
+ //Keep only filters that do not match
+ newFilters.push(eFilter);
+ }
+ }
+ this._includeFilters = newFilters;
+ }
+ }
+ },
+
+ _handleEvent: function(/*object*/entrySelectionEvent) {
+ // summary:
+ // Internal function for listening to a topic that will handle entry notification.
+ // description:
+ // Internal function for listening to a topic that will handle entry notification.
+ //
+ // entrySelectionEvent:
+ // The topic message containing the entry that was selected for view.
+ //
+ // returns:
+ // Nothing.
+ if(entrySelectionEvent.source != this) {
+ if(entrySelectionEvent.action == "update" && entrySelectionEvent.entry) {
+ var evt = entrySelectionEvent;
+ if(!this.localSaveOnly){
+ this.atomIO.updateEntry(evt.entry, dojo.hitch(evt.source,evt.callback), null, true);
+ }
+ this._currentSelection._entryWidget.setTime(this._displayDateForEntry(evt.entry).toLocaleTimeString());
+ this._currentSelection._entryWidget.setTitle(evt.entry.title.value);
+ } else if(entrySelectionEvent.action == "post" && entrySelectionEvent.entry) {
+ if(!this.localSaveOnly){
+ this.atomIO.addEntry(entrySelectionEvent.entry, this.url, dojo.hitch(this,this._addEntry));
+ }else{
+ this._addEntry(entrySelectionEvent.entry);
+ }
+ }
+ }
+ },
+
+ _addEntry: function(/*object*/entry) {
+ // summary:
+ // callback function used when adding an entry to the feed.
+ // description:
+ // callback function used when adding an entry to the feed. After the entry has been posted to the feed,
+ // we add it to our feed representation (to show it on the page) and publish an event to update any entry viewers.
+ this._feed.addEntry(entry);
+ this.setFeed(this._feed);
+ dojo.publish(this.entrySelectionTopic, [{ action: "set", source: this, feed: this._feed, entry: entry }]);
+ },
+
+ destroy: function(){
+ // summary:
+ // Destroys this widget, including all descendants and subscriptions.
+ // description:
+ // Destroys this widget, including all descendants and subscriptions.
+ this.clear();
+ dojo.forEach(this._subscriptions, dojo.unsubscribe);
+ }
+});
+
+dojo.declare("dojox.atom.widget.FeedViewerEntry",[dijit._Widget, dijit._Templated],{
+ // summary:
+ // Widget for handling the display of an entry and specific events associated with it.
+ // description: Widget for handling the display of an entry and specific events associated with it.
+
+ templateString: dojo.cache("dojox.atom", "widget/templates/FeedViewerEntry.html", "<tr class=\"feedViewerEntry\" dojoAttachPoint=\"entryNode\" dojoAttachEvent=\"onclick:onClick\">\r\n <td class=\"feedViewerEntryUpdated\" dojoAttachPoint=\"timeNode\">\r\n </td>\r\n <td>\r\n <table border=\"0\" width=\"100%\" dojoAttachPoint=\"titleRow\">\r\n <tr padding=\"0\" border=\"0\">\r\n <td class=\"feedViewerEntryTitle\" dojoAttachPoint=\"titleNode\">\r\n </td>\r\n <td class=\"feedViewerEntryDelete\" align=\"right\">\r\n <span dojoAttachPoint=\"deleteButton\" dojoAttachEvent=\"onclick:deleteEntry\" class=\"feedViewerDeleteButton\" style=\"display:none;\">[delete]</span>\r\n </td>\r\n <tr>\r\n </table>\r\n </td>\r\n</tr>\r\n"),
+
+ entryNode: null,
+ timeNode: null,
+ deleteButton: null,
+ entry: null,
+ feed: null,
+
+ postCreate: function(){
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedViewerEntry");
+ this.deleteButton.innerHTML = _nlsResources.deleteButton;
+ },
+
+ setTitle: function(/*string*/text){
+ // summary:
+ // Function to set the title of the entry.
+ // description:
+ // Function to set the title of the entry.
+ //
+ // text:
+ // The title.
+ //
+ // returns:
+ // Nothing.
+ if (this.titleNode.lastChild){this.titleNode.removeChild(this.titleNode.lastChild);}
+
+ var titleTextNode = document.createElement("div");
+ titleTextNode.innerHTML = text;
+ this.titleNode.appendChild(titleTextNode);
+ },
+
+ setTime: function(/*string*/timeText){
+ // summary:
+ // Function to set the time of the entry.
+ // description:
+ // Function to set the time of the entry.
+ //
+ // timeText:
+ // The string form of the date.
+ //
+ // returns:
+ // Nothing.
+ if (this.timeNode.lastChild){this.timeNode.removeChild(this.timeNode.lastChild);}
+ var timeTextNode = document.createTextNode(timeText);
+ this.timeNode.appendChild(timeTextNode);
+ },
+
+ enableDelete: function(){
+ // summary:
+ // Function to enable the delete action on this entry.
+ // description:
+ // Function to enable the delete action on this entry.
+ //
+ // returns:
+ // Nothing.
+ if (this.deleteButton !== null) {
+ //TODO Fix this
+ this.deleteButton.style.display = 'inline';
+ }
+ },
+
+ disableDelete: function(){
+ // summary:
+ // Function to disable the delete action on this entry.
+ // description:
+ // Function to disable the delete action on this entry.
+ //
+ // returns:
+ // Nothing.
+ if (this.deleteButton !== null) {
+ this.deleteButton.style.display = 'none';
+ }
+ },
+
+ deleteEntry: function(/*object*/event) {
+ // summary:
+ // Function to handle the delete event and delete the entry.
+ // description:
+ // Function to handle the delete event and delete the entry.
+ //
+ // returns:
+ // Nothing.
+ event.preventDefault();
+ event.stopPropagation();
+ this.feed.deleteEntry(this);
+ },
+
+ onClick: function(/*object*/e){
+ // summary:
+ // Attach point for when a row is clicked on.
+ // description:
+ // Attach point for when a row is clicked on.
+ //
+ // e:
+ // The event generated by the click.
+ }
+});
+
+dojo.declare("dojox.atom.widget.FeedViewerGrouping",[dijit._Widget, dijit._Templated],{
+ // summary:
+ // Grouping of feed entries.
+ // description:
+ // Grouping of feed entries.
+ templateString: dojo.cache("dojox.atom", "widget/templates/FeedViewerGrouping.html", "<tr dojoAttachPoint=\"groupingNode\" class=\"feedViewerGrouping\">\r\n\t<td colspan=\"2\" dojoAttachPoint=\"titleNode\" class=\"feedViewerGroupingTitle\">\r\n\t</td>\r\n</tr>\r\n"),
+
+ groupingNode: null,
+ titleNode: null,
+
+ setText: function(text){
+ // summary:
+ // Sets the text to be shown above this grouping.
+ // description:
+ // Sets the text to be shown above this grouping.
+ //
+ // text:
+ // The text to show.
+ if (this.titleNode.lastChild){this.titleNode.removeChild(this.titleNode.lastChild);}
+ var textNode = document.createTextNode(text);
+ this.titleNode.appendChild(textNode);
+ }
+});
+
+dojo.declare("dojox.atom.widget.AtomEntryCategoryFilter",[dijit._Widget, dijit._Templated],{
+ // summary:
+ // A filter to be applied to the list of entries.
+ // description:
+ // A filter to be applied to the list of entries.
+ scheme: "",
+ term: "",
+ label: "",
+ isFilter: true
+});
+
+dojo.declare("dojox.atom.widget.FeedViewer.CategoryIncludeFilter",null,{
+ constructor: function(scheme, term, label){
+ // summary:
+ // The initializer function.
+ // description:
+ // The initializer function.
+ this.scheme = scheme;
+ this.term = term;
+ this.label = label;
+ },
+
+ match: function(entry) {
+ // summary:
+ // Function to determine if this category filter matches against a category on an atom entry
+ // description:
+ // Function to determine if this category filter matches against a category on an atom entry
+ //
+ // returns:
+ // boolean denoting if this category filter matched to this entry.
+ var matched = false;
+ if (entry !== null) {
+ var categories = entry.categories;
+ if (categories !== null) {
+ for (var i = 0; i < categories.length; i++) {
+ var category = categories[i];
+
+ if (this.scheme !== "") {
+ if (this.scheme !== category.scheme) {
+ break;
+ }
+ }
+
+ if (this.term !== "") {
+ if (this.term !== category.term) {
+ break;
+ }
+ }
+
+ if (this.label !== "") {
+ if (this.label !== category.label) {
+ break;
+ }
+ }
+ //Made it this far, everything matched.
+ matched = true;
+ }
+ }
+ }
+ return matched;
+ }
+});
+
+}
diff --git a/js/dojo-1.6/dojox/atom/widget/FeedViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/FeedViewer.xd.js
new file mode 100644
index 0000000..c01f356
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/FeedViewer.xd.js
@@ -0,0 +1,818 @@
+/*
+ Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.FeedViewer"],
+["require", "dijit._Widget"],
+["require", "dijit._Templated"],
+["require", "dijit._Container"],
+["require", "dojox.atom.io.Connection"],
+["requireLocalization", "dojox.atom.widget", "FeedViewerEntry", null, "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw", "ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,kk,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw"]],
+defineResource: function(dojo, dijit, dojox){if(!dojo._hasResource["dojox.atom.widget.FeedViewer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.atom.widget.FeedViewer"] = true;
+dojo.provide("dojox.atom.widget.FeedViewer");
+
+dojo.require("dijit._Widget");
+dojo.require("dijit._Templated");
+dojo.require("dijit._Container");
+dojo.require("dojox.atom.io.Connection");
+;
+
+dojo.experimental("dojox.atom.widget.FeedViewer");
+
+dojo.declare("dojox.atom.widget.FeedViewer",[dijit._Widget, dijit._Templated, dijit._Container],{
+ // summary:
+ // An ATOM feed viewer that allows for viewing a feed, deleting entries, and editing entries.
+ // description:
+ // An ATOM feed viewer that allows for viewing a feed, deleting entries, and editing entries.
+ feedViewerTableBody: null, //The body of the feed viewer table so we can access it and populate it. Will be assigned via template.
+ feedViewerTable: null, //The overal table container which contains the feed viewer table. Will be assigned via template.
+ entrySelectionTopic: "", //The topic to broadcast when any entry is clicked so that a listener can pick up it and display it.
+ url: "", //The URL to which to connect to initially on creation.
+ xmethod: false,
+ localSaveOnly: false,
+
+ //Templates for the HTML rendering. Need to figure these out better, admittedly.
+ templateString: dojo.cache("dojox.atom", "widget/templates/FeedViewer.html", "<div class=\"feedViewerContainer\" dojoAttachPoint=\"feedViewerContainerNode\">\r\n\t<table cellspacing=\"0\" cellpadding=\"0\" class=\"feedViewerTable\">\r\n\t\t<tbody dojoAttachPoint=\"feedViewerTableBody\" class=\"feedViewerTableBody\">\r\n\t\t</tbody>\r\n\t</table>\r\n</div>\r\n"),
+
+ _feed: null,
+ _currentSelection: null, // Currently selected entry
+
+ _includeFilters: null,
+
+ alertsEnabled: false,
+
+ postCreate: function(){
+ // summary:
+ // The postCreate function.
+ // description:
+ // The postCreate function. Creates our AtomIO object for future interactions and subscribes to the
+ // event given in markup/creation.
+ this._includeFilters = [];
+
+ if(this.entrySelectionTopic !== ""){
+ this._subscriptions = [dojo.subscribe(this.entrySelectionTopic, this, "_handleEvent")];
+ }
+ this.atomIO = new dojox.atom.io.Connection();
+ this.childWidgets = [];
+ },
+
+ startup: function(){
+ // summary:
+ // The startup function.
+ // description:
+ // The startup function. Parses the filters and sets the feed based on the given url.
+ this.containerNode = this.feedViewerTableBody;
+ var children = this.getDescendants();
+ for(var i in children){
+ var child = children[i];
+ if(child && child.isFilter){
+ this._includeFilters.push(new dojox.atom.widget.FeedViewer.CategoryIncludeFilter(child.scheme, child.term, child.label));
+ child.destroy();
+ }
+ }
+
+ if(this.url !== ""){
+ this.setFeedFromUrl(this.url);
+ }
+ },
+
+ clear: function(){
+ // summary:
+ // Function clearing all current entries in the feed view.
+ // description:
+ // Function clearing all current entries in the feed view.
+ //
+ // returns:
+ // Nothing.
+ this.destroyDescendants();
+ },
+
+ setFeedFromUrl: function(/*string*/url){
+ // summary:
+ // Function setting the feed from a URL which to get the feed.
+ // description:
+ // Function setting the dojox.atom.io.model.Feed data into the view.
+ //
+ // url:
+ // The URL to the feed to load.
+ //
+ // returns:
+ // Nothing.
+ if(url !== ""){
+ if(this._isRelativeURL(url)){
+ var baseUrl = "";
+ if(url.charAt(0) !== '/'){
+ baseUrl = this._calculateBaseURL(window.location.href, true);
+ }else{
+ baseUrl = this._calculateBaseURL(window.location.href, false);
+ }
+ this.url = baseUrl + url;
+ }
+
+ this.atomIO.getFeed(url,dojo.hitch(this,this.setFeed));
+ }
+ },
+
+
+ setFeed: function(/*object*/feed){
+ // summary:
+ // Function setting the dojox.atom.io.model.Feed data into the view.
+ // description:
+ // Function setting the dojox.atom.io.model.Feed data into the view.
+ //
+ // entry:
+ // The dojox.atom.io.model.Feed object to process
+ //
+ // returns:
+ // Nothing.
+ this._feed = feed;
+ this.clear();
+ var entrySorter=function(a,b){
+ var dispA = this._displayDateForEntry(a);
+ var dispB = this._displayDateForEntry(b);
+ if(dispA > dispB){return -1;}
+ if(dispA < dispB){return 1;}
+ return 0;
+ };
+
+ // This function may not be safe in different locales.
+ var groupingStr = function(dateStr){
+ var dpts = dateStr.split(',');
+
+ dpts.pop(); // remove year and time
+ return dpts.join(",");
+ };
+ var sortedEntries = feed.entries.sort(dojo.hitch(this,entrySorter));
+ if(feed){
+ var lastSectionTitle = null;
+ for(var i=0;i<sortedEntries.length;i++){
+
+ var entry = sortedEntries[i];
+
+ if(this._isFilterAccepted(entry)){
+ var time = this._displayDateForEntry(entry);
+ var sectionTitle = "";
+
+ if(time !== null){
+ sectionTitle = groupingStr(time.toLocaleString());
+
+ if(sectionTitle === "" ){
+ //Generally an issue on Opera with how its toLocaleString() works, so do a quick and dirty date construction M/D/Y
+ sectionTitle = "" + (time.getMonth() + 1) + "/" + time.getDate() + "/" + time.getFullYear();
+ }
+ }
+ if((lastSectionTitle === null) || (lastSectionTitle != sectionTitle)){
+ this.appendGrouping(sectionTitle);
+ lastSectionTitle = sectionTitle;
+ }
+ this.appendEntry(entry);
+ }
+ }
+ }
+ },
+
+ _displayDateForEntry: function(/*object*/entry){
+ // summary:
+ // Internal function for determining the appropriate date to display.
+ // description: Internal function for determining of a particular entry is editable.
+ //
+ // entry:
+ // The dojox.atom.io.model.Entry object to examine.
+ //
+ // returns:
+ // An appropriate date for the feed viewer display.
+ if(entry.updated){return entry.updated;}
+ if(entry.modified){return entry.modified;}
+ if(entry.issued){return entry.issued;}
+ return new Date();
+ },
+
+ appendGrouping: function(/*string*/titleText){
+ // summary:
+ // Function for appending a new grouping of entries to the feed view.
+ // description:
+ // Function for appending a grouping of entries to the feed view.
+ //
+ // entry:
+ // The title of the new grouping to create on the view.
+ //
+ // returns:
+ // Nothing.
+ var entryWidget = new dojox.atom.widget.FeedViewerGrouping({});
+ entryWidget.setText(titleText);
+ this.addChild(entryWidget);
+ this.childWidgets.push(entryWidget);
+ },
+
+ appendEntry: function(/*object*/entry){
+ // summary:
+ // Function for appending an entry to the feed view.
+ // description:
+ // Function for appending an entry to the feed view.
+ //
+ // entry:
+ // The dojox.atom.io.model.Entry object to append
+ //
+ // returns:
+ // Nothing.
+ var entryWidget = new dojox.atom.widget.FeedViewerEntry({"xmethod": this.xmethod});
+ entryWidget.setTitle(entry.title.value);
+ entryWidget.setTime(this._displayDateForEntry(entry).toLocaleTimeString());
+ entryWidget.entrySelectionTopic = this.entrySelectionTopic;
+ entryWidget.feed = this;
+ this.addChild(entryWidget);
+ this.childWidgets.push(entryWidget);
+ this.connect(entryWidget, "onClick", "_rowSelected");
+ entry.domNode = entryWidget.entryNode;
+
+ //Need to set up a bi-directional reference here to control events between the two.
+ entry._entryWidget = entryWidget;
+ entryWidget.entry = entry;
+ },
+
+ deleteEntry: function(/*object*/entryRow){
+ // summary:
+ // Function for deleting a row from the view
+ // description:
+ // Function for deleting a row from the view
+ if(!this.localSaveOnly){
+ this.atomIO.deleteEntry(entryRow.entry, dojo.hitch(this, this._removeEntry, entryRow), null, this.xmethod);
+ }else{
+ this._removeEntry(entryRow, true);
+ }
+ dojo.publish(this.entrySelectionTopic, [{ action: "delete", source: this, entry: entryRow.entry }]);
+ },
+
+ _removeEntry: function(/*FeedViewerEntry*/ entry, /* boolean */success){
+ // summary:
+ // callback for when an entry is deleted from a feed.
+ // description:
+ // callback for when an entry is deleted from a feed.
+ if(success){
+ /* Check if this is the last Entry beneath the given date */
+ var idx = dojo.indexOf(this.childWidgets, entry);
+ var before = this.childWidgets[idx-1];
+ var after = this.childWidgets[idx+1];
+ if( before.declaredClass === 'dojox.atom.widget.FeedViewerGrouping' &&
+ (after === undefined || after.declaredClass === 'dojox.atom.widget.FeedViewerGrouping')){
+ before.destroy();
+ }
+
+ /* Destroy the FeedViewerEntry to remove it from the view */
+ entry.destroy();
+ }else{}
+ },
+
+ _rowSelected: function(/*object*/evt){
+ // summary:
+ // Internal function for handling the selection of feed entries.
+ // description:
+ // Internal function for handling the selection of feed entries.
+ //
+ // evt:
+ // The click event that triggered a selection.
+ //
+ // returns:
+ // Nothing.
+ var selectedNode = evt.target;
+ while(selectedNode){
+ if(selectedNode.attributes){
+ var widgetid = selectedNode.attributes.getNamedItem("widgetid");
+ if(widgetid && widgetid.value.indexOf("FeedViewerEntry") != -1){
+ break;
+ }
+ }
+ selectedNode = selectedNode.parentNode;
+ }
+
+ for(var i=0;i<this._feed.entries.length;i++){
+ var entry = this._feed.entries[i];
+ if( (selectedNode === entry.domNode) && (this._currentSelection !== entry) ){
+ //Found it and it isn't already selected.
+ dojo.addClass(entry.domNode, "feedViewerEntrySelected");
+ dojo.removeClass(entry._entryWidget.timeNode, "feedViewerEntryUpdated");
+ dojo.addClass(entry._entryWidget.timeNode, "feedViewerEntryUpdatedSelected");
+
+ this.onEntrySelected(entry);
+ if(this.entrySelectionTopic !== ""){
+ dojo.publish(this.entrySelectionTopic, [{ action: "set", source: this, feed: this._feed, entry: entry }]);
+ }
+ if(this._isEditable(entry)){
+ entry._entryWidget.enableDelete();
+ }
+
+ this._deselectCurrentSelection();
+ this._currentSelection = entry;
+ break;
+ }else if( (selectedNode === entry.domNode) && (this._currentSelection === entry) ){
+ //Found it and it is the current selection, we just want to de-select it so users can 'unselect rows' if they want.
+ dojo.publish(this.entrySelectionTopic, [{ action: "delete", source: this, entry: entry }]);
+ this._deselectCurrentSelection();
+ break;
+ }
+ }
+ },
+
+ _deselectCurrentSelection: function(){
+ // summary:
+ // Internal function for unselecting the current selection.
+ // description:
+ // Internal function for unselecting the current selection.
+ //
+ // returns:
+ // Nothing.
+ if(this._currentSelection){
+ dojo.addClass(this._currentSelection._entryWidget.timeNode, "feedViewerEntryUpdated");
+ dojo.removeClass(this._currentSelection.domNode, "feedViewerEntrySelected");
+ dojo.removeClass(this._currentSelection._entryWidget.timeNode, "feedViewerEntryUpdatedSelected");
+ this._currentSelection._entryWidget.disableDelete();
+ this._currentSelection = null;
+ }
+ },
+
+
+ _isEditable: function(/*object*/entry){
+ // summary:
+ // Internal function for determining of a particular entry is editable.
+ // description:
+ // Internal function for determining of a particular entry is editable.
+ // This is used for determining if the delete action should be displayed or not.
+ //
+ // entry:
+ // The dojox.atom.io.model.Entry object to examine
+ //
+ // returns:
+ // Boolean denoting if the entry seems editable or not..
+ var retVal = false;
+ if(entry && entry !== null && entry.links && entry.links !== null){
+ for(var x in entry.links){
+ if(entry.links[x].rel && entry.links[x].rel == "edit"){
+ retVal = true;
+ break;
+ }
+ }
+ }
+ return retVal;
+ },
+
+ onEntrySelected: function(/*object*/entry){
+ // summary:
+ // Function intended for over-riding/replacement as an attachpoint to for other items to recieve
+ // selection notification.
+ // description: Function intended for over0-riding/replacement as an attachpoint to for other items to recieve
+ // selection notification.
+ //
+ // entry:
+ // The dojox.atom.io.model.Entry object selected.
+ //
+ // returns:
+ // Nothing.
+ },
+
+ _isRelativeURL: function(/*string*/url){
+ // summary:
+ // Method to determine if the URL is relative or absolute.
+ // description:
+ // Method to determine if the URL is relative or absolute. Basic assumption is if it doesn't start
+ // with http:// or file://, it's relative to the current document.
+ //
+ // url:
+ // The URL to inspect.
+ //
+ // returns:
+ // boolean indicating whether it's a relative url or not.
+ var isFileURL = function(url){
+ var retVal = false;
+ if(url.indexOf("file://") === 0){
+ retVal = true;
+ }
+ return retVal;
+ }
+
+ var isHttpURL = function(url){
+ var retVal = false;
+ if(url.indexOf("http://") === 0){
+ retVal = true;
+ }
+ return retVal;
+ }
+
+ var retVal = false;
+ if(url !== null){
+ if(!isFileURL(url) && !isHttpURL(url)){
+ retVal = true;
+ }
+ }
+ return retVal;
+ },
+
+ _calculateBaseURL: function(/*string*/fullURL, /*boolean*/currentPageRelative){
+ // summary:
+ // Internal function to calculate a baseline URL from the provided full URL.
+ // description:
+ // Internal function to calculate a baseline URL from the provided full URL.
+ //
+ // fullURL:
+ // The full URL as a string.
+ // currentPageRelative:
+ // Flag to denote of the base URL should be calculated as just the server base, or relative to the current page/location in the URL.
+ //
+ // returns:
+ // String of the baseline URL
+ var baseURL = null;
+ if(fullURL !== null){
+ //Check to see if we need to strip off any query parameters from the URL.
+ var index = fullURL.indexOf("?");
+ if(index != -1){
+ fullURL = fullURL.substring(0,index);
+ //console.debug("Removed query parameters. URL now: " + fullURL);
+ }
+
+ if(currentPageRelative){
+ //Relative to the 'current page' in the URL, so we need to trim that off.
+ //Now we need to trim if necessary. If it ends in /, then we don't have a filename to trim off
+ //so we can return.
+ index = fullURL.lastIndexOf("/");
+ if((index > 0) && (index < fullURL.length) && (index !== (fullURL.length -1))){
+ //We want to include the terminating /
+ baseURL = fullURL.substring(0,(index + 1));
+ }else{
+ baseURL = fullURL;
+ }
+ }else{
+ //We want to find the first occurance of / after the <protocol>://
+ index = fullURL.indexOf("://");
+ if(index > 0){
+ index = index + 3;
+ var protocol = fullURL.substring(0,index);
+ var fragmentURL = fullURL.substring(index, fullURL.length);
+ index = fragmentURL.indexOf("/");
+ if((index < fragmentURL.length) && (index > 0) ){
+ baseURL = protocol + fragmentURL.substring(0,index);
+ }else{
+ baseURL = protocol + fragmentURL;
+ }
+ }
+ }
+ }
+ return baseURL;
+ },
+
+ _isFilterAccepted: function(/*object*/entry) {
+ // summary:
+ // Internal function to do matching of category filters to widgets.
+ // description:
+ // Internal function to do matching of category filters to widgets.
+ //
+ // returns:
+ // boolean denoting if this entry matched one of the accept filters.
+ var accepted = false;
+ if (this._includeFilters && (this._includeFilters.length > 0)) {
+ for (var i = 0; i < this._includeFilters.length; i++) {
+ var filter = this._includeFilters[i];
+ if (filter.match(entry)) {
+ accepted = true;
+ break;
+ }
+ }
+ }
+ else {
+ accepted = true;
+ }
+ return accepted;
+ },
+
+ addCategoryIncludeFilter: function(/*object*/filter) {
+ // summary:
+ // Function to add a filter for entry inclusion in the feed view.
+ // description:
+ // Function to add a filter for entry inclusion in the feed view.
+ //
+ // filter:
+ // The basic items to filter on and the values.
+ // Should be of format: {scheme: <some text or null>, term: <some text or null>, label: <some text or null>}
+ //
+ // returns:
+ // Nothing.
+ if (filter) {
+ var scheme = filter.scheme;
+ var term = filter.term;
+ var label = filter.label;
+ var addIt = true;
+
+ if (!scheme) {
+ scheme = null;
+ }
+ if (!term) {
+ scheme = null;
+ }
+ if (!label) {
+ scheme = null;
+ }
+
+ if (this._includeFilters && this._includeFilters.length > 0) {
+ for (var i = 0; i < this._includeFilters.length; i++) {
+ var eFilter = this._includeFilters[i];
+ if ((eFilter.term === term) && (eFilter.scheme === scheme) && (eFilter.label === label)) {
+ //Verify we don't have this filter already.
+ addIt = false;
+ break;
+ }
+ }
+ }
+
+ if (addIt) {
+ this._includeFilters.push(dojox.atom.widget.FeedViewer.CategoryIncludeFilter(scheme, term, label));
+ }
+ }
+ },
+
+ removeCategoryIncludeFilter: function(/*object*/filter) {
+ // summary:
+ // Function to remove a filter for entry inclusion in the feed view.
+ // description:
+ // Function to remove a filter for entry inclusion in the feed view.
+ //
+ // filter:
+ // The basic items to identify the filter that is present.
+ // Should be of format: {scheme: <some text or null>, term: <some text or null>, label: <some text or null>}
+ //
+ // returns:
+ // Nothing.
+ if (filter) {
+ var scheme = filter.scheme;
+ var term = filter.term;
+ var label = filter.label;
+
+ if (!scheme) {
+ scheme = null;
+ }
+ if (!term) {
+ scheme = null;
+ }
+ if (!label) {
+ scheme = null;
+ }
+
+ var newFilters = [];
+ if (this._includeFilters && this._includeFilters.length > 0) {
+ for (var i = 0; i < this._includeFilters.length; i++) {
+ var eFilter = this._includeFilters[i];
+ if (!((eFilter.term === term) && (eFilter.scheme === scheme) && (eFilter.label === label))) {
+ //Keep only filters that do not match
+ newFilters.push(eFilter);
+ }
+ }
+ this._includeFilters = newFilters;
+ }
+ }
+ },
+
+ _handleEvent: function(/*object*/entrySelectionEvent) {
+ // summary:
+ // Internal function for listening to a topic that will handle entry notification.
+ // description:
+ // Internal function for listening to a topic that will handle entry notification.
+ //
+ // entrySelectionEvent:
+ // The topic message containing the entry that was selected for view.
+ //
+ // returns:
+ // Nothing.
+ if(entrySelectionEvent.source != this) {
+ if(entrySelectionEvent.action == "update" && entrySelectionEvent.entry) {
+ var evt = entrySelectionEvent;
+ if(!this.localSaveOnly){
+ this.atomIO.updateEntry(evt.entry, dojo.hitch(evt.source,evt.callback), null, true);
+ }
+ this._currentSelection._entryWidget.setTime(this._displayDateForEntry(evt.entry).toLocaleTimeString());
+ this._currentSelection._entryWidget.setTitle(evt.entry.title.value);
+ } else if(entrySelectionEvent.action == "post" && entrySelectionEvent.entry) {
+ if(!this.localSaveOnly){
+ this.atomIO.addEntry(entrySelectionEvent.entry, this.url, dojo.hitch(this,this._addEntry));
+ }else{
+ this._addEntry(entrySelectionEvent.entry);
+ }
+ }
+ }
+ },
+
+ _addEntry: function(/*object*/entry) {
+ // summary:
+ // callback function used when adding an entry to the feed.
+ // description:
+ // callback function used when adding an entry to the feed. After the entry has been posted to the feed,
+ // we add it to our feed representation (to show it on the page) and publish an event to update any entry viewers.
+ this._feed.addEntry(entry);
+ this.setFeed(this._feed);
+ dojo.publish(this.entrySelectionTopic, [{ action: "set", source: this, feed: this._feed, entry: entry }]);
+ },
+
+ destroy: function(){
+ // summary:
+ // Destroys this widget, including all descendants and subscriptions.
+ // description:
+ // Destroys this widget, including all descendants and subscriptions.
+ this.clear();
+ dojo.forEach(this._subscriptions, dojo.unsubscribe);
+ }
+});
+
+dojo.declare("dojox.atom.widget.FeedViewerEntry",[dijit._Widget, dijit._Templated],{
+ // summary:
+ // Widget for handling the display of an entry and specific events associated with it.
+ // description: Widget for handling the display of an entry and specific events associated with it.
+
+ templateString: dojo.cache("dojox.atom", "widget/templates/FeedViewerEntry.html", "<tr class=\"feedViewerEntry\" dojoAttachPoint=\"entryNode\" dojoAttachEvent=\"onclick:onClick\">\r\n <td class=\"feedViewerEntryUpdated\" dojoAttachPoint=\"timeNode\">\r\n </td>\r\n <td>\r\n <table border=\"0\" width=\"100%\" dojoAttachPoint=\"titleRow\">\r\n <tr padding=\"0\" border=\"0\">\r\n <td class=\"feedViewerEntryTitle\" dojoAttachPoint=\"titleNode\">\r\n </td>\r\n <td class=\"feedViewerEntryDelete\" align=\"right\">\r\n <span dojoAttachPoint=\"deleteButton\" dojoAttachEvent=\"onclick:deleteEntry\" class=\"feedViewerDeleteButton\" style=\"display:none;\">[delete]</span>\r\n </td>\r\n <tr>\r\n </table>\r\n </td>\r\n</tr>\r\n"),
+
+ entryNode: null,
+ timeNode: null,
+ deleteButton: null,
+ entry: null,
+ feed: null,
+
+ postCreate: function(){
+ var _nlsResources = dojo.i18n.getLocalization("dojox.atom.widget", "FeedViewerEntry");
+ this.deleteButton.innerHTML = _nlsResources.deleteButton;
+ },
+
+ setTitle: function(/*string*/text){
+ // summary:
+ // Function to set the title of the entry.
+ // description:
+ // Function to set the title of the entry.
+ //
+ // text:
+ // The title.
+ //
+ // returns:
+ // Nothing.
+ if (this.titleNode.lastChild){this.titleNode.removeChild(this.titleNode.lastChild);}
+
+ var titleTextNode = document.createElement("div");
+ titleTextNode.innerHTML = text;
+ this.titleNode.appendChild(titleTextNode);
+ },
+
+ setTime: function(/*string*/timeText){
+ // summary:
+ // Function to set the time of the entry.
+ // description:
+ // Function to set the time of the entry.
+ //
+ // timeText:
+ // The string form of the date.
+ //
+ // returns:
+ // Nothing.
+ if (this.timeNode.lastChild){this.timeNode.removeChild(this.timeNode.lastChild);}
+ var timeTextNode = document.createTextNode(timeText);
+ this.timeNode.appendChild(timeTextNode);
+ },
+
+ enableDelete: function(){
+ // summary:
+ // Function to enable the delete action on this entry.
+ // description:
+ // Function to enable the delete action on this entry.
+ //
+ // returns:
+ // Nothing.
+ if (this.deleteButton !== null) {
+ //TODO Fix this
+ this.deleteButton.style.display = 'inline';
+ }
+ },
+
+ disableDelete: function(){
+ // summary:
+ // Function to disable the delete action on this entry.
+ // description:
+ // Function to disable the delete action on this entry.
+ //
+ // returns:
+ // Nothing.
+ if (this.deleteButton !== null) {
+ this.deleteButton.style.display = 'none';
+ }
+ },
+
+ deleteEntry: function(/*object*/event) {
+ // summary:
+ // Function to handle the delete event and delete the entry.
+ // description:
+ // Function to handle the delete event and delete the entry.
+ //
+ // returns:
+ // Nothing.
+ event.preventDefault();
+ event.stopPropagation();
+ this.feed.deleteEntry(this);
+ },
+
+ onClick: function(/*object*/e){
+ // summary:
+ // Attach point for when a row is clicked on.
+ // description:
+ // Attach point for when a row is clicked on.
+ //
+ // e:
+ // The event generated by the click.
+ }
+});
+
+dojo.declare("dojox.atom.widget.FeedViewerGrouping",[dijit._Widget, dijit._Templated],{
+ // summary:
+ // Grouping of feed entries.
+ // description:
+ // Grouping of feed entries.
+ templateString: dojo.cache("dojox.atom", "widget/templates/FeedViewerGrouping.html", "<tr dojoAttachPoint=\"groupingNode\" class=\"feedViewerGrouping\">\r\n\t<td colspan=\"2\" dojoAttachPoint=\"titleNode\" class=\"feedViewerGroupingTitle\">\r\n\t</td>\r\n</tr>\r\n"),
+
+ groupingNode: null,
+ titleNode: null,
+
+ setText: function(text){
+ // summary:
+ // Sets the text to be shown above this grouping.
+ // description:
+ // Sets the text to be shown above this grouping.
+ //
+ // text:
+ // The text to show.
+ if (this.titleNode.lastChild){this.titleNode.removeChild(this.titleNode.lastChild);}
+ var textNode = document.createTextNode(text);
+ this.titleNode.appendChild(textNode);
+ }
+});
+
+dojo.declare("dojox.atom.widget.AtomEntryCategoryFilter",[dijit._Widget, dijit._Templated],{
+ // summary:
+ // A filter to be applied to the list of entries.
+ // description:
+ // A filter to be applied to the list of entries.
+ scheme: "",
+ term: "",
+ label: "",
+ isFilter: true
+});
+
+dojo.declare("dojox.atom.widget.FeedViewer.CategoryIncludeFilter",null,{
+ constructor: function(scheme, term, label){
+ // summary:
+ // The initializer function.
+ // description:
+ // The initializer function.
+ this.scheme = scheme;
+ this.term = term;
+ this.label = label;
+ },
+
+ match: function(entry) {
+ // summary:
+ // Function to determine if this category filter matches against a category on an atom entry
+ // description:
+ // Function to determine if this category filter matches against a category on an atom entry
+ //
+ // returns:
+ // boolean denoting if this category filter matched to this entry.
+ var matched = false;
+ if (entry !== null) {
+ var categories = entry.categories;
+ if (categories !== null) {
+ for (var i = 0; i < categories.length; i++) {
+ var category = categories[i];
+
+ if (this.scheme !== "") {
+ if (this.scheme !== category.scheme) {
+ break;
+ }
+ }
+
+ if (this.term !== "") {
+ if (this.term !== category.term) {
+ break;
+ }
+ }
+
+ if (this.label !== "") {
+ if (this.label !== category.label) {
+ break;
+ }
+ }
+ //Made it this far, everything matched.
+ matched = true;
+ }
+ }
+ }
+ return matched;
+ }
+});
+
+}
+
+}};});
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/FeedEntryEditor.js
new file mode 100644
index 0000000..f7f1558
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[edit]","save":"[save]","cancel":"[cancel]","doNew":"[new]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..a4e323d
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "", ({"edit":"[edit]","save":"[save]","cancel":"[cancel]","doNew":"[new]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/FeedEntryViewer.js
new file mode 100644
index 0000000..b294695
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[close]","title":"Title","authors":"Authors","summary":"Summary","content":"Content","contributors":"Contributors","updated":"Updated","displayOptions":"[display options]","id":"ID"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..6517aa1
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "", ({"close":"[close]","title":"Title","authors":"Authors","summary":"Summary","content":"Content","contributors":"Contributors","updated":"Updated","displayOptions":"[display options]","id":"ID"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/FeedViewerEntry.js
new file mode 100644
index 0000000..6c686ff
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Delete]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..c7cabff
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "", ({"deleteButton":"[Delete]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/PeopleEditor.js
new file mode 100644
index 0000000..0f56092
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Add","addAuthor":"Add Author","addContributor":"Add Contributor"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/PeopleEditor.xd.js
new file mode 100644
index 0000000..2413283
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "", ({"add":"Add","addAuthor":"Add Author","addContributor":"Add Contributor"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ar/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/ar/FeedEntryEditor.js
new file mode 100644
index 0000000..e6c013f
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ar/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[تحرير]","save":"[حفظ]","cancel":"[الغاء]","doNew":"[جديد]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ar/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ar/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..b1d265c
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ar/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ar.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ar.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "ar", ({"edit":"[تحرير]","save":"[حفظ]","cancel":"[الغاء]","doNew":"[جديد]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ar/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/ar/FeedEntryViewer.js
new file mode 100644
index 0000000..fdaea31
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ar/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[اغلاق]","title":"العنوان","authors":"المؤلفين","summary":"الملخص","content":"محتويات","contributors":"المساهمين","updated":"تعديل في","displayOptions":"[اختيارات العرض]","id":"الكود"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ar/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ar/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..a548148
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ar/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ar.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ar.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "ar", ({"close":"[اغلاق]","title":"العنوان","authors":"المؤلفين","summary":"الملخص","content":"محتويات","contributors":"المساهمين","updated":"تعديل في","displayOptions":"[اختيارات العرض]","id":"الكود"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ar/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/ar/FeedViewerEntry.js
new file mode 100644
index 0000000..3f7a4bd
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ar/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[حذف]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ar/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ar/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..1eb44cb
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ar/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ar.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ar.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "ar", ({"deleteButton":"[حذف]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ar/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/ar/PeopleEditor.js
new file mode 100644
index 0000000..d09ba5d
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ar/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"اضافة","addAuthor":"اضافة مؤلف","addContributor":"اضافة مشارك"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ar/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ar/PeopleEditor.xd.js
new file mode 100644
index 0000000..97de311
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ar/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ar.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ar.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "ar", ({"add":"اضافة","addAuthor":"اضافة مؤلف","addContributor":"اضافة مشارك"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ca/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/ca/FeedEntryEditor.js
new file mode 100644
index 0000000..961d3bc
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ca/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[edita]","save":"[desa]","cancel":"[cancel·la]","doNew":"[nou]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ca/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ca/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..6dbadbd
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ca/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ca.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ca.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "ca", ({"edit":"[edita]","save":"[desa]","cancel":"[cancel·la]","doNew":"[nou]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ca/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/ca/FeedEntryViewer.js
new file mode 100644
index 0000000..d69249f
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ca/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[tanca]","title":"Títol","authors":"Autors","summary":"Resum","content":"Contingut","contributors":"Col·laboradors","updated":"Actualitzat","displayOptions":"[mostra opcions]","id":"ID"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ca/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ca/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..089c269
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ca/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ca.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ca.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "ca", ({"close":"[tanca]","title":"Títol","authors":"Autors","summary":"Resum","content":"Contingut","contributors":"Col·laboradors","updated":"Actualitzat","displayOptions":"[mostra opcions]","id":"ID"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ca/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/ca/FeedViewerEntry.js
new file mode 100644
index 0000000..169d596
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ca/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Suprimeix]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ca/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ca/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..318a314
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ca/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ca.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ca.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "ca", ({"deleteButton":"[Suprimeix]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ca/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/ca/PeopleEditor.js
new file mode 100644
index 0000000..ca16393
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ca/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Afegeix","addAuthor":"Afegeix un autor","addContributor":"Afegeix un col·laborador"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ca/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ca/PeopleEditor.xd.js
new file mode 100644
index 0000000..cfede0e
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ca/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ca.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ca.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "ca", ({"add":"Afegeix","addAuthor":"Afegeix un autor","addContributor":"Afegeix un col·laborador"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/cs/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/cs/FeedEntryEditor.js
new file mode 100644
index 0000000..45f2997
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/cs/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[upravit]","save":"[uložit]","cancel":"[storno]","doNew":"[nové]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/cs/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/cs/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..f252794
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/cs/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.cs.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.cs.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "cs", ({"edit":"[upravit]","save":"[uložit]","cancel":"[storno]","doNew":"[nové]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/cs/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/cs/FeedEntryViewer.js
new file mode 100644
index 0000000..98e8851
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/cs/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[zavřít]","title":"Název","authors":"Autoři","summary":"Souhrn","content":"Obsah","contributors":"Přispěvatelé","updated":"Aktualizováno","displayOptions":"[volby zobrazení]","id":"ID"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/cs/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/cs/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..e81931a
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/cs/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.cs.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.cs.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "cs", ({"close":"[zavřít]","title":"Název","authors":"Autoři","summary":"Souhrn","content":"Obsah","contributors":"Přispěvatelé","updated":"Aktualizováno","displayOptions":"[volby zobrazení]","id":"ID"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/cs/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/cs/FeedViewerEntry.js
new file mode 100644
index 0000000..af02c93
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/cs/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Odstranit]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/cs/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/cs/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..900dc39
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/cs/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.cs.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.cs.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "cs", ({"deleteButton":"[Odstranit]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/cs/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/cs/PeopleEditor.js
new file mode 100644
index 0000000..d437043
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/cs/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Přidat","addAuthor":"Přidat autora","addContributor":"Přidat přispěvatele"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/cs/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/cs/PeopleEditor.xd.js
new file mode 100644
index 0000000..897be82
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/cs/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.cs.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.cs.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "cs", ({"add":"Přidat","addAuthor":"Přidat autora","addContributor":"Přidat přispěvatele"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/da/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/da/FeedEntryEditor.js
new file mode 100644
index 0000000..0acccc0
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/da/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[redigér]","save":"[gem]","cancel":"[annullér]","doNew":"[ny]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/da/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/da/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..c6146a4
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/da/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.da.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.da.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "da", ({"edit":"[redigér]","save":"[gem]","cancel":"[annullér]","doNew":"[ny]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/da/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/da/FeedEntryViewer.js
new file mode 100644
index 0000000..5187b82
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/da/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[luk]","title":"Titel","authors":"Forfattere","summary":"Resumé","content":"Indhold","contributors":"Bidragydere","updated":"Opdateret","displayOptions":"[fremvisningsvalg]","id":"Id"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/da/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/da/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..0fb7cef
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/da/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.da.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.da.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "da", ({"close":"[luk]","title":"Titel","authors":"Forfattere","summary":"Resumé","content":"Indhold","contributors":"Bidragydere","updated":"Opdateret","displayOptions":"[fremvisningsvalg]","id":"Id"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/da/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/da/FeedViewerEntry.js
new file mode 100644
index 0000000..8a161c2
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/da/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Slet]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/da/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/da/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..8eea575
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/da/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.da.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.da.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "da", ({"deleteButton":"[Slet]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/da/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/da/PeopleEditor.js
new file mode 100644
index 0000000..43aaa23
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/da/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Tilføj","addAuthor":"Tilføj forfatter","addContributor":"Tilføj bidragyder"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/da/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/da/PeopleEditor.xd.js
new file mode 100644
index 0000000..559fe4d
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/da/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.da.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.da.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "da", ({"add":"Tilføj","addAuthor":"Tilføj forfatter","addContributor":"Tilføj bidragyder"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/de/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/de/FeedEntryEditor.js
new file mode 100644
index 0000000..c5a85ae
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/de/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[Bearbeiten]","save":"[Speichern]","cancel":"[Abbrechen]","doNew":"[Neu]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/de/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/de/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..ae4d5cf
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/de/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.de.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.de.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "de", ({"edit":"[Bearbeiten]","save":"[Speichern]","cancel":"[Abbrechen]","doNew":"[Neu]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/de/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/de/FeedEntryViewer.js
new file mode 100644
index 0000000..68976fb
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/de/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[Schließen]","title":"Titel","authors":"Autoren","summary":"Zusammenfassung","content":"Inhalt","contributors":"Mitwirkende","updated":"Aktualisiert","displayOptions":"[Anzeigeoptionen]","id":"ID"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/de/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/de/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..e46f4f4
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/de/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.de.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.de.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "de", ({"close":"[Schließen]","title":"Titel","authors":"Autoren","summary":"Zusammenfassung","content":"Inhalt","contributors":"Mitwirkende","updated":"Aktualisiert","displayOptions":"[Anzeigeoptionen]","id":"ID"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/de/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/de/FeedViewerEntry.js
new file mode 100644
index 0000000..4bc5c03
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/de/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Löschen]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/de/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/de/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..cd8a708
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/de/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.de.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.de.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "de", ({"deleteButton":"[Löschen]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/de/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/de/PeopleEditor.js
new file mode 100644
index 0000000..fdaff2f
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/de/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Hinzufügen","addAuthor":"Autor hinzufügen","addContributor":"Mitwirkenden hinzufügen"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/de/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/de/PeopleEditor.xd.js
new file mode 100644
index 0000000..6de2e77
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/de/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.de.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.de.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "de", ({"add":"Hinzufügen","addAuthor":"Autor hinzufügen","addContributor":"Mitwirkenden hinzufügen"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/el/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/el/FeedEntryEditor.js
new file mode 100644
index 0000000..3cf776b
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/el/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[τροποποίηση]","save":"[αποθήκευση]","cancel":"[ακύρωση]","doNew":"[δημιουργία]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/el/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/el/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..13762ee
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/el/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.el.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.el.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "el", ({"edit":"[τροποποίηση]","save":"[αποθήκευση]","cancel":"[ακύρωση]","doNew":"[δημιουργία]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/el/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/el/FeedEntryViewer.js
new file mode 100644
index 0000000..45d95c6
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/el/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[κλείσιμο]","title":"Τίτλος","authors":"Συντάκτες","summary":"Περίληψη","content":"Περιεχόμενο","contributors":"Συνεισφέροντες","updated":"Ενημερώθηκε","displayOptions":"[επιλογές παρουσίασης]","id":"Ταυτότητα"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/el/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/el/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..abc0c18
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/el/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.el.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.el.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "el", ({"close":"[κλείσιμο]","title":"Τίτλος","authors":"Συντάκτες","summary":"Περίληψη","content":"Περιεχόμενο","contributors":"Συνεισφέροντες","updated":"Ενημερώθηκε","displayOptions":"[επιλογές παρουσίασης]","id":"Ταυτότητα"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/el/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/el/FeedViewerEntry.js
new file mode 100644
index 0000000..db087e4
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/el/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Διαγραφή]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/el/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/el/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..bc9e6a9
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/el/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.el.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.el.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "el", ({"deleteButton":"[Διαγραφή]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/el/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/el/PeopleEditor.js
new file mode 100644
index 0000000..74604b0
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/el/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Προσθήκη","addAuthor":"Προσθήκη συντάκτη","addContributor":"Προσθήκη συνεισφέροντα"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/el/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/el/PeopleEditor.xd.js
new file mode 100644
index 0000000..8c01cd9
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/el/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.el.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.el.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "el", ({"add":"Προσθήκη","addAuthor":"Προσθήκη συντάκτη","addContributor":"Προσθήκη συνεισφέροντα"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/es/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/es/FeedEntryEditor.js
new file mode 100644
index 0000000..426e7ad
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/es/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[editar]","save":"[guardar]","cancel":"[cancelar]","doNew":"[nuevo]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/es/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/es/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..5bb121b
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/es/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.es.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.es.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "es", ({"edit":"[editar]","save":"[guardar]","cancel":"[cancelar]","doNew":"[nuevo]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/es/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/es/FeedEntryViewer.js
new file mode 100644
index 0000000..d0d7a9a
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/es/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[cerrar]","title":"Título","authors":"Autores","summary":"Resumen","content":"Contenido","contributors":"Colaboradores","updated":"Actualizado","displayOptions":"[opciones de visualización]","id":"ID"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/es/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/es/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..38506d9
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/es/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.es.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.es.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "es", ({"close":"[cerrar]","title":"Título","authors":"Autores","summary":"Resumen","content":"Contenido","contributors":"Colaboradores","updated":"Actualizado","displayOptions":"[opciones de visualización]","id":"ID"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/es/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/es/FeedViewerEntry.js
new file mode 100644
index 0000000..c33cee5
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/es/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Suprimir]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/es/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/es/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..8bd9c6d
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/es/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.es.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.es.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "es", ({"deleteButton":"[Suprimir]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/es/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/es/PeopleEditor.js
new file mode 100644
index 0000000..6ed1de3
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/es/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Añadir","addAuthor":"Añadir autor","addContributor":"Añadir colaborador"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/es/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/es/PeopleEditor.xd.js
new file mode 100644
index 0000000..36f6b66
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/es/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.es.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.es.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "es", ({"add":"Añadir","addAuthor":"Añadir autor","addContributor":"Añadir colaborador"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/fi/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/fi/FeedEntryEditor.js
new file mode 100644
index 0000000..0bc76af
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/fi/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[muokkaa]","save":"[tallenna]","cancel":"[peruuta]","doNew":"[uusi]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/fi/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/fi/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..ba4f295
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/fi/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.fi.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.fi.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "fi", ({"edit":"[muokkaa]","save":"[tallenna]","cancel":"[peruuta]","doNew":"[uusi]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/fi/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/fi/FeedEntryViewer.js
new file mode 100644
index 0000000..516e564
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/fi/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[sulje]","title":"Otsikko","authors":"Tekijät","summary":"Tiivistelmä","content":"Sisältö","contributors":"Lisääjät","updated":"Päivitetty","displayOptions":"[näyttöasetukset]","id":"Tunnus"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/fi/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/fi/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..9863774
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/fi/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.fi.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.fi.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "fi", ({"close":"[sulje]","title":"Otsikko","authors":"Tekijät","summary":"Tiivistelmä","content":"Sisältö","contributors":"Lisääjät","updated":"Päivitetty","displayOptions":"[näyttöasetukset]","id":"Tunnus"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/fi/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/fi/FeedViewerEntry.js
new file mode 100644
index 0000000..832e2c4
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/fi/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Poista]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/fi/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/fi/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..2ac8ed7
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/fi/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.fi.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.fi.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "fi", ({"deleteButton":"[Poista]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/fi/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/fi/PeopleEditor.js
new file mode 100644
index 0000000..3cadd3f
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/fi/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Lisää","addAuthor":"Lisää tekijä","addContributor":"Lisää lisääjä"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/fi/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/fi/PeopleEditor.xd.js
new file mode 100644
index 0000000..ce6f16d
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/fi/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.fi.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.fi.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "fi", ({"add":"Lisää","addAuthor":"Lisää tekijä","addContributor":"Lisää lisääjä"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/fr/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/fr/FeedEntryEditor.js
new file mode 100644
index 0000000..ff19654
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/fr/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[éditer]","save":"[sauvegarder]","cancel":"[annuler]","doNew":"[nouveau]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/fr/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/fr/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..61bec8e
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/fr/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.fr.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.fr.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "fr", ({"edit":"[éditer]","save":"[sauvegarder]","cancel":"[annuler]","doNew":"[nouveau]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/fr/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/fr/FeedEntryViewer.js
new file mode 100644
index 0000000..93c0cbc
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/fr/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[fermer]","title":"Titre","authors":"Auteurs","summary":"Récapitulatif","content":"Contenu","contributors":"Collaborateurs","updated":"Mis à jour","displayOptions":"[options d'affichage]","id":"ID"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/fr/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/fr/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..91466ba
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/fr/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.fr.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.fr.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "fr", ({"close":"[fermer]","title":"Titre","authors":"Auteurs","summary":"Récapitulatif","content":"Contenu","contributors":"Collaborateurs","updated":"Mis à jour","displayOptions":"[options d'affichage]","id":"ID"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/fr/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/fr/FeedViewerEntry.js
new file mode 100644
index 0000000..8003cbb
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/fr/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Supprimer]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/fr/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/fr/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..ce861e4
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/fr/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.fr.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.fr.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "fr", ({"deleteButton":"[Supprimer]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/fr/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/fr/PeopleEditor.js
new file mode 100644
index 0000000..5b7d866
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/fr/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Ajouter","addAuthor":"Ajouter un auteur","addContributor":"Ajouter un collaborateur"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/fr/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/fr/PeopleEditor.xd.js
new file mode 100644
index 0000000..0b56a02
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/fr/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.fr.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.fr.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "fr", ({"add":"Ajouter","addAuthor":"Ajouter un auteur","addContributor":"Ajouter un collaborateur"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/he/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/he/FeedEntryEditor.js
new file mode 100644
index 0000000..569ea3b
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/he/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[עריכה]","save":"[שמירה]","cancel":"[ביטול]","doNew":"[חדש]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/he/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/he/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..b6ef34b
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/he/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.he.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.he.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "he", ({"edit":"[עריכה]","save":"[שמירה]","cancel":"[ביטול]","doNew":"[חדש]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/he/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/he/FeedEntryViewer.js
new file mode 100644
index 0000000..3177a3c
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/he/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[סגירה]","title":"כותרת","authors":"מחברים","summary":"סיכום","content":"תוכן","contributors":"תורמים","updated":"עודכן","displayOptions":"[אפשרויות הצגה]","id":"זיהוי"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/he/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/he/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..12412a9
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/he/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.he.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.he.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "he", ({"close":"[סגירה]","title":"כותרת","authors":"מחברים","summary":"סיכום","content":"תוכן","contributors":"תורמים","updated":"עודכן","displayOptions":"[אפשרויות הצגה]","id":"זיהוי"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/he/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/he/FeedViewerEntry.js
new file mode 100644
index 0000000..4bb6ba0
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/he/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[מחיקה]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/he/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/he/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..ec5887c
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/he/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.he.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.he.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "he", ({"deleteButton":"[מחיקה]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/he/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/he/PeopleEditor.js
new file mode 100644
index 0000000..00120d8
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/he/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"הוספה","addAuthor":"הוספת מחבר","addContributor":"הוספת תורם"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/he/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/he/PeopleEditor.xd.js
new file mode 100644
index 0000000..31778c7
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/he/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.he.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.he.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "he", ({"add":"הוספה","addAuthor":"הוספת מחבר","addContributor":"הוספת תורם"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/hu/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/hu/FeedEntryEditor.js
new file mode 100644
index 0000000..9686e11
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/hu/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[szerkesztés]","save":"[mentés]","cancel":"[mégse]","doNew":"[új]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/hu/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/hu/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..e98dd17
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/hu/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.hu.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.hu.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "hu", ({"edit":"[szerkesztés]","save":"[mentés]","cancel":"[mégse]","doNew":"[új]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/hu/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/hu/FeedEntryViewer.js
new file mode 100644
index 0000000..c0f4853
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/hu/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[bezárás]","title":"Cím","authors":"Szerzők","summary":"Összegzés","content":"Tartalom","contributors":"Közreműködők","updated":"Frissítve","displayOptions":"[megjelenítési beállítások]","id":"Azonosító"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/hu/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/hu/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..14cbeac
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/hu/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.hu.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.hu.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "hu", ({"close":"[bezárás]","title":"Cím","authors":"Szerzők","summary":"Összegzés","content":"Tartalom","contributors":"Közreműködők","updated":"Frissítve","displayOptions":"[megjelenítési beállítások]","id":"Azonosító"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/hu/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/hu/FeedViewerEntry.js
new file mode 100644
index 0000000..a826114
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/hu/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Törlés]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/hu/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/hu/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..b3fd1d3
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/hu/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.hu.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.hu.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "hu", ({"deleteButton":"[Törlés]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/hu/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/hu/PeopleEditor.js
new file mode 100644
index 0000000..6ffe97c
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/hu/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Hozzáadás","addAuthor":"Szerző hozzáadása","addContributor":"Közreműködő hozzáadása"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/hu/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/hu/PeopleEditor.xd.js
new file mode 100644
index 0000000..f764a86
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/hu/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.hu.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.hu.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "hu", ({"add":"Hozzáadás","addAuthor":"Szerző hozzáadása","addContributor":"Közreműködő hozzáadása"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/it/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/it/FeedEntryEditor.js
new file mode 100644
index 0000000..408de78
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/it/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[modifica]","save":"[salva]","cancel":"[annulla]","doNew":"[nuovo]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/it/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/it/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..ee7f623
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/it/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.it.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.it.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "it", ({"edit":"[modifica]","save":"[salva]","cancel":"[annulla]","doNew":"[nuovo]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/it/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/it/FeedEntryViewer.js
new file mode 100644
index 0000000..3cc33ac
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/it/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[chiudi]","title":"Titolo","authors":"Autori","summary":"Riepilogo","content":"Indice","contributors":"Collaboratori","updated":"Aggiornato","displayOptions":"[visualizza opzioni]","id":"ID"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/it/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/it/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..c43a32c
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/it/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.it.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.it.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "it", ({"close":"[chiudi]","title":"Titolo","authors":"Autori","summary":"Riepilogo","content":"Indice","contributors":"Collaboratori","updated":"Aggiornato","displayOptions":"[visualizza opzioni]","id":"ID"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/it/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/it/FeedViewerEntry.js
new file mode 100644
index 0000000..3a0fa24
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/it/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Cancella]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/it/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/it/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..a57fd1d
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/it/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.it.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.it.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "it", ({"deleteButton":"[Cancella]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/it/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/it/PeopleEditor.js
new file mode 100644
index 0000000..82b4f5b
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/it/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Aggiungi","addAuthor":"Aggiungi autore","addContributor":"Aggiungi collaboratori"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/it/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/it/PeopleEditor.xd.js
new file mode 100644
index 0000000..3b1fd5d
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/it/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.it.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.it.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "it", ({"add":"Aggiungi","addAuthor":"Aggiungi autore","addContributor":"Aggiungi collaboratori"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ja/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/ja/FeedEntryEditor.js
new file mode 100644
index 0000000..ca8986a
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ja/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[編集]","save":"[保存]","cancel":"[キャンセル]","doNew":"[新規]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ja/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ja/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..2c658c2
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ja/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ja.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ja.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "ja", ({"edit":"[編集]","save":"[保存]","cancel":"[キャンセル]","doNew":"[新規]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ja/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/ja/FeedEntryViewer.js
new file mode 100644
index 0000000..b935c62
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ja/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[閉じる]","title":"タイトル","authors":"作成者","summary":"要約","content":"内容","contributors":"貢献者","updated":"更新","displayOptions":"[表示オプション]","id":"ID"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ja/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ja/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..a02bbb7
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ja/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ja.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ja.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "ja", ({"close":"[閉じる]","title":"タイトル","authors":"作成者","summary":"要約","content":"内容","contributors":"貢献者","updated":"更新","displayOptions":"[表示オプション]","id":"ID"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ja/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/ja/FeedViewerEntry.js
new file mode 100644
index 0000000..6dcdea0
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ja/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[削除]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ja/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ja/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..038919a
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ja/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ja.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ja.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "ja", ({"deleteButton":"[削除]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ja/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/ja/PeopleEditor.js
new file mode 100644
index 0000000..203fc3f
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ja/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"追加","addAuthor":"作成者の追加","addContributor":"貢献者の追加"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ja/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ja/PeopleEditor.xd.js
new file mode 100644
index 0000000..f3244ec
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ja/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ja.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ja.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "ja", ({"add":"追加","addAuthor":"作成者の追加","addContributor":"貢献者の追加"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/kk/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/kk/FeedEntryEditor.js
new file mode 100644
index 0000000..7b70d17
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/kk/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[өңдеу]","save":"[сақтау]","cancel":"[болдырмау]","doNew":"[жаңа]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/kk/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/kk/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..70e54d7
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/kk/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.kk.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.kk.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "kk", ({"edit":"[өңдеу]","save":"[сақтау]","cancel":"[болдырмау]","doNew":"[жаңа]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/kk/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/kk/FeedEntryViewer.js
new file mode 100644
index 0000000..ef51d05
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/kk/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[жабу]","title":"Тақырып","authors":"Авторлар","summary":"Жиынтық","content":"Мазмұн","contributors":"Таратушылар","updated":"Жаңартылған","displayOptions":"[көрсету параметрлері]","id":"ID коды"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/kk/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/kk/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..4e2df4d
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/kk/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.kk.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.kk.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "kk", ({"close":"[жабу]","title":"Тақырып","authors":"Авторлар","summary":"Жиынтық","content":"Мазмұн","contributors":"Таратушылар","updated":"Жаңартылған","displayOptions":"[көрсету параметрлері]","id":"ID коды"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/kk/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/kk/FeedViewerEntry.js
new file mode 100644
index 0000000..e2d9625
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/kk/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Жою]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/kk/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/kk/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..ee5c9c6
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/kk/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.kk.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.kk.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "kk", ({"deleteButton":"[Жою]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/kk/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/kk/PeopleEditor.js
new file mode 100644
index 0000000..a4774f6
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/kk/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Қосу","addAuthor":"Авторды қосу","addContributor":"Салымшыны қосу"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/kk/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/kk/PeopleEditor.xd.js
new file mode 100644
index 0000000..45fc591
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/kk/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.kk.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.kk.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "kk", ({"add":"Қосу","addAuthor":"Авторды қосу","addContributor":"Салымшыны қосу"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ko/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/ko/FeedEntryEditor.js
new file mode 100644
index 0000000..227d37f
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ko/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[편집]","save":"[저장]","cancel":"[취소]","doNew":"[새로 작성]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ko/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ko/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..cfa054b
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ko/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ko.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ko.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "ko", ({"edit":"[편집]","save":"[저장]","cancel":"[취소]","doNew":"[새로 작성]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ko/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/ko/FeedEntryViewer.js
new file mode 100644
index 0000000..b06ce59
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ko/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[닫기]","title":"제목","authors":"작성자","summary":"요약","content":"컨텐츠","contributors":"기고자","updated":"업데이트된 날짜","displayOptions":"[옵션 표시]","id":"ID"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ko/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ko/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..0e1d172
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ko/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ko.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ko.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "ko", ({"close":"[닫기]","title":"제목","authors":"작성자","summary":"요약","content":"컨텐츠","contributors":"기고자","updated":"업데이트된 날짜","displayOptions":"[옵션 표시]","id":"ID"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ko/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/ko/FeedViewerEntry.js
new file mode 100644
index 0000000..98b1b3f
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ko/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[삭제]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ko/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ko/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..ea7812e
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ko/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ko.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ko.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "ko", ({"deleteButton":"[삭제]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ko/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/ko/PeopleEditor.js
new file mode 100644
index 0000000..ac52411
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ko/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"추가","addAuthor":"작성자 추가","addContributor":"제공자 추가"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ko/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ko/PeopleEditor.xd.js
new file mode 100644
index 0000000..56a3456
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ko/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ko.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ko.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "ko", ({"add":"추가","addAuthor":"작성자 추가","addContributor":"제공자 추가"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/nb/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/nb/FeedEntryEditor.js
new file mode 100644
index 0000000..3b482ed
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/nb/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[rediger]","save":"[lagre]","cancel":"[avbryt]","doNew":"[ny(tt)]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/nb/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/nb/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..e837deb
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/nb/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.nb.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.nb.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "nb", ({"edit":"[rediger]","save":"[lagre]","cancel":"[avbryt]","doNew":"[ny(tt)]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/nb/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/nb/FeedEntryViewer.js
new file mode 100644
index 0000000..f888d28
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/nb/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[lukk]","title":"Tittel","authors":"Forfattere","summary":"Sammendrag","content":"Innhold","contributors":"Bidragsytere","updated":"Oppdatert","displayOptions":"[visningsalternativer]","id":"ID"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/nb/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/nb/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..559673e
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/nb/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.nb.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.nb.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "nb", ({"close":"[lukk]","title":"Tittel","authors":"Forfattere","summary":"Sammendrag","content":"Innhold","contributors":"Bidragsytere","updated":"Oppdatert","displayOptions":"[visningsalternativer]","id":"ID"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/nb/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/nb/FeedViewerEntry.js
new file mode 100644
index 0000000..8e38e59
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/nb/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Slett]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/nb/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/nb/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..31c5ee3
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/nb/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.nb.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.nb.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "nb", ({"deleteButton":"[Slett]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/nb/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/nb/PeopleEditor.js
new file mode 100644
index 0000000..05ac102
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/nb/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Legg til","addAuthor":"Legg til forfatter","addContributor":"Legg til bidragsyter"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/nb/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/nb/PeopleEditor.xd.js
new file mode 100644
index 0000000..b5d3930
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/nb/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.nb.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.nb.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "nb", ({"add":"Legg til","addAuthor":"Legg til forfatter","addContributor":"Legg til bidragsyter"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/nl/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/nl/FeedEntryEditor.js
new file mode 100644
index 0000000..0714571
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/nl/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[bewerken]","save":"[opslaan]","cancel":"[annuleren]","doNew":"[nieuw]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/nl/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/nl/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..c273c87
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/nl/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.nl.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.nl.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "nl", ({"edit":"[bewerken]","save":"[opslaan]","cancel":"[annuleren]","doNew":"[nieuw]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/nl/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/nl/FeedEntryViewer.js
new file mode 100644
index 0000000..294f590
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/nl/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[sluiten]","title":"Titel","authors":"Auteurs","summary":"Overzicht","content":"Content","contributors":"Deelnemers","updated":"Bijgewerkt","displayOptions":"[weergaveopties]","id":"ID"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/nl/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/nl/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..98349cb
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/nl/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.nl.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.nl.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "nl", ({"close":"[sluiten]","title":"Titel","authors":"Auteurs","summary":"Overzicht","content":"Content","contributors":"Deelnemers","updated":"Bijgewerkt","displayOptions":"[weergaveopties]","id":"ID"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/nl/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/nl/FeedViewerEntry.js
new file mode 100644
index 0000000..31a12d7
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/nl/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Wissen]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/nl/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/nl/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..9067793
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/nl/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.nl.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.nl.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "nl", ({"deleteButton":"[Wissen]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/nl/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/nl/PeopleEditor.js
new file mode 100644
index 0000000..e8dd783
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/nl/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Toevoegen","addAuthor":"Auteur toevoegen","addContributor":"Deelnemer toevoegen"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/nl/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/nl/PeopleEditor.xd.js
new file mode 100644
index 0000000..ecf2577
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/nl/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.nl.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.nl.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "nl", ({"add":"Toevoegen","addAuthor":"Auteur toevoegen","addContributor":"Deelnemer toevoegen"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pl/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/pl/FeedEntryEditor.js
new file mode 100644
index 0000000..8693a71
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pl/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[edytuj]","save":"[zapisz]","cancel":"[anuluj]","doNew":"[nowy]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pl/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/pl/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..69f7277
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pl/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.pl.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.pl.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "pl", ({"edit":"[edytuj]","save":"[zapisz]","cancel":"[anuluj]","doNew":"[nowy]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pl/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/pl/FeedEntryViewer.js
new file mode 100644
index 0000000..30589b7
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pl/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[zamknij]","title":"Tytuł","authors":"Autorzy","summary":"Podsumowanie","content":"Treść","contributors":"Kontrybutorzy","updated":"Zaktualizowano","displayOptions":"[opcje wyświetlania]","id":"Identyfikator"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pl/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/pl/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..8c18318
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pl/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.pl.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.pl.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "pl", ({"close":"[zamknij]","title":"Tytuł","authors":"Autorzy","summary":"Podsumowanie","content":"Treść","contributors":"Kontrybutorzy","updated":"Zaktualizowano","displayOptions":"[opcje wyświetlania]","id":"Identyfikator"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pl/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/pl/FeedViewerEntry.js
new file mode 100644
index 0000000..b6a347e
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pl/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Usuń]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pl/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/pl/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..a118f96
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pl/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.pl.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.pl.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "pl", ({"deleteButton":"[Usuń]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pl/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/pl/PeopleEditor.js
new file mode 100644
index 0000000..baa45b1
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pl/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Dodaj","addAuthor":"Dodaj autora","addContributor":"Dodaj kontrybutora"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pl/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/pl/PeopleEditor.xd.js
new file mode 100644
index 0000000..b0edb9a
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pl/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.pl.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.pl.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "pl", ({"add":"Dodaj","addAuthor":"Dodaj autora","addContributor":"Dodaj kontrybutora"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedEntryEditor.js
new file mode 100644
index 0000000..c87f234
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[editar]","save":"[guardar]","cancel":"[cancelar]","doNew":"[novo]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..55a2c4b
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.pt-pt.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.pt-pt.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "pt-pt", ({"edit":"[editar]","save":"[guardar]","cancel":"[cancelar]","doNew":"[novo]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedEntryViewer.js
new file mode 100644
index 0000000..40b3f60
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[fechar]","title":"Título","authors":"Autores","summary":"Resumo","content":"Conteúdo","contributors":"Contribuintes","updated":"Actualizado","displayOptions":"[opções de visualização]","id":"ID"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..be29c4b
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.pt-pt.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.pt-pt.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "pt-pt", ({"close":"[fechar]","title":"Título","authors":"Autores","summary":"Resumo","content":"Conteúdo","contributors":"Contribuintes","updated":"Actualizado","displayOptions":"[opções de visualização]","id":"ID"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedViewerEntry.js
new file mode 100644
index 0000000..de9f60e
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Eliminar]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..dbebd9f
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.pt-pt.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.pt-pt.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "pt-pt", ({"deleteButton":"[Eliminar]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/PeopleEditor.js
new file mode 100644
index 0000000..e89d433
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Adicionar","addAuthor":"Adicionar autor","addContributor":"Adicionar contribuinte"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/PeopleEditor.xd.js
new file mode 100644
index 0000000..78f1239
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pt-pt/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.pt-pt.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.pt-pt.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "pt-pt", ({"add":"Adicionar","addAuthor":"Adicionar autor","addContributor":"Adicionar contribuinte"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pt/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/pt/FeedEntryEditor.js
new file mode 100644
index 0000000..ab9981a
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pt/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[editar]","save":"[salvar]","cancel":"[cancelar]","doNew":"[novo]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pt/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/pt/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..f272489
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pt/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.pt.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.pt.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "pt", ({"edit":"[editar]","save":"[salvar]","cancel":"[cancelar]","doNew":"[novo]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pt/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/pt/FeedEntryViewer.js
new file mode 100644
index 0000000..bc12eea
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pt/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[fechar]","title":"Título","authors":"Autores","summary":"Resumo","content":"Conteúdo","contributors":"Contribuidores","updated":"Atualizado","displayOptions":"[exibir opções]","id":"ID"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pt/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/pt/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..766408b
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pt/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.pt.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.pt.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "pt", ({"close":"[fechar]","title":"Título","authors":"Autores","summary":"Resumo","content":"Conteúdo","contributors":"Contribuidores","updated":"Atualizado","displayOptions":"[exibir opções]","id":"ID"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pt/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/pt/FeedViewerEntry.js
new file mode 100644
index 0000000..74e0657
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pt/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Excluir]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pt/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/pt/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..c650c64
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pt/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.pt.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.pt.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "pt", ({"deleteButton":"[Excluir]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pt/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/pt/PeopleEditor.js
new file mode 100644
index 0000000..76752ef
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pt/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Adicionar","addAuthor":"Adicionar Autor","addContributor":"Adicionar Contribuidor"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/pt/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/pt/PeopleEditor.xd.js
new file mode 100644
index 0000000..ec8816f
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/pt/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.pt.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.pt.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "pt", ({"add":"Adicionar","addAuthor":"Adicionar Autor","addContributor":"Adicionar Contribuidor"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ro/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/ro/FeedEntryEditor.js
new file mode 100644
index 0000000..de58f00
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ro/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[editare]","save":"[salvare]","cancel":"[anulare]","doNew":"[nou]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ro/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ro/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..e59dfbc
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ro/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ro.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ro.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "ro", ({"edit":"[editare]","save":"[salvare]","cancel":"[anulare]","doNew":"[nou]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ro/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/ro/FeedEntryViewer.js
new file mode 100644
index 0000000..cf14ca7
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ro/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[închidere]","title":"Titlu","authors":"Autori","summary":"Sumar","content":"Conţinut","contributors":"Contribuitori","updated":"Actualizat","displayOptions":"[opţiuni afişare]","id":"ID"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ro/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ro/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..8466ab9
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ro/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ro.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ro.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "ro", ({"close":"[închidere]","title":"Titlu","authors":"Autori","summary":"Sumar","content":"Conţinut","contributors":"Contribuitori","updated":"Actualizat","displayOptions":"[opţiuni afişare]","id":"ID"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ro/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/ro/FeedViewerEntry.js
new file mode 100644
index 0000000..14fbf09
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ro/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Ştergere]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ro/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ro/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..a18ae88
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ro/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ro.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ro.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "ro", ({"deleteButton":"[Ştergere]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ro/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/ro/PeopleEditor.js
new file mode 100644
index 0000000..0ef3987
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ro/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Adăugare","addAuthor":"Adăugare autor","addContributor":"Adăugare contribuitor"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ro/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ro/PeopleEditor.xd.js
new file mode 100644
index 0000000..0c4d97e
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ro/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ro.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ro.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "ro", ({"add":"Adăugare","addAuthor":"Adăugare autor","addContributor":"Adăugare contribuitor"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ru/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/ru/FeedEntryEditor.js
new file mode 100644
index 0000000..c3a9380
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ru/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[изменить]","save":"[сохранить]","cancel":"[отмена]","doNew":"[создать]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ru/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ru/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..bed4056
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ru/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ru.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ru.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "ru", ({"edit":"[изменить]","save":"[сохранить]","cancel":"[отмена]","doNew":"[создать]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ru/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/ru/FeedEntryViewer.js
new file mode 100644
index 0000000..80bf42f
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ru/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[закрыть]","title":"Название","authors":"Авторы","summary":"Сводка","content":"Информационное наполнение","contributors":"Участники","updated":"Обновлено","displayOptions":"[показать опции]","id":"ИД"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ru/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ru/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..fe8688f
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ru/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ru.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ru.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "ru", ({"close":"[закрыть]","title":"Название","authors":"Авторы","summary":"Сводка","content":"Информационное наполнение","contributors":"Участники","updated":"Обновлено","displayOptions":"[показать опции]","id":"ИД"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ru/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/ru/FeedViewerEntry.js
new file mode 100644
index 0000000..39247e2
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ru/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Удалить]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ru/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ru/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..10f995e
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ru/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ru.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ru.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "ru", ({"deleteButton":"[Удалить]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ru/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/ru/PeopleEditor.js
new file mode 100644
index 0000000..1b8f136
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ru/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Добавить","addAuthor":"Добавить автора","addContributor":"Добавить участника"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/ru/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/ru/PeopleEditor.xd.js
new file mode 100644
index 0000000..6f032a3
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/ru/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.ru.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.ru.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "ru", ({"add":"Добавить","addAuthor":"Добавить автора","addContributor":"Добавить участника"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sk/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/sk/FeedEntryEditor.js
new file mode 100644
index 0000000..abc3a1b
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sk/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[upraviť]","save":"[uložiť]","cancel":"[zrušiť]","doNew":"[nový]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sk/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/sk/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..cb01128
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sk/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.sk.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.sk.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "sk", ({"edit":"[upraviť]","save":"[uložiť]","cancel":"[zrušiť]","doNew":"[nový]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sk/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/sk/FeedEntryViewer.js
new file mode 100644
index 0000000..fbaea41
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sk/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[zatvoriť]","title":"Nadpis","authors":"Autori","summary":"Súhrn","content":"Obsah","contributors":"Prispievatelia","updated":"Aktualizovaný","displayOptions":"[zobraziť voľby]","id":"ID"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sk/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/sk/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..e16cc04
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sk/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.sk.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.sk.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "sk", ({"close":"[zatvoriť]","title":"Nadpis","authors":"Autori","summary":"Súhrn","content":"Obsah","contributors":"Prispievatelia","updated":"Aktualizovaný","displayOptions":"[zobraziť voľby]","id":"ID"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sk/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/sk/FeedViewerEntry.js
new file mode 100644
index 0000000..ff7123d
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sk/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Vymazať]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sk/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/sk/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..be823d0
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sk/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.sk.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.sk.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "sk", ({"deleteButton":"[Vymazať]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sk/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/sk/PeopleEditor.js
new file mode 100644
index 0000000..5a727c1
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sk/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Pridať","addAuthor":"Pridať autora","addContributor":"Pridať prispievateľa"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sk/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/sk/PeopleEditor.xd.js
new file mode 100644
index 0000000..6cd4887
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sk/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.sk.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.sk.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "sk", ({"add":"Pridať","addAuthor":"Pridať autora","addContributor":"Pridať prispievateľa"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sl/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/sl/FeedEntryEditor.js
new file mode 100644
index 0000000..8610736
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sl/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[urejanje]","save":"[shrani]","cancel":"[prekliči]","doNew":"[novo]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sl/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/sl/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..995d923
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sl/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.sl.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.sl.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "sl", ({"edit":"[urejanje]","save":"[shrani]","cancel":"[prekliči]","doNew":"[novo]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sl/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/sl/FeedEntryViewer.js
new file mode 100644
index 0000000..943aeff
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sl/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[zapri]","title":"Naslov","authors":"Avtorji","summary":"Povzetek","content":"Vsebina","contributors":"Kontributorji","updated":"Posodobljeno","displayOptions":"[možnosti prikaza]","id":"ID"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sl/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/sl/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..7543c39
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sl/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.sl.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.sl.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "sl", ({"close":"[zapri]","title":"Naslov","authors":"Avtorji","summary":"Povzetek","content":"Vsebina","contributors":"Kontributorji","updated":"Posodobljeno","displayOptions":"[možnosti prikaza]","id":"ID"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sl/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/sl/FeedViewerEntry.js
new file mode 100644
index 0000000..020d9bd
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sl/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Izbriši]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sl/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/sl/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..2650294
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sl/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.sl.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.sl.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "sl", ({"deleteButton":"[Izbriši]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sl/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/sl/PeopleEditor.js
new file mode 100644
index 0000000..71ae3a3
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sl/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Dodaj","addAuthor":"Dodaj avtorja","addContributor":"Dodaj kontributorja"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sl/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/sl/PeopleEditor.xd.js
new file mode 100644
index 0000000..5ca5ca7
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sl/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.sl.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.sl.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "sl", ({"add":"Dodaj","addAuthor":"Dodaj avtorja","addContributor":"Dodaj kontributorja"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sv/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/sv/FeedEntryEditor.js
new file mode 100644
index 0000000..e880f80
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sv/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[Redigera]","save":"[Spara]","cancel":"[Avbryt]","doNew":"[Nytt]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sv/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/sv/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..7a8dbc7
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sv/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.sv.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.sv.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "sv", ({"edit":"[Redigera]","save":"[Spara]","cancel":"[Avbryt]","doNew":"[Nytt]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sv/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/sv/FeedEntryViewer.js
new file mode 100644
index 0000000..3b58866
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sv/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[Stäng]","title":"Rubrik","authors":"Författare","summary":"Sammanfattning","content":"Innehåll","contributors":"Medverkande","updated":"Uppdaterat","displayOptions":"[Visningsalternativ]","id":"ID"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sv/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/sv/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..4b5fd1d
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sv/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.sv.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.sv.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "sv", ({"close":"[Stäng]","title":"Rubrik","authors":"Författare","summary":"Sammanfattning","content":"Innehåll","contributors":"Medverkande","updated":"Uppdaterat","displayOptions":"[Visningsalternativ]","id":"ID"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sv/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/sv/FeedViewerEntry.js
new file mode 100644
index 0000000..41de9cb
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sv/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Ta bort]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sv/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/sv/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..f5344c9
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sv/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.sv.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.sv.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "sv", ({"deleteButton":"[Ta bort]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sv/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/sv/PeopleEditor.js
new file mode 100644
index 0000000..5bb2e7e
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sv/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Lägg till","addAuthor":"Lägg till författare","addContributor":"Lägg till medverkande"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/sv/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/sv/PeopleEditor.xd.js
new file mode 100644
index 0000000..1dcd9d3
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/sv/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.sv.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.sv.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "sv", ({"add":"Lägg till","addAuthor":"Lägg till författare","addContributor":"Lägg till medverkande"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/th/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/th/FeedEntryEditor.js
new file mode 100644
index 0000000..586f01b
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/th/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[แก้ไข]","save":"[บันทึก]","cancel":"[ยกเลิก]","doNew":"[สร้าง]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/th/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/th/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..9a9e2dd
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/th/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.th.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.th.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "th", ({"edit":"[แก้ไข]","save":"[บันทึก]","cancel":"[ยกเลิก]","doNew":"[สร้าง]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/th/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/th/FeedEntryViewer.js
new file mode 100644
index 0000000..eda9eb7
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/th/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[ปิด]","title":"ชื่อเรื่อง","authors":"ผู้เขียน","summary":"สรุป","content":"เนื้อหา","contributors":"ผู้อนุเคราะห์","updated":"อัพเดต","displayOptions":"[อ็อพชันการแสดงผล]","id":"ID"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/th/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/th/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..cad0a35
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/th/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.th.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.th.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "th", ({"close":"[ปิด]","title":"ชื่อเรื่อง","authors":"ผู้เขียน","summary":"สรุป","content":"เนื้อหา","contributors":"ผู้อนุเคราะห์","updated":"อัพเดต","displayOptions":"[อ็อพชันการแสดงผล]","id":"ID"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/th/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/th/FeedViewerEntry.js
new file mode 100644
index 0000000..ce0cb07
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/th/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[ลบ]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/th/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/th/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..f0a4326
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/th/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.th.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.th.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "th", ({"deleteButton":"[ลบ]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/th/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/th/PeopleEditor.js
new file mode 100644
index 0000000..aaac340
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/th/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"เพิ่ม","addAuthor":"เพิ่มผู้เขียน","addContributor":"เพิ่มผู้อนุเคราะห์"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/th/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/th/PeopleEditor.xd.js
new file mode 100644
index 0000000..4fb3cfb
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/th/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.th.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.th.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "th", ({"add":"เพิ่ม","addAuthor":"เพิ่มผู้เขียน","addContributor":"เพิ่มผู้อนุเคราะห์"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/tr/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/tr/FeedEntryEditor.js
new file mode 100644
index 0000000..fbe9891
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/tr/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[düzenle]","save":"[kaydet]","cancel":"[iptal]","doNew":"[yeni]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/tr/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/tr/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..77c4869
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/tr/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.tr.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.tr.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "tr", ({"edit":"[düzenle]","save":"[kaydet]","cancel":"[iptal]","doNew":"[yeni]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/tr/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/tr/FeedEntryViewer.js
new file mode 100644
index 0000000..03a11d3
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/tr/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[kapat]","title":"Başlık","authors":"Yazarlar","summary":"Özet","content":"İçerik","contributors":"Katkıda Bulunanlar","updated":"Güncelleştirildi","displayOptions":"[görüntüleme seçenekleri]","id":"Kimlik"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/tr/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/tr/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..2311174
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/tr/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.tr.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.tr.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "tr", ({"close":"[kapat]","title":"Başlık","authors":"Yazarlar","summary":"Özet","content":"İçerik","contributors":"Katkıda Bulunanlar","updated":"Güncelleştirildi","displayOptions":"[görüntüleme seçenekleri]","id":"Kimlik"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/tr/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/tr/FeedViewerEntry.js
new file mode 100644
index 0000000..ce6c932
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/tr/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[Sil]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/tr/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/tr/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..34ed1f5
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/tr/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.tr.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.tr.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "tr", ({"deleteButton":"[Sil]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/tr/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/tr/PeopleEditor.js
new file mode 100644
index 0000000..26bade5
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/tr/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"Ekle","addAuthor":"Yazar Ekle","addContributor":"Katkıda Bulunan Ekle"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/tr/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/tr/PeopleEditor.xd.js
new file mode 100644
index 0000000..974cc39
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/tr/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.tr.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.tr.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "tr", ({"add":"Ekle","addAuthor":"Yazar Ekle","addContributor":"Katkıda Bulunan Ekle"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedEntryEditor.js
new file mode 100644
index 0000000..64e5ba5
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[編輯]","save":"[儲存]","cancel":"[取消]","doNew":"[新建]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..9b38187
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.zh-tw.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.zh-tw.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "zh-tw", ({"edit":"[編輯]","save":"[儲存]","cancel":"[取消]","doNew":"[新建]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedEntryViewer.js
new file mode 100644
index 0000000..9a6a323
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[關閉]","title":"標題","authors":"作者","summary":"摘要","content":"內容","contributors":"貢獻者","updated":"已更新","displayOptions":"[顯示選項]","id":"ID"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..31bf3a7
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.zh-tw.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.zh-tw.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "zh-tw", ({"close":"[關閉]","title":"標題","authors":"作者","summary":"摘要","content":"內容","contributors":"貢獻者","updated":"已更新","displayOptions":"[顯示選項]","id":"ID"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedViewerEntry.js
new file mode 100644
index 0000000..9a535ed
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[刪除]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..51fb3e1
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.zh-tw.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.zh-tw.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "zh-tw", ({"deleteButton":"[刪除]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/PeopleEditor.js
new file mode 100644
index 0000000..4c0a49c
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"新增","addAuthor":"新增作者","addContributor":"新增貢獻者"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/PeopleEditor.xd.js
new file mode 100644
index 0000000..fbcbde2
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/zh-tw/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.zh-tw.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.zh-tw.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "zh-tw", ({"add":"新增","addAuthor":"新增作者","addContributor":"新增貢獻者"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/zh/FeedEntryEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/zh/FeedEntryEditor.js
new file mode 100644
index 0000000..4d3c31d
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/zh/FeedEntryEditor.js
@@ -0,0 +1 @@
+({"edit":"[编辑]","save":"[保存]","cancel":"[取消]","doNew":"[新建]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/zh/FeedEntryEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/zh/FeedEntryEditor.xd.js
new file mode 100644
index 0000000..2581e4d
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/zh/FeedEntryEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.zh.FeedEntryEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.zh.FeedEntryEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryEditor", "zh", ({"edit":"[编辑]","save":"[保存]","cancel":"[取消]","doNew":"[新建]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/zh/FeedEntryViewer.js b/js/dojo-1.6/dojox/atom/widget/nls/zh/FeedEntryViewer.js
new file mode 100644
index 0000000..fe64bb3
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/zh/FeedEntryViewer.js
@@ -0,0 +1 @@
+({"close":"[关闭]","title":"标题","authors":"作者","summary":"摘要","content":"内容","contributors":"内容添加者","updated":"更新时间","displayOptions":"[显示选项]","id":"标识"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/zh/FeedEntryViewer.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/zh/FeedEntryViewer.xd.js
new file mode 100644
index 0000000..db10b0d
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/zh/FeedEntryViewer.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.zh.FeedEntryViewer"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.zh.FeedEntryViewer");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedEntryViewer", "zh", ({"close":"[关闭]","title":"标题","authors":"作者","summary":"摘要","content":"内容","contributors":"内容添加者","updated":"更新时间","displayOptions":"[显示选项]","id":"标识"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/zh/FeedViewerEntry.js b/js/dojo-1.6/dojox/atom/widget/nls/zh/FeedViewerEntry.js
new file mode 100644
index 0000000..b7ceb52
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/zh/FeedViewerEntry.js
@@ -0,0 +1 @@
+({"deleteButton":"[删除]"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/zh/FeedViewerEntry.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/zh/FeedViewerEntry.xd.js
new file mode 100644
index 0000000..a1f1d47
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/zh/FeedViewerEntry.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.zh.FeedViewerEntry"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.zh.FeedViewerEntry");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "FeedViewerEntry", "zh", ({"deleteButton":"[删除]"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/zh/PeopleEditor.js b/js/dojo-1.6/dojox/atom/widget/nls/zh/PeopleEditor.js
new file mode 100644
index 0000000..fd7eef6
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/zh/PeopleEditor.js
@@ -0,0 +1 @@
+({"add":"添加","addAuthor":"添加作者","addContributor":"添加内容添加者"}) \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/nls/zh/PeopleEditor.xd.js b/js/dojo-1.6/dojox/atom/widget/nls/zh/PeopleEditor.xd.js
new file mode 100644
index 0000000..98de8cb
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/nls/zh/PeopleEditor.xd.js
@@ -0,0 +1,5 @@
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.atom.widget.nls.zh.PeopleEditor"]],
+defineResource: function(dojo, dijit, dojox){dojo.provide("dojox.atom.widget.nls.zh.PeopleEditor");dojo._xdLoadFlattenedBundle("dojox.atom.widget", "PeopleEditor", "zh", ({"add":"添加","addAuthor":"添加作者","addContributor":"添加内容添加者"})
+);
+}};}); \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/templates/EntryHeader.html b/js/dojo-1.6/dojox/atom/widget/templates/EntryHeader.html
new file mode 100644
index 0000000..67d1e81
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/templates/EntryHeader.html
@@ -0,0 +1 @@
+<span dojoAttachPoint="entryHeaderNode" class="entryHeaderNode"></span>
diff --git a/js/dojo-1.6/dojox/atom/widget/templates/FeedEntryEditor.html b/js/dojo-1.6/dojox/atom/widget/templates/FeedEntryEditor.html
new file mode 100644
index 0000000..6a7f445
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/templates/FeedEntryEditor.html
@@ -0,0 +1,195 @@
+<div class="feedEntryViewer">
+ <table border="0" width="100%" class="feedEntryViewerMenuTable" dojoAttachPoint="feedEntryViewerMenu" style="display: none;">
+ <tr width="100%" dojoAttachPoint="entryCheckBoxDisplayOptions">
+ <td align="left" dojoAttachPoint="entryNewButton">
+ <span class="feedEntryViewerMenu" dojoAttachPoint="doNew" dojoAttachEvent="onclick:_toggleNew"></span>
+ </td>
+ <td align="left" dojoAttachPoint="entryEditButton" style="display: none;">
+ <span class="feedEntryViewerMenu" dojoAttachPoint="edit" dojoAttachEvent="onclick:_toggleEdit"></span>
+ </td>
+ <td align="left" dojoAttachPoint="entrySaveCancelButtons" style="display: none;">
+ <span class="feedEntryViewerMenu" dojoAttachPoint="save" dojoAttachEvent="onclick:saveEdits"></span>
+ <span class="feedEntryViewerMenu" dojoAttachPoint="cancel" dojoAttachEvent="onclick:cancelEdits"></span>
+ </td>
+ <td align="right">
+ <span class="feedEntryViewerMenu" dojoAttachPoint="displayOptions" dojoAttachEvent="onclick:_toggleOptions"></span>
+ </td>
+ </tr>
+ <tr class="feedEntryViewerDisplayCheckbox" dojoAttachPoint="entryCheckBoxRow" width="100%" style="display: none;">
+ <td dojoAttachPoint="feedEntryCelltitle">
+ <input type="checkbox" name="title" value="Title" dojoAttachPoint="feedEntryCheckBoxTitle" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelTitle"></label>
+ </td>
+ <td dojoAttachPoint="feedEntryCellauthors">
+ <input type="checkbox" name="authors" value="Authors" dojoAttachPoint="feedEntryCheckBoxAuthors" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelAuthors"></label>
+ </td>
+ <td dojoAttachPoint="feedEntryCellcontributors">
+ <input type="checkbox" name="contributors" value="Contributors" dojoAttachPoint="feedEntryCheckBoxContributors" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelContributors"></label>
+ </td>
+ <td dojoAttachPoint="feedEntryCellid">
+ <input type="checkbox" name="id" value="Id" dojoAttachPoint="feedEntryCheckBoxId" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelId"></label>
+ </td>
+ <td rowspan="2" align="right">
+ <span class="feedEntryViewerMenu" dojoAttachPoint="close" dojoAttachEvent="onclick:_toggleOptions"></span>
+ </td>
+ </tr>
+ <tr class="feedEntryViewerDisplayCheckbox" dojoAttachPoint="entryCheckBoxRow2" width="100%" style="display: none;">
+ <td dojoAttachPoint="feedEntryCellupdated">
+ <input type="checkbox" name="updated" value="Updated" dojoAttachPoint="feedEntryCheckBoxUpdated" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelUpdated"></label>
+ </td>
+ <td dojoAttachPoint="feedEntryCellsummary">
+ <input type="checkbox" name="summary" value="Summary" dojoAttachPoint="feedEntryCheckBoxSummary" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelSummary"></label>
+ </td>
+ <td dojoAttachPoint="feedEntryCellcontent">
+ <input type="checkbox" name="content" value="Content" dojoAttachPoint="feedEntryCheckBoxContent" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelContent"></label>
+ </td>
+ </tr>
+ </table>
+
+ <table class="feedEntryViewerContainer" border="0" width="100%">
+ <tr class="feedEntryViewerTitle" dojoAttachPoint="entryTitleRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryTitleHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <select dojoAttachPoint="entryTitleSelect" dojoAttachEvent="onchange:_switchEditor" style="display: none">
+ <option value="text">Text</option>
+ <option value="html">HTML</option>
+ <option value="xhtml">XHTML</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" dojoAttachPoint="entryTitleNode">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerAuthor" dojoAttachPoint="entryAuthorRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryAuthorHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entryAuthorNode">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerContributor" dojoAttachPoint="entryContributorRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryContributorHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entryContributorNode" class="feedEntryViewerContributorNames">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerId" dojoAttachPoint="entryIdRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryIdHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entryIdNode" class="feedEntryViewerIdText">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerUpdated" dojoAttachPoint="entryUpdatedRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryUpdatedHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entryUpdatedNode" class="feedEntryViewerUpdatedText">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerSummary" dojoAttachPoint="entrySummaryRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2" colspan="2">
+ <span class="lp" dojoAttachPoint="entrySummaryHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <select dojoAttachPoint="entrySummarySelect" dojoAttachEvent="onchange:_switchEditor" style="display: none">
+ <option value="text">Text</option>
+ <option value="html">HTML</option>
+ <option value="xhtml">XHTML</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entrySummaryNode">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerContent" dojoAttachPoint="entryContentRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryContentHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <select dojoAttachPoint="entryContentSelect" dojoAttachEvent="onchange:_switchEditor" style="display: none">
+ <option value="text">Text</option>
+ <option value="html">HTML</option>
+ <option value="xhtml">XHTML</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entryContentNode">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+</div>
diff --git a/js/dojo-1.6/dojox/atom/widget/templates/FeedEntryViewer.html b/js/dojo-1.6/dojox/atom/widget/templates/FeedEntryViewer.html
new file mode 100644
index 0000000..408c071
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/templates/FeedEntryViewer.html
@@ -0,0 +1,158 @@
+<div class="feedEntryViewer">
+ <table border="0" width="100%" class="feedEntryViewerMenuTable" dojoAttachPoint="feedEntryViewerMenu" style="display: none;">
+ <tr width="100%" dojoAttachPoint="entryCheckBoxDisplayOptions">
+ <td align="right">
+ <span class="feedEntryViewerMenu" dojoAttachPoint="displayOptions" dojoAttachEvent="onclick:_toggleOptions"></span>
+ </td>
+ </tr>
+ <tr class="feedEntryViewerDisplayCheckbox" dojoAttachPoint="entryCheckBoxRow" width="100%" style="display: none;">
+ <td dojoAttachPoint="feedEntryCelltitle">
+ <input type="checkbox" name="title" value="Title" dojoAttachPoint="feedEntryCheckBoxTitle" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelTitle"></label>
+ </td>
+ <td dojoAttachPoint="feedEntryCellauthors">
+ <input type="checkbox" name="authors" value="Authors" dojoAttachPoint="feedEntryCheckBoxAuthors" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelAuthors"></label>
+ </td>
+ <td dojoAttachPoint="feedEntryCellcontributors">
+ <input type="checkbox" name="contributors" value="Contributors" dojoAttachPoint="feedEntryCheckBoxContributors" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelContributors"></label>
+ </td>
+ <td dojoAttachPoint="feedEntryCellid">
+ <input type="checkbox" name="id" value="Id" dojoAttachPoint="feedEntryCheckBoxId" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelId"></label>
+ </td>
+ <td rowspan="2" align="right">
+ <span class="feedEntryViewerMenu" dojoAttachPoint="close" dojoAttachEvent="onclick:_toggleOptions"></span>
+ </td>
+ </tr>
+ <tr class="feedEntryViewerDisplayCheckbox" dojoAttachPoint="entryCheckBoxRow2" width="100%" style="display: none;">
+ <td dojoAttachPoint="feedEntryCellupdated">
+ <input type="checkbox" name="updated" value="Updated" dojoAttachPoint="feedEntryCheckBoxUpdated" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelUpdated"></label>
+ </td>
+ <td dojoAttachPoint="feedEntryCellsummary">
+ <input type="checkbox" name="summary" value="Summary" dojoAttachPoint="feedEntryCheckBoxSummary" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelSummary"></label>
+ </td>
+ <td dojoAttachPoint="feedEntryCellcontent">
+ <input type="checkbox" name="content" value="Content" dojoAttachPoint="feedEntryCheckBoxContent" dojoAttachEvent="onclick:_toggleCheckbox"/>
+ <label for="title" dojoAttachPoint="feedEntryCheckBoxLabelContent"></label>
+ </td>
+ </tr>
+ </table>
+
+ <table class="feedEntryViewerContainer" border="0" width="100%">
+ <tr class="feedEntryViewerTitle" dojoAttachPoint="entryTitleRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryTitleHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entryTitleNode">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerAuthor" dojoAttachPoint="entryAuthorRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryAuthorHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entryAuthorNode">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerContributor" dojoAttachPoint="entryContributorRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryContributorHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entryContributorNode" class="feedEntryViewerContributorNames">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerId" dojoAttachPoint="entryIdRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryIdHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entryIdNode" class="feedEntryViewerIdText">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerUpdated" dojoAttachPoint="entryUpdatedRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryUpdatedHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entryUpdatedNode" class="feedEntryViewerUpdatedText">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerSummary" dojoAttachPoint="entrySummaryRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entrySummaryHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entrySummaryNode">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr class="feedEntryViewerContent" dojoAttachPoint="entryContentRow" style="display: none;">
+ <td>
+ <table width="100%" cellpadding="0" cellspacing="0" border="0">
+ <tr class="graphic-tab-lgray">
+ <td class="lp2">
+ <span class="lp" dojoAttachPoint="entryContentHeader"></span>
+ </td>
+ </tr>
+ <tr>
+ <td dojoAttachPoint="entryContentNode">
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+</div>
diff --git a/js/dojo-1.6/dojox/atom/widget/templates/FeedViewer.html b/js/dojo-1.6/dojox/atom/widget/templates/FeedViewer.html
new file mode 100644
index 0000000..f3d2108
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/templates/FeedViewer.html
@@ -0,0 +1,6 @@
+<div class="feedViewerContainer" dojoAttachPoint="feedViewerContainerNode">
+ <table cellspacing="0" cellpadding="0" class="feedViewerTable">
+ <tbody dojoAttachPoint="feedViewerTableBody" class="feedViewerTableBody">
+ </tbody>
+ </table>
+</div>
diff --git a/js/dojo-1.6/dojox/atom/widget/templates/FeedViewerEntry.html b/js/dojo-1.6/dojox/atom/widget/templates/FeedViewerEntry.html
new file mode 100644
index 0000000..201f884
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/templates/FeedViewerEntry.html
@@ -0,0 +1,15 @@
+<tr class="feedViewerEntry" dojoAttachPoint="entryNode" dojoAttachEvent="onclick:onClick">
+ <td class="feedViewerEntryUpdated" dojoAttachPoint="timeNode">
+ </td>
+ <td>
+ <table border="0" width="100%" dojoAttachPoint="titleRow">
+ <tr padding="0" border="0">
+ <td class="feedViewerEntryTitle" dojoAttachPoint="titleNode">
+ </td>
+ <td class="feedViewerEntryDelete" align="right">
+ <span dojoAttachPoint="deleteButton" dojoAttachEvent="onclick:deleteEntry" class="feedViewerDeleteButton" style="display:none;">[delete]</span>
+ </td>
+ <tr>
+ </table>
+ </td>
+</tr> \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/templates/FeedViewerGrouping.html b/js/dojo-1.6/dojox/atom/widget/templates/FeedViewerGrouping.html
new file mode 100644
index 0000000..467e428
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/templates/FeedViewerGrouping.html
@@ -0,0 +1,4 @@
+<tr dojoAttachPoint="groupingNode" class="feedViewerGrouping">
+ <td colspan="2" dojoAttachPoint="titleNode" class="feedViewerGroupingTitle">
+ </td>
+</tr> \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/templates/PeopleEditor.html b/js/dojo-1.6/dojox/atom/widget/templates/PeopleEditor.html
new file mode 100644
index 0000000..a034c76
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/templates/PeopleEditor.html
@@ -0,0 +1,6 @@
+<div class="peopleEditor">
+ <table style="width: 100%">
+ <tbody dojoAttachPoint="peopleEditorEditors"></tbody>
+ </table>
+ <span class="peopleEditorButton" dojoAttachPoint="peopleEditorButton" dojoAttachEvent="onclick:_add"></span>
+</div> \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/templates/css/EntryHeader.css b/js/dojo-1.6/dojox/atom/widget/templates/css/EntryHeader.css
new file mode 100644
index 0000000..6403b61
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/templates/css/EntryHeader.css
@@ -0,0 +1,35 @@
+
+.containerNode {
+ visibility : visible;
+}
+.graphic-tab-lgray {
+ margin-bottom: 10px;
+}
+/*
+ background: #d9d9d9;
+ border-bottom: #d9d9d9 solid 7px;
+}*/
+
+/* headers for listview */
+.newgraphic-tab-lgray {
+ border-bottom: #d9d9d9 solid 7px;
+}
+td.lp {
+ padding: 0px 13px 0px 10px;
+ font-weight: bold;
+ background: #d9d9d9;
+ border-bottom: #d9d9d9 solid 7px;
+}
+
+td.lp2 {
+ background: #FFFFFF;
+ border-bottom: #d9d9d9 solid 7px;
+}
+
+span.lp {
+ padding: 0px 13px 0px 10px;
+ font-weight: bold;
+ background: #d9d9d9;
+ border-bottom: #d9d9d9 solid 7px;
+ width: auto;
+} \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/templates/css/HtmlFeedEntryEditor.css b/js/dojo-1.6/dojox/atom/widget/templates/css/HtmlFeedEntryEditor.css
new file mode 100644
index 0000000..a6fa3c3
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/templates/css/HtmlFeedEntryEditor.css
@@ -0,0 +1,98 @@
+.feedEntryEditor {
+ color:#000000;
+ background: #FFFFFF;
+}
+
+.feedEntryEditorMenuTable {
+ background: #C0C0C0;
+ border:2px solid;
+ border-top-color: lightgrey;
+ border-left-color: lightgrey;
+ border-right-color: darkgray;
+ border-bottom-color: darkgray;
+}
+
+.feedEntryEditorMenu {
+ cursor: pointer;
+ color:#0000FF;
+ text-align: left;
+ font-size: small;
+}
+
+.feedEntryEditorDisplayCheckbox {
+ font-size: small;
+ text-align: left;
+}
+
+.feedEntryEditorMenu:hover {
+ text-decoration: underline;
+}
+
+.feedEntryEditorTitle {
+ color:#000000;
+ background: #FFFFFF;
+ text-align: left;
+ #padding-left: 10px;
+ font-size: 125%;
+ font-weight: bold;
+}
+
+.feedEntryEditorAuthor {
+ color:#000000;
+ background: #FFFFFF;
+}
+
+.feedEntryEditorAuthorNames {
+ color:#000000;
+ background: #FFFFFF;
+ text-align: left;
+ #padding-left: 10px;
+ font-size: 110%;
+ font-style: italic;
+ font-weight: normal;
+}
+
+.feedEntryEditorSummary {
+ color:#000000;
+ background: #FFFFFF;
+}
+
+.feedEntryEditorUpdated {
+ color:#000000;
+ background: #FFFFFF;
+}
+
+.feedEntryEditorUpdatedText {
+ color:#000000;
+ background: #FFFFFF;
+ font-size: 110%;
+ font-style: italic;
+ font-weight: normal;
+}
+
+.feedEntryEditorId {
+ color:#000000;
+ background: #FFFFFF;
+}
+
+.feedEntryEditorIdText {
+ color:#000000;
+ background: #FFFFFF;
+ font-style: italic;
+ font-size: 110%;
+ font-weight: normal;
+}
+
+.feedEntryEditorContent {
+ color:#000000;
+ background: #FFFFFF;
+}
+
+.feedEntryEditorContributorNames {
+ color:#000000;
+ text-align: left;
+ #padding-left: 10px;
+ font-size: 125%;
+ font-style: italic;
+ font-weight: normal;
+}
diff --git a/js/dojo-1.6/dojox/atom/widget/templates/css/HtmlFeedEntryViewer.css b/js/dojo-1.6/dojox/atom/widget/templates/css/HtmlFeedEntryViewer.css
new file mode 100644
index 0000000..36400c9
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/templates/css/HtmlFeedEntryViewer.css
@@ -0,0 +1,107 @@
+.feedEntryViewer {
+ color:#000000;
+ background: #FFFFFF;
+/* overflow: auto;*/
+}
+
+.feedEntryViewerMenuTable {
+ background: #C0C0C0;
+ border:2px solid;
+ border-top-color: lightgrey;
+ border-left-color: lightgrey;
+ border-right-color: darkgray;
+ border-bottom-color: darkgray;
+ margin: 0;
+}
+
+.feedEntryViewerMenu, .peopleEditorButton {
+ cursor: pointer;
+ color:#0000FF;
+ text-align: left;
+ font-size: small;
+}
+
+.feedEntryViewerDisplayCheckbox {
+ font-size: small;
+ text-align: left;
+}
+
+.feedEntryViewerMenu:hover, .peopleEditorButton:hover {
+ text-decoration: underline;
+}
+
+.feedEntryViewerContainer, .feedEntryViewerContainer table {
+ border-width: 0;
+ margin: 0;
+}
+
+.feedEntryViewerTitle {
+ color:#000000;
+ background: #FFFFFF;
+ text-align: left;
+ /*padding-left: 10px;*/
+ font-size: 125%;
+ font-weight: bold;
+}
+
+.feedEntryViewerAuthor {
+ color:#000000;
+ background: #FFFFFF;
+}
+
+.feedEntryViewerAuthorNames {
+ color:#000000;
+ background: #FFFFFF;
+ text-align: left;
+ /*padding-left: 10px;*/
+ font-size: 110%;
+ font-style: italic;
+ font-weight: normal;
+}
+
+.feedEntryViewerSummary {
+ color:#000000;
+ background: #FFFFFF;
+}
+
+.feedEntryViewerUpdated {
+ color:#000000;
+ background: #FFFFFF;
+}
+
+.feedEntryViewerUpdatedText {
+ color:#000000;
+ background: #FFFFFF;
+ font-size: 110%;
+ font-style: italic;
+ font-weight: normal;
+}
+
+.feedEntryViewerId {
+ color:#000000;
+ background: #FFFFFF;
+}
+
+.feedEntryViewerIdText {
+ color:#000000;
+ background: #FFFFFF;
+ font-style: italic;
+ font-size: 110%;
+ font-weight: normal;
+}
+
+.feedEntryViewerContent {
+ color:#000000;
+ background: #FFFFFF;
+}
+
+.feedEntryViewerContributorNames {
+ color:#000000;
+ text-align: left;
+ /*padding-left: 10px;*/
+ font-size: 125%;
+ font-weight: normal;
+}
+
+.feedEntryViewer table {
+} \ No newline at end of file
diff --git a/js/dojo-1.6/dojox/atom/widget/templates/css/HtmlFeedViewer.css b/js/dojo-1.6/dojox/atom/widget/templates/css/HtmlFeedViewer.css
new file mode 100644
index 0000000..395df3d
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/templates/css/HtmlFeedViewer.css
@@ -0,0 +1,16 @@
+.feedViewerTable {
+ font-size: small;
+ width:100%;
+ cursor:default;
+ padding:2px;
+}
+
+.feedViewerTable, .feedViewerTable table {
+ border-width: 0;
+ margin: 0;
+}
+
+.feedViewerTableBody {
+ overflow-x: auto;
+ overflow-y: auto;
+}
diff --git a/js/dojo-1.6/dojox/atom/widget/templates/css/HtmlFeedViewerEntry.css b/js/dojo-1.6/dojox/atom/widget/templates/css/HtmlFeedViewerEntry.css
new file mode 100644
index 0000000..49a7f6c
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/templates/css/HtmlFeedViewerEntry.css
@@ -0,0 +1,70 @@
+.feedViewerEntry {
+ background: #F0F0F0;
+ padding: 2px;
+ overflow-x: auto;
+ overflow-y: auto;
+ cursor: pointer;
+}
+
+.feedViewerEntry:hover {
+ background: #a6c2e7;
+ padding: 2px;
+}
+
+.feedViewerEntrySelected {
+ color: #000000;
+ background: #C0C0C0;
+ text-align: left;
+ vertical-align: top;
+ padding-bottom: 2px;
+ padding: 2px;
+}
+
+.feedViewerEntrySelected:hover {
+ background: #a6c2e7;
+ padding: 2px;
+}
+
+
+.feedViewerEntryUpdated {
+ text-align: left;
+ vertical-align: top;
+ color: #909090;
+ padding-bottom: 2px;
+ padding: 2px;
+}
+
+.feedViewerEntryUpdatedSelected {
+ text-align: left;
+ vertical-align: top;
+ color: #000000;
+ padding-bottom: 2px;
+ padding: 2px;
+}
+
+
+.feedViewerEntryTitle {
+ color:#000000;
+ text-align: left;
+ text-decoration:none;
+ padding-left: 4px;
+ padding-bottom: 2px;
+}
+.feedViewerEntryTitle:hover {
+ color:#000000;
+ text-align: left;
+ text-decoration:underline;
+ padding-left: 4px;
+ padding-bottom: 2px;
+}
+
+.feedViewerDeleteButton {
+ cursor: pointer;
+ color:#0000FF;
+ text-align: left;
+ font-size: small;
+}
+
+.feedViewerDeleteButton:hover {
+ text-decoration: underline;
+}
diff --git a/js/dojo-1.6/dojox/atom/widget/templates/css/HtmlFeedViewerGrouping.css b/js/dojo-1.6/dojox/atom/widget/templates/css/HtmlFeedViewerGrouping.css
new file mode 100644
index 0000000..326781e
--- /dev/null
+++ b/js/dojo-1.6/dojox/atom/widget/templates/css/HtmlFeedViewerGrouping.css
@@ -0,0 +1,8 @@
+.feedViewerGrouping {
+}
+.feedViewerGroupingTitle {
+ font-weight: bold;
+ color:#606060;
+ border-bottom:1px solid #909090;
+ padding-top: 4px;
+}