Advertisement
Guest User

Untitled

a guest
Nov 20th, 2011
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. sel = getSelection();
  2. var container = document.createElement("div");
  3. container.appendChild(sel.getRangeAt(0).cloneContents());
  4. (container.innerHTML.indexOf('<li>') == 0)
  5.  
  6. function NES_convertHTMLToBB(text) {
  7.     function parse(givenQuotePos) {
  8.         function parseTag(tag) {
  9.             // tag = '<tag attr=value attr2=value2>' (u.s.w. med attr'erne)
  10.             // eller '<tag>'
  11.             var tagmatch = /^<([a-z]+)>/.exec(tag);
  12.             // Har attr, else har ikke
  13.             if (tagmatch == null) {
  14.                 var tag2 = tag.substr(tag.indexOf(' ') + 1).substr(0, tag.length - 1),
  15.                     regmatch, tagattrs = {},
  16.                     tagreg = /([^= ]+)="([^"]+)"/g;
  17.                 while (regmatch = tagreg.exec(tag2)) {
  18.                     tagattrs[regmatch[1]] = regmatch[2];
  19.                 }
  20.                 return {
  21.                     tag: /^<([a-z]+) /.exec(tag)[1],
  22.                     attr: tagattrs
  23.                 }
  24.             } else {
  25.                 return {
  26.                     tag: tagmatch[1],
  27.                     attr: null
  28.                 }
  29.             }
  30.         }
  31.        
  32.         if (typeof givenQuotePos === 'undefined')
  33.             givenQuotePos = -1;
  34.        
  35.         while (true) {
  36.             // Hvis nået slutningen
  37.             if (i >= len)
  38.                 return;
  39.            
  40.             s = text.substr(i);
  41.             l = s.indexOf('<');
  42.            
  43.             // Hvis løbet tør for HTML
  44.             if (l === -1) {
  45.                 t += s;
  46.                 return;
  47.             }
  48.            
  49.             t += text.substr(i, l);
  50.             i += s.indexOf('>') + 1;
  51.            
  52.             // Hvis nået et end-tag, else hvis nået et start-tag
  53.             if (s.substr(l + 1, 1) === '/') {
  54.                 if (givenQuotePos === -1)
  55.                     return;
  56.                 else
  57.                     return false;
  58.             } else {
  59.                 var obj = parseTag(s.substr(l, s.indexOf('>') + 1));
  60.                 switch (obj.tag) {
  61.                     case 'strong':
  62.                         t += '[b]';
  63.                         parse();
  64.                         t += '[/b]'
  65.                         break;
  66.                     case 'u':
  67.                         t += '[u]';
  68.                         parse();
  69.                         t += '[/u]'
  70.                         break;
  71.                     case 'em':
  72.                         t += '[i]';
  73.                         parse();
  74.                         t += '[/i]'
  75.                         break;
  76.                     case 's':
  77.                         t += '[s]';
  78.                         parse();
  79.                         t += '[/s]'
  80.                         break;
  81.                     case 'code':
  82.                         t += '[code]';
  83.                         parse();
  84.                         t += '[/code]'
  85.                         break;
  86.                     case 'ul':
  87.                         t += '[list]';
  88.                         parse();
  89.                         t += '[/list]'
  90.                         break;
  91.                     case 'li':
  92.                         t += '[li]';
  93.                         parse();
  94.                         t += '[/li]'
  95.                         break;
  96.                     case 'a':
  97.                         switch (obj.attr.data) {
  98.                             case 'NES_img':
  99.                                 t += '[url=' + obj.attr.href + ']' + obj.attr.href + ' (billede)[/url]';
  100.                                 i += 4;
  101.                                 break;
  102.                             case 'NES_ref':
  103.                                 t += obj.attr.href;
  104.                                 i += text.substr(i).indexOf('>') + 1;
  105.                                 break;
  106.                             default:
  107.                                 // Normal a, enten som [url] eller en url uden [url]
  108.                                 // url uden [url] bliver konverteret til en [url], men det er ikke svært at lave den rigtigt
  109.                                 t += '[url=' + obj.attr.href + ']';
  110.                                 parse();
  111.                                 t += '[/url]';
  112.                                 break;
  113.                         }
  114.                         break;
  115.                     case 'blockquote':
  116.                         t += '[quote';
  117.                         var quotePos = t.length;
  118.                         if (parse(t.length) === false) {
  119.                             t = t.substr(0, quotePos) + ']' + t.substr(quotePos);
  120.                         }
  121.                         t += '[/quote]';
  122.                         break;
  123.                     case 'cite':
  124.                         if (givenQuotePos === -1) {
  125.                             i += text.substr(i).indexOf('</cite>') + 7;
  126.                             break;
  127.                         }
  128.                        
  129.                         s = text.substr(i);
  130.                         var rem = s.match(/^<a href="([^"]+)">([^<]+)<\/a><\/cite>/);
  131.                        
  132.                         // Ingen kilde, else kilde/#-reference
  133.                         if (rem === null) {
  134.                             s = /([^<]+)</.exec(s)[1];
  135.                         } else {
  136.                             switch (rem[2]) {
  137.                                 // URL
  138.                                 case 'Kilde':
  139.                                     s = rem[1];
  140.                                     break;
  141.                                 // #1-reference
  142.                                 case rem[1]:
  143.                                     s = rem[1].substr(1);
  144.                                     break;
  145.                                 // Brugernavn (#1)-reference
  146.                                 default:
  147.                                     s = rem[2].lastIndexOf('#');
  148.                                     s = rem[2].substr(0, s) + rem[2].substr(s + 1);
  149.                                     break;
  150.                             }
  151.                         }
  152.                         t = t.substr(0, givenQuotePos) + '=' + s + ']' + t.substr(givenQuotePos);
  153.                         i += text.substr(i).indexOf('</cite>') + 7;
  154.                         givenQuotePos = -1;
  155.                         break;
  156.                     default:
  157.                         console.log('NES: Parse fejlede. Data:');
  158.                         console.log(obj);
  159.                         return;
  160.                 }
  161.             }
  162.         }
  163.     }
  164.    
  165.     text = text.replace(/<\/p><p>/g, '\n\n').replace(/<p><\/p>/g, '\n').replace(/<\/p>|<p>/g, '').replace(/<img [^>]+>/g, '').replace(/<br>/g, '\n');
  166.     var t = '',
  167.         s = '',
  168.         i = 0,
  169.         l = 0,
  170.         len = text.length;
  171.     if (text.indexOf('<li>') == 0) {
  172.         t = '[list]';
  173.         parse();
  174.         t += '[/list]';
  175.     } else
  176.         parse();
  177.     return t;
  178. }
  179.  
  180. $('#id_comment').val(NES_convertHTMLToBB(container.innerHTML));
  181. container.innerHTML
  182.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement