tinymce-rails 3.4.6 → 3.4.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (27) hide show
  1. data/assets/precompiled/tinymce/plugins/emotions/emotions.htm +18 -17
  2. data/assets/precompiled/tinymce/plugins/emotions/js/emotions.js +21 -0
  3. data/assets/precompiled/tinymce/plugins/emotions/langs/en_dlg.js +1 -1
  4. data/assets/precompiled/tinymce/plugins/lists/editor_plugin.js +1 -1
  5. data/assets/precompiled/tinymce/plugins/lists/editor_plugin_src.js +198 -54
  6. data/assets/precompiled/tinymce/plugins/media/js/media.js +27 -16
  7. data/assets/precompiled/tinymce/plugins/media/langs/en_dlg.js +1 -1
  8. data/assets/precompiled/tinymce/plugins/media/moxieplayer.swf +0 -0
  9. data/assets/precompiled/tinymce/plugins/table/editor_plugin.js +1 -1
  10. data/assets/precompiled/tinymce/plugins/table/editor_plugin_src.js +90 -46
  11. data/assets/precompiled/tinymce/plugins/table/js/table.js +44 -10
  12. data/assets/precompiled/tinymce/plugins/table/table.htm +1 -1
  13. data/assets/precompiled/tinymce/themes/advanced/charmap.htm +5 -1
  14. data/assets/precompiled/tinymce/themes/advanced/editor_template.js +1 -1
  15. data/assets/precompiled/tinymce/themes/advanced/editor_template_src.js +6 -2
  16. data/assets/precompiled/tinymce/themes/advanced/js/charmap.js +11 -3
  17. data/assets/precompiled/tinymce/themes/advanced/js/color_picker.js +4 -4
  18. data/assets/precompiled/tinymce/themes/advanced/langs/en_dlg.js +1 -1
  19. data/assets/precompiled/tinymce/tiny_mce.js +1 -1
  20. data/assets/precompiled/tinymce/tiny_mce_jquery.js +1 -1
  21. data/assets/precompiled/tinymce/tiny_mce_jquery_src.js +544 -295
  22. data/assets/precompiled/tinymce/tiny_mce_src.js +544 -295
  23. data/assets/vendor/tinymce/tiny_mce.js +544 -295
  24. data/assets/vendor/tinymce/tiny_mce_jquery.js +544 -295
  25. data/lib/tinymce/railtie.rb +2 -2
  26. data/lib/tinymce/version.rb +2 -2
  27. metadata +5 -5
@@ -10,32 +10,33 @@
10
10
  <div align="center">
11
11
  <div class="title">{#emotions_dlg.title}:<br /><br /></div>
12
12
 
13
- <table role="presentation" border="0" cellspacing="0" cellpadding="4">
13
+ <table id="emoticon_table" role="presentation" border="0" cellspacing="0" cellpadding="4">
14
14
  <tr>
15
- <td><a href="javascript:EmotionsDialog.insert('smiley-cool.gif','emotions_dlg.cool');"><img src="img/smiley-cool.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cool}" title="{#emotions_dlg.cool}" /></a></td>
16
- <td><a href="javascript:EmotionsDialog.insert('smiley-cry.gif','emotions_dlg.cry');"><img src="img/smiley-cry.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cry}" title="{#emotions_dlg.cry}" /></a></td>
17
- <td><a href="javascript:EmotionsDialog.insert('smiley-embarassed.gif','emotions_dlg.embarassed');"><img src="img/smiley-embarassed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.embarassed}" title="{#emotions_dlg.embarassed}" /></a></td>
18
- <td><a href="javascript:EmotionsDialog.insert('smiley-foot-in-mouth.gif','emotions_dlg.foot_in_mouth');"><img src="img/smiley-foot-in-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.foot_in_mouth}" title="{#emotions_dlg.foot_in_mouth}" /></a></td>
15
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.cool}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-cool.gif','emotions_dlg.cool');"><img src="img/smiley-cool.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cool}. {#emotions_dlg.usage}" /></a></td>
16
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.cry}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-cry.gif','emotions_dlg.cry');"><img src="img/smiley-cry.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cry}. {#emotions_dlg.usage}" /></a></td>
17
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.embarassed}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-embarassed.gif','emotions_dlg.embarassed');"><img src="img/smiley-embarassed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.embarassed}. {#emotions_dlg.usage}" /></a></td>
18
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.foot_in_mouth}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-foot-in-mouth.gif','emotions_dlg.foot_in_mouth');"><img src="img/smiley-foot-in-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.foot_in_mouth}. {#emotions_dlg.usage}" /></a></td>
19
19
  </tr>
20
20
  <tr>
21
- <td><a href="javascript:EmotionsDialog.insert('smiley-frown.gif','emotions_dlg.frown');"><img src="img/smiley-frown.gif" width="18" height="18" border="0" alt="{#emotions_dlg.frown}" title="{#emotions_dlg.frown}" /></a></td>
22
- <td><a href="javascript:EmotionsDialog.insert('smiley-innocent.gif','emotions_dlg.innocent');"><img src="img/smiley-innocent.gif" width="18" height="18" border="0" alt="{#emotions_dlg.innocent}" title="{#emotions_dlg.innocent}" /></a></td>
23
- <td><a href="javascript:EmotionsDialog.insert('smiley-kiss.gif','emotions_dlg.kiss');"><img src="img/smiley-kiss.gif" width="18" height="18" border="0" alt="{#emotions_dlg.kiss}" title="{#emotions_dlg.kiss}" /></a></td>
24
- <td><a href="javascript:EmotionsDialog.insert('smiley-laughing.gif','emotions_dlg.laughing');"><img src="img/smiley-laughing.gif" width="18" height="18" border="0" alt="{#emotions_dlg.laughing}" title="{#emotions_dlg.laughing}" /></a></td>
21
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.frown}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-frown.gif','emotions_dlg.frown');"><img src="img/smiley-frown.gif" width="18" height="18" border="0" alt="{#emotions_dlg.frown}. {#emotions_dlg.usage}" /></a></td>
22
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.innocent}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-innocent.gif','emotions_dlg.innocent');"><img src="img/smiley-innocent.gif" width="18" height="18" border="0" alt="{#emotions_dlg.innocent}. {#emotions_dlg.usage}" /></a></td>
23
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.kiss}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-kiss.gif','emotions_dlg.kiss');"><img src="img/smiley-kiss.gif" width="18" height="18" border="0" alt="{#emotions_dlg.kiss}. {#emotions_dlg.usage}" /></a></td>
24
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.laughing}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-laughing.gif','emotions_dlg.laughing');"><img src="img/smiley-laughing.gif" width="18" height="18" border="0" alt="{#emotions_dlg.laughing}. {#emotions_dlg.usage}" /></a></td>
25
25
  </tr>
26
26
  <tr>
27
- <td><a href="javascript:EmotionsDialog.insert('smiley-money-mouth.gif','emotions_dlg.money_mouth');"><img src="img/smiley-money-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.money_mouth}" title="{#emotions_dlg.money_mouth}" /></a></td>
28
- <td><a href="javascript:EmotionsDialog.insert('smiley-sealed.gif','emotions_dlg.sealed');"><img src="img/smiley-sealed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.sealed}" title="{#emotions_dlg.sealed}" /></a></td>
29
- <td><a href="javascript:EmotionsDialog.insert('smiley-smile.gif','emotions_dlg.smile');"><img src="img/smiley-smile.gif" width="18" height="18" border="0" alt="{#emotions_dlg.smile}" title="{#emotions_dlg.smile}" /></a></td>
30
- <td><a href="javascript:EmotionsDialog.insert('smiley-surprised.gif','emotions_dlg.surprised');"><img src="img/smiley-surprised.gif" width="18" height="18" border="0" alt="{#emotions_dlg.surprised}" title="{#emotions_dlg.surprised}" /></a></td>
27
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.money_mouth}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-money-mouth.gif','emotions_dlg.money_mouth');"><img src="img/smiley-money-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.money_mouth}. {#emotions_dlg.usage}"/></a></td>
28
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.sealed}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-sealed.gif','emotions_dlg.sealed');"><img src="img/smiley-sealed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.sealed}. {#emotions_dlg.usage}" /></a></td>
29
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.smile}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-smile.gif','emotions_dlg.smile');"><img src="img/smiley-smile.gif" width="18" height="18" border="0" alt="{#emotions_dlg.smile}. {#emotions_dlg.usage}" /></a></td>
30
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.surprised}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-surprised.gif','emotions_dlg.surprised');"><img src="img/smiley-surprised.gif" width="18" height="18" border="0" alt="{#emotions_dlg.surprised}. {#emotions_dlg.usage}" /></a></td>
31
31
  </tr>
