├── .flake8 ├── .github └── CODEOWNERS ├── .gitignore ├── .readthedocs.yaml ├── LICENSE ├── README.rst ├── alembic.ini ├── bases ├── .keep └── rsptx │ ├── admin_server_api │ ├── README.md │ ├── __init__.py │ ├── core.py │ └── routers │ │ ├── __init__.py │ │ ├── instructor.py │ │ └── lti1p3.py │ ├── assignment_server_api │ ├── __init__.py │ ├── assignment_builder │ │ ├── .env.development │ │ ├── .env.production │ │ ├── .eslintignore │ │ ├── .eslintrc │ │ ├── .gitignore │ │ ├── .jshintignore │ │ ├── .prettierrc │ │ ├── DEV_NOTES.rst │ │ ├── README.md │ │ ├── index.html │ │ ├── jsdoc.config.json │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── public │ │ │ ├── favicon.ico │ │ │ ├── jQuery.js │ │ │ ├── logo192.png │ │ │ ├── logo512.png │ │ │ ├── manifest.json │ │ │ ├── robots.txt │ │ │ └── runestone │ │ ├── scripts │ │ │ └── svgTransformFile.ts │ │ ├── src │ │ │ ├── App.css │ │ │ ├── App.spec.tsx │ │ │ ├── App.tsx │ │ │ ├── componentFuncs.js │ │ │ ├── components │ │ │ │ ├── routes │ │ │ │ │ └── AssignmentBuilder │ │ │ │ │ │ ├── AssignmentBuilder.module.css │ │ │ │ │ │ ├── AssignmentBuilder.tsx │ │ │ │ │ │ ├── MathJaxWrapper.tsx │ │ │ │ │ │ ├── components │ │ │ │ │ │ ├── ErrorState │ │ │ │ │ │ │ ├── ErrorState.module.css │ │ │ │ │ │ │ └── ErrorState.tsx │ │ │ │ │ │ ├── edit │ │ │ │ │ │ │ └── AssignmentEdit.tsx │ │ │ │ │ │ ├── exercises │ │ │ │ │ │ │ ├── AssignmentExercisesList │ │ │ │ │ │ │ │ ├── AssignmentExercisesContainer.tsx │ │ │ │ │ │ │ │ ├── AssignmentExercisesTable.tsx │ │ │ │ │ │ │ │ ├── CreateView.tsx │ │ │ │ │ │ │ │ ├── EditView.tsx │ │ │ │ │ │ │ │ ├── ErrorDisplay.tsx │ │ │ │ │ │ │ │ ├── ExerciseListView.tsx │ │ │ │ │ │ │ │ ├── ExerciseSuccessDialog.tsx │ │ │ │ │ │ │ │ ├── ExercisesBreadcrumb.tsx │ │ │ │ │ │ │ │ ├── ExercisesToolbar.tsx │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ │ └── components │ │ │ │ │ │ │ │ ├── ChooseExercises │ │ │ │ │ │ │ │ ├── ChooseExercises.tsx │ │ │ │ │ │ │ │ └── ChooseExercisesHeader.tsx │ │ │ │ │ │ │ │ ├── CreateExercise │ │ │ │ │ │ │ │ ├── CreateExercise.module.css │ │ │ │ │ │ │ │ ├── CreateExercise.tsx │ │ │ │ │ │ │ │ ├── CreatePollExercise.module.css │ │ │ │ │ │ │ │ ├── components │ │ │ │ │ │ │ │ │ ├── ActiveCodeExercise │ │ │ │ │ │ │ │ │ │ ├── ActiveCodeExercise.tsx │ │ │ │ │ │ │ │ │ │ ├── ActiveCodeExerciseSettings.tsx │ │ │ │ │ │ │ │ │ │ ├── ActiveCodePreview.tsx │ │ │ │ │ │ │ │ │ │ ├── components │ │ │ │ │ │ │ │ │ │ │ ├── InstructionsEditor.tsx │ │ │ │ │ │ │ │ │ │ │ ├── LanguageSelector.tsx │ │ │ │ │ │ │ │ │ │ │ ├── PrefixCodeEditor.tsx │ │ │ │ │ │ │ │ │ │ │ ├── StarterCodeEditor.tsx │ │ │ │ │ │ │ │ │ │ │ └── SuffixCodeEditor.tsx │ │ │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ │ │ ├── BaseExerciseForm.tsx │ │ │ │ │ │ │ │ │ ├── ClickableAreaExercise │ │ │ │ │ │ │ │ │ │ └── ClickableAreaExercise.tsx │ │ │ │ │ │ │ │ │ ├── DragAndDropExercise │ │ │ │ │ │ │ │ │ │ ├── DragAndDropExercise.module.css │ │ │ │ │ │ │ │ │ │ ├── DragAndDropExercise.tsx │ │ │ │ │ │ │ │ │ │ ├── DragAndDropPreview.tsx │ │ │ │ │ │ │ │ │ │ ├── DragAndDropSettings.tsx │ │ │ │ │ │ │ │ │ │ ├── components │ │ │ │ │ │ │ │ │ │ │ ├── DragAndDropInstructions.tsx │ │ │ │ │ │ │ │ │ │ │ ├── SortableBlock.tsx │ │ │ │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ │ │ │ ├── hooks │ │ │ │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ │ │ │ └── useDragAndDropConnections.tsx │ │ │ │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ │ │ │ ├── ExerciseFactory.tsx │ │ │ │ │ │ │ │ │ ├── ExerciseTypeSelect.tsx │ │ │ │ │ │ │ │ │ ├── FillInTheBlankExercise │ │ │ │ │ │ │ │ │ │ ├── FillInTheBlankExercise.tsx │ │ │ │ │ │ │ │ │ │ ├── FillInTheBlankExerciseSettings.tsx │ │ │ │ │ │ │ │ │ │ ├── FillInTheBlankPreview.tsx │ │ │ │ │ │ │ │ │ │ ├── components │ │ │ │ │ │ │ │ │ │ │ ├── BlankManager.tsx │ │ │ │ │ │ │ │ │ │ │ ├── QuestionEditor.tsx │ │ │ │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ │ │ │ ├── MatchingExercise │ │ │ │ │ │ │ │ │ │ ├── MatchingExercise.module.css │ │ │ │ │ │ │ │ │ │ ├── MatchingExercise.tsx │ │ │ │ │ │ │ │ │ │ ├── MatchingPreview.tsx │ │ │ │ │ │ │ │ │ │ ├── MatchingSettings.tsx │ │ │ │ │ │ │ │ │ │ ├── components │ │ │ │ │ │ │ │ │ │ │ ├── MatchingInstructions.tsx │ │ │ │ │ │ │ │ │ │ │ ├── SortableBlock.tsx │ │ │ │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ │ │ │ ├── hooks │ │ │ │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ │ │ │ └── useMatchingConnections.tsx │ │ │ │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ │ │ │ ├── MultiChoiceExercise │ │ │ │ │ │ │ │ │ │ ├── MultiChoiceExercise.tsx │ │ │ │ │ │ │ │ │ │ ├── MultiChoiceExerciseSettings.tsx │ │ │ │ │ │ │ │ │ │ ├── MultiChoiceOptions.module.css │ │ │ │ │ │ │ │ │ │ ├── MultiChoiceOptions.tsx │ │ │ │ │ │ │ │ │ │ ├── MultiChoicePreview.tsx │ │ │ │ │ │ │ │ │ │ ├── components │ │ │ │ │ │ │ │ │ │ │ ├── MultiChoiceOptionsWrapper.tsx │ │ │ │ │ │ │ │ │ │ │ ├── MultiChoiceQuestion.tsx │ │ │ │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ │ │ ├── ParsonsExercise │ │ │ │ │ │ │ │ │ │ ├── ParsonsExercise.tsx │ │ │ │ │ │ │ │ │ │ ├── ParsonsExerciseSettings.tsx │ │ │ │ │ │ │ │ │ │ ├── ParsonsPreview.tsx │ │ │ │ │ │ │ │ │ │ ├── ParsonsStyles.css │ │ │ │ │ │ │ │ │ │ └── components │ │ │ │ │ │ │ │ │ │ │ ├── BlockItem.tsx │ │ │ │ │ │ │ │ │ │ │ ├── ParsonsBlocksManager.tsx │ │ │ │ │ │ │ │ │ │ │ ├── ParsonsCodeHighlighter.tsx │ │ │ │ │ │ │ │ │ │ │ ├── ParsonsInstructions.tsx │ │ │ │ │ │ │ │ │ │ │ ├── ParsonsLanguageSelector.tsx │ │ │ │ │ │ │ │ │ │ │ ├── ParsonsMonacoEditor.tsx │ │ │ │ │ │ │ │ │ │ │ ├── ParsonsTipTapEditor.tsx │ │ │ │ │ │ │ │ │ │ │ ├── ParsonsUnifiedEditor.tsx │ │ │ │ │ │ │ │ │ │ │ ├── SortableBlock.tsx │ │ │ │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ │ │ ├── PollExercise │ │ │ │ │ │ │ │ │ │ ├── PollExercise.tsx │ │ │ │ │ │ │ │ │ │ ├── PollExerciseSettings.tsx │ │ │ │ │ │ │ │ │ │ ├── PollOptions.tsx │ │ │ │ │ │ │ │ │ │ ├── PollPreview.tsx │ │ │ │ │ │ │ │ │ │ ├── PollTypeSelector.tsx │ │ │ │ │ │ │ │ │ │ ├── ScaleSettings.module.css │ │ │ │ │ │ │ │ │ │ ├── ScaleSettings.tsx │ │ │ │ │ │ │ │ │ │ └── components │ │ │ │ │ │ │ │ │ │ │ ├── PollQuestionEditor.tsx │ │ │ │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ │ │ ├── ShortAnswerExercise │ │ │ │ │ │ │ │ │ │ ├── ShortAnswerExercise.tsx │ │ │ │ │ │ │ │ │ │ ├── ShortAnswerExerciseSettings.tsx │ │ │ │ │ │ │ │ │ │ ├── ShortAnswerPreview.tsx │ │ │ │ │ │ │ │ │ │ └── components │ │ │ │ │ │ │ │ │ │ │ ├── ShortAnswerInstructions.tsx │ │ │ │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ │ ├── config │ │ │ │ │ │ │ │ │ └── stepConfigs.ts │ │ │ │ │ │ │ │ ├── constants.ts │ │ │ │ │ │ │ │ ├── hooks │ │ │ │ │ │ │ │ │ ├── useBaseExercise.ts │ │ │ │ │ │ │ │ │ ├── useExerciseStepNavigation.ts │ │ │ │ │ │ │ │ │ └── useStepValidation.ts │ │ │ │ │ │ │ │ ├── shared │ │ │ │ │ │ │ │ │ ├── BaseExerciseSettingsContent.tsx │ │ │ │ │ │ │ │ │ ├── CodeHighlighter.tsx │ │ │ │ │ │ │ │ │ ├── ExerciseLayout.tsx │ │ │ │ │ │ │ │ │ ├── ExerciseStepWrapper.tsx │ │ │ │ │ │ │ │ │ ├── ValidationMessage.tsx │ │ │ │ │ │ │ │ │ └── styles │ │ │ │ │ │ │ │ │ │ ├── CreateExercise.module.css │ │ │ │ │ │ │ │ │ │ ├── CreateExerciseOptions.module.css │ │ │ │ │ │ │ │ │ │ ├── CreateExerciseSettings.module.css │ │ │ │ │ │ │ │ │ │ └── ExerciseStepWrapper.module.css │ │ │ │ │ │ │ │ ├── types │ │ │ │ │ │ │ │ │ ├── ExerciseTypes.ts │ │ │ │ │ │ │ │ │ └── PollTypes.ts │ │ │ │ │ │ │ │ └── utils │ │ │ │ │ │ │ │ │ └── validation.ts │ │ │ │ │ │ │ │ ├── EditAllExercises │ │ │ │ │ │ │ │ ├── EditDropdownValueHeader.tsx │ │ │ │ │ │ │ │ ├── EditInputValueHeader.tsx │ │ │ │ │ │ │ │ └── withEditAllExercises.tsx │ │ │ │ │ │ │ │ ├── ExercisePreview │ │ │ │ │ │ │ │ ├── ExercisePreview.tsx │ │ │ │ │ │ │ │ └── ExercisePreviewModal.tsx │ │ │ │ │ │ │ │ ├── SearchExercises │ │ │ │ │ │ │ │ ├── SmartSearchExercises.module.css │ │ │ │ │ │ │ │ └── SmartSearchExercises.tsx │ │ │ │ │ │ │ │ └── TipTap │ │ │ │ │ │ │ │ ├── Editor.module.css │ │ │ │ │ │ │ │ ├── Editor.tsx │ │ │ │ │ │ │ │ ├── Plugins │ │ │ │ │ │ │ │ └── Image.tsx │ │ │ │ │ │ │ │ ├── SlashCommands.module.css │ │ │ │ │ │ │ │ └── SlashCommands.tsx │ │ │ │ │ │ ├── list │ │ │ │ │ │ │ └── AssignmentList.tsx │ │ │ │ │ │ ├── reading │ │ │ │ │ │ │ ├── AssignmentReadings.tsx │ │ │ │ │ │ │ └── AssignmentReadingsHeader.tsx │ │ │ │ │ │ └── wizard │ │ │ │ │ │ │ └── AssignmentWizard.tsx │ │ │ │ │ │ ├── defaultAssignment.ts │ │ │ │ │ │ ├── hooks │ │ │ │ │ │ ├── useAssignmentForm.ts │ │ │ │ │ │ ├── useAssignmentState.ts │ │ │ │ │ │ └── useNameValidation.ts │ │ │ │ │ │ └── index.ts │ │ │ │ └── ui │ │ │ │ │ ├── DialogContext.tsx │ │ │ │ │ ├── EditableTable │ │ │ │ │ ├── EditableCellFactory.tsx │ │ │ │ │ ├── EditableTableDropdownCell.tsx │ │ │ │ │ ├── EditableTableInputCell.tsx │ │ │ │ │ ├── TableOverlay.tsx │ │ │ │ │ └── hoc │ │ │ │ │ │ ├── WithCellRangeSelector.tsx │ │ │ │ │ │ └── withDragLogic.tsx │ │ │ │ │ ├── ExerciseTypeTag.tsx │ │ │ │ │ ├── Loader.tsx │ │ │ │ │ ├── Regex │ │ │ │ │ └── RegexEditor.tsx │ │ │ │ │ ├── SearchInput.module.css │ │ │ │ │ ├── SearchInput.tsx │ │ │ │ │ └── ToastContext.tsx │ │ │ ├── config │ │ │ │ └── exerciseTypes.ts │ │ │ ├── exUtils.js │ │ │ ├── global.d.ts │ │ │ ├── hooks │ │ │ │ ├── useExerciseTypes.ts │ │ │ │ ├── useExercisesSelector.ts │ │ │ │ ├── useJwtUser.ts │ │ │ │ ├── useReadingsSelector.ts │ │ │ │ ├── useSelectedAssignment.ts │ │ │ │ ├── useSmartExerciseSearch.ts │ │ │ │ ├── useTableDropdownOptions.ts │ │ │ │ ├── useUpdateAssignmentExercise.ts │ │ │ │ └── useUpdateExercises.ts │ │ │ ├── index.css │ │ │ ├── index.tsx │ │ │ ├── logo.svg │ │ │ ├── navUtils.ts │ │ │ ├── renderers │ │ │ │ ├── activeCode.jsx │ │ │ │ ├── assignment.jsx │ │ │ │ ├── assignmentPicker.jsx │ │ │ │ ├── assignmentQuestion.jsx │ │ │ │ ├── assignmentSummary.jsx │ │ │ │ ├── chapterSelector.jsx │ │ │ │ ├── ePicker.jsx │ │ │ │ ├── editorModeChooser.jsx │ │ │ │ ├── exceptionScheduler.jsx │ │ │ │ ├── exerciseEditor.jsx │ │ │ │ ├── multipleChoice.jsx │ │ │ │ ├── preview.jsx │ │ │ │ ├── searchPanel.jsx │ │ │ │ └── shortAnswer.jsx │ │ │ ├── reportWebVitals.ts │ │ │ ├── router │ │ │ │ ├── RouterService.ts │ │ │ │ └── index.ts │ │ │ ├── service │ │ │ │ └── NodeService.jsx │ │ │ ├── setupTests.jsx │ │ │ ├── spec │ │ │ │ └── mock │ │ │ │ │ ├── mockedAssignmentQuestions.ts │ │ │ │ │ └── mockedAvailableReadings.ts │ │ │ ├── state │ │ │ │ ├── activecode │ │ │ │ │ └── acSlice.js │ │ │ │ ├── assignment │ │ │ │ │ └── assignSlice.js │ │ │ │ ├── componentEditor │ │ │ │ │ └── editorSlice.js │ │ │ │ ├── epicker │ │ │ │ │ └── ePickerSlice.js │ │ │ │ ├── interactive │ │ │ │ │ └── interactiveSlice.js │ │ │ │ ├── multiplechoice │ │ │ │ │ └── mcSlice.js │ │ │ │ ├── preview │ │ │ │ │ └── previewSlice.js │ │ │ │ ├── shortanswer │ │ │ │ │ └── shortSlice.js │ │ │ │ ├── store.ts │ │ │ │ └── student │ │ │ │ │ └── studentSlice.js │ │ │ ├── store │ │ │ │ ├── assignment │ │ │ │ │ ├── assignment.logic.api.ts │ │ │ │ │ └── assignment.logic.ts │ │ │ │ ├── assignmentExercise │ │ │ │ │ ├── assignmentExercise.logic.api.ts │ │ │ │ │ └── assignmentExercise.logic.ts │ │ │ │ ├── baseQuery.ts │ │ │ │ ├── chooseExercises │ │ │ │ │ └── chooseExercises.logic.ts │ │ │ │ ├── dataset │ │ │ │ │ ├── dataset.logic.api.ts │ │ │ │ │ └── dataset.logic.ts │ │ │ │ ├── exercises │ │ │ │ │ ├── exercises.logic.api.ts │ │ │ │ │ └── exercises.logic.ts │ │ │ │ ├── index.ts │ │ │ │ ├── readings │ │ │ │ │ ├── readings.logic.api.ts │ │ │ │ │ └── readings.logic.ts │ │ │ │ ├── rootReducer.ts │ │ │ │ ├── searchExercises │ │ │ │ │ └── searchExercises.logic.ts │ │ │ │ ├── store.ts │ │ │ │ └── user │ │ │ │ │ └── userLogic.ts │ │ │ ├── styles │ │ │ │ ├── _config.scss │ │ │ │ ├── _content.scss │ │ │ │ ├── _footer.scss │ │ │ │ ├── _main.scss │ │ │ │ ├── _menu.scss │ │ │ │ ├── _mixins.scss │ │ │ │ ├── _responsive.scss │ │ │ │ ├── _table.scss │ │ │ │ ├── _topbar.scss │ │ │ │ ├── _typography.scss │ │ │ │ ├── _utils.scss │ │ │ │ ├── _variables.scss │ │ │ │ ├── global.css │ │ │ │ └── layout.scss │ │ │ ├── types │ │ │ │ ├── api.ts │ │ │ │ ├── assignment.ts │ │ │ │ ├── common.ts │ │ │ │ ├── components │ │ │ │ │ └── editableTableCell.ts │ │ │ │ ├── createExerciseForm.ts │ │ │ │ ├── dataset.ts │ │ │ │ ├── exercises.ts │ │ │ │ ├── readings.ts │ │ │ │ └── treeNode.ts │ │ │ └── utils │ │ │ │ ├── date.ts │ │ │ │ ├── exercise.ts │ │ │ │ ├── json.ts │ │ │ │ ├── object.ts │ │ │ │ ├── preview │ │ │ │ ├── activeCode.ts │ │ │ │ ├── dndPreview.ts │ │ │ │ ├── fillInTheBlank.ts │ │ │ │ ├── matchingPreview.ts │ │ │ │ ├── multichoice.tsx │ │ │ │ ├── parsonsPreview.tsx │ │ │ │ ├── poll.tsx │ │ │ │ └── shortAnswer.tsx │ │ │ │ └── questionJson.ts │ │ ├── tsconfig.json │ │ ├── vite.config.ts │ │ ├── vitest.config.ts │ │ └── vitest.setup.ts │ ├── core.py │ ├── localconfig.py │ └── routers │ │ ├── __init__.py │ │ ├── assignment_summary.py │ │ ├── instructor.py │ │ └── student.py │ ├── author_server_api │ ├── __init__.py │ ├── core.py │ ├── main.py │ └── worker.py │ ├── book_server_api │ ├── __init__.py │ ├── __main__.py │ ├── core.py │ ├── localconfig.py │ ├── main.py │ ├── routers │ │ ├── __init__.py │ │ ├── assessment.py │ │ ├── auth.py │ │ ├── books.py │ │ ├── coach.py │ │ ├── course.py │ │ ├── discuss.py │ │ ├── rslogging.py │ │ ├── rsproxy.py │ │ └── toctree.rst │ ├── runestone_dev.db │ └── templates │ │ └── auth │ │ └── login.html │ ├── dash_server_api │ ├── __init__.py │ └── core.py │ ├── interactives │ ├── .flake8 │ ├── .gitignore │ ├── ACKNOWLEDGEMENTS.rst │ ├── CONTRIBUTING.rst │ ├── I18N.md │ ├── LICENSE.txt │ ├── __init__.py │ ├── codechat_config.yaml │ ├── core.py │ ├── index.rst │ ├── package-lock.json │ ├── package.json │ ├── pavement.py │ ├── ptxrs-bootstrap.less │ ├── public │ │ └── index.html │ ├── pytest.ini │ ├── runestone │ │ ├── __init__.py │ │ ├── __main__.py │ │ ├── accessibility │ │ │ ├── __init__.py │ │ │ ├── accessibility.py │ │ │ ├── css │ │ │ │ ├── accessibility.css │ │ │ │ ├── accessibilitydarkest.css │ │ │ │ └── accessibilitylight.css │ │ │ └── toctree.rst │ │ ├── activecode │ │ │ ├── LabTestHelper.java │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── actest.html │ │ │ ├── activecode.py │ │ │ ├── css │ │ │ │ ├── activecode.css │ │ │ │ ├── activecode.less │ │ │ │ ├── close.png │ │ │ │ └── codemirror-dark.less │ │ │ ├── js │ │ │ │ ├── acfactory.js │ │ │ │ ├── activecode-i18n.en.js │ │ │ │ ├── activecode-i18n.pt-br.js │ │ │ │ ├── activecode-i18n.sr-Cyrl.js │ │ │ │ ├── activecode.js │ │ │ │ ├── activecode_html.js │ │ │ │ ├── activecode_js.js │ │ │ │ ├── activecode_sql.js │ │ │ │ ├── audiotour.js │ │ │ │ ├── coach-python-pyflakes.js │ │ │ │ ├── debugger.js │ │ │ │ ├── extractUnitResults-Doctest.js │ │ │ │ ├── extractUnitResults-JUnit.js │ │ │ │ ├── livecode.js │ │ │ │ ├── md5.js │ │ │ │ ├── sharedb.js │ │ │ │ ├── skulpt-stdlib.js │ │ │ │ ├── skulpt.min.js │ │ │ │ ├── skulpt.min.js.gz │ │ │ │ ├── skulpt.min.js.map │ │ │ │ └── timed_activecode.js │ │ │ ├── test │ │ │ │ ├── __init__.py │ │ │ │ ├── _sources │ │ │ │ │ ├── _static │ │ │ │ │ │ ├── LutherBellPic.jpg │ │ │ │ │ │ └── test.db │ │ │ │ │ ├── index.rst │ │ │ │ │ ├── progresspage.rst │ │ │ │ │ └── skulptfeatures.rst │ │ │ │ ├── conf.py │ │ │ │ ├── pavement.py │ │ │ │ └── test_activecode.py │ │ │ ├── textfield.py │ │ │ └── toctree.rst │ │ ├── animation │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── animation.py │ │ │ ├── animationrefactor.html │ │ │ ├── animationrefactor.js │ │ │ ├── chart.html │ │ │ ├── jqchart │ │ │ │ ├── gChartBasic.html │ │ │ │ ├── jquery.gchart.ext.js │ │ │ │ ├── jquery.gchart.ext.min.js │ │ │ │ ├── jquery.gchart.ext.pack.js │ │ │ │ ├── jquery.gchart.graphviz.js │ │ │ │ ├── jquery.gchart.graphviz.min.js │ │ │ │ ├── jquery.gchart.graphviz.pack.js │ │ │ │ ├── jquery.gchart.icons.js │ │ │ │ ├── jquery.gchart.icons.min.js │ │ │ │ ├── jquery.gchart.icons.pack.js │ │ │ │ ├── jquery.gchart.js │ │ │ │ ├── jquery.gchart.min.js │ │ │ │ └── jquery.gchart.pack.js │ │ │ ├── js │ │ │ │ ├── animationbase.js │ │ │ │ ├── sortmodels.js │ │ │ │ └── sortviewers.js │ │ │ ├── searchmodels.js │ │ │ ├── simpletree.html │ │ │ ├── simpletree.js │ │ │ ├── sortingbase.html │ │ │ ├── sortingdemo.html │ │ │ ├── sortingdemo.js │ │ │ ├── sortingpackage.html │ │ │ ├── sortingpackage.js │ │ │ └── toctree.rst │ │ ├── assignment │ │ │ ├── __init__.py │ │ │ └── toctree.rst │ │ ├── blockly │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── blockly.py │ │ │ ├── js │ │ │ │ ├── blockly_compressed.js │ │ │ │ ├── blocks_compressed.js │ │ │ │ ├── javascript_compressed.js │ │ │ │ ├── media │ │ │ │ │ ├── 1x1.gif │ │ │ │ │ ├── click.mp3 │ │ │ │ │ ├── click.ogg │ │ │ │ │ ├── click.wav │ │ │ │ │ ├── delete.mp3 │ │ │ │ │ ├── delete.ogg │ │ │ │ │ ├── delete.wav │ │ │ │ │ ├── handclosed.cur │ │ │ │ │ ├── handopen.cur │ │ │ │ │ ├── quote0.png │ │ │ │ │ ├── quote1.png │ │ │ │ │ ├── trashbody.png │ │ │ │ │ ├── trashlid.png │ │ │ │ │ └── tree.png │ │ │ │ ├── msg │ │ │ │ │ └── js │ │ │ │ │ │ └── en.js │ │ │ │ └── python_compressed.js │ │ │ └── toctree.rst │ │ ├── cellbotics │ │ │ ├── __init__.py │ │ │ ├── js │ │ │ │ ├── auto-bind.js │ │ │ │ ├── ble.js │ │ │ │ ├── permissions_polyfill.js │ │ │ │ ├── sensor_polyfill │ │ │ │ │ ├── geolocation-sensor.js │ │ │ │ │ ├── motion-sensors.js │ │ │ │ │ ├── sensor.js │ │ │ │ │ └── toctree.rst │ │ │ │ └── simple_sensor.js │ │ │ ├── test │ │ │ │ ├── __init__.py │ │ │ │ ├── _sources │ │ │ │ │ └── index.rst │ │ │ │ ├── conf.py │ │ │ │ ├── pavement.py │ │ │ │ ├── test_cellbotics.py │ │ │ │ └── toctree.rst │ │ │ └── toctree.rst │ │ ├── chapterdb │ │ │ ├── __init__.py │ │ │ ├── dbchapterinfo.py │ │ │ └── toctree.rst │ │ ├── clickableArea │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── clickable.py │ │ │ ├── css │ │ │ │ └── clickable.css │ │ │ ├── js │ │ │ │ ├── clickable.js │ │ │ │ └── timedclickable.js │ │ │ ├── test │ │ │ │ ├── __init__.py │ │ │ │ ├── _sources │ │ │ │ │ └── index.rst │ │ │ │ ├── conf.py │ │ │ │ ├── pavement.py │ │ │ │ └── test_clickableArea.py │ │ │ └── toctree.rst │ │ ├── codelens │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── css │ │ │ │ ├── modal-basic.css │ │ │ │ ├── pytutor.css │ │ │ │ └── x.png │ │ │ ├── js │ │ │ │ ├── codelens.js │ │ │ │ └── pytutor-embed.bundle.js │ │ │ ├── pg_encoder.py │ │ │ ├── pg_logger.py │ │ │ ├── test │ │ │ │ ├── _sources │ │ │ │ │ └── index.rst │ │ │ │ ├── conf.py │ │ │ │ ├── pavement.py │ │ │ │ └── test_codelens.py │ │ │ ├── toctree.rst │ │ │ └── visualizer.py │ │ ├── common │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── css │ │ │ │ ├── active.png │ │ │ │ ├── completed.png │ │ │ │ ├── presenter_mode.css │ │ │ │ ├── presenter_mode.less │ │ │ │ ├── runestone-custom-sphinx-bootstrap.css │ │ │ │ └── user-highlights.css │ │ │ ├── images │ │ │ │ └── play_overlay_icon.png │ │ │ ├── js │ │ │ │ ├── bookfuncs.js │ │ │ │ ├── jquery.highlight.js │ │ │ │ ├── jquery.idle-timer.js │ │ │ │ ├── jquery_i18n │ │ │ │ │ ├── jquery.i18n.emitter.bidi.js │ │ │ │ │ ├── jquery.i18n.emitter.js │ │ │ │ │ ├── jquery.i18n.fallbacks.js │ │ │ │ │ ├── jquery.i18n.js │ │ │ │ │ ├── jquery.i18n.language.js │ │ │ │ │ ├── jquery.i18n.messagestore.js │ │ │ │ │ └── jquery.i18n.parser.js │ │ │ │ ├── presenter_mode.js │ │ │ │ ├── pretext.js │ │ │ │ ├── renderComponent.js │ │ │ │ ├── runestonebase.js │ │ │ │ ├── theme.js │ │ │ │ └── user-highlights.js │ │ │ ├── project_template │ │ │ │ ├── _sources │ │ │ │ │ └── index.rst │ │ │ │ ├── _static │ │ │ │ │ ├── .gitignore │ │ │ │ │ └── clock.png │ │ │ │ ├── _templates │ │ │ │ │ └── plugin_layouts │ │ │ │ │ │ └── sphinx_bootstrap │ │ │ │ │ │ ├── globaltoc.html │ │ │ │ │ │ ├── layout.html │ │ │ │ │ │ ├── localtoc.html │ │ │ │ │ │ ├── progress.html │ │ │ │ │ │ ├── relations.html │ │ │ │ │ │ ├── sourcelink.html │ │ │ │ │ │ ├── static │ │ │ │ │ │ ├── bootstrap-sphinx.css_t │ │ │ │ │ │ ├── bootstrap-sphinx.js │ │ │ │ │ │ └── img │ │ │ │ │ │ │ ├── Facebook.png │ │ │ │ │ │ │ ├── Facebook_icon.png │ │ │ │ │ │ │ ├── RAIcon.png │ │ │ │ │ │ │ ├── Twitter.png │ │ │ │ │ │ │ ├── Twitter_icon.png │ │ │ │ │ │ │ └── logo_small.png │ │ │ │ │ │ ├── subchapter.html │ │ │ │ │ │ ├── subchaptoc.html │ │ │ │ │ │ └── theme.conf │ │ │ │ ├── conf.tmpl │ │ │ │ └── pavement.tmpl │ │ │ ├── question_number.py │ │ │ ├── runestonedirective.py │ │ │ ├── test │ │ │ │ ├── __init__.py │ │ │ │ └── test_error │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── _sources │ │ │ │ │ └── index.rst │ │ │ │ │ ├── conf.py │ │ │ │ │ ├── pavement.py │ │ │ │ │ └── test_add_js_error.py │ │ │ ├── toctree.rst │ │ │ └── xmlcommon.py │ │ ├── conftest.py │ │ ├── datafile │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── css │ │ │ │ └── datafile.css │ │ │ ├── js │ │ │ │ └── datafile.js │ │ │ ├── test │ │ │ │ ├── _sources │ │ │ │ │ ├── LutherBellPic.jpg │ │ │ │ │ └── index.rst │ │ │ │ ├── conf.py │ │ │ │ └── pavement.py │ │ │ └── toctree.rst │ │ ├── disqus │ │ │ ├── __init__.py │ │ │ ├── disqus.py │ │ │ └── toctree.rst │ │ ├── dragndrop │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── css │ │ │ │ ├── dragndrop.css │ │ │ │ └── dragndrop.less │ │ │ ├── dragndrop.py │ │ │ ├── js │ │ │ │ ├── DragDropTouch.js │ │ │ │ ├── dragndrop-i18n.en.js │ │ │ │ ├── dragndrop-i18n.pt-br.js │ │ │ │ ├── dragndrop-i18n.sr-Cyrl.js │ │ │ │ ├── dragndrop.js │ │ │ │ └── timeddnd.js │ │ │ ├── test │ │ │ │ ├── __init__.py │ │ │ │ ├── _sources │ │ │ │ │ └── index.rst │ │ │ │ ├── conf.py │ │ │ │ ├── drag_and_drop_helper.js │ │ │ │ ├── jquery_load_helper.js │ │ │ │ ├── pavement.py │ │ │ │ └── test_dragndrop.py │ │ │ └── toctree.rst │ │ ├── fitb │ │ │ ├── __init__.py │ │ │ ├── css │ │ │ │ └── fitb.css │ │ │ ├── dynamic_problems.rst │ │ │ ├── fitb.py │ │ │ ├── fitb_html_structure.html │ │ │ ├── js │ │ │ │ ├── fitb-i18n.en.js │ │ │ │ ├── fitb-i18n.pt-br.js │ │ │ │ ├── fitb-i18n.sr-Cyrl.js │ │ │ │ ├── fitb-utils.js │ │ │ │ ├── fitb.js │ │ │ │ ├── libs │ │ │ │ │ └── aleaPRNG-1.1.js │ │ │ │ └── timedfitb.js │ │ │ ├── test │ │ │ │ ├── __init__.py │ │ │ │ ├── _sources │ │ │ │ │ └── index.rst │ │ │ │ ├── conf.py │ │ │ │ ├── pavement.py │ │ │ │ └── test_fitb.py │ │ │ └── toctree.rst │ │ ├── groupsub │ │ │ ├── __init__.py │ │ │ ├── css │ │ │ │ └── groupsub.css │ │ │ ├── groupsub.py │ │ │ ├── js │ │ │ │ └── groupsub.js │ │ │ └── test │ │ │ │ ├── _sources │ │ │ │ └── index.rst │ │ │ │ ├── conf.py │ │ │ │ └── pavement.py │ │ ├── hparsons │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── css │ │ │ │ ├── hljs-xcode.css │ │ │ │ └── hparsons.css │ │ │ ├── hparsons.py │ │ │ ├── js │ │ │ │ ├── BlockFeedback.js │ │ │ │ ├── SQLFeedback.js │ │ │ │ ├── blockGrader.js │ │ │ │ ├── hparsons.js │ │ │ │ └── hparsonsFeedback.js │ │ │ ├── test.rst │ │ │ ├── test │ │ │ │ ├── _sources │ │ │ │ │ ├── _static │ │ │ │ │ │ ├── hptest.db │ │ │ │ │ │ └── test.db │ │ │ │ │ └── index.rst │ │ │ │ ├── conf.py │ │ │ │ ├── pavement.py │ │ │ │ └── test_hparsons.py │ │ │ └── toctree.rst │ │ ├── khanex │ │ │ ├── README.txt │ │ │ ├── __init__.py │ │ │ ├── js │ │ │ │ ├── khan-exercise.js │ │ │ │ └── khanex.js │ │ │ ├── khanex.py │ │ │ └── test │ │ │ │ ├── _sources │ │ │ │ ├── Khanex │ │ │ │ │ ├── TestKhanex.rst │ │ │ │ │ └── toctree.rst │ │ │ │ └── index.rst │ │ │ │ ├── conf.py │ │ │ │ └── pavement.py │ │ ├── lp │ │ │ ├── __init__.py │ │ │ ├── css │ │ │ │ └── html4css1.css │ │ │ ├── for_loop.py │ │ │ ├── inlinesyntaxhighlight.py │ │ │ ├── js │ │ │ │ └── lp.js │ │ │ ├── lp.py │ │ │ ├── lp_common_lib.py │ │ │ ├── test │ │ │ │ ├── _sources │ │ │ │ │ ├── index.rst │ │ │ │ │ └── lp_tester.s │ │ │ │ ├── conf.py │ │ │ │ ├── pavement.py │ │ │ │ └── test_lp.py │ │ │ └── toctree.rst │ │ ├── matching │ │ │ ├── .gitignore │ │ │ ├── css │ │ │ │ ├── matching.css │ │ │ │ └── matching.less │ │ │ ├── js │ │ │ │ ├── matching.js │ │ │ │ ├── timed_matching.js │ │ │ │ └── xmlconversion.js │ │ │ └── test │ │ │ │ └── matching.html │ │ ├── matrixeq │ │ │ ├── __init__.py │ │ │ ├── css │ │ │ │ └── matrixeq.css │ │ │ ├── js │ │ │ │ └── matrixeq.js │ │ │ ├── matrixeq.py │ │ │ ├── test │ │ │ │ ├── __init__.py │ │ │ │ ├── _sources │ │ │ │ │ └── index.rst │ │ │ │ ├── conf.py │ │ │ │ ├── pavement.py │ │ │ │ └── test_matrixeq.py │ │ │ └── toctree.rst │ │ ├── mchoice │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── assess.py │ │ │ ├── assessbase.py │ │ │ ├── css │ │ │ │ └── mchoice.css │ │ │ ├── js │ │ │ │ ├── mchoice-i18n.en.js │ │ │ │ ├── mchoice-i18n.pt-br.js │ │ │ │ ├── mchoice-i18n.sr-Cyrl.js │ │ │ │ ├── mchoice.js │ │ │ │ └── timedmc.js │ │ │ ├── multiplechoice.py │ │ │ ├── test │ │ │ │ ├── __init__.py │ │ │ │ ├── _sources │ │ │ │ │ └── index.rst │ │ │ │ ├── conf.py │ │ │ │ ├── pavement.py │ │ │ │ └── test_assess.py │ │ │ └── toctree.rst │ │ ├── meta │ │ │ ├── __init__.py │ │ │ ├── meta.py │ │ │ └── toctree.rst │ │ ├── overview.rst │ │ ├── parsons │ │ │ ├── README.md │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── css │ │ │ │ ├── images │ │ │ │ │ ├── parsons-ll.svg │ │ │ │ │ ├── parsons-lr.svg │ │ │ │ │ ├── parsons-rl.svg │ │ │ │ │ └── parsons-rr.svg │ │ │ │ ├── parsons.css │ │ │ │ ├── parsons.less │ │ │ │ └── prettify.css │ │ │ ├── js │ │ │ │ ├── dagGrader.js │ │ │ │ ├── dagHelpers.js │ │ │ │ ├── hammer.min.js │ │ │ │ ├── lineGrader.js │ │ │ │ ├── parsons-i18n.en.js │ │ │ │ ├── parsons-i18n.pt-br.js │ │ │ │ ├── parsons-i18n.sr-Cyrl.js │ │ │ │ ├── parsons.js │ │ │ │ ├── parsonsBlock.js │ │ │ │ ├── parsonsLine.js │ │ │ │ ├── prettify.js │ │ │ │ └── timedparsons.js │ │ │ ├── parsons.py │ │ │ ├── test │ │ │ │ ├── __init__.py │ │ │ │ ├── _sources │ │ │ │ │ └── index.rst │ │ │ │ ├── conf.py │ │ │ │ ├── pavement.py │ │ │ │ └── test_parsons.py │ │ │ └── toctree.rst │ │ ├── poll │ │ │ ├── __init__.py │ │ │ ├── css │ │ │ │ └── poll.css │ │ │ ├── js │ │ │ │ └── poll.js │ │ │ ├── poll.py │ │ │ ├── test │ │ │ │ ├── __init__.py │ │ │ │ ├── _sources │ │ │ │ │ └── index.rst │ │ │ │ ├── conf.py │ │ │ │ ├── pavement.py │ │ │ │ └── test_poll.py │ │ │ └── toctree.rst │ │ ├── question │ │ │ ├── __init__.py │ │ │ ├── question.py │ │ │ ├── test │ │ │ │ ├── __init__.py │ │ │ │ ├── _sources │ │ │ │ │ └── index.rst │ │ │ │ ├── conf.py │ │ │ │ ├── pavement.py │ │ │ │ └── test_question.py │ │ │ └── toctree.rst │ │ ├── quizly │ │ │ ├── README.txt │ │ │ ├── __init__.py │ │ │ ├── js │ │ │ │ └── quizly.js │ │ │ ├── quizly.py │ │ │ ├── test │ │ │ │ ├── _sources │ │ │ │ │ ├── Quizly │ │ │ │ │ │ ├── TestQuizly.rst │ │ │ │ │ │ └── toctree.rst │ │ │ │ │ └── index.rst │ │ │ │ ├── conf.py │ │ │ │ └── pavement.py │ │ │ └── toctree.rst │ │ ├── reveal │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── css │ │ │ │ └── reveal.css │ │ │ ├── js │ │ │ │ └── reveal.js │ │ │ ├── reveal.py │ │ │ ├── test │ │ │ │ ├── __init__.py │ │ │ │ ├── _sources │ │ │ │ │ └── index.rst │ │ │ │ ├── conf.py │ │ │ │ ├── pavement.py │ │ │ │ └── test_reveal.py │ │ │ └── toctree.rst │ │ ├── selectquestion │ │ │ ├── __init__.py │ │ │ ├── css │ │ │ │ └── selectquestion.css │ │ │ ├── js │ │ │ │ └── selectone.js │ │ │ ├── selectone.py │ │ │ └── toctree.rst │ │ ├── server │ │ │ ├── __init__.py │ │ │ ├── componentdb.py │ │ │ └── toctree.rst │ │ ├── shared_conftest.py │ │ ├── shortanswer │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── css │ │ │ │ └── shortanswer.css │ │ │ ├── js │ │ │ │ ├── sa_template.html │ │ │ │ ├── shortanswer.js │ │ │ │ └── timed_shortanswer.js │ │ │ ├── shortanswer.py │ │ │ ├── test │ │ │ │ ├── __init__.py │ │ │ │ ├── _sources │ │ │ │ │ ├── Figures │ │ │ │ │ │ └── LutherBellPic.jpg │ │ │ │ │ └── index.rst │ │ │ │ ├── conf.py │ │ │ │ ├── pavement.py │ │ │ │ └── test_shortanswer.py │ │ │ └── toctree.rst │ │ ├── showeval │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── css │ │ │ │ └── showEval.css │ │ │ ├── js │ │ │ │ ├── LICENSE.txt │ │ │ │ └── showEval.js │ │ │ ├── showeval.py │ │ │ ├── test │ │ │ │ ├── __init__.py │ │ │ │ ├── _sources │ │ │ │ │ ├── index.rst │ │ │ │ │ ├── replace.rst │ │ │ │ │ └── trace.rst │ │ │ │ ├── conf.py │ │ │ │ ├── pavement.py │ │ │ │ └── test_showEval.py │ │ │ └── toctree.rst │ │ ├── splice │ │ │ ├── README.md │ │ │ └── js │ │ │ │ └── spliceWrapper.js │ │ ├── spreadsheet │ │ │ ├── __init__.py │ │ │ ├── css │ │ │ │ ├── japp.css │ │ │ │ ├── jexcel.css │ │ │ │ ├── jexcel.min.css │ │ │ │ └── spreadsheet.css │ │ │ ├── js │ │ │ │ └── spreadsheet.js │ │ │ ├── spreadsheet.py │ │ │ ├── test │ │ │ │ ├── _sources │ │ │ │ │ ├── Iris.csv │ │ │ │ │ └── index.rst │ │ │ │ ├── conf.py │ │ │ │ ├── pavement.py │ │ │ │ └── test_spreadsheet.py │ │ │ └── toctree.rst │ │ ├── tabbedStuff │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── css │ │ │ │ └── tabbedstuff.css │ │ │ ├── js │ │ │ │ └── tabbedstuff.js │ │ │ ├── tabbedStuff.py │ │ │ ├── test │ │ │ │ ├── __init__.py │ │ │ │ ├── _sources │ │ │ │ │ └── index.rst │ │ │ │ ├── conf.py │ │ │ │ ├── pavement.py │ │ │ │ └── test_tabbedStuff.py │ │ │ └── toctree.rst │ │ ├── timed │ │ │ ├── __init__.py │ │ │ ├── css │ │ │ │ ├── timed.css │ │ │ │ └── timed.less │ │ │ ├── js │ │ │ │ └── timed.js │ │ │ ├── test │ │ │ │ ├── _sources │ │ │ │ │ ├── index.rst │ │ │ │ │ └── multiquestion.rst │ │ │ │ ├── conf.py │ │ │ │ ├── pavement.py │ │ │ │ └── test_timed.py │ │ │ ├── timedassessment.py │ │ │ └── toctree.rst │ │ ├── utility │ │ │ ├── __init__.py │ │ │ ├── toctree.rst │ │ │ └── utility.py │ │ ├── video │ │ │ ├── __init__.py │ │ │ ├── css │ │ │ │ └── video.css │ │ │ ├── js │ │ │ │ └── runestonevideo.js │ │ │ ├── test │ │ │ │ ├── _sources │ │ │ │ │ └── index.rst │ │ │ │ ├── conf.py │ │ │ │ └── pavement.py │ │ │ ├── toctree.rst │ │ │ └── video.py │ │ ├── wavedrom │ │ │ ├── __init__.py │ │ │ ├── js │ │ │ │ └── wavedrom.js │ │ │ ├── test │ │ │ │ ├── _sources │ │ │ │ │ └── index.rst │ │ │ │ ├── conf.py │ │ │ │ ├── pavement.py │ │ │ │ └── test_wavedrom.py │ │ │ └── wavedrom.py │ │ ├── webgldemo │ │ │ ├── __init__.py │ │ │ ├── css │ │ │ │ ├── webgldemo.css │ │ │ │ └── webglinteractive.css │ │ │ ├── js │ │ │ │ ├── FileSaver.min.js │ │ │ │ └── webglinteractive.js │ │ │ ├── test │ │ │ │ ├── _sources │ │ │ │ │ ├── 01_introduction │ │ │ │ │ │ ├── nested │ │ │ │ │ │ │ └── test02.rst │ │ │ │ │ │ └── test01.rst │ │ │ │ │ └── index.rst │ │ │ │ └── pavement.py │ │ │ ├── toctree.rst │ │ │ └── webgldemo.py │ │ └── webwork │ │ │ ├── js │ │ │ └── webwork.js │ │ │ └── toctree.rst │ ├── scripts │ │ ├── __init__.py │ │ ├── buildptx.py │ │ ├── dist2xml.py │ │ └── makePtx.sh │ ├── webpack.config.js │ ├── webpack.index.js │ └── webpack.server-index.js │ ├── rsmanage │ ├── __init__.py │ └── core.py │ └── web2py_server │ ├── CHANGELOG │ ├── LICENSE │ ├── MANIFEST.in │ ├── README.md │ ├── VERSION │ ├── __init__.py │ ├── applications │ ├── __init__.py │ ├── admin │ │ ├── ABOUT │ │ ├── LICENSE │ │ ├── __init__.py │ │ ├── controllers │ │ │ ├── appadmin.py │ │ │ ├── debug.py │ │ │ ├── default.py │ │ │ ├── gae.py │ │ │ ├── mercurial.py │ │ │ ├── openshift.py │ │ │ ├── plugin_jqmobile.py │ │ │ ├── pythonanywhere.py │ │ │ ├── toolbar.py │ │ │ ├── webservices.py │ │ │ └── wizard.py │ │ ├── cron │ │ │ └── expire_sessions.py │ │ ├── languages │ │ │ ├── af.py │ │ │ ├── bg.py │ │ │ ├── cs.py │ │ │ ├── de.py │ │ │ ├── en.py │ │ │ ├── es.py │ │ │ ├── fr.py │ │ │ ├── he.py │ │ │ ├── it.py │ │ │ ├── ja.py │ │ │ ├── my-mm.py │ │ │ ├── nl.py │ │ │ ├── pl.py │ │ │ ├── plural-en.py │ │ │ ├── plural-ru.py │ │ │ ├── plural-uk.py │ │ │ ├── pt-br.py │ │ │ ├── pt.py │ │ │ ├── ro.py │ │ │ ├── ru.py │ │ │ ├── sl.py │ │ │ ├── sr-cr.py │ │ │ ├── sr-lt.py │ │ │ ├── tr.py │ │ │ ├── uk.py │ │ │ ├── zh-tw.py │ │ │ └── zh.py │ │ ├── models │ │ │ ├── 0.py │ │ │ ├── 0_imports.py │ │ │ ├── access.py │ │ │ ├── buttons.py │ │ │ ├── db.py │ │ │ ├── menu.py │ │ │ ├── plugin_multiselect.py │ │ │ └── plugin_statebutton.py │ │ ├── modules │ │ │ └── __init__.py │ │ ├── private │ │ │ └── hosts.deny │ │ ├── sessions │ │ │ └── 10e │ │ │ │ └── 1c6 │ │ │ │ └── 127.0.0.1-cb884fdc-c31c-4179-9434-43db4b7df05e │ │ ├── settings.cfg │ │ ├── static │ │ │ ├── codemirror │ │ │ │ ├── addon │ │ │ │ │ ├── comment │ │ │ │ │ │ ├── comment.js │ │ │ │ │ │ └── continuecomment.js │ │ │ │ │ ├── dialog │ │ │ │ │ │ ├── dialog.css │ │ │ │ │ │ └── dialog.js │ │ │ │ │ ├── display │ │ │ │ │ │ ├── fullscreen.css │ │ │ │ │ │ ├── fullscreen.js │ │ │ │ │ │ ├── panel.js │ │ │ │ │ │ ├── placeholder.js │ │ │ │ │ │ └── rulers.js │ │ │ │ │ ├── edit │ │ │ │ │ │ ├── closebrackets.js │ │ │ │ │ │ ├── closetag.js │ │ │ │ │ │ ├── continuelist.js │ │ │ │ │ │ ├── matchbrackets.js │ │ │ │ │ │ ├── matchtags.js │ │ │ │ │ │ └── trailingspace.js │ │ │ │ │ ├── fold │ │ │ │ │ │ ├── brace-fold.js │ │ │ │ │ │ ├── comment-fold.js │ │ │ │ │ │ ├── foldcode.js │ │ │ │ │ │ ├── foldgutter.css │ │ │ │ │ │ ├── foldgutter.js │ │ │ │ │ │ ├── indent-fold.js │ │ │ │ │ │ ├── markdown-fold.js │ │ │ │ │ │ └── xml-fold.js │ │ │ │ │ ├── hint │ │ │ │ │ │ ├── anyword-hint.js │ │ │ │ │ │ ├── css-hint.js │ │ │ │ │ │ ├── html-hint.js │ │ │ │ │ │ ├── javascript-hint.js │ │ │ │ │ │ ├── python-hint.js │ │ │ │ │ │ ├── show-hint.css │ │ │ │ │ │ ├── show-hint.js │ │ │ │ │ │ ├── sql-hint.js │ │ │ │ │ │ └── xml-hint.js │ │ │ │ │ ├── mode │ │ │ │ │ │ ├── loadmode.js │ │ │ │ │ │ ├── multiplex.js │ │ │ │ │ │ ├── multiplex_test.js │ │ │ │ │ │ ├── overlay.js │ │ │ │ │ │ └── simple.js │ │ │ │ │ ├── search │ │ │ │ │ │ ├── match-highlighter.js │ │ │ │ │ │ ├── matchesonscrollbar.css │ │ │ │ │ │ ├── matchesonscrollbar.js │ │ │ │ │ │ ├── search.js │ │ │ │ │ │ └── searchcursor.js │ │ │ │ │ └── selection │ │ │ │ │ │ ├── active-line.js │ │ │ │ │ │ ├── mark-selection.js │ │ │ │ │ │ └── selection-pointer.js │ │ │ │ ├── emmet.min.js │ │ │ │ ├── keymap │ │ │ │ │ ├── emacs.js │ │ │ │ │ ├── sublime.js │ │ │ │ │ └── vim.js │ │ │ │ ├── lib │ │ │ │ │ ├── codemirror.css │ │ │ │ │ └── codemirror.js │ │ │ │ ├── mode │ │ │ │ │ ├── css │ │ │ │ │ │ ├── css.js │ │ │ │ │ │ ├── less_test.js │ │ │ │ │ │ ├── scss_test.js │ │ │ │ │ │ └── test.js │ │ │ │ │ ├── htmlmixed │ │ │ │ │ │ └── htmlmixed.js │ │ │ │ │ ├── javascript │ │ │ │ │ │ ├── javascript.js │ │ │ │ │ │ └── test.js │ │ │ │ │ ├── python │ │ │ │ │ │ └── python.js │ │ │ │ │ └── xml │ │ │ │ │ │ ├── test.js │ │ │ │ │ │ └── xml.js │ │ │ │ └── theme │ │ │ │ │ ├── 3024-day.css │ │ │ │ │ ├── 3024-night.css │ │ │ │ │ ├── ambiance-mobile.css │ │ │ │ │ ├── ambiance.css │ │ │ │ │ ├── base16-dark.css │ │ │ │ │ ├── base16-light.css │ │ │ │ │ ├── blackboard.css │ │ │ │ │ ├── cobalt.css │ │ │ │ │ ├── colorforth.css │ │ │ │ │ ├── eclipse.css │ │ │ │ │ ├── elegant.css │ │ │ │ │ ├── erlang-dark.css │ │ │ │ │ ├── lesser-dark.css │ │ │ │ │ ├── mbo.css │ │ │ │ │ ├── mdn-like.css │ │ │ │ │ ├── midnight.css │ │ │ │ │ ├── monokai.css │ │ │ │ │ ├── neat.css │ │ │ │ │ ├── neo.css │ │ │ │ │ ├── night.css │ │ │ │ │ ├── paraiso-dark.css │ │ │ │ │ ├── paraiso-light.css │ │ │ │ │ ├── pastel-on-dark.css │ │ │ │ │ ├── rubyblue.css │ │ │ │ │ ├── solarized.css │ │ │ │ │ ├── the-matrix.css │ │ │ │ │ ├── tomorrow-night-bright.css │ │ │ │ │ ├── tomorrow-night-eighties.css │ │ │ │ │ ├── twilight.css │ │ │ │ │ ├── vibrant-ink.css │ │ │ │ │ ├── web2py.css │ │ │ │ │ ├── xq-dark.css │ │ │ │ │ ├── xq-light.css │ │ │ │ │ └── zenburn.css │ │ │ ├── css │ │ │ │ ├── bootstrap-responsive.min.css │ │ │ │ ├── bootstrap.min.css │ │ │ │ ├── bootstrap_essentials.css │ │ │ │ ├── calendar.css │ │ │ │ ├── d3_graph.css │ │ │ │ ├── jqueryMultiSelect.css │ │ │ │ ├── typeahead.js-bootstrap.css │ │ │ │ └── web2py-codemirror.css │ │ │ ├── images │ │ │ │ ├── chat.png │ │ │ │ ├── delete_icon.png │ │ │ │ ├── dim_bullet.gif │ │ │ │ ├── embossed.png │ │ │ │ ├── files_toggle.png │ │ │ │ ├── folder.png │ │ │ │ ├── folder_locked.png │ │ │ │ ├── folder_sm.png │ │ │ │ ├── glyphicons-halflings-white.png │ │ │ │ ├── glyphicons-halflings.png │ │ │ │ ├── header_bg.png │ │ │ │ ├── header_shadow.png │ │ │ │ ├── help.png │ │ │ │ ├── menu.png │ │ │ │ ├── menu_responsive.png │ │ │ │ ├── questions.png │ │ │ │ ├── red_bullet.gif │ │ │ │ ├── save_icon.png │ │ │ │ ├── search.png │ │ │ │ ├── section_bullet.png │ │ │ │ ├── sidebar_background.jpg │ │ │ │ ├── sidebar_bullet.gif │ │ │ │ ├── small_button.png │ │ │ │ ├── small_special_button.png │ │ │ │ ├── spinner.gif │ │ │ │ ├── start.png │ │ │ │ ├── test_icon.png │ │ │ │ └── ticket_section.png │ │ │ ├── js │ │ │ │ ├── ajax_editor.js │ │ │ │ ├── analytics.min.js │ │ │ │ ├── autoscroll.js │ │ │ │ ├── bootstrap.min.js │ │ │ │ ├── calendar.js │ │ │ │ ├── d3.min.js │ │ │ │ ├── d3_graph.js │ │ │ │ ├── dd_belatedpng.js │ │ │ │ ├── hogan-2.0.0.js │ │ │ │ ├── jquery.flot.js │ │ │ │ ├── jquery.flot.resize.js │ │ │ │ ├── jquery.hotkeys.js │ │ │ │ ├── jquery.js │ │ │ │ ├── jqueryMultiSelect.js │ │ │ │ ├── modernizr.custom.js │ │ │ │ ├── share.js │ │ │ │ ├── typeahead.min.js │ │ │ │ ├── web2py.js │ │ │ │ └── web2py_bootstrap.js │ │ │ ├── plugin_jqmobile │ │ │ │ ├── dd_belatedpng.js │ │ │ │ ├── images │ │ │ │ │ ├── ajax-loader.png │ │ │ │ │ ├── icons-18-black.png │ │ │ │ │ ├── icons-18-white.png │ │ │ │ │ ├── icons-36-black.png │ │ │ │ │ ├── icons-36-white.png │ │ │ │ │ └── iphone.jpg │ │ │ │ ├── jquery.mobile-1.2.0.min.css │ │ │ │ ├── jquery.mobile-1.2.0.min.js │ │ │ │ ├── jquery.mobile-1.3.1.min.css │ │ │ │ └── jquery.mobile-1.3.1.min.js │ │ │ ├── plugin_multiselect │ │ │ │ ├── jquery.multi-select.js │ │ │ │ ├── multi-select.css │ │ │ │ ├── start.js │ │ │ │ └── switch.png │ │ │ └── plugin_statebutton │ │ │ │ ├── css │ │ │ │ └── bootstrap-switch.css │ │ │ │ └── js │ │ │ │ └── bootstrap-switch.js │ │ └── views │ │ │ ├── appadmin.html │ │ │ ├── debug │ │ │ ├── breakpoints.html │ │ │ ├── index.html │ │ │ └── interact.html │ │ │ ├── default.mobile │ │ │ ├── about.html │ │ │ ├── change_password.html │ │ │ ├── delete.html │ │ │ ├── delete_plugin.html │ │ │ ├── design.html │ │ │ ├── downgrade_web2py.html │ │ │ ├── edit.html │ │ │ ├── edit_language.html │ │ │ ├── errors.html │ │ │ ├── git_pull.html │ │ │ ├── git_push.html │ │ │ ├── index.html │ │ │ ├── layout.html │ │ │ ├── peek.html │ │ │ ├── plugin.html │ │ │ ├── resolve.html │ │ │ ├── site.html │ │ │ ├── test.html │ │ │ ├── ticket.html │ │ │ ├── ticket.load │ │ │ ├── uninstall.html │ │ │ ├── upgrade_web2py.html │ │ │ └── user.html │ │ │ ├── default │ │ │ ├── about.html │ │ │ ├── bulk_register.html │ │ │ ├── change_password.html │ │ │ ├── delete.html │ │ │ ├── delete_plugin.html │ │ │ ├── design.html │ │ │ ├── edit.html │ │ │ ├── edit_js.html │ │ │ ├── edit_language.html │ │ │ ├── edit_plurals.html │ │ │ ├── editor_sessions.html │ │ │ ├── editor_settings.html │ │ │ ├── editor_shortcuts.html │ │ │ ├── errors.html │ │ │ ├── files_menu.html │ │ │ ├── git_pull.html │ │ │ ├── git_push.html │ │ │ ├── index.html │ │ │ ├── install_plugin.html │ │ │ ├── manage_students.html │ │ │ ├── pack_custom.html │ │ │ ├── peek.html │ │ │ ├── plugin.html │ │ │ ├── plugins.html │ │ │ ├── resolve.html │ │ │ ├── site.html │ │ │ ├── test.html │ │ │ ├── ticket.html │ │ │ ├── ticket.load │ │ │ ├── todolist.load │ │ │ ├── twitter.load │ │ │ ├── uninstall.html │ │ │ ├── upgrade_web2py.html │ │ │ └── user.html │ │ │ ├── gae │ │ │ └── deploy.html │ │ │ ├── generic.html │ │ │ ├── layout.html │ │ │ ├── mercurial │ │ │ ├── commit.html │ │ │ └── revision.html │ │ │ ├── openshift │ │ │ └── deploy.html │ │ │ ├── plugin_jqmobile │ │ │ ├── about.html │ │ │ ├── index.html │ │ │ └── layout.html │ │ │ ├── pythonanywhere │ │ │ └── deploy.html │ │ │ ├── toolbar │ │ │ └── index.html │ │ │ ├── web2py_ajax.html │ │ │ └── wizard │ │ │ ├── generated.html │ │ │ └── step.html │ └── runestone │ │ ├── .coveralls.yml │ │ ├── .dockerignore │ │ ├── .flake8 │ │ ├── .git-blame-ignore-revs │ │ ├── .gitattributes │ │ ├── .github │ │ ├── FUNDING.yml │ │ ├── ISSUE_TEMPLATE │ │ │ ├── bug_report.md │ │ │ ├── config.yml │ │ │ └── feature_request.md │ │ └── workflows │ │ │ ├── python-app.yml │ │ │ └── stale.yml │ │ ├── .gitignore │ │ ├── .gitmodules │ │ ├── .jshintrc │ │ ├── .prettierignore │ │ ├── .prettierrc.js │ │ ├── .readthedocs.yml │ │ ├── CONTRIBUTING.md │ │ ├── ChangeLog.rst │ │ ├── LICENSE │ │ ├── README.rst │ │ ├── VERSION │ │ ├── __init__.py │ │ ├── build │ │ └── preview │ │ │ ├── .gitignore │ │ │ ├── __pycache__ │ │ │ └── pavement.cpython-39.pyc │ │ │ ├── _sources │ │ │ ├── .gitignore │ │ │ └── index.rst │ │ │ ├── _static │ │ │ ├── .gitignore │ │ │ ├── activecodethumb.png │ │ │ ├── audio │ │ │ │ ├── Example04_Tour01_Line01.mp3 │ │ │ │ ├── Example04_Tour01_Line01.wav │ │ │ │ ├── Example04_Tour01_Line02.mp3 │ │ │ │ ├── Example04_Tour01_Line02.wav │ │ │ │ ├── Example04_Tour01_Line03.mp3 │ │ │ │ └── Example04_Tour01_Line03.wav │ │ │ ├── clock.png │ │ │ ├── close.png │ │ │ ├── first.png │ │ │ ├── last.png │ │ │ ├── next.png │ │ │ ├── pause.png │ │ │ └── prev.png │ │ │ ├── _templates │ │ │ └── plugin_layouts │ │ │ │ └── sphinx_bootstrap │ │ │ │ ├── globaltoc.html │ │ │ │ ├── layout.html │ │ │ │ ├── localtoc.html │ │ │ │ ├── relations.html │ │ │ │ ├── sourcelink.html │ │ │ │ ├── static │ │ │ │ ├── bootstrap-3.0.0 │ │ │ │ │ ├── css │ │ │ │ │ │ └── bootstrap.min.css │ │ │ │ │ ├── fonts │ │ │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ │ │ └── glyphicons-halflings-regular.woff │ │ │ │ │ └── js │ │ │ │ │ │ └── bootstrap.min.js │ │ │ │ ├── bootstrap-sphinx.css_t │ │ │ │ ├── bootstrap-sphinx.js │ │ │ │ └── img │ │ │ │ │ ├── Facebook.png │ │ │ │ │ ├── Facebook_icon.png │ │ │ │ │ ├── Twitter.png │ │ │ │ │ ├── Twitter_icon.png │ │ │ │ │ └── logo_small.png │ │ │ │ ├── subchapter.html │ │ │ │ └── theme.conf │ │ │ ├── conf.py │ │ │ └── pavement.py │ │ ├── codechat_config.yaml │ │ ├── controllers │ │ ├── admin.py │ │ ├── ajax.py │ │ ├── appadmin.py │ │ ├── assignments.py │ │ ├── books.py │ │ ├── dashboard.py │ │ ├── default.py │ │ ├── designer.py │ │ ├── exams.py │ │ ├── lti.py │ │ ├── oauth.py │ │ ├── peer.py │ │ ├── proxy.py │ │ └── toctree.rst │ │ ├── docs │ │ ├── RunestoneArch.svg │ │ ├── installation.rst │ │ └── lti.rst │ │ ├── errors │ │ └── .keep │ │ ├── index.rst │ │ ├── lti.config │ │ ├── makeRelease.sh │ │ ├── models │ │ ├── 0.py │ │ ├── 1.py │ │ ├── 1.py.prototype │ │ ├── db.py │ │ ├── db_ebook.py │ │ ├── db_ebook_chapters.py │ │ ├── grouped_assignments.py │ │ ├── lti.py │ │ ├── menu.py │ │ ├── practice.py │ │ ├── questions.py │ │ └── toctree.rst │ │ ├── modules │ │ ├── .gitignore │ │ ├── __init__.py │ │ ├── db_dashboard.py │ │ ├── feedback.py │ │ ├── outcome_request.py │ │ ├── outcome_response.py │ │ ├── pytsugi_utils.py │ │ ├── questions_report.py │ │ ├── rs_grading.py │ │ ├── rs_practice.py │ │ └── stripe_form.py │ │ ├── pylintrc │ │ ├── requirements-rtd.txt │ │ ├── scripts │ │ ├── active_users.py │ │ ├── buildPageViews.py │ │ ├── cleanup_courses.py │ │ ├── crawl_sitemap.py │ │ ├── createMchoiceGrades.py │ │ ├── currentTraffic.py │ │ ├── database_pruning.py │ │ ├── dbtimes.py │ │ ├── dump_trace.py │ │ ├── find_modified_index.py │ │ ├── getLoad.sh │ │ ├── grep_logs.py │ │ ├── install_new_image.sh │ │ ├── loadTimes.py │ │ ├── loadtest.py │ │ ├── log2csv.py │ │ ├── logging.conf │ │ ├── make_new_production.sh │ │ ├── make_script_tags.py │ │ ├── make_sitemap.py │ │ ├── migrateLibrary.py │ │ ├── monitor_log.py │ │ ├── nightlytransfer.py │ │ ├── numberFigs.py │ │ ├── parseLog.py │ │ ├── parse_tickets.py │ │ ├── populateDivTable.py │ │ ├── populate_lib.py │ │ ├── pparse.py │ │ ├── request_part.html │ │ ├── routes.py │ │ ├── seedUnittestAnswers.py │ │ ├── split.py │ │ ├── start │ │ ├── sumuse │ │ ├── toRstTable.py │ │ ├── toctree.rst │ │ └── uwsgi_mem.py │ │ ├── static │ │ ├── _images │ │ │ ├── SIGCSE-logo-large.jpg │ │ │ ├── SPP_Logo_Horizontal_Final2020.png │ │ │ ├── Texas__oneColor_orange.png │ │ │ ├── U-M-logo-preview.jpg │ │ │ ├── UT_Square_logo.png │ │ │ ├── logo-trademark.png │ │ │ ├── luther_college_vertical_blue.png │ │ │ ├── nsf-logo.png │ │ │ ├── ptx-logo.png │ │ │ ├── rsi_logo.jpg │ │ │ ├── searchicon.png │ │ │ └── searchicon2.jpg │ │ ├── _static │ │ │ ├── ajax-loader.gif │ │ │ ├── basic.css │ │ │ ├── clock.png │ │ │ ├── codemirror.js │ │ │ ├── codemirror.js.old │ │ │ ├── comment-bright.png │ │ │ ├── comment-close.png │ │ │ ├── comment.png │ │ │ ├── contents.png │ │ │ ├── doctools.js │ │ │ ├── down-pressed.png │ │ │ ├── down.png │ │ │ ├── edu-python.css │ │ │ ├── file.png │ │ │ ├── jquery.textarea.js │ │ │ ├── minus.png │ │ │ ├── navigation.png │ │ │ ├── plus.png │ │ │ ├── pygments.css │ │ │ ├── python.js │ │ │ ├── python.js.old │ │ │ ├── searchtools.js │ │ │ ├── simplemodal.js │ │ │ ├── sphinxdoc.css │ │ │ ├── theme │ │ │ │ ├── default.css.old │ │ │ │ ├── elegant.css │ │ │ │ ├── elegant.css.old │ │ │ │ ├── neat.css │ │ │ │ ├── neat.css.old │ │ │ │ ├── night.css │ │ │ │ └── night.css.old │ │ │ ├── underscore.js │ │ │ ├── up-pressed.png │ │ │ ├── up.png │ │ │ ├── video.css │ │ │ └── websupport.js │ │ ├── ads.txt │ │ ├── css │ │ │ ├── accessibility.css │ │ │ ├── basic.css │ │ │ ├── calendar.css │ │ │ ├── carousel.css │ │ │ ├── custom.css │ │ │ ├── datepicker.css │ │ │ ├── dd.css │ │ │ ├── html4css1.css │ │ │ ├── index.css │ │ │ ├── peer.css │ │ │ ├── pygments.css │ │ │ ├── select2.multi-checkboxes.css │ │ │ ├── skeleton.css │ │ │ ├── superfish.css │ │ │ └── web2py.css │ │ ├── dashboard-charts.js │ │ ├── dashboard.css │ │ ├── dashboard │ │ │ └── icons │ │ │ │ ├── cohorts.png │ │ │ │ ├── gradebook copy.png │ │ │ │ ├── gradebook.png │ │ │ │ └── settings.png │ │ ├── favicon.ico │ │ ├── images │ │ │ ├── Facebook_icon.png │ │ │ ├── GettingStartedWithRunestone.png │ │ │ ├── RAIcon.png │ │ │ ├── RAIcon_cropped.png │ │ │ ├── RunestoneBanner0.png │ │ │ ├── RunestoneBanner1.png │ │ │ ├── RunestoneBanner2.png │ │ │ ├── RunestoneVenmoQR.png │ │ │ ├── Twitter_icon.png │ │ │ ├── anon.jpg │ │ │ ├── arrows-ffffff.png │ │ │ ├── completed.png │ │ │ ├── css3buttons_backgrounds.png │ │ │ ├── css3buttons_icons.png │ │ │ ├── glyphicons-halflings-white.png │ │ │ ├── glyphicons-halflings.png │ │ │ ├── logo_small.png │ │ │ ├── poweredby.png │ │ │ ├── seperator.png │ │ │ ├── shadow-section.png │ │ │ ├── shadow.png │ │ │ ├── spinner10.gif │ │ │ └── ui-icons_222222_256x240.png │ │ ├── jquery.datetimepicker.min.css │ │ ├── js │ │ │ ├── FileSaver.min.js │ │ │ ├── WaitingFor.js │ │ │ ├── admin.js │ │ │ ├── animationbase.js │ │ │ ├── assignment_table.js │ │ │ ├── books.js │ │ │ ├── bootstrap-datepicker.js │ │ │ ├── bootstrap-table │ │ │ │ ├── bootstrap-editable │ │ │ │ │ ├── css │ │ │ │ │ │ └── bootstrap-editable.css │ │ │ │ │ ├── img │ │ │ │ │ │ ├── clear.png │ │ │ │ │ │ └── loading.gif │ │ │ │ │ └── js │ │ │ │ │ │ └── bootstrap-editable.js │ │ │ │ ├── bootstrap-table-editable.min.js │ │ │ │ ├── bootstrap-table-en-US.min.js │ │ │ │ ├── bootstrap-table-reorder-rows.css │ │ │ │ ├── bootstrap-table-reorder-rows.js │ │ │ │ ├── bootstrap-table.min.css │ │ │ │ ├── bootstrap-table.min.js │ │ │ │ └── jquery.tablednd.js │ │ │ ├── calendar.js │ │ │ ├── dd_belatedpng.js │ │ │ ├── doctools.js │ │ │ ├── documentation_options.js │ │ │ ├── holder.js │ │ │ ├── jquery-1.10.2.js │ │ │ ├── jquery-1.10.2.min.js │ │ │ ├── jquery-1.10.2.min.map │ │ │ ├── jquery-fix.js │ │ │ ├── jquery.datetimepicker.full.min.js │ │ │ ├── jquery.fireworks.js │ │ │ ├── jquery.js │ │ │ ├── jquery.tabletoCSV.js │ │ │ ├── jquery.tinyscrollbar.min.js │ │ │ ├── jstree.min.js │ │ │ ├── jstree_themes │ │ │ │ └── proton │ │ │ │ │ ├── 30px.png │ │ │ │ │ ├── 32px.png │ │ │ │ │ ├── fonts │ │ │ │ │ └── titillium │ │ │ │ │ │ ├── titilliumweb-bold-webfont.eot │ │ │ │ │ │ ├── titilliumweb-bold-webfont.svg │ │ │ │ │ │ ├── titilliumweb-bold-webfont.ttf │ │ │ │ │ │ ├── titilliumweb-bold-webfont.woff │ │ │ │ │ │ ├── titilliumweb-extralight-webfont.eot │ │ │ │ │ │ ├── titilliumweb-extralight-webfont.svg │ │ │ │ │ │ ├── titilliumweb-extralight-webfont.ttf │ │ │ │ │ │ ├── titilliumweb-extralight-webfont.woff │ │ │ │ │ │ ├── titilliumweb-regular-webfont.eot │ │ │ │ │ │ ├── titilliumweb-regular-webfont.svg │ │ │ │ │ │ ├── titilliumweb-regular-webfont.ttf │ │ │ │ │ │ └── titilliumweb-regular-webfont.woff │ │ │ │ │ ├── style.css │ │ │ │ │ ├── style.min.css │ │ │ │ │ └── throbber.gif │ │ │ ├── markcomplete.js │ │ │ ├── modernizr.custom.js │ │ │ ├── peer.js │ │ │ ├── select2.multi-checkboxes.js │ │ │ ├── selfgrade.js │ │ │ ├── share.js │ │ │ ├── sorttable.js │ │ │ ├── superfish.js │ │ │ ├── underscore.js │ │ │ └── web2py.js │ │ ├── motd.html │ │ ├── rectangle_badge.png │ │ ├── robots.txt │ │ ├── runestone-custom-sphinx-bootstrap.css │ │ ├── searchindex.js │ │ ├── sitemap.xml │ │ └── websupport-custom.css │ │ ├── tests │ │ ├── .coveragerc │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── conftest.py │ │ ├── locustfile.py │ │ ├── test_admin.py │ │ ├── test_ajax2.py │ │ ├── test_autograder.py │ │ ├── test_course_1 │ │ │ ├── .gitignore │ │ │ ├── _sources │ │ │ │ ├── Iris.csv │ │ │ │ ├── activecode.rst │ │ │ │ ├── index.rst │ │ │ │ ├── lp_demo-test.py │ │ │ │ ├── lp_demo.py │ │ │ │ ├── multiquestion.rst │ │ │ │ ├── selectquestion.rst │ │ │ │ └── test_chapter_1 │ │ │ │ │ ├── dynamicquestions.rst │ │ │ │ │ ├── subchapter_a.rst │ │ │ │ │ ├── subchapter_b.rst │ │ │ │ │ └── toctree.rst │ │ │ ├── _static │ │ │ │ ├── .gitignore │ │ │ │ ├── activecodethumb.png │ │ │ │ ├── audio │ │ │ │ │ ├── Example04_Tour01_Line01.mp3 │ │ │ │ │ ├── Example04_Tour01_Line01.wav │ │ │ │ │ ├── Example04_Tour01_Line02.mp3 │ │ │ │ │ ├── Example04_Tour01_Line02.wav │ │ │ │ │ ├── Example04_Tour01_Line03.mp3 │ │ │ │ │ └── Example04_Tour01_Line03.wav │ │ │ │ ├── clock.png │ │ │ │ ├── close.png │ │ │ │ ├── first.png │ │ │ │ ├── img │ │ │ │ │ └── logo_small.png │ │ │ │ ├── last.png │ │ │ │ ├── next.png │ │ │ │ ├── pause.png │ │ │ │ └── prev.png │ │ │ ├── conf.py │ │ │ └── pavement.py │ │ ├── test_dashboard.py │ │ ├── test_designer.py │ │ ├── test_formatting.py │ │ ├── test_server.py │ │ └── utils.py │ │ └── views │ │ ├── __init__.py │ │ ├── _qeditor.html │ │ ├── _sphinx_static_files.html │ │ ├── admin │ │ ├── admin.html │ │ ├── assignments.html │ │ ├── dashboard.html │ │ ├── doc.html │ │ ├── enroll_students.html │ │ ├── grading.html │ │ ├── instructors.html │ │ ├── manage_exercises.html │ │ ├── practice.html │ │ ├── progress.html │ │ ├── sections_create.html │ │ ├── simulate_exam.html │ │ ├── startdate.html │ │ ├── studentactivity.html │ │ └── tickets.html │ │ ├── appadmin.html │ │ ├── assignments │ │ ├── index.html │ │ ├── practice.html │ │ ├── practiceNotStartedYet.html │ │ └── settz_then_practice.html │ │ ├── books │ │ └── published.html │ │ ├── dashboard │ │ ├── active.html │ │ ├── exercisemetrics.html │ │ ├── grades.html │ │ ├── index.html │ │ ├── questiongrades.html │ │ ├── studentreport.html │ │ ├── subchapdetail.html │ │ └── subchapoverview.html │ │ ├── default │ │ ├── about.html │ │ ├── accessIssue.html │ │ ├── ack.html │ │ ├── ads.html │ │ ├── bio.html │ │ ├── bios.html │ │ ├── ca_addendum.html │ │ ├── courses.html │ │ ├── ct_addendum.html │ │ ├── donate.html │ │ ├── error.html │ │ ├── payment.html │ │ ├── privacy.html │ │ ├── remove.html │ │ ├── reportabug.html │ │ ├── start.html │ │ ├── terms.html │ │ ├── user.html │ │ └── wisp.html │ │ ├── designer │ │ ├── build.html │ │ └── index.html │ │ ├── exams │ │ └── one_exam_competency.html │ │ ├── generic.csv │ │ ├── generic.html │ │ ├── generic.json │ │ ├── generic.jsonp │ │ ├── generic.load │ │ ├── generic.pdf │ │ ├── generic.rss │ │ ├── generic.xml │ │ ├── layout.html │ │ ├── lti │ │ ├── index.html │ │ └── store.html │ │ ├── oauth │ │ └── index.html │ │ ├── peer │ │ ├── dashboard.html │ │ ├── extra.html │ │ ├── home.html │ │ ├── instructor.html │ │ ├── peer_async.html │ │ ├── peer_question.html │ │ └── student.html │ │ └── web2py_ajax.html │ ├── core.py │ ├── extras │ ├── build_web2py │ │ ├── README.md │ │ ├── README_mac.md │ │ ├── README_win.md │ │ ├── build_web2py.py │ │ ├── web2py.mac.spec │ │ ├── web2py.win.spec │ │ └── web2py.win_no_console.spec │ └── icons │ │ ├── splashlogo.gif │ │ ├── web2py.gif │ │ ├── web2py.icns │ │ └── web2py.ico │ ├── gluon │ ├── __init__.py │ ├── _compat.py │ ├── admin.py │ ├── authapi.py │ ├── cache.py │ ├── cfs.py │ ├── compileapp.py │ ├── console.py │ ├── contenttype.py │ ├── contrib │ │ ├── autolinks.py │ │ ├── markmin │ │ │ ├── __init__.py │ │ │ ├── markmin.html │ │ │ ├── markmin.pdf │ │ │ ├── markmin2html.py │ │ │ ├── markmin2latex.py │ │ │ └── markmin2pdf.py │ │ └── rss2.py │ ├── custom_import.py │ ├── dal.py │ ├── debug.py │ ├── decoder.py │ ├── digest.py │ ├── fileutils.py │ ├── form.py │ ├── globals.py │ ├── highlight.py │ ├── html.py │ ├── http.py │ ├── import_all.py │ ├── languages.py │ ├── main.py │ ├── messageboxhandler.py │ ├── newcron.py │ ├── packages │ │ ├── dal │ │ │ ├── .codecov.yml │ │ │ ├── .coveragerc │ │ │ ├── .travis.yml │ │ │ ├── AUTHORS │ │ │ ├── CHANGES │ │ │ ├── LICENSE.txt │ │ │ ├── MANIFEST.in │ │ │ ├── Makefile │ │ │ ├── README.md │ │ │ ├── appveyor.yml │ │ │ ├── docs │ │ │ │ ├── Makefile │ │ │ │ ├── conf.py │ │ │ │ ├── index.rst │ │ │ │ ├── pydal.adapters.rst │ │ │ │ ├── pydal.helpers.rst │ │ │ │ └── requirements.txt │ │ │ ├── pydal │ │ │ │ ├── __init__.py │ │ │ │ ├── _compat.py │ │ │ │ ├── _gae.py │ │ │ │ ├── _globals.py │ │ │ │ ├── _load.py │ │ │ │ ├── adapters │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── base.py │ │ │ │ │ ├── couchdb.py │ │ │ │ │ ├── db2.py │ │ │ │ │ ├── firebird.py │ │ │ │ │ ├── google.py │ │ │ │ │ ├── informix.py │ │ │ │ │ ├── ingres.py │ │ │ │ │ ├── mongo.py │ │ │ │ │ ├── mssql.py │ │ │ │ │ ├── mysql.py │ │ │ │ │ ├── oracle.py │ │ │ │ │ ├── postgres.py │ │ │ │ │ ├── sap.py │ │ │ │ │ ├── snowflake.py │ │ │ │ │ ├── sqlite.py │ │ │ │ │ └── teradata.py │ │ │ │ ├── base.py │ │ │ │ ├── connection.py │ │ │ │ ├── contrib │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── imap_adapter.py │ │ │ │ │ ├── ipaddress.py │ │ │ │ │ ├── mockimaplib.py │ │ │ │ │ ├── ordereddict.py │ │ │ │ │ ├── portalocker.py │ │ │ │ │ └── reserved_sql_keywords.py │ │ │ │ ├── default_validators.py │ │ │ │ ├── dialects │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── base.py │ │ │ │ │ ├── couchdb.py │ │ │ │ │ ├── db2.py │ │ │ │ │ ├── firebird.py │ │ │ │ │ ├── google.py │ │ │ │ │ ├── informix.py │ │ │ │ │ ├── ingres.py │ │ │ │ │ ├── mongo.py │ │ │ │ │ ├── mssql.py │ │ │ │ │ ├── mysql.py │ │ │ │ │ ├── oracle.py │ │ │ │ │ ├── postgre.py │ │ │ │ │ ├── sap.py │ │ │ │ │ ├── snowflake.py │ │ │ │ │ ├── sqlite.py │ │ │ │ │ └── teradata.py │ │ │ │ ├── drivers.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── helpers │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── _internals.py │ │ │ │ │ ├── classes.py │ │ │ │ │ ├── gae.py │ │ │ │ │ ├── methods.py │ │ │ │ │ ├── regex.py │ │ │ │ │ ├── rest.py │ │ │ │ │ └── serializers.py │ │ │ │ ├── migrator.py │ │ │ │ ├── objects.py │ │ │ │ ├── parsers │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── base.py │ │ │ │ │ ├── google.py │ │ │ │ │ ├── mongo.py │ │ │ │ │ ├── oracle.py │ │ │ │ │ ├── postgre.py │ │ │ │ │ └── sqlite.py │ │ │ │ ├── representers │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── base.py │ │ │ │ │ ├── couchdb.py │ │ │ │ │ ├── db2.py │ │ │ │ │ ├── google.py │ │ │ │ │ ├── informix.py │ │ │ │ │ ├── mongo.py │ │ │ │ │ ├── mssql.py │ │ │ │ │ ├── mysql.py │ │ │ │ │ ├── oracle.py │ │ │ │ │ ├── postgre.py │ │ │ │ │ └── sqlite.py │ │ │ │ ├── restapi.py │ │ │ │ ├── tools │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── tags.py │ │ │ │ ├── utils.py │ │ │ │ └── validators.py │ │ │ ├── setup.cfg │ │ │ ├── setup.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── _adapt.py │ │ │ │ ├── _compat.py │ │ │ │ ├── _helpers.py │ │ │ │ ├── base.py │ │ │ │ ├── caching.py │ │ │ │ ├── contribs.py │ │ │ │ ├── indexes.py │ │ │ │ ├── is_url_validators.py │ │ │ │ ├── nosql.py │ │ │ │ ├── restapi.py │ │ │ │ ├── smart_query.py │ │ │ │ ├── sql.py │ │ │ │ ├── tags.py │ │ │ │ ├── validation.py │ │ │ │ └── validators.py │ │ │ └── tox.ini │ │ └── yatl │ │ │ ├── LICENSE.txt │ │ │ ├── Makefile │ │ │ ├── README.md │ │ │ ├── setup.py │ │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_helpers.py │ │ │ └── test_template.py │ │ │ ├── tox.ini │ │ │ └── yatl │ │ │ ├── __init__.py │ │ │ ├── helpers.py │ │ │ ├── sanitizer.py │ │ │ └── template.py │ ├── recfile.py │ ├── restricted.py │ ├── rewrite.py │ ├── rocket.py │ ├── rocket.py.footer │ ├── sanitizer.py │ ├── scheduler.py │ ├── serializers.py │ ├── settings.py │ ├── shell.py │ ├── sql.py │ ├── sqlhtml.py │ ├── storage.py │ ├── streamer.py │ ├── template.py │ ├── tests │ │ ├── __init__.py │ │ ├── coverage.ini │ │ ├── fix_path.py │ │ ├── test_appadmin.py │ │ ├── test_authapi.py │ │ ├── test_cache.py │ │ ├── test_compileapp.py │ │ ├── test_contenttype.py │ │ ├── test_contribs.py │ │ ├── test_cron.py │ │ ├── test_dal.py │ │ ├── test_fileutils.py │ │ ├── test_globals.py │ │ ├── test_html.py │ │ ├── test_http.py │ │ ├── test_languages.py │ │ ├── test_old_doctests.py │ │ ├── test_recfile.py │ │ ├── test_redis.py │ │ ├── test_rocket.py │ │ ├── test_router.py │ │ ├── test_routes.py │ │ ├── test_scheduler.py │ │ ├── test_serializers.py │ │ ├── test_sqlhtml.py │ │ ├── test_storage.py │ │ ├── test_tools.py │ │ ├── test_utils.py │ │ └── test_web.py │ ├── tools.py │ ├── utf8.py │ ├── utils.py │ ├── validators.py │ ├── widget.py │ └── xmlrpc.py │ ├── handlers │ ├── README │ ├── cgihandler.py │ ├── fcgihandler.py │ └── wsgihandler.py │ ├── parameters_8000.py │ ├── routes.py │ ├── site-packages │ └── __init__.py │ ├── tickets2db.py │ ├── web2py.py │ └── wsgihandler.py ├── components ├── .keep └── rsptx │ ├── analytics │ ├── __init__.py │ └── core.py │ ├── auth │ ├── __init__.py │ ├── core.py │ └── session.py │ ├── build_tools │ ├── __init__.py │ ├── build.py │ ├── cleanup_docker.sh │ └── core.py │ ├── cl_utils │ ├── __init__.py │ └── core.py │ ├── configuration │ ├── __init__.py │ └── core.py │ ├── data_extract │ ├── __init__.py │ ├── anonymizeCourseData.py │ └── core.py │ ├── data_types │ ├── __init__.py │ ├── autograde.py │ ├── language.py │ ├── question_type.py │ └── which_to_grade.py │ ├── db │ ├── __init__.py │ ├── async_session.py │ ├── core.py │ ├── crud.py │ ├── models.py │ └── sync_session.py │ ├── endpoint_validators │ ├── __init__.py │ └── core.py │ ├── exceptions │ ├── __init__.py │ └── core.py │ ├── forms │ ├── __init__.py │ ├── author.py │ └── core.py │ ├── grading_helpers │ ├── __init__.py │ └── core.py │ ├── logging │ ├── __init__.py │ ├── applogger.py │ └── core.py │ ├── lp_sim_builder │ ├── __init__.py │ ├── common_builder.py │ ├── core.py │ ├── feedback.py │ └── scheduled_builder.py │ ├── lti1p3 │ ├── README.md │ ├── __init__.py │ ├── caches.py │ ├── core.py │ ├── pylti1p3 │ │ ├── LICENSE │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── actions.py │ │ ├── assignments_grades.py │ │ ├── contrib │ │ │ ├── __init__.py │ │ │ └── fastapi │ │ │ │ ├── __init__.py │ │ │ │ ├── cookie.py │ │ │ │ ├── launch_data_storage │ │ │ │ ├── __init__.py │ │ │ │ └── cache.py │ │ │ │ ├── message_launch.py │ │ │ │ ├── oidc_login.py │ │ │ │ ├── redirect.py │ │ │ │ ├── request.py │ │ │ │ └── session.py │ │ ├── cookie.py │ │ ├── cookies_allowed_check.py │ │ ├── course_groups.py │ │ ├── deep_link.py │ │ ├── deep_link_resource.py │ │ ├── deployment.py │ │ ├── exception.py │ │ ├── grade.py │ │ ├── launch_data_storage │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── cache.py │ │ │ └── session.py │ │ ├── lineitem.py │ │ ├── message_launch.py │ │ ├── message_validators │ │ │ ├── __init__.py │ │ │ ├── abstract.py │ │ │ ├── deep_link.py │ │ │ ├── privacy_launch.py │ │ │ ├── resource_message.py │ │ │ └── submission_review.py │ │ ├── names_roles.py │ │ ├── oidc_login.py │ │ ├── redirect.py │ │ ├── registration.py │ │ ├── request.py │ │ ├── roles.py │ │ ├── service_connector.py │ │ ├── session.py │ │ ├── simple_logger.py │ │ ├── tool_config │ │ │ ├── __init__.py │ │ │ ├── abstract.py │ │ │ ├── dict.py │ │ │ └── json_file.py │ │ └── utils.py │ └── tool_conf_rs.py │ ├── practice │ ├── __init__.py │ └── core.py │ ├── response_helpers │ ├── __init__.py │ └── core.py │ ├── templates │ ├── README.rst │ ├── __init__.py │ ├── _base.html │ ├── _react_base.html │ ├── admin │ │ ├── instructor │ │ │ ├── add_instructor.html │ │ │ ├── assessment_reset.html │ │ │ ├── copy_assignments.html │ │ │ ├── course_delete.html │ │ │ ├── course_settings.html │ │ │ ├── manage_students.html │ │ │ ├── manage_tas.html │ │ │ └── menu.html │ │ └── lti1p3 │ │ │ ├── pick_links.html │ │ │ └── registration_confirm.html │ ├── assignment │ │ ├── instructor │ │ │ ├── add_token.html │ │ │ ├── assignment_summary.html │ │ │ ├── builder.html │ │ │ ├── gradebook.html │ │ │ ├── invoice.html │ │ │ └── reviewPeerAssignment.html │ │ ├── selfgrade.js │ │ └── student │ │ │ ├── assignment_block.html │ │ │ ├── chooseAssignment.html │ │ │ └── doAssignment.html │ ├── author │ │ ├── anonymize_data.html │ │ ├── editlibrary.html │ │ ├── home.html │ │ ├── impact.html │ │ ├── logfiles.html │ │ ├── notauthorized.html │ │ └── subchapmap.html │ ├── book │ │ ├── course │ │ │ └── current_course.html │ │ └── index.html │ ├── common │ │ ├── ebook_config.html │ │ ├── static_assets.html │ │ └── static_assets_min.html │ ├── core.py │ ├── footer.html │ └── staticAssets │ │ ├── RAIcon.png │ │ ├── assignment │ │ ├── instructor.js │ │ ├── selfgrade.js │ │ └── student.js │ │ ├── author │ │ └── main.js │ │ ├── book │ │ └── book.js │ │ ├── course.css │ │ ├── css │ │ ├── jquery.datetimepicker.min.css │ │ └── runestone-custom-sphinx-bootstrap.css │ │ ├── index.css │ │ ├── js │ │ ├── FileSaver.min.js │ │ ├── WaitingFor.js │ │ ├── animationbase.js │ │ ├── assignment_table.js │ │ ├── books.js │ │ ├── bootstrap-datepicker.js │ │ ├── calendar.js │ │ ├── dd_belatedpng.js │ │ ├── doctools.js │ │ ├── documentation_options.js │ │ ├── holder.js │ │ ├── jquery-1.10.2.js │ │ ├── jquery-1.10.2.min.js │ │ ├── jquery-1.10.2.min.map │ │ ├── jquery-fix.js │ │ ├── jquery.datetimepicker.full.min.js │ │ ├── jquery.fireworks.js │ │ ├── jquery.idle-timer.js │ │ ├── jquery.js │ │ ├── jquery.tabletoCSV.js │ │ ├── jquery.tinyscrollbar.min.js │ │ ├── jstree.min.js │ │ ├── markcomplete.js │ │ ├── modernizr.custom.js │ │ ├── peer.js │ │ ├── select2.multi-checkboxes.js │ │ ├── selfgrade.js │ │ ├── share.js │ │ ├── sorttable.js │ │ ├── superfish.js │ │ ├── underscore.js │ │ └── web2py.js │ │ └── main.css │ ├── validation │ ├── __init__.py │ ├── core.py │ └── schemas.py │ └── visualization │ ├── __init__.py │ ├── authorImpact.py │ └── core.py ├── development ├── .keep └── core.py ├── docker-compose.yml ├── docs ├── Makefile ├── graffle │ └── Phased Approach to Polylith.graffle ├── images │ ├── MonoRepoBuild.svg │ └── RunestoneArch.svg └── source │ ├── _static │ └── RunestoneArch.svg │ ├── addbook.rst │ ├── book_server_api.core.rst │ ├── book_server_api.localconfig.rst │ ├── book_server_api.main.rst │ ├── book_server_api.routers.assessment.rst │ ├── book_server_api.routers.auth.rst │ ├── book_server_api.routers.books.rst │ ├── book_server_api.routers.coach.rst │ ├── book_server_api.routers.discuss.rst │ ├── book_server_api.routers.rslogging.rst │ ├── book_server_api.routers.rst │ ├── book_server_api.rst │ ├── building_servers.rst │ ├── cl_utils.rst │ ├── conf.py │ ├── configuration.core.rst │ ├── configuration.rst │ ├── contributing.rst │ ├── custom_book.rst │ ├── database.rst │ ├── db.async_session.rst │ ├── db.core.rst │ ├── db.crud.rst │ ├── db.models.rst │ ├── db.rst │ ├── debugging.rst │ ├── developing.rst │ ├── docker.rst │ ├── docroadmap.rst │ ├── environmental_vars.rst │ ├── index.rst │ ├── javascript_feature.rst │ ├── left_to_merge.rst │ ├── logging.applogger.rst │ ├── logging.core.rst │ ├── logging.rst │ ├── modules.rst │ ├── poetry.rst │ ├── production.rst │ ├── readme.rst │ ├── response_helpers.core.rst │ ├── response_helpers.rst │ ├── rsmanage.rst │ ├── running.rst │ ├── server_feature.rst │ ├── structure.rst │ ├── templates.rst │ ├── tutorial.rst │ ├── validation.core.rst │ ├── validation.rst │ └── validation.schemas.rst ├── dstart ├── migrations ├── README ├── env.py ├── script.py.mako └── versions │ ├── 086c3f46d8af_add_invoice_amount.py │ ├── 29cd2a46600d_owner_and_editdist.py │ ├── 2b77aa7142f6_lti1p3_tables.py │ ├── 37b73c74eebe_source_code_table_filename.py │ ├── 3dd5bafe949d_change_dnd_answers.py │ ├── 4b544994f3da_add_apitoken_table.py │ ├── 526d79dc9a8f_add_kind.py │ ├── 5337b0616e8c_add_tags.py │ ├── 65d7ca534d18_add_us_state.py │ ├── 72b94339bbbb_add_library_columns.py │ ├── 7aaca24437eb_create_baseline.py │ ├── 8559d59ae185_add_matching_answers.py │ ├── 8e9108d94e08_add_repo_path_to_library_model.py │ ├── b209fe8b2841_add_domain_name_column_to_courses.py │ ├── b28d6db94abb_add_deadline_exceptions.py │ ├── f5db38d9355f_add_domain_approvals.py │ └── fabe9802c36a_add_splice_answers.py ├── poetry.lock ├── poetry.toml ├── projects ├── .keep ├── admin_server │ ├── Dockerfile │ ├── poetry.lock │ └── pyproject.toml ├── assignment_server │ ├── Dockerfile │ ├── README.md │ ├── build.py │ ├── build.sh │ ├── poetry.lock │ └── pyproject.toml ├── author_server │ ├── Dockerfile │ ├── README.md │ ├── gitconfig │ ├── poetry.lock │ └── pyproject.toml ├── book_server │ ├── Dockerfile │ ├── README.md │ ├── poetry.lock │ └── pyproject.toml ├── dash_server │ ├── .gitignore │ ├── Dockerfile │ ├── README.md │ ├── poetry.lock │ └── pyproject.toml ├── interactives │ ├── README.rst │ ├── build.py │ ├── images │ │ └── runeCompo-index.png │ ├── poetry.lock │ └── pyproject.toml ├── jobe │ ├── 000-jobe.conf │ ├── Dockerfile │ ├── README.md │ ├── container-test.sh │ ├── container.test.yml │ ├── files │ │ ├── CodeTestHelper.java │ │ ├── hamcrest-all-1.3.jar │ │ └── junit-4.13-beta-3.jar │ ├── include │ │ ├── CImg.h │ │ └── CTurtle.hpp │ └── license.txt ├── latex_image │ ├── Dockerfile │ └── README ├── nginx │ ├── Dockerfile │ ├── runestone │ └── runestone.dev ├── nginx_dstart_dev │ ├── Dockerfile │ ├── runestone │ └── runestone.dev ├── rsmanage │ ├── Dockerfile │ ├── poetry.lock │ └── pyproject.toml └── w2p_login_assign_grade │ ├── Dockerfile │ ├── entrypoint.sh │ ├── poetry.lock │ └── pyproject.toml ├── pyproject.toml ├── sample.env ├── test ├── bases │ └── rsptx │ │ ├── admin_server_api │ │ ├── __init__.py │ │ └── test_core.py │ │ ├── assignment_server_api │ │ ├── __init__.py │ │ └── test_core.py │ │ ├── author_server_api │ │ ├── __init__.py │ │ └── test_core.py │ │ ├── book_server_api │ │ ├── __init__.py │ │ └── test_core.py │ │ ├── dash_server_api │ │ ├── __init__.py │ │ └── test_core.py │ │ ├── interactives │ │ ├── __init__.py │ │ └── test_core.py │ │ ├── rsmanage │ │ ├── __init__.py │ │ └── test_core.py │ │ └── web2py_server │ │ ├── __init__.py │ │ └── test_core.py └── components │ └── rsptx │ ├── analytics │ ├── __init__.py │ └── test_core.py │ ├── auth │ ├── __init__.py │ └── test_core.py │ ├── build_tools │ ├── __init__.py │ └── test_core.py │ ├── cl_utils │ ├── __init__.py │ └── test_core.py │ ├── configuration │ ├── __init__.py │ └── test_core.py │ ├── data_extract │ ├── __init__.py │ └── test_core.py │ ├── db │ ├── __init__.py │ ├── test_core.py │ └── test_crud.py │ ├── endpoint_validators │ ├── __init__.py │ └── test_core.py │ ├── exceptions │ ├── __init__.py │ └── test_core.py │ ├── forms │ ├── __init__.py │ └── test_core.py │ ├── grading_helpers │ ├── __init__.py │ └── test_core.py │ ├── logging │ ├── __init__.py │ └── test_core.py │ ├── lp_sim_builder │ ├── __init__.py │ └── test_core.py │ ├── practice │ ├── __init__.py │ └── test_core.py │ ├── response_helpers │ ├── __init__.py │ └── test_core.py │ ├── templates │ ├── __init__.py │ └── test_core.py │ ├── validation │ ├── __init__.py │ └── test_core.py │ └── visualization │ ├── __init__.py │ └── test_core.py └── workspace.toml /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # Each line is a file pattern followed by one or more owners. 2 | 3 | # These owners will be the default owners for everything in 4 | # the repo. Unless a later match takes precedence, 5 | # @global-owner1 and @global-owner2 will be requested for 6 | # review when someone opens a pull request. 7 | * @bnmnetp 8 | -------------------------------------------------------------------------------- /bases/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/.keep -------------------------------------------------------------------------------- /bases/rsptx/admin_server_api/README.md: -------------------------------------------------------------------------------- 1 | ## Readme 2 | 3 | This server is intended to handle all routes related to course administration, user authorization, and lti setup and launches. 4 | 5 | Currently implemented: 6 | 7 | * LTI1.3 routes 8 | -------------------------------------------------------------------------------- /bases/rsptx/admin_server_api/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.admin_server_api import core 2 | 3 | __all__ = ["core"] 4 | 5 | -------------------------------------------------------------------------------- /bases/rsptx/admin_server_api/routers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/admin_server_api/routers/__init__.py -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.assignment_server_api import core 2 | 3 | __all__ = ["core"] 4 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/.env.development: -------------------------------------------------------------------------------- 1 | VITE_LOAD_PREFIX=/runestone 2 | VITE_BASE_URL=/ 3 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/.env.production: -------------------------------------------------------------------------------- 1 | VITE_LOAD_PREFIX=/assignment/react/runestone 2 | BASE_URL=/assignment/instructor/builder 3 | 4 | VITE_BASE_URL=/assignment/instructor -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/.jshintignore: -------------------------------------------------------------------------------- 1 | # Disables JSHint for the React part of the application, as it's better to use ESLint + Prettier. 2 | # After the full migration to React, JSHint can be completely removed. 3 | src 4 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 100, 3 | "singleQuote": false, 4 | "trailingComma": "none", 5 | "bracketSpacing": true, 6 | "bracketSameLine": false, 7 | "tabWidth": 2, 8 | "endOfLine": "auto" 9 | } 10 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/assignment_server_api/assignment_builder/public/favicon.ico -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/assignment_server_api/assignment_builder/public/logo192.png -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/assignment_server_api/assignment_builder/public/logo512.png -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/public/runestone: -------------------------------------------------------------------------------- 1 | ../../../interactives/runestone/dist -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/components/routes/AssignmentBuilder/components/exercises/AssignmentExercisesList/index.tsx: -------------------------------------------------------------------------------- 1 | import { withDragLogic } from "@components/ui/EditableTable/hoc/withDragLogic"; 2 | 3 | import { AssignmentExercisesContainer } from "./AssignmentExercisesContainer"; 4 | 5 | export const AssignmentExercises = withDragLogic(AssignmentExercisesContainer); 6 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/components/routes/AssignmentBuilder/components/exercises/components/CreateExercise/components/ActiveCodeExercise/index.ts: -------------------------------------------------------------------------------- 1 | export { ActiveCodeExercise } from "./ActiveCodeExercise"; 2 | export { ActiveCodeExerciseSettings } from "./ActiveCodeExerciseSettings"; 3 | export { ActiveCodePreview } from "./ActiveCodePreview"; 4 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/components/routes/AssignmentBuilder/components/exercises/components/CreateExercise/components/ClickableAreaExercise/ClickableAreaExercise.tsx: -------------------------------------------------------------------------------- 1 | import { ExerciseComponentProps } from "../../types/ExerciseTypes"; 2 | 3 | export const ClickableAreaExercise = ({}: ExerciseComponentProps) => { 4 | return <>; 5 | }; 6 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/components/routes/AssignmentBuilder/components/exercises/components/CreateExercise/components/DragAndDropExercise/components/index.ts: -------------------------------------------------------------------------------- 1 | export { SortableBlock } from "./SortableBlock"; 2 | export { DragAndDropInstructions } from "./DragAndDropInstructions"; 3 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/components/routes/AssignmentBuilder/components/exercises/components/CreateExercise/components/DragAndDropExercise/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export { useDragAndDropConnections } from "./useDragAndDropConnections"; 2 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/components/routes/AssignmentBuilder/components/exercises/components/CreateExercise/components/FillInTheBlankExercise/components/index.ts: -------------------------------------------------------------------------------- 1 | export { QuestionEditor } from "./QuestionEditor"; 2 | export { BlankManager } from "./BlankManager"; 3 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/components/routes/AssignmentBuilder/components/exercises/components/CreateExercise/components/FillInTheBlankExercise/index.ts: -------------------------------------------------------------------------------- 1 | export { FillInTheBlankExercise } from "./FillInTheBlankExercise"; 2 | export * from "./types"; 3 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/components/routes/AssignmentBuilder/components/exercises/components/CreateExercise/components/MatchingExercise/components/index.ts: -------------------------------------------------------------------------------- 1 | export { SortableBlock } from "./SortableBlock"; 2 | export { MatchingInstructions } from "./MatchingInstructions"; 3 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/components/routes/AssignmentBuilder/components/exercises/components/CreateExercise/components/MatchingExercise/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export { useMatchingConnections } from "./useMatchingConnections"; 2 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/components/routes/AssignmentBuilder/components/exercises/components/CreateExercise/components/MultiChoiceExercise/components/index.ts: -------------------------------------------------------------------------------- 1 | export { MultiChoiceQuestion } from "./MultiChoiceQuestion"; 2 | export { MultiChoiceOptionsWrapper } from "./MultiChoiceOptionsWrapper"; 3 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/components/routes/AssignmentBuilder/components/exercises/components/CreateExercise/components/MultiChoiceExercise/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./MultiChoiceExercise"; 2 | export * from "./MultiChoiceOptions"; 3 | export * from "./MultiChoiceExerciseSettings"; 4 | export * from "./MultiChoicePreview"; 5 | 6 | export { MultiChoiceExercise } from "./MultiChoiceExercise"; 7 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/components/routes/AssignmentBuilder/components/exercises/components/CreateExercise/components/PollExercise/components/index.ts: -------------------------------------------------------------------------------- 1 | export { PollQuestionEditor } from "./PollQuestionEditor"; 2 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/components/routes/AssignmentBuilder/components/exercises/components/CreateExercise/components/ShortAnswerExercise/components/index.ts: -------------------------------------------------------------------------------- 1 | export { ShortAnswerInstructions } from "./ShortAnswerInstructions"; 2 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/components/routes/AssignmentBuilder/components/exercises/components/CreateExercise/constants.ts: -------------------------------------------------------------------------------- 1 | export const POLL_TYPES = [ 2 | { label: "Scale (1 to N)", value: "scale" }, 3 | { label: "Multiple Options", value: "options" } 4 | ]; 5 | 6 | export const SCALE_CONFIG = { 7 | MIN: 2, 8 | MAX: 50, 9 | DEFAULT: 5 10 | } as const; 11 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/components/routes/AssignmentBuilder/components/exercises/components/CreateExercise/types/PollTypes.ts: -------------------------------------------------------------------------------- 1 | import { Option } from "@/types/exercises"; 2 | 3 | export type PollType = "scale" | "options"; 4 | 5 | export interface PollOption extends Option { 6 | id: string; 7 | } 8 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/components/routes/AssignmentBuilder/index.ts: -------------------------------------------------------------------------------- 1 | export { AssignmentBuilder } from "./AssignmentBuilder"; 2 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/global.d.ts: -------------------------------------------------------------------------------- 1 | export {}; 2 | 3 | declare global { 4 | type EBookConfig = Partial<{ 5 | isInstructor: boolean; 6 | course: string; 7 | username: string; 8 | isLoggedIn: boolean; 9 | }>; 10 | 11 | interface Window { 12 | eBookConfig: EBookConfig; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/router/index.ts: -------------------------------------------------------------------------------- 1 | export { routerService } from "./RouterService"; 2 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/setupTests.jsx: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import "@testing-library/jest-dom"; 6 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/store/index.ts: -------------------------------------------------------------------------------- 1 | export { store } from "./store"; 2 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/styles/_content.scss: -------------------------------------------------------------------------------- 1 | @use "variables"; 2 | 3 | .layout-main-container { 4 | display: flex; 5 | flex-direction: column; 6 | min-height: 95vh; 7 | max-height: 95vh; 8 | justify-content: space-between; 9 | padding: 2rem 2rem 2rem 2rem; 10 | transition: margin-left variables.$transitionDuration; 11 | } 12 | 13 | .layout-main { 14 | flex: 1 1 auto; 15 | } 16 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/styles/_footer.scss: -------------------------------------------------------------------------------- 1 | @use "variables"; 2 | 3 | .layout-footer { 4 | transition: margin-left variables.$transitionDuration; 5 | display: flex; 6 | align-items: center; 7 | justify-content: center; 8 | padding-top: 1rem; 9 | border-top: 1px solid var(--surface-border); 10 | } 11 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/styles/_mixins.scss: -------------------------------------------------------------------------------- 1 | @mixin focused() { 2 | outline: 0 none; 3 | outline-offset: 0; 4 | transition: box-shadow .2s; 5 | box-shadow: var(--focus-ring); 6 | } 7 | 8 | @mixin focused-inset() { 9 | outline: 0 none; 10 | outline-offset: 0; 11 | transition: box-shadow .2s; 12 | box-shadow: inset var(--focus-ring); 13 | } 14 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/styles/_variables.scss: -------------------------------------------------------------------------------- 1 | /* General */ 2 | $borderRadius:12px; /* border radius of layout element e.g. card, sidebar */ 3 | $transitionDuration:.2s; /* transition duration of layout elements e.g. sidebar, overlay menus */ -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/styles/layout.scss: -------------------------------------------------------------------------------- 1 | @use '_variables'; 2 | @use "_mixins"; 3 | @use "_main"; 4 | @use "_topbar"; 5 | @use "_menu"; 6 | @use "_config"; 7 | @use "_content"; 8 | @use "_footer"; 9 | @use "_responsive"; 10 | @use "_utils"; 11 | @use "_typography"; 12 | @use "_table"; 13 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/types/api.ts: -------------------------------------------------------------------------------- 1 | export type DetailResponse = { 2 | detail: T; 3 | }; 4 | 5 | export enum HttpStatusCode { 6 | OK = 200, 7 | CREATED = 201, 8 | NO_CONTENT = 204, 9 | BAD_REQUEST = 400, 10 | UNAUTHORIZED = 401, 11 | FORBIDDEN = 403, 12 | NOT_FOUND = 404, 13 | UNPROCESSABLE_CONTENT = 422, 14 | INTERNAL_SERVER_ERROR = 500, 15 | SERVICE_UNAVAILABLE = 503 16 | } 17 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/types/common.ts: -------------------------------------------------------------------------------- 1 | export type Optional = T | undefined; 2 | 3 | export type Nullable = T | null; 4 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/types/dataset.ts: -------------------------------------------------------------------------------- 1 | export type TableDropdownOption = { 2 | value: string; 3 | label: string; 4 | description: string; 5 | supported_question_types?: any; 6 | }; 7 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/types/readings.ts: -------------------------------------------------------------------------------- 1 | export type GetAvailableReadingsPayload = { 2 | from_source_only: boolean; 3 | pages_only: boolean; 4 | skipreading: boolean; 5 | }; 6 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/types/treeNode.ts: -------------------------------------------------------------------------------- 1 | export type SelectedKey = { checked: boolean; partialChecked: boolean }; 2 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/utils/date.ts: -------------------------------------------------------------------------------- 1 | export const convertDateToISO = (date: Date): string => { 2 | return date.toISOString().replace("Z", ""); 3 | }; 4 | 5 | export const convertISOStringToDate = (isoString: string): Date => { 6 | try { 7 | return new Date(`${isoString}Z`); 8 | } catch (e) { 9 | console.error("Invalid ISO string", isoString); 10 | return new Date(); 11 | } 12 | }; 13 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/utils/json.ts: -------------------------------------------------------------------------------- 1 | export const safeJsonParse = (value: string | object): T | undefined => { 2 | if (typeof value === "object" && value !== null) { 3 | return value as T; 4 | } 5 | 6 | try { 7 | return JSON.parse(value) as T; 8 | } catch { 9 | return undefined; 10 | } 11 | }; 12 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/src/utils/object.ts: -------------------------------------------------------------------------------- 1 | export const isEmptyObject = (obj: T): boolean => { 2 | return Object.keys(obj).length === 0; 3 | }; 4 | 5 | export const dumpObject = (data: unknown, spacing: number = 2): string => { 6 | try { 7 | return JSON.stringify(data, null, spacing); 8 | } catch (error) { 9 | return `Error: Unable to serialize the provided data - ${error}`; 10 | } 11 | }; 12 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/assignment_builder/vitest.setup.ts: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom'; 2 | import { configure } from '@testing-library/react'; 3 | 4 | configure({ 5 | asyncUtilTimeout: 10000, 6 | }); 7 | -------------------------------------------------------------------------------- /bases/rsptx/assignment_server_api/routers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/assignment_server_api/routers/__init__.py -------------------------------------------------------------------------------- /bases/rsptx/author_server_api/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.author_server_api import core 2 | from rsptx.author_server_api import worker 3 | from rsptx.author_server_api import main 4 | 5 | __all__ = ["core", "main", "worker"] 6 | -------------------------------------------------------------------------------- /bases/rsptx/author_server_api/core.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/author_server_api/core.py -------------------------------------------------------------------------------- /bases/rsptx/book_server_api/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.book_server_api import core 2 | from rsptx.book_server_api import main 3 | from rsptx.book_server_api import __main__ 4 | 5 | __all__ = ["core", "main", "__main__"] 6 | -------------------------------------------------------------------------------- /bases/rsptx/book_server_api/core.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/book_server_api/core.py -------------------------------------------------------------------------------- /bases/rsptx/book_server_api/routers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/book_server_api/routers/__init__.py -------------------------------------------------------------------------------- /bases/rsptx/book_server_api/runestone_dev.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/book_server_api/runestone_dev.db -------------------------------------------------------------------------------- /bases/rsptx/dash_server_api/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.dash_server_api import core 2 | 3 | __all__ = ["core"] 4 | 5 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.interactives import core 2 | from rsptx.interactives.runestone import __main__ 3 | from rsptx.interactives import runestone 4 | 5 | __all__ = ["core", "__main__", "runestone"] 6 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/core.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/core.py -------------------------------------------------------------------------------- /bases/rsptx/interactives/pytest.ini: -------------------------------------------------------------------------------- 1 | # **************************** 2 | # |docname| - Configure pytest 3 | # **************************** 4 | [pytest] 5 | # See `Registering marks `_; this mark is defined in `selenium_module_fixture`. 6 | markers = 7 | exit_status_success: Determine if the runestone build exit code is checked by ``selenium_module_fixture``. -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/accessibility/__init__.py: -------------------------------------------------------------------------------- 1 | # ************************************ 2 | # |docname| - the accessibility module 3 | # ************************************ 4 | from .accessibility import * 5 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/accessibility/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | css/*.css 10 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/activecode/__init__.py: -------------------------------------------------------------------------------- 1 | # ********* 2 | # |docname| 3 | # ********* 4 | from .activecode import * 5 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/activecode/css/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/activecode/css/close.png -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/activecode/js/skulpt.min.js.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/activecode/js/skulpt.min.js.gz -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/activecode/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/activecode/test/__init__.py -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/activecode/test/_sources/_static/LutherBellPic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/activecode/test/_sources/_static/LutherBellPic.jpg -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/activecode/test/_sources/_static/test.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/activecode/test/_sources/_static/test.db -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/activecode/test/_sources/progresspage.rst: -------------------------------------------------------------------------------- 1 | Progress Bar Testing 2 | ==================== 3 | 4 | .. activecode:: test_activecode_5 5 | 6 | print("Hello World") 7 | 8 | 9 | End of test1 10 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/animation/README.rst: -------------------------------------------------------------------------------- 1 | Animation Directive 2 | =================== 3 | 4 | 5 | Sources: 6 | 7 | CSS: 8 | 9 | None yet 10 | 11 | JS: 12 | 13 | This is the master repository for all js code in this directive. -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/animation/__init__.py: -------------------------------------------------------------------------------- 1 | # ********* 2 | # |docname| 3 | # ********* 4 | from .animation import * 5 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/animation/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Animation 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | README 9 | *.py 10 | js/*.js 11 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/assignment/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************** 2 | Assignment - directives for creating an assignment 3 | ************************************************** 4 | .. toctree:: 5 | :maxdepth: 1 6 | 7 | __init__.py 8 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/blockly/README.rst: -------------------------------------------------------------------------------- 1 | Blockly Directive 2 | ================= 3 | 4 | 5 | Sources: 6 | 7 | CSS: 8 | 9 | None 10 | 11 | JS: 12 | 13 | The blockly js files are copied from the latest release of blockly. If you want to customize them 14 | for your project you should fork the project and move the files here. 15 | 16 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/blockly/__init__.py: -------------------------------------------------------------------------------- 1 | from .blockly import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/blockly/js/media/1x1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/blockly/js/media/1x1.gif -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/blockly/js/media/click.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/blockly/js/media/click.mp3 -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/blockly/js/media/click.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/blockly/js/media/click.ogg -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/blockly/js/media/click.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/blockly/js/media/click.wav -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/blockly/js/media/delete.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/blockly/js/media/delete.mp3 -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/blockly/js/media/delete.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/blockly/js/media/delete.ogg -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/blockly/js/media/delete.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/blockly/js/media/delete.wav -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/blockly/js/media/handclosed.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/blockly/js/media/handclosed.cur -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/blockly/js/media/handopen.cur: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/blockly/js/media/handopen.cur -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/blockly/js/media/quote0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/blockly/js/media/quote0.png -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/blockly/js/media/quote1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/blockly/js/media/quote1.png -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/blockly/js/media/trashbody.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/blockly/js/media/trashbody.png -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/blockly/js/media/trashlid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/blockly/js/media/trashlid.png -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/blockly/js/media/tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/blockly/js/media/tree.png -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/blockly/toctree.rst: -------------------------------------------------------------------------------- 1 | ******************************************************** 2 | Blockly - Embed block-based code generation in Runestone 3 | ******************************************************** 4 | Warning: This component is deprecated. Do not use it in new books. 5 | 6 | .. toctree:: 7 | :maxdepth: 1 8 | :glob: 9 | 10 | README 11 | *.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/cellbotics/test/__init__.py: -------------------------------------------------------------------------------- 1 | # ********************************************** 2 | # |docname| - Define this directory as a package 3 | # ********************************************** -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/cellbotics/test/_sources/index.rst: -------------------------------------------------------------------------------- 1 | Cellbotics ActiveCode Test 2 | ========================== 3 | .. ble-pair-button:: 4 | 5 | .. activecode:: test_cellbotics_1 6 | 7 | import cellbotics 8 | cellbotics.Accelerometer() 9 | print("Pass.") 10 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/chapterdb/__init__.py: -------------------------------------------------------------------------------- 1 | from .dbchapterinfo import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/chapterdb/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/clickableArea/__init__.py: -------------------------------------------------------------------------------- 1 | from .clickable import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/clickableArea/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/clickableArea/test/__init__.py -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/clickableArea/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/codelens/__init__.py: -------------------------------------------------------------------------------- 1 | from .visualizer import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/codelens/css/x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/codelens/css/x.png -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/codelens/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/common/__init__.py: -------------------------------------------------------------------------------- 1 | from .runestonedirective import ( 2 | setup, 3 | RunestoneDirective, 4 | RunestoneIdDirective, 5 | RunestoneNode, 6 | RunestoneIdNode, 7 | get_node_line, 8 | ) 9 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/common/css/active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/common/css/active.png -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/common/css/completed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/common/css/completed.png -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/common/css/presenter_mode.less: -------------------------------------------------------------------------------- 1 | .runestone-sphinx { 2 | @import (less) url("./presenter_mode.css"); 3 | } 4 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/common/images/play_overlay_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/common/images/play_overlay_icon.png -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/common/project_template/_static/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/common/project_template/_static/.gitignore -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/common/project_template/_static/clock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/common/project_template/_static/clock.png -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/common/project_template/_templates/plugin_layouts/sphinx_bootstrap/localtoc.html: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/common/project_template/_templates/plugin_layouts/sphinx_bootstrap/sourcelink.html: -------------------------------------------------------------------------------- 1 | {%- if show_source and has_source and sourcename %} 2 | {{ _('Source') }} 4 | {%- endif %} 5 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/common/project_template/_templates/plugin_layouts/sphinx_bootstrap/static/img/Facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/common/project_template/_templates/plugin_layouts/sphinx_bootstrap/static/img/Facebook.png -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/common/project_template/_templates/plugin_layouts/sphinx_bootstrap/static/img/Facebook_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/common/project_template/_templates/plugin_layouts/sphinx_bootstrap/static/img/Facebook_icon.png -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/common/project_template/_templates/plugin_layouts/sphinx_bootstrap/static/img/RAIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/common/project_template/_templates/plugin_layouts/sphinx_bootstrap/static/img/RAIcon.png -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/common/project_template/_templates/plugin_layouts/sphinx_bootstrap/static/img/Twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/common/project_template/_templates/plugin_layouts/sphinx_bootstrap/static/img/Twitter.png -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/common/project_template/_templates/plugin_layouts/sphinx_bootstrap/static/img/Twitter_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/common/project_template/_templates/plugin_layouts/sphinx_bootstrap/static/img/Twitter_icon.png -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/common/project_template/_templates/plugin_layouts/sphinx_bootstrap/static/img/logo_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/common/project_template/_templates/plugin_layouts/sphinx_bootstrap/static/img/logo_small.png -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/common/test/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/common/test/test_error/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/common/test/test_error/__init__.py -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/common/test/test_error/_sources/index.rst: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/common/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/datafile/test/_sources/LutherBellPic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/datafile/test/_sources/LutherBellPic.jpg -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/datafile/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/disqus/__init__.py: -------------------------------------------------------------------------------- 1 | from .disqus import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/disqus/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/dragndrop/__init__.py: -------------------------------------------------------------------------------- 1 | from .dragndrop import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/dragndrop/js/dragndrop-i18n.en.js: -------------------------------------------------------------------------------- 1 | $.i18n().load({ 2 | en: { 3 | msg_dragndrop_correct_answer: "You are correct!", 4 | msg_dragndrop_incorrect_answer: 5 | "Incorrect. You got $1 correct and $2 incorrect out of $3. You left $4 unmatched.", 6 | msg_dragndrop_check_me: "Check me", 7 | msg_dragndrop_reset: "Reset", 8 | }, 9 | }); 10 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/dragndrop/js/dragndrop-i18n.pt-br.js: -------------------------------------------------------------------------------- 1 | $.i18n().load({ 2 | "pt-br": { 3 | msg_dragndrop_correct_answer: "Correto!", 4 | msg_dragndrop_incorrect_answer: 5 | "Incorreto. Você teve $1 correto(s) e $2 incorreto(s) de $3. Você deixou $4 em branco.", 6 | msg_dragndrop_check_me: "Verificar", 7 | msg_dragndrop_reset: "Resetar", 8 | }, 9 | }); 10 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/dragndrop/js/dragndrop-i18n.sr-Cyrl.js: -------------------------------------------------------------------------------- 1 | $.i18n().load({ 2 | "sr-Cyrl": { 3 | msg_dragndrop_correct_answer: "Тачан одговор!", 4 | msg_dragndrop_incorrect_answer: 5 | "Нетачно. Добили сте $1 тачних и $2 нетачних од $3. Остало вам је $4 празнина.", 6 | msg_dragndrop_check_me: "Провери", 7 | msg_dragndrop_reset: "Поништи", 8 | }, 9 | }); 10 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/dragndrop/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/dragndrop/test/__init__.py -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/dragndrop/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/fitb/__init__.py: -------------------------------------------------------------------------------- 1 | from .fitb import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/fitb/css/fitb.css: -------------------------------------------------------------------------------- 1 | .selectwidthauto { 2 | width:auto !important; 3 | display: inline-block !important; 4 | margin: 5px; 5 | } 6 | 7 | input.input-validation-error { 8 | border: 1px solid #e80c4d; 9 | } 10 | 11 | 12 | .dark-mode .fillintheblank_section input[type="text"] { 13 | color: unset; 14 | background-color: #333; 15 | } -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/fitb/js/fitb-i18n.en.js: -------------------------------------------------------------------------------- 1 | $.i18n().load({ 2 | en: { 3 | msg_no_answer: "No answer provided.", 4 | msg_fitb_check_me: "Check me", 5 | msg_fitb_compare_me: "Compare me", 6 | msg_fitb_randomize: "Randomize", 7 | }, 8 | }); 9 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/fitb/js/fitb-i18n.pt-br.js: -------------------------------------------------------------------------------- 1 | $.i18n().load({ 2 | "pt-br": { 3 | msg_no_answer: "Nenhuma resposta dada.", 4 | msg_fitb_check_me: "Verificar", 5 | msg_fitb_compare_me: "Comparar" 6 | }, 7 | }); 8 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/fitb/js/fitb-i18n.sr-Cyrl.js: -------------------------------------------------------------------------------- 1 | $.i18n().load({ 2 | "sr-Cyrl": { 3 | msg_no_answer: "Неодговорено.", 4 | msg_fitb_check_me: "Провери", 5 | msg_fitb_compare_me: "Упореди", 6 | }, 7 | }); 8 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/fitb/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/fitb/test/__init__.py -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/fitb/toctree.rst: -------------------------------------------------------------------------------- 1 | ******************************************************** 2 | fitb: A Sphinx extension for fill-in-the-blank questions 3 | ******************************************************** 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | fitb_html_structure.html 12 | dynamic_problems.rst 13 | test/test_*.py 14 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/groupsub/__init__.py: -------------------------------------------------------------------------------- 1 | from .groupsub import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/groupsub/css/groupsub.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/groupsub/css/groupsub.css -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/hparsons/__init__.py: -------------------------------------------------------------------------------- 1 | from .hparsons import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/hparsons/test/_sources/_static/hptest.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/hparsons/test/_sources/_static/hptest.db -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/hparsons/test/_sources/_static/test.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/hparsons/test/_sources/_static/test.db -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/hparsons/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/khanex/__init__.py: -------------------------------------------------------------------------------- 1 | from .khanex import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/khanex/test/_sources/Khanex/toctree.rst: -------------------------------------------------------------------------------- 1 | .. image:: ../../_static/MobileCSPLogo.png 2 | :width: 250 3 | :align: center 4 | 5 | 6 | Khanex 7 | :::::::: 8 | 9 | .. toctree:: 10 | :caption: Khanex Test 11 | :maxdepth: 3 12 | 13 | TestKhanex.rst 14 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/lp/__init__.py: -------------------------------------------------------------------------------- 1 | # ******************************** 2 | # |docname| - LP module definition 3 | # ******************************** 4 | from runestone.lp import inlinesyntaxhighlight, lp 5 | 6 | # Register the for loop directive with Sphinx. 7 | from runestone.lp import for_loop # NOQA: F401 8 | 9 | 10 | # Initialize both extensions. 11 | def setup(app): 12 | inlinesyntaxhighlight.setup(app) 13 | return lp.setup(app) 14 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/lp/css/html4css1.css: -------------------------------------------------------------------------------- 1 | /* 2 | **************************** 3 | |docname| - Dummy CSS for LP 4 | **************************** 5 | This file is blank for Runestone -- other CodeChat instances supply something useful here. 6 | */ -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/lp/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Literate programming (LP) 3 | ************************************************* 4 | The following files define the Literate Programming directive for Runestone, as well as adding some unrelated functionality. 5 | 6 | .. toctree:: 7 | :maxdepth: 1 8 | :glob: 9 | 10 | *.py 11 | js/*.js 12 | css/*.css 13 | test/test_*.py 14 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/matching/.gitignore: -------------------------------------------------------------------------------- 1 | test/_static 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/matching/css/matching.less: -------------------------------------------------------------------------------- 1 | .ptx-runestone-container, 2 | .runestone-sphinx { 3 | @import (less) url("./matching.css"); 4 | } 5 | 6 | :root { 7 | --dragLineColor: #000000; 8 | --boxBorderColor: #000000; 9 | } 10 | 11 | :root.dark-mode, 12 | [data-theme="dark"] { 13 | --dragLineColor: #ffffff; 14 | --boxBorderColor: #ffffff; 15 | } -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/matrixeq/__init__.py: -------------------------------------------------------------------------------- 1 | from .matrixeq import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/matrixeq/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/matrixeq/test/__init__.py -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/matrixeq/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/mchoice/.gitignore: -------------------------------------------------------------------------------- 1 | *.woff2 2 | *.woff 3 | *.ttf 4 | *.eot 5 | *.svg 6 | 7 | node_modules/ 8 | bower_components/ 9 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/mchoice/__init__.py: -------------------------------------------------------------------------------- 1 | from .multiplechoice import * 2 | from .assessbase import * 3 | from .assess import * 4 | 5 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/mchoice/css/mchoice.css: -------------------------------------------------------------------------------- 1 | .runestone label p { 2 | display: inline; 3 | font-weight: normal !important; 4 | } 5 | 6 | .runestone label pre { 7 | font-weight: normal; 8 | } 9 | 10 | .runestone fieldset legend { 11 | font-size: small; 12 | } 13 | 14 | .multiplechoice_section label > .para { 15 | display: inline; 16 | } 17 | 18 | .multiplechoice_section .exercise-interactives { 19 | margin-top: 1em; 20 | } -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/mchoice/js/mchoice-i18n.en.js: -------------------------------------------------------------------------------- 1 | $.i18n().load({ 2 | en: { 3 | msg_mchoice_correct_answer: "Correct.", 4 | msg_mchoice_incorrect_answer: 5 | "Incorrect. You gave $1 $2 and got $3 correct of $4 needed.", 6 | msg_mchoice_check_me: "Check me", 7 | msg_mchoice_compare_me: "Compare me", 8 | }, 9 | }); 10 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/mchoice/js/mchoice-i18n.pt-br.js: -------------------------------------------------------------------------------- 1 | $.i18n().load({ 2 | "pt-br": { 3 | msg_mchoice_correct_answer: "Correto.", 4 | msg_mchoice_incorrect_answer: 5 | "Incorreto. Você deu $1 resposta(s) e teve $3 correto(s) de $4 necessários.", 6 | msg_mchoice_check_me: "Verificar", 7 | msg_mchoice_compare_me: "Comparar", 8 | }, 9 | }); 10 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/mchoice/js/mchoice-i18n.sr-Cyrl.js: -------------------------------------------------------------------------------- 1 | $.i18n().load({ 2 | "sr-Cyrl": { 3 | msg_mchoice_correct_answer: "Taчно!", 4 | msg_mchoice_incorrect_answer: "Нетачно.", 5 | msg_mchoice_check_me: "Провери", 6 | msg_mchoice_compare_me: "Упореди", 7 | }, 8 | }); 9 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/mchoice/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/mchoice/test/__init__.py -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/mchoice/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/meta/__init__.py: -------------------------------------------------------------------------------- 1 | from .meta import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/meta/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/parsons/README.rst: -------------------------------------------------------------------------------- 1 | Parsons Directive 2 | ================= 3 | 4 | The master repository for the parsons problems code is https://github.com/vkaravir/js-parsons.git 5 | 6 | If you want to make customizations ONLY for runestone you should use the fork at https://github.com/bnmnetp/js-parsons.git 7 | 8 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/parsons/__init__.py: -------------------------------------------------------------------------------- 1 | from .parsons import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/parsons/css/parsons.less: -------------------------------------------------------------------------------- 1 | .ptx-runestone-container,.runestone-sphinx { 2 | @import (less) url("./parsons.css"); 3 | 4 | } 5 | 6 | /* make entire block background match background of code */ 7 | :root.dark-mode { 8 | .ptx-runestone-container .parsons .block:has(code[class*=language-]) { 9 | background: hsl(0, 0%, 8%); 10 | } 11 | } -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/parsons/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/parsons/test/__init__.py -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/parsons/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/poll/__init__.py: -------------------------------------------------------------------------------- 1 | from .poll import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/poll/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/poll/test/__init__.py -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/poll/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/question/__init__.py: -------------------------------------------------------------------------------- 1 | from .question import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/question/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/question/test/__init__.py -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/question/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/quizly/__init__.py: -------------------------------------------------------------------------------- 1 | from .quizly import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/quizly/test/_sources/Quizly/toctree.rst: -------------------------------------------------------------------------------- 1 | .. image:: ../../_static/MobileCSPLogo.png 2 | :width: 250 3 | :align: center 4 | 5 | 6 | Quizly 7 | :::::::: 8 | 9 | .. toctree:: 10 | :caption: Quizly Test 11 | :maxdepth: 3 12 | 13 | TestQuizly.rst 14 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/quizly/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/reveal/__init__.py: -------------------------------------------------------------------------------- 1 | from .reveal import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/reveal/css/reveal.css: -------------------------------------------------------------------------------- 1 | .iguide { 2 | background-color: #ddffdd; 3 | padding: 1em; 4 | } -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/reveal/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/reveal/test/__init__.py -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/reveal/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/selectquestion/__init__.py: -------------------------------------------------------------------------------- 1 | from .selectone import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/selectquestion/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Dynamic Questions 3 | ************************************************* 4 | See the `overview book `_ for user documentation. 5 | 6 | .. toctree:: 7 | :maxdepth: 1 8 | :glob: 9 | 10 | *.py 11 | js/*.js 12 | css/*.css 13 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/server/__init__.py: -------------------------------------------------------------------------------- 1 | from .componentdb import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/server/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/shortanswer/__init__.py: -------------------------------------------------------------------------------- 1 | from .shortanswer import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/shortanswer/css/shortanswer.css: -------------------------------------------------------------------------------- 1 | div.journal div.latexoutput { 2 | background-color: var(--outerBackground, #eeeeee); 3 | padding: 1em; 4 | margin-bottom: 10px; 5 | border-radius: 5px; 6 | } 7 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/shortanswer/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/shortanswer/test/__init__.py -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/shortanswer/test/_sources/Figures/LutherBellPic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/shortanswer/test/_sources/Figures/LutherBellPic.jpg -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/shortanswer/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/showeval/__init__.py: -------------------------------------------------------------------------------- 1 | from .showeval import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/showeval/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/showeval/test/__init__.py -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/showeval/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/spreadsheet/__init__.py: -------------------------------------------------------------------------------- 1 | from .spreadsheet import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/spreadsheet/css/spreadsheet.css: -------------------------------------------------------------------------------- 1 | div.runestone .jexcel_container { 2 | max-height: 550px; 3 | overflow: scroll; 4 | max-width: 800px; 5 | overflow: scroll; 6 | } -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/spreadsheet/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/tabbedStuff/__init__.py: -------------------------------------------------------------------------------- 1 | from .tabbedStuff import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/tabbedStuff/test/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/runestone/tabbedStuff/test/__init__.py -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/tabbedStuff/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/timed/__init__.py: -------------------------------------------------------------------------------- 1 | from .timedassessment import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/timed/css/timed.less: -------------------------------------------------------------------------------- 1 | .ptx-runestone-container,.runestone-sphinx { 2 | @import (less) url("./timed.css"); 3 | } 4 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/timed/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Timed Exam Questions 3 | ************************************************* 4 | See the `overview book `_ for user documentation. 5 | 6 | .. toctree:: 7 | :maxdepth: 1 8 | :glob: 9 | 10 | *.py 11 | js/*.js 12 | css/*.css 13 | test/test_*.py 14 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/utility/__init__.py: -------------------------------------------------------------------------------- 1 | from .utility import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/utility/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/video/__init__.py: -------------------------------------------------------------------------------- 1 | from .video import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/video/test/_sources/index.rst: -------------------------------------------------------------------------------- 1 | ================== 2 | Video Test Project 3 | ================== 4 | 5 | 6 | Lets try a YouTube Video 7 | 8 | 9 | .. youtube:: eDQ19ahXsSk 10 | :divid: goog_keyvalpairs 11 | :height: 315 12 | :width: 560 13 | :align: left 14 | 15 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/video/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/wavedrom/__init__.py: -------------------------------------------------------------------------------- 1 | from .wavedrom import setup 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/wavedrom/test/_sources/index.rst: -------------------------------------------------------------------------------- 1 | ************* 2 | Wavedrom test 3 | ************* 4 | 5 | .. wavedrom:: 6 | :caption: Two signals, PB1 (the pushbutton) and LED1, change over time. 7 | 8 | signal: [ 9 | {name: 'PB1', wave: '1.0..1..0..1..', node: '..a..b..c..d', phase: 0.5}, 10 | {name: 'LED1', wave: '0.1.....0....', node: '..f.....g'}, 11 | ], edge: [ 12 | 'a~f', 'c~g', 13 | ], 14 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/wavedrom/test/test_wavedrom.py: -------------------------------------------------------------------------------- 1 | def test_1(selenium_utils_get): 2 | # After the render, Wavedrom will create a div with a numbered ID. If this exists, then the render worked. Don't try waiting for the component to be ready, since this isn't a Runestone Component -- it doesn't emit a ready signal. 3 | selenium_utils_get.driver.find_element_by_id("WaveDrom_Display_0") 4 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/webgldemo/__init__.py: -------------------------------------------------------------------------------- 1 | from .webgldemo import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/webgldemo/css/webgldemo.css: -------------------------------------------------------------------------------- 1 | /* Major sections */ 2 | .webgldemo_container { 3 | background-color: #fcf8e3; 4 | box-sizing: border-box; 5 | width: 100%; 6 | display: block; 7 | margin-bottom: 1em; 8 | } 9 | 10 | .webgldemo_canvas { 11 | background-color: #fcf8e3; 12 | box-sizing: border-box; 13 | } 14 | 15 | .webgldemo_controls { 16 | } 17 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/webgldemo/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/runestone/webwork/toctree.rst: -------------------------------------------------------------------------------- 1 | ************************************************* 2 | Accessibility 3 | ************************************************* 4 | .. toctree:: 5 | :maxdepth: 1 6 | :glob: 7 | 8 | *.py 9 | js/*.js 10 | css/*.css 11 | test/test_*.py 12 | -------------------------------------------------------------------------------- /bases/rsptx/interactives/scripts/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/interactives/scripts/__init__.py -------------------------------------------------------------------------------- /bases/rsptx/interactives/scripts/makePtx.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if (( $# < 1 )); then 4 | echo "please provide version number" 5 | exit 6 | fi 7 | 8 | source ~/.virtualenvs/compdev39/bin/activate 9 | npm run dist 10 | source ~/.virtualenvs/json2xml/bin/activate 11 | python scripts/dist2xml.py $@ > runestone/dist/webpack_static_imports.xml 12 | cd runestone 13 | tar zcf dist-$1.tgz dist 14 | deactivate 15 | -------------------------------------------------------------------------------- /bases/rsptx/rsmanage/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.rsmanage import core 2 | 3 | __all__ = ["core"] 4 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/MANIFEST.in: -------------------------------------------------------------------------------- 1 | include VERSION LICENSE 2 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/VERSION: -------------------------------------------------------------------------------- 1 | Version 2.23.1-stable+timestamp.2023.01.31.08.01.46 2 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.web2py_server import core 2 | 3 | __all__ = ["core"] 4 | 5 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/ABOUT: -------------------------------------------------------------------------------- 1 | web2py is an open source full-stack framework for agile development 2 | of secure database-driven web-based applications, written and programmable in 3 | Python. 4 | 5 | Created by Massimo Di Pierro 6 | 7 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/controllers/plugin_jqmobile.py: -------------------------------------------------------------------------------- 1 | response.files = response.files[:3] 2 | response.menu = [] 3 | 4 | 5 | def index(): 6 | return locals() 7 | 8 | 9 | def about(): 10 | return locals() 11 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/languages/plural-en.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | { 4 | # "singular form (0)": ["first plural form (1)", "second plural form (2)", ...], 5 | 'file': ['files'], 6 | } 7 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/languages/plural-ru.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | { 4 | # "singular form (0)": ["first plural form (1)", "second plural form (2)", ...], 5 | 'файл': ['файла','файлов'], 6 | } 7 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/languages/plural-uk.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | { 4 | # "singular form (0)": ["first plural form (1)", "second plural form (2)", ...], 5 | 'останній': ['останні','останніх'], 6 | 'файл': ['файли','файлів'], 7 | 'твіт': ['твіти','твітів'], 8 | } 9 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/models/plugin_multiselect.py: -------------------------------------------------------------------------------- 1 | response.files.append( 2 | URL('static', 'plugin_multiselect/jquery.multi-select.js')) 3 | response.files.append(URL('static', 'plugin_multiselect/multi-select.css')) 4 | response.files.append(URL('static', 'plugin_multiselect/start.js')) 5 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/modules/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/private/hosts.deny: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/private/hosts.deny -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/sessions/10e/1c6/127.0.0.1-cb884fdc-c31c-4179-9434-43db4b7df05e: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/sessions/10e/1c6/127.0.0.1-cb884fdc-c31c-4179-9434-43db4b7df05e -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/settings.cfg: -------------------------------------------------------------------------------- 1 | [editor] 2 | theme = twilight 3 | editor = sublime 4 | closetag = true 5 | tabwidth = 4 6 | highlightline = true 7 | linenumbers = true 8 | codefolding = false 9 | indentwithtabs = false 10 | 11 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/codemirror/addon/display/fullscreen.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-fullscreen { 2 | position: fixed; 3 | top: 0; left: 0; right: 0; bottom: 0; 4 | height: auto; 5 | z-index: 9; 6 | } 7 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/codemirror/addon/search/matchesonscrollbar.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-search-match { 2 | background: gold; 3 | border-top: 1px solid orange; 4 | border-bottom: 1px solid orange; 5 | -moz-box-sizing: border-box; 6 | box-sizing: border-box; 7 | opacity: .5; 8 | } 9 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/codemirror/theme/ambiance-mobile.css: -------------------------------------------------------------------------------- 1 | .cm-s-ambiance.CodeMirror { 2 | -webkit-box-shadow: none; 3 | -moz-box-shadow: none; 4 | box-shadow: none; 5 | } 6 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/chat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/chat.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/delete_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/delete_icon.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/dim_bullet.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/dim_bullet.gif -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/embossed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/embossed.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/files_toggle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/files_toggle.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/folder.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/folder_locked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/folder_locked.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/folder_sm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/folder_sm.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/glyphicons-halflings.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/header_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/header_bg.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/header_shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/header_shadow.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/help.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/menu.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/menu_responsive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/menu_responsive.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/questions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/questions.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/red_bullet.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/red_bullet.gif -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/save_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/save_icon.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/search.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/section_bullet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/section_bullet.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/sidebar_background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/sidebar_background.jpg -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/sidebar_bullet.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/sidebar_bullet.gif -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/small_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/small_button.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/small_special_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/small_special_button.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/spinner.gif -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/start.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/test_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/test_icon.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/images/ticket_section.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/images/ticket_section.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/plugin_jqmobile/images/ajax-loader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/plugin_jqmobile/images/ajax-loader.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/plugin_jqmobile/images/icons-18-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/plugin_jqmobile/images/icons-18-black.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/plugin_jqmobile/images/icons-18-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/plugin_jqmobile/images/icons-18-white.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/plugin_jqmobile/images/icons-36-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/plugin_jqmobile/images/icons-36-black.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/plugin_jqmobile/images/icons-36-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/plugin_jqmobile/images/icons-36-white.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/plugin_jqmobile/images/iphone.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/plugin_jqmobile/images/iphone.jpg -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/plugin_multiselect/start.js: -------------------------------------------------------------------------------- 1 | jQuery(document).ready(function(){jQuery('[multiple]').multiSelect({selectableHeader:'Options',selectedHeader:'Selected'});}); 2 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/static/plugin_multiselect/switch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/admin/static/plugin_multiselect/switch.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/views/default.mobile/change_password.html: -------------------------------------------------------------------------------- 1 | {{extend 'default.mobile/layout.html'}} 2 | 3 | {{block sectionclass}}change_password{{end}} 4 | 5 |

