How to use hash method in autotest

Best Python code snippet using autotest_python

keys.js

Source:keys.js Github

copy

Full Screen

1var predefinedDecHash = new Map();2var predefinedEncHash = new Map();34predefinedDecHash.set(0, "D");5predefinedDecHash.set(1, "q");6predefinedDecHash.set(2, "6");7predefinedDecHash.set(3, "/");8predefinedDecHash.set(4, "V");9predefinedDecHash.set(5, "G");10predefinedDecHash.set(6, "h");11predefinedDecHash.set(7, "l");12predefinedDecHash.set(8, "I");13predefinedDecHash.set(9, "F");14predefinedDecHash.set(10, "F");15predefinedDecHash.set(11, "1");16predefinedDecHash.set(12, "a");17predefinedDecHash.set(13, "W");18predefinedDecHash.set(14, "N");19predefinedDecHash.set(15, "r");20predefinedDecHash.set(16, "I");21predefinedDecHash.set(17, "F");22predefinedDecHash.set(18, "J");23predefinedDecHash.set(19, "l");24predefinedDecHash.set(20, "Z");25predefinedDecHash.set(21, "C");26predefinedDecHash.set(22, "B");27predefinedDecHash.set(23, "G");28predefinedDecHash.set(24, "b");29predefinedDecHash.set(25, "3");30predefinedDecHash.set(26, "g");31predefinedDecHash.set(27, "g");32predefinedDecHash.set(28, "S");33predefinedDecHash.set(29, "n");34predefinedDecHash.set(30, "V");35predefinedDecHash.set(31, "t");36predefinedDecHash.set(32, "c");37predefinedDecHash.set(33, "G");38predefinedDecHash.set(34, "V");39predefinedDecHash.set(35, "k");40predefinedDecHash.set(36, "I");41predefinedDecHash.set(37, "E");42predefinedDecHash.set(38, "9");43predefinedDecHash.set(39, "2");44predefinedDecHash.set(40, "Z");45predefinedDecHash.set(41, "X");46predefinedDecHash.set(42, "I");47predefinedDecHash.set(43, "g");48predefinedDecHash.set(44, "d");49predefinedDecHash.set(45, "G");50predefinedDecHash.set(46, "h");51predefinedDecHash.set(47, "l");52predefinedDecHash.set(48, "I");53predefinedDecHash.set(49, "E");54predefinedDecHash.set(50, "x");55predefinedDecHash.set(51, "h");56predefinedDecHash.set(52, "e");57predefinedDecHash.set(53, "n");58predefinedDecHash.set(54, "k");59predefinedDecHash.set(55, "g");60predefinedDecHash.set(56, "Q");61predefinedDecHash.set(57, "n");62predefinedDecHash.set(58, "J");63predefinedDecHash.set(59, "v");64predefinedDecHash.set(60, "d");65predefinedDecHash.set(61, "2");66predefinedDecHash.set(62, "4");67predefinedDecHash.set(63, "g");68predefinedDecHash.set(64, "R");69predefinedDecHash.set(65, "G");70predefinedDecHash.set(66, "9");71predefinedDecHash.set(67, "n");72predefinedDecHash.set(68, "L");73predefinedDecHash.set(69, "i");74predefinedDecHash.set(70, "A");75predefinedDecHash.set(71, "8");76predefinedDecHash.set(72, "P");77predefinedDecHash.set(73, "i");78predefinedDecHash.set(74, "w");79predefinedDecHash.set(75, "u");80predefinedDecHash.set(76, "P");81predefinedDecHash.set(77, "z");82predefinedDecHash.set(78, "o");83predefinedDecHash.set(79, "7");84predefinedDecHash.set(80, "f");85predefinedDecHash.set(81, "H");86predefinedDecHash.set(82, "t");87predefinedDecHash.set(83, "9");88predefinedDecHash.set(84, "W");89predefinedDecHash.set(85, "1");90predefinedDecHash.set(86, "1");91predefinedDecHash.set(87, "+");92predefinedDecHash.set(88, "I");93predefinedDecHash.set(89, "U");94predefinedDecHash.set(90, "A");95predefinedDecHash.set(91, "j");96predefinedDecHash.set(92, "J");97predefinedDecHash.set(93, "C");98predefinedDecHash.set(94, "V");99predefinedDecHash.set(95, "e");100predefinedDecHash.set(96, "J");101predefinedDecHash.set(97, "i");102predefinedDecHash.set(98, "o");103predefinedDecHash.set(99, "o");104predefinedDecHash.set(100, "K");105predefinedDecHash.set(101, "V");106predefinedDecHash.set(102, "8");107predefinedDecHash.set(103, "r");108predefinedDecHash.set(104, "P");109predefinedDecHash.set(105, "S");110predefinedDecHash.set(106, "0");111predefinedDecHash.set(107, "w");112predefinedDecHash.set(108, "O");113predefinedDecHash.set(109, "T");114predefinedDecHash.set(110, "g");115predefinedDecHash.set(111, "3");116predefinedDecHash.set(112, "N");117predefinedDecHash.set(113, "j");118predefinedDecHash.set(114, "U");119predefinedDecHash.set(115, "0");120predefinedDecHash.set(116, "M");121predefinedDecHash.set(117, "z");122predefinedDecHash.set(118, "I");123predefinedDecHash.set(119, "x");124predefinedDecHash.set(120, "Y");125predefinedDecHash.set(121, "E");126predefinedDecHash.set(122, "x");127predefinedDecHash.set(123, "v");128predefinedDecHash.set(124, "c");129predefinedDecHash.set(125, "m");130predefinedDecHash.set(126, "V");131predefinedDecHash.set(127, "t");132predefinedDecHash.set(128, "I");133predefinedDecHash.set(129, "G");134predefinedDecHash.set(130, "l");135predefinedDecHash.set(131, "w");136predefinedDecHash.set(132, "c");137predefinedDecHash.set(133, "3");138predefinedDecHash.set(134, "V");139predefinedDecHash.set(135, "t");140predefinedDecHash.set(136, "I");141predefinedDecHash.set(137, "G");142predefinedDecHash.set(138, "R");143predefinedDecHash.set(139, "v");144predefinedDecHash.set(140, "b");145predefinedDecHash.set(141, "G");146predefinedDecHash.set(142, "9");147predefinedDecHash.set(143, "y");148predefinedDecHash.set(144, "I");149predefinedDecHash.set(145, "H");150predefinedDecHash.set(146, "N");151predefinedDecHash.set(147, "p");152predefinedDecHash.set(148, "d");153predefinedDecHash.set(149, "C");154predefinedDecHash.set(150, "B");155predefinedDecHash.set(151, "h");156predefinedDecHash.set(152, "b");157predefinedDecHash.set(153, "W");158predefinedDecHash.set(154, "V");159predefinedDecHash.set(155, "0");160predefinedDecHash.set(156, "L");161predefinedDecHash.set(157, "C");162predefinedDecHash.set(158, "B");163predefinedDecHash.set(159, "j");164predefinedDecHash.set(160, "b");165predefinedDecHash.set(161, "2");166predefinedDecHash.set(162, "5");167predefinedDecHash.set(163, "z");168predefinedDecHash.set(164, "Z");169predefinedDecHash.set(165, "W");170predefinedDecHash.set(166, "N");171predefinedDecHash.set(167, "0");172predefinedDecHash.set(168, "Z");173predefinedDecHash.set(169, "X");174predefinedDecHash.set(170, "R");175predefinedDecHash.set(171, "1");176predefinedDecHash.set(172, "c");177predefinedDecHash.set(173, "i");178predefinedDecHash.set(174, "B");179predefinedDecHash.set(175, "h");180predefinedDecHash.set(176, "Z");181predefinedDecHash.set(177, "G");182predefinedDecHash.set(178, "l");183predefinedDecHash.set(179, "w");184predefinedDecHash.set(180, "a");185predefinedDecHash.set(181, "X");186predefinedDecHash.set(182, "N");187predefinedDecHash.set(183, "j");188predefinedDecHash.set(184, "a");189predefinedDecHash.set(185, "W");190predefinedDecHash.set(186, "5");191predefinedDecHash.set(187, "n");192predefinedDecHash.set(188, "I");193predefinedDecHash.set(189, "G");194predefinedDecHash.set(190, "V");195predefinedDecHash.set(191, "s");196predefinedDecHash.set(192, "a");197predefinedDecHash.set(193, "X");198predefinedDecHash.set(194, "Q");199predefinedDecHash.set(195, "s");200predefinedDecHash.set(196, "I");201predefinedDecHash.set(197, "H");202predefinedDecHash.set(198, "N");203predefinedDecHash.set(199, "l");204predefinedDecHash.set(200, "Z");205predefinedDecHash.set(201, "C");206predefinedDecHash.set(202, "B");207predefinedDecHash.set(203, "k");208predefinedDecHash.set(204, "b");209predefinedDecHash.set(205, "y");210predefinedDecHash.set(206, "B");211predefinedDecHash.set(207, "l");212predefinedDecHash.set(208, "a");213predefinedDecHash.set(209, "X");214predefinedDecHash.set(210, "V");215predefinedDecHash.set(211, "z");216predefinedDecHash.set(212, "b");217predefinedDecHash.set(213, "W");218predefinedDecHash.set(214, "9");219predefinedDecHash.set(215, "k");220predefinedDecHash.set(216, "I");221predefinedDecHash.set(217, "H");222predefinedDecHash.set(218, "R");223predefinedDecHash.set(219, "l");224predefinedDecHash.set(220, "b");225predefinedDecHash.set(221, "X");226predefinedDecHash.set(222, "B");227predefinedDecHash.set(223, "v");228predefinedDecHash.set(224, "c");229predefinedDecHash.set(225, "i");230predefinedDecHash.set(226, "B");231predefinedDecHash.set(227, "p");232predefinedDecHash.set(228, "b");233predefinedDecHash.set(229, "m");234predefinedDecHash.set(230, "N");235predefinedDecHash.set(231, "p");236predefinedDecHash.set(232, "Z");237predefinedDecHash.set(233, "G");238predefinedDecHash.set(234, "l");239predefinedDecHash.set(235, "k");240predefinedDecHash.set(236, "d");241predefinedDecHash.set(237, "W");242predefinedDecHash.set(238, "5");243predefinedDecHash.set(239, "0");244predefinedDecHash.set(240, "I");245predefinedDecHash.set(241, "H");246predefinedDecHash.set(242, "V");247predefinedDecHash.set(243, "0");248predefinedDecHash.set(244, "I");249predefinedDecHash.set(245, "G");250predefinedDecHash.set(246, "x");251predefinedDecHash.set(247, "h");252predefinedDecHash.set(248, "Y");253predefinedDecHash.set(249, "m");254predefinedDecHash.set(250, "9");255predefinedDecHash.set(251, "y");256predefinedDecHash.set(252, "Z");257predefinedDecHash.set(253, "S");258predefinedDecHash.set(254, "B");259predefinedDecHash.set(255, "l");260predefinedDecHash.set(256, "d");261predefinedDecHash.set(257, "C");262predefinedDecHash.set(258, "B");263predefinedDecHash.set(259, "k");264predefinedDecHash.set(260, "b");265predefinedDecHash.set(261, "2");266predefinedDecHash.set(262, "x");267predefinedDecHash.set(263, "v");268predefinedDecHash.set(264, "c");269predefinedDecHash.set(265, "m");270predefinedDecHash.set(266, "U");271predefinedDecHash.set(267, "g");272predefinedDecHash.set(268, "b");273predefinedDecHash.set(269, "W");274predefinedDecHash.set(270, "F");275predefinedDecHash.set(271, "n");276predefinedDecHash.set(272, "b");277predefinedDecHash.set(273, "m");278predefinedDecHash.set(274, "E");279predefinedDecHash.set(275, "g");280predefinedDecHash.set(276, "Y");281predefinedDecHash.set(277, "W");282predefinedDecHash.set(278, "x");283predefinedDecHash.set(279, "p");284predefinedDecHash.set(280, "c");285predefinedDecHash.set(281, "X");286predefinedDecHash.set(282, "V");287predefinedDecHash.set(283, "h");288predefinedDecHash.set(284, "L");289predefinedDecHash.set(285, "i");290predefinedDecHash.set(286, "B");291predefinedDecHash.set(287, "V");292predefinedDecHash.set(288, "d");293predefinedDecHash.set(289, "C");294predefinedDecHash.set(290, "B");295predefinedDecHash.set(291, "l");296predefinedDecHash.set(292, "b");297predefinedDecHash.set(293, "m");298predefinedDecHash.set(294, "l");299predefinedDecHash.set(295, "t");300predefinedDecHash.set(296, "I");301predefinedDecHash.set(297, "G");302predefinedDecHash.set(298, "F");303predefinedDecHash.set(299, "k");304predefinedDecHash.set(300, "I");305predefinedDecHash.set(301, "G");306predefinedDecHash.set(302, "1");307predefinedDecHash.set(303, "p");308predefinedDecHash.set(304, "b");309predefinedDecHash.set(305, "m");310predefinedDecHash.set(306, "l");311predefinedDecHash.set(307, "t");312predefinedDecHash.set(308, "I");313predefinedDecHash.set(309, "H");314predefinedDecHash.set(310, "Z");315predefinedDecHash.set(311, "l");316predefinedDecHash.set(312, "b");317predefinedDecHash.set(313, "m");318predefinedDecHash.set(314, "l");319predefinedDecHash.set(315, "h");320predefinedDecHash.set(316, "b");321predefinedDecHash.set(317, "S");322predefinedDecHash.set(318, "w");323predefinedDecHash.set(319, "g");324predefinedDecHash.set(320, "c");325predefinedDecHash.set(321, "X");326predefinedDecHash.set(322, "V");327predefinedDecHash.set(323, "p");328predefinedDecHash.set(324, "c");329predefinedDecHash.set(325, "y");330predefinedDecHash.set(326, "B");331predefinedDecHash.set(327, "u");332predefinedDecHash.set(328, "b");333predefinedDecHash.set(329, "3");334predefinedDecHash.set(330, "N");335predefinedDecHash.set(331, "0");336predefinedDecHash.set(332, "c");337predefinedDecHash.set(333, "n");338predefinedDecHash.set(334, "V");339predefinedDecHash.set(335, "k");340predefinedDecHash.set(336, "I");341predefinedDecHash.set(337, "G");342predefinedDecHash.set(338, "V");343predefinedDecHash.set(339, "4");344predefinedDecHash.set(340, "Z");345predefinedDecHash.set(341, "X");346predefinedDecHash.set(342, "J");347predefinedDecHash.set(343, "j");348predefinedDecHash.set(344, "a");349predefinedDecHash.set(345, "X");350predefinedDecHash.set(346, "R");351predefinedDecHash.set(347, "h");352predefinedDecHash.set(348, "d");353predefinedDecHash.set(349, "G");354predefinedDecHash.set(350, "l");355predefinedDecHash.set(351, "v");356predefinedDecHash.set(352, "b");357predefinedDecHash.set(353, "i");358predefinedDecHash.set(354, "B");359predefinedDecHash.set(355, "1");360predefinedDecHash.set(356, "b");361predefinedDecHash.set(357, "G");362predefinedDecHash.set(358, "x");363predefinedDecHash.set(359, "h");364predefinedDecHash.set(360, "b");365predefinedDecHash.set(361, "W");366predefinedDecHash.set(362, "N");367predefinedDecHash.set(363, "v");368predefinedDecHash.set(364, "I");369predefinedDecHash.set(365, "G");370predefinedDecHash.set(366, "x");371predefinedDecHash.set(367, "h");372predefinedDecHash.set(368, "Y");373predefinedDecHash.set(369, "m");374predefinedDecHash.set(370, "9");375predefinedDecHash.set(371, "y");376predefinedDecHash.set(372, "a");377predefinedDecHash.set(373, "X");378predefinedDecHash.set(374, "M");379predefinedDecHash.set(375, "g");380predefinedDecHash.set(376, "b");381predefinedDecHash.set(377, "m");382predefinedDecHash.set(378, "l");383predefinedDecHash.set(379, "z");384predefinedDecHash.set(380, "a");385predefinedDecHash.set(381, "S");386predefinedDecHash.set(382, "B");387predefinedDecHash.set(383, "1");388predefinedDecHash.set(384, "d");389predefinedDecHash.set(385, "C");390predefinedDecHash.set(386, "B");391predefinedDecHash.set(387, "h");392predefinedDecHash.set(388, "b");393predefinedDecHash.set(389, "G");394predefinedDecHash.set(390, "l");395predefinedDecHash.set(391, "x");396predefinedDecHash.set(392, "d");397predefinedDecHash.set(393, "W");398predefinedDecHash.set(394, "l");399predefinedDecHash.set(395, "w");400predefinedDecHash.set(396, "I");401predefinedDecHash.set(397, "G");402predefinedDecHash.set(398, "V");403predefinedDecHash.set(399, "4");404predefinedDecHash.set(400, "I");405predefinedDecHash.set(401, "G");406predefinedDecHash.set(402, "V");407predefinedDecHash.set(403, "h");408predefinedDecHash.set(404, "I");409predefinedDecHash.set(405, "G");410predefinedDecHash.set(406, "N");411predefinedDecHash.set(407, "v");412predefinedDecHash.set(408, "b");413predefinedDecHash.set(409, "W");414predefinedDecHash.set(410, "1");415predefinedDecHash.set(411, "v");416predefinedDecHash.set(412, "Z");417predefinedDecHash.set(413, "G");418predefinedDecHash.set(414, "8");419predefinedDecHash.set(415, "g");420predefinedDecHash.set(416, "Y");421predefinedDecHash.set(417, "2");422predefinedDecHash.set(418, "9");423predefinedDecHash.set(419, "u");424predefinedDecHash.set(420, "c");425predefinedDecHash.set(421, "2");426predefinedDecHash.set(422, "V");427predefinedDecHash.set(423, "x");428predefinedDecHash.set(424, "d");429predefinedDecHash.set(425, "W");430predefinedDecHash.set(426, "F");431predefinedDecHash.set(427, "0");432predefinedDecHash.set(428, "L");433predefinedDecHash.set(429, "i");434predefinedDecHash.set(430, "B");435predefinedDecHash.set(431, "E");436predefinedDecHash.set(432, "d");437predefinedDecHash.set(433, "W");438predefinedDecHash.set(434, "l");439predefinedDecHash.set(435, "z");440predefinedDecHash.set(436, "I");441predefinedDecHash.set(437, "G");442predefinedDecHash.set(438, "F");443predefinedDecHash.set(439, "1");444predefinedDecHash.set(440, "d");445predefinedDecHash.set(441, "G");446predefinedDecHash.set(442, "U");447predefinedDecHash.set(443, "g");448predefinedDecHash.set(444, "a");449predefinedDecHash.set(445, "X");450predefinedDecHash.set(446, "J");451predefinedDecHash.set(447, "1");452predefinedDecHash.set(448, "c");453predefinedDecHash.set(449, "m");454predefinedDecHash.set(450, "U");455predefinedDecHash.set(451, "g");456predefinedDecHash.set(452, "Z");457predefinedDecHash.set(453, "G");458predefinedDecHash.set(454, "9");459predefinedDecHash.set(455, "s");460predefinedDecHash.set(456, "b");461predefinedDecHash.set(457, "3");462predefinedDecHash.set(458, "I");463predefinedDecHash.set(459, "g");464predefinedDecHash.set(460, "a");465predefinedDecHash.set(461, "W");466predefinedDecHash.set(462, "4");467predefinedDecHash.set(463, "g");468predefinedDecHash.set(464, "c");469predefinedDecHash.set(465, "m");470predefinedDecHash.set(466, "V");471predefinedDecHash.set(467, "w");472predefinedDecHash.set(468, "c");473predefinedDecHash.set(469, "m");474predefinedDecHash.set(470, "V");475predefinedDecHash.set(471, "o");476predefinedDecHash.set(472, "Z");477predefinedDecHash.set(473, "W");478predefinedDecHash.set(474, "5");479predefinedDecHash.set(475, "k");480predefinedDecHash.set(476, "Z");481predefinedDecHash.set(477, "X");482predefinedDecHash.set(478, "J");483predefinedDecHash.set(479, "p");484predefinedDecHash.set(480, "d");485predefinedDecHash.set(481, "C");486predefinedDecHash.set(482, "B");487predefinedDecHash.set(483, "p");488predefinedDecHash.set(484, "b");489predefinedDecHash.set(485, "i");490predefinedDecHash.set(486, "B");491predefinedDecHash.set(487, "2");492predefinedDecHash.set(488, "b");493predefinedDecHash.set(489, "2");494predefinedDecHash.set(490, "x");495predefinedDecHash.set(491, "1");496predefinedDecHash.set(492, "c");497predefinedDecHash.set(493, "H");498predefinedDecHash.set(494, "R");499predefinedDecHash.set(495, "h");500predefinedDecHash.set(496, "d");501predefinedDecHash.set(497, "G");502predefinedDecHash.set(498, "U");503predefinedDecHash.set(499, "g");504predefinedDecHash.set(500, "d");505predefinedDecHash.set(501, "m");506predefinedDecHash.set(502, "V");507predefinedDecHash.set(503, "s");508predefinedDecHash.set(504, "a");509predefinedDecHash.set(505, "X");510predefinedDecHash.set(506, "Q");511predefinedDecHash.set(507, "g");512predefinedDecHash.set(508, "Z");513predefinedDecHash.set(509, "X");514predefinedDecHash.set(510, "N");515predefinedDecHash.set(511, "z");516predefinedDecHash.set(512, "Z");517predefinedDecHash.set(513, "S");518predefinedDecHash.set(514, "B");519predefinedDecHash.set(515, "j");520predefinedDecHash.set(516, "a");521predefinedDecHash.set(517, "W");522predefinedDecHash.set(518, "x");523predefinedDecHash.set(519, "s");524predefinedDecHash.set(520, "d");525predefinedDecHash.set(521, "W");526predefinedDecHash.set(522, "0");527predefinedDecHash.set(523, "g");528predefinedDecHash.set(524, "Z");529predefinedDecHash.set(525, "G");530predefinedDecHash.set(526, "9");531predefinedDecHash.set(527, "s");532predefinedDecHash.set(528, "b");533predefinedDecHash.set(529, "3");534predefinedDecHash.set(530, "J");535predefinedDecHash.set(531, "l");536predefinedDecHash.set(532, "I");537predefinedDecHash.set(533, "G");538predefinedDecHash.set(534, "V");539predefinedDecHash.set(535, "1");540predefinedDecHash.set(536, "I");541predefinedDecHash.set(537, "G");542predefinedDecHash.set(538, "Z");543predefinedDecHash.set(539, "1");544predefinedDecHash.set(540, "Z");545predefinedDecHash.set(541, "2");546predefinedDecHash.set(542, "l");547predefinedDecHash.set(543, "h");548predefinedDecHash.set(544, "d");549predefinedDecHash.set(545, "C");550predefinedDecHash.set(546, "B");551predefinedDecHash.set(547, "u");552predefinedDecHash.set(548, "d");553predefinedDecHash.set(549, "W");554predefinedDecHash.set(550, "x");555predefinedDecHash.set(551, "s");556predefinedDecHash.set(552, "Y");557predefinedDecHash.set(553, "S");558predefinedDecHash.set(554, "B");559predefinedDecHash.set(555, "w");560predefinedDecHash.set(556, "Y");561predefinedDecHash.set(557, "X");562predefinedDecHash.set(558, "J");563predefinedDecHash.set(559, "p");564predefinedDecHash.set(560, "Y");565predefinedDecHash.set(561, "X");566predefinedDecHash.set(562, "R");567predefinedDecHash.set(563, "1");568predefinedDecHash.set(564, "c");569predefinedDecHash.set(565, "i");570predefinedDecHash.set(566, "4");571predefinedDecHash.set(567, "g");572predefinedDecHash.set(568, "R");573predefinedDecHash.set(569, "X");574predefinedDecHash.set(570, "h");575predefinedDecHash.set(571, "j");576predefinedDecHash.set(572, "Z");577predefinedDecHash.set(573, "X");578predefinedDecHash.set(574, "B");579predefinedDecHash.set(575, "0");580predefinedDecHash.set(576, "Z");581predefinedDecHash.set(577, "X");582predefinedDecHash.set(578, "V");583predefinedDecHash.set(579, "y");584predefinedDecHash.set(580, "I");585predefinedDecHash.set(581, "H");586predefinedDecHash.set(582, "N");587predefinedDecHash.set(583, "p");588predefinedDecHash.set(584, "b");589predefinedDecHash.set(585, "n");590predefinedDecHash.set(586, "Q");591predefinedDecHash.set(587, "g");592predefinedDecHash.set(588, "b");593predefinedDecHash.set(589, "2");594predefinedDecHash.set(590, "N");595predefinedDecHash.set(591, "j");596predefinedDecHash.set(592, "Y");597predefinedDecHash.set(593, "W");598predefinedDecHash.set(594, "V");599predefinedDecHash.set(595, "j");600predefinedDecHash.set(596, "Y");601predefinedDecHash.set(597, "X");602predefinedDecHash.set(598, "Q");603predefinedDecHash.set(599, "g");604predefinedDecHash.set(600, "Y");605predefinedDecHash.set(601, "3");606predefinedDecHash.set(602, "V");607predefinedDecHash.set(603, "w");608predefinedDecHash.set(604, "a");609predefinedDecHash.set(605, "W");610predefinedDecHash.set(606, "R");611predefinedDecHash.set(607, "h");612predefinedDecHash.set(608, "d");613predefinedDecHash.set(609, "G");614predefinedDecHash.set(610, "F");615predefinedDecHash.set(611, "0");616predefinedDecHash.set(612, "I");617predefinedDecHash.set(613, "G");618predefinedDecHash.set(614, "5");619predefinedDecHash.set(615, "v");620predefinedDecHash.set(616, "b");621predefinedDecHash.set(617, "i");622predefinedDecHash.set(618, "B");623predefinedDecHash.set(619, "w");624predefinedDecHash.set(620, "c");625predefinedDecHash.set(621, "m");626predefinedDecHash.set(622, "9");627predefinedDecHash.set(623, "p");628predefinedDecHash.set(624, "Z");629predefinedDecHash.set(625, "G");630predefinedDecHash.set(626, "V");631predefinedDecHash.set(627, "u");632predefinedDecHash.set(628, "d");633predefinedDecHash.set(629, "C");634predefinedDecHash.set(630, "w");635predefinedDecHash.set(631, "g");636predefinedDecHash.set(632, "c");637predefinedDecHash.set(633, "3");638predefinedDecHash.set(634, "V");639predefinedDecHash.set(635, "u");640predefinedDecHash.set(636, "d");641predefinedDecHash.set(637, "C");642predefinedDecHash.set(638, "B");643predefinedDecHash.set(639, "p");644predefinedDecHash.set(640, "b");645predefinedDecHash.set(641, "i");646predefinedDecHash.set(642, "B");647predefinedDecHash.set(643, "j");648predefinedDecHash.set(644, "d");649predefinedDecHash.set(645, "W");650predefinedDecHash.set(646, "x");651predefinedDecHash.set(647, "w");652predefinedDecHash.set(648, "Y");653predefinedDecHash.set(649, "S");654predefinedDecHash.set(650, "B");655predefinedDecHash.set(651, "x");656predefinedDecHash.set(652, "d");657predefinedDecHash.set(653, "W");658predefinedDecHash.set(654, "k");659predefinedDecHash.set(655, "g");660predefinedDecHash.set(656, "b");661predefinedDecHash.set(657, "2");662predefinedDecHash.set(658, "Z");663predefinedDecHash.set(659, "m");664predefinedDecHash.set(660, "a");665predefinedDecHash.set(661, "W");666predefinedDecHash.set(662, "N");667predefinedDecHash.set(663, "p");668predefinedDecHash.set(664, "Y");669predefinedDecHash.set(665, "S");670predefinedDecHash.set(666, "B");671predefinedDecHash.set(667, "k");672predefinedDecHash.set(668, "Z");673predefinedDecHash.set(669, "X");674predefinedDecHash.set(670, "N");675predefinedDecHash.set(671, "l");676predefinedDecHash.set(672, "c");677predefinedDecHash.set(673, "n");678predefinedDecHash.set(674, "V");679predefinedDecHash.set(675, "u");680predefinedDecHash.set(676, "d");681predefinedDecHash.set(677, "C");682predefinedDecHash.set(678, "B");683predefinedDecHash.set(679, "t");684predefinedDecHash.set(680, "b");685predefinedDecHash.set(681, "2");686predefinedDecHash.set(682, "x");687predefinedDecHash.set(683, "s");688predefinedDecHash.set(684, "a");689predefinedDecHash.set(685, "X");690predefinedDecHash.set(686, "Q");691predefinedDecHash.set(687, "g");692predefinedDecHash.set(688, "Y");693predefinedDecHash.set(689, "W");694predefinedDecHash.set(690, "5");695predefinedDecHash.set(691, "p");696predefinedDecHash.set(692, "b");697predefinedDecHash.set(693, "S");698predefinedDecHash.set(694, "B");699predefinedDecHash.set(695, "p");700predefinedDecHash.set(696, "Z");701predefinedDecHash.set(697, "C");702predefinedDecHash.set(698, "B");703predefinedDecHash.set(699, "l");704predefinedDecHash.set(700, "c");705predefinedDecHash.set(701, "3");706predefinedDecHash.set(702, "Q");707predefinedDecHash.set(703, "g");708predefinedDecHash.set(704, "b");709predefinedDecHash.set(705, "G");710predefinedDecHash.set(706, "F");711predefinedDecHash.set(707, "i");712predefinedDecHash.set(708, "b");713predefinedDecHash.set(709, "3");714predefinedDecHash.set(710, "J");715predefinedDecHash.set(711, "1");716predefinedDecHash.set(712, "b");717predefinedDecHash.set(713, "S");718predefinedDecHash.set(714, "4");719predefinedDecHash.set(715, "D");720predefinedDecHash.set(716, "q");721predefinedDecHash.set(717, "6");722predefinedDecHash.set(718, "/");723724predefinedEncHash.set("A", [70,90]);725predefinedEncHash.set("B", [22,150,158,174,202,206,222,226,254,258,286,290,326,354,382,386,430,482,486,514,546,554,574,618,638,642,650,666,678,694,698]);726predefinedEncHash.set("C", [21,93,149,157,201,257,289,385,481,545,629,637,677,697]);727predefinedEncHash.set("D", [0,715]);728predefinedEncHash.set("E", [37,49,121,274,431]);729predefinedEncHash.set("F", [9,10,17,270,298,426,438,610,706]);730predefinedEncHash.set("G", [5,23,33,45,65,129,137,141,177,189,233,245,297,301,337,349,357,365,389,397,401,405,413,437,441,453,497,525,533,537,609,613,625,705]);731predefinedEncHash.set("H", [81,145,197,217,241,309,493,581]);732predefinedEncHash.set("I", [8,16,36,42,48,88,118,128,136,144,188,196,216,240,244,296,300,308,336,364,396,400,404,436,458,532,536,580,612]);733predefinedEncHash.set("J", [18,58,92,96,342,446,478,530,558,710]);734predefinedEncHash.set("K", [100]);735predefinedEncHash.set("L", [68,156,284,428]);736predefinedEncHash.set("M", [116,374]);737predefinedEncHash.set("N", [14,112,146,166,182,198,230,330,362,406,510,582,590,662,670]);738predefinedEncHash.set("O", [108]);739predefinedEncHash.set("P", [72,76,104]);740predefinedEncHash.set("Q", [56,194,506,586,598,686,702]);741predefinedEncHash.set("R", [64,138,170,218,346,494,562,568,606]);742predefinedEncHash.set("S", [28,105,253,317,381,513,553,649,665,693,713]);743predefinedEncHash.set("T", [109]);744predefinedEncHash.set("U", [89,114,266,442,450,498]);745predefinedEncHash.set("V", [4,30,34,94,101,126,134,154,190,210,242,282,287,322,334,338,398,402,422,466,470,502,534,578,594,602,626,634,674]);746predefinedEncHash.set("W", [13,84,153,165,185,213,237,269,277,361,393,409,425,433,461,473,517,521,549,593,605,645,653,661,689]);747predefinedEncHash.set("X", [41,169,181,193,209,221,281,321,341,345,373,445,477,505,509,557,561,569,573,577,597,669,685]);748predefinedEncHash.set("Y", [120,248,276,368,416,552,556,560,592,596,600,648,664,688]);749predefinedEncHash.set("Z", [20,40,164,168,176,200,232,252,310,340,412,452,472,476,508,512,524,538,540,572,576,624,658,668,696]);750predefinedEncHash.set("a", [12,180,184,192,208,344,372,380,444,460,504,516,604,660,684]);751predefinedEncHash.set("b", [24,140,152,160,204,212,220,228,260,268,272,292,304,312,316,328,352,356,360,376,388,408,456,484,488,528,584,588,616,640,656,680,692,704,708,712]);752predefinedEncHash.set("c", [32,124,132,172,224,264,280,320,324,332,420,448,464,468,492,564,620,632,672,700]);753predefinedEncHash.set("d", [44,60,148,236,256,288,348,384,392,424,432,440,480,496,500,520,544,548,608,628,636,644,652,676]);754predefinedEncHash.set("e", [52,95]);755predefinedEncHash.set("f", [80]);756predefinedEncHash.set("g", [26,27,43,55,63,110,267,275,319,375,415,443,451,459,463,499,507,523,567,587,599,631,655,687,703]);757predefinedEncHash.set("h", [6,46,51,151,175,247,283,315,347,359,367,387,403,495,543,570,607]);758predefinedEncHash.set("i", [69,73,97,173,225,285,353,429,485,565,617,641,707]);759predefinedEncHash.set("j", [91,113,159,183,343,515,571,591,595,643]);760predefinedEncHash.set("k", [35,54,203,215,235,259,299,335,475,654,667]);761predefinedEncHash.set("l", [7,19,47,130,178,199,207,219,234,255,291,294,306,311,314,350,378,390,394,434,531,542,671,699]);762predefinedEncHash.set("m", [125,229,249,265,273,293,305,313,369,377,449,465,469,501,621,659]);763predefinedEncHash.set("n", [29,53,57,67,187,271,333,585,673]);764predefinedEncHash.set("o", [78,98,99,471]);765predefinedEncHash.set("p", [147,227,231,279,303,323,479,483,559,583,623,639,663,691,695]);766predefinedEncHash.set("q", [1,716]);767predefinedEncHash.set("r", [15,103]);768predefinedEncHash.set("s", [191,195,455,503,519,527,551,683]);769predefinedEncHash.set("t", [31,82,127,135,295,307,679]);770predefinedEncHash.set("u", [75,327,419,547,627,635,675]);771predefinedEncHash.set("v", [59,123,139,223,263,351,363,407,411,615]);772predefinedEncHash.set("w", [74,107,131,179,318,395,467,555,603,619,630,647]);773predefinedEncHash.set("x", [50,119,122,246,262,278,358,366,391,423,490,518,550,646,651,682]);774predefinedEncHash.set("y", [143,205,251,325,371,579]);775predefinedEncHash.set("z", [77,117,163,211,379,435,511]);776predefinedEncHash.set("0", [106,115,155,167,239,243,331,427,522,575,611]);777predefinedEncHash.set("1", [11,85,86,171,302,355,383,410,439,447,491,535,539,563,711]);778predefinedEncHash.set("2", [39,61,161,261,417,421,487,489,541,589,657,681]);779predefinedEncHash.set("3", [25,111,133,329,457,529,601,633,701,709]);780predefinedEncHash.set("4", [62,339,399,462,566,714]);781predefinedEncHash.set("5", [162,186,238,474,614,690]);782predefinedEncHash.set("6", [2,717]);783predefinedEncHash.set("7", [79]);784predefinedEncHash.set("8", [71,102,414]);785predefinedEncHash.set("9", [38,66,83,142,214,250,370,418,454,526,622]);786predefinedEncHash.set("+", [87]); ...

