Your IP : 192.168.165.1


Current Path : C:/xampp/htdocs/moodle/mod/assign/amd/build/
Upload File :
Current File : C:/xampp/htdocs/moodle/mod/assign/amd/build/grading_navigation.min.js.map

{"version":3,"sources":["../src/grading_navigation.js"],"names":["define","$","notification","str","autocomplete","ajax","checker","GradingNavigation","selector","_regionSelector","_region","_filters","_users","_filteredUsers","_lastXofYUpdate","_firstLoadUsers","_loadAllUsers","find","on","_handlePreviousUser","bind","_handleNextUser","_handleChangeUser","_toggleExpandFilters","document","_refreshSelector","toggleLink","configPanel","getElementById","attr","_filterChanged","userid","data","_selectUserById","get_string","done","s","enhance","fail","exception","_isLoading","prototype","_lastFilters","select","assignmentid","groupid","filterPanel","filter","val","workflowFilter","markerFilter","call","methodname","args","assignid","onlyids","tablesort","_usersLoaded","users","length","trigger","_selectNoUser","_triggerNextUserEvent","_checkClickOutsideConfigureFilters","event","is","target","has","hide","unbind","_updateFilterPreferences","userId","filterList","preferenceNames","preferences","i","deferred","Deferred","resolve","newValue","push","name","value","filters","each","idx","ele","element","prop","filterlist","text","join","currentUserID","parseInt","foundIndex","index","user","id","_refreshCount","checkFormForChanges","get_strings","key","component","strs","confirm","useridnumber","isNaN","preventDefault","closest","expanded","css","stopPropagation","e","currentUserId","currentIndex","count","newIndex","saved","_setCountString","x","y","updateNumber","show","url","URL","window","location","searchParams","get","newid","recordid","set","history","replaceState","nextUserId","nextUser"],"mappings":"AAwBAA,OAAM,iCAAC,CAAC,QAAD,CAAW,mBAAX,CAAgC,UAAhC,CAA4C,wBAA5C,CACC,WADD,CACc,wCADd,CAAD,CAEC,SAASC,CAAT,CAAYC,CAAZ,CAA0BC,CAA1B,CAA+BC,CAA/B,CAA6CC,CAA7C,CAAmDC,CAAnD,CAA4D,CAQ/D,GAAIC,CAAAA,CAAiB,CAAG,SAASC,CAAT,CAAmB,CACvC,KAAKC,eAAL,CAAuBD,CAAvB,CACA,KAAKE,OAAL,CAAeT,CAAC,CAACO,CAAD,CAAhB,CACA,KAAKG,QAAL,CAAgB,EAAhB,CACA,KAAKC,MAAL,CAAc,EAAd,CACA,KAAKC,cAAL,CAAsB,EAAtB,CACA,KAAKC,eAAL,CAAuB,CAAvB,CACA,KAAKC,eAAL,IAGA,KAAKC,aAAL,GAKA,KAAKN,OAAL,CAAaO,IAAb,CAAkB,iCAAlB,EAAmDC,EAAnD,CAAsD,OAAtD,CAA+D,KAAKC,mBAAL,CAAyBC,IAAzB,CAA8B,IAA9B,CAA/D,EACA,KAAKV,OAAL,CAAaO,IAAb,CAAkB,6BAAlB,EAA+CC,EAA/C,CAAkD,OAAlD,CAA2D,KAAKG,eAAL,CAAqBD,IAArB,CAA0B,IAA1B,CAA3D,EACA,KAAKV,OAAL,CAAaO,IAAb,CAAkB,+BAAlB,EAAiDC,EAAjD,CAAoD,QAApD,CAA8D,KAAKI,iBAAL,CAAuBF,IAAvB,CAA4B,IAA5B,CAA9D,EACA,KAAKV,OAAL,CAAaO,IAAb,CAAkB,gCAAlB,EAAkDC,EAAlD,CAAqD,OAArD,CAA8D,KAAKK,oBAAL,CAA0BH,IAA1B,CAA+B,IAA/B,CAA9D,EAEAnB,CAAC,CAACuB,QAAD,CAAD,CAAYN,EAAZ,CAAe,cAAf,CAA+B,KAAKO,gBAAL,CAAsBL,IAAtB,CAA2B,IAA3B,CAA/B,EACAnB,CAAC,CAACuB,QAAD,CAAD,CAAYN,EAAZ,CAAe,uBAAf,CAAwC,KAAKG,eAAL,CAAqBD,IAArB,CAA0B,IAA1B,CAAxC,EArBuC,GAwBnCM,CAAAA,CAAU,CAAG,KAAKhB,OAAL,CAAaO,IAAb,CAAkB,gCAAlB,CAxBsB,CAyBnCU,CAAW,CAAG1B,CAAC,CAACuB,QAAQ,CAACI,cAAT,CAAwBF,CAAU,CAACG,IAAX,CAAgB,eAAhB,CAAxB,CAAD,CAzBoB,CA2BvCF,CAAW,CAACT,EAAZ,CAAe,QAAf,CAAyB,QAAzB,CAAmC,KAAKY,cAAL,CAAoBV,IAApB,CAAyB,IAAzB,CAAnC,EAEA,GAAIW,CAAAA,CAAM,CAAG9B,CAAC,CAAC,4CAAD,CAAD,CAA8C+B,IAA9C,CAAmD,cAAnD,CAAb,CACA,GAAID,CAAJ,CAAY,CACR,KAAKE,eAAL,CAAqBF,CAArB,CACH,CAED5B,CAAG,CAAC+B,UAAJ,CAAe,YAAf,CAA6B,YAA7B,EAA2CC,IAA3C,CAAgD,SAASC,CAAT,CAAY,CACpDhC,CAAY,CAACiC,OAAb,CAAqB,2BAArB,IAAyD,iCAAzD,CAA4FD,CAA5F,CACH,CAFL,EAGEE,IAHF,CAGOpC,CAAY,CAACqC,SAHpB,EAKAtC,CAAC,CAACuB,QAAD,CAAD,CAAYJ,IAAZ,CAAiB,oBAAjB,CAAuC,UAAW,CAC9C,KAAKoB,UAAL,GACH,CAFsC,CAErCpB,IAFqC,CAEhC,IAFgC,CAAvC,EAGAnB,CAAC,CAACuB,QAAD,CAAD,CAAYJ,IAAZ,CAAiB,qBAAjB,CAAwC,UAAW,CAC/C,KAAKoB,UAAL,GACH,CAFuC,CAEtCpB,IAFsC,CAEjC,IAFiC,CAAxC,CAGH,CA7CD,CAgDAb,CAAiB,CAACkC,SAAlB,CAA4BD,UAA5B,IAGAjC,CAAiB,CAACkC,SAAlB,CAA4BhC,eAA5B,CAA8C,IAA9C,CAGAF,CAAiB,CAACkC,SAAlB,CAA4B9B,QAA5B,CAAuC,IAAvC,CAGAJ,CAAiB,CAACkC,SAAlB,CAA4B7B,MAA5B,CAAqC,IAArC,CAGAL,CAAiB,CAACkC,SAAlB,CAA4B/B,OAA5B,CAAsC,IAAtC,CAGAH,CAAiB,CAACkC,SAAlB,CAA4BC,YAA5B,CAA2C,EAA3C,CASAnC,CAAiB,CAACkC,SAAlB,CAA4BzB,aAA5B,CAA4C,UAAW,IAC/C2B,CAAAA,CAAM,CAAG,KAAKjC,OAAL,CAAaO,IAAb,CAAkB,2BAAlB,CADsC,CAE/C2B,CAAY,CAAGD,CAAM,CAACd,IAAP,CAAY,mBAAZ,CAFgC,CAG/CgB,CAAO,CAAGF,CAAM,CAACd,IAAP,CAAY,cAAZ,CAHqC,CAK/CiB,CAAW,CAAG,KAAKpC,OAAL,CAAaO,IAAb,CAAkB,qCAAlB,CALiC,CAM/C8B,CAAM,CAAGD,CAAW,CAAC7B,IAAZ,CAAiB,yBAAjB,EAA0C+B,GAA1C,EANsC,CAO/CC,CAAc,CAAGH,CAAW,CAAC7B,IAAZ,CAAiB,iCAAjB,CAP8B,CAQnD,GAAIgC,CAAJ,CAAoB,CAChBF,CAAM,EAAI,IAAME,CAAc,CAACD,GAAf,EACnB,CACD,GAAIE,CAAAA,CAAY,CAAGJ,CAAW,CAAC7B,IAAZ,CAAiB,+BAAjB,CAAnB,CACA,GAAIiC,CAAJ,CAAkB,CACdH,CAAM,EAAI,IAAMG,CAAY,CAACF,GAAb,EACnB,CAED,GAAI,KAAKN,YAAL,EAAqBK,CAAzB,CAAiC,CAC7B,QACH,CACD,KAAKL,YAAL,CAAoBK,CAApB,CAEA1C,CAAI,CAAC8C,IAAL,CAAU,CAAC,CACPC,UAAU,CAAE,8BADL,CAEPC,IAAI,CAAE,CAACC,QAAQ,CAAEV,CAAX,CAAyBC,OAAO,CAAEA,CAAlC,CAA2CE,MAAM,CAAE,EAAnD,CAAuDQ,OAAO,GAA9D,CAAsEC,SAAS,GAA/E,CAFC,CAGPrB,IAAI,CAAE,KAAKsB,YAAL,CAAkBrC,IAAlB,CAAuB,IAAvB,CAHC,CAIPkB,IAAI,CAAEpC,CAAY,CAACqC,SAJZ,CAAD,CAAV,EAMA,QACH,CA5BD,CAqCAhC,CAAiB,CAACkC,SAAlB,CAA4BgB,YAA5B,CAA2C,SAASC,CAAT,CAAgB,CACvD,KAAK3C,eAAL,IACA,KAAKF,cAAL,CAAsB,KAAKD,MAAL,CAAc8C,CAApC,CACA,GAAI,KAAK9C,MAAL,CAAY+C,MAAhB,CAAwB,IAEhBjC,CAAAA,CAAU,CAAG,KAAKhB,OAAL,CAAaO,IAAb,CAAkB,gCAAlB,CAFG,CAGhBU,CAAW,CAAG1B,CAAC,CAACuB,QAAQ,CAACI,cAAT,CAAwBF,CAAU,CAACG,IAAX,CAAgB,eAAhB,CAAxB,CAAD,CAHC,CAKpBF,CAAW,CAACV,IAAZ,CAAiB,yBAAjB,EAA0C2C,OAA1C,CAAkD,QAAlD,CACH,CAND,IAMO,CACH,KAAKC,aAAL,EACH,CACD,KAAKC,qBAAL,EACH,CAbD,CAsBAvD,CAAiB,CAACkC,SAAlB,CAA4BsB,kCAA5B,CAAiE,SAASC,CAAT,CAAgB,CAC7E,GAAIrC,CAAAA,CAAW,CAAG,KAAKjB,OAAL,CAAaO,IAAb,CAAkB,qCAAlB,CAAlB,CAEA,GAAI,CAACU,CAAW,CAACsC,EAAZ,CAAeD,CAAK,CAACE,MAArB,CAAD,EAA0E,CAAzC,GAAAvC,CAAW,CAACwC,GAAZ,CAAgBH,CAAK,CAACE,MAAtB,EAA8BP,MAAnE,CAAiF,CAC7E,GAAIjC,CAAAA,CAAU,CAAG,KAAKhB,OAAL,CAAaO,IAAb,CAAkB,gCAAlB,CAAjB,CAEAU,CAAW,CAACyC,IAAZ,GACAzC,CAAW,CAACE,IAAZ,CAAiB,aAAjB,CAAgC,MAAhC,EACAH,CAAU,CAACG,IAAX,CAAgB,eAAhB,CAAiC,OAAjC,EACA5B,CAAC,CAACuB,QAAD,CAAD,CAAY6C,MAAZ,CAAmB,qCAAnB,CACH,CACJ,CAXD,CAuBA9D,CAAiB,CAACkC,SAAlB,CAA4B6B,wBAA5B,CAAuD,SAASC,CAAT,CAAiBC,CAAjB,CAA6BC,CAA7B,CAA8C,CACjG,GAAIC,CAAAA,CAAW,CAAG,EAAlB,CACIC,CAAC,CAAG,CADR,CAGA,GAAyB,CAArB,EAAAH,CAAU,CAACb,MAAX,EAA0B,KAAK5C,eAAnC,CAAoD,CAEhD,GAAI6D,CAAAA,CAAQ,CAAG3E,CAAC,CAAC4E,QAAF,EAAf,CACAD,CAAQ,CAACE,OAAT,GACA,MAAOF,CAAAA,CACV,CAGD,IAAKD,CAAC,CAAG,CAAT,CAAYA,CAAC,CAAGH,CAAU,CAACb,MAA3B,CAAmCgB,CAAC,EAApC,CAAwC,CACpC,GAAII,CAAAA,CAAQ,CAAGP,CAAU,CAACG,CAAD,CAAzB,CACA,GAAgB,MAAZ,EAAAI,CAAJ,CAAwB,CACpBA,CAAQ,CAAG,EACd,CAEDL,CAAW,CAACM,IAAZ,CAAiB,CACbjD,MAAM,CAAEwC,CADK,CAEbU,IAAI,CAAER,CAAe,CAACE,CAAD,CAFR,CAGbO,KAAK,CAAEH,CAHM,CAAjB,CAKH,CAED,MAAO1E,CAAAA,CAAI,CAAC8C,IAAL,CAAU,CAAC,CACdC,UAAU,CAAE,gCADE,CAEdC,IAAI,CAAE,CACFqB,WAAW,CAAEA,CADX,CAFQ,CAAD,CAAV,EAKH,CALG,CAMV,CA/BD,CAuCAnE,CAAiB,CAACkC,SAAlB,CAA4BX,cAA5B,CAA6C,UAAW,IAEhDgB,CAAAA,CAAW,CAAG,KAAKpC,OAAL,CAAaO,IAAb,CAAkB,qCAAlB,CAFkC,CAGhDkE,CAAO,CAAGrC,CAAW,CAAC7B,IAAZ,CAAiB,QAAjB,CAHsC,CAIhDwD,CAAe,CAAG,EAJ8B,CAMpD,KAAK9D,QAAL,CAAgB,EAAhB,CACAwE,CAAO,CAACC,IAAR,CAAa,SAASC,CAAT,CAAcC,CAAd,CAAmB,CAC5B,GAAIC,CAAAA,CAAO,CAAGtF,CAAC,CAACqF,CAAD,CAAf,CACA,KAAK3E,QAAL,CAAcqE,IAAd,CAAmBO,CAAO,CAACvC,GAAR,EAAnB,EACAyB,CAAe,CAACO,IAAhB,CAAqB,UAAYO,CAAO,CAACC,IAAR,CAAa,MAAb,CAAjC,CACH,CAJY,CAIXpE,IAJW,CAIN,IAJM,CAAb,EAOA,GAAIqE,CAAAA,CAAU,CAAG,EAAjB,CACA3C,CAAW,CAAC7B,IAAZ,CAAiB,gBAAjB,EAAmCmE,IAAnC,CAAwC,SAASC,CAAT,CAAcC,CAAd,CAAmB,CACvDG,CAAU,CAACA,CAAU,CAAC9B,MAAZ,CAAV,CAAgC1D,CAAC,CAACqF,CAAD,CAAD,CAAOI,IAAP,EACnC,CAFD,EAGA,GAAID,CAAU,CAAC9B,MAAf,CAAuB,CACnB,KAAKjD,OAAL,CAAaO,IAAb,CAAkB,qCAAlB,EAAuDyE,IAAvD,CAA4DD,CAAU,CAACE,IAAX,CAAgB,IAAhB,CAA5D,CACH,CAFD,IAEO,CACHxF,CAAG,CAAC+B,UAAJ,CAAe,WAAf,CAA4B,YAA5B,EAA0CC,IAA1C,CAA+C,SAASC,CAAT,CAAY,CACvD,KAAK1B,OAAL,CAAaO,IAAb,CAAkB,qCAAlB,EAAuDyE,IAAvD,CAA4DtD,CAA5D,CACH,CAF8C,CAE7ChB,IAF6C,CAExC,IAFwC,CAA/C,EAEckB,IAFd,CAEmBpC,CAAY,CAACqC,SAFhC,CAGH,CAxBmD,GA0BhDI,CAAAA,CAAM,CAAG,KAAKjC,OAAL,CAAaO,IAAb,CAAkB,2BAAlB,CA1BuC,CA2BhD2E,CAAa,CAAGjD,CAAM,CAACX,IAAP,CAAY,eAAZ,CA3BgC,CA4BpD,KAAKsC,wBAAL,CAA8BsB,CAA9B,CAA6C,KAAKjF,QAAlD,CAA4D8D,CAA5D,EAA6EtC,IAA7E,CAAkF,UAAW,CAEzF,GAAI,CAAC,KAAKnB,aAAL,EAAL,CAA2B,IACnBe,CAAAA,CAAM,CAAG8D,QAAQ,CAAClD,CAAM,CAACd,IAAP,CAAY,eAAZ,CAAD,CADE,CAEnBiE,CAAU,CAAG,CAFM,CAIvB7F,CAAC,CAACmF,IAAF,CAAO,KAAKvE,cAAZ,CAA4B,SAASkF,CAAT,CAAgBC,CAAhB,CAAsB,CAC9C,GAAIjE,CAAM,EAAIiE,CAAI,CAACC,EAAnB,CAAuB,CACnBH,CAAU,CAAGC,CAChB,CACJ,CAJD,EAMA,GAAI,KAAKlF,cAAL,CAAoB8C,MAAxB,CAAgC,CAC5B,KAAK1B,eAAL,CAAqB,KAAKpB,cAAL,CAAoBiF,CAApB,EAAgCG,EAArD,CACH,CAFD,IAEO,CACH,KAAKpC,aAAL,EACH,CAEJ,CACJ,CAnBiF,CAmBhFzC,IAnBgF,CAmB3E,IAnB2E,CAAlF,EAmBckB,IAnBd,CAmBmBpC,CAAY,CAACqC,SAnBhC,EAoBA,KAAK2D,aAAL,EACH,CAjDD,CAyDA3F,CAAiB,CAACkC,SAAlB,CAA4BoB,aAA5B,CAA4C,UAAW,CAEnD,GAAI,KAAKrB,UAAT,CAAqB,CACjB,MACH,CACD,GAAIlC,CAAO,CAAC6F,mBAAR,CAA4B,0CAA5B,CAAJ,CAA2E,CAEvEhG,CAAG,CAACiG,WAAJ,CAAgB,CACZ,CAACC,GAAG,CAAE,gBAAN,CAAwBC,SAAS,CAAE,YAAnC,CADY,CAEZ,CAACD,GAAG,CAAE,wBAAN,CAAgCC,SAAS,CAAE,YAA3C,CAFY,CAGZ,CAACD,GAAG,CAAE,iBAAN,CAAyBC,SAAS,CAAE,YAApC,CAHY,CAIZ,CAACD,GAAG,CAAE,QAAN,CAAgBC,SAAS,CAAE,MAA3B,CAJY,CAAhB,EAKGnE,IALH,CAKQ,SAASoE,CAAT,CAAe,CACnBrG,CAAY,CAACsG,OAAb,CAAqBD,CAAI,CAAC,CAAD,CAAzB,CAA8BA,CAAI,CAAC,CAAD,CAAlC,CAAuCA,CAAI,CAAC,CAAD,CAA3C,CAAgDA,CAAI,CAAC,CAAD,CAApD,CAAyD,UAAW,CAChEtG,CAAC,CAACuB,QAAD,CAAD,CAAYoC,OAAZ,CAAoB,cAApB,CAAoC,CAAC,CAArC,CACH,CAFD,CAGH,CATD,CAUH,CAZD,IAYO,CACH3D,CAAC,CAACuB,QAAD,CAAD,CAAYoC,OAAZ,CAAoB,cAApB,CAAoC,CAAC,CAArC,CACH,CACJ,CApBD,CA6BArD,CAAiB,CAACkC,SAAlB,CAA4BR,eAA5B,CAA8C,SAASF,CAAT,CAAiB,IACvDY,CAAAA,CAAM,CAAG,KAAKjC,OAAL,CAAaO,IAAb,CAAkB,2BAAlB,CAD8C,CAEvDwF,CAAY,CAAGZ,QAAQ,CAAC9D,CAAD,CAAS,EAAT,CAFgC,CAK3D,GAAI,KAAKS,UAAT,CAAqB,CACjB,MACH,CACD,GAAIlC,CAAO,CAAC6F,mBAAR,CAA4B,0CAA5B,CAAJ,CAA2E,CAEvEhG,CAAG,CAACiG,WAAJ,CAAgB,CACZ,CAACC,GAAG,CAAE,gBAAN,CAAwBC,SAAS,CAAE,YAAnC,CADY,CAEZ,CAACD,GAAG,CAAE,wBAAN,CAAgCC,SAAS,CAAE,YAA3C,CAFY,CAGZ,CAACD,GAAG,CAAE,iBAAN,CAAyBC,SAAS,CAAE,YAApC,CAHY,CAIZ,CAACD,GAAG,CAAE,QAAN,CAAgBC,SAAS,CAAE,MAA3B,CAJY,CAAhB,EAKGnE,IALH,CAKQ,SAASoE,CAAT,CAAe,CACnBrG,CAAY,CAACsG,OAAb,CAAqBD,CAAI,CAAC,CAAD,CAAzB,CAA8BA,CAAI,CAAC,CAAD,CAAlC,CAAuCA,CAAI,CAAC,CAAD,CAA3C,CAAgDA,CAAI,CAAC,CAAD,CAApD,CAAyD,UAAW,CAChEtG,CAAC,CAACuB,QAAD,CAAD,CAAYoC,OAAZ,CAAoB,cAApB,CAAoC6C,CAApC,CACH,CAFD,CAGH,CATD,CAUH,CAZD,IAYO,CACH9D,CAAM,CAACd,IAAP,CAAY,eAAZ,CAA6BE,CAA7B,EAEA,GAAI,CAAC2E,KAAK,CAACD,CAAD,CAAN,EAAuC,CAAf,CAAAA,CAA5B,CAA8C,CAC1CxG,CAAC,CAACuB,QAAD,CAAD,CAAYoC,OAAZ,CAAoB,cAApB,CAAoC7B,CAApC,CACH,CACJ,CACJ,CA3BD,CAoCAxB,CAAiB,CAACkC,SAAlB,CAA4BlB,oBAA5B,CAAmD,SAASyC,CAAT,CAAgB,CAC/DA,CAAK,CAAC2C,cAAN,GAD+D,GAE3DjF,CAAAA,CAAU,CAAGzB,CAAC,CAAC+D,CAAK,CAACE,MAAP,CAAD,CAAgB0C,OAAhB,CAAwB,gCAAxB,CAF8C,CAG3DC,CAAQ,CAAuC,MAApC,EAAAnF,CAAU,CAACG,IAAX,CAAgB,eAAhB,CAHgD,CAI3DF,CAAW,CAAG1B,CAAC,CAACuB,QAAQ,CAACI,cAAT,CAAwBF,CAAU,CAACG,IAAX,CAAgB,eAAhB,CAAxB,CAAD,CAJ4C,CAM/D,GAAIgF,CAAJ,CAAc,CACVlF,CAAW,CAACyC,IAAZ,GACAzC,CAAW,CAACE,IAAZ,CAAiB,aAAjB,CAAgC,MAAhC,EACAH,CAAU,CAACG,IAAX,CAAgB,eAAhB,CAAiC,OAAjC,EACA5B,CAAC,CAACuB,QAAD,CAAD,CAAY6C,MAAZ,CAAmB,qCAAnB,CACH,CALD,IAKO,CACH1C,CAAW,CAACmF,GAAZ,CAAgB,SAAhB,CAA2B,cAA3B,EACAnF,CAAW,CAACE,IAAZ,CAAiB,aAAjB,CAAgC,OAAhC,EACAH,CAAU,CAACG,IAAX,CAAgB,eAAhB,CAAiC,MAAjC,EACAmC,CAAK,CAAC+C,eAAN,GACA9G,CAAC,CAACuB,QAAD,CAAD,CAAYN,EAAZ,CAAe,qCAAf,CAAsD,KAAK6C,kCAAL,CAAwC3C,IAAxC,CAA6C,IAA7C,CAAtD,CACH,CACJ,CAlBD,CA2BAb,CAAiB,CAACkC,SAAlB,CAA4BtB,mBAA5B,CAAkD,SAAS6F,CAAT,CAAY,CAC1DA,CAAC,CAACL,cAAF,GAD0D,GAEtDhE,CAAAA,CAAM,CAAG,KAAKjC,OAAL,CAAaO,IAAb,CAAkB,2BAAlB,CAF6C,CAGtDgG,CAAa,CAAGtE,CAAM,CAACd,IAAP,CAAY,eAAZ,CAHsC,CAItD8C,CAAC,CAAG,CAJkD,CAKtDuC,CAAY,CAAG,CALuC,CAO1D,IAAKvC,CAAC,CAAG,CAAT,CAAYA,CAAC,CAAG,KAAK9D,cAAL,CAAoB8C,MAApC,CAA4CgB,CAAC,EAA7C,CAAiD,CAC7C,GAAI,KAAK9D,cAAL,CAAoB8D,CAApB,EAAuBsB,EAAvB,EAA6BgB,CAAjC,CAAgD,CAC5CC,CAAY,CAAGvC,CAAf,CACA,KACH,CACJ,CAZyD,GActDwC,CAAAA,CAAK,CAAG,KAAKtG,cAAL,CAAoB8C,MAd0B,CAetDyD,CAAQ,CAAIF,CAAY,CAAG,CAf2B,CAgB1D,GAAe,CAAX,CAAAE,CAAJ,CAAkB,CACdA,CAAQ,CAAGD,CAAK,CAAG,CACtB,CAED,GAAIA,CAAJ,CAAW,CACP,KAAKlF,eAAL,CAAqB,KAAKpB,cAAL,CAAoBuG,CAApB,EAA8BnB,EAAnD,CACH,CACJ,CAvBD,CA+BA1F,CAAiB,CAACkC,SAAlB,CAA4BpB,eAA5B,CAA8C,SAAS2F,CAAT,CAAYK,CAAZ,CAAmB,CAC7DL,CAAC,CAACL,cAAF,GAD6D,GAEzDhE,CAAAA,CAAM,CAAG,KAAKjC,OAAL,CAAaO,IAAb,CAAkB,2BAAlB,CAFgD,CAGzDgG,CAAa,CAAGtE,CAAM,CAACd,IAAP,CAAY,eAAZ,CAHyC,CAIzD8C,CAAC,CAAG,CAJqD,CAKzDuC,CAAY,CAAG,CAL0C,CAO7D,IAAKvC,CAAC,CAAG,CAAT,CAAYA,CAAC,CAAG,KAAK9D,cAAL,CAAoB8C,MAApC,CAA4CgB,CAAC,EAA7C,CAAiD,CAC7C,GAAI,KAAK9D,cAAL,CAAoB8D,CAApB,EAAuBsB,EAAvB,EAA6BgB,CAAjC,CAAgD,CAC5CC,CAAY,CAAGvC,CAAf,CACA,KACH,CACJ,CAZ4D,GAczDwC,CAAAA,CAAK,CAAG,KAAKtG,cAAL,CAAoB8C,MAd6B,CAezDyD,CAAQ,CAAG,CAACF,CAAY,CAAG,CAAhB,EAAqBC,CAfyB,CAiB7D,GAAIE,CAAK,EAAIF,CAAb,CAAoB,IAEZpF,CAAAA,CAAM,CAAG,KAAKlB,cAAL,CAAoBuG,CAApB,EAA8BnB,EAF3B,CAGZQ,CAAY,CAAGZ,QAAQ,CAAC9D,CAAD,CAAS,EAAT,CAHX,CAIhBY,CAAM,CAACd,IAAP,CAAY,eAAZ,CAA6BE,CAA7B,EACA,GAAI,CAAC2E,KAAK,CAACD,CAAD,CAAN,EAAuC,CAAf,CAAAA,CAA5B,CAA8C,CAC1CxG,CAAC,CAACuB,QAAD,CAAD,CAAYoC,OAAZ,CAAoB,cAApB,CAAoC7B,CAApC,CACH,CACJ,CARD,IAQO,IAAIoF,CAAJ,CAAW,CACd,KAAKlF,eAAL,CAAqB,KAAKpB,cAAL,CAAoBuG,CAApB,EAA8BnB,EAAnD,CACH,CACJ,CA5BD,CAuCA1F,CAAiB,CAACkC,SAAlB,CAA4B6E,eAA5B,CAA8C,SAASC,CAAT,CAAYC,CAAZ,CAAe,CACzD,GAAIC,CAAAA,CAAY,CAAG,CAAnB,CACA,KAAK3G,eAAL,GACA2G,CAAY,CAAG,KAAK3G,eAApB,CAGAX,CAAG,CAAC+B,UAAJ,CAAe,MAAf,CAAuB,YAAvB,CADY,CAACqF,CAAC,CAAEA,CAAJ,CAAOC,CAAC,CAAEA,CAAV,CACZ,EAA4CrF,IAA5C,CAAiD,SAASC,CAAT,CAAY,CACzD,GAAIqF,CAAY,EAAI,KAAK3G,eAAzB,CAA0C,CACtC,KAAKJ,OAAL,CAAaO,IAAb,CAAkB,sCAAlB,EAAwDyE,IAAxD,CAA6DtD,CAA7D,CACH,CACJ,CAJgD,CAI/ChB,IAJ+C,CAI1C,IAJ0C,CAAjD,EAIckB,IAJd,CAImBpC,CAAY,CAACqC,SAJhC,CAKH,CAXD,CAmBAhC,CAAiB,CAACkC,SAAlB,CAA4ByD,aAA5B,CAA4C,UAAW,IAC/CvD,CAAAA,CAAM,CAAG,KAAKjC,OAAL,CAAaO,IAAb,CAAkB,2BAAlB,CADsC,CAE/Cc,CAAM,CAAGY,CAAM,CAACd,IAAP,CAAY,eAAZ,CAFsC,CAG/C8C,CAAC,CAAG,CAH2C,CAI/CuC,CAAY,CAAG,CAJgC,CAMnD,GAAIR,KAAK,CAAC3E,CAAD,CAAL,EAA2B,CAAV,EAAAA,CAArB,CAAkC,CAC9B,KAAKrB,OAAL,CAAaO,IAAb,CAAkB,8BAAlB,EAAgDmD,IAAhD,EACH,CAFD,IAEO,CACH,KAAK1D,OAAL,CAAaO,IAAb,CAAkB,8BAAlB,EAAgDyG,IAAhD,GAEA,IAAK/C,CAAC,CAAG,CAAT,CAAYA,CAAC,CAAG,KAAK9D,cAAL,CAAoB8C,MAApC,CAA4CgB,CAAC,EAA7C,CAAiD,CAC7C,GAAI,KAAK9D,cAAL,CAAoB8D,CAApB,EAAuBsB,EAAvB,EAA6BlE,CAAjC,CAAyC,CACrCmF,CAAY,CAAGvC,CAAf,CACA,KACH,CACJ,CACD,GAAIwC,CAAAA,CAAK,CAAG,KAAKtG,cAAL,CAAoB8C,MAAhC,CACA,GAAIwD,CAAJ,CAAW,CACPD,CAAY,EAAI,CACnB,CACD,KAAKI,eAAL,CAAqBJ,CAArB,CAAmCC,CAAnC,EAEA,GAAmB,CAAf,CAAAD,CAAJ,CAAsB,CAClB,GAAIS,CAAAA,CAAG,CAAG,GAAIC,CAAAA,GAAJ,CAAQC,MAAM,CAACC,QAAf,CAAV,CACA,GAAgD,CAA5C,CAAAjC,QAAQ,CAAC8B,CAAG,CAACI,YAAJ,CAAiBC,GAAjB,CAAqB,SAArB,CAAD,CAAZ,CAAmD,CAC/C,GAAIC,CAAAA,CAAK,CAAG,KAAKpH,cAAL,CAAoBqG,CAAY,CAAG,CAAnC,EAAsCgB,QAAlD,CACAP,CAAG,CAACI,YAAJ,CAAiBI,GAAjB,CAAqB,SAArB,CAAgCF,CAAhC,CACH,CAHD,IAGO,CACHN,CAAG,CAACI,YAAJ,CAAiBI,GAAjB,CAAqB,QAArB,CAA+BpG,CAA/B,CACH,CAED8F,MAAM,CAACO,OAAP,CAAeC,YAAf,CAA4B,EAA5B,CAAgC,EAAhC,CAAoCV,CAApC,CACH,CACJ,CACJ,CAnCD,CA6CApH,CAAiB,CAACkC,SAAlB,CAA4BhB,gBAA5B,CAA+C,SAASuC,CAAT,CAAgBjC,CAAhB,CAAwB,CACnE,GAAIY,CAAAA,CAAM,CAAG,KAAKjC,OAAL,CAAaO,IAAb,CAAkB,2BAAlB,CAAb,CACAc,CAAM,CAAG8D,QAAQ,CAAC9D,CAAD,CAAS,EAAT,CAAjB,CAEA,GAAI,CAAC2E,KAAK,CAAC3E,CAAD,CAAN,EAA2B,CAAT,CAAAA,CAAtB,CAAkC,CAC9BY,CAAM,CAACd,IAAP,CAAY,eAAZ,CAA6BE,CAA7B,CACH,CACD,KAAKmE,aAAL,EACH,CARD,CAgBA3F,CAAiB,CAACkC,SAAlB,CAA4BqB,qBAA5B,CAAoD,UAAW,CAC3D,GAAiC,CAA7B,MAAKjD,cAAL,CAAoB8C,MAAxB,CAAoC,CAChC1D,CAAC,CAACuB,QAAD,CAAD,CAAYoC,OAAZ,CAAoB,WAApB,CAAiC,CAAC0E,UAAU,CAAE,IAAb,CAAmBC,QAAQ,GAA3B,CAAjC,CACH,CAFD,IAEO,CACHtI,CAAC,CAACuB,QAAD,CAAD,CAAYoC,OAAZ,CAAoB,WAApB,CAAiC,CAAC2E,QAAQ,GAAT,CAAjC,CACH,CACJ,CAND,CAeAhI,CAAiB,CAACkC,SAAlB,CAA4BnB,iBAA5B,CAAgD,UAAW,IACnDqB,CAAAA,CAAM,CAAG,KAAKjC,OAAL,CAAaO,IAAb,CAAkB,2BAAlB,CAD0C,CAEnDc,CAAM,CAAG8D,QAAQ,CAAClD,CAAM,CAACK,GAAP,EAAD,CAAe,EAAf,CAFkC,CAIvD,GAAI,KAAKR,UAAT,CAAqB,CACjB,MACH,CACD,GAAIlC,CAAO,CAAC6F,mBAAR,CAA4B,0CAA5B,CAAJ,CAA2E,CAEvEhG,CAAG,CAACiG,WAAJ,CAAgB,CACZ,CAACC,GAAG,CAAE,gBAAN,CAAwBC,SAAS,CAAE,YAAnC,CADY,CAEZ,CAACD,GAAG,CAAE,wBAAN,CAAgCC,SAAS,CAAE,YAA3C,CAFY,CAGZ,CAACD,GAAG,CAAE,iBAAN,CAAyBC,SAAS,CAAE,YAApC,CAHY,CAIZ,CAACD,GAAG,CAAE,QAAN,CAAgBC,SAAS,CAAE,MAA3B,CAJY,CAAhB,EAKGnE,IALH,CAKQ,SAASoE,CAAT,CAAe,CACnBrG,CAAY,CAACsG,OAAb,CAAqBD,CAAI,CAAC,CAAD,CAAzB,CAA8BA,CAAI,CAAC,CAAD,CAAlC,CAAuCA,CAAI,CAAC,CAAD,CAA3C,CAAgDA,CAAI,CAAC,CAAD,CAApD,CAAyD,UAAW,CAChEtG,CAAC,CAACuB,QAAD,CAAD,CAAYoC,OAAZ,CAAoB,cAApB,CAAoC7B,CAApC,CACH,CAFD,CAGH,CATD,CAUH,CAZD,IAYO,CACH,GAAI,CAAC2E,KAAK,CAAC3E,CAAD,CAAN,EAA2B,CAAT,CAAAA,CAAtB,CAAkC,CAC9BY,CAAM,CAACd,IAAP,CAAY,eAAZ,CAA6BE,CAA7B,EAEA9B,CAAC,CAACuB,QAAD,CAAD,CAAYoC,OAAZ,CAAoB,cAApB,CAAoC7B,CAApC,CACH,CACJ,CACJ,CA1BD,CA4BA,MAAOxB,CAAAA,CACV,CAliBK,CAAN","sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Javascript to handle changing users via the user selector in the header.\n *\n * @module     mod_assign/grading_navigation\n * @package    mod_assign\n * @copyright  2016 Damyon Wiese <damyon@moodle.com>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since      3.1\n */\ndefine(['jquery', 'core/notification', 'core/str', 'core/form-autocomplete',\n        'core/ajax', 'mod_assign/grading_form_change_checker'],\n       function($, notification, str, autocomplete, ajax, checker) {\n\n    /**\n     * GradingNavigation class.\n     *\n     * @class GradingNavigation\n     * @param {String} selector The selector for the page region containing the user navigation.\n     */\n    var GradingNavigation = function(selector) {\n        this._regionSelector = selector;\n        this._region = $(selector);\n        this._filters = [];\n        this._users = [];\n        this._filteredUsers = [];\n        this._lastXofYUpdate = 0;\n        this._firstLoadUsers = true;\n\n        // Get the current user list from a webservice.\n        this._loadAllUsers();\n\n        // We do not allow navigation while ajax requests are pending.\n        // Attach listeners to the select and arrow buttons.\n\n        this._region.find('[data-action=\"previous-user\"]').on('click', this._handlePreviousUser.bind(this));\n        this._region.find('[data-action=\"next-user\"]').on('click', this._handleNextUser.bind(this));\n        this._region.find('[data-action=\"change-user\"]').on('change', this._handleChangeUser.bind(this));\n        this._region.find('[data-region=\"user-filters\"]').on('click', this._toggleExpandFilters.bind(this));\n\n        $(document).on('user-changed', this._refreshSelector.bind(this));\n        $(document).on('done-saving-show-next', this._handleNextUser.bind(this));\n\n        // Position the configure filters panel under the link that expands it.\n        var toggleLink = this._region.find('[data-region=\"user-filters\"]');\n        var configPanel = $(document.getElementById(toggleLink.attr('aria-controls')));\n\n        configPanel.on('change', 'select', this._filterChanged.bind(this));\n\n        var userid = $('[data-region=\"grading-navigation-panel\"]').data('first-userid');\n        if (userid) {\n            this._selectUserById(userid);\n        }\n\n        str.get_string('changeuser', 'mod_assign').done(function(s) {\n                autocomplete.enhance('[data-action=change-user]', false, 'mod_assign/participant_selector', s);\n            }\n        ).fail(notification.exception);\n\n        $(document).bind(\"start-loading-user\", function() {\n            this._isLoading = true;\n        }.bind(this));\n        $(document).bind(\"finish-loading-user\", function() {\n            this._isLoading = false;\n        }.bind(this));\n    };\n\n    /** @type {Boolean} Boolean tracking active ajax requests. */\n    GradingNavigation.prototype._isLoading = false;\n\n    /** @type {String} Selector for the page region containing the user navigation. */\n    GradingNavigation.prototype._regionSelector = null;\n\n    /** @type {Array} The list of active filter keys */\n    GradingNavigation.prototype._filters = null;\n\n    /** @type {Array} The list of users */\n    GradingNavigation.prototype._users = null;\n\n    /** @type {JQuery} JQuery node for the page region containing the user navigation. */\n    GradingNavigation.prototype._region = null;\n\n    /** @type {String} Last active filters */\n    GradingNavigation.prototype._lastFilters = '';\n\n    /**\n     * Load the list of all users for this assignment.\n     *\n     * @private\n     * @method _loadAllUsers\n     * @return {Boolean} True if the user list was fetched.\n     */\n    GradingNavigation.prototype._loadAllUsers = function() {\n        var select = this._region.find('[data-action=change-user]');\n        var assignmentid = select.attr('data-assignmentid');\n        var groupid = select.attr('data-groupid');\n\n        var filterPanel = this._region.find('[data-region=\"configure-filters\"]');\n        var filter = filterPanel.find('select[name=\"filter\"]').val();\n        var workflowFilter = filterPanel.find('select[name=\"workflowfilter\"]');\n        if (workflowFilter) {\n            filter += ',' + workflowFilter.val();\n        }\n        var markerFilter = filterPanel.find('select[name=\"markerfilter\"]');\n        if (markerFilter) {\n            filter += ',' + markerFilter.val();\n        }\n\n        if (this._lastFilters == filter) {\n            return false;\n        }\n        this._lastFilters = filter;\n\n        ajax.call([{\n            methodname: 'mod_assign_list_participants',\n            args: {assignid: assignmentid, groupid: groupid, filter: '', onlyids: true, tablesort: true},\n            done: this._usersLoaded.bind(this),\n            fail: notification.exception\n        }]);\n        return true;\n    };\n\n    /**\n     * Call back to rebuild the user selector and x of y info when the user list is updated.\n     *\n     * @private\n     * @method _usersLoaded\n     * @param {Array} users\n     */\n    GradingNavigation.prototype._usersLoaded = function(users) {\n        this._firstLoadUsers = false;\n        this._filteredUsers = this._users = users;\n        if (this._users.length) {\n            // Position the configure filters panel under the link that expands it.\n            var toggleLink = this._region.find('[data-region=\"user-filters\"]');\n            var configPanel = $(document.getElementById(toggleLink.attr('aria-controls')));\n\n            configPanel.find('select[name=\"filter\"]').trigger('change');\n        } else {\n            this._selectNoUser();\n        }\n        this._triggerNextUserEvent();\n    };\n\n    /**\n     * Close the configure filters panel if a click is detected outside of it.\n     *\n     * @private\n     * @method _checkClickOutsideConfigureFilters\n     * @param {Event} event\n     */\n    GradingNavigation.prototype._checkClickOutsideConfigureFilters = function(event) {\n        var configPanel = this._region.find('[data-region=\"configure-filters\"]');\n\n        if (!configPanel.is(event.target) && configPanel.has(event.target).length === 0) {\n            var toggleLink = this._region.find('[data-region=\"user-filters\"]');\n\n            configPanel.hide();\n            configPanel.attr('aria-hidden', 'true');\n            toggleLink.attr('aria-expanded', 'false');\n            $(document).unbind('click.mod_assign_grading_navigation');\n        }\n    };\n\n    /**\n     * Close the configure filters panel if a click is detected outside of it.\n     *\n     * @private\n     * @method _updateFilterPreference\n     * @param {Number} userId The current user id.\n     * @param {Array} filterList The list of current filter values.\n     * @param {Array} preferenceNames The names of the preferences to update\n     * @return {Promise} Resolved when all the preferences are updated.\n     */\n    GradingNavigation.prototype._updateFilterPreferences = function(userId, filterList, preferenceNames) {\n        var preferences = [],\n            i = 0;\n\n        if (filterList.length == 0 || this._firstLoadUsers) {\n            // Nothing to update.\n            var deferred = $.Deferred();\n            deferred.resolve();\n            return deferred;\n        }\n        // General filter.\n        // Set the user preferences to the current filters.\n        for (i = 0; i < filterList.length; i++) {\n            var newValue = filterList[i];\n            if (newValue == 'none') {\n                newValue = '';\n            }\n\n            preferences.push({\n                userid: userId,\n                name: preferenceNames[i],\n                value: newValue\n            });\n        }\n\n        return ajax.call([{\n            methodname: 'core_user_set_user_preferences',\n            args: {\n                preferences: preferences\n            }\n        }])[0];\n    };\n    /**\n     * Turn a filter on or off.\n     *\n     * @private\n     * @method _filterChanged\n     * @param {Event} event\n     */\n    GradingNavigation.prototype._filterChanged = function() {\n        // There are 3 types of filter right now.\n        var filterPanel = this._region.find('[data-region=\"configure-filters\"]');\n        var filters = filterPanel.find('select');\n        var preferenceNames = [];\n\n        this._filters = [];\n        filters.each(function(idx, ele) {\n            var element = $(ele);\n            this._filters.push(element.val());\n            preferenceNames.push('assign_' + element.prop('name'));\n        }.bind(this));\n\n        // Update the active filter string.\n        var filterlist = [];\n        filterPanel.find('option:checked').each(function(idx, ele) {\n            filterlist[filterlist.length] = $(ele).text();\n        });\n        if (filterlist.length) {\n            this._region.find('[data-region=\"user-filters\"] span').text(filterlist.join(', '));\n        } else {\n            str.get_string('nofilters', 'mod_assign').done(function(s) {\n                this._region.find('[data-region=\"user-filters\"] span').text(s);\n            }.bind(this)).fail(notification.exception);\n        }\n\n        var select = this._region.find('[data-action=change-user]');\n        var currentUserID = select.data('currentuserid');\n        this._updateFilterPreferences(currentUserID, this._filters, preferenceNames).done(function() {\n            // Reload the list of users to apply the new filters.\n            if (!this._loadAllUsers()) {\n                var userid = parseInt(select.attr('data-selected'));\n                var foundIndex = 0;\n                // Search the returned users for the current selection.\n                $.each(this._filteredUsers, function(index, user) {\n                    if (userid == user.id) {\n                        foundIndex = index;\n                    }\n                });\n\n                if (this._filteredUsers.length) {\n                    this._selectUserById(this._filteredUsers[foundIndex].id);\n                } else {\n                    this._selectNoUser();\n                }\n\n            }\n        }.bind(this)).fail(notification.exception);\n        this._refreshCount();\n    };\n\n    /**\n     * Select no users, because no users match the filters.\n     *\n     * @private\n     * @method _selectNoUser\n     */\n    GradingNavigation.prototype._selectNoUser = function() {\n        // Detect unsaved changes, and offer to save them - otherwise change user right now.\n        if (this._isLoading) {\n            return;\n        }\n        if (checker.checkFormForChanges('[data-region=\"grade-panel\"] .gradeform')) {\n            // Form has changes, so we need to confirm before switching users.\n            str.get_strings([\n                {key: 'unsavedchanges', component: 'mod_assign'},\n                {key: 'unsavedchangesquestion', component: 'mod_assign'},\n                {key: 'saveandcontinue', component: 'mod_assign'},\n                {key: 'cancel', component: 'core'},\n            ]).done(function(strs) {\n                notification.confirm(strs[0], strs[1], strs[2], strs[3], function() {\n                    $(document).trigger('save-changes', -1);\n                });\n            });\n        } else {\n            $(document).trigger('user-changed', -1);\n        }\n    };\n\n    /**\n     * Select the specified user by id.\n     *\n     * @private\n     * @method _selectUserById\n     * @param {Number} userid\n     */\n    GradingNavigation.prototype._selectUserById = function(userid) {\n        var select = this._region.find('[data-action=change-user]');\n        var useridnumber = parseInt(userid, 10);\n\n        // Detect unsaved changes, and offer to save them - otherwise change user right now.\n        if (this._isLoading) {\n            return;\n        }\n        if (checker.checkFormForChanges('[data-region=\"grade-panel\"] .gradeform')) {\n            // Form has changes, so we need to confirm before switching users.\n            str.get_strings([\n                {key: 'unsavedchanges', component: 'mod_assign'},\n                {key: 'unsavedchangesquestion', component: 'mod_assign'},\n                {key: 'saveandcontinue', component: 'mod_assign'},\n                {key: 'cancel', component: 'core'},\n            ]).done(function(strs) {\n                notification.confirm(strs[0], strs[1], strs[2], strs[3], function() {\n                    $(document).trigger('save-changes', useridnumber);\n                });\n            });\n        } else {\n            select.attr('data-selected', userid);\n\n            if (!isNaN(useridnumber) && useridnumber > 0) {\n                $(document).trigger('user-changed', userid);\n            }\n        }\n    };\n\n    /**\n     * Expand or collapse the filter config panel.\n     *\n     * @private\n     * @method _toggleExpandFilters\n     * @param {Event} event\n     */\n    GradingNavigation.prototype._toggleExpandFilters = function(event) {\n        event.preventDefault();\n        var toggleLink = $(event.target).closest('[data-region=\"user-filters\"]');\n        var expanded = toggleLink.attr('aria-expanded') == 'true';\n        var configPanel = $(document.getElementById(toggleLink.attr('aria-controls')));\n\n        if (expanded) {\n            configPanel.hide();\n            configPanel.attr('aria-hidden', 'true');\n            toggleLink.attr('aria-expanded', 'false');\n            $(document).unbind('click.mod_assign_grading_navigation');\n        } else {\n            configPanel.css('display', 'inline-block');\n            configPanel.attr('aria-hidden', 'false');\n            toggleLink.attr('aria-expanded', 'true');\n            event.stopPropagation();\n            $(document).on('click.mod_assign_grading_navigation', this._checkClickOutsideConfigureFilters.bind(this));\n        }\n    };\n\n    /**\n     * Change to the previous user in the grading list.\n     *\n     * @private\n     * @method _handlePreviousUser\n     * @param {Event} e\n     */\n    GradingNavigation.prototype._handlePreviousUser = function(e) {\n        e.preventDefault();\n        var select = this._region.find('[data-action=change-user]');\n        var currentUserId = select.attr('data-selected');\n        var i = 0;\n        var currentIndex = 0;\n\n        for (i = 0; i < this._filteredUsers.length; i++) {\n            if (this._filteredUsers[i].id == currentUserId) {\n                currentIndex = i;\n                break;\n            }\n        }\n\n        var count = this._filteredUsers.length;\n        var newIndex = (currentIndex - 1);\n        if (newIndex < 0) {\n            newIndex = count - 1;\n        }\n\n        if (count) {\n            this._selectUserById(this._filteredUsers[newIndex].id);\n        }\n    };\n\n    /**\n     * Change to the next user in the grading list.\n     *\n     * @param {Event} e\n     * @param {Boolean} saved Has the form already been saved? Skips checking for changes if true.\n     */\n    GradingNavigation.prototype._handleNextUser = function(e, saved) {\n        e.preventDefault();\n        var select = this._region.find('[data-action=change-user]');\n        var currentUserId = select.attr('data-selected');\n        var i = 0;\n        var currentIndex = 0;\n\n        for (i = 0; i < this._filteredUsers.length; i++) {\n            if (this._filteredUsers[i].id == currentUserId) {\n                currentIndex = i;\n                break;\n            }\n        }\n\n        var count = this._filteredUsers.length;\n        var newIndex = (currentIndex + 1) % count;\n\n        if (saved && count) {\n            // If we've already saved the grade, skip checking if we've made any changes.\n            var userid = this._filteredUsers[newIndex].id;\n            var useridnumber = parseInt(userid, 10);\n            select.attr('data-selected', userid);\n            if (!isNaN(useridnumber) && useridnumber > 0) {\n                $(document).trigger('user-changed', userid);\n            }\n        } else if (count) {\n            this._selectUserById(this._filteredUsers[newIndex].id);\n        }\n    };\n\n    /**\n     * Set count string. This method only sets the value for the last time it was ever called to deal\n     * with promises that return in a non-predictable order.\n     *\n     * @private\n     * @method _setCountString\n     * @param {Number} x\n     * @param {Number} y\n     */\n    GradingNavigation.prototype._setCountString = function(x, y) {\n        var updateNumber = 0;\n        this._lastXofYUpdate++;\n        updateNumber = this._lastXofYUpdate;\n\n        var param = {x: x, y: y};\n        str.get_string('xofy', 'mod_assign', param).done(function(s) {\n            if (updateNumber == this._lastXofYUpdate) {\n                this._region.find('[data-region=\"user-count-summary\"]').text(s);\n            }\n        }.bind(this)).fail(notification.exception);\n    };\n\n    /**\n     * Rebuild the x of y string.\n     *\n     * @private\n     * @method _refreshCount\n     */\n    GradingNavigation.prototype._refreshCount = function() {\n        var select = this._region.find('[data-action=change-user]');\n        var userid = select.attr('data-selected');\n        var i = 0;\n        var currentIndex = 0;\n\n        if (isNaN(userid) || userid <= 0) {\n            this._region.find('[data-region=\"user-count\"]').hide();\n        } else {\n            this._region.find('[data-region=\"user-count\"]').show();\n\n            for (i = 0; i < this._filteredUsers.length; i++) {\n                if (this._filteredUsers[i].id == userid) {\n                    currentIndex = i;\n                    break;\n                }\n            }\n            var count = this._filteredUsers.length;\n            if (count) {\n                currentIndex += 1;\n            }\n            this._setCountString(currentIndex, count);\n            // Update window URL\n            if (currentIndex > 0) {\n                var url = new URL(window.location);\n                if (parseInt(url.searchParams.get('blindid')) > 0) {\n                    var newid = this._filteredUsers[currentIndex - 1].recordid;\n                    url.searchParams.set('blindid', newid);\n                } else {\n                    url.searchParams.set('userid', userid);\n                }\n                // We do this so a browser refresh will return to the same user.\n                window.history.replaceState({}, \"\", url);\n            }\n        }\n    };\n\n    /**\n     * Respond to a user-changed event by updating the selector.\n     *\n     * @private\n     * @method _refreshSelector\n     * @param {Event} event\n     * @param {String} userid\n     */\n    GradingNavigation.prototype._refreshSelector = function(event, userid) {\n        var select = this._region.find('[data-action=change-user]');\n        userid = parseInt(userid, 10);\n\n        if (!isNaN(userid) && userid > 0) {\n            select.attr('data-selected', userid);\n        }\n        this._refreshCount();\n    };\n\n    /**\n     * Trigger the next user event depending on the number of filtered users\n     *\n     * @private\n     * @method _triggerNextUserEvent\n     */\n    GradingNavigation.prototype._triggerNextUserEvent = function() {\n        if (this._filteredUsers.length > 1) {\n            $(document).trigger('next-user', {nextUserId: null, nextUser: true});\n        } else {\n            $(document).trigger('next-user', {nextUser: false});\n        }\n    };\n\n    /**\n     * Change to a different user in the grading list.\n     *\n     * @private\n     * @method _handleChangeUser\n     * @param {Event} event\n     */\n    GradingNavigation.prototype._handleChangeUser = function() {\n        var select = this._region.find('[data-action=change-user]');\n        var userid = parseInt(select.val(), 10);\n\n        if (this._isLoading) {\n            return;\n        }\n        if (checker.checkFormForChanges('[data-region=\"grade-panel\"] .gradeform')) {\n            // Form has changes, so we need to confirm before switching users.\n            str.get_strings([\n                {key: 'unsavedchanges', component: 'mod_assign'},\n                {key: 'unsavedchangesquestion', component: 'mod_assign'},\n                {key: 'saveandcontinue', component: 'mod_assign'},\n                {key: 'cancel', component: 'core'},\n            ]).done(function(strs) {\n                notification.confirm(strs[0], strs[1], strs[2], strs[3], function() {\n                    $(document).trigger('save-changes', userid);\n                });\n            });\n        } else {\n            if (!isNaN(userid) && userid > 0) {\n                select.attr('data-selected', userid);\n\n                $(document).trigger('user-changed', userid);\n            }\n        }\n    };\n\n    return GradingNavigation;\n});\n"],"file":"grading_navigation.min.js"}