Change Admin Password

6 | 7 |
8 | {{=form}} 9 |
10 | 11 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/views/default.mobile/delete_plugin.html: -------------------------------------------------------------------------------- 1 | {{extend 'default.mobile/layout.html'}} 2 | 3 | {{block sectionclass}}delete_plugin{{end}} 4 | 5 |
6 |

{{=T('Are you sure you want to delete plugin "%s"?', plugin)}}

7 |

{{=FORM(INPUT(_type='submit',_name='nodelete',_value=T('NO')))}}

8 |

{{=FORM(INPUT(_type='submit',_name='delete',_value=T('YES')))}}

9 |
10 | 11 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/views/default.mobile/uninstall.html: -------------------------------------------------------------------------------- 1 | {{extend 'default.mobile/layout.html'}} 2 | 3 |
4 |

{{=T('Are you sure you want to uninstall application "%s"?', app)}}

5 | 6 | 7 | 8 |
{{=FORM(INPUT(_type='submit',_name='nodelete',_value=T('Abort')))}}{{=FORM(INPUT(_type='submit',_name='delete',_value=T('Uninstall')))}}
9 |
10 | 11 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/views/default/files_menu.html: -------------------------------------------------------------------------------- 1 | {{for files in result_files:}} 2 | {{=files}} 3 | {{pass}} -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/views/default/git_push.html: -------------------------------------------------------------------------------- 1 | {{extend 'layout.html'}} 2 | {{ 3 | frm = form 4 | smt_button = frm.element(_type="submit") 5 | smt_button['_class'] = 'btn' 6 | smt_button['_style'] = 'margin-right:4px;' 7 | }} 8 | 9 |

