rubyuw 0.99.12 → 0.99.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.99.12
1
+ 0.99.13
@@ -42,31 +42,31 @@ module RubyUW
42
42
  def find(curriculum, term)
43
43
  curriculum = curriculum.strip # So we don't modify the original variable
44
44
  type = !!(curriculum =~ /^(.+?)(\d+)$/) ? :course : :curriculum
45
-
45
+
46
46
  # Strip '+' out of terms so that WIN+2010 works (which is expected for SLNs and such)
47
47
  term = term.gsub('+', '')
48
-
48
+
49
49
  send("find_#{type}", curriculum, term)
50
50
  end
51
-
51
+
52
52
  protected
53
-
53
+
54
54
  def find_curriculum(curriculum, term)
55
55
  page = Base.connection.get("http://www.washington.edu/students/timeschd/#{term}/")
56
56
  raise Errors::QuarterDoesNotExistError.new if !quarter_exists?(page)
57
-
57
+
58
58
  curriculum_page = extract_curriculum_url(curriculum, page)
59
59
  raise Errors::CurriculumDoesNotExistError.new if curriculum_page.nil?
60
60
 
61
61
  curriculum_page = Base.connection.get("http://www.washington.edu/students/timeschd/#{term}/#{curriculum_page}")
62
62
  raise Errors::CurriculumDoesNotExistError.new if !curriculum_exists?(page)
63
-
63
+
64
64
  return {
65
65
  :type => :curriculum,
66
66
  :courses => extract_courses(curriculum_page)
67
67
  }
68
68
  end
69
-
69
+
70
70
  def find_course(raw_curriculum, term)
71
71
  curriculum, course = parse_curriculum(raw_curriculum)
72
72
  curriculum_data = find_curriculum(curriculum, term)
@@ -78,25 +78,25 @@ module RubyUW
78
78
  :courses => courses
79
79
  }
80
80
  end
81
-
81
+
82
82
  def find_course_in_data(course, data)
83
83
  data[:courses].each do |course_data, listing|
84
84
  next unless course_data[:name] =~ /#{course}$/
85
-
85
+
86
86
  return listing
87
87
  end
88
-
88
+
89
89
  return nil
90
90
  end
91
-
91
+
92
92
  def extract_courses(page)
93
93
  nodes = page.search("//table[@bgcolor=\"#d3d3d3\"][1]//following-sibling::table")
94
-
94
+
95
95
  courses = {}
96
96
  current_course = []
97
-
97
+
98
98
  nodes.each do |node|
99
- if node[:bgcolor] == "#99ccff"
99
+ if node[:bgcolor] == "#99ccff" || node[:bgcolor] == "#ccffcc"
100
100
  # If its a course header, start putting course listings under that
101
101
  # course header
102
102
  current_course = []
@@ -107,18 +107,18 @@ module RubyUW
107
107
  current_course.push(extract_course_listing(node))
108
108
  end
109
109
  end
110
-
110
+
111
111
  courses
112
112
  end
113
-
113
+
114
114
  def extract_course_header(node)
115
115
  Base.extract(node, ".//td[@width=\"50%\"]//a", [:name, :title])
116
116
  end
117
-
117
+
118
118
  def extract_course_listing(node)
119
119
  pre_node = node.search(".//pre")
120
120
  pre_text = pre_node.inner_text.gsub("\302\240", "").gsub("\n", "").strip.chomp
121
-
121
+
122
122
  # Ugly regex to match the <pre> text to extract the proper information for the
123
123
  # course.
124
124
  raise Errors::CourseListingMatchError.new(pre_text) unless pre_text =~ /^((IS\s+)|(Restr\s+))?>?([0-9]+)\s([A-Z0-9]{1,2})\s(.+?)\s(.+)/i #\s(([A-Z]+)\s(.+?))\s(([A-Z]+)\s([0-9]+))/i
@@ -130,65 +130,65 @@ module RubyUW
130
130
  :unformatted_entry => pre_node.inner_text.gsub("\302\240", "").strip.chomp
131
131
  }
132
132
  end
133
-
133
+
134
134
  def quarter_exists?(page)
135
135
  # Time Schedule - No Courses Offered
136
136
  return !(page.body.to_s =~ /Time Schedule - No Courses Offered/i)
137
137
  end
138
-
138
+
139
139
  # For now, unless MyUW changes, these are equivalent
140
140
  alias :curriculum_exists? :quarter_exists?
141
-
141
+
142
142
  def extract_curriculum_url(curriculum, page)
143
143
  links = page.search("a")
144
-
144
+
145
145
  links.each do |link|
146
146
  text = link.inner_text.gsub("\302\240", " ").to_s
147
-
147
+
148
148
  return link[:href].to_s if text =~ /^#{curriculum} \((.+?)\)$/i ||
149
149
  text =~ /^(.+?) \(#{curriculum}\)$/i
150
150
  end
151
-
151
+
152
152
  return nil
153
153
  end
154
-
154
+
155
155
  def parse_curriculum(curriculum)
156
156
  return nil unless curriculum =~ /^(.+?)\s*(\d+)$/
157
157
  return $1, $2
158
158
  end
159
159
  end
160
160
  end
161
-
161
+
162
162
  module Errors
163
163
  # An error indicating that a quarter does not exist in the time schedule
164
164
  class QuarterDoesNotExistError < Error; end
165
-
165
+
166
166
  # An error indicating that the curriculum requested does not exist
167
167
  class CurriculumDoesNotExistError < Error; end
168
-
168
+
169
169
  # An error indicating that the course listing didn't match the format
170
170
  class CourseListingMatchError < Error
171
171
  attr_reader :listing_text
172
-
172
+
173
173
  def initialize(listing_text, message = nil)
174
174
  @listing_text = listing_text
175
-
175
+
176
176
  message = "Failed to match: #{@listing_text}" if message.nil?
177
177
  super(message)
178
178
  end
179
179
  end
180
-
180
+
181
181
  # An error indicating that a course does not exist
182
182
  class CourseDoesNotExistError < Error
183
183
  attr_reader :curriculum
184
184
  attr_reader :course
185
185
  attr_reader :original
186
-
186
+
187
187
  def initialize(curriculum, course, original, message = nil)
188
188
  @curriculum = curriculum
189
189
  @course = course
190
190
  @original = original
191
-
191
+
192
192
  message = "Course does not exist: (#{curriculum}, #{course}) from \"#{original}\""
193
193
  super(message)
194
194
  end
data/lib/rubyuw.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'rubygems'
1
+ $:.unshift(File.dirname(__FILE__))
2
2
  require 'mechanize'
3
3
  require 'nokogiri'
4
4
  require 'rubyuw/errors'
data/rubyuw.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rubyuw}
8
- s.version = "0.99.12"
8
+ s.version = "0.99.13"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Mitchell Hashimoto"]
12
- s.date = %q{2010-02-04}
12
+ s.date = %q{2010-02-20}
13
13
  s.description = %q{Library which provides a ruby interface to the University of Washington student portal.}
