Advertisement
rAthus

[CKEditor 3.x] limiter le nombre de caractères d'un champ

Jul 24th, 2014
375
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var head = document.getElementsByTagName('head')[0];
  2. var script = document.createElement('script');
  3. script.type = 'text/javascript';
  4. script.src = 'http://code.jquery.com/jquery-latest.min.js';
  5. script.onload = function()
  6. {
  7.     /**/
  8.     String.prototype.regexLastIndexOf = function(regex)
  9.     {
  10.         regex = (regex.global)?regex:new RegExp(regex.source,'g'+(regex.ignoreCase ?'i':'')+(regex.multiLine?'m':''));
  11.         var stringToWorkWith = this.substring(0,this.length+1);
  12.         var lastIndexOf = -1;
  13.         var nextStop = 0;
  14.         while((result = regex.exec(stringToWorkWith)) != null)
  15.         {
  16.             lastIndexOf = result.index;
  17.             regex.lastIndex = ++nextStop;
  18.         }
  19.         return lastIndexOf;
  20.     }
  21.     removeXcharsfromHTML = function(str,nb)
  22.     {
  23.         str = str.replace(/([&nbsp;|&amp;|&]*)</ig,'<').replace(/([\s\n\r\t]*)</ig,'<');
  24.         console.log(str);
  25.         for (var i=0; i<nb; i++)
  26.         {
  27.             var n = str.regexLastIndexOf(/[^<>]</);
  28.             if (n==-1)
  29.                 break;
  30.             str = str.substring(0,n)+str.substring(n+1,str.length);
  31.         }
  32.         return str;
  33.     }
  34.     var textareas_html_OK = [];
  35.     var textareas_cursorpos_OK = [];
  36.     function limit_chars(id,nb)
  37.     {
  38.         textareas_html_OK[id] = false;
  39.         textareas_cursorpos_OK[id] = false;
  40.         $('#'+id).parent().append('<div id="'+id+'-limiter"></div>');
  41.         setInterval(function()
  42.         {
  43.             var htm = CKEDITOR.instances[id].getData();
  44.             var txt = $(htm).text();
  45.             var lgt = txt.length;
  46.             var rem = nb-lgt;
  47.             if (rem>=0)
  48.             {
  49.                 textareas_html_OK[id] = htm;
  50.                 if (CKEDITOR.instances[id].getSelection().getRanges()[0])
  51.                     textareas_cursorpos_OK[id] = CKEDITOR.instances[id].getSelection().getRanges()[0].startOffset;
  52.                 $('#'+id+'-limiter').html('<span style="color: '+((rem<=10)?'#ff530d; font-weight: bold':'#000000')+';">'+((rem>0)?rem:'Aucun')+' caractère'+((rem>1)?'s':'')+' restant'+((rem>1)?'s':'')+'</span>');
  53.             }
  54.             else
  55.             {
  56.                 if (textareas_html_OK[id])
  57.                 {
  58.                     CKEDITOR.instances[id].setData(textareas_html_OK[id]);
  59.                     if (textareas_cursorpos_OK[id])
  60.                     {
  61.                         /**///alert(textareas_cursorpos_OK[id]);//ici il faudrait réussir à mettre le curseur à la bonne position
  62.                     }
  63.                 }
  64.                 else
  65.                 {
  66.                     setTimeout(function()
  67.                     {
  68.                         htm = removeXcharsfromHTML(htm,-rem);
  69.                         CKEDITOR.instances[id].setData(htm);
  70.                     },10);
  71.                 }
  72.                 $('#'+id+'-limiter').html('<b style="color:#ff0000;">Le texte est trop long de '+(-rem)+' caractère'+((rem<-1)?'s':'')+', réduisez le ou il sera tronqué !</b>');
  73.             }
  74.         },100);
  75.     }
  76.     limit_chars('entreprise_presentation',3000); // limite la longueur du champ dont l'id est "entreprise_presentation" à 3000 caractères.
  77.     limit_chars('entreprise_propositions',100); // limite la longueur du champ dont l'id est "entreprise_propositions" à 100 caractères.
  78.     /**/
  79. }
  80. head.appendChild(script);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement