| Conditions | 21 |
| Paths | 11520 |
| Total Lines | 199 |
| Lines | 0 |
| Ratio | 0 % |
| Changes | 0 | ||
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
Complex classes like tinymce.PluginManager.add(ꞌfullpageꞌ) often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
| 1 | /** |
||
| 115 | function dataToHtml(data) { |
||
| 116 | var headerFragment, headElement, html, elm, value, dom = editor.dom; |
||
| 117 | |||
| 118 | function setAttr(elm, name, value) { |
||
| 119 | elm.attr(name, value ? value : undefined); |
||
| 120 | } |
||
| 121 | |||
| 122 | function addHeadNode(node) { |
||
| 123 | if (headElement.firstChild) { |
||
| 124 | headElement.insert(node, headElement.firstChild); |
||
| 125 | } else { |
||
| 126 | headElement.append(node); |
||
| 127 | } |
||
| 128 | } |
||
| 129 | |||
| 130 | headerFragment = parseHeader(); |
||
| 131 | headElement = headerFragment.getAll('head')[0]; |
||
| 132 | if (!headElement) { |
||
| 133 | elm = headerFragment.getAll('html')[0]; |
||
| 134 | headElement = new Node('head', 1); |
||
| 135 | |||
| 136 | if (elm.firstChild) { |
||
| 137 | elm.insert(headElement, elm.firstChild, true); |
||
| 138 | } else { |
||
| 139 | elm.append(headElement); |
||
| 140 | } |
||
| 141 | } |
||
| 142 | |||
| 143 | // Add/update/remove XML-PI |
||
| 144 | elm = headerFragment.firstChild; |
||
| 145 | if (data.xml_pi) { |
||
| 146 | value = 'version="1.0"'; |
||
| 147 | |||
| 148 | if (data.docencoding) { |
||
| 149 | value += ' encoding="' + data.docencoding + '"'; |
||
| 150 | } |
||
| 151 | |||
| 152 | if (elm.type != 7) { |
||
| 153 | elm = new Node('xml', 7); |
||
| 154 | headerFragment.insert(elm, headerFragment.firstChild, true); |
||
| 155 | } |
||
| 156 | |||
| 157 | elm.value = value; |
||
| 158 | } else if (elm && elm.type == 7) { |
||
| 159 | elm.remove(); |
||
| 160 | } |
||
| 161 | |||
| 162 | // Add/update/remove doctype |
||
| 163 | elm = headerFragment.getAll('#doctype')[0]; |
||
| 164 | if (data.doctype) { |
||
| 165 | if (!elm) { |
||
| 166 | elm = new Node('#doctype', 10); |
||
| 167 | |||
| 168 | if (data.xml_pi) { |
||
| 169 | headerFragment.insert(elm, headerFragment.firstChild); |
||
| 170 | } else { |
||
| 171 | addHeadNode(elm); |
||
| 172 | } |
||
| 173 | } |
||
| 174 | |||
| 175 | elm.value = data.doctype.substring(9, data.doctype.length - 1); |
||
| 176 | } else if (elm) { |
||
| 177 | elm.remove(); |
||
| 178 | } |
||
| 179 | |||
| 180 | // Add meta encoding |
||
| 181 | elm = null; |
||
| 182 | each(headerFragment.getAll('meta'), function(meta) { |
||
| 183 | if (meta.attr('http-equiv') == 'Content-Type') { |
||
| 184 | elm = meta; |
||
| 185 | } |
||
| 186 | }); |
||
| 187 | |||
| 188 | if (data.docencoding) { |
||
| 189 | if (!elm) { |
||
| 190 | elm = new Node('meta', 1); |
||
| 191 | elm.attr('http-equiv', 'Content-Type'); |
||
| 192 | elm.shortEnded = true; |
||
| 193 | addHeadNode(elm); |
||
| 194 | } |
||
| 195 | |||
| 196 | elm.attr('content', 'text/html; charset=' + data.docencoding); |
||
| 197 | } else if (elm) { |
||
| 198 | elm.remove(); |
||
| 199 | } |
||
| 200 | |||
| 201 | // Add/update/remove title |
||
| 202 | elm = headerFragment.getAll('title')[0]; |
||
| 203 | if (data.title) { |
||
| 204 | if (!elm) { |
||
| 205 | elm = new Node('title', 1); |
||
| 206 | addHeadNode(elm); |
||
| 207 | } else { |
||
| 208 | elm.empty(); |
||
| 209 | } |
||
| 210 | |||
| 211 | elm.append(new Node('#text', 3)).value = data.title; |
||
| 212 | } else if (elm) { |
||
| 213 | elm.remove(); |
||
| 214 | } |
||
| 215 | |||
| 216 | // Add/update/remove meta |
||
| 217 | each('keywords,description,author,copyright,robots'.split(','), function(name) { |
||
| 218 | var nodes = headerFragment.getAll('meta'), i, meta, value = data[name]; |
||
| 219 | |||
| 220 | for (i = 0; i < nodes.length; i++) { |
||
| 221 | meta = nodes[i]; |
||
| 222 | |||
| 223 | if (meta.attr('name') == name) { |
||
| 224 | if (value) { |
||
| 225 | meta.attr('content', value); |
||
| 226 | } else { |
||
| 227 | meta.remove(); |
||
| 228 | } |
||
| 229 | |||
| 230 | return; |
||
| 231 | } |
||
| 232 | } |
||
| 233 | |||
| 234 | if (value) { |
||
| 235 | elm = new Node('meta', 1); |
||
| 236 | elm.attr('name', name); |
||
| 237 | elm.attr('content', value); |
||
| 238 | elm.shortEnded = true; |
||
| 239 | |||
| 240 | addHeadNode(elm); |
||
| 241 | } |
||
| 242 | }); |
||
| 243 | |||
| 244 | var currentStyleSheetsMap = {}; |
||
| 245 | tinymce.each(headerFragment.getAll('link'), function(stylesheet) { |
||
| 246 | if (stylesheet.attr('rel') == 'stylesheet') { |
||
| 247 | currentStyleSheetsMap[stylesheet.attr('href')] = stylesheet; |
||
| 248 | } |
||
| 249 | }); |
||
| 250 | |||
| 251 | // Add new |
||
| 252 | tinymce.each(data.stylesheets, function(stylesheet) { |
||
| 253 | if (!currentStyleSheetsMap[stylesheet]) { |
||
| 254 | elm = new Node('link', 1); |
||
| 255 | elm.attr({ |
||
| 256 | rel: 'stylesheet', |
||
| 257 | text: 'text/css', |
||
| 258 | href: stylesheet |
||
| 259 | }); |
||
| 260 | elm.shortEnded = true; |
||
| 261 | addHeadNode(elm); |
||
| 262 | } |
||
| 263 | |||
| 264 | delete currentStyleSheetsMap[stylesheet]; |
||
| 265 | }); |
||
| 266 | |||
| 267 | // Delete old |
||
| 268 | tinymce.each(currentStyleSheetsMap, function(stylesheet) { |
||
| 269 | stylesheet.remove(); |
||
| 270 | }); |
||
| 271 | |||
| 272 | // Update body attributes |
||
| 273 | elm = headerFragment.getAll('body')[0]; |
||
| 274 | if (elm) { |
||
| 275 | setAttr(elm, 'dir', data.langdir); |
||
| 276 | setAttr(elm, 'style', data.style); |
||
| 277 | setAttr(elm, 'vlink', data.visited_color); |
||
| 278 | setAttr(elm, 'link', data.link_color); |
||
| 279 | setAttr(elm, 'alink', data.active_color); |
||
| 280 | |||
| 281 | // Update iframe body as well |
||
| 282 | dom.setAttribs(editor.getBody(), { |
||
| 283 | style: data.style, |
||
| 284 | dir: data.dir, |
||
| 285 | vLink: data.visited_color, |
||
| 286 | link: data.link_color, |
||
| 287 | aLink: data.active_color |
||
| 288 | }); |
||
| 289 | } |
||
| 290 | |||
| 291 | // Set html attributes |
||
| 292 | elm = headerFragment.getAll('html')[0]; |
||
| 293 | if (elm) { |
||
| 294 | setAttr(elm, 'lang', data.langcode); |
||
| 295 | setAttr(elm, 'xml:lang', data.langcode); |
||
| 296 | } |
||
| 297 | |||
| 298 | // No need for a head element |
||
| 299 | if (!headElement.firstChild) { |
||
| 300 | headElement.remove(); |
||
| 301 | } |
||
| 302 | |||
| 303 | // Serialize header fragment and crop away body part |
||
| 304 | html = new tinymce.html.Serializer({ |
||
| 305 | validate: false, |
||
| 306 | indent: true, |
||
| 307 | apply_source_formatting: true, |
||
| 308 | indent_before: 'head,html,body,meta,title,script,link,style', |
||
| 309 | indent_after: 'head,html,body,meta,title,script,link,style' |
||
| 310 | }).serialize(headerFragment); |
||
| 311 | |||
| 312 | head = html.substring(0, html.indexOf('</body>')); |
||
| 313 | } |
||
| 314 | |||
| 494 |
This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.
To learn more about declaring variables in Javascript, see the MDN.