|
1 /* |
|
2 Copyright (c) 2009, Yahoo! Inc. All rights reserved. |
|
3 Code licensed under the BSD License: |
|
4 http://developer.yahoo.net/yui/license.txt |
|
5 version: 3.0.0b1 |
|
6 build: 1163 |
|
7 */ |
|
8 YUI.add('classnamemanager', function(Y) { |
|
9 |
|
10 /** |
|
11 * Contains a singleton (ClassNameManager) that enables easy creation and caching of |
|
12 * prefixed class names. |
|
13 * @module classnamemanager |
|
14 */ |
|
15 |
|
16 /** |
|
17 * A singleton class providing: |
|
18 * |
|
19 * <ul> |
|
20 * <li>Easy creation of prefixed class names</li> |
|
21 * <li>Caching of previously created class names for improved performance.</li> |
|
22 * </ul> |
|
23 * |
|
24 * @class ClassNameManager |
|
25 * @static |
|
26 */ |
|
27 |
|
28 // String constants |
|
29 var CLASS_NAME_PREFIX = 'classNamePrefix', |
|
30 CLASS_NAME_DELIMITER = 'classNameDelimiter', |
|
31 CONFIG = Y.config; |
|
32 |
|
33 // Global config |
|
34 |
|
35 /** |
|
36 * Configuration property indicating the prefix for all CSS class names in this YUI instance. |
|
37 * |
|
38 * @property Y.config.classNamePrefix |
|
39 * @type {String} |
|
40 * @default "yui" |
|
41 * @static |
|
42 */ |
|
43 CONFIG[CLASS_NAME_PREFIX] = CONFIG[CLASS_NAME_PREFIX] || 'yui'; |
|
44 |
|
45 /** |
|
46 * Configuration property indicating the delimiter used to compose all CSS class names in |
|
47 * this YUI instance. |
|
48 * |
|
49 * @property Y.config.classNameDelimiter |
|
50 * @type {String} |
|
51 * @default "-" |
|
52 * @static |
|
53 */ |
|
54 CONFIG[CLASS_NAME_DELIMITER] = CONFIG[CLASS_NAME_DELIMITER] || '-'; |
|
55 |
|
56 Y.ClassNameManager = function () { |
|
57 |
|
58 var sPrefix = CONFIG[CLASS_NAME_PREFIX], |
|
59 sDelimiter = CONFIG[CLASS_NAME_DELIMITER]; |
|
60 |
|
61 return { |
|
62 |
|
63 /** |
|
64 * Returns a class name prefixed with the the value of the |
|
65 * <code>Y.config.classNamePrefix</code> attribute + the provided strings. |
|
66 * Uses the <code>Y.config.classNameDelimiter</code> attribute to delimit the |
|
67 * provided strings. E.g. Y.ClassNameManager.getClassName('foo','bar'); // yui-foo-bar |
|
68 * |
|
69 * @method getClassName |
|
70 * @param {String}+ one or more classname bits to be joined and prefixed |
|
71 */ |
|
72 getClassName: Y.cached(function (c, x) { |
|
73 |
|
74 var sClass = sPrefix + sDelimiter + |
|
75 // ((x) ? Y.Array(arguments, 0, true).join(sDelimiter) : c); |
|
76 ((x) ? Array.prototype.join.call(arguments, sDelimiter) : c); |
|
77 |
|
78 return sClass.replace(/\s/g, ''); |
|
79 |
|
80 }) |
|
81 |
|
82 }; |
|
83 |
|
84 }(); |
|
85 |
|
86 |
|
87 }, '3.0.0b1' ); |