14
14
  s.email = %q{mitchell.hashimoto@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -65,6 +65,7 @@ Gem::Specification.new do |s|
65
65
  "test/mocked/fixture_pages/sln_no_course_notes.html",
66
66
  "test/mocked/fixture_pages/sln_no_enrollment_info.html",
67
67
  "test/mocked/fixture_pages/sln_status.html",
68
+ "test/mocked/fixture_pages/time_schedule_arthis.html",
68
69
  "test/mocked/fixture_pages/time_schedule_chem.html",
69
70
  "test/mocked/fixture_pages/welcome.html",
70
71
  "test/mocked/schedule_test.rb",
@@ -4,45 +4,45 @@ class CurriculumTest < Test::Unit::TestCase
4
4
  setup do
5
5
  RubyUW::Curriculum.publicize_singleton_methods
6
6
  end
7
-
7
+
8
8
  teardown do
9
9
  RubyUW::Curriculum.protect_singleton_methods
10
10
  end
11
-
11
+
12
12
  context "properly routing to find_curriculum or find_course" do
13
13
  setup do
14
14
  @curriculums = ["Chemistry", "BIO A", "CSE", " CHEM ", "CHEMISTRY"]
15
15
  @courses = ["CHEM 142", "BIO A 240", " CHEM 142 ", " BIO A 240 "]
16
16
  @term = "WIN2010"
17
17
  end
18
-
18
+
19
19
  should "recognize each of the curriculums" do
20
20
  RubyUW::Curriculum.expects(:find_curriculum).times(@curriculums.length).with(anything, @term)
21
21
  RubyUW::Curriculum.expects(:find_course).never
22
-
22
+
23
23
  @curriculums.each do |curriculum|
24
24
  RubyUW::Curriculum.find(curriculum, @term)
25
25
  end
26
26
  end
27
-
27
+
28
28
  should "recognize each of the courses" do
29
29
  RubyUW::Curriculum.expects(:find_curriculum).never
30
30
  RubyUW::Curriculum.expects(:find_course).times(@courses.length)
31
-
31
+
32
32
  @courses.each do |course|
33
33
  RubyUW::Curriculum.find(course, @term)
34
34
  end
35
35
  end
36
-
36
+
37
37
  should "strip '+' out of the term" do
38
38
  @term = "WIN+2010"
39
39
  @fixed_term = "WIN2010"
40
-
40
+
41
41
  RubyUW::Curriculum.expects(:find_curriculum).once.with(anything, @fixed_term)
42
42
  RubyUW::Curriculum.find(@curriculums[0], @term)
43
43
  end
44
44
  end
45
-
45
+
46
46
  context "finding course information" do
47
47
  setup do
48
48
  @term = "WIN2010"
@@ -55,6 +55,7 @@ class CurriculumTest < Test::Unit::TestCase
55
55
  "CHEM 142" => ["CHEM", "142"],
56
56
  "Chemistry 142" => ["Chemistry", "142"],
57
57
  "BIO A 240" => ["BIO A", "240"],
58
+ "ART H 203" => ["ART H", "203"],
58
59
  "GERMAN446" => ["GERMAN", "446"],
59
60
  "I'm invalid =]" => [nil, nil],
60
61
  "CHEM INVALID" => [nil, nil]
@@ -69,40 +70,72 @@ class CurriculumTest < Test::Unit::TestCase
69
70
  end
70
71
  end
71
72
  end
72
-
73
+
73
74
  context "finding course within returned curriculum information" do
74
- setup do
75
- @page = RubyUW::Base.connection.get(path_to_html("time_schedule_chem"))
76
- @data = {
77
- :type => :curriculum,
78
- :courses => RubyUW::Curriculum.extract_courses(@page)
79
- }
80
-
81
- # Below pulled directly from Chem WIN2010 time schedule
82
- @listings_count = {
83
- "299" => 2,
84
- "321" => 3,
85
- "520" => 1,
86
- "317" => 8
87
- }
88
-
89
- @nonexistent_course = "111"
90
- end
91
-
92
- should "return proper number of listings for a course" do
93
- @listings_count.each do |course, amount|
94
- listing = RubyUW::Curriculum.find_course_in_data(course, @data)
95
-
96
- assert_not_nil listing
97
- assert_equal amount, listing.length
75
+ context "chem, win2010" do
76
+ setup do
77
+ @page = RubyUW::Base.connection.get(path_to_html("time_schedule_chem"))
78
+ @data = {
79
+ :type => :curriculum,
80
+ :courses => RubyUW::Curriculum.extract_courses(@page)
81
+ }
82
+
83
+ # Below pulled directly from Chem WIN2010 time schedule
84
+ @listings_count = {
85
+ "299" => 2,
86
+ "321" => 3,
87
+ "520" => 1,
88
+ "317" => 8
89
+ }
90
+
91
+ @nonexistent_course = "111"
92
+ end
93
+
94
+ should "return proper number of listings for a course" do
95
+ @listings_count.each do |course, amount|
96
+ listing = RubyUW::Curriculum.find_course_in_data(course, @data)
97
+
98
+ assert_not_nil listing
99
+ assert_equal amount, listing.length
100
+ end
101
+ end
102
+
103
+ should "return nil for a course which doesn't exist" do
104
+ assert_nil RubyUW::Curriculum.find_course_in_data(@nonexistent_course, @data)
98
105
  end
99
106
  end
100
-
101
- should "return nil for a course which doesn't exist" do
102
- assert_nil RubyUW::Curriculum.find_course_in_data(@nonexistent_course, @data)
107
+
108
+ context "art history, spr2010" do
109
+ setup do
110
+ @page = RubyUW::Base.connection.get(path_to_html("time_schedule_arthis"))
111
+ @data = {
112
+ :type => :curriculum,
113
+ :courses => RubyUW::Curriculum.extract_courses(@page)
114
+ }
115
+
116
+ # Below pulled directly from SPR2010 time schedule
117
+ @listings_count = {
118
+ "203" => 15
119
+ }
120
+
121
+ @nonexistent_course = "111"
122
+ end
123
+
124
+ should "return proper number of listings for a course" do
125
+ @listings_count.each do |course, amount|
126
+ listing = RubyUW::Curriculum.find_course_in_data(course, @data)
127
+
128
+ assert_not_nil listing
129
+ assert_equal amount, listing.length
130
+ end
131
+ end
132
+
133
+ should "return nil for a course which doesn't exist" do
134
+ assert_nil RubyUW::Curriculum.find_course_in_data(@nonexistent_course, @data)
135
+ end
103
136
  end
104
137
  end
105
-
138
+
106
139
  context "the actual find_course method" do
107
140
  setup do
108
141
  @raw_curriculum = "CHEM 142"
@@ -112,20 +145,20 @@ class CurriculumTest < Test::Unit::TestCase
112
145
  :type => :curriculum,
113
146
  :courses => RubyUW::Curriculum.extract_courses(@page)
114
147
  }
115
-
148
+
116
149
  @listing = RubyUW::Curriculum.find_course_in_data(@course, @data)
117
-
150
+
118
151
  RubyUW::Curriculum.expects(:parse_curriculum).once.returns([@curriculum, @course])
119
152
  RubyUW::Curriculum.expects(:find_curriculum).once.returns(@data)
120
153
  end
