| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of swarmlib; | 5 part of swarmlib; |
| 6 | 6 |
| 7 /** The top-level collection of all sections for a user. */ | 7 /** The top-level collection of all sections for a user. */ |
| 8 // TODO(jimhug): This is known as UserData in the server model. | 8 // TODO(jimhug): This is known as UserData in the server model. |
| 9 class Sections implements Collection<Section> { | 9 class Sections extends Collection<Section> { |
| 10 final List<Section> _sections; | 10 final List<Section> _sections; |
| 11 | 11 |
| 12 Sections(this._sections); | 12 Sections(this._sections); |
| 13 | 13 |
| 14 operator [](int i) => _sections[i]; | 14 operator [](int i) => _sections[i]; |
| 15 | 15 |
| 16 int get length => _sections.length; | 16 int get length => _sections.length; |
| 17 | 17 |
| 18 List<String> get sectionTitles => | 18 List<String> get sectionTitles => |
| 19 CollectionUtils.map(_sections, (s) => s.title); | 19 _sections.mappedBy((s) => s.title).toList(); |
| 20 | 20 |
| 21 void refresh() { | 21 void refresh() { |
| 22 // TODO(jimhug): http://b/issue?id=5351067 | 22 // TODO(jimhug): http://b/issue?id=5351067 |
| 23 } | 23 } |
| 24 | 24 |
| 25 /** | 25 /** |
| 26 * Find the Section object that has a given title. | 26 * Find the Section object that has a given title. |
| 27 * This is used to integrate well with [ConveyorView]. | 27 * This is used to integrate well with [ConveyorView]. |
| 28 */ | 28 */ |
| 29 Section findSection(String name) { | 29 Section findSection(String name) { |
| 30 return CollectionUtils.find(_sections, (sect) => sect.title == name); | 30 return CollectionUtils.find(_sections, (sect) => sect.title == name); |
| 31 } | 31 } |
| 32 | 32 |
| 33 // TODO(jimhug): Track down callers! | 33 // TODO(jimhug): Track down callers! |
| 34 Iterator<Section> iterator() => _sections.iterator(); | 34 Iterator<Section> get iterator => _sections.iterator; |
| 35 | 35 |
| 36 // TODO(jimhug): Better support for switching between local dev and server. | 36 // TODO(jimhug): Better support for switching between local dev and server. |
| 37 static bool get runningFromFile { | 37 static bool get runningFromFile { |
| 38 return window.location.protocol.startsWith('file:'); | 38 return window.location.protocol.startsWith('file:'); |
| 39 } | 39 } |
| 40 | 40 |
| 41 static String get home { | 41 static String get home { |
| 42 // TODO(jmesserly): window.location.origin not available on Safari 4. | 42 // TODO(jmesserly): window.location.origin not available on Safari 4. |
| 43 // Move this workaround to the DOM code. See bug 5389503. | 43 // Move this workaround to the DOM code. See bug 5389503. |
| 44 return '${window.location.protocol}//${window.location.host}'; | 44 return '${window.location.protocol}//${window.location.host}'; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 if (name == _sections[i].title) { | 82 if (name == _sections[i].title) { |
| 83 return i; | 83 return i; |
| 84 } | 84 } |
| 85 } | 85 } |
| 86 return -1; | 86 return -1; |
| 87 } | 87 } |
| 88 | 88 |
| 89 List<Section> get sections => _sections; | 89 List<Section> get sections => _sections; |
| 90 | 90 |
| 91 // Collection<Section> methods: | 91 // Collection<Section> methods: |
| 92 List map(f(Section element)) { | |
| 93 return Collections.map(this, new List(), f); | |
| 94 } | |
| 95 | |
| 96 List<Section> filter(bool f(Section element)) { | |
| 97 return Collections.filter(this, new List<Section>(), f); | |
| 98 } | |
| 99 bool every(bool f(Section element)) => Collections.every(this, f); | 92 bool every(bool f(Section element)) => Collections.every(this, f); |
| 100 bool some(bool f(Section element)) => Collections.some(this, f); | 93 bool any(bool f(Section element)) => Collections.any(this, f); |
| 101 void forEach(void f(Section element)) { Collections.forEach(this, f); } | 94 void forEach(void f(Section element)) { Collections.forEach(this, f); } |
| 102 | 95 |
| 103 // TODO(jmesserly): this should be a property | 96 // TODO(jmesserly): this should be a property |
| 104 bool get isEmpty => length == 0; | 97 bool get isEmpty => length == 0; |
| 105 } | 98 } |
| 106 | 99 |
| 107 | 100 |
| 108 /** A collection of data sources representing a page in the UI. */ | 101 /** A collection of data sources representing a page in the UI. */ |
| 109 class Section { | 102 class Section { |
| 110 final String id; | 103 final String id; |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 final hasThumbnail = decoder.readBool(); | 234 final hasThumbnail = decoder.readBool(); |
| 242 final author = decoder.readString(); | 235 final author = decoder.readString(); |
| 243 final dateInSeconds = decoder.readInt(); | 236 final dateInSeconds = decoder.readInt(); |
| 244 final snippet = decoder.readString(); | 237 final snippet = decoder.readString(); |
| 245 final date = | 238 final date = |
| 246 new Date.fromMillisecondsSinceEpoch(dateInSeconds*1000, isUtc: true); | 239 new Date.fromMillisecondsSinceEpoch(dateInSeconds*1000, isUtc: true); |
| 247 return new Article(source, id, date, title, author, srcUrl, hasThumbnail, | 240 return new Article(source, id, date, title, author, srcUrl, hasThumbnail, |
| 248 snippet); | 241 snippet); |
| 249 } | 242 } |
| 250 } | 243 } |
| OLD | NEW |