
If an element `el` does not have an `id`, `el.id` returns an (empty) string but `el.getAttribute("id")` returns `null` (at least in Opera), cf. #741 A condition has been added to catch errors (when using image or code without any attribute).
1 line
No EOL
13 KiB
JavaScript
1 line
No EOL
13 KiB
JavaScript
function BBCodeButton(t){if(t){var e=null,n=this,i=null;this.canInsert=function(){return e&&e.getTextArea()},this.getCode=function(){return i.name},this.getButtonGroup=function(){return e},this.addButtonGroup=function(t){e=t},this.insertCode=function(t){if(this.canInsert()){var n=e.getTextArea(),i=n.getSelection();n.insertTextRange("["+this.getCode()+"]"+i+"[/"+this.getCode()+"]")}},this.setHTMLElement=function(t){(i=t).onclick=function(t){return n.insertCode(this),!1}},this.getHTMLElement=function(t){return i},this.setHTMLElement(t)}}function BBCodeLinkButton(t){this.constructor(t);var e="link",n=RegExp(/[http|https|ftp|ftps]:\/\/[a-zA-Z0-9-.][a-zA-Z0-9-.]+(S+)?/);this.insertCode=function(t){if(this.canInsert()){var i=this.getButtonGroup();window.setTimeout(function(){var t=i.getTextArea(),o=t.getSelection().trim(),s=n.test(o)?window.prompt(lang.bbcode_link_url,o):window.prompt(lang.bbcode_link_url,"https://");s&&""!=s&&"https://"!=s&&"http://"!=s&&"ftp://"!=s&&"ftps://"!=s&&((""==o||n.test(o))&&(o=window.prompt(lang.bbcode_link_text,"")),null!=o&&(""!=o?t.insertTextRange("["+e+"="+s+"]"+o+"[/"+e+"]"):t.insertTextRange("["+e+"]"+s+"[/"+e+"]")))},150)}}}function BBCodePromtButton(t,e,n){this.constructor(t),n=n||"",this.insertCode=function(t){if(this.canInsert()){var i=this.getButtonGroup(),o=this.getCode();window.setTimeout(function(){var t=i.getTextArea(),s=t.getSelection().trim();if(""==s){var r=window.prompt(e,n);r&&""!=r.trim()&&r.trim()!=n&&t.insertTextRange("["+o+"]"+r+"[/"+o+"]")}else t.insertTextRange("["+o+"]"+s+"[/"+o+"]")},150)}}}function BBCodeColorChooserButton(t){this.constructor(t);for(var e=["#fff","#ccc","#c0c0c0","#999","#666","#333","#000","#fcc","#f66","#f00","#c00","#900","#600","#300","#fc9","#f96","#f90","#f60","#c60","#930","#630","#ff9","#ff6","#fc6","#fc3","#c93","#963","#633","#ffc","#ff3","#ff0","#fc0","#990","#660","#330","#9f9","#6f9","#3f3","#3c0","#090","#060","#030","#9ff","#3ff","#6cc","#0cc","#399","#366","#033","#cff","#6ff","#3cf","#36f","#33f","#009","#006","#ccf","#99f","#66c","#63f","#60c","#339","#309","#fcf","#f9f","#c6c","#c3c","#939","#636","#303"],n=document.createElement("table"),i=document.createElementWithAttributes("tbody",{},n),o=this,s=document.createElementWithAttributes("tr",{},i),r=0;r<e.length;r++){var l=document.createElementWithAttributes("td",{},s);l.style.backgroundColor=e[r],l.style.width="15px",l.style.height="15px",l.style.fontSize="15px";var u=document.createElementWithAttributes("a",{href:"#",extension:"="+e[r],onclick:function(t){return o.insertOptionCode(this),!1}},l);u.classList.add("js-display-block"),u.appendChild(document.createTextNode("\xa0")),(r+1)%7==0&&(s=document.createElementWithAttributes("tr",{},i))}this.insertOptionCode=function(t){if(this.canInsert()){var e=this.getButtonGroup(),n=e.getTextArea(),i=this.getCode();n.insertTextRange("["+i+t.extension+"]"+n.getSelection()+"[/"+i+"]"),e.getAdditionalOptionsWindow().enableOptionList(!1)}},this.insertCode=function(t){if(this.canInsert()){var e=this.getButtonGroup(),i=document.getElementPoSi(t);e.getAdditionalOptionsWindow().setOptionList(n),e.getAdditionalOptionsWindow().enableOptionList(!0,i)}}}function BBCodeOptionButton(t,e,n,i){if(this.constructor(t),e){n=n||!1,i=i||"";for(var o=document.createElement("ul"),s=this,r=0;r<e.length;r++){var l=e[r],u=document.createElementWithAttributes("li",{},o);document.createElementWithAttributes("a",{href:"#",attribute:l.attribute,onclick:function(t){return s.insertOptionCode(this),!1}},u).appendChild(document.createTextNode(l.label)),o.appendChild(u)}this.insertOptionCode=function(t){if(this.canInsert()){var e=this.getButtonGroup(),o=this.getCode(),s=this.getCode();window.setTimeout(function(){var r=e.getTextArea(),l=r.getSelection();if(null!=t.attribute&&""!=t.attribute.trim()&&("inlinecode"==t.attribute.trim().toLowerCase()&&(o=s=t.attribute),"inlinecode"!=t.attribute.trim().toLowerCase()&&(o+="="+t.attribute)),n&&""==l){var u=window.prompt(n,i);u&&""!=u.trim()&&u.trim()!=i&&r.insertTextRange("["+o+"]"+u+"[/"+s+"]")}else r.insertTextRange("["+o+"]"+l+"[/"+s+"]");e.getAdditionalOptionsWindow().enableOptionList(!1)},150)}},this.insertCode=function(t){if(this.canInsert()){var e=this.getButtonGroup(),n=document.getElementPoSi(t);e.getAdditionalOptionsWindow().setOptionList(o),e.getAdditionalOptionsWindow().enableOptionList(!0,n)}}}}function BBCodeListButton(t){this.constructor(t),this.insertCode=function(t){if(this.canInsert()){for(var e=this.getButtonGroup().getTextArea(),n=e.getSelection(),i="",o=n.split(/(\n|\r|\r\n)+/),s=0;s<o.length;s++)""!=o[s].trim()&&(i+="\r\n[*]"+o[s]);""==i.trim()&&(i="\r\n[*]...\r\n[*]...\r\n[*]..."),e.insertTextRange("\r\n[list]"+i+"\r\n[/list]\r\n")}}}function BBCodeSingleSmilieButton(t){this.constructor(t),this.insertCode=function(t){if(this.canInsert()){var e=this.getButtonGroup().getTextArea(),n=e.getSelection();e.insertTextRange(n+this.getCode()+" ")}}}function BBCodeSmilieButton(t,e){this.constructor(t,e);for(var n=this,i=document.createElementWithAttributes("ul",{id:"additional-smilies"},null),o=0;o<e.length;o++){let s=document.createElementWithAttributes("li",{},i);document.createElementWithAttributes("button",{type:"button",title:e[o].title,value:e[o].code,onclick:function(t){return n.insertButtonCode(this),!1}},s).appendChild(e[o].label)}this.insertButtonCode=function(t){if(!this.canInsert())return;var e=this.getButtonGroup(),n=e.getTextArea();let i=event.target.closest("button").getAttribute("value");n.insertTextRange(n.getSelection()+i+" "),e.getAdditionalOptionsWindow().enableOptionList(!1)},this.insertCode=function(t){if(this.canInsert()){var e=this.getButtonGroup(),n=document.getElementPoSi(t);e.getAdditionalOptionsWindow().setOptionList(i),e.getAdditionalOptionsWindow().enableOptionList(!0,n)}}}function BBCodePopUpButton(t,e,n,i){this.constructor(t),n="number"!=typeof n?350:n,i="number"!=typeof i?350:i;var o=(screen.width-n)/2,s=(screen.height-i)/4;this.insertCode=function(t){if(this.canInsert()){var r=window.open(e,"MyLittleForum","height="+i+",width="+n+",left="+o+", top="+s+",scrollbars,resizable");window.mlfBBCodeButton=this,r.focus()}}}function ButtonGroup(t){if(t){var e,n,i,o,s,r=t.elements.text;r||(r=document.createElementWithAttributes("textarea",{name:"text",id:"text",cols:80,rows:20},t));var l=!1,u=[],a=null,c=this;t.onsubmit=function(e){var n="";return(t.elements.name_required&&t.elements.name&&""==t.elements.name.value.trim()&&(n+="- "+lang.error_no_name+"\n"),t.elements.subject&&""==t.elements.subject.value.trim()&&(n+="- "+lang.error_no_subject+"\n"),t.elements.text_required&&t.elements.text&&""==t.elements.text.value.trim()&&(n+="- "+lang.error_no_text+"\n"),t.elements.terms_of_use_required&&t.elements.terms_of_use_agree&&!1==t.elements.terms_of_use_agree.checked&&(n+="- "+lang.terms_of_use_error_posting+"\n"),n)?(window.alert(n),!1):(document.getElementById("throbber-submit")&&document.getElementById("throbber-submit").classList.remove("js-visibility-hidden"),!0)};var d=function(t,e){if(e=e||!1,t instanceof BBCodeButton){if(t.addButtonGroup(c),e||!l)u[t.getCode()]=t;else if(u[t.getCode()]){var n=u[t.getCode()].getHTMLElement(),i=t.getHTMLElement();t.setHTMLElement(n),i.parentNode.removeChild(i),u[t.getCode()]=t}else if(!e&&l){var o=t.getHTMLElement();o.parentNode.removeChild(o)}}},f=function(t,e){var n={className:t.classes,name:t.code,type:"button",title:t.title,tabIndex:-1},i=""==t.code.trim()?"bbcodebutton":"bbcodebutton-"+t.code;t.isSmilie?n.isSmilie=t.isSmilie:n.id=i;var o=document.createElementWithAttributes("button",n,e),s=document.createElement("span");"string"==typeof t.label?s.appendChild(document.createTextNode(t.label)):s.appendChild(t.label),o.appendChild(s),d(h(o,t.childs))},h=function(t,e){var n=null,i=t&&t.name?t.name.toLowerCase():"";switch(i){case"link":n=new BBCodeLinkButton(t);break;case"img":n=e&&e.length>1?new BBCodeOptionButton(t,e,lang.bbcode_image_url,"https://"):new BBCodePromtButton(t,lang.bbcode_image_url,"https://");break;case"color":n=new BBCodeColorChooserButton(t);break;case"list":n=new BBCodeListButton(t);break;case"upload":n=new BBCodePopUpButton(t,"index.php?mode=upload_image",settings.upload_popup_width,settings.upload_popup_height);break;case"tex":n=new BBCodePromtButton(t,lang.bbcode_tex_code);break;default:n=t.isSmilie&&e&&e.length>0?new BBCodeSmilieButton(t,e):t.isSmilie?new BBCodeSingleSmilieButton(t):e&&e.length>1?new BBCodeOptionButton(t,e):new BBCodeButton(t)}return n},p=function(t){l=!1;var e=(t=t||!1)?"smiley-bar":"bbcode-bar";if(document.getElementById(e)){var n=document.getElementById(e).getElementsByTagName("button");if(n&&n.length>0)for(var i=n.length,o=0;o<i;o++)l=!0,n[o].isSmilie=t,d(h(n[o],null),!0)}};this.getTextArea=function(){return r},this.getAdditionalOptionsWindow=function(){return a};a=(e=document.createElementWithAttributes("div",{id:"bbcode-options"},document.body),n=document.createElementWithAttributes("div",{},e),e.classList.add("js-display-none"),i=null,e.onmouseover=function(t){i&&window.clearTimeout(i)},e.onmouseout=function(t){var e=(t=t||window.event).relatedTarget||t.toElement||!1,n=this;return this.contains(e)||(i=window.setTimeout(function(){n.enableOptionList(!1)},125)),!1},e.setOptionList=function(t){n.firstChild?n.replaceChild(t,n.firstChild):n.appendChild(t)},e.enableOptionList=function(t,e){e&&(this.style.left=e.left+"px",this.style.top=e.top+"px"),t?this.classList.remove("js-display-none"):this.classList.add("js-display-none")},o=window.document.onmousedown,window.document.onkeypress=function(t){"Esc"==t.key&&c.enableOptionList(!1),"function"==typeof o&&o(t)},e),function(){if(r.quote="",document.getElementById("quote")&&"true"==document.getElementById("quote").value&&(r.quote=r.value,r.value=""),r.getQuote=function(){return r.quote.trim()},""!=r.getQuote()&&document.getElementById("message")){var t=document.querySelector('label[for="text"]');if(t){var e=document.createElementWithAttributes("button",{type:"button",id:"insert-quote",title:lang.quote_title,tabIndex:-1});e.onclick=function(t){return r.value=r.getQuote()+"\r\n\r\n"+r.value,this.classList.add("js-display-none"),r.focus(),!1},e.appendChild(document.createTextNode(lang.quote_label)),t.parentNode.insertBefore(e,t.nextSibling)}}r.getSelection=function(){return(this.focus(),"number"==typeof this.selectionStart&&"number"==typeof this.selectionEnd)?this.value.substring(this.selectionStart,this.selectionEnd):document.selection&&document.selection.createRange?document.selection.createRange().text:""},r.insertTextRange=function(t){if(this.focus(),void 0!==this.selectionStart){var e=this.scrollTop,n=this.value.substring(0,this.selectionStart),i=this.value.substring(this.selectionEnd,this.textLength);this.value=n+t+i,this.selectionStart=n.length,this.selectionEnd=n.length+t.length,this.scrollTop=e,this.focus()}else if(document.selection&&document.selection.createRange){var o=document.selection.createRange();o.text=t,o.select()}else this.value+=t}}(),p(!1),function(){if(document.getElementById("bbcode-bar")){var t=document.getElementById("bbcode-bar");if(document.getElementById("bbcode-instructions")){let e=document.getElementById("bbcode-instructions").querySelectorAll("div");var n=null;for(let i of e){let o=i.querySelector("dt"),s=i.querySelectorAll("dd");if(o&&(n={code:o.getAttribute("id"),label:o.getAttribute("title"),title:o.textContent,classes:o.getAttribute("class"),childs:[]}),n&&s)for(let r of s){var l={attribute:r.getAttribute("id"),label:r.getAttribute("title")};n.childs.push(l)}n&&f(n,t)}}}}(),p(!0),function(){if(document.getElementById("smiley-bar")){var t=document.getElementById("smiley-bar");if(document.getElementById("smiley-instructions")){let e=document.getElementById("smiley-instructions").querySelectorAll("div");var n=null,i=[];for(let o of e){let s=o.querySelector("dt"),r=o.querySelectorAll("dd");if(s&&(n={code:s.textContent,title:s.getAttribute("title"),classes:s.getAttribute("class"),isSmilie:!0,childs:[]}),n&&r)for(let l of r)n.label=l.firstChild,-1!=n.classes.search(/default/)?f(n,t):i.push(n),n=null}i&&i.length>0&&f(n={code:"",title:lang.more_smilies_title,label:lang.more_smilies_label,classes:"",isSmilie:!0,childs:i},t)}}}(),s=null,(s=document.getElementById("delete_cookie"))&&(document.getFirstChildByElement(s,"a").onclick=function(e){return document.cookie=settings.session_prefix+"userdata=; expires=Thu, 01-Jan-70 00:00:01 GMT;",s.innerHTML="",t.elements.setcookie&&(t.elements.setcookie.checked=!1),!1}),document.getElementById("formatting-help")&&document.getElementById("formatting-help").classList.add("js-display-none")}}BBCodeLinkButton.prototype=new BBCodeButton,BBCodeSmilieButton.prototype=new BBCodeButton,BBCodeSingleSmilieButton.prototype=new BBCodeButton,BBCodeColorChooserButton.prototype=new BBCodeButton,BBCodeOptionButton.prototype=new BBCodeButton,BBCodeListButton.prototype=new BBCodeButton,BBCodePopUpButton.prototype=new BBCodeButton,BBCodePromtButton.prototype=new BBCodeButton,document.addEventListener("DOMContentLoaded",function(t){"object"==typeof settings&&"object"==typeof lang&&new ButtonGroup(document.getElementById("postingform"))}); |