121
-
154
+
122
155
  should "raise a CourseDoesNotExistError if it can't be parsed" do
123
156
  RubyUW::Curriculum.expects(:find_course_in_data).once.returns(nil)
124
157
  assert_raises(RubyUW::Errors::CourseDoesNotExistError) {
125
158
  RubyUW::Curriculum.find_course(@raw_curriculum, @term)
126
159
  }
127
160
  end
128
-
161
+
129
162
  should "return a hash on a valid course" do
130
163
  RubyUW::Curriculum.expects(:find_course_in_data).once.returns(@listing)
131
164
  assert_nothing_raised {
@@ -137,44 +170,44 @@ class CurriculumTest < Test::Unit::TestCase
137
170
  end
138
171
  end
139
172
  end
140
-
173
+
141
174
  context "finding curriculum information" do
142
175
  context "with checking existence of a quarter" do
143
176
  setup do
144
177
  @page = mock('page')
145
178
  end
146
-
179
+
147
180
  should "return false if page contains the string 'Time Schedule - No Courses Offered'" do
148
181
  @page.stubs(:body).returns("Time Schedule - No Courses Offered")
149
182
  assert !RubyUW::Curriculum.quarter_exists?(@page)
150
183
  end
151
-
184
+
152
185
  should "return true if page does not contain that string" do
153
186
  @page.stubs(:body).returns("HI!")
154
187
  assert RubyUW::Curriculum.quarter_exists?(@page)
155
188
  end
156
189
  end
157
-
190
+
158
191
  context "with checking existence of a curriculum" do
159
192
  setup do
160
193
  @page = mock('page')
161
194
  end
162
-
195
+
163
196
  should "return false if page contains the string 'Time Schedule - No Courses Offered'" do
164
197
  @page.stubs(:body).returns("Time Schedule - No Courses Offered")
165
198
  assert !RubyUW::Curriculum.curriculum_exists?(@page)
166
199
  end
167
-
200
+
168
201
  should "return true if page does not contain that string" do
169
202
  @page.stubs(:body).returns("HI!")
170
203
  assert RubyUW::Curriculum.curriculum_exists?(@page)
171
204
  end
172
205
  end
173
-
206
+
174
207
  context "with finding the link for a curriculum" do
175
208
  setup do
176
209
  @page = RubyUW::Base.connection.get(path_to_html("quarter_time_schedule"))
177
-
210
+
178
211
  @curriculums = {
179
212
  "Chemistry" => "chem.html",
180
213
  "Biology" => "biology.html",
@@ -184,7 +217,7 @@ class CurriculumTest < Test::Unit::TestCase
184
217
  "UBASK" => nil
185
218
  }
186
219
  end
187
-
220
+
188
221
  should "extract proper URLs for curriculums" do
189
222
  @curriculums.each do |curric, url|
190
223
  assert_equal url, RubyUW::Curriculum.extract_curriculum_url(curric, @page)
@@ -192,7 +225,7 @@ class CurriculumTest < Test::Unit::TestCase
192
225
  end
193
226
  end
194
227
  end
195
-
228
+
196
229
  context "extracting course information" do
197
230
  setup do
198
231
  @page = RubyUW::Base.connection.get(path_to_html("time_schedule_chem"))
@@ -205,25 +238,25 @@ class CurriculumTest < Test::Unit::TestCase
205
238
  :title => "GENERAL CHEMISTRY"
206
239
  }
207
240
  end
208
-
241
+
209
242
  should "extract proper information out of a header" do
210
243
  header_node = @page.search("//table[@bgcolor=\"#99ccff\"]")[0]
211
-
244
+
212
245
  returned_header = RubyUW::Curriculum.extract_course_header(header_node)
213
246
  @header.each do |k,v|
214
247
  assert_equal v, returned_header[k]
215
248
  end
216
249
  end
217
-
250
+
218
251
  should "return nil for an invalid header" do
219
252
  header_node = @page.search("//table[@bgcolor=\"#d3d3d3\"]")[0]
