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.