You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by gm...@apache.org on 2014/07/12 02:34:04 UTC

svn commit: r1609870 [6/6] - in /roller/trunk/app/src/main/webapp: WEB-INF/jsps/editor/ roller-ui/yui3/array-extras/ roller-ui/yui3/autocomplete-base/ roller-ui/yui3/autocomplete-filters/ roller-ui/yui3/autocomplete-list-keys/ roller-ui/yui3/autocomple...

Added: roller/trunk/app/src/main/webapp/roller-ui/yui3/text-data-wordbreak/text-data-wordbreak-min.js
URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/webapp/roller-ui/yui3/text-data-wordbreak/text-data-wordbreak-min.js?rev=1609870&view=auto
==============================================================================
--- roller/trunk/app/src/main/webapp/roller-ui/yui3/text-data-wordbreak/text-data-wordbreak-min.js (added)
+++ roller/trunk/app/src/main/webapp/roller-ui/yui3/text-data-wordbreak/text-data-wordbreak-min.js Sat Jul 12 00:34:02 2014
@@ -0,0 +1,9 @@
+/*
+YUI 3.17.2 (build 9c3c78e)
+Copyright 2014 Yahoo! Inc. All rights reserved.
+Licensed under the BSD License.
+http://yuilibrary.com/license/
+*/
+
+YUI.add("text-data-wordbreak",function(e,t){e.namespace("Text.Data").WordBreak={aletter:"[A-Za-z\u00aa\u00b5\u00ba\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f3\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b1
 3-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u10a0-\u10c5\u10d0-\u10fa\u10fc\u1100-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1820-\u1877\u1880-\u18a
 8\u18aa\u18b0-\u18f5\u1900-\u191c\u1a00-\u1a16\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bc0-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u24b6-\u24e9\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2d00-\u2d25\u2d30-\u2d65\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005\u303b\u303c\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790\ua791\
 ua7a0-\ua7a9\ua7fa-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uffa0-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]",midnumlet:"['\\.\u2018\u2019\u2024\ufe52\uff07\uff0e]",midletter:"[:\u00b7\u00b7\u05f4\u2027\ufe13\ufe55\uff1a]",midnum:"[,;;\u0589\u060c\u060d\u066c\u07f8\u2044\ufe10\ufe14\ufe50\ufe54\uff0c\uff1b]",numeric:"[0-9\u0660-\u0669\u066b\u06f0-\u06f9\u07c0-\u07c9\u0966-\u096f\u09e6-\u09ef\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0be6-\u0bef\u0c66-\u0c6f\u0ce6-\u0cef\u0d66-\u0d6f\u0e50-\u0e59
 \u0ed0-\u0ed9\u0f20-\u0f29\u1040-\u1049\u1090-\u1099\u17e0-\u17e9\u1810-\u1819\u1946-\u194f\u19d0-\u19d9\u1a80-\u1a89\u1a90-\u1a99\u1b50-\u1b59\u1bb0-\u1bb9\u1c40-\u1c49\u1c50-\u1c59\ua620-\ua629\ua8d0-\ua8d9\ua900-\ua909\ua9d0-\ua9d9\uaa50-\uaa59\uabf0-\uabf9]",cr:"\\r",lf:"\\n",newline:"[\f\u0085\u2028\u2029]",extend:"[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u
 0bca-\u0bcd\u0bd7\u0c01-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d02\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f\u109a-\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b6-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u192b\u1930-\u193b\u19b0-\u19c0\u19c8\u19c9\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f\u1b00-\u1b04\u1b34-\u1b44\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1baa\u1be6-\u1bf3\u1c24-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2\u1dc0-\u1de6\u1dfc-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2d
 ff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa7b\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe3-\uabea\uabec\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]"
+,format:"[\u00ad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200e\u200f\u202a-\u202e\u2060-\u2064\u206a-\u206f\ufeff\ufff9-\ufffb]",katakana:"[\u3031-\u3035\u309b\u309c\u30a0-\u30fa\u30fc-\u30ff\u31f0-\u31ff\u32d0-\u32fe\u3300-\u3357\uff66-\uff9d]",extendnumlet:"[_\u203f\u2040\u2054\ufe33\ufe34\ufe4d-\ufe4f\uff3f]",punctuation:"[!-#%-*,-\\/:;?@\\[-\\]_{}\u00a1\u00ab\u00b7\u00bb\u00bf;\u00b7\u055a-\u055f\u0589\u058a\u05be\u05c0\u05c3\u05c6\u05f3\u05f4\u0609\u060a\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0830-\u083e\u085e\u0964\u0965\u0970\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f3a-\u0f3d\u0f85\u0fd0-\u0fd4\u0fd9\u0fda\u104a-\u104f\u10fb\u1361-\u1368\u1400\u166d\u166e\u169b\u169c\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u180a\u1944\u1945\u1a1e\u1a1f\u1aa0-\u1aa6\u1aa8-\u1aad\u1b5a-\u1b60\u1bfc-\u1bff\u1c3b-\u1c3f\u1c7e\u1c7f\u1cd3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205e\u207d\u207e\u208d\u208e\u3008\u3009\u2768-\u2775\u27c5\u27
 c6\u27e6-\u27ef\u2983-\u2998\u29d8-\u29db\u29fc\u29fd\u2cf9-\u2cfc\u2cfe\u2cff\u2d70\u2e00-\u2e2e\u2e30\u2e31\u3001-\u3003\u3008-\u3011\u3014-\u301f\u3030\u303d\u30a0\u30fb\ua4fe\ua4ff\ua60d-\ua60f\ua673\ua67e\ua6f2-\ua6f7\ua874-\ua877\ua8ce\ua8cf\ua8f8-\ua8fa\ua92e\ua92f\ua95f\ua9c1-\ua9cd\ua9de\ua9df\uaa5c-\uaa5f\uaade\uaadf\uabeb\ufd3e\ufd3f\ufe10-\ufe19\ufe30-\ufe52\ufe54-\ufe61\ufe63\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff0a\uff0c-\uff0f\uff1a\uff1b\uff1f\uff20\uff3b-\uff3d\uff3f\uff5b\uff5d\uff5f-\uff65]"}},"3.17.2",{requires:["yui-base"]});

Added: roller/trunk/app/src/main/webapp/roller-ui/yui3/text-data-wordbreak/text-data-wordbreak.js
URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/webapp/roller-ui/yui3/text-data-wordbreak/text-data-wordbreak.js?rev=1609870&view=auto
==============================================================================
--- roller/trunk/app/src/main/webapp/roller-ui/yui3/text-data-wordbreak/text-data-wordbreak.js (added)
+++ roller/trunk/app/src/main/webapp/roller-ui/yui3/text-data-wordbreak/text-data-wordbreak.js Sat Jul 12 00:34:02 2014
@@ -0,0 +1,36 @@
+/*
+YUI 3.17.2 (build 9c3c78e)
+Copyright 2014 Yahoo! Inc. All rights reserved.
+Licensed under the BSD License.
+http://yuilibrary.com/license/
+*/
+
+YUI.add('text-data-wordbreak', function (Y, NAME) {
+
+Y.namespace('Text.Data').WordBreak = {
+    // The UnicodeSet utility is helpful for enumerating the specific code
+    // points covered by each of these regular expressions:
+    // http://unicode.org/cldr/utility/list-unicodeset.jsp
+    //
+    // The code sets from which these regexes were derived can be generated
+    // by the UnicodeSet utility using the links here:
+    // http://unicode.org/cldr/utility/properties.jsp?a=Word_Break#Word_Break
+
+
+    aletter     : '[A-Za-z\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F3\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F
 -\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u10A0-\u10C5\u10D0-\u10FA\u10FC\u1100-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1A00-\u1A16\u1B05-\u1B33\u1B45-\u1B
 4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BC0-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u24B6-\u24E9\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2D00-\u2D25\u2D30-\u2D65\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u303B\u303C\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790\uA791\uA7A0-\uA7A9\uA7FA-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840
 -\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]',
+    midnumlet   : "['\\.\u2018\u2019\u2024\uFE52\uFF07\uFF0E]",
+    midletter   : '[:\u00B7\u00B7\u05F4\u2027\uFE13\uFE55\uFF1A]',
+    midnum      : '[,;;\u0589\u060C\u060D\u066C\u07F8\u2044\uFE10\uFE14\uFE50\uFE54\uFF0C\uFF1B]',
+    numeric     : '[0-9\u0660-\u0669\u066B\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uAA50-\uAA59\uABF0-\uABF9]',
+    cr          : '\\r',
+    lf          : '\\n',
+    newline     : '[\u000B\u000C\u0085\u2028\u2029]',
+    extend      : '[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u0900-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C01-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C82\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D02\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF
 3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B6-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u192B\u1930-\u193B\u19B0-\u19C0\u19C8\u19C9\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAA\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2\u1DC0-\u1DE6\u1DFC-\u1DFF\u200C\u200D\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA67C\uA67D\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uABE3-\uABEA\uABEC\uABED\uFB1E\u
 FE00-\uFE0F\uFE20-\uFE26\uFF9E\uFF9F]',
+    format      : '[\u00AD\u0600-\u0603\u06DD\u070F\u17B4\u17B5\u200E\u200F\u202A-\u202E\u2060-\u2064\u206A-\u206F\uFEFF\uFFF9-\uFFFB]',
+    katakana    : '[\u3031-\u3035\u309B\u309C\u30A0-\u30FA\u30FC-\u30FF\u31F0-\u31FF\u32D0-\u32FE\u3300-\u3357\uFF66-\uFF9D]',
+    extendnumlet: '[_\u203F\u2040\u2054\uFE33\uFE34\uFE4D-\uFE4F\uFF3F]',
+    punctuation : '[!-#%-*,-\\/:;?@\\[-\\]_{}\u00A1\u00AB\u00B7\u00BB\u00BF;\u00B7\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1361-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u3008\u3009\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30\u2E31\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\u
 AA5C-\uAA5F\uAADE\uAADF\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]'
+};
+
+
+}, '3.17.2', {"requires": ["yui-base"]});