32
32
  <tr>
33
- <td><a href="javascript:EmotionsDialog.insert('smiley-tongue-out.gif','emotions_dlg.tongue_out');"><img src="img/smiley-tongue-out.gif" width="18" height="18" border="0" alt="{#emotions_dlg.tongue-out}" title="{#emotions_dlg.tongue_out}" /></a></td>
34
- <td><a href="javascript:EmotionsDialog.insert('smiley-undecided.gif','emotions_dlg.undecided');"><img src="img/smiley-undecided.gif" width="18" height="18" border="0" alt="{#emotions_dlg.undecided}" title="{#emotions_dlg.undecided}" /></a></td>
35
- <td><a href="javascript:EmotionsDialog.insert('smiley-wink.gif','emotions_dlg.wink');"><img src="img/smiley-wink.gif" width="18" height="18" border="0" alt="{#emotions_dlg.wink}" title="{#emotions_dlg.wink}" /></a></td>
36
- <td><a href="javascript:EmotionsDialog.insert('smiley-yell.gif','emotions_dlg.yell');"><img src="img/smiley-yell.gif" width="18" height="18" border="0" alt="{#emotions_dlg.yell}" title="{#emotions_dlg.yell}" /></a></td>
33
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.tongue-out}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-tongue-out.gif','emotions_dlg.tongue_out');"><img src="img/smiley-tongue-out.gif" width="18" height="18" border="0" alt="{#emotions_dlg.tongue-out}. {#emotions_dlg.usage}" /></a></td>
34
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.undecided}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-undecided.gif','emotions_dlg.undecided');"><img src="img/smiley-undecided.gif" width="18" height="18" border="0" alt="{#emotions_dlg.undecided}. {#emotions_dlg.usage}" /></a></td>
35
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.wink}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-wink.gif','emotions_dlg.wink');"><img src="img/smiley-wink.gif" width="18" height="18" border="0" alt="{#emotions_dlg.wink}. {#emotions_dlg.usage}" /></a></td>
36
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.yell}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-yell.gif','emotions_dlg.yell');"><img src="img/smiley-yell.gif" width="18" height="18" border="0" alt="{#emotions_dlg.yell}. {#emotions_dlg.usage}" /></a></td>
37
37
  </tr>
38
38
  </table>
