├── .bowerrc ├── .dockerignore ├── .gitignore ├── .k8s ├── base │ ├── kustomization.yaml │ ├── mongodb │ │ ├── deployment.yaml │ │ ├── pvc.yaml │ │ └── service.yaml │ └── web │ │ ├── deployment.yaml │ │ ├── pvc.yaml │ │ └── service.yaml ├── dev │ ├── ingress.yaml │ └── kustomization.yaml └── prod │ ├── ingress.yaml │ └── kustomization.yaml ├── .travis.yml ├── Dockerfile ├── Gruntfile.js ├── Gulpfile.js ├── LICENSE ├── Makefile ├── Procfile ├── README.md ├── app.js ├── bin └── www ├── bitbucket-pipelines.yml ├── bower.json ├── config ├── default.json ├── lanzarote.json ├── production.json └── test.json ├── docker-compose.yml ├── frontend-modules ├── angular-admin │ ├── app.js │ ├── applications.controller.js │ ├── category.js │ ├── catrec.controller.js │ ├── controller.admin.js │ ├── homeAdmin.controller.js │ ├── menu.js │ ├── route.js │ ├── tabs.controller.js │ └── useradmin.controller.js ├── angular │ ├── advanced-search │ │ └── controller.js │ ├── app.js │ ├── catalogs │ │ ├── VideoContentPreview.controller.js │ │ ├── actionBarCoursePreviewController.controller.js │ │ ├── category.js │ │ ├── course.controller.js │ │ ├── courseConfig.controller.js │ │ ├── courseEdit.controller.js │ │ ├── courseNew.controller.js │ │ ├── courseRoot.controller.js │ │ ├── courselist.controller.js │ │ ├── map.controller.js │ │ ├── nodeConfig.controller.js │ │ ├── nodeEdit.controller.js │ │ ├── nodeRoot.controller.js │ │ ├── pdfTab.controller.js │ │ ├── profile.controller.js │ │ ├── recommend.controller.js │ │ ├── resetPassword.controller.js │ │ └── videoTab.controller.js │ ├── directives │ │ ├── comments.js │ │ ├── error-block.js │ │ ├── facebook-button.js │ │ ├── general-directives.js │ │ ├── modal-box.js │ │ ├── modal-cancel-button.js │ │ ├── movable.js │ │ ├── movable_pdf.js │ │ ├── pagination.js │ │ ├── pdf-annotation-zone.js │ │ ├── pdf-comment-with-reply.js │ │ ├── pdf-viewer.js │ │ ├── pwCheck.js │ │ ├── simple-color-picker.js │ │ ├── spinner.js │ │ ├── timepicker.js │ │ └── votes.js │ ├── discussions │ │ ├── discussion.controller.js │ │ └── reply.controller.js │ ├── externalApps │ │ ├── ExternalAppRoot.js │ │ ├── createApp.controller.js │ │ ├── createdApp.controller.js │ │ ├── createdApps.controller.js │ │ ├── externalApp.service.js │ │ ├── externalApps.controller.js │ │ ├── externalAppsRoutes.js │ │ └── installedApps.controller.js │ ├── factories │ │ ├── auth.service.js │ │ ├── collapse.service.js │ │ ├── course.service.js │ │ ├── courseList.service.js │ │ ├── discussion.service.js │ │ ├── links.service.js │ │ ├── map.service.js │ │ ├── page.factory.js │ │ ├── sockets.factory.js │ │ ├── treeNode.service.js │ │ └── widgets.service.js │ ├── filters │ │ ├── general-filters.js │ │ ├── htmlToPlaintext.js │ │ ├── msToTime.js │ │ └── secondsToDateTime.filter.js │ ├── learningHub │ │ ├── learningHub.controller.js │ │ └── learningHubDirectives │ │ │ ├── a_hub-module.js │ │ │ ├── hubLink.js │ │ │ ├── hubPostDelete.js │ │ │ ├── hubPostEdit.js │ │ │ └── hubaddLinkForm.js │ ├── links │ │ └── links.controller.js │ ├── pdf-annotations │ │ ├── pdf_annotationZones.js │ │ └── pdf_comments.js │ ├── peerAssessment │ │ ├── peerAssessment.controller.js │ │ ├── peerReview │ │ │ ├── components │ │ │ │ ├── blind.controller.js │ │ │ │ ├── loop.controller.js │ │ │ │ ├── reviewAssignmentType.controller.js │ │ │ │ ├── reviewPercentage.controller.js │ │ │ │ └── rubrics │ │ │ │ │ ├── addEditRubricModal.controller.js │ │ │ │ │ ├── manageRubrics.controller.js │ │ │ │ │ └── rubric.controller.js │ │ │ └── pages │ │ │ │ ├── editPeerReview.controller.js │ │ │ │ ├── newPeerReview.controller.js │ │ │ │ └── viewPeerReview.controller.js │ │ ├── review │ │ │ └── pages │ │ │ │ ├── adminFeedback.controller.js │ │ │ │ ├── review.controller.js │ │ │ │ ├── reviewAssignment.controller.js │ │ │ │ ├── reviewSubmission.controller.js │ │ │ │ └── viewFeedback.controller.js │ │ ├── services │ │ │ └── solutionFilter.service.js │ │ └── solution │ │ │ ├── modals │ │ │ └── addEditSolution.controller.js │ │ │ └── pages │ │ │ ├── solution.controller.js │ │ │ └── viewSolution.controller.js │ ├── route.js │ ├── ui │ │ ├── favorites.controller.js │ │ ├── homePage.controller.js │ │ ├── loginPage.controller.js │ │ ├── main.controller.js │ │ ├── mainmenu.controller.js │ │ ├── menuActionBar.controller.js │ │ ├── menuActionBar.service.js │ │ ├── searchBox.controller.js │ │ ├── signUp.controller.js │ │ ├── static.js │ │ └── userEdit.controller.js │ ├── views │ │ ├── discussion.reply.html │ │ ├── modal-box.html │ │ ├── nodeDetail │ │ │ ├── pdf-annotation-zone.html │ │ │ ├── pdf-comment.html │ │ │ └── pdf-viewer.html │ │ ├── pagination.html │ │ └── vote-vertical.html │ └── widgets │ │ ├── widgetCourseAnalyticsController.controller.js │ │ ├── widgetCoursePreviewController.controller.js │ │ ├── widgetGallery.controller.js │ │ ├── widgetNodeAnalyticsController.controller.js │ │ └── widgetProfile.controller.js └── libs │ ├── general-libs.js │ └── tabs.js ├── libs └── core │ ├── database.js │ ├── generalLibs.js │ ├── handleUpload.js │ ├── multiRouter.js │ ├── multiRouterSocket.js │ ├── session.js │ ├── sessionHelper.js │ └── socketIoHelper.js ├── misc ├── admin.txt ├── categories_courses_samples.txt └── create_db_scripts.txt ├── modules ├── accounts │ ├── index.js │ ├── user.helper.js │ └── users.js ├── annotationZones │ ├── annotationZones.js │ └── index.js ├── annotations │ ├── video-annotation.js │ └── video-annotations-controller.js ├── applications │ ├── content-node-detail │ │ ├── config.json │ │ ├── icon-analytics.js │ │ └── node-detail.js │ ├── course-analytics │ │ ├── category-home-countCourses.js │ │ ├── category-home-createdDate.js │ │ ├── config.json │ │ ├── course-history.controller.js │ │ ├── course-list-author.js │ │ ├── course-list-basic-stats.js │ │ ├── course-list-createdDate.js │ │ ├── course-list-last-activity.js │ │ ├── coursePreviewStats.controller.js │ │ ├── enrolledUserList.js │ │ └── index.js │ ├── links-background │ │ ├── config.json │ │ └── links-background.js │ ├── my-course │ │ ├── config.json │ │ ├── models │ │ │ ├── myActivityStatus.model.js │ │ │ ├── myCreatedNodes.js │ │ │ ├── myDiscussionStatus.model.js │ │ │ ├── myPDFStatus.js │ │ │ └── myVideoStatus.model.js │ │ ├── my-course.js │ │ ├── myCoursesList.js │ │ ├── myPDFStatus.js │ │ ├── myVideoStatus.controller.js │ │ └── trace-finder.js │ ├── newsfeed │ │ ├── config.json │ │ ├── models │ │ │ └── newsfeed.model.js │ │ ├── newsfeed.controller.js │ │ └── newsfeed.js │ ├── node-analytics │ │ ├── config.json │ │ └── node-history.controller.js │ ├── top-content │ │ ├── config.json │ │ ├── models │ │ │ └── topContent.model.js │ │ ├── top-content.controller.js │ │ └── top-content.js │ ├── top-contributor │ │ ├── config.json │ │ ├── models │ │ │ └── topContributor.model.js │ │ ├── top-contributor.controller.js │ │ └── top-contributor.js │ └── ui-widgets │ │ └── config.json ├── apps-gallery │ ├── backgroundPlugins.js │ ├── index.js │ ├── widgets.js │ └── widgetsPlacements.js ├── catalogs │ ├── categories.js │ ├── category.controller.js │ ├── categoryRecommendation.model.js │ ├── course.controller.js │ ├── courseTags.js │ ├── courses.js │ ├── tag.controller.js │ └── userCourses.js ├── discussion │ ├── courseDiscussion.controller.js │ └── models │ │ └── posts.js ├── favorites │ ├── favorite-courses.js │ └── favorites-controller.js ├── learningHub │ ├── Scraper │ │ ├── aggHelper.js │ │ ├── audio.js │ │ ├── doc.js │ │ ├── embedHtml.js │ │ ├── image.js │ │ ├── link.js │ │ ├── meta.js │ │ ├── ogp.js │ │ ├── pdf.js │ │ ├── safeBrowsing.js │ │ ├── scrape.js │ │ ├── slide.js │ │ ├── story.js │ │ └── video.js │ ├── learningHub.controller.js │ └── models │ │ ├── hub.js │ │ └── personalHub.js ├── links │ ├── links.controller.js │ └── models │ │ └── links.js ├── oauth2 │ ├── application.controller.js │ ├── models │ │ ├── accessTokens.js │ │ ├── oauthClients.js │ │ └── oauthSecrets.js │ └── oauth2.controller.js ├── peerAssessment │ ├── models │ │ ├── peerReview.js │ │ ├── review.js │ │ ├── rubric.js │ │ └── solutions.js │ ├── peerAssessment.controller.js │ ├── reviews.controller.js │ ├── rubrics.controller.js │ └── solutions.controller.js ├── search │ ├── search-builder.js │ └── search-controller.js ├── slide-viewer │ ├── annotation.js │ └── index.js ├── tabs │ ├── learningHub │ │ └── config.json │ ├── models │ │ ├── defaultTabs.json │ │ ├── tabs.schema.js │ │ └── tabsActive.schema.js │ ├── newsfeedUpdate │ │ └── config.json │ ├── nodeNewsFeedUpdate │ │ └── config.json │ ├── peerAssessment │ │ └── config.json │ └── tabs.controller.js ├── trees │ ├── index.js │ ├── node-visibility.js │ ├── resources.js │ └── treeNodes.js └── votes │ ├── models │ └── votes.js │ └── votes.controller.js ├── package-lock.json ├── package.json ├── public ├── angular-peerassessment │ ├── peerAssessment.controller.js │ └── peerAssessment.css ├── angular-quill │ ├── angular-quill-complete.html │ ├── angular-quill-pdf-comment.html │ ├── angular-quill-simple.html │ ├── angular-quill.html │ └── angular-quill.js ├── angular │ ├── angular-animate.min.js │ ├── angular-animate.min.js.map │ ├── bootstrap-colorpicker-module.js │ ├── courseMapper.js │ └── ui-bootstrap-tpls-0.10.0.min.js ├── chartjs │ ├── Chart.min.js │ ├── angular-chart.min.css │ └── angular-chart.min.js ├── course-analytics │ ├── .sass-cache │ │ └── 8be198ad3a943078dbba7c136ecf16db7658a753 │ │ │ └── user_profile.scssc │ ├── ca-enrolled-users.js │ ├── ca-history-analytics.js │ ├── ca-preview-statistics.js │ ├── ca-preview-top-contributors.js │ ├── ca-statistics.js │ ├── ca-top-content.js │ ├── ca-top-contributor.js │ ├── img │ │ ├── arya.png │ │ ├── jon_snow.png │ │ └── tyrion_lannister.png │ ├── user_profile.css │ └── user_profile.scss ├── css │ ├── AdminLTE.min.css │ ├── admin.css │ ├── app.css │ ├── global.css │ ├── learningHub.css │ └── posts.css ├── external-resources │ ├── html5shiv.js │ ├── jquery.ui.touch-punch.min.js │ ├── ng-tags-input.bootstrap.min.css │ ├── ng-tags-input.min.css │ ├── ng-tags-input.min.js │ ├── respond.min.js │ └── ui-bootstrap-tpls.min.js ├── favicon.png ├── img │ ├── _charta.png │ ├── _chartb.png │ ├── admin-lte │ │ ├── fb.png │ │ ├── logo.png │ │ ├── playButton.png │ │ ├── playButtonHover.png │ │ ├── soco-logo.png │ │ ├── ude-logo.png │ │ └── user2-160x160.png │ ├── analytics.png │ ├── appPlaceholder.png │ ├── bg.jpg │ ├── category_placeholder.png │ ├── coursemap.png │ ├── courses │ │ └── .keep │ ├── courses_placeholder.png │ ├── default-profile-picture.png │ ├── default-tree.png │ ├── footprint.png │ ├── pdf.png │ ├── search │ │ ├── category-new.png │ │ ├── category.png │ │ ├── contentNode-new.png │ │ ├── contentNode.png │ │ ├── course-new.png │ │ ├── course.png │ │ ├── extResources-new.png │ │ ├── icons8-pdf-40.png │ │ ├── pdfAnnotation-new.png │ │ ├── pdfAnnotation.png │ │ ├── progress.png │ │ ├── videoAnnotation-new.png │ │ └── videoAnnotation.png │ ├── sliders │ │ ├── slider_1.jpg │ │ ├── slider_2.jpg │ │ └── slider_3.png │ ├── tree │ │ ├── document.png │ │ ├── folder-horizontal.png │ │ ├── toggle-small-expand.png │ │ └── toggle-small.png │ └── video.png ├── js │ ├── countmap │ │ ├── countmap.css │ │ ├── countmap.js │ │ └── samples │ │ │ ├── example.html │ │ │ └── lodash.min.js │ ├── footprint │ │ └── footprint.js │ ├── heartbeat │ │ └── video-pulse.js │ └── video-annotations │ │ ├── a_va-module.js │ │ ├── styles.css │ │ ├── va-annotation │ │ ├── va-annotation-controller.js │ │ ├── va-annotation.html │ │ └── va-annotation.js │ │ ├── va-widget │ │ ├── va-widget-controller.js │ │ ├── va-widget.html │ │ └── va-widget.js │ │ ├── vg-extensions │ │ └── vg-controls.js │ │ └── youtube.js ├── jsplumb │ ├── jquery.simulate.drag-n-drop.js │ ├── jquery.simulate.ext.js │ ├── jquery.simulate.js │ ├── jsPlumb-1.7.10-min.js │ └── jsPlumb-1.7.10.js ├── learningHubTemplates │ ├── hubPostDelete.html │ ├── hubPostEdit.html │ ├── hubaudio.html │ ├── hubdoc.html │ ├── hubimage.html │ ├── hublinknothumb.html │ ├── hublinkthumb.html │ ├── hubpdf.html │ ├── hubslide.html │ ├── hubstory.html │ └── hubvideo.html ├── my-course │ ├── data.js │ ├── my-activity-summary.js │ ├── my-course-history-progress.js │ ├── my-courses-breakdown.js │ ├── my-created-courses.js │ ├── my-enrolled-courses.js │ ├── my-following-courses.js │ ├── my-pdf-status.js │ ├── my-summary.js │ ├── my-video-status.js │ ├── options.js │ └── participation-balance.js ├── newsfeed │ ├── newsfeed.controller.js │ └── newsfeedNode.controller.js ├── node-analytics │ └── na-history-analytics.js ├── pdfjs │ ├── build │ │ ├── components │ │ │ ├── compatibility.js │ │ │ ├── images │ │ │ │ ├── annotation-check.svg │ │ │ │ ├── annotation-comment.svg │ │ │ │ ├── annotation-help.svg │ │ │ │ ├── annotation-insert.svg │ │ │ │ ├── annotation-key.svg │ │ │ │ ├── annotation-newparagraph.svg │ │ │ │ ├── annotation-noicon.svg │ │ │ │ ├── annotation-note.svg │ │ │ │ ├── annotation-paragraph.svg │ │ │ │ ├── loading-icon.gif │ │ │ │ ├── shadow.png │ │ │ │ └── texture.png │ │ │ ├── pdf_viewer.css │ │ │ └── pdf_viewer.js │ │ ├── generic │ │ │ ├── LICENSE │ │ │ ├── build │ │ │ │ ├── pdf.js │ │ │ │ └── pdf.worker.js │ │ │ └── web │ │ │ │ ├── cmaps │ │ │ │ ├── 78-EUC-H.bcmap │ │ │ │ ├── 78-EUC-V.bcmap │ │ │ │ ├── 78-H.bcmap │ │ │ │ ├── 78-RKSJ-H.bcmap │ │ │ │ ├── 78-RKSJ-V.bcmap │ │ │ │ ├── 78-V.bcmap │ │ │ │ ├── 78ms-RKSJ-H.bcmap │ │ │ │ ├── 78ms-RKSJ-V.bcmap │ │ │ │ ├── 83pv-RKSJ-H.bcmap │ │ │ │ ├── 90ms-RKSJ-H.bcmap │ │ │ │ ├── 90ms-RKSJ-V.bcmap │ │ │ │ ├── 90msp-RKSJ-H.bcmap │ │ │ │ ├── 90msp-RKSJ-V.bcmap │ │ │ │ ├── 90pv-RKSJ-H.bcmap │ │ │ │ ├── 90pv-RKSJ-V.bcmap │ │ │ │ ├── Add-H.bcmap │ │ │ │ ├── Add-RKSJ-H.bcmap │ │ │ │ ├── Add-RKSJ-V.bcmap │ │ │ │ ├── Add-V.bcmap │ │ │ │ ├── Adobe-CNS1-0.bcmap │ │ │ │ ├── Adobe-CNS1-1.bcmap │ │ │ │ ├── Adobe-CNS1-2.bcmap │ │ │ │ ├── Adobe-CNS1-3.bcmap │ │ │ │ ├── Adobe-CNS1-4.bcmap │ │ │ │ ├── Adobe-CNS1-5.bcmap │ │ │ │ ├── Adobe-CNS1-6.bcmap │ │ │ │ ├── Adobe-CNS1-UCS2.bcmap │ │ │ │ ├── Adobe-GB1-0.bcmap │ │ │ │ ├── Adobe-GB1-1.bcmap │ │ │ │ ├── Adobe-GB1-2.bcmap │ │ │ │ ├── Adobe-GB1-3.bcmap │ │ │ │ ├── Adobe-GB1-4.bcmap │ │ │ │ ├── Adobe-GB1-5.bcmap │ │ │ │ ├── Adobe-GB1-UCS2.bcmap │ │ │ │ ├── Adobe-Japan1-0.bcmap │ │ │ │ ├── Adobe-Japan1-1.bcmap │ │ │ │ ├── Adobe-Japan1-2.bcmap │ │ │ │ ├── Adobe-Japan1-3.bcmap │ │ │ │ ├── Adobe-Japan1-4.bcmap │ │ │ │ ├── Adobe-Japan1-5.bcmap │ │ │ │ ├── Adobe-Japan1-6.bcmap │ │ │ │ ├── Adobe-Japan1-UCS2.bcmap │ │ │ │ ├── Adobe-Korea1-0.bcmap │ │ │ │ ├── Adobe-Korea1-1.bcmap │ │ │ │ ├── Adobe-Korea1-2.bcmap │ │ │ │ ├── Adobe-Korea1-UCS2.bcmap │ │ │ │ ├── B5-H.bcmap │ │ │ │ ├── B5-V.bcmap │ │ │ │ ├── B5pc-H.bcmap │ │ │ │ ├── B5pc-V.bcmap │ │ │ │ ├── CNS-EUC-H.bcmap │ │ │ │ ├── CNS-EUC-V.bcmap │ │ │ │ ├── CNS1-H.bcmap │ │ │ │ ├── CNS1-V.bcmap │ │ │ │ ├── CNS2-H.bcmap │ │ │ │ ├── CNS2-V.bcmap │ │ │ │ ├── ETHK-B5-H.bcmap │ │ │ │ ├── ETHK-B5-V.bcmap │ │ │ │ ├── ETen-B5-H.bcmap │ │ │ │ ├── ETen-B5-V.bcmap │ │ │ │ ├── ETenms-B5-H.bcmap │ │ │ │ ├── ETenms-B5-V.bcmap │ │ │ │ ├── EUC-H.bcmap │ │ │ │ ├── EUC-V.bcmap │ │ │ │ ├── Ext-H.bcmap │ │ │ │ ├── Ext-RKSJ-H.bcmap │ │ │ │ ├── Ext-RKSJ-V.bcmap │ │ │ │ ├── Ext-V.bcmap │ │ │ │ ├── GB-EUC-H.bcmap │ │ │ │ ├── GB-EUC-V.bcmap │ │ │ │ ├── GB-H.bcmap │ │ │ │ ├── GB-V.bcmap │ │ │ │ ├── GBK-EUC-H.bcmap │ │ │ │ ├── GBK-EUC-V.bcmap │ │ │ │ ├── GBK2K-H.bcmap │ │ │ │ ├── GBK2K-V.bcmap │ │ │ │ ├── GBKp-EUC-H.bcmap │ │ │ │ ├── GBKp-EUC-V.bcmap │ │ │ │ ├── GBT-EUC-H.bcmap │ │ │ │ ├── GBT-EUC-V.bcmap │ │ │ │ ├── GBT-H.bcmap │ │ │ │ ├── GBT-V.bcmap │ │ │ │ ├── GBTpc-EUC-H.bcmap │ │ │ │ ├── GBTpc-EUC-V.bcmap │ │ │ │ ├── GBpc-EUC-H.bcmap │ │ │ │ ├── GBpc-EUC-V.bcmap │ │ │ │ ├── H.bcmap │ │ │ │ ├── HKdla-B5-H.bcmap │ │ │ │ ├── HKdla-B5-V.bcmap │ │ │ │ ├── HKdlb-B5-H.bcmap │ │ │ │ ├── HKdlb-B5-V.bcmap │ │ │ │ ├── HKgccs-B5-H.bcmap │ │ │ │ ├── HKgccs-B5-V.bcmap │ │ │ │ ├── HKm314-B5-H.bcmap │ │ │ │ ├── HKm314-B5-V.bcmap │ │ │ │ ├── HKm471-B5-H.bcmap │ │ │ │ ├── HKm471-B5-V.bcmap │ │ │ │ ├── HKscs-B5-H.bcmap │ │ │ │ ├── HKscs-B5-V.bcmap │ │ │ │ ├── Hankaku.bcmap │ │ │ │ ├── Hiragana.bcmap │ │ │ │ ├── KSC-EUC-H.bcmap │ │ │ │ ├── KSC-EUC-V.bcmap │ │ │ │ ├── KSC-H.bcmap │ │ │ │ ├── KSC-Johab-H.bcmap │ │ │ │ ├── KSC-Johab-V.bcmap │ │ │ │ ├── KSC-V.bcmap │ │ │ │ ├── KSCms-UHC-H.bcmap │ │ │ │ ├── KSCms-UHC-HW-H.bcmap │ │ │ │ ├── KSCms-UHC-HW-V.bcmap │ │ │ │ ├── KSCms-UHC-V.bcmap │ │ │ │ ├── KSCpc-EUC-H.bcmap │ │ │ │ ├── KSCpc-EUC-V.bcmap │ │ │ │ ├── Katakana.bcmap │ │ │ │ ├── LICENSE │ │ │ │ ├── NWP-H.bcmap │ │ │ │ ├── NWP-V.bcmap │ │ │ │ ├── RKSJ-H.bcmap │ │ │ │ ├── RKSJ-V.bcmap │ │ │ │ ├── Roman.bcmap │ │ │ │ ├── UniCNS-UCS2-H.bcmap │ │ │ │ ├── UniCNS-UCS2-V.bcmap │ │ │ │ ├── UniCNS-UTF16-H.bcmap │ │ │ │ ├── UniCNS-UTF16-V.bcmap │ │ │ │ ├── UniCNS-UTF32-H.bcmap │ │ │ │ ├── UniCNS-UTF32-V.bcmap │ │ │ │ ├── UniCNS-UTF8-H.bcmap │ │ │ │ ├── UniCNS-UTF8-V.bcmap │ │ │ │ ├── UniGB-UCS2-H.bcmap │ │ │ │ ├── UniGB-UCS2-V.bcmap │ │ │ │ ├── UniGB-UTF16-H.bcmap │ │ │ │ ├── UniGB-UTF16-V.bcmap │ │ │ │ ├── UniGB-UTF32-H.bcmap │ │ │ │ ├── UniGB-UTF32-V.bcmap │ │ │ │ ├── UniGB-UTF8-H.bcmap │ │ │ │ ├── UniGB-UTF8-V.bcmap │ │ │ │ ├── UniJIS-UCS2-H.bcmap │ │ │ │ ├── UniJIS-UCS2-HW-H.bcmap │ │ │ │ ├── UniJIS-UCS2-HW-V.bcmap │ │ │ │ ├── UniJIS-UCS2-V.bcmap │ │ │ │ ├── UniJIS-UTF16-H.bcmap │ │ │ │ ├── UniJIS-UTF16-V.bcmap │ │ │ │ ├── UniJIS-UTF32-H.bcmap │ │ │ │ ├── UniJIS-UTF32-V.bcmap │ │ │ │ ├── UniJIS-UTF8-H.bcmap │ │ │ │ ├── UniJIS-UTF8-V.bcmap │ │ │ │ ├── UniJIS2004-UTF16-H.bcmap │ │ │ │ ├── UniJIS2004-UTF16-V.bcmap │ │ │ │ ├── UniJIS2004-UTF32-H.bcmap │ │ │ │ ├── UniJIS2004-UTF32-V.bcmap │ │ │ │ ├── UniJIS2004-UTF8-H.bcmap │ │ │ │ ├── UniJIS2004-UTF8-V.bcmap │ │ │ │ ├── UniJISPro-UCS2-HW-V.bcmap │ │ │ │ ├── UniJISPro-UCS2-V.bcmap │ │ │ │ ├── UniJISPro-UTF8-V.bcmap │ │ │ │ ├── UniJISX0213-UTF32-H.bcmap │ │ │ │ ├── UniJISX0213-UTF32-V.bcmap │ │ │ │ ├── UniJISX02132004-UTF32-H.bcmap │ │ │ │ ├── UniJISX02132004-UTF32-V.bcmap │ │ │ │ ├── UniKS-UCS2-H.bcmap │ │ │ │ ├── UniKS-UCS2-V.bcmap │ │ │ │ ├── UniKS-UTF16-H.bcmap │ │ │ │ ├── UniKS-UTF16-V.bcmap │ │ │ │ ├── UniKS-UTF32-H.bcmap │ │ │ │ ├── UniKS-UTF32-V.bcmap │ │ │ │ ├── UniKS-UTF8-H.bcmap │ │ │ │ ├── UniKS-UTF8-V.bcmap │ │ │ │ ├── V.bcmap │ │ │ │ └── WP-Symbol.bcmap │ │ │ │ ├── compatibility.js │ │ │ │ ├── compressed.tracemonkey-pldi-09.pdf │ │ │ │ ├── debugger.js │ │ │ │ ├── images │ │ │ │ ├── annotation-check.svg │ │ │ │ ├── annotation-comment.svg │ │ │ │ ├── annotation-help.svg │ │ │ │ ├── annotation-insert.svg │ │ │ │ ├── annotation-key.svg │ │ │ │ ├── annotation-newparagraph.svg │ │ │ │ ├── annotation-noicon.svg │ │ │ │ ├── annotation-note.svg │ │ │ │ ├── annotation-paragraph.svg │ │ │ │ ├── findbarButton-next-rtl.png │ │ │ │ ├── findbarButton-next-rtl@2x.png │ │ │ │ ├── findbarButton-next.png │ │ │ │ ├── findbarButton-next@2x.png │ │ │ │ ├── findbarButton-previous-rtl.png │ │ │ │ ├── findbarButton-previous-rtl@2x.png │ │ │ │ ├── findbarButton-previous.png │ │ │ │ ├── findbarButton-previous@2x.png │ │ │ │ ├── grab.cur │ │ │ │ ├── grabbing.cur │ │ │ │ ├── loading-icon.gif │ │ │ │ ├── loading-small.png │ │ │ │ ├── loading-small@2x.png │ │ │ │ ├── secondaryToolbarButton-documentProperties.png │ │ │ │ ├── secondaryToolbarButton-documentProperties@2x.png │ │ │ │ ├── secondaryToolbarButton-firstPage.png │ │ │ │ ├── secondaryToolbarButton-firstPage@2x.png │ │ │ │ ├── secondaryToolbarButton-handTool.png │ │ │ │ ├── secondaryToolbarButton-handTool@2x.png │ │ │ │ ├── secondaryToolbarButton-lastPage.png │ │ │ │ ├── secondaryToolbarButton-lastPage@2x.png │ │ │ │ ├── secondaryToolbarButton-rotateCcw.png │ │ │ │ ├── secondaryToolbarButton-rotateCcw@2x.png │ │ │ │ ├── secondaryToolbarButton-rotateCw.png │ │ │ │ ├── secondaryToolbarButton-rotateCw@2x.png │ │ │ │ ├── shadow.png │ │ │ │ ├── texture.png │ │ │ │ ├── toolbarButton-bookmark.png │ │ │ │ ├── toolbarButton-bookmark@2x.png │ │ │ │ ├── toolbarButton-download.png │ │ │ │ ├── toolbarButton-download@2x.png │ │ │ │ ├── toolbarButton-menuArrows.png │ │ │ │ ├── toolbarButton-menuArrows@2x.png │ │ │ │ ├── toolbarButton-openFile.png │ │ │ │ ├── toolbarButton-openFile@2x.png │ │ │ │ ├── toolbarButton-pageDown-rtl.png │ │ │ │ ├── toolbarButton-pageDown-rtl@2x.png │ │ │ │ ├── toolbarButton-pageDown.png │ │ │ │ ├── toolbarButton-pageDown@2x.png │ │ │ │ ├── toolbarButton-pageUp-rtl.png │ │ │ │ ├── toolbarButton-pageUp-rtl@2x.png │ │ │ │ ├── toolbarButton-pageUp.png │ │ │ │ ├── toolbarButton-pageUp@2x.png │ │ │ │ ├── toolbarButton-presentationMode.png │ │ │ │ ├── toolbarButton-presentationMode@2x.png │ │ │ │ ├── toolbarButton-print.png │ │ │ │ ├── toolbarButton-print@2x.png │ │ │ │ ├── toolbarButton-search.png │ │ │ │ ├── toolbarButton-search@2x.png │ │ │ │ ├── toolbarButton-secondaryToolbarToggle-rtl.png │ │ │ │ ├── toolbarButton-secondaryToolbarToggle-rtl@2x.png │ │ │ │ ├── toolbarButton-secondaryToolbarToggle.png │ │ │ │ ├── toolbarButton-secondaryToolbarToggle@2x.png │ │ │ │ ├── toolbarButton-sidebarToggle-rtl.png │ │ │ │ ├── toolbarButton-sidebarToggle-rtl@2x.png │ │ │ │ ├── toolbarButton-sidebarToggle.png │ │ │ │ ├── toolbarButton-sidebarToggle@2x.png │ │ │ │ ├── toolbarButton-viewAttachments.png │ │ │ │ ├── toolbarButton-viewAttachments@2x.png │ │ │ │ ├── toolbarButton-viewOutline-rtl.png │ │ │ │ ├── toolbarButton-viewOutline-rtl@2x.png │ │ │ │ ├── toolbarButton-viewOutline.png │ │ │ │ ├── toolbarButton-viewOutline@2x.png │ │ │ │ ├── toolbarButton-viewThumbnail.png │ │ │ │ ├── toolbarButton-viewThumbnail@2x.png │ │ │ │ ├── toolbarButton-zoomIn.png │ │ │ │ ├── toolbarButton-zoomIn@2x.png │ │ │ │ ├── toolbarButton-zoomOut.png │ │ │ │ └── toolbarButton-zoomOut@2x.png │ │ │ │ ├── l10n.js │ │ │ │ ├── locale │ │ │ │ ├── ach │ │ │ │ │ └── viewer.properties │ │ │ │ ├── af │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ak │ │ │ │ │ └── viewer.properties │ │ │ │ ├── an │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ar │ │ │ │ │ └── viewer.properties │ │ │ │ ├── as │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ast │ │ │ │ │ └── viewer.properties │ │ │ │ ├── az │ │ │ │ │ └── viewer.properties │ │ │ │ ├── be │ │ │ │ │ └── viewer.properties │ │ │ │ ├── bg │ │ │ │ │ └── viewer.properties │ │ │ │ ├── bn-BD │ │ │ │ │ └── viewer.properties │ │ │ │ ├── bn-IN │ │ │ │ │ └── viewer.properties │ │ │ │ ├── br │ │ │ │ │ └── viewer.properties │ │ │ │ ├── bs │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ca │ │ │ │ │ └── viewer.properties │ │ │ │ ├── cs │ │ │ │ │ └── viewer.properties │ │ │ │ ├── csb │ │ │ │ │ └── viewer.properties │ │ │ │ ├── cy │ │ │ │ │ └── viewer.properties │ │ │ │ ├── da │ │ │ │ │ └── viewer.properties │ │ │ │ ├── de │ │ │ │ │ └── viewer.properties │ │ │ │ ├── el │ │ │ │ │ └── viewer.properties │ │ │ │ ├── en-GB │ │ │ │ │ └── viewer.properties │ │ │ │ ├── en-US │ │ │ │ │ └── viewer.properties │ │ │ │ ├── en-ZA │ │ │ │ │ └── viewer.properties │ │ │ │ ├── eo │ │ │ │ │ └── viewer.properties │ │ │ │ ├── es-AR │ │ │ │ │ └── viewer.properties │ │ │ │ ├── es-CL │ │ │ │ │ └── viewer.properties │ │ │ │ ├── es-ES │ │ │ │ │ └── viewer.properties │ │ │ │ ├── es-MX │ │ │ │ │ └── viewer.properties │ │ │ │ ├── et │ │ │ │ │ └── viewer.properties │ │ │ │ ├── eu │ │ │ │ │ └── viewer.properties │ │ │ │ ├── fa │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ff │ │ │ │ │ └── viewer.properties │ │ │ │ ├── fi │ │ │ │ │ └── viewer.properties │ │ │ │ ├── fr │ │ │ │ │ └── viewer.properties │ │ │ │ ├── fy-NL │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ga-IE │ │ │ │ │ └── viewer.properties │ │ │ │ ├── gd │ │ │ │ │ └── viewer.properties │ │ │ │ ├── gl │ │ │ │ │ └── viewer.properties │ │ │ │ ├── gu-IN │ │ │ │ │ └── viewer.properties │ │ │ │ ├── he │ │ │ │ │ └── viewer.properties │ │ │ │ ├── hi-IN │ │ │ │ │ └── viewer.properties │ │ │ │ ├── hr │ │ │ │ │ └── viewer.properties │ │ │ │ ├── hu │ │ │ │ │ └── viewer.properties │ │ │ │ ├── hy-AM │ │ │ │ │ └── viewer.properties │ │ │ │ ├── id │ │ │ │ │ └── viewer.properties │ │ │ │ ├── is │ │ │ │ │ └── viewer.properties │ │ │ │ ├── it │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ja │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ka │ │ │ │ │ └── viewer.properties │ │ │ │ ├── kk │ │ │ │ │ └── viewer.properties │ │ │ │ ├── km │ │ │ │ │ └── viewer.properties │ │ │ │ ├── kn │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ko │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ku │ │ │ │ │ └── viewer.properties │ │ │ │ ├── lg │ │ │ │ │ └── viewer.properties │ │ │ │ ├── lij │ │ │ │ │ └── viewer.properties │ │ │ │ ├── locale.properties │ │ │ │ ├── lt │ │ │ │ │ └── viewer.properties │ │ │ │ ├── lv │ │ │ │ │ └── viewer.properties │ │ │ │ ├── mai │ │ │ │ │ └── viewer.properties │ │ │ │ ├── mk │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ml │ │ │ │ │ └── viewer.properties │ │ │ │ ├── mn │ │ │ │ │ └── viewer.properties │ │ │ │ ├── mr │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ms │ │ │ │ │ └── viewer.properties │ │ │ │ ├── my │ │ │ │ │ └── viewer.properties │ │ │ │ ├── nb-NO │ │ │ │ │ └── viewer.properties │ │ │ │ ├── nl │ │ │ │ │ └── viewer.properties │ │ │ │ ├── nn-NO │ │ │ │ │ └── viewer.properties │ │ │ │ ├── nso │ │ │ │ │ └── viewer.properties │ │ │ │ ├── oc │ │ │ │ │ └── viewer.properties │ │ │ │ ├── or │ │ │ │ │ └── viewer.properties │ │ │ │ ├── pa-IN │ │ │ │ │ └── viewer.properties │ │ │ │ ├── pl │ │ │ │ │ └── viewer.properties │ │ │ │ ├── pt-BR │ │ │ │ │ └── viewer.properties │ │ │ │ ├── pt-PT │ │ │ │ │ └── viewer.properties │ │ │ │ ├── rm │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ro │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ru │ │ │ │ │ └── viewer.properties │ │ │ │ ├── rw │ │ │ │ │ └── viewer.properties │ │ │ │ ├── sah │ │ │ │ │ └── viewer.properties │ │ │ │ ├── si │ │ │ │ │ └── viewer.properties │ │ │ │ ├── sk │ │ │ │ │ └── viewer.properties │ │ │ │ ├── sl │ │ │ │ │ └── viewer.properties │ │ │ │ ├── son │ │ │ │ │ └── viewer.properties │ │ │ │ ├── sq │ │ │ │ │ └── viewer.properties │ │ │ │ ├── sr │ │ │ │ │ └── viewer.properties │ │ │ │ ├── sv-SE │ │ │ │ │ └── viewer.properties │ │ │ │ ├── sw │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ta-LK │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ta │ │ │ │ │ └── viewer.properties │ │ │ │ ├── te │ │ │ │ │ └── viewer.properties │ │ │ │ ├── th │ │ │ │ │ └── viewer.properties │ │ │ │ ├── tl │ │ │ │ │ └── viewer.properties │ │ │ │ ├── tn │ │ │ │ │ └── viewer.properties │ │ │ │ ├── tr │ │ │ │ │ └── viewer.properties │ │ │ │ ├── uk │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ur │ │ │ │ │ └── viewer.properties │ │ │ │ ├── vi │ │ │ │ │ └── viewer.properties │ │ │ │ ├── wo │ │ │ │ │ └── viewer.properties │ │ │ │ ├── xh │ │ │ │ │ └── viewer.properties │ │ │ │ ├── zh-CN │ │ │ │ │ └── viewer.properties │ │ │ │ ├── zh-TW │ │ │ │ │ └── viewer.properties │ │ │ │ └── zu │ │ │ │ │ └── viewer.properties │ │ │ │ ├── viewer.css │ │ │ │ ├── viewer.html │ │ │ │ └── viewer.js │ │ ├── pdf.js │ │ └── pdf.worker.js │ ├── examples │ │ └── components │ │ │ └── pageviewer.js │ └── js │ │ └── pageviewer.js ├── resources │ └── .keep ├── slide-viewer │ ├── css │ │ ├── jquery.simplecolorpicker-fontawesome.css │ │ ├── jquery.simplecolorpicker-glyphicons.css │ │ ├── jquery.simplecolorpicker-regularfont.css │ │ ├── jquery.simplecolorpicker.css │ │ ├── pick-a-color-1.2.3.min.css │ │ ├── slideviewer.css │ │ └── text_layer_builder.css │ ├── images │ │ └── slide.png │ └── js │ │ ├── autosize.input.min.js │ │ ├── directives │ │ ├── sa-annotationzone-controller.js │ │ ├── sa-annotationzone.html │ │ └── sa-annotationzone.js │ │ ├── drawdiv.js │ │ ├── jquery.fullscreen-min.js │ │ ├── jquery.simplecolorpicker.js │ │ ├── pick-a-color-1.2.3.min.js │ │ ├── slideviewer.js │ │ └── tinycolor-0.9.15.min.js └── ui-widgets │ └── html-widgets │ └── html-sidebar.js ├── routes-socket ├── learningHub-comments.js ├── map-socket.js └── video-annotations.js ├── routes ├── accounts.js ├── advanced-search.js ├── api │ ├── accounts.js │ ├── categories.js │ ├── course-analytics │ │ └── courseAnalytics.js │ ├── courseTags.js │ ├── courses.js │ ├── discussion.js │ ├── favorites.js │ ├── learningHub │ │ └── learningHub.js │ ├── links │ │ └── links.js │ ├── my-course │ │ └── myCourse.js │ ├── newsfeed.js │ ├── node-analytics │ │ └── nodeAnalytics.js │ ├── oauth2 │ │ └── oauth2.route.js │ ├── peerAssessment.js │ ├── search.js │ ├── slide-viewer │ │ └── slideViewer.js │ ├── tabs │ │ └── tabs.js │ ├── treeNodes.js │ ├── votes.js │ └── widgets.js ├── apps.js ├── categories.js ├── cm-admin │ ├── adminusers.js │ ├── applications.js │ ├── category.js │ ├── index.js │ └── tabs.js ├── course-analytics │ └── courseAnalytics.js ├── courses.js ├── fixTotalParticipants.js ├── index.js ├── my-course │ └── myCourse.js ├── node-analytics │ └── nodeAnalytics.js ├── slide-viewer │ └── slideViewer.js ├── static.js ├── treeNodes.js ├── ui-widgets │ └── ui-widgets.js └── widgets.js ├── test ├── categories.test.js ├── follow.test.js └── users.test.js ├── views ├── admin-lte │ ├── advanced-search │ │ ├── index.ejs │ │ └── search-form.ejs │ ├── apps │ │ ├── gallery.ejs │ │ └── index.ejs │ ├── basic.ejs │ ├── catalogs │ │ ├── course.ejs │ │ ├── courseConfigModal.ejs │ │ ├── courseDetail.ejs │ │ ├── courseDetailLeftTab.ejs │ │ ├── courseDetailModals.ejs │ │ ├── courses.ejs │ │ ├── editCourseModal.ejs │ │ ├── newCourse.ejs │ │ ├── newCourseModal.ejs │ │ ├── nodeConfigModal.ejs │ │ ├── nodeDetail.ejs │ │ ├── nodeDetailLeftTab.ejs │ │ └── nodeDetailModal.ejs │ ├── cm-admin │ │ ├── adminusers.ejs │ │ ├── applications.ejs │ │ ├── background-plugins.ejs │ │ ├── categories.ejs │ │ ├── category.ejs │ │ ├── categoryRecommendations.ejs │ │ ├── header.ejs │ │ ├── index.ejs │ │ ├── mainMenu.ejs │ │ ├── sidebar.ejs │ │ └── tabs.ejs │ ├── course │ │ ├── analytics │ │ │ ├── analytics.ejs │ │ │ └── analyticsActionBar.ejs │ │ ├── discussion │ │ │ ├── addNewTopicModal.ejs │ │ │ ├── discussion.ejs │ │ │ ├── discussionActionBar.ejs │ │ │ ├── editTopicModal.ejs │ │ │ └── replyModal.ejs │ │ ├── map │ │ │ ├── addContentNodeModal.ejs │ │ │ ├── addSubTopicModal.ejs │ │ │ ├── courseDetailContentMapModals.ejs │ │ │ ├── editContentNodeModal.ejs │ │ │ ├── editSubTopicModal.ejs │ │ │ ├── map.ejs │ │ │ └── mapActionBar.ejs │ │ ├── newsfeedUpdate │ │ │ ├── newsfeedUpdate.ejs │ │ │ ├── newsfeedUpdateActionBar.ejs │ │ │ └── newsfeedUpdateFooter.ejs │ │ ├── peerAssessment │ │ │ ├── peerAssessment.ejs │ │ │ ├── peerAssessmentActionBar.ejs │ │ │ ├── peerAssessmentFooter.ejs │ │ │ ├── peerReview │ │ │ │ ├── components │ │ │ │ │ ├── blindness.ejs │ │ │ │ │ ├── loop.ejs │ │ │ │ │ ├── reviewAssignment.ejs │ │ │ │ │ ├── reviewPercentage.ejs │ │ │ │ │ └── rubrics │ │ │ │ │ │ ├── addEditRubricModal.ejs │ │ │ │ │ │ ├── list.ejs │ │ │ │ │ │ ├── rubrics.ejs │ │ │ │ │ │ └── viewRubricModal.ejs │ │ │ │ ├── modals │ │ │ │ │ └── confirmDeleteAssignmentModal.ejs │ │ │ │ └── pages │ │ │ │ │ ├── addNewAssignment.ejs │ │ │ │ │ ├── editAssignment.ejs │ │ │ │ │ └── viewAssignment.ejs │ │ │ ├── review │ │ │ │ ├── modals │ │ │ │ │ └── viewReviewModal.ejs │ │ │ │ └── pages │ │ │ │ │ ├── adminFeedback.ejs │ │ │ │ │ ├── assignReviews.ejs │ │ │ │ │ ├── review.ejs │ │ │ │ │ ├── reviewSubmission.ejs │ │ │ │ │ └── viewFeedback.ejs │ │ │ └── solution │ │ │ │ ├── modals │ │ │ │ ├── addEditSolutionModal.ejs │ │ │ │ └── confirmDeleteSolutionModal.ejs │ │ │ │ └── pages │ │ │ │ ├── seeAllSolutions.ejs │ │ │ │ └── viewSolution.ejs │ │ └── preview │ │ │ ├── preview.ejs │ │ │ └── previewActionBar.ejs │ ├── error.ejs │ ├── footer.ejs │ ├── forgotPassword.ejs │ ├── formLogin.ejs │ ├── header.ejs │ ├── index.ejs │ ├── jsfooter.ejs │ ├── login.ejs │ ├── mainMenu.ejs │ ├── modalLoginForm.ejs │ ├── oauth │ │ ├── oFooter.ejs │ │ ├── oHeader.ejs │ │ ├── oLogin.ejs │ │ └── permission.ejs │ ├── profile.ejs │ ├── profiles │ │ └── editAccountModal.ejs │ ├── recommendCategory.ejs │ ├── resetPassword.ejs │ ├── settings │ │ ├── appDetail.ejs │ │ ├── appSettings.ejs │ │ ├── createExternalApp.ejs │ │ ├── createdApps.ejs │ │ ├── documentation.ejs │ │ ├── installed.ejs │ │ └── settings.ejs │ ├── sidebar.ejs │ ├── signUp.ejs │ ├── slider.ejs │ ├── static.ejs │ ├── statics │ │ ├── about.ejs │ │ └── privacy.ejs │ └── treeNode │ │ ├── learningHub │ │ ├── learningHub.ejs │ │ ├── learningHubActionBar.ejs │ │ ├── learningHubAddLinkForm.ejs │ │ └── learningHubFooter.ejs │ │ ├── links │ │ ├── links.ejs │ │ ├── linksActionBar.ejs │ │ └── linksModal.ejs │ │ ├── nodeAnalytics │ │ ├── nodeAnalytics.ejs │ │ └── nodeAnalyticsActionBar.ejs │ │ ├── nodeNewsFeedUpdate │ │ ├── nodeNewsFeedUpdate.ejs │ │ ├── nodeNewsFeedUpdateActionBar.ejs │ │ └── nodeNewsFeedUpdateFooter.ejs │ │ ├── pdf │ │ ├── pdf.ejs │ │ └── pdfActionBar.ejs │ │ └── video │ │ ├── video.ejs │ │ └── videoActionBar.ejs ├── course-analytics │ ├── enrolled-users.ejs │ ├── history-analytics.ejs │ ├── node-history-analytics.ejs │ ├── preview-statistics.ejs │ ├── preview-top-contributors.ejs │ ├── statistics.ejs │ ├── top-content.ejs │ └── top-contributor.ejs ├── email.ejs ├── error.ejs ├── my-course │ ├── activity-summary.ejs │ ├── course-history.ejs │ ├── courses-breakdown.ejs │ ├── created-courses.ejs │ ├── enrolled-courses.ejs │ ├── following-course.ejs │ ├── participation-balance.ejs │ ├── pdf-status.ejs │ └── video-status.ejs ├── node-analytics │ └── node-history-analytics.ejs ├── slide-viewer │ └── displayComments.ejs ├── ui-widgets │ └── html-sidebar │ │ └── html-sidebar.ejs └── widgets │ └── blankBox.ejs └── yarn.lock /.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "public/bower", 3 | "ignoredDependencies": [ 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | .dockerignore 2 | .git 3 | .gitignore 4 | *.log 5 | /.k8s 6 | /.travis.yml 7 | /bitbucket-pipelines.yml 8 | /docker-compose.yml 9 | /kustomization.yaml 10 | /Makefile 11 | /node_modules 12 | /public/bower/ 13 | /public/partials/ 14 | /public/resources/ 15 | /public/img/courses/ 16 | Dockerfile 17 | README.md 18 | -------------------------------------------------------------------------------- /.k8s/base/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | namePrefix: course-mapper- 5 | 6 | commonLabels: 7 | app: course-mapper 8 | 9 | vars: 10 | - name: MONGODB_SERVICE 11 | objref: 12 | apiVersion: v1 13 | kind: Service 14 | name: mongodb 15 | 16 | resources: 17 | - web/deployment.yaml 18 | - web/service.yaml 19 | - web/pvc.yaml 20 | - mongodb/deployment.yaml 21 | - mongodb/service.yaml 22 | - mongodb/pvc.yaml 23 | -------------------------------------------------------------------------------- /.k8s/base/mongodb/pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: mongodb 5 | spec: 6 | accessModes: 7 | - ReadWriteOnce 8 | resources: 9 | requests: 10 | storage: 5Gi 11 | -------------------------------------------------------------------------------- /.k8s/base/mongodb/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: mongodb 5 | spec: 6 | ports: 7 | - port: 27017 8 | selector: 9 | component: mongodb 10 | -------------------------------------------------------------------------------- /.k8s/base/web/pvc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolumeClaim 3 | metadata: 4 | name: web 5 | spec: 6 | accessModes: 7 | - ReadWriteOnce 8 | resources: 9 | requests: 10 | storage: 5Gi 11 | -------------------------------------------------------------------------------- /.k8s/base/web/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: web 5 | spec: 6 | ports: 7 | - port: 8000 8 | selector: 9 | component: web 10 | -------------------------------------------------------------------------------- /.k8s/dev/ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1beta1 2 | kind: Ingress 3 | metadata: 4 | name: web 5 | annotations: 6 | kubernetes.io/tls-acme: "true" 7 | certmanager.k8s.io/cluster-issuer: letsencrypt-prod 8 | traefik.ingress.kubernetes.io/redirect-entry-point: https 9 | description: Course Mapper (dev) 10 | spec: 11 | rules: 12 | - host: test-course-mapper.sc.inko.cloud 13 | http: 14 | paths: 15 | - backend: 16 | serviceName: web 17 | servicePort: 8000 18 | tls: 19 | - hosts: 20 | - test-course-mapper.sc.inko.cloud 21 | # Workaround for old Kustomize 22 | secretName: course-mapper-tls-crt-dev 23 | -------------------------------------------------------------------------------- /.k8s/dev/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | bases: 5 | - ../base 6 | 7 | resources: 8 | - ingress.yaml 9 | 10 | namespace: sc 11 | namePrefix: soco- 12 | nameSuffix: -dev 13 | 14 | commonLabels: 15 | owner: sc 16 | stage: dev 17 | commonAnnotations: 18 | contact: "Ralf Berger " 19 | 20 | images: 21 | - name: inko/course-mapper 22 | newTag: dev 23 | -------------------------------------------------------------------------------- /.k8s/prod/ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: networking.k8s.io/v1beta1 2 | kind: Ingress 3 | metadata: 4 | name: web 5 | annotations: 6 | kubernetes.io/tls-acme: "true" 7 | certmanager.k8s.io/cluster-issuer: letsencrypt-prod 8 | traefik.ingress.kubernetes.io/redirect-entry-point: https 9 | description: Course Mapper 10 | spec: 11 | rules: 12 | - host: course-mapper.sc.inko.cloud 13 | http: 14 | paths: 15 | - backend: 16 | serviceName: web 17 | servicePort: 8000 18 | tls: 19 | - hosts: 20 | - course-mapper.sc.inko.cloud 21 | secretName: course-mapper-tls-crt 22 | -------------------------------------------------------------------------------- /.k8s/prod/kustomization.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: kustomize.config.k8s.io/v1beta1 2 | kind: Kustomization 3 | 4 | bases: 5 | - ../base 6 | 7 | resources: 8 | - ingress.yaml 9 | 10 | namespace: sc 11 | namePrefix: soco- 12 | 13 | commonLabels: 14 | owner: sc 15 | stage: prod 16 | commonAnnotations: 17 | contact: "Ralf Berger " 18 | 19 | images: 20 | - name: inko/course-mapper 21 | newTag: master 22 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | install: 2 | - docker-compose up -d --build 3 | 4 | before_script: 5 | - until $(curl --output /dev/null --silent --head --fail localhost:3000); do sleep 2; done 6 | 7 | script: 8 | - curl -I localhost:3000 9 | - docker-compose run web npm test 10 | 11 | after_script: 12 | - docker-compose down 13 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:10 2 | WORKDIR /home/node/app 3 | 4 | RUN yarn global add nodemon grunt-cli bower gulp npm-run-all 5 | 6 | ADD package.json . 7 | RUN yarn install --silent --non-interactive --production=false 8 | 9 | ADD bower.json .bowerrc ./ 10 | RUN bower install --silent --allow-root 11 | 12 | ADD . . 13 | RUN grunt > /dev/null 14 | 15 | RUN mkdir -p public/resources && chown node:node public/resources \ 16 | && mkdir -p public/pa && chown node:node public/pa \ 17 | && mkdir -p public/img/courses && chown node:node public/img/courses 18 | 19 | ENV NODE_ENV=production 20 | ENV DATABASE=mongodb/course_mapper 21 | ENV PORT=3000 22 | EXPOSE 3000 23 | 24 | USER node 25 | CMD ["bin/www"] 26 | -------------------------------------------------------------------------------- /Gulpfile.js: -------------------------------------------------------------------------------- 1 | /*jslint node: true */ 2 | 'use strict'; 3 | 4 | var tinylr; 5 | var gulp = require('gulp'); 6 | 7 | gulp.task('livereload', function () { 8 | tinylr = require('tiny-lr')(); 9 | tinylr.listen(4002); 10 | }); 11 | 12 | function notifyLiveReload(event) { 13 | var fileName = require('path').relative(__dirname, event.path); 14 | 15 | tinylr.changed({ 16 | body: { 17 | files: [fileName] 18 | } 19 | }); 20 | } 21 | 22 | gulp.task('watch', function () { 23 | gulp.watch('public/angular/*', notifyLiveReload); 24 | gulp.watch('public/angular-admin/*', notifyLiveReload); 25 | gulp.watch('views/**/*', notifyLiveReload); 26 | gulp.watch('views/*', notifyLiveReload); 27 | }); 28 | 29 | gulp.task('default', ['livereload', 'watch'], function () { 30 | }); -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: default build rebuild start test shell clean 2 | 3 | default: build test 4 | 5 | build: 6 | @docker-compose build 7 | 8 | rebuild: 9 | @docker-compose build --no-cache 10 | 11 | start: 12 | @docker-compose up 13 | 14 | test: 15 | @docker-compose run web npm test 16 | 17 | shell: 18 | @docker-compose run web bash 19 | 20 | clean: 21 | @docker-compose rm -v 22 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: node bin/www 2 | -------------------------------------------------------------------------------- /bitbucket-pipelines.yml: -------------------------------------------------------------------------------- 1 | image: docker:stable 2 | 3 | options: 4 | docker: true 5 | 6 | pipelines: 7 | default: 8 | - step: 9 | script: 10 | - apk add --no-cache bash python-dev py-pip libffi-dev openssl-dev gcc libc-dev make 11 | - pip install --no-cache-dir docker-compose 12 | - export IMAGE_TAG="${BITBUCKET_COMMIT}" 13 | - docker-compose build 14 | caches: 15 | - docker 16 | -------------------------------------------------------------------------------- /config/default.json: -------------------------------------------------------------------------------- 1 | { 2 | "theme": "admin-lte", 3 | "session": { 4 | "secret": "A78NC1gc8e", 5 | "maxAge": 2419200000 6 | }, 7 | "signUp": { 8 | "needActivation": false 9 | }, 10 | "facebookAuth": { 11 | "clientID": "client_id", 12 | "clientSecret": "client_secret", 13 | "callbackURL": "https://course-mapper.sc.inko.cloud/api/accounts/facebook/callback" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /config/lanzarote.json: -------------------------------------------------------------------------------- 1 | { 2 | "theme": "admin-lte", 3 | "session": { 4 | "secret": "CatsRuleTehInterwebs", 5 | "maxAge": 2419200000 6 | }, 7 | "signUp": { 8 | "needActivation": false 9 | }, 10 | "facebookAuth": { 11 | "clientID": "1490134417947948", 12 | "clientSecret": "9c239c9b196756f1a31744b42eca49ae", 13 | "callbackURL": "http://lanzarote.informatik.rwth-aachen.de:3000/api/accounts/facebook/callback" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /config/production.json: -------------------------------------------------------------------------------- 1 | { 2 | "theme": "admin-lte", 3 | "session": { 4 | "secret": "CatsRuleTehInterwebs", 5 | "maxAge": 2419200000 6 | }, 7 | "signUp": { 8 | "needActivation": false 9 | }, 10 | "facebookAuth": { 11 | "clientID": "1490134417947948", 12 | "clientSecret": "9c239c9b196756f1a31744b42eca49ae", 13 | "callbackURL": "http://gomera.informatik.rwth-aachen.de:3000/api/accounts/facebook/callback" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /config/test.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/config/test.json -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | 4 | web: 5 | build: . 6 | image: ${IMAGE_NAME_PREFIX:-inko/}course-mapper:${IMAGE_TAG:-latest} 7 | environment: 8 | - NODE_ENV=production 9 | - DATABASE=mongodb/course_mapper 10 | - PORT=3000 11 | volumes: 12 | - web-resources:/home/node/app/public/resources 13 | - web-pa:/home/node/app/public/pa 14 | - web-img-courses:/home/node/app/public/img/courses 15 | ports: 16 | - 3000:3000 17 | depends_on: 18 | - mongodb 19 | 20 | mongodb: 21 | image: mongo 22 | volumes: 23 | - mongodb-data:/data/db 24 | 25 | # admin: 26 | # image: mrvautin/adminmongo 27 | # environment: 28 | # - CONN_NAME=course_mapper 29 | # - DB_HOST=mongodb 30 | # - DB_NAME=course_mapper 31 | # - PASSWORD=admin 32 | # - PORT=3001 33 | # ports: 34 | # - 3001:3001 35 | 36 | volumes: 37 | web-resources: 38 | web-pa: 39 | web-img-courses: 40 | mongodb-data: 41 | -------------------------------------------------------------------------------- /frontend-modules/angular-admin/app.js: -------------------------------------------------------------------------------- 1 | var admin = angular.module('courseMapperAdmin', ['courseMapper', 'ngResource', 'ngRoute', 'toastr']); 2 | 3 | admin.filter('capitalize', function() { 4 | return function(input, all) { 5 | return (!!input) ? input.replace(/([^\W_]+[^\s-]*) */g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}) : ''; 6 | } 7 | }); 8 | 9 | -------------------------------------------------------------------------------- /frontend-modules/angular-admin/controller.admin.js: -------------------------------------------------------------------------------- 1 | admin.controller('adminController', function($scope, $route, $routeParams, $location) { 2 | $scope.$route = $route; 3 | $scope.$location = $location; 4 | $scope.$routeParams = $routeParams; 5 | }); -------------------------------------------------------------------------------- /frontend-modules/angular-admin/homeAdmin.controller.js: -------------------------------------------------------------------------------- 1 | admin.controller('adminHomeController', function ($scope, $route, $routeParams, $location, $http, $timeout) { 2 | $scope.route = $route; 3 | $scope.location = $location; 4 | $scope.routeParams = $routeParams; 5 | 6 | $scope.init = function () { 7 | 8 | }; 9 | 10 | $scope.init(); 11 | }); -------------------------------------------------------------------------------- /frontend-modules/angular-admin/menu.js: -------------------------------------------------------------------------------- 1 | admin.controller('MainMenuController', function($scope, $http, $rootScope) { 2 | $http.get('/api/account').success(function(data) { 3 | $scope.user = data; 4 | $rootScope.user = data; 5 | 6 | $rootScope.$broadcast('onAfterInitUser', $rootScope.user); 7 | }); 8 | }); -------------------------------------------------------------------------------- /frontend-modules/angular/app.js: -------------------------------------------------------------------------------- 1 | var app = angular.module('courseMapper', [ 2 | 'ngResource', 'ngRoute', 'ngCookies', 3 | 'ngTagsInput', 'ngFileUpload', 'oc.lazyLoad', 4 | 'relativeDate', 'angular-quill', 5 | 'VideoAnnotations', 'SlideViewerAnnotationZones', 6 | 'LearningHub', 7 | 'ngAnimate', 'toastr', 'externalApp', 'daterangepicker', 'uiSwitch']); 8 | 9 | app.config(function (toastrConfig) { 10 | angular.extend(toastrConfig, { 11 | positionClass: 'toast-top-center', 12 | preventOpenDuplicates: true, 13 | maxOpened: 1 14 | }); 15 | }); -------------------------------------------------------------------------------- /frontend-modules/angular/catalogs/VideoContentPreview.controller.js: -------------------------------------------------------------------------------- 1 | app.controller('VideoContentPreviewController', function($scope) { 2 | $scope.API = null; 3 | 4 | $scope.onPlayerReady = function (API) { 5 | $scope.API = API; 6 | }; 7 | 8 | $scope.$watch('isPlaying', function(newVal, oldVal){ 9 | if(!$scope.isPlaying && $scope.API){ 10 | $scope.API.pause(); 11 | } 12 | }); 13 | 14 | }); -------------------------------------------------------------------------------- /frontend-modules/angular/catalogs/category.js: -------------------------------------------------------------------------------- 1 | app.controller('CategoryListController', function($scope, $http, $rootScope) { 2 | 3 | $http.get('/api/categories').success(function (data) { 4 | $scope.categories = data.categories; 5 | }); 6 | 7 | $scope.$on('sidebarInit', function (ngRepeatFinishedEvent) { 8 | $.AdminLTE.tree('.sidebar'); 9 | }); 10 | 11 | }); 12 | -------------------------------------------------------------------------------- /frontend-modules/angular/catalogs/pdfTab.controller.js: -------------------------------------------------------------------------------- 1 | app.controller('PdfTabController', function ($scope, $rootScope, $filter, $http, $location, 2 | $routeParams, $timeout, ActionBarService) { 3 | 4 | $scope.init = function () { 5 | if ($scope.currentPdfPage > 1) { 6 | var slidePage = $location.search().slidePage; 7 | if (!slidePage || (slidePage && slidePage == 1)) { 8 | $location.search('slidePage', $scope.currentPdfPage).replace(); 9 | } 10 | } 11 | }; 12 | 13 | $scope.init(); 14 | }); 15 | -------------------------------------------------------------------------------- /frontend-modules/angular/catalogs/profile.controller.js: -------------------------------------------------------------------------------- 1 | app.controller('ProfileController', function( Page) { 2 | Page.setTitleWithPrefix('My Account'); 3 | }); 4 | app.controller('AppSettingController', function( Page) { 5 | Page.setTitleWithPrefix('3rd Party App Settings'); 6 | }); 7 | -------------------------------------------------------------------------------- /frontend-modules/angular/catalogs/videoTab.controller.js: -------------------------------------------------------------------------------- 1 | app.controller('VideoTabController', function ($scope, $rootScope, $filter, $http, $location, 2 | $routeParams, $timeout, ActionBarService) { 3 | 4 | }); 5 | -------------------------------------------------------------------------------- /frontend-modules/angular/directives/comments.js: -------------------------------------------------------------------------------- 1 | app.directive('comment', function ($compile, $timeout) { 2 | return { 3 | restrict: 'E', 4 | terminal: true, 5 | scope: { 6 | postedBy: '@', 7 | postedDate: '@', 8 | showControl: '=', 9 | showReplyButton: '=', 10 | showEditButton: '=', 11 | showDeleteButton: '=', 12 | authorClickAction: '&', 13 | authorClickable: '=', 14 | postContent: '=', 15 | isPostOwner: '=', 16 | isDeleted: '=', 17 | postId: '@', 18 | editAction: '&', 19 | deleteAction: '&', 20 | replyAction: '&' 21 | }, 22 | 23 | templateUrl: '/partials/discussion.reply.html'/*, 24 | link: function (scope, element, attrs) { 25 | $timeout(function () { 26 | scope.$apply(); 27 | }); 28 | $compile(element.contents())(scope.$new()); 29 | }*/ 30 | }; 31 | }); -------------------------------------------------------------------------------- /frontend-modules/angular/directives/error-block.js: -------------------------------------------------------------------------------- 1 | app.directive('errorBlock', 2 | function () { 3 | return { 4 | restrict: 'E', 5 | scope: { 6 | messages: '=' 7 | }, 8 | template: '
' + 9 | '' + 10 | '
' 11 | }; 12 | }); -------------------------------------------------------------------------------- /frontend-modules/angular/directives/facebook-button.js: -------------------------------------------------------------------------------- 1 | app.directive('facebookButton', 2 | function () { 3 | return { 4 | restrict: 'E', 5 | scope: { 6 | loginUrl: '@' 7 | }, 8 | template: '
' + 9 | '' + 10 | '' + 11 | '' + 12 | '
', 13 | compile: function (element, attrs) { 14 | if (!attrs.loginUrl) { 15 | attrs.$set('loginUrl', '/api/accounts/login/facebook'); 16 | } 17 | } 18 | }; 19 | }); -------------------------------------------------------------------------------- /frontend-modules/angular/directives/general-directives.js: -------------------------------------------------------------------------------- 1 | 2 | app.directive('onFinishRender', function ($timeout) { 3 | return { 4 | restrict: 'A', 5 | link: function (scope, element, attr) { 6 | if (scope.$last === true) { 7 | $timeout(function () { 8 | scope.$emit(attr.onFinishRender); 9 | }); 10 | } 11 | } 12 | } 13 | }); 14 | 15 | app.directive('script', function($parse, $rootScope, $compile) { 16 | return { 17 | restrict: 'E', 18 | terminal: true, 19 | link: function(scope, element, attr) { 20 | if (attr.ngSrc) { 21 | var domElem = ''; 22 | $(element).append($compile(domElem)(scope)); 23 | } 24 | } 25 | }; 26 | }); -------------------------------------------------------------------------------- /frontend-modules/angular/directives/modal-box.js: -------------------------------------------------------------------------------- 1 | app.directive('modalBox', 2 | function ($compile, $timeout, $rootScope) { 3 | return { 4 | restrict: 'E', 5 | 6 | terminal: true, 7 | transclude: true, 8 | 9 | scope: { 10 | mid: '@', 11 | title: '@' 12 | }, 13 | 14 | templateUrl: '/partials/modal-box.html', 15 | 16 | link: function (scope, el, attrs) { 17 | } 18 | }; 19 | }); 20 | -------------------------------------------------------------------------------- /frontend-modules/angular/directives/modal-cancel-button.js: -------------------------------------------------------------------------------- 1 | app.directive('cancel', 2 | function () { 3 | return { 4 | restrict: 'E', 5 | template: '' 10 | }; 11 | }); 12 | 13 | app.directive('modalClose', 14 | function () { 15 | return { 16 | restrict: 'E', 17 | template: '
' 18 | }; 19 | }); -------------------------------------------------------------------------------- /frontend-modules/angular/directives/pwCheck.js: -------------------------------------------------------------------------------- 1 | /* 2 | takenfrom:http://blog.brunoscopelliti.com/ 3 | */ 4 | app.directive('pwCheck', [function () { 5 | return { 6 | require: "ngModel", 7 | scope: { 8 | original: "=" 9 | }, 10 | link: function (scope, elem, attrs, ctrl) { 11 | var firstPassword = '#' + attrs.pwCheck; 12 | 13 | elem.add(firstPassword).on('keyup', function () { 14 | scope.$apply(function () { 15 | var v = elem.val()===$(firstPassword).val(); 16 | ctrl.$setValidity('pwmatch', v); 17 | }); 18 | }); 19 | } 20 | }; 21 | }]); -------------------------------------------------------------------------------- /frontend-modules/angular/externalApps/ExternalAppRoot.js: -------------------------------------------------------------------------------- 1 | var externalApp = angular.module('externalApp', [ 2 | 'ngResource', 'ngRoute', 'ngCookies', 'oc.lazyLoad', 3 | 'relativeDate']); -------------------------------------------------------------------------------- /frontend-modules/angular/externalApps/createdApps.controller.js: -------------------------------------------------------------------------------- 1 | externalApp.controller('CreatedAppsController', function ($scope, $rootScope, $http, $location, $sce, 2 | $compile, $timeout, 3 | toastr, Page, $window) { 4 | 5 | }); -------------------------------------------------------------------------------- /frontend-modules/angular/externalApps/installedApps.controller.js: -------------------------------------------------------------------------------- 1 | externalApp.controller('InstalledAppsController', function ($scope, $rootScope, $http, $location, $sce, 2 | $compile, $timeout, 3 | toastr, externalAppService) { 4 | 5 | $scope.deleteInstallation = function (installId) { 6 | if (confirm('This application will not have access to your data anymore.')) { 7 | externalAppService.deleteInstallation(installId, 8 | function () { 9 | toastr.success('Application deleted.'); 10 | var deleted = _.remove($scope.$parent.installedApps, {clientId: installId}); 11 | }, 12 | function () { 13 | toastr.error('Delete failed.'); 14 | } 15 | ); 16 | } 17 | } 18 | }); -------------------------------------------------------------------------------- /frontend-modules/angular/factories/page.factory.js: -------------------------------------------------------------------------------- 1 | app.factory('Page', function($window) { 2 | var prefix = 'CourseMapper'; 3 | var title = 'CourseMapper'; 4 | return { 5 | title: function() { 6 | return title; 7 | }, 8 | 9 | setTitle: function(newTitle) { 10 | title = newTitle; 11 | $window.document.title = title; 12 | }, 13 | 14 | setTitleWithPrefix: function(newTitle) { 15 | title = prefix + ': ' + newTitle; 16 | $window.document.title = title; 17 | }, 18 | 19 | xs: 768, 20 | sm: 992, 21 | md: 1200, 22 | 23 | defineDevSize: function(width){ 24 | if(width < this.xs){ 25 | return 'xs'; 26 | } else if(width > this.xs && width <= this.sm){ 27 | return 'sm'; 28 | } else if(width > this.sm && width <= this.md){ 29 | return 'md'; 30 | } else if(width > this.md){ 31 | return 'lg'; 32 | } 33 | } 34 | }; 35 | }); -------------------------------------------------------------------------------- /frontend-modules/angular/filters/htmlToPlaintext.js: -------------------------------------------------------------------------------- 1 | app.filter('htmlToPlaintext', function () { 2 | return function (text) { 3 | return angular.element(text).text(); 4 | } 5 | } 6 | ); -------------------------------------------------------------------------------- /frontend-modules/angular/filters/msToTime.js: -------------------------------------------------------------------------------- 1 | app.filter('msToTime', function() { 2 | return function msToTime(s) { 3 | function addZ(n) { 4 | return (n < 10 ? '0' : '') + n; 5 | } 6 | 7 | var ms = s % 1000; 8 | s = (s - ms) / 1000; 9 | var secs = s % 60; 10 | s = (s - secs) / 60; 11 | var mins = s % 60; 12 | var hrs = (s - mins) / 60; 13 | return addZ(hrs) + ':' + addZ(mins) + ':' + addZ(secs); 14 | }; 15 | }); 16 | -------------------------------------------------------------------------------- /frontend-modules/angular/filters/secondsToDateTime.filter.js: -------------------------------------------------------------------------------- 1 | app.filter('secondsToDateTime', [function() { 2 | return function(seconds) { 3 | return new Date(1970, 0, 1).setSeconds(seconds); 4 | }; 5 | }]); 6 | -------------------------------------------------------------------------------- /frontend-modules/angular/learningHub/learningHubDirectives/a_hub-module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * bootstrapping the learningHub module 3 | */ 4 | 'use-strict'; 5 | var learningHubModule = angular.module('LearningHub', [ 6 | 'ngSanitize', 7 | 'ngRoute', 8 | 'ui.bootstrap', 9 | 'toastr'] ); -------------------------------------------------------------------------------- /frontend-modules/angular/learningHub/learningHubDirectives/hubPostDelete.js: -------------------------------------------------------------------------------- 1 | 2 | learningHubModule.directive('hubPostDelete', function () { 3 | return { 4 | restrict:'E', 5 | templateUrl: 'js/learningHub/learningHubDirectives/hubPostDelete.html' 6 | } 7 | }); 8 | -------------------------------------------------------------------------------- /frontend-modules/angular/learningHub/learningHubDirectives/hubPostEdit.js: -------------------------------------------------------------------------------- 1 | 2 | learningHubModule.directive('hubPostEdit', function() { 3 | return { 4 | restrict: 'E', 5 | templateUrl: './templates/HubLink/hubPostEdit.html', 6 | scope: { 7 | post: '=' 8 | } 9 | } 10 | }); 11 | -------------------------------------------------------------------------------- /frontend-modules/angular/peerAssessment/peerReview/components/blind.controller.js: -------------------------------------------------------------------------------- 1 | app.controller('BlindController', function($scope) { 2 | console.log('Debug: BlindController') 3 | // Setup default values for the view to be populated correctly 4 | if($scope.newAssignObj && $scope.newAssignObj.reviewSettings && !$scope.newAssignObj.reviewSettings.blind) { 5 | $scope.newAssignObj.reviewSettings.blind = 'double' 6 | } 7 | 8 | //$scope.toottip = "Single: The reviewer knows the student identity
" + 9 | // "Double: Both reviewer and student identity is confidential
" + 10 | // "None: Both reviewer and student knows each other's identity
" 11 | 12 | $scope.tooltip = "States who can see the identity during the process" 13 | }) -------------------------------------------------------------------------------- /frontend-modules/angular/peerAssessment/peerReview/components/reviewAssignmentType.controller.js: -------------------------------------------------------------------------------- 1 | app.controller('ReviewAssignmentTypeController', function($scope) { 2 | console.log('Debug: ReviewAssignmentController') 3 | // Setup default values for the view to be populated correctly 4 | if($scope.newAssignObj && $scope.newAssignObj.reviewSettings && !$scope.newAssignObj.reviewSettings.reviewAssignment) { 5 | $scope.newAssignObj.reviewSettings.reviewAssignment = 'single' 6 | } 7 | 8 | $scope.tooltip = "States if the solution will be reviewed by 1 or multiple" 9 | }) -------------------------------------------------------------------------------- /frontend-modules/angular/peerAssessment/peerReview/components/reviewPercentage.controller.js: -------------------------------------------------------------------------------- 1 | app.controller('ReviewPercentageController', function($scope) { 2 | console.log('Debug: ReviewPercentageController') 3 | // Setup default values for the view to be populated correctly 4 | if($scope.newAssignObj && $scope.newAssignObj.reviewSettings && !$scope.newAssignObj.reviewSettings.studentPercentage) { 5 | $scope.newAssignObj.reviewSettings.studentPercentage = 0 6 | } 7 | }) -------------------------------------------------------------------------------- /frontend-modules/angular/peerAssessment/peerReview/components/rubrics/addEditRubricModal.controller.js: -------------------------------------------------------------------------------- 1 | app.controller('AddEditRubricModalController', function($scope, $http, toastr) { 2 | $scope.saveRubric = function() { 3 | // Check for client side validation here 4 | 5 | var url = '/api/peerassessment/' + $scope.course._id + '/rubrics' 6 | if($scope.rubric._id) { 7 | url = url + '/' + $scope.rubric._id 8 | } 9 | 10 | $http.post(url, {title: $scope.rubric.title, description: $scope.rubric.description}).then(function(response) { 11 | toastr.success('Rubric saved'); 12 | window.location.reload(); 13 | }, function(err) { 14 | toastr.error('Internal Server Error. Please try again later.'); 15 | }) 16 | } 17 | }) -------------------------------------------------------------------------------- /frontend-modules/angular/peerAssessment/services/solutionFilter.service.js: -------------------------------------------------------------------------------- 1 | app.service('SolutionFilterService', function() { 2 | console.log('SolutionFilterService') 3 | var peerReview = '' 4 | 5 | return { 6 | getPeerReview: function() { 7 | return peerReview 8 | }, 9 | 10 | setPeerReview: function(pR) { 11 | peerReview = pR 12 | } 13 | } 14 | }) -------------------------------------------------------------------------------- /frontend-modules/angular/ui/favorites.controller.js: -------------------------------------------------------------------------------- 1 | app.controller('FavoritesController', function ($rootScope, $scope, $http) { 2 | 3 | $scope.favorites = null; 4 | 5 | var loadFavorites = function () { 6 | $http.get('/api/favorites').then( 7 | function (result) { 8 | $scope.favorites = result.data; 9 | }, 10 | function () { 11 | $scope.favorites = null; 12 | }); 13 | }; 14 | 15 | var favListener = $rootScope.$on('favorites.update', function () { 16 | loadFavorites(); 17 | }); 18 | 19 | loadFavorites(); 20 | 21 | $scope.$on('$destroy', favListener); 22 | }); -------------------------------------------------------------------------------- /frontend-modules/angular/ui/main.controller.js: -------------------------------------------------------------------------------- 1 | app.controller('MainController', function($scope, Page) { 2 | $scope.Page = Page; 3 | }); 4 | -------------------------------------------------------------------------------- /frontend-modules/angular/ui/menuActionBar.controller.js: -------------------------------------------------------------------------------- 1 | app.controller('ActionBarController', function($scope, ActionBarService, $sce, $compile) { 2 | $scope.extraActionsMenu = []; 3 | 4 | $scope.$watch(function(){ 5 | return ActionBarService.extraActionsMenu; 6 | }, 7 | function (newValue) { 8 | $scope.extraActionsMenu = ActionBarService.extraActionsMenu; 9 | }); 10 | }); -------------------------------------------------------------------------------- /frontend-modules/angular/ui/menuActionBar.service.js: -------------------------------------------------------------------------------- 1 | app.service('ActionBarService', function() { 2 | this.extraActionsMenu = []; 3 | }); -------------------------------------------------------------------------------- /frontend-modules/angular/ui/signUp.controller.js: -------------------------------------------------------------------------------- 1 | app.controller('SignUpController', function($scope, $http, $rootScope, $cookies, authService) { 2 | 3 | $scope.loginData = {}; 4 | $scope.errors = []; 5 | $scope.isLoading = false; 6 | 7 | authService.loginCheck(function(user){ 8 | if(user){ 9 | window.location = '/accounts'; 10 | } 11 | }); 12 | 13 | $scope.signUp = function(isValid){ 14 | if(isValid){ 15 | $scope.isLoading = true; 16 | authService.signUp($scope.loginData, 17 | function(user){ 18 | $scope.isLoading = false; 19 | window.location = '/accounts/login/#?referer=signUp&result=success'; 20 | }, 21 | function error(data) { 22 | if(data.errors){ 23 | $scope.errors = data.errors; 24 | } 25 | $scope.isLoading = false; 26 | } 27 | ); 28 | } 29 | } 30 | 31 | }); -------------------------------------------------------------------------------- /frontend-modules/angular/ui/static.js: -------------------------------------------------------------------------------- 1 | app.controller('staticController', function($scope, $http, $rootScope) { 2 | 3 | }); 4 | app.controller('aboutController', function($scope, $http, $rootScope, Page) { 5 | Page.setTitleWithPrefix('About CourseMapper'); 6 | }); -------------------------------------------------------------------------------- /frontend-modules/angular/views/pagination.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend-modules/angular/views/vote-vertical.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 | 6 |
7 |
8 | 9 |
{{voteDisplay}}
10 | 11 | 12 |
13 | 14 | 15 |
16 |
17 |
-------------------------------------------------------------------------------- /libs/core/database.js: -------------------------------------------------------------------------------- 1 | /* jslint node:true */ 2 | 3 | /** 4 | * connecting to database, and returns a mongoose instance 5 | */ 6 | 7 | var mongoose = require('mongoose'); 8 | var config = require('config'); 9 | 10 | function database() { 11 | this.connectionOptions = process.env.DATABASE || 'mongodb://localhost:27017/course_mapper'; 12 | } 13 | 14 | database.prototype.connect = function () { 15 | return mongoose.connect(this.connectionOptions); 16 | }; 17 | 18 | var DB = new database(); 19 | var db = DB.connect(); 20 | 21 | mongoose.connection.on('error', function dbConnectionFailed(err) { 22 | console.log('Database error: %s', err); 23 | }).once('open', function dbConnectionOpened() { 24 | console.log('Database connected to "%s".', process.env.DATABASE); 25 | }); 26 | 27 | module.exports = db; 28 | -------------------------------------------------------------------------------- /libs/core/handleUpload.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs-extra'); 2 | var debug = require('debug')('cm:server'); 3 | 4 | var handleUpload = function(file, destination, overwrite){ 5 | if(!overwrite) 6 | overwrite = false; 7 | 8 | fs.move(file.path, destination, {clobber:overwrite} , function (err) { 9 | if (err) return debug(err); 10 | debug("success moved file!"); 11 | }); 12 | }; 13 | 14 | module.exports = handleUpload; -------------------------------------------------------------------------------- /libs/core/sessionHelper.js: -------------------------------------------------------------------------------- 1 | var sessionHelper = { 2 | /** 3 | * check for user logged in for API uses 4 | * 5 | * only accepting 1 level deep of array 6 | * 7 | * @param req 8 | * @param res 9 | * @param next 10 | */ 11 | requireAuthentication: function (req, res, next) { 12 | if (!req.user) { 13 | res.status(401).send('Unauthorized'); 14 | } 15 | else { 16 | next(); 17 | } 18 | } 19 | }; 20 | 21 | module.exports = sessionHelper; -------------------------------------------------------------------------------- /misc/admin.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ### 5 | backdoor to admin panel 6 | ----------------------- 7 | 8 | localhost:3000/accounts/createAdmin/[username] 9 | e.g: 10 | 11 | make sure it is a new user 12 | localhost:3000/accounts/createAdmin/zuhra 13 | than login using 14 | username: zuhra 15 | password: 1 16 | 17 | once logged in, you can see link "Admin Panel" on your profile page. 18 | click, it will go to 19 | http://localhost:3000/cm-admin 20 | 21 | ### category, tag, course management 22 | in top menu: 23 | manage -> categories 24 | 25 | on this screen, you can add child category. 26 | if you click on a category, you will go to its detail, in which you can add courses, and tags. -------------------------------------------------------------------------------- /misc/create_db_scripts.txt: -------------------------------------------------------------------------------- 1 | // start without auth to add admin user 2 | mongod --noauth --dbpath data 3 | 4 | // connect with client 5 | mongo 6 | 7 | db.createUser( 8 | { 9 | user: "root", 10 | pwd: "1", 11 | roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] 12 | } 13 | ) 14 | 15 | use course_mapper 16 | 17 | db.createUser( 18 | { 19 | user: "rpl", 20 | pwd: "1", 21 | roles: [ { role: "readWrite", db: "course_mapper" } ] 22 | } 23 | ) 24 | 25 | use course_mapper_test 26 | 27 | db.createUser( 28 | { 29 | user: "rpl", 30 | pwd: "1", 31 | roles: [ { role: "readWrite", db: "course_mapper_test" } ] 32 | } 33 | ) 34 | 35 | // start with auth on 36 | mongod --dbpath data 37 | 38 | //connect to db 39 | mongo --port 27017 -u rpl -p 1 course_mapper -------------------------------------------------------------------------------- /modules/applications/content-node-detail/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Node Analytics", 3 | "widgets": [ 4 | { 5 | "name": "Node Detail", 6 | "location": "topic-icon-analytics", 7 | "description": "small details about this node", 8 | "entryPoint": "/content-node-detail/node-detail.js", 9 | "icon": "/img/appPlaceholder.png", 10 | "runOn": "server" 11 | }, 12 | { 13 | "name": "Node Icon Stats", 14 | "location": "topic-icon-analytics", 15 | "description": "analytic icons in node topic", 16 | "entryPoint": "/content-node-detail/icon-analytics.js", 17 | "icon":"/img/appPlaceholder.png", 18 | "runOn": "server" 19 | } 20 | ] 21 | } -------------------------------------------------------------------------------- /modules/applications/course-analytics/category-home-createdDate.js: -------------------------------------------------------------------------------- 1 | var appRoot = require('app-root-path'); 2 | //var mongoose = require('mongoose'); 3 | var moment = require ('moment'); 4 | var Categories = require(appRoot + '/modules/catalogs/categories.js'); 5 | var async = require('asyncawait/async'); 6 | var await = require('asyncawait/await'); 7 | 8 | function CatCreatedDate(){ 9 | } 10 | 11 | CatCreatedDate.prototype.init = function(params){ 12 | this.slug = params.slug; 13 | }; 14 | 15 | CatCreatedDate.prototype.run = async ( function(){ 16 | var self = this; 17 | 18 | var result = await( Categories.findOne({ 19 | slug: self.slug 20 | }).exec()); 21 | 22 | self.result = result; 23 | } ); 24 | 25 | 26 | CatCreatedDate.prototype.render = function(){ 27 | 28 | var momentDate = moment(this.result.dateAdded).format('MMMM Do YYYY'); 29 | 30 | 31 | return '
Created: ' + momentDate + '
' ; 32 | }; 33 | 34 | module.exports = CatCreatedDate; 35 | -------------------------------------------------------------------------------- /modules/applications/course-analytics/course-list-createdDate.js: -------------------------------------------------------------------------------- 1 | var appRoot = require('app-root-path'); 2 | var mongoose = require('mongoose'); 3 | var moment = require ('moment'); 4 | var Courses = require(appRoot + '/modules/catalogs/courses.js'); 5 | var async = require('asyncawait/async'); 6 | var await = require('asyncawait/await'); 7 | 8 | function CourseListDateAdded(){ 9 | } 10 | 11 | CourseListDateAdded.prototype.init = function(params){ 12 | this._id = mongoose.Types.ObjectId(params.cid); 13 | }; 14 | 15 | CourseListDateAdded.prototype.run = async ( function(){ 16 | var self = this; 17 | 18 | var result = await( Courses.findOne({ 19 | _id: self._id 20 | }).exec()); 21 | 22 | self.result = result; 23 | } ); 24 | 25 | CourseListDateAdded.prototype.render = function(){ 26 | 27 | var momentDate = moment(this.result.dateAdded).format('MMMM Do YYYY'); 28 | return ' Created On: ' + momentDate + '
'; 29 | }; 30 | 31 | module.exports = CourseListDateAdded; 32 | -------------------------------------------------------------------------------- /modules/applications/course-analytics/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * your application logic goes here 4 | * 5 | */ -------------------------------------------------------------------------------- /modules/applications/links-background/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Links Background Service", 3 | "widgets": [ 4 | { 5 | "name": "Vote Aggregator", 6 | "location": "background-plugin", 7 | "description": "-", 8 | "entryPoint": "-", 9 | "icon": "/img/appPlaceholder.png", 10 | "runOn": "server" 11 | } 12 | ] 13 | } -------------------------------------------------------------------------------- /modules/applications/my-course/models/myActivityStatus.model.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose'); 2 | 3 | var myActivityStatusSchema = new mongoose.Schema(); 4 | myActivityStatusSchema.set('usePushEach', true); 5 | 6 | myActivityStatusSchema.add({ 7 | userId: { 8 | type: mongoose.Schema.Types.ObjectId, 9 | ref: 'users' 10 | }, 11 | 12 | courseId: { 13 | type: mongoose.Schema.Types.ObjectId, 14 | ref: 'courses' 15 | }, 16 | 17 | nodeId: { 18 | type: mongoose.Schema.Types.ObjectId, 19 | ref: 'treeNodes' 20 | }, 21 | 22 | resourceId: { 23 | type: mongoose.Schema.Types.ObjectId, 24 | ref: 'resources' 25 | }, 26 | 27 | type: {type: String}, 28 | 29 | isDeleted: Boolean 30 | }); 31 | 32 | 33 | 34 | 35 | var myActivityStatus = mongoose.model('my-course-myActivityStatus', myActivityStatusSchema); 36 | 37 | module.exports = myActivityStatus; -------------------------------------------------------------------------------- /modules/applications/my-course/models/myCreatedNodes.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose'); 2 | 3 | var myCreatedNodesSchema = new mongoose.Schema(); 4 | myCreatedNodesSchema.set('usePushEach', true); 5 | 6 | myCreatedNodesSchema.add({ 7 | userId: { 8 | type: mongoose.Schema.Types.ObjectId, 9 | ref: 'categories' 10 | }, 11 | 12 | nodeType: { type:String }, 13 | 14 | treeNodeIds:[{ 15 | type: mongoose.Schema.Types.ObjectId, 16 | ref: 'treeNodes' 17 | }], 18 | 19 | dateAdded: { type: Date }, 20 | dateUpdated: { type: Date } 21 | }); 22 | 23 | 24 | 25 | 26 | var myCreatedNodes = mongoose.model('my-course-myCreatedNodes', myCreatedNodesSchema); 27 | 28 | module.exports = myCreatedNodes; -------------------------------------------------------------------------------- /modules/applications/my-course/models/myDiscussionStatus.model.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose'); 2 | 3 | var myDiscussionStatusSchema = new mongoose.Schema(); 4 | myDiscussionStatusSchema.set('usePushEach', true); 5 | 6 | myDiscussionStatusSchema.add({ 7 | userId: { 8 | type: mongoose.Schema.Types.ObjectId, 9 | ref: 'users' 10 | }, 11 | 12 | courseId: { 13 | type: mongoose.Schema.Types.ObjectId, 14 | ref: 'courses' 15 | }, 16 | 17 | discussionId: { 18 | type: mongoose.Schema.Types.ObjectId 19 | }, 20 | 21 | type: {type: String}, 22 | 23 | isDeleted: Boolean 24 | }); 25 | 26 | 27 | var myDiscussionStatus = mongoose.model('my-course-myDiscussionStatus', myDiscussionStatusSchema); 28 | 29 | module.exports = myDiscussionStatus; -------------------------------------------------------------------------------- /modules/applications/my-course/myPDFStatus.js: -------------------------------------------------------------------------------- 1 | var config = require('config'); 2 | var mongoose = require('mongoose'); 3 | var debug = require('debug')('cm:db'); 4 | var appRoot = require('app-root-path'); 5 | //var Courses = require('../../catalogs/courses.js'); 6 | var handleUpload = require(appRoot + '/libs/core/handleUpload.js'); 7 | var helper = require(appRoot + '/libs/core/generalLibs.js'); 8 | var MyPdfStatus = require('./models/myPDFStatus.js'); 9 | 10 | function pdfStatus(){ 11 | 12 | }; 13 | 14 | //get created course for a user from courses 15 | pdfStatus.prototype.getPdfStatus = function (error, params, done) { 16 | if (!helper.checkRequiredParams(params, ['userId'], error)) { 17 | return; 18 | } 19 | 20 | var user = {userId: params.userId}; 21 | 22 | MyPdfStatus.find(user).populate('nodeId').populate('courseId', '-description').exec(function (err, res){ 23 | if (err) error (err); 24 | else 25 | done(res); 26 | }); 27 | }; 28 | 29 | module.exports = pdfStatus; 30 | 31 | -------------------------------------------------------------------------------- /modules/applications/my-course/myVideoStatus.controller.js: -------------------------------------------------------------------------------- 1 | var config = require('config'); 2 | var mongoose = require('mongoose'); 3 | var debug = require('debug')('cm:db'); 4 | var appRoot = require('app-root-path'); 5 | //var Courses = require('../../catalogs/courses.js'); 6 | var handleUpload = require(appRoot + '/libs/core/handleUpload.js'); 7 | var helper = require(appRoot + '/libs/core/generalLibs.js'); 8 | var MyVideoStatus = require('./models/myVideoStatus.model.js'); 9 | 10 | function videoStatus(){ 11 | 12 | } 13 | 14 | //get created course for a user from courses 15 | videoStatus.prototype.getVideoStatus = function (error, params, done) { 16 | if (!helper.checkRequiredParams(params, ['userId'], error)) { 17 | return; 18 | } 19 | 20 | var user = {userId: params.userId}; 21 | 22 | MyVideoStatus.find(user).populate('nodeId').populate('courseId', '-description').exec(function (err, res){ 23 | if (err) error (err); 24 | else 25 | done(res); 26 | }); 27 | }; 28 | 29 | module.exports = videoStatus; -------------------------------------------------------------------------------- /modules/applications/newsfeed/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Newsfeed", 3 | "widgets": [ 4 | { 5 | "name": "Newsfeed Aggregator", 6 | "location": "background-plugin", 7 | "description": "-", 8 | "entryPoint": "-", 9 | "icon": "/img/appPlaceholder.png", 10 | "runOn": "server" 11 | } 12 | ] 13 | } -------------------------------------------------------------------------------- /modules/applications/newsfeed/models/newsfeed.model.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose'); 2 | 3 | var newsfeedSchema = new mongoose.Schema({ 4 | userId: {type: mongoose.Schema.Types.ObjectId, ref: 'users'}, 5 | actionSubjectIds: {type: mongoose.Schema.Types.ObjectId}, 6 | courseId: {type: mongoose.Schema.Types.ObjectId, ref: 'courses'}, 7 | nodeId: {type: mongoose.Schema.Types.ObjectId, ref: 'treeNodes'}, 8 | contentName: {type: String}, 9 | actionSubject: {type: String}, 10 | actionType: {type: String}, 11 | actionName: {type: String}, 12 | dateAdded: {type: Date}, 13 | isSubjectDeleted: {type: Boolean, default: false} 14 | }, { 15 | usePushEach: true 16 | } 17 | ); 18 | 19 | module.exports = mongoose.model('newsfeed', newsfeedSchema); -------------------------------------------------------------------------------- /modules/applications/node-analytics/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Node Analytics", 3 | "widgets":[ 4 | { 5 | "name": "Node Activity History", 6 | "location": "node-analytics", 7 | "description": "Analytics bar graph to show the history of activity in a node", 8 | "entryPoint": "/node-analytics/na-node-history-analytics", 9 | "widgetJavascript": ["na-history-analytics.js"], 10 | "width": 6, 11 | "height":1, 12 | "icon":"/img/appPlaceholder.png" 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /modules/applications/top-content/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "top content", 3 | "widgets": [ 4 | { 5 | "name": "Top Content Aggregator", 6 | "location": "background-plugin", 7 | "description": "-", 8 | "entryPoint": "-", 9 | "icon": "/img/appPlaceholder.png", 10 | "runOn": "server" 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /modules/applications/top-content/models/topContent.model.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose'); 2 | 3 | var topContentSchema = new mongoose.Schema(); 4 | topContentSchema.set('usePushEach', true); 5 | 6 | topContentSchema.add({ 7 | 8 | courseId: { 9 | type: mongoose.Schema.Types.ObjectId, 10 | ref: 'courses' 11 | }, 12 | nodeId: { 13 | type: mongoose.Schema.Types.ObjectId, 14 | ref: 'treeNodes' 15 | }, 16 | contentId : { 17 | type: mongoose.Schema.Types.ObjectId 18 | }, 19 | contentName : {type: String}, 20 | contentType : {type: String}, 21 | countType : { type: String}, 22 | count : {type: Number}, 23 | isDeleted: Boolean 24 | }); 25 | 26 | var topContentAgg = mongoose.model('topContent', topContentSchema); 27 | 28 | module.exports = topContentAgg; -------------------------------------------------------------------------------- /modules/applications/top-contributor/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "top contributor ", 3 | "widgets": [ 4 | { 5 | "name": "Top Contributor Aggregator", 6 | "location": "background-plugin", 7 | "description": "--", 8 | "entryPoint": "--", 9 | "icon": "/img/appPlaceholder.png", 10 | "runOn": "server" 11 | } 12 | ] 13 | } -------------------------------------------------------------------------------- /modules/applications/top-contributor/models/topContributor.model.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose'); 2 | 3 | var topContributorSchema = new mongoose.Schema(); 4 | topContributorSchema.set('usePushEach', true); 5 | 6 | topContributorSchema.add({ 7 | 8 | userId: { 9 | type:mongoose.Schema.Types.ObjectId, 10 | ref: 'users' 11 | }, 12 | courseId: { 13 | type: mongoose.Schema.Types.ObjectId, 14 | ref: 'courses' 15 | }, 16 | countCourseActivity : {type: Number}, 17 | countNodeActivity : {type:Number}, 18 | totalCount : {type:Number}, 19 | isEnrolled : Boolean 20 | }); 21 | 22 | var topContributorAgg = mongoose.model('topContributor', topContributorSchema); 23 | 24 | module.exports = topContributorAgg; -------------------------------------------------------------------------------- /modules/applications/ui-widgets/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "UI-Widgets", 3 | "widgets": [ 4 | { 5 | "name": "HTML Widget", 6 | "location": "course-preview", 7 | "description": "Write HTML formatted content", 8 | "entryPoint": "/ui-widgets/html-sidebar", 9 | "widgetJavascript": [ 10 | "html-widgets/html-sidebar.js" 11 | ], 12 | "width": 12, 13 | "hasConfigButton": true, 14 | "height": 1, 15 | "icon": "/img/appPlaceholder.png", 16 | "controller": "HtmlSidebarToolController" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /modules/catalogs/categoryRecommendation.model.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose'); 2 | 3 | var categoryRecommend = new mongoose.Schema({ 4 | name: { 5 | type: String, 6 | required: true 7 | }, 8 | user: { 9 | type: mongoose.Schema.Types.ObjectId, 10 | required: true, 11 | ref:'users' 12 | }, 13 | description: {type: String}, 14 | dateAdded: {type: Date}, 15 | dateUpdated: {type: Date} 16 | }, { 17 | usePushEach: true 18 | }); 19 | 20 | 21 | categoryRecommend.pre('save', function (next) { 22 | var now = new Date(); 23 | 24 | if (!this.dateAdded) { 25 | this.dateAdded = now; 26 | } 27 | 28 | this.dateUpdated = now; 29 | 30 | next(); 31 | }); 32 | 33 | var catRec = mongoose.model('categoryRecommends', categoryRecommend); 34 | 35 | module.exports = catRec; -------------------------------------------------------------------------------- /modules/catalogs/courseTags.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose'); 2 | var slug = require('slug'); 3 | 4 | var tagSchema = new mongoose.Schema({ 5 | name: { 6 | type: String, 7 | unique: true, 8 | required: true 9 | }, 10 | 11 | slug: { 12 | type: String, 13 | unique: true, 14 | required: true 15 | }, 16 | 17 | totalRelation: {type: Number, default: 0}, 18 | dateAdded: { type: Date }, 19 | dateUpdated: { type: Date } 20 | }, { 21 | usePushEach: true 22 | }); 23 | 24 | tagSchema.methods.setSlug = function(tagString) { 25 | this.slug = slug(tagString); 26 | }; 27 | 28 | tagSchema.pre('save', function(next){ 29 | var now = new Date(); 30 | 31 | if ( !this.dateAdded ) { 32 | this.dateAdded = now; 33 | } 34 | 35 | this.dateUpdated = now; 36 | next(); 37 | }); 38 | 39 | var CourseTag = mongoose.model('courseTags', tagSchema); 40 | 41 | module.exports = CourseTag; -------------------------------------------------------------------------------- /modules/catalogs/userCourses.js: -------------------------------------------------------------------------------- 1 | /** 2 | * courses that are followed by a user 3 | */ 4 | 5 | var mongoose = require('mongoose'); 6 | 7 | var userCoursesSchema = new mongoose.Schema({ 8 | user: {type: mongoose.Schema.Types.ObjectId, ref: 'users'}, 9 | course: {type: mongoose.Schema.Types.ObjectId, ref: 'courses'}, 10 | isEnrolled: Boolean, 11 | 12 | dateAdded: {type: Date}, 13 | dateUpdated: {type: Date} 14 | }, { 15 | usePushEach: true 16 | }); 17 | 18 | userCoursesSchema.index({user: 1, course: 1}, {unique: true}); 19 | 20 | userCoursesSchema.pre('save', function (next) { 21 | var now = new Date(); 22 | 23 | if (!this.dateAdded) { 24 | this.dateAdded = now; 25 | } 26 | 27 | this.dateUpdated = now; 28 | next(); 29 | }); 30 | 31 | userCoursesSchema.pre('update', function (next) { 32 | this.dateUpdated = new Date(); 33 | next(); 34 | }); 35 | 36 | var UserCoursesSchema = mongoose.model('userCourses', userCoursesSchema); 37 | 38 | module.exports = UserCoursesSchema; -------------------------------------------------------------------------------- /modules/favorites/favorite-courses.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var mongoose = require('mongoose'); 4 | 5 | var FavoriteCoursesSchema = new mongoose.Schema({ 6 | user: {type: mongoose.Schema.Types.ObjectId, ref: 'users'}, 7 | course: {type: mongoose.Schema.Types.ObjectId, ref: 'courses'}, 8 | isFavorite: Boolean, 9 | dateAdded: {type: Date}, 10 | dateUpdated: {type: Date} 11 | }, { 12 | usePushEach: true 13 | }); 14 | 15 | FavoriteCoursesSchema.index({user: 1, course: 1}, {unique: true}); 16 | 17 | FavoriteCoursesSchema.pre('save', function (next) { 18 | var now = new Date(); 19 | if (!this.dateAdded) { 20 | this.dateAdded = now; 21 | } 22 | this.dateUpdated = now; 23 | next(); 24 | }); 25 | 26 | FavoriteCoursesSchema.pre('update', function (next) { 27 | this.dateUpdated = new Date(); 28 | next(); 29 | }); 30 | 31 | module.exports = mongoose.model('favoriteCourses', FavoriteCoursesSchema); -------------------------------------------------------------------------------- /modules/learningHub/Scraper/pdf.js: -------------------------------------------------------------------------------- 1 | 2 | var google_viewer="https://drive.google.com/viewerng/viewer?url="; 3 | var meta = require('metatags'); 4 | 5 | function Pdf(){} 6 | 7 | var pdf_result={ 8 | 'type':"pdf", 9 | 'url':"", 10 | 'title':"" 11 | }; 12 | 13 | Pdf.prototype.getInfo=function(url,callback){ 14 | pdf_result.url=google_viewer + encodeURI(url) + '&embedded=true'; 15 | meta(pdf_result.url, function(err, data){ 16 | if(err){ 17 | callback(err,null); 18 | }else{ 19 | pdf_result.title=data.title; 20 | callback(pdf_result); 21 | } 22 | }); 23 | 24 | }; 25 | 26 | module.exports=new Pdf(); -------------------------------------------------------------------------------- /modules/learningHub/Scraper/safeBrowsing.js: -------------------------------------------------------------------------------- 1 | 2 | var https=require("https"); 3 | var sbCredentials={ 4 | 'API_kEY':"AIzaSyB_hxZ5n5YRD9nR7gCZUgscaDDv0R3N-bU" 5 | }; 6 | /*SafeBrowsing lookup is used to check whether the submitted URl causes Phising, Malware or any unrelated software downloads*/ 7 | function SafeBrowsing(){} 8 | //method used the API to get the results of the URL 9 | SafeBrowsing.prototype.checkUrl=function(url,callback){ 10 | https.get(preparesbUrl(url),function(response){ 11 | 12 | var code=response.statusCode; 13 | if(code==200){ 14 | callback(false); 15 | }else{ 16 | callback(true); 17 | } 18 | }) 19 | }; 20 | //This method is used to prepare the submitted URL to get the results from API and compile to RFC 1738 21 | function preparesbUrl(url){ 22 | var encodedUrl=encodeURIComponent(url); 23 | return "https://sb-ssl.google.com/safebrowsing/api/lookup?client=LearningHub&key="+sbCredentials.API_kEY+"&appver=1.5.2&pver=3.1&url="+encodedUrl; 24 | } 25 | module.exports=new SafeBrowsing(); 26 | 27 | 28 | -------------------------------------------------------------------------------- /modules/oauth2/models/accessTokens.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose'); 2 | 3 | // Define our token schema 4 | var TokenSchema = new mongoose.Schema({ 5 | token: {type: String, required: true}, 6 | clientId: {type: String, required: true}, 7 | userId: { 8 | type: mongoose.Schema.Types.ObjectId, 9 | required: true, 10 | ref: 'users' 11 | } 12 | }, { 13 | usePushEach: true 14 | }); 15 | 16 | // Export the Mongoose model 17 | module.exports = mongoose.model('AccessTokens', TokenSchema); -------------------------------------------------------------------------------- /modules/oauth2/models/oauthClients.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose'); 2 | 3 | // Define our client schema 4 | var ClientSchema = new mongoose.Schema({ 5 | name: {type: String, unique: true, required: true}, 6 | clientId: {type: String, required: true}, 7 | clientSecret: {type: String, required: true}, 8 | description: {type: String, required: true}, 9 | callbackUrl: {type: String}, 10 | userId: {type: mongoose.Schema.Types.ObjectId, required: true, ref: 'users'} 11 | }, { 12 | usePushEach: true 13 | }); 14 | 15 | // Export the Mongoose model 16 | module.exports = mongoose.model('OauthClients', ClientSchema); -------------------------------------------------------------------------------- /modules/oauth2/models/oauthSecrets.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose'); 2 | 3 | // Define our token schema 4 | var OauthSchema = new mongoose.Schema({ 5 | oauthSecret: {type: String, required: true}, 6 | redirectUri: {type: String, required: true}, 7 | userId: {type: mongoose.Schema.Types.ObjectId, required: true, ref: 'users'}, 8 | clientId: {type: String, required: true} 9 | }, { 10 | usePushEach: true 11 | }); 12 | 13 | // Export the Mongoose model 14 | module.exports = mongoose.model('OauthSecrets', OauthSchema); 15 | -------------------------------------------------------------------------------- /modules/peerAssessment/models/rubric.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose'); 2 | var appRoot = require('app-root-path'); 3 | 4 | var rubricSchema = new mongoose.Schema({ 5 | title: { 6 | type: String, 7 | required: true 8 | }, 9 | description: { 10 | type: String, 11 | required: true 12 | }, 13 | createdBy: { type: mongoose.Schema.Types.ObjectId, ref: 'users', required: true }, 14 | courseId: { type: mongoose.Schema.Types.ObjectId, ref: 'courses', required: true }, 15 | dateAdded: { type: Date }, 16 | dateUpdated: { type: Date } 17 | }, { 18 | usePushEach: true 19 | }); 20 | 21 | rubricSchema.pre('save', function(next){ 22 | var now = new Date(); 23 | 24 | if ( !this.dateAdded ) { 25 | this.dateAdded = now; 26 | } 27 | 28 | this.dateUpdated = now; 29 | 30 | next() 31 | }); 32 | 33 | var Rubric = mongoose.model('rubrics', rubricSchema); 34 | 35 | module.exports = Rubric; -------------------------------------------------------------------------------- /modules/tabs/learningHub/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "orderNo": 3, 3 | "name": "hub", 4 | "displayName": "External Resources", 5 | "location": "contentNode", 6 | "description": "to collaboratively aggregate and filter external learning resources", 7 | "isDefaultActivated": true, 8 | "icon": "ionicons ion-paperclip", 9 | "ngShow": "isEnrolled || isOwner || isManager", 10 | "hasJsFiles": true 11 | } -------------------------------------------------------------------------------- /modules/tabs/models/tabsActive.schema.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose'); 2 | 3 | var tabActiveSchema = new mongoose.Schema({ 4 | orderNo: {type: Number}, 5 | location: {type: String}, 6 | tabId: {type: mongoose.Schema.Types.ObjectId, ref: 'tabs'}, 7 | courseId: {type: mongoose.Schema.Types.ObjectId, ref: 'courses'}, 8 | 9 | isActive: {type: Boolean, required: true, default: false}, 10 | 11 | dateAdded: {type: Date}, 12 | dateUpdated: {type: Date} 13 | }, { 14 | usePushEach: true 15 | }); 16 | 17 | tabActiveSchema.pre('save', function (next) { 18 | var now = new Date(); 19 | this.dateUpdated = now; 20 | if (!this.dateAdded) { 21 | this.dateAdded = now; 22 | } 23 | next(); 24 | }); 25 | 26 | tabActiveSchema.pre('update', function (next) { 27 | this.dateUpdated = new Date(); 28 | next(); 29 | }); 30 | 31 | var tab = mongoose.model('tabsActive', tabActiveSchema); 32 | 33 | module.exports = tab; 34 | -------------------------------------------------------------------------------- /modules/tabs/newsfeedUpdate/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "orderNo": 5, 3 | "displayName": "Newsfeed", 4 | "location": "course", 5 | "description": "to show updates on every actions on this course", 6 | "isDefaultActivated": true, 7 | "icon": "ionicons ion-clock", 8 | "ngShow": "isEnrolled || isOwner || isManager || isAdmin", 9 | "hasJsFiles": true 10 | } -------------------------------------------------------------------------------- /modules/tabs/nodeNewsFeedUpdate/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "orderNo": 5, 3 | "displayName": "Newsfeed", 4 | "location": "contentNode", 5 | "description": "to show updates on every actions on this node", 6 | "isDefaultActivated": true, 7 | "icon": "ionicons ion-clock", 8 | "ngShow": "isEnrolled || isOwner || isManager || isAdmin", 9 | "hasJsFiles": true 10 | } -------------------------------------------------------------------------------- /modules/tabs/peerAssessment/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "orderNo": 6, 3 | "name": "peerAssessment", 4 | "displayName": "Peer Reviews", 5 | "location": "course", 6 | "description": "Peer Reviews module", 7 | "isDefaultActivated": false, 8 | "icon": "ionicons ion-ios-people-outline", 9 | "ngShow": "isEnrolled || isOwner || isManager || isAdmin" 10 | } -------------------------------------------------------------------------------- /modules/trees/node-visibility.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose'); 2 | 3 | var nodeVisibilitySchema = new mongoose.Schema({ 4 | user: {type: mongoose.Schema.Types.ObjectId, ref: 'users'}, 5 | node: {type: mongoose.Schema.Types.ObjectId, ref: 'treeNodes'}, 6 | isHidden: {type: Boolean, default: false}, 7 | createdAt: {type: Date}, 8 | updatedAt: {type: Date} 9 | }, { 10 | usePushEach: true 11 | }); 12 | 13 | nodeVisibilitySchema.pre('save', function (next) { 14 | var now = new Date(); 15 | if (!this.createdAt) { 16 | this.createdAt = now; 17 | } 18 | this.updatedAt = now; 19 | next(); 20 | }); 21 | 22 | nodeVisibilitySchema.pre('update', function (next) { 23 | this.updatedAt = new Date(); 24 | next(); 25 | }); 26 | 27 | module.exports = mongoose.model('nodeVisibility', nodeVisibilitySchema); -------------------------------------------------------------------------------- /modules/trees/resources.js: -------------------------------------------------------------------------------- 1 | /* 2 | resources 3 | type 4 | link 5 | dateAdded 6 | dateUpdated 7 | createdBy 8 | treeNodeId*/ 9 | 10 | var mongoose = require('mongoose'); 11 | 12 | var resourcesSchema = new mongoose.Schema({ 13 | treeNodeId: {type: mongoose.Schema.Types.ObjectId, ref: 'treeNodes', required: true}, 14 | courseId: {type: mongoose.Schema.Types.ObjectId, ref: 'courses', required: true}, 15 | //type{'pdf', 'video'} 16 | type: {type: String, required: true}, 17 | link: {type: String}, 18 | isDeleted: {type: Boolean, required: true, default: false}, 19 | createdBy: {type: mongoose.Schema.Types.ObjectId, ref: 'users', required: true}, 20 | dateAdded: {type: Date}, 21 | dateUpdated: {type: Date} 22 | }, { 23 | usePushEach: true 24 | }); 25 | 26 | resourcesSchema.pre('save', function (next) { 27 | var now = new Date(); 28 | if (!this.dateAdded) { 29 | this.dateAdded = now; 30 | } 31 | this.dateUpdated = now; 32 | next(); 33 | }); 34 | 35 | var tn = mongoose.model('resources', resourcesSchema); 36 | 37 | module.exports = tn; -------------------------------------------------------------------------------- /modules/votes/models/votes.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose'); 2 | var slug = require('slug'); 3 | 4 | var votesSchema = new mongoose.Schema(); 5 | votesSchema.set('usePushEach', true); 6 | 7 | votesSchema.add({ 8 | voteType: { type: String }, 9 | voteTypeId: { type: mongoose.Schema.Types.ObjectId}, 10 | voteValue: { type: Number }, 11 | createdBy: { type: mongoose.Schema.Types.ObjectId, ref: 'users'}, 12 | dateAdded: { type: Date }, 13 | dateUpdated: { type: Date } 14 | }); 15 | 16 | votesSchema.pre('save', function(next){ 17 | var now = new Date(); 18 | this.dateUpdated = now; 19 | if ( !this.dateAdded ) { 20 | this.dateAdded = now; 21 | } 22 | next(); 23 | }); 24 | 25 | votesSchema.pre('update', function(next){ 26 | this.dateUpdated = new Date(); 27 | next(); 28 | }); 29 | 30 | var disc = mongoose.model('votes', votesSchema); 31 | 32 | module.exports = disc; 33 | -------------------------------------------------------------------------------- /public/angular-peerassessment/peerAssessment.controller.js: -------------------------------------------------------------------------------- 1 | // Didn't go with approach as I might need some thing from the course service etc. For a separate application this approach will be quite beneficial but I will come to this later on -------------------------------------------------------------------------------- /public/chartjs/angular-chart.min.css: -------------------------------------------------------------------------------- 1 | .chart-legend,.bar-legend,.line-legend,.pie-legend,.radar-legend,.polararea-legend,.doughnut-legend{list-style-type:none;margin-top:5px;text-align:center;-webkit-padding-start:0;-moz-padding-start:0;padding-left:0}.chart-legend li,.bar-legend li,.line-legend li,.pie-legend li,.radar-legend li,.polararea-legend li,.doughnut-legend li{display:inline-block;white-space:nowrap;position:relative;margin-bottom:4px;border-radius:5px;padding:2px 8px 2px 28px;font-size:smaller;cursor:default}.chart-legend li span,.bar-legend li span,.line-legend li span,.pie-legend li span,.radar-legend li span,.polararea-legend li span,.doughnut-legend li span{display:block;position:absolute;left:0;top:0;width:20px;height:20px;border-radius:5px} 2 | -------------------------------------------------------------------------------- /public/course-analytics/.sass-cache/8be198ad3a943078dbba7c136ecf16db7658a753/user_profile.scssc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/course-analytics/.sass-cache/8be198ad3a943078dbba7c136ecf16db7658a753/user_profile.scssc -------------------------------------------------------------------------------- /public/course-analytics/ca-enrolled-users.js: -------------------------------------------------------------------------------- 1 | angular.module('EnrolledUsers', ['']) 2 | .controller('UserListEnrolledController', function($scope, $http, $location) { 3 | $scope.HeaderTitle = "User Name"; 4 | 5 | var loc = $location.path(); 6 | var parseLoc = loc.replace ('/cid/', ''); 7 | //alert(parseLoc); 8 | if (parseLoc) { 9 | 10 | $http.get('/api/course-analytics/user-list/' + parseLoc).success(function (data) { 11 | $scope.userList = data.courses; 12 | 13 | }); 14 | } else 15 | console.log('cannot get courseId in analytic widget'); 16 | 17 | }); -------------------------------------------------------------------------------- /public/course-analytics/ca-preview-top-contributors.js: -------------------------------------------------------------------------------- 1 | 2 | angular.module('TOPANALYTICS', []) 3 | .controller("TopContribController", ['$scope', function ($scope) { 4 | 5 | 6 | 7 | }]); -------------------------------------------------------------------------------- /public/course-analytics/ca-statistics.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/course-analytics/ca-statistics.js -------------------------------------------------------------------------------- /public/course-analytics/ca-top-contributor.js: -------------------------------------------------------------------------------- 1 | angular.module('TopContributor', ['']) 2 | .controller('TopContributorController', function($scope, $http, $location) { 3 | $scope.HeaderTitle = "Top Contributor"; 4 | 5 | var loc = $location.path(); 6 | var parseLoc = loc.replace ('/cid/', ''); 7 | //alert(parseLoc); 8 | if (parseLoc) { 9 | 10 | $http.get('/api/course-analytics/top-contributor/user-list/' + parseLoc).success(function (data) { 11 | $scope.topContributor = data.topContributor; 12 | 13 | }); 14 | 15 | 16 | } else 17 | console.log('cannot get courseId in analytic widget'); 18 | 19 | }); -------------------------------------------------------------------------------- /public/course-analytics/img/arya.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/course-analytics/img/arya.png -------------------------------------------------------------------------------- /public/course-analytics/img/jon_snow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/course-analytics/img/jon_snow.png -------------------------------------------------------------------------------- /public/course-analytics/img/tyrion_lannister.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/course-analytics/img/tyrion_lannister.png -------------------------------------------------------------------------------- /public/course-analytics/user_profile.css: -------------------------------------------------------------------------------- 1 | /* line 5, user_profile.scss */ 2 | .grid-stack-item-content .box { 3 | border: 1px solid #eeeeee; 4 | border-top: 3px solid #d2d6de; 5 | } 6 | 7 | /* line 13, user_profile.scss */ 8 | .box-body-widget { 9 | border: 1px #d2d6de; 10 | /* 11 | li:hover { 12 | background: #eee; 13 | cursor: pointer; 14 | } 15 | */ 16 | } 17 | /* line 16, user_profile.scss */ 18 | .box-body-widget ul { 19 | margin: 0; 20 | padding: 0; 21 | list-style-type: none; 22 | } 23 | /* line 23, user_profile.scss */ 24 | .box-body-widget h5 { 25 | font-weight: bold; 26 | margin-bottom: 1px; 27 | } 28 | /* line 30, user_profile.scss */ 29 | .box-body-widget li { 30 | padding: 10px; 31 | overflow: auto; 32 | } 33 | /* line 35, user_profile.scss */ 34 | .box-body-widget li img { 35 | float: left; 36 | margin: 0 15px 0 0; 37 | } 38 | /* line 40, user_profile.scss */ 39 | .box-body-widget li p { 40 | margin-top: 3px; 41 | } 42 | /* line 44, user_profile.scss */ 43 | .box-body-widget li:nth-child(even) { 44 | background-color: #eeeeee; 45 | } 46 | -------------------------------------------------------------------------------- /public/course-analytics/user_profile.scss: -------------------------------------------------------------------------------- 1 | $grey: #D2D6DE; 2 | $light_grey: #EEEEEE; 3 | 4 | .grid-stack-item-content { 5 | .box { 6 | 7 | border: 1px solid $light_grey; 8 | border-top: 3px solid $grey; 9 | } 10 | 11 | } 12 | 13 | //for my-course widget box 14 | .box-body-widget { 15 | 16 | border: 1px $grey; 17 | ul { 18 | margin: 0; 19 | padding:0; 20 | list-style-type: none; 21 | 22 | } 23 | 24 | h5 { 25 | font-weight: bold; 26 | margin-bottom: 1px; 27 | } 28 | 29 | 30 | 31 | li { 32 | padding: 10px; 33 | overflow: auto; 34 | //border-bottom: 1px solid $grey; 35 | 36 | img { 37 | float: left; 38 | margin: 0 15px 0 0; 39 | } 40 | 41 | p { 42 | margin-top: 3px; 43 | } 44 | 45 | &:nth-child(even){ 46 | background-color: $light_grey; 47 | 48 | } 49 | 50 | } 51 | 52 | } 53 | 54 | //for course-analytics widget 55 | .cat-home-rating { 56 | color: green; 57 | 58 | } 59 | 60 | -------------------------------------------------------------------------------- /public/css/admin.css: -------------------------------------------------------------------------------- 1 | .admin-mobile.collapse { 2 | display: block !important 3 | } 4 | .pointer{ 5 | cursor: pointer; 6 | } -------------------------------------------------------------------------------- /public/css/global.css: -------------------------------------------------------------------------------- 1 | ::-webkit-scrollbar { 2 | width: 3px; 3 | } 4 | 5 | ::-webkit-scrollbar-track { 6 | -webkit-box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.3); 7 | } 8 | 9 | ::-webkit-scrollbar-thumb { 10 | background: #3c8dbc; 11 | } 12 | 13 | ::-webkit-scrollbar-thumb:window-inactive { 14 | background: rgba(60, 141, 188, 0.3); 15 | } 16 | -------------------------------------------------------------------------------- /public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/favicon.png -------------------------------------------------------------------------------- /public/img/_charta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/_charta.png -------------------------------------------------------------------------------- /public/img/_chartb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/_chartb.png -------------------------------------------------------------------------------- /public/img/admin-lte/fb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/admin-lte/fb.png -------------------------------------------------------------------------------- /public/img/admin-lte/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/admin-lte/logo.png -------------------------------------------------------------------------------- /public/img/admin-lte/playButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/admin-lte/playButton.png -------------------------------------------------------------------------------- /public/img/admin-lte/playButtonHover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/admin-lte/playButtonHover.png -------------------------------------------------------------------------------- /public/img/admin-lte/soco-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/admin-lte/soco-logo.png -------------------------------------------------------------------------------- /public/img/admin-lte/ude-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/admin-lte/ude-logo.png -------------------------------------------------------------------------------- /public/img/admin-lte/user2-160x160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/admin-lte/user2-160x160.png -------------------------------------------------------------------------------- /public/img/analytics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/analytics.png -------------------------------------------------------------------------------- /public/img/appPlaceholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/appPlaceholder.png -------------------------------------------------------------------------------- /public/img/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/bg.jpg -------------------------------------------------------------------------------- /public/img/category_placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/category_placeholder.png -------------------------------------------------------------------------------- /public/img/coursemap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/coursemap.png -------------------------------------------------------------------------------- /public/img/courses/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/courses/.keep -------------------------------------------------------------------------------- /public/img/courses_placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/courses_placeholder.png -------------------------------------------------------------------------------- /public/img/default-profile-picture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/default-profile-picture.png -------------------------------------------------------------------------------- /public/img/default-tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/default-tree.png -------------------------------------------------------------------------------- /public/img/footprint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/footprint.png -------------------------------------------------------------------------------- /public/img/pdf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/pdf.png -------------------------------------------------------------------------------- /public/img/search/category-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/search/category-new.png -------------------------------------------------------------------------------- /public/img/search/category.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/search/category.png -------------------------------------------------------------------------------- /public/img/search/contentNode-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/search/contentNode-new.png -------------------------------------------------------------------------------- /public/img/search/contentNode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/search/contentNode.png -------------------------------------------------------------------------------- /public/img/search/course-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/search/course-new.png -------------------------------------------------------------------------------- /public/img/search/course.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/search/course.png -------------------------------------------------------------------------------- /public/img/search/extResources-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/search/extResources-new.png -------------------------------------------------------------------------------- /public/img/search/icons8-pdf-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/search/icons8-pdf-40.png -------------------------------------------------------------------------------- /public/img/search/pdfAnnotation-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/search/pdfAnnotation-new.png -------------------------------------------------------------------------------- /public/img/search/pdfAnnotation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/search/pdfAnnotation.png -------------------------------------------------------------------------------- /public/img/search/progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/search/progress.png -------------------------------------------------------------------------------- /public/img/search/videoAnnotation-new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/search/videoAnnotation-new.png -------------------------------------------------------------------------------- /public/img/search/videoAnnotation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/search/videoAnnotation.png -------------------------------------------------------------------------------- /public/img/sliders/slider_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/sliders/slider_1.jpg -------------------------------------------------------------------------------- /public/img/sliders/slider_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/sliders/slider_2.jpg -------------------------------------------------------------------------------- /public/img/sliders/slider_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/sliders/slider_3.png -------------------------------------------------------------------------------- /public/img/tree/document.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/tree/document.png -------------------------------------------------------------------------------- /public/img/tree/folder-horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/tree/folder-horizontal.png -------------------------------------------------------------------------------- /public/img/tree/toggle-small-expand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/tree/toggle-small-expand.png -------------------------------------------------------------------------------- /public/img/tree/toggle-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/tree/toggle-small.png -------------------------------------------------------------------------------- /public/img/video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/img/video.png -------------------------------------------------------------------------------- /public/js/countmap/countmap.css: -------------------------------------------------------------------------------- 1 | #countmap { 2 | height: 9px; 3 | width: 100%; 4 | border-top: solid #000000 thin; 5 | position: relative; 6 | background: white; 7 | } -------------------------------------------------------------------------------- /public/js/heartbeat/video-pulse.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | function VideoPulse(params) { 4 | var pulseInterval = params.interval || 5000; 5 | var host = params.host; 6 | var videoId = params.videoId; 7 | var video = params.mediaElement; 8 | 9 | var data = { 10 | user: params.userId, 11 | key: videoId 12 | }; 13 | 14 | var signaller = null; 15 | 16 | this.start = function () { 17 | if (signaller) { 18 | return; 19 | } 20 | signaller = setInterval(beat, pulseInterval); 21 | }; 22 | 23 | this.stop = function () { 24 | if (signaller) { 25 | clearInterval(signaller); 26 | beat(); 27 | } 28 | }; 29 | 30 | var beat = function () { 31 | 32 | data.value = video.currentTime; // update pointer 33 | 34 | var request = new XMLHttpRequest(); 35 | var url = host + '/beats'; 36 | request.open('POST', url, true); 37 | request.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); 38 | request.send(JSON.stringify(data)); 39 | }; 40 | } -------------------------------------------------------------------------------- /public/js/video-annotations/a_va-module.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var videoAnnotationsModule = angular.module('VideoAnnotations', [ 4 | 'ngSanitize', 5 | 'ngRoute', 6 | 'com.2fdevs.videogular', 7 | 'com.2fdevs.videogular.plugins.controls', 8 | 'com.2fdevs.videogular.plugins.overlayplay', 9 | 'info.vietnamcode.nampnq.videogular.plugins.youtube', 10 | 'videogular.plugins.vimeo' 11 | ]); 12 | -------------------------------------------------------------------------------- /public/js/video-annotations/va-annotation/va-annotation.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | videoAnnotationsModule.directive('videoAnnotation', function () { 4 | return { 5 | scope: { 6 | source: '=' 7 | }, 8 | templateUrl: '/js/video-annotations/va-annotation/va-annotation.html', 9 | controller: 'VaController' 10 | }; 11 | }); -------------------------------------------------------------------------------- /public/js/video-annotations/va-widget/va-widget.js: -------------------------------------------------------------------------------- 1 | /*jslint node: true */ 2 | 'use strict'; 3 | 4 | videoAnnotationsModule.directive('vaWidget', 5 | function () { 6 | return { 7 | restruct: 'A', 8 | scope: { 9 | videoSource: '@', 10 | videoId: '@' 11 | }, 12 | templateUrl: '/js/video-annotations/va-widget/va-widget.html', 13 | controller: 'VaWidgetController' 14 | }; 15 | } 16 | ); 17 | -------------------------------------------------------------------------------- /public/js/video-annotations/vg-extensions/vg-controls.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | videoAnnotationsModule.directive("vgFootprint", function () { 4 | return { 5 | restrict: "E", 6 | require: "^videogular", 7 | template: "
" 8 | } 9 | } 10 | ); 11 | 12 | videoAnnotationsModule.directive("vgFootprintInfo", function () { 13 | return { 14 | restrict: "E", 15 | require: "^videogular", 16 | template: "
" 17 | } 18 | } 19 | ); -------------------------------------------------------------------------------- /public/learningHubTemplates/hubPostDelete.html: -------------------------------------------------------------------------------- 1 |
2 | 5 | 6 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | -------------------------------------------------------------------------------- /public/my-course/my-enrolled-courses.js: -------------------------------------------------------------------------------- 1 | angular.module('MyEnrolledCourses', ['']) 2 | .controller('CourseListEnrolledController', function($scope, $http) { 3 | $scope.headerTitle = "Course Name"; 4 | $http.get('/api/my-course').success(function (data) { 5 | $scope.courseEnrolled = data.courses.enrolled; 6 | $scope.courseEnrolledLength = data.courses.enrolled.length; 7 | //created courses data 8 | $scope.courseCreated = data.courses.created; 9 | $scope.courseCreatedLength = data.courses.created.length; 10 | }); 11 | }); -------------------------------------------------------------------------------- /public/my-course/my-following-courses.js: -------------------------------------------------------------------------------- 1 | /** 2 | * example of a separate module and controller for your widget. 3 | * the file name has to be the same as its folder name, which is saved in 4 | * the model "widgets" inside a key "application" 5 | * 6 | * the module and controller name is up to you 7 | * 8 | * this file will be "lazy loaded" by OCLazyLoad. 9 | * the load is done in widget.controller.js after the app is getting the user/owner installed widget. 10 | * 11 | */ 12 | 13 | angular.module('MyFollowingCourses', ['']) 14 | .controller('CatListController', function($scope, $http) { 15 | $scope.title = "List of Categories"; 16 | $http.get('/api/categories').success(function (data) { 17 | $scope.categories = data.categories; 18 | }); 19 | }); -------------------------------------------------------------------------------- /public/my-course/my-pdf-status.js: -------------------------------------------------------------------------------- 1 | 2 | angular.module('MyPdfStatus', ['']) 3 | .controller('PdfStatusController', function($scope, $http) { 4 | //$scope.title = "List of PDF History"; 5 | $http.get('/api/my-course/pdf-history').success(function (data) { 6 | $scope.pdfHistory = data.pdfHistory; 7 | $scope.sortType = 'dateUpdated'; 8 | $scope.sortReverse = 'false'; 9 | }); 10 | }); -------------------------------------------------------------------------------- /public/my-course/my-summary.js: -------------------------------------------------------------------------------- 1 | angular.module('MySummary', ['chart.js']) 2 | .controller('RadarSummaryController', function($scope){ 3 | $scope.title = "My Course Summary"; 4 | $scope.labels = [ "PDF Read", "Video Watched", "Comments", "Likes", "Course Follow" ]; 5 | $scope.data = [[92, 101, 77, 82, 9]]; 6 | }); -------------------------------------------------------------------------------- /public/my-course/my-video-status.js: -------------------------------------------------------------------------------- 1 | angular.module('MyVideoStatus', ['']) 2 | .controller('VideoStatusController', function ($scope, $http) { 3 | $http.get('/api/my-course/video-history').success(function (data) { 4 | $scope.videoHistory = data.videoHistory; 5 | $scope.sortType = 'dateUpdated'; 6 | $scope.sortReverse = 'false'; 7 | }); 8 | }); -------------------------------------------------------------------------------- /public/my-course/options.js: -------------------------------------------------------------------------------- 1 | //configuration of chart display 2 | 3 | var radarChartOptions = { 4 | datasetFill : false, 5 | pointDot : true 6 | }; 7 | 8 | var lineChartOptions = { 9 | multiTooltipTemplate: "<%= datasetLabel %> - <%= value %>" 10 | }; -------------------------------------------------------------------------------- /public/pdfjs/build/components/images/annotation-check.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /public/pdfjs/build/components/images/annotation-comment.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 13 | 16 | 17 | -------------------------------------------------------------------------------- /public/pdfjs/build/components/images/annotation-insert.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /public/pdfjs/build/components/images/annotation-newparagraph.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /public/pdfjs/build/components/images/annotation-noicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /public/pdfjs/build/components/images/loading-icon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/components/images/loading-icon.gif -------------------------------------------------------------------------------- /public/pdfjs/build/components/images/shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/components/images/shadow.png -------------------------------------------------------------------------------- /public/pdfjs/build/components/images/texture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/components/images/texture.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/78-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/78-EUC-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/78-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/78-EUC-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/78-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/78-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/78-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/78-RKSJ-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/78-RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/78-RKSJ-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/78-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/78-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/78ms-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/78ms-RKSJ-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/78ms-RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/78ms-RKSJ-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/83pv-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/83pv-RKSJ-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/90ms-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/90ms-RKSJ-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/90ms-RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/90ms-RKSJ-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/90msp-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/90msp-RKSJ-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/90msp-RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/90msp-RKSJ-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/90pv-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/90pv-RKSJ-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/90pv-RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/90pv-RKSJ-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Add-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Add-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Add-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Add-RKSJ-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Add-RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Add-RKSJ-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Add-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Add-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-CNS1-0.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-CNS1-0.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-CNS1-1.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-CNS1-1.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-CNS1-2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-CNS1-2.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-CNS1-3.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-CNS1-3.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-CNS1-4.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-CNS1-4.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-CNS1-5.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-CNS1-5.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-CNS1-6.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-CNS1-6.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-CNS1-UCS2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-CNS1-UCS2.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-GB1-0.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-GB1-0.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-GB1-1.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-GB1-1.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-GB1-2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-GB1-2.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-GB1-3.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-GB1-3.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-GB1-4.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-GB1-4.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-GB1-5.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-GB1-5.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-GB1-UCS2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-GB1-UCS2.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-Japan1-0.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-Japan1-0.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-Japan1-1.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-Japan1-1.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-Japan1-2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-Japan1-2.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-Japan1-3.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-Japan1-3.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-Japan1-4.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-Japan1-4.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-Japan1-5.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-Japan1-5.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-Japan1-6.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-Japan1-6.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-Japan1-UCS2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-Japan1-UCS2.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-Korea1-0.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-Korea1-0.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-Korea1-1.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-Korea1-1.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-Korea1-2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-Korea1-2.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Adobe-Korea1-UCS2.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Adobe-Korea1-UCS2.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/B5-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/B5-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/B5pc-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/B5pc-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/B5pc-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/B5pc-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/CNS-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/CNS-EUC-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/CNS-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/CNS-EUC-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/CNS1-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/CNS1-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/CNS1-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/CNS1-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/CNS2-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/CNS2-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/CNS2-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/CNS2-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/ETHK-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/ETHK-B5-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/ETHK-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/ETHK-B5-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/ETen-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/ETen-B5-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/ETen-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/ETen-B5-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/ETenms-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/ETenms-B5-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/ETenms-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/ETenms-B5-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/EUC-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/EUC-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Ext-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Ext-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Ext-RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Ext-RKSJ-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Ext-RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Ext-RKSJ-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Ext-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Ext-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/GB-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/GB-EUC-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/GB-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/GB-EUC-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/GB-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/GB-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/GB-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/GB-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/GBK-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/GBK-EUC-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/GBK-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/GBK-EUC-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/GBK2K-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/GBK2K-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/GBK2K-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/GBK2K-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/GBKp-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/GBKp-EUC-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/GBKp-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/GBKp-EUC-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/GBT-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/GBT-EUC-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/GBT-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/GBT-EUC-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/GBT-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/GBT-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/GBT-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/GBT-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/GBTpc-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/GBTpc-EUC-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/GBTpc-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/GBTpc-EUC-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/GBpc-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/GBpc-EUC-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/GBpc-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/GBpc-EUC-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/HKdla-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/HKdla-B5-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/HKdla-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/HKdla-B5-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/HKdlb-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/HKdlb-B5-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/HKdlb-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/HKdlb-B5-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/HKgccs-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/HKgccs-B5-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/HKgccs-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/HKgccs-B5-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/HKm314-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/HKm314-B5-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/HKm314-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/HKm314-B5-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/HKm471-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/HKm471-B5-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/HKm471-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/HKm471-B5-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/HKscs-B5-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/HKscs-B5-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/HKscs-B5-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/HKscs-B5-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Hankaku.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Hankaku.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Hiragana.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Hiragana.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/KSC-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/KSC-EUC-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/KSC-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/KSC-EUC-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/KSC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/KSC-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/KSC-Johab-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/KSC-Johab-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/KSC-Johab-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/KSC-Johab-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/KSC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/KSC-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/KSCms-UHC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/KSCms-UHC-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/KSCms-UHC-HW-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/KSCms-UHC-HW-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/KSCms-UHC-HW-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/KSCms-UHC-HW-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/KSCms-UHC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/KSCms-UHC-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/KSCpc-EUC-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/KSCpc-EUC-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/KSCpc-EUC-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/KSCpc-EUC-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Katakana.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Katakana.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/NWP-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/NWP-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/NWP-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/NWP-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/RKSJ-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/RKSJ-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/RKSJ-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/RKSJ-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/Roman.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/Roman.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniCNS-UCS2-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniCNS-UCS2-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniCNS-UCS2-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniCNS-UCS2-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniCNS-UTF16-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniCNS-UTF16-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniCNS-UTF16-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniCNS-UTF16-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniCNS-UTF32-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniCNS-UTF32-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniCNS-UTF32-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniCNS-UTF32-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniCNS-UTF8-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniCNS-UTF8-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniCNS-UTF8-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniCNS-UTF8-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniGB-UCS2-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniGB-UCS2-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniGB-UCS2-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniGB-UCS2-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniGB-UTF16-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniGB-UTF16-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniGB-UTF16-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniGB-UTF16-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniGB-UTF32-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniGB-UTF32-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniGB-UTF32-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniGB-UTF32-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniGB-UTF8-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniGB-UTF8-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniGB-UTF8-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniGB-UTF8-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJIS-UCS2-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJIS-UCS2-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJIS-UCS2-HW-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJIS-UCS2-HW-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJIS-UCS2-HW-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJIS-UCS2-HW-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJIS-UCS2-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJIS-UCS2-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJIS-UTF16-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJIS-UTF16-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJIS-UTF16-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJIS-UTF16-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJIS-UTF32-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJIS-UTF32-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJIS-UTF32-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJIS-UTF32-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJIS-UTF8-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJIS-UTF8-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJIS-UTF8-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJIS-UTF8-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJIS2004-UTF16-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJIS2004-UTF16-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJIS2004-UTF16-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJIS2004-UTF16-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJIS2004-UTF32-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJIS2004-UTF32-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJIS2004-UTF32-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJIS2004-UTF32-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJIS2004-UTF8-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJIS2004-UTF8-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJIS2004-UTF8-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJIS2004-UTF8-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJISPro-UCS2-HW-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJISPro-UCS2-HW-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJISPro-UCS2-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJISPro-UCS2-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJISPro-UTF8-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJISPro-UTF8-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJISX0213-UTF32-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJISX0213-UTF32-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJISX0213-UTF32-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJISX0213-UTF32-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJISX02132004-UTF32-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJISX02132004-UTF32-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniJISX02132004-UTF32-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniJISX02132004-UTF32-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniKS-UCS2-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniKS-UCS2-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniKS-UCS2-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniKS-UCS2-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniKS-UTF16-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniKS-UTF16-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniKS-UTF16-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniKS-UTF16-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniKS-UTF32-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniKS-UTF32-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniKS-UTF32-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniKS-UTF32-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniKS-UTF8-H.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniKS-UTF8-H.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/UniKS-UTF8-V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/UniKS-UTF8-V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/V.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/V.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/cmaps/WP-Symbol.bcmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/cmaps/WP-Symbol.bcmap -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/compressed.tracemonkey-pldi-09.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/compressed.tracemonkey-pldi-09.pdf -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/annotation-check.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/annotation-comment.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 13 | 16 | 17 | -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/annotation-insert.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/annotation-newparagraph.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/annotation-noicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/findbarButton-next-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/findbarButton-next-rtl.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/findbarButton-next-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/findbarButton-next-rtl@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/findbarButton-next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/findbarButton-next.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/findbarButton-next@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/findbarButton-next@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/findbarButton-previous-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/findbarButton-previous-rtl.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/findbarButton-previous-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/findbarButton-previous-rtl@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/findbarButton-previous.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/findbarButton-previous.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/findbarButton-previous@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/findbarButton-previous@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/grab.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/grab.cur -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/grabbing.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/grabbing.cur -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/loading-icon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/loading-icon.gif -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/loading-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/loading-small.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/loading-small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/loading-small@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/secondaryToolbarButton-documentProperties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/secondaryToolbarButton-documentProperties.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/secondaryToolbarButton-documentProperties@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/secondaryToolbarButton-documentProperties@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/secondaryToolbarButton-firstPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/secondaryToolbarButton-firstPage.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/secondaryToolbarButton-firstPage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/secondaryToolbarButton-firstPage@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/secondaryToolbarButton-handTool.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/secondaryToolbarButton-handTool.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/secondaryToolbarButton-handTool@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/secondaryToolbarButton-handTool@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/secondaryToolbarButton-lastPage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/secondaryToolbarButton-lastPage.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/secondaryToolbarButton-lastPage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/secondaryToolbarButton-lastPage@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/secondaryToolbarButton-rotateCcw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/secondaryToolbarButton-rotateCcw.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/secondaryToolbarButton-rotateCcw@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/secondaryToolbarButton-rotateCcw@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/secondaryToolbarButton-rotateCw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/secondaryToolbarButton-rotateCw.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/secondaryToolbarButton-rotateCw@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/secondaryToolbarButton-rotateCw@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/shadow.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/texture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/texture.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-bookmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-bookmark.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-bookmark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-bookmark@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-download.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-download@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-download@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-menuArrows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-menuArrows.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-menuArrows@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-menuArrows@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-openFile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-openFile.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-openFile@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-openFile@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-pageDown-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-pageDown-rtl.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-pageDown-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-pageDown-rtl@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-pageDown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-pageDown.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-pageDown@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-pageDown@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-pageUp-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-pageUp-rtl.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-pageUp-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-pageUp-rtl@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-pageUp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-pageUp.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-pageUp@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-pageUp@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-presentationMode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-presentationMode.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-presentationMode@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-presentationMode@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-print.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-print.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-print@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-print@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-search.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-search@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-search@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-secondaryToolbarToggle-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-secondaryToolbarToggle-rtl.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-secondaryToolbarToggle-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-secondaryToolbarToggle-rtl@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-secondaryToolbarToggle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-secondaryToolbarToggle.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-secondaryToolbarToggle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-secondaryToolbarToggle@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-sidebarToggle-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-sidebarToggle-rtl.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-sidebarToggle-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-sidebarToggle-rtl@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-sidebarToggle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-sidebarToggle.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-sidebarToggle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-sidebarToggle@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-viewAttachments.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-viewAttachments.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-viewAttachments@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-viewAttachments@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-viewOutline-rtl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-viewOutline-rtl.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-viewOutline-rtl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-viewOutline-rtl@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-viewOutline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-viewOutline.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-viewOutline@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-viewOutline@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-viewThumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-viewThumbnail.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-viewThumbnail@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-viewThumbnail@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-zoomIn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-zoomIn.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-zoomIn@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-zoomIn@2x.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-zoomOut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-zoomOut.png -------------------------------------------------------------------------------- /public/pdfjs/build/generic/web/images/toolbarButton-zoomOut@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/pdfjs/build/generic/web/images/toolbarButton-zoomOut@2x.png -------------------------------------------------------------------------------- /public/resources/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/resources/.keep -------------------------------------------------------------------------------- /public/slide-viewer/css/jquery.simplecolorpicker-fontawesome.css: -------------------------------------------------------------------------------- 1 | .simplecolorpicker.fontawesome span.color[data-selected]:after { 2 | font-family: 'FontAwesome'; 3 | -webkit-font-smoothing: antialiased; 4 | 5 | content: '\f00c'; /* Ok/check mark */ 6 | 7 | margin-right: 1px; 8 | margin-left: 1px; 9 | } 10 | -------------------------------------------------------------------------------- /public/slide-viewer/css/jquery.simplecolorpicker-glyphicons.css: -------------------------------------------------------------------------------- 1 | .simplecolorpicker.glyphicons span.color[data-selected]:after { 2 | /* Taken from glyphicon class. */ 3 | position: relative; 4 | top: 1px; 5 | font-family: 'Glyphicons Halflings'; 6 | line-height: .9; 7 | -webkit-font-smoothing: antialiased; 8 | 9 | content: '\e013'; /* Ok/check mark */ 10 | 11 | margin-right: 1px; 12 | margin-left: 1px; 13 | } 14 | -------------------------------------------------------------------------------- /public/slide-viewer/css/jquery.simplecolorpicker-regularfont.css: -------------------------------------------------------------------------------- 1 | .simplecolorpicker.regularfont span.color[data-selected]:after { 2 | content: '\2714'; /* Ok/check mark */ 3 | 4 | margin-right: 2.2px; 5 | margin-left: 2.2px; 6 | } 7 | -------------------------------------------------------------------------------- /public/slide-viewer/images/slide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/public/slide-viewer/images/slide.png -------------------------------------------------------------------------------- /public/slide-viewer/js/directives/sa-annotationzone-controller.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public/slide-viewer/js/directives/sa-annotationzone.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /public/slide-viewer/js/directives/sa-annotationzone.js: -------------------------------------------------------------------------------- 1 | angular.module('SlideViewerAnnotationZones', []) 2 | .directive('saAnnotationzone', 3 | function() { 4 | return { 5 | restrict: 'A', 6 | scope: { 7 | name: '=', 8 | }, 9 | replace:true, 10 | templateUrl: '/slide-viewer/js/directives/sa-annotationzone.html', 11 | //controller: 'sa-annotationzone-controller' 12 | }; 13 | } 14 | ); 15 | -------------------------------------------------------------------------------- /routes/advanced-search.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var config = require('config'); 3 | var router = express.Router(); 4 | var theme=config.get('theme'); 5 | 6 | router.get('/search', function (req, res, next) { 7 | res.render(theme + '/advanced-search', { 8 | req: req, 9 | user: req.user, 10 | showSidebar: true 11 | }); 12 | }); 13 | 14 | module.exports = router; -------------------------------------------------------------------------------- /routes/api/favorites.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | var favoritesController = require('../../modules/favorites/favorites-controller'); 4 | 5 | router.get('/favorites', favoritesController.getAll); 6 | router.get('/favorites/:cid', favoritesController.getByCourseId); 7 | router.post('/favorites/:cid', favoritesController.add); 8 | router.delete('/favorites/:cid', favoritesController.remove); 9 | 10 | module.exports = router; -------------------------------------------------------------------------------- /routes/api/search.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | var searchController = require('../../modules/search/search-controller'); 4 | 5 | router.get('/search', searchController.search); 6 | router.get('/advanced-search', searchController.advancedSearch); 7 | router.get('/relevant-search', searchController.relevantSearch); 8 | 9 | module.exports = router; -------------------------------------------------------------------------------- /routes/apps.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var config = require('config'); 3 | var appRoot = require('app-root-path'); 4 | var AppsGallery = require(appRoot + '/modules/apps-gallery'); 5 | var router = express.Router(); 6 | 7 | router.get('/apps/gallery/:location', function(req, res, next) { 8 | res.render(config.get('theme') + '/apps/gallery', {location: req.params.location}); 9 | }); 10 | 11 | module.exports = router; 12 | -------------------------------------------------------------------------------- /routes/categories.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var config = require('config'); 3 | var appRoot = require('app-root-path'); 4 | var debug = require('debug')('cm:route'); 5 | var router = express.Router(); 6 | 7 | /** 8 | * get courses based on category slug 9 | * return: html view 10 | router.get('/category/:category/courses', function(req, res, next) { 11 | res.render(config.get('theme') + '/catalogs/courses', { 12 | req:req, 13 | title: 'Browse for Courses', 14 | user: req.user, 15 | showSidebar:true 16 | }); 17 | }); */ 18 | 19 | module.exports = router; 20 | -------------------------------------------------------------------------------- /routes/cm-admin/adminusers.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var config = require('config'); 3 | 4 | var router = express.Router(); 5 | 6 | router.get('/adminusers', function(req, res, next) { 7 | res.render(config.get('theme') + '/cm-admin/adminusers', {user: req.user}); 8 | }); 9 | 10 | module.exports = router; 11 | -------------------------------------------------------------------------------- /routes/cm-admin/category.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var config = require('config'); 3 | var appRoot = require('app-root-path'); 4 | 5 | var router = express.Router(); 6 | 7 | router.get('/categories', function(req, res, next) { 8 | res.render(config.get('theme') + '/cm-admin/categories', {title: "Manage Categories"}); 9 | }); 10 | 11 | router.get('/category', function(req, res, next) { 12 | res.render(config.get('theme') + '/cm-admin/category', {title: "Manage Categories"}); 13 | }); 14 | 15 | router.get('/category-recommendations', function(req, res, next) { 16 | res.render(config.get('theme') + '/cm-admin/categoryRecommendations', {title: "Manage Categories"}); 17 | }); 18 | 19 | module.exports = router; 20 | -------------------------------------------------------------------------------- /routes/cm-admin/index.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var config = require('config'); 3 | 4 | var router = express.Router(); 5 | 6 | router.get('/', function(req, res, next) { 7 | res.render(config.get('theme') + '/cm-admin/index', {user: req.user}); 8 | }); 9 | 10 | module.exports = router; 11 | -------------------------------------------------------------------------------- /routes/cm-admin/tabs.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var config = require('config'); 3 | var appRoot = require('app-root-path'); 4 | var TabCtrl = require(appRoot + '/modules/tabs/tabs.controller.js'); 5 | 6 | var router = express.Router(); 7 | 8 | router.get('/tabs', function (req, res, next) { 9 | var app = new TabCtrl(); 10 | app.populateTabs( 11 | function (err) { 12 | console.log("error populating app"); 13 | }, 14 | function () { 15 | console.log("success populating app"); 16 | }); 17 | 18 | res.render(config.get('theme') + '/cm-admin/tabs', {title: "Manage Tabs"}); 19 | }); 20 | 21 | module.exports = router; -------------------------------------------------------------------------------- /routes/index.js: -------------------------------------------------------------------------------- 1 | /*jslint node: true */ 2 | 'use strict'; 3 | 4 | var express = require('express'); 5 | var config = require('config'); 6 | var router = express.Router(); 7 | 8 | /* GET home page. */ 9 | router.get('/', function (req, res) { 10 | var user = {}; 11 | if (req.session && 12 | req.session.passport && 13 | req.session.passport.user) { 14 | user = req.session.passport.user; 15 | } 16 | 17 | res.render(config.get('theme') + '/index', { 18 | user: user 19 | }); 20 | }); 21 | 22 | /* GET static page., there is ngview inside that 23 | will be handled by static.js route file */ 24 | router.get('/static', function (req, res) { 25 | res.render(config.get('theme') + '/static'); 26 | }); 27 | 28 | router.get('/recommend-category', function (req, res) { 29 | res.render(config.get('theme') + '/recommendCategory'); 30 | }); 31 | 32 | module.exports = router; 33 | -------------------------------------------------------------------------------- /routes/node-analytics/nodeAnalytics.js: -------------------------------------------------------------------------------- 1 | /** 2 | * node-analytics app route 3 | * 4 | */ 5 | 6 | var express = require('express'); 7 | var config = require('config'); 8 | var appRoot = require('app-root-path'); 9 | 10 | var router = express.Router(); 11 | 12 | /** 13 | * entry point route for node-analytics 14 | */ 15 | 16 | router.get('/na-node-history-analytics', function (req, res, next){ 17 | res.render('node-analytics/node-history-analytics'); 18 | }); 19 | 20 | module.exports = router; 21 | -------------------------------------------------------------------------------- /routes/static.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var config = require('config'); 3 | var router = express.Router(); 4 | var fs = require('fs'); 5 | var appRoot = require('app-root-path'); 6 | 7 | var staticFiles = fs.readdirSync(appRoot + '/views/' + config.get('theme') + '/statics/'); 8 | 9 | router.get('/static/:page', function(req, res, next) { 10 | var fn = req.params.page + '.ejs'; 11 | 12 | for (var j = 0; j < staticFiles.length; j++) { 13 | if (staticFiles[j].match(fn)) { 14 | // render the static page when exists 15 | res.render(config.get('theme') + '/statics/' + req.params.page); 16 | return; 17 | } 18 | } 19 | 20 | var err = new Error('Not Found'); 21 | err.status = 404; 22 | next(err); 23 | }); 24 | 25 | router.get('/about', function(req, res, next) { 26 | res.render(config.get('theme') + '/statics/about'); 27 | }); 28 | 29 | router.get('/privacy', function(req, res, next) { 30 | res.render(config.get('theme') + '/statics/privacy'); 31 | }); 32 | 33 | module.exports = router; 34 | -------------------------------------------------------------------------------- /routes/widgets.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var config = require('config'); 3 | var router = express.Router(); 4 | var fs = require('fs'); 5 | var appRoot = require('app-root-path'); 6 | 7 | var staticFiles = fs.readdirSync(appRoot + '/views/widgets/'); 8 | 9 | router.get('/widgets/gallery', function(req, res, next) { 10 | res.render(config.get('theme') + '/apps/gallery', {location: req.params.location}); 11 | }); 12 | 13 | router.get('/widgets/:page', function(req, res, next) { 14 | var fn = req.params.page + '.ejs'; 15 | 16 | for (var j = 0; j < staticFiles.length; j++) { 17 | if (staticFiles[j].match(fn)) { 18 | // render the static page when exists 19 | res.render('widgets/' + req.params.page); 20 | return; 21 | } 22 | } 23 | 24 | var err = new Error('Not Found'); 25 | err.status = 404; 26 | next(err); 27 | }); 28 | 29 | module.exports = router; 30 | -------------------------------------------------------------------------------- /views/admin-lte/advanced-search/index.ejs: -------------------------------------------------------------------------------- 1 | <% include ../header %> 2 | 3 |
4 | <% include ../mainMenu %> 5 |
6 |
7 | <% include search-form %> 8 |
9 |
10 |
11 | 12 | <% include ../jsfooter %> 13 | <% include ../footer %> -------------------------------------------------------------------------------- /views/admin-lte/apps/index.ejs: -------------------------------------------------------------------------------- 1 | roo 2 | -------------------------------------------------------------------------------- /views/admin-lte/cm-admin/sidebar.ejs: -------------------------------------------------------------------------------- 1 | 2 | 13 | -------------------------------------------------------------------------------- /views/admin-lte/course/analytics/analyticsActionBar.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /views/admin-lte/course/discussion/discussionActionBar.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /views/admin-lte/course/map/mapActionBar.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /views/admin-lte/course/newsfeedUpdate/newsfeedUpdateActionBar.ejs: -------------------------------------------------------------------------------- 1 | Course activities -------------------------------------------------------------------------------- /views/admin-lte/course/newsfeedUpdate/newsfeedUpdateFooter.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /views/admin-lte/course/peerAssessment/peerAssessmentActionBar.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /views/admin-lte/course/peerAssessment/peerAssessmentFooter.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /views/admin-lte/course/peerAssessment/peerReview/components/reviewAssignment.ejs: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 |
7 | 8 |
9 |
10 | 11 |
12 |
13 |
14 | 15 |
16 |
17 |
18 |
19 | -------------------------------------------------------------------------------- /views/admin-lte/course/peerAssessment/peerReview/components/reviewPercentage.ejs: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 | % 7 |
8 |

Student review % should be a positive number

9 |

Student review % is required

10 |
11 |
12 |
-------------------------------------------------------------------------------- /views/admin-lte/course/peerAssessment/peerReview/components/rubrics/rubrics.ejs: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |
6 |
7 |
8 |
9 |
10 | 11 |
12 |
13 | 14 |
15 |
16 |
17 |
18 |
-------------------------------------------------------------------------------- /views/admin-lte/course/peerAssessment/review/pages/review.ejs: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
No reviews available currently
5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
Review Task TitleStudent Review TitleReview Loop
{{review.peerReviewId.title}}{{review.isSubmitted?'Edit Review': 'Add Review'}}{{review.loop?review.loop: 'First'}}
22 |
23 |
-------------------------------------------------------------------------------- /views/admin-lte/error.ejs: -------------------------------------------------------------------------------- 1 | <% include header %> 2 |

<%= message %>

3 |

<%= error.status %>

4 |
<%= error.stack %>
5 | <% include jsfooter %> 6 | <% include footer %> 7 | -------------------------------------------------------------------------------- /views/admin-lte/footer.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /views/admin-lte/oauth/oFooter.ejs: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /views/admin-lte/settings/createdApps.ejs: -------------------------------------------------------------------------------- 1 |

Created Apps

-------------------------------------------------------------------------------- /views/admin-lte/settings/documentation.ejs: -------------------------------------------------------------------------------- 1 |

2 | Documentation 3 |

4 | 5 | -------------------------------------------------------------------------------- /views/admin-lte/settings/installed.ejs: -------------------------------------------------------------------------------- 1 |

2 | Applications that are allowed to access your data 3 |

4 | 5 |
6 |
7 |
8 |
9 |
    10 |
  • 11 |

    {{app.name}}

    12 | 16 |
  • 17 |
18 |
19 | 20 |
21 | There is no application installed. 22 |
23 |
24 |
25 |
-------------------------------------------------------------------------------- /views/admin-lte/sidebar.ejs: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /views/admin-lte/static.ejs: -------------------------------------------------------------------------------- 1 | <% include header %> 2 |
3 | 4 | 5 | <% include mainMenu %> 6 |
7 |
8 |
9 |
10 |
11 | <% include jsfooter %> 12 | <% include footer %> -------------------------------------------------------------------------------- /views/admin-lte/treeNode/learningHub/learningHubActionBar.ejs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/views/admin-lte/treeNode/learningHub/learningHubActionBar.ejs -------------------------------------------------------------------------------- /views/admin-lte/treeNode/learningHub/learningHubFooter.ejs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CourseMapper/course-mapper/b664a5f525305c4d755eea98d802b5059b814c5f/views/admin-lte/treeNode/learningHub/learningHubFooter.ejs -------------------------------------------------------------------------------- /views/admin-lte/treeNode/links/linksActionBar.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /views/admin-lte/treeNode/nodeAnalytics/nodeAnalyticsActionBar.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /views/admin-lte/treeNode/nodeNewsFeedUpdate/nodeNewsFeedUpdateActionBar.ejs: -------------------------------------------------------------------------------- 1 |
2 | Public content node activities 3 |
4 | -------------------------------------------------------------------------------- /views/admin-lte/treeNode/nodeNewsFeedUpdate/nodeNewsFeedUpdateFooter.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /views/admin-lte/treeNode/video/video.ejs: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 |
6 | -------------------------------------------------------------------------------- /views/course-analytics/history-analytics.ejs: -------------------------------------------------------------------------------- 1 |
2 | 3 | 10 |
11 | -------------------------------------------------------------------------------- /views/course-analytics/node-history-analytics.ejs: -------------------------------------------------------------------------------- 1 |
2 | 3 | 10 |
11 | -------------------------------------------------------------------------------- /views/course-analytics/preview-top-contributors.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /views/course-analytics/statistics.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /views/email.ejs: -------------------------------------------------------------------------------- 1 | Hi <% %>, 2 | 3 | Thank you for registering on our site. 4 | 5 | <% // check if need activation %> 6 | To login, you need to activate your account first, by clicking on this link 7 | <% // activation link%> 8 | -------------------------------------------------------------------------------- /views/error.ejs: -------------------------------------------------------------------------------- 1 |

<%= message %>

2 |

<%= error.status %>

3 |
<%= error.stack %>
-------------------------------------------------------------------------------- /views/my-course/enrolled-courses.ejs: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
Nr.{{headerTitle}}
{{$index+1}}. {{enrolled.course.name}}
14 |
15 | 16 | -------------------------------------------------------------------------------- /views/my-course/following-course.ejs: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
Nr.{{title}}
{{$index+1}} {{cat.name}}
14 |
15 | 16 | -------------------------------------------------------------------------------- /views/node-analytics/node-history-analytics.ejs: -------------------------------------------------------------------------------- 1 |
2 | 9 |
10 | -------------------------------------------------------------------------------- /views/slide-viewer/displayComments.ejs: -------------------------------------------------------------------------------- 1 | <% for(var i = 0; i < comments.length; i++) { %>--> 2 |
3 | 4 |
5 |
6 | <%= comments.html %> 7 |
8 |
9 |
10 |
11 | 12 | -------------------------------------------------------------------------------- /views/widgets/blankBox.ejs: -------------------------------------------------------------------------------- 1 | 4 |
5 |
6 |

Title

7 |
8 | 9 | 10 | 11 |
12 |
13 |
14 | Start creating your amazing application! 15 |
16 | 19 |
--------------------------------------------------------------------------------