Added: roller/trunk/app/src/main/webapp/roller-ui/yui3/text-wordbreak/text-wordbreak-min.js
URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/webapp/roller-ui/yui3/text-wordbreak/text-wordbreak-min.js?rev=1609870&view=auto
==============================================================================
--- roller/trunk/app/src/main/webapp/roller-ui/yui3/text-wordbreak/text-wordbreak-min.js (added)
+++ roller/trunk/app/src/main/webapp/roller-ui/yui3/text-wordbreak/text-wordbreak-min.js Sat Jul 12 00:34:02 2014
@@ -0,0 +1,8 @@
+/*
+YUI 3.17.2 (build 9c3c78e)
+Copyright 2014 Yahoo! Inc. All rights reserved.
+Licensed under the BSD License.
+http://yuilibrary.com/license/
+*/
+
+YUI.add("text-wordbreak",function(e,t){var n=e.Text,r=n.Data.WordBreak,i=0,s=1,o=2,u=3,a=4,f=5,l=6,c=7,h=8,p=9,d=10,v=11,m=12,g=[new RegExp(r.aletter),new RegExp(r.midnumlet),new RegExp(r.midletter),new RegExp(r.midnum),new RegExp(r.numeric),new RegExp(r.cr),new RegExp(r.lf),new RegExp(r.newline),new RegExp(r.extend),new RegExp(r.format),new RegExp(r.katakana),new RegExp(r.extendnumlet)],y="",b=new RegExp("^"+r.punctuation+"$"),w=/\s/,E={getWords:function(e,t){var n=0,r=E._classify(e),i=r.length,s=[],o=[],u,a,f;t||(t={}),t.ignoreCase&&(e=e.toLowerCase()),a=t.includePunctuation,f=t.includeWhitespace;for(;n<i;++n)u=e.charAt(n),s.push(u),E._isWordBoundary(r,n)&&(s=s.join(y),s&&(f||!w.test(s))&&(a||!b.test(s))&&o.push(s),s=[]);return o},getUniqueWords:function(t,n){return e.Array.unique(E.getWords(t,n))},isWordBoundary:function(e,t){return E._isWordBoundary(E._classify(e),t)},_classify:function(e){var t,n=[],r=0,i,s,o=e.length,u=g.length,a;for(;r<o;++r){t=e.charAt(r),a=m;for(i=0;i<u;++i
 ){s=g[i];if(s&&s.test(t)){a=i;break}}n.push(a)}return n},_isWordBoundary:function(e,t){var n,r=e[t],m=e[t+1],g;return t<0||t>e.length-1&&t!==0?!1:r===i&&m===i?!1:(g=e[t+2],r!==i||m!==o&&m!==s||g!==i?(n=e[t-1],r!==o&&r!==s||m!==i||n!==i?r!==a&&r!==i||m!==a&&m!==i?r!==u&&r!==s||m!==a||n!==a?r!==a||m!==u&&m!==s||g!==a?r===h||r===p||n===h||n===p||m===h||m===p?!1:r===f&&m===l?!1:r===c||r===f||r===l?!0:m===c||m===f||m===l?!0:r===d&&m===d?!1:m!==v||r!==i&&r!==a&&r!==d&&r!==v?r!==v||m!==i&&m!==a&&m!==d?!0:!1:!1:!1:!1:!1:!1):!1)}};n.WordBreak=E},"3.17.2",{requires:["array-extras","text-data-wordbreak"]});

