diff --git a/app/controllers/admins/shixun_settings_controller.rb b/app/controllers/admins/shixun_settings_controller.rb index 23278c3a9..357ddabdf 100644 --- a/app/controllers/admins/shixun_settings_controller.rb +++ b/app/controllers/admins/shixun_settings_controller.rb @@ -18,7 +18,7 @@ class Admins::ShixunSettingsController < Admins::BaseController task_pass: params[:task_pass].present? ? params[:task_pass] : false, code_hidden: params[:code_hidden].present? ? params[:code_hidden] : false, vip: params[:vip].present? ? params[:vip] : false, - is_wechat_support: params[:is_wechat_support].present? ? params[:is_wechat_support] : false + no_subject: params[:no_subject].present? ? params[:no_subject] : false } @shixuns_type_check = MirrorRepository.pluck(:type_name,:id) @@ -135,6 +135,6 @@ class Admins::ShixunSettingsController < Admins::BaseController def setting_params params.permit(:use_scope,:excute_time,:close,:status,:can_copy,:webssh,:hidden,:homepage_show,:task_pass, - :code_hidden,:vip,:page_no,:id, :is_wechat_support) + :code_hidden,:vip,:page_no,:id, :no_subject) end end diff --git a/app/controllers/admins/subject_settings_controller.rb b/app/controllers/admins/subject_settings_controller.rb index 10a3139e4..8fa9fde8a 100644 --- a/app/controllers/admins/subject_settings_controller.rb +++ b/app/controllers/admins/subject_settings_controller.rb @@ -8,12 +8,6 @@ class Admins::SubjectSettingsController < Admins::BaseController end def update - # 为了复用代码 - if params["show_moblie"] - subject.find(params[:id]).update_attributes(:show_moblie => params[:show_moblie]) - return - end - sub_discipline_ids = params[:sub_disciplines] || [] sub_ids = sub_discipline_ids.reject(&:blank?).map(&:to_i) old_sub_ids = current_subject.sub_discipline_containers.pluck(:sub_discipline_id) diff --git a/app/controllers/bind_users_controller.rb b/app/controllers/bind_users_controller.rb index 8fe5f54a7..329ade866 100644 --- a/app/controllers/bind_users_controller.rb +++ b/app/controllers/bind_users_controller.rb @@ -4,19 +4,32 @@ class BindUsersController < ApplicationController def create # user = CreateBindUserService.call(create_params) # - - raise Error, '系统错误' if session_unionid.blank? - - bind_user = User.try_to_login(params[:username], params[:password]) - raise Error, '用户名或者密码错误' if bind_user.blank? - raise Error, '该账号已被绑定,请更换其他账号进行绑定' if bind_user.bind_open_user?(params[:type].to_s) - - OpenUsers::Wechat.create!(user: bind_user, uid: session_unionid) - successful_authentication(bind_user) - - render_ok - rescue ApplicationService::Error => ex - render_error(ex.message) + if params[:type] == "qq" + begin + user = CreateBindUserService.call(current_user, create_params) + successful_authentication(user) if user.id != current_user.id + + render_ok + rescue ApplicationService::Error => ex + render_error(ex.message) + end + else + begin + tip_exception '系统错误' if session[:unionid].blank? + + bind_user = User.try_to_login(params[:username], params[:password]) + tip_exception '用户名或者密码错误' if bind_user.blank? + tip_exception '用户名或者密码错误' unless bind_user.check_password?(params[:password].to_s) + tip_exception '该账号已被绑定,请更换其他账号进行绑定' if bind_user.bind_open_user?(params[:type].to_s) + + OpenUsers::Wechat.create!(user: bind_user, uid: session[:unionid]) + successful_authentication(bind_user) + + render_ok + rescue Exception => e + render_error(e.message) + end + end end def new_user diff --git a/app/controllers/oauth/wechat_controller.rb b/app/controllers/oauth/wechat_controller.rb index f95116535..47dc53ccc 100644 --- a/app/controllers/oauth/wechat_controller.rb +++ b/app/controllers/oauth/wechat_controller.rb @@ -1,11 +1,32 @@ class Oauth::WechatController < Oauth::BaseController def create - user, new_user = Oauth::CreateOrFindWechatAccountService.call(current_user ,params) + # user, new_user = Oauth::CreateOrFindWechatAccountService.call(current_user ,params) - successful_authentication(user) if !new_user + begin + code = params['code'].to_s.strip + tip_exception("code不能为空") if code.blank? + new_user = false - render_ok(new_user: new_user) - rescue Oauth::CreateOrFindWechatAccountService::Error => ex - render_error(ex.message) + result = WechatOauth::Service.access_token(code) + result = WechatOauth::Service.user_info(result['access_token'], result['openid']) + + # 存在该用户 + open_user = OpenUsers::Wechat.find_by(uid: result['unionid']) + if open_user.present? && open_user.user.present? + successful_authentication(open_user.user) + else + if current_user.blank? || !current_user.logged? + new_user = true + set_session_openid(result['openid']) + set_session_unionid(result['unionid']) + else + OpenUsers::Wechat.create!(user: current_user, uid: result['unionid']) + end + end + + render_ok(new_user: new_user) + rescue WechatOauth::Error => ex + render_error(ex.message) + end end end \ No newline at end of file diff --git a/app/models/salesman_channel.rb b/app/models/salesman_channel.rb index 0aee5f635..b5ae17e0e 100644 --- a/app/models/salesman_channel.rb +++ b/app/models/salesman_channel.rb @@ -6,23 +6,20 @@ class SalesmanChannel < ApplicationRecord school.name end - def teacher_count(start_time, end_time, keyword) - UserExtension.joins(:school).where("schools.name like '%#{keyword}%' and user_extensions.identity=0 - and user_extensions.created_at between '#{start_time}' and '#{end_time}'").count - # UserExtension.where(school_id: school_id).where(query).count + def teacher_count + UserExtension.where(school_id: school_id).where.not(identity: 1).count end - def student_count(start_time, end_time, keyword) - UserExtension.joins(:school).where("schools.name like '%#{keyword}%' and user_extensions.identity=1 - and user_extensions.created_at between '#{start_time}' and '#{end_time}'").count + def student_count + UserExtension.where(school_id: school_id, identity: 1).count end - def course_count(start_time, end_time, keyword) - Course.joins(:school).where("schools.name like '%#{keyword}%' and courses.created_at between '#{start_time}' and '#{end_time}'").count + def course_count + Course.where(school_id: school_id).count end - def shixuns_count(start_time, end_time, keyword) - ShixunMember.joins("join user_extensions on user_extensions.user_id = shixun_members.user_id and shixun_members.created_at between '#{start_time}' and '#{end_time}'") + def shixuns_count + ShixunMember.joins("join user_extensions on user_extensions.user_id = shixun_members.user_id") .where(user_extensions: {school_id: school_id}).pluck(:shixun_id).uniq.count end diff --git a/app/queries/admins/shixun_settings_query.rb b/app/queries/admins/shixun_settings_query.rb index 30a402d1c..209f37788 100644 --- a/app/queries/admins/shixun_settings_query.rb +++ b/app/queries/admins/shixun_settings_query.rb @@ -51,7 +51,10 @@ class Admins::ShixunSettingsQuery < ApplicationQuery all_shixuns = all_shixuns.where(task_pass: params[:task_pass]) if params[:task_pass] all_shixuns = all_shixuns.where(code_hidden: params[:code_hidden]) if params[:code_hidden] all_shixuns = all_shixuns.where(vip: params[:vip]) if params[:vip] - all_shixuns = all_shixuns.where(is_wechat_support: params[:is_wechat_support]) if params[:is_wechat_support] + if params[:no_subject] + shixun_ids = StageShixun.pluck(:shixun_id).uniq + all_shixuns = all_shixuns.published.where.not(id: shixun_ids) + end custom_sort(all_shixuns, params[:sort_by], params[:sort_direction]) end diff --git a/app/services/create_bind_user_service.rb b/app/services/create_bind_user_service.rb index 86ac6c93b..58956694e 100644 --- a/app/services/create_bind_user_service.rb +++ b/app/services/create_bind_user_service.rb @@ -17,6 +17,7 @@ class CreateBindUserService < ApplicationService bind_user = User.try_to_login(params[:username], params[:password]) raise Error, '用户名或者密码错误' if bind_user.blank? + raise Error, '用户名或者密码错误' unless bind_user.check_password?(params[:password].to_s) raise Error, '该账号已被绑定,请更换其他账号进行绑定' if bind_user.bind_open_user?(params[:type].to_s) ActiveRecord::Base.transaction do diff --git a/app/views/admins/salesman_channels/index.html.erb b/app/views/admins/salesman_channels/index.html.erb index 237ef61d5..5e15d63eb 100644 --- a/app/views/admins/salesman_channels/index.html.erb +++ b/app/views/admins/salesman_channels/index.html.erb @@ -2,32 +2,12 @@ <% add_admin_breadcrumb("#{@salesman.name}的渠道", admins_salesmans_path) %> <% end %> -<% define_admin_breadcrumbs do %> - <% add_admin_breadcrumb('数据变化报表', admins_school_statistics_path) %> -<% end %> - -<div class="box search-form-container saleman-channel-list-form"> - <form class="form-inline search-form d-flex" data-search-form-url="<%= admins_salesman_channels_path %>"> - <div class="time-select"> - <div class="form-group grow-date-container"> - <div class="input-group input-daterange grow-date-input-daterange"> - <%= text_field_tag :start_date, params[:start_date], class: 'form-control start-date mx-0', placeholder: '开始时间' %> - <div class="input-group-prepend"><span class="input-group-text">到</span></div> - <%= text_field_tag :end_date, params[:start_date], class: 'form-control end-date mx-0', placeholder: '结束时间' %> - </div> - </div> - - </div> - <%= text_field_tag :keyword, params[:keyword], placeholder: 'ID/单位名称检索', class: 'form-control mx-3 search-input' %> - - <%= javascript_void_link '搜索', class: 'btn btn-primary search-btn', target: '' %> - </form> - <div class="flex-12"> +<div class="box search-form-container salesman-channel-list-form rig"> + <div class="flex-1"> <%= javascript_void_link '新增渠道', class: 'btn btn-primary', data: {salesman_id: @salesman.id, toggle: 'modal', target: '.admin-add-salesman-channel-user-modal' } %> </div> </div> - <div class="box admin-list-container salesman-channel-list-container"> <%= render(partial: 'admins/salesman_channels/shared/list') %> </div> diff --git a/app/views/admins/salesman_channels/shared/_list.html.erb b/app/views/admins/salesman_channels/shared/_list.html.erb index 4e276b115..12100ce48 100644 --- a/app/views/admins/salesman_channels/shared/_list.html.erb +++ b/app/views/admins/salesman_channels/shared/_list.html.erb @@ -19,16 +19,16 @@ <span><%= channel.school_name %></span> </td> <td class="text-left"> - <span><%= channel.teacher_count(@start_time, @end_time, @keyword) %></span> + <span><%= channel.teacher_count %></span> </td> <td class="text-left"> - <span><%= channel.student_count(@start_time, @end_time, @keyword) %></span> + <span><%= channel.student_count %></span> </td> <td> - <%= channel.course_count(@start_time, @end_time, @keyword) %> + <%= channel.course_count %> </td> <td> - <%= channel.shixuns_count(@start_time, @end_time, @keyword) %> + <%= channel.shixuns_count %> </td> <td> <%= delete_link '删除', admins_salesman_channel_path(channel, salesman_id: channel.salesman_id, element: ".salesman-channel-item-#{channel.id}"), class: 'delete-salesman-action' %> diff --git a/app/views/admins/shixun_settings/index.html.erb b/app/views/admins/shixun_settings/index.html.erb index 82d7fa3a1..a3d7dff4a 100644 --- a/app/views/admins/shixun_settings/index.html.erb +++ b/app/views/admins/shixun_settings/index.html.erb @@ -73,8 +73,8 @@ </div> <div class="mr-5"> <label for="is_wechat_support"> - <%= check_box_tag :is_wechat_support, !@sort_json[:is_wechat_support],@sort_json[:is_wechat_support], class:"shixun-settings-select" %> - <span class="only_view">只看小程序可用</span> + <%= check_box_tag :no_subject, !@sort_json[:no_subject],@sort_json[:no_subject], class:"shixun-settings-select" %> + <span class="only_view">已发布没关联课程</span> </label> </div> diff --git a/db/migrate/20200223021427_sync_subjectds_mobile.rb b/db/migrate/20200223021427_sync_subjectds_mobile.rb new file mode 100644 index 000000000..1c2fb6c3e --- /dev/null +++ b/db/migrate/20200223021427_sync_subjectds_mobile.rb @@ -0,0 +1,7 @@ +class SyncSubjectdsMobile < ActiveRecord::Migration[5.2] + def change + SubDisciplineContainer.find_each do |sc| + subject.find(sc.container_id).update_column(:show_mobile => true) + end + end +end diff --git a/public/react/package.json b/public/react/package.json index a30780480..1cba54b39 100644 --- a/public/react/package.json +++ b/public/react/package.json @@ -93,6 +93,8 @@ "rsuite": "^4.0.1", "sass-loader": "7.3.1", "scroll-into-view": "^1.12.3", + "showdown": "^1.9.1", + "showdown-katex": "^0.6.0", "store": "^2.0.12", "style-loader": "0.19.0", "styled-components": "^4.1.3", diff --git a/public/react/src/modules/courses/busyWork/CommonWorkAppraise.js b/public/react/src/modules/courses/busyWork/CommonWorkAppraise.js index bfc653ae0..fdd0de05a 100644 --- a/public/react/src/modules/courses/busyWork/CommonWorkAppraise.js +++ b/public/react/src/modules/courses/busyWork/CommonWorkAppraise.js @@ -1,29 +1,16 @@ +import '../katex.css'; +import '../css/Courses.css'; import React,{Component} from "react"; -import { Form, Select, Input, Button,Checkbox,Upload,Icon,message,Modal, Table, Divider, Tag,DatePicker,Radio,Tooltip} from "antd"; -import {Link} from 'react-router-dom'; -import locale from 'antd/lib/date-picker/locale/zh_CN'; -import { WordsBtn, MarkdownToHtml, markdownToHTML, ImageLayer2 } from 'educoder'; +import {markdownToHTML, ImageLayer2 } from 'educoder'; import axios from 'axios'; import Modals from '../../modals/Modals'; -import CoursesListType from '../coursesPublic/CoursesListType'; -import HomeworkModal from "../coursesPublic/HomeworkModal"; -import CheckAllGroup from '../common/button/CheckAllGroup' import moment from 'moment'; -import CheckCodeModal from '../coursesPublic/modal/CheckCodeModal' -import '../css/Courses.css' import WorkDetailPageHeader from './common/WorkDetailPageHeader' import CommonWorkAppraiseReply from './reply/CommonWorkAppraiseReply' -import Example from './TestHooks' import CommonWorkAppraiseReviseAttachments from './CommonWorkAppraiseReviseAttachments' -import LeaderIcon from './common/LeaderIcon' -const { Option} = Select; -const CheckboxGroup = Checkbox.Group; -const confirm = Modal.confirm; - -const $ = window.$; -const Search = Input.Search; -const RadioGroup = Radio.Group; - +import LeaderIcon from './common/LeaderIcon'; +import showdown from 'showdown' +import showdownKatex from 'showdown-katex' class CommonWorkAppraise extends Component{ constructor(props){ @@ -56,22 +43,28 @@ class CommonWorkAppraise extends Component{ console.log(error) }) } - getSupplyAttachments = () => { - let workId =this.props.match.params.workId; - let studentWorkId =this.props.match.params.studentWorkId; - - const url = `/student_works/${studentWorkId}/supply_attachments.json` - - axios.get(url).then((result)=> { - if (result.data.course_id) { - - this.setState({ - ...result.data - }) - } - }).catch((error)=>{ - console.log(error) - }) + exportMdtoHtml=(md)=> { + let newmd=md; + newmd=newmd.replace(/TOC/g, ''); + newmd=newmd.replace(/\[|]/g,''); + newmd=newmd.replace(/`/g, ''); + newmd=newmd.replace(/`/g, ''); + newmd=newmd.replace(/"/g, ''); + newmd=newmd.replace(/"/g, ''); + newmd=newmd.replace(/"/g, ''); + const converter = new showdown.Converter({ + extensions: [ + showdownKatex({ + // maybe you want katex to throwOnError + throwOnError: true, + // disable displayMode + displayMode: false, + // change errorColor to blue + errorColor: '#1500ff', + }), + ], + }); + return converter.makeHtml(newmd); } getReviseAttachments = () => { let studentWorkId =this.props.match.params.studentWorkId; @@ -99,22 +92,6 @@ class CommonWorkAppraise extends Component{ componentDidMount() { this.getWork(); this.getReviseAttachments() - - let workId =this.props.match.params.workId; - let studentWorkId =this.props.match.params.studentWorkId; - // const url = `/student_works/${studentWorkId}/comment_list.json` - - // axios.get(url).then((result)=> { - // if (result.data.course_id) { - - // this.setState({ - // ...result.data - // }) - // } - - // }).catch((error)=>{ - // console.log(error) - // }) } onAttachmentRemove = (id) => { @@ -205,7 +182,7 @@ class CommonWorkAppraise extends Component{ <div className={"color-grey-6 mb15 font-16"}> 内容 </div> - <div className="markdown-body ml20" dangerouslySetInnerHTML={{__html: markdownToHTML(description)}}> + <div className="markdown-body ml20" dangerouslySetInnerHTML={{__html: this.exportMdtoHtml(description)}}> </div> {attachments.map((item,key)=>{ diff --git a/public/react/src/modules/courses/common/comments/CCommentItem.js b/public/react/src/modules/courses/common/comments/CCommentItem.js index c440e0424..4a399b11f 100644 --- a/public/react/src/modules/courses/common/comments/CCommentItem.js +++ b/public/react/src/modules/courses/common/comments/CCommentItem.js @@ -1,9 +1,12 @@ +import '../../katex.css'; import React,{ Component } from "react"; import { getImageUrl, markdownToHTML, WordsBtn, getUrl } from 'educoder'; -import { Tooltip } from 'antd' -import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor' -import axios from 'axios' -import moment from 'moment' +import { Tooltip } from 'antd'; +import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor'; +import axios from 'axios'; +import moment from 'moment'; +import showdown from 'showdown'; +import showdownKatex from 'showdown-katex'; const _origin = '' /** https://www.showdoc.cc/127895880302646?page_id=1962215317836957 @@ -14,7 +17,7 @@ const REFUSE = 4 class CCommentItem extends Component{ constructor(props){ super(props); - + this.state = { show_reply: false, show_appeal: false, @@ -46,7 +49,7 @@ class CCommentItem extends Component{ let { item, commentIndex }=this.props; const url = `/student_works/${studentWorkId}/cancel_appeal.json` - axios.post(url, { + axios.post(url, { score_id: item.id }) .then((response) => { @@ -57,7 +60,7 @@ class CCommentItem extends Component{ }) .catch(function (error) { console.log(error); - }); + }); } }) } @@ -77,7 +80,7 @@ class CCommentItem extends Component{ comment: this.state.secondReplyContent }).then((result)=>{ if(result.data.status == 0){ - this.props.replySuccess() + this.props.replySuccess() this.cancelReply() } }).catch((error)=>{ @@ -92,7 +95,7 @@ class CCommentItem extends Component{ if(result.data.status == 0){ this.props.replySuccess() this.cancelAppeal() - + } }).catch((error)=>{ console.log(error) @@ -118,14 +121,14 @@ class CCommentItem extends Component{ }) .catch(function (error) { console.log(error); - }); + }); } }) } on_deal_appeal_score = (mode, item) => { this.props.confirm({ // content: `确认要删除所选的${len}个帖子吗?`, - content: + content: <div> <div>{mode == ACCEPT ? '此匿评成绩将被废弃,评阅人的作品将被违规扣分' : '此匿评成绩将被认为合理'}</div> <div>是否确认{mode == ACCEPT ? '接受申诉' : '拒绝申诉'}</div> @@ -146,13 +149,39 @@ class CCommentItem extends Component{ }) .catch(function (error) { console.log(error); - }); + }); } }) } + parseCommentContent = (oldContent) => { return markdownToHTML(oldContent); } + + exportMdtoHtml=(md)=> { + let newmd=md; + newmd=newmd.replace(/TOC/g, ''); + newmd=newmd.replace(/\[|]/g,''); + newmd=newmd.replace(/`/g, ''); + newmd=newmd.replace(/`/g, ''); + newmd=newmd.replace(/"/g, ''); + newmd=newmd.replace(/"/g, ''); + newmd=newmd.replace(/"/g, ''); + const converter = new showdown.Converter({ + extensions: [ + showdownKatex({ + // maybe you want katex to throwOnError + throwOnError: true, + // disable displayMode + displayMode: false, + // change errorColor to blue + errorColor: '#1500ff', + }), + ], + }); + return converter.makeHtml(newmd); + } + renderChildenComments = (parent) => { if (parent.journals.length == 0) { return ''; @@ -172,19 +201,19 @@ class CCommentItem extends Component{ // is_appeal_info true 是匿评人匿评信息,需要统一使用头像去掉链接 return parent.journals.map(item => { // <div>{item.content} {item.user_info.user_name}</div> - + // src={getImageUrl(`images/${item.image_url}`)} const imgSrc = (!item.user_info.user_image_url || item.user_info.user_image_url === '--') ? `edu_user/anony.png` : item.user_info.user_image_url; return ( <div className="comment_item_cont appraise df clearfix" key={item.id}> <div className="J_Comment_Face fl"> - {item.is_appeal_info == true ? + {item.is_appeal_info == true ? <a href={`javascript:void(0)`} target="_blank"> - <img alt="用户头像" height="50" + <img alt="用户头像" height="50" src={`${getUrl()}/images/edu_user/anony.png`} width="50"/> </a> : <a href={`${_origin}/users/${item.user_info.user_login}`} target="_blank"> - <img alt="用户头像" height="50" + <img alt="用户头像" height="50" src={`${getImageUrl(`images/`+imgSrc)}`} width="50"/> </a>} @@ -204,21 +233,21 @@ class CCommentItem extends Component{ </a>} <span className="t_area fl">{moment(item.time).format('YYYY-MM-DD HH:mm')}</span> - {item.is_appeal_info && (item.appeal_status == 1 ? - <span className={"edu-filter-btn edu-filter-btn-4CACFF ml15 fl typestyle "} >申诉中</span> : - item.appeal_status == 2 ? + {item.is_appeal_info && (item.appeal_status == 1 ? + <span className={"edu-filter-btn edu-filter-btn-4CACFF ml15 fl typestyle "} >申诉中</span> : + item.appeal_status == 2 ? <span className={"edu-filter-btn edu-filter-btn-EDEDED ml15 fl typestyle color666666 "} >申诉已撤销</span> : - item.appeal_status == 3 ? + item.appeal_status == 3 ? <span className={"edu-filter-btn edu-filter-btn-4CACFF ml15 fl typestyle "} >申诉成功</span> : - item.appeal_status == 4 ? + item.appeal_status == 4 ? <span className={"edu-filter-btn edu-filter-btn-EDEDED ml15 fl typestyle color666666 "} >申诉被拒绝</span> : - item.appeal_status == 5 ? + item.appeal_status == 5 ? <span className={"edu-filter-btn edu-filter-btn-EDEDED ml15 fl typestyle color666666 "} >申诉失败</span> : '') - } - - + } + + {/* fr */} - {/* { item.is_invalid ? <span className="validate_area fr">失效</span> : + {/* { item.is_invalid ? <span className="validate_area fr">失效</span> : <React.Fragment> */} {!item.is_appeal_info && item.can_delete == true && <Tooltip title="删除"> <i className="iconfont icon-shanchu mr5 fr font-14" onClick={() => this.onDeleteSecondReply(item)} @@ -233,19 +262,19 @@ class CCommentItem extends Component{ </React.Fragment>} {item.appeal_status == 1 && this.props.is_author == true && this.props.isStudent()===true && <WordsBtn style="blue" className="fr mr5" onClick={() => this.cancelMyAppeal()}>撤销申诉</WordsBtn>} - + </div> </div> <div className="comment_content clearfix" id={`reply_content_${item.id}`}> <div className="color-grey-3" id={`reply_content_${item.id}`}> - <div className={"break_word_comments markdown-body"} - dangerouslySetInnerHTML={{__html: this.parseCommentContent(item.content)}}></div> + <div className={"markdown-body"} + dangerouslySetInnerHTML={{__html:this.exportMdtoHtml(item.content)}}></div> <div className="cl"></div> </div> </div> - + </div> </div> </div> @@ -256,7 +285,7 @@ class CCommentItem extends Component{ render(){ let { item, commentIndex, homework_status, is_author }=this.props; let { show_reply, show_appeal }=this.state; - const _content = item.content ? this.parseCommentContent(item.content) : '' + const _content = item.content ? this.exportMdtoHtml(item.content) : '' const isAnonymous = homework_status && homework_status.indexOf('匿评中') != -1 const isAppealing = homework_status && homework_status.indexOf('申诉中') != -1 const attachments = item.attachments; @@ -266,13 +295,13 @@ class CCommentItem extends Component{ <div className="ccomment comment_item_cont df clearfix" key={item.id}> <div className="J_Comment_Face fl"> - {item.image_url == '--' ? + {item.image_url == '--' ? <a href={`javascript:void(0)`} > - <img alt="用户头像" height="50" + <img alt="用户头像" height="50" src={`${getUrl()}/images/edu_user/anony.png`} width="50"/> </a> : <a href={`${_origin}/users/${item.user_login}`} target="_blank"> - <img alt="用户头像" height="50" + <img alt="用户头像" height="50" src={`${getUrl()}/images/${item.image_url}`} width="50"/> </a>} @@ -285,7 +314,7 @@ class CCommentItem extends Component{ <div className="t_content fl"> <div className="J_Comment_Reply"> <div className="comment_orig_content" style={{ margin:"0px" }}> - + <div className="J_Comment_Info clearfix mt3"> <div className="t_info fl"> @@ -303,8 +332,8 @@ class CCommentItem extends Component{ <span className="t_area fl">{item.time}</span> {/* 分数 */} {item.score !== null && <span className="score_area fl">{item.score}分</span>} - - + + {/* item.is_invalid && */} {/* { item.delete && isAdmin && <Tooltip title={ "删除" } > <i className="iconfont icon-shanchu mr5 fr" style={{marginLeft: '6px'}} @@ -312,29 +341,29 @@ class CCommentItem extends Component{ </i> </Tooltip>} */} - + {/* fr */} {/* <WordsBtn style="blue" className="fr">回复</WordsBtn> */} - { item.is_invalid ? <span className="validate_area fr">失效</span> : + { item.is_invalid ? <span className="validate_area fr">失效</span> : <React.Fragment> <WordsBtn style="blue" className="fr" onClick={this.state.show_reply ? this.cancelReply : this.showReply}>回复</WordsBtn> - {(isAppealing || isAnonymous) && item.can_appeal && item.appeal_status == 0 && + {(isAppealing || isAnonymous) && item.can_appeal && item.appeal_status == 0 && <WordsBtn style="blue" className="fr mr20" onClick={this.state.show_appeal ? this.cancelAppeal : this.showAppeal}>申诉</WordsBtn>} - + </React.Fragment> } - {item.delete && isAdmin - && <WordsBtn style="blue" className="fr mr12" + {item.delete && isAdmin + && <WordsBtn style="blue" className="fr mr12" onClick={() => this.props.onDelete(item)}>删除</WordsBtn>} - + </div> </div> {!!_content && _content !== 'null' && <div className="comment_content clearfix mt8" id={`reply_content_${item.id}`}> <div className="color-grey-3" id={`reply_content_${item.id}`}> - <div className={"break_word_comments markdown-body"} dangerouslySetInnerHTML={{__html: _content}}></div> + <div className={"markdown-body"} dangerouslySetInnerHTML={{__html: _content}}></div> <div className="cl"></div> </div> </div>} @@ -367,7 +396,7 @@ class CCommentItem extends Component{ <div className="childrenCommentsView" style={{background: '#fff'}}> {/* {(item && item.journals && item.journals.length) ? <div className="trangle"></div>: ''} */} {this.renderChildenComments(item)} - {/* { item.isAllChildrenLoaded != true && item.journals && this.props.isChildCommentPagination == true && item.journals.length >= 5? + {/* { item.isAllChildrenLoaded != true && item.journals && this.props.isChildCommentPagination == true && item.journals.length >= 5? <Tooltip title={ "点击查看更多回复" } disableFocusListener={true}> <div className="loadMoreChildComments" onClick={() => {this.props.loadMoreChildComments && this.props.loadMoreChildComments(item)}}> <i className="iconfont icon-xiajiantou"></i> @@ -379,9 +408,9 @@ class CCommentItem extends Component{ <p className="" > {/* 第二排右侧按钮区域 */} {/* ${this.state.show_reply ? '回复' : '申诉'} */} - {(show_reply || show_appeal) && + {(show_reply || show_appeal) && <React.Fragment> - <TPMMDEditor mdID={`${commentIndex}`} watch={false} + <TPMMDEditor mdID={`${commentIndex}`} watch={false} height={130} onChange={(val) => this.setState({ secondReplyContent: val})} placeholder={`请输入内容`} noStorage={true} ></TPMMDEditor> @@ -389,15 +418,15 @@ class CCommentItem extends Component{ <a className="task-btn task-btn-orange fr" style={{height: '26px', lineHeight: '26px', width: '60px'}} onClick={this.onSubmit} >{this.state.show_reply ? '回复' : '申诉'}</a> - <a onClick={this.onCancel} className="defalutCancelbtn fr" + <a onClick={this.onCancel} className="defalutCancelbtn fr" style={{height: '26px', width: '60px', fontSize: '14px', lineHeight: '26px', marginRight: '10px'}}>取消</a> - + </div> </React.Fragment> } </p> - - + + </div> </div> </div> diff --git a/public/react/src/modules/courses/coursesPublic/OneSelfOrderModal.js b/public/react/src/modules/courses/coursesPublic/OneSelfOrderModal.js index 87d7e5eae..1f7fec57a 100644 --- a/public/react/src/modules/courses/coursesPublic/OneSelfOrderModal.js +++ b/public/react/src/modules/courses/coursesPublic/OneSelfOrderModal.js @@ -141,10 +141,24 @@ class OneSelfOrderModal extends Component{ //勾选实训 shixunhomeworkedit=(list)=>{ + if(this.state.course_groups){ + if(this.state.course_groups.length===list.length){ + this.setState({ + Checkboxtype:true, + group_ids:list + }) + }else{ + this.setState({ + Checkboxtype:false, + group_ids:list + }) + } + }else{ + this.setState({ + group_ids:list + }) + } - this.setState({ - group_ids:list - }) this.props.getcourse_groupslist && this.props.getcourse_groupslist(list) } diff --git a/public/react/src/modules/courses/fonts/KaTeX_AMS-Regular.ttf b/public/react/src/modules/courses/fonts/KaTeX_AMS-Regular.ttf new file mode 100644 index 000000000..afcd2eb4d Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_AMS-Regular.ttf differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_AMS-Regular.woff b/public/react/src/modules/courses/fonts/KaTeX_AMS-Regular.woff new file mode 100644 index 000000000..4f575152f Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_AMS-Regular.woff differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_AMS-Regular.woff2 b/public/react/src/modules/courses/fonts/KaTeX_AMS-Regular.woff2 new file mode 100644 index 000000000..b982d6eaf Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_AMS-Regular.woff2 differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Bold.ttf b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Bold.ttf new file mode 100644 index 000000000..f84148db5 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Bold.ttf differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Bold.woff b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Bold.woff new file mode 100644 index 000000000..ab56ab7fa Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Bold.woff differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Bold.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Bold.woff2 new file mode 100644 index 000000000..710c26179 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Bold.woff2 differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Regular.ttf b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Regular.ttf new file mode 100644 index 000000000..97814db7e Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Regular.ttf differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Regular.woff b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Regular.woff new file mode 100644 index 000000000..aec8a3338 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Regular.woff differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Regular.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Regular.woff2 new file mode 100644 index 000000000..ee5193d7c Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Caligraphic-Regular.woff2 differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Bold.ttf b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Bold.ttf new file mode 100644 index 000000000..483a7cdd4 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Bold.ttf differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Bold.woff b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Bold.woff new file mode 100644 index 000000000..189fea5e4 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Bold.woff differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Bold.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Bold.woff2 new file mode 100644 index 000000000..dc3bd4c04 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Bold.woff2 differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Regular.ttf b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Regular.ttf new file mode 100644 index 000000000..9aa5f674d Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Regular.ttf differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Regular.woff b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Regular.woff new file mode 100644 index 000000000..d01450e91 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Regular.woff differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Regular.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Regular.woff2 new file mode 100644 index 000000000..7eeba3779 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Fraktur-Regular.woff2 differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-Bold.ttf b/public/react/src/modules/courses/fonts/KaTeX_Main-Bold.ttf new file mode 100644 index 000000000..dc0185a12 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-Bold.ttf differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-Bold.woff b/public/react/src/modules/courses/fonts/KaTeX_Main-Bold.woff new file mode 100644 index 000000000..acf48e668 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-Bold.woff differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-Bold.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Main-Bold.woff2 new file mode 100644 index 000000000..cf5ababf4 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-Bold.woff2 differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-BoldItalic.ttf b/public/react/src/modules/courses/fonts/KaTeX_Main-BoldItalic.ttf new file mode 100644 index 000000000..4346f173c Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-BoldItalic.ttf differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-BoldItalic.woff b/public/react/src/modules/courses/fonts/KaTeX_Main-BoldItalic.woff new file mode 100644 index 000000000..d2cfe4e31 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-BoldItalic.woff differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-BoldItalic.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Main-BoldItalic.woff2 new file mode 100644 index 000000000..d0178f421 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-BoldItalic.woff2 differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-Italic.ttf b/public/react/src/modules/courses/fonts/KaTeX_Main-Italic.ttf new file mode 100644 index 000000000..f2c3ebaec Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-Italic.ttf differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-Italic.woff b/public/react/src/modules/courses/fonts/KaTeX_Main-Italic.woff new file mode 100644 index 000000000..1184295de Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-Italic.woff differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-Italic.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Main-Italic.woff2 new file mode 100644 index 000000000..aa05e142c Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-Italic.woff2 differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-Regular.ttf b/public/react/src/modules/courses/fonts/KaTeX_Main-Regular.ttf new file mode 100644 index 000000000..8acb36545 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-Regular.ttf differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-Regular.woff b/public/react/src/modules/courses/fonts/KaTeX_Main-Regular.woff new file mode 100644 index 000000000..9f8228fc3 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-Regular.woff differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Main-Regular.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Main-Regular.woff2 new file mode 100644 index 000000000..e3f71eb7e Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Main-Regular.woff2 differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Math-BoldItalic.ttf b/public/react/src/modules/courses/fonts/KaTeX_Math-BoldItalic.ttf new file mode 100644 index 000000000..a645df64e Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Math-BoldItalic.ttf differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Math-BoldItalic.woff b/public/react/src/modules/courses/fonts/KaTeX_Math-BoldItalic.woff new file mode 100644 index 000000000..87d4f223e Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Math-BoldItalic.woff differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Math-BoldItalic.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Math-BoldItalic.woff2 new file mode 100644 index 000000000..83b49962a Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Math-BoldItalic.woff2 differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Math-Italic.ttf b/public/react/src/modules/courses/fonts/KaTeX_Math-Italic.ttf new file mode 100644 index 000000000..9c38359cc Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Math-Italic.ttf differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Math-Italic.woff b/public/react/src/modules/courses/fonts/KaTeX_Math-Italic.woff new file mode 100644 index 000000000..959746ef5 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Math-Italic.woff differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Math-Italic.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Math-Italic.woff2 new file mode 100644 index 000000000..e3ea522a6 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Math-Italic.woff2 differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Bold.ttf b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Bold.ttf new file mode 100644 index 000000000..ff1085124 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Bold.ttf differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Bold.woff b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Bold.woff new file mode 100644 index 000000000..f0d6ea739 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Bold.woff differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Bold.woff2 b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Bold.woff2 new file mode 100644 index 000000000..4cf8f1469 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Bold.woff2 differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Italic.ttf b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Italic.ttf new file mode 100644 index 000000000..3dd767131 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Italic.ttf differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Italic.woff b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Italic.woff new file mode 100644 index 000000000..9da0dfe39 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Italic.woff differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Italic.woff2 b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Italic.woff2 new file mode 100644 index 000000000..ce19ae03d Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Italic.woff2 differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Regular.ttf b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Regular.ttf new file mode 100644 index 000000000..f117cd619 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Regular.ttf differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Regular.woff b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Regular.woff new file mode 100644 index 000000000..6ed98780a Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Regular.woff differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Regular.woff2 b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Regular.woff2 new file mode 100644 index 000000000..27611491a Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_SansSerif-Regular.woff2 differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Script-Regular.ttf b/public/react/src/modules/courses/fonts/KaTeX_Script-Regular.ttf new file mode 100644 index 000000000..e6f34542e Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Script-Regular.ttf differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Script-Regular.woff b/public/react/src/modules/courses/fonts/KaTeX_Script-Regular.woff new file mode 100644 index 000000000..4a48e65f0 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Script-Regular.woff differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Script-Regular.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Script-Regular.woff2 new file mode 100644 index 000000000..b0aed195c Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Script-Regular.woff2 differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size1-Regular.ttf b/public/react/src/modules/courses/fonts/KaTeX_Size1-Regular.ttf new file mode 100644 index 000000000..37faa0f9f Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size1-Regular.ttf differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size1-Regular.woff b/public/react/src/modules/courses/fonts/KaTeX_Size1-Regular.woff new file mode 100644 index 000000000..0832f7a46 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size1-Regular.woff differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size1-Regular.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Size1-Regular.woff2 new file mode 100644 index 000000000..483e7b66e Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size1-Regular.woff2 differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size2-Regular.ttf b/public/react/src/modules/courses/fonts/KaTeX_Size2-Regular.ttf new file mode 100644 index 000000000..cf326236c Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size2-Regular.ttf differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size2-Regular.woff b/public/react/src/modules/courses/fonts/KaTeX_Size2-Regular.woff new file mode 100644 index 000000000..14f6485ab Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size2-Regular.woff differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size2-Regular.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Size2-Regular.woff2 new file mode 100644 index 000000000..5ff706067 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size2-Regular.woff2 differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size3-Regular.ttf b/public/react/src/modules/courses/fonts/KaTeX_Size3-Regular.ttf new file mode 100644 index 000000000..ff7e2b901 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size3-Regular.ttf differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size3-Regular.woff b/public/react/src/modules/courses/fonts/KaTeX_Size3-Regular.woff new file mode 100644 index 000000000..d3626cef3 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size3-Regular.woff differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size3-Regular.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Size3-Regular.woff2 new file mode 100644 index 000000000..e45ca49db Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size3-Regular.woff2 differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size4-Regular.ttf b/public/react/src/modules/courses/fonts/KaTeX_Size4-Regular.ttf new file mode 100644 index 000000000..3034091cd Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size4-Regular.ttf differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size4-Regular.woff b/public/react/src/modules/courses/fonts/KaTeX_Size4-Regular.woff new file mode 100644 index 000000000..93c57a6f9 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size4-Regular.woff differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Size4-Regular.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Size4-Regular.woff2 new file mode 100644 index 000000000..53b65afcf Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Size4-Regular.woff2 differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Typewriter-Regular.ttf b/public/react/src/modules/courses/fonts/KaTeX_Typewriter-Regular.ttf new file mode 100644 index 000000000..2fd85294a Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Typewriter-Regular.ttf differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Typewriter-Regular.woff b/public/react/src/modules/courses/fonts/KaTeX_Typewriter-Regular.woff new file mode 100644 index 000000000..e90fa2bc7 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Typewriter-Regular.woff differ diff --git a/public/react/src/modules/courses/fonts/KaTeX_Typewriter-Regular.woff2 b/public/react/src/modules/courses/fonts/KaTeX_Typewriter-Regular.woff2 new file mode 100644 index 000000000..e40ab1516 Binary files /dev/null and b/public/react/src/modules/courses/fonts/KaTeX_Typewriter-Regular.woff2 differ diff --git a/public/react/src/modules/courses/katex.css b/public/react/src/modules/courses/katex.css new file mode 100644 index 000000000..0aff4ccd8 --- /dev/null +++ b/public/react/src/modules/courses/katex.css @@ -0,0 +1 @@ +@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important}.katex .katex-mathml{border:0;clip:rect(1px,1px,1px,1px);height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathdefault{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer,.katex .sizing{display:inline-block}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .op-limits>.vlist-t{text-align:center}.katex .accent>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{border-right:.05em solid;display:inline-block;margin:0 -.025em;min-width:1px}.katex .mtable .vs-dashed{border-right:.05em dashed}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{display:block;fill:currentColor;fill-opacity:1;fill-rule:nonzero;height:inherit;position:absolute;stroke:currentColor;stroke-dasharray:none;stroke-dashoffset:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-width:1;width:100%}.katex svg path{stroke:none}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox{border:.04em solid #000;box-sizing:border-box}.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0} \ No newline at end of file