Complex.js 95 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015
  1. ///<jscompress sourcefile="BTree.js" />
  2. Namespace.register("U.MD.UI.BTree");
  3. //json要求:
  4. //里面需要包含id,name,deep(依赖),img_url(显示图片源),child(附属目录),为一个数值,每一个值为一个json,child的格式也是一样
  5. //案例
  6. // [{ id: "1", name: "文件夹", deep: 0, img_url: 'http://api.1473.cn/Uform/Image/tree/folder.png',
  7. //child: [{ id: "2", name: "文件夹", deep: 1, img_url: "http://api.1473.cn/Uform/Image/tree/folder.png",
  8. // child: [{ id: "5", name: "文件夹", deep: 2, img_url: "http://api.1473.cn/Uform/Image/tree/folder.png"}]
  9. // },
  10. //{ id: "3", name: "文件夹", deep: 1, img_url: "http://api.1473.cn/Uform/Image/tree/folder.png" },
  11. //{ id: "4", name: "文件夹", deep: 1, img_url: "http://api.1473.cn/Uform/Image/tree/folder.png"}]
  12. //}]
  13. //var json = [{ id: "1", name: "文件夹", deep: 0, img_url: 'http://api.1473.cn/Uform/Image/tree/folder.png',
  14. // child: [{ id: "2", name: "文件夹", deep: 1, img_url: "http://api.1473.cn/Uform/Image/tree/folder.png",
  15. // child: [{ id: "5", name: "文件夹", deep: 2, img_url: "http://api.1473.cn/Uform/Image/tree/folder.png"}]
  16. // },
  17. // { id: "3", name: "文件夹", deep: 1, img_url: "http://api.1473.cn/Uform/Image/tree/folder.png" },
  18. //{ id: "4", name: "文件夹", deep: 1, img_url: "http://api.1473.cn/Uform/Image/tree/folder.png"}]
  19. //},{ id: "6", name: "文件夹", deep: 0, img_url: 'http://api.1473.cn/Uform/Image/tree/folder.png', child: [{ id: "8", name: "文件夹", deep: 6, img_url: "http://api.1473.cn/Uform/Image/tree/folder.png",
  20. // child: [{ id: "9", name: "文件夹", deep: 8, img_url: "http://api.1473.cn/Uform/Image/tree/folder.png"}]
  21. // },
  22. // { id: "10", name: "文件夹", deep: 6, img_url: "http://api.1473.cn/Uform/Image/tree/folder.png" },
  23. //{ id: "11", name: "文件夹", deep: 6, img_url: "http://api.1473.cn/Uform/Image/tree/folder.png"}]},{ id: "7", name: "文件夹", deep: 0, img_url: 'http://api.1473.cn/Uform/Image/tree/folder.png',}];
  24. /*
  25. 开始方法一,用来生成树和后台管理页面
  26. arr {arr} 要解析的json arr对象
  27. bookfun {function} 点击事件
  28. dateDeleteFun {function} date的删除方法
  29. dateUpdateFun {function} date的修改方法
  30. dateInsertFun {function} date的添加方法
  31. tree {object} 右侧要插入后台li的地方
  32. directory {object} 要插入后台li的地方
  33. list {object} 左侧放添加标签的的地方
  34. listimg {String} 后台页面的img
  35. deteimg {String} 是否启用删除标签的图片
  36. upimg {String} 是否启用修改标签的图片
  37. */
  38. U.MD.UI.BTree = function (arr, bookfun, dateDeleteFun, dateUpdateFun, dateInsertFun, tree, directory, list, listimg, deteimg, upimg) {
  39. U.MD.UI.BTree.jsonStartLeft(arr, tree[0], bookfun); //调用方法,生成树状图
  40. U.MD.UI.BTree.jsonStartRight(tree[1], bookfun, dateDeleteFun, dateUpdateFun, dateInsertFun, directory, list, listimg, deteimg, upimg); //调用方法,生成管理页面
  41. }
  42. /*
  43. 将二维数组转化为列表的方法
  44. json {arr} 数据源json里面需要包含id,name,deep(依赖),img_url(显示图片源),child(附属目录),外部是数组
  45. tree {object} 要插入列表的地方
  46. bookfun {function} 没一行的点击事件
  47. */
  48. U.MD.UI.BTree.treeCreate = function (json, tree, onclickfun) {
  49. for (var _i = 0; _i < json.length; _i++) { //创建循环,解析json数组,得到每一个json
  50. var _ul = $$("ul", { className: "U_MD_UI_Tree_a " + json[_i].parentID }, tree); //创建var对象,在tree中创建ul
  51. var _li = $$("li", { id: json[_i].id, parentid: json[_i].parentid, className: "U_MD_UI_Tree_listyle", parentid: json[_i].id, deep: json[_i].deep }, _ul); //创建var对象,在ul中创建li,id为a+jsonid
  52. var _img = $$("img", { "onerror": U.MD.C.imgError, src: json[_i].img_url, className: "U_MD_UI_Tree_imgstyle" }, _li); //创建var对象,在li中创建img
  53. var _span = $$("span", { innerHTML: json[_i].name, className: "spanstyle" }, _li); //创建var对象,在li中创建span,内容为json的name
  54. _ul.style.display = "none";
  55. if (json[_i].deep == "1") { _ul.style.display = "block" } //进行判断,判断是否为一级目录,不是的先隐藏
  56. _img.aa = false; //定义img的一个变量,用来控制列表的展开和关闭
  57. var _liobj = document.getElementsByClassName("U_MD_UI_Tree_a " + json[_i].parentID)[0]; //定义一个let对象为获取到的对应的li对象
  58. _ul.style.display = _liobj.style.display; //如果是展开状态,显示ul
  59. _li.onclick = function () {//定义li的点击事件
  60. onclickfun(this); //执行bookconlick函数,改变book对象的内容
  61. _liobj = document.getElementsByClassName("U_MD_UI_Tree_a " + this.parentid);
  62. if (_img.aa === true) { //如果img.aa等于true
  63. _img.aa = false; //修改img.aa对象为false
  64. for (var _ii = 0; _ii < _liobj.length; _ii++) { //定义循环,循环对象为获取到的li对象集合
  65. _liobj[_ii].style.display = "none"; //将集合隐藏
  66. }
  67. } else { //如果img.aa等于false
  68. _img.aa = true; //修改img.aa等于true
  69. for (var _ii = 0; _ii < _liobj.length; _ii++) { //定义循环,循环对象为获取到的li对象集合
  70. _liobj[_ii].style.display = "block"; //将集合显示
  71. }
  72. }
  73. }
  74. if (json[_i].child) {
  75. U.MD.UI.BTree.treeCreate(json[_i].child, _ul, onclickfun); //重新调用函数,参数为child的对象数组,ul对象,20的边距值,隐藏,改变的book对象
  76. }
  77. }
  78. }
  79. /*
  80. 在json中查找指定id下的child
  81. json {arr} 要查找的arr对象
  82. parentID {String} 要查找的id
  83. */
  84. U.MD.UI.BTree.JsonSelect = function (json, parentID) {
  85. var _json = []; //创建一个变量_json,来接收筛选后的json
  86. for (var _i = 0; _i < json.length; _i++) {//创建循环,循环对象为json
  87. if (parentID == 0) { //判断parentID是否为0,如果是
  88. return json; //返回json
  89. } //如果不是
  90. if (json[_i].id == parentID) {//判断json中各个对象的id是否与parentID相等,如果是
  91. _json = json[_i].child; //变量_json等于json中对应对象的child值
  92. return _json; //返回变量_json
  93. } //如果不是
  94. if (json[_i].child) { //判断json中对象是否有child值,如果有
  95. var _return = U.MD.UI.BTree.JsonSelect(json[_i].child, parentID); //定义变量_return 值为调用方法本身的返回值
  96. }
  97. }
  98. return _return; //返回_return
  99. }
  100. /*
  101. 创建查询管理目录的方法
  102. json {arr} 要解析的json arr对象
  103. tree {object} 左侧要插入后台li的地方
  104. list {object} 左侧放添加标签的的地方
  105. jsonpid {String} 添加标签的深度
  106. jsondelete {function} json的删除方法
  107. jsonupdate {function} json的修改方法
  108. jsonadd {function} json的添加方法
  109. deteurl {String} 是否启用删除标签的图片
  110. upurl {String} 是否启用修改标签的图片
  111. i {String} tree的对象值,控制下一级
  112. j {String} tree的对象值,控制上一级
  113. */
  114. U.MD.UI.BTree.DirectoryCreate = function (json, tree, list, jsonpid, jsondelete, jsonupdate, jsonadd, deteurl, upurl, i, j) {
  115. if (i == 0) { //判断是否载入第一层,如果是
  116. list[1].style.display = "none"; //隐藏二级目录
  117. list[2].style.display = "none"; //隐藏三级目录
  118. } else { //如果不是载入第一层目录
  119. list[2].style.display = "none"; //将三级目录隐藏
  120. list[i].style.display = "block"; //显示对应级目录
  121. }
  122. var _buttonText = "修改"; //定义变量_buttonText,代表修改按钮的默认值
  123. var _button1Text = "删除"; //定义变量_button1Text,代表删除按钮的默认值
  124. if (deteurl && upurl) { //进行判断,是否提供默认按钮,如果不是
  125. _buttonText = ""; //消除_buttonText
  126. _button1Text = ""; //消除_button1Text
  127. }
  128. tree[i].innerHTML = ""; //将tree中的内容清空
  129. list[i].parentID = jsonpid; //给list定义一个变量
  130. list[i].deep = i + 1; //给list定义深度变量
  131. if (j) { //判断是否有输入上一级
  132. tree[j].innerHTML = ""; //如果有,清空上一级
  133. }
  134. if (json) { //如果json存在
  135. for (var _i = 0; _i < json.length; _i++) { //创建循环,循环对象为json
  136. var _ul = $$("ul", { className: "U_MD_UI_Tree_styleul", parentid: json[_i].parentID, deep: json[_i].deep }, tree[i]); //创建在tree中创建ul
  137. var _li = $$("li", { className: "U_MD_UI_Tree_styleli", innerHTML: json[_i].name, parentid: json[_i].id }, _ul); //创建li在tree的下一级中,css为styleli
  138. var _button = $$("input", { type: "button", pid: json[_i].id, parentid: json[_i].parentID, innerHTML: _buttonText, className: "U_MD_UI_Tree_button" }, _ul); //创建修改button在在li中,css为stylebutton
  139. var _button1 = $$("input", { type: "button", pid: json[_i].id, parentid: json[_i].parentID, innerHTML: _button1Text, className: "U_MD_UI_Tree_button1" }, _ul); //创建删除button在在li中,css为stylebutton
  140. //创建删除button在在li中,css为stylebutton
  141. _button.onclick = function () { //给修改按钮定义onclick事件
  142. jsonupdate(this, tree, list, jsonpid, jsondelete, jsonupdate, jsonadd, deteurl, upurl, i); //事件为调用jsonupdate方法,输入this为变量
  143. }
  144. _button1.onclick = function () { //给删除按钮定义oncick事件
  145. jsondelete(this, tree, list, jsonpid, jsondelete, jsonupdate, jsonadd, deteurl, upurl, i); //事件为调用jsondelete方法,输入this为变量
  146. }
  147. _li.onclick = function () { //给li定义onclick事件
  148. if (j) { //判断j是否存在,如果存在
  149. U.MD.UI.BTree.DirectoryCreate(U.MD.UI.BTree.JsonSelect(json, this.parentid), tree, list, this.parentid, jsondelete, jsonupdate, jsonadd, deteurl, upurl, j); //调用方法,创建下一级的下一级目录
  150. } else { //如果不存在
  151. if (i == 2) { //判断是否到三级目录
  152. } else { //如果还没到
  153. U.MD.UI.BTree.DirectoryCreate(U.MD.UI.BTree.JsonSelect(json, this.parentid), tree, list, this.parentid, jsondelete, jsonupdate, jsonadd, deteurl, upurl, 1, 2); //调用方法,创建下一级的下一级目录
  154. }
  155. }
  156. }
  157. }
  158. }
  159. var add = U.selectEl(".U_MD_UI_Tree_add");
  160. if (add[i]) { //进行判断,当添加标签已存在时
  161. list[i].removeChild(add[i]); //销毁添加标签
  162. }
  163. var _div = $$("div", { className: "U_MD_UI_Tree_add", innerHTML: "添加新分类" }, list[i]); //创建添加标签
  164. _div.onclick = function () { //设置添加标签的点击事件
  165. jsonadd(this, tree, list, jsonpid, jsondelete, jsonupdate, jsonadd, deteurl, upurl, i); //调用添加方法,进行添加
  166. }
  167. }
  168. /*
  169. 在json中插入json的方法
  170. json {arr} 要被插入的json对象
  171. addjson {json} 要查入的json对象
  172. */
  173. U.MD.UI.BTree.jsonAdd = function (json, addjson) {
  174. var _addid = addjson.parentID; //定义要目的地id,等于插入json的parentID值
  175. if (_addid == "0") { //进行判断,判断目的地id是否在第一层(0)
  176. json[json.length] = addjson; //如果在,直接在json的第一层中加入要插入的json
  177. return json; //结束方法,返回json对象
  178. }
  179. for (var _i = 0; _i < json.length; _i++) { //创建循环,解析json数组,得到每一个json
  180. if (json[_i].id == _addid) { //进行判断,判断json的id是否等于获取到的目的地id,如果是
  181. if (json[_i].child) { //进行判断,判断json的child有没有值
  182. json[_i].child[json[_i].child.length] = addjson; //如果有,就在其中添加插入对象
  183. return json; //结束方法,返回json对象
  184. } else {//如果json中没有child
  185. json[_i].child = [];
  186. json[_i].child[json[_i].child.length] = addjson; //将json的child等于插入的对象
  187. return json; //结束方法,返回json对象
  188. }
  189. }
  190. if (json[_i].child) { //如果json的id不与目的地id相等且json中存在child
  191. var _return = U.MD.UI.BTree.jsonAdd(json[_i].child, addjson); //定义函数,调用自己,变量为json的child,要插入的json
  192. json[_i].child = _return; //json的child等于返回的json
  193. }
  194. }
  195. return json; //返回json对象
  196. }
  197. /*
  198. 开始方法二,生成后台管理页面
  199. arr {arr} 要解析的json arr对象
  200. bookfun {function} 点击事件
  201. jsonDeleteFun {function} json的删除方法
  202. jsonUpdateFun {function} json的修改方法
  203. jsonInsertFun {function} json的添加方法
  204. tree {object} 右侧要插入后台li的地方
  205. directory {object} 要插入后台li的地方
  206. mulu {object} 左侧放添加标签的的地方
  207. muluimg {String} 后台页面的img
  208. deteimg {String} 是否启用删除标签的图片
  209. upimg {String} 是否启用修改标签的图片
  210. */
  211. U.MD.UI.BTree.jsonStartA = function (arr, bookfun, jsonDeleteFun, jsonUpdateFun, jsonInsertFun, tree, directory, mulu, muluimg, deteimg, upimg) {
  212. json = []; //将外变量josn清空
  213. var _json = arr; //定义局部变量_json,值为r
  214. for (var _i = 0; _i < _json.length; _i++) { //定义循环,循环对象为
  215. U.MD.UI.BTree.jsonAdd(json, _json[_i]); //运行函数,生成json
  216. }
  217. tree.innerHTML = ""; //清空tree的内容
  218. U.MD.UI.BTree.jsonStartRight(tree, bookfun, jsonDeleteFun, jsonUpdateFun, jsonInsertFun, directory, mulu, muluimg, deteimg, upimg); //调用方法,生成管理页面
  219. }
  220. /*
  221. 生成后台管理页面及管理页面li
  222. tree {object} 右侧要插入后台li的地方
  223. bookfun {function} 点击事件
  224. jsonDeleteFun {function} json的删除方法
  225. jsonUpdateFun {function} json的修改方法
  226. jsonInsertFun {function} json的添加方法
  227. directory {object} 要插入后台li的地方
  228. mulu {object} 左侧放添加标签的的地方
  229. muluimg {String} 后台页面的img
  230. deteimg {String} 是否启用删除标签的图片
  231. upimg {String} 是否启用修改标签的图片
  232. */
  233. U.MD.UI.BTree.jsonStartRight = function (tree, bookfun, jsonDeleteFun, jsonUpdateFun, jsonInsertFun, directory, mulu, muluimg, deteimg, upimg) {
  234. var _ul = $$("ul", { className: "U_MD_UI_Tree_a " }, tree); //创建对象,在tree中创建ul
  235. var _li = $$("li", { className: "U_MD_UI_Tree_listyle", yid: "1" }, _ul); //创建对象,在ul中创建li,id为a+jsonid
  236. var _img = $$("img", { "onerror": U.MD.C.imgError, src: muluimg, className: "U_MD_UI_Tree_imgstyle" }, _li); //创建对象,在li中创建img
  237. var _span = $$("span", { innerHTML: "目录管理", className: "U_MD_UI_Tree_spanstyle" }, _li); //创建对象 在li中创建span
  238. _li.onclick = function () { //设置li的点击事件
  239. bookfun(this); //先执行点击事件
  240. U.MD.UI.BTree.DirectoryCreate(json, directory, mulu, 0, //运行方法,生成后台页面
  241. function (objects, tree, mulu, jsonpid, jsondelete, jsonupdate, jsonadd, deteurl, upurl, i) {
  242. var _ret = jsonDeleteFun(objects.pid); //运行删除方法
  243. if (_ret) {//如果返回了方法
  244. json = U.MD.UI.BTree.jsonDelete(json, objects.pid); //运行方法,修改json
  245. var _id = U.selectEl("#" + objects.pid)[0]; //获取修改对象
  246. if (_id) { _id.parentNode.remove(); } //如果有对象,修删除
  247. if (i == 1) {
  248. U.MD.UI.BTree.DirectoryCreate(U.MD.UI.BTree.JsonSelect(json, objects.parentid), tree, mulu, jsonpid, jsondelete, jsonupdate, jsonadd, deteurl, upurl, 1, 2);
  249. } //刷新二级页面
  250. if (i == 2) {
  251. U.MD.UI.BTree.DirectoryCreate(U.MD.UI.BTree.JsonSelect(json, objects.parentid), tree, mulu, jsonpid, jsondelete, jsonupdate, jsonadd, deteurl, upurl, 2);
  252. } //刷新三级页面
  253. if (i == 0) {
  254. U.MD.UI.BTree.DirectoryCreate(json, tree, mulu, jsonpid, jsondelete, jsonupdate, jsonadd, deteurl, upurl, 0);
  255. } //修改一级页面
  256. }
  257. },
  258. function (objects, tree, mulu, jsonpid, jsondelete, jsonupdate, jsonadd, deteurl, upurl, i) {
  259. var _ret = jsonUpdateFun(U.MD.UI.BTree.jsonSelectA(json, objects.pid)); //运行修改方法
  260. json = U.MD.UI.BTree.jsonUpdate(json, _ret); //运行方法,修改json
  261. var _id = U.selectEl("#" + objects.pid)[0]; //获取修改对象
  262. if (_id) {
  263. _id.childNodes[0].src = _ret.img_url; //修改对象
  264. _id.childNodes[1].innerHTML = _ret.name; //修改对象
  265. }
  266. if (i == 1) {
  267. U.MD.UI.BTree.DirectoryCreate(U.MD.UI.BTree.JsonSelect(json, objects.parentid), tree, mulu, jsonpid, jsondelete, jsonupdate, jsonadd, deteurl, upurl, 1, 2);
  268. } //刷新二级页面
  269. if (i == 2) {
  270. U.MD.UI.BTree.DirectoryCreate(U.MD.UI.BTree.JsonSelect(json, objects.parentid), tree, mulu, jsonpid, jsondelete, jsonupdate, jsonadd, deteurl, upurl, 2);
  271. } //刷新三级页面
  272. if (i == 0) {
  273. U.MD.UI.BTree.DirectoryCreate(json, tree, mulu, jsonpid, jsondelete, jsonupdate, jsonadd, deteurl, upurl, 0);
  274. } //修改一级页面
  275. },
  276. function (objects, tree, mulu, jsonpid, jsondelete, jsonupdate, jsonadd, deteurl, upurl, i) {
  277. var _json = {}; //定义变量
  278. _json.parentID = objects.parentNode.parentID; //获取添加的parentid
  279. _json.deep = objects.parentNode.deep; //获取添加的deep
  280. var _ret = jsonInsertFun(_json); //运行添加方法
  281. var _post; //定义局部对象
  282. if (_ret) {//如果有返回值
  283. _post = U.selectEl(".U_MD_UI_Tree_a")[1];
  284. if (_post) {//判断前台树是否存在
  285. if (_ret.parentID == 0) {//如果要插入的是一级目录
  286. _post = U.selectEl(".U_MD_UI_Tree_a")[0].parentNode; //获取一级对象
  287. } else {
  288. _post = U.selectEl("#" + _ret.parentID)[0].parentNode; //获取对应对象
  289. }
  290. _js = []; //定义局部对象
  291. _js[0] = _ret; //给对象定值
  292. U.MD.UI.BTree.treeCreate(_js, _post, bookfun); //创建li
  293. }
  294. json = U.MD.UI.BTree.jsonAdd(json, _ret); //刷新json
  295. if (i == 1) {
  296. U.MD.UI.BTree.DirectoryCreate(U.MD.UI.BTree.JsonSelect(json, _json.parentID), tree, mulu, jsonpid, jsondelete, jsonupdate, jsonadd, deteurl, upurl, 1, 2);
  297. } //刷新二级页面
  298. if (i == 2) {
  299. U.MD.UI.BTree.DirectoryCreate(U.MD.UI.BTree.JsonSelect(json, _json.parentID), tree, mulu, jsonpid, jsondelete, jsonupdate, jsonadd, deteurl, upurl, 2);
  300. } //刷新三级页面
  301. if (i == 0) {
  302. U.MD.UI.BTree.DirectoryCreate(json, tree, mulu, jsonpid, jsondelete, jsonupdate, jsonadd, deteurl, upurl, 0);
  303. } //修改一级页面
  304. }
  305. }, deteimg, upimg, 0); //调用方法,生成一级目录
  306. }
  307. }
  308. /*
  309. 生成左边树状图的方法
  310. arr {arr} 要处理的arrjson对象
  311. tree {object} 要插入树状图的地方
  312. bookfun {function} 点击事件
  313. */
  314. U.MD.UI.BTree.jsonStartLeft = function (arr, tree, bookfun) {
  315. json = []; //将外变量josn清空
  316. var _json = arr; //定义局部变量_json,值为r
  317. for (var _i = 0; _i < _json.length; _i++) { //定义循环,循环对象为
  318. U.MD.UI.BTree.jsonAdd(json, _json[_i]); //运行函数,生成json
  319. }
  320. tree.innerHTML = ""; //清空tree的内容
  321. U.MD.UI.BTree.treeCreate(json, tree, bookfun); //运行方法,在tree中生成树状图
  322. }
  323. /*
  324. json的删除方法
  325. json {arr} 要处理的arrjson对象
  326. pid {String} 要删除的id
  327. */
  328. U.MD.UI.BTree.jsonDelete = function (json, pid) {
  329. for (var _i = 0; _i < json.length; _i++) {//定义循环,循环对象为json
  330. if (json[_i].id == pid) {//进行判断,判断json[_i]是否为目标pid
  331. json.splice(_i, 1); //删除
  332. return json; //返回json
  333. } else {
  334. if (json[_i].child) {//如果有child
  335. json[_i].child = U.MD.UI.BTree.jsonDelete(json[_i].child, pid); //重复调用方法
  336. }
  337. }
  338. }
  339. return json; //返回json
  340. }
  341. /*
  342. json的搜索方法
  343. json {arr} 要处理的arrjson对象
  344. id {String} 要删除的id
  345. */
  346. U.MD.UI.BTree.jsonSelectA = function (json, id) {
  347. for (var _i = 0; _i < json.length; _i++) {//定义循环,循环对象为json
  348. if (json[_i].id == id) {//进行判断,判断json[_i]是否为目标pid
  349. return json[_i]; //返回目标
  350. }
  351. if (json[_i].child) {//如果有child
  352. var _return = U.MD.UI.BTree.jsonSelectA(json[_i].child, id); //重复调用方法
  353. if (_return) {//当返回有值
  354. return _return; //返回结果
  355. }
  356. }
  357. }
  358. return false;
  359. }
  360. /*
  361. json的修改方法
  362. json {arr} 要处理的arrjson对象
  363. upjson {json}要插入的json
  364. */
  365. U.MD.UI.BTree.jsonUpdate = function (json, upjson) {
  366. for (var _i = 0; _i < json.length; _i++) {//定义循环,循环对象为json
  367. if (json[_i].id == upjson.id) {//进行判断,判断json[_i]是否为目标pid
  368. json[_i] = upjson; //进行替换
  369. return json; //返回json
  370. }
  371. if (json[_i].child) {//如果有child
  372. var _return = U.MD.UI.BTree.jsonUpdate(json[_i].child, upjson); //重复调用方法
  373. if (_return) {//当返回有值
  374. json[_i].child = _return;
  375. return json; //返回结果
  376. }
  377. }
  378. }
  379. return false;
  380. }
  381. /*
  382. 搜索arr中最高的id方法
  383. arr {arr} 要搜索的arr对象
  384. */
  385. U.MD.UI.BTree.createID = function (arr) {
  386. var _return = 0; //定义变量
  387. for (var _i = 0; _i < arr.length; _i++) {//定义循环,循环对象为arr
  388. if (parseInt(arr[_i].id) > _return) {//进行判断,如果arr的id比_return大
  389. _return = parseInt(arr[_i].id); //修改_return的值
  390. }
  391. }
  392. return _return; //返回变量
  393. };
  394. ///<jscompress sourcefile="Editor.js" />
  395. //编辑器
  396. Namespace.register("U.MD.UI.editor");
  397. /* 默认编辑器,嵌入到指定元素内
  398. * @param parent {element} 创建在指定的父亲元素
  399. * @param callback {function} 非必传 操作处理函数
  400. * 操作处理函数 该函数默认第一个参数为操作记录。
  401. * 格式形如 : { updateLine : [修改行ID, 修改行ID,], addLine : [添加行ID], deleteLine : [删除行ID] }
  402. * */
  403. U.MD.UI.Editor = U.MD.UI.editor = function (parent, callback) {
  404. U.UF.DL.asynLoadCss({ "rel": "stylesheet", "type": "text/css", "href": "/css/Controls/Complex/Editor.css" });
  405. // parent.innerHTML = ''; //清空区域内容
  406. //!$(parent).find($('.editorBar'))[0] ? "" : U.selectEl('.editorBar').remove();
  407. //_div = $$("div", { "className": "editorBar" }, parent);
  408. //创建div
  409. U.MD.UI.editor.createEditor(parent);
  410. //创建编辑区域
  411. U.UF.E.initEditor($('.editor', parent)[0], callback);
  412. //初始化编辑区域
  413. U.MD.UI.editor.EditorEventBind(parent);
  414. //绑定事件
  415. U.MD.UI.editor.operateJson.editor = U.selectEl('.editor', parent)[0];
  416. //把编辑区域赋值给editor
  417. return U.MD.UI.editor.operateJson;
  418. //返回可操作集合
  419. }
  420. U.MD.UI.editor.operateJson = {
  421. /*
  422. * U.MD.UI.editor.loadContent 加载编辑器内容
  423. * param1 text(str) 需要加载的文本内容
  424. * */
  425. loadContent: function (text) {
  426. this.editor.focus();
  427. U.UF.E.onpaste(null, this.editor, text);
  428. // var _div = $$("div", { innerHTML: text, style: { display: "none"} }, document.body);
  429. // var _pdiv = U.UF.E.unifiedFormat(_div);
  430. // var _range = U.UF.E.getRangeAt();
  431. // var _block = U.UF.E.getLineElement(_range.startContainer);
  432. // for (var i = 0; i < _pdiv.children.length; i++) {
  433. // _block.parentElement.appendChild(_pdiv.children[i]);
  434. // }
  435. // U.selectEl(_block).remove();
  436. // U.selectEl(_div).remove();
  437. },
  438. /*
  439. * U.MD.UI.editor.getContent 得到编辑器内容
  440. * */
  441. getContent: function () {
  442. return this.editor.innerHTML;
  443. //直接返回编辑区域的内容
  444. }
  445. };
  446. /*
  447. U.MD.UI.editor.CreateEditor 创建HTML内容
  448. param1 parent(elemt)父元素
  449. */
  450. U.MD.UI.editor.createEditor = function (parent) {
  451. parent.innerHTML =
  452. "<div class='toolbar' style=\"width: 788px;background-color: #f5f5f5;border: 1px solid #c7d3e1;line-height: 0;padding: 6px;height: 25px;\">\n" +
  453. " <button class=\"last\" style=\"float: left;margin: 0 3px;position: relative;outline: none;cursor: pointer;border: 1px solid transparent;height: 25px;width: 25px;background: url('/EditorImage/left.png') no-repeat center;\">\n" +
  454. " </button>\n" +
  455. " <button class=\"future\" style=\"float: left;margin: 0 3px;position: relative;outline: none;cursor: pointer;border: 1px solid transparent;height: 25px;width: 25px;background: url('/EditorImage/right.png') no-repeat center;\">\n" +
  456. " </button>\n" +
  457. " <i style=\"display: inline-block;width: 1px;height: 22px;background-color: #bcbcbc;float: left;margin: 0 3px;position: relative;\">\n" +
  458. "\n" +
  459. " </i>\n" +
  460. "<div class='setFont' style='float: left;margin: 0 3px;position: relative;padding:0px'></div>" +
  461. " <i style=\"display: inline-block;width: 1px;height: 22px;background-color: #bcbcbc;float: left;margin: 0 3px;position: relative;\">\n" +
  462. "\n" +
  463. " </i>\n" +
  464. "<div class='setSize' style='float: left;margin: 0 3px;position: relative;padding:0px'></div>" +
  465. " <i style=\"display: inline-block;width: 1px;height: 22px;background-color: #bcbcbc;float: left;margin: 0 3px;position: relative;\">\n" +
  466. "\n" +
  467. " </i>\n" +
  468. " <label style=\"float: left;margin: 0 3px;position: relative;\">\n" +
  469. " <button class=\"pic\" style=\"outline: none;cursor: pointer;border: 1px solid transparent;height: 25px;width: 25px;background: url('/EditorImage/pic.png') no-repeat center;\">\n" +
  470. " </button>\n" +
  471. " <input multiple accept='image/*' type='file' class='picUpload' style='display: none;' />\n" + //onchange='U.UF.E.picture(this)'
  472. " </label>\n" +
  473. " <label style=\"float: left;margin: 0 3px;position: relative;\">\n" +
  474. " <button class=\"attachment\" style=\"outline: none;cursor: pointer;border: 1px solid transparent;width: 25px;height: 25px;background: url(/img/YS2017.png) no-repeat;background-position: -1054px -593.5px;\"></button>\n" +
  475. " <input multiple=\"\" type=\"file\" class=\"attachmentUpload\" style=\"display: none;\">\n" + //accept=\"image/*\"
  476. " </label>\n" +
  477. " <i style=\"display: inline-block;width: 1px;height: 22px;background-color: #bcbcbc;float: left;margin: 0 3px;position: relative;\">\n" +
  478. "\n" +
  479. " </i>\n" +
  480. " <div style=\"float: left;margin: 0 3px;position: relative;padding:0px\">\n" +
  481. " <button class=\"fontColor\" style=\"outline: none;cursor: pointer;border: 1px solid transparent;height: 25px;width: 25px;background: url('/EditorImage/fontColor.png') no-repeat center;\">\n" +
  482. " </button>\n" +
  483. " <div class='fontColorBar colorBar' style='display:none;position: absolute;'>\n" +
  484. " </div>\n" +
  485. " </div>\n" +
  486. " <i style=\"display: inline-block;width: 1px;height: 22px;background-color: #bcbcbc;float: left;margin: 0 3px;position: relative;\">\n" +
  487. "\n" +
  488. " </i>\n" +
  489. " <div style=\"float: left;margin: 0 3px;position: relative;padding:0px\">\n" +
  490. " <button class=\"backgroundColor\" style=\"outline: none;cursor: pointer;border: 1px solid transparent;height: 25px;width: 25px;background: url('/EditorImage/blockColor.png') no-repeat center;\">\n" +
  491. " </button>\n" +
  492. " <div class='backgroundColorBar colorBar' style='display:none;position: absolute;'>\n" +
  493. " </div>\n" +
  494. " </div>\n" +
  495. " <i style=\"display: inline-block;width: 1px;height: 22px;background-color: #bcbcbc;float: left;margin: 0 3px;position: relative;\">\n" +
  496. "\n" +
  497. " </i>\n" +
  498. " <button class=\"bIcon\" style=\"float: left;margin: 0 3px;position: relative;outline: none;cursor: pointer;border: 1px solid transparent;height: 25px;width: 25px;background: url('/EditorImage/strong.png') no-repeat center;\">\n" +
  499. " </button>\n" +
  500. " <button class=\"iIcon\" style=\"float: left;margin: 0 3px;position: relative;outline: none;cursor: pointer;border: 1px solid transparent;height: 25px;width: 25px;background: url('/EditorImage/i.png') no-repeat center;\">\n" +
  501. " </button>\n" +
  502. " <button class=\"UIcon\" style=\"float: left;margin: 0 3px;position: relative;outline: none;cursor: pointer;border: 1px solid transparent;height: 25px;width: 25px;background: url('/EditorImage/x.png') no-repeat center;\">\n" +
  503. " </button>\n" +
  504. " <button class=\"SIcon\" style=\"float: left;margin: 0 3px;position: relative;outline: none;cursor: pointer;border: 1px solid transparent;height: 25px;width: 25px;background: url('/EditorImage/-S-.png') no-repeat center;\">\n" +
  505. " </button>\n" +
  506. " <i style=\"display: inline-block;width: 1px;height: 22px;background-color: #bcbcbc;float: left;margin: 0 3px;position: relative;\">\n" +
  507. "\n" +
  508. " </i>\n" +
  509. " <button class=\"textLeft\" style=\"float: left;margin: 0 3px;position: relative;outline: none;cursor: pointer;border: 1px solid transparent;height: 25px;width: 25px;background: url('/EditorImage/textLeft.png') no-repeat center;\">\n" +
  510. " </button>\n" +
  511. " <button class=\"textCenter\" style=\"float: left;margin: 0 3px;position: relative;outline: none;cursor: pointer;border: 1px solid transparent;height: 25px;width: 25px;background: url('/EditorImage/textCenter.png') no-repeat center;\">\n" +
  512. " </button>\n" +
  513. " <button class=\"textRight\" style=\"float: left;margin: 0 3px;position: relative;outline: none;cursor: pointer;border: 1px solid transparent;height: 25px;width: 25px;background: url('/EditorImage/textRight.png') no-repeat center;\">\n" +
  514. " </button>\n" +
  515. " <i style=\"display: inline-block;width: 1px;height: 22px;background-color: #bcbcbc;float: left;margin: 0 3px;position: relative;\" >\n" +
  516. "\n" +
  517. " </i>\n" +
  518. " <button class=\"a\" style=\"float: left;margin: 0 3px;position: relative;outline: none;cursor: pointer;border: 1px solid transparent;height: 25px;width: 25px;background: url('/EditorImage/a.png') no-repeat center;\">\n" +
  519. " </button>\n" +
  520. " <button class=\"b\" style=\"float: left;margin: 0 3px;position: relative;outline: none;cursor: pointer;border: 1px solid transparent;height: 25px;width: 25px;background: url('/EditorImage/b.png') no-repeat center;\">\n" +
  521. " </button>\n" +
  522. " <button class=\"c\" style=\"float: left;margin: 0 3px;position: relative;outline: none;cursor: pointer;border: 1px solid transparent;height: 25px;width: 25px;background: url('/EditorImage/c.png') no-repeat center;\">\n" +
  523. " </button>\n" +
  524. " </div>\n" +
  525. " <div class=\"editor\" contenteditable=\"true\" style=\"width: 800px;min-height: 300px;border: 1px solid #E6E5E5;overflow: auto;\">\n" +
  526. " </div>";
  527. U.selectEl('input.picUpload[type="file"]', parent)[0].onchange = function () {
  528. U.UF.E.picture(this, U.selectEl('.editor', parent)[0])
  529. }
  530. U.selectEl('input.attachmentUpload[type="file"]', parent)[0].onchange = function () {
  531. U.UF.E.attachment(this, U.selectEl('.editor', parent)[0])
  532. }
  533. };
  534. /*
  535. U.MD.UI.editor.EditorEventBind 创建绑定事件
  536. param1 parent(elemt) 范围
  537. */
  538. U.MD.UI.editor.EditorEventBind = function (parent) {
  539. //绑定图片拉伸
  540. // U.UF.E.key($('.editor', parent));
  541. //绑定键盘事件
  542. var _font = U.MD.UI.Font();
  543. //生成字体下拉框
  544. _font.style.cssText += "vertical-align: super;";
  545. var _size = U.MD.UI.WordSize();
  546. //生成字体大小下拉框
  547. _size.style.cssText += "vertical-align: super;";
  548. U.selectEl('.setFont', parent).append(_font);
  549. _font.onchange = function () {
  550. U.UF.E.setRangeStyle({ 'font-family': _font.value });
  551. };
  552. //设置字体样式
  553. U.selectEl('.setSize', parent).append(_size);
  554. _size.onchange = function () {
  555. U.UF.E.setRangeStyle({ 'font-size': _size.value });
  556. };
  557. //设置图片上传点击
  558. U.selectEl('.pic', parent)[0].onclick = function () {
  559. U.selectEl('.picUpload', parent)[0].click();
  560. };
  561. //设置附件上传点击
  562. U.selectEl('.attachment', parent)[0].onclick = function () {
  563. U.selectEl('.attachmentUpload', parent)[0].click();
  564. };
  565. //图片点击
  566. U.selectEl('.bIcon', parent)[0].onclick = function () {
  567. U.UF.E.setRangeStyle({ 'font-weight': 'bold' });
  568. };
  569. //加粗
  570. U.selectEl('.iIcon', parent)[0].onclick = function () {
  571. U.UF.E.setRangeStyle({ 'font-style': 'italic' });
  572. };
  573. //斜体
  574. U.selectEl('.UIcon', parent)[0].onclick = function () {
  575. U.UF.E.setRangeStyle({ 'text-decoration': 'underline' });
  576. };
  577. //下划线
  578. U.selectEl('.SIcon', parent)[0].onclick = function () {
  579. U.UF.E.setRangeStyle({ 'text-decoration': 'line-through' });
  580. };
  581. //删除线
  582. U.selectEl('.fontColor', parent).bind('click', function () {
  583. //修改字体颜色
  584. if ($('.fontColorBar', parent).css('display') == "none") {
  585. U.MD.UI.colorPicker($('.fontColorBar', parent)[0], function (r) {
  586. U.selectEl('.MD_ColorPicker', U.selectEl('.fontColorBar', parent)[0]).remove();
  587. U.selectEl('.fontColorBar', parent).hide();
  588. U.UF.E.setRangeStyle({ 'color': r });
  589. });
  590. U.selectEl('.fontColorBar', parent).show();
  591. }
  592. });
  593. U.selectEl('.backgroundColor', parent).bind('click', function () {
  594. //修改背景颜色
  595. if ($('.backgroundColorBar', parent).css('display') == "none") {
  596. U.MD.UI.colorPicker($('.backgroundColorBar', parent)[0], function (r) {
  597. U.selectEl('.MD_ColorPicker', U.selectEl('.backgroundColorBar', parent)[0]).remove();
  598. U.selectEl('.backgroundColorBar', parent).hide();
  599. U.UF.E.setRangeStyle({ 'backgroundColor': r });
  600. });
  601. U.selectEl('.backgroundColorBar', parent).show();
  602. }
  603. });
  604. // U.selectEl('.upload', parent)[0].onchange = function () {
  605. // U.UF.E.picture(this);
  606. //// 上传图片
  607. // var _this = this;
  608. // U.UF.UP.inputUpload([_this], 'http://disk.1473.cn/USUpfile.ashx?typename=UseStudioEditor&UserId=FA92AAC5-4134-449F-9659-0DC12F4F68E9', function (r) {
  609. // var img = '<img style="max-width: 80%;" src="http://fs.1473.cn/' + r.value[0] + '">';
  610. // U.UF.E.addRange(img);
  611. // _this.value = '';
  612. // });
  613. // }
  614. /*$('.editor', parent)[0].onpaste = function (e) {
  615. //绑定粘贴
  616. var _text = e.clipboardData.getData('text/html') || event.clipboardData.getData("text/plain");
  617. var _div = $$("div", { innerHTML: _text, style: { display: "none"} }, document.body);
  618. U.UF.E.unifiedFormat(_div);
  619. document.body.removeChild(_div);
  620. };*/
  621. U.selectEl('.a', parent).bind('click', function () {
  622. U.UF.E.addHref();
  623. });
  624. //添加a标签
  625. U.selectEl('.c', parent).bind('click', function () {
  626. U.UF.E.clearStyle(U.UF.E.getRangeAt());
  627. });
  628. //清除格式
  629. U.selectEl('.textLeft', parent).bind('click', function () {
  630. U.UF.E.setLineStyle({ 'text-align': 'left' });
  631. });
  632. //居左
  633. U.selectEl('.textCenter', parent).bind('click', function () {
  634. U.UF.E.setLineStyle({ 'text-align': 'center' });
  635. });
  636. //居中
  637. U.selectEl('.textRight', parent).bind('click', function () {
  638. U.UF.E.setLineStyle({ 'text-align': 'right' });
  639. });
  640. //居右
  641. };
  642. /**
  643. * 下拉框
  644. * @param choosecon 【object】必选 若需要value值使用集合({'11111111':'aaaaaaaa','2222222':'bbbbbbbb','33333333':'cccccccc'})键名为value值
  645. * @param selattr 【object】必选 设置最外层div的属性值
  646. * @param optionevent 【function】必选 给每个选择区域的点击后回调函数,参数一:value值或者文本值
  647. * @param parentnode 【element】可选 添加到里面的元素
  648. * @returns {*} 【element】 返回出创建好的下拉控件
  649. * @constructor
  650. */
  651. U.MD.UI.editor.Select = function (choosecon, selattr, optionevent, parentnode) {
  652. var _id = "";
  653. selattr.id && (_id = selattr.id) && (delete selattr.id);
  654. var _selectEl = $$('div', { id: _id }, parentnode || null), //创建最外层
  655. _value = $$('div', selattr, _selectEl),
  656. _textarea = $$('div', {}, _value); //创建最第二层
  657. $$('div', { style: { cssText: 'border-width: 6px 4px; border-style: solid; border-color: rgb(166, 178, 192) transparent transparent; width: 0; position: absolute; right: 4px; top: 50%; margin-top: -3px'} }, _value); //小三角
  658. //_text = $$('div', { style: { cssText: "padding-left: 6px; overflow: hidden; height:100%;cursor: pointer;"} }, _textarea), //创建显示文本内容div
  659. var _con = $$('div', {
  660. datacontent: '',
  661. style: { cssText: 'display: none;position: absolute; margin-top:-1px; min-width: 100%; max-width: 280px; max-height: 200px ;border: 1px solid silver; overflow-x: hidden; cursor: pointer;' }
  662. }, _selectEl), //创建选择区域
  663. _range;
  664. /*默认属性*/
  665. // !selattr.style.border ? _selectEl.style.border = '1px solid #000' : '';
  666. // !selattr.style.background ? _selectEl.style.background = '#fff' : '';
  667. // !selattr.style.width ? _selectEl.style.width = "122px" : '';
  668. // !selattr.style.height ? _selectEl.style.height = '24px' : '';
  669. (selattr.style && !selattr.style.position) ? _selectEl.style.position = 'relative' : '';
  670. (selattr.style && !selattr.style.textIndent) ? _textarea.style.textIndent = '6px' : '';
  671. // !selattr.style.overflow ? _selectEl.style.overflow = 'hidden' : '';
  672. _textarea.style.whiteSpace = 'pre';
  673. _textarea.style.overflow = 'hidden'
  674. _textarea.style.width = _selectEl.offsetWidth - 15 + "px";
  675. for (var i in choosecon) { //循环集合
  676. $$('div', {
  677. value: i, innerText: choosecon[i], //创建选择内容
  678. style: { cssText: 'padding: 4px 6px; background: #fff' },
  679. onmouseover: function () { /*绑定光标移入事件*/
  680. this.style.background = '#ccc'
  681. },
  682. onmouseout: function () { /*绑定光标移除事件*/
  683. this.style.background = '#fff'
  684. }, onclick: function () { /*绑定点击事件*/
  685. _textarea.innerText = this.innerText; /*改变问题*/
  686. U.UF.E.reSelectRange(_range) /*重新聚焦光标*/
  687. optionevent(this.value || this.innerText); /*回调*/
  688. }
  689. }, _con);
  690. }
  691. for (var i in choosecon) {// 第一个及默认值
  692. _textarea.innerText = choosecon[i];
  693. break;
  694. }
  695. _textarea.style.lineHeight = parseInt(_textarea.style.height) + 'px'; //使显示文本居中
  696. _selectEl.onclick = function () { //绑定点击事件
  697. var _el = this.querySelector('div[datacontent]');
  698. U.UF.E.reSelectRange(_range) /*重新聚焦光标*/
  699. _el.style.display === 'block' ? _el.style.display = 'none' : _el.style.display = 'block'; /*显示隐藏*/
  700. };
  701. U.selectEl(document).bind('click', function () { /*绑定事件*/
  702. if (_con.style.display != 'none')
  703. _con.style.display = 'none'
  704. if ($(".BD_BorderPicker")[0]) {
  705. if ($(".BD_BorderPicker")[0].style.display != 'none')
  706. U.selectEl(".BD_BorderPicker")[0].style.display = 'none'
  707. }
  708. }, false);
  709. U.selectEl(_selectEl).bind('click', function (e) { /*绑定事件*/
  710. U.UF.EV.stopBubble(e);
  711. //阻止事件冒泡
  712. });
  713. _selectEl.onmousedown = function () { /*绑定事件*/
  714. _range = U.UF.E.getRangeAt() /*获取光标位置*/
  715. }
  716. return _selectEl; //返回创建元素
  717. };
  718. ;
  719. ///<jscompress sourcefile="Excel.js" />
  720. //excel控件
  721. Namespace.register("U.MD.UI.excel");;
  722. ///<jscompress sourcefile="Reply.js" />
  723. Namespace.register("U.MD.R");
  724. /**
  725. * 评论控件全局变量
  726. * PID // 项目id,请查看api文档说明,找到你所在项目的id。
  727. * AID // 对应的文章id,获取url网址的主机,加上url网址的目录,形成的文章id。
  728. * URL // 文章对应的url地址。
  729. * PageIndex // 当前页数
  730. * PageSize // 一页请求数
  731. * AllCount // 此文章对应的有多少数据
  732. * */
  733. U.MD.R.data = {
  734. PID: "",
  735. AID: "",
  736. URL: "",
  737. PageIndex: 1,
  738. PageSize: 20,
  739. AllCount: "",
  740. CB: null
  741. }
  742. /**
  743. * 评论控件初始化函数,调用函数
  744. * @param {object} 参数。
  745. * obj={
  746. * pid // 项目id,请查看api文档说明,找到你所在项目的id。
  747. * type //引用方式为弹窗还是嵌入式,true 为嵌入式方式,false 为窗体。
  748. * el // 评论控件追加的元素。注意:当控件为嵌入式时,才需要填写此参数,如果为弹窗时,不需要填写此参数。
  749. * }
  750. */
  751. U.MD.R.reply = function (obj) {
  752. //alert();
  753. //定义变量,获取调用方式、控件追加的元素、以及项目id.
  754. U.MD.R.login.cookieLogin(function () {
  755. var _type = obj.type,
  756. _el = obj.el,
  757. _cb = obj.cb;
  758. U.MD.R.data.PID = obj.pid; //项目id全局设置
  759. U.MD.R.data.AID = U.MD.R.reply.getUrlHash(); //文章id全局设置
  760. U.MD.R.data.URL = U.MD.R.reply.getUrl(); //文章url全局设置
  761. U.MD.R.data.CB = _cb;
  762. //调用类型判断
  763. if (!_type) {//如果调用方式是窗体,那么先创建一个窗体,并且重新更新变量_el的值。
  764. _el = new U.UF.UI.form('', $$("div"), {
  765. "style": {
  766. "width": "800px",
  767. "height": "800px"
  768. }
  769. }).content;
  770. }
  771. U.MD.R.reply.init(_el); //控件初始化
  772. U.UF.DL.asynLoadCss({
  773. "href": "/css/Controls/Basic/Picture.css",
  774. type: "text/css",
  775. rel: "stylesheet"
  776. }); //动态添加css文件
  777. U.UF.DL.asynLoadJs({ type: "text/javascript", src: "/js/Controls/Basic/Picture.js" });
  778. }); //cookie自动登录
  779. }
  780. /**
  781. * 评论控件初始化函数,调用函数
  782. * @param {element} 追加元素
  783. */
  784. U.MD.R.reply.init = function (el) {
  785. var _pageindex = U.MD.R.data.PageIndex, //当前页数
  786. _pagesize = U.MD.R.data.PageSize; //一页请求数
  787. U.MD.R.initPrintHtml(el); //创建基础html
  788. U.MD.R.getReplyData(_pageindex, _pagesize, function (data) {//获取评论数据
  789. U.MD.R.data.AllCount = data[0][0] ? Math.ceil(data[0][0].allcount / U.MD.R.data.PageSize) : ""; //取数完成之后进行将页数全局赋值给id。
  790. U.MD.R.printComment($("#U_MD_R_content_user_comment")[0], 1, data, false, false, false); //打印数据
  791. U.MD.R.initLoadMoreBtn(data[0]); //创建
  792. });
  793. }
  794. /**
  795. * 获取url地址
  796. */
  797. U.MD.R.reply.getUrl = function () {
  798. return window.location.href;
  799. }
  800. /**
  801. * 获取url网址的主机,加上url网址的目录
  802. */
  803. U.MD.R.reply.getUrlHash = function () {
  804. return U.UF.EC.SparkMD5.hash(window.location.href);
  805. }
  806. /**
  807. * 获取评论数据
  808. * @param {number} 页码数
  809. * @param {number} 一页的请求量
  810. * @param {function} 回调函数
  811. */
  812. U.MD.R.getReplyData = function (pageindex, pagesize, cb) {
  813. U.A.Request("http://cd.1473.cn/php", ["db.1473.cn", "UseStudio_Reply", "test", U.MD.R.data.AID, "1", "", pageindex, pagesize], function (r) {//获取数据
  814. cb && cb(r.value); //执行回调函数,并且返回数据。
  815. });
  816. }
  817. /**
  818. * 初始化创建回复元素
  819. * @param {element} 追加元素
  820. */
  821. U.MD.R.initPrintHtml = function (el) {
  822. var _el = el,
  823. _comment,
  824. _content,
  825. _content_operation,
  826. _userhead,
  827. _headimg,
  828. _operation,
  829. _username,
  830. _editorbox,
  831. _bottom,
  832. _picturewarp,
  833. _picture,
  834. _clear,
  835. _emoji_frame,
  836. _input,
  837. _button,
  838. _img_warp,
  839. _box;
  840. _comment = $$("div", { "className": "U_MD_R_comment" }, _el); //创建最外成元素
  841. _content = $$("div", { "className": "U_MD_R_content" }, _comment); //创建评论内容元素最外元素
  842. _content_operation = $$("div", { "className": "U_MD_R_content_operation" }, _content); //创建用户评论区域最外成元素
  843. _userhead = $$("div", { className: "U_MD_R_content_operation_userhead U_MD_R_Reply_Header" }, _content_operation); //创建头像最外成元素
  844. _headimg = $$("img", {//创建头像img元素
  845. "className": "img",
  846. "src": "/img/UserHead/UseHead.jpg",
  847. "onerror": function () { this.src = '/img/UserHead/UseHead.jpg' }
  848. }, _userhead);
  849. _operation = $$("div", {
  850. "className": "U_MD_R_content_operation_right",
  851. style: { width: "calc(100% - 40px - 20px )" }
  852. }, _content_operation); //创建内容框架div
  853. U.selectEl(_operation).attr({
  854. "data-RPID": null,
  855. "data-RD": 1,
  856. "data-RPUID": null
  857. });
  858. _username = $$("div", {//创建用户名元素
  859. "innerHTML": "登录/注册",
  860. "className": "U_MD_R_content_operation_userlogin U_MD_R_Reply_Name"
  861. }, _operation);
  862. //判断是否登录
  863. if (US.userInfo.userid) {//已登录
  864. _username.innerHTML = US.userInfo.UserName; //设置用户名
  865. _headimg.src = 'http://fs.1473.cn/' + US.userInfo.UserThumbnailImageHead; //设置头像
  866. }
  867. else {//未登录
  868. _username.onclick = function () {
  869. U.MD.R.login();
  870. }
  871. }
  872. _editorbox = $$("div", {
  873. "id": "editorbox",
  874. "className": "U_MD_R_Reply_Content",
  875. "contenteditable": "true",
  876. "style": { "min-height": "100px", "background": "#fff", "border": "1px solid black" }
  877. }, _operation)//创建编辑器容器
  878. var _scrolltop = document.documentElement.scrollTop;
  879. U.UF.E.initEditor(_editorbox); //调用函数
  880. document.documentElement.scrollTop = _scrolltop;
  881. _bottom = $$("div", { "className": "U_MD_R_content_operation_right_bottom" }, _operation); //创建用户评论底部区域
  882. $$("div", {//创建表情包按钮
  883. "className": "U_MD_R_content_operation_right_bottom_emoji",
  884. "onclick": function () {
  885. U.UF.EV.stopBubble();
  886. U.MD.UI.face(this, U.selectEl('#editorbox')[0]);
  887. //$(this)[0].append($("#U_MD_UI_face")[0]);
  888. //$(this)[0].append($("#U_MD_UI_face")[0]);
  889. U.selectEl("#U_MD_UI_face").css({ "position": "relative", "height": "140px", "overflow-y": "scroll", "top": "-150px", "width": "450px", "display": "block" });
  890. }
  891. }, _bottom);
  892. _picturewarp = $$("div", { "className": "U_MD_R_content_operation_right_bottom_picturewarp" }, _bottom); //图片最外成
  893. _picture = $$("img", { src: "/img/reply/img.png" }, _picturewarp);
  894. _input = $$("input", { "type": "file" }, _picturewarp); //上传
  895. _button = $$("div", {
  896. "className": "U_MD_R_content_operation_right_bottom_release",
  897. "innerHTML": "发表评论"
  898. }, _bottom); //内容发布
  899. _button.onclick = function () {
  900. if ($(".U_MD_R_Reply_Content")[0].textContent != '' || U.selectEl(".U_MD_R_Reply_Content")[0].innerHTML != '') {
  901. U.MD.R.release(_operation, 1, false, 1);
  902. } else {
  903. U.alert("评论不能为空!");
  904. }
  905. }
  906. _img_warp = $$("div", { "className": "U_MD_R_content_operation_right_bottom_imgloadbox U_MD_R_Reply_Image" }, _operation); //图片加载
  907. _box = $$("div", { "className": "U_MD_R_content_comment", "id": "U_MD_R_content_user_comment" }, _content); //内容盒子
  908. _input.onchange = function () {
  909. U.MD.R.uploadImages(this, _img_warp);
  910. }
  911. U.MD.R.data.CB && U.MD.R.data.CB();
  912. }
  913. /**
  914. * 创建加载更多按钮
  915. */
  916. U.MD.R.initLoadMoreBtn = function (data) {
  917. var _btn = $$("div", { "className": "U_MD_R_content_loading" }, U.selectEl(".U_MD_R_comment")[0]);
  918. if (data.length > 0) {
  919. if (U.MD.R.data.PageIndex < U.MD.R.data.AllCount) {
  920. _btn.innerHTML = "点击加载更多评论";
  921. _btn.onclick = function () {
  922. var _pageindex = ++U.MD.R.data.PageIndex,
  923. _pagesize = U.MD.R.data.PageSize;
  924. if (U.MD.R.data.PageIndex <= U.MD.R.data.AllCount) {
  925. U.MD.R.getReplyData(_pageindex, _pagesize, function (data) {//获取评论数据
  926. U.MD.R.data.AllCount = Math.ceil(data[0][0].allcount / U.MD.R.data.PageSize);
  927. U.MD.R.printComment($("#U_MD_R_content_user_comment")[0], 1, data, false, false, false); //打印数据
  928. });
  929. }
  930. else {
  931. U.selectEl(_btn).hide();
  932. }
  933. }
  934. }
  935. }
  936. else {
  937. // _btn.innerHTML = "还没有人评论";
  938. }
  939. }
  940. /**
  941. * 打印一级评论
  942. * @param {object} 评论数据
  943. * @param {element} 追加元素
  944. * @param {number} 用于判断层级而显示指定内容
  945. * @param {boolean}元素插入类型
  946. * @param {boolean} 是否需要回复功能,默认为false
  947. * @param {boolean} 是否需要查看更多,用于区分设置查看更多类型
  948. */
  949. U.MD.R.printComment = function (el, type, data, appendtype, isreply, readmore) {
  950. var _count = U.A.Request("http://cd.1473.cn/php", ["db.1473.cn", "UseStudio_Reply", "Reply_SelectTypeReplyEnable", U.MD.R.data.PID]);
  951. if (_count.value[0].ProjectReplyEnable == 1) {
  952. var _el = el,
  953. _type = type,
  954. _data = data,
  955. _appendtype = appendtype,
  956. _isreply = isreply,
  957. _readmore = readmore,
  958. _shownum;
  959. for (var i = 0; i < data[0].length; i++) {//遍历评论数据
  960. if (readmore) {
  961. _shownum = data[0][i].TopReplyNum;
  962. }
  963. else {
  964. _shownum = U.Json.select(_data[2], { ReplyID: _data[0][i].ReplyID }).length > 0 ? U.Json.select(_data[2], { ReplyID: _data[0][i].ReplyID })[0].AllReplyNum : "0"; //评论子集(所有子集)的评论数
  965. }
  966. U.MD.R.printCommentHtml(_el, _type, {
  967. rid: _data[0][i].ReplyID, //评论id
  968. rpid: _data[0][i].ReplyParentID, //评论父级id
  969. deep: _data[0][i].ReplyDeep, //评论深度
  970. topid: _data[0][i].ReplyID, //评论顶级id
  971. uid: _data[0][i].UserID, //评论用户id
  972. un: _data[0][i].UserName, //评论用户名
  973. tx: _data[0][i].ReplyUserThumbnailImageHead, //评论用户头像
  974. time: _data[0][i].ReplyAddTime, //评论时间
  975. content: _data[0][i].ReplyContent, //评论内容
  976. shownum: _shownum,
  977. likesnum: _type == 2 ? U.Json.select(_data[4], { ReplyID: _data[0][i].ReplyID })[0]:U.Json.select(_data[1], { ReplyID: _data[0][i].ReplyID })[0]
  978. }, _appendtype, _isreply, _readmore);
  979. }
  980. } else {
  981. var _btn = $$("div", { "className": "U_MD_R_content_loading" }, U.selectEl(".U_MD_R_comment")[0]);
  982. _btn.innerHTML = "该评论系统已关闭";
  983. U.selectEl("#U_MD_R_content_loading")[0].innerHTML = '';
  984. }
  985. }
  986. /**
  987. * 打印二级评论,用于区分用户点击回复或者查看更多。
  988. * @param {sring} 评论id
  989. * @param {boolean} 是否需要查看更多,用于区分设置查看更多类型
  990. */
  991. U.MD.R.viewComment = function (rid, type) {
  992. if (US.userInfo.userid) {
  993. var
  994. _rid = rid, //父级id
  995. _form, //窗体变量
  996. _data, //数据
  997. _firstbox, //一级评论内容区域
  998. _secondbox, //二级评论内容区域
  999. _thirdbox, //三级评论内容区域
  1000. _type = type;
  1001. _form = new U.UF.UI.form('', $$("div", { "style": { "padding": "20px"} }), {
  1002. "style": {
  1003. "width": "800px",
  1004. "height": "600px"
  1005. }
  1006. });
  1007. U.A.Request("http://cd.1473.cn/php", ["db.1473.cn", "UseStudio_Reply", "Reply_SelectThisReply", _rid], function (r) {//根据评论id,获取此评论,此评论点赞数,以及子目录下所有的评论还有点赞数
  1008. _data = r.value;
  1009. U.MD.R.printComment(_form.content, 2, _data, true, true, true); //打印一级目录
  1010. if (_type) {
  1011. U.selectEl(_form.content).find(".U_MD_R_content_box_content_edit").show();
  1012. }
  1013. _firstbox = $$("div", { "className": "U_MD_R_content_warp_box" }, _form.content);
  1014. //创建二级目录
  1015. for (var i = 0; i < _data[1].length; i++) {
  1016. _secondbox = U.MD.R.printCommentHtml(_firstbox, 2, {
  1017. rid: _data[1][i].ReplyID,
  1018. rpid: _data[1][i].ReplyParentID,
  1019. deep: _data[1][i].ReplyDeep,
  1020. topid: _data[1][i].ReplyTopID,
  1021. uid: _data[1][i].UserID,
  1022. tx: _data[1][i].ReplyUserThumbnailImageHead,
  1023. un: _data[1][i].UserName,
  1024. time: _data[1][i].ReplyAddTime,
  1025. content: _data[1][i].ReplyContent,
  1026. likesnum: U.Json.select(_data[3], { ReplyID: _data[1][i].ReplyID })[0]
  1027. }, false, true, true);
  1028. //创建三级以下目录(包括三级)
  1029. _thirdbox = $$("div", { "className": "U_MD_R_content_warp_box" }, _secondbox);
  1030. U.selectEl(_thirdbox).attr({ "data-replyid": _data[1][i].ReplyID });
  1031. for (var j = 0; j < _data[2].length; j++) {
  1032. if (_data[1][i].ReplyID == _data[2][j].ReplyParentID) {
  1033. U.MD.R.printCommentHtml(_thirdbox, 3, {
  1034. rid: _data[2][j].ReplyID,
  1035. rpid: _data[2][j].ReplyParentID,
  1036. deep: _data[2][j].ReplyDeep,
  1037. topid: _data[2][j].ReplyTopID,
  1038. uid: _data[2][j].UserID,
  1039. tx: _data[2][j].ReplyUserThumbnailImageHead,
  1040. un: _data[2][j].UserName,
  1041. time: _data[2][j].ReplyAddTime,
  1042. content: _data[2][j].ReplyContent,
  1043. likesnum: U.Json.select(_data[3], { ReplyID: _data[2][j].ReplyID })[0],
  1044. replyinfo: {
  1045. uid: _data[2][j].uid, //评论的用户id
  1046. un: _data[2][j].un, //评论的用户名
  1047. tx: _data[2][j].tx//评论的头像
  1048. }
  1049. }, false, true, true);
  1050. }
  1051. }
  1052. }
  1053. });
  1054. }
  1055. else {
  1056. U.Alert("请先登录");
  1057. }
  1058. }
  1059. /**
  1060. * 打印评论数据内容
  1061. * @param {object} 评论数据
  1062. * @param {element} 追加元素
  1063. * @param {object} 用于判断层级而显示指定内容
  1064. * object={
  1065. * rid,//评论id
  1066. * rpid,//评论父级id
  1067. * deep,//评论深度
  1068. * topid,//评论顶级id
  1069. * uid,//评论用户id
  1070. * un,//评论用户名
  1071. * tx,//评论用户头像
  1072. * time,//评论时间
  1073. * content,//评论内容
  1074. * likesnum,//评论点赞数
  1075. * shownum,//评论子集(所有子集)的评论数
  1076. * }
  1077. * @param {boolean} 元素插入类型
  1078. * @param {boolean} 是否需要回复功能,默认为false
  1079. * @param {boolean} 是否需要查看更多,用于区分设置查看更多类型
  1080. */
  1081. U.MD.R.printCommentHtml = function (el, type, data, appendtype, isreply, readmore) {
  1082. var _data = data,
  1083. _el = el,
  1084. _type = type,
  1085. // _eltype = obj.eltype ? obj.eltype : false,
  1086. // _showmore = obj.showmore,
  1087. _rid = _data.rid, //评论id
  1088. _rpid = _data.rpid, //评论父级id
  1089. _deep = _data.deep, //评论顶级id
  1090. _topid = _data.topid, //评论顶级id
  1091. _uid = _data.uid, //评论用户id
  1092. _tx = _data.tx, //评论用户名
  1093. _un = _data.un, //评论用户头像
  1094. _time = _data.time, //评论时间
  1095. _datacontent = _data.content, //评论内容
  1096. _likesnumjson = _data.likesnum, //点赞数
  1097. _showmoretxtjson = _data.shownum, //评论子集(所有子集)的评论数
  1098. _replyinfo_uid = _data.replyinfo ? _data.replyinfo.uid : "", //评论的用户id
  1099. _replyinfo_un = _data.replyinfo ? _data.replyinfo.un : "", //评论的用户名
  1100. _replyinfo_tx = _data.replyinfo ? _data.replyinfo.tx : "", //评论的头像
  1101. _appendtype = appendtype, //评论插入的方式,如果为true,那么就插入到所有评论的第一个(用于以及评论和二级评论),如果为false,那么就插入到最后一个
  1102. _isreply = isreply, //点击回复按钮,是否是弹出回复框,还是弹出查看更多,默认为false,
  1103. _readmore = readmore, //点击获取是
  1104. _box, //评论最外层元素
  1105. _info, //评论内层元素
  1106. _head, //评论用户头像最外层
  1107. _headimg, //评论用户头像
  1108. _content, //评论头像右侧内容
  1109. _content_top, //评论右侧内容-头部用户名区域
  1110. _username, //评论右侧内容-头部用户名区域-用户名
  1111. _commenttime, //评论右侧内容-头部用户名区域-评论时间
  1112. _text,
  1113. _content_bottom, //评论右侧内容-底部区域
  1114. _likeswarp, //评论右侧内容-底部区域-点赞最外层
  1115. _likesimg, //评论右侧内容-底部区域-点赞图片
  1116. _likesnum, //评论右侧内容-底部区域-点赞数
  1117. _replywarp, //评论右侧内容-底部区域-回复最外层
  1118. _showmorewarp, //评论右侧内容-底部区域-查看更多最外层
  1119. _showmoretext, //评论右侧内容-底部区域-查看更多文字元素
  1120. _position,
  1121. _contenteditable, //创建子集评论-评论操作区域最外层
  1122. _bottom, //创建子集评论-评论操作区域内层
  1123. _picturewarp, //创建子集评论-评论操作区域-图片最外层
  1124. _picture, //创建子集评论-评论操作区域-图片元素
  1125. _input, //创建子集评论-评论操作区域-上传input
  1126. _button, //创建子集评论-评论操作区域-发布按钮
  1127. _img_warp, //创建子集评论-评论操作区域-图片显示区域
  1128. _childrenbox; //用于存放子集评论
  1129. _box = $$("div", { "className": "U_MD_R_content_box" }); //创建内容盒子
  1130. if (_appendtype) { //判断插入类型是否为true,如果为true,那么就插入到所有评论的第一个(用于以及评论和二级评论),如果为false,那么就插入到最后一个
  1131. U.selectEl(_el).append(_box, 0, U.selectEl(_el)[0].firstChild);
  1132. }
  1133. else {//如果为false,那么就插入到最后一个
  1134. U.selectEl(_el).append(_box);
  1135. }
  1136. _info = $$("div", { "className": "U_MD_R_content_box_warp" }, _box); //创建信息div
  1137. U.selectEl(_info).attr({//给评论内层设置评论id、评论父级id、评论深度、评论顶级id、评论用户id。用于回复时获取信息。
  1138. "data-rid": _rid, //评论id
  1139. "data-RPID": _rpid, //评论父级id
  1140. "data-RD": _deep, //评论深度
  1141. "data-RBID": _topid, //评论顶级id
  1142. "data-RPUID": _uid//评论用户id
  1143. });
  1144. _head = $$("div", { "className": "U_MD_R_content_box_userhead" }, _info); //评论用户头像最外层
  1145. _headimg = $$("img", {//评论用户头像
  1146. "src": _tx,
  1147. onerror: "U.MD.R.imgError(this)"
  1148. }, _head);
  1149. _content = $$("div", {//评论头像右侧内容
  1150. "className": "U_MD_R_content_box_content",
  1151. style: { width: "calc(100% - 40px - 20px )" }
  1152. }, _info); //创建右侧div
  1153. _content_top = $$("div", { "className": "U_MD_R_content_box_content_top" }, _content); //评论右侧内容-头部用户名区域
  1154. _username = $$("div", {//评论右侧内容-头部用户名区域-用户名
  1155. "className": "U_MD_R_content_box_content_top_name",
  1156. "innerHTML": _un
  1157. }, _content_top);
  1158. if (_type == 3) {//如果为三级目录以下,那么就修改显示的用户名
  1159. _username.innerHTML = _un + '回复@' + _replyinfo_un;
  1160. }
  1161. _commenttime = $$("div", {//评论右侧内容-头部用户名区域-评论时间
  1162. "className": "U_MD_R_content_box_content_top_time",
  1163. "innerHTML": _time
  1164. }, _content_top);
  1165. _text = $$("div", { "className": "U_MD_R_content_box_content_text", "innerHTML": _datacontent }, _content); //创建内容区域
  1166. if ($(_text).find("img").length > 0) {
  1167. U.selectEl(_text).find("img")[0].onclick = function () {
  1168. // U.MD.UI.picture([this.src, this.src, this.src], 2);
  1169. U.MD.UI.picture([this.src], 0);
  1170. U.selectEl("#U_MD_UI_PictureForm").css("position", "fixed");
  1171. U.UF.F.topWindow($('#U_MD_UI_PictureForm')[0], true);
  1172. }
  1173. }
  1174. _content_bottom = $$("div", { "className": "U_MD_R_content_box_content_bottom" }, _content); //评论右侧内容-底部区域
  1175. _likeswarp = $$("div", { "className": "U_MD_R_content_box_content_bottom_likeswarp" }, _content_bottom); //评论右侧内容-底部区域-点赞最外层
  1176. _likeswarp.onclick = function () {//设置点赞事件
  1177. U.MD.R.like(this, _rid, US.userInfo.userid);
  1178. }
  1179. _likesimg = $$("img", { "src": "/img/reply/NOFabulous.png" }, _likeswarp); //评论右侧内容-底部区域-点赞图片
  1180. _likesnum = $$("div", {//评论右侧内容-底部区域-点赞数
  1181. "className": "U_MD_R_content_box_content_bottom_likeswarp_text",
  1182. "innerHTML": 0
  1183. }, _likeswarp);
  1184. if (_likesnumjson) {//如果有点赞数据,那么修改点赞数,并且修改图片。
  1185. _likesnum.innerHTML = _likesnumjson.ReplyNum;
  1186. U.A.Request("http://cd.1473.cn/net", ["db.1473.cn", "UseStudio_Reply", "Reply_SelectRepeatLikes_Moblie", _rid, US.userInfo.userid], function (r) {
  1187. if (r.value[0].mode == 1) {
  1188. _likesimg.src = "/img/reply/NOFabulous.png";
  1189. }else if (r.value[0].mode == 0) {
  1190. _likesimg.src = "/img/reply/Fabulous.png";
  1191. } else {
  1192. _likesimg.src = "/img/reply/NOFabulous.png";
  1193. }
  1194. })
  1195. //_likesimg.src = "/img/reply/Fabulous.png";
  1196. }
  1197. _replywarp = $$("div", { "className": "U_MD_R_content_box_content_bottom_replywarp" }, _content_bottom); //评论右侧内容-底部区域-回复最外层
  1198. if (_readmore) {//点击回复按钮,是否是弹出回复框,还是弹出查看更多,默认为false。如果为true,在元素下方显示出评论操作元素。
  1199. _replywarp.onclick = function () {
  1200. U.MD.R.subsetReply(this);
  1201. }
  1202. }
  1203. else {
  1204. _replywarp.onclick = function () {//如果为false,弹出一个窗体。
  1205. U.MD.R.viewComment(_rid, true);
  1206. }
  1207. }
  1208. $$("img", {//创建回复图片
  1209. "src": "/img/reply/reply.png"
  1210. }, _replywarp);
  1211. $$("div", {//创建回复按钮
  1212. "innerHTML": "回复",
  1213. "className": "U_MD_R_content_box_content_bottom_replywarp_text"
  1214. }, _replywarp);
  1215. if (_type == 1) {//如果类型为1,并且点击回复后弹出窗体的,那么显示查看更多。
  1216. _showmorewarp = $$("div", { "className": "U_MD_R_content_box_content_bottom_showmorewarp" }, _content_bottom);
  1217. $$("img", {
  1218. "src": "/img/reply/list.png"
  1219. }, _showmorewarp);
  1220. _showmoretext = $$("div", {
  1221. "className": "U_MD_R_content_box_content_bottom_showmore_text"
  1222. }, _showmorewarp);
  1223. if (_readmore) {
  1224. _showmoretext.className = "U_MD_R_content_box_content_bottom_showmore_text U_MD_R_content_box_content_bottom_showmore_text_secondary"
  1225. _showmoretext.innerHTML = _showmoretxtjson ? "共有(" + "<span>" + _showmoretxtjson + "</span>" + ")条评论" : "没有评论(" + "<span>0</span>" + ")";
  1226. }
  1227. else {
  1228. _showmoretext.className = "U_MD_R_content_box_content_bottom_showmore_text U_MD_R_content_box_content_bottom_showmore_text_important"
  1229. _showmoretext.innerHTML = _showmoretxtjson ? "查看更多(" + "<span>" + _showmoretxtjson + "</span>" + ")" : "查看更多(" + "<span>" + 0 + "</span>" + ")";
  1230. _showmorewarp.onclick = function () {
  1231. U.MD.R.viewComment(_rid, false);
  1232. }
  1233. }
  1234. }
  1235. if (_type == 1 && !readmore && U.selectEl(".U_MD_R_content_loading")[0]) {
  1236. if (U.MD.R.data.PageIndex < U.MD.R.data.AllCount) {
  1237. U.selectEl(".U_MD_R_content_loading")[0].innerHTML = "点击加载更多评论";
  1238. }
  1239. else {
  1240. U.selectEl(".U_MD_R_content_loading").hide();
  1241. }
  1242. }
  1243. if (_type == 2 || _type == 3 || (_type == 1 && readmore)) {//如果是2级和3级以下,那么就创建操作区域。
  1244. _contenteditable = $$("div", {//创建子集评论-评论操作区域最外层
  1245. "className": "U_MD_R_content_box_content_edit",
  1246. "style": { "display": "none" }
  1247. }, _content);
  1248. _replyinput = $$("div", { "className": "U_MD_R_Reply_Content", "contenteditable": "true" }, _contenteditable); //创建回复元素
  1249. _bottom = $$("div", { "className": "U_MD_R_content_operation_right_bottom" }, _contenteditable); //创建子集评论-评论操作区域内层
  1250. $$("div", {//创建表情包按钮
  1251. "className": "U_MD_R_content_operation_right_bottom_emoji",
  1252. "onclick": function () {
  1253. U.UF.EV.stopBubble();
  1254. U.MD.UI.face(this, _replyinput);
  1255. U.selectEl(this)[0].append($("#U_MD_UI_face")[0]);
  1256. U.selectEl("#U_MD_UI_face").css({ "position": "relative", "height": "140px", "overflow-y": "scroll", "top": "-150px", "width": "450px", "display": "block" });
  1257. }
  1258. }, _bottom);
  1259. _picturewarp = $$("div", { "className": "U_MD_R_content_operation_right_bottom_picturewarp" }, _bottom); //创建子集评论-评论操作区域-图片最外层
  1260. _picture = $$("img", { src: "/img/reply/img.png" }, _picturewarp); //创建子集评论-评论操作区域-图片元素
  1261. _input = $$("input", { "type": "file" }, _picturewarp); //创建子集评论-评论操作区域-上传input
  1262. _input.onchange = function () {//赋予上传事件
  1263. U.MD.R.uploadImages(this, _img_warp);
  1264. }
  1265. _button = $$("div", {////创建子集评论-评论操作区域-发布按钮
  1266. "className": "U_MD_R_content_operation_right_bottom_release",
  1267. "innerHTML": "发表评论"
  1268. }, _bottom); //内容发布
  1269. _button.onclick = function () {//赋予时间
  1270. if (_type == 1) {
  1271. _position = 2;
  1272. }
  1273. else if (_type == 2) {
  1274. _position = 3;
  1275. }
  1276. else if (_type == 3) {
  1277. _position = 4;
  1278. }
  1279. U.MD.R.release(_info, _type, false, _position);
  1280. }
  1281. _img_warp = $$("div", { "className": "U_MD_R_content_operation_right_bottom_imgloadbox U_MD_R_Reply_Image" }, _contenteditable); //创建子集评论-评论操作区域-图片显示区域
  1282. if (_type != 3) {
  1283. _childrenbox = $$("div", { "className": "U_MD_R_content_comment" }, _box); //内容盒子
  1284. }
  1285. return _childrenbox; //返回元素
  1286. }
  1287. }
  1288. /**
  1289. * 图片上传函数
  1290. * @param {element} input 元素
  1291. * @param {element} 上传成功后,图片插入的位置。
  1292. */
  1293. U.MD.R.uploadImages = function (input, el) {
  1294. var _el = el, _imgwarp, _img, _filetype, _imgtype = /.*(jpg|png|gif|jpeg|JPG|PNG|GIF|JPEG)$/;
  1295. U.selectEl(_el)[0].innerHTML = "";
  1296. _imgwarp = $$("div", {}, _el);
  1297. _img = $$("img", {//创建img
  1298. "src": "/img/Reply/loading.gif",
  1299. "style": { "width": "100px", "height": "100px", "margin-right": "10px" }
  1300. }, _imgwarp);
  1301. U.UF.UP.inputUpload([input], "http://disk.1473.cn/USUpfile.ashx?typename=UseStudioEditor&UserId=FA92AAC5-4134-449F-9659-0DC12F4F68E9", function (r) {
  1302. _filetype = r.value[0].split(".")[1];
  1303. if (_filetype.match(_imgtype)) {//如果获取的文件是符合的文件类型进行上传
  1304. U.selectEl(_imgwarp).remove();
  1305. _imgwarp = $$("div", { "className": "U_MD_R_content_operation_right_bottom_imgloadbox_warp" }, _el);
  1306. $$("img", { "src": "http://fs.1473.cn/" + r.value[0] }, _imgwarp); //创建img
  1307. $$("div", { "className": "closebtn", "onclick": "U.MD.R.uploadImages.close(this)" }, _imgwarp);
  1308. U.alert("上传成功");
  1309. } else {//否则提醒用户选择上传图片文件
  1310. U.alert("请上传图片文件");
  1311. return;
  1312. }
  1313. }, []);
  1314. }
  1315. /**
  1316. * 图片关闭函数
  1317. * @param {element} 事件源
  1318. */
  1319. U.MD.R.uploadImages.close = function (el) {
  1320. U.selectEl(el).Parent().remove();
  1321. }
  1322. /**
  1323. * 二级以下(包括二级、三级等等)评论点击回复后显示隐藏操作区域
  1324. * @param {element} 事件源
  1325. */
  1326. U.MD.R.subsetReply = function (el) {
  1327. // U.selectEl(el)
  1328. var _el = U.selectEl($(el).Parent(2)).find(".U_MD_R_content_box_content_edit");
  1329. if (_el[0].style.display == "block") {
  1330. _el.hide();
  1331. }
  1332. else {
  1333. _el.show();
  1334. }
  1335. }
  1336. /**
  1337. * 发表评论插入函数
  1338. */
  1339. U.MD.R.release = function (el, type, isreply, position) {//发表评论函数
  1340. if (US.userInfo.userid) {
  1341. var _el = el,
  1342. _type = type,
  1343. _isreply = isreply,
  1344. _position = position,
  1345. _content = U.selectEl(_el).find(".U_MD_R_Reply_Content")[0],
  1346. _imgwarp = U.selectEl(_el).find(".U_MD_R_Reply_Image"),
  1347. _uid = US.userInfo.userid,
  1348. _un = US.userInfo.UserName,
  1349. _utx = "http://fs.1473.cn/" + US.userInfo.UserImageHead,
  1350. _box;
  1351. if (_content.innerHTML.trim() != "" || _imgwarp.find("img").length > 0) {
  1352. var _rid = Guid.newGuid(),
  1353. _rpid = U.selectEl(el).attr("data-rid"),
  1354. _pid = U.MD.R.data.PID,
  1355. _aid = U.MD.R.data.AID,
  1356. _rc = "",
  1357. _rip = US.userInfo.RegisterIP,
  1358. _url = U.MD.R.data.URL,
  1359. _ra = null,
  1360. _rd = U.selectEl(el).attr("data-rd"),
  1361. _rbid = U.selectEl(el).attr("data-rbid"),
  1362. _rpuid = U.selectEl(el).attr("data-rpuid"),
  1363. _re = 1;
  1364. if (position == 1) {
  1365. _rd = 1;
  1366. }
  1367. else if (position == 2 || position == 3) {
  1368. _rd = parseInt($(el).attr("data-rd")) + 1;
  1369. }
  1370. else {
  1371. _rd = 3;
  1372. _rpid = U.selectEl(el).attr("data-rpid");
  1373. }
  1374. if ($(_imgwarp).find("img").length > 0) {
  1375. _rc = _content.innerHTML.trim() + _imgwarp.find("img")[0].outerHTML;
  1376. }
  1377. else {
  1378. _rc = _content.innerHTML;
  1379. }
  1380. U.A.Request("http://cd.1473.cn/net", ["db.1473.cn", "UseStudio_Reply", "Reply_InsertReply", _rid, _rpid, _pid, _aid, _uid, _un, _utx, _rc, _rip, _url, _ra, _rd, _rpuid, _re, U.MD.R.getNowFormatDate()], function (r) {
  1381. var _data = r.value[0], _appendtype, _readmore,
  1382. _more = U.selectEl("div[data-rid='" + _data.ReplyParentID + "']").find(".U_MD_R_content_box_content_bottom_showmore_text_important span")[0],
  1383. _more1 = U.selectEl("div[data-rid='" + _data.ReplyParentID + "']").find(".U_MD_R_content_box_content_bottom_showmore_text_secondary span")[0];
  1384. U.selectEl(_el).find(".U_MD_R_Reply_Content")[0].innerHTML = "";
  1385. U.UF.E.initEditor($(_el).find(".U_MD_R_Reply_Content")[0]); //调用函数
  1386. U.selectEl(_el).find(".U_MD_R_Reply_Image")[0].innerHTML = "";
  1387. if (_position == 1) {
  1388. _readmore = false;
  1389. _appendtype = true;
  1390. _el = U.selectEl("#U_MD_R_content_user_comment")[0];
  1391. }
  1392. else {
  1393. _readmore = true;
  1394. _val = _more.innerText;
  1395. // _val1 = _more1.innerText;
  1396. if (_position == 2) {
  1397. _el = U.selectEl(_el).Parent().nextSibling;
  1398. _type = 2;
  1399. _appendtype = true;
  1400. }
  1401. if (_position == 3) {
  1402. if ($($(_el)[0].nextSibling).find(".U_MD_R_content_warp_box").length > 0) {
  1403. _el = U.selectEl($(_el)[0].nextSibling).find(".U_MD_R_content_warp_box");
  1404. }
  1405. else {
  1406. _el = $$("div", { "className": "U_MD_R_content_warp_box" }, U.selectEl($(_el)[0].nextSibling)[0]);
  1407. //$(_el).attr({"data-replyid": _data[1][i].ReplyID});
  1408. }
  1409. _type = 2;
  1410. }
  1411. if (_position == 4) {
  1412. _el = U.selectEl($(_el).Parent()).Parent();
  1413. _type = 3;
  1414. }
  1415. _more.innerText = ++_val;
  1416. //_more1.innerText = ++_val1;
  1417. U.selectEl($(_content).Parent()).hide();
  1418. }
  1419. var _box = U.MD.R.printCommentHtml(_el, _type, {
  1420. rid: _data.ReplyID,
  1421. rpid: _data.ReplyParentID,
  1422. deep: _data.ReplyDeep,
  1423. topid: _data.ReplyTopID,
  1424. uid: _data.UserID,
  1425. tx: _data.ReplyUserThumbnailImageHead,
  1426. un: _data.UserName,
  1427. time: U.MD.R.getNowFormatDate() + '.0',
  1428. content: _data.ReplyContent,
  1429. replyinfo: {
  1430. uid: _data.uid, //评论的用户id
  1431. un: _data.un, //评论的用户名
  1432. tx: _data.tx//评论的头像
  1433. }
  1434. }, _appendtype, _isreply, _readmore);
  1435. // if (_position == 3) {
  1436. // var _box1 = $$("div", {"className": "U_MD_R_content_warp_box"}, _box);
  1437. // U.selectEl(_box1).attr({"data-replyid": _data[1][i].ReplyID});
  1438. // }
  1439. U.alert("评论成功");
  1440. }
  1441. );
  1442. }
  1443. else {
  1444. U.alert("请输入评论内容");
  1445. }
  1446. }
  1447. else {
  1448. U.Alert("请先登录");
  1449. }
  1450. }
  1451. /**
  1452. * 点赞函数
  1453. * @param {element} 事件源
  1454. * @param {string} 评论id
  1455. * @param {string} 用户id
  1456. */
  1457. U.MD.R.like = function (e, rid, uid) {
  1458. if (US.userInfo.userid) {
  1459. var _el = e, _rid = rid, _uid = uid;
  1460. U.A.Request("http://cd.1473.cn/net", ["db.1473.cn", "UseStudio_Reply", "Reply_SelectRepeatLikes", _rid, _uid], function (r) {
  1461. var _img = U.selectEl(_el).find("img")[0],
  1462. _text = U.selectEl(_el).find(".U_MD_R_content_box_content_bottom_likeswarp_text")[0],
  1463. _val = parseInt(_text.innerHTML);
  1464. if (r.value[0].mode == 0) {
  1465. _img.src = "/img/reply/NOFabulous.png";
  1466. _text.innerHTML = --_val;
  1467. }
  1468. else {
  1469. _img.src = "/img/reply/Fabulous.png";
  1470. _text.innerHTML = ++_val;
  1471. }
  1472. });
  1473. }
  1474. else {
  1475. U.Alert("请先登录");
  1476. }
  1477. }
  1478. /**
  1479. * 图片错误所执行的函数
  1480. * @param {element} 事件源
  1481. */
  1482. U.MD.R.imgError = function (el) {
  1483. U.selectEl(el)[0].src = "/img/UserHead/UseHead.jpg";
  1484. }
  1485. /**
  1486. * 函数作用:调用登录函数
  1487. */
  1488. U.MD.R.login = function () {
  1489. if ($("#U_MD_HomeC_Pop")[0]) {
  1490. U.UF.F.windowTopCenter($("#U_MD_HomeC_Pop")[0]);
  1491. }
  1492. else {
  1493. U.UF.CD.loadPageCrossDomain(function () { });
  1494. U.MD.U.L.setLoginCallBack(function () {
  1495. U.MD.R.login.cb();
  1496. });
  1497. }
  1498. }
  1499. /**
  1500. * cookie登录,如果登录成功,则修改头像以及用户名
  1501. */
  1502. U.MD.R.login.cookieLogin = function (cb) {
  1503. if (U.UF.Cookie.get("usestudiosso") && U.UF.Cookie.get("usestudiosso", "userid")[0]) {
  1504. U.UF.CD.loadPageCrossDomain(function () {
  1505. U.MD.U.L.loginCallBack = function () {
  1506. cb && cb();
  1507. U.selectEl(".U_MD_R_content_operation_userhead img")[0].src = 'http://fs.1473.cn/' + US.userInfo.UserThumbnailImageHead; //用户登录后的操作
  1508. U.selectEl(".U_MD_R_content_operation_userlogin")[0].innerHTML = US.userInfo.UserName; //设置登录用户头像,登录用户名等操作
  1509. }
  1510. });
  1511. } else {
  1512. cb && cb();
  1513. }
  1514. }
  1515. /**
  1516. * 登录之后的回调函数
  1517. */
  1518. U.MD.R.login.cb = function () {
  1519. U.selectEl(".U_MD_R_content_operation_userhead img")[0].src = 'http://fs.1473.cn/' + US.userInfo.UserThumbnailImageHead; //用户登录后的操作
  1520. U.selectEl(".U_MD_R_content_operation_userlogin")[0].innerHTML = US.userInfo.UserName; //设置登录用户头像,登录用户名等操作
  1521. }
  1522. //获取当前时间
  1523. U.MD.R.getNowFormatDate = function () {
  1524. var date = new Date();
  1525. var seperator1 = "-";
  1526. var seperator2 = ":";
  1527. var month = date.getMonth() + 1;
  1528. var strDate = date.getDate();
  1529. if (month >= 1 && month <= 9) {
  1530. month = "0" + month;
  1531. }
  1532. if (strDate >= 0 && strDate <= 9) {
  1533. strDate = "0" + strDate;
  1534. }
  1535. var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate
  1536. + " " + date.getHours() + seperator2 + date.getMinutes()
  1537. + seperator2 + date.getSeconds();
  1538. return currentdate;
  1539. }
  1540. ;
  1541. ///<jscompress sourcefile="Table.js" />
  1542. Namespace.register("U.MD.UI.table");
  1543. /*
  1544. 表格控件的基础函数
  1545. param1 datasource 数据源是一个object类型数组。
  1546. param2 titles 标题是一个json类型数据
  1547. param3 css 样式是一个json类型数据
  1548. param4 parent 父元素
  1549. */
  1550. U.MD.UI.table = function (datasource, titles, css, parent) {
  1551. U.MD.UI.table.thead(datasource, titles, css, parent);
  1552. //创建表格
  1553. }
  1554. /*
  1555. 表格控件的头部函数
  1556. param1 {json} datasource 数据源是一个object类型数组。
  1557. param2 {json} titles 标题是一个json类型数据
  1558. param3 {json} css 宽度是一个json类型数据
  1559. param4 {element} parent 父元素
  1560. param5 {number} index 默认页面
  1561. param6 {number} prows 页面
  1562. */
  1563. U.MD.UI.table.thead = function (datasource, titles, css, parent, index, prows) {
  1564. if (!index) {
  1565. //index默认为一
  1566. index = 1;
  1567. //prwos默认为数据源的长度
  1568. prows = datasource.length;
  1569. }
  1570. var _table, _thead, _tr, _tbody;
  1571. //申明变量
  1572. _table = $$("table", { style: {
  1573. "text-align":"center",
  1574. "position": "relative",
  1575. "width": " 100%",
  1576. "border-collapse": " collapse",
  1577. "border-width": " 1px",
  1578. "border-style": " solid",
  1579. "border-color": " rgb(213, 213, 213)",
  1580. "border-image": " initial",
  1581. "display": "table"} }, parent);
  1582. //创建table标签
  1583. _thead = $$("thead", {}, _table);
  1584. //创建thead标签
  1585. _tr = $$("tr", {}, _thead);
  1586. //创建tr标签
  1587. for (var num in titles) {
  1588. //遍历titles
  1589. if (typeof titles[num] === "object") {
  1590. //判断是否有绑定事件
  1591. $$("th", { innerHTML: titles[num].name, style: {
  1592. "cssText": css[num],
  1593. "padding": "10px 0",
  1594. "font-weight": "normal",
  1595. "border": "1px solid #d5d5d5"
  1596. }, id: "th" }, _tr);
  1597. //生成th
  1598. } else {
  1599. $$("th", { innerHTML: titles[num], style: {
  1600. "cssText": css[num],
  1601. "padding": "10px 0",
  1602. "font-weight": "normal",
  1603. "border": "1px solid #d5d5d5"
  1604. }, id: "th" }, _tr);
  1605. //生成th
  1606. }
  1607. }
  1608. _tbody = $$("tbody", { style: { cssText: "width:100%;" }, id: "tbody" }, _table);
  1609. //生成tbody
  1610. U.MD.UI.table.tbody(_tbody, datasource, titles, css, index, prows);
  1611. //运行tbody函数
  1612. return _tbody;
  1613. //返回tbody
  1614. }
  1615. /*
  1616. 表格控件的身体函数
  1617. param1 {element} parent 父元素,表格生成的地方
  1618. param2 {json} datasource 数据源是一个object类型数组。
  1619. param3 {json} titles 标题是一个json类型数据
  1620. param4 {json} css 宽度是一个json类型数据
  1621. param5 {number} index 默认页面
  1622. param6 {number} prows 页面行数
  1623. */
  1624. U.MD.UI.table.tbody = function (parent, datasource, titles, css, index, prows) {
  1625. var _tr, _td, _div, _neirong;
  1626. //申明变量
  1627. for (var num = (index - 1) * prows; num < index * prows && num < datasource.length; num++) {
  1628. //建立一个循环,以(index - 1) * prows为初始值,index * prows为终点进行循环
  1629. if (num % 2 != 0) {
  1630. //判断table列表的行数是否是单数
  1631. _tr = $$("tr", { style: { cssText: "background-color: #FFF;" }, id: "tr" }, parent);
  1632. //行数是单的背景颜色是白色
  1633. } else {
  1634. _tr = $$("tr", { style: { cssText: "background-color: #dde4ee;" }, id: "tr" }, parent);
  1635. //行数是双的背景颜色是#dde4ee
  1636. }
  1637. for (var name in titles) {
  1638. //遍历titles
  1639. _td = $$("td", { id: "td" }, _tr);
  1640. //生成td
  1641. if (titles[name].content) {
  1642. for (var k = 0; k < titles[name].content.length; k++) {
  1643. //遍历添加的元素
  1644. _div = U.MD.UI.table.printDiv(_td, titles[name].content[k]);
  1645. //生成div
  1646. if (titles[name].content[k].onclick) {
  1647. U.MD.UI.table.onclick(_div, datasource[num], titles[name].content[k].onclick);
  1648. }
  1649. //添加点击事件
  1650. }
  1651. } else {
  1652. _div = $$("div", { innerHTML: datasource[num][name], style: { "overflow": "hidden", "cssText": css[name]} }, _td);
  1653. if (titles[name].id) {//判断是否需要给td添加id
  1654. _div.id = datasource[num][titles[name].id];
  1655. }
  1656. }
  1657. }
  1658. }
  1659. }
  1660. /*
  1661. 表格控件的分页表格函数
  1662. param1 {json} datasource 数据源 json
  1663. param2 {json} titles 标题是一个json类型数据
  1664. param3 {json} css 宽度是一个json类型数据
  1665. param4 {number} prows 页面行数 int
  1666. param5 {number} index 默认页面 int
  1667. param6 {element} parent 父元素
  1668. */
  1669. U.MD.UI.table.pageTable = function (datasource, titles, css, prows, index, parent) {
  1670. var _div = $$("div", { "style": {
  1671. "left": "0px",
  1672. "right": "0px",
  1673. "width": "100%",
  1674. "margin": "0 auto",
  1675. "top": "200px" }
  1676. }, parent);
  1677. //生成一个大div放表格和分页
  1678. var _tdiv = $$("div", {}, _div);
  1679. //生成一个div 放表格
  1680. var _tbody = U.MD.UI.table.thead(datasource, titles, css, _tdiv, index, prows);
  1681. //生成表格,放_tdiv里
  1682. var _pdiv = $$("div", { "style": {"width": "650px", "margin": "20px auto 0 auto"}}, _div); //生成一个div 放分页按钮
  1683. new U.UF.P.page(_pdiv, datasource.length, prows, index, function (page) {
  1684. //生成分页控件,当点击其他页面是触发匿名波函数
  1685. U.MD.UI.table.delChild(_tbody);
  1686. //当点击下一页时,首先删除tbody 下全部子元
  1687. U.MD.UI.table.tbody(_tbody, datasource, titles, css, page, prows);
  1688. //生成tbody
  1689. });
  1690. }
  1691. /*
  1692. 删除子元素函数
  1693. param {element}obj 删除子元素的函数
  1694. */
  1695. U.MD.UI.table.delChild = function (obj) {
  1696. for (var num = obj.children.length - 1; num >= 0; num--) {
  1697. //得到元素底下的全部子元素
  1698. obj.removeChild(obj.children[num])
  1699. //删除子元素
  1700. }
  1701. }
  1702. /*
  1703. 点击事件函数
  1704. param1 {element} obj 点击事件的触发对象
  1705. param2 {json} datasource 展示的数据
  1706. */
  1707. U.MD.UI.table.onclick = function (obj, datasource, fun) {
  1708. obj.onclick = function () {
  1709. //绑定事件
  1710. fun(datasource);
  1711. }
  1712. }
  1713. /*
  1714. 打印div
  1715. param2 {sting || element} content 生成内容(字符串或者元素)
  1716. param1 {element} parent 生成的父元素
  1717. */
  1718. U.MD.UI.table.printDiv = function (parent, content) {
  1719. var _div;
  1720. //判断content类型是否是字符串
  1721. if (typeof content.name == "string") {
  1722. //是字符串的生成div,打印内容
  1723. _div = $$("div", { "innerHTML": content.name }, parent);
  1724. }
  1725. //如果content类型是object类型
  1726. if (typeof content.name == "object") {
  1727. //就克隆Contet
  1728. var _dd = content.name.cloneNode(true);
  1729. parent.appendChild(_dd);
  1730. _div = _dd;
  1731. }
  1732. return _div;
  1733. };
  1734. ///<jscompress sourcefile="Tree.js" />
  1735. Namespace.register("U.MD.UI.Tree");
  1736. //json要求:
  1737. //里面需要包含id,name,deep(依赖),img_url(显示图片源),child(附属目录),为一个数值,每一个值为一个json,child的格式也是一样
  1738. //案例
  1739. // [{ id: "1", name: "文件夹", deep: 0, img_url: 'http://api.1473.cn/Uform/Image/tree/folder.png',
  1740. //child: [{ id: "2", name: "文件夹", deep: 1, img_url: "http://api.1473.cn/Uform/Image/tree/folder.png",
  1741. // child: [{ id: "5", name: "文件夹", deep: 2, img_url: "http://api.1473.cn/Uform/Image/tree/folder.png"}]
  1742. // },
  1743. //{ id: "3", name: "文件夹", deep: 1, img_url: "http://api.1473.cn/Uform/Image/tree/folder.png" },
  1744. //{ id: "4", name: "文件夹", deep: 1, img_url: "http://api.1473.cn/Uform/Image/tree/folder.png"}]
  1745. //}]
  1746. /*
  1747. 将二维数组转化为列表的方法
  1748. arr {arr} 数据源json里面需要包含id,name,deep(依赖),img_url(显示图片源),child(附属目录),外部是数组
  1749. tree {object} 要插入列表的地方
  1750. bookfun {function} 每一行目录的点击事件
  1751. leftfun {function} 右键事件
  1752. */
  1753. U.MD.UI.Tree = function (arr, treeaction, bookfun, leftfun) {
  1754. json = []; //将外变量josn清空
  1755. var _json = arr; //定义局部变量_json,值为r
  1756. for (var _i = 0; _i < _json.length; _i++) { //定义循环,循环对象为
  1757. U.MD.UI.Tree.jsonAdd(json, _json[_i]); //运行函数,生成json
  1758. }
  1759. treeaction.innerHTML = ""; //清空tree的内容
  1760. U.MD.UI.Tree.treeCreate(json, treeaction, bookfun); //运行方法,在tree中生成树状图
  1761. treeaction.oncontextmenu = function (e) {
  1762. e.preventDefault(); //去掉默认的contextmenu事件,否则会和右键事件同时出现。
  1763. };
  1764. treeaction.onmousedown = function (e) { //设置树状图的右键点击事件
  1765. if (e.button == 2) {
  1766. leftfun(e, bookfun); //运行右键事件
  1767. }
  1768. }
  1769. }
  1770. /*
  1771. 将二维数组转化为列表的方法
  1772. json {arr} 数据源json里面需要包含id,name,deep(依赖),img_url(显示图片源),child(附属目录),外部是数组
  1773. tree {object} 要插入列表的地方
  1774. bookfun {function} 没一行的点击事件
  1775. */
  1776. U.MD.UI.Tree.treeCreate = function (json, tree, onclickfun) {
  1777. for (var _i = 0; _i < json.length; _i++) { //创建循环,解析json数组,得到每一个json
  1778. var _ul = $$("ul", { className: "U_MD_UI_Tree_a " + json[_i].parentID }, tree); //创建var对象,在tree中创建ul
  1779. var _li = $$("li", { id: json[_i].id, parentid: json[_i].parentid, className: "U_MD_UI_Tree_listyle", parentid: json[_i].id, deep: json[_i].deep }, _ul); //创建var对象,在ul中创建li,id为a+jsonid
  1780. var _img = $$("img", { "onerror": U.MD.C.imgError, src: json[_i].img_url, className: "U_MD_UI_Tree_imgstyle" }, _li); //创建var对象,在li中创建img
  1781. var _span = $$("span", { innerHTML: json[_i].name, className: "spanstyle" }, _li); //创建var对象,在li中创建span,内容为json的name
  1782. _ul.style.display = "none";
  1783. if (json[_i].deep == "1") { _ul.style.display = "block" } //进行判断,判断是否为一级目录,不是的先隐藏
  1784. _img.aa = false; //定义img的一个变量,用来控制列表的展开和关闭
  1785. var _liobj = document.getElementsByClassName("U_MD_UI_Tree_a " + json[_i].parentID)[0]; //定义一个let对象为获取到的对应的li对象
  1786. _ul.style.display = _liobj.style.display; //如果是展开状态,显示ul
  1787. _li.onclick = function () {//定义li的点击事件
  1788. onclickfun(this); //执行bookconlick函数,改变book对象的内容
  1789. _liobj = document.getElementsByClassName("U_MD_UI_Tree_a " + this.parentid);
  1790. if (_img.aa === true) { //如果img.aa等于true
  1791. _img.aa = false; //修改img.aa对象为false
  1792. for (var _ii = 0; _ii < _liobj.length; _ii++) { //定义循环,循环对象为获取到的li对象集合
  1793. _liobj[_ii].style.display = "none"; //将集合隐藏
  1794. }
  1795. } else { //如果img.aa等于false
  1796. _img.aa = true; //修改img.aa等于true
  1797. for (var _ii = 0; _ii < _liobj.length; _ii++) { //定义循环,循环对象为获取到的li对象集合
  1798. _liobj[_ii].style.display = "block"; //将集合显示
  1799. }
  1800. }
  1801. }
  1802. if (json[_i].child) {
  1803. U.MD.UI.Tree.treeCreate(json[_i].child, _ul, onclickfun); //重新调用函数,参数为child的对象数组,ul对象,20的边距值,隐藏,改变的book对象
  1804. }
  1805. }
  1806. }
  1807. /*
  1808. 在json中插入json的方法
  1809. json {arr} 要被插入的json对象
  1810. addjson {json} 要查入的json对象
  1811. */
  1812. U.MD.UI.Tree.jsonAdd = function (json, addjson) {
  1813. var _addid = addjson.parentID; //定义要目的地id,等于插入json的parentID值
  1814. if (_addid == "0") { //进行判断,判断目的地id是否在第一层(0)
  1815. json[json.length] = addjson; //如果在,直接在json的第一层中加入要插入的json
  1816. return json; //结束方法,返回json对象
  1817. }
  1818. for (var _i = 0; _i < json.length; _i++) { //创建循环,解析json数组,得到每一个json
  1819. if (json[_i].id == _addid) { //进行判断,判断json的id是否等于获取到的目的地id,如果是
  1820. if (json[_i].child) { //进行判断,判断json的child有没有值
  1821. json[_i].child[json[_i].child.length] = addjson; //如果有,就在其中添加插入对象
  1822. return json; //结束方法,返回json对象
  1823. } else {//如果json中没有child
  1824. json[_i].child = [];
  1825. json[_i].child[json[_i].child.length] = addjson; //将json的child等于插入的对象
  1826. return json; //结束方法,返回json对象
  1827. }
  1828. }
  1829. if (json[_i].child) { //如果json的id不与目的地id相等且json中存在child
  1830. var _return = U.MD.UI.Tree.jsonAdd(json[_i].child, addjson); //定义函数,调用自己,变量为json的child,要插入的json
  1831. json[_i].child = _return; //json的child等于返回的json
  1832. }
  1833. }
  1834. return json; //返回json对象
  1835. }
  1836. /*
  1837. rightButton {object} 要插入li的右键对象
  1838. e {json} 点击事件的信息
  1839. */
  1840. U.MD.UI.Tree.rightOnclick = function (rightButton, e) {
  1841. var _li = $$("li", { className: "U_MD_UI_Tree_rightli", innerHTML: "新建文件夹", parentid: e.path[1].parentid, deep: parseInt(e.path[1].deep) + 1 }, rightButton); //在右键菜单中添加li
  1842. var _li1 = $$("li", { className: "U_MD_UI_Tree_rightli", innerHTML: "重命名", parentid: e.path[1].parentid, deep: parseInt(e.path[1].deep) + 1 }, rightButton); //在右键菜单中添加li
  1843. var _li2 = $$("li", { className: "U_MD_UI_Tree_rightli", innerHTML: "删除", parentid: e.path[1].parentid, deep: parseInt(e.path[1].deep + 1) }, rightButton); //在右键菜单中添加li
  1844. var _return = [];
  1845. _return[0] = _li;
  1846. _return[1] = _li1;
  1847. _return[2] = _li2;
  1848. return _return;
  1849. }
  1850. /*
  1851. 搜索arr中最高的id方法
  1852. arr {arr} 要搜索的arr对象
  1853. */
  1854. U.MD.UI.Tree.createID = function (arr) {
  1855. var _return = 0; //定义变量
  1856. for (var _i = 0; _i < arr.length; _i++) {//定义循环,循环对象为arr
  1857. if (parseInt(arr[_i].id) > _return) {//进行判断,如果arr的id比_return大
  1858. _return = parseInt(arr[_i].id); //修改_return的值
  1859. }
  1860. }
  1861. return _return; //返回变量
  1862. }
  1863. ;
  1864. ///<jscompress sourcefile="Txt.js" />
  1865. //编辑器
  1866. Namespace.register("U.MD.UI.txt");;
  1867. ///<jscompress sourcefile="Upload.js" />
  1868. ;