]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - plugins/ClientSideShorten/shorten.js
Merge branch '1.0.x' of gitorious.org:statusnet/mainline into 1.0.x
[quix0rs-gnu-social.git] / plugins / ClientSideShorten / shorten.js
1 //wrap everything in a self-executing anonymous function to avoid conflicts
2 (function(){
3
4     // smart(x) from Paul Irish
5     // http://paulirish.com/2009/throttled-smartresize-jquery-event-handler/
6
7     (function($,sr){
8
9         // debouncing function from John Hann
10         // http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/
11         var debounce = function (func, threshold, execAsap) {
12             var timeout;
13
14             return function debounced () {
15                 var obj = this, args = arguments;
16                 function delayed () {
17                     if (!execAsap)
18                         func.apply(obj, args);
19                         timeout = null;
20                 };
21
22                 if (timeout)
23                     clearTimeout(timeout);
24                 else if (execAsap)
25                     func.apply(obj, args);
26
27                 timeout = setTimeout(delayed, threshold || 100);
28             };
29         }
30         jQuery.fn[sr] = function(fn){  return fn ? this.bind('keypress', debounce(fn, 1000)) : this.trigger(sr); };
31
32     })(jQuery,'smartkeypress');
33
34     function longestWordInString(string)
35     {
36         var words = string.split(/\s/);
37         var longestWord = 0;
38         for(var i=0;i<words.length;i++)
39             if(words[i].length > longestWord) longestWord = words[i].length;
40         return longestWord;
41     }
42
43     function shorten()
44     {
45         var $noticeDataText = $('#'+SN.C.S.NoticeDataText);
46         var noticeText = $noticeDataText.val();
47
48         if(noticeText.length > maxNoticeLength || longestWordInString(noticeText) > maxUrlLength) {
49             var original = $noticeDataText.val();
50             shortenAjax = $.ajax({
51                 url: $('address .url')[0].href+'/plugins/ClientSideShorten/shorten',
52                 data: { text: $noticeDataText.val() },
53                 dataType: 'text',
54                 success: function(data) {
55                     if(original == $noticeDataText.val()) {
56                         $noticeDataText.val(data).keyup();
57                     }
58                 }
59             });
60         }
61     }
62
63     $(document).ready(function(){
64         $noticeDataText = $('#'+SN.C.S.NoticeDataText);
65         $noticeDataText.smartkeypress(function(e){
66             //if(typeof(shortenAjax) !== 'undefined') shortenAjax.abort();
67             if(e.charCode == '32') {
68                 shorten();
69             }
70         });
71         $noticeDataText.bind('paste', function() {
72             //if(typeof(shortenAjax) !== 'undefined') shortenAjax.abort();
73             setTimeout(shorten,1);
74         });
75     });
76
77 })();