AudioTraining.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400
  1. $(function () {
  2. $(".no-text-audio").attr("data-drm", GetQueryString("drm"));
  3. $("body").on("click", function () {
  4. if (typeof wpfCallBack != "undefined") {
  5. wpfCallBack.hideTools();
  6. }
  7. });
  8. var html = $.ajax({ url: "data/html.json", async: false }).responseText;//作答信息
  9. var klg = $.ajax({ url: "data/klg.txt", async: false }).responseText;//评阅信息
  10. var klgcode = $.ajax({ url: "data/klgcode.txt", async: false }).responseText;//评阅信息
  11. InitSynPageData(html, klg, klgcode, "http://192.168.129.250:10103/WS_FSCModule/", "zxstu36", 1);
  12. });
  13. //存储页面信息
  14. var pageVar = {
  15. index: 0,
  16. klgArr: [],
  17. klgcodeArr: [],
  18. data: new Object()
  19. }
  20. function updatePlayState(state) {
  21. $(".no-text-audio").attr("data-playing", state);
  22. }
  23. function getKlgCode(klgtext) {
  24. for (var i = 0; i < pageVar.klgArr.length; i++) {
  25. if (klgtext.toLowerCase() == pageVar.klgArr[i].toLowerCase()) {
  26. return pageVar.klgcodeArr[i];
  27. }
  28. }
  29. return "";
  30. }
  31. //设置页面的展示内容
  32. function InitSynPageData(html, klg, klgcode, url, userid) {
  33. var audioMetaData = JSON.parse(html);
  34. pageVar.klgArr = klg.split("|");
  35. pageVar.klgcodeArr = klgcode.split("|");
  36. pageVar.data = audioMetaData;
  37. if (audioMetaData.length > 0) {
  38. $(".no-text-audio").hide();
  39. $.DataTemplate("AudioSynArticle-template", audioMetaData, "AudioContentData", false);
  40. $("#AudioContentData").html($.MarkKnowledge($("#AudioContentData").html(), klg.split("|")));
  41. //知识点绑定事件
  42. $('.TextMark').click(function () {
  43. $(this).attr("id", $(this).attr("word"));//临时给词汇添加ID
  44. ShowWord(this, url, userid);
  45. });
  46. } else {
  47. $(".no-text-audio").show();
  48. $("#AudioContentData").hide();
  49. }
  50. if (typeof wpfCallBack != "undefined") {
  51. wpfCallBack.hideMainWindowLoad();
  52. }
  53. }
  54. //设置页面的展示内容,ismark 是否要标注,0-不标注,1-标注知识点
  55. function InitPageData(html, klg, klgcode, url, userid, ismark) {
  56. if (ismark == 1 && html != "") {
  57. var words = html.replace(/(<br[^>]*>)+/gi, "</p><p>");
  58. pageVar.klgArr = klg.split("|");
  59. pageVar.klgcodeArr = klgcode.split("|");
  60. //替换所有的换行符
  61. words = words.replace(/\r\n/g, "<br>");
  62. words = words.replace(/\n/g, "<br>");
  63. words = $.MarkKnowledge("<p>" + words + "</p>", klg.split("|"));
  64. var reg = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi;
  65. words = words.replace(reg, function (replacement) { return HTMLEncode(replacement); });
  66. $("#AudioContentData").html(words);
  67. $(".no-text-audio").hide();
  68. //知识点绑定事件
  69. $('.TextMark').click(function () {
  70. $(this).attr("id", $(this).attr("word"));//临时给词汇添加ID
  71. ShowWord(this, url, userid);
  72. });
  73. }
  74. else if (html != "") {
  75. //替换所有的换行符
  76. words = words.replace(/\r\n/g, "<br>");
  77. words = words.replace(/\n/g, "<br>");
  78. $("#AudioContentData").html(html);
  79. $(".no-text-audio").hide();
  80. } else {
  81. $("#AudioContentData").hide();
  82. $(".no-text-audio").show();
  83. }
  84. if (typeof wpfCallBack != "undefined") {
  85. wpfCallBack.hideMainWindowLoad();
  86. }
  87. }
  88. //模式切换
  89. function ChangeMode(mode) {
  90. if (mode == "Dictation") {
  91. $("#AudioContentData").css("display", "none");
  92. $("#WriteContentData").css("display", "block");
  93. } else {
  94. $("#AudioContentData").css("display", "block");
  95. $("#WriteContentData").css("display", "none");
  96. }
  97. }
  98. //设置某一句跟读样式
  99. function SetSentenceStatus(currentNum) {
  100. var relative = $(".syn-article-sentence[data-id=" + (currentNum + 1) + "]");
  101. relative.siblings().removeClass("sentence-read-ing");
  102. relative.addClass("sentence-read-ing");
  103. relative.prevAll().addClass("sentence-read-ed");
  104. relative.nextAll().removeClass("sentence-read-ed");
  105. }
  106. //清除所有跟读样式
  107. function ClearSentenceStatus() {
  108. $(".syn-article-sentence").removeClass("sentence-read-ed").removeClass("sentence-read-ing");
  109. }
  110. //显示及隐藏原文
  111. function ShowPageData(flag) {
  112. if (flag == 0) {
  113. $("#AudioContentData").hide();
  114. $(".hide-text").show();
  115. } else {
  116. $("#AudioContentData").show();
  117. $(".hide-text").hide();
  118. }
  119. }
  120. //显示知识点课件
  121. function ShowWord(obj, url, userid) {
  122. var JQThis = $(obj);
  123. var knowlegde = $.trim(JQThis.attr("word"));
  124. var isAdd = 1;
  125. if (typeof wpfCallBack != "undefined") {
  126. isAdd = wpfCallBack.checkKlgStudy(knowlegde) ? 0: 1;
  127. }
  128. $(obj).KLGTool({
  129. "userid": userid,
  130. "knowledgeCode": getKlgCode(knowlegde),//知识点ID
  131. "knowledge": knowlegde,//知识点文本
  132. "levelCode": "", //水平级别
  133. "isAddReStudy": isAdd,
  134. "Url": url + "/api/Resources/GetNewCourseware",//获取知识点信息的url
  135. addReStudy: function (klgcode) {
  136. var tagW = $(obj).width();//目标div宽度
  137. var tagH = $(obj).height();//目标div高度
  138. var tagL = $(obj).offset().left;//目标div距离页面左边长度
  139. var tagT = $(obj).offset().top;//目标div距离页面顶部长度
  140. var tagR = $("body").width() - tagL - tagW;//目标div距离页面右部长度
  141. $("body").append("<div class='TextMarkFly' style='right:" + tagR + "px;top:" + tagT + "px;width:" + tagW + "px;height:" + tagH + "px;'>" + knowlegde + "</div>");
  142. $(".TextMarkFly").animate({ top: 0, right: "200px" }, 800, function () {
  143. $(".TextMarkFly").remove();
  144. if (typeof wpfCallBack != "undefined") {
  145. wpfCallBack.addResStudyKn(klgcode, knowlegde);
  146. }
  147. });
  148. },//添加到再学习知识点回调
  149. detailAction: function (klgcode) {
  150. if (typeof wpfCallBack != "undefined") {
  151. wpfCallBack.startKlgClient(klgcode);
  152. }
  153. }//详细释义点击事件
  154. });
  155. }
  156. //加载听写模式mode:1-作答状态,2-批阅状态
  157. var loadWriteMode = function (mode) {
  158. if (mode == 1) {
  159. loadWriteModeOne();
  160. }
  161. else {
  162. loadWriteModeTwo();
  163. }
  164. }
  165. //加载听写模式作答界面
  166. var loadWriteModeOne = function () {
  167. $("#WriteContentData").empty();
  168. var myTemplate = Handlebars.compile($("#LRModeOne-template").html());
  169. $('#WriteContentData').append(myTemplate(pageVar.data));
  170. $("input").off("keyup").keyup(function (e) {
  171. if (e.keyCode == 9) {
  172. if (typeof wpfCallBack != "undefined") {
  173. wpfCallBack.tabNextSentence();
  174. }
  175. }
  176. });
  177. }
  178. //加载听写模式批阅界面
  179. var loadWriteModeTwo = function () {
  180. if ($("input").length > 0) {
  181. for (var i = 0; i < pageVar.data.length; i++) {
  182. pageVar.data[i].PYEtext = pageVar.data[i].Etext.replace(/^\d+./, "").replace(/^\D{1,16}:/, "").replace(/(<br[^>]*>)+/gi, " ");
  183. pageVar.data[i].StuAnswer = $.trim($(".modetwo[data-index='" + i + "']").find("input").val());
  184. pageVar.data[i].StuScore = getScore(pageVar.data[i].PYEtext, pageVar.data[i].StuAnswer);
  185. pageVar.data[i].PYAnswer = markAns(pageVar.data[i].StuAnswer, pageVar.data[i].PYEtext);
  186. }
  187. }
  188. $("#WriteContentData").empty();
  189. var myTemplate = Handlebars.compile($("#LRModeTwo-template").html());
  190. $('#WriteContentData').append(myTemplate(pageVar.data));
  191. $(".submittitle span:nth-of-type(1)").text(pageVar.data.length);
  192. var wrongnum = $(".modethree[data-score='0']").length;
  193. $(".submittitle span:nth-of-type(2)").text(pageVar.data.length - wrongnum);
  194. $(".submittitle span:nth-of-type(3)").text(wrongnum);
  195. }
  196. //设置当前播放到第index句
  197. var setPagePlayIndex = function (index) {
  198. pageVar.index = index;
  199. $(".modetwo").attr("data-play", "0");
  200. $(".modetwo[data-index='" + index + "']").attr("data-play", "1");
  201. $(".modetwo[data-index='" + index + "'] div:nth-of-type(2) input").focus();
  202. layui.layer.closeAll();
  203. }
  204. //显示作答提示
  205. var showContinueTip = function () {
  206. if (pageVar.index >= (pageVar.data.length - 1)) {
  207. //LayerTip("按tab键结束听写~~", 1, ".modetwo[data-resindex='" + resindex + "'][data-playindex='" + playindex + "'] div:nth-of-type(2) input", 3000);
  208. }
  209. else {
  210. LayerTip("按tab键可以继续听写哦~~", 1, ".modetwo[data-index='" + pageVar.index + "'] div:nth-of-type(2) input", 3000);
  211. }
  212. }
  213. //取消页面作答状态
  214. var cancelPagePlayStatus = function () {
  215. $(".modetwo").attr("data-play", "0");
  216. }
  217. //评判作答得分
  218. var getScore = function (currectAns, myAns) {
  219. currectAns = $.trim(currectAns.toLowerCase().replace(/\s+/g, " ").replace(/\./g, ""));
  220. myAns = $.trim(myAns.toLowerCase().replace(/\s+/g, " ").replace(/\./g, ""));
  221. if (currectAns == myAns) {
  222. return 100;
  223. }
  224. return 0;
  225. }
  226. var markAns = function (WriteS, originS) {
  227. if ($.trim(WriteS) == "") {
  228. return "<span style='color:#999;'>未作答</span>";
  229. }
  230. var wArr = WriteS.trim().split(" ");
  231. var oArr = originS.trim().split(" ");
  232. originS = " " + originS + " ";
  233. sReturn = "<u>" + HTMLEncode(originS) + " </u>" + "<s>" + HTMLEncode(WriteS) + "</s>";
  234. if (undefined == originS) {
  235. return sReturn; // 正确词汇数为0
  236. }
  237. else {
  238. var arrLine = new Array();
  239. var iNum = 0; // 正确词汇数
  240. var ss = "";
  241. var sn1 = 0, sn2 = -1;
  242. var bTwoOrMoreWords = false;
  243. for (var i = 0; i < oArr.length; i++) {
  244. for (var j = sn1; j < wArr.length; j++) { // 每次从上一次找到词汇的地方开始查找
  245. if (oArr[i] == wArr[j]) {
  246. sn2 = j;
  247. break;
  248. }
  249. }
  250. if (sn2 < sn1) { // 找不到这个词汇
  251. ss += CompareWriteUnderline(oArr[i]) + " ";
  252. }
  253. else { // 找得到这个词汇
  254. var mA = originS.split(" " + oArr[i] + " "); // 判断是否有重复词汇
  255. if (mA.length > 2) { bTwoOrMoreWords = true; }
  256. iNum += 1;
  257. for (var j = sn1; j < sn2; j++) {
  258. ss += CompareWriteDecoration(wArr[j]) + " ";
  259. }
  260. sn1 = sn2 + 1;
  261. ss += HTMLEncode(oArr[i]) + " ";
  262. }
  263. }
  264. for (var j = sn1; j < wArr.length; j++) {
  265. ss += CompareWriteDecoration(wArr[j]) + " ";
  266. }
  267. var arrAnd = new Array();
  268. arrAnd.push(iNum); // 正确词汇数
  269. arrAnd.push(ss); // 组合的包含标签的句子
  270. arrLine.push(arrAnd);
  271. // 某个词汇含有两个以上并且词汇正确个数低于总词汇数,则进入反序判断
  272. if (bTwoOrMoreWords && iNum < oArr.length) {
  273. iNum = 0; // 正确词汇数
  274. ss = "";
  275. sn1 = 0, sn2 = -1;
  276. // 原句子词汇反序
  277. for (var i = 0; i < parseInt(oArr.length / 2) ; i++) {
  278. var ssss = oArr[i];
  279. oArr[i] = oArr[oArr.length - 1 - i];
  280. oArr[oArr.length - 1 - i] = ssss;
  281. }
  282. // 听写句子词汇反序
  283. for (var i = 0; i < parseInt(wArr.length / 2) ; i++) {
  284. var ssss = wArr[i];
  285. wArr[i] = wArr[wArr.length - 1 - i];
  286. wArr[wArr.length - 1 - i] = ssss;
  287. }
  288. for (var i = 0; i < oArr.length; i++) {
  289. for (var j = sn1; j < wArr.length; j++) { // 每次从上一次找到词汇的地方开始查找
  290. if (oArr[i] == wArr[j]) {
  291. sn2 = j;
  292. break;
  293. }
  294. }
  295. if (sn2 < sn1) { // 找不到这个词汇
  296. ss = CompareWriteUnderline(oArr[i]) + " " + ss;
  297. }
  298. else { // 找得到这个词汇
  299. iNum += 1;
  300. for (var j = sn1; j < sn2; j++) {
  301. ss = CompareWriteDecoration(wArr[j]) + " " + ss;
  302. }
  303. sn1 = sn2 + 1;
  304. ss = HTMLEncode(oArr[i]) + " " + ss;
  305. }
  306. }
  307. for (var j = sn1; j < wArr.length; j++) {
  308. ss = CompareWriteDecoration(wArr[j]) + " " + ss;
  309. }
  310. var arrAnd = new Array();
  311. arrAnd.push(iNum); // 正确词汇数
  312. arrAnd.push(ss); // 组合的包含标签的句子
  313. arrLine.push(arrAnd);
  314. }
  315. var sStr = arrLine[0][1];
  316. if (arrLine.length > 1) {
  317. if (parseInt(arrLine[0][0]) < parseInt(arrLine[1][0])) {
  318. sStr = arrLine[1][1];
  319. }
  320. }
  321. sStr = sStr.replace(/<\/u>\s<u>/ig, " ").replace(/<\/s>\s<s>/ig, " ");
  322. return sStr;
  323. }
  324. }
  325. var CompareWriteUnderline = function (text) {// 加下划线
  326. var s1 = "", s2 = "";
  327. if (0 == text.indexOf(" ")) {
  328. s1 = "<u> ";
  329. }
  330. else {
  331. s1 = "<u>";
  332. }
  333. if (0 == IsReverse(text).indexOf(" ")) {
  334. s2 = "</u> ";
  335. }
  336. else {
  337. s2 = "</u>";
  338. }
  339. return s1 + HTMLEncode(text.trim()) + s2;
  340. }
  341. function IsReverse(text) {
  342. return text.split('').reverse().join('');
  343. }
  344. var CompareWriteDecoration = function (text) {// 加删除线
  345. var s1 = "", s2 = "";
  346. if (0 == text.indexOf(" ")) {
  347. s1 = "<s> ";
  348. }
  349. else {
  350. s1 = "<s>";
  351. }
  352. if (0 == IsReverse(text).indexOf(" ")) {
  353. s2 = "</s> ";
  354. }
  355. else {
  356. s2 = "</s>";
  357. }
  358. return s1 + HTMLEncode(text.trim()) + s2;
  359. }
  360. var closeKLGTool = function () {
  361. $("body").KLGTool("destroy");
  362. }
  363. var getNowTipTop = function () {
  364. var obj = $(".sentence-read-ing")[0];
  365. if (obj.offsetTop < $("body").scrollTop() || obj.offsetTop > ($("body").scrollTop() + $(window).height())) {
  366. $("body").animate({ scrollTop: obj.offsetTop }, 50);
  367. return 0;
  368. }
  369. return obj.offsetTop - $("body").scrollTop();
  370. }