Added: roller/trunk/app/src/main/webapp/roller-ui/yui3/text-wordbreak/text-wordbreak.js
URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/webapp/roller-ui/yui3/text-wordbreak/text-wordbreak.js?rev=1609870&view=auto
==============================================================================
--- roller/trunk/app/src/main/webapp/roller-ui/yui3/text-wordbreak/text-wordbreak.js (added)
+++ roller/trunk/app/src/main/webapp/roller-ui/yui3/text-wordbreak/text-wordbreak.js Sat Jul 12 00:34:02 2014
@@ -0,0 +1,369 @@
+/*
+YUI 3.17.2 (build 9c3c78e)
+Copyright 2014 Yahoo! Inc. All rights reserved.
+Licensed under the BSD License.
+http://yuilibrary.com/license/
+*/
+
+YUI.add('text-wordbreak', function (Y, NAME) {
+
+/**
+ * Provides utility methods for splitting strings on word breaks and determining
+ * whether a character index represents a word boundary.
+ *
+ * @module text
+ * @submodule text-wordbreak
+ */
+
+/**
+ * <p>
+ * Provides utility methods for splitting strings on word breaks and determining
+ * whether a character index represents a word boundary, using the generic word
+ * breaking algorithm defined in the Unicode Text Segmentation guidelines
+ * (<a href="http://unicode.org/reports/tr29/#Word_Boundaries">Unicode Standard
+ * Annex #29</a>).
+ * </p>
+ *
+ * <p>
+ * This algorithm provides a reasonable default for many languages. However, it
+ * does not cover language or context specific requirements, and it does not
+ * provide meaningful results at all for languages that don't use spaces between
+ * words, such as Chinese, Japanese, Thai, Lao, Khmer, and others. Server-based
+ * word breaking services usually provide significantly better results with
+ * better performance.
+ * </p>
+ *
+ * @class Text.WordBreak
+ * @static
+ */
+
+var Text   = Y.Text,
+    WBData = Text.Data.WordBreak,
+
+// Constants representing code point classifications.
+ALETTER      = 0,
+MIDNUMLET    = 1,
+MIDLETTER    = 2,
+MIDNUM       = 3,
+NUMERIC      = 4,
+CR           = 5,
+LF           = 6,
+NEWLINE      = 7,
+EXTEND       = 8,
+FORMAT       = 9,
+KATAKANA     = 10,
+EXTENDNUMLET = 11,
+OTHER        = 12,
+
+// RegExp objects generated from code point data. Each regex matches a single
+// character against a set of Unicode code points. The index of each item in
+// this array must match its corresponding code point constant value defined
+// above.
+SETS = [
+    new RegExp(WBData.aletter),
+    new RegExp(WBData.midnumlet),
+    new RegExp(WBData.midletter),
+    new RegExp(WBData.midnum),
+    new RegExp(WBData.numeric),
+    new RegExp(WBData.cr),
+    new RegExp(WBData.lf),
+    new RegExp(WBData.newline),
+    new RegExp(WBData.extend),
+    new RegExp(WBData.format),
+    new RegExp(WBData.katakana),
+    new RegExp(WBData.extendnumlet)
+],
+
+EMPTY_STRING = '',
+PUNCTUATION  = new RegExp('^' + WBData.punctuation + '$'),
+WHITESPACE   = /\s/,
+
+WordBreak = {
+    // -- Public Static Methods ------------------------------------------------
+
+    /**
+     * Splits the specified string into an array of individual words.
+     *
+     * @method getWords
+     * @param {String} string String to split.
+     * @param {Object} options (optional) Options object containing zero or more
+     *   of the following properties:
+     *
+     * <dl>
+     *   <dt>ignoreCase (Boolean)</dt>
+     *   <dd>
+     *     If <code>true</code>, the string will be converted to lowercase
+     *     before being split. Default is <code>false</code>.
+     *   </dd>
+     *
+     *   <dt>includePunctuation (Boolean)</dt>
+     *   <dd>
+     *     If <code>true</code>, the returned array will include punctuation
+     *     characters. Default is <code>false</code>.
+     *   </dd>
+     *
+     *   <dt>includeWhitespace (Boolean)</dt>
+     *   <dd>
+     *     If <code>true</code>, the returned array will include whitespace
+     *     characters. Default is <code>false</code>.
+     *   </dd>
+     * </dl>
+     * @return {Array} Array of words.
+     * @static
+     */
+    getWords: function (string, options) {
+        var i     = 0,
+            map   = WordBreak._classify(string),
+            len   = map.length,
+            word  = [],
+            words = [],
+            chr,
+            includePunctuation,
+            includeWhitespace;
+
+        if (!options) {
+            options = {};
+        }
+
+        if (options.ignoreCase) {
+            string = string.toLowerCase();
+        }
+
+        includePunctuation = options.includePunctuation;
+        includeWhitespace  = options.includeWhitespace;
+
+        // Loop through each character in the classification map and determine
+        // whether it precedes a word boundary, building an array of distinct
+        // words as we go.
+        for (; i < len; ++i) {
+            chr = string.charAt(i);
+
+            // Append this character to the current word.
+            word.push(chr);
+
+            // If there's a word boundary between the current character and the
+            // next character, append the current word to the words array and
+            // start building a new word.
+            if (WordBreak._isWordBoundary(map, i)) {
+                word = word.join(EMPTY_STRING);
+
+                if (word &&
+                        (includeWhitespace  || !WHITESPACE.test(word)) &&
+                        (includePunctuation || !PUNCTUATION.test(word))) {
+                    words.push(word);
+                }
+
+                word = [];
+            }
+        }
+
+        return words;
+    },
+
+    /**
+     * Returns an array containing only unique words from the specified string.
+     * For example, the string <code>'foo bar baz foo'</code> would result in
+     * the array <code>['foo', 'bar', 'baz']</code>.
+     *
+     * @method getUniqueWords
+     * @param {String} string String to split.
+     * @param {Object} options (optional) Options (see <code>getWords()</code>
+     *   for details).
+     * @return {Array} Array of unique words.
+     * @static
+     */
+    getUniqueWords: function (string, options) {
+        return Y.Array.unique(WordBreak.getWords(string, options));
+    },
+
+    /**
+     * <p>
+     * Returns <code>true</code> if there is a word boundary between the
+     * specified character index and the next character index (or the end of the
+     * string).
+     * </p>
+     *
+     * <p>
+     * Note that there are always word breaks at the beginning and end of a
+     * string, so <code>isWordBoundary('', 0)</code> and
+     * <code>isWordBoundary('a', 0)</code> will both return <code>true</code>.
+     * </p>
+     *
+     * @method isWordBoundary
+     * @param {String} string String to test.
+     * @param {Number} index Character index to test within the string.
+     * @return {Boolean} <code>true</code> for a word boundary,
+     *   <code>false</code> otherwise.
+     * @static
+     */
+    isWordBoundary: function (string, index) {
+        return WordBreak._isWordBoundary(WordBreak._classify(string), index);
+    },
+
+    // -- Protected Static Methods ---------------------------------------------
+
+    /**
+     * Returns a character classification map for the specified string.
+     *
+     * @method _classify
+     * @param {String} string String to classify.
+     * @return {Array} Classification map.
+     * @protected
+     * @static
+     */
+    _classify: function (string) {
+        var chr,
+            map          = [],
+            i            = 0,
+            j,
+            set,
+            stringLength = string.length,
+            setsLength   = SETS.length,
+            type;
+
+        for (; i < stringLength; ++i) {
+            chr  = string.charAt(i);
+            type = OTHER;
+
+            for (j = 0; j < setsLength; ++j) {
+                set = SETS[j];
+
+                if (set && set.test(chr)) {
+                    type = j;
+                    break;
+                }
+            }
+
+            map.push(type);
+        }
+
+        return map;
+    },
+
+    /**
+     * <p>
+     * Returns <code>true</code> if there is a word boundary between the
+     * specified character index and the next character index (or the end of the
+     * string).
+     * </p>
+     *
+     * <p>
+     * Note that there are always word breaks at the beginning and end of a
+     * string, so <code>_isWordBoundary('', 0)</code> and
+     * <code>_isWordBoundary('a', 0)</code> will both return <code>true</code>.
+     * </p>
+     *
+     * @method _isWordBoundary
+     * @param {Array} map Character classification map generated by
+     *   <code>_classify</code>.
+     * @param {Number} index Character index to test.
+     * @return {Boolean}
+     * @protected
+     * @static
+     */
+    _isWordBoundary: function (map, index) {
+        var prevType,
+            type     = map[index],
+            nextType = map[index + 1],
+            nextNextType;
+
+        if (index < 0 || (index > map.length - 1 && index !== 0)) {
+            return false;
+        }
+
+        // WB5. Don't break between most letters.
+        if (type === ALETTER && nextType === ALETTER) {
+            return false;
+        }
+
+        nextNextType = map[index + 2];
+
+        // WB6. Don't break letters across certain punctuation.
+        if (type === ALETTER &&
+                (nextType === MIDLETTER || nextType === MIDNUMLET) &&
+                nextNextType === ALETTER) {
+            return false;
+        }
+
+        prevType = map[index - 1];
+
+        // WB7. Don't break letters across certain punctuation.
+        if ((type === MIDLETTER || type === MIDNUMLET) &&
+                nextType === ALETTER &&
+                prevType === ALETTER) {
+            return false;
+        }
+
+        // WB8/WB9/WB10. Don't break inside sequences of digits or digits
+        // adjacent to letters.
+        if ((type === NUMERIC || type === ALETTER) &&
+                (nextType === NUMERIC || nextType === ALETTER)) {
+            return false;
+        }
+
+        // WB11. Don't break inside numeric sequences like "3.2" or
+        // "3,456.789".
+        if ((type === MIDNUM || type === MIDNUMLET) &&
+                nextType === NUMERIC &&
+                prevType === NUMERIC) {
+            return false;
+        }
+
+        // WB12. Don't break inside numeric sequences like "3.2" or
+        // "3,456.789".
+        if (type === NUMERIC &&
+                (nextType === MIDNUM || nextType === MIDNUMLET) &&
+                nextNextType === NUMERIC) {
+            return false;
+        }
+
+        // WB4. Ignore format and extend characters.
+        if (type === EXTEND || type === FORMAT ||
+                prevType === EXTEND || prevType === FORMAT ||
+                nextType === EXTEND || nextType === FORMAT) {
+            return false;
+        }
+
+        // WB3. Don't break inside CRLF.
+        if (type === CR && nextType === LF) {
+            return false;
+        }
+
+        // WB3a. Break before newlines (including CR and LF).
+        if (type === NEWLINE || type === CR || type === LF) {
+            return true;
+        }
+
+        // WB3b. Break after newlines (including CR and LF).
+        if (nextType === NEWLINE || nextType === CR || nextType === LF) {
+            return true;
+        }
+
+        // WB13. Don't break between Katakana characters.
+        if (type === KATAKANA && nextType === KATAKANA) {
+            return false;
+        }
+
+        // WB13a. Don't break from extenders.
+        if (nextType === EXTENDNUMLET &&
+                (type === ALETTER || type === NUMERIC || type === KATAKANA ||
+                type === EXTENDNUMLET)) {
+            return false;
+        }
+
+        // WB13b. Don't break from extenders.
+        if (type === EXTENDNUMLET &&
+                (nextType === ALETTER || nextType === NUMERIC ||
+                nextType === KATAKANA)) {
+            return false;
+        }
+
+        // Break after any character not covered by the rules above.
+        return true;
+    }
+};
+
+Text.WordBreak = WordBreak;
+
+
+}, '3.17.2', {"requires": ["array-extras", "text-data-wordbreak"]});

