moved code up one level to eliminate the docs subdirectory
[acontent.git] / include / jscripts / tiny_mce / plugins / advlist / editor_plugin_src.js
1 /**\r
2  * editor_plugin_src.js\r
3  *\r
4  * Copyright 2009, Moxiecode Systems AB\r
5  * Released under LGPL License.\r
6  *\r
7  * License: http://tinymce.moxiecode.com/license\r
8  * Contributing: http://tinymce.moxiecode.com/contributing\r
9  */\r
10 \r
11 (function() {\r
12         var each = tinymce.each;\r
13 \r
14         tinymce.create('tinymce.plugins.AdvListPlugin', {\r
15                 init : function(ed, url) {\r
16                         var t = this;\r
17 \r
18                         t.editor = ed;\r
19 \r
20                         function buildFormats(str) {\r
21                                 var formats = [];\r
22 \r
23                                 each(str.split(/,/), function(type) {\r
24                                         formats.push({\r
25                                                 title : 'advlist.' + (type == 'default' ? 'def' : type.replace(/-/g, '_')),\r
26                                                 styles : {\r
27                                                         listStyleType : type == 'default' ? '' : type\r
28                                                 }\r
29                                         });\r
30                                 });\r
31 \r
32                                 return formats;\r
33                         };\r
34 \r
35                         // Setup number formats from config or default\r
36                         t.numlist = ed.getParam("advlist_number_styles") || buildFormats("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");\r
37                         t.bullist = ed.getParam("advlist_bullet_styles") || buildFormats("default,circle,disc,square");\r
38                 },\r
39 \r
40                 createControl: function(name, cm) {\r
41                         var t = this, btn, format;\r
42 \r
43                         if (name == 'numlist' || name == 'bullist') {\r
44                                 // Default to first item if it's a default item\r
45                                 if (t[name][0].title == 'advlist.def')\r
46                                         format = t[name][0];\r
47 \r
48                                 function hasFormat(node, format) {\r
49                                         var state = true;\r
50 \r
51                                         each(format.styles, function(value, name) {\r
52                                                 // Format doesn't match\r
53                                                 if (t.editor.dom.getStyle(node, name) != value) {\r
54                                                         state = false;\r
55                                                         return false;\r
56                                                 }\r
57                                         });\r
58 \r
59                                         return state;\r
60                                 };\r
61 \r
62                                 function applyListFormat() {\r
63                                         var list, ed = t.editor, dom = ed.dom, sel = ed.selection;\r
64 \r
65                                         // Check for existing list element\r
66                                         list = dom.getParent(sel.getNode(), 'ol,ul');\r
67 \r
68                                         // Switch/add list type if needed\r
69                                         if (!list || list.nodeName == (name == 'bullist' ? 'OL' : 'UL') || hasFormat(list, format))\r
70                                                 ed.execCommand(name == 'bullist' ? 'InsertUnorderedList' : 'InsertOrderedList');\r
71 \r
72                                         // Append styles to new list element\r
73                                         if (format) {\r
74                                                 list = dom.getParent(sel.getNode(), 'ol,ul');\r
75 \r
76                                                 if (list) {\r
77                                                         dom.setStyles(list, format.styles);\r
78                                                         list.removeAttribute('_mce_style');\r
79                                                 }\r
80                                         }\r
81                                 };\r
82 \r
83                                 btn = cm.createSplitButton(name, {\r
84                                         title : 'advanced.' + name + '_desc',\r
85                                         'class' : 'mce_' + name,\r
86                                         onclick : function() {\r
87                                                 applyListFormat();\r
88                                         }\r
89                                 });\r
90 \r
91                                 btn.onRenderMenu.add(function(btn, menu) {\r
92                                         menu.onShowMenu.add(function() {\r
93                                                 var dom = t.editor.dom, list = dom.getParent(t.editor.selection.getNode(), 'ol,ul'), fmtList;\r
94 \r
95                                                 if (list || format) {\r
96                                                         fmtList = t[name];\r
97 \r
98                                                         // Unselect existing items\r
99                                                         each(menu.items, function(item) {\r
100                                                                 var state = true;\r
101 \r
102                                                                 item.setSelected(0);\r
103 \r
104                                                                 if (list && !item.isDisabled()) {\r
105                                                                         each(fmtList, function(fmt) {\r
106                                                                                 if (fmt.id == item.id) {\r
107                                                                                         if (!hasFormat(list, fmt)) {\r
108                                                                                                 state = false;\r
109                                                                                                 return false;\r
110                                                                                         }\r
111                                                                                 }\r
112                                                                         });\r
113 \r
114                                                                         if (state)\r
115                                                                                 item.setSelected(1);\r
116                                                                 }\r
117                                                         });\r
118 \r
119                                                         // Select the current format\r
120                                                         if (!list)\r
121                                                                 menu.items[format.id].setSelected(1);\r
122                                                 }\r
123                                         });\r
124 \r
125                                         menu.add({id : t.editor.dom.uniqueId(), title : 'advlist.types', 'class' : 'mceMenuItemTitle'}).setDisabled(1);\r
126 \r
127                                         each(t[name], function(item) {\r
128                                                 item.id = t.editor.dom.uniqueId();\r
129 \r
130                                                 menu.add({id : item.id, title : item.title, onclick : function() {\r
131                                                         format = item;\r
132                                                         applyListFormat();\r
133                                                 }});\r
134                                         });\r
135                                 });\r
136 \r
137                                 return btn;\r
138                         }\r
139                 },\r
140 \r
141                 getInfo : function() {\r
142                         return {\r
143                                 longname : 'Advanced lists',\r
144                                 author : 'Moxiecode Systems AB',\r
145                                 authorurl : 'http://tinymce.moxiecode.com',\r
146                                 infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist',\r
147                                 version : tinymce.majorVersion + "." + tinymce.minorVersion\r
148                         };\r
149                 }\r
150         });\r
151 \r
152         // Register plugin\r
153         tinymce.PluginManager.add('advlist', tinymce.plugins.AdvListPlugin);\r
154 })();