diff --git a/js/clipboard.min.js b/js/clipboard.min.js new file mode 100644 index 0000000..28650f3 --- /dev/null +++ b/js/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.6 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return o={},r.m=n=[function(t,e){t.exports=function(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var o=window.getSelection(),r=document.createRange();r.selectNodeContents(t),o.removeAllRanges(),o.addRange(r),e=o.toString()}return e}},function(t,e){function n(){}n.prototype={on:function(t,e,n){var o=this.e||(this.e={});return(o[t]||(o[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var o=this;function r(){o.off(t,r),e.apply(n,arguments)}return r._=e,this.on(t,r,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),o=0,r=n.length;o'+msg+'', + delay: delay, + animationSpeed: "normal", + close: closeme, + cls: type + }); + return true; +} + +// Unused for now +function logout() { + $.ajax({ + type: "POST", + url: ajaxurl, + data: {action:'logout'}, + success: function() { + window.parent.location.href = window.parent.location.href; + } + }); +} + +// Begin the spinning animation & disable a button +function add_loading(el) { + $(el).attr("disabled", "disabled").addClass('disabled').addClass('loading'); +} + +// End spinning animation +function end_loading(el) { + $(el).removeClass('loading'); +} + +// Un-disable an element +function end_disable(el) { + $(el).removeAttr("disabled").removeClass('disabled'); +} + +// Trim long string +function trim_long_string( string, length) { + var newstring = string; + length = length || 60; + if ( newstring.length > length ) { + newstring = newstring.substr(0, (length - 5) ) + '[...]'; + } + return newstring; +} + +// Get the var=xxx from a query string +function get_var_from_query( url, varname, default_val ) { + if( varname == undefined ) { + varname = 'nonce'; + } + if( default_val == undefined ) { + default_val = ''; + } + + // Split the url on '?' and get only the params (which is element 1) + url = url.split('?')[1]; + // Now split those params on '&' so we can get each one individually (Ex. param_var=param_value) + url = url.split('&'); + // Now we have to find the varname in that array using methods that IE likes (Curse you IE!!!) + var i=0; + for( i=0; i' + data.url.display_title + '
' + data.url.display_url + ''; + } else { + var display_link = '' + data.url.display_url + ''; + } + + $("#url-" + id).html(display_link); + $("#keyword-" + id).html('' + data.url.keyword + ''); + $("#edit-" + id).fadeOut(200, function(){ + $("#edit-" + id).remove(); + $('#main_table tbody').trigger("update"); + }); + $('#keyword_'+id).val( newkeyword ); + $('#statlink-'+id).attr( 'href', data.url.shorturl+'+' ); + } + feedback(data.message, data.status); + end_loading("#edit-close-" + id); + end_disable("#edit-close-" + id); + if(data.status == 'success') { + end_disable("#actions-" + id + ' .button'); + } + } + ); +} + +// Prettify table with odd & even rows +function zebra_table() { + $("#main_table tbody tr:even").removeClass('odd').addClass('even'); + $("#main_table tbody tr:odd").removeClass('even').addClass('odd'); + $('#main_table tbody').trigger("update"); +} + +// Ready to add another URL +function add_link_reset() { + $('#add-url').val('').focus(); + $('#add-keyword').val(''); +} + +// Increment URL counters +function increment_counter() { + $('.increment').each(function(){ + $(this).html( parseInt($(this).html()) + 1); + }); +} + +// Decrement URL counters +function decrement_counter() { + $('.increment').each(function(){ + $(this).html( parseInt($(this).html()) - 1 ); + }); +} + +// Decrease number of total clicks +function decrease_total_clicks( id ) { + var total_clicks = $("#overall_tracking strong:nth-child(2)"); + total_clicks.html( parseInt( total_clicks.html() ) - parseInt( $('#clicks-' + id).html() ) ); +} + +// Toggle Share box +function toggle_share(id) { + if( $('#share-button-'+id).hasClass('disabled') ) { + return false; + } + var link = $('#url-'+id+' a:first'); + var longurl = link.attr('href'); + var title = link.attr('title'); + var shorturl = $('#keyword-'+id+' a:first').attr('href'); + + toggle_share_fill_boxes( longurl, shorturl, title ); +} + +// When "Search" is clicked, split search text to beat servers which don't like query string with "http://" +// See https://github.com/YOURLS/YOURLS/issues/1576 +function split_search_text_before_search() { + // Add 2 hidden fields and populate them with parts of search text + $("").appendTo('#filter_form'); + $("").appendTo('#filter_form'); + var search = get_protocol_slashes_and_rest( $('#filter_form input[name=search]').val() ); + $('#filter_form input[name=search]').val( search.rest ); + $('#filter_form input[name=search_protocol]').val( search.protocol ); + $('#filter_form input[name=search_slashes]').val( search.slashes ); +} + diff --git a/js/jquery-3.5.1.min.js b/js/jquery-3.5.1.min.js new file mode 100644 index 0000000..b061403 --- /dev/null +++ b/js/jquery-3.5.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0 thead th, > thead td",selectorSort:"th, td",selectorRemove:".remove-me",debug:!1,headerList:[],empties:{},strings:{},parsers:[],globalize:0,imgAttr:0},css:{table:"tablesorter",cssHasChild:"tablesorter-hasChildRow",childRow:"tablesorter-childRow",colgroup:"tablesorter-colgroup",header:"tablesorter-header",headerRow:"tablesorter-headerRow",headerIn:"tablesorter-header-inner",icon:"tablesorter-icon",processing:"tablesorter-processing",sortAsc:"tablesorter-headerAsc",sortDesc:"tablesorter-headerDesc",sortNone:"tablesorter-headerUnSorted"},language:{sortAsc:"Ascending sort applied, ",sortDesc:"Descending sort applied, ",sortNone:"No sort applied, ",sortDisabled:"sorting is disabled",nextAsc:"activate to apply an ascending sort",nextDesc:"activate to apply a descending sort",nextNone:"activate to remove the sort"},regex:{templateContent:/\{content\}/g,templateIcon:/\{icon\}/g,templateName:/\{name\}/i,spaces:/\s+/g,nonWord:/\W/g,formElements:/(input|select|button|textarea)/i,chunk:/(^([+\-]?(?:\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,chunks:/(^\\0|\\0$)/,hex:/^0x[0-9a-f]+$/i,comma:/,/g,digitNonUS:/[\s|\.]/g,digitNegativeTest:/^\s*\([.\d]+\)/,digitNegativeReplace:/^\s*\(([.\d]+)\)/,digitTest:/^[\-+(]?\d+[)]?$/,digitReplace:/[,.'"\s]/g},string:{max:1,min:-1,emptymin:1,emptymax:-1,zero:0,none:0,"null":0,top:!0,bottom:!1},keyCodes:{enter:13},dates:{},instanceMethods:{},setup:function(t,r){if(t&&t.tHead&&0!==t.tBodies.length&&!0!==t.hasInitialized){var e,o="",s=A(t),a=A.metadata;t.hasInitialized=!1,t.isProcessing=!0,t.config=r,A.data(t,"tablesorter",r),L.debug(r,"core")&&(console[console.group?"group":"log"]("Initializing tablesorter v"+L.version),A.data(t,"startoveralltimer",new Date)),r.supportsDataObject=((e=A.fn.jquery.split("."))[0]=parseInt(e[0],10),1':"",d.$headers=A(A.map(d.$table.find(d.selectorHeaders),function(e,t){var r,o,s,a,n,i=A(e);if(!L.getClosest(i,"tr").hasClass(d.cssIgnoreRow))return/(th|td)/i.test(e.nodeName)||(n=L.getClosest(i,"th, td"),i.attr("data-column",n.attr("data-column"))),r=L.getColumnData(d.table,d.headers,t,!0),d.headerContent[t]=i.html(),""===d.headerTemplate||i.find("."+L.css.headerIn).length||(a=d.headerTemplate.replace(L.regex.templateContent,i.html()).replace(L.regex.templateIcon,i.find("."+L.css.icon).length?"":l),d.onRenderTemplate&&(o=d.onRenderTemplate.apply(i,[t,a]))&&"string"==typeof o&&(a=o),i.html('
'+a+"
")),d.onRenderHeader&&d.onRenderHeader.apply(i,[t,d,d.$table]),s=parseInt(i.attr("data-column"),10),e.column=s,n=L.getOrder(L.getData(i,r,"sortInitialOrder")||d.sortInitialOrder),d.sortVars[s]={count:-1,order:n?d.sortReset?[1,0,2]:[1,0]:d.sortReset?[0,1,2]:[0,1],lockedOrder:!1,sortedBy:""},void 0!==(n=L.getData(i,r,"lockedOrder")||!1)&&!1!==n&&(d.sortVars[s].lockedOrder=!0,d.sortVars[s].order=L.getOrder(n)?[1,1]:[0,0]),d.headerList[t]=e,i.addClass(L.css.header+" "+d.cssHeader),L.getClosest(i,"tr").addClass(L.css.headerRow+" "+d.cssHeaderRow).attr("role","row"),d.tabIndex&&i.attr("tabindex",0),e})),d.$headerIndexed=[],r=0;r'),t=n.$table.width(),s=(o=n.$tbodies.find("tr:first").children(":visible")).length,a=0;a").css("width",r));n.$table.prepend(i)}},getData:function(e,t,r){var o,s,a="",n=A(e);return n.length?(o=!!A.metadata&&n.metadata(),s=" "+(n.attr("class")||""),void 0!==n.data(r)||void 0!==n.data(r.toLowerCase())?a+=n.data(r)||n.data(r.toLowerCase()):o&&void 0!==o[r]?a+=o[r]:t&&void 0!==t[r]?a+=t[r]:" "!==s&&s.match(" "+r+"-")&&(a=s.match(new RegExp("\\s"+r+"-([\\w-]+)"))[1]||""),A.trim(a)):""},getColumnData:function(e,t,r,o,s){if("object"!=typeof t||null===t)return t;var a,n=(e=A(e)[0]).config,i=s||n.$headers,d=n.$headerIndexed&&n.$headerIndexed[r]||i.find('[data-column="'+r+'"]:last');if(void 0!==t[r])return o?t[r]:t[i.index(d)];for(a in t)if("string"==typeof a&&d.filter(a).add(d.find(a)).length)return t[a]},isProcessing:function(e,t,r){var o=(e=A(e))[0].config,s=r||e.find("."+L.css.header);t?(void 0!==r&&0'),A.fn.detach?t.detach():t.remove();var o=A(e).find("colgroup.tablesorter-savemyplace");t.insertAfter(o),o.remove(),e.isProcessing=!1},clearTableBody:function(e){A(e)[0].config.$tbodies.children().detach()},characterEquivalents:{a:"áàâãäąå",A:"ÁÀÂÃÄĄÅ",c:"çćč",C:"ÇĆČ",e:"éèêëěę",E:"ÉÈÊËĚĘ",i:"íìİîïı",I:"ÍÌİÎÏ",o:"óòôõöō",O:"ÓÒÔÕÖŌ",ss:"ß",SS:"ẞ",u:"úùûüů",U:"ÚÙÛÜŮ"},replaceAccents:function(e){var t,r="[",o=L.characterEquivalents;if(!L.characterRegex){for(t in L.characterRegexArray={},o)"string"==typeof t&&(r+=o[t],L.characterRegexArray[t]=new RegExp("["+o[t]+"]","g"));L.characterRegex=new RegExp(r+"]")}if(L.characterRegex.test(e))for(t in o)"string"==typeof t&&(e=e.replace(L.characterRegexArray[t],t));return e},validateOptions:function(e){var t,r,o,s,a="headers sortForce sortList sortAppend widgets".split(" "),n=e.originalSettings;if(n){for(t in L.debug(e,"core")&&(s=new Date),n)if("undefined"===(o=typeof L.defaults[t]))console.warn('Tablesorter Warning! "table.config.'+t+'" option not recognized');else if("object"===o)for(r in n[t])o=L.defaults[t]&&typeof L.defaults[t][r],A.inArray(t,a)<0&&"undefined"===o&&console.warn('Tablesorter Warning! "table.config.'+t+"."+r+'" option not recognized');L.debug(e,"core")&&console.log("validate options time:"+L.benchmark(s))}},restoreHeaders:function(e){var t,r,o=A(e)[0].config,s=o.$table.find(o.selectorHeaders),a=s.length;for(t=0;t tr").children("th, td");!1===t&&0<=A.inArray("uitheme",a.widgets)&&(s.triggerHandler("applyWidgetId",["uitheme"]),s.triggerHandler("applyWidgetId",["zebra"])),n.find("tr").not(i).remove(),o="sortReset update updateRows updateAll updateHeaders updateCell addRows updateComplete sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets removeWidget destroy mouseup mouseleave "+"keypress sortBegin sortEnd resetToLoadState ".split(" ").join(a.namespace+" "),s.removeData("tablesorter").unbind(o.replace(L.regex.spaces," ")),a.$headers.add(d).removeClass([L.css.header,a.cssHeader,a.cssAsc,a.cssDesc,L.css.sortAsc,L.css.sortDesc,L.css.sortNone].join(" ")).removeAttr("data-column").removeAttr("aria-label").attr("aria-disabled","true"),i.find(a.selectorSort).unbind("mousedown mouseup keypress ".split(" ").join(a.namespace+" ").replace(L.regex.spaces," ")),L.restoreHeaders(e),s.toggleClass(L.css.table+" "+a.tableClass+" tablesorter-"+a.theme,!1===t),s.removeClass(a.namespace.slice(1)),e.hasInitialized=!1,delete e.config.cache,"function"==typeof r&&r(e),L.debug(a,"core")&&console.log("tablesorter has been removed")}}};A.fn.tablesorter=function(t){return this.each(function(){var e=A.extend(!0,{},L.defaults,t,L.instanceMethods);e.originalSettings=t,!this.hasInitialized&&L.buildTable&&"TABLE"!==this.nodeName?L.buildTable(this,e):L.setup(this,e)})},window.console&&window.console.log||(L.logs=[],console={},console.log=console.warn=console.error=console.table=function(){var e=1 + function newDatepickerHTML () { + + var years = []; + + // process year range into an array + for (var i = 0; i <= opts.endyear - opts.startyear; i ++) years[i] = opts.startyear + i; + + // build the table structure + var table = jQuery('
'); + table.append(''); + table.append(''); + table.append(''); + + // month select field + var monthselect = ''; + + // year select field + var yearselect = ''; + + jQuery("thead",table).append('« '+monthselect+yearselect+' »'); + jQuery("thead",table).append(''+l10n_cal_days[0]+''+l10n_cal_days[1]+''+l10n_cal_days[2]+''+l10n_cal_days[3]+''+l10n_cal_days[4]+''+l10n_cal_days[5]+''+l10n_cal_days[6]+''); + jQuery("tfoot",table).append(''+l10n_cal_today+' '+l10n_cal_close+''); + for (var i = 0; i < 6; i++) jQuery("tbody",table).append(''); + return table; + } + + /** get the real position of the input (well, anything really) **/ + //http://www.quirksmode.org/js/findpos.html + function findPosition (obj) { + var curleft = curtop = 0; + if (obj.offsetParent) { + do { + curleft += obj.offsetLeft; + curtop += obj.offsetTop; + } while (obj = obj.offsetParent); + return [curleft,curtop]; + } else { + return false; + } + } + + /** load the initial date and handle all date-navigation **/ + // initial calendar load (e is null) + // prevMonth & nextMonth buttons + // onchange for the select fields + function loadMonth (e, el, datepicker, chosendate) { + + // reference our years for the nextMonth and prevMonth buttons + var mo = jQuery("select[name=month]", datepicker).get(0).selectedIndex; + var yr = jQuery("select[name=year]", datepicker).get(0).selectedIndex; + var yrs = jQuery("select[name=year] option", datepicker).get().length; + + // first try to process buttons that may change the month we're on + if (e && jQuery(e.target).hasClass('prevMonth')) { + if (0 == mo && yr) { + yr -= 1; mo = 11; + jQuery("select[name=month]", datepicker).get(0).selectedIndex = 11; + jQuery("select[name=year]", datepicker).get(0).selectedIndex = yr; + } else { + mo -= 1; + jQuery("select[name=month]", datepicker).get(0).selectedIndex = mo; + } + } else if (e && jQuery(e.target).hasClass('nextMonth')) { + if (11 == mo && yr + 1 < yrs) { + yr += 1; mo = 0; + jQuery("select[name=month]", datepicker).get(0).selectedIndex = 0; + jQuery("select[name=year]", datepicker).get(0).selectedIndex = yr; + } else { + mo += 1; + jQuery("select[name=month]", datepicker).get(0).selectedIndex = mo; + } + } + + // maybe hide buttons + if (0 == mo && !yr) jQuery("span.prevMonth", datepicker).hide(); + else jQuery("span.prevMonth", datepicker).show(); + if (yr + 1 == yrs && 11 == mo) jQuery("span.nextMonth", datepicker).hide(); + else jQuery("span.nextMonth", datepicker).show(); + + // clear the old cells + var cells = jQuery("tbody td", datepicker).unbind().empty().removeClass('date'); + + // figure out what month and year to load + var m = jQuery("select[name=month]", datepicker).val(); + var y = jQuery("select[name=year]", datepicker).val(); + var d = new Date(y, m, 1); + var startindex = d.getDay(); + var numdays = monthlengths[m]; + + // http://en.wikipedia.org/wiki/Leap_year + if (1 == m && ((y%4 == 0 && y%100 != 0) || y%400 == 0)) numdays = 29; + + // test for end dates (instead of just a year range) + if (opts.startdate.constructor == Date) { + var startMonth = opts.startdate.getMonth(); + var startDate = opts.startdate.getDate(); + } + if (opts.enddate.constructor == Date) { + var endMonth = opts.enddate.getMonth(); + var endDate = opts.enddate.getDate(); + } + + // walk through the index and populate each cell, binding events too + for (var i = 0; i < numdays; i++) { + + var cell = jQuery(cells.get(i+startindex)).removeClass('chosen'); + + // test that the date falls within a range, if we have a range + if ( + (yr || ((!startDate && !startMonth) || ((i+1 >= startDate && mo == startMonth) || mo > startMonth))) && + (yr + 1 < yrs || ((!endDate && !endMonth) || ((i+1 <= endDate && mo == endMonth) || mo < endMonth)))) { + + cell + .text(i+1) + .addClass('date') + .hover( + function () { jQuery(this).addClass('over'); }, + function () { jQuery(this).removeClass('over'); }) + .click(function () { + var chosenDateObj = new Date(jQuery("select[name=year]", datepicker).val(), jQuery("select[name=month]", datepicker).val(), jQuery(this).text()); + closeIt(el, datepicker, chosenDateObj); + }); + + // highlight the previous chosen date + if (i+1 == chosendate.getDate() && m == chosendate.getMonth() && y == chosendate.getFullYear()) cell.addClass('chosen'); + } + } + } + + /** closes the datepicker **/ + // sets the currently matched input element's value to the date, if one is available + // remove the table element from the DOM + // indicate that there is no datepicker for the currently matched input element + function closeIt (el, datepicker, dateObj) { + if (dateObj && dateObj.constructor == Date) + el.val(jQuery.fn.simpleDatepicker.formatOutput(dateObj)); + datepicker.remove(); + datepicker = null; + jQuery.data(el.get(0), "simpleDatepicker", { hasDatepicker : false }); + } + + // iterate the matched nodeset + return this.each(function() { + + // functions and vars declared here are created for each matched element. so if + // your functions need to manage or access per-node state you can defined them + // here and use $this to get at the DOM element + + if ( jQuery(this).is('input') && 'text' == jQuery(this).attr('type')) { + + var datepicker; + jQuery.data(jQuery(this).get(0), "simpleDatepicker", { hasDatepicker : false }); + + // open a datepicker on the click event + jQuery(this).click(function (ev) { + + var $this = jQuery(ev.target); + + if (false == jQuery.data($this.get(0), "simpleDatepicker").hasDatepicker) { + + // store data telling us there is already a datepicker + jQuery.data($this.get(0), "simpleDatepicker", { hasDatepicker : true }); + + // validate the form's initial content for a date + var initialDate = $this.val(); + + if (initialDate && dateRegEx.test(initialDate)) { + var chosendate = new Date(initialDate); + } else if (opts.chosendate.constructor == Date) { + var chosendate = opts.chosendate; + } else if (opts.chosendate) { + var chosendate = new Date(opts.chosendate); + } else { + var chosendate = today; + } + + // insert the datepicker in the DOM + datepicker = newDatepickerHTML(); + jQuery("body").prepend(datepicker); + + // position the datepicker + var elPos = findPosition($this.get(0)); + var x = (parseInt(opts.x) ? parseInt(opts.x) : 0) + elPos[0]; + var y = (parseInt(opts.y) ? parseInt(opts.y) : 0) + elPos[1]; + jQuery(datepicker).css({ position: 'absolute', left: x, top: y }); + + // bind events to the table controls + jQuery("span", datepicker).css("cursor","pointer"); + jQuery("select", datepicker).bind('change', function () { loadMonth (null, $this, datepicker, chosendate); }); + jQuery("span.prevMonth", datepicker).click(function (e) { loadMonth (e, $this, datepicker, chosendate); }); + jQuery("span.nextMonth", datepicker).click(function (e) { loadMonth (e, $this, datepicker, chosendate); }); + jQuery("span.today", datepicker).click(function () { closeIt($this, datepicker, new Date()); }); + jQuery("span.close", datepicker).click(function () { closeIt($this, datepicker); }); + + // set the initial values for the month and year select fields + // and load the first month + jQuery("select[name=month]", datepicker).get(0).selectedIndex = chosendate.getMonth(); + jQuery("select[name=year]", datepicker).get(0).selectedIndex = Math.max(0, chosendate.getFullYear() - opts.startyear); + loadMonth(null, $this, datepicker, chosendate); + } + + }); + } + + }); + + }; + + // finally, I like to expose default plugin options as public so they can be manipulated. one + // way to do this is to add a property to the already-public plugin fn + + jQuery.fn.simpleDatepicker.formatOutput = function (dateObj) { + return (dateObj.getMonth() + 1) + "/" + dateObj.getDate() + "/" + dateObj.getFullYear(); + }; + + jQuery.fn.simpleDatepicker.defaults = { + // date string matching /^\d{1,2}\/\d{1,2}\/\d{2}|\d{4}$/ + chosendate : today, + + // date string matching /^\d{1,2}\/\d{1,2}\/\d{2}|\d{4}$/ + // or four digit year + startdate : today.getFullYear(), + enddate : today.getFullYear() + 1, + + // offset from the top left corner of the input element + x : 1, // must be in px + y : 18 // must be in px + }; + +})(jQuery); + +// Init the form +$(document).ready(function(){ + $('#date_first').simpleDatepicker({startdate: 2005, enddate: 2100}); + $('#date_second').simpleDatepicker({startdate: 2005, enddate: 2100}); + + $('#date_filter').change(function(){ + var show = $(this).val() == 'between' ? 'inline' : 'none'; + $('#date_second').css('display', show); + $('#date_and').css('display', show); + }); +}); \ No newline at end of file diff --git a/js/jquery.notifybar.js b/js/jquery.notifybar.js new file mode 100644 index 0000000..b504407 --- /dev/null +++ b/js/jquery.notifybar.js @@ -0,0 +1,97 @@ +/* +* Notify Bar - jQuery plugin +* +* Copyright (c) 2009-2010 Dmitri Smirnov +* +* Licensed under the MIT license: +* http://www.opensource.org/licenses/mit-license.php +* +* Version: 1.2.2 +* +* Project home: +* http://www.dmitri.me/blog/notify-bar +*/ + +/** +* param Object +*/ +jQuery.notifyBar = function(settings) { + + (function($) { + + var bar = notifyBarNS = {}; + notifyBarNS.shown = false; + + if( !settings) { + settings = {}; + } + // HTML inside bar + notifyBarNS.html = settings.html || "Your message here"; + + //How long bar will be delayed, doesn't count animation time. + notifyBarNS.delay = settings.delay || 2000; + + //How long notifyBarNS bar will be slided up and down + notifyBarNS.animationSpeed = settings.animationSpeed || 200; + + //Use own jquery object usually DIV, or use default + notifyBarNS.jqObject = settings.jqObject; + + //Set up own class + notifyBarNS.cls = settings.cls || ""; + + //close button + notifyBarNS.close = settings.close || false; + + if( notifyBarNS.jqObject) { + bar = notifyBarNS.jqObject; + notifyBarNS.html = bar.html(); + } else { + bar = jQuery("
") + .addClass("jquery-notify-bar") + .addClass(notifyBarNS.cls) + .attr("id", "__notifyBar"); + } + + bar.html(notifyBarNS.html).hide(); + var id = bar.attr("id"); + switch (notifyBarNS.animationSpeed) { + case "slow": + asTime = 600; + break; + case "normal": + asTime = 400; + break; + case "fast": + asTime = 200; + break; + default: + asTime = notifyBarNS.animationSpeed; + } + if( bar != 'object'); { + jQuery("body").prepend(bar); + } + + // Style close button in CSS file + if( notifyBarNS.close) { + bar.append(jQuery("Close [X]")); + jQuery(".notify-bar-close").click(function() { + if( bar.attr("id") == "__notifyBar") { + jQuery("#" + id).slideUp(asTime, function() { jQuery("#" + id).remove() }); + } else { + jQuery("#" + id).slideUp(asTime); + } + return false; + }); + } + + bar.slideDown(asTime); + + // If taken from DOM dot not remove just hide + if( bar.attr("id") == "__notifyBar") { + setTimeout("jQuery('#" + id + "').slideUp(" + asTime +", function() {jQuery('#" + id + "').remove()});", notifyBarNS.delay + asTime); + } else { + setTimeout("jQuery('#" + id + "').slideUp(" + asTime +", function() {jQuery('#" + id + "')});", notifyBarNS.delay + asTime); + } + +})(jQuery) }; \ No newline at end of file diff --git a/js/share.js b/js/share.js new file mode 100644 index 0000000..038ceda --- /dev/null +++ b/js/share.js @@ -0,0 +1,49 @@ +$(document).ready(function(){ + $('#tweet_body').focus(); + + $('#tweet_body').keypress(function(){ + setTimeout( function(){update_share()}, 50 ); // we're delaying, otherwise keypress() always triggers too fast before current key press actually inserts a letter?!! Go figure. + }); +}) + +function update_share() { + var text = encodeURIComponent( $('#tweet_body').val() ); + var url = encodeURIComponent( $('#copylink').val() ); + var tw = 'https://twitter.com/intent/tweet?text='+text; + var fb = 'https://www.facebook.com/share.php?u='+url ; + $('#share_tw').attr('href', tw); + $('#share_fb').attr('href', fb); + + var charcount = parseInt(280 - $('#tweet_body').val().length); + $('#charcount') + .toggleClass("negative", charcount < 0) + .text( charcount ); +} + +function share(dest) { + var url = $('#share_'+dest).attr('href'); + switch (dest) { + case 'fb': + //var url = $('#share_fb').attr('href'); + window.open( url, 'fb','toolbar=no,width=1000,height=550'); + break; + case 'tw': + //var url = $('#share_tw').attr('href'); + window.open(url, 'tw','toolbar=no,width=800,height=550'); + break; + } + return false; +} + +function init_clipboard() { + var clipboard = new ClipboardJS('#copylink', { + text: function (trigger) { + return $(trigger).val(); + } + }); + + clipboard.on('success', function () { + $('#copylink').select(); + html_pulse('#copybox h2, #copybox h3', 'Copied!'); + }); +}; \ No newline at end of file diff --git a/js/tablesorte.js b/js/tablesorte.js new file mode 100644 index 0000000..1d062ae --- /dev/null +++ b/js/tablesorte.js @@ -0,0 +1,40 @@ +// Tablesorter comes from own file now. + +var yourls_defaultsort = 2; // default column to sort on (overwrite this inline in page) +var yourls_defaultorder = 1; // default order ('asc':0, 'desc':1) to sort on (overwrite this inline in page) + +// Initialise the table to sort +$(document).ready(function(){ + if ($("#main_table").tablesorter && $("#main_table tr#nourl_found").css('display') == 'none') { + var order = {'keyword':0, 'url':1, 'timestamp':2, 'ip':3, 'clicks':4}; + var order_by = {'asc':0, 'desc':1}; + var sort_by = order[query_string('sort_by')]; + var sort_order = order_by[query_string('sort_order')]; + if( sort_by == undefined ) { + sort_by = yourls_defaultsort; + sort_order = yourls_defaultorder; + } + + $("#main_table").tablesorter({ + textExtraction: { + 1: function(node, table, cellIndex){return $(node).find("small a").text();} // Sort column "URL" by URL, not by whole cell content + }, + sortList:[[ sort_by, sort_order ]], + headers: { 5: {sorter: false} }, // no sorter on column "Actions" + widgets: ['zebra'], // prettify, see tr.normal-row and tr.alt-row in tablesorter.css + widgetOptions : { zebra : [ "normal-row", "alt-row" ] } + }); + } +}); + +// Get query string +function query_string( key ) { + default_=""; + key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); + var regex = new RegExp("[\\?&]"+key+"=([^&#]*)"); + var qs = regex.exec(window.location.href); + if(qs == null) + return yourls_defaultsort; + else + return qs[1]; +} \ No newline at end of file