{{=T('This will push changes to the remote repo for application "%s".', app)}}

10 |
11 | {{=form}} 12 |
13 | 14 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/views/default/uninstall.html: -------------------------------------------------------------------------------- 1 | {{extend 'layout.html'}} 2 | 3 |

{{=T('Are you sure you want to uninstall application "%s"?', app)}}

4 |
5 | {{=dialog}} 6 |
7 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/admin/views/mercurial/revision.html: -------------------------------------------------------------------------------- 1 | {{extend 'layout.html'}} 2 | 3 |

{{=T('Revision %s', rev)}}

4 | 5 | {{=form}} 6 | 7 |

8 |

{{=T('Changelog')}}

9 | 10 | {{=desc}} 11 | 12 |

13 |

{{=T('Files added')}}

14 | 15 | {{=TABLE(*[TR(f) for f in files])}} 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/.coveralls.yml: -------------------------------------------------------------------------------- 1 | repo_token: luElJYbYOu3bnb0nka7qFTq0xbyGxrP9a 2 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/.git-blame-ignore-revs: -------------------------------------------------------------------------------- 1 | ed4b5bca88882e20398ae92777d470bee7571363 2 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/.gitattributes: -------------------------------------------------------------------------------- 1 | # Ensure files that must always have LF line endings on checkout will by ensuring Docker build and bash scripts will work regardless of OS 2 | 3 | Dockerfile text eol=lf 4 | *.sh text eol=lf 5 | scripts/** text eol=lf 6 | docker/docker_tools.py eol=lf 7 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/.gitmodules: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/.gitmodules -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "esversion": 8 3 | } 4 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/.prettierignore: -------------------------------------------------------------------------------- 1 | views -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/.prettierrc.js: -------------------------------------------------------------------------------- 1 | // prettier.config.js or .prettierrc.js 2 | module.exports = { 3 | trailingComma: "es5", 4 | tabWidth: 4, 5 | printWidth: 89, 6 | }; 7 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/__init__.py -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | build_info 3 | sphinx_settings.json 4 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/__pycache__/pavement.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/__pycache__/pavement.cpython-39.pyc -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_sources/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | # except 3 | !.gitignore 4 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_sources/index.rst: -------------------------------------------------------------------------------- 1 | 2 | .. raw:: html 3 | 4 | 5 | 6 | .. fillintheblank:: question_1 7 | 8 | Mary had a π. 9 | 10 | - :x: Whatever. 11 | 12 | 13 | .. raw:: html 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_static/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_static/.gitignore -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_static/activecodethumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_static/activecodethumb.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_static/audio/Example04_Tour01_Line01.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_static/audio/Example04_Tour01_Line01.mp3 -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_static/audio/Example04_Tour01_Line01.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_static/audio/Example04_Tour01_Line01.wav -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_static/audio/Example04_Tour01_Line02.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_static/audio/Example04_Tour01_Line02.mp3 -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_static/audio/Example04_Tour01_Line02.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_static/audio/Example04_Tour01_Line02.wav -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_static/audio/Example04_Tour01_Line03.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_static/audio/Example04_Tour01_Line03.mp3 -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_static/audio/Example04_Tour01_Line03.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_static/audio/Example04_Tour01_Line03.wav -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_static/clock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_static/clock.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_static/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_static/close.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_static/first.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_static/first.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_static/last.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_static/last.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_static/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_static/next.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_static/pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_static/pause.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_static/prev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_static/prev.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_templates/plugin_layouts/sphinx_bootstrap/localtoc.html: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_templates/plugin_layouts/sphinx_bootstrap/sourcelink.html: -------------------------------------------------------------------------------- 1 | {%- if show_source and has_source and sourcename %} 2 | {{ _('Source') }} 4 | {%- endif %} 5 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_templates/plugin_layouts/sphinx_bootstrap/static/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_templates/plugin_layouts/sphinx_bootstrap/static/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_templates/plugin_layouts/sphinx_bootstrap/static/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_templates/plugin_layouts/sphinx_bootstrap/static/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_templates/plugin_layouts/sphinx_bootstrap/static/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_templates/plugin_layouts/sphinx_bootstrap/static/bootstrap-3.0.0/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_templates/plugin_layouts/sphinx_bootstrap/static/img/Facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_templates/plugin_layouts/sphinx_bootstrap/static/img/Facebook.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_templates/plugin_layouts/sphinx_bootstrap/static/img/Facebook_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_templates/plugin_layouts/sphinx_bootstrap/static/img/Facebook_icon.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_templates/plugin_layouts/sphinx_bootstrap/static/img/Twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_templates/plugin_layouts/sphinx_bootstrap/static/img/Twitter.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_templates/plugin_layouts/sphinx_bootstrap/static/img/Twitter_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_templates/plugin_layouts/sphinx_bootstrap/static/img/Twitter_icon.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/build/preview/_templates/plugin_layouts/sphinx_bootstrap/static/img/logo_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/build/preview/_templates/plugin_layouts/sphinx_bootstrap/static/img/logo_small.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/controllers/oauth.py: -------------------------------------------------------------------------------- 1 | # This page provides an endpoint for getting an oauth redirect after an oauth verification process 2 | def index(): 3 | full_url = URL(args=request.args, vars=request.get_vars, host=True) 4 | return {"url": full_url} 5 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/controllers/toctree.rst: -------------------------------------------------------------------------------- 1 | ****************** 2 | Web2py controllers 3 | ****************** 4 | 5 | .. toctree:: 6 | :maxdepth: 2 7 | :glob: 8 | 9 | *.py 10 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/errors/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/errors/.keep -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/models/menu.py: -------------------------------------------------------------------------------- 1 | response.title = settings.title 2 | response.subtitle = settings.subtitle 3 | response.meta.author = "%(author)s <%(author_email)s>" % settings 4 | response.meta.keywords = settings.keywords 5 | response.meta.description = settings.description 6 | response.menu = [ 7 | (T("Index"), URL("default", "index") == URL(), URL("default", "index"), []) 8 | ] 9 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/models/toctree.rst: -------------------------------------------------------------------------------- 1 | ************* 2 | Web2py models 3 | ************* 4 | 5 | .. toctree:: 6 | :maxdepth: 2 7 | :glob: 8 | 9 | *.py 10 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/modules/.gitignore: -------------------------------------------------------------------------------- 1 | # Except this file 2 | !.gitignore 3 | 4 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/modules/__init__.py: -------------------------------------------------------------------------------- 1 | # ************************** 2 | # |docname| - web2py modules 3 | # ************************** 4 | # .. toctree:: 5 | # :maxdepth: 2 6 | # :glob: 7 | # 8 | # *.py 9 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/requirements-rtd.txt: -------------------------------------------------------------------------------- 1 | CodeChat 2 | myst_parser 3 | sphinx_rtd_theme 4 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/scripts/sumuse: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ps -u bnmnetp -o rss,pid,ppid,command 3 | echo "-----" 4 | ps -u bnmnetp -o rss,pid,ppid,command | awk '{sum += $1 }; END {print sum}' - 5 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/scripts/toctree.rst: -------------------------------------------------------------------------------- 1 | ************ 2 | Misc scripts 3 | ************ 4 | 5 | .. toctree:: 6 | :maxdepth: 2 7 | :glob: 8 | 9 | *.py 10 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_images/SIGCSE-logo-large.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_images/SIGCSE-logo-large.jpg -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_images/SPP_Logo_Horizontal_Final2020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_images/SPP_Logo_Horizontal_Final2020.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_images/Texas__oneColor_orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_images/Texas__oneColor_orange.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_images/U-M-logo-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_images/U-M-logo-preview.jpg -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_images/UT_Square_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_images/UT_Square_logo.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_images/logo-trademark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_images/logo-trademark.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_images/luther_college_vertical_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_images/luther_college_vertical_blue.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_images/nsf-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_images/nsf-logo.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_images/ptx-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_images/ptx-logo.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_images/rsi_logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_images/rsi_logo.jpg -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_images/searchicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_images/searchicon.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_images/searchicon2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_images/searchicon2.jpg -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_static/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_static/ajax-loader.gif -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_static/clock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_static/clock.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_static/comment-bright.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_static/comment-bright.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_static/comment-close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_static/comment-close.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_static/comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_static/comment.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_static/contents.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_static/contents.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_static/down-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_static/down-pressed.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_static/down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_static/down.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_static/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_static/file.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_static/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_static/minus.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_static/navigation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_static/navigation.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_static/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_static/plus.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_static/up-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_static/up-pressed.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/_static/up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/_static/up.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/ads.txt: -------------------------------------------------------------------------------- 1 | google.com, pub-8347101402675282, DIRECT, f08c47fec0942fa0 -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/css/html4css1.css: -------------------------------------------------------------------------------- 1 | /* 2 | **************************** 3 | |docname| - Dummy CSS for LP 4 | **************************** 5 | This file is blank for Runestone -- other CodeChat instances supply something useful here. 6 | */ -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/dashboard/icons/cohorts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/dashboard/icons/cohorts.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/dashboard/icons/gradebook copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/dashboard/icons/gradebook copy.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/dashboard/icons/gradebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/dashboard/icons/gradebook.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/dashboard/icons/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/dashboard/icons/settings.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/favicon.ico -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/Facebook_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/Facebook_icon.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/GettingStartedWithRunestone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/GettingStartedWithRunestone.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/RAIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/RAIcon.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/RAIcon_cropped.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/RAIcon_cropped.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/RunestoneBanner0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/RunestoneBanner0.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/RunestoneBanner1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/RunestoneBanner1.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/RunestoneBanner2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/RunestoneBanner2.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/RunestoneVenmoQR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/RunestoneVenmoQR.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/Twitter_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/Twitter_icon.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/anon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/anon.jpg -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/arrows-ffffff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/arrows-ffffff.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/completed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/completed.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/css3buttons_backgrounds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/css3buttons_backgrounds.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/css3buttons_icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/css3buttons_icons.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/glyphicons-halflings.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/logo_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/logo_small.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/poweredby.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/poweredby.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/seperator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/seperator.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/shadow-section.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/shadow-section.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/shadow.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/spinner10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/spinner10.gif -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/js/jquery-fix.js: -------------------------------------------------------------------------------- 1 | // The Bootstrap-based Sphinx theme uses $jqTheme 2 | // Setting $ is needed to override the (old!) version of jQuery packaged with Sphinx 3 | var $jqTheme = jQuery.noConflict(); 4 | var $ = jQuery.noConflict(); 5 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/30px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/30px.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/32px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/32px.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/fonts/titillium/titilliumweb-bold-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/fonts/titillium/titilliumweb-bold-webfont.eot -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/fonts/titillium/titilliumweb-bold-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/fonts/titillium/titilliumweb-bold-webfont.ttf -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/fonts/titillium/titilliumweb-bold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/fonts/titillium/titilliumweb-bold-webfont.woff -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/fonts/titillium/titilliumweb-extralight-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/fonts/titillium/titilliumweb-extralight-webfont.eot -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/fonts/titillium/titilliumweb-extralight-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/fonts/titillium/titilliumweb-extralight-webfont.ttf -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/fonts/titillium/titilliumweb-extralight-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/fonts/titillium/titilliumweb-extralight-webfont.woff -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/fonts/titillium/titilliumweb-regular-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/fonts/titillium/titilliumweb-regular-webfont.eot -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/fonts/titillium/titilliumweb-regular-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/fonts/titillium/titilliumweb-regular-webfont.ttf -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/fonts/titillium/titilliumweb-regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/fonts/titillium/titilliumweb-regular-webfont.woff -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/throbber.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/js/jstree_themes/proton/throbber.gif -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/js/selfgrade.js: -------------------------------------------------------------------------------- 1 | function selfGrade(assignment_id) { 2 | jQuery.ajax({ 3 | url: eBookConfig.app + '/assignments/student_autograde', 4 | type: "POST", 5 | dataType: "JSON", 6 | data: { 7 | assignment_id: assignment_id, 8 | }, 9 | success: function (retdata) { 10 | window.location.reload(true); 11 | } 12 | }); 13 | } -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/rectangle_badge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/static/rectangle_badge.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/static/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: /welcome/default/user 3 | Disallow: /runestone/ajax 4 | Disallow: /cgi-bin 5 | Disallow: /assignment 6 | Disallow: /author 7 | Disallow: /runestone/admin 8 | Disallow: /runestone/peer 9 | Disallow: /ns/books/published/*/_templates 10 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/.coveragerc: -------------------------------------------------------------------------------- 1 | [run] 2 | omit = 3 | applications/runestone/controllers/appadmin.py 4 | applications/runestone/controllers/everyday.py 5 | applications/runestone/controllers/feed.py 6 | 7 | [html] 8 | directory = applications/runestone/tests/htmlcov 9 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/__init__.py: -------------------------------------------------------------------------------- 1 | # ******************* 2 | # |docname| - testing 3 | # ******************* 4 | # .. toctree:: 5 | # :maxdepth: 2 6 | # :glob: 7 | # 8 | # README 9 | # *.py 10 | # test_course_1/*.py 11 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/.gitignore: -------------------------------------------------------------------------------- 1 | published/ 2 | build/ 3 | build_info 4 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_sources/lp_demo-test.py: -------------------------------------------------------------------------------- 1 | # ============================================ 2 | # |docname| -- test code for :doc:`lp_demo.py` 3 | # ============================================ 4 | from lp_demo import one 5 | 6 | assert one() == 1 7 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_sources/test_chapter_1/dynamicquestions.rst: -------------------------------------------------------------------------------- 1 | Testing SelectQuestion 2 | ====================== 3 | 4 | .. selectquestion:: dynamic_q_1 5 | :fromid: test_activecode_1 6 | :points: 10 7 | 8 | 9 | TODO - Add another test to test within an exam but this will require selenium 10 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_sources/test_chapter_1/subchapter_a.rst: -------------------------------------------------------------------------------- 1 | ============ 2 | Subchapter A 3 | ============ 4 | This is empty. 5 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_sources/test_chapter_1/toctree.rst: -------------------------------------------------------------------------------- 1 | ============== 2 | Test chapter 1 3 | ============== 4 | 5 | .. toctree:: 6 | :maxdepth: 2 7 | 8 | subchapter_a 9 | subchapter_b 10 | dynamicquestions -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/.gitignore -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/activecodethumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/activecodethumb.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/audio/Example04_Tour01_Line01.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/audio/Example04_Tour01_Line01.mp3 -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/audio/Example04_Tour01_Line01.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/audio/Example04_Tour01_Line01.wav -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/audio/Example04_Tour01_Line02.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/audio/Example04_Tour01_Line02.mp3 -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/audio/Example04_Tour01_Line02.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/audio/Example04_Tour01_Line02.wav -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/audio/Example04_Tour01_Line03.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/audio/Example04_Tour01_Line03.mp3 -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/audio/Example04_Tour01_Line03.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/audio/Example04_Tour01_Line03.wav -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/clock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/clock.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/close.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/first.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/first.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/img/logo_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/img/logo_small.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/last.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/last.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/next.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/pause.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/prev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/applications/runestone/tests/test_course_1/_static/prev.png -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/views/__init__.py: -------------------------------------------------------------------------------- 1 | # ************ 2 | # Web2py views 3 | # ************ 4 | # .. toctree:: 5 | # :maxdepth: 2 6 | # :glob: 7 | # 8 | # *.html 9 | # admin/* 10 | # assignments/* 11 | # books/* 12 | # dashboard/* 13 | # default/* 14 | # designer/* 15 | # lti/* 16 | # oauth/* 17 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/views/admin/progress.html: -------------------------------------------------------------------------------- 1 |

