rubyuw 0.99.12 → 0.99.13

Sign up to get free protection for your applications and to get access to all the features.
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