Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(205)

Unified Diff: client/samples/swarm/DataSource.dart

Issue 9314024: Final CL to kill off client/samples . (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « client/samples/swarm/Dart_Logo_21.png ('k') | client/samples/swarm/Decoder.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: client/samples/swarm/DataSource.dart
===================================================================
--- client/samples/swarm/DataSource.dart (revision 3770)
+++ client/samples/swarm/DataSource.dart (working copy)
@@ -1,247 +0,0 @@
-// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/** The top-level collection of all sections for a user. */
-// TODO(jimhug): This is known as UserData in the server model.
-class Sections implements Collection<Section> {
- final List<Section> _sections;
-
- Sections(this._sections);
-
- operator [](int i) => _sections[i];
-
- int get length() => _sections.length;
-
- List<String> get sectionTitles() =>
- CollectionUtils.map(_sections, (s) => s.title);
-
- void refresh() {
- // TODO(jimhug): http://b/issue?id=5351067
- }
-
- /**
- * Find the Section object that has a given title.
- * This is used to integrate well with [ConveyorView].
- */
- Section findSection(String name) {
- return CollectionUtils.find(_sections, (sect) => sect.title == name);
- }
-
- // TODO(jimhug): Track down callers!
- Iterator<Section> iterator() => _sections.iterator();
-
- // TODO(jimhug): Better support for switching between local dev and server.
- static bool get runningFromFile() {
- return window.location.protocol.startsWith('file:');
- }
-
- static String get home() {
- // TODO(jmesserly): window.location.origin not available on Safari 4.
- // Move this workaround to the DOM code. See bug 5389503.
- return window.location.protocol + '//' + window.location.host;
- }
-
- // This method is exposed for tests.
- static void initializeFromData(String data, void callback(Sections sects)) {
- final decoder = new Decoder(data);
- int nSections = decoder.readInt();
- final sections = new List<Section>();
-
- for (int i=0; i < nSections; i++) {
- sections.add(Section.decode(decoder));
- }
- callback(new Sections(sections));
- }
-
- static void initializeFromUrl(void callback(Sections sections)) {
- if (Sections.runningFromFile) {
- initializeFromData(CannedData.data['user.data'], callback);
- } else {
- // TODO(jmesserly): display an error if we fail here! Silent failure bad.
- new XMLHttpRequest.getTEMPNAME('$home/data/user.data',
- EventBatch.wrap((request) {
- // TODO(jimhug): Nice response if get error back from server.
- // TODO(jimhug): Might be more efficient to parse request in sections.
- initializeFromData(request.responseText, callback);
- }));
- }
- }
-
- Section findSectionById(String id) {
- return CollectionUtils.find(_sections, (section) => section.id == id);
- }
-
- /**
- * Given the name of a section, find its index in the set.
- */
- int findSectionIndex(String name) {
- for (int i = 0; i < _sections.length; i++) {
- if (name == _sections[i].title) {
- return i;
- }
- }
- return -1;
- }
-
- List<Section> get sections() => _sections;
-
- // Collection<Section> methods:
- List map(f(Section element)) {
- return Collections.map(this, new List(), f);
- }
-
- List<Section> filter(bool f(Section element)) {
- return Collections.filter(this, new List<Section>(), f);
- }
- bool every(bool f(Section element)) => Collections.every(this, f);
- bool some(bool f(Section element)) => Collections.some(this, f);
- void forEach(void f(Section element)) { Collections.forEach(this, f); }
-
- // TODO(jmesserly): this should be a property
- bool isEmpty() => length == 0;
-}
-
-
-/** A collection of data sources representing a page in the UI. */
-class Section {
- final String id;
- final String title;
- ObservableList<Feed> feeds;
-
- // Public for testing. TODO(jacobr): find a cleaner solution.
- Section(this.id, this.title, this.feeds);
-
- void refresh() {
- for (final feed in feeds) {
- // TODO(jimhug): http://b/issue?id=5351067
- }
- }
-
- static Section decode(Decoder decoder) {
- final sectionId = decoder.readString();
- final sectionTitle = decoder.readString();
-
- final nSources = decoder.readInt();
- final feeds = new ObservableList<Feed>();
- for (int j=0; j < nSources; j++) {
- feeds.add(Feed.decode(decoder));
- }
- return new Section(sectionId, sectionTitle, feeds);
- }
-
- Feed findFeed(String id_) {
- return CollectionUtils.find(feeds, (feed) => feed.id == id_);
- }
-}
-
-/** Provider of a news feed. */
-class Feed {
- String id;
- final String title;
- final String iconUrl;
- final String description;
- ObservableList<Article> articles;
- ObservableValue<bool> error; // TODO(jimhug): Check if dead code.
-
- Feed(this.id, this.title, this.iconUrl, [this.description = ''])
- : articles = new ObservableList<Article>(),
- error = new ObservableValue<bool>(false);
-
- static Feed decode(Decoder decoder) {
- final sourceId = decoder.readString();
- final sourceTitle = decoder.readString();
- final sourceIcon = decoder.readString();
- final feed = new Feed(sourceId, sourceTitle, sourceIcon);
- final nItems = decoder.readInt();
-
- for (int i=0; i < nItems; i++) {
- feed.articles.add(Article.decodeHeader(feed, decoder));
- }
- return feed;
- }
-
- Article findArticle(String id_) {
- return CollectionUtils.find(articles, (article) => article.id == id_);
- }
-
- void refresh() {}
-}
-
-
-/** A single article or posting to display. */
-class Article {
- final String id;
- Date date;
- final String title;
- final String author;
- final bool hasThumbnail;
- String textBody; // TODO(jimhug): rename to snipppet.
- final Feed dataSource; // TODO(jimhug): rename to feed.
- String _htmlBody;
- String srcUrl;
- final ObservableValue<bool> unread; // TODO(jimhug): persist to server.
-
- bool error; // TODO(jimhug): Check if this is dead and remove.
-
- Article(this.dataSource, this.id, this.date, this.title, this.author,
- this.srcUrl, this.hasThumbnail, this.textBody,
- [this._htmlBody = null, bool unread = true, this.error = false])
- : unread = new ObservableValue<bool>(unread);
-
- String get htmlBody() {
- _ensureLoaded();
- return _htmlBody;
- }
-
- String get dataUri() {
- return Uri.encodeComponent(id).replaceAll(
- ',', '%2C').replaceAll('%2F', '/');
- }
-
- String get thumbUrl() {
- if (!hasThumbnail) return null;
-
- var home;
- if (Sections.runningFromFile) {
- home = 'http://dart.googleplex.com';
- } else {
- home = Sections.home;
- }
- // By default images from the real server are cached.
- // Bump the version flag if you change the thumbnail size, and you want to
- // get the new images. Our server ignores the query params but it gets
- // around appengine server side caching and the client side cache.
- return '$home/data/$dataUri.jpg?v=0';
- }
-
- // TODO(jimhug): need to return a lazy Observable<String> and also
- // add support for preloading.
- void _ensureLoaded() {
- if (_htmlBody !== null) return;
-
- var name = '$dataUri.html';
- if (Sections.runningFromFile) {
- _htmlBody = CannedData.data[name];
- } else {
- // TODO(jimhug): Remove this truly evil synchronoush xhr.
- final req = new XMLHttpRequest();
- req.open('GET', '${Sections.home}/data/$name', false);
- req.send();
- _htmlBody = req.responseText;
- }
- }
-
- static Article decodeHeader(Feed source, Decoder decoder) {
- final id = decoder.readString();
- final title = decoder.readString();
- final srcUrl = decoder.readString();
- final hasThumbnail = decoder.readBool();
- final author = decoder.readString();
- final dateInSeconds = decoder.readInt();
- final snippet = decoder.readString();
- final date = new Date.fromEpoch(dateInSeconds*1000, new TimeZone.utc());
- return new Article(source, id, date, title, author, srcUrl, hasThumbnail,
- snippet);
- }
-}
« no previous file with comments | « client/samples/swarm/Dart_Logo_21.png ('k') | client/samples/swarm/Decoder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698