jquery.js 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872
  1. // Generated by CoffeeScript 1.6.2
  2. /*!
  3. jQuery Waypoints - v2.0.5
  4. Copyright (c) 2011-2014 Caleb Troughton
  5. Licensed under the MIT license.
  6. https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt
  7. */
  8. (function() {
  9. var t = [].indexOf || function(t) {
  10. for (var e = 0, n = this.length; e < n; e++) {
  11. if (e in this && this[e] === t)
  12. return e
  13. }
  14. return -1
  15. }, e = [].slice;
  16. (function(t, e) {
  17. return e(t.jQuery, t)
  18. })(window, function(n, r) {
  19. var i, o, l, s, f, u, c, a, h, d, p, y, v, w, g, m;
  20. i = n(r);
  21. a = t.call(r, "ontouchstart") >= 0;
  22. s = {horizontal: {},vertical: {}};
  23. f = 1;
  24. c = {};
  25. u = "waypoints-context-id";
  26. p = "resize.waypoints";
  27. y = "scroll.waypoints";
  28. v = 1;
  29. w = "waypoints-waypoint-ids";
  30. g = "waypoint";
  31. m = "waypoints";
  32. o = function() {
  33. function t(t) {
  34. var e = this;
  35. this.$element = t;
  36. this.element = t[0];
  37. this.didResize = false;
  38. this.didScroll = false;
  39. this.id = "context" + f++;
  40. this.oldScroll = {x: t.scrollLeft(),y: t.scrollTop()};
  41. this.waypoints = {horizontal: {},vertical: {}};
  42. this.element[u] = this.id;
  43. c[this.id] = this;
  44. t.bind(y, function() {
  45. var t;
  46. if (!(e.didScroll || a)) {
  47. e.didScroll = true;
  48. t = function() {
  49. e.doScroll();
  50. return e.didScroll = false
  51. };
  52. return r.setTimeout(t, n[m].settings.scrollThrottle)
  53. }
  54. });
  55. t.bind(p, function() {
  56. var t;
  57. if (!e.didResize) {
  58. e.didResize = true;
  59. t = function() {
  60. n[m]("refresh");
  61. return e.didResize = false
  62. };
  63. return r.setTimeout(t, n[m].settings.resizeThrottle)
  64. }
  65. })
  66. }
  67. t.prototype.doScroll = function() {
  68. var t, e = this;
  69. t = {horizontal: {newScroll: this.$element.scrollLeft(),oldScroll: this.oldScroll.x,forward: "right",backward: "left"},vertical: {newScroll: this.$element.scrollTop(),oldScroll: this.oldScroll.y,forward: "down",backward: "up"}};
  70. if (a && (!t.vertical.oldScroll || !t.vertical.newScroll)) {
  71. n[m]("refresh")
  72. }
  73. n.each(t, function(t, r) {
  74. var i, o, l;
  75. l = [];
  76. o = r.newScroll > r.oldScroll;
  77. i = o ? r.forward : r.backward;
  78. n.each(e.waypoints[t], function(t, e) {
  79. var n, i;
  80. if (r.oldScroll < (n = e.offset) && n <= r.newScroll) {
  81. return l.push(e)
  82. } else if (r.newScroll < (i = e.offset) && i <= r.oldScroll) {
  83. return l.push(e)
  84. }
  85. });
  86. l.sort(function(t, e) {
  87. return t.offset - e.offset
  88. });
  89. if (!o) {
  90. l.reverse()
  91. }
  92. return n.each(l, function(t, e) {
  93. if (e.options.continuous || t === l.length - 1) {
  94. return e.trigger([i])
  95. }
  96. })
  97. });
  98. return this.oldScroll = {x: t.horizontal.newScroll,y: t.vertical.newScroll}
  99. };
  100. t.prototype.refresh = function() {
  101. var t, e, r, i = this;
  102. r = n.isWindow(this.element);
  103. e = this.$element.offset();
  104. this.doScroll();
  105. t = {horizontal: {contextOffset: r ? 0 : e.left,contextScroll: r ? 0 : this.oldScroll.x,contextDimension: this.$element.width(),oldScroll: this.oldScroll.x,forward: "right",backward: "left",offsetProp: "left"},vertical: {contextOffset: r ? 0 : e.top,contextScroll: r ? 0 : this.oldScroll.y,contextDimension: r ? n[m]("viewportHeight") : this.$element.height(),oldScroll: this.oldScroll.y,forward: "down",backward: "up",offsetProp: "top"}};
  106. return n.each(t, function(t, e) {
  107. return n.each(i.waypoints[t], function(t, r) {
  108. var i, o, l, s, f;
  109. i = r.options.offset;
  110. l = r.offset;
  111. o = n.isWindow(r.element) ? 0 : r.$element.offset()[e.offsetProp];
  112. if (n.isFunction(i)) {
  113. i = i.apply(r.element)
  114. } else if (typeof i === "string") {
  115. i = parseFloat(i);
  116. if (r.options.offset.indexOf("%") > -1) {
  117. i = Math.ceil(e.contextDimension * i / 100)
  118. }
  119. }
  120. r.offset = o - e.contextOffset + e.contextScroll - i;
  121. if (r.options.onlyOnScroll && l != null || !r.enabled) {
  122. return
  123. }
  124. if (l !== null && l < (s = e.oldScroll) && s <= r.offset) {
  125. return r.trigger([e.backward])
  126. } else if (l !== null && l > (f = e.oldScroll) && f >= r.offset) {
  127. return r.trigger([e.forward])
  128. } else if (l === null && e.oldScroll >= r.offset) {
  129. return r.trigger([e.forward])
  130. }
  131. })
  132. })
  133. };
  134. t.prototype.checkEmpty = function() {
  135. if (n.isEmptyObject(this.waypoints.horizontal) && n.isEmptyObject(this.waypoints.vertical)) {
  136. this.$element.unbind([p, y].join(" "));
  137. return delete c[this.id]
  138. }
  139. };
  140. return t
  141. }();
  142. l = function() {
  143. function t(t, e, r) {
  144. var i, o;
  145. if (r.offset === "bottom-in-view") {
  146. r.offset = function() {
  147. var t;
  148. t = n[m]("viewportHeight");
  149. if (!n.isWindow(e.element)) {
  150. t = e.$element.height()
  151. }
  152. return t - n(this).outerHeight()
  153. }
  154. }
  155. this.$element = t;
  156. this.element = t[0];
  157. this.axis = r.horizontal ? "horizontal" : "vertical";
  158. this.callback = r.handler;
  159. this.context = e;
  160. this.enabled = r.enabled;
  161. this.id = "waypoints" + v++;
  162. this.offset = null;
  163. this.options = r;
  164. e.waypoints[this.axis][this.id] = this;
  165. s[this.axis][this.id] = this;
  166. i = (o = this.element[w]) != null ? o : [];
  167. i.push(this.id);
  168. this.element[w] = i
  169. }
  170. t.prototype.trigger = function(t) {
  171. if (!this.enabled) {
  172. return
  173. }
  174. if (this.callback != null) {
  175. this.callback.apply(this.element, t)
  176. }
  177. if (this.options.triggerOnce) {
  178. return this.destroy()
  179. }
  180. };
  181. t.prototype.disable = function() {
  182. return this.enabled = false
  183. };
  184. t.prototype.enable = function() {
  185. this.context.refresh();
  186. return this.enabled = true
  187. };
  188. t.prototype.destroy = function() {
  189. delete s[this.axis][this.id];
  190. delete this.context.waypoints[this.axis][this.id];
  191. return this.context.checkEmpty()
  192. };
  193. t.getWaypointsByElement = function(t) {
  194. var e, r;
  195. r = t[w];
  196. if (!r) {
  197. return []
  198. }
  199. e = n.extend({}, s.horizontal, s.vertical);
  200. return n.map(r, function(t) {
  201. return e[t]
  202. })
  203. };
  204. return t
  205. }();
  206. d = {init: function(t, e) {
  207. var r;
  208. e = n.extend({}, n.fn[g].defaults, e);
  209. if ((r = e.handler) == null) {
  210. e.handler = t
  211. }
  212. this.each(function() {
  213. var t, r, i, s;
  214. t = n(this);
  215. i = (s = e.context) != null ? s : n.fn[g].defaults.context;
  216. if (!n.isWindow(i)) {
  217. i = t.closest(i)
  218. }
  219. i = n(i);
  220. r = c[i[0][u]];
  221. if (!r) {
  222. r = new o(i)
  223. }
  224. return new l(t, r, e)
  225. });
  226. n[m]("refresh");
  227. return this
  228. },disable: function() {
  229. return d._invoke.call(this, "disable")
  230. },enable: function() {
  231. return d._invoke.call(this, "enable")
  232. },destroy: function() {
  233. return d._invoke.call(this, "destroy")
  234. },prev: function(t, e) {
  235. return d._traverse.call(this, t, e, function(t, e, n) {
  236. if (e > 0) {
  237. return t.push(n[e - 1])
  238. }
  239. })
  240. },next: function(t, e) {
  241. return d._traverse.call(this, t, e, function(t, e, n) {
  242. if (e < n.length - 1) {
  243. return t.push(n[e + 1])
  244. }
  245. })
  246. },_traverse: function(t, e, i) {
  247. var o, l;
  248. if (t == null) {
  249. t = "vertical"
  250. }
  251. if (e == null) {
  252. e = r
  253. }
  254. l = h.aggregate(e);
  255. o = [];
  256. this.each(function() {
  257. var e;
  258. e = n.inArray(this, l[t]);
  259. return i(o, e, l[t])
  260. });
  261. return this.pushStack(o)
  262. },_invoke: function(t) {
  263. this.each(function() {
  264. var e;
  265. e = l.getWaypointsByElement(this);
  266. return n.each(e, function(e, n) {
  267. n[t]();
  268. return true
  269. })
  270. });
  271. return this
  272. }};
  273. n.fn[g] = function() {
  274. var t, r;
  275. r = arguments[0], t = 2 <= arguments.length ? e.call(arguments, 1) : [];
  276. if (d[r]) {
  277. return d[r].apply(this, t)
  278. } else if (n.isFunction(r)) {
  279. return d.init.apply(this, arguments)
  280. } else if (n.isPlainObject(r)) {
  281. return d.init.apply(this, [null, r])
  282. } else if (!r) {
  283. return n.error("jQuery Waypoints needs a callback function or handler option.")
  284. } else {
  285. return n.error("The " + r + " method does not exist in jQuery Waypoints.")
  286. }
  287. };
  288. n.fn[g].defaults = {context: r,continuous: true,enabled: true,horizontal: false,offset: 0,triggerOnce: false};
  289. h = {refresh: function() {
  290. return n.each(c, function(t, e) {
  291. return e.refresh()
  292. })
  293. },viewportHeight: function() {
  294. var t;
  295. return (t = r.innerHeight) != null ? t : i.height()
  296. },aggregate: function(t) {
  297. var e, r, i;
  298. e = s;
  299. if (t) {
  300. e = (i = c[n(t)[0][u]]) != null ? i.waypoints : void 0
  301. }
  302. if (!e) {
  303. return []
  304. }
  305. r = {horizontal: [],vertical: []};
  306. n.each(r, function(t, i) {
  307. n.each(e[t], function(t, e) {
  308. return i.push(e)
  309. });
  310. i.sort(function(t, e) {
  311. return t.offset - e.offset
  312. });
  313. r[t] = n.map(i, function(t) {
  314. return t.element
  315. });
  316. return r[t] = n.unique(r[t])
  317. });
  318. return r
  319. },above: function(t) {
  320. if (t == null) {
  321. t = r
  322. }
  323. return h._filter(t, "vertical", function(t, e) {
  324. return e.offset <= t.oldScroll.y
  325. })
  326. },below: function(t) {
  327. if (t == null) {
  328. t = r
  329. }
  330. return h._filter(t, "vertical", function(t, e) {
  331. return e.offset > t.oldScroll.y
  332. })
  333. },left: function(t) {
  334. if (t == null) {
  335. t = r
  336. }
  337. return h._filter(t, "horizontal", function(t, e) {
  338. return e.offset <= t.oldScroll.x
  339. })
  340. },right: function(t) {
  341. if (t == null) {
  342. t = r
  343. }
  344. return h._filter(t, "horizontal", function(t, e) {
  345. return e.offset > t.oldScroll.x
  346. })
  347. },enable: function() {
  348. return h._invoke("enable")
  349. },disable: function() {
  350. return h._invoke("disable")
  351. },destroy: function() {
  352. return h._invoke("destroy")
  353. },extendFn: function(t, e) {
  354. return d[t] = e
  355. },_invoke: function(t) {
  356. var e;
  357. e = n.extend({}, s.vertical, s.horizontal);
  358. return n.each(e, function(e, n) {
  359. n[t]();
  360. return true
  361. })
  362. },_filter: function(t, e, r) {
  363. var i, o;
  364. i = c[n(t)[0][u]];
  365. if (!i) {
  366. return []
  367. }
  368. o = [];
  369. n.each(i.waypoints[e], function(t, e) {
  370. if (r(i, e)) {
  371. return o.push(e)
  372. }
  373. });
  374. o.sort(function(t, e) {
  375. return t.offset - e.offset
  376. });
  377. return n.map(o, function(t) {
  378. return t.element
  379. })
  380. }};
  381. n[m] = function() {
  382. var t, n;
  383. n = arguments[0], t = 2 <= arguments.length ? e.call(arguments, 1) : [];
  384. if (h[n]) {
  385. return h[n].apply(null, t)
  386. } else {
  387. return h.aggregate.call(null, n)
  388. }
  389. };
  390. n[m].settings = {resizeThrottle: 100,scrollThrottle: 30};
  391. return i.on("load.waypoints", function() {
  392. return n[m]("refresh")
  393. })
  394. })
  395. }).call(this);
  396. // Generated by CoffeeScript 1.6.2
  397. /*
  398. Sticky Elements Shortcut for jQuery Waypoints - v2.0.5
  399. Copyright (c) 2011-2014 Caleb Troughton
  400. Licensed under the MIT license.
  401. https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt
  402. */
  403. (function() {
  404. (function(t, n) {
  405. return n(t.jQuery)
  406. })(window, function(t) {
  407. var n, i;
  408. n = {wrapper: '<div class="sticky-wrapper" />',stuckClass: "stuck",direction: "down right"};
  409. i = function(t, n) {
  410. var i;
  411. t.wrap(n.wrapper);
  412. i = t.parent();
  413. return i.data("isWaypointStickyWrapper", true)
  414. };
  415. t.waypoints("extendFn", "sticky", function(r) {
  416. var e, a, s;
  417. a = t.extend({}, t.fn.waypoint.defaults, n, r);
  418. e = i(this, a);
  419. s = a.handler;
  420. a.handler = function(n) {
  421. var i, r;
  422. i = t(this).children(":first");
  423. r = a.direction.indexOf(n) !== -1;
  424. i.toggleClass(a.stuckClass, r);
  425. e.height(r ? i.outerHeight() : "");
  426. if (s != null) {
  427. return s.call(this, n)
  428. }
  429. };
  430. e.waypoint(a);
  431. return this.data("stuckClass", a.stuckClass)
  432. });
  433. return t.waypoints("extendFn", "unsticky", function() {
  434. var t;
  435. t = this.parent();
  436. if (!t.data("isWaypointStickyWrapper")) {
  437. return this
  438. }
  439. t.waypoint("destroy");
  440. this.unwrap();
  441. return this.removeClass(this.data("stuckClass"))
  442. })
  443. })
  444. }).call(this);
  445. /*
  446. *
  447. * jqTransform
  448. * by mathieu vilaplana mvilaplana@dfc-e.com
  449. * Designer ghyslain armand garmand@dfc-e.com
  450. *
  451. *
  452. * Version 1.0 25.09.08
  453. * Version 1.1 06.08.09
  454. * Add event click on Checkbox and Radio
  455. * Auto calculate the size of a select element
  456. * Can now, disabled the elements
  457. * Correct bug in ff if click on select (overflow=hidden)
  458. * No need any more preloading !!
  459. *
  460. ******************************************** */
  461. (function($) {
  462. var defaultOptions = {preloadImg: true};
  463. var jqTransformImgPreloaded = false;
  464. var jqTransformPreloadHoverFocusImg = function(strImgUrl) {
  465. //guillemets to remove for ie
  466. strImgUrl = strImgUrl.replace(/^url\((.*)\)/, '$1').replace(/^\"(.*)\"$/, '$1');
  467. var imgHover = new Image();
  468. imgHover.src = strImgUrl.replace(/\.([a-zA-Z]*)$/, '-hover.$1');
  469. var imgFocus = new Image();
  470. imgFocus.src = strImgUrl.replace(/\.([a-zA-Z]*)$/, '-focus.$1');
  471. };
  472. /***************************
  473. Labels
  474. ***************************/
  475. var jqTransformGetLabel = function(objfield) {
  476. var selfForm = $(objfield.get(0).form);
  477. var oLabel = objfield.next();
  478. if (!oLabel.is('label')) {
  479. oLabel = objfield.prev();
  480. if (oLabel.is('label')) {
  481. var inputname = objfield.attr('id');
  482. if (inputname) {
  483. oLabel = selfForm.find('label[for="' + inputname + '"]');
  484. }
  485. }
  486. }
  487. if (oLabel.is('label')) {
  488. return oLabel.css('cursor', 'pointer');
  489. }
  490. return false;
  491. };
  492. /* Hide all open selects */
  493. var jqTransformHideSelect = function(oTarget) {
  494. var ulVisible = $('.jqTransformSelectWrapper ul:visible');
  495. ulVisible.each(function() {
  496. var oSelect = $(this).parents(".jqTransformSelectWrapper:first").find("select").get(0);
  497. //do not hide if click on the label object associated to the select
  498. if (!(oTarget && oSelect.oLabel && oSelect.oLabel.get(0) == oTarget.get(0))) {
  499. $(this).hide();
  500. }
  501. });
  502. };
  503. /* Check for an external click */
  504. var jqTransformCheckExternalClick = function(event) {
  505. if ($(event.target).parents('.jqTransformSelectWrapper').length === 0) {
  506. jqTransformHideSelect($(event.target));
  507. }
  508. };
  509. /* Apply document listener */
  510. var jqTransformAddDocumentListener = function() {
  511. $(document).mousedown(jqTransformCheckExternalClick);
  512. };
  513. /* Add a new handler for the reset action */
  514. var jqTransformReset = function(f) {
  515. var sel;
  516. $('.jqTransformSelectWrapper select', f).each(function() {
  517. sel = (this.selectedIndex < 0) ? 0 : this.selectedIndex;
  518. $('ul', $(this).parent()).each(function() {
  519. $('a:eq(' + sel + ')', this).click();
  520. });
  521. });
  522. $('a.jqTransformCheckbox, a.jqTransformRadio', f).removeClass('jqTransformChecked');
  523. $('input:checkbox, input:radio', f).each(function() {
  524. if (this.checked) {
  525. $('a', $(this).parent()).addClass('jqTransformChecked');
  526. }
  527. });
  528. };
  529. /***************************
  530. Buttons
  531. ***************************/
  532. $.fn.jqTransInputButton = function() {
  533. return this.each(function() {
  534. var newBtn = $('<button id="' + this.id + '" name="' + this.name + '" type="' + this.type + '" class="' + this.className + ' jqTransformButton"><span><span>' + $(this).attr('value') + '</span></span>')
  535. .hover(function() {
  536. newBtn.addClass('jqTransformButton_hover');
  537. }, function() {
  538. newBtn.removeClass('jqTransformButton_hover')
  539. })
  540. .mousedown(function() {
  541. newBtn.addClass('jqTransformButton_click')
  542. })
  543. .mouseup(function() {
  544. newBtn.removeClass('jqTransformButton_click')
  545. })
  546. ;
  547. $(this).replaceWith(newBtn);
  548. });
  549. };
  550. /***************************
  551. Text Fields
  552. ***************************/
  553. $.fn.jqTransInputText = function() {
  554. return this.each(function() {
  555. var $input = $(this);
  556. if ($input.hasClass('jqtranformdone') || !$input.is('input')) {
  557. return;
  558. }
  559. $input.addClass('jqtranformdone');
  560. var oLabel = jqTransformGetLabel($(this));
  561. oLabel && oLabel.bind('click', function() {
  562. $input.focus();
  563. });
  564. var inputSize = $input.width();
  565. if ($input.attr('size')) {
  566. inputSize = $input.attr('size') * 10;
  567. $input.css('width', inputSize);
  568. }
  569. $input.addClass("jqTransformInput").wrap('<div class="jqTransformInputWrapper"><div class="jqTransformInputInner"><div></div></div></div>');
  570. var $wrapper = $input.parent().parent().parent();
  571. $wrapper.css("width", inputSize + 10);
  572. $input
  573. .focus(function() {
  574. $wrapper.addClass("jqTransformInputWrapper_focus");
  575. })
  576. .blur(function() {
  577. $wrapper.removeClass("jqTransformInputWrapper_focus");
  578. })
  579. .hover(function() {
  580. $wrapper.addClass("jqTransformInputWrapper_hover");
  581. }, function() {
  582. $wrapper.removeClass("jqTransformInputWrapper_hover");
  583. })
  584. ;
  585. /* If this is safari we need to add an extra class */
  586. $.browser.safari && $wrapper.addClass('jqTransformSafari');
  587. $.browser.safari && $input.css('width', $wrapper.width() + 16);
  588. this.wrapper = $wrapper;
  589. });
  590. };
  591. /***************************
  592. Check Boxes
  593. ***************************/
  594. $.fn.jqTransCheckBox = function() {
  595. return this.each(function() {
  596. if ($(this).hasClass('jqTransformHidden')) {
  597. return;
  598. }
  599. var $input = $(this);
  600. var inputSelf = this;
  601. var aLink = $('<a href="#" class="jqTransformCheckbox" rel="' + this.name + '"></a>');
  602. //wrap and add the link
  603. $input.addClass('jqTransformHidden').wrap('<span class="jqTransformCheckboxWrapper"></span>').parent().prepend(aLink);
  604. //on change, change the class of the link
  605. $input.change(function() {
  606. inputSelf.checked && aLink.addClass('jqTransformChecked') || aLink.removeClass('jqTransformChecked');
  607. return true;
  608. });
  609. // Click Handler, trigger the click and change event on the input
  610. aLink.click(function() {
  611. //do nothing if the original input is disabled
  612. if ($input.attr('disabled')) {
  613. return false;
  614. }
  615. //trigger the envents on the input object
  616. $input.trigger('click');
  617. return false;
  618. });
  619. // set the default state
  620. inputSelf.checked && aLink.addClass('jqTransformChecked');
  621. });
  622. };
  623. /***************************
  624. Radio Buttons
  625. ***************************/
  626. $.fn.jqTransRadio = function() {
  627. return this.each(function() {
  628. if ($(this).hasClass('jqTransformHidden')) {
  629. return;
  630. }
  631. var $input = $(this);
  632. var inputSelf = this;
  633. oLabel = jqTransformGetLabel($input);
  634. oLabel = oLabel || $input.closest('label');
  635. oLabel && oLabel.click(function() {
  636. aLink.trigger('click');
  637. });
  638. var aLink = $('<a href="#" class="jqTransformRadio" rel="' + this.name + '"></a>');
  639. $input.addClass('jqTransformHidden').wrap('<span class="jqTransformRadioWrapper"></span>').parent().prepend(aLink);
  640. $input.change(function() {
  641. inputSelf.checked && aLink.addClass('jqTransformChecked') || aLink.removeClass('jqTransformChecked');
  642. return true;
  643. });
  644. // Click Handler
  645. aLink.click(function() {
  646. if ($input.attr('disabled')) {
  647. return false;
  648. }
  649. $input.prop('checked', true);
  650. $input.trigger('change');
  651. // uncheck all others of same name input radio elements
  652. $('input[name="' + $input.attr('name') + '"]', inputSelf.form).not($input).each(function() {
  653. $(this).attr('type') == 'radio' && $(this).trigger('change');
  654. });
  655. return false;
  656. });
  657. // set the default state
  658. inputSelf.checked && aLink.addClass('jqTransformChecked');
  659. });
  660. };
  661. /***************************
  662. TextArea
  663. ***************************/
  664. $.fn.jqTransTextarea = function() {
  665. return this.each(function() {
  666. var textarea = $(this);
  667. if (textarea.hasClass('jqtransformdone')) {
  668. return;
  669. }
  670. textarea.addClass('jqtransformdone');
  671. oLabel = jqTransformGetLabel(textarea);
  672. oLabel && oLabel.click(function() {
  673. textarea.focus();
  674. });
  675. var strTable = '<table cellspacing="0" cellpadding="0" border="0" class="jqTransformTextarea">';
  676. strTable += '<tr><td id="jqTransformTextarea-tl"></td><td id="jqTransformTextarea-tm"></td><td id="jqTransformTextarea-tr"></td></tr>';
  677. strTable += '<tr><td id="jqTransformTextarea-ml">&nbsp;</td><td id="jqTransformTextarea-mm"><div></div></td><td id="jqTransformTextarea-mr">&nbsp;</td></tr>';
  678. strTable += '<tr><td id="jqTransformTextarea-bl"></td><td id="jqTransformTextarea-bm"></td><td id="jqTransformTextarea-br"></td></tr>';
  679. strTable += '</table>';
  680. var oTable = $(strTable)
  681. .insertAfter(textarea)
  682. .hover(function() {
  683. !oTable.hasClass('jqTransformTextarea-focus') && oTable.addClass('jqTransformTextarea-hover');
  684. }, function() {
  685. oTable.removeClass('jqTransformTextarea-hover');
  686. })
  687. ;
  688. textarea
  689. .focus(function() {
  690. oTable.removeClass('jqTransformTextarea-hover').addClass('jqTransformTextarea-focus');
  691. })
  692. .blur(function() {
  693. oTable.removeClass('jqTransformTextarea-focus');
  694. })
  695. .appendTo($('#jqTransformTextarea-mm div', oTable))
  696. ;
  697. this.oTable = oTable;
  698. if ($.browser.safari) {
  699. $('#jqTransformTextarea-mm', oTable)
  700. .addClass('jqTransformSafariTextarea')
  701. .find('div')
  702. .css('height', textarea.height())
  703. .css('width', textarea.width())
  704. ;
  705. }
  706. });
  707. };
  708. /***************************
  709. Select
  710. ***************************/
  711. $.fn.jqTransSelect = function() {
  712. return this.each(function(index) {
  713. var $select = $(this);
  714. if ($select.hasClass('jqTransformHidden')) {
  715. return;
  716. }
  717. if ($select.attr('multiple')) {
  718. return;
  719. }
  720. oLabel = jqTransformGetLabel($select);
  721. oLabel = oLabel || $select.closest('label');
  722. oLabel && oLabel.click(function() {
  723. aLink.trigger('click');
  724. });
  725. /* First thing we do is Wrap it */
  726. var $wrapper = $select
  727. .addClass('jqTransformHidden')
  728. .wrap('<div class="jqTransformSelectWrapper"></div>')
  729. .parent()
  730. ;
  731. /* Now add the html for the select */
  732. $wrapper.prepend('<div><span></span><a href="#" class="jqTransformSelectOpen"></a></div><ul></ul>');
  733. var $ul = $('ul', $wrapper).css('width', $select.width()).hide();
  734. /* Now we add the options */
  735. $('option', this).each(function(i) {
  736. var oLi = $('<li><a href="#" index="' + i + '">' + $(this).html() + '</a></li>');
  737. $ul.append(oLi);
  738. });
  739. /* Add click handler to the a */
  740. $ul.find('a').click(function() {
  741. $('a.selected', $wrapper).removeClass('selected');
  742. $(this).addClass('selected');
  743. /* Fire the onchange event */
  744. if ($select[0].selectedIndex != $(this).attr('index')) {
  745. $select[0].selectedIndex = $(this).attr('index');
  746. $select.trigger('change');
  747. }
  748. $select[0].selectedIndex = $(this).attr('index');
  749. $('span:eq(0)', $wrapper).html($(this).html());
  750. $ul.hide();
  751. return false;
  752. });
  753. /* Set the default */
  754. $('a:eq(' + this.selectedIndex + ')', $ul).click();
  755. $('span:first', $wrapper).click(function() {
  756. $("a.jqTransformSelectOpen", $wrapper).trigger('click');
  757. });
  758. oLabel && oLabel.click(function() {
  759. $("a.jqTransformSelectOpen", $wrapper).trigger('click');
  760. });
  761. this.oLabel = oLabel;
  762. /* Apply the click handler to the Open */
  763. var oLinkOpen = $('a.jqTransformSelectOpen', $wrapper)
  764. .click(function() {
  765. //Check if box is already open to still allow toggle, but close all other selects
  766. if ($ul.css('display') == 'none') {
  767. jqTransformHideSelect();
  768. }
  769. if ($select.attr('disabled')) {
  770. return false;
  771. }
  772. $ul.slideToggle('fast', function() {
  773. var offSet = ($('a.selected', $ul).offset().top - $ul.offset().top);
  774. $ul.animate({scrollTop: offSet});
  775. });
  776. return false;
  777. })
  778. ;
  779. // Set the new width
  780. var iSelectWidth = $select.outerWidth();
  781. var oSpan = $('span:first', $wrapper);
  782. var newWidth = iSelectWidth;
  783. $wrapper.css('width', newWidth);
  784. $ul.css('width', newWidth - 2);
  785. oSpan.css({width: iSelectWidth});
  786. // Calculate the height if necessary, less elements that the default height
  787. //show the ul to calculate the block, if ul is not displayed li height value is 0
  788. $ul.css({display: 'block',visibility: 'hidden'});
  789. var iSelectHeight = ($('li', $ul).length) * ($('li:first', $ul).height()); //+1 else bug ff
  790. (iSelectHeight < $ul.height()) && $ul.css({height: iSelectHeight,'overflow': 'hidden'}); //hidden else bug with ff
  791. $ul.css({display: 'none',visibility: 'visible'});
  792. });
  793. };
  794. $.fn.jqTransform = function(options) {
  795. var opt = $.extend({}, defaultOptions, options);
  796. /* each form */
  797. return this.each(function() {
  798. var selfForm = $(this);
  799. if (selfForm.hasClass('jqtransformdone')) {
  800. return;
  801. }
  802. selfForm.addClass('jqtransformdone');
  803. $('input:submit, input:reset, input[type="button"]', this).jqTransInputButton();
  804. $('input:text, input:password', this).jqTransInputText();
  805. $('input:checkbox', this).jqTransCheckBox();
  806. $('input:radio', this).jqTransRadio();
  807. $('textarea', this).jqTransTextarea();
  808. if ($('select', this).jqTransSelect().length > 0) {
  809. jqTransformAddDocumentListener();
  810. }
  811. selfForm.bind('reset', function() {
  812. var action = function() {
  813. jqTransformReset(this);
  814. };
  815. window.setTimeout(action, 10);
  816. });
  817. }); /* End Form each */
  818. }; /* End the Plugin */
  819. })(jQuery);