HOME

2 |

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

-------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/views/admin/sections_create.html: -------------------------------------------------------------------------------- 1 | {{extend 'layout.html'}} 2 | All Sections 3 |

Create New Section

4 | {{=form}} -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/views/admin/studentactivity.html: -------------------------------------------------------------------------------- 1 | {{extend 'layout.html'}} 2 | 3 |

Student Activity Summary

4 | {{=SQLTABLE(grid,headers={'useinfo.sid':'Student','COUNT(useinfo.id)':'Number','MAX(useinfo.timestamp)':'Last Activity'})}} 5 | 6 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/views/books/published.html: -------------------------------------------------------------------------------- 1 | {{ extend 'books/index.html' }} 2 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/views/default/bio.html: -------------------------------------------------------------------------------- 1 | {{extend 'layout.html'}} 2 | 3 | {{block statusbar}} 4 | {{end}} 5 | 6 |

Tell Us About Yourself

7 | {{=form}} 8 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/views/default/error.html: -------------------------------------------------------------------------------- 1 | {{extend 'layout.html'}} 2 | 3 |

Error: the document does not exist

-------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/views/generic.json: -------------------------------------------------------------------------------- 1 | {{from gluon.serializers import json}}{{=XML(json(response._vars))}} 2 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/views/generic.pdf: -------------------------------------------------------------------------------- 1 | {{ 2 | import os 3 | from gluon.contrib.generics import pdf_from_html 4 | filename = '%s/%s.html' % (request.controller,request.function) 5 | if os.path.exists(os.path.join(request.folder,'views',filename)): 6 | html=response.render(filename) 7 | else: 8 | html=BODY(BEAUTIFY(response._vars)).xml() 9 | pass 10 | =pdf_from_html(html) 11 | }} 12 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/applications/runestone/views/generic.xml: -------------------------------------------------------------------------------- 1 | {{from gluon.serializers import xml}}{{=XML(xml(response._vars,quote=False))}} 2 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/core.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/core.py -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/extras/build_web2py/README.md: -------------------------------------------------------------------------------- 1 | # build-web2py 2 | 3 | The files in this folder must be run from the main web2py folder. 4 | They are for building windows and osx binary distribution using PyInstaller and not meant for the end user. 5 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/extras/icons/splashlogo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/extras/icons/splashlogo.gif -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/extras/icons/web2py.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/extras/icons/web2py.gif -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/extras/icons/web2py.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/extras/icons/web2py.icns -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/extras/icons/web2py.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/extras/icons/web2py.ico -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/gluon/_compat.py: -------------------------------------------------------------------------------- 1 | from pydal._compat import * 2 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/gluon/contrib/markmin/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/gluon/contrib/markmin/markmin.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/bases/rsptx/web2py_server/gluon/contrib/markmin/markmin.pdf -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/gluon/packages/dal/.codecov.yml: -------------------------------------------------------------------------------- 1 | codecov: 2 | branch: master 3 | 4 | coverage: 5 | precision: 2 6 | round: down 7 | range: "70...100" 8 | 9 | status: 10 | changes: false 11 | 12 | comment: 13 | layout: "header, diff, changes" 14 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/gluon/packages/dal/AUTHORS: -------------------------------------------------------------------------------- 1 | - Massimo Di Pierro 2 | - Giovanni Barillari 3 | - Simone Bizzotto 4 | - Paolo Valleri 5 | - Niall Sweeny for MS SQL support 6 | - Marcel Leuthi for Oracle support 7 | - Chris Clark 8 | - clach05 9 | - Denes Lengyel 10 | - Stephen Rauch 11 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/gluon/packages/dal/MANIFEST.in: -------------------------------------------------------------------------------- 1 | include LICENSE 2 | include AUTHORS 3 | include CHANGES 4 | recursive-include tests * 5 | recursive-exclude tests .DS_Store 6 | recursive-include docs * 7 | recursive-exclude docs .DS_Store 8 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/gluon/packages/dal/docs/requirements.txt: -------------------------------------------------------------------------------- 1 | sphinxcontrib-napoleon>=0.2.4 -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/gluon/packages/dal/pydal/__init__.py: -------------------------------------------------------------------------------- 1 | __version__ = "20220814.1" 2 | 3 | from .base import DAL 4 | from .helpers.classes import SQLCustomType 5 | from .helpers.methods import geoLine, geoPoint, geoPolygon 6 | from .objects import Field 7 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/gluon/packages/dal/pydal/_globals.py: -------------------------------------------------------------------------------- 1 | import threading 2 | 3 | GLOBAL_LOCKER = threading.RLock() 4 | THREAD_LOCAL = threading.local() 5 | 6 | DEFAULT = lambda: None 7 | 8 | 9 | def IDENTITY(x): 10 | return x 11 | 12 | 13 | def OR(a, b): 14 | return a | b 15 | 16 | 17 | def AND(a, b): 18 | return a & b 19 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/gluon/packages/dal/pydal/contrib/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/gluon/packages/dal/pydal/helpers/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/gluon/packages/dal/pydal/representers/mysql.py: -------------------------------------------------------------------------------- 1 | from ..adapters.mysql import MySQL 2 | from . import representers 3 | from .base import JSONRepresenter, SQLRepresenter 4 | 5 | 6 | @representers.register_for(MySQL) 7 | class MySQLRepresenter(SQLRepresenter, JSONRepresenter): 8 | pass 9 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/gluon/packages/dal/pydal/tools/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/gluon/packages/dal/setup.cfg: -------------------------------------------------------------------------------- 1 | [aliases] 2 | release = egg_info -RDb '' 3 | 4 | [wheel] 5 | universal = 1 6 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/gluon/packages/dal/tests/_compat.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | if sys.version < "2.7": 4 | import unittest2 as unittest 5 | else: 6 | import unittest 7 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/gluon/packages/yatl/tests/__init__.py: -------------------------------------------------------------------------------- 1 | from .test_template import * 2 | from .test_helpers import * -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/gluon/packages/yatl/tox.ini: -------------------------------------------------------------------------------- 1 | [tox] 2 | envlist = py27,pypy,pypy3,py33,py34,py35,py36,py37 3 | 4 | [testenv] 5 | deps = 6 | coverage: coverage 7 | commands = 8 | py27,pypy,pypy3,py33,py34,py35,py36,py37: {envpython} -m unittest -v -f tests -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/gluon/packages/yatl/yatl/__init__.py: -------------------------------------------------------------------------------- 1 | __version__ = '20211217.1' 2 | 3 | from . template import * 4 | from . helpers import * 5 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/gluon/sanitizer.py: -------------------------------------------------------------------------------- 1 | from yatl.sanitizer import sanitize 2 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/gluon/template.py: -------------------------------------------------------------------------------- 1 | from yatl.template import render, parse_template 2 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/gluon/tests/test_rocket.py: -------------------------------------------------------------------------------- 1 | # TODO : I think we should continue to use pathoc (http://pathod.net/docs/pathoc) for tests but integrate the call in 2 | # gluon/tests so they run automatically. No need to make our own tests. 3 | # ref: https://groups.google.com/d/msg/web2py-developers/Cjye8_hXZk8/AXbftS3sCgAJ 4 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/gluon/validators.py: -------------------------------------------------------------------------------- 1 | from pydal.validators import * 2 | from pydal.validators import simple_hash, get_digest, Validator, ValidationError, translate, __all__ 3 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/handlers/README: -------------------------------------------------------------------------------- 1 | This folder contains example handlers. 2 | They must be copied to the web2py root folder in order to work properly. 3 | They should not be used in their current location. 4 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/parameters_8000.py: -------------------------------------------------------------------------------- 1 | password="pbkdf2(1000,20,sha512)$99100eca6bbda7d9$3e99a74d606c414f03bad69847f5e7f1bb7bc34f" 2 | -------------------------------------------------------------------------------- /bases/rsptx/web2py_server/site-packages/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /components/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/components/.keep -------------------------------------------------------------------------------- /components/rsptx/analytics/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.analytics.core import log_this_function 2 | 3 | __all__ = ["log_this_function"] 4 | -------------------------------------------------------------------------------- /components/rsptx/auth/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.auth import core 2 | 3 | __all__ = ["core"] 4 | -------------------------------------------------------------------------------- /components/rsptx/auth/core.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/components/rsptx/auth/core.py -------------------------------------------------------------------------------- /components/rsptx/build_tools/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.build_tools import core 2 | 3 | __all__ = ["core"] 4 | -------------------------------------------------------------------------------- /components/rsptx/cl_utils/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.cl_utils import core 2 | 3 | __all__ = ["core"] 4 | -------------------------------------------------------------------------------- /components/rsptx/configuration/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.configuration import core 2 | from rsptx.configuration.core import settings 3 | 4 | __all__ = ["core", "settings"] 5 | -------------------------------------------------------------------------------- /components/rsptx/data_extract/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.data_extract import core 2 | from rsptx.data_extract import anonymizeCourseData 3 | from rsptx.data_extract.anonymizeCourseData import Anonymizer 4 | __all__ = ["core", "anonymizeCourseData", "Anonymizer"] 5 | -------------------------------------------------------------------------------- /components/rsptx/data_extract/core.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/components/rsptx/data_extract/core.py -------------------------------------------------------------------------------- /components/rsptx/data_types/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.data_types import autograde 2 | from rsptx.data_types import which_to_grade 3 | from rsptx.data_types import question_type 4 | from rsptx.data_types import language 5 | 6 | __all__ = ["autograde", "which_to_grade", "question_type", "language"] 7 | -------------------------------------------------------------------------------- /components/rsptx/db/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.db import core 2 | from rsptx.db import models 3 | from rsptx.db import async_session 4 | from rsptx.db import crud 5 | 6 | __all__ = ["core", "crud", "models", "async_session"] 7 | -------------------------------------------------------------------------------- /components/rsptx/db/core.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/components/rsptx/db/core.py -------------------------------------------------------------------------------- /components/rsptx/endpoint_validators/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.endpoint_validators import core 2 | from rsptx.endpoint_validators.core import ( 3 | instructor_role_required, 4 | with_course, 5 | author_role_required, 6 | ) 7 | 8 | __all__ = ["core", "instructor_role_required", "with_course", "author_role_required"] 9 | -------------------------------------------------------------------------------- /components/rsptx/exceptions/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.exceptions import core 2 | 3 | __all__ = ["core"] 4 | -------------------------------------------------------------------------------- /components/rsptx/forms/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.forms import core 2 | from rsptx.forms.author import LibraryForm, DatashopForm, DatashopInstForm 3 | 4 | __all__ = ["core", "LibraryForm", "DatashopForm", "DatashopInstForm"] 5 | -------------------------------------------------------------------------------- /components/rsptx/forms/core.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/components/rsptx/forms/core.py -------------------------------------------------------------------------------- /components/rsptx/grading_helpers/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.grading_helpers import core 2 | from .core import grade_submission, score_reading_page 3 | 4 | __all__ = ["core", "grade_submission", "score_reading_page"] 5 | -------------------------------------------------------------------------------- /components/rsptx/logging/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.logging import core 2 | from rsptx.logging import applogger 3 | from rsptx.logging.applogger import rslogger 4 | 5 | __all__ = ["core", "applogger", "rslogger"] 6 | -------------------------------------------------------------------------------- /components/rsptx/logging/core.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/components/rsptx/logging/core.py -------------------------------------------------------------------------------- /components/rsptx/lp_sim_builder/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.lp_sim_builder import core 2 | from rsptx.lp_sim_builder import common_builder 3 | from rsptx.lp_sim_builder import scheduled_builder 4 | from rsptx.lp_sim_builder import feedback 5 | 6 | __all__ = ["common_builder", "core", "feedback", "scheduled_builder"] 7 | -------------------------------------------------------------------------------- /components/rsptx/lp_sim_builder/core.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/components/rsptx/lp_sim_builder/core.py -------------------------------------------------------------------------------- /components/rsptx/lti1p3/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.lti1p3 import core 2 | from rsptx.lti1p3 import tool_conf_rs 3 | from rsptx.lti1p3 import caches 4 | 5 | __all__ = ["core", "tool_conf_rs", "caches"] 6 | -------------------------------------------------------------------------------- /components/rsptx/lti1p3/pylti1p3/__init__.py: -------------------------------------------------------------------------------- 1 | __version__ = "2.0.0" 2 | -------------------------------------------------------------------------------- /components/rsptx/lti1p3/pylti1p3/actions.py: -------------------------------------------------------------------------------- 1 | import typing_extensions as te 2 | 3 | 4 | class Action: 5 | OIDC_LOGIN: te.Final = "oidc_login" 6 | MESSAGE_LAUNCH: te.Final = "message_launch" 7 | -------------------------------------------------------------------------------- /components/rsptx/lti1p3/pylti1p3/contrib/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/components/rsptx/lti1p3/pylti1p3/contrib/__init__.py -------------------------------------------------------------------------------- /components/rsptx/lti1p3/pylti1p3/contrib/fastapi/__init__.py: -------------------------------------------------------------------------------- 1 | # flake8: noqa 2 | from .cookie import FastAPICookieService 3 | from .oidc_login import FastAPIOIDCLogin 4 | from .message_launch import FastAPIMessageLaunch 5 | from .request import FastAPIRequest 6 | from .session import FastAPISessionService 7 | from .launch_data_storage.cache import FastAPICacheDataStorage 8 | -------------------------------------------------------------------------------- /components/rsptx/lti1p3/pylti1p3/contrib/fastapi/launch_data_storage/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/components/rsptx/lti1p3/pylti1p3/contrib/fastapi/launch_data_storage/__init__.py -------------------------------------------------------------------------------- /components/rsptx/lti1p3/pylti1p3/contrib/fastapi/launch_data_storage/cache.py: -------------------------------------------------------------------------------- 1 | from ....launch_data_storage.cache import CacheDataStorage 2 | 3 | class FastAPICacheDataStorage(CacheDataStorage): 4 | _cache = None 5 | 6 | def __init__(self, cache, **kwargs): 7 | self._cache = cache 8 | super().__init__(cache, **kwargs) -------------------------------------------------------------------------------- /components/rsptx/lti1p3/pylti1p3/contrib/fastapi/session.py: -------------------------------------------------------------------------------- 1 | from ...session import SessionService 2 | 3 | 4 | class FastAPISessionService(SessionService): 5 | pass 6 | -------------------------------------------------------------------------------- /components/rsptx/lti1p3/pylti1p3/deployment.py: -------------------------------------------------------------------------------- 1 | import typing as t 2 | 3 | 4 | class Deployment: 5 | 6 | _deployment_id: t.Optional[str] = None 7 | 8 | def get_deployment_id(self) -> t.Optional[str]: 9 | return self._deployment_id 10 | 11 | def set_deployment_id(self, deployment_id: str) -> "Deployment": 12 | self._deployment_id = deployment_id 13 | return self 14 | -------------------------------------------------------------------------------- /components/rsptx/lti1p3/pylti1p3/launch_data_storage/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/components/rsptx/lti1p3/pylti1p3/launch_data_storage/__init__.py -------------------------------------------------------------------------------- /components/rsptx/lti1p3/pylti1p3/request.py: -------------------------------------------------------------------------------- 1 | from abc import ABCMeta, abstractmethod 2 | 3 | 4 | class Request: 5 | __metaclass__ = ABCMeta 6 | 7 | @property 8 | def session(self): 9 | raise NotImplementedError 10 | 11 | @abstractmethod 12 | def is_secure(self) -> bool: 13 | raise NotImplementedError 14 | 15 | @abstractmethod 16 | def get_param(self, key: str) -> str: 17 | raise NotImplementedError 18 | -------------------------------------------------------------------------------- /components/rsptx/lti1p3/pylti1p3/tool_config/__init__.py: -------------------------------------------------------------------------------- 1 | # flake8: noqa 2 | from .abstract import ToolConfAbstract 3 | from .dict import ToolConfDict 4 | from .json_file import ToolConfJsonFile 5 | -------------------------------------------------------------------------------- /components/rsptx/practice/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.practice import core 2 | 3 | __all__ = ["core"] 4 | -------------------------------------------------------------------------------- /components/rsptx/response_helpers/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.response_helpers import core 2 | 3 | __all__ = ["core"] 4 | -------------------------------------------------------------------------------- /components/rsptx/templates/__init__.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | from rsptx.templates import core 3 | 4 | __all__ = ["core"] 5 | 6 | template_folder = Path(__file__).parent.absolute() 7 | -------------------------------------------------------------------------------- /components/rsptx/templates/assignment/selfgrade.js: -------------------------------------------------------------------------------- 1 | function selfGrade(assignment_id) { 2 | jQuery.ajax({ 3 | url: eBookConfig.app + '/assignments/student_autograde', 4 | type: "POST", 5 | dataType: "JSON", 6 | data: { 7 | assignment_id: assignment_id, 8 | }, 9 | success: function (retdata) { 10 | window.location.reload(true); 11 | } 12 | }); 13 | } -------------------------------------------------------------------------------- /components/rsptx/templates/core.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/components/rsptx/templates/core.py -------------------------------------------------------------------------------- /components/rsptx/templates/footer.html: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /components/rsptx/templates/staticAssets/RAIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/components/rsptx/templates/staticAssets/RAIcon.png -------------------------------------------------------------------------------- /components/rsptx/templates/staticAssets/assignment/selfgrade.js: -------------------------------------------------------------------------------- 1 | function selfGrade(assignment_id) { 2 | jQuery.ajax({ 3 | url: eBookConfig.app + '/assignments/student_autograde', 4 | type: "POST", 5 | dataType: "JSON", 6 | data: { 7 | assignment_id: assignment_id, 8 | }, 9 | success: function (retdata) { 10 | window.location.reload(true); 11 | } 12 | }); 13 | } -------------------------------------------------------------------------------- /components/rsptx/templates/staticAssets/course.css: -------------------------------------------------------------------------------- 1 | .course_page { 2 | width: 90%; 3 | margin-left: auto; 4 | margin-right: auto; 5 | } 6 | 7 | 8 | .assignment_chooser { 9 | max-height: 24rem; 10 | overflow-y: scroll; 11 | margin-bottom: 1rem; 12 | border: solid #ccc; 13 | padding: .5rem; 14 | border-radius: 5px; 15 | } -------------------------------------------------------------------------------- /components/rsptx/templates/staticAssets/js/jquery-fix.js: -------------------------------------------------------------------------------- 1 | // The Bootstrap-based Sphinx theme uses $jqTheme 2 | // Setting $ is needed to override the (old!) version of jQuery packaged with Sphinx 3 | var $jqTheme = jQuery.noConflict(); 4 | var $ = jQuery.noConflict(); 5 | -------------------------------------------------------------------------------- /components/rsptx/templates/staticAssets/js/selfgrade.js: -------------------------------------------------------------------------------- 1 | function selfGrade(assignment_id) { 2 | jQuery.ajax({ 3 | url: eBookConfig.app + '/assignments/student_autograde', 4 | type: "POST", 5 | dataType: "JSON", 6 | data: { 7 | assignment_id: assignment_id, 8 | }, 9 | success: function (retdata) { 10 | window.location.reload(true); 11 | } 12 | }); 13 | } -------------------------------------------------------------------------------- /components/rsptx/validation/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.validation import core 2 | from rsptx.validation import schemas 3 | 4 | __all__ = ["core", "schemas"] 5 | -------------------------------------------------------------------------------- /components/rsptx/validation/core.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/components/rsptx/validation/core.py -------------------------------------------------------------------------------- /components/rsptx/visualization/__init__.py: -------------------------------------------------------------------------------- 1 | from rsptx.visualization import core 2 | from rsptx.visualization import authorImpact 3 | 4 | __all__ = ["core", "authorImpact"] 5 | -------------------------------------------------------------------------------- /components/rsptx/visualization/core.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/components/rsptx/visualization/core.py -------------------------------------------------------------------------------- /development/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/development/.keep -------------------------------------------------------------------------------- /development/core.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/development/core.py -------------------------------------------------------------------------------- /docs/graffle/Phased Approach to Polylith.graffle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/docs/graffle/Phased Approach to Polylith.graffle -------------------------------------------------------------------------------- /docs/source/book_server_api.core.rst: -------------------------------------------------------------------------------- 1 | book\_server\_api.core module 2 | ============================= 3 | 4 | .. automodule:: book_server_api.core 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/book_server_api.localconfig.rst: -------------------------------------------------------------------------------- 1 | book\_server\_api.localconfig module 2 | ==================================== 3 | 4 | .. automodule:: book_server_api.localconfig 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/book_server_api.main.rst: -------------------------------------------------------------------------------- 1 | book\_server\_api.main module 2 | ============================= 3 | 4 | .. automodule:: book_server_api.main 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/book_server_api.routers.assessment.rst: -------------------------------------------------------------------------------- 1 | book\_server\_api.routers.assessment module 2 | =========================================== 3 | 4 | .. automodule:: book_server_api.routers.assessment 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/book_server_api.routers.auth.rst: -------------------------------------------------------------------------------- 1 | book\_server\_api.routers.auth module 2 | ===================================== 3 | 4 | .. automodule:: book_server_api.routers.auth 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/book_server_api.routers.books.rst: -------------------------------------------------------------------------------- 1 | book\_server\_api.routers.books module 2 | ====================================== 3 | 4 | .. automodule:: book_server_api.routers.books 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/book_server_api.routers.coach.rst: -------------------------------------------------------------------------------- 1 | book\_server\_api.routers.coach module 2 | ====================================== 3 | 4 | .. automodule:: book_server_api.routers.coach 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/book_server_api.routers.discuss.rst: -------------------------------------------------------------------------------- 1 | book\_server\_api.routers.discuss module 2 | ======================================== 3 | 4 | .. automodule:: book_server_api.routers.discuss 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/book_server_api.routers.rslogging.rst: -------------------------------------------------------------------------------- 1 | book\_server\_api.routers.rslogging module 2 | ========================================== 3 | 4 | .. automodule:: book_server_api.routers.rslogging 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/cl_utils.rst: -------------------------------------------------------------------------------- 1 | cl\_utils package 2 | ================= 3 | 4 | Submodules 5 | ---------- 6 | 7 | cl\_utils.core module 8 | --------------------- 9 | 10 | .. automodule:: cl_utils.core 11 | :members: 12 | :undoc-members: 13 | :show-inheritance: 14 | 15 | Module contents 16 | --------------- 17 | 18 | .. automodule:: cl_utils 19 | :members: 20 | :undoc-members: 21 | :show-inheritance: 22 | -------------------------------------------------------------------------------- /docs/source/configuration.core.rst: -------------------------------------------------------------------------------- 1 | configuration.core module 2 | ========================= 3 | 4 | .. automodule:: configuration.core 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/configuration.rst: -------------------------------------------------------------------------------- 1 | configuration package 2 | ===================== 3 | 4 | Submodules 5 | ---------- 6 | 7 | .. toctree:: 8 | :maxdepth: 4 9 | 10 | configuration.core 11 | 12 | Module contents 13 | --------------- 14 | 15 | .. automodule:: configuration 16 | :members: 17 | :undoc-members: 18 | :show-inheritance: 19 | -------------------------------------------------------------------------------- /docs/source/db.async_session.rst: -------------------------------------------------------------------------------- 1 | db.async\_session module 2 | ======================== 3 | 4 | .. automodule:: db.async_session 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/db.core.rst: -------------------------------------------------------------------------------- 1 | db.core module 2 | ============== 3 | 4 | .. automodule:: db.core 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/db.crud.rst: -------------------------------------------------------------------------------- 1 | db.crud module 2 | ============== 3 | 4 | .. automodule:: db.crud 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/db.models.rst: -------------------------------------------------------------------------------- 1 | db.models module 2 | ================ 3 | 4 | .. automodule:: db.models 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/db.rst: -------------------------------------------------------------------------------- 1 | db package 2 | ========== 3 | 4 | Submodules 5 | ---------- 6 | 7 | .. toctree:: 8 | :maxdepth: 4 9 | 10 | db.async_session 11 | db.core 12 | db.crud 13 | db.models 14 | 15 | Module contents 16 | --------------- 17 | 18 | .. automodule:: db 19 | :members: 20 | :undoc-members: 21 | :show-inheritance: 22 | -------------------------------------------------------------------------------- /docs/source/logging.applogger.rst: -------------------------------------------------------------------------------- 1 | logging.applogger module 2 | ======================== 3 | 4 | .. automodule:: rsptx.logging.applogger 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/logging.core.rst: -------------------------------------------------------------------------------- 1 | logging.core module 2 | =================== 3 | 4 | .. automodule:: rsptx.logging.core 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/logging.rst: -------------------------------------------------------------------------------- 1 | logging package 2 | =============== 3 | 4 | Submodules 5 | ---------- 6 | 7 | .. toctree:: 8 | :maxdepth: 4 9 | 10 | logging.applogger 11 | logging.core 12 | 13 | Module contents 14 | --------------- 15 | 16 | .. automodule:: rsptx.logging 17 | :members: 18 | :undoc-members: 19 | :show-inheritance: 20 | -------------------------------------------------------------------------------- /docs/source/readme.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../../README.rst -------------------------------------------------------------------------------- /docs/source/response_helpers.core.rst: -------------------------------------------------------------------------------- 1 | response\_helpers.core module 2 | ============================= 3 | 4 | .. automodule:: response_helpers.core 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/response_helpers.rst: -------------------------------------------------------------------------------- 1 | response\_helpers package 2 | ========================= 3 | 4 | Submodules 5 | ---------- 6 | 7 | .. toctree:: 8 | :maxdepth: 4 9 | 10 | response_helpers.core 11 | 12 | Module contents 13 | --------------- 14 | 15 | .. automodule:: response_helpers 16 | :members: 17 | :undoc-members: 18 | :show-inheritance: 19 | -------------------------------------------------------------------------------- /docs/source/templates.rst: -------------------------------------------------------------------------------- 1 | Templates 2 | ========= 3 | 4 | Each service may have a folder heirarchy for the Jinja2 templates used in the user interface. 5 | 6 | In addition the template component has a common folder ``staticAssets`` for static assets such as images, css and javascript. 7 | The static assets are copied to a static folder in the nginx service during the build process so that nginx can serve them. 8 | 9 | -------------------------------------------------------------------------------- /docs/source/validation.core.rst: -------------------------------------------------------------------------------- 1 | validation.core module 2 | ====================== 3 | 4 | .. automodule:: validation.core 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /docs/source/validation.rst: -------------------------------------------------------------------------------- 1 | validation package 2 | ================== 3 | 4 | Submodules 5 | ---------- 6 | 7 | .. toctree:: 8 | :maxdepth: 4 9 | 10 | validation.core 11 | validation.schemas 12 | 13 | Module contents 14 | --------------- 15 | 16 | .. automodule:: validation 17 | :members: 18 | :undoc-members: 19 | :show-inheritance: 20 | -------------------------------------------------------------------------------- /docs/source/validation.schemas.rst: -------------------------------------------------------------------------------- 1 | validation.schemas module 2 | ========================= 3 | 4 | .. automodule:: validation.schemas 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /migrations/README: -------------------------------------------------------------------------------- 1 | Generic single-database configuration. -------------------------------------------------------------------------------- /poetry.toml: -------------------------------------------------------------------------------- 1 | [virtualenvs] 2 | path = ".venv" 3 | in-project = true -------------------------------------------------------------------------------- /projects/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/projects/.keep -------------------------------------------------------------------------------- /projects/assignment_server/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Make sure the wheel for this project is up to date 4 | poetry build-project 5 | 6 | # Build the Docker image 7 | docker build -t assignment . -------------------------------------------------------------------------------- /projects/author_server/gitconfig: -------------------------------------------------------------------------------- 1 | [safe] 2 | directory = * 3 | [pull] 4 | rebase = false 5 | [user] 6 | name = Runestone Author Server 7 | email = runestoneinteractive@gmail.com 8 | -------------------------------------------------------------------------------- /projects/dash_server/.gitignore: -------------------------------------------------------------------------------- 1 | cache 2 | -------------------------------------------------------------------------------- /projects/interactives/images/runeCompo-index.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/projects/interactives/images/runeCompo-index.png -------------------------------------------------------------------------------- /projects/jobe/container-test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # exit if any command has a non-zero exit status 4 | set -e 5 | 6 | echo "Starting Apache in the background" 7 | /usr/sbin/apache2ctl -D BACKGROUND 8 | 9 | echo "Start testsubmit.py as user www-data" 10 | su -s /bin/bash -c "/usr/bin/python3 /var/www/html/jobe/testsubmit.py" www-data 11 | -------------------------------------------------------------------------------- /projects/jobe/container.test.yml: -------------------------------------------------------------------------------- 1 | # This file gets triggerd by Docker Hub 2 | sut: 3 | build: . 4 | command: bash /container-test.sh 5 | -------------------------------------------------------------------------------- /projects/jobe/files/hamcrest-all-1.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/projects/jobe/files/hamcrest-all-1.3.jar -------------------------------------------------------------------------------- /projects/jobe/files/junit-4.13-beta-3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/projects/jobe/files/junit-4.13-beta-3.jar -------------------------------------------------------------------------------- /projects/latex_image/README: -------------------------------------------------------------------------------- 1 | This image is used by the author and worker services, so we can avoid the long build time 2 | introduced by creating a latex image. 3 | 4 | To build this image simply run: 5 | 6 | docker build . -t latex_base:important --label keep=true 7 | 8 | When pruning 9 | 10 | docker image prune -a --filter "label!=keep" 11 | docker container prune 12 | 13 | It might be --filter "label=keep=true" -------------------------------------------------------------------------------- /projects/w2p_login_assign_grade/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cd /usr/local/lib/python3.10/site-packages/rsptx/web2py_server 4 | mkdir -p applications/runestone/errors 5 | chown -R www-data:www-data applications/runestone/errors 6 | python web2py.py -S runestone -M -R tickets2db.py & 7 | cd /usr/src/app 8 | gunicorn --bind 0.0.0.0:8112 rsptx.web2py_server.wsgihandler:application -------------------------------------------------------------------------------- /test/bases/rsptx/admin_server_api/__init__.py: -------------------------------------------------------------------------------- 1 | # Test package for admin_server_api 2 | -------------------------------------------------------------------------------- /test/bases/rsptx/assignment_server_api/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/bases/rsptx/assignment_server_api/__init__.py -------------------------------------------------------------------------------- /test/bases/rsptx/assignment_server_api/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.assignment_server_api import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/bases/rsptx/author_server_api/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/bases/rsptx/author_server_api/__init__.py -------------------------------------------------------------------------------- /test/bases/rsptx/author_server_api/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.author_server_api import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/bases/rsptx/book_server_api/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/bases/rsptx/book_server_api/__init__.py -------------------------------------------------------------------------------- /test/bases/rsptx/book_server_api/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.book_server_api import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/bases/rsptx/dash_server_api/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/bases/rsptx/dash_server_api/__init__.py -------------------------------------------------------------------------------- /test/bases/rsptx/dash_server_api/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.dash_server_api import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/bases/rsptx/interactives/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/bases/rsptx/interactives/__init__.py -------------------------------------------------------------------------------- /test/bases/rsptx/interactives/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.interactives import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/bases/rsptx/rsmanage/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/bases/rsptx/rsmanage/__init__.py -------------------------------------------------------------------------------- /test/bases/rsptx/rsmanage/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.rsmanage import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/bases/rsptx/web2py_server/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/bases/rsptx/web2py_server/__init__.py -------------------------------------------------------------------------------- /test/bases/rsptx/web2py_server/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.web2py_server import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/components/rsptx/analytics/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/components/rsptx/analytics/__init__.py -------------------------------------------------------------------------------- /test/components/rsptx/analytics/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.analytics import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/components/rsptx/auth/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/components/rsptx/auth/__init__.py -------------------------------------------------------------------------------- /test/components/rsptx/auth/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.auth import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/components/rsptx/build_tools/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/components/rsptx/build_tools/__init__.py -------------------------------------------------------------------------------- /test/components/rsptx/build_tools/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.build_tools import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/components/rsptx/cl_utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/components/rsptx/cl_utils/__init__.py -------------------------------------------------------------------------------- /test/components/rsptx/cl_utils/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.cl_utils import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/components/rsptx/configuration/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/components/rsptx/configuration/__init__.py -------------------------------------------------------------------------------- /test/components/rsptx/configuration/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.configuration import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/components/rsptx/data_extract/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/components/rsptx/data_extract/__init__.py -------------------------------------------------------------------------------- /test/components/rsptx/data_extract/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.data_extract import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/components/rsptx/db/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/components/rsptx/db/__init__.py -------------------------------------------------------------------------------- /test/components/rsptx/db/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.db import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/components/rsptx/endpoint_validators/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/components/rsptx/endpoint_validators/__init__.py -------------------------------------------------------------------------------- /test/components/rsptx/endpoint_validators/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.endpoint_validators import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/components/rsptx/exceptions/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/components/rsptx/exceptions/__init__.py -------------------------------------------------------------------------------- /test/components/rsptx/exceptions/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.exceptions import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/components/rsptx/forms/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/components/rsptx/forms/__init__.py -------------------------------------------------------------------------------- /test/components/rsptx/forms/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.forms import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/components/rsptx/grading_helpers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/components/rsptx/grading_helpers/__init__.py -------------------------------------------------------------------------------- /test/components/rsptx/grading_helpers/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.grading_helpers import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/components/rsptx/logging/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/components/rsptx/logging/__init__.py -------------------------------------------------------------------------------- /test/components/rsptx/logging/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.logging import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/components/rsptx/lp_sim_builder/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/components/rsptx/lp_sim_builder/__init__.py -------------------------------------------------------------------------------- /test/components/rsptx/lp_sim_builder/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.lp_sim_builder import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/components/rsptx/practice/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/components/rsptx/practice/__init__.py -------------------------------------------------------------------------------- /test/components/rsptx/practice/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.practice import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/components/rsptx/response_helpers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/components/rsptx/response_helpers/__init__.py -------------------------------------------------------------------------------- /test/components/rsptx/response_helpers/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.response_helpers import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/components/rsptx/templates/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/components/rsptx/templates/__init__.py -------------------------------------------------------------------------------- /test/components/rsptx/templates/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.templates import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/components/rsptx/validation/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/components/rsptx/validation/__init__.py -------------------------------------------------------------------------------- /test/components/rsptx/validation/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.validation import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /test/components/rsptx/visualization/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RunestoneInteractive/rs/e43af6795017d113ce6e8716f897821f029a63e7/test/components/rsptx/visualization/__init__.py -------------------------------------------------------------------------------- /test/components/rsptx/visualization/test_core.py: -------------------------------------------------------------------------------- 1 | from rsptx.visualization import core 2 | 3 | 4 | def test_sample(): 5 | assert core is not None 6 | -------------------------------------------------------------------------------- /workspace.toml: -------------------------------------------------------------------------------- 1 | [tool.polylith] 2 | namespace = "rsptx" 3 | git_tag_pattern = "stable-*" 4 | 5 | [tool.polylith.structure] 6 | theme = "loose" 7 | 8 | [tool.polylith.resources] 9 | brick_docs_enabled = false 10 | 11 | [tool.polylith.test] 12 | enabled = true 13 | --------------------------------------------------------------------------------