Added: roller/trunk/app/src/main/webapp/roller-ui/yui3/widget-position-align/widget-position-align-min.js
URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/webapp/roller-ui/yui3/widget-position-align/widget-position-align-min.js?rev=1609870&view=auto
==============================================================================
--- roller/trunk/app/src/main/webapp/roller-ui/yui3/widget-position-align/widget-position-align-min.js (added)
+++ roller/trunk/app/src/main/webapp/roller-ui/yui3/widget-position-align/widget-position-align-min.js Sat Jul 12 00:34:02 2014
@@ -0,0 +1,8 @@
+/*
+YUI 3.17.2 (build 9c3c78e)
+Copyright 2014 Yahoo! Inc. All rights reserved.
+Licensed under the BSD License.
+http://yuilibrary.com/license/
+*/
+
+YUI.add("widget-position-align",function(e,t){function c(e){}var n=e.Lang,r="align",i="alignOn",s="visible",o="boundingBox",u="offsetWidth",a="offsetHeight",f="region",l="viewportRegion";c.ATTRS={align:{value:null},centered:{setter:"_setAlignCenter",lazyAdd:!1,value:!1},alignOn:{value:[],validator:e.Lang.isArray}},c.TL="tl",c.TR="tr",c.BL="bl",c.BR="br",c.TC="tc",c.RC="rc",c.BC="bc",c.LC="lc",c.CC="cc",c.prototype={initializer:function(){this._posNode||e.error("WidgetPosition needs to be added to the Widget, before WidgetPositionAlign is added"),e.after(this._bindUIPosAlign,this,"bindUI"),e.after(this._syncUIPosAlign,this,"syncUI")},_posAlignUIHandles:null,destructor:function(){this._detachPosAlignUIHandles()},_bindUIPosAlign:function(){this.after("alignChange",this._afterAlignChange),this.after("alignOnChange",this._afterAlignOnChange),this.after("visibleChange",this._syncUIPosAlign)},_syncUIPosAlign:function(){var e=this.get(r);this._uiSetVisiblePosAlign(this.get(s)),e&&this._uiSe
 tAlign(e.node,e.points)},align:function(e,t){return arguments.length?this.set(r,{node:e,points:t}):this._syncUIPosAlign(),this},centered:function(e){return this.align(e,[c.CC,c.CC])},_setAlignCenter:function(e){return e&&this.set(r,{node:e===!0?null:e,points:[c.CC,c.CC]}),e},_uiSetAlign:function(t,r){if(!n.isArray(r)||r.length!==2){e.error("align: Invalid Points Arguments");return}var i=this._getRegion(t),s,o,u;if(!i)return;s=r[0],o=r[1];switch(o){case c.TL:u=[i.left,i.top];break;case c.TR:u=[i.right,i.top];break;case c.BL:u=[i.left,i.bottom];break;case c.BR:u=[i.right,i.bottom];break;case c.TC:u=[i.left+Math.floor(i.width/2),i.top];break;case c.BC:u=[i.left+Math.floor(i.width/2),i.bottom];break;case c.LC:u=[i.left,i.top+Math.floor(i.height/2)];break;case c.RC:u=[i.right,i.top+Math.floor(i.height/2)];break;case c.CC:u=[i.left+Math.floor(i.width/2),i.top+Math.floor(i.height/2)];break;default:}u&&this._doAlign(s,u[0],u[1])},_uiSetVisiblePosAlign:function(e){e?this._attachPosAlignUIHan
 dles():this._detachPosAlignUIHandles()},_attachPosAlignUIHandles:function(){if(this._posAlignUIHandles)return;var t=this.get(o),n=e.bind(this._syncUIPosAlign,this),r=[];e.Array.each(this.get(i),function(i){var s=i.eventName,o=e.one(i.node)||t;s&&r.push(o.on(s,n))}),this._posAlignUIHandles=r},_detachPosAlignUIHandles:function(){var t=this._posAlignUIHandles;t&&((new e.EventHandle(t)).detach(),this._posAlignUIHandles=null)},_doAlign:function(e,t,n){var r=this._posNode,i;switch(e){case c.TL:i=[t,n];break;case c.TR:i=[t-r.get(u),n];break;case c.BL:i=[t,n-r.get(a)];break;case c.BR:i=[t-r.get(u),n-r.get(a)];break;case c.TC:i=[t-r.get(u)/2,n];break;case c.BC:i=[t-r.get(u)/2,n-r.get(a)];break;case c.LC:i=[t,n-r.get(a)/2];break;case c.RC:i=[t-r.get(u),n-r.get(a)/2];break;case c.CC:i=[t-r.get(u)/2,n-r.get(a)/2];break;default:}i&&this.move(i)},_getRegion:function(t){var n;return t?(t=e.Node.one(t),t&&(n=t.get(f))):n=this._posNode.get(l),n},_afterAlignChange:function(e){var t=e.newVal;t&&this._
 uiSetAlign(t.node,t.points)},_afterAlignOnChange:function(e){this._detachPosAlignUIHandles(),this.get(s)&&this._attachPosAlignUIHandles()}},e.WidgetPositionAlign=c},"3.17.2",{requires:["widget-position"]});

