PageSourceSearch

https://education.usada.org/wp-content/plugins/usada-bright-custom…/usada-bright-customizations.js?ver=7.1.1

js usada.org collected 2026-10-02 02:33:46 UTC 9,214 bytes, 345 lines download raw bytes

1var Usada = {
2  newestNewAthleteCourse: function(courses) {
3    var new_athlete_courses = _.filter(courses,function (c) { return Usada.isNewAthleteCourse(c);});
4    
5    var sorted_courses = _.sortBy(new_athlete_courses,function(c) { return new Date(c.custom.effective_date) ; });
6    
7    if (sorted_courses && sorted_courses.length > 0) {
8      return sorted_courses[sorted_courses.length - 1];
9    } else {
10      return null;
11    }
12  },
13
14  newestReturningAthleteCourse: function(courses) {
15    var returning_athlete_courses = _.filter(courses,function (c) { return Usada.isReturningAthleteCourse(c);});
16    
17    var sorted_courses = _.sortBy(returning_athlete_courses,function(c) { return new Date(c.custom.effective_date) ; });
18    
19    if (sorted_courses && sorted_courses.length > 0) {
20      return sorted_courses[sorted_courses.length - 1];
21    } else {
22      return null;
23    }
24  },
25    
26  courseIs: function(course,string) {
27    if (course &&
28        course.custom &&
29        course.custom.course_type &&
30        course.custom.course_type == string)
31      return true;
32    return false;
33  },
34
35  isNewAthleteCourse: function (course) {
36    return Usada.courseIs(course,'new AA');
37  },
38
39  isReturningAthleteCourse: function (course) {
40    return Usada.courseIs(course,'returning AA');
41  },
42
43  isCompletedBefore: function(registrations) {
44    if (registrations) {
45      return _.contains(_.pluck(registrations, 'complete'),'complete');
46    } 
47    return false;
48  },
49  
50  isNewAthleteCourseCompleted: function(courses) {
51    for(var i=0, j=courses.length; i<j; i++) {
52      var course = courses[i];
53      
54      if (Usada.isNewAthleteCourse(course) &&
55          course.registrations &&
56          Usada.isCompletedBefore(course.registrations))
57        return true;
58    }
59    return false;
60  },
61
62  isReturningAthleteCourseCompleted: function(courses) {
63    for(var i=0, j=courses.length; i<j; i++) {
64      var course = courses[i];
65      
66      if (Usada.isReturningAthleteCourse(course) &&
67          course.registrations &&
68          Usada.isCompletedBefore(course.registrations))
69        return true;
70    }
71    return false;
72  },
73
74
75  isAthlete: function(context) {
76    if (context &&
77        context.user &&
78        context.user.meta && 
79        context.user.meta.is_athlete &&
80        context.user.meta.is_athlete != "") 
81      return true;
82    return false;
83  },
84
85  isCourseComplete: function (registration) {
86    if (registration && 
87        registration.success && 
88        typeof(registration.success) == "string") {
89      var l = registration.success.toLowerCase();
90      if (l == "success" ||
91          l == "passed") {
92        return true;
93      }
94    }
95    return false;
96  },
97  show_course_helper: function(args) {
98    var check_for_completed = args.check_for_completed;
99    var context = args.context;
100
101    var roles = [];
102    var admin = false;
103    var completed = false;
104    var registered = false;
105
106    if (context.registrations && context.registrations.length > 0) {
107      registered = true;
108      for (var i = 0, l= context.registrations.length; i<l; ++i) {
109        var registration = context.registrations[i];
110        if (Usada.isCourseComplete(registration)) {
111          completed = true;
112        }
113      }
114    }
115
116    try {  
117      if (context.context.user.site_roles.administrator) 
118        admin = true;
119    } catch (err) {
120      1;
121    }
122
123    if (admin) {
124      if (check_for_completed) 
125        return completed;
126      return ! completed;
127    } else {
128      if (check_for_completed) 
129        return completed;
130      return registered;
131    }
132
133    // if ((admin == true && completed == false) ||
134    //     (admin == false && (registered == true && completed == false))) {
135    //   return check_for_completed ? true : false;
136    // } else {
137    //   return check_for_completed ? false : true;
138    // }
139  },
140  diffDates: function(firstDate,secondDate) {
141    var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds
142
143    return Math.round((firstDate.getTime() - secondDate.getTime())/(oneDay));
144  }
145};
146
147Usada.requested_courses = function(requested_courses, courses) {
148  var requested_course_list
149  ,course
150  ,ret
151  ;
152
153  ret = [];
154  if (requested_courses) {
155    requested_course_list = requested_courses.split(/,/);
156    for (var i = 0 ; i < courses.length ; i+= 1) {
157      course = courses[i];
158      if (_.include(requested_course_list,course.title)) {
159        ret.push(course);
160      }
161    }
162  }
163  return ret;
164}
165  
166
167Bright.helper('usada_derive_redirect_url',function(context,courses,default_url) {
168  return Usada.get_unique_requested({
169    tag: 'redirect_url',
170    context: context,
171    courses: courses,
172    default_text: default_url});
173});
174
175Usada.get_unique_requested = function(data) {
176  var tag, context, courses, default_text;
177  var requested_courses;
178  
179  tag = data.tag;
180  context = data.context;
181  courses = data.context;
182  default_text = data.default_text;
183
184  matches = [];
185  
186  requested_courses = Usada.requested_courses(context.user.meta.requested_courses,courses.courses);
187  for (var i = 0 ; i < requested_courses.length ; i+= 1) {
188    course = requested_courses[i];
189    if (course.custom && course.custom[tag]) {
190      matches.push(course.custom[tag]);
191    }
192  }
193
194  matches = _.uniq(matches);
195  
196  if (matches.length === 1) {
197    return matches[0];
198  } else {
199    return default_text;
200  }
201};
202  
203Bright.helper('usada_derive_redirect_name',function(context,courses,default_text) {
204  return Usada.get_unique_requested(
205    {
206      tag: 'redirect_name',
207      context: context,
208      courses: courses,
209      default_text: default_text
210    })
211});
212
213Bright.helper('usada_courses_for_user', function(context,courses,options) {
214  var ret = '';
215  var requested_courses = Usada.requested_courses(context.user.meta.requested_courses,courses);
216
217  for (var i = 0 ; i < requested_courses.length ; i+= 1) {
218    var course = requested_courses[i];
219    ret += options.fn(course);
220  }
221  return ret;
222});
223
224Bright.helper('all_registered_courses', function(context,courses,options) {
225  var ret = '';
226  var requested_courses = Usada.requested_courses(context.user.meta.requested_courses,courses);
227
228  for (var i = 0 ; i < requested_courses.length ; i+= 1) {
229    var course = requested_courses[i];
230    ret += options.fn(course);
231  }
232  return ret;
233});
234
235
236Bright.helper('usada_courses_for_user_old', function(context, courses, options) {
237  var ret = "";
238
239  if (Usada.isAthlete(context)) {
240    var last_pool_end_date = context.user.meta.last_pool_end_date;
241    var pool_start_date = context.user.meta.pool_start_date;
242
243    if (! pool_start_date) {
244      return 'An error occurred.  No pool_start_date is set in your profile.  Please contact site support.';
245    }
246
247    var newest_new_athlete_course = Usada.newestNewAthleteCourse(courses);
248    var newest_returning_athlete_course = Usada.newestReturningAthleteCourse(courses);
249
250    if (! newest_new_athlete_course || 
251        ! newest_returning_athlete_course) {
252      return 'An error occurred.  Could not derive the newest courses.  Please contact site support.';
253    }
254
255    var nnac_date = new Date(newest_new_athlete_course.custom.effective_date);
256
257    var d = new Date(pool_start_date);
258
259    if (d >= nnac_date) {
260      // assign 2014 returning athlete course
261      newest_new_athlete_course.context = context;
262      newest_new_athlete_course.containerId = context.containerId;
263      ret = ret + options.fn(newest_new_athlete_course);
264    } else {
265      // assign 2014 new athlete course
266      newest_returning_athlete_course.context = context;
267      newest_returning_athlete_course.containerId = context.containerId;
268      ret = ret + options.fn(newest_returning_athlete_course);
269    } 
270  }
271  return ret;
272
273});
274
275Bright.helper('if_usada_not_completed',function(block) {
276  if (Usada.show_course_helper({
277    check_for_completed: false,
278    context: this
279  })) {
280    return block.fn(this);
281  } else {
282    return block.inverse(this);
283  }
284});
285
286
287Bright.helper('if_usada_completed',function(block) {
288  if (Usada.show_course_helper({
289    check_for_completed: true,
290    context: this
291  })) {
292    return block.fn(this);
293  } else {
294    return block.inverse(this);
295  }
296});
297
298Bright.helper('if_debugging',function(block) {
299  if (Bright.parseURL(window.location.href).params.debug)
300    return block.fn(this);
301  return block.inverse(this);
302});
303
304Bright.helper('usada-format-date',function(d) {
305  if (!(typeof(d) == "undefined")) {
306    return new Date(d)
307  } else {
308    return d;
309  }
310});
311
312
313
314Bright.addHook('after_load',function() {});
315
316Bright.helper('usada_status', function(registration) {
317  if (registration) {
318    // switch(registration.complete) {
319    // case "complete":
320    //   return 'Completed ' + new Date(registration.provider_completed_at);
321    //   break;
322    // case "incomplete":
323    //   return 'In Progress';
324    //   break;
325    // case "unknown":
326    //   return "Incomplete";
327    // }
328    switch(registration.success) {
329    case "passed":
330      return 'Completed ' + new Date(registration.provider_completed_at);
331      break;
332    case "failed":
333      return 'In Progress';
334      break;
335    case "unknown":
336      return "Incomplete";
337    }
338  }
339  return "Incomplete";
340});
341
342// Local variables:
343// indent-tabs-mode: nil
344// js-indent-level: 2
345// End:

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.