/*! * jQuery Cookie Plugin v1.3.1 * https://github.com/carhartl/jquery-cookie * Copyright 2013 Klaus Hartl * Released under the MIT license */ !function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){function c(a){return h.raw?a:encodeURIComponent(a)}function d(a){return h.raw?a:decodeURIComponent(a)}function e(a){return c(h.json?JSON.stringify(a):String(a))}function f(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return a=decodeURIComponent(a.replace(b," ")),h.json?JSON.parse(a):a}catch(c){}}function g(b,c){var d=h.raw?b:f(b);return a.isFunction(c)?c(d):d}var b=/\+/g,h=a.cookie=function(b,f,i){var j,k,l,m,n,o,p,q,r;if(arguments.length>1&&!a.isFunction(f))return i=a.extend({},h.defaults,i),"number"==typeof i.expires&&(j=i.expires,k=i.expires=new Date,k.setMilliseconds(k.getMilliseconds()+864e5*j)),document.cookie=[c(b),"=",e(f),i.expires?"; expires="+i.expires.toUTCString():"",i.path?"; path="+i.path:"",i.domain?"; domain="+i.domain:"",i.secure?"; secure":""].join("");for(l=b?void 0:{},m=document.cookie?document.cookie.split("; "):[],n=0,o=m.length;o>n;n++){if(p=m[n].split("="),q=d(p.shift()),r=p.join("="),b===q){l=g(r,f);break}b||void 0===(r=g(r))||(l[q]=r)}return l};h.defaults={},a.removeCookie=function(b,c){return a.cookie(b,"",a.extend({},c,{expires:-1})),!a.cookie(b)}}); /** * Create link. * * @param string $moduleName * @param string $methodName * @param string $vars * @param string $viewType * @access public * @return string */ function createLink(moduleName, methodName, vars, viewType, isOnlyBody) { if(!viewType) viewType = config.defaultView; if(!isOnlyBody) isOnlyBody = false; if(vars) { vars = vars.split('&'); for(i = 0; i < vars.length; i ++) vars[i] = vars[i].split('='); } if(config.requestType != 'GET') { if(config.requestType == 'PATH_INFO') link = config.webRoot + moduleName + config.requestFix + methodName; if(config.requestType == 'PATH_INFO2') link = config.webRoot + 'index.php/' + moduleName + config.requestFix + methodName; if(vars) { for(i = 0; i < vars.length; i ++) link += config.requestFix + vars[i][1]; } link += '.' + viewType; } else { link = config.router + '?' + config.moduleVar + '=' + moduleName + '&' + config.methodVar + '=' + methodName + '&' + config.viewVar + '=' + viewType; if(vars) for(i = 0; i < vars.length; i ++) link += '&' + vars[i][0] + '=' + vars[i][1]; } /* if page has onlybody param then add this param in all link. the param hide header and footer. */ if((typeof(config.onlybody) != 'undefined' && config.onlybody == 'yes') || isOnlyBody) { var onlybody = config.requestType != 'GET' ? "?onlybody=yes" : '&onlybody=yes'; link = link + onlybody; } return link; } /** * Set language. * * @access public * @return void */ function selectLang(lang) { $.cookie('lang', lang, {expires:config.cookieLife, path:config.webRoot}); location.href = removeAnchor(location.href); } /** * Set theme. * * @access public * @return void */ function selectTheme(theme) { $.cookie('theme', theme, {expires:config.cookieLife, path:config.webRoot}); location.href = removeAnchor(location.href); } /** * Remove anchor from the url. * * @param string $url * @access public * @return string */ function removeAnchor(url) { pos = url.indexOf('#'); if(pos > 0) return url.substring(0, pos); return url; } /** * Init sort panel * * @access public * @return void */ function initSortPanel() { var $sortTrigger = $('#sortTrigger'); if(!$sortTrigger.length) return; var $list = $('#page > .box > .table tr'); if(!$list.length) return $sortTrigger.addClass('hidden'); var $sortPanel = $('#sortPanel'); if($sortPanel.length) { var $sortItem = $sortPanel.children('.SortUp, .SortDown').first(); var sortClass = $sortItem.hasClass('SortUp') ? 'SortUp' : 'SortDown'; $sortTrigger.removeClass('SortUp SortDown').addClass(sortClass).find('span').text($sortItem.text()); } } /** * Fix avatar has text */ (function() { var fixAvatar = function() { var $avatar = $(this); if($avatar.hasClass('avatar-no-fix')) return; var text = $.trim($avatar.text()); if(text && text.length > 1) { $avatar.text(text.substring(0, 1)); } }; $.fn.fixAvatar = function() { return this.each(fixAvatar); }; $(document).on('display.displayed', function(e, dp, $e, options) { if(options && options.$target) options.$target.find('.avatar').fixAvatar(); }); $(function() {$('.avatar').fixAvatar();}) })(); /** * Refresh content with ajax * * @param string selector * @param string url * @access public * @return void */ $.refresh = function(selector, url) { if(selector === true) selector = 'body'; var $target = $(selector || 'body'); var $tmp = $('
'); if(!url) { url = $target.data('refreshUrl') || $target.parent().data('refreshUrl') || window.location.href; } else if(url.indexOf(' ') < 1) url += ' body'; $tmp.load(url, function() { var $tmpTarget = $tmp.find(selector); $target = $target.replaceWith($tmpTarget); $tmpTarget.find('[data-skin]').skin(); $tmpTarget.find('[data-display]').display(); $tmpTarget.find('.avatar').fixAvatar(); $tmpTarget.find('.nav-auto').navAuto(); }); }; /** * Init list with actions * * @access public * @return void */ $.Display.plugs( { _listAction: function(options) { return $.extend(options, { targetDismiss: true, selector: options.selector || '.item', trigger: 'longTap' }); }, listAction: function(options) { return $.extend(options, { backdrop: true, remote: false, load: false, target: options.actionsPanel || '#actionsPanel', show: function(thisOptions) { var $target = thisOptions.$target, $element = $(thisOptions.element), actions = $element.data('actions'); $target.css('pointerEvents', 'none').children('.item').each(function() { var $item = $(this), action = actions[$item.data('action')]; if(action) { $item.removeClass('disabled').attr( { disabled: null, 'data-href': action }).data('remote', action); if($item.data('refresh')) { $item.data({refresh: '[data-id="' + $element.data('id') + '"]'}); } if($item.data('ajaxDelete')) { $item.data({ajaxDelete: '[data-id="' + $element.data('id') + '"]'}); } } else $item.addClass('disabled').attr('disabled', 'disabled'); }); $target.children('.selected').replaceWith($element.clone().attr('data-id', '').addClass('selected')); setTimeout(function(){$target.css('pointerEvents', 'auto');}, 1000); } }); }, ajaxAction: function(options) { var $element = $(options.element); var options = $.Display.plugs.messager.call(this, options); var oldTemplate = options.template; var isAjaxDelete = options.ajaxDelete; return $.extend(options, { confirm: options.confirm !== undefined ? options.confirm : (options.ajaxDelete ? lang.confirmDelete : false), remoteType: 'json', show: function(thisOptions) { return !thisOptions.confirm || confirm(thisOptions.confirm); }, template: function(response, thisOptions) { var data = $.extend(thisOptions, response); var isSuccess = data.result === 'success'; if(isSuccess) { if(data.refresh) $.refresh(data.refresh, data.refreshUrl); if(data.ajaxDelete) $(data.ajaxDelete).remove(); if($.isFunction(data.success)) data.success(response); } var locate = data.locate; if(data.resetLocate !== undefined) locate = data.resetLocate; if(locate) { setTimeout(function() { if(locate === 'self') { window.location.reload(); } else if(data.locateDisplay == 'modal') { var myDisplay = new $.Display({ display: 'modal' }); myDisplay.show({ remote: locate, placement: 'bottom'}); } else { window.location.href = locate; } }, 1500); } return data.message ? oldTemplate(data.message, $.extend(data, {type: isSuccess ? 'success' : 'danger', icon: isSuccess ? 'ok-sign' : 'exclamation-sign'})) : false; }, remoteError: function() { return {result: 'fail', message: lang.timeout || 'Network error.'}; } }); } }); /** * Disable context menu * * @param object $context * @access public * @return void */ function disableContextMenu($context) { ($context || $('.no-contextmenu')).on('contextmenu', function(e) {e.preventDefault(); e.returnValue = false; return false}); } /** * Init list with pager * * @param object $list * @access public * @return void */ function initListWithPager($list) { ($list || $('.list-with-pager')).on($.TapName, '.pager-more', function() { var $pager = $(this); if($pager.hasClass('loading')) return; $pager.addClass('loading loading-light'); var $tmp = $(''); $tmp.load($pager.data('more') + ' .list-with-pager', function(data) { var $tmpList = $tmp.find('.list'); $tmpList.children('.item').each(function() { var $tmpItem = $(this); var $item = $('[data-id="' + $tmpItem.data('id') + '"]'); if($item.length) { $item.replaceWith($tmpItem.clone()); $tmpItem.remove(); } }); $pager.parent().before($tmp.find('.list')); $pager.replaceWith($tmp.find('.pager-more')); }); }); } /** * Reverse toggle */ (function() { // http://lab.arc90.com/2008/05/22/jquery-reverse-order-plugin/#licensing $.fn.reverseOrder = function(){return this.each(function(){$(this).prependTo( $(this).parent() );});}; $(function() { $('body').on($.TapName, '[data-toggle="reverse"]', function() { var $this = $(this); $($this.data('target')).reverseOrder(); $this.find('.icon-sort-by-order, .icon-sort-by-order-alt').toggleClass('icon-sort-by-order').toggleClass('icon-sort-by-order-alt'); }); }); })(); /** * Ajax form */ (function() { $.fn.modalForm = function(options) { return $(this).each(function() { var $form = $(this); var thisOptions = $.extend($form.data(), options); if(!thisOptions.onResult && !thisOptions.onSuccess && !thisOptions.onComplete) { thisOptions.onSuccess = function(response) { if(response.result === 'success') { $.Display.dismiss(); response.locate = false; if(thisOptions.formRefresh) $.refresh(thisOptions.formRefresh); if(thisOptions.displayFrom) $.Display.all[thisOptions.displayFrom].show(); $form.find('[data-default-val]').each(function() { var $control = $(this); $control.val($control.data('defaultVal')); }); } }; } $.ajaxForm($form, thisOptions); }); } $(function() {$('.modal-form').modalForm();}); $(document).on('display.displayed', function(e, dp, $e, options) { if(options && options.$target) options.$target.find('.modal-form').modalForm(); }); })(); /** * Nav auto justified */ (function() { var winWidth = $(window).width(); $.fn.navAuto = function(options) { return $(this).each(function() { var $nav = $(this), width = 0; $nav.children('a').each(function(){width += $(this).width();}); $nav.toggleClass('justified', width < winWidth); }); }; $(function(){$('.nav-auto').navAuto();}); })(); /** * Initialization */ $(function() { /** * Submit button */ $('body').on($.TapName, '[data-submit]', function() { $($(this).data('submit')).submit(); }); /** * Auto intent headline */ var winWidth = $(window).width(); $('.headline.indent-auto').each(function() { var $this = $(this); $this.toggleClass('indent', ($.trim($this.text()).length * 20 + 100) < winWidth); }); /* * Set accent color for mobile app */ if(window.webkit && window.webkit.messageHandlers.App) { window.App = {}; window.App.setAccentColor = function(color) { window.webkit.messageHandlers.App.postMessage({method: 'setAccentColor', color: color}); } } $('body').on($.TapName, '.table tr', function(e) { if($(e.target).closest('a').length) return; if($(this).data('url')) window.location = $(this).data('url'); }) }); $(function() { if(typeof wx === 'undefined') return; wx.config( { debug: false, appId: v.appId, //此处的appId等同于企业的CorpID timestamp: iitimestamp, nonceStr: v.nonceStr, signature: v.signature, jsApiList: ['checkJsApi', 'chooseImage', 'scanQRCode'] }); wx.ready(function() { $('body').on($.TapName, '.scanQRCode', function() { wx.scanQRCode( { desc: 'scanQRCode desc', needResult: 0, scanType: ['qrCode', 'barCode'], success: function(response) { alert(response.errMsg); }, error: function(response) { if(response.errMsg.indexOf('function_not_exist') > 0){alert('版本过低请升级');} } }); }) $('body').on($.TapName, '.chooseImage', function() { wx.chooseImage( { count: 1, sizeType: ['original', 'compressed'], sourceType: ['album', 'camera'], success: function (response) { wx.uploadImage( { localId: response.localIds[0], isShowProcess: 1, success: function(res) { var imageID = window.btoa(res.serverId); var url = $('.chooseImage').data('url').replace('imageID', imageID); $.getJSON(url, function(data) { alert(data.message) }) } }) } }); }) }) }) function fixAppnav() { var winWidth = $(window).width(); var width = 0; $('#appnav a').each(function() { width += $(this).outerWidth(); }); if(width > winWidth) { $('#appnav a.moreAppnav').removeClass('hidden'); var lastNav = $('#appnav > a').not('.moreAppnav').last(); lastNav.addClass('item').css('display', lastNav.css('display')); $('#moreAppnav').prepend(""); $('#moreAppnav').prepend(lastNav); fixAppnav(); } } function fixMenu() { var winWidth = $(window).width(); var width = 0; $('#menu a').each(function() { width += $(this).outerWidth(); }); if($('#menu select').length > 0) { width += $('#menu select').outerWidth(); } if($('#menu #dateBox').length > 0) { width += $('#menu #dateBox').outerWidth(); } if(width > winWidth) { $('#menu a.moreMenu').removeClass('hidden'); var $lastMenu = $('#menu > a').not('.moreMenu').last(); $lastMenu.addClass('item').css('display', $lastMenu.css('display')); $('#moreMenu').prepend("").prepend($lastMenu); fixMenu(); } } /** * Set mailto * * @param string mailto * @param int $contactListID * @access public * @return void */ function setMailto(mailto, contactListID) { link = createLink('user', 'ajaxGetContactUsers', 'listID=' + contactListID); $.get(link, function(users) { $('#' + mailto).replaceWith(users); }); } /** * Show search drop menu. * * @param string $objectType product|project * @param int $objectID * @param string $module * @param string $method * @param string $extra * @access public * @return void */ function showSearchMenu(objectType, objectID, module, method, extra) { var main = objectType == 'branch' ? 'currentBranch' : 'currentItem'; var $menu = $('#' + main + 'DropMenu'); var searchItems = function($menu, $items, $search) { var searchText = $.trim($search.val()); $menu.removeClass('searching'); $items.removeClass('active'); if(searchText !== null && searchText.length) { $items.removeClass('show-search'); $menu.addClass('searching'); var isTag = searchText.length > 1 && (searchText[0] === ':' || searchText[0] === '@' || searchText[0] === '#'); $items.each(function() { var $item = $(this); var item = $item.data(); item.key = (item.key || '') + $item.text(); item.tag = (item.tag || '') + '#' + item.id; if((isTag && item.tag.indexOf(searchText) > -1) || item.key.indexOf(searchText) > -1) { $item.addClass('show-search'); } }); var $resultItems = $items.filter('.show-search'); if(!$resultItems.filter('.active').length) { $resultItems.first().addClass('active'); } } }; if(!$menu.data('initData')) { var remoteUrl = createLink(objectType, 'ajaxGetDropMenu', "objectID=" + objectID + "&module=" + module + "&method=" + method + "&extra=" + extra); $.get(remoteUrl, function(data) { $menu.html(data); dropMenuDisplay = new $.Display({display: 'modal', source: $menu.html(), placement: 'top'}); dropMenuDisplay.show(function() { var $menu = $('.display.modal.in'); var $search = $menu.find('#search'); var $items = $menu.find('#searchResult .list > .item'); var searchCallTask = null; $search.on('change keyup paste input propertychange', function() { clearTimeout(searchCallTask); searchCallTask = setTimeout(searchItems($menu, $items, $search), 100); }).focus(); }); }); $menu.data('initData', true); } else { dropMenuDisplay = new $.Display({display: 'modal', source: $menu.html(), placement: 'top'}); dropMenuDisplay.show(function() { var $menu = $('.display.modal.in'); var $search = $menu.find('#search'); var $items = $menu.find('#searchResult .list > .item'); var searchCallTask = null; $search.on('change keyup paste input propertychange', function() { clearTimeout(searchCallTask); searchCallTask = setTimeout(searchItems($menu, $items, $search), 100); }).focus(); }); } $('#' + main).on('click', function(e){e.stopPropagation();}); } /** * Set the max with of image. * * @access public * @return void */ function setImageSize(image, maxWidth) { /* If not set maxWidth, set it auto. */ if(!maxWidth) { bodyWidth = $('body').width(); maxWidth = bodyWidth - 470; // The side bar's width is 336, and add some margins. } if($(image).width() > maxWidth) $(image).attr('width', maxWidth); $(image).wrap(''); } /** * Adjust header title width. * * @access public * @return void */ function adjustHeaderTitleWidth() { var titleMaxWidth = $('#appbar').width() - 44 * 2 - 30; if($('#appbar #headerTitle').width() > titleMaxWidth) { $('#appbar #headerTitle').width(titleMaxWidth).css({'overflow': 'hidden', "text-overflow": 'ellipsis'}); } } function showSearchObjectID() { var reg = /[^0-9]/; var $searchBox = $('#searchBox'); var $dropmenu = $searchBox.children('.dropdown-search-menu'); var $searchQuery = $searchBox.find('#words'); var searchType = $('#searchType').val(); var refreshMenu = function() { var val = $searchQuery.val(); $dropmenu.addClass('hidden') if(val !== null && val !== "") { var isQuickGo = !reg.test(val); $dropmenu.toggleClass('show-quick-go', isQuickGo); if(isQuickGo) { $dropmenu.removeClass('with-active').find('li > a').each(function() { var $this = $(this); var isActiveType = $this.data('value') === searchType && searchType !== 'all'; $this.closest('li').toggleClass('active', isActiveType); $this.html($this.data('name') + ' #' + (val.length > 4 ? (val.substr(0, 4) + '...') : val) + ""); if(isActiveType) $dropmenu.addClass('with-active'); }); $dropmenu.removeClass('hidden') } } }; $dropmenu.on('click', 'a', function(e) { self.location.href= createLink($(this).data('value'), 'view', 'id=' + $searchQuery.val()); e.stopPropagation(); }).find('li > a').each(function() { var $this = $(this); $this.attr('data-name', $this.text()); }); $searchQuery.on('change keyup paste input propertychange', refreshMenu).on('focus', function() { setTimeout(refreshMenu, 300); }); } function computePasswordStrength(password) { if(password.length == 0) return 0; var strength = 0; var length = password.length; var uniqueChars = ''; var complexity = new Array(); for(i = 0; i < length; i++) { letter = password.charAt(i); var asc = letter.charCodeAt(); if(asc >= 48 && asc <= 57) { complexity[2] = 2; } else if((asc >= 65 && asc <= 90)) { complexity[1] = 2; } else if(asc >= 97 && asc <= 122) { complexity[0] = 1; } else { complexity[3] = 3; } if(uniqueChars.indexOf(letter) == -1) uniqueChars += letter; } if(uniqueChars.length > 4) strength += uniqueChars.length - 4; var sumComplexity = 0; var complexitySize = 0; for(i in complexity) { complexitySize += 1; sumComplexity += complexity[i]; } strength += sumComplexity + (2 * (complexitySize - 1)); if(length < 6 && strength >= 10) strength = 9; strength = strength > 29 ? 29 : strength; strength = Math.floor(strength / 10); return strength; } function setPing() { $('#hiddenwin').attr('src', createLink('misc', 'ping')); } needPing = true; $(function() { $('body').on($.TapName, '.lang-menu > a', function() { selectLang($(this).data('value')); }); if(needPing) setTimeout('setPing()', 1000 * 60 * 10); // After 10 minutes, begin ping. showSearchObjectID() adjustHeaderTitleWidth(); initSortPanel(); disableContextMenu(); initListWithPager(); fixAppnav(); fixMenu(); });