{"version":3,"sources":["webpack:///./ui/features/self_enrollment/backbone/views/SelfEnrollmentForm.js","webpack:///./ui/features/self_enrollment/index.js","webpack:///./public/javascripts/translations/observer_pairing_code.js","webpack:///./ui/shims/dummyI18nResource.js?b807","webpack:///./ui/shared/normalize-registration-errors/backbone/models/ObserverPairingCodeModel.js","webpack:///./packages/obj-flatten/index.js","webpack:///./ui/shared/normalize-registration-errors/index.coffee","webpack:///./public/javascripts/translations/user.js","webpack:///./ui/shims/dummyI18nResource.js?842f","webpack:///./ui/shared/users/backbone/models/User.coffee"],"names":["SelfEnrollmentForm","Backbone","View","this","prototype","events","initialize","options","super","arguments","enrollUrl","$el","attr","action","initialAction","find","val","ENV","ACCOUNT","recaptcha_key","that","$","window","on","dataCaptchaId","grecaptcha","render","sitekey","callback","recaptchaPassed","prop","formSubmit","beforeSubmit","data","success","errorFormatter","errors","error","clearCaptcha","disableWhileLoading","changeAction","e","target","hide","show","css","visibility","confirmEnrollmentUrl","location","normalizeData","q","search","enroll","reset","ret","registrationErrors","loginErrors","enrollErrors","length","__guard__","user","self_enrollment_code","x","type","reload","logOut","submit","refresh","ajaxJSON","logOutAndRefresh","preventDefault","initClass","value","transform","ready","extend","SELF_ENROLLMENT_OPTIONS","el","mergeI18nTranslations","JSON","parse","scoped","ObserverPairingCode","Model","errorMap","code","invalid","I18n","t","flatten","obj","result","prefix","key","flattenable","arrays","passwordPolicy","PASSWORD_POLICY","normalizeErrors","pseudonym","observee","pairing_code","modelType","resourceName","name","blank","too_long","max","already_enrolled","concluded","full","terms_of_use","accepted","enrollments","attrs","first","where","get","hasEnrollmentType","hasEnrollmentRole","role","findEnrollmentByRole","allEnrollmentsByType","allEnrollmentsByRole","pending","some","enrollment_state","inactive","every","sectionEditableEnrollments","select"],"mappings":";;;;;;;;;;;AAwBe,MAAMA,UAA2BC,IAASC,KACvC,mBACdC,KAAKC,UAAUC,OAAS,CACtB,oCAAqC,eACrC,qBAAsB,oBAI1BC,WAAWC,EAAU,IACnBJ,KAAKI,QAAUA;AACfC,MAAMF,cAAcG;AACpBN,KAAKO,UAAYP,KAAKQ,IAAIC,KAAK;AAC/BT,KAAKU,OAASV,KAAKW,cAAgBX,KAAKQ,IACrCI,KAAK,2CACLC;AAEH,GAAIC,IAAIC,QAAQC,cAAe,CAC7B,MAAMC,EAAOjB;AACbkB,IAAEC,QAAQC,GAAG,QAAQ,WACnBH,EAAKI,cAAgBC,WAAWC,OAAON,EAAKT,IAAII,KAAK,gBAAgB,GAAI,CACvEY,QAASV,IAAIC,QAAQC,cACrBS,SAAU,KACRR,EAAKS,gBAAkB;AACvBT,EAAKT,IAAII,KAAK,kBAAkBe,KAAK,WAAY,QAEnD,mBAAoB,KAClBV,EAAKS,gBAAkB;AACvBT,EAAKT,IAAII,KAAK,kBAAkBe,KAAK,WAAY;AAIpC,UAAf3B,KAAKU,QACPV,KAAKQ,IAAII,KAAK,kBAAkBe,KAAK,WAAY,MAGrD,OAAO3B,KAAKQ,IAAIoB,WAAW,CACzBC,aAAcC,GAAQ9B,KAAK6B,aAAaC,GACxCC,QAASD,GAAQ9B,KAAK+B,QAAQD,GAC9BE,eAAgBC,GAAUjC,KAAKgC,eAAeC,GAC9CC,MAAO,IAAMlC,KAAKmC,eAClBC,oBAAqB,oBAIzBC,aAAaC,GACXtC,KAAKU,OAASQ,IAAEoB,EAAEC,QAAQ1B;AACtBC,IAAIC,QAAQC,eACdhB,KAAKQ,IACFI,KAAK,kBACLe,KAAK,WAA4B,WAAhB3B,KAAKU,SAAwBV,KAAK0B;AAExD1B,KAAKQ,IAAII,KAAK,cAAc4B;AAC5BxC,KAAKQ,IAAII,KAAM,IAAGZ,KAAKU,oBAAoB+B;AAC3C,OAAOzC,KAAKQ,IAAII,KAAK,kBAAkB8B,IAAI,CAACC,WAAY,YAG1Dd,aAAaC,GACX,IAAK9B,KAAKU,OAAQ,OAAO;AACzB,GAAIV,KAAKI,QAAQwC,sBAAwC,WAAhB5C,KAAKU,OAAqB,CACjES,OAAO0B,SAAW7C,KAAKI,QAAQwC;AAC/B,OAAO,MAGT5C,KAAK8C,cAAchB;AAEnB,OAAO9B,KAAKQ,IAAIC,KACd,SACA,MACE,OAAQT,KAAKU,QACX,IAAK,SACH,MAAO;AACT,IAAK,SACH,MAAO;AACT,IAAK,SACH,OAAOV,KAAKO,YAPlB,IAaJwB,QAAQD,GACN,GAAoB,WAAhB9B,KAAKU,OAAqB,CAE5B,IAAIqC,EAAI5B,OAAO0B,SAASG;AACxBD,EAAIA,EAAOA,EAAF,IAAS;AAClBA,GAAK;AACsB,WAAvB/C,KAAKW,gBACPoC,GAAK;AAEP,OAAQ5B,OAAO0B,SAASG,OAASD,EAGjC,OAAO/C,KAAKiD,SAIhBH,cAAchB,GACZ,GAAoB,WAAhB9B,KAAKU,OAAqB,CAC5BoB,EAAK,gCAC6B,MAAhCA,EAAK,wBAAkCA,EAAK,wBAA0B;AACxEA,EAAK,+BAC4B,MAA/BA,EAAK,uBAAiCA,EAAK,uBAAyB,GAExE,OAAOA,EAGTK,eACE,GAAIrB,IAAIC,QAAQC,cAAe,CAC7BM,WAAW4B,MAAMlD,KAAKqB;AACtBrB,KAAKQ,IAAII,KAAK,kBAAkBe,KAAK,WAAY,OAIrDK,eAAeC,GACb,MAAMkB,EAAM,MACV,OAAQnD,KAAKU,QACX,IAAK,SACH,OAAO0C,eAAmBnB;AAC5B,IAAK,SACH,OAAOjC,KAAKqD,YAAYpB;AAC1B,IAAK,SACH,OAAOjC,KAAKsD,aAAarB,KAPnB;AAUZ,OAAOkB,EAGTE,YAAYpB,GACV,MAAMC,EAAQD,EAAOA,EAAOsB,OAAS;AACrC,MAAO,CAAC,sBAAuBrB,GAGjCoB,aAAarB,GACX,GAIQ,qBAHNuB,EACiB,MAAfvB,EAAOwB,KAAexB,EAAOwB,KAAKxB,OAAOyB,0BAAzC,EACAC,GAAKA,EAAE,GAAGC,MAEZ,CAEAf,SAASgB,OAAO;AAChB,MAAO,GAGT7D,KAAKU,OAASV,KAAKW;AACnBX,KAAK8D;AACL,OAAO7B,EAGTgB,SACEjD,KAAKU,OAAS;AACd,OAAOV,KAAKQ,IAAIuD,SAGlBD,OAAOE,EAAU,OACf,OAAO9C,IAAE+C,SAAS,UAAW,SAAU,GAAI,KACrCD,GAASnB,SAASgB,OAAO,QAIjCK,iBAAiB5B,GACfA,EAAE6B;AACF,OAAOnE,KAAK8D,OAAO,OAGvBjE,EAAmBuE;AAEnB,SAASZ,EAAUa,EAAOC,GACxB,MAAwB,qBAAVD,GAAmC,OAAVA,EAAiBC,EAAUD,QAA3D,EC1KTE,IAAM,KACJ,MAAMnE,EAAUc,IAAEsD,OAChB,GAC+B,MAA/B1D,IAAI2D,wBAAkC3D,IAAI2D,wBAA0B,GACpE,CAACC,GAAI;AAEP,IAAI7E,EAAmBO,M;;;;;ACtBzB,OAAAuE,EAAA,MAAsBC,KAAKC,MAAM;;;ACEd,mBAAKC,OAAO;;;ACahB,MAAMC,UAA4BjF,IAASkF,OAI1DD,EAAoB9E,UAAUgF,SAAW,CACvCC,KAAM,CACJC,QAASC,EAAKC,EAAE,iBAAkB;ACTvB,SAASC,EAAQC,EAAKnF,EAAU,GAAIoF,EAAS,GAAIC,GAC9D,IAAK,IAAIC,KAAOH,EAAK,CACnB,MAAMlB,EAAQkB,EAAIG;AAClBA,EAAMD,EAAS,GAAGA,KAAUC,KAASA;AACrC,IAAIC,EAA+B,kBAAVtB;AACL,MAAhBA,EAAMd,QAAqC,QAAnBnD,EAAQwF,SAClCD,EAAc;AAEZA,EACFL,EAAQjB,EAAOjE,EAASoF,EAAQE,GAEhCF,EAAOE,GAAOrB,EAGlB,OAAOmB,ECTM,OAAqB,SAACvD,EAAQ4D,G,UAAAA,EAAiB/E,IAAIgF;OAChER,EACE,CAAA7B,KAAM,OAAI,UAAEsC,gBAAgB9D,EAAOwB,MACnCuC,UAAW,OAAS,UAAED,gBAAgB9D,EAAO+D,UAAWH,GACxDI,SAAU,OAAS,UAAEF,gBAAgB9D,EAAOgE,SAAUJ,GACtDK,aAAc,EAAmB,UAAEH,gBAAgB9D,EAAOiE,eAC1D,CAAAN,OAAQ,U;;;ACvBZ,OAAAjB,EAAA,MAAsBC,KAAKC,MAAM;;;ACEd,mBAAKC,OAAO;;;;;ACU/B;AAAA;AAAA;AAAA;AAAA,U;AAIqB,OAAI,Y;8EACvBqB,UAAW;YACXC,aAAc;YAEdnB,SACE,CAAAoB,KACE,CAAAC,MAAc,EAAKjB,EAAE,kBAAmB,YACxCkB,SAAc,EAAKlB,EAAE,kBAAmB,iCAAkC,CAACmB,IAAK,OAClF9C,qBACE,CAAA4C,MAAc,EAAKjB,EAAE,kBAAmB,YACxCF,QAAc,EAAKE,EAAE,sBAAuB,gBAC5CoB,iBAAkB,EAAKpB,EAAE,0BAA2B,2CACpDqB,UAAc,EAAKrB,EAAE,6BACrBsB,KAAc,EAAKtB,EAAE,qBAAsB,wBAC7CuB,aACE,CAAAC,SAAc,EAAKxB,EAAE,eAAgB;YAGzCyB,YAAa,SAACC,EAAOC,G,OACnB,IAAEC,MAAM,KAACC,IAAI,eAAgBH,EAAOC;YAEtCG,kBAAmB,SAACvD,G,QACf,KAACkD,YAAY,CAAClD,QAAO;YAE1BwD,kBAAmB,SAACC,G,QACf,KAACP,YAAY,CAACO,QAAO;YAE1BC,qBAAsB,SAACD,G,OACrB,KAACP,YAAY,CAACO,QAAO;YAEvBE,qBAAsB,SAAC3D,G,OACrB,KAACkD,YAAY,CAAClD;YAEhB4D,qBAAsB,SAACH,G,OACrB,KAACP,YAAY,CAACO;YAEhBI,QAAS,SAACJ,G,OACR,IAAEK,KAAK,KAACR,IAAI,gBAAgB,SAAC5E,GAAM;OAAAA,EAAE+E,OAAQA,IAA+B,sBAAvB,EAAA/E,EAAEqF,mBAAyC,YAA3C;YAEvDC,SAAU,W,OACR,IAAEC,MAAM,KAACX,IAAI,gBAAgB,SAAC5E,G,MAA4B,aAAtBA,EAAEqF;YAExCG,2BAA4B,W,OAC1B,IAAEC,OAAO,KAACb,IAAI,gBAAgB,SAAC5E,G,MAAgB,uBAAVA,EAAEsB;SA3ClB,CAAS,IAASoB","file":"self_enrollment-c-b7978b58dd.js","sourcesContent":["//\n// Copyright (C) 2012 - present Instructure, Inc.\n//\n// This file is part of Canvas.\n//\n// Canvas is free software: you can redistribute it and/or modify it under\n// the terms of the GNU Affero General Public License as published by the Free\n// Software Foundation, version 3 of the License.\n//\n// Canvas is distributed in the hope that it will be useful, but WITHOUT ANY\n// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n// A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n// details.\n//\n// You should have received a copy of the GNU Affero General Public License along\n// with this program. If not, see .\n//\n\nimport $ from 'jquery'\nimport Backbone from '@canvas/backbone'\nimport registrationErrors from '@canvas/normalize-registration-errors'\nimport '@canvas/forms/jquery/jquery.instructure_forms'\nimport '@canvas/jquery/jquery.ajaxJSON'\n\nexport default class SelfEnrollmentForm extends Backbone.View {\n static initClass() {\n this.prototype.events = {\n 'change input[name=initial_action]': 'changeAction',\n 'click #logout_link': 'logOutAndRefresh'\n }\n }\n\n initialize(options = {}) {\n this.options = options\n super.initialize(...arguments)\n this.enrollUrl = this.$el.attr('action')\n this.action = this.initialAction = this.$el\n .find('input[type=hidden][name=initial_action]')\n .val()\n\n if (ENV.ACCOUNT.recaptcha_key) {\n const that = this\n $(window).on('load', function() {\n that.dataCaptchaId = grecaptcha.render(that.$el.find('.g-recaptcha')[0], {\n sitekey: ENV.ACCOUNT.recaptcha_key,\n callback: () => {\n that.recaptchaPassed = true\n that.$el.find('#submit_button').prop('disabled', false)\n },\n 'expired-callback': () => {\n that.recaptchaPassed = false\n that.$el.find('#submit_button').prop('disabled', true)\n }\n })\n })\n if (this.action == 'create') {\n this.$el.find('#submit_button').prop('disabled', true)\n }\n }\n return this.$el.formSubmit({\n beforeSubmit: data => this.beforeSubmit(data),\n success: data => this.success(data),\n errorFormatter: errors => this.errorFormatter(errors),\n error: () => this.clearCaptcha(),\n disableWhileLoading: 'spin_on_success'\n })\n }\n\n changeAction(e) {\n this.action = $(e.target).val()\n if (ENV.ACCOUNT.recaptcha_key) {\n this.$el\n .find('#submit_button')\n .prop('disabled', this.action === 'create' && !this.recaptchaPassed)\n }\n this.$el.find('.user_info').hide()\n this.$el.find(`#${this.action}_user_info`).show()\n return this.$el.find('#submit_button').css({visibility: 'visible'})\n }\n\n beforeSubmit(data) {\n if (!this.action) return false\n if (this.options.confirmEnrollmentUrl && this.action === 'enroll') {\n window.location = this.options.confirmEnrollmentUrl\n return false\n }\n\n this.normalizeData(data)\n\n return this.$el.attr(\n 'action',\n (() => {\n switch (this.action) {\n case 'create':\n return '/users'\n case 'log_in':\n return '/login/canvas'\n case 'enroll':\n return this.enrollUrl\n }\n })()\n )\n }\n\n success(data) {\n if (this.action === 'enroll') {\n // they should now be authenticated (either registered or pre_registered)\n let q = window.location.search\n q = q ? `${q}&` : '?'\n q += 'enrolled=1'\n if (this.initialAction === 'create') {\n q += '&just_created=1'\n }\n return (window.location.search = q)\n } else {\n // i.e. we just registered or logged in\n return this.enroll()\n }\n }\n\n normalizeData(data) {\n if (this.action === 'log_in') {\n data['pseudonym_session[unique_id]'] =\n data['pseudonym[unique_id]'] != null ? data['pseudonym[unique_id]'] : ''\n data['pseudonym_session[password]'] =\n data['pseudonym[password]'] != null ? data['pseudonym[password]'] : ''\n }\n return data\n }\n\n clearCaptcha() {\n if (ENV.ACCOUNT.recaptcha_key) {\n grecaptcha.reset(this.dataCaptchaId)\n this.$el.find('#submit_button').prop('disabled', true)\n }\n }\n\n errorFormatter(errors) {\n const ret = (() => {\n switch (this.action) {\n case 'create':\n return registrationErrors(errors)\n case 'log_in':\n return this.loginErrors(errors)\n case 'enroll':\n return this.enrollErrors(errors)\n }\n })()\n return ret\n }\n\n loginErrors(errors) {\n const error = errors[errors.length - 1]\n return {'pseudonym[password]': error}\n }\n\n enrollErrors(errors) {\n if (\n __guard__(\n errors.user != null ? errors.user.errors.self_enrollment_code : undefined,\n x => x[0].type\n ) === 'already_enrolled'\n ) {\n // just reload if already enrolled\n location.reload(true)\n return []\n }\n\n this.action = this.initialAction\n this.logOut()\n return errors\n }\n\n enroll() {\n this.action = 'enroll'\n return this.$el.submit()\n }\n\n logOut(refresh = false) {\n return $.ajaxJSON('/logout', 'DELETE', {}, () => {\n if (refresh) location.reload(true)\n })\n }\n\n logOutAndRefresh(e) {\n e.preventDefault()\n return this.logOut(true)\n }\n}\nSelfEnrollmentForm.initClass()\n\nfunction __guard__(value, transform) {\n return typeof value !== 'undefined' && value !== null ? transform(value) : undefined\n}\n","/*\n * Copyright (C) 2012 - present Instructure, Inc.\n *\n * This file is part of Canvas.\n *\n * Canvas is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, version 3 of the License.\n *\n * Canvas is distributed in the hope that it will be useful, but WITHOUT ANY\n * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n * A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License along\n * with this program. If not, see .\n */\n\nimport $ from 'jquery'\nimport ready from '@instructure/ready'\nimport SelfEnrollmentForm from './backbone/views/SelfEnrollmentForm'\n\nready(() => {\n const options = $.extend(\n {},\n ENV.SELF_ENROLLMENT_OPTIONS != null ? ENV.SELF_ENROLLMENT_OPTIONS : {},\n {el: '#enroll_form'}\n )\n new SelfEnrollmentForm(options)\n})\n","// this file was auto-generated by rake i18n:generate_js.\n// you probably shouldn't edit it directly\nimport mergeI18nTranslations from '@canvas/i18n/mergeI18nTranslations.js';\n\n// we use JSON.parse here instead of just loading it as a javascript object literal\n// because according to https://v8.dev/blog/cost-of-javascript-2019#json that is faster\nmergeI18nTranslations(JSON.parse(\"{\\\"ar\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"رمز إقران غير صالح\\\"}}},\\\"ca\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Codi d'emparellament no vàlid\\\"}}},\\\"cy\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Cod paru annilys\\\"}}},\\\"da\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Ugyldig parringskode\\\"}}},\\\"da-x-k12\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Ugyldig parringskode\\\"}}},\\\"de\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Pairing-Code ungültig\\\"}}},\\\"en\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Invalid pairing code\\\"}}},\\\"en-AU\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Invalid pairing code\\\"}}},\\\"en-CA\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Invalid pairing code\\\"}}},\\\"en-GB\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Invalid pairing code\\\"}}},\\\"es\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Código de sincronización inválido\\\"}}},\\\"fa\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"کد جفت سازی نامعتبر است\\\"}}},\\\"fi\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Virheellinen parinmuodostuskoodi\\\"}}},\\\"fr\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Code d'appariement invalide\\\"}}},\\\"fr-CA\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Code de jumelage non valide\\\"}}},\\\"ht\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Kòd kouplaj envalid\\\"}}},\\\"is\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Ógildur pörunarkóði\\\"}}},\\\"it\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Codice accoppiamento non valido\\\"}}},\\\"ja\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"ペアリングコードが無効です\\\"}}},\\\"mi\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Koremana waehere hono\\\"}}},\\\"nb\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Ugyldig paringskode\\\"}}},\\\"nb-x-k12\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Ugyldig parings-kode\\\"}}},\\\"nl\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Ongeldige koppelingscode\\\"}}},\\\"nn\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Ugyldig paringskode\\\"}}},\\\"pl\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Nieprawidłowy kod parowania\\\"}}},\\\"pt\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Código de pareamento inválido\\\"}}},\\\"pt-BR\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Código de emparelhamento inválido\\\"}}},\\\"ru\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Недействительный код сопряжения\\\"}}},\\\"sl\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Neveljavna koda za vzpostavljanje povezave\\\"}}},\\\"sv\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Ogiltig kopplingskod\\\"}}},\\\"sv-x-k12\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"Ogiltig kopplingskod\\\"}}},\\\"zh-Hans\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"无效配对代码\\\"}}},\\\"zh-Hant\\\":{\\\"observer_pairing_code\\\":{\\\"errors\\\":{\\\"invalid\\\":\\\"無效的配對代碼\\\"}}}}\"));\n","\n import I18n from '@canvas/i18n/i18nObj';\n \n import 'translations/observer_pairing_code';\n import 'translations/_core';\n \n import 'translations/_core_en';\n\n export default I18n.scoped('observer_pairing_code');\n ","/*\n * Copyright (C) 2018 - present Instructure, Inc.\n *\n * This file is part of Canvas.\n *\n * Canvas is free software: you can redistribute it and/or modify it under\n * the terms of the GNU Affero General Public License as published by the Free\n * Software Foundation, version 3 of the License.\n *\n * Canvas is distributed in the hope that it will be useful, but WITHOUT ANY\n * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n * A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n * details.\n *\n * You should have received a copy of the GNU Affero General Public License along\n * with this program. If not, see .\n */\n\nimport I18n from 'i18n!observer_pairing_code'\nimport Backbone from '@canvas/backbone'\n\nexport default class ObserverPairingCode extends Backbone.Model {}\n\n// no way of defining this in the class itself was making it work\n// with how coffeescript classes were expecting things to work\nObserverPairingCode.prototype.errorMap = {\n code: {\n invalid: I18n.t('errors.invalid', 'Invalid pairing code')\n }\n}\n","//\n// Copyright (C) 2012 - present Instructure, Inc.\n//\n// This file is part of Canvas.\n//\n// Canvas is free software: you can redistribute it and/or modify it under\n// the terms of the GNU Affero General Public License as published by the Free\n// Software Foundation, version 3 of the License.\n//\n// Canvas is distributed in the hope that it will be useful, but WITHOUT ANY\n// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n// A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n// details.\n//\n// You should have received a copy of the GNU Affero General Public License along\n// with this program. If not, see .\n\n// turns {foo: {bar: 1}} into {'foo[bar]': 1}\nexport default function flatten(obj, options = {}, result = {}, prefix) {\n for (let key in obj) {\n const value = obj[key]\n key = prefix ? `${prefix}[${key}]` : key\n let flattenable = typeof value === 'object'\n if (value.length != null && options.arrays === false) {\n flattenable = false\n }\n if (flattenable) {\n flatten(value, options, result, key)\n } else {\n result[key] = value\n }\n }\n return result\n}\n","#\n# Copyright (C) 2012 - present Instructure, Inc.\n#\n# This file is part of Canvas.\n#\n# Canvas is free software: you can redistribute it and/or modify it under\n# the terms of the GNU Affero General Public License as published by the Free\n# Software Foundation, version 3 of the License.\n#\n# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n# details.\n#\n# You should have received a copy of the GNU Affero General Public License along\n# with this program. If not, see .\n\nimport User from '@canvas/users/backbone/models/User.coffee'\nimport Pseudonym from '@canvas/pseudonyms/backbone/models/Pseudonym.coffee'\nimport ObserverPairingCode from './backbone/models/ObserverPairingCodeModel'\nimport flatten from 'obj-flatten'\n\n# normalize errors we get from POST /user (user creation API)\nexport default registrationErrors = (errors, passwordPolicy = ENV.PASSWORD_POLICY) ->\n flatten\n user: User::normalizeErrors(errors.user)\n pseudonym: Pseudonym::normalizeErrors(errors.pseudonym, passwordPolicy)\n observee: Pseudonym::normalizeErrors(errors.observee, passwordPolicy)\n pairing_code: ObserverPairingCode::normalizeErrors(errors.pairing_code)\n , arrays: false\n","// this file was auto-generated by rake i18n:generate_js.\n// you probably shouldn't edit it directly\nimport mergeI18nTranslations from '@canvas/i18n/mergeI18nTranslations.js';\n\n// we use JSON.parse here instead of just loading it as a javascript object literal\n// because according to https://v8.dev/blog/cost-of-javascript-2019#json that is faster\nmergeI18nTranslations(JSON.parse(\"{\\\"ar\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"تم إنهاء هذا المساق\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"أنت مسجل بالفعل في هذا المساق\\\",\\\"course_full\\\":\\\"هذا المساق مكتمل\\\",\\\"invalid_code\\\":\\\"كود غير صالح\\\",\\\"required\\\":\\\"مطلوب\\\",\\\"terms\\\":\\\"يجب أن توافق على الشروط\\\",\\\"too_long\\\":\\\"يتعذر تجاوز %{max} حرفًَا\\\"}}},\\\"ca\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Aquest curs ha finalitzat\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Ja esteu inscrit en aquest curs\\\",\\\"course_full\\\":\\\"Aquest curs és ple\\\",\\\"invalid_code\\\":\\\"Codi no vàlid\\\",\\\"required\\\":\\\"Obligatori\\\",\\\"terms\\\":\\\"Heu d'acceptar les condicions\\\",\\\"too_long\\\":\\\"No pot tenir més de %{max} caràcters\\\"}}},\\\"cy\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Mae’r cwrs hwn wedi dod i ben\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Rydych chi wedi ymrestru’n barod ar y cwrs hwn\\\",\\\"course_full\\\":\\\"Mae’r cwrs hwn yn llawn\\\",\\\"invalid_code\\\":\\\"Cod annilys\\\",\\\"required\\\":\\\"Gofynnol\\\",\\\"terms\\\":\\\"Mae’n rhaid i chi gytuno â’r telerau\\\",\\\"too_long\\\":\\\"Ddim yn cael bod yn fwy na %{max} nod\\\"}}},\\\"da\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Dette fag er afsluttet\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Du er allerede tilmeldt dette fag\\\",\\\"course_full\\\":\\\"Dette kursus er fyldt\\\",\\\"invalid_code\\\":\\\"Ugyldig kode\\\",\\\"required\\\":\\\"Påkrævet\\\",\\\"terms\\\":\\\"Du skal acceptere betingelserne\\\",\\\"too_long\\\":\\\"Kan ikke overskride %{max} tegn\\\"}}},\\\"da-x-k12\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Dette fag er afsluttet\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Du er allerede tilmeldt dette fag\\\",\\\"course_full\\\":\\\"Dette fag er fyldt\\\",\\\"invalid_code\\\":\\\"Ugyldig kode\\\",\\\"required\\\":\\\"Påkrævet\\\",\\\"terms\\\":\\\"Du skal acceptere betingelserne\\\",\\\"too_long\\\":\\\"Kan ikke overskride %{max} tegn\\\"}}},\\\"de\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Dieser Kurs wurde abgeschlossen.\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Sie sind bereits für diesen Kurs eingeschrieben.\\\",\\\"course_full\\\":\\\"Dieser Kurs ist voll belegt.\\\",\\\"invalid_code\\\":\\\"Ungültiger Code\\\",\\\"required\\\":\\\"Erforderlich\\\",\\\"terms\\\":\\\"Sie müssen den Bedingungen zustimmen.\\\",\\\"too_long\\\":\\\"Darf %{max} Zeichen nicht überschreiten\\\"}}},\\\"el\\\":{\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Είστε ήδη εγγεγραμένος/η σε αυτό το μάθημα\\\",\\\"course_full\\\":\\\"Το μάθημα είναι πλήρες\\\",\\\"invalid_code\\\":\\\"Μη έγκυρος κώδικας\\\",\\\"required\\\":\\\"Απαιτούμενο\\\",\\\"terms\\\":\\\"Πρέπει να συμφωνήσετε με αυτούς τους όρους\\\",\\\"too_long\\\":\\\"Δεν πρέπει να έχει παραπάνω από %{max} χαρακτήρες\\\"}}},\\\"en\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"This course has concluded\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"You are already enrolled in this course\\\",\\\"course_full\\\":\\\"This course is full\\\",\\\"invalid_code\\\":\\\"Invalid code\\\",\\\"required\\\":\\\"Required\\\",\\\"terms\\\":\\\"You must agree to the terms\\\",\\\"too_long\\\":\\\"Can't exceed %{max} characters\\\"}}},\\\"en-AU\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"This course has concluded\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"You are already enrolled in this course\\\",\\\"course_full\\\":\\\"This course is full\\\",\\\"invalid_code\\\":\\\"Invalid code\\\",\\\"required\\\":\\\"Required\\\",\\\"terms\\\":\\\"You must agree to the terms\\\",\\\"too_long\\\":\\\"Can't exceed %{max} characters\\\"}}},\\\"en-CA\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"This course has concluded\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"You are already enrolled in this course\\\",\\\"course_full\\\":\\\"This course is full\\\",\\\"invalid_code\\\":\\\"Invalid code\\\",\\\"required\\\":\\\"Required\\\",\\\"terms\\\":\\\"You must agree to the terms\\\",\\\"too_long\\\":\\\"Can't exceed %{max} characters\\\"}}},\\\"en-GB\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"This course has concluded\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"You are already enrolled in this course\\\",\\\"course_full\\\":\\\"This course is full\\\",\\\"invalid_code\\\":\\\"Invalid code\\\",\\\"required\\\":\\\"Required\\\",\\\"terms\\\":\\\"You must agree to the terms\\\",\\\"too_long\\\":\\\"Can't exceed %{max} characters\\\"}}},\\\"es\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Este curso finalizó\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Ya está inscrito en este curso\\\",\\\"course_full\\\":\\\"Este curso está lleno\\\",\\\"invalid_code\\\":\\\"Código inválido\\\",\\\"required\\\":\\\"Obligatorio\\\",\\\"terms\\\":\\\"Debe aceptar estos términos\\\",\\\"too_long\\\":\\\"No puede superar los %{max} caracteres\\\"}}},\\\"fa\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"این درس لغو شده است\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"شما در حال حاضر در این درس ثبت نام شده اید\\\",\\\"course_full\\\":\\\"ظرفیت این درس تکمیل شده است\\\",\\\"invalid_code\\\":\\\"رمز معتبر نیست\\\",\\\"required\\\":\\\"لازم\\\",\\\"terms\\\":\\\"باید ضوابط را بپذیرید\\\",\\\"too_long\\\":\\\"نمی تواند از %{max} نویسه فراتر رود\\\"}}},\\\"fi\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Tämä kurssi on viety loppuun\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Olet jo ilmoittautunut tälle kurssille\\\",\\\"course_full\\\":\\\"Tämä kurssi on täynnä\\\",\\\"invalid_code\\\":\\\"Koodi ei kelpaa\\\",\\\"required\\\":\\\"Pakollinen\\\",\\\"terms\\\":\\\"Sinun täytyy hyväksyä ehdot\\\",\\\"too_long\\\":\\\"Ei voi ylittää %{max} merkkiä\\\"}}},\\\"fr\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Ce cours est terminé\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Vous êtes déjà inscrit à ce cours.\\\",\\\"course_full\\\":\\\"Ce cours est complet.\\\",\\\"invalid_code\\\":\\\"Code erroné\\\",\\\"required\\\":\\\"Requis\\\",\\\"terms\\\":\\\"Vous devez accepter les conditions.\\\",\\\"too_long\\\":\\\"Ne doit pas dépasser %{max} caractères\\\"}}},\\\"fr-CA\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Ce cours est terminé\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Vous êtes déjà inscrit à ce cours.\\\",\\\"course_full\\\":\\\"Ce cours est complet.\\\",\\\"invalid_code\\\":\\\"Code erroné\\\",\\\"required\\\":\\\"Requis\\\",\\\"terms\\\":\\\"Vous devez accepter les conditions.\\\",\\\"too_long\\\":\\\"Ne doit pas dépasser %{max} caractères\\\"}}},\\\"he\\\":{\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"כבר נרשמת לקורס זה\\\",\\\"course_full\\\":\\\"קורס זה התמלא\\\",\\\"invalid_code\\\":\\\"קוד שגוי\\\",\\\"required\\\":\\\"נדרש\\\",\\\"terms\\\":\\\"חובה להסכים לתנאים\\\",\\\"too_long\\\":\\\"מספר התוים המכסימלי: %{max} \\\"}}},\\\"ht\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Kou sa a fini.\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Ou enskri nan kou sa a deja\\\",\\\"course_full\\\":\\\"Kou sa a plen\\\",\\\"invalid_code\\\":\\\"Kòd envalid\\\",\\\"required\\\":\\\"Obligatwa\\\",\\\"terms\\\":\\\"Ou dwe dakò ak kondisyon yo\\\",\\\"too_long\\\":\\\"Pa kapab depase %{max} karaktè\\\"}}},\\\"hu\\\":{\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Ön már beiratkozott ebbe a kurzusba\\\",\\\"course_full\\\":\\\"Ez a kurzus megtelt\\\",\\\"invalid_code\\\":\\\"Érvénytelen kód\\\",\\\"required\\\":\\\"Kötelező\\\",\\\"terms\\\":\\\"Fogadja el a feltételeket\\\",\\\"too_long\\\":\\\"Nem lehet több, mint %{max} karakter\\\"}}},\\\"hy\\\":{\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Դուք արդեն գրանցված եք դասընթացում\\\",\\\"course_full\\\":\\\"Դասընթացի ուսանողների թիվը համալրված է\\\",\\\"invalid_code\\\":\\\"Սխալ կոդ\\\",\\\"required\\\":\\\"Պահանջվում է\\\",\\\"terms\\\":\\\"Դուք պետք է համաձայնեք պայմաններին\\\",\\\"too_long\\\":\\\"Նշանների թիվը չի կարող գերազանցել %{max} \\\"}}},\\\"is\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Þessu námskeiði er lokið\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Þú ert þegar innrituð/innritaður á þetta námskeið\\\",\\\"course_full\\\":\\\"Námskeiðið er fullt\\\",\\\"invalid_code\\\":\\\"Ógildur kóði\\\",\\\"required\\\":\\\"Krafist\\\",\\\"terms\\\":\\\"Þú verður að samþykkja skilmálana\\\",\\\"too_long\\\":\\\"Má ekki fara yfir %{max} stafi\\\"}}},\\\"it\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Questo corso è terminato\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Sei già iscritto a questo corso\\\",\\\"course_full\\\":\\\"Questo corso è pieno\\\",\\\"invalid_code\\\":\\\"Codice non valido\\\",\\\"required\\\":\\\"Obbligatorio\\\",\\\"terms\\\":\\\"Devi accettare i termini\\\",\\\"too_long\\\":\\\"Non può superare %{max} caratteri\\\"}}},\\\"ja\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"このコースは終了しました\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"このコースには既に登録されています\\\",\\\"course_full\\\":\\\"このコースには空きがありません\\\",\\\"invalid_code\\\":\\\"無効なコード\\\",\\\"required\\\":\\\"必須\\\",\\\"terms\\\":\\\"利用規約に同意する必要があります\\\",\\\"too_long\\\":\\\"%{max} 文字以内にしてください\\\"}}},\\\"ko\\\":{\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"이 과목에 이미 등록함\\\",\\\"course_full\\\":\\\"이 과목은 만원임\\\",\\\"invalid_code\\\":\\\"유효하지 않은 코드\\\",\\\"required\\\":\\\"필수\\\",\\\"terms\\\":\\\"조건에 동의해야 합니다.\\\",\\\"too_long\\\":\\\"%{max}글자를 초과할 수 없습니다.\\\"}}},\\\"mi\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Kua mutu tēnei akoranga\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Kua whakauru kē koe i roto i tēnei akoranga\\\",\\\"course_full\\\":\\\"Ko te ki tonu i tēnei akoranga\\\",\\\"invalid_code\\\":\\\"waehere muhu\\\",\\\"required\\\":\\\"e hiahiatia ana\\\",\\\"terms\\\":\\\"Me whakāe koe ki te ngā\\\",\\\"too_long\\\":\\\"Kāore e taea te nui %{max} pūāhua\\\"}}},\\\"nb\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Dette emnet er avsluttet\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Du er allerede registrert på dette emnet\\\",\\\"course_full\\\":\\\"Dette emnet er fullt\\\",\\\"invalid_code\\\":\\\"Ugyldig kode\\\",\\\"required\\\":\\\"Obligatorisk\\\",\\\"terms\\\":\\\"Du må si deg enig i vilkårene\\\",\\\"too_long\\\":\\\"Kan ikke overstige %{max} tegn\\\"}}},\\\"nb-x-k12\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Faget er avsluttet\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Du er allerede registrert på dette faget\\\",\\\"course_full\\\":\\\"Dette faget er fullt\\\",\\\"invalid_code\\\":\\\"Ugyldig kode\\\",\\\"required\\\":\\\"Obligatorisk\\\",\\\"terms\\\":\\\"Du må si deg enig i vilkårene\\\",\\\"too_long\\\":\\\"Kan ikke overstige %{max} tegn\\\"}}},\\\"nl\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Deze cursus is beëindigd\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Je bent al voor deze cursus ingeschreven\\\",\\\"course_full\\\":\\\"Deze cursus zit vol\\\",\\\"invalid_code\\\":\\\"Ongeldige code\\\",\\\"required\\\":\\\"Vereist\\\",\\\"terms\\\":\\\"Je moet akkoord gaan met de gebruiksvoorwaarden\\\",\\\"too_long\\\":\\\"Mag maximum van %{max} tekens niet overschrijden.\\\"}}},\\\"nn\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Emnet er avslutta\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Du er allereie påmeld til dette emnet\\\",\\\"course_full\\\":\\\"Dette emnet er fullt\\\",\\\"invalid_code\\\":\\\"Ugyldig kode\\\",\\\"required\\\":\\\"Obligatorisk\\\",\\\"terms\\\":\\\"Du må godta vilkåra\\\",\\\"too_long\\\":\\\"Kan ikkje overskride %{max} teikn\\\"}}},\\\"pl\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Ten kurs został zakończony\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Jesteś już zapisany/-a na ten kurs\\\",\\\"course_full\\\":\\\"Ten kurs jest pełny\\\",\\\"invalid_code\\\":\\\"Nieprawidłowy kod\\\",\\\"required\\\":\\\"Wymagany\\\",\\\"terms\\\":\\\"Musisz się zgodzić na warunki\\\",\\\"too_long\\\":\\\"Nie możesz przekroczyć %{max} znaków\\\"}}},\\\"pt\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Esta disciplina concluiu\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Já está inscrito nesta disciplina\\\",\\\"course_full\\\":\\\"Esta disciplina está cheia\\\",\\\"invalid_code\\\":\\\"Código inválido\\\",\\\"required\\\":\\\"Necessário\\\",\\\"terms\\\":\\\"Tem de aceitar os termos\\\",\\\"too_long\\\":\\\"Não pode exceder %{max} caracteres\\\"}}},\\\"pt-BR\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Esse curso foi concluído\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Você já está matriculado neste curso\\\",\\\"course_full\\\":\\\"As vagas deste curso estão preenchidas\\\",\\\"invalid_code\\\":\\\"Código inválido\\\",\\\"required\\\":\\\"Obrigatório\\\",\\\"terms\\\":\\\"Você deve concordar com os termos\\\",\\\"too_long\\\":\\\"Não pode exceder %{max} caracteres\\\"}}},\\\"ru\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Этот курс завершен\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Вы уже зарегистрированы на данном курсе\\\",\\\"course_full\\\":\\\"Группа для данного курса набрана\\\",\\\"invalid_code\\\":\\\"Неверный код\\\",\\\"required\\\":\\\"Требуется\\\",\\\"terms\\\":\\\"Вы должны согласиться с условиями\\\",\\\"too_long\\\":\\\"Не может превышать %{max} символов\\\"}}},\\\"sl\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Ta predmet se je zaključil.\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"V ta predmet ste že vpisani.\\\",\\\"course_full\\\":\\\"Ta predmet je poln.\\\",\\\"invalid_code\\\":\\\"Neveljavna koda\\\",\\\"required\\\":\\\"Zahtevano\\\",\\\"terms\\\":\\\"Strinjati se morate s pogoji.\\\",\\\"too_long\\\":\\\"Ni mogoče preseči %{max} znakov.\\\"}}},\\\"sv\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Kursen har avslutats\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Du är redan registrerad i den här kursen\\\",\\\"course_full\\\":\\\"Kursen är full\\\",\\\"invalid_code\\\":\\\"Ogiltig kod\\\",\\\"required\\\":\\\"Obligatorisk\\\",\\\"terms\\\":\\\"Du måste godkänna villkoren\\\",\\\"too_long\\\":\\\"Får inte överskrida %{max} tecken\\\"}}},\\\"sv-x-k12\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"Kursen har avslutats\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Du är redan registrerad i den här kursen\\\",\\\"course_full\\\":\\\"Kursen är full\\\",\\\"invalid_code\\\":\\\"Ogiltig kod\\\",\\\"required\\\":\\\"Obligatorisk\\\",\\\"terms\\\":\\\"Du måste godkänna villkoren\\\",\\\"too_long\\\":\\\"Får inte överskrida %{max} tecken\\\"}}},\\\"tr\\\":{\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Bu derse zaten kayıtlısınız\\\",\\\"course_full\\\":\\\"Bu ders dolu\\\",\\\"invalid_code\\\":\\\"Geçersiz kod\\\",\\\"required\\\":\\\"Zorunlu\\\",\\\"terms\\\":\\\"Şarları kabul etmelisiniz\\\",\\\"too_long\\\":\\\"%{max} karakteri aşamazsınız\\\"}}},\\\"uk\\\":{\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"Ви вже зараховані на цей курс\\\",\\\"course_full\\\":\\\"Цей курс заповнений\\\",\\\"invalid_code\\\":\\\"Невірний код\\\",\\\"required\\\":\\\"Обов'язковий\\\",\\\"terms\\\":\\\"Ви повинні погодитися з умовами\\\",\\\"too_long\\\":\\\"Не можна перевищувати %{max} символів\\\"}}},\\\"zh-Hans\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"此课程已结束\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"您已经登记此课程\\\",\\\"course_full\\\":\\\"此课程名额已满\\\",\\\"invalid_code\\\":\\\"无效的代码\\\",\\\"required\\\":\\\"需要\\\",\\\"terms\\\":\\\"您必须同意这些条款\\\",\\\"too_long\\\":\\\"不能超过 %{max} 个字符\\\"}}},\\\"zh-Hant\\\":{\\\"this_course_has_concluded_7995a84c\\\":\\\"此課程已結束\\\",\\\"user\\\":{\\\"errors\\\":{\\\"already_enrolled\\\":\\\"您已註冊此課程\\\",\\\"course_full\\\":\\\"此課程已滿\\\",\\\"invalid_code\\\":\\\"無效的代碼\\\",\\\"required\\\":\\\"必填\\\",\\\"terms\\\":\\\"您必須同意這些條款\\\",\\\"too_long\\\":\\\"不能超過 %{max} 個字元\\\"}}}}\"));\n","\n import I18n from '@canvas/i18n/i18nObj';\n \n import 'translations/user';\n import 'translations/_core';\n \n import 'translations/_core_en';\n\n export default I18n.scoped('user');\n ","#\n# Copyright (C) 2012 - present Instructure, Inc.\n#\n# This file is part of Canvas.\n#\n# Canvas is free software: you can redistribute it and/or modify it under\n# the terms of the GNU Affero General Public License as published by the Free\n# Software Foundation, version 3 of the License.\n#\n# Canvas is distributed in the hope that it will be useful, but WITHOUT ANY\n# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\n# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more\n# details.\n#\n# You should have received a copy of the GNU Affero General Public License along\n# with this program. If not, see .\n#\n\nimport I18n from 'i18n!user'\nimport _ from 'underscore'\nimport Backbone from '@canvas/backbone'\n\nexport default class User extends Backbone.Model\n modelType: 'user'\n resourceName: 'users'\n\n errorMap:\n name:\n blank: I18n.t(\"errors.required\", \"Required\")\n too_long: I18n.t(\"errors.too_long\", \"Can't exceed %{max} characters\", {max: 255})\n self_enrollment_code:\n blank: I18n.t(\"errors.required\", \"Required\")\n invalid: I18n.t(\"errors.invalid_code\", \"Invalid code\")\n already_enrolled: I18n.t(\"errors.already_enrolled\", \"You are already enrolled in this course\")\n concluded: I18n.t(\"This course has concluded\")\n full: I18n.t(\"errors.course_full\", \"This course is full\")\n terms_of_use:\n accepted: I18n.t(\"errors.terms\", \"You must agree to the terms\")\n\n # first: optional boolean to return only the first match\n enrollments: (attrs, first) ->\n _.where @get('enrollments'), attrs, first\n\n hasEnrollmentType: (type) ->\n !! @enrollments {type}, true\n\n hasEnrollmentRole: (role) ->\n !! @enrollments {role}, true\n\n findEnrollmentByRole: (role) ->\n @enrollments {role}, true\n\n allEnrollmentsByType: (type) ->\n @enrollments {type}\n\n allEnrollmentsByRole: (role) ->\n @enrollments {role}\n\n pending: (role) ->\n _.some @get('enrollments'), (e) -> e.role == role && e.enrollment_state in ['creation_pending', 'invited']\n\n inactive: ->\n _.every @get('enrollments'), (e) -> e.enrollment_state == 'inactive'\n\n sectionEditableEnrollments: ->\n _.select @get('enrollments'), (e) -> e.type != 'ObserverEnrollment'\n\n"],"sourceRoot":""}