global.js 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754
  1. /*!
  2. * layui 官网
  3. */
  4. layui.define(['code', 'element', 'table', 'util', 'carousel', 'laytpl'], function(exports){
  5. var $ = layui.jquery
  6. ,element = layui.element
  7. ,layer = layui.layer
  8. ,form = layui.form
  9. ,util = layui.util
  10. ,carousel = layui.carousel
  11. ,laytpl = layui.laytpl
  12. ,device = layui.device()
  13. ,$win = $(window), $body = $('body');
  14. //ban iframe
  15. ;!function(){self!==parent&&(location.href="//www.baidu.com/")}();
  16. //阻止 IE7 以下访问
  17. if(device.ie && device.ie < 8){
  18. layer.alert('Layui 最低支持 IE8,而您当前使用的是古老的 IE'+ device.ie + ',体验将会不佳!');
  19. }
  20. var home = {
  21. //获取高级浏览器
  22. getBrowser: function(){
  23. var ua = navigator.userAgent.toLocaleLowerCase()
  24. ,mimeType = function(option, value) {
  25. var mimeTypes = navigator.mimeTypes;
  26. for (var key in mimeTypes) {
  27. if (mimeTypes[key][option] && mimeTypes[key][option].indexOf(value) !== -1) {
  28. return true;
  29. }
  30. }
  31. return;
  32. };
  33. if(ua.match(/chrome/)){
  34. if(mimeType('type', '360') || mimeType('type', 'sogou')) return;
  35. if(ua.match(/edg\//)) return 'edge';
  36. return 'chrome'
  37. } else if(ua.match(/firefox/)){
  38. return 'firefox';
  39. }
  40. return;
  41. }
  42. };
  43. var elemHome = $('#LAY_home');
  44. var local = layui.data('layui');
  45. //初始弹窗
  46. layer.ready(function(){
  47. //升级提示
  48. if(local.version && local.version !== layui.v){
  49. layer.open({
  50. type: 1
  51. ,title: '更新提示' //不显示标题栏
  52. ,closeBtn: false
  53. ,area: '300px;'
  54. ,shade: false
  55. ,offset: 'b'
  56. ,id: 'LAY_updateNotice' //设定一个id,防止重复弹出
  57. ,btn: ['更新日志', '我知道了']
  58. ,btnAlign: 'c'
  59. ,moveType: 1 //拖拽模式,0或者1
  60. ,content: ['<div class="layui-text">'
  61. ,'layui 已发布新版本::<strong style="padding-right: 10px; color: #fff;">v'+ layui.v + '</strong>'
  62. ,'</div>'].join('')
  63. ,skin: 'layui-layer-notice'
  64. ,yes: function(index){
  65. layer.close(index);
  66. setTimeout(function(){
  67. location.href = '/doc/base/changelog.html';
  68. }, 500);
  69. }
  70. ,end: function(){
  71. layui.data('layui', {
  72. key: 'version'
  73. ,value: layui.v
  74. });
  75. }
  76. });
  77. }
  78. layui.data('layui', {
  79. key: 'version'
  80. ,value: layui.v
  81. });
  82. });
  83. //头部搜索
  84. ;!function(){
  85. var elemComponentSelect = $(['<select lay-search lay-filter="component">'
  86. ,'<option value="">搜索组件模块</option>'
  87. ,'<option value="element/layout.html">grid 栅格布局</option>'
  88. ,'<option value="element/layout.html#admin">layout admin 布局</option>'
  89. ,'<option value="element/color.html">color 颜色</option>'
  90. ,'<option value="element/icon.html">iconfont 字体图标</option>'
  91. ,'<option value="base/element.html#css">font 字体大小 颜色</option>'
  92. ,'<option value="element/anim.html">animation 动画</option>'
  93. ,'<option value="element/button.html">button 按钮</option>'
  94. ,'<option value="element/form.html">form 表单组</option>'
  95. ,'<option value="element/form.html#input">input 输入框</option>'
  96. ,'<option value="element/form.html#select">select 下拉选择框</option>'
  97. ,'<option value="element/form.html#checkbox">checkbox 复选框</option>'
  98. ,'<option value="element/form.html#switch">switch 开关</option>'
  99. ,'<option value="element/form.html#radio">radio 单选框</option>'
  100. ,'<option value="element/form.html#textarea">textarea 文本域</option>'
  101. ,'<option value="element/nav.html">nav 导航菜单</option>'
  102. ,'<option value="element/menu.html">menu 基础通用菜单</option>'
  103. ,'<option value="element/nav.html#breadcrumb">breadcrumb 面包屑</option>'
  104. ,'<option value="element/tab.html">tabs 选项卡</option>'
  105. ,'<option value="element/progress.html">progress 进度条</option>'
  106. ,'<option value="element/panel.html">panel 面板 / card</option>'
  107. ,'<option value="element/collapse.html">collapse 折叠面板/手风琴</option>'
  108. ,'<option value="element/table.html">table 表格元素</option>'
  109. ,'<option value="element/badge.html">badge 徽章</option>'
  110. ,'<option value="element/timeline.html">timeline 时间线</option>'
  111. ,'<option value="element/auxiliar.html#blockquote">blockquote 引用块</option>'
  112. ,'<option value="element/auxiliar.html#fieldset">fieldset 字段集</option>'
  113. ,'<option value="element/auxiliar.html#hr">hr 分割线</option>'
  114. ,'<option value="modules/layer.html">layer 弹出层/弹窗综合</option>'
  115. ,'<option value="modules/laydate.html">laydate 日期时间选择器</option>'
  116. ,'<option value="modules/laypage.html">laypage 分页</option>'
  117. ,'<option value="modules/laytpl.html">laytpl 模板引擎</option>'
  118. ,'<option value="modules/table.html">table 数据表格</option>'
  119. ,'<option value="modules/form.html">form 表单模块</option>'
  120. ,'<option value="modules/upload.html">upload 文件/图片上传</option>'
  121. ,'<option value="modules/dropdown.html">dropdown 下拉菜单</option>'
  122. ,'<option value="modules/dropdown.html#contextmenu">contextmenu 右键菜单</option>'
  123. ,'<option value="modules/transfer.html">transfer 穿梭框</option>'
  124. ,'<option value="modules/tree.html">tree 树形菜单</option>'
  125. ,'<option value="modules/colorpicker.html">colorpicker 颜色选择器</option>'
  126. ,'<option value="modules/element.html">element 常用元素操作</option>'
  127. ,'<option value="modules/slider.html">slider 滑块</option>'
  128. ,'<option value="modules/rate.html">rate 评分</option>'
  129. ,'<option value="modules/carousel.html">carousel 轮播/跑马灯</option>'
  130. ,'<option value="modules/layedit.html">layedit 富文本编辑器</option>'
  131. ,'<option value="modules/flow.html">flow 信息流/图片懒加载</option>'
  132. ,'<option value="modules/util.html">util 工具集</option>'
  133. ,'<option value="modules/code.html">code 代码文本行修饰</option>'
  134. ,'<option value="/layui/www.layui.com/layim/index.html">layim</option>'
  135. ,'<option value="/layui/www.layui.com/layuiadmin/index.html">layuiadmin</option>'
  136. ,'</select>'
  137. ,'<i class="layui-icon layui-icon-search"></i>'].join(''));
  138. $('.component').append(elemComponentSelect);
  139. form.render('select', 'LAY-site-header-component');
  140. //搜索组件
  141. form.on('select(component)', function(data){
  142. var value = data.value;
  143. location.href = /^\//.test(value) ? value : ('/doc/'+ value);
  144. });
  145. }();
  146. //顶部轮播 TIPS
  147. var notice = function(options, elemParter){
  148. var local = layui.data('layui');
  149. options = options || {};
  150. if(device.mobile) return;
  151. //是否不显示 tips
  152. var keyName = 'notice_topnav_'+ options.key
  153. ,notParter = local[keyName] && new Date().getTime() - local[keyName] < (options.tipsInterval || 1000*60*30); //默认 30 分钟出现一次
  154. if(!options.tips) layer.close(layer.tipsIndex);
  155. if(!notParter && options.tips){
  156. var tipsIndex = layer.tipsIndex = layer.tips(
  157. ['<a href="'+ options.url +'" target="_blank" style="display: block; line-height: 30px; padding: 10px; text-align: center; font-size: 14px; background-image: linear-gradient(to right,#8510FF,#D025C2,#FF8B2D,#FF0036); color: #fff; '+ (options.tipsCss || '') +'">'
  158. //阿里云经典:background-image: linear-gradient(to right,#8510FF,#D025C2,#FF8B2D,#FF0036);
  159. //阿里云活动:background-image: linear-gradient(to right,#8510FF,#D025C2,#F64E2C,#FF0036);
  160. //腾讯经典:background-image: linear-gradient(to right,#1242A4,#1746A1,#CFAE71,#1746A1);
  161. ,options.desc || ''
  162. ,'</a>'].join('')
  163. ,elemParter
  164. ,{
  165. tips: (options.tipsStyle ? new Function('return '+ options.tipsStyle)() : [3, '#9F17E9'])
  166. //阿里云经典:[3, '#9F17E9']
  167. //腾讯云经典:[3, '#1443A3'] //[3, '#803ED9']
  168. ,skin: 'layui-hide-xs'
  169. ,maxWidth: 320
  170. ,time: 0
  171. ,anim: 5
  172. ,tipeMore: true
  173. ,success: function(layero, index){
  174. layero.find('.layui-layer-content').css({
  175. 'padding': 0
  176. });
  177. layero.find('a').on('click', function(){
  178. elemParter.trigger('click');
  179. });
  180. //隐藏小箭头
  181. var tipsG = layero.find('.layui-layer-TipsG');
  182. if(tipsG.css('left') !== '5px'){
  183. tipsG.hide();
  184. }
  185. //移动端样式
  186. if(elemParter.parent().css('display') === 'none'){
  187. layero.css({
  188. left: '50%'
  189. ,top: '80px'
  190. ,'margin-left': -(layero.width()/2)
  191. });
  192. tipsG.hide();
  193. }
  194. }
  195. }
  196. )
  197. //点击链接
  198. elemParter.on('click', function(){
  199. layui.data('layui', {
  200. key: keyName
  201. ,value: new Date().getTime()
  202. });
  203. layer.close(tipsIndex);
  204. });
  205. }
  206. };
  207. //头部轮播
  208. ;!function(){
  209. var noticeElem = $('.site-notice');
  210. if(device.mobile || !noticeElem[0]) return;
  211. (function(data){
  212. data = data || [];
  213. data = layui.sort(data, 'sort', true); //优先级排序
  214. var tpl = ['{{# if(d.length > 0){ }}'
  215. ,'<div class="layui-carousel" id="layui-spm-event-parter" lay-filter="site-top-carousel">'
  216. ,'<div carousel-item>'
  217. ,'{{# layui.each(d, function(index, v){ '
  218. ,'var tg = v.ad ? "tg" : "";'
  219. ,'var style = v.tipsCss || "";'
  220. ,'}}'
  221. ,'<div>'
  222. ,'<a href="{{ v.url }}" target="_blank" class="{{ tg }} tg-{{ v.key }}" data-tips="{{ v.tips }}">'
  223. ,'<cite style="{{ style }}">{{ v.title }} {{# if(v.hot){ }}<span class="layui-badge-dot" style="margin-top: -5px;"></span>{{# } }}</cite>'
  224. ,'</a>'
  225. ,'<style>'
  226. ,'{{# if(v.ad){ }} .site-notice a.tg-{{ v.key }} cite{padding-right:25px;} {{# } }}'
  227. ,'{{# if(v.ad){ }}.site-notice a.tg-{{ v.key }}:after{content:"{{ v.ad }}"} {{# } }}'
  228. ,'</style>'
  229. ,'</div>'
  230. ,'{{# }); }}'
  231. ,'</div>'
  232. ,'</div>'
  233. ,'{{# } }}'].join('');
  234. laytpl(tpl).render(data, function(html){
  235. var elem = '.site-notice .layui-carousel';
  236. noticeElem.html(html);
  237. //轮播实例
  238. carousel.render({
  239. elem: elem
  240. ,width: '100%' //设置容器宽度
  241. ,height: '100%'
  242. ,arrow: 'none' //始终显示箭头
  243. ,indicator: 'none' //指示器位置
  244. ,anim: 'fade' //切换动画方式
  245. ,interval: 5000 //自动切换的时间间隔
  246. });
  247. notice(data[0], $(elem).children('div').children('div').eq(0).find('a'));
  248. carousel.on('change(site-top-carousel)', function(obj){
  249. notice(data[obj.index], obj.item.find('a'));
  250. });
  251. });
  252. })([{"classname":"toptg","key":"toptg-notice","title":"layui 官网下线公告","url":layui.cache.dir + "../../../www.layui.com/about/notice.html","CONFIG_TIME":"9/26/2021, 6:25:48 PM","tips":"","tipsCss":"background-image: linear-gradient(to right,#359FD4,#36B5C8,#25D8AB","hot":"1"}]);
  253. }();
  254. //头部动态导航
  255. ;!function(){
  256. var elemNavTop = $('#LAY_NAV_TOP')
  257. ,browser = home.getBrowser();
  258. if(!(browser === 'edge' || browser === 'chrome' || browser === 'firefox')) return;
  259. if(!elemNavTop[0]) return;
  260. (function(data){
  261. data = data || [];
  262. data = data[0] || {};
  263. var content = data.content;
  264. if(!content) return;
  265. elemNavTop.append(content);
  266. elemNavTop.find('.layui-nav-bar').remove();
  267. elemNavTop.find('.layui-nav-item').off('mouseenter').off('mouseleave')
  268. element.render('nav');
  269. })([{"classname":"toptg","key":"toptg-notice","title":"layui 官网下线公告","url":layui.cache.dir + "../../../www.layui.com/about/notice.html","CONFIG_TIME":"9/26/2021, 6:25:48 PM","tips":"","tipsCss":"background-image: linear-gradient(to right,#359FD4,#36B5C8,#25D8AB","hot":"1"}]);
  270. }();
  271. //弹出公告
  272. ;!function(){
  273. local.popup_notice = new Date('2021-10-13 00:00:00').getTime();
  274. (function(data){
  275. data = data || [];
  276. data = data[0] || {};
  277. var content = data.content;
  278. if(!content) return;
  279. var hasClickNotice = local.popup_notice && new Date().getTime() - local.popup_notice < (data.tipsInterval || 1000*60*60*24*3);
  280. if(hasClickNotice) return;
  281. setTimeout(function(){
  282. layer.open({
  283. type: 1
  284. ,title: data.title || '公告'
  285. ,area: device.mobile ? ['90%', '90%'] : ['800px', '520px']
  286. ,shade: false
  287. //,offset: 'b'
  288. ,id: 'LAY_Notice' //设定一个id,防止重复弹出
  289. ,skin: 'site-popup-notice'
  290. ,resize: false
  291. ,content: content
  292. ,success: function(layero, index){
  293. layero.find('a').on('click', function(){
  294. layer.close(index);
  295. });
  296. }
  297. ,end: function(){
  298. layui.data('layui', {
  299. key: 'popup_notice'
  300. ,value: new Date().getTime()
  301. });
  302. }
  303. });
  304. }, 500);
  305. })([{
  306. "classname": "popup",
  307. "key": "popup-notice",
  308. "title": "layui 重要公告",
  309. "url": "",
  310. "CONFIG_TIME": "9/26/2021, 6:26:53 PM",
  311. "content": "<style>\n.site-popup-notice{background-image: linear-gradient(to right,#359FD4,#36B5C8,#25D8AB); }\n.site-popup-notice .layui-layer-title{border-bottom-color: rgba(255,255,255,.1);}\n.site-popup-notice .site-content{color: #fff;}\n</style>\n\n<div class=\"site-content layui-text\" style=\"width: auto !important; min-height: auto; padding: 20px;\">\n<p>\n 所有对 layui 为之热爱、鞭策、奉献,和支持过的开发者:\n<br>请接受我用意念和字节传达的深深歉意。这是一个无力、无奈,甚至无助的决定:\n </p>\n \n <blockquote class=\"layui-elem-quote layui-quote-nm\" style=\"border-color: rgba(255,255,255,.3);\">\n <em style=\"font-style: normal; color: #fff !important;\">layui 官网将于 <strong>2021年10月13日</strong> 进行下线。</em>\n </blockquote>\n \n <p>届时,包括新版下载、文档和示例在内的所有框架日常维护工作,将全部迁移到 Github 和 Gitee。\n <br>此后,layui 仍会在代码托管平台所活跃,且 2.7 正式版也将在其间首发。而 layui 官网将不复存在。<br>这不是终结,只是重归到开源的纯粹中来。\n </p>\n \n <p>再者,对于 layuiAdmin 和 layim 专区,将会迁移到新站进行保留,以便老用户还能下载使用,且此二者不再面向新用户。</p>\n \n <p>过去五年,layui 有幸被应用在不计其数的 Web 平台,在前端工程化迅速席来的浪潮中,我们仍然感受到一丝来自于 jQuery 的余晖,这是一种带有热量的冰冷(反之亦可)。使命已达,便纵有万般遗憾,更与何人说?!</p>\n \n <p>最后,请大家怀揣对 Web 前端技术的热忱,去拥抱 Vue.js、拥抱 Element UI、拥抱更好的新时代,\n <br>以及,所有那些值得去追求的美好事物。</p>\n \n <p>—— 贤心</p>\n\n<div class=\"layui-btn-container\" style=\"margin-top: 15px; text-align: right;\">\n <a href=\"https://gitee.com/sentsin/layui/issues\" target=\"_blank\" rel=\"nofollow\" class=\"layui-btn\" style=\"background: rgba(255,255,255,.3);\" >我有话说</a> \n </div>\n</div>",
  312. "tipsCss": "background-image: linear-gradient(to right,#359FD4,#36B5C8,#25D8AB",
  313. "tipsInterval": local.popup_notice
  314. }]);
  315. }();
  316. //点击事件
  317. var events = {
  318. //联系方式
  319. contactInfo: function(){
  320. layer.alert('<div class="layui-text">如有合作意向,可联系:<br>邮箱:xianxin@layui-inc.com</div>', {
  321. title:'联系'
  322. ,btn: false
  323. ,shadeClose: true
  324. });
  325. }
  326. //公众号
  327. ,weixinmp: function(){
  328. layer.photos({
  329. photos: {
  330. data: [{
  331. alt: 'layui 公众号'
  332. ,"src": "https://cdn.layui.com/upload/2017_8/168_1501890714998_68095.jpg" //原图地址
  333. ,"thumb": "https://cdn.layui.com/upload/2017_8/168_1501890714998_68095.jpg" //缩略图地址
  334. }]
  335. }
  336. })
  337. }
  338. };
  339. $body.on('click', '*[site-event]', function(){
  340. var othis = $(this)
  341. ,attrEvent = othis.attr('site-event');
  342. events[attrEvent] && events[attrEvent].call(this, othis);
  343. });
  344. //切换版本
  345. form.on('select(tabVersion)', function(data){
  346. var value = data.value;
  347. location.href = value === 'new' ? '/' : ('/' + value + '/doc/');
  348. });
  349. //首页 banner
  350. setTimeout(function(){
  351. $('.site-zfj').addClass('site-zfj-anim');
  352. setTimeout(function(){
  353. $('.site-desc').addClass('site-desc-anim')
  354. }, 5000)
  355. }, 100);
  356. //数字前置补零
  357. var digit = function(num, length, end){
  358. var str = '';
  359. num = String(num);
  360. length = length || 2;
  361. for(var i = num.length; i < length; i++){
  362. str += '0';
  363. }
  364. return num < Math.pow(10, length) ? str + (num|0) : num;
  365. };
  366. //下载倒计时
  367. var setCountdown = $('#setCountdown');
  368. if($('#setCountdown')[0]){
  369. $.get('/api/getTime', function(res){
  370. util.countdown(new Date(2017,7,21,8,30,0), new Date(res.time), function(date, serverTime, timer){
  371. var str = digit(date[1]) + ':' + digit(date[2]) + ':' + digit(date[3]);
  372. setCountdown.children('span').html(str);
  373. });
  374. },'jsonp');
  375. }
  376. //Adsense
  377. ;!function(){
  378. var len = $('.adsbygoogle').length;
  379. try {
  380. for(var i = 0; i < len; i++){
  381. (adsbygoogle = window.adsbygoogle || []).push({});
  382. }
  383. } catch (e){
  384. console.error(e)
  385. }
  386. }();
  387. //展示当前版本
  388. $('.site-showv').html(layui.v);
  389. //获取Github数据
  390. var getStars = $('#getStars');
  391. if(getStars[0]){
  392. var res = {"stargazers_count":'8.1k'}
  393. getStars.html(res.stargazers_count);
  394. }
  395. //首页操作
  396. (function(){
  397. var elemDowns = $('.site-showdowns');
  398. //获取下载数
  399. if(elemDowns[0]){
  400. var res = {"number":2356878,"title":"layui下载量"};
  401. elemDowns.html(res.number);
  402. }
  403. //记录下载
  404. $('.site-down').on('click',function(e){
  405. var othis = $(this)
  406. ,local = layui.data('layui')
  407. ,setHandle = function(){
  408. };
  409. if(!local.disclaimer){
  410. e.preventDefault();
  411. layer.confirm([
  412. '<div class="layui-text" style="padding: 10px 0;">'
  413. ,'请先阅读《<a href="/about/disclaimer.html" target="_blank">layui 开源界面框架免责声明</a>》'
  414. ,',再进行下载</div>'
  415. ].join(''), {
  416. title: '下载提示'
  417. ,btn: ['已阅读', '取消']
  418. ,maxWidth: 750
  419. }, function(index){
  420. layui.data('layui', {
  421. key: 'disclaimer'
  422. ,value: new Date().getTime()
  423. });
  424. layer.close(index);
  425. othis[0].click();
  426. setHandle();
  427. });
  428. } else {
  429. setHandle();
  430. }
  431. });
  432. })();
  433. //固定Bar
  434. util.fixbar({
  435. showHeight: 60
  436. ,css: function(){
  437. if(global.pageType === 'demo'){
  438. return {bottom: 75}
  439. }
  440. }()
  441. });
  442. //窗口scroll
  443. ;!function(){
  444. var main = $('.site-menu'), scroll = function(){
  445. var stop = $(window).scrollTop();
  446. if($(window).width() <= 992) return;
  447. var bottom = $('.footer').offset().top - $(window).height();
  448. if(stop > 60){ //211
  449. if(!main.hasClass('site-fix')){
  450. main.addClass('site-fix').css({
  451. width: main.parent().width()
  452. });
  453. }
  454. }else {
  455. if(main.hasClass('site-fix')){
  456. main.removeClass('site-fix').css({
  457. width: 'auto'
  458. });
  459. }
  460. }
  461. stop = null;
  462. };
  463. scroll();
  464. $(window).on('scroll', scroll);
  465. }();
  466. //示例页面滚动
  467. $(window).on('scroll', function(){
  468. /*
  469. var elemDate = $('.layui-laydate,.layui-colorpicker-main')
  470. if(elemDate[0]){
  471. elemDate.each(function(){
  472. var othis = $(this);
  473. if(!othis.hasClass('layui-laydate-static')){
  474. othis.remove();
  475. }
  476. });
  477. $('input').blur();
  478. }
  479. */
  480. var elemTips = $('.layui-table-tips');
  481. if(elemTips[0]) elemTips.remove();
  482. if($('.layui-layer')[0]){
  483. layer.closeAll('tips');
  484. }
  485. });
  486. //代码修饰
  487. layui.code({
  488. elem: 'pre'
  489. });
  490. //目录
  491. var siteDir = $('.site-dir');
  492. if(siteDir[0] && $(window).width() > 750){
  493. layer.ready(function(){
  494. layer.open({
  495. type: 1
  496. ,content: siteDir
  497. ,skin: 'layui-layer-dir'
  498. ,area: 'auto'
  499. ,maxHeight: $(window).height() - 300
  500. ,title: '目录'
  501. ,closeBtn: false
  502. ,offset: 'r'
  503. ,shade: false
  504. ,success: function(layero, index){
  505. layer.style(index, {
  506. marginLeft: -15
  507. });
  508. }
  509. });
  510. });
  511. siteDir.find('li').on('click', function(){
  512. var othis = $(this);
  513. othis.find('a').addClass('layui-this');
  514. othis.siblings().find('a').removeClass('layui-this');
  515. });
  516. }
  517. //在textarea焦点处插入字符
  518. var focusInsert = function(str){
  519. var start = this.selectionStart
  520. ,end = this.selectionEnd
  521. ,offset = start + str.length
  522. this.value = this.value.substring(0, start) + str + this.value.substring(end);
  523. this.setSelectionRange(offset, offset);
  524. };
  525. //演示页面
  526. $('body').on('keydown', '#LAY_editor, .site-demo-text', function(e){
  527. var key = e.keyCode;
  528. if(key === 9 && window.getSelection){
  529. e.preventDefault();
  530. focusInsert.call(this, ' ');
  531. }
  532. });
  533. var editor = $('#LAY_editor')
  534. ,iframeElem = $('#LAY_demo')
  535. ,runCodes = function(){
  536. if(!iframeElem[0]) return;
  537. var html = editor.val();
  538. var iframeDocument = iframeElem.prop('contentWindow').document;
  539. iframeDocument.open();
  540. iframeDocument.write(html);
  541. iframeDocument.close();
  542. };
  543. $('#LAY_demo_run').on('click', runCodes), runCodes();
  544. //让导航在最佳位置
  545. var setScrollTop = function(thisItem, elemScroll){
  546. if(thisItem[0]){
  547. var itemTop = thisItem.offset().top
  548. ,winHeight = $(window).height();
  549. if(itemTop > winHeight - 160){
  550. elemScroll.animate({'scrollTop': itemTop - winHeight/2}, 200);
  551. }
  552. }
  553. }
  554. //让选中的菜单保持在可视范围内
  555. util.toVisibleArea({
  556. scrollElem: $('.layui-side-scroll').eq(0)
  557. ,thisElem: $('.site-demo-nav').find('dd.layui-this')
  558. });
  559. util.toVisibleArea({
  560. scrollElem: $('.layui-side-scroll').eq(1)
  561. ,thisElem: $('.site-demo-table-nav').find('li.layui-this')
  562. });
  563. //查看代码
  564. $(function(){
  565. var DemoCode = $('#LAY_democode');
  566. DemoCode.val([
  567. DemoCode.val()
  568. ,'<body>'
  569. ,global.preview
  570. ,'\n<script src="/public/layui/dist/layui.js" charset="utf-8"></script>'
  571. ,'\n<!-- 注意:如果你直接复制所有代码到本地,上述 JS 路径需要改成你本地的 -->'
  572. ,$('#LAY_democodejs').html()
  573. ,'\n</body>\n</html>'
  574. ].join(''));
  575. });
  576. //点击查看代码选项
  577. element.on('tab(demoTitle)', function(obj){
  578. if(obj.index === 1){
  579. if(device.ie && device.ie < 9){
  580. layer.alert('强烈不推荐你通过ie8/9 查看代码!因为,所有的标签都会被格式成大写,且没有换行符,影响阅读');
  581. }
  582. }
  583. })
  584. //手机设备的简单适配
  585. var treeMobile = $('.site-tree-mobile')
  586. ,shadeMobile = $('.site-mobile-shade')
  587. treeMobile.on('click', function(){
  588. $('body').addClass('site-mobile');
  589. });
  590. shadeMobile.on('click', function(){
  591. $('body').removeClass('site-mobile');
  592. });
  593. //愚人节
  594. ;!function(){
  595. if(elemHome.data('date') === '4-1'){
  596. return
  597. if(local['20180401']) return;
  598. elemHome.addClass('site-out-up');
  599. setTimeout(function(){
  600. layer.photos({
  601. photos: {
  602. "data": [{
  603. "src": "//cdn.layui.com/upload/2018_4/168_1522515820513_397.png",
  604. }]
  605. }
  606. ,anim: 2
  607. ,shade: 1
  608. ,move: false
  609. ,end: function(){
  610. layer.msg('愚公,快醒醒!', {
  611. shade: 1
  612. }, function(){
  613. layui.data('layui', {
  614. key: '20180401'
  615. ,value: true
  616. });
  617. });
  618. }
  619. ,success: function(layero, index){
  620. elemHome.removeClass('site-out-up');
  621. layero.find('#layui-layer-photos').on('click', function(){
  622. layer.close(layero.attr('times'));
  623. }).find('.layui-layer-imgsee').remove();
  624. }
  625. });
  626. }, 1000*3);
  627. }
  628. }();
  629. //获取文档图标数据
  630. home.getIconData = function(){
  631. var $ = layui.$
  632. ,iconData = []
  633. ,iconListElem = $('.site-doc-icon li');
  634. iconListElem.each(function(){
  635. var othis = $(this);
  636. iconData.push({
  637. title: $.trim(othis.find('.doc-icon-name').text())
  638. ,fontclass: $.trim(othis.find('.doc-icon-fontclass').text())
  639. ,unicode: $.trim(othis.find('.doc-icon-code').html())
  640. });
  641. });
  642. $('.site-h1').html('<textarea style="width: 100%; height: 600px;">'+ JSON.stringify(iconData) + '</textarea>');
  643. };
  644. exports('global', home);
  645. });