220
-
221
- assert_nothing_raised {
253
+
254
+ assert_nothing_raised {
222
255
  assert_nil RubyUW::Curriculum.extract_course_header(header_node)
223
256
  }
224
257
  end
225
258
  end
226
-
259
+
227
260
  context "extracting a course listing" do
228
261
  setup do
229
262
  @listing = {
@@ -232,35 +265,35 @@ class CurriculumTest < Test::Unit::TestCase
232
265
  :type => "LC"
233
266
  }
234
267
  end
235
-
268
+
236
269
  should "return the proper information for the first listing" do
237
270
  node = @page.search("//table[@bgcolor=\"#99ccff\"]//following-sibling::table")[0]
238
-
271
+
239
272
  returned = RubyUW::Curriculum.extract_course_listing(node)
240
273
  @listing.each do |k,v|
241
274
  assert_equal v, returned[k]
242
275
  end
243
276
  end
244
-
277
+
245
278
  should "contain unformatted text as well" do
246
279
  node = @page.search("//table[@bgcolor=\"#99ccff\"]//following-sibling::table")[0]
247
-
280
+
248
281
  returned = RubyUW::Curriculum.extract_course_listing(node)
249
282
  assert !returned[:unformatted_entry].empty?
250
283
  end
251
-
284
+
252
285
  should "raise an exception if the listing does not match" do
253
286
  pre_node = mock('pre_node')
254
287
  pre_node.expects(:inner_text).once.returns("I don't match")
255
288
  node = mock('node')
256
289
  node.expects(:search).once.returns(pre_node)
257
-
290
+
258
291
  assert_raises(RubyUW::Errors::CourseListingMatchError) {
259
292
  RubyUW::Curriculum.extract_course_listing(node)
260
293
  }
261
294
  end
262
295
  end
263
-
296
+
264
297
  context "extracting the list of courses" do
265
298
  should "not raise any errors on a valid page" do
266
299
  assert_nothing_raised {
@@ -268,26 +301,26 @@ class CurriculumTest < Test::Unit::TestCase
268
301
  }
269
302
  end
270
303
  end
271
-
304
+
272
305
  # Basically the "edge cases" are added to whenever a CourseListingMatchError is
273
306
  # experienced in the real world
274
307
  context "extracting a course listing edge cases" do
275
308
  context "WIN2010 13066" do
276
309
  setup do
277
310
  @page = RubyUW::Base.connection.get(path_to_html("curric_edge_win2010_engl"))
278
-
311
+
279
312
  @listing = {
280
313
  :sln => "13066",
281
314
  :section => "A2"
282
315
  }
283
316
  end
284
-
317
+
285
318
  should "properly parse the entire curriculum" do
286
319
  assert_nothing_raised {
287
320
  RubyUW::Curriculum.extract_courses(@page)
288
321
  }
289
322
  end
290
-
323
+
291
324
  should "properly parse the edge listing" do
292
325
  related = RubyUW::Curriculum.extract_courses(@page)
293
326
  sln_obj = related.values.flatten.detect { |course| course[:sln] == @listing[:sln] }
@@ -0,0 +1,524 @@
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
34
+ "http://www.w3.org/TR/REC-html40/strict.dtd">
35
+ <HTML>
36
+ <HEAD>
37
+ <meta name="robots" content="index,nofollow">
38
+ <TITLE>ART HISTORY</TITLE>
39
+ <LINK REL="stylesheet" HREF="/home/home.css" TYPE="text/css">
40
+ </HEAD>
41
+ <BODY>
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+ <div><a href="http://www.washington.edu/"><img id="toplogo" src="/home/graphics/uw_logo.gif" alt="University of Washington" /></a></div>
58
+
59
+ <div id="toolbar">
60
+ &nbsp;<span class="l1text"><a href="/home/search.html">Search</a> |
61
+ <a href="/home/directories.html">Directories</a> |
62
+ <a href="http://www.lib.washington.edu/research/">Reference
63
+ Tools</a></span></div>
64
+
65
+
66
+ <!--Section Banner Table -->
67
+
68
+
69
+
70
+
71
+
72
+ <div class="bannerwrapper">
73
+ <div id="topbanner" ><img src="/home/graphics/rib0.gif" width="6" height="16" alt="" /></div>
74
+ </div>
75
+
76
+ <div id="crumbs"><span class="l1text"><a href="/">UW Home</a> &gt; <a href="/uwin/">UWIN</a> &gt; <a href="/students/">Student Guide</a> &gt; <a href="/students/timeschd/">Time Schedule</a></span>&nbsp;</div><div class="forceclear"></div>
77
+
78
+
79
+
80
+
81
+
82
+
83
+ <a class="navlink" href="/students/timeschd/SPR2010/"><img src="/home/graphics/arrow.gif" alt=" | " height="13" width="18" border="0">Spring 2010 Time Schedule</a>
84
+
85
+
86
+ <h1>Spring Quarter 2010 Time Schedule</h1>
87
+ <table width="100%"><tr><td valign="top" width="60%"><h2>ART HISTORY<br>(COLLEGE OF ARTS & SCIENCES
88
+ )<h2></td>
89
+ <td valign="top" align="center"><table cellspacing="0" cellpadding="2"><tr bgcolor="#ccffcc"><td>Enrollment and status (open/closed) were accurate when this page was created (<b>12:05 am February 20, 2010</b>) but may have changed since then.
90
+ For current enrollment and status, check the <a href="https://sdb.admin.washington.edu/timeschd/uwnetid/tsstat.asp?QTRYR=SPR+2010&CURRIC=ART+H ">Enrollment Summary</a>. (UW NetID required.)</td></tr></table>
91
+ </td></tr></table>
92
+ <a href="/students/reg/tshelp/tshelp.html" ONCLICK="javascript:openWin('/students/reg/tshelp/tshelp.html','w_help',600,600);return false">Help with the UW Time Schedule</a>
93
+ <p>
94
+ <table width="100%" bgcolor="#d3d3d3"><tr><td>
95
+ <pre><b>Enrl Sect Crs
96
+ Restr SLN ID Cred Meeting Times Bldg/Rm Instructor Status Enrl/Lim Grades Fee Other
97
+ <a href="/students/reg/tshelp/restr.html"
98
+ ONCLICK="javascript:openWin('/students/reg/tshelp/restr.html','w_help',300,400);return false"
99
+ target="HELPWIN">?</a> <a href="/students/reg/tshelp/sln.html"
100
+ ONCLICK="javascript:openWin('/students/reg/tshelp/sln.html','w_help',300,400);return false"
101
+ target="HELPWIN">?</a> <a href="/students/reg/tshelp/cred.html"
102
+ ONCLICK="javascript:openWin('/students/reg/tshelp/cred.html','w_help',300,400);return false"
103
+ target="HELPWIN">?</a> <a href="/students/reg/tshelp/meetings.html"
104
+ ONCLICK="javascript:openWin('/students/reg/tshelp/meetings.html','w_help',300,400);return false"
105
+ target="HELPWIN">?</a> <a href="/students/reg/tshelp/bldg.html"
106
+ ONCLICK="javascript:openWin('/students/reg/tshelp/bldg.html','w_help',300,400);return false"
107
+ target="HELPWIN">?</a> <a href="/students/reg/tshelp/instr.html"
108
+ ONCLICK="javascript:openWin('/students/reg/tshelp/instr.html','w_help',300,400);return false"
109
+ target="HELPWIN">?</a> <a href="/students/reg/tshelp/status.html"
110
+ ONCLICK="javascript:openWin('/students/reg/tshelp/status.html','w_help',300,400);return false"
111
+ target="HELPWIN">?</a> <a href="/students/reg/tshelp/enrllim.html"
112
+ ONCLICK="javascript:openWin('/students/reg/tshelp/enrllim.html','w_help',300,400);return false"
113
+ target="HELPWIN">?</a> <a href="/students/reg/tshelp/grades.html"
114
+ ONCLICK="javascript:openWin('/students/reg/tshelp/grades.html','w_help',300,400);return false"
115
+ target="HELPWIN">?</a> <a href="/students/reg/tshelp/crsfee.html"
116
+ ONCLICK="javascript:openWin('/students/reg/tshelp/crsfee.html','w_help',300,400);return false"
117
+ target="HELPWIN">?</a> <a href="/students/reg/tshelp/other.html"
118
+ ONCLICK="javascript:openWin('/students/reg/tshelp/other.html','w_help',300,400);return false"
119
+ target="HELPWIN">?</a></b></td></tr></table></pre>
120
+
121
+ <br>
122
+
123
+ <table bgcolor="#ccffcc" width="100%">
124
+ <tr><td width="50%"><b><A NAME=arth203>ART H&nbsp;&nbsp; 203 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth203>SURV WEST ART-MOD</A></b></td><td width="15%"><b>(VLPA)</b></td><td align="right" width="35%"></td></tr></table>
125
+ <table width="100%" ><tr><td><pre>
126
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10500>10500</A> A 5 MWF 130-220 <A HREF=/students/maps/map.cgi?GUG>GUG</A> 220 <A HREF=/students/icd/S/arthis/203casteras.html>CASTERAS,SUSAN P</a> Open 19/ 345 $30
127
+ OPT'L LINK WRIT COURSE:SEE
128
+ ENGL
129
+ 297
130
+ </td></tr></table>
131
+ <table width="100%" ><tr><td><pre>
132
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10501>10501</A> AA QZ TTh 930-1020 <A HREF=/students/maps/map.cgi?ART>ART</A> 003 Open 2/ 25
133
+ </td></tr></table>
134
+ <table width="100%" ><tr><td><pre>
135
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10502>10502</A> AB QZ TTh 930-1020 <A HREF=/students/maps/map.cgi?ART>ART</A> 006 Open 0/ 25
136
+ </td></tr></table>
137
+ <table width="100%" ><tr><td><pre>
138
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10503>10503</A> AC QZ TTh 930-1020 <A HREF=/students/maps/map.cgi?ART>ART</A> 317 Open 1/ 25
139
+ </td></tr></table>
140
+ <table width="100%" ><tr><td><pre>
141
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10504>10504</A> AD QZ TTh 1030-1120 <A HREF=/students/maps/map.cgi?ART>ART</A> 003 Open 5/ 25
142
+ </td></tr></table>
143
+ <table width="100%" ><tr><td><pre>
144
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10505>10505</A> AE QZ TTh 1030-1120 <A HREF=/students/maps/map.cgi?ART>ART</A> 006 Open 1/ 25
145
+ </td></tr></table>
146
+ <table width="100%" ><tr><td><pre>
147
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10506>10506</A> AF QZ TTh 1030-1120 <A HREF=/students/maps/map.cgi?ART>ART</A> 317 Open 1/ 25
148
+ </td></tr></table>
149
+ <table width="100%" ><tr><td><pre>
150
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10507>10507</A> AG QZ TTh 1130-1220 <A HREF=/students/maps/map.cgi?ART>ART</A> 003 Open 2/ 25
151
+ </td></tr></table>
152
+ <table width="100%" ><tr><td><pre>
153
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10508>10508</A> AH QZ TTh 1130-1220 <A HREF=/students/maps/map.cgi?ART>ART</A> 006 Open 1/ 25
154
+ </td></tr></table>
155
+ <table width="100%" ><tr><td><pre>
156
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10509>10509</A> AI QZ TTh 1230-120 <A HREF=/students/maps/map.cgi?ART>ART</A> 003 Open 0/ 25
157
+ </td></tr></table>
158
+ <table width="100%" ><tr><td><pre>
159
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10510>10510</A> AJ QZ TTh 1230-120 <A HREF=/students/maps/map.cgi?ART>ART</A> 004 Open 1/ 25
160
+ </td></tr></table>
161
+ <table width="100%" ><tr><td><pre>
162
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10511>10511</A> AK QZ TTh 1230-120 <A HREF=/students/maps/map.cgi?ART>ART</A> 006 Open 1/ 25
163
+ </td></tr></table>
164
+ <table width="100%" ><tr><td><pre>
165
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10512>10512</A> AL QZ TTh 130-220 <A HREF=/students/maps/map.cgi?ART>ART</A> 003 Open 3/ 25
166
+ </td></tr></table>
167
+ <table width="100%" ><tr><td><pre>
168
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10513>10513</A> AM QZ TTh 130-220 <A HREF=/students/maps/map.cgi?ART>ART</A> 004 Open 0/ 25
169
+ </td></tr></table>
170
+ <table width="100%" ><tr><td><pre>
171
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10514>10514</A> AN QZ TTh 230-320 <A HREF=/students/maps/map.cgi?ART>ART</A> 006 Open 1/ 25
172
+ </td></tr></table>
173
+
174
+ <br>
175
+
176
+ <table bgcolor="#ccffcc" width="100%">
177
+ <tr><td width="50%"><b><A NAME=arth205>ART H&nbsp;&nbsp; 205 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth205>SURVEY TRIBAL ART</A></b></td><td width="15%"><b>(VLPA/I&S)</b></td><td align="right" width="35%"></td></tr></table>
178
+ <table width="100%" ><tr><td><pre>
179
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10515>10515</A> A 5 MWF 1200-120 <A HREF=/students/maps/map.cgi?ART>ART</A> 317 <A HREF=/students/icd/S/arthis/205blithe.html>BRAVMANN,RENE A.</a> Open 11/ 40 $30
180
+ </td></tr></table>
181
+
182
+ <br>
183
+
184
+ <table bgcolor="#ccffcc" width="100%">
185
+ <tr><td width="50%"><b><A NAME=arth309>ART H&nbsp;&nbsp; 309 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth309>TOPICS IN ART HIST</A></b></td><td width="15%"><b>(VLPA)</b></td><td align="right" width="35%"></td></tr></table>
186
+ <table width="100%" ><tr><td><pre>
187
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10516>10516</A> A 5 MWF 230-350 <A HREF=/students/maps/map.cgi?ART>ART</A> 003 <A HREF=/students/icd/S/arthis/309krice.html>RICE,KOLYA</a> Open 8/ 65 $30
188
+ ART AND THEORY SINCE 1960
189
+ </td></tr></table>
190
+ <table width="100%" ><tr><td><pre>
191
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10517>10517</A> B 5 MWF 1130-1250 <A HREF=/students/maps/map.cgi?ART>ART</A> 003 <A HREF=/students/icd/S/arthis/309mariafel.html>FELICIANO,MARIA J.</a> Open 5/ 65 $30
192
+ THE ART OF COLONIAL LATIN AMERICA
193
+ </td></tr></table>
194
+
195
+ <br>
196
+
197
+ <table bgcolor="#ccffcc" width="100%">
198
+ <tr><td width="50%"><b><A NAME=arth311>ART H&nbsp;&nbsp; 311 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth311>ART IMPERIAL CHINA</A></b></td><td width="15%"><b>(VLPA/I&S)</b></td><td align="right" width="35%"></td></tr></table>
199
+ <table width="100%" ><tr><td><pre>
200
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10518>10518</A> A 5 MWF 100-220 <A HREF=/students/maps/map.cgi?ART>ART</A> 003 <A HREF=/students/icd/S/arthis/311skelley2.html>KELLEY,SONJA J.</a> Open 11/ 65 $30 W
201
+ </td></tr></table>
202
+
203
+ <br>
204
+
205
+ <table bgcolor="#ccffcc" width="100%">
206
+ <tr><td width="50%"><b><A NAME=arth318>ART H&nbsp;&nbsp; 318 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth318>JAPANESE PRINTS</A></b></td><td width="15%"><b>(VLPA)</b></td><td align="right" width="35%"></td></tr></table>
207
+ <table width="100%" ><tr><td><pre>
208
+ Restr <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=18739>18739</A> A 5 TTh 1130-1220 <A HREF=/students/maps/map.cgi?ART>ART</A> 317 <A HREF=/students/icd/S/arthis/318jasbooks.html>STEVENSON,JOHN A.</a> Open 8/ 40 $30
209
+ FLEETING BEAUTY:JAPANESE WOODBLOCK
210
+ PRINTS FEATURING A SPECIAL
211
+ EXHIBITION AT THE SEATTLE ART
212
+ MUSEUM. FRIDAY CLASS MEETS
213
+ FREQUENTLY AT THE MUSEUM.
214
+ </td></tr></table>
215
+ <table width="100%" ><tr><td><pre>
216
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=18740>18740</A> AA QZ F 100-250 * * <A HREF=/students/icd/S/arthis/318jasbooks.html>STEVENSON,JOHN A.</a> Open 6/ 20
217
+ CLASS MEETS SOME DAYS AT SEATTLE
218
+ ASIAN ART
219
+ MUSEUM
220
+ </td></tr></table>
221
+ <table width="100%" ><tr><td><pre>
222
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=18741>18741</A> AB QZ F 300-450 * * <A HREF=/students/icd/S/arthis/318jasbooks.html>STEVENSON,JOHN A.</a> Open 2/ 20
223
+ CLASS MEETS SOME DAYS AT SEATTLE
224
+ ASIAN ART
225
+ MUSEUM
226
+ </td></tr></table>
227
+
228
+ <br>
229
+
230
+ <table bgcolor="#ccffcc" width="100%">
231
+ <tr><td width="50%"><b><A NAME=arth361>ART H&nbsp;&nbsp; 361 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth361>ITALIAN REN ART</A></b></td><td width="15%"><b>(VLPA)</b></td><td align="right" width="35%"></td></tr></table>
232
+ <table width="100%" ><tr><td><pre>
233
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10523>10523</A> A 5 MWF 1030-1150 <A HREF=/students/maps/map.cgi?ART>ART</A> 317 <A HREF=/students/icd/S/arthis/361ahuppert.html>HUPPERT,ANN C</a> Open 14/ 42 $30
234
+ </td></tr></table>
235
+
236
+ <br>
237
+
238
+ <table bgcolor="#ccffcc" width="100%">
239
+ <tr><td width="50%"><b><A NAME=arth366>ART H&nbsp;&nbsp; 366 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth366>NORTHERN REN ART</A></b></td><td width="15%"><b>(VLPA)</b></td><td align="right" width="35%"></td></tr></table>
240
+ <table width="100%" ><tr><td><pre>
241
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10524>10524</A> A 5 MWF 130-250 <A HREF=/students/maps/map.cgi?ART>ART</A> 317 BUNN,STEVEN E Open 5/ 40 $30 W
242
+ </td></tr></table>
243
+
244
+ <br>
245
+
246
+ <table bgcolor="#ccffcc" width="100%">
247
+ <tr><td width="50%"><b><A NAME=arth380>ART H&nbsp;&nbsp; 380 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth380>19TH & 20TH C ART</A></b></td><td width="15%"><b>(VLPA)</b></td><td align="right" width="35%"></td></tr></table>
248
+ <table width="100%" ><tr><td><pre>
249
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10525>10525</A> A 5 MWF 930-1050 <A HREF=/students/maps/map.cgi?ART>ART</A> 003 <A HREF=/students/icd/S/arthis/380marek.html>WIECZOREK,MAREK K.</a> Open 15/ 65 $30
250
+ </td></tr></table>
251
+
252
+ <br>
253
+
254
+ <table bgcolor="#ccffcc" width="100%">
255
+ <tr><td width="50%"><b><A NAME=arth400>ART H&nbsp;&nbsp; 400 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth400>ART H AND CRITICISM </A></b></td><td width="15%"><b>(VLPA)</b></td><td align="right" width="35%"></td></tr></table>
256
+ <table width="100%" bgcolor="#d3d3d3"><tr><td><pre>
257
+ Restr <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10526>10526</A> A 5 MW 1230-150 <A HREF=/students/maps/map.cgi?ART>ART</A> 006 <A HREF=/students/icd/S/arthis/400marek.html>WIECZOREK,MAREK K.</a> Closed 20/ 20 $30 J
258
+ POST IMPRESSIONISM TECHNOLOGIES
259
+ OF VISION CEZANNE, SERAT, MONDIAN
260
+ </td></tr></table>
261
+ <table width="100%" ><tr><td><pre>
262
+ Restr <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10527>10527</A> B 3 MW 1030-1150 <A HREF=/students/maps/map.cgi?ART>ART</A> 004 KHULLAR,SONAL Open 0/ 12 $30 J
263
+ ART AND EMPIRE IN SOUTH ASIA 1750-
264
+ 1900
265
+ SISA MAJORS: SEE JSIS ADVISER
266
+ </td></tr></table>
267
+
268
+ <br>
269
+
270
+ <table bgcolor="#ccffcc" width="100%">
271
+ <tr><td width="50%"><b><A NAME=arth413>ART H&nbsp;&nbsp; 413 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth413>TOPICS CHINESE ART</A></b></td><td width="15%"><b>(VLPA)</b></td><td align="right" width="35%"></td></tr></table>
272
+ <table width="100%" ><tr><td><pre>
273
+ Restr <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=18730>18730</A> A 3 MW 930-1050 <A HREF=/students/maps/map.cgi?ART>ART</A> 006 <A HREF=/students/icd/S/arthis/413skelley2.html>KELLEY,SONJA J.</a> Open 1/ 15 $30 J
274
+ TOPIC: MODERN CHINESE PRINTMAKING
275
+ </td></tr></table>
276
+ <table width="100%" ><tr><td><pre>
277
+ Restr <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=18811>18811</A> B 3 T 230-520 * * Open 1/ 15 J
278
+ CHINESE PAINTING AND CERAMICS AT
279
+ THE SEATTLE ART MUSEUM: STUDIES IN
280
+ CONNOISSEURSHIP AND CHINESE ART
281
+ HISTORY. CLASS MEETS AT THE
282
+ SEATTLE ART
283
+ MUSEUM
284
+ </td></tr></table>
285
+
286
+ <br>
287
+
288
+ <table bgcolor="#ccffcc" width="100%">
289
+ <tr><td width="50%"><b><A NAME=arth443>ART H&nbsp;&nbsp; 443 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth443>ROMAN PAINTING</A></b></td><td width="15%"><b>(VLPA)</b></td><td align="right" width="35%"></td></tr></table>
290
+ <table width="100%" ><tr><td><pre>
291
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10529>10529</A> A 3 MWF 930-1020 <A HREF=/students/maps/map.cgi?ART>ART</A> 317 TOPPER,KATHRYN R. Open 14/ 20 $30 J
292
+ </td></tr></table>
293
+
294
+ <br>
295
+
296
+ <table bgcolor="#ccffcc" width="100%">
297
+ <tr><td width="50%"><b><A NAME=arth484>ART H&nbsp;&nbsp; 484 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth484>TOPICS MODERN ART</A></b></td><td width="15%"><b>(VLPA)</b></td><td align="right" width="35%"></td></tr></table>
298
+ <table width="100%" ><tr><td><pre>
299
+ Restr <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10530>10530</A> A 5 TTh 1230-150 <A HREF=/students/maps/map.cgi?ART>ART</A> 317 <A HREF=/students/icd/S/arthis/484failing.html>FAILING,PATRICIA A</a> Open 18/ 35 $30 J
300
+ DADA AND SURREALISM
301
+ </td></tr></table>
302
+
303
+ <br>
304
+
305
+ <table bgcolor="#ccffcc" width="100%">
306
+ <tr><td width="50%"><b><A NAME=arth494>ART H&nbsp;&nbsp; 494 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth494>PARIS ARCH/URBANISM </A></b></td><td width="15%"><b>(VLPA/I&S)</b></td><td align="right" width="35%"></td></tr></table>
307
+ <table width="100%" ><tr><td><pre>
308
+ Restr <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10531>10531</A> A 3 TTh 1030-1150 <A HREF=/students/maps/map.cgi?ART>ART</A> 004 <A HREF=/students/icd/S/arthis/494mlc.html>CLAUSEN,MEREDITH L</a> Open 11/ 20 $30 J
309
+ </td></tr></table>
310
+
311
+ <br>
312
+
313
+ <table bgcolor="#ccffcc" width="100%">
314
+ <tr><td width="50%"><b><A NAME=arth498>ART H&nbsp;&nbsp; 498 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth498>UNDERGRAD PRACTICUM </A></b></td><td width="15%"><b></b></td><td align="right" width="35%"></td></tr></table>
315
+ <table width="100%" ><tr><td><pre>
316
+ IS ><A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10532>10532</A> A 2-5 to be arranged 0/ 20 CR/NC
317
+ </td></tr></table>
318
+
319
+ <br>
320
+
321
+ <table bgcolor="#ccffcc" width="100%">
322
+ <tr><td width="50%"><b><A NAME=arth499>ART H&nbsp;&nbsp; 499 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth499>INDIVIDUAL PROJECTS </A></b></td><td width="15%"><b></b></td><td align="right" width="35%"></td></tr></table>
323
+ <table width="100%" ><tr><td><pre>
324
+ IS ><A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10533>10533</A> A 2-5 to be arranged 1/ 25
325
+ </td></tr></table>
326
+
327
+ <br>
328
+
329
+ <table bgcolor="#ccffcc" width="100%">
330
+ <tr><td width="50%"><b><A NAME=arth501>ART H&nbsp;&nbsp; 501 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth501>SMNR GEN FLD OF ART </A></b></td><td width="15%"><b></b></td><td align="right" width="35%"></td></tr></table>
331
+ <table width="100%" ><tr><td><pre>
332
+ Restr <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10534>10534</A> A 5 to be arranged CASTERAS,SUSAN P Open 0/ 6
333
+ ART H 203 TAS ONLY
334
+ </td></tr></table>
335
+
336
+ <br>
337
+
338
+ <table bgcolor="#ccffcc" width="100%">
339
+ <tr><td width="50%"><b><A NAME=arth509>ART H&nbsp;&nbsp; 509 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth509>SEM TOPICS ART HIST </A></b></td><td width="15%"><b></b></td><td align="right" width="35%"></td></tr></table>
340
+ <table width="100%" ><tr><td><pre>
341
+ Restr <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10535>10535</A> A 5 W 300-550 <A HREF=/students/maps/map.cgi?SAV>SAV</A> 137 <A HREF=/students/icd/S/arthis/509failing.html>FAILING,PATRICIA A</a> Open 3/ 10 $30
342
+ LEGAL AND ETHICAL ISSUES IN ART
343
+ </td></tr></table>
344
+
345
+ <br>
346
+
347
+ <table bgcolor="#ccffcc" width="100%">
348
+ <tr><td width="50%"><b><A NAME=arth521>ART H&nbsp;&nbsp; 521 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth521>TOPICS ASIAN ART</A></b></td><td width="15%"><b></b></td><td align="right" width="35%"></td></tr></table>
349
+ <table width="100%" ><tr><td><pre>
350
+ Restr <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10536>10536</A> A 5 MW 930-1050 <A HREF=/students/maps/map.cgi?ART>ART</A> 006 <A HREF=/students/icd/S/arthis/521skelley2.html>KELLEY,SONJA J.</a> Open 0/ 5 $30 %J
351
+ TOPICS: MODERN CHINESE
352
+ PRINTMAKING
353
+ </td></tr></table>
354
+ <table width="100%" ><tr><td><pre>
355
+ Restr <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10537>10537</A> B 5 MW 1030-1150 <A HREF=/students/maps/map.cgi?ART>ART</A> 004 KHULLAR,SONAL Open 3/ 5 $30 %J
356
+ ART AND EMPIRE IN SOUTH ASIA 1750-
357
+ 1900
358
+ JOINT WITH ART H 400B
359
+ </td></tr></table>
360
+ <table width="100%" ><tr><td><pre>
361
+ Restr <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=18731>18731</A> C 5 T 230-520 * * Open 3/ 5 %J
362
+ CHINESE PAINTING AND CERAMICS AT
363
+ THE SEATTLE ART MUSEUM: STUDIES IN
364
+ CONNOISSEURSHIP AND CHINESE ART
365
+ HISTORY. CLASS MEETS AT THE
366
+ SEATTLE ART
367
+ MUSEUM
368
+ </td></tr></table>
369
+
370
+ <br>
371
+
372
+ <table bgcolor="#ccffcc" width="100%">
373
+ <tr><td width="50%"><b><A NAME=arth525>ART H&nbsp;&nbsp; 525 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth525>TOPIC MOD/C ART/ARC </A></b></td><td width="15%"><b></b></td><td align="right" width="35%"></td></tr></table>
374
+ <table width="100%" ><tr><td><pre>
375
+ Restr <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10538>10538</A> A 5 MW 1230-150 <A HREF=/students/maps/map.cgi?ART>ART</A> 006 WIECZOREK,MAREK K. Open 0/ 5 $30 %J
376
+ POST IMPRESSIONISM
377
+ TECHNOLOGIES
378
+ OF VISION CEZANNE,
379
+ SERAT,
380
+ MONDRIAN
381
+ JOINT WITH ART H 400A
382
+ </td></tr></table>
383
+ <table width="100%" ><tr><td><pre>
384
+ Restr <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10539>10539</A> B 5 TTh 1230-150 <A HREF=/students/maps/map.cgi?ART>ART</A> 317 <A HREF=/students/icd/S/arthis/525failing.html>FAILING,PATRICIA A</a> Open 1/ 5 $30 %J
385
+ DADA AND
386
+ SURREALISM
387
+ JOINT WITH ART H 484A
388
+ </td></tr></table>
389
+ <table width="100%" ><tr><td><pre>
390
+ Restr <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10540>10540</A> C 5 TTh 1030-1150 <A HREF=/students/maps/map.cgi?ART>ART</A> 004 CLAUSEN,MEREDITH L Open 2/ 3 $30 %J
391
+ TOPICS: ARCHITECTURE AND
392
+ URBANISM
393
+ IN PARIS
394
+ JOINT WITH ART H 525C
395
+ </td></tr></table>
396
+
397
+ <br>
398
+
399
+ <table bgcolor="#ccffcc" width="100%">
400
+ <tr><td width="50%"><b><A NAME=arth531>ART H&nbsp;&nbsp; 531 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth531>SMNR IN TRIBAL ART</A></b></td><td width="15%"><b></b></td><td align="right" width="35%"></td></tr></table>
401
+ <table width="100%" ><tr><td><pre>
402
+ Restr <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10541>10541</A> A 5 M 230-520 <A HREF=/students/maps/map.cgi?ART>ART</A> 312 <A HREF=/students/icd/S/arthis/531blithe.html>BRAVMANN,RENE A.</a> Open 1/ 12 $30
403
+ </td></tr></table>
404
+
405
+ <br>
406
+
407
+ <table bgcolor="#ccffcc" width="100%">
408
+ <tr><td width="50%"><b><A NAME=arth533>ART H&nbsp;&nbsp; 533 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth533>SEM N AM NATIVE ART </A></b></td><td width="15%"><b></b></td><td align="right" width="35%"></td></tr></table>
409
+ <table width="100%" ><tr><td><pre>
410
+ Restr <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10542>10542</A> A 5 Th 230-550 <A HREF=/students/maps/map.cgi?ART>ART</A> 312 <A HREF=/students/icd/S/arthis/533wright.html>WRIGHT,ROBIN K</a> Open 6/ 12 $30
411
+ </td></tr></table>
412
+
413
+ <br>
414
+
415
+ <table bgcolor="#ccffcc" width="100%">
416
+ <tr><td width="50%"><b><A NAME=arth541>ART H&nbsp;&nbsp; 541 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth541>SEMINAR GRK ROM ART </A></b></td><td width="15%"><b></b></td><td align="right" width="35%"></td></tr></table>
417
+ <table width="100%" ><tr><td><pre>
418
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10543>10543</A> A 5 T 230-550 <A HREF=/students/maps/map.cgi?ART>ART</A> 212 <A HREF=/students/icd/S/arthis/541ktopper.html>TOPPER,KATHRYN R.</a> Open 2/ 10 $30 J
419
+ </td></tr></table>
420
+
421
+ <br>
422
+
423
+ <table bgcolor="#ccffcc" width="100%">
424
+ <tr><td width="50%"><b><A NAME=arth597>ART H&nbsp;&nbsp; 597 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth597>GRADUATE INTERNSHIP </A></b></td><td width="15%"><b></b></td><td align="right" width="35%"></td></tr></table>
425
+ <table width="100%" ><tr><td><pre>
426
+ <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10544>10544</A> A 2-5 to be arranged Open 0/ 10 CR/NC
427
+ PERMISSION OF FACULTY ADVISER.
428
+ </td></tr></table>
429
+
430
+ <br>
431
+
432
+ <table bgcolor="#ccffcc" width="100%">
433
+ <tr><td width="50%"><b><A NAME=arth598>ART H&nbsp;&nbsp; 598 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth598>MASTER'S PRACTICUM</A></b></td><td width="15%"><b></b></td><td align="right" width="35%"></td></tr></table>
434
+ <table width="100%" ><tr><td><pre>
435
+ IS ><A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10545>10545</A> A VAR to be arranged 0/ 10E CR/NC
436
+ </td></tr></table>
437
+
438
+ <br>
439
+
440
+ <table bgcolor="#ccffcc" width="100%">
441
+ <tr><td width="50%"><b><A NAME=arth599>ART H&nbsp;&nbsp; 599 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth599>RDG-WRTG PROJECTS</A></b></td><td width="15%"><b></b></td><td align="right" width="35%"></td></tr></table>
442
+ <table width="100%" ><tr><td><pre>
443
+ IS ><A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10546>10546</A> A 2 to be arranged 0/ 45E
444
+ </td></tr></table>
445
+
446
+ <br>
447
+
448
+ <table bgcolor="#ccffcc" width="100%">
449
+ <tr><td width="50%"><b><A NAME=arth600>ART H&nbsp;&nbsp; 600 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth600>INDEPNDNT STDY/RSCH </A></b></td><td width="15%"><b></b></td><td align="right" width="35%"></td></tr></table>
450
+ <table width="100%" ><tr><td><pre>
451
+ IS ><A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10547>10547</A> A 1-10 to be arranged 0/ 20E
452
+ </td></tr></table>
453
+
454
+ <br>
455
+
456
+ <table bgcolor="#ccffcc" width="100%">
457
+ <tr><td width="50%"><b><A NAME=arth602>ART H&nbsp;&nbsp; 602 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth602>IND STDY/RSCH ROME</A></b></td><td width="15%"><b></b></td><td align="right" width="35%"></td></tr></table>
458
+ <table width="100%" ><tr><td><pre>
459
+ IS <A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10548>10548</A> A VAR to be arranged Open 0/ 6
460
+ </td></tr></table>
461
+
462
+ <br>
463
+
464
+ <table bgcolor="#ccffcc" width="100%">
465
+ <tr><td width="50%"><b><A NAME=arth700>ART H&nbsp;&nbsp; 700 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth700>MASTERS THESIS</A></b></td><td width="15%"><b></b></td><td align="right" width="35%"></td></tr></table>
466
+ <table width="100%" ><tr><td><pre>
467
+ IS ><A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10549>10549</A> A 1-10 to be arranged 0/ 15E CR/NC
468
+ </td></tr></table>
469
+
470
+ <br>
471
+
472
+ <table bgcolor="#ccffcc" width="100%">
473
+ <tr><td width="50%"><b><A NAME=arth800>ART H&nbsp;&nbsp; 800 </A>&nbsp;<A HREF=/students/crscat/arthis.html#arth800>DOCTORAL DISSERTATN </A></b></td><td width="15%"><b></b></td><td align="right" width="35%"></td></tr></table>
474
+ <table width="100%" ><tr><td><pre>
475
+ IS ><A HREF=https://sdb.admin.washington.edu/timeschd/uwnetid/sln.asp?QTRYR=SPR+2010&SLN=10550>10550</A> A 1-10 to be arranged 0/ 15E CR/NC
476
+ </td></tr></table>
477
+
478
+ <P>
479
+
480
+ <div id="footer"><div id="footerseal">
481
+ <a href="http://www.washington.edu/"><img src="/home/graphics/blockw.gif" width="53" height="37" alt="UW Logo" /></a>
482
+ </div>
483
+ <div id="addressright"></div>
484
+ <div id="address"><ADDRESS>
485
+ <A Href="http://depts.washington.edu/registra/">Office of the
486
+ Registrar</a>, 206-543-5378<BR>
487
+ <A
488
+ href="mailto:registrar@u.washington.edu">registrar@u.washington.edu</a><BR>
489
+ Modified: February 20, 2010
490
+ </ADDRESS>
491
+ </div>
492
+ </div>
493
+
494
+ </BODY></HTML>
495
+ <SCRIPT LANGUAGE="JavaScript">
496
+ <!--
497
+ function openWin(sWindowURL,sWindowName,iWidth,iHeight)
498
+ {
499
+ if (iWidth > screen.width) {
500
+ iWidth = screen.width * .75;
501
+ }
502
+ if (iHeight > screen.height) {
503
+ iHeight = screen.height * .85;
504
+ }
505
+
506
+ popupWindow = open
507
+ ( sWindowURL,
508
+ sWindowName,
509
+ "resizable=yes"
510
+ + ",scrollbars=yes"
511
+ + ",toolbar=no"
512
+ + ",location=no"
513
+ + ",directories=no"
514
+ + ",status=no"
515
+ + ",menubar=no"
516
+ + ",width=" + iWidth
517
+ + ",height=" + iHeight
518
+ + ",top="+((screen.height-iHeight)/2)
519
+ + ",left="+((screen.width-iWidth)/2)
520
+ );
521
+ }
522
+ -->
523
+ </SCRIPT>
524
+ <!--Created by chtml 1.48 on Feb 20, 2010 8:22am-->
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubyuw
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.99.12
4
+ version: 0.99.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mitchell Hashimoto
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-02-04 00:00:00 -08:00
12
+ date: 2010-02-20 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -80,6 +80,7 @@ files:
80
80
  - test/mocked/fixture_pages/sln_no_course_notes.html
81
81
  - test/mocked/fixture_pages/sln_no_enrollment_info.html
82
82
  - test/mocked/fixture_pages/sln_status.html
83
+ - test/mocked/fixture_pages/time_schedule_arthis.html
83
84
  - test/mocked/fixture_pages/time_schedule_chem.html
84
85
  - test/mocked/fixture_pages/welcome.html
85
86
  - test/mocked/schedule_test.rb