Added: roller/trunk/app/src/main/webapp/roller-ui/yui3/widget-position-align/widget-position-align.js
URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/webapp/roller-ui/yui3/widget-position-align/widget-position-align.js?rev=1609870&view=auto
==============================================================================
--- roller/trunk/app/src/main/webapp/roller-ui/yui3/widget-position-align/widget-position-align.js (added)
+++ roller/trunk/app/src/main/webapp/roller-ui/yui3/widget-position-align/widget-position-align.js Sat Jul 12 00:34:02 2014
@@ -0,0 +1,659 @@
+/*
+YUI 3.17.2 (build 9c3c78e)
+Copyright 2014 Yahoo! Inc. All rights reserved.
+Licensed under the BSD License.
+http://yuilibrary.com/license/
+*/
+
+YUI.add('widget-position-align', function (Y, NAME) {
+
+/**
+Provides extended/advanced XY positioning support for Widgets, through an
+extension.
+
+It builds on top of the `widget-position` module, to provide alignment and
+centering support. Future releases aim to add constrained and fixed positioning
+support.
+
+@module widget-position-align
+**/
+var Lang = Y.Lang,
+
+    ALIGN        = 'align',
+    ALIGN_ON     = 'alignOn',
+
+    VISIBLE      = 'visible',
+    BOUNDING_BOX = 'boundingBox',
+
+    OFFSET_WIDTH    = 'offsetWidth',
+    OFFSET_HEIGHT   = 'offsetHeight',
+    REGION          = 'region',
+    VIEWPORT_REGION = 'viewportRegion';
+
+/**
+Widget extension, which can be used to add extended XY positioning support to
+the base Widget class, through the `Base.create` method.
+
+**Note:** This extension requires that the `WidgetPosition` extension be added
+to the Widget (before `WidgetPositionAlign`, if part of the same extension list
+passed to `Base.build`).
+
+@class WidgetPositionAlign
+@param {Object} config User configuration object.
+@constructor
+**/
+function PositionAlign (config) {}
+
+PositionAlign.ATTRS = {
+
+    /**
+    The alignment configuration for this widget.
+
+    The `align` attribute is used to align a reference point on the widget, with
+    the reference point on another `Node`, or the viewport. The object which
+    `align` expects has the following properties:
+
+      * __`node`__: The `Node` to which the widget is to be aligned. If set to
+        `null`, or not provided, the widget is aligned to the viewport.
+
+      * __`points`__: A two element Array, defining the two points on the widget
+        and `Node`/viewport which are to be aligned. The first element is the
+        point on the widget, and the second element is the point on the
+        `Node`/viewport. Supported alignment points are defined as static
+        properties on `WidgetPositionAlign`.
+
+    @example Aligns the top-right corner of the widget with the top-left corner
+    of the viewport:
+
+        myWidget.set('align', {
+            points: [Y.WidgetPositionAlign.TR, Y.WidgetPositionAlign.TL]
+        });
+
+    @attribute align
+    @type Object
+    @default null
+    **/
+    align: {
+        value: null
+    },
+
+    /**
+    A convenience Attribute, which can be used as a shortcut for the `align`
+    Attribute.
+
+    If set to `true`, the widget is centered in the viewport. If set to a `Node`
+    reference or valid selector String, the widget will be centered within the
+    `Node`. If set to `false`, no center positioning is applied.
+
+    @attribute centered
+    @type Boolean|Node
+    @default false
+    **/
+    centered: {
+        setter : '_setAlignCenter',
+        lazyAdd:false,
+        value  :false
+    },
+
+    /**
+    An Array of Objects corresponding to the `Node`s and events that will cause
+    the alignment of this widget to be synced to the DOM.
+
+    The `alignOn` Attribute is expected to be an Array of Objects with the
+    following properties:
+
+      * __`eventName`__: The String event name to listen for.
+
+      * __`node`__: The optional `Node` that will fire the event, it can be a
+        `Node` reference or a selector String. This will default to the widget's
+        `boundingBox`.
+
+    @example Sync this widget's alignment on window resize:
+
+        myWidget.set('alignOn', [
+            {
+                node     : Y.one('win'),
+                eventName: 'resize'
+            }
+        ]);
+
+    @attribute alignOn
+    @type Array
+    @default []
+    **/
+    alignOn: {
+        value    : [],
+        validator: Y.Lang.isArray
+    }
+};
+
+/**
+Constant used to specify the top-left corner for alignment
+
+@property TL
+@type String
+@value 'tl'
+@static
+**/
+PositionAlign.TL = 'tl';
+
+/**
+Constant used to specify the top-right corner for alignment
+
+@property TR
+@type String
+@value 'tr'
+@static
+**/
+PositionAlign.TR = 'tr';
+
+/**
+Constant used to specify the bottom-left corner for alignment
+
+@property BL
+@type String
+@value 'bl'
+@static
+**/
+PositionAlign.BL = 'bl';
+
+/**
+Constant used to specify the bottom-right corner for alignment
+
+@property BR
+@type String
+@value 'br'
+@static
+**/
+PositionAlign.BR = 'br';
+
+/**
+Constant used to specify the top edge-center point for alignment
+
+@property TC
+@type String
+@value 'tc'
+@static
+**/
+PositionAlign.TC = 'tc';
+
+/**
+Constant used to specify the right edge, center point for alignment
+
+@property RC
+@type String
+@value 'rc'
+@static
+**/
+PositionAlign.RC = 'rc';
+
+/**
+Constant used to specify the bottom edge, center point for alignment
+
+@property BC
+@type String
+@value 'bc'
+@static
+**/
+PositionAlign.BC = 'bc';
+
+/**
+Constant used to specify the left edge, center point for alignment
+
+@property LC
+@type String
+@value 'lc'
+@static
+**/
+PositionAlign.LC = 'lc';
+
+/**
+Constant used to specify the center of widget/node/viewport for alignment
+
+@property CC
+@type String
+@value 'cc'
+@static
+*/
+PositionAlign.CC = 'cc';
+
+PositionAlign.prototype = {
+    // -- Protected Properties -------------------------------------------------
+
+
+    initializer : function() {
+        if (!this._posNode) {
+            Y.error('WidgetPosition needs to be added to the Widget, ' +
+                'before WidgetPositionAlign is added');
+        }
+
+        Y.after(this._bindUIPosAlign, this, 'bindUI');
+        Y.after(this._syncUIPosAlign, this, 'syncUI');
+    },
+
+    /**
+    Holds the alignment-syncing event handles.
+
+    @property _posAlignUIHandles
+    @type Array
+    @default null
+    @protected
+    **/
+    _posAlignUIHandles: null,
+
+    // -- Lifecycle Methods ----------------------------------------------------
+
+    destructor: function () {
+        this._detachPosAlignUIHandles();
+    },
+
+    /**
+    Bind event listeners responsible for updating the UI state in response to
+    the widget's position-align related state changes.
+
+    This method is invoked after `bindUI` has been invoked for the `Widget`
+    class using the AOP infrastructure.
+
+    @method _bindUIPosAlign
+    @protected
+    **/
+    _bindUIPosAlign: function () {
+        this.after('alignChange', this._afterAlignChange);
+        this.after('alignOnChange', this._afterAlignOnChange);
+        this.after('visibleChange', this._syncUIPosAlign);
+    },
+
+    /**
+    Synchronizes the current `align` Attribute value to the DOM.
+
+    This method is invoked after `syncUI` has been invoked for the `Widget`
+    class using the AOP infrastructure.
+
+    @method _syncUIPosAlign
+    @protected
+    **/
+    _syncUIPosAlign: function () {
+        var align = this.get(ALIGN);
+
+        this._uiSetVisiblePosAlign(this.get(VISIBLE));
+
+        if (align) {
+            this._uiSetAlign(align.node, align.points);
+        }
+    },
+
+    // -- Public Methods -------------------------------------------------------
+
+    /**
+    Aligns this widget to the provided `Node` (or viewport) using the provided
+    points. This method can be invoked with no arguments which will cause the
+    widget's current `align` Attribute value to be synced to the DOM.
+
+    @example Aligning to the top-left corner of the `<body>`:
+
+        myWidget.align('body',
+            [Y.WidgetPositionAlign.TL, Y.WidgetPositionAlign.TR]);
+
+    @method align
+    @param {Node|String|null} [node] A reference (or selector String) for the
+      `Node` which with the widget is to be aligned. If null is passed in, the
+      widget will be aligned with the viewport.
+    @param {Array[2]} [points] A two item array specifying the points on the
+      widget and `Node`/viewport which will to be aligned. The first entry is
+      the point on the widget, and the second entry is the point on the
+      `Node`/viewport. Valid point references are defined as static constants on
+      the `WidgetPositionAlign` extension.
+    @chainable
+    **/
+    align: function (node, points) {
+        if (arguments.length) {
+            // Set the `align` Attribute.
+            this.set(ALIGN, {
+                node  : node,
+                points: points
+            });
+        } else {
+            // Sync the current `align` Attribute value to the DOM.
+            this._syncUIPosAlign();
+        }
+
+        return this;
+    },
+
+    /**
+    Centers the widget in the viewport, or if a `Node` is passed in, it will
+    be centered to that `Node`.
+
+    @method centered
+    @param {Node|String} [node] A `Node` reference or selector String defining
+      the `Node` which the widget should be centered. If a `Node` is not  passed
+      in, then the widget will be centered to the viewport.
+    @chainable
+    **/
+    centered: function (node) {
+        return this.align(node, [PositionAlign.CC, PositionAlign.CC]);
+    },
+
+    // -- Protected Methods ----------------------------------------------------
+
+    /**
+    Default setter for `center` Attribute changes. Sets up the appropriate
+    value, and passes it through the to the align attribute.
+
+    @method _setAlignCenter
+    @param {Boolean|Node} val The Attribute value being set.
+    @return {Boolean|Node} the value passed in.
+    @protected
+    **/
+    _setAlignCenter: function (val) {
+        if (val) {
+            this.set(ALIGN, {
+                node  : val === true ? null : val,
+                points: [PositionAlign.CC, PositionAlign.CC]
+            });
+        }
+
+        return val;
+    },
+
+    /**
+    Updates the UI to reflect the `align` value passed in.
+
+    **Note:** See the `align` Attribute documentation, for the Object structure
+    expected.
+
+    @method _uiSetAlign
+    @param {Node|String|null} [node] The node to align to, or null to indicate
+      the viewport.
+    @param {Array} points The alignment points.
+    @protected
+    **/
+    _uiSetAlign: function (node, points) {
+        if ( ! Lang.isArray(points) || points.length !== 2) {
+            Y.error('align: Invalid Points Arguments');
+            return;
+        }
+
+        var nodeRegion = this._getRegion(node),
+            widgetPoint, nodePoint, xy;
+
+        if ( ! nodeRegion) {
+            // No-op, nothing to align to.
+            return;
+        }
+
+        widgetPoint = points[0];
+        nodePoint   = points[1];
+
+        // TODO: Optimize KWeight - Would lookup table help?
+        switch (nodePoint) {
+        case PositionAlign.TL:
+            xy = [nodeRegion.left, nodeRegion.top];
+            break;
+
+        case PositionAlign.TR:
+            xy = [nodeRegion.right, nodeRegion.top];
+            break;
+
+        case PositionAlign.BL:
+            xy = [nodeRegion.left, nodeRegion.bottom];
+            break;
+
+        case PositionAlign.BR:
+            xy = [nodeRegion.right, nodeRegion.bottom];
+            break;
+
+        case PositionAlign.TC:
+            xy = [
+                nodeRegion.left + Math.floor(nodeRegion.width / 2),
+                nodeRegion.top
+            ];
+            break;
+
+        case PositionAlign.BC:
+            xy = [
+                nodeRegion.left + Math.floor(nodeRegion.width / 2),
+                nodeRegion.bottom
+            ];
+            break;
+
+        case PositionAlign.LC:
+            xy = [
+                nodeRegion.left,
+                nodeRegion.top + Math.floor(nodeRegion.height / 2)
+            ];
+            break;
+
+        case PositionAlign.RC:
+            xy = [
+                nodeRegion.right,
+                nodeRegion.top + Math.floor(nodeRegion.height / 2)
+            ];
+            break;
+
+        case PositionAlign.CC:
+            xy = [
+                nodeRegion.left + Math.floor(nodeRegion.width / 2),
+                nodeRegion.top + Math.floor(nodeRegion.height / 2)
+            ];
+            break;
+
+        default:
+            break;
+
+        }
+
+        if (xy) {
+            this._doAlign(widgetPoint, xy[0], xy[1]);
+        }
+    },
+
+    /**
+    Attaches or detaches alignment-syncing event handlers based on the widget's
+    `visible` Attribute state.
+
+    @method _uiSetVisiblePosAlign
+    @param {Boolean} visible The current value of the widget's `visible`
+      Attribute.
+    @protected
+    **/
+    _uiSetVisiblePosAlign: function (visible) {
+        if (visible) {
+            this._attachPosAlignUIHandles();
+        } else {
+            this._detachPosAlignUIHandles();
+        }
+    },
+
+    /**
+    Attaches the alignment-syncing event handlers.
+
+    @method _attachPosAlignUIHandles
+    @protected
+    **/
+    _attachPosAlignUIHandles: function () {
+        if (this._posAlignUIHandles) {
+            // No-op if we have already setup the event handlers.
+            return;
+        }
+
+        var bb        = this.get(BOUNDING_BOX),
+            syncAlign = Y.bind(this._syncUIPosAlign, this),
+            handles   = [];
+
+        Y.Array.each(this.get(ALIGN_ON), function (o) {
+            var event = o.eventName,
+                node  = Y.one(o.node) || bb;
+
+            if (event) {
+                handles.push(node.on(event, syncAlign));
+            }
+        });
+
+        this._posAlignUIHandles = handles;
+    },
+
+    /**
+    Detaches the alignment-syncing event handlers.
+
+    @method _detachPosAlignUIHandles
+    @protected
+    **/
+    _detachPosAlignUIHandles: function () {
+        var handles = this._posAlignUIHandles;
+        if (handles) {
+            new Y.EventHandle(handles).detach();
+            this._posAlignUIHandles = null;
+        }
+    },
+
+    // -- Private Methods ------------------------------------------------------
+
+    /**
+    Helper method, used to align the given point on the widget, with the XY page
+    coordinates provided.
+
+    @method _doAlign
+    @param {String} widgetPoint Supported point constant
+      (e.g. WidgetPositionAlign.TL)
+    @param {Number} x X page coordinate to align to.
+    @param {Number} y Y page coordinate to align to.
+    @private
+    **/
+    _doAlign: function (widgetPoint, x, y) {
+        var widgetNode = this._posNode,
+            xy;
+
+        switch (widgetPoint) {
+        case PositionAlign.TL:
+            xy = [x, y];
+            break;
+
+        case PositionAlign.TR:
+            xy = [
+                x - widgetNode.get(OFFSET_WIDTH),
+                y
+            ];
+            break;
+
+        case PositionAlign.BL:
+            xy = [
+                x,
+                y - widgetNode.get(OFFSET_HEIGHT)
+            ];
+            break;
+
+        case PositionAlign.BR:
+            xy = [
+                x - widgetNode.get(OFFSET_WIDTH),
+                y - widgetNode.get(OFFSET_HEIGHT)
+            ];
+            break;
+
+        case PositionAlign.TC:
+            xy = [
+                x - (widgetNode.get(OFFSET_WIDTH) / 2),
+                y
+            ];
+            break;
+
+        case PositionAlign.BC:
+            xy = [
+                x - (widgetNode.get(OFFSET_WIDTH) / 2),
+                y - widgetNode.get(OFFSET_HEIGHT)
+            ];
+            break;
+
+        case PositionAlign.LC:
+            xy = [
+                x,
+                y - (widgetNode.get(OFFSET_HEIGHT) / 2)
+            ];
+            break;
+
+        case PositionAlign.RC:
+            xy = [
+                x - widgetNode.get(OFFSET_WIDTH),
+                y - (widgetNode.get(OFFSET_HEIGHT) / 2)
+            ];
+            break;
+
+        case PositionAlign.CC:
+            xy = [
+                x - (widgetNode.get(OFFSET_WIDTH) / 2),
+                y - (widgetNode.get(OFFSET_HEIGHT) / 2)
+            ];
+            break;
+
+        default:
+            break;
+
+        }
+
+        if (xy) {
+            this.move(xy);
+        }
+    },
+
+    /**
+    Returns the region of the passed-in `Node`, or the viewport region if
+    calling with passing in a `Node`.
+
+    @method _getRegion
+    @param {Node} [node] The node to get the region of.
+    @return {Object} The node's region.
+    @private
+    **/
+    _getRegion: function (node) {
+        var nodeRegion;
+
+        if ( ! node) {
+            nodeRegion = this._posNode.get(VIEWPORT_REGION);
+        } else {
+            node = Y.Node.one(node);
+            if (node) {
+                nodeRegion = node.get(REGION);
+            }
+        }
+
+        return nodeRegion;
+    },
+
+    // -- Protected Event Handlers ---------------------------------------------
+
+    /**
+    Handles `alignChange` events by updating the UI in response to `align`
+    Attribute changes.
+
+    @method _afterAlignChange
+    @param {EventFacade} e
+    @protected
+    **/
+    _afterAlignChange: function (e) {
+        var align = e.newVal;
+        if (align) {
+            this._uiSetAlign(align.node, align.points);
+        }
+    },
+
+    /**
+    Handles `alignOnChange` events by updating the alignment-syncing event
+    handlers.
+
+    @method _afterAlignOnChange
+    @param {EventFacade} e
+    @protected
+    **/
+    _afterAlignOnChange: function(e) {
+        this._detachPosAlignUIHandles();
+
+        if (this.get(VISIBLE)) {
+            this._attachPosAlignUIHandles();
+        }
+    }
+};
+
+Y.WidgetPositionAlign = PositionAlign;
+
+
+}, '3.17.2', {"requires": ["widget-position"]});

Added: roller/trunk/app/src/main/webapp/roller-ui/yui3/widget-position/widget-position-min.js
URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/webapp/roller-ui/yui3/widget-position/widget-position-min.js?rev=1609870&view=auto
==============================================================================
--- roller/trunk/app/src/main/webapp/roller-ui/yui3/widget-position/widget-position-min.js (added)
+++ roller/trunk/app/src/main/webapp/roller-ui/yui3/widget-position/widget-position-min.js Sat Jul 12 00:34:02 2014
@@ -0,0 +1,8 @@
+/*
+YUI 3.17.2 (build 9c3c78e)
+Copyright 2014 Yahoo! Inc. All rights reserved.
+Licensed under the BSD License.
+http://yuilibrary.com/license/
+*/
+
+YUI.add("widget-position",function(e,t){function d(e){}var n=e.Lang,r=e.Widget,i="xy",s="position",o="positioned",u="boundingBox",a="relative",f="renderUI",l="bindUI",c="syncUI",h=r.UI_SRC,p="xyChange";d.ATTRS={x:{setter:function(e){this._setX(e)},getter:function(){return this._getX()},lazyAdd:!1},y:{setter:function(e){this._setY(e)},getter:function(){return this._getY()},lazyAdd:!1},xy:{value:[0,0],validator:function(e){return this._validateXY(e)}}},d.POSITIONED_CLASS_NAME=r.getClassName(o),d.prototype={initializer:function(){this._posNode=this.get(u),e.after(this._renderUIPosition,this,f),e.after(this._syncUIPosition,this,c),e.after(this._bindUIPosition,this,l)},_renderUIPosition:function(){this._posNode.addClass(d.POSITIONED_CLASS_NAME)},_syncUIPosition:function(){var e=this._posNode;e.getStyle(s)===a&&this.syncXY(),this._uiSetXY(this.get(i))},_bindUIPosition:function(){this.after(p,this._afterXYChange)},move:function(){var e=arguments,t=n.isArray(e[0])?e[0]:[e[0],e[1]];this.set(
 i,t)},syncXY:function(){this.set(i,this._posNode.getXY(),{src:h})},_validateXY:function(e){return n.isArray(e)&&n.isNumber(e[0])&&n.isNumber(e[1])},_setX:function(e){this.set(i,[e,this.get(i)[1]])},_setY:function(e){this.set(i,[this.get(i)[0],e])},_getX:function(){return this.get(i)[0]},_getY:function(){return this.get(i)[1]},_afterXYChange:function(e){e.src!=h&&this._uiSetXY(e.newVal)},_uiSetXY:function(e){this._posNode.setXY(e)}},e.WidgetPosition=d},"3.17.2",{requires:["base-build","node-screen","widget"]});

Added: roller/trunk/app/src/main/webapp/roller-ui/yui3/widget-position/widget-position.js
URL: http://svn.apache.org/viewvc/roller/trunk/app/src/main/webapp/roller-ui/yui3/widget-position/widget-position.js?rev=1609870&view=auto
==============================================================================
--- roller/trunk/app/src/main/webapp/roller-ui/yui3/widget-position/widget-position.js (added)
+++ roller/trunk/app/src/main/webapp/roller-ui/yui3/widget-position/widget-position.js Sat Jul 12 00:34:02 2014
@@ -0,0 +1,283 @@
+/*
+YUI 3.17.2 (build 9c3c78e)
+Copyright 2014 Yahoo! Inc. All rights reserved.
+Licensed under the BSD License.
+http://yuilibrary.com/license/
+*/
+
+YUI.add('widget-position', function (Y, NAME) {
+
+/**
+ * Provides basic XY positioning support for Widgets, though an extension
+ *
+ * @module widget-position
+ */
+    var Lang = Y.Lang,
+        Widget = Y.Widget,
+
+        XY_COORD = "xy",
+
+        POSITION = "position",
+        POSITIONED = "positioned",
+        BOUNDING_BOX = "boundingBox",
+        RELATIVE = "relative",
+
+        RENDERUI = "renderUI",
+        BINDUI = "bindUI",
+        SYNCUI = "syncUI",
+
+        UI = Widget.UI_SRC,
+
+        XYChange = "xyChange";
+
+    /**
+     * Widget extension, which can be used to add positioning support to the base Widget class,
+     * through the <a href="Base.html#method_build">Base.build</a> method.
+     *
+     * @class WidgetPosition
+     * @param {Object} config User configuration object
+     */
+    function Position(config) {
+    }
+
+    /**
+     * Static property used to define the default attribute
+     * configuration introduced by WidgetPosition.
+     *
+     * @property ATTRS
+     * @static
+     * @type Object
+     */
+    Position.ATTRS = {
+
+        /**
+         * @attribute x
+         * @type number
+         * @default 0
+         *
+         * @description Page X co-ordinate for the widget. This attribute acts as a facade for the
+         * xy attribute. Changes in position can be monitored by listening for xyChange events.
+         */
+        x: {
+            setter: function(val) {
+                this._setX(val);
+            },
+            getter: function() {
+                return this._getX();
+            },
+            lazyAdd:false
+        },
+
+        /**
+         * @attribute y
+         * @type number
+         * @default 0
+         *
+         * @description Page Y co-ordinate for the widget. This attribute acts as a facade for the
+         * xy attribute. Changes in position can be monitored by listening for xyChange events.
+         */
+        y: {
+            setter: function(val) {
+                this._setY(val);
+            },
+            getter: function() {
+                return this._getY();
+            },
+            lazyAdd: false
+        },
+
+        /**
+         * @attribute xy
+         * @type Array
+         * @default [0,0]
+         *
+         * @description Page XY co-ordinate pair for the widget.
+         */
+        xy: {
+            value:[0,0],
+            validator: function(val) {
+                return this._validateXY(val);
+            }
+        }
+    };
+
+    /**
+     * Default class used to mark the boundingBox of a positioned widget.
+     *
+     * @property POSITIONED_CLASS_NAME
+     * @type String
+     * @default "yui-widget-positioned"
+     * @static
+     */
+    Position.POSITIONED_CLASS_NAME = Widget.getClassName(POSITIONED);
+
+    Position.prototype = {
+
+        initializer : function() {
+            this._posNode = this.get(BOUNDING_BOX);
+
+            // WIDGET METHOD OVERLAP
+            Y.after(this._renderUIPosition, this, RENDERUI);
+            Y.after(this._syncUIPosition, this, SYNCUI);
+            Y.after(this._bindUIPosition, this, BINDUI);
+        },
+
+        /**
+         * Creates/Initializes the DOM to support xy page positioning.
+         * <p>
+         * This method in invoked after renderUI is invoked for the Widget class
+         * using YUI's aop infrastructure.
+         * </p>
+         * @method _renderUIPosition
+         * @protected
+         */
+        _renderUIPosition : function() {
+            this._posNode.addClass(Position.POSITIONED_CLASS_NAME);
+        },
+
+        /**
+         * Synchronizes the UI to match the Widgets xy page position state.
+         * <p>
+         * This method in invoked after syncUI is invoked for the Widget class
+         * using YUI's aop infrastructure.
+         * </p>
+         * @method _syncUIPosition
+         * @protected
+         */
+        _syncUIPosition : function() {
+            var posNode = this._posNode;
+            if (posNode.getStyle(POSITION) === RELATIVE) {
+                this.syncXY();
+            }
+            this._uiSetXY(this.get(XY_COORD));
+        },
+
+        /**
+         * Binds event listeners responsible for updating the UI state in response to
+         * Widget position related state changes.
+         * <p>
+         * This method in invoked after bindUI is invoked for the Widget class
+         * using YUI's aop infrastructure.
+         * </p>
+         * @method _bindUIPosition
+         * @protected
+         */
+        _bindUIPosition :function() {
+            this.after(XYChange, this._afterXYChange);
+        },
+
+        /**
+         * Moves the Widget to the specified page xy co-ordinate position.
+         *
+         * @method move
+         *
+         * @param {Number|Number[]} x The new x position or [x, y] values passed
+         * as an array to support simple pass through of Node.getXY results
+         * @param {Number} [y] The new y position
+         */
+        move: function () {
+            var args = arguments,
+                coord = (Lang.isArray(args[0])) ? args[0] : [args[0], args[1]];
+                this.set(XY_COORD, coord);
+        },
+
+        /**
+         * Synchronizes the Panel's "xy", "x", and "y" properties with the
+         * Widget's position in the DOM.
+         *
+         * @method syncXY
+         */
+        syncXY : function () {
+            this.set(XY_COORD, this._posNode.getXY(), {src: UI});
+        },
+
+        /**
+         * Default validator for the XY attribute
+         *
+         * @method _validateXY
+         * @protected
+         * @param {Array} val The XY page co-ordinate value which is being set.
+         * @return {boolean} true if valid, false if not.
+         */
+        _validateXY : function(val) {
+            return (Lang.isArray(val) && Lang.isNumber(val[0]) && Lang.isNumber(val[1]));
+        },
+
+        /**
+         * Default setter for the X attribute. The setter passes the X value through
+         * to the XY attribute, which is the sole store for the XY state.
+         *
+         * @method _setX
+         * @protected
+         * @param {Number} val The X page co-ordinate value
+         */
+        _setX : function(val) {
+            this.set(XY_COORD, [val, this.get(XY_COORD)[1]]);
+        },
+
+        /**
+         * Default setter for the Y attribute. The setter passes the Y value through
+         * to the XY attribute, which is the sole store for the XY state.
+         *
+         * @method _setY
+         * @protected
+         * @param {Number} val The Y page co-ordinate value
+         */
+        _setY : function(val) {
+            this.set(XY_COORD, [this.get(XY_COORD)[0], val]);
+        },
+
+        /**
+         * Default getter for the X attribute. The value is retrieved from
+         * the XY attribute, which is the sole store for the XY state.
+         *
+         * @method _getX
+         * @protected
+         * @return {Number} The X page co-ordinate value
+         */
+        _getX : function() {
+            return this.get(XY_COORD)[0];
+        },
+
+        /**
+         * Default getter for the Y attribute. The value is retrieved from
+         * the XY attribute, which is the sole store for the XY state.
+         *
+         * @method _getY
+         * @protected
+         * @return {Number} The Y page co-ordinate value
+         */
+        _getY : function() {
+            return this.get(XY_COORD)[1];
+        },
+
+        /**
+         * Default attribute change listener for the xy attribute, responsible
+         * for updating the UI, in response to attribute changes.
+         *
+         * @method _afterXYChange
+         * @protected
+         * @param {EventFacade} e The event facade for the attribute change
+         */
+        _afterXYChange : function(e) {
+            if (e.src != UI) {
+                this._uiSetXY(e.newVal);
+            }
+        },
+
+        /**
+         * Updates the UI to reflect the XY page co-ordinates passed in.
+         *
+         * @method _uiSetXY
+         * @protected
+         * @param {String} val The XY page co-ordinates value to be reflected in the UI
+         */
+        _uiSetXY : function(val) {
+            this._posNode.setXY(val);
+        }
+    };
+
+    Y.WidgetPosition = Position;
+
+
+}, '3.17.2', {"requires": ["base-build", "node-screen", "widget"]});