39
+ <div>{#emotions_dlg.usage}</div>
39
40
  </div>
40
41
  </body>
41
42
  </html>
@@ -1,8 +1,29 @@
1
1
  tinyMCEPopup.requireLangPack();
2
2
 
3
3
  var EmotionsDialog = {
4
+ addKeyboardNavigation: function(){
5
+ var tableElm, cells, settings;
6
+
7
+ cells = tinyMCEPopup.dom.select("a.emoticon_link", "emoticon_table");
8
+
9
+ settings ={
10
+ root: "emoticon_table",
11
+ items: cells
12
+ };
13
+ cells[0].tabindex=0;
14
+ tinyMCEPopup.dom.addClass(cells[0], "mceFocus");
15
+ if (tinymce.isGecko) {
16
+ cells[0].focus();
17
+ } else {
18
+ setTimeout(function(){
19
+ cells[0].focus();
20
+ }, 100);
21
+ }
22
+ tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', settings, tinyMCEPopup.dom);
23
+ },
4
24
  init : function(ed) {
5
25
  tinyMCEPopup.resizeToInnerSize();
26
+ this.addKeyboardNavigation();
6
27
  },
7
28
 
8
29
  insert : function(file, title) {
@@ -1 +1 @@
1
- tinyMCE.addI18n('en.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert Emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue Out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money Mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in Mouth",embarassed:"Embarassed"});
1
+ tinyMCE.addI18n('en.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert Emotion",usage:"Use left and right arrows to navigate.",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue Out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money Mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in Mouth",embarassed:"Embarassed"});
@@ -1 +1 @@
1
- (function(){var e=tinymce.each,r=tinymce.dom.Event,g;function p(t,s){while(t&&(t.nodeType===8||(t.nodeType===3&&/^[ \t\n\r]*$/.test(t.nodeValue)))){t=s(t)}return t}function b(s){return p(s,function(t){return t.previousSibling})}function i(s){return p(s,function(t){return t.nextSibling})}function d(s,u,t){return s.dom.getParent(u,function(v){return tinymce.inArray(t,v)!==-1})}function n(s){return s&&(s.tagName==="OL"||s.tagName==="UL")}function c(u,v){var t,w,s;t=b(u.lastChild);while(n(t)){w=t;t=b(w.previousSibling)}if(w){s=v.create("li",{style:"list-style-type: none;"});v.split(u,w);v.insertAfter(s,w);s.appendChild(w);s.appendChild(w);u=s.previousSibling}return u}function m(t,s,u){t=a(t,s,u);return o(t,s,u)}function a(u,s,v){var t=b(u.previousSibling);if(t){return h(t,u,s?t:false,v)}else{return u}}function o(u,t,v){var s=i(u.nextSibling);if(s){return h(u,s,t?s:false,v)}else{return u}}function h(u,s,t,v){if(l(u,s,!!t,v)){return f(u,s,t)}else{if(u&&u.tagName==="LI"&&n(s)){u.appendChild(s)}}return s}function l(u,t,s,v){if(!u||!t){return false}else{if(u.tagName==="LI"&&t.tagName==="LI"){return t.style.listStyleType==="none"||j(t)}else{if(n(u)){return(u.tagName===t.tagName&&(s||u.style.listStyleType===t.style.listStyleType))||q(t)}else{if(v&&u.tagName==="P"&&t.tagName==="P"){return true}else{return false}}}}}function q(t){var s=i(t.firstChild),u=b(t.lastChild);return s&&u&&n(t)&&s===u&&(n(s)||s.style.listStyleType==="none"||j(s))}function j(u){var t=i(u.firstChild),s=b(u.lastChild);return t&&s&&t===s&&n(t)}function f(w,v,s){var u=b(w.lastChild),t=i(v.firstChild);if(w.tagName==="P"){w.appendChild(w.ownerDocument.createElement("br"))}while(v.firstChild){w.appendChild(v.firstChild)}if(s){w.style.listStyleType=s.style.listStyleType}v.parentNode.removeChild(v);h(u,t,false);return w}function k(t,u){var s;if(!u.is(t,"li,ol,ul")){s=u.getParent(t,"li");if(s){t=s}}return t}tinymce.create("tinymce.plugins.Lists",{init:function(A,y){var w=0;var t=1;var H=2;var J=3;var z=J;function C(M){return M.keyCode===9&&(A.queryCommandState("InsertUnorderedList")||A.queryCommandState("InsertOrderedList"))}function x(){var M=B();var O=M.parentNode.parentNode;var N=M.parentNode.lastChild===M;return N&&!u(O)&&K(M)}function u(M){if(n(M)){return M.parentNode&&M.parentNode.tagName==="LI"}else{return M.tagName==="LI"}}function D(){return A.selection.isCollapsed()&&K(B())}function B(){var M=A.selection.getStart();return((M.tagName=="BR"||M.tagName=="")&&M.parentNode.tagName=="LI")?M.parentNode:M}function K(M){var N=M.childNodes.length;if(M.tagName==="LI"){return N==0?true:N==1&&(M.firstChild.tagName==""||F(M)||G(M))}return false}function F(M){return tinymce.isWebKit&&M.firstChild.nodeName=="BR"}function G(M){var N=tinymce.grep(M.parentNode.childNodes,function(Q){return Q.nodeName=="LI"});var O=M==N[N.length-1];var P=M.firstChild;return tinymce.isIE9&&O&&(P.nodeValue==String.fromCharCode(160)||P.nodeValue==String.fromCharCode(32))}function L(M){return M.keyCode===13}function I(M){if(C(M)){return w}else{if(L(M)&&x()){return H}else{if(L(M)&&D()){return t}else{return J}}}}function s(M,N){if(z==w||z==t){return r.cancel(N)}}function v(P,R){var U;if(!tinymce.isGecko){return}var N=P.selection.getStart();if(R.keyCode!=8||N.tagName!=="IMG"){return}function O(Y){var Z=Y.firstChild;var X=null;do{if(!Z){break}if(Z.tagName==="LI"){X=Z}}while(Z=Z.nextSibling);return X}function W(Y,X){while(Y.childNodes.length>0){X.appendChild(Y.childNodes[0])}}U=N.parentNode.previousSibling;if(!U){return}var S;if(U.tagName==="UL"||U.tagName==="OL"){S=U}else{if(U.previousSibling&&(U.previousSibling.tagName==="UL"||U.previousSibling.tagName==="OL")){S=U.previousSibling}else{return}}var V=O(S);var M=P.dom.createRng();M.setStart(V,1);M.setEnd(V,1);P.selection.setRng(M);P.selection.collapse(true);var Q=P.selection.getBookmark();var T=N.parentNode.cloneNode(true);if(T.tagName==="P"||T.tagName==="DIV"){W(T,V)}else{V.appendChild(T)}N.parentNode.parentNode.removeChild(N.parentNode);P.selection.moveToBookmark(Q)}function E(M){var N=A.dom.getParent(M,"ol,ul");if(N!=null){var O=N.lastChild;O.appendChild(A.getDoc().createElement(""));A.selection.setCursorLocation(O,0)}}this.ed=A;A.addCommand("Indent",this.indent,this);A.addCommand("Outdent",this.outdent,this);A.addCommand("InsertUnorderedList",function(){this.applyList("UL","OL")},this);A.addCommand("InsertOrderedList",function(){this.applyList("OL","UL")},this);A.onInit.add(function(){A.editorCommands.addCommands({outdent:function(){var N=A.selection,O=A.dom;function M(P){P=O.getParent(P,O.isBlock);return P&&(parseInt(A.dom.getStyle(P,"margin-left")||0,10)+parseInt(A.dom.getStyle(P,"padding-left")||0,10))>0}return M(N.getStart())||M(N.getEnd())||A.queryCommandState("InsertOrderedList")||A.queryCommandState("InsertUnorderedList")}},"state")});A.onKeyUp.add(function(N,O){if(z==w){N.execCommand(O.shiftKey?"Outdent":"Indent",true,null);z=J;return r.cancel(O)}else{if(z==t){var M=B();var Q=N.settings.list_outdent_on_enter===true||O.shiftKey;N.execCommand(Q?"Outdent":"Indent",true,null);if(tinymce.isIE){E(M)}return r.cancel(O)}else{if(z==H){if(tinymce.isIE8){var P=N.getDoc().createTextNode("\uFEFF");N.selection.getNode().appendChild(P)}else{if(tinymce.isIE9){N.execCommand("Outdent");return r.cancel(O)}}}}}});A.onKeyDown.add(function(M,N){z=I(N)});A.onKeyDown.add(s);A.onKeyDown.add(v);A.onKeyPress.add(s)},applyList:function(y,v){var C=this,z=C.ed,I=z.dom,s=[],H=false,u=false,w=false,B,G=z.selection.getSelectedBlocks();function E(t){if(t&&t.tagName==="BR"){I.remove(t)}}function F(M){var N=I.create(y),t;function L(O){if(O.style.marginLeft||O.style.paddingLeft){C.adjustPaddingFunction(false)(O)}}if(M.tagName==="LI"){}else{if(M.tagName==="P"||M.tagName==="DIV"||M.tagName==="BODY"){K(M,function(P,O,Q){J(P,O,M.tagName==="BODY"?null:P.parentNode);t=P.parentNode;L(t);E(O)});if(M.tagName==="P"||G.length>1){I.split(t.parentNode.parentNode,t.parentNode)}m(t.parentNode,true);return}else{t=I.create("li");I.insertAfter(t,M);t.appendChild(M);L(M);M=t}}I.insertAfter(N,M);N.appendChild(M);m(N,true);s.push(M)}function J(Q,L,O){var t,P=Q,N,M;while(!I.isBlock(Q.parentNode)&&Q.parentNode!==I.getRoot()){Q=I.split(Q.parentNode,Q.previousSibling);Q=Q.nextSibling;P=Q}if(O){t=O.cloneNode(true);Q.parentNode.insertBefore(t,Q);while(t.firstChild){I.remove(t.firstChild)}t=I.rename(t,"li")}else{t=I.create("li");Q.parentNode.insertBefore(t,Q)}while(P&&P!=L){N=P.nextSibling;t.appendChild(P);P=N}if(t.childNodes.length===0){t.innerHTML='<br _mce_bogus="1" />'}F(t)}function K(Q,T){var N,R,O=3,L=1,t="br,ul,ol,p,div,h1,h2,h3,h4,h5,h6,table,blockquote,address,pre,form,center,dl";function P(X,U){var V=I.createRng(),W;g.keep=true;z.selection.moveToBookmark(g);g.keep=false;W=z.selection.getRng(true);if(!U){U=X.parentNode.lastChild}V.setStartBefore(X);V.setEndAfter(U);return !(V.compareBoundaryPoints(O,W)>0||V.compareBoundaryPoints(L,W)<=0)}function S(U){if(U.nextSibling){return U.nextSibling}if(!I.isBlock(U.parentNode)&&U.parentNode!==I.getRoot()){return S(U.parentNode)}}N=Q.firstChild;var M=false;e(I.select(t,Q),function(V){var U;if(V.hasAttribute&&V.hasAttribute("_mce_bogus")){return true}if(P(N,V)){I.addClass(V,"_mce_tagged_br");N=S(V)}});M=(N&&P(N,undefined));N=Q.firstChild;e(I.select(t,Q),function(V){var U=S(V);if(V.hasAttribute&&V.hasAttribute("_mce_bogus")){return true}if(I.hasClass(V,"_mce_tagged_br")){T(N,V,R);R=null}else{R=V}N=U});if(M){T(N,undefined,R)}}function D(t){K(t,function(M,L,N){J(M,L);E(L);E(N)})}function A(t){if(tinymce.inArray(s,t)!==-1){return}if(t.parentNode.tagName===v){I.split(t.parentNode,t);F(t);o(t.parentNode,false)}s.push(t)}function x(M){var O,N,L,t;if(tinymce.inArray(s,M)!==-1){return}M=c(M,I);while(I.is(M.parentNode,"ol,ul,li")){I.split(M.parentNode,M)}s.push(M);M=I.rename(M,"p");L=m(M,false,z.settings.force_br_newlines);if(L===M){O=M.firstChild;while(O){if(I.isBlock(O)){O=I.split(O.parentNode,O);t=true;N=O.nextSibling&&O.nextSibling.firstChild}else{N=O.nextSibling;if(t&&O.tagName==="BR"){I.remove(O)}t=false}O=N}}}e(G,function(t){t=k(t,I);if(t.tagName===v||(t.tagName==="LI"&&t.parentNode.tagName===v)){u=true}else{if(t.tagName===y||(t.tagName==="LI"&&t.parentNode.tagName===y)){H=true}else{w=true}}});if(w||u||G.length===0){B={LI:A,H1:F,H2:F,H3:F,H4:F,H5:F,H6:F,P:F,BODY:F,DIV:G.length>1?F:D,defaultAction:D}}else{B={defaultAction:x}}this.process(B)},indent:function(){var u=this.ed,w=u.dom,x=[];function s(z){var y=w.create("li",{style:"list-style-type: none;"});w.insertAfter(y,z);return y}function t(B){var y=s(B),D=w.getParent(B,"ol,ul"),C=D.tagName,E=w.getStyle(D,"list-style-type"),A={},z;if(E!==""){A.style="list-style-type: "+E+";"}z=w.create(C,A);y.appendChild(z);return z}function v(z){if(!d(u,z,x)){z=c(z,w);var y=t(z);y.appendChild(z);m(y.parentNode,false);m(y,false);x.push(z)}}this.process({LI:v,defaultAction:this.adjustPaddingFunction(true)})},outdent:function(){var v=this,u=v.ed,w=u.dom,s=[];function x(t){var z,y,A;if(!d(u,t,s)){if(w.getStyle(t,"margin-left")!==""||w.getStyle(t,"padding-left")!==""){return v.adjustPaddingFunction(false)(t)}A=w.getStyle(t,"text-align",true);if(A==="center"||A==="right"){w.setStyle(t,"text-align","left");return}t=c(t,w);z=t.parentNode;y=t.parentNode.parentNode;if(y.tagName==="P"){w.split(y,t.parentNode)}else{w.split(z,t);if(y.tagName==="LI"){w.split(y,t)}else{if(!w.is(y,"ol,ul")){w.rename(t,"p")}}}s.push(t)}}this.process({LI:x,defaultAction:this.adjustPaddingFunction(false)});e(s,m)},process:function(y){var D=this,w=D.ed.selection,z=D.ed.dom,C,u;function x(s){z.removeClass(s,"_mce_act_on");if(!s||s.nodeType!==1){return}s=k(s,z);var t=y[s.tagName];if(!t){t=y.defaultAction}t(s)}function v(s){D.splitSafeEach(s.childNodes,x)}function B(s,t){return t>=0&&s.hasChildNodes()&&t<s.childNodes.length&&s.childNodes[t].tagName==="BR"}C=w.getSelectedBlocks();if(C.length===0){C=[z.getRoot()]}u=w.getRng(true);if(!u.collapsed){if(B(u.endContainer,u.endOffset-1)){u.setEnd(u.endContainer,u.endOffset-1);w.setRng(u)}if(B(u.startContainer,u.startOffset)){u.setStart(u.startContainer,u.startOffset+1);w.setRng(u)}}if(tinymce.isIE8){var E=D.ed.selection.getNode();if(E.tagName==="LI"&&!(E.parentNode.lastChild===E)){var A=D.ed.getDoc().createTextNode("\uFEFF");E.appendChild(A)}}g=w.getBookmark();y.OL=y.UL=v;D.splitSafeEach(C,x);w.moveToBookmark(g);g=null;D.ed.execCommand("mceRepaint")},splitSafeEach:function(t,s){if(tinymce.isGecko&&(/Firefox\/[12]\.[0-9]/.test(navigator.userAgent)||/Firefox\/3\.[0-4]/.test(navigator.userAgent))){this.classBasedEach(t,s)}else{e(t,s)}},classBasedEach:function(v,u){var w=this.ed.dom,s,t;e(v,function(x){w.addClass(x,"_mce_act_on")});s=w.select("._mce_act_on");while(s.length>0){t=s.shift();w.removeClass(t,"_mce_act_on");u(t);s=w.select("._mce_act_on")}},adjustPaddingFunction:function(u){var s,v,t=this.ed;s=t.settings.indentation;v=/[a-z%]+/i.exec(s);s=parseInt(s,10);return function(w){var y,x;y=parseInt(t.dom.getStyle(w,"margin-left")||0,10)+parseInt(t.dom.getStyle(w,"padding-left")||0,10);if(u){x=y+s}else{x=y-s}t.dom.setStyle(w,"padding-left","");t.dom.setStyle(w,"margin-left",x>0?x+v:"")}},getInfo:function(){return{longname:"Lists",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/lists",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("lists",tinymce.plugins.Lists)}());
1
+ (function(){var e=tinymce.each,r=tinymce.dom.Event,g;function p(t,s){while(t&&(t.nodeType===8||(t.nodeType===3&&/^[ \t\n\r]*$/.test(t.nodeValue)))){t=s(t)}return t}function b(s){return p(s,function(t){return t.previousSibling})}function i(s){return p(s,function(t){return t.nextSibling})}function d(s,u,t){return s.dom.getParent(u,function(v){return tinymce.inArray(t,v)!==-1})}function n(s){return s&&(s.tagName==="OL"||s.tagName==="UL")}function c(u,v){var t,w,s;t=b(u.lastChild);while(n(t)){w=t;t=b(w.previousSibling)}if(w){s=v.create("li",{style:"list-style-type: none;"});v.split(u,w);v.insertAfter(s,w);s.appendChild(w);s.appendChild(w);u=s.previousSibling}return u}function m(t,s,u){t=a(t,s,u);return o(t,s,u)}function a(u,s,v){var t=b(u.previousSibling);if(t){return h(t,u,s?t:false,v)}else{return u}}function o(u,t,v){var s=i(u.nextSibling);if(s){return h(u,s,t?s:false,v)}else{return u}}function h(u,s,t,v){if(l(u,s,!!t,v)){return f(u,s,t)}else{if(u&&u.tagName==="LI"&&n(s)){u.appendChild(s)}}return s}function l(u,t,s,v){if(!u||!t){return false}else{if(u.tagName==="LI"&&t.tagName==="LI"){return t.style.listStyleType==="none"||j(t)}else{if(n(u)){return(u.tagName===t.tagName&&(s||u.style.listStyleType===t.style.listStyleType))||q(t)}else{return v&&u.tagName==="P"&&t.tagName==="P"}}}}function q(t){var s=i(t.firstChild),u=b(t.lastChild);return s&&u&&n(t)&&s===u&&(n(s)||s.style.listStyleType==="none"||j(s))}function j(u){var t=i(u.firstChild),s=b(u.lastChild);return t&&s&&t===s&&n(t)}function f(w,v,s){var u=b(w.lastChild),t=i(v.firstChild);if(w.tagName==="P"){w.appendChild(w.ownerDocument.createElement("br"))}while(v.firstChild){w.appendChild(v.firstChild)}if(s){w.style.listStyleType=s.style.listStyleType}v.parentNode.removeChild(v);h(u,t,false);return w}function k(t,u){var s;if(!u.is(t,"li,ol,ul")){s=u.getParent(t,"li");if(s){t=s}}return t}tinymce.create("tinymce.plugins.Lists",{init:function(y){var v="TABBING";var s="EMPTY";var I="ESCAPE";var z="PARAGRAPH";var M="UNKNOWN";var x=M;function E(T){return T.keyCode===tinymce.VK.TAB&&!(T.altKey||T.ctrlKey)&&(y.queryCommandState("InsertUnorderedList")||y.queryCommandState("InsertOrderedList"))}function D(){var T=y.selection.getRng();var U=T.startContainer;if(U.nodeType==3){return(T.endOffset==U.nodeValue.length)}else{if(U.nodeType==1){return T.endOffset==U.childNodes.length}}return false}function N(){var U=y.selection.getNode();var T=U.tagName==="P"&&U.parentNode.tagName==="LI"&&U.parentNode.lastChild===U;return y.selection.isCollapsed()&&T&&D()}function w(){var T=B();var V=T.parentNode.parentNode;var U=T.parentNode.lastChild===T;return U&&!t(V)&&O(T)}function t(T){if(n(T)){return T.parentNode&&T.parentNode.tagName==="LI"}else{return T.tagName==="LI"}}function F(){return y.selection.isCollapsed()&&O(B())}function B(){var T=y.selection.getStart();return((T.tagName=="BR"||T.tagName=="")&&T.parentNode.tagName=="LI")?T.parentNode:T}function O(T){var U=T.childNodes.length;if(T.tagName==="LI"){return U==0?true:U==1&&(T.firstChild.tagName==""||T.firstChild.tagName=="BR"||H(T))}return false}function H(T){var U=tinymce.grep(T.parentNode.childNodes,function(X){return X.tagName=="LI"});var V=T==U[U.length-1];var W=T.firstChild;return tinymce.isIE9&&V&&(W.nodeValue==String.fromCharCode(160)||W.nodeValue==String.fromCharCode(32))}function S(T){return T.keyCode===tinymce.VK.ENTER}function A(T){return S(T)&&!T.shiftKey}function L(T){if(E(T)){return v}else{if(A(T)&&w()){return I}else{if(A(T)&&F()){return s}else{if(A(T)&&N()){return z}else{return M}}}}}function C(T,U){if(x==v||x==s||tinymce.isGecko&&x==I){r.cancel(U)}}function J(V,X){if(x==z){var W=V.selection.getNode();var U=V.dom.create("li");var T=V.dom.getParent(W,"li");V.dom.insertAfter(U,T);if(tinyMCE.isIE8){U.appendChild(V.dom.create("&nbsp;"));V.selection.setCursorLocation(U,1)}else{if(tinyMCE.isGecko){setTimeout(function(){var Y=V.getDoc().createTextNode("\uFEFF");U.appendChild(Y);V.selection.setCursorLocation(U,0)},0)}else{V.selection.setCursorLocation(U,0)}}r.cancel(X)}}function u(W,Y){var ab;if(!tinymce.isGecko){return}var U=W.selection.getStart();if(Y.keyCode!=tinymce.VK.BACKSPACE||U.tagName!=="IMG"){return}function V(af){var ag=af.firstChild;var ae=null;do{if(!ag){break}if(ag.tagName==="LI"){ae=ag}}while(ag=ag.nextSibling);return ae}function ad(af,ae){while(af.childNodes.length>0){ae.appendChild(af.childNodes[0])}}ab=U.parentNode.previousSibling;if(!ab){return}var Z;if(ab.tagName==="UL"||ab.tagName==="OL"){Z=ab}else{if(ab.previousSibling&&(ab.previousSibling.tagName==="UL"||ab.previousSibling.tagName==="OL")){Z=ab.previousSibling}else{return}}var ac=V(Z);var T=W.dom.createRng();T.setStart(ac,1);T.setEnd(ac,1);W.selection.setRng(T);W.selection.collapse(true);var X=W.selection.getBookmark();var aa=U.parentNode.cloneNode(true);if(aa.tagName==="P"||aa.tagName==="DIV"){ad(aa,ac)}else{ac.appendChild(aa)}U.parentNode.parentNode.removeChild(U.parentNode);W.selection.moveToBookmark(X)}function G(T){var U=y.dom.getParent(T,"ol,ul");if(U!=null){var V=U.lastChild;V.appendChild(y.getDoc().createElement(""));y.selection.setCursorLocation(V,0)}}this.ed=y;y.addCommand("Indent",this.indent,this);y.addCommand("Outdent",this.outdent,this);y.addCommand("InsertUnorderedList",function(){this.applyList("UL","OL")},this);y.addCommand("InsertOrderedList",function(){this.applyList("OL","UL")},this);y.onInit.add(function(){y.editorCommands.addCommands({outdent:function(){var U=y.selection,V=y.dom;function T(W){W=V.getParent(W,V.isBlock);return W&&(parseInt(y.dom.getStyle(W,"margin-left")||0,10)+parseInt(y.dom.getStyle(W,"padding-left")||0,10))>0}return T(U.getStart())||T(U.getEnd())||y.queryCommandState("InsertOrderedList")||y.queryCommandState("InsertUnorderedList")}},"state")});y.onKeyUp.add(function(U,V){if(x==v){U.execCommand(V.shiftKey?"Outdent":"Indent",true,null);x=M;return r.cancel(V)}else{if(x==s){var T=B();var X=U.settings.list_outdent_on_enter===true||V.shiftKey;U.execCommand(X?"Outdent":"Indent",true,null);if(tinymce.isIE){G(T)}return r.cancel(V)}else{if(x==I){if(tinymce.isIE8){var W=U.getDoc().createTextNode("\uFEFF");U.selection.getNode().appendChild(W)}else{if(tinymce.isIE9||tinymce.isGecko){U.execCommand("Outdent");return r.cancel(V)}}}}}});function K(U,T){var V=y.getDoc().createTextNode("\uFEFF");U.insertBefore(V,T);y.selection.setCursorLocation(V,0);y.execCommand("mceRepaint")}function Q(U,W){if(S(W)){var T=B();if(T){var V=T.parentNode;var X=V&&V.parentNode;if(X&&X.nodeName=="LI"&&X.firstChild==V&&T==V.firstChild){K(X,V)}}}}function R(U,W){if(S(W)){var T=B();if(U.dom.select("ul li",T).length===1){var V=T.firstChild;K(T,V)}}}function P(U,Y){function V(ac,Z){var ab=[];var ad=new tinymce.dom.TreeWalker(Z,ac);for(var aa=ad.current();aa;aa=ad.next()){if(U.dom.is(aa,"ol,ul,li")){ab.push(aa)}}return ab}if(Y.keyCode==tinymce.VK.BACKSPACE){var T=B();if(T){var X=U.dom.getParent(T,"ol,ul");if(X&&X.firstChild===T){var W=V(X,T);U.execCommand("Outdent",false,W);U.undoManager.add();return r.cancel(Y)}}}}y.onKeyDown.add(function(T,U){x=L(U)});y.onKeyDown.add(C);y.onKeyDown.add(u);y.onKeyDown.add(J);if(tinymce.isGecko){y.onKeyUp.add(Q)}if(tinymce.isIE8){y.onKeyUp.add(R)}if(tinymce.isGecko||tinymce.isWebKit){y.onKeyDown.add(P)}},applyList:function(y,v){var C=this,z=C.ed,I=z.dom,s=[],H=false,u=false,w=false,B,G=z.selection.getSelectedBlocks();function E(t){if(t&&t.tagName==="BR"){I.remove(t)}}function F(M){var N=I.create(y),t;function L(O){if(O.style.marginLeft||O.style.paddingLeft){C.adjustPaddingFunction(false)(O)}}if(M.tagName==="LI"){}else{if(M.tagName==="P"||M.tagName==="DIV"||M.tagName==="BODY"){K(M,function(P,O){J(P,O,M.tagName==="BODY"?null:P.parentNode);t=P.parentNode;L(t);E(O)});if(t){if(t.tagName==="LI"&&(M.tagName==="P"||G.length>1)){I.split(t.parentNode.parentNode,t.parentNode)}m(t.parentNode,true)}return}else{t=I.create("li");I.insertAfter(t,M);t.appendChild(M);L(M);M=t}}I.insertAfter(N,M);N.appendChild(M);m(N,true);s.push(M)}function J(P,L,N){var t,O=P,M;while(!I.isBlock(P.parentNode)&&P.parentNode!==I.getRoot()){P=I.split(P.parentNode,P.previousSibling);P=P.nextSibling;O=P}if(N){t=N.cloneNode(true);P.parentNode.insertBefore(t,P);while(t.firstChild){I.remove(t.firstChild)}t=I.rename(t,"li")}else{t=I.create("li");P.parentNode.insertBefore(t,P)}while(O&&O!=L){M=O.nextSibling;t.appendChild(O);O=M}if(t.childNodes.length===0){t.innerHTML='<br _mce_bogus="1" />'}F(t)}function K(Q,T){var N,R,O=3,L=1,t="br,ul,ol,p,div,h1,h2,h3,h4,h5,h6,table,blockquote,address,pre,form,center,dl";function P(X,U){var V=I.createRng(),W;g.keep=true;z.selection.moveToBookmark(g);g.keep=false;W=z.selection.getRng(true);if(!U){U=X.parentNode.lastChild}V.setStartBefore(X);V.setEndAfter(U);return !(V.compareBoundaryPoints(O,W)>0||V.compareBoundaryPoints(L,W)<=0)}function S(U){if(U.nextSibling){return U.nextSibling}if(!I.isBlock(U.parentNode)&&U.parentNode!==I.getRoot()){return S(U.parentNode)}}N=Q.firstChild;var M=false;e(I.select(t,Q),function(U){if(U.hasAttribute&&U.hasAttribute("_mce_bogus")){return true}if(P(N,U)){I.addClass(U,"_mce_tagged_br");N=S(U)}});M=(N&&P(N,undefined));N=Q.firstChild;e(I.select(t,Q),function(V){var U=S(V);if(V.hasAttribute&&V.hasAttribute("_mce_bogus")){return true}if(I.hasClass(V,"_mce_tagged_br")){T(N,V,R);R=null}else{R=V}N=U});if(M){T(N,undefined,R)}}function D(t){K(t,function(M,L,N){J(M,L);E(L);E(N)})}function A(t){if(tinymce.inArray(s,t)!==-1){return}if(t.parentNode.tagName===v){I.split(t.parentNode,t);F(t);o(t.parentNode,false)}s.push(t)}function x(M){var O,N,L,t;if(tinymce.inArray(s,M)!==-1){return}M=c(M,I);while(I.is(M.parentNode,"ol,ul,li")){I.split(M.parentNode,M)}s.push(M);M=I.rename(M,"p");L=m(M,false,z.settings.force_br_newlines);if(L===M){O=M.firstChild;while(O){if(I.isBlock(O)){O=I.split(O.parentNode,O);t=true;N=O.nextSibling&&O.nextSibling.firstChild}else{N=O.nextSibling;if(t&&O.tagName==="BR"){I.remove(O)}t=false}O=N}}}e(G,function(t){t=k(t,I);if(t.tagName===v||(t.tagName==="LI"&&t.parentNode.tagName===v)){u=true}else{if(t.tagName===y||(t.tagName==="LI"&&t.parentNode.tagName===y)){H=true}else{w=true}}});if(w&&!H||u||G.length===0){B={LI:A,H1:F,H2:F,H3:F,H4:F,H5:F,H6:F,P:F,BODY:F,DIV:G.length>1?F:D,defaultAction:D,elements:this.selectedBlocks()}}else{B={defaultAction:x,elements:this.selectedBlocks()}}this.process(B)},indent:function(){var u=this.ed,w=u.dom,x=[];function s(z){var y=w.create("li",{style:"list-style-type: none;"});w.insertAfter(y,z);return y}function t(B){var y=s(B),D=w.getParent(B,"ol,ul"),C=D.tagName,E=w.getStyle(D,"list-style-type"),A={},z;if(E!==""){A.style="list-style-type: "+E+";"}z=w.create(C,A);y.appendChild(z);return z}function v(z){if(!d(u,z,x)){z=c(z,w);var y=t(z);y.appendChild(z);m(y.parentNode,false);m(y,false);x.push(z)}}this.process({LI:v,defaultAction:this.adjustPaddingFunction(true),elements:this.selectedBlocks()})},outdent:function(y,x){var w=this,u=w.ed,z=u.dom,s=[];function A(t){var C,B,D;if(!d(u,t,s)){if(z.getStyle(t,"margin-left")!==""||z.getStyle(t,"padding-left")!==""){return w.adjustPaddingFunction(false)(t)}D=z.getStyle(t,"text-align",true);if(D==="center"||D==="right"){z.setStyle(t,"text-align","left");return}t=c(t,z);C=t.parentNode;B=t.parentNode.parentNode;if(B.tagName==="P"){z.split(B,t.parentNode)}else{z.split(C,t);if(B.tagName==="LI"){z.split(B,t)}else{if(!z.is(B,"ol,ul")){z.rename(t,"p")}}}s.push(t)}}var v=x&&tinymce.is(x,"array")?x:this.selectedBlocks();this.process({LI:A,defaultAction:this.adjustPaddingFunction(false),elements:v});e(s,m)},process:function(y){var F=this,w=F.ed.selection,z=F.ed.dom,E,u;function B(t){var s=tinymce.grep(t.childNodes,function(H){return !(H.nodeName==="BR"||H.nodeName==="SPAN"&&z.getAttrib(H,"data-mce-type")=="bookmark"||H.nodeType==3&&(H.nodeValue==String.fromCharCode(160)||H.nodeValue==""))});return s.length===0}function x(s){z.removeClass(s,"_mce_act_on");if(!s||s.nodeType!==1||E.length>1&&B(s)){return}s=k(s,z);var t=y[s.tagName];if(!t){t=y.defaultAction}t(s)}function v(s){F.splitSafeEach(s.childNodes,x)}function C(s,t){return t>=0&&s.hasChildNodes()&&t<s.childNodes.length&&s.childNodes[t].tagName==="BR"}function D(){var t=w.getNode();var s=z.getParent(t,"td");return s!==null}E=y.elements;u=w.getRng(true);if(!u.collapsed){if(C(u.endContainer,u.endOffset-1)){u.setEnd(u.endContainer,u.endOffset-1);w.setRng(u)}if(C(u.startContainer,u.startOffset)){u.setStart(u.startContainer,u.startOffset+1);w.setRng(u)}}if(tinymce.isIE8){var G=F.ed.selection.getNode();if(G.tagName==="LI"&&!(G.parentNode.lastChild===G)){var A=F.ed.getDoc().createTextNode("\uFEFF");G.appendChild(A)}}g=w.getBookmark();y.OL=y.UL=v;F.splitSafeEach(E,x);w.moveToBookmark(g);g=null;if(!D()){F.ed.execCommand("mceRepaint")}},splitSafeEach:function(t,s){if(tinymce.isGecko&&(/Firefox\/[12]\.[0-9]/.test(navigator.userAgent)||/Firefox\/3\.[0-4]/.test(navigator.userAgent))){this.classBasedEach(t,s)}else{e(t,s)}},classBasedEach:function(v,u){var w=this.ed.dom,s,t;e(v,function(x){w.addClass(x,"_mce_act_on")});s=w.select("._mce_act_on");while(s.length>0){t=s.shift();w.removeClass(t,"_mce_act_on");u(t);s=w.select("._mce_act_on")}},adjustPaddingFunction:function(u){var s,v,t=this.ed;s=t.settings.indentation;v=/[a-z%]+/i.exec(s);s=parseInt(s,10);return function(w){var y,x;y=parseInt(t.dom.getStyle(w,"margin-left")||0,10)+parseInt(t.dom.getStyle(w,"padding-left")||0,10);if(u){x=y+s}else{x=y-s}t.dom.setStyle(w,"padding-left","");t.dom.setStyle(w,"margin-left",x>0?x+v:"")}},selectedBlocks:function(){var s=this.ed;var t=s.selection.getSelectedBlocks();return t.length==0?[s.dom.getRoot()]:t},getInfo:function(){return{longname:"Lists",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/lists",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("lists",tinymce.plugins.Lists)}());
@@ -99,11 +99,7 @@
99
99
  return e2.style.listStyleType === 'none' || containsOnlyAList(e2);
100
100
  } else if (isList(e1)) {
101
101
  return (e1.tagName === e2.tagName && (allowDifferentListStyles || e1.style.listStyleType === e2.style.listStyleType)) || isListForIndent(e2);
102
- } else if (mergeParagraphs && e1.tagName === 'P' && e2.tagName === 'P') {
103
- return true;
104
- } else {
105
- return false;
106
- }
102
+ } else return mergeParagraphs && e1.tagName === 'P' && e2.tagName === 'P';
107
103
  }
108
104
 
109
105
  function isListForIndent(e) {
@@ -144,15 +140,36 @@
144
140
  }
145
141
 
146
142
  tinymce.create('tinymce.plugins.Lists', {
147
- init: function(ed, url) {
148
- var LIST_TABBING = 0;
149
- var LIST_EMPTY_ITEM = 1;
150
- var LIST_ESCAPE = 2;
151
- var LIST_UNKNOWN = 3;
143
+ init: function(ed) {
144
+ var LIST_TABBING = 'TABBING';
145
+ var LIST_EMPTY_ITEM = 'EMPTY';
146
+ var LIST_ESCAPE = 'ESCAPE';
147
+ var LIST_PARAGRAPH = 'PARAGRAPH';
148
+ var LIST_UNKNOWN = 'UNKNOWN';
152
149
  var state = LIST_UNKNOWN;
153
150
 
154
151
  function isTabInList(e) {
155
- return e.keyCode === 9 && (ed.queryCommandState('InsertUnorderedList') || ed.queryCommandState('InsertOrderedList'));
152
+ // Don't indent on Ctrl+Tab or Alt+Tab
153
+ return e.keyCode === tinymce.VK.TAB && !(e.altKey || e.ctrlKey) &&
154
+ (ed.queryCommandState('InsertUnorderedList') || ed.queryCommandState('InsertOrderedList'));
155
+ }
156
+
157
+ function isCursorAtEndOfContainer() {
158
+ var range = ed.selection.getRng();
159
+ var startContainer = range.startContainer;
160
+ if (startContainer.nodeType == 3) {
161
+ return (range.endOffset == startContainer.nodeValue.length);
162
+ } else if (startContainer.nodeType == 1) {
163
+ return range.endOffset == startContainer.childNodes.length;
164
+ }
165
+ return false;
166
+ }
167
+
168
+ // If we are at the end of a paragraph in a list item, pressing enter should create a new list item instead of a new paragraph.
169
+ function isEndOfParagraph() {
170
+ var node = ed.selection.getNode();
171
+ var isLastParagraphOfLi = node.tagName === 'P' && node.parentNode.tagName === 'LI' && node.parentNode.lastChild === node;
172
+ return ed.selection.isCollapsed() && isLastParagraphOfLi && isCursorAtEndOfContainer();
156
173
  }
157
174
 
158
175
  function isOnLastListItem() {
@@ -183,45 +200,73 @@
183
200
  function isEmptyListItem(li) {
184
201
  var numChildren = li.childNodes.length;
185
202
  if (li.tagName === 'LI') {
186
- return numChildren == 0 ? true : numChildren == 1 && (li.firstChild.tagName == '' || isEmptyWebKitLi(li) || isEmptyIE9Li(li));
203
+ return numChildren == 0 ? true : numChildren == 1 && (li.firstChild.tagName == '' || li.firstChild.tagName == 'BR' || isEmptyIE9Li(li));
187
204
  }
188
205
  return false;
189
206
  }
190
207
 
191
- function isEmptyWebKitLi(li) {
192
- // Check for empty LI or a LI with just a child that is a BR since Gecko and WebKit uses BR elements to place the caret
193
- return tinymce.isWebKit && li.firstChild.nodeName == 'BR';
194
- }
195
-
196
208
  function isEmptyIE9Li(li) {
197
209
  // only consider this to be last item if there is no list item content or that content is nbsp or space since IE9 creates these
198
- var lis = tinymce.grep(li.parentNode.childNodes, function(n) {return n.nodeName == 'LI'});
210
+ var lis = tinymce.grep(li.parentNode.childNodes, function(n) {return n.tagName == 'LI'});
199
211
  var isLastLi = li == lis[lis.length - 1];
200
212
  var child = li.firstChild;
201
213
  return tinymce.isIE9 && isLastLi && (child.nodeValue == String.fromCharCode(160) || child.nodeValue == String.fromCharCode(32));
202
214
  }
203
215
 
204
216
  function isEnter(e) {
205
- return e.keyCode === 13;
206
- }
217
+ return e.keyCode === tinymce.VK.ENTER;
218
+ }
219
+
220
+ function isEnterWithoutShift(e) {
221
+ return isEnter(e) && !e.shiftKey;
222
+ }
207
223
 
208
224
  function getListKeyState(e) {
209
225
  if (isTabInList(e)) {
210
226
  return LIST_TABBING;
211
- } else if (isEnter(e) && isOnLastListItem()) {
227
+ } else if (isEnterWithoutShift(e) && isOnLastListItem()) {
212
228
  return LIST_ESCAPE;
213
- } else if (isEnter(e) && isInEmptyListItem()) {
229
+ } else if (isEnterWithoutShift(e) && isInEmptyListItem()) {
214
230
  return LIST_EMPTY_ITEM;
215
- } else {
231
+ } else if (isEnterWithoutShift(e) && isEndOfParagraph()) {
232
+ return LIST_PARAGRAPH;
233
+ } else {
216
234
  return LIST_UNKNOWN;
217
235
  }
218
236
  }
219
237
 
220
- function cancelEnterAndTab(_, e) {
221
- if (state == LIST_TABBING || state == LIST_EMPTY_ITEM) {
222
- return Event.cancel(e);
223
- }
224
- }
238
+ function cancelDefaultEvents(ed, e) {
239
+ // list escape is done manually using outdent as it does not create paragraphs correctly in td's
240
+ if (state == LIST_TABBING || state == LIST_EMPTY_ITEM || tinymce.isGecko && state == LIST_ESCAPE) {
241
+ Event.cancel(e);
242
+ }
243
+ }
244
+
245
+ // Creates a new list item after the current selection's list item parent
246
+ function createNewLi(ed, e) {
247
+ if (state == LIST_PARAGRAPH) {
248
+ var node = ed.selection.getNode();
249
+ var li = ed.dom.create("li");
250
+ var parentLi = ed.dom.getParent(node, 'li');
251
+ ed.dom.insertAfter(li, parentLi);
252
+
253
+ // Move caret to new list element.
254
+ if (tinyMCE.isIE8) {
255
+ li.appendChild(ed.dom.create("&nbsp;")); // IE needs an element within the bullet point
256
+ ed.selection.setCursorLocation(li, 1);
257
+ } else if (tinyMCE.isGecko) {
258
+ // This setTimeout is a hack as FF behaves badly if there is no content after the bullet point
259
+ setTimeout(function () {
260
+ var n = ed.getDoc().createTextNode('\uFEFF');
261
+ li.appendChild(n);
262
+ ed.selection.setCursorLocation(li, 0);
263
+ }, 0);
264
+ } else {
265
+ ed.selection.setCursorLocation(li, 0);
266
+ }
267
+ Event.cancel(e);
268
+ }
269
+ }
225
270
 
226
271
  function imageJoiningListItem(ed, e) {
227
272
  var prevSibling;
@@ -230,7 +275,7 @@
230
275
  return;
231
276
 
232
277
  var n = ed.selection.getStart();
233
- if (e.keyCode != 8 || n.tagName !== 'IMG')
278
+ if (e.keyCode != tinymce.VK.BACKSPACE || n.tagName !== 'IMG')
234
279
  return;
235
280
 
236
281
  function lastLI(node) {
@@ -329,8 +374,8 @@
329
374
  ed.onKeyUp.add(function(ed, e) {
330
375
  if (state == LIST_TABBING) {
331
376
  ed.execCommand(e.shiftKey ? 'Outdent' : 'Indent', true, null);
332
- state = LIST_UNKNOWN;
333
- return Event.cancel(e);
377
+ state = LIST_UNKNOWN;
378
+ return Event.cancel(e);
334
379
  } else if (state == LIST_EMPTY_ITEM) {
335
380
  var li = getLi();
336
381
  var shouldOutdent = ed.settings.list_outdent_on_enter === true || e.shiftKey;
@@ -338,6 +383,7 @@
338
383
  if (tinymce.isIE) {
339
384
  setCursorPositionToOriginalLi(li);
340
385
  }
386
+
341
387
  return Event.cancel(e);
342
388
  } else if (state == LIST_ESCAPE) {
343
389
  if (tinymce.isIE8) {
@@ -346,17 +392,88 @@
346
392
  // escaping from it will cause the caret to be positioned on the last li instead of staying the in P tag.
347
393
  var n = ed.getDoc().createTextNode('\uFEFF');
348
394
  ed.selection.getNode().appendChild(n);
349
- } else if (tinymce.isIE9) {
395
+ } else if (tinymce.isIE9 || tinymce.isGecko) {
350
396
  // IE9 does not escape the list so we use outdent to do this and cancel the default behaviour
397
+ // Gecko does not create a paragraph outdenting inside a TD so default behaviour is cancelled and we outdent ourselves
351
398
  ed.execCommand('Outdent');
352
399
  return Event.cancel(e);
353
- }
400
+ }
354
401
  }
355
402
  });
403
+
404
+ function fixListItem(parent, reference) {
405
+ // a zero-sized non-breaking space is placed in the empty list item so that the nested list is
406
+ // displayed on the below line instead of next to it
407
+ var n = ed.getDoc().createTextNode('\uFEFF');
408
+ parent.insertBefore(n, reference);
409
+ ed.selection.setCursorLocation(n, 0);
410
+ // repaint to remove rendering artifact. only visible when creating new list
411
+ ed.execCommand('mceRepaint');
412
+ }
413
+
414
+ function fixIndentedListItemForGecko(ed, e) {
415
+ if (isEnter(e)) {
416
+ var li = getLi();
417
+ if (li) {
418
+ var parent = li.parentNode;
419
+ var grandParent = parent && parent.parentNode;
420
+ if (grandParent && grandParent.nodeName == 'LI' && grandParent.firstChild == parent && li == parent.firstChild) {
421
+ fixListItem(grandParent, parent);
422
+ }
423
+ }
424
+ }
425
+ }
426
+
427
+ function fixIndentedListItemForIE8(ed, e) {
428
+ if (isEnter(e)) {
429
+ var li = getLi();
430
+ if (ed.dom.select('ul li', li).length === 1) {
431
+ var list = li.firstChild;
432
+ fixListItem(li, list);
433
+ }
434
+ }
435
+ }
436
+
437
+ function fixDeletingFirstCharOfList(ed, e) {
438
+ function listElements(list, li) {
439
+ var elements = [];
440
+ var walker = new tinymce.dom.TreeWalker(li, list);
441
+ for (var node = walker.current(); node; node = walker.next()) {
442
+ if (ed.dom.is(node, 'ol,ul,li')) {
443
+ elements.push(node);
444
+ }
445
+ }
446
+ return elements;
447
+ }
448
+
449
+ if (e.keyCode == tinymce.VK.BACKSPACE) {
450
+ var li = getLi();
451
+ if (li) {
452
+ var list = ed.dom.getParent(li, 'ol,ul');
453
+ if (list && list.firstChild === li) {
454
+ var elements = listElements(list, li);
455
+ ed.execCommand("Outdent", false, elements);
456
+ ed.undoManager.add();
457
+ return Event.cancel(e);
458
+ }
459
+ }
460
+ }
461
+ }
462
+
356
463
  ed.onKeyDown.add(function(_, e) { state = getListKeyState(e); });
357
- ed.onKeyDown.add(cancelEnterAndTab);
464
+ ed.onKeyDown.add(cancelDefaultEvents);
358
465
  ed.onKeyDown.add(imageJoiningListItem);
359
- ed.onKeyPress.add(cancelEnterAndTab);
466
+ ed.onKeyDown.add(createNewLi);
467
+
468
+ if (tinymce.isGecko) {
469
+ ed.onKeyUp.add(fixIndentedListItemForGecko);
470
+ }
471
+ if (tinymce.isIE8) {
472
+ ed.onKeyUp.add(fixIndentedListItemForIE8);
473
+ }
474
+ if (tinymce.isGecko || tinymce.isWebKit) {
475
+ ed.onKeyDown.add(fixDeletingFirstCharOfList);
476
+ }
360
477
  },
361
478
 
362
479
  applyList: function(targetListType, oppositeListType) {
@@ -382,16 +499,18 @@
382
499
  if (element.tagName === 'LI') {
383
500
  // No change required.
384
501
  } else if (element.tagName === 'P' || element.tagName === 'DIV' || element.tagName === 'BODY') {
385
- processBrs(element, function(startSection, br, previousBR) {
502
+ processBrs(element, function(startSection, br) {
386
503
  doWrapList(startSection, br, element.tagName === 'BODY' ? null : startSection.parentNode);
387
504
  li = startSection.parentNode;
388
505
  adjustIndentForNewList(li);
389
506
  cleanupBr(br);
390
507
  });
391
- if (element.tagName === 'P' || selectedBlocks.length > 1) {
392
- dom.split(li.parentNode.parentNode, li.parentNode);
508
+ if (li) {
509
+ if (li.tagName === 'LI' && (element.tagName === 'P' || selectedBlocks.length > 1)) {
510
+ dom.split(li.parentNode.parentNode, li.parentNode);
511
+ }
512
+ attemptMergeWithAdjacent(li.parentNode, true);
393
513
  }
394
- attemptMergeWithAdjacent(li.parentNode, true);
395
514
  return;
396
515
  } else {
397
516
  // Put the list around the element.
@@ -408,7 +527,7 @@
408
527
  }
409
528
 
410
529
  function doWrapList(start, end, template) {
411
- var li, n = start, tmp, i;
530
+ var li, n = start, tmp;
412
531
  while (!dom.isBlock(start.parentNode) && start.parentNode !== dom.getRoot()) {
413
532
  start = dom.split(start.parentNode, start.previousSibling);
414
533
  start = start.nextSibling;
@@ -423,7 +542,7 @@
423
542
  li = dom.create('li');
424
543
  start.parentNode.insertBefore(li, start);
425
544
  }
426
- while (n && n != end) {
545
+ while (n && n != end) {
427
546
  tmp = n.nextSibling;
428
547
  li.appendChild(n);
429
548
  n = tmp;
@@ -464,7 +583,6 @@
464
583
  // First mark the BRs that have any part of the previous section selected.
465
584
  var trailingContentSelected = false;
466
585
  each(dom.select(breakElements, element), function(br) {
467
- var b;
468
586
  if (br.hasAttribute && br.hasAttribute('_mce_bogus')) {
469
587
  return true; // Skip the bogus Brs that are put in to appease Firefox and Safari.
470
588
  }
@@ -560,7 +678,7 @@
560
678
  }
561
679
  });
562
680
 
563
- if (hasNonList || hasOppositeType || selectedBlocks.length === 0) {
681
+ if (hasNonList &&!hasSameType || hasOppositeType || selectedBlocks.length === 0) {
564
682
  actions = {
565
683
  'LI': changeList,
566
684
  'H1': makeList,
@@ -572,11 +690,13 @@
572
690
  'P': makeList,
573
691
  'BODY': makeList,
574
692
  'DIV': selectedBlocks.length > 1 ? makeList : wrapList,
575
- defaultAction: wrapList
693
+ defaultAction: wrapList,
694
+ elements: this.selectedBlocks()
576
695
  };
577
696
  } else {
578
697
  actions = {
579
- defaultAction: convertListItemToParagraph
698
+ defaultAction: convertListItemToParagraph,
699
+ elements: this.selectedBlocks()
580
700
  };
581
701
  }
582
702
  this.process(actions);
@@ -619,12 +739,13 @@
619
739
 
620
740
  this.process({
621
741
  'LI': indentLI,
622
- defaultAction: this.adjustPaddingFunction(true)
742
+ defaultAction: this.adjustPaddingFunction(true),
743
+ elements: this.selectedBlocks()
623
744
  });
624
745
 
625
746
  },
626
747
 
627
- outdent: function() {
748
+ outdent: function(ui, elements) {
628
749
  var t = this, ed = t.ed, dom = ed.dom, outdented = [];
629
750
 
630
751
  function outdentLI(element) {
@@ -656,9 +777,11 @@
656
777
  }
657
778
  }
658
779
 
780
+ var listElements = elements && tinymce.is(elements, 'array') ? elements : this.selectedBlocks();
659
781
  this.process({
660
782
  'LI': outdentLI,
661
- defaultAction: this.adjustPaddingFunction(false)
783
+ defaultAction: this.adjustPaddingFunction(false),
784
+ elements: listElements
662
785
  });
663
786
 
664
787
  each(outdented, attemptMergeWithAdjacent);
@@ -667,9 +790,17 @@
667
790
  process: function(actions) {
668
791
  var t = this, sel = t.ed.selection, dom = t.ed.dom, selectedBlocks, r;
669
792
 
793
+ function isEmptyElement(element) {
794
+ var excludeBrsAndBookmarks = tinymce.grep(element.childNodes, function(n) {
795
+ return !(n.nodeName === 'BR' || n.nodeName === 'SPAN' && dom.getAttrib(n, 'data-mce-type') == 'bookmark'
796
+ || n.nodeType == 3 && (n.nodeValue == String.fromCharCode(160) || n.nodeValue == ''));
797
+ });
798
+ return excludeBrsAndBookmarks.length === 0;
799
+ }
800
+
670
801
  function processElement(element) {
671
802
  dom.removeClass(element, '_mce_act_on');
672
- if (!element || element.nodeType !== 1) {
803
+ if (!element || element.nodeType !== 1 || selectedBlocks.length > 1 && isEmptyElement(element)) {
673
804
  return;
674
805
  }
675
806
  element = findItemToOperateOn(element, dom);
@@ -689,11 +820,14 @@
689
820
  container.childNodes[offset].tagName === 'BR';
690
821
  }
691
822
 
692
- selectedBlocks = sel.getSelectedBlocks();
693
- if (selectedBlocks.length === 0) {
694
- selectedBlocks = [ dom.getRoot() ];
823
+ function isInTable() {
824
+ var n = sel.getNode();
825
+ var p = dom.getParent(n, 'td');
826
+ return p !== null;
695
827
  }
696
828
 
829
+ selectedBlocks = actions.elements;
830
+
697
831
  r = sel.getRng(true);
698
832
  if (!r.collapsed) {
699
833
  if (brAtEdgeOfSelection(r.endContainer, r.endOffset - 1)) {
@@ -721,8 +855,12 @@
721
855
  t.splitSafeEach(selectedBlocks, processElement);
722
856
  sel.moveToBookmark(bookmark);
723
857
  bookmark = null;
724
- // Avoids table or image handles being left behind in Firefox.
725
- t.ed.execCommand('mceRepaint');
858
+
859
+ // we avoid doing repaint in a table as this will move the caret out of the table in Firefox 3.6
860
+ if (!isInTable()) {
861
+ // Avoids table or image handles being left behind in Firefox.
862
+ t.ed.execCommand('mceRepaint');
863
+ }
726
864
  },
727
865
 
728
866
  splitSafeEach: function(elements, f) {
@@ -767,6 +905,12 @@
767
905
  };
768
906
  },
769
907
 
908
+ selectedBlocks: function() {
909
+ var ed = this.ed
910
+ var selectedBlocks = ed.selection.getSelectedBlocks();
911
+ return selectedBlocks.length == 0 ? [ ed.dom.getRoot() ] : selectedBlocks;
912
+ },
913
+
770
914
  getInfo: function() {
771
915
  return {
772
916
  longname : 'Lists',