You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jk...@apache.org on 2006/01/31 08:44:03 UTC
svn commit: r373750 [5/22] - in /jakarta/tapestry/trunk: ./
examples/AjaxWorkbench/src/context/WEB-INF/
examples/AjaxWorkbench/src/context/css/
examples/AjaxWorkbench/src/java/org/apache/tapestry/ajaxworkbench/components/
framework/src/descriptor/META-...
Added: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/Blowfish.js
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/Blowfish.js?rev=373750&view=auto
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/Blowfish.js (added)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/Blowfish.js Mon Jan 30 23:42:27 2006
@@ -0,0 +1,548 @@
+/*
+ Copyright (c) 2004-2005, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+dojo.require("dojo.crypto");
+dojo.provide("dojo.crypto.Blowfish");
+
+/* Blowfish
+ * Created based on the C# implementation by Marcus Hahn (http://www.hotpixel.net/)
+ * Unsigned math functions derived from Joe Gregorio's SecureSyndication GM script
+ * http://bitworking.org/projects/securesyndication/
+ * (Note that this is *not* an adaption of the above script)
+ *
+ * version 1.0
+ * TRT
+ * 2005-12-08
+ */
+dojo.crypto.Blowfish = new function(){
+ var POW2=Math.pow(2,2);
+ var POW3=Math.pow(2,3);
+ var POW4=Math.pow(2,4);
+ var POW8=Math.pow(2,8);
+ var POW16=Math.pow(2,16);
+ var POW24=Math.pow(2,24);
+ var iv=null; // CBC mode initialization vector
+ var boxes={
+ p:[
+ 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,
+ 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,
+ 0x9216d5d9, 0x8979fb1b
+ ],
+ s0:[
+ 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
+ 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
+ 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
+ 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,
+ 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
+ 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
+ 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,
+ 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,
+ 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
+ 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
+ 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,
+ 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,
+ 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,
+ 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,
+ 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
+ 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,
+ 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,
+ 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,
+ 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,
+ 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
+ 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
+ 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,
+ 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,
+ 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,
+ 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
+ 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,
+ 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
+ 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,
+ 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,
+ 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
+ 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,
+ 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a
+ ],
+ s1:[
+ 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,
+ 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,
+ 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
+ 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,
+ 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,
+ 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
+ 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,
+ 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
+ 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,
+ 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,
+ 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,
+ 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
+ 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
+ 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,
+ 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
+ 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,
+ 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,
+ 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
+ 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,
+ 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,
+ 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,
+ 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,
+ 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
+ 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
+ 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,
+ 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,
+ 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
+ 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
+ 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,
+ 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
+ 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,
+ 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7
+ ],
+ s2:[
+ 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
+ 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,
+ 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
+ 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,
+ 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,
+ 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
+ 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,
+ 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,
+ 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
+ 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,
+ 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
+ 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
+ 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,
+ 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,
+ 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
+ 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
+ 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,
+ 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
+ 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,
+ 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,
+ 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
+ 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,
+ 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,
+ 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,
+ 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,
+ 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
+ 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,
+ 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,
+ 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,
+ 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,
+ 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
+ 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0
+ ],
+ s3:[
+ 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,
+ 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,
+ 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,
+ 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
+ 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,
+ 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,
+ 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,
+ 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,
+ 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
+ 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,
+ 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,
+ 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
+ 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,
+ 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
+ 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
+ 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,
+ 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,
+ 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
+ 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
+ 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,
+ 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,
+ 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,
+ 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,
+ 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
+ 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,
+ 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,
+ 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,
+ 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,
+ 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
+ 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
+ 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,
+ 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6
+ ]
+ }
+////////////////////////////////////////////////////////////////////////////
+ function add(x,y){
+ var sum=(x+y)&0xffffffff;
+ if (sum<0){
+ sum=-sum;
+ return (0x10000*((sum>>16)^0xffff))+(((sum&0xffff)^0xffff)+1);
+ }
+ return sum;
+ }
+ function split(x){
+ var r=x&0xffffffff;
+ if(r<0) {
+ r=-r;
+ return [((r&0xffff)^0xffff)+1,(r>>16)^0xffff];
+ }
+ return [r&0xffff,(r>>16)];
+ }
+ function xor(x,y){
+ var xs=split(x);
+ var ys=split(y);
+ return (0x10000*(xs[1]^ys[1]))+(xs[0]^ys[0]);
+ }
+ function $(v, box){
+ var d=v&0xff; v>>=8;
+ var c=v&0xff; v>>=8;
+ var b=v&0xff; v>>=8;
+ var a=v&0xff;
+ var r=add(box.s0[a],box.s1[b]);
+ r=xor(r,box.s2[c]);
+ return add(r,box.s3[d]);
+ }
+////////////////////////////////////////////////////////////////////////////
+ function eb(o, box){
+ var l=o.left;
+ var r=o.right;
+ l=xor(l,box.p[0]);
+ r=xor(r,xor($(l,box),box.p[1]));
+ l=xor(l,xor($(r,box),box.p[2]));
+ r=xor(r,xor($(l,box),box.p[3]));
+ l=xor(l,xor($(r,box),box.p[4]));
+ r=xor(r,xor($(l,box),box.p[5]));
+ l=xor(l,xor($(r,box),box.p[6]));
+ r=xor(r,xor($(l,box),box.p[7]));
+ l=xor(l,xor($(r,box),box.p[8]));
+ r=xor(r,xor($(l,box),box.p[9]));
+ l=xor(l,xor($(r,box),box.p[10]));
+ r=xor(r,xor($(l,box),box.p[11]));
+ l=xor(l,xor($(r,box),box.p[12]));
+ r=xor(r,xor($(l,box),box.p[13]));
+ l=xor(l,xor($(r,box),box.p[14]));
+ r=xor(r,xor($(l,box),box.p[15]));
+ l=xor(l,xor($(r,box),box.p[16]));
+ o.right=l;
+ o.left=xor(r,box.p[17]);
+ }
+
+ function db(o, box){
+ var l=o.left;
+ var r=o.right;
+ l=xor(l,box.p[17]);
+ r=xor(r,xor($(l,box),box.p[16]));
+ l=xor(l,xor($(r,box),box.p[15]));
+ r=xor(r,xor($(l,box),box.p[14]));
+ l=xor(l,xor($(r,box),box.p[13]));
+ r=xor(r,xor($(l,box),box.p[12]));
+ l=xor(l,xor($(r,box),box.p[11]));
+ r=xor(r,xor($(l,box),box.p[10]));
+ l=xor(l,xor($(r,box),box.p[9]));
+ r=xor(r,xor($(l,box),box.p[8]));
+ l=xor(l,xor($(r,box),box.p[7]));
+ r=xor(r,xor($(l,box),box.p[6]));
+ l=xor(l,xor($(r,box),box.p[5]));
+ r=xor(r,xor($(l,box),box.p[4]));
+ l=xor(l,xor($(r,box),box.p[3]));
+ r=xor(r,xor($(l,box),box.p[2]));
+ l=xor(l,xor($(r,box),box.p[1]));
+ o.right=l;
+ o.left=xor(r,box.p[0]);
+ }
+
+ // Note that we aren't caching contexts here; it might take a little longer
+ // but we should be more secure this way.
+ function init(key){
+ var k=key;
+ if (typeof(k)=="string"){
+ var a=[];
+ for(var i=0; i<k.length; i++)
+ a.push(k.charCodeAt(i)&0xff);
+ k=a;
+ }
+ // init the boxes
+ var box = { p:[], s0:[], s1:[], s2:[], s3:[] };
+ for(var i=0; i<boxes.p.length; i++) box.p.push(boxes.p[i]);
+ for(var i=0; i<boxes.s0.length; i++) box.s0.push(boxes.s0[i]);
+ for(var i=0; i<boxes.s1.length; i++) box.s1.push(boxes.s1[i]);
+ for(var i=0; i<boxes.s2.length; i++) box.s2.push(boxes.s2[i]);
+ for(var i=0; i<boxes.s3.length; i++) box.s3.push(boxes.s3[i]);
+
+ // init p with the key
+ var pos=0;
+ var data=0;
+ for(var i=0; i < box.p.length; i++){
+ for (var j=0; j<4; j++){
+ data = (data*POW8) | k[pos];
+ if(++pos==k.length) pos=0;
+ }
+ box.p[i] = xor(box.p[i], data);
+ }
+
+ // encrypt p and the s boxes
+ var res={ left:0, right:0 };
+ for(var i=0; i<box.p.length;){
+ eb(res, box);
+ box.p[i++]=res.left;
+ box.p[i++]=res.right;
+ }
+ for (var i=0; i<4; i++){
+ for(var j=0; j<box["s"+i].length;){
+ eb(res, box);
+ box["s"+i][j++]=res.left;
+ box["s"+i][j++]=res.right;
+ }
+ }
+ return box;
+ }
+
+////////////////////////////////////////////////////////////////////////////
+// CONVERSION FUNCTIONS
+////////////////////////////////////////////////////////////////////////////
+ // these operate on byte arrays, NOT word arrays.
+ function toBase64(ba){
+ var p="=";
+ var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ var s=[];
+ var count=0;
+ for (var i =0; i<ba.length;){
+ var t=ba[i++]<<16|ba[i++]<<8|ba[i++];
+ s.push(tab.charAt((t>>>18)&0x3f));
+ s.push(tab.charAt((t>>>12)&0x3f));
+ s.push(tab.charAt((t>>>6)&0x3f));
+ s.push(tab.charAt(t&0x3f));
+ count+=4;
+ }
+ var pa=i-ba.length;
+ while((pa--)>0) s.push(p);
+ return s.join("");
+ }
+ function fromBase64(str){
+ var s=str.split("");
+ var p="=";
+ var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ var out=[];
+ var l=s.length;
+ while(s[--l]==p){ }
+ for (var i=0; i<l;){
+ var t=tab.indexOf(s[i++])<<18|tab.indexOf(s[i++])<<12|tab.indexOf(s[i++])<<6|tab.indexOf(s[i++]);
+ out.push((t>>>16)&0xff);
+ out.push((t>>>8)&0xff);
+ out.push(t&0xff);
+ }
+ return out;
+ }
+////////////////////////////////////////////////////////////////////////////
+// PUBLIC FUNCTIONS
+// 0.2: Only supporting ECB mode for now.
+////////////////////////////////////////////////////////////////////////////
+ this.getIV=function(outputType){
+ var out=outputType||dojo.crypto.outputTypes.Base64;
+ switch(out){
+ case dojo.crypto.outputTypes.Hex:{
+ var s=[];
+ for(var i=0; i<iv.length; i++)
+ s.push((iv[i]).toString(16));
+ return s.join("");
+ }
+ case dojo.crypto.outputTypes.String:{
+ return iv.join("");
+ }
+ case dojo.crypto.outputTypes.Raw:{
+ return iv;
+ }
+ default:{
+ return toBase64(iv);
+ }
+ }
+ };
+ this.setIV=function(data, inputType){
+ var ip=inputType||dojo.crypto.outputTypes.Base64;
+ var ba=null;
+ switch(ip){
+ case dojo.crypto.outputTypes.String:{
+ ba=[];
+ for (var i=0; i<data.length; i++){
+ ba.push(data.charCodeAt(i));
+ }
+ break;
+ }
+ case dojo.crypto.outputTypes.Hex:{
+ ba=[];
+ var i=0;
+ while (i+1<data.length){
+ ba.push(parseInt(data.substr(i,2),16));
+ i+=2;
+ }
+ break;
+ }
+ case dojo.crypto.outputTypes.Raw:{
+ ba=data;
+ break;
+ }
+ default:{
+ ba=fromBase64(data);
+ break;
+ }
+ }
+ // make it a pair of words now
+ iv={};
+ iv.left=ba[0]*POW24|ba[1]*POW16|ba[2]*POW8|ba[3];
+ iv.right=ba[4]*POW24|ba[5]*POW16|ba[6]*POW8|ba[7];
+ }
+ this.encrypt = function(plaintext, key, ao){
+ var out=dojo.crypto.outputTypes.Base64;
+ var mode=dojo.crypto.cipherModes.EBC;
+ if (ao){
+ if (ao.outputType) out=ao.outputType;
+ if (ao.cipherMode) mode=ao.cipherMode;
+ }
+
+ var bx = init(key);
+ var padding = 8-(plaintext.length&7);
+ for (var i=0; i<padding; i++) plaintext+=String.fromCharCode(padding);
+ var cipher=[];
+ var count=plaintext.length >> 3;
+ var pos=0;
+ var o={};
+ var isCBC=(mode==dojo.crypto.cipherModes.CBC);
+ var vector={left:iv.left||null, right:iv.right||null};
+ for(var i=0; i<count; i++){
+ o.left=plaintext.charCodeAt(pos)*POW24
+ |plaintext.charCodeAt(pos+1)*POW16
+ |plaintext.charCodeAt(pos+2)*POW8
+ |plaintext.charCodeAt(pos+3);
+ o.right=plaintext.charCodeAt(pos+4)*POW24
+ |plaintext.charCodeAt(pos+5)*POW16
+ |plaintext.charCodeAt(pos+6)*POW8
+ |plaintext.charCodeAt(pos+7);
+
+ if(isCBC){
+ o.left=xor(o.left, vector.left);
+ o.right=xor(o.right, vector.right);
+ }
+
+ eb(o, bx); // encrypt the block
+
+ if(isCBC){
+ vector.left=o.left;
+ vector.right=o.right;dojo.crypto.outputTypes.Hex
+ }
+
+ cipher.push((o.left>>24)&0xff);
+ cipher.push((o.left>>16)&0xff);
+ cipher.push((o.left>>8)&0xff);
+ cipher.push(o.left&0xff);
+ cipher.push((o.right>>24)&0xff);
+ cipher.push((o.right>>16)&0xff);
+ cipher.push((o.right>>8)&0xff);
+ cipher.push(o.right&0xff);
+ pos+=8;
+ }
+ switch(out){
+ case dojo.crypto.outputTypes.Hex:{
+ var s=[];
+ for(var i=0; i<cipher.length; i++)
+ s.push((cipher[i]).toString(16));
+ return s.join("");
+ }
+ case dojo.crypto.outputTypes.String:{
+ return cipher.join("");
+ }
+ case dojo.crypto.outputTypes.Raw:{
+ return cipher;
+ }
+ default:{
+ return toBase64(cipher);
+ }
+ }
+ };
+
+ this.decrypt = function(ciphertext, key, ao){
+ var ip=dojo.crypto.outputTypes.Base64;
+ var mode=dojo.crypto.cipherModes.EBC;
+ if (ao){
+ if (ao.outputType) ip=ao.outputType;
+ if (ao.cipherMode) mode=ao.cipherMode;
+ }
+ var bx = init(key);
+ var pt=[];
+
+ var c=null;
+ switch(ip){
+ case dojo.crypto.outputTypes.Hex:{
+ c=[];
+ var i=0;
+ while (i+1<ciphertext.length){
+ c.push(parseInt(ciphertext.substr(i,2),16));
+ i+=2;
+ }
+ break;
+ }
+ case dojo.crypto.outputTypes.String:{
+ c=[];
+ for (var i=0; i<ciphertext.length; i++){
+ c.push(ciphertext.charCodeAt(i));
+ }
+ break;
+ }
+ case dojo.crypto.outputTypes.Raw:{
+ c=ciphertext; // should be a byte array
+ break;
+ }
+ default:{
+ c=fromBase64(ciphertext);
+ break;
+ }
+ }
+
+ var count=c.length >> 3;
+ var pos=0;
+ var o={};
+ var isCBC=(mode==dojo.crypto.cipherModes.CBC);
+ var vector={left:iv.left||null, right:iv.right||null};
+ for(var i=0; i<count; i++){
+ o.left=c[pos]*POW24|c[pos+1]*POW16|c[pos+2]*POW8|c[pos+3];
+ o.right=c[pos+4]*POW24|c[pos+5]*POW16|c[pos+6]*POW8|c[pos+7];
+
+ if(isCBC){
+ var left=o.left;
+ var right=o.right;
+ }
+
+ db(o, bx); // decrypt the block
+
+ if(isCBC){
+ o.left=xor(o.left, vector.left);
+ o.right=xor(o.right, vector.right);
+ vector.left=left;
+ vector.right=right;
+ }
+
+ pt.push((o.left>>24)&0xff);
+ pt.push((o.left>>16)&0xff);
+ pt.push((o.left>>8)&0xff);
+ pt.push(o.left&0xff);
+ pt.push((o.right>>24)&0xff);
+ pt.push((o.right>>16)&0xff);
+ pt.push((o.right>>8)&0xff);
+ pt.push(o.right&0xff);
+ pos+=8;
+ }
+
+ // check for padding, and remove.
+ if(pt[pt.length-1]==pt[pt.length-2]||pt[pt.length-1]==0x01){
+ var n=pt[pt.length-1];
+ pt.splice(pt.length-n, n);
+ }
+
+ // convert to string
+ for(var i=0; i<pt.length; i++)
+ pt[i]=String.fromCharCode(pt[i]);
+ return pt.join("");
+ };
+
+ this.setIV("0000000000000000", dojo.crypto.outputTypes.Hex);
+}();
Added: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/LICENSE
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/LICENSE?rev=373750&view=auto
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/LICENSE (added)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/LICENSE Mon Jan 30 23:42:27 2006
@@ -0,0 +1,11 @@
+License Disclaimer:
+
+All contents of this directory are Copyright (c) the Dojo Foundation, with the
+following exceptions:
+-------------------------------------------------------------------------------
+
+MD5.js, SHA1.js:
+ * Copyright 1998-2005, Paul Johnstone
+ Distributed under the terms of the BSD License
+
+
Added: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/MD5.js
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/MD5.js?rev=373750&view=auto
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/MD5.js (added)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/MD5.js Mon Jan 30 23:42:27 2006
@@ -0,0 +1,197 @@
+/*
+ Copyright (c) 2004-2005, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+dojo.require("dojo.crypto");
+dojo.provide("dojo.crypto.MD5");
+
+/* Return to a port of Paul Johnstone's MD5 implementation
+ * http://pajhome.org.uk/crypt/md5/index.html
+ *
+ * 2005-12-7
+ * All conversions are internalized (no dependencies)
+ * implemented getHMAC for message digest auth.
+ */
+dojo.crypto.MD5 = new function(){
+ var chrsz=8;
+ var mask=(1<<chrsz)-1;
+ function toWord(s) {
+ var wa=[];
+ for(var i=0; i<s.length*chrsz; i+=chrsz)
+ wa[i>>5]|=(s.charCodeAt(i/chrsz)&mask)<<(i%32);
+ return wa;
+ }
+ function toString(wa){
+ var s=[];
+ for(var i=0; i<wa.length*32; i+=chrsz)
+ s.push(String.fromCharCode((wa[i>>5]>>>(i%32))&mask));
+ return s.join("");
+ }
+ function toHex(wa) {
+ var h="0123456789abcdef";
+ var s=[];
+ for(var i=0; i<wa.length*4; i++){
+ s.push(h.charAt((wa[i>>2]>>((i%4)*8+4))&0xF)+h.charAt((wa[i>>2]>>((i%4)*8))&0xF));
+ }
+ return s.join("");
+ }
+ function toBase64(wa){
+ var p="=";
+ var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ var s=[];
+ for(var i=0; i<wa.length*4; i+=3){
+ var t=(((wa[i>>2]>>8*(i%4))&0xFF)<<16)|(((wa[i+1>>2]>>8*((i+1)%4))&0xFF)<<8)|((wa[i+2>>2]>>8*((i+2)%4))&0xFF);
+ for(var j=0; j<4; j++){
+ if(i*8+j*6>wa.length*32) s.push(p);
+ else s.push(tab.charAt((t>>6*(3-j))&0x3F));
+ }
+ }
+ return s.join("");
+ }
+ function add(x,y) {
+ var l=(x&0xFFFF)+(y&0xFFFF);
+ var m=(x>>16)+(y>>16)+(l>>16);
+ return (m<<16)|(l&0xFFFF);
+ }
+ function R(n,c){ return (n<<c)|(n>>>(32-c)); }
+ function C(q,a,b,x,s,t){ return add(R(add(add(a,q),add(x,t)),s),b); }
+ function FF(a,b,c,d,x,s,t){ return C((b&c)|((~b)&d),a,b,x,s,t); }
+ function GG(a,b,c,d,x,s,t){ return C((b&d)|(c&(~d)),a,b,x,s,t); }
+ function HH(a,b,c,d,x,s,t){ return C(b^c^d,a,b,x,s,t); }
+ function II(a,b,c,d,x,s,t){ return C(c^(b|(~d)),a,b,x,s,t); }
+ function core(x,len){
+ x[len>>5]|=0x80<<((len)%32);
+ x[(((len+64)>>>9)<<4)+14]=len;
+ var a= 1732584193;
+ var b=-271733879;
+ var c=-1732584194;
+ var d= 271733878;
+ for(var i=0; i<x.length; i+=16){
+ var olda=a;
+ var oldb=b;
+ var oldc=c;
+ var oldd=d;
+
+ a=FF(a,b,c,d,x[i+ 0],7 ,-680876936);
+ d=FF(d,a,b,c,x[i+ 1],12,-389564586);
+ c=FF(c,d,a,b,x[i+ 2],17, 606105819);
+ b=FF(b,c,d,a,x[i+ 3],22,-1044525330);
+ a=FF(a,b,c,d,x[i+ 4],7 ,-176418897);
+ d=FF(d,a,b,c,x[i+ 5],12, 1200080426);
+ c=FF(c,d,a,b,x[i+ 6],17,-1473231341);
+ b=FF(b,c,d,a,x[i+ 7],22,-45705983);
+ a=FF(a,b,c,d,x[i+ 8],7 , 1770035416);
+ d=FF(d,a,b,c,x[i+ 9],12,-1958414417);
+ c=FF(c,d,a,b,x[i+10],17,-42063);
+ b=FF(b,c,d,a,x[i+11],22,-1990404162);
+ a=FF(a,b,c,d,x[i+12],7 , 1804603682);
+ d=FF(d,a,b,c,x[i+13],12,-40341101);
+ c=FF(c,d,a,b,x[i+14],17,-1502002290);
+ b=FF(b,c,d,a,x[i+15],22, 1236535329);
+
+ a=GG(a,b,c,d,x[i+ 1],5 ,-165796510);
+ d=GG(d,a,b,c,x[i+ 6],9 ,-1069501632);
+ c=GG(c,d,a,b,x[i+11],14, 643717713);
+ b=GG(b,c,d,a,x[i+ 0],20,-373897302);
+ a=GG(a,b,c,d,x[i+ 5],5 ,-701558691);
+ d=GG(d,a,b,c,x[i+10],9 , 38016083);
+ c=GG(c,d,a,b,x[i+15],14,-660478335);
+ b=GG(b,c,d,a,x[i+ 4],20,-405537848);
+ a=GG(a,b,c,d,x[i+ 9],5 , 568446438);
+ d=GG(d,a,b,c,x[i+14],9 ,-1019803690);
+ c=GG(c,d,a,b,x[i+ 3],14,-187363961);
+ b=GG(b,c,d,a,x[i+ 8],20, 1163531501);
+ a=GG(a,b,c,d,x[i+13],5 ,-1444681467);
+ d=GG(d,a,b,c,x[i+ 2],9 ,-51403784);
+ c=GG(c,d,a,b,x[i+ 7],14, 1735328473);
+ b=GG(b,c,d,a,x[i+12],20,-1926607734);
+
+ a=HH(a,b,c,d,x[i+ 5],4 ,-378558);
+ d=HH(d,a,b,c,x[i+ 8],11,-2022574463);
+ c=HH(c,d,a,b,x[i+11],16, 1839030562);
+ b=HH(b,c,d,a,x[i+14],23,-35309556);
+ a=HH(a,b,c,d,x[i+ 1],4 ,-1530992060);
+ d=HH(d,a,b,c,x[i+ 4],11, 1272893353);
+ c=HH(c,d,a,b,x[i+ 7],16,-155497632);
+ b=HH(b,c,d,a,x[i+10],23,-1094730640);
+ a=HH(a,b,c,d,x[i+13],4 , 681279174);
+ d=HH(d,a,b,c,x[i+ 0],11,-358537222);
+ c=HH(c,d,a,b,x[i+ 3],16,-722521979);
+ b=HH(b,c,d,a,x[i+ 6],23, 76029189);
+ a=HH(a,b,c,d,x[i+ 9],4 ,-640364487);
+ d=HH(d,a,b,c,x[i+12],11,-421815835);
+ c=HH(c,d,a,b,x[i+15],16, 530742520);
+ b=HH(b,c,d,a,x[i+ 2],23,-995338651);
+
+ a=II(a,b,c,d,x[i+ 0],6 ,-198630844);
+ d=II(d,a,b,c,x[i+ 7],10, 1126891415);
+ c=II(c,d,a,b,x[i+14],15,-1416354905);
+ b=II(b,c,d,a,x[i+ 5],21,-57434055);
+ a=II(a,b,c,d,x[i+12],6 , 1700485571);
+ d=II(d,a,b,c,x[i+ 3],10,-1894986606);
+ c=II(c,d,a,b,x[i+10],15,-1051523);
+ b=II(b,c,d,a,x[i+ 1],21,-2054922799);
+ a=II(a,b,c,d,x[i+ 8],6 , 1873313359);
+ d=II(d,a,b,c,x[i+15],10,-30611744);
+ c=II(c,d,a,b,x[i+ 6],15,-1560198380);
+ b=II(b,c,d,a,x[i+13],21, 1309151649);
+ a=II(a,b,c,d,x[i+ 4],6 ,-145523070);
+ d=II(d,a,b,c,x[i+11],10,-1120210379);
+ c=II(c,d,a,b,x[i+ 2],15, 718787259);
+ b=II(b,c,d,a,x[i+ 9],21,-343485551);
+
+ a = add(a,olda);
+ b = add(b,oldb);
+ c = add(c,oldc);
+ d = add(d,oldd);
+ }
+ return [a,b,c,d];
+ }
+ function hmac(data,key){
+ var wa=toWord(key);
+ if(wa.length>16) wa=core(wa,key.length*chrsz);
+ var l=[], r=[];
+ for(var i=0; i<16; i++){
+ l[i]=wa[i]^0x36363636;
+ r[i]=wa[i]^0x5c5c5c5c;
+ }
+ var h=core(l.concat(toWord(data)),512+data.length*chrsz);
+ return core(r.concat(h),640);
+ }
+
+ // Public functions
+ this.compute=function(data,outputType){
+ var out=outputType||dojo.crypto.outputTypes.Base64;
+ switch(out){
+ case dojo.crypto.outputTypes.Hex:{
+ return toHex(core(toWord(data),data.length*chrsz));
+ }
+ case dojo.crypto.outputTypes.String:{
+ return toString(core(toWord(data),data.length*chrsz));
+ }
+ default:{
+ return toBase64(core(toWord(data),data.length*chrsz));
+ }
+ }
+ };
+ this.getHMAC=function(data,key,outputType){
+ var out=outputType||dojo.crypto.outputTypes.Base64;
+ switch(out){
+ case dojo.crypto.outputTypes.Hex:{
+ return toHex(hmac(data,key));
+ }
+ case dojo.crypto.outputTypes.String:{
+ return toString(hmac(data,key));
+ }
+ default:{
+ return toBase64(hmac(data,key));
+ }
+ }
+ };
+}();
Added: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/Rijndael.js
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/Rijndael.js?rev=373750&view=auto
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/Rijndael.js (added)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/Rijndael.js Mon Jan 30 23:42:27 2006
@@ -0,0 +1,21 @@
+/*
+ Copyright (c) 2004-2005, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+dojo.provide("dojo.crypto.Rijndael");
+dojo.require("dojo.crypto");
+
+dojo.crypto.Rijndael = new function(){
+ this.encrypt=function(plaintext, key){
+ };
+ this.decrypt=function(ciphertext, key){
+ };
+}();
+
+dojo.crypto.AES = dojo.crypto.Rijndael; // alias
Added: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/SHA.js
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/SHA.js?rev=373750&view=auto
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/SHA.js (added)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/SHA.js Mon Jan 30 23:42:27 2006
@@ -0,0 +1,17 @@
+/*
+ Copyright (c) 2004-2005, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+dojo.provide("dojo.crypto.SHA");
+dojo.require("dojo.crypto");
+
+dojo.crypto.SHA = new function(){
+ this.compute=function(s){
+ };
+}();
Added: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/SHA1.js
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/SHA1.js?rev=373750&view=auto
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/SHA1.js (added)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/SHA1.js Mon Jan 30 23:42:27 2006
@@ -0,0 +1,150 @@
+/*
+ Copyright (c) 2004-2005, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+dojo.require("dojo.crypto");
+dojo.provide("dojo.crypto.SHA1");
+
+dojo.crypto.SHA1 = new function(){
+ var chrsz=8;
+ var mask=(1<<chrsz)-1;
+ function toWord(s) {
+ var wa=[];
+ for(var i=0; i<s.length*chrsz; i+=chrsz)
+ wa[i>>5]|=(s.charCodeAt(i/chrsz)&mask)<<(i%32);
+ return wa;
+ }
+ function toString(wa){
+ var s=[];
+ for(var i=0; i<wa.length*32; i+=chrsz)
+ s.push(String.fromCharCode((wa[i>>5]>>>(i%32))&mask));
+ return s.join("");
+ }
+ function toHex(wa) {
+ var h="0123456789abcdef";
+ var s=[];
+ for(var i=0; i<wa.length*4; i++){
+ s.push(h.charAt((wa[i>>2]>>((i%4)*8+4))&0xF)+h.charAt((wa[i>>2]>>((i%4)*8))&0xF));
+ }
+ return s.join("");
+ }
+ function toBase64(wa){
+ var p="=";
+ var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ var s=[];
+ for(var i=0; i<wa.length*4; i+=3){
+ var t=(((wa[i>>2]>>8*(i%4))&0xFF)<<16)|(((wa[i+1>>2]>>8*((i+1)%4))&0xFF)<<8)|((wa[i+2>>2]>>8*((i+2)%4))&0xFF);
+ for(var j=0; j<4; j++){
+ if(i*8+j*6>wa.length*32) s.push(p);
+ else s.push(tab.charAt((t>>6*(3-j))&0x3F));
+ }
+ }
+ return s.join("");
+ }
+
+ // math
+ function add(x,y){
+ var l=(x&0xffff)+(y&0xffff);
+ var m=(x>>16)+(y>>16)+(l>>16);
+ return (m<<16)|(l&0xffff);
+ }
+ function r(x,n){ return (x<<n)|(x>>>(32-n)); }
+
+ // SHA rounds
+ function f(u,v,w){ return ((u&v)|(~u&w)); }
+ function g(u,v,w){ return ((u&v)|(u&w)|(v&w)); }
+ function h(u,v,w){ return (u^v^w); }
+
+ function fn(i,u,v,w){
+ if(i<20) return f(u,v,w);
+ if(i<40) return h(u,v,w);
+ if(i<60) return g(u,v,w);
+ return h(u,v,w);
+ }
+ function cnst(i){
+ if(i<20) return 1518500249;
+ if(i<40) return 1859775393;
+ if(i<60) return -1894007588;
+ return -899497514;
+ }
+
+ function core(x,len){
+ x[len>>5]|=0x80<<(24-len%32);
+ x[((len+64>>9)<<4)+15]=len;
+
+ var w=[];
+ var a= 1732584193; // 0x67452301
+ var b=-271733879; // 0xefcdab89
+ var c=-1732584194; // 0x98badcfe
+ var d= 271733878; // 0x10325476
+ var e=-1009589776; // 0xc3d2e1f0
+
+ for(var i=0; i<x.length; i+=16){
+ var olda=a;
+ var oldb=b;
+ var oldc=c;
+ var oldd=d;
+ var olde=e;
+
+ for(var j=0; j<80; j++){
+ if(j<16) w[j]=x[i+j];
+ else w[j]=r(w[j-3]^w[j-8]^w[j-14]^w[j-16],1);
+ var t=add(add(r(a,5),fn(j,b,c,d)),add(add(e,w[j]),cnst(j)));
+ e=d; d=c; c=r(b,30); b=a; a=t;
+ }
+
+ a=add(a,olda);
+ b=add(b,oldb);
+ c=add(c,oldc);
+ d=add(d,oldd);
+ e=add(e,olde);
+ }
+ return [a,b,c,d,e];
+ }
+ function hmac(data,key){
+ var wa=toWord(key);
+ if(wa.length>16) wa=core(wa,key.length*chrsz);
+ var l=[], r=[];
+ for(var i=0; i<16; i++){
+ l[i]=wa[i]^0x36363636;
+ r[i]=wa[i]^0x5c5c5c5c;
+ }
+ var h=core(l.concat(toWord(data)),512+data.length*chrsz);
+ return core(r.concat(h),640);
+ }
+
+ this.compute=function(data,outputType){
+ var out=outputType||dojo.crypto.outputTypes.Base64;
+ switch(out){
+ case dojo.crypto.outputTypes.Hex:{
+ return toHex(core(toWord(data),data.length*chrsz));
+ }
+ case dojo.crypto.outputTypes.String:{
+ return toString(core(toWord(data),data.length*chrsz));
+ }
+ default:{
+ return toBase64(core(toWord(data),data.length*chrsz));
+ }
+ }
+ };
+ this.getHMAC=function(data,key,outputType){
+ var out=outputType||dojo.crypto.outputTypes.Base64;
+ switch(out){
+ case dojo.crypto.outputTypes.Hex:{
+ return toHex(hmac(data,key));
+ }
+ case dojo.crypto.outputTypes.String:{
+ return toString(hmac(data,key));
+ }
+ default:{
+ return toBase64(hmac(data,key));
+ }
+ }
+ };
+}();
Added: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/SHA256.js
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/SHA256.js?rev=373750&view=auto
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/SHA256.js (added)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/SHA256.js Mon Jan 30 23:42:27 2006
@@ -0,0 +1,17 @@
+/*
+ Copyright (c) 2004-2005, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+dojo.provide("dojo.crypto.SHA256");
+dojo.require("dojo.crypto");
+
+dojo.crypto.SHA256 = new function(){
+ this.compute=function(s){
+ };
+}();
Added: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/__package__.js
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/__package__.js?rev=373750&view=auto
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/__package__.js (added)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/crypto/__package__.js Mon Jan 30 23:42:27 2006
@@ -0,0 +1,17 @@
+/*
+ Copyright (c) 2004-2005, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+dojo.hostenv.conditionalLoadModule({
+ common: [
+ "dojo.crypto",
+ "dojo.crypto.MD5"
+ ]
+});
+dojo.hostenv.moduleLoaded("dojo.crypto.*");
Added: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/data.js
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/data.js?rev=373750&view=auto
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/data.js (added)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/data.js Mon Jan 30 23:42:27 2006
@@ -0,0 +1,15 @@
+/*
+ Copyright (c) 2004-2005, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+dojo.provide("dojo.data");
+
+// currently a stub for dojo.data
+
+dojo.data = {};
Added: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/data/__package__.js
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/data/__package__.js?rev=373750&view=auto
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/data/__package__.js (added)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/data/__package__.js Mon Jan 30 23:42:27 2006
@@ -0,0 +1,14 @@
+/*
+ Copyright (c) 2004-2005, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+dojo.hostenv.conditionalLoadModule({
+ common: ["dojo.data"]
+});
+dojo.hostenv.moduleLoaded("dojo.data.*");
Added: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/date.js
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/date.js?rev=373750&view=auto
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/date.js (added)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/date.js Mon Jan 30 23:42:27 2006
@@ -0,0 +1,463 @@
+/*
+ Copyright (c) 2004-2005, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+dojo.provide("dojo.date");
+
+/**
+ * Sets the current Date object to the time given in an ISO 8601 date/time
+ * stamp
+ *
+ * @param string The date/time formted as an ISO 8601 string
+ */
+dojo.date.setIso8601 = function (dateObject, string) {
+ var comps = string.split('T');
+ dojo.date.setIso8601Date(dateObject, comps[0]);
+ if (comps.length == 2) { dojo.date.setIso8601Time(dateObject, comps[1]); }
+ return dateObject;
+}
+
+dojo.date.fromIso8601 = function (string) {
+ return dojo.date.setIso8601(new Date(0), string);
+}
+
+/**
+ * Sets the current Date object to the date given in an ISO 8601 date
+ * stamp. The time is left unchanged.
+ *
+ * @param string The date formted as an ISO 8601 string
+ */
+dojo.date.setIso8601Date = function (dateObject, string) {
+ var regexp = "^([0-9]{4})((-?([0-9]{2})(-?([0-9]{2}))?)|" +
+ "(-?([0-9]{3}))|(-?W([0-9]{2})(-?([1-7]))?))?$";
+ var d = string.match(new RegExp(regexp));
+
+ var year = d[1];
+ var month = d[4];
+ var date = d[6];
+ var dayofyear = d[8];
+ var week = d[10];
+ var dayofweek = (d[12]) ? d[12] : 1;
+
+ dateObject.setYear(year);
+
+ if (dayofyear) { dojo.date.setDayOfYear(dateObject, Number(dayofyear)); }
+ else if (week) {
+ dateObject.setMonth(0);
+ dateObject.setDate(1);
+ var gd = dateObject.getDay();
+ var day = (gd) ? gd : 7;
+ var offset = Number(dayofweek) + (7 * Number(week));
+
+ if (day <= 4) { dateObject.setDate(offset + 1 - day); }
+ else { dateObject.setDate(offset + 8 - day); }
+ } else {
+ if (month) {
+ dateObject.setDate(1);
+ dateObject.setMonth(month - 1);
+ }
+ if (date) { dateObject.setDate(date); }
+ }
+
+ return dateObject;
+}
+
+dojo.date.fromIso8601Date = function (string) {
+ return dojo.date.setIso8601Date(new Date(0), string);
+}
+
+/**
+ * Sets the current Date object to the date given in an ISO 8601 time
+ * stamp. The date is left unchanged.
+ *
+ * @param string The time formted as an ISO 8601 string
+ */
+dojo.date.setIso8601Time = function (dateObject, string) {
+ // first strip timezone info from the end
+ var timezone = "Z|(([-+])([0-9]{2})(:?([0-9]{2}))?)$";
+ var d = string.match(new RegExp(timezone));
+
+ var offset = 0; // local time if no tz info
+ if (d) {
+ if (d[0] != 'Z') {
+ offset = (Number(d[3]) * 60) + Number(d[5]);
+ offset *= ((d[2] == '-') ? 1 : -1);
+ }
+ offset -= dateObject.getTimezoneOffset()
+ string = string.substr(0, string.length - d[0].length);
+ }
+
+ // then work out the time
+ var regexp = "^([0-9]{2})(:?([0-9]{2})(:?([0-9]{2})(\.([0-9]+))?)?)?$";
+ var d = string.match(new RegExp(regexp));
+
+ var hours = d[1];
+ var mins = Number((d[3]) ? d[3] : 0) + offset;
+ var secs = (d[5]) ? d[5] : 0;
+ var ms = d[7] ? (Number("0." + d[7]) * 1000) : 0;
+
+ dateObject.setHours(hours);
+ dateObject.setMinutes(mins);
+ dateObject.setSeconds(secs);
+ dateObject.setMilliseconds(ms);
+
+ return dateObject;
+}
+
+dojo.date.fromIso8601Time = function (string) {
+ return dojo.date.setIso8601Time(new Date(0), string);
+}
+
+/**
+ * Sets the date to the day of year
+ *
+ * @param date The day of year
+ */
+dojo.date.setDayOfYear = function (dateObject, dayofyear) {
+ dateObject.setMonth(0);
+ dateObject.setDate(dayofyear);
+ return dateObject;
+}
+
+/**
+ * Retrieves the day of the year the Date is set to.
+ *
+ * @return The day of the year
+ */
+dojo.date.getDayOfYear = function (dateObject) {
+ var tmpdate = new Date("1/1/" + dateObject.getFullYear());
+ return Math.floor((dateObject.getTime() - tmpdate.getTime()) / 86400000);
+}
+
+dojo.date.getWeekOfYear = function (dateObject, firstDay) {
+ if (!firstDay) { firstDay = 0; } // Sunday
+
+ var firstDayOfYear = new Date(dateObject.getFullYear(), 0, 1);
+ var day = firstDayOfYear.getDay();
+ if (day > firstDay) {
+ firstDayOfYear.setDate(firstDayOfYear.getDate() - day + firstDay);
+ } else {
+ firstDayOfYear.setDate(firstDayOfYear.getDate() - day + firstDay - 7);
+ }
+
+ return Math.floor((dateObject.getTime() - firstDayOfYear.getTime()) / 604800000);
+}
+
+dojo.date.daysInMonth = function (month, year) {
+ dojo.deprecated("daysInMonth(month, year)",
+ "replaced by getDaysInMonth(dateObject)", "0.4");
+ return dojo.date.getDaysInMonth(new Date(year, month, 1));
+}
+
+/**
+ * Returns the number of days in the given month. Leap years are accounted
+ * for.
+ *
+ * @param dateObject Date set to the month concerned
+ * @return The number of days in the given month
+ */
+dojo.date.getDaysInMonth = function (dateObject) {
+ var month = dateObject.getMonth();
+ var year = dateObject.getFullYear();
+
+ /*
+ * Leap years are years with an additional day YYYY-02-29, where the year
+ * number is a multiple of four with the following exception: If a year
+ * is a multiple of 100, then it is only a leap year if it is also a
+ * multiple of 400. For example, 1900 was not a leap year, but 2000 is one.
+ */
+ var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
+ if (month == 1 && year) {
+ if ((!(year % 4) && (year % 100)) ||
+ (!(year % 4) && !(year % 100) && !(year % 400))) { return 29; }
+ else { return 28; }
+ } else { return days[month]; }
+}
+
+
+dojo.date.months = ["January", "February", "March", "April", "May", "June",
+ "July", "August", "September", "October", "November", "December"];
+dojo.date.shortMonths = ["Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec"];
+dojo.date.days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
+dojo.date.shortDays = ["Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat"];
+
+/**
+ *
+ * Returns a string of the date in the version "January 1, 2004"
+ *
+ * @param date The date object
+ */
+dojo.date.toLongDateString = function(date) {
+ return dojo.date.months[date.getMonth()] + " " + date.getDate() + ", " + date.getFullYear();
+}
+
+/**
+ *
+ * Returns a string of the date in the version "Jan 1, 2004"
+ *
+ * @param date The date object
+ */
+dojo.date.toShortDateString = function(date) {
+ return dojo.date.shortMonths[date.getMonth()] + " " + date.getDate() + ", " + date.getFullYear();
+}
+
+/**
+ *
+ * Returns military formatted time
+ *
+ * @param date the date object
+ */
+dojo.date.toMilitaryTimeString = function(date){
+ dojo.deprecated("dojo.date.toMilitaryTimeString",
+ 'use dojo.date.strftime(date, "%T")', "0.4");
+ return dojo.date.strftime(date, "%T");
+}
+
+/**
+ *
+ * Returns a string of the date relative to the current date.
+ *
+ * @param date The date object
+ *
+ * Example returns:
+ * - "1 minute ago"
+ * - "4 minutes ago"
+ * - "Yesterday"
+ * - "2 days ago"
+ */
+dojo.date.toRelativeString = function(date) {
+ var now = new Date();
+ var diff = (now - date) / 1000;
+ var end = " ago";
+ var future = false;
+ if(diff < 0) {
+ future = true;
+ end = " from now";
+ diff = -diff;
+ }
+
+ if(diff < 60) {
+ diff = Math.round(diff);
+ return diff + " second" + (diff == 1 ? "" : "s") + end;
+ } else if(diff < 3600) {
+ diff = Math.round(diff/60);
+ return diff + " minute" + (diff == 1 ? "" : "s") + end;
+ } else if(diff < 3600*24 && date.getDay() == now.getDay()) {
+ diff = Math.round(diff/3600);
+ return diff + " hour" + (diff == 1 ? "" : "s") + end;
+ } else if(diff < 3600*24*7) {
+ diff = Math.round(diff/(3600*24));
+ if(diff == 1) {
+ return future ? "Tomorrow" : "Yesterday";
+ } else {
+ return diff + " days" + end;
+ }
+ } else {
+ return dojo.date.toShortDateString(date);
+ }
+}
+
+/**
+ * Retrieves the day of the week the Date is set to.
+ *
+ * @return The day of the week
+ */
+dojo.date.getDayOfWeekName = function (date) {
+ return dojo.date.days[date.getDay()];
+}
+
+/**
+ * Retrieves the short day of the week name the Date is set to.
+ *
+ * @return The short day of the week name
+ */
+dojo.date.getShortDayOfWeekName = function (date) {
+ return dojo.date.shortDays[date.getDay()];
+}
+
+/**
+ * Retrieves the month name the Date is set to.
+ *
+ * @return The month name
+ */
+dojo.date.getMonthName = function (date) {
+ return dojo.date.months[date.getMonth()];
+}
+
+/**
+ * Retrieves the short month name the Date is set to.
+ *
+ * @return The short month name
+ */
+dojo.date.getShortMonthName = function (date) {
+ return dojo.date.shortMonths[date.getMonth()];
+}
+
+/**
+ *
+ * Format datetime
+ *
+ * @param date the date object
+ */
+dojo.date.toString = function(date, format){
+
+ if (format.indexOf("#d") > -1) {
+ format = format.replace(/#dddd/g, dojo.date.getDayOfWeekName(date));
+ format = format.replace(/#ddd/g, dojo.date.getShortDayOfWeekName(date));
+ format = format.replace(/#dd/g, (date.getDate().toString().length==1?"0":"")+date.getDate());
+ format = format.replace(/#d/g, date.getDate());
+ }
+
+ if (format.indexOf("#M") > -1) {
+ format = format.replace(/#MMMM/g, dojo.date.getMonthName(date));
+ format = format.replace(/#MMM/g, dojo.date.getShortMonthName(date));
+ format = format.replace(/#MM/g, ((date.getMonth()+1).toString().length==1?"0":"")+(date.getMonth()+1));
+ format = format.replace(/#M/g, date.getMonth() + 1);
+ }
+
+ if (format.indexOf("#y") > -1) {
+ var fullYear = date.getFullYear().toString();
+ format = format.replace(/#yyyy/g, fullYear);
+ format = format.replace(/#yy/g, fullYear.substring(2));
+ format = format.replace(/#y/g, fullYear.substring(3));
+ }
+
+ // Return if only date needed;
+ if (format.indexOf("#") == -1) {
+ return format;
+ }
+
+ if (format.indexOf("#h") > -1) {
+ var hours = date.getHours();
+ hours = (hours > 12 ? hours - 12 : (hours == 0) ? 12 : hours);
+ format = format.replace(/#hh/g, (hours.toString().length==1?"0":"")+hours);
+ format = format.replace(/#h/g, hours);
+ }
+
+ if (format.indexOf("#H") > -1) {
+ format = format.replace(/#HH/g, (date.getHours().toString().length==1?"0":"")+date.getHours());
+ format = format.replace(/#H/g, date.getHours());
+ }
+
+ if (format.indexOf("#m") > -1) {
+ format = format.replace(/#mm/g, (date.getMinutes().toString().length==1?"0":"")+date.getMinutes());
+ format = format.replace(/#m/g, date.getMinutes());
+ }
+
+ if (format.indexOf("#s") > -1) {
+ format = format.replace(/#ss/g, (date.getSeconds().toString().length==1?"0":"")+date.getSeconds());
+ format = format.replace(/#s/g, date.getSeconds());
+ }
+
+ if (format.indexOf("#T") > -1) {
+ format = format.replace(/#TT/g, date.getHours() >= 12 ? "PM" : "AM");
+ format = format.replace(/#T/g, date.getHours() >= 12 ? "P" : "A");
+ }
+
+ if (format.indexOf("#t") > -1) {
+ format = format.replace(/#tt/g, date.getHours() >= 12 ? "pm" : "am");
+ format = format.replace(/#t/g, date.getHours() >= 12 ? "p" : "a");
+ }
+
+ return format;
+
+}
+
+/**
+ * Convert a Date to a SQL string, optionally ignoring the HH:MM:SS portion of the Date
+ */
+dojo.date.toSql = function(date, noTime) {
+ return dojo.date.strftime(date, "%F" + !noTime ? " %T" : "");
+}
+
+/**
+ * Convert a SQL date string to a JavaScript Date object
+ */
+dojo.date.fromSql = function(sqlDate) {
+ var parts = sqlDate.split(/[\- :]/g);
+ while(parts.length < 6) {
+ parts.push(0);
+ }
+ return new Date(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5]);
+}
+
+
+
+// UNIXesque strftime, see <http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html>
+dojo.date.strftime = function (date, string) {
+
+ // cache
+ var properties = {
+ "n": "\n",
+ "t": "\t",
+ "%": "%"
+ };
+
+ // zero pad
+ function $ (s) { s = String(s); while (s.length < 2) { s = "0" + s; } return s; }
+
+ function getProperty (property) {
+ if (!properties[property]) {
+ switch (property) {
+ case "a": properties["a"] = dojo.date.getShortDayOfWeekName(date); break;
+ case "A": properties["A"] = dojo.date.getDayOfWeekName(date); break;
+ case "b": case "h": property = "b"; properties["b"] = dojo.date.getShortMonthName(date); break;
+ case "B": properties["B"] = dojo.date.getMonthName(date); break;
+ case "c": properties["c"] = date.toLocaleString(); break;
+ case "C": properties["C"] = $(Math.floor(date.getFullYear()/100)); break;
+ case "d": properties["d"] = $(date.getDate()); break;
+ case "D": properties["D"] = getProperty("m") + "/" + getProperty("d") + "/" + getProperty("y");
+ case "e":
+ var e = String(date.getDate());
+ if (e.length < 2) { e = " " + e; }
+ properties["e"] = e;
+ case "F": properties["F"] = getProperty("Y") + "-" + getProperty("m") + "-" + getProperty("d");
+ case "H": properties["H"] = $(date.getHours()); break;
+ case "I":
+ var hours = date.getHours();
+ properties["I"] = $(hours > 12 ? hours - 12 : hours); break;
+ case "j":
+ var j = $(dojo.date.getDayOfYear(date));
+ if (j.length < 3) { j = "0" + j; }
+ properties["j"] = j; break;
+ case "m": properties["m"] = $(date.getMonth() + 1); break;
+ case "M": properties["M"] = $(date.getMinutes()); break;
+ case "p": properties["p"] = date.getHours() < 12 ? "am" : "pm";
+ case "r": properties["r"] = getProperty("I") + ":" + getProperty("M") + ":" + getProperty("S") + " " + getProperty("p");
+ case "R": properties["R"] = getProperty("H") + ":" + getProperty("M");
+ case "S": properties["S"] = $(date.getSeconds()); break;
+ case "T": properties["T"] = getProperty("H") + ":" + getProperty("M") + ":" + getProperty("S");
+ case "u":
+ var day = date.getDay();
+ properties["u"] = $(day == 0 ? 7 : day); break;
+ case "U": properties["U"] = $(dojo.date.getWeekOfYear(date)); break;
+ case "V": break; // eek number of the year (Monday as the first day of the week) as a decimal number [01,53]. If the week containing 1 January has four or more days in the new year, then it is considered week 1. Otherwise, it is the last week of the previous year, and the next week is week 1.
+ case "W": properties["W"] = $(dojo.date.getWeekOfYear(date, 1)); break;
+ case "w": properties["w"] = $(date.getDay()); break;
+ case "y":
+ var y = date.getFullYear();
+ properties["y"] = $(y - Math.floor(y/100)*100);
+ case "Y": properties["Y"] = String(date.getFullYear()); break;
+ }
+ }
+
+ return properties[property];
+ }
+
+ var str = "";
+ var i = 0, index = 0;
+ while ((index = string.indexOf("%", i)) != -1) {
+ str += string.substring(i, index);
+ str += getProperty(string.charAt(index + 1));
+ i = index + 2;
+ }
+ str += string.substring(i);
+
+ return str;
+}
Added: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/dnd/DragAndDrop.js
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/dnd/DragAndDrop.js?rev=373750&view=auto
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/dnd/DragAndDrop.js (added)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/dnd/DragAndDrop.js Mon Jan 30 23:42:27 2006
@@ -0,0 +1,162 @@
+/*
+ Copyright (c) 2004-2005, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+dojo.require("dojo.lang");
+dojo.provide("dojo.dnd.DragSource");
+dojo.provide("dojo.dnd.DropTarget");
+dojo.provide("dojo.dnd.DragObject");
+dojo.provide("dojo.dnd.DragAndDrop");
+
+dojo.dnd.DragSource = function(){
+ dojo.dnd.dragManager.registerDragSource(this);
+}
+
+dojo.lang.extend(dojo.dnd.DragSource, {
+ type: "",
+
+ onDragEnd: function(){
+ },
+
+ onDragStart: function(){
+ },
+
+ unregister: function(){
+ dojo.dnd.dragManager.unregisterDragSource(this);
+ },
+
+ reregister: function(){
+ dojo.dnd.dragManager.registerDragSource(this);
+ }
+});
+
+dojo.dnd.DragObject = function(){
+ dojo.dnd.dragManager.registerDragObject(this);
+}
+
+dojo.lang.extend(dojo.dnd.DragObject, {
+ type: "",
+
+ onDragStart: function(){
+ // gets called directly after being created by the DragSource
+ // default action is to clone self as icon
+ },
+
+ onDragMove: function(){
+ // this changes the UI for the drag icon
+ // "it moves itself"
+ },
+
+ onDragOver: function(){
+ },
+
+ onDragOut: function(){
+ },
+
+ onDragEnd: function(){
+ },
+
+ // normal aliases
+ onDragLeave: this.onDragOut,
+ onDragEnter: this.onDragOver,
+
+ // non-camel aliases
+ ondragout: this.onDragOut,
+ ondragover: this.onDragOver
+});
+
+dojo.dnd.DropTarget = function(){
+ if (this.constructor == dojo.dnd.DropTarget) { return; } // need to be subclassed
+ this.acceptedTypes = [];
+ dojo.dnd.dragManager.registerDropTarget(this);
+}
+
+dojo.lang.extend(dojo.dnd.DropTarget, {
+
+ acceptsType: function(type){
+ if(!dojo.lang.inArray(this.acceptedTypes, "*")){ // wildcard
+ if(!dojo.lang.inArray(this.acceptedTypes, type)) { return false; }
+ }
+ return true;
+ },
+
+ accepts: function(dragObjects){
+ if(!dojo.lang.inArray(this.acceptedTypes, "*")){ // wildcard
+ for (var i = 0; i < dragObjects.length; i++) {
+ if (!dojo.lang.inArray(this.acceptedTypes,
+ dragObjects[i].type)) { return false; }
+ }
+ }
+ return true;
+ },
+
+ onDragOver: function(){
+ },
+
+ onDragOut: function(){
+ },
+
+ onDragMove: function(){
+ },
+
+ onDropStart: function(){
+ },
+
+ onDrop: function(){
+ },
+
+ onDropEnd: function(){
+ }
+});
+
+// NOTE: this interface is defined here for the convenience of the DragManager
+// implementor. It is expected that in most cases it will be satisfied by
+// extending a native event (DOM event in HTML and SVG).
+dojo.dnd.DragEvent = function(){
+ this.dragSource = null;
+ this.dragObject = null;
+ this.target = null;
+ this.eventStatus = "success";
+ //
+ // can be one of:
+ // [ "dropSuccess", "dropFailure", "dragMove",
+ // "dragStart", "dragEnter", "dragLeave"]
+ //
+}
+
+dojo.dnd.DragManager = function(){
+ /*
+ * The DragManager handles listening for low-level events and dispatching
+ * them to higher-level primitives like drag sources and drop targets. In
+ * order to do this, it must keep a list of the items.
+ */
+}
+
+dojo.lang.extend(dojo.dnd.DragManager, {
+ selectedSources: [],
+ dragObjects: [],
+ dragSources: [],
+ registerDragSource: function(){},
+ dropTargets: [],
+ registerDropTarget: function(){},
+ lastDragTarget: null,
+ currentDragTarget: null,
+ onKeyDown: function(){},
+ onMouseOut: function(){},
+ onMouseMove: function(){},
+ onMouseUp: function(){}
+});
+
+// NOTE: despite the existance of the DragManager class, there will be a
+// singleton drag manager provided by the renderer-specific D&D support code.
+// It is therefore sane for us to assign instance variables to the DragManager
+// prototype
+
+// The renderer-specific file will define the following object:
+// dojo.dnd.dragManager = null;
Added: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/dnd/HtmlDragAndDrop.js
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/dnd/HtmlDragAndDrop.js?rev=373750&view=auto
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/dnd/HtmlDragAndDrop.js (added)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/dnd/HtmlDragAndDrop.js Mon Jan 30 23:42:27 2006
@@ -0,0 +1,392 @@
+/*
+ Copyright (c) 2004-2005, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+dojo.provide("dojo.dnd.HtmlDragAndDrop");
+dojo.provide("dojo.dnd.HtmlDragSource");
+dojo.provide("dojo.dnd.HtmlDropTarget");
+dojo.provide("dojo.dnd.HtmlDragObject");
+
+dojo.require("dojo.dnd.HtmlDragManager");
+dojo.require("dojo.dnd.DragAndDrop");
+
+dojo.require("dojo.animation.*");
+dojo.require("dojo.dom");
+dojo.require("dojo.style");
+dojo.require("dojo.html");
+dojo.require("dojo.lang.extras");
+
+dojo.dnd.HtmlDragSource = function(node, type){
+ node = dojo.byId(node);
+ this.constrainToContainer = false;
+ if(node){
+ this.domNode = node;
+ this.dragObject = node;
+
+ // register us
+ dojo.dnd.DragSource.call(this);
+
+ // set properties that might have been clobbered by the mixin
+ this.type = type||this.domNode.nodeName.toLowerCase();
+ }
+
+}
+
+dojo.lang.extend(dojo.dnd.HtmlDragSource, {
+ dragClass: "", // CSS classname(s) applied to node when it is being dragged
+
+ onDragStart: function(){
+ var dragObj = new dojo.dnd.HtmlDragObject(this.dragObject, this.type);
+ if(this.dragClass) { dragObj.dragClass = this.dragClass; }
+
+ if (this.constrainToContainer) {
+ dragObj.constrainTo(this.constrainingContainer);
+ }
+
+ return dragObj;
+ },
+ setDragHandle: function(node){
+ node = dojo.byId(node);
+ dojo.dnd.dragManager.unregisterDragSource(this);
+ this.domNode = node;
+ dojo.dnd.dragManager.registerDragSource(this);
+ },
+ setDragTarget: function(node){
+ this.dragObject = node;
+ },
+
+ constrainTo: function(container) {
+ this.constrainToContainer = true;
+
+ if (container) {
+ this.constrainingContainer = container;
+ } else {
+ this.constrainingContainer = this.domNode.parentNode;
+ }
+ }
+});
+
+dojo.dnd.HtmlDragObject = function(node, type){
+ this.domNode = dojo.byId(node);
+ this.type = type;
+ this.constrainToContainer = false;
+}
+
+dojo.lang.extend(dojo.dnd.HtmlDragObject, {
+ dragClass: "",
+ opacity: 0.5,
+ createIframe: true, // workaround IE6 bug
+
+ // if true, node will not move in X and/or Y direction
+ disableX: false,
+ disableY: false,
+
+ createDragNode: function() {
+ var node = this.domNode.cloneNode(true);
+ if(this.dragClass) { dojo.html.addClass(node, this.dragClass); }
+ if(this.opacity < 1) { dojo.style.setOpacity(node, this.opacity); }
+ if(dojo.render.html.ie && this.createIframe){
+ var outer = document.createElement("div");
+ outer.appendChild(node);
+ this.bgIframe = new dojo.html.BackgroundIframe();
+ this.bgIframe.size([0,0,dojo.style.getOuterWidth(node),dojo.style.getOuterHeight(node)]);
+ outer.appendChild(this.bgIframe.iframe);
+ node = outer;
+ }
+ node.style.zIndex = 500;
+ return node;
+ },
+
+ onDragStart: function(e){
+ dojo.html.clearSelection();
+
+ this.scrollOffset = {
+ top: dojo.html.getScrollTop(), // document.documentElement.scrollTop,
+ left: dojo.html.getScrollLeft() // document.documentElement.scrollLeft
+ };
+
+ this.dragStartPosition = {top: dojo.style.getAbsoluteY(this.domNode, true) + this.scrollOffset.top,
+ left: dojo.style.getAbsoluteX(this.domNode, true) + this.scrollOffset.left};
+
+
+ this.dragOffset = {top: this.dragStartPosition.top - e.clientY,
+ left: this.dragStartPosition.left - e.clientX};
+
+ this.dragClone = this.createDragNode();
+
+
+ if ((this.domNode.parentNode.nodeName.toLowerCase() == 'body') || (dojo.style.getComputedStyle(this.domNode.parentNode,"position") == "static")) {
+ this.parentPosition = {top: 0, left: 0};
+ } else {
+ this.parentPosition = {top: dojo.style.getAbsoluteY(this.domNode.parentNode, true),
+ left: dojo.style.getAbsoluteX(this.domNode.parentNode,true)};
+ }
+
+ if (this.constrainToContainer) {
+ this.constraints = this.getConstraints();
+ }
+
+ // set up for dragging
+ with(this.dragClone.style){
+ position = "absolute";
+ top = this.dragOffset.top + e.clientY + "px";
+ left = this.dragOffset.left + e.clientX + "px";
+ }
+
+ document.body.appendChild(this.dragClone);
+ },
+
+ getConstraints: function() {
+
+ if (this.constrainingContainer.nodeName.toLowerCase() == 'body') {
+ width = dojo.html.getViewportWidth();
+ height = dojo.html.getViewportHeight();
+ padLeft = 0;
+ padTop = 0;
+ } else {
+ width = dojo.style.getContentWidth(this.constrainingContainer);
+ height = dojo.style.getContentHeight(this.constrainingContainer);
+ padLeft = dojo.style.getPixelValue(this.constrainingContainer, "padding-left", true);
+ padTop = dojo.style.getPixelValue(this.constrainingContainer, "padding-top", true);
+ }
+
+ return {
+ minX: padLeft,
+ minY: padTop,
+ maxX: padLeft+width - dojo.style.getOuterWidth(this.domNode),
+ maxY: padTop+height - dojo.style.getOuterHeight(this.domNode)
+ }
+ },
+
+ updateDragOffset: function() {
+ var sTop = dojo.html.getScrollTop(); // document.documentElement.scrollTop;
+ var sLeft = dojo.html.getScrollLeft(); // document.documentElement.scrollLeft;
+ if(sTop != this.scrollOffset.top) {
+ var diff = sTop - this.scrollOffset.top;
+ this.dragOffset.top += diff;
+ this.scrollOffset.top = sTop;
+ }
+ },
+
+ /** Moves the node to follow the mouse */
+ onDragMove: function(e){
+ this.updateDragOffset();
+ var x = this.dragOffset.left + e.clientX - this.parentPosition.left;
+ var y = this.dragOffset.top + e.clientY - this.parentPosition.top;
+
+ if (this.constrainToContainer) {
+ if (x < this.constraints.minX) { x = this.constraints.minX; }
+ if (y < this.constraints.minY) { y = this.constraints.minY; }
+ if (x > this.constraints.maxX) { x = this.constraints.maxX; }
+ if (y > this.constraints.maxY) { y = this.constraints.maxY; }
+ }
+
+ if(!this.disableY) { this.dragClone.style.top = y + "px"; }
+ if(!this.disableX) { this.dragClone.style.left = x + "px"; }
+ },
+
+ /**
+ * If the drag operation returned a success we reomve the clone of
+ * ourself from the original position. If the drag operation returned
+ * failure we slide back over to where we came from and end the operation
+ * with a little grace.
+ */
+ onDragEnd: function(e){
+ switch(e.dragStatus){
+
+ case "dropSuccess":
+ dojo.dom.removeNode(this.dragClone);
+ this.dragClone = null;
+ break;
+
+ case "dropFailure": // slide back to the start
+ var startCoords = [dojo.style.getAbsoluteX(this.dragClone),
+ dojo.style.getAbsoluteY(this.dragClone)];
+ // offset the end so the effect can be seen
+ var endCoords = [this.dragStartPosition.left + 1,
+ this.dragStartPosition.top + 1];
+
+ // animate
+ var line = new dojo.math.curves.Line(startCoords, endCoords);
+ var anim = new dojo.animation.Animation(line, 300, 0, 0);
+ var dragObject = this;
+ dojo.event.connect(anim, "onAnimate", function(e) {
+ dragObject.dragClone.style.left = e.x + "px";
+ dragObject.dragClone.style.top = e.y + "px";
+ });
+ dojo.event.connect(anim, "onEnd", function (e) {
+ // pause for a second (not literally) and disappear
+ dojo.lang.setTimeout(dojo.dom.removeNode, 200,
+ dragObject.dragClone);
+ });
+ anim.play();
+ break;
+ }
+ },
+
+ constrainTo: function(container) {
+ this.constrainToContainer=true;
+ if (container) {
+ this.constrainingContainer = container;
+ } else {
+ this.constrainingContainer = this.domNode.parentNode;
+ }
+ }
+});
+
+dojo.dnd.HtmlDropTarget = function(node, types){
+ if (arguments.length == 0) { return; }
+ this.domNode = dojo.byId(node);
+ dojo.dnd.DropTarget.call(this);
+ this.acceptedTypes = types || [];
+}
+dojo.inherits(dojo.dnd.HtmlDropTarget, dojo.dnd.DropTarget);
+
+dojo.lang.extend(dojo.dnd.HtmlDropTarget, {
+ onDragOver: function(e){
+ if(!this.accepts(e.dragObjects)){ return false; }
+
+ // cache the positions of the child nodes
+ this.childBoxes = [];
+ for (var i = 0, child; i < this.domNode.childNodes.length; i++) {
+ child = this.domNode.childNodes[i];
+ if (child.nodeType != dojo.dom.ELEMENT_NODE) { continue; }
+ var top = dojo.style.getAbsoluteY(child);
+ var bottom = top + dojo.style.getInnerHeight(child);
+ var left = dojo.style.getAbsoluteX(child);
+ var right = left + dojo.style.getInnerWidth(child);
+ this.childBoxes.push({top: top, bottom: bottom,
+ left: left, right: right, node: child});
+ }
+
+ // TODO: use dummy node
+
+ return true;
+ },
+
+ _getNodeUnderMouse: function(e){
+ var mousex = e.pageX || e.clientX + document.body.scrollLeft;
+ var mousey = e.pageY || e.clientY + document.body.scrollTop;
+
+ // find the child
+ for (var i = 0, child; i < this.childBoxes.length; i++) {
+ with (this.childBoxes[i]) {
+ if (mousex >= left && mousex <= right &&
+ mousey >= top && mousey <= bottom) { return i; }
+ }
+ }
+
+ return -1;
+ },
+
+ createDropIndicator: function() {
+ this.dropIndicator = document.createElement("div");
+ with (this.dropIndicator.style) {
+ position = "absolute";
+ zIndex = 1;
+ borderTopWidth = "1px";
+ borderTopColor = "black";
+ borderTopStyle = "solid";
+ width = dojo.style.getInnerWidth(this.domNode) + "px";
+ left = dojo.style.getAbsoluteX(this.domNode) + "px";
+ }
+ },
+
+ onDragMove: function(e, dragObjects){
+ var i = this._getNodeUnderMouse(e);
+
+ if(!this.dropIndicator){
+ this.createDropIndicator();
+ }
+
+ if(i < 0) {
+ if(this.childBoxes.length) {
+ var before = (dojo.html.gravity(this.childBoxes[0].node, e) & dojo.html.gravity.NORTH);
+ } else {
+ var before = true;
+ }
+ } else {
+ var child = this.childBoxes[i];
+ var before = (dojo.html.gravity(child.node, e) & dojo.html.gravity.NORTH);
+ }
+ this.placeIndicator(e, dragObjects, i, before);
+
+ if(!dojo.html.hasParent(this.dropIndicator)) {
+ document.body.appendChild(this.dropIndicator);
+ }
+ },
+
+ placeIndicator: function(e, dragObjects, boxIndex, before) {
+ with(this.dropIndicator.style){
+ if (boxIndex < 0) {
+ if (this.childBoxes.length) {
+ top = (before ? this.childBoxes[0].top
+ : this.childBoxes[this.childBoxes.length - 1].bottom) + "px";
+ } else {
+ top = dojo.style.getAbsoluteY(this.domNode) + "px";
+ }
+ } else {
+ var child = this.childBoxes[boxIndex];
+ top = (before ? child.top : child.bottom) + "px";
+ }
+ }
+ },
+
+ onDragOut: function(e) {
+ if(this.dropIndicator) {
+ dojo.dom.removeNode(this.dropIndicator);
+ delete this.dropIndicator;
+ }
+ },
+
+ /**
+ * Inserts the DragObject as a child of this node relative to the
+ * position of the mouse.
+ *
+ * @return true if the DragObject was inserted, false otherwise
+ */
+ onDrop: function(e){
+ this.onDragOut(e);
+
+ var i = this._getNodeUnderMouse(e);
+
+ if (i < 0) {
+ if (this.childBoxes.length) {
+ if (dojo.html.gravity(this.childBoxes[0].node, e) & dojo.html.gravity.NORTH) {
+ return this.insert(e, this.childBoxes[0].node, "before");
+ } else {
+ return this.insert(e, this.childBoxes[this.childBoxes.length-1].node, "after");
+ }
+ }
+ return this.insert(e, this.domNode, "append");
+ }
+
+ var child = this.childBoxes[i];
+ if (dojo.html.gravity(child.node, e) & dojo.html.gravity.NORTH) {
+ return this.insert(e, child.node, "before");
+ } else {
+ return this.insert(e, child.node, "after");
+ }
+ },
+
+ insert: function(e, refNode, position) {
+ var node = e.dragObject.domNode;
+
+ if(position == "before") {
+ return dojo.html.insertBefore(node, refNode);
+ } else if(position == "after") {
+ return dojo.html.insertAfter(node, refNode);
+ } else if(position == "append") {
+ refNode.appendChild(node);
+ return true;
+ }
+
+ return false;
+ }
+});
Added: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/dnd/HtmlDragManager.js
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/dnd/HtmlDragManager.js?rev=373750&view=auto
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/dnd/HtmlDragManager.js (added)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/dnd/HtmlDragManager.js Mon Jan 30 23:42:27 2006
@@ -0,0 +1,410 @@
+/*
+ Copyright (c) 2004-2005, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+dojo.provide("dojo.dnd.HtmlDragManager");
+dojo.require("dojo.dnd.DragAndDrop");
+dojo.require("dojo.event.*");
+dojo.require("dojo.lang.array");
+dojo.require("dojo.html");
+dojo.require("dojo.style");
+
+// NOTE: there will only ever be a single instance of HTMLDragManager, so it's
+// safe to use prototype properties for book-keeping.
+dojo.dnd.HtmlDragManager = function(){
+}
+
+dojo.inherits(dojo.dnd.HtmlDragManager, dojo.dnd.DragManager);
+
+dojo.lang.extend(dojo.dnd.HtmlDragManager, {
+ /**
+ * There are several sets of actions that the DnD code cares about in the
+ * HTML context:
+ * 1.) mouse-down ->
+ * (draggable selection)
+ * (dragObject generation)
+ * mouse-move ->
+ * (draggable movement)
+ * (droppable detection)
+ * (inform droppable)
+ * (inform dragObject)
+ * mouse-up
+ * (inform/destroy dragObject)
+ * (inform draggable)
+ * (inform droppable)
+ * 2.) mouse-down -> mouse-down
+ * (click-hold context menu)
+ * 3.) mouse-click ->
+ * (draggable selection)
+ * shift-mouse-click ->
+ * (augment draggable selection)
+ * mouse-down ->
+ * (dragObject generation)
+ * mouse-move ->
+ * (draggable movement)
+ * (droppable detection)
+ * (inform droppable)
+ * (inform dragObject)
+ * mouse-up
+ * (inform draggable)
+ * (inform droppable)
+ * 4.) mouse-up
+ * (clobber draggable selection)
+ */
+ disabled: false, // to kill all dragging!
+ nestedTargets: false,
+ mouseDownTimer: null, // used for click-hold operations
+ dsCounter: 0,
+ dsPrefix: "dojoDragSource",
+
+ // dimension calculation cache for use durring drag
+ dropTargetDimensions: [],
+
+ currentDropTarget: null,
+ // currentDropTargetPoints: null,
+ previousDropTarget: null,
+ _dragTriggered: false,
+
+ selectedSources: [],
+ dragObjects: [],
+
+ // mouse position properties
+ currentX: null,
+ currentY: null,
+ lastX: null,
+ lastY: null,
+ mouseDownX: null,
+ mouseDownY: null,
+ threshold: 7,
+
+ dropAcceptable: false,
+
+ // method over-rides
+ registerDragSource: function(ds){
+ if(ds["domNode"]){
+ // FIXME: dragSource objects SHOULD have some sort of property that
+ // references their DOM node, we shouldn't just be passing nodes and
+ // expecting it to work.
+ var dp = this.dsPrefix;
+ var dpIdx = dp+"Idx_"+(this.dsCounter++);
+ ds.dragSourceId = dpIdx;
+ this.dragSources[dpIdx] = ds;
+ ds.domNode.setAttribute(dp, dpIdx);
+ }
+ },
+
+ unregisterDragSource: function(ds){
+ if (ds["domNode"]){
+
+ var dp = this.dsPrefix;
+ var dpIdx = ds.dragSourceId;
+ delete ds.dragSourceId;
+ delete this.dragSources[dpIdx];
+ ds.domNode.setAttribute(dp, null);
+ }
+ },
+
+ registerDropTarget: function(dt){
+ this.dropTargets.push(dt);
+ },
+
+ unregisterDropTarget: function(dt){
+ var index = dojo.lang.find(this.dropTargets, dt, true);
+ if (index>=0) {
+ this.dropTargets.splice(index, 1);
+ }
+ },
+
+ getDragSource: function(e){
+ var tn = e.target;
+ if(tn === document.body){ return; }
+ var ta = dojo.html.getAttribute(tn, this.dsPrefix);
+ while((!ta)&&(tn)){
+ tn = tn.parentNode;
+ if((!tn)||(tn === document.body)){ return; }
+ ta = dojo.html.getAttribute(tn, this.dsPrefix);
+ }
+ return this.dragSources[ta];
+ },
+
+ onKeyDown: function(e){
+ },
+
+ onMouseDown: function(e){
+ if(this.disabled) { return; }
+
+ this.mouseDownX = e.clientX;
+ this.mouseDownY = e.clientY;
+
+ var target = e.target.nodeType == dojo.dom.TEXT_NODE ?
+ e.target.parentNode : e.target;
+
+ /*
+ FIXME(algo): I believe that is not a problem any more because of drag tolerance.
+ Anyway, why forbid dragging items by clicking on links inside them ?
+ There are problems with dragging by links in IE, should be solved another way..
+ */
+ // do not start drag involvement if the user is interacting with
+ // a form element.
+ switch(target.tagName.toLowerCase()) {
+ case "a": case "button": case "textarea":
+ case "input":
+ return;
+ }
+
+ // find a selection object, if one is a parent of the source node
+ var ds = this.getDragSource(e);
+ if(!ds){ return; }
+ if(!dojo.lang.inArray(this.selectedSources, ds)){
+ this.selectedSources.push(ds);
+ }
+
+ // WARNING: preventing the default action on all mousedown events
+ // prevents user interaction with the contents.
+ e.preventDefault();
+
+ dojo.event.connect(document, "onmousemove", this, "onMouseMove");
+ },
+
+ onMouseUp: function(e){
+ this.mouseDownX = null;
+ this.mouseDownY = null;
+ this._dragTriggered = false;
+ var _this = this;
+ e.dragSource = this.dragSource;
+ if((!e.shiftKey)&&(!e.ctrlKey)){
+ if(_this.currentDropTarget) {
+ _this.currentDropTarget.onDropStart();
+ }
+ dojo.lang.forEach(this.dragObjects, function(tempDragObj){
+ var ret = null;
+ if(!tempDragObj){ return; }
+ if(_this.currentDropTarget) {
+ e.dragObject = tempDragObj;
+
+ // NOTE: we can't get anything but the current drop target
+ // here since the drag shadow blocks mouse-over events.
+ // This is probelematic for dropping "in" something
+ var ce = _this.currentDropTarget.domNode.childNodes;
+ if(ce.length > 0){
+ e.dropTarget = ce[0];
+ while(e.dropTarget == tempDragObj.domNode){
+ e.dropTarget = e.dropTarget.nextSibling;
+ }
+ }else{
+ e.dropTarget = _this.currentDropTarget.domNode;
+ }
+ if (_this.dropAcceptable){
+ ret = _this.currentDropTarget.onDrop(e);
+ } else {
+ _this.currentDropTarget.onDragOut(e);
+ }
+ }
+
+ e.dragStatus = _this.dropAcceptable && ret ? "dropSuccess" : "dropFailure";
+ tempDragObj.onDragEnd(e);
+ });
+
+ this.selectedSources = [];
+ this.dragObjects = [];
+ this.dragSource = null;
+ if(_this.currentDropTarget) {
+ _this.currentDropTarget.onDropEnd();
+ }
+ }
+ dojo.event.disconnect(document, "onmousemove", this, "onMouseMove");
+ this.currentDropTarget = null;
+ // this.currentDropTargetPoints = null;
+ },
+
+ onScroll: function() {
+ for(var i = 0; i < this.dragObjects.length; i++) {
+ if(this.dragObjects[i].updateDragOffset) {
+ this.dragObjects[i].updateDragOffset();
+ }
+ }
+ // TODO: do not recalculate, only adjust coordinates
+ this.cacheTargetLocations();
+ },
+
+ _dragStartDistance: function(x, y){
+ if((!this.mouseDownX)||(!this.mouseDownX)){
+ return;
+ }
+ var dx = Math.abs(x-this.mouseDownX);
+ var dx2 = dx*dx;
+ var dy = Math.abs(y-this.mouseDownY);
+ var dy2 = dy*dy;
+ return parseInt(Math.sqrt(dx2+dy2), 10);
+ },
+
+ cacheTargetLocations: function() {
+ var _this = this;
+
+ this.dropTargetDimensions = [];
+ dojo.lang.forEach(this.dropTargets, function(tempTarget){
+ var tn = tempTarget.domNode;
+ if(!tn){ return; }
+ var ttx = dojo.style.getAbsoluteX(tn, true);
+ var tty = dojo.style.getAbsoluteY(tn, true);
+ _this.dropTargetDimensions.push([
+ [ttx, tty], // upper-left
+ // lower-right
+ [ ttx+dojo.style.getInnerWidth(tn), tty+dojo.style.getInnerHeight(tn) ],
+ tempTarget
+ ]);
+ //dojo.debug("Cached for "+tempTarget)
+ });
+
+ //dojo.debug("Cache locations")
+
+ },
+
+ onMouseMove: function(e){
+ var _this = this;
+ // if we've got some sources, but no drag objects, we need to send
+ // onDragStart to all the right parties and get things lined up for
+ // drop target detection
+ if( (this.selectedSources.length)&&
+ (!this.dragObjects.length) ){
+ var dx;
+ var dy;
+ if(!this._dragTriggered){
+ this._dragTriggered = (this._dragStartDistance(e.clientX, e.clientY) > this.threshold);
+ if(!this._dragTriggered){ return; }
+ dx = e.clientX-this.mouseDownX;
+ dy = e.clientY-this.mouseDownY;
+ }
+
+ if (this.selectedSources.length == 1) {
+ this.dragSource = this.selectedSources[0];
+ }
+
+ dojo.lang.forEach(this.selectedSources, function(tempSource){
+ if(!tempSource){ return; }
+ var tdo = tempSource.onDragStart(e);
+ if(tdo){
+ tdo.onDragStart(e);
+
+ // "bump" the drag object to account for the drag threshold
+ tdo.dragOffset.top += dy;
+ tdo.dragOffset.left += dx;
+
+ _this.dragObjects.push(tdo);
+ }
+ });
+
+ /* clean previous drop target in dragStart */
+ this.previousDropTarget = null;
+
+ this.cacheTargetLocations();
+ }
+ // FIXME: we need to add dragSources and dragObjects to e
+ for (var i = 0; i < this.dragObjects.length; i++){
+ if(this.dragObjects[i]){ this.dragObjects[i].onDragMove(e); }
+ }
+
+ // if we have a current drop target, check to see if we're outside of
+ // it. If so, do all the actions that need doing.
+ if (this.currentDropTarget) {
+ //dojo.debug(dojo.dom.hasParent(this.currentDropTarget.domNode))
+ var c = dojo.html.toCoordinateArray(this.currentDropTarget.domNode);
+ // var dtp = this.currentDropTargetPoints;
+ var dtp = [
+ [c[0],c[1]], [c[0]+c[2], c[1]+c[3]]
+ ];
+ }
+
+ if((!this.nestedTargets)&&(dtp)&&(this.isInsideBox(e, dtp))){
+ if(this.dropAcceptable){
+ this.currentDropTarget.onDragMove(e, this.dragObjects);
+ }
+ }else{
+ // FIXME: need to fix the event object!
+ // see if we can find a better drop target
+ var bestBox = this.findBestTarget(e);
+
+ if(bestBox.target === null){
+ if(this.currentDropTarget){
+ this.currentDropTarget.onDragOut(e);
+ this.previousDropTarget = this.currentDropTarget;
+ this.currentDropTarget = null;
+ // this.currentDropTargetPoints = null;
+ }
+ this.dropAcceptable = false;
+ return;
+ }
+
+ if(this.currentDropTarget !== bestBox.target){
+ if(this.currentDropTarget){
+ this.previousDropTarget = this.currentDropTarget;
+ this.currentDropTarget.onDragOut(e);
+ }
+ this.currentDropTarget = bestBox.target;
+ // this.currentDropTargetPoints = bestBox.points;
+ e.dragObjects = this.dragObjects;
+ this.dropAcceptable = this.currentDropTarget.onDragOver(e);
+
+ }else{
+ if(this.dropAcceptable){
+ this.currentDropTarget.onDragMove(e, this.dragObjects);
+ }
+ }
+
+ }
+ },
+
+ findBestTarget: function(e) {
+ var _this = this;
+ var bestBox = new Object();
+ bestBox.target = null;
+ bestBox.points = null;
+ dojo.lang.forEach(this.dropTargetDimensions, function(tmpDA) {
+ if(_this.isInsideBox(e, tmpDA)){
+ bestBox.target = tmpDA[2];
+ bestBox.points = tmpDA;
+ if(!_this.nestedTargets){ return "break"; }
+ }
+ });
+
+ return bestBox;
+ },
+
+ isInsideBox: function(e, coords){
+ if( (e.clientX > coords[0][0])&&
+ (e.clientX < coords[1][0])&&
+ (e.clientY > coords[0][1])&&
+ (e.clientY < coords[1][1]) ){
+ return true;
+ }
+ return false;
+ },
+
+ onMouseOver: function(e){
+ },
+
+ onMouseOut: function(e){
+ }
+});
+
+dojo.dnd.dragManager = new dojo.dnd.HtmlDragManager();
+
+// global namespace protection closure
+(function(){
+ var d = document;
+ var dm = dojo.dnd.dragManager;
+ // set up event handlers on the document
+ dojo.event.connect(d, "onkeydown", dm, "onKeyDown");
+ dojo.event.connect(d, "onmouseover", dm, "onMouseOver");
+ dojo.event.connect(d, "onmouseout", dm, "onMouseOut");
+ dojo.event.connect(d, "onmousedown", dm, "onMouseDown");
+ dojo.event.connect(d, "onmouseup", dm, "onMouseUp");
+ // TODO: process scrolling of elements, not only window
+ dojo.event.connect(window, "onscroll", dm, "onScroll");
+})();
Added: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/dnd/HtmlDragMove.js
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/dnd/HtmlDragMove.js?rev=373750&view=auto
==============================================================================
--- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/dnd/HtmlDragMove.js (added)
+++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/ajax/dojo/src/dnd/HtmlDragMove.js Mon Jan 30 23:42:27 2006
@@ -0,0 +1,74 @@
+/*
+ Copyright (c) 2004-2005, The Dojo Foundation
+ All Rights Reserved.
+
+ Licensed under the Academic Free License version 2.1 or above OR the
+ modified BSD license. For more information on Dojo licensing, see:
+
+ http://dojotoolkit.org/community/licensing.shtml
+*/
+
+dojo.provide("dojo.dnd.HtmlDragMove");
+dojo.provide("dojo.dnd.HtmlDragMoveSource");
+dojo.provide("dojo.dnd.HtmlDragMoveObject");
+dojo.require("dojo.dnd.*");
+
+dojo.dnd.HtmlDragMoveSource = function(node, type){
+ dojo.dnd.HtmlDragSource.call(this, node, type);
+}
+
+dojo.inherits(dojo.dnd.HtmlDragMoveSource, dojo.dnd.HtmlDragSource);
+
+dojo.lang.extend(dojo.dnd.HtmlDragMoveSource, {
+ onDragStart: function(){
+ var dragObj = new dojo.dnd.HtmlDragMoveObject(this.dragObject, this.type);
+
+ if (this.constrainToContainer) {
+ dragObj.constrainTo(this.constrainingContainer);
+ }
+ return dragObj;
+ }
+});
+
+dojo.dnd.HtmlDragMoveObject = function(node, type){
+ dojo.dnd.HtmlDragObject.call(this, node, type);
+}
+
+dojo.inherits(dojo.dnd.HtmlDragMoveObject, dojo.dnd.HtmlDragObject);
+
+dojo.lang.extend(dojo.dnd.HtmlDragMoveObject, {
+ onDragEnd: function(e){
+ delete this.dragClone;
+ },
+
+ onDragStart: function(e){
+ dojo.html.clearSelection();
+
+ this.dragClone = this.domNode;
+
+ this.scrollOffset = {
+ top: dojo.html.getScrollTop(), // document.documentElement.scrollTop,
+ left: dojo.html.getScrollLeft() // document.documentElement.scrollLeft
+ };
+
+ this.dragStartPosition = {top: dojo.style.getAbsoluteY(this.domNode) ,
+ left: dojo.style.getAbsoluteX(this.domNode) };
+
+ this.dragOffset = {top: this.dragStartPosition.top - e.clientY,
+ left: this.dragStartPosition.left - e.clientX};
+
+ if (this.domNode.parentNode.nodeName.toLowerCase() == 'body') {
+ this.parentPosition = {top: 0, left: 0};
+ } else {
+ this.parentPosition = {top: dojo.style.getAbsoluteY(this.domNode.parentNode, true),
+ left: dojo.style.getAbsoluteX(this.domNode.parentNode,true)};
+ }
+
+ this.dragClone.style.position = "absolute";
+
+ if (this.constrainToContainer) {
+ this.constraints = this.getConstraints();
+ }
+ }
+
+});
---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org