Full Screen

Full Screen

history-hash-debug.js

Source:history-hash-debug.js Github

copy

Full Screen

1/*2YUI 3.17.2 (build 9c3c78e)3Copyright 2014 Yahoo! Inc. All rights reserved.4Licensed under the BSD License.5http://yuilibrary.com/license/6*/7YUI.add('history-hash', function (Y, NAME) {8/**9 * Provides browser history management backed by10 * <code>window.location.hash</code>, as well as convenience methods for working11 * with the location hash and a synthetic <code>hashchange</code> event that12 * normalizes differences across browsers.13 *14 * @module history15 * @submodule history-hash16 * @since 3.2.017 * @class HistoryHash18 * @extends HistoryBase19 * @constructor20 * @param {Object} config (optional) Configuration object. See the HistoryBase21 * documentation for details.22 */23var HistoryBase = Y.HistoryBase,24 Lang = Y.Lang,25 YArray = Y.Array,26 YObject = Y.Object,27 GlobalEnv = YUI.namespace('Env.HistoryHash'),28 SRC_HASH = 'hash',29 hashNotifiers,30 oldHash,31 oldUrl,32 win = Y.config.win,33 useHistoryHTML5 = Y.config.useHistoryHTML5;34function HistoryHash() {35 HistoryHash.superclass.constructor.apply(this, arguments);36}37Y.extend(HistoryHash, HistoryBase, {38 // -- Initialization -------------------------------------------------------39 _init: function (config) {40 var bookmarkedState = HistoryHash.parseHash();41 // If an initialState was provided, merge the bookmarked state into it42 // (the bookmarked state wins).43 config = config || {};44 this._initialState = config.initialState ?45 Y.merge(config.initialState, bookmarkedState) : bookmarkedState;46 // Subscribe to the synthetic hashchange event (defined below) to handle47 // changes.48 Y.after('hashchange', Y.bind(this._afterHashChange, this), win);49 HistoryHash.superclass._init.apply(this, arguments);50 },51 // -- Protected Methods ----------------------------------------------------52 _change: function (src, state, options) {53 // Stringify all values to ensure that comparisons don't fail after54 // they're coerced to strings in the location hash.55 YObject.each(state, function (value, key) {56 if (Lang.isValue(value)) {57 state[key] = value.toString();58 }59 });60 return HistoryHash.superclass._change.call(this, src, state, options);61 },62 _storeState: function (src, newState) {63 var decode = HistoryHash.decode,64 newHash = HistoryHash.createHash(newState);65 HistoryHash.superclass._storeState.apply(this, arguments);66 // Update the location hash with the changes, but only if the new hash67 // actually differs from the current hash (this avoids creating multiple68 // history entries for a single state).69 //70 // We always compare decoded hashes, since it's possible that the hash71 // could be set incorrectly to a non-encoded value outside of72 // HistoryHash.73 if (src !== SRC_HASH && decode(HistoryHash.getHash()) !== decode(newHash)) {74 HistoryHash[src === HistoryBase.SRC_REPLACE ? 'replaceHash' : 'setHash'](newHash);75 }76 },77 // -- Protected Event Handlers ---------------------------------------------78 /**79 * Handler for hashchange events.80 *81 * @method _afterHashChange82 * @param {Event} e83 * @protected84 */85 _afterHashChange: function (e) {86 this._resolveChanges(SRC_HASH, HistoryHash.parseHash(e.newHash), {});87 }88}, {89 // -- Public Static Properties ---------------------------------------------90 NAME: 'historyHash',91 /**92 * Constant used to identify state changes originating from93 * <code>hashchange</code> events.94 *95 * @property SRC_HASH96 * @type String97 * @static98 * @final99 */100 SRC_HASH: SRC_HASH,101 /**102 * <p>103 * Prefix to prepend when setting the hash fragment. For example, if the104 * prefix is <code>!</code> and the hash fragment is set to105 * <code>#foo=bar&baz=quux</code>, the final hash fragment in the URL will106 * become <code>#!foo=bar&baz=quux</code>. This can be used to help make an107 * Ajax application crawlable in accordance with Google's guidelines at108 * <a href="http://code.google.com/web/ajaxcrawling/">http://code.google.com/web/ajaxcrawling/</a>.109 * </p>110 *111 * <p>112 * Note that this prefix applies to all HistoryHash instances. It's not113 * possible for individual instances to use their own prefixes since they114 * all operate on the same URL.115 * </p>116 *117 * @property hashPrefix118 * @type String119 * @default ''120 * @static121 */122 hashPrefix: '',123 // -- Protected Static Properties ------------------------------------------124 /**125 * Regular expression used to parse location hash/query strings.126 *127 * @property _REGEX_HASH128 * @type RegExp129 * @protected130 * @static131 * @final132 */133 _REGEX_HASH: /([^\?#&=]+)=?([^&=]*)/g,134 // -- Public Static Methods ------------------------------------------------135 /**136 * Creates a location hash string from the specified object of key/value137 * pairs.138 *139 * @method createHash140 * @param {Object} params object of key/value parameter pairs141 * @return {String} location hash string142 * @static143 */144 createHash: function (params) {145 var encode = HistoryHash.encode,146 hash = [];147 YObject.each(params, function (value, key) {148 if (Lang.isValue(value)) {149 hash.push(encode(key) + '=' + encode(value));150 }151 });152 return hash.join('&');153 },154 /**155 * Wrapper around <code>decodeURIComponent()</code> that also converts +156 * chars into spaces.157 *158 * @method decode159 * @param {String} string string to decode160 * @return {String} decoded string161 * @static162 */163 decode: function (string) {164 return decodeURIComponent(string.replace(/\+/g, ' '));165 },166 /**167 * Wrapper around <code>encodeURIComponent()</code> that converts spaces to168 * + chars.169 *170 * @method encode171 * @param {String} string string to encode172 * @return {String} encoded string173 * @static174 */175 encode: function (string) {176 return encodeURIComponent(string).replace(/%20/g, '+');177 },178 /**179 * Gets the raw (not decoded) current location hash, minus the preceding '#'180 * character and the hashPrefix (if one is set).181 *182 * @method getHash183 * @return {String} current location hash184 * @static185 */186 getHash: (Y.UA.gecko ? function () {187 // Gecko's window.location.hash returns a decoded string and we want all188 // encoding untouched, so we need to get the hash value from189 // window.location.href instead. We have to use UA sniffing rather than190 // feature detection, since the only way to detect this would be to191 // actually change the hash.192 var location = Y.getLocation(),193 matches = /#(.*)$/.exec(location.href),194 hash = matches && matches[1] || '',195 prefix = HistoryHash.hashPrefix;196 return prefix && hash.indexOf(prefix) === 0 ?197 hash.replace(prefix, '') : hash;198 } : function () {199 var location = Y.getLocation(),200 hash = location.hash.substring(1),201 prefix = HistoryHash.hashPrefix;202 // Slight code duplication here, but execution speed is of the essence203 // since getHash() is called every 50ms to poll for changes in browsers204 // that don't support native onhashchange. An additional function call205 // would add unnecessary overhead.206 return prefix && hash.indexOf(prefix) === 0 ?207 hash.replace(prefix, '') : hash;208 }),209 /**210 * Gets the current bookmarkable URL.211 *212 * @method getUrl213 * @return {String} current bookmarkable URL214 * @static215 */216 getUrl: function () {217 return location.href;218 },219 /**220 * Parses a location hash string into an object of key/value parameter221 * pairs. If <i>hash</i> is not specified, the current location hash will222 * be used.223 *224 * @method parseHash225 * @param {String} hash (optional) location hash string226 * @return {Object} object of parsed key/value parameter pairs227 * @static228 */229 parseHash: function (hash) {230 var decode = HistoryHash.decode,231 i,232 len,233 match,234 matches,235 param,236 params = {},237 prefix = HistoryHash.hashPrefix,238 prefixIndex;239 hash = Lang.isValue(hash) ? hash : HistoryHash.getHash();240 if (prefix) {241 prefixIndex = hash.indexOf(prefix);242 if (prefixIndex === 0 || (prefixIndex === 1 && hash.charAt(0) === '#')) {243 hash = hash.replace(prefix, '');244 }245 }246 matches = hash.match(HistoryHash._REGEX_HASH) || [];247 for (i = 0, len = matches.length; i < len; ++i) {248 match = matches[i];249 param = match.split('=');250 if (param.length > 1) {251 params[decode(param[0])] = decode(param[1]);252 } else {253 params[decode(match)] = '';254 }255 }256 return params;257 },258 /**259 * Replaces the browser's current location hash with the specified hash260 * and removes all forward navigation states, without creating a new browser261 * history entry. Automatically prepends the <code>hashPrefix</code> if one262 * is set.263 *264 * @method replaceHash265 * @param {String} hash new location hash266 * @static267 */268 replaceHash: function (hash) {269 var location = Y.getLocation(),270 base = location.href.replace(/#.*$/, '');271 if (hash.charAt(0) === '#') {272 hash = hash.substring(1);273 }274 location.replace(base + '#' + (HistoryHash.hashPrefix || '') + hash);275 },276 /**277 * Sets the browser's location hash to the specified string. Automatically278 * prepends the <code>hashPrefix</code> if one is set.279 *280 * @method setHash281 * @param {String} hash new location hash282 * @static283 */284 setHash: function (hash) {285 var location = Y.getLocation();286 if (hash.charAt(0) === '#') {287 hash = hash.substring(1);288 }289 location.hash = (HistoryHash.hashPrefix || '') + hash;290 }291});292// -- Synthetic hashchange Event -----------------------------------------------293// TODO: YUIDoc currently doesn't provide a good way to document synthetic DOM294// events. For now, we're just documenting the hashchange event on the YUI295// object, which is about the best we can do until enhancements are made to296// YUIDoc.297/**298Synthetic <code>window.onhashchange</code> event that normalizes differences299across browsers and provides support for browsers that don't natively support300<code>onhashchange</code>.301This event is provided by the <code>history-hash</code> module.302@example303 YUI().use('history-hash', function (Y) {304 Y.on('hashchange', function (e) {305 // Handle hashchange events on the current window.306 }, Y.config.win);307 });308@event hashchange309@param {EventFacade} e Event facade with the following additional310 properties:311<dl>312 <dt>oldHash</dt>313 <dd>314 Previous hash fragment value before the change.315 </dd>316 <dt>oldUrl</dt>317 <dd>318 Previous URL (including the hash fragment) before the change.319 </dd>320 <dt>newHash</dt>321 <dd>322 New hash fragment value after the change.323 </dd>324 <dt>newUrl</dt>325 <dd>326 New URL (including the hash fragment) after the change.327 </dd>328</dl>329@for YUI330@since 3.2.0331**/332hashNotifiers = GlobalEnv._notifiers;333if (!hashNotifiers) {334 hashNotifiers = GlobalEnv._notifiers = [];335}336Y.Event.define('hashchange', {337 on: function (node, subscriber, notifier) {338 // Ignore this subscription if the node is anything other than the339 // window or document body, since those are the only elements that340 // should support the hashchange event. Note that the body could also be341 // a frameset, but that's okay since framesets support hashchange too.342 if (node.compareTo(win) || node.compareTo(Y.config.doc.body)) {343 hashNotifiers.push(notifier);344 }345 },346 detach: function (node, subscriber, notifier) {347 var index = YArray.indexOf(hashNotifiers, notifier);348 if (index !== -1) {349 hashNotifiers.splice(index, 1);350 }351 }352});353oldHash = HistoryHash.getHash();354oldUrl = HistoryHash.getUrl();355if (HistoryBase.nativeHashChange) {356 // Wrap the browser's native hashchange event if there's not already a357 // global listener.358 if (!GlobalEnv._hashHandle) {359 GlobalEnv._hashHandle = Y.Event.attach('hashchange', function (e) {360 var newHash = HistoryHash.getHash(),361 newUrl = HistoryHash.getUrl();362 // Iterate over a copy of the hashNotifiers array since a subscriber363 // could detach during iteration and cause the array to be re-indexed.364 YArray.each(hashNotifiers.concat(), function (notifier) {365 notifier.fire({366 _event : e,367 oldHash: oldHash,368 oldUrl : oldUrl,369 newHash: newHash,370 newUrl : newUrl371 });372 });373 oldHash = newHash;374 oldUrl = newUrl;375 }, win);376 }377} else {378 // Begin polling for location hash changes if there's not already a global379 // poll running.380 if (!GlobalEnv._hashPoll) {381 GlobalEnv._hashPoll = Y.later(50, null, function () {382 var newHash = HistoryHash.getHash(),383 facade, newUrl;384 if (oldHash !== newHash) {385 newUrl = HistoryHash.getUrl();386 facade = {387 oldHash: oldHash,388 oldUrl : oldUrl,389 newHash: newHash,390 newUrl : newUrl391 };392 oldHash = newHash;393 oldUrl = newUrl;394 YArray.each(hashNotifiers.concat(), function (notifier) {395 notifier.fire(facade);396 });397 }398 }, null, true);399 }400}401Y.HistoryHash = HistoryHash;402// HistoryHash will never win over HistoryHTML5 unless useHistoryHTML5 is false.403if (useHistoryHTML5 === false || (!Y.History && useHistoryHTML5 !== true &&404 (!HistoryBase.html5 || !Y.HistoryHTML5))) {405 Y.History = HistoryHash;406}...

Full Screen

Full Screen

history-hash.js

Source:history-hash.js Github

copy

Full Screen

1/*2YUI 3.17.2 (build 9c3c78e)3Copyright 2014 Yahoo! Inc. All rights reserved.4Licensed under the BSD License.5http://yuilibrary.com/license/6*/7YUI.add('history-hash', function (Y, NAME) {8/**9 * Provides browser history management backed by10 * <code>window.location.hash</code>, as well as convenience methods for working11 * with the location hash and a synthetic <code>hashchange</code> event that12 * normalizes differences across browsers.13 *14 * @module history15 * @submodule history-hash16 * @since 3.2.017 * @class HistoryHash18 * @extends HistoryBase19 * @constructor20 * @param {Object} config (optional) Configuration object. See the HistoryBase21 * documentation for details.22 */23var HistoryBase = Y.HistoryBase,24 Lang = Y.Lang,25 YArray = Y.Array,26 YObject = Y.Object,27 GlobalEnv = YUI.namespace('Env.HistoryHash'),28 SRC_HASH = 'hash',29 hashNotifiers,30 oldHash,31 oldUrl,32 win = Y.config.win,33 useHistoryHTML5 = Y.config.useHistoryHTML5;34function HistoryHash() {35 HistoryHash.superclass.constructor.apply(this, arguments);36}37Y.extend(HistoryHash, HistoryBase, {38 // -- Initialization -------------------------------------------------------39 _init: function (config) {40 var bookmarkedState = HistoryHash.parseHash();41 // If an initialState was provided, merge the bookmarked state into it42 // (the bookmarked state wins).43 config = config || {};44 this._initialState = config.initialState ?45 Y.merge(config.initialState, bookmarkedState) : bookmarkedState;46 // Subscribe to the synthetic hashchange event (defined below) to handle47 // changes.48 Y.after('hashchange', Y.bind(this._afterHashChange, this), win);49 HistoryHash.superclass._init.apply(this, arguments);50 },51 // -- Protected Methods ----------------------------------------------------52 _change: function (src, state, options) {53 // Stringify all values to ensure that comparisons don't fail after54 // they're coerced to strings in the location hash.55 YObject.each(state, function (value, key) {56 if (Lang.isValue(value)) {57 state[key] = value.toString();58 }59 });60 return HistoryHash.superclass._change.call(this, src, state, options);61 },62 _storeState: function (src, newState) {63 var decode = HistoryHash.decode,64 newHash = HistoryHash.createHash(newState);65 HistoryHash.superclass._storeState.apply(this, arguments);66 // Update the location hash with the changes, but only if the new hash67 // actually differs from the current hash (this avoids creating multiple68 // history entries for a single state).69 //70 // We always compare decoded hashes, since it's possible that the hash71 // could be set incorrectly to a non-encoded value outside of72 // HistoryHash.73 if (src !== SRC_HASH && decode(HistoryHash.getHash()) !== decode(newHash)) {74 HistoryHash[src === HistoryBase.SRC_REPLACE ? 'replaceHash' : 'setHash'](newHash);75 }76 },77 // -- Protected Event Handlers ---------------------------------------------78 /**79 * Handler for hashchange events.80 *81 * @method _afterHashChange82 * @param {Event} e83 * @protected84 */85 _afterHashChange: function (e) {86 this._resolveChanges(SRC_HASH, HistoryHash.parseHash(e.newHash), {});87 }88}, {89 // -- Public Static Properties ---------------------------------------------90 NAME: 'historyHash',91 /**92 * Constant used to identify state changes originating from93 * <code>hashchange</code> events.94 *95 * @property SRC_HASH96 * @type String97 * @static98 * @final99 */100 SRC_HASH: SRC_HASH,101 /**102 * <p>103 * Prefix to prepend when setting the hash fragment. For example, if the104 * prefix is <code>!</code> and the hash fragment is set to105 * <code>#foo=bar&baz=quux</code>, the final hash fragment in the URL will106 * become <code>#!foo=bar&baz=quux</code>. This can be used to help make an107 * Ajax application crawlable in accordance with Google's guidelines at108 * <a href="http://code.google.com/web/ajaxcrawling/">http://code.google.com/web/ajaxcrawling/</a>.109 * </p>110 *111 * <p>112 * Note that this prefix applies to all HistoryHash instances. It's not113 * possible for individual instances to use their own prefixes since they114 * all operate on the same URL.115 * </p>116 *117 * @property hashPrefix118 * @type String119 * @default ''120 * @static121 */122 hashPrefix: '',123 // -- Protected Static Properties ------------------------------------------124 /**125 * Regular expression used to parse location hash/query strings.126 *127 * @property _REGEX_HASH128 * @type RegExp129 * @protected130 * @static131 * @final132 */133 _REGEX_HASH: /([^\?#&=]+)=?([^&=]*)/g,134 // -- Public Static Methods ------------------------------------------------135 /**136 * Creates a location hash string from the specified object of key/value137 * pairs.138 *139 * @method createHash140 * @param {Object} params object of key/value parameter pairs141 * @return {String} location hash string142 * @static143 */144 createHash: function (params) {145 var encode = HistoryHash.encode,146 hash = [];147 YObject.each(params, function (value, key) {148 if (Lang.isValue(value)) {149 hash.push(encode(key) + '=' + encode(value));150 }151 });152 return hash.join('&');153 },154 /**155 * Wrapper around <code>decodeURIComponent()</code> that also converts +156 * chars into spaces.157 *158 * @method decode159 * @param {String} string string to decode160 * @return {String} decoded string161 * @static162 */163 decode: function (string) {164 return decodeURIComponent(string.replace(/\+/g, ' '));165 },166 /**167 * Wrapper around <code>encodeURIComponent()</code> that converts spaces to168 * + chars.169 *170 * @method encode171 * @param {String} string string to encode172 * @return {String} encoded string173 * @static174 */175 encode: function (string) {176 return encodeURIComponent(string).replace(/%20/g, '+');177 },178 /**179 * Gets the raw (not decoded) current location hash, minus the preceding '#'180 * character and the hashPrefix (if one is set).181 *182 * @method getHash183 * @return {String} current location hash184 * @static185 */186 getHash: (Y.UA.gecko ? function () {187 // Gecko's window.location.hash returns a decoded string and we want all188 // encoding untouched, so we need to get the hash value from189 // window.location.href instead. We have to use UA sniffing rather than190 // feature detection, since the only way to detect this would be to191 // actually change the hash.192 var location = Y.getLocation(),193 matches = /#(.*)$/.exec(location.href),194 hash = matches && matches[1] || '',195 prefix = HistoryHash.hashPrefix;196 return prefix && hash.indexOf(prefix) === 0 ?197 hash.replace(prefix, '') : hash;198 } : function () {199 var location = Y.getLocation(),200 hash = location.hash.substring(1),201 prefix = HistoryHash.hashPrefix;202 // Slight code duplication here, but execution speed is of the essence203 // since getHash() is called every 50ms to poll for changes in browsers204 // that don't support native onhashchange. An additional function call205 // would add unnecessary overhead.206 return prefix && hash.indexOf(prefix) === 0 ?207 hash.replace(prefix, '') : hash;208 }),209 /**210 * Gets the current bookmarkable URL.211 *212 * @method getUrl213 * @return {String} current bookmarkable URL214 * @static215 */216 getUrl: function () {217 return location.href;218 },219 /**220 * Parses a location hash string into an object of key/value parameter221 * pairs. If <i>hash</i> is not specified, the current location hash will222 * be used.223 *224 * @method parseHash225 * @param {String} hash (optional) location hash string226 * @return {Object} object of parsed key/value parameter pairs227 * @static228 */229 parseHash: function (hash) {230 var decode = HistoryHash.decode,231 i,232 len,233 match,234 matches,235 param,236 params = {},237 prefix = HistoryHash.hashPrefix,238 prefixIndex;239 hash = Lang.isValue(hash) ? hash : HistoryHash.getHash();240 if (prefix) {241 prefixIndex = hash.indexOf(prefix);242 if (prefixIndex === 0 || (prefixIndex === 1 && hash.charAt(0) === '#')) {243 hash = hash.replace(prefix, '');244 }245 }246 matches = hash.match(HistoryHash._REGEX_HASH) || [];247 for (i = 0, len = matches.length; i < len; ++i) {248 match = matches[i];249 param = match.split('=');250 if (param.length > 1) {251 params[decode(param[0])] = decode(param[1]);252 } else {253 params[decode(match)] = '';254 }255 }256 return params;257 },258 /**259 * Replaces the browser's current location hash with the specified hash260 * and removes all forward navigation states, without creating a new browser261 * history entry. Automatically prepends the <code>hashPrefix</code> if one262 * is set.263 *264 * @method replaceHash265 * @param {String} hash new location hash266 * @static267 */268 replaceHash: function (hash) {269 var location = Y.getLocation(),270 base = location.href.replace(/#.*$/, '');271 if (hash.charAt(0) === '#') {272 hash = hash.substring(1);273 }274 location.replace(base + '#' + (HistoryHash.hashPrefix || '') + hash);275 },276 /**277 * Sets the browser's location hash to the specified string. Automatically278 * prepends the <code>hashPrefix</code> if one is set.279 *280 * @method setHash281 * @param {String} hash new location hash282 * @static283 */284 setHash: function (hash) {285 var location = Y.getLocation();286 if (hash.charAt(0) === '#') {287 hash = hash.substring(1);288 }289 location.hash = (HistoryHash.hashPrefix || '') + hash;290 }291});292// -- Synthetic hashchange Event -----------------------------------------------293// TODO: YUIDoc currently doesn't provide a good way to document synthetic DOM294// events. For now, we're just documenting the hashchange event on the YUI295// object, which is about the best we can do until enhancements are made to296// YUIDoc.297/**298Synthetic <code>window.onhashchange</code> event that normalizes differences299across browsers and provides support for browsers that don't natively support300<code>onhashchange</code>.301This event is provided by the <code>history-hash</code> module.302@example303 YUI().use('history-hash', function (Y) {304 Y.on('hashchange', function (e) {305 // Handle hashchange events on the current window.306 }, Y.config.win);307 });308@event hashchange309@param {EventFacade} e Event facade with the following additional310 properties:311<dl>312 <dt>oldHash</dt>313 <dd>314 Previous hash fragment value before the change.315 </dd>316 <dt>oldUrl</dt>317 <dd>318 Previous URL (including the hash fragment) before the change.319 </dd>320 <dt>newHash</dt>321 <dd>322 New hash fragment value after the change.323 </dd>324 <dt>newUrl</dt>325 <dd>326 New URL (including the hash fragment) after the change.327 </dd>328</dl>329@for YUI330@since 3.2.0331**/332hashNotifiers = GlobalEnv._notifiers;333if (!hashNotifiers) {334 hashNotifiers = GlobalEnv._notifiers = [];335}336Y.Event.define('hashchange', {337 on: function (node, subscriber, notifier) {338 // Ignore this subscription if the node is anything other than the339 // window or document body, since those are the only elements that340 // should support the hashchange event. Note that the body could also be341 // a frameset, but that's okay since framesets support hashchange too.342 if (node.compareTo(win) || node.compareTo(Y.config.doc.body)) {343 hashNotifiers.push(notifier);344 }345 },346 detach: function (node, subscriber, notifier) {347 var index = YArray.indexOf(hashNotifiers, notifier);348 if (index !== -1) {349 hashNotifiers.splice(index, 1);350 }351 }352});353oldHash = HistoryHash.getHash();354oldUrl = HistoryHash.getUrl();355if (HistoryBase.nativeHashChange) {356 // Wrap the browser's native hashchange event if there's not already a357 // global listener.358 if (!GlobalEnv._hashHandle) {359 GlobalEnv._hashHandle = Y.Event.attach('hashchange', function (e) {360 var newHash = HistoryHash.getHash(),361 newUrl = HistoryHash.getUrl();362 // Iterate over a copy of the hashNotifiers array since a subscriber363 // could detach during iteration and cause the array to be re-indexed.364 YArray.each(hashNotifiers.concat(), function (notifier) {365 notifier.fire({366 _event : e,367 oldHash: oldHash,368 oldUrl : oldUrl,369 newHash: newHash,370 newUrl : newUrl371 });372 });373 oldHash = newHash;374 oldUrl = newUrl;375 }, win);376 }377} else {378 // Begin polling for location hash changes if there's not already a global379 // poll running.380 if (!GlobalEnv._hashPoll) {381 GlobalEnv._hashPoll = Y.later(50, null, function () {382 var newHash = HistoryHash.getHash(),383 facade, newUrl;384 if (oldHash !== newHash) {385 newUrl = HistoryHash.getUrl();386 facade = {387 oldHash: oldHash,388 oldUrl : oldUrl,389 newHash: newHash,390 newUrl : newUrl391 };392 oldHash = newHash;393 oldUrl = newUrl;394 YArray.each(hashNotifiers.concat(), function (notifier) {395 notifier.fire(facade);396 });397 }398 }, null, true);399 }400}401Y.HistoryHash = HistoryHash;402// HistoryHash will never win over HistoryHTML5 unless useHistoryHTML5 is false.403if (useHistoryHTML5 === false || (!Y.History && useHistoryHTML5 !== true &&404 (!HistoryBase.html5 || !Y.HistoryHTML5))) {405 Y.History = HistoryHash;406}...

Full Screen

Full Screen

html.js

Source:html.js Github

copy

Full Screen

1/*==================================================2 * HTML Utility Functions3 *==================================================4 */5SimileAjax.HTML = new Object();6SimileAjax.HTML._e2uHash = {};7(function() {8 var e2uHash = SimileAjax.HTML._e2uHash;9 e2uHash['nbsp']= '\u00A0[space]';10 e2uHash['iexcl']= '\u00A1';11 e2uHash['cent']= '\u00A2';12 e2uHash['pound']= '\u00A3';13 e2uHash['curren']= '\u00A4';14 e2uHash['yen']= '\u00A5';15 e2uHash['brvbar']= '\u00A6';16 e2uHash['sect']= '\u00A7';17 e2uHash['uml']= '\u00A8';18 e2uHash['copy']= '\u00A9';19 e2uHash['ordf']= '\u00AA';20 e2uHash['laquo']= '\u00AB';21 e2uHash['not']= '\u00AC';22 e2uHash['shy']= '\u00AD';23 e2uHash['reg']= '\u00AE';24 e2uHash['macr']= '\u00AF';25 e2uHash['deg']= '\u00B0';26 e2uHash['plusmn']= '\u00B1';27 e2uHash['sup2']= '\u00B2';28 e2uHash['sup3']= '\u00B3';29 e2uHash['acute']= '\u00B4';30 e2uHash['micro']= '\u00B5';31 e2uHash['para']= '\u00B6';32 e2uHash['middot']= '\u00B7';33 e2uHash['cedil']= '\u00B8';34 e2uHash['sup1']= '\u00B9';35 e2uHash['ordm']= '\u00BA';36 e2uHash['raquo']= '\u00BB';37 e2uHash['frac14']= '\u00BC';38 e2uHash['frac12']= '\u00BD';39 e2uHash['frac34']= '\u00BE';40 e2uHash['iquest']= '\u00BF';41 e2uHash['Agrave']= '\u00C0';42 e2uHash['Aacute']= '\u00C1';43 e2uHash['Acirc']= '\u00C2';44 e2uHash['Atilde']= '\u00C3';45 e2uHash['Auml']= '\u00C4';46 e2uHash['Aring']= '\u00C5';47 e2uHash['AElig']= '\u00C6';48 e2uHash['Ccedil']= '\u00C7';49 e2uHash['Egrave']= '\u00C8';50 e2uHash['Eacute']= '\u00C9';51 e2uHash['Ecirc']= '\u00CA';52 e2uHash['Euml']= '\u00CB';53 e2uHash['Igrave']= '\u00CC';54 e2uHash['Iacute']= '\u00CD';55 e2uHash['Icirc']= '\u00CE';56 e2uHash['Iuml']= '\u00CF';57 e2uHash['ETH']= '\u00D0';58 e2uHash['Ntilde']= '\u00D1';59 e2uHash['Ograve']= '\u00D2';60 e2uHash['Oacute']= '\u00D3';61 e2uHash['Ocirc']= '\u00D4';62 e2uHash['Otilde']= '\u00D5';63 e2uHash['Ouml']= '\u00D6';64 e2uHash['times']= '\u00D7';65 e2uHash['Oslash']= '\u00D8';66 e2uHash['Ugrave']= '\u00D9';67 e2uHash['Uacute']= '\u00DA';68 e2uHash['Ucirc']= '\u00DB';69 e2uHash['Uuml']= '\u00DC';70 e2uHash['Yacute']= '\u00DD';71 e2uHash['THORN']= '\u00DE';72 e2uHash['szlig']= '\u00DF';73 e2uHash['agrave']= '\u00E0';74 e2uHash['aacute']= '\u00E1';75 e2uHash['acirc']= '\u00E2';76 e2uHash['atilde']= '\u00E3';77 e2uHash['auml']= '\u00E4';78 e2uHash['aring']= '\u00E5';79 e2uHash['aelig']= '\u00E6';80 e2uHash['ccedil']= '\u00E7';81 e2uHash['egrave']= '\u00E8';82 e2uHash['eacute']= '\u00E9';83 e2uHash['ecirc']= '\u00EA';84 e2uHash['euml']= '\u00EB';85 e2uHash['igrave']= '\u00EC';86 e2uHash['iacute']= '\u00ED';87 e2uHash['icirc']= '\u00EE';88 e2uHash['iuml']= '\u00EF';89 e2uHash['eth']= '\u00F0';90 e2uHash['ntilde']= '\u00F1';91 e2uHash['ograve']= '\u00F2';92 e2uHash['oacute']= '\u00F3';93 e2uHash['ocirc']= '\u00F4';94 e2uHash['otilde']= '\u00F5';95 e2uHash['ouml']= '\u00F6';96 e2uHash['divide']= '\u00F7';97 e2uHash['oslash']= '\u00F8';98 e2uHash['ugrave']= '\u00F9';99 e2uHash['uacute']= '\u00FA';100 e2uHash['ucirc']= '\u00FB';101 e2uHash['uuml']= '\u00FC';102 e2uHash['yacute']= '\u00FD';103 e2uHash['thorn']= '\u00FE';104 e2uHash['yuml']= '\u00FF';105 e2uHash['quot']= '\u0022';106 e2uHash['amp']= '\u0026';107 e2uHash['lt']= '\u003C';108 e2uHash['gt']= '\u003E';109 e2uHash['OElig']= '';110 e2uHash['oelig']= '\u0153';111 e2uHash['Scaron']= '\u0160';112 e2uHash['scaron']= '\u0161';113 e2uHash['Yuml']= '\u0178';114 e2uHash['circ']= '\u02C6';115 e2uHash['tilde']= '\u02DC';116 e2uHash['ensp']= '\u2002';117 e2uHash['emsp']= '\u2003';118 e2uHash['thinsp']= '\u2009';119 e2uHash['zwnj']= '\u200C';120 e2uHash['zwj']= '\u200D';121 e2uHash['lrm']= '\u200E';122 e2uHash['rlm']= '\u200F';123 e2uHash['ndash']= '\u2013';124 e2uHash['mdash']= '\u2014';125 e2uHash['lsquo']= '\u2018';126 e2uHash['rsquo']= '\u2019';127 e2uHash['sbquo']= '\u201A';128 e2uHash['ldquo']= '\u201C';129 e2uHash['rdquo']= '\u201D';130 e2uHash['bdquo']= '\u201E';131 e2uHash['dagger']= '\u2020';132 e2uHash['Dagger']= '\u2021';133 e2uHash['permil']= '\u2030';134 e2uHash['lsaquo']= '\u2039';135 e2uHash['rsaquo']= '\u203A';136 e2uHash['euro']= '\u20AC';137 e2uHash['fnof']= '\u0192';138 e2uHash['Alpha']= '\u0391';139 e2uHash['Beta']= '\u0392';140 e2uHash['Gamma']= '\u0393';141 e2uHash['Delta']= '\u0394';142 e2uHash['Epsilon']= '\u0395';143 e2uHash['Zeta']= '\u0396';144 e2uHash['Eta']= '\u0397';145 e2uHash['Theta']= '\u0398';146 e2uHash['Iota']= '\u0399';147 e2uHash['Kappa']= '\u039A';148 e2uHash['Lambda']= '\u039B';149 e2uHash['Mu']= '\u039C';150 e2uHash['Nu']= '\u039D';151 e2uHash['Xi']= '\u039E';152 e2uHash['Omicron']= '\u039F';153 e2uHash['Pi']= '\u03A0';154 e2uHash['Rho']= '\u03A1';155 e2uHash['Sigma']= '\u03A3';156 e2uHash['Tau']= '\u03A4';157 e2uHash['Upsilon']= '\u03A5';158 e2uHash['Phi']= '\u03A6';159 e2uHash['Chi']= '\u03A7';160 e2uHash['Psi']= '\u03A8';161 e2uHash['Omega']= '\u03A9';162 e2uHash['alpha']= '\u03B1';163 e2uHash['beta']= '\u03B2';164 e2uHash['gamma']= '\u03B3';165 e2uHash['delta']= '\u03B4';166 e2uHash['epsilon']= '\u03B5';167 e2uHash['zeta']= '\u03B6';168 e2uHash['eta']= '\u03B7';169 e2uHash['theta']= '\u03B8';170 e2uHash['iota']= '\u03B9';171 e2uHash['kappa']= '\u03BA';172 e2uHash['lambda']= '\u03BB';173 e2uHash['mu']= '\u03BC';174 e2uHash['nu']= '\u03BD';175 e2uHash['xi']= '\u03BE';176 e2uHash['omicron']= '\u03BF';177 e2uHash['pi']= '\u03C0';178 e2uHash['rho']= '\u03C1';179 e2uHash['sigmaf']= '\u03C2';180 e2uHash['sigma']= '\u03C3';181 e2uHash['tau']= '\u03C4';182 e2uHash['upsilon']= '\u03C5';183 e2uHash['phi']= '\u03C6';184 e2uHash['chi']= '\u03C7';185 e2uHash['psi']= '\u03C8';186 e2uHash['omega']= '\u03C9';187 e2uHash['thetasym']= '\u03D1';188 e2uHash['upsih']= '\u03D2';189 e2uHash['piv']= '\u03D6';190 e2uHash['bull']= '\u2022';191 e2uHash['hellip']= '\u2026';192 e2uHash['prime']= '\u2032';193 e2uHash['Prime']= '\u2033';194 e2uHash['oline']= '\u203E';195 e2uHash['frasl']= '\u2044';196 e2uHash['weierp']= '\u2118';197 e2uHash['image']= '\u2111';198 e2uHash['real']= '\u211C';199 e2uHash['trade']= '\u2122';200 e2uHash['alefsym']= '\u2135';201 e2uHash['larr']= '\u2190';202 e2uHash['uarr']= '\u2191';203 e2uHash['rarr']= '\u2192';204 e2uHash['darr']= '\u2193';205 e2uHash['harr']= '\u2194';206 e2uHash['crarr']= '\u21B5';207 e2uHash['lArr']= '\u21D0';208 e2uHash['uArr']= '\u21D1';209 e2uHash['rArr']= '\u21D2';210 e2uHash['dArr']= '\u21D3';211 e2uHash['hArr']= '\u21D4';212 e2uHash['forall']= '\u2200';213 e2uHash['part']= '\u2202';214 e2uHash['exist']= '\u2203';215 e2uHash['empty']= '\u2205';216 e2uHash['nabla']= '\u2207';217 e2uHash['isin']= '\u2208';218 e2uHash['notin']= '\u2209';219 e2uHash['ni']= '\u220B';220 e2uHash['prod']= '\u220F';221 e2uHash['sum']= '\u2211';222 e2uHash['minus']= '\u2212';223 e2uHash['lowast']= '\u2217';224 e2uHash['radic']= '\u221A';225 e2uHash['prop']= '\u221D';226 e2uHash['infin']= '\u221E';227 e2uHash['ang']= '\u2220';228 e2uHash['and']= '\u2227';229 e2uHash['or']= '\u2228';230 e2uHash['cap']= '\u2229';231 e2uHash['cup']= '\u222A';232 e2uHash['int']= '\u222B';233 e2uHash['there4']= '\u2234';234 e2uHash['sim']= '\u223C';235 e2uHash['cong']= '\u2245';236 e2uHash['asymp']= '\u2248';237 e2uHash['ne']= '\u2260';238 e2uHash['equiv']= '\u2261';239 e2uHash['le']= '\u2264';240 e2uHash['ge']= '\u2265';241 e2uHash['sub']= '\u2282';242 e2uHash['sup']= '\u2283';243 e2uHash['nsub']= '\u2284';244 e2uHash['sube']= '\u2286';245 e2uHash['supe']= '\u2287';246 e2uHash['oplus']= '\u2295';247 e2uHash['otimes']= '\u2297';248 e2uHash['perp']= '\u22A5';249 e2uHash['sdot']= '\u22C5';250 e2uHash['lceil']= '\u2308';251 e2uHash['rceil']= '\u2309';252 e2uHash['lfloor']= '\u230A';253 e2uHash['rfloor']= '\u230B';254 e2uHash['lang']= '\u2329';255 e2uHash['rang']= '\u232A';256 e2uHash['loz']= '\u25CA';257 e2uHash['spades']= '\u2660';258 e2uHash['clubs']= '\u2663';259 e2uHash['hearts']= '\u2665';260 e2uHash['diams']= '\u2666'; 261})();262SimileAjax.HTML.deEntify = function(s) {263 var e2uHash = SimileAjax.HTML._e2uHash;264 265 var re = /&(\w+?);/;266 while (re.test(s)) {267 var m = s.match(re);268 s = s.replace(re, e2uHash[m[1]]);269 }270 return s;...

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run autotest automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful