global.js 30 KB

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