Browse Source

moved from inigui to inifig theme, created clameurs theme

Bachir Soussi Chiadmi 7 năm trước cách đây
mục cha
commit
b462526778
100 tập tin đã thay đổi với 5781 bổ sung93 xóa
  1. BIN
      sites/all/themes/figureslibres/clameurs/apple-touch-icon-precomposed.png
  2. BIN
      sites/all/themes/figureslibres/clameurs/apple-touch-icon.png
  3. 72 0
      sites/all/themes/figureslibres/clameurs/clameurs.info
  4. 23 0
      sites/all/themes/figureslibres/clameurs/css/maintenance.css
  5. 64 0
      sites/all/themes/figureslibres/clameurs/css/nonsemantic.css
  6. 406 0
      sites/all/themes/figureslibres/clameurs/css/normalize.css
  7. 0 0
      sites/all/themes/figureslibres/clameurs/css/styles.css
  8. BIN
      sites/all/themes/figureslibres/clameurs/icon.png
  9. 0 0
      sites/all/themes/figureslibres/clameurs/inc/template.custom-functions.inc
  10. 215 0
      sites/all/themes/figureslibres/clameurs/inc/template.theme-overrides.inc
  11. 1104 0
      sites/all/themes/figureslibres/clameurs/js/libs/iscroll.js
  12. 120 0
      sites/all/themes/figureslibres/clameurs/js/libs/jquery.jscrollpane.css
  13. 7 0
      sites/all/themes/figureslibres/clameurs/js/libs/jquery.jscrollpane.min.js
  14. 84 0
      sites/all/themes/figureslibres/clameurs/js/libs/jquery.mousewheel.js
  15. 1 0
      sites/all/themes/figureslibres/clameurs/js/libs/modernizr-2.6.1.min.js
  16. 76 0
      sites/all/themes/figureslibres/clameurs/js/libs/mwheelIntent.js
  17. 3 6
      sites/all/themes/figureslibres/clameurs/js/script.js
  18. 254 0
      sites/all/themes/figureslibres/clameurs/less/styles.less
  19. 21 32
      sites/all/themes/figureslibres/clameurs/less/wysiwyg.less
  20. BIN
      sites/all/themes/figureslibres/clameurs/logo-lite-alpha.png
  21. BIN
      sites/all/themes/figureslibres/clameurs/logo-lite.png
  22. BIN
      sites/all/themes/figureslibres/clameurs/logo.png
  23. 0 0
      sites/all/themes/figureslibres/clameurs/maintenance-page.tpl.php
  24. 0 0
      sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-2-col/html5-2-col.css
  25. 0 0
      sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-2-col/html5-2-col.inc
  26. 0 0
      sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-2-col/html5-2-col.png
  27. 0 0
      sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-2-col/panels-html5-2-col.tpl.php
  28. 0 0
      sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-basic/html5-basic.css
  29. 0 0
      sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-basic/html5-basic.inc
  30. 0 0
      sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-basic/html5-basic.png
  31. 0 0
      sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-basic/panels-html5-basic.tpl.php
  32. 0 0
      sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-custom-2/html5-custom-2.css
  33. 0 0
      sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-custom-2/html5-custom-2.inc
  34. 0 0
      sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-custom-2/html5-custom-2.png
  35. 0 0
      sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-custom-2/panels-html5-custom-2.tpl.php
  36. 0 0
      sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-custom/html5-custom.css
  37. 0 0
      sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-custom/html5-custom.inc
  38. 0 0
      sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-custom/html5-custom.png
  39. 0 0
      sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-custom/panels-html5-custom.tpl.php
  40. 0 0
      sites/all/themes/figureslibres/clameurs/plugins/styles/minimum.inc
  41. 0 0
      sites/all/themes/figureslibres/clameurs/preprocess/block.pre.php
  42. 0 0
      sites/all/themes/figureslibres/clameurs/preprocess/comment-wrapper.pre.php
  43. 0 0
      sites/all/themes/figureslibres/clameurs/preprocess/field.pre.php
  44. 27 29
      sites/all/themes/figureslibres/clameurs/preprocess/html.pre.php
  45. 7 0
      sites/all/themes/figureslibres/clameurs/preprocess/node.pre.php
  46. 2 6
      sites/all/themes/figureslibres/clameurs/preprocess/page.pre.php
  47. 0 0
      sites/all/themes/figureslibres/clameurs/preprocess/region.pre.php
  48. 0 0
      sites/all/themes/figureslibres/clameurs/readme.txt
  49. BIN
      sites/all/themes/figureslibres/clameurs/screenshot.png
  50. 61 0
      sites/all/themes/figureslibres/clameurs/template.php
  51. 0 0
      sites/all/themes/figureslibres/clameurs/templates/field.tpl.php
  52. 18 20
      sites/all/themes/figureslibres/clameurs/templates/html.tpl.php
  53. 175 0
      sites/all/themes/figureslibres/clameurs/templates/page.tpl.php
  54. 0 0
      sites/all/themes/figureslibres/clameurs/templates/template-suggestions.pdf
  55. 35 0
      sites/all/themes/figureslibres/clameurs/theme-settings.php
  56. BIN
      sites/all/themes/figureslibres/inifig/apple-touch-icon-precomposed.png
  57. BIN
      sites/all/themes/figureslibres/inifig/apple-touch-icon.png
  58. 23 0
      sites/all/themes/figureslibres/inifig/css/maintenance.css
  59. 64 0
      sites/all/themes/figureslibres/inifig/css/nonsemantic.css
  60. 406 0
      sites/all/themes/figureslibres/inifig/css/normalize.css
  61. 0 0
      sites/all/themes/figureslibres/inifig/css/styles.css
  62. BIN
      sites/all/themes/figureslibres/inifig/icon.png
  63. 0 0
      sites/all/themes/figureslibres/inifig/inc/template.custom-functions.inc
  64. 215 0
      sites/all/themes/figureslibres/inifig/inc/template.theme-overrides.inc
  65. 72 0
      sites/all/themes/figureslibres/inifig/inifig.info
  66. 1104 0
      sites/all/themes/figureslibres/inifig/js/libs/iscroll.js
  67. 120 0
      sites/all/themes/figureslibres/inifig/js/libs/jquery.jscrollpane.css
  68. 7 0
      sites/all/themes/figureslibres/inifig/js/libs/jquery.jscrollpane.min.js
  69. 84 0
      sites/all/themes/figureslibres/inifig/js/libs/jquery.mousewheel.js
  70. 1 0
      sites/all/themes/figureslibres/inifig/js/libs/modernizr-2.6.1.min.js
  71. 76 0
      sites/all/themes/figureslibres/inifig/js/libs/mwheelIntent.js
  72. 27 0
      sites/all/themes/figureslibres/inifig/js/script.js
  73. 254 0
      sites/all/themes/figureslibres/inifig/less/styles.less
  74. 68 0
      sites/all/themes/figureslibres/inifig/less/wysiwyg.less
  75. BIN
      sites/all/themes/figureslibres/inifig/logo-lite-alpha.png
  76. BIN
      sites/all/themes/figureslibres/inifig/logo-lite.png
  77. BIN
      sites/all/themes/figureslibres/inifig/logo.png
  78. 214 0
      sites/all/themes/figureslibres/inifig/maintenance-page.tpl.php
  79. 4 0
      sites/all/themes/figureslibres/inifig/plugins/layouts/html5-2-col/html5-2-col.css
  80. 14 0
      sites/all/themes/figureslibres/inifig/plugins/layouts/html5-2-col/html5-2-col.inc
  81. BIN
      sites/all/themes/figureslibres/inifig/plugins/layouts/html5-2-col/html5-2-col.png
  82. 4 0
      sites/all/themes/figureslibres/inifig/plugins/layouts/html5-2-col/panels-html5-2-col.tpl.php
  83. 2 0
      sites/all/themes/figureslibres/inifig/plugins/layouts/html5-basic/html5-basic.css
  84. 15 0
      sites/all/themes/figureslibres/inifig/plugins/layouts/html5-basic/html5-basic.inc
  85. BIN
      sites/all/themes/figureslibres/inifig/plugins/layouts/html5-basic/html5-basic.png
  86. 5 0
      sites/all/themes/figureslibres/inifig/plugins/layouts/html5-basic/panels-html5-basic.tpl.php
  87. 2 0
      sites/all/themes/figureslibres/inifig/plugins/layouts/html5-custom-2/html5-custom-2.css
  88. 15 0
      sites/all/themes/figureslibres/inifig/plugins/layouts/html5-custom-2/html5-custom-2.inc
  89. BIN
      sites/all/themes/figureslibres/inifig/plugins/layouts/html5-custom-2/html5-custom-2.png
  90. 5 0
      sites/all/themes/figureslibres/inifig/plugins/layouts/html5-custom-2/panels-html5-custom-2.tpl.php
  91. 5 0
      sites/all/themes/figureslibres/inifig/plugins/layouts/html5-custom/html5-custom.css
  92. 16 0
      sites/all/themes/figureslibres/inifig/plugins/layouts/html5-custom/html5-custom.inc
  93. BIN
      sites/all/themes/figureslibres/inifig/plugins/layouts/html5-custom/html5-custom.png
  94. 9 0
      sites/all/themes/figureslibres/inifig/plugins/layouts/html5-custom/panels-html5-custom.tpl.php
  95. 29 0
      sites/all/themes/figureslibres/inifig/plugins/styles/minimum.inc
  96. 6 0
      sites/all/themes/figureslibres/inifig/preprocess/block.pre.php
  97. 17 0
      sites/all/themes/figureslibres/inifig/preprocess/comment-wrapper.pre.php
  98. 8 0
      sites/all/themes/figureslibres/inifig/preprocess/field.pre.php
  99. 108 0
      sites/all/themes/figureslibres/inifig/preprocess/html.pre.php
  100. 7 0
      sites/all/themes/figureslibres/inifig/preprocess/node.pre.php

BIN
sites/all/themes/figureslibres/clameurs/apple-touch-icon-precomposed.png


BIN
sites/all/themes/figureslibres/clameurs/apple-touch-icon.png


+ 72 - 0
sites/all/themes/figureslibres/clameurs/clameurs.info

@@ -0,0 +1,72 @@
+;----------// Theme informations
+
+name = "Clameurs"
+description = "html5 theme by <a href="http://www.figureslibres.graphics">figureslibres.graphics</a> for clameurs.org"
+version = "7.x-0.1"
+core = "7.x"
+engine = "phptemplate"
+
+
+
+;----------// Styles
+stylesheets[all][] = "css/normalize.css"
+stylesheets[all][] = "css/styles.css"
+; non-semantic helper classes
+; Please define your styles before this section.
+stylesheets[all][] = "css/nonsemantic.css"
+
+
+
+
+;----------// Scripts
+
+scripts[] = "js/script.js"
+
+;----------// Regions
+
+regions[header] = Header
+regions[headerblock_left] = Headerblock left
+regions[headerblock_middle] = Headerblock middle
+regions[headerblock_right] = Headerblock right
+
+regions[help] = Help
+regions[highlighted] = Highlighted
+
+regions[sidebar_first] = First sidebar
+regions[content_top] = Top content
+regions[content] = Content
+regions[content_bottom] = Bottom content
+regions[sidebar_second] = Second sidebar
+
+regions[footer_top] = Footer top
+regions[footer_left] = Footer left
+regions[footer_middle_left] = Footer middle left
+regions[footer_middle_right] = Footer middle right
+regions[footer_right] = Footer right
+regions[footer_bottom] = Footer bottom
+
+
+
+;----------// Features
+
+features[] = logo
+features[] = favicon
+features[] = name
+features[] = slogan
+features[] = search
+features[] = comment_user_picture
+features[] = main_menu
+features[] = secondary_menu
+
+
+;----------// Panels
+; Panels layouts. You can place multiple layouts under the "layouts" folder.
+
+plugins[panels][layouts] = layouts
+
+
+;----------// Theme Setting Defaults
+
+settings[layout_method]                     = '0'
+settings[layout_enable_settings]            = 'on'
+settings[layout_enable_method]              = 'on'

+ 23 - 0
sites/all/themes/figureslibres/clameurs/css/maintenance.css

@@ -0,0 +1,23 @@
+/* $Id: maintenance.css,v 1.1 2007/11/30 12:19:10 goba Exp $ */
+
+/* Update styles */
+#update-results {
+  margin-top: 3em;
+  padding: 0.25em;
+  border: 1px solid #ccc;
+  background: #eee;
+  font-size: smaller;
+}
+#update-results h2 {
+  margin-top: 0.25em;
+}
+#update-results h4 {
+  margin-bottom: 0.25em;
+}
+#update-results li.none {
+  color: #888;
+  font-style: italic;
+}
+#update-results li.failure strong {
+  color: #b63300;
+}

+ 64 - 0
sites/all/themes/figureslibres/clameurs/css/nonsemantic.css

@@ -0,0 +1,64 @@
+/* ==|== non-semantic helper classes ========================================
+   Please define your styles before this section.
+   ========================================================================== */
+
+/* For image replacement */
+.ir { display: block; border: 0; text-indent: -999em; overflow: hidden; background-color: transparent; background-repeat: no-repeat; text-align: left; direction: ltr; }
+.ir br { display: none; }
+
+/* Hide from both screenreaders and browsers: h5bp.com/u */
+.hidden { display: none !important; visibility: hidden; }
+
+/* Hide only visually, but have it available for screenreaders: h5bp.com/v */
+.visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
+
+/* Extends the .visuallyhidden class to allow the element to be focusable when navigated to via the keyboard: h5bp.com/p */
+.visuallyhidden.focusable:active, .visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; }
+
+/* Hide visually and from screenreaders, but maintain layout */
+.invisible { visibility: hidden; }
+
+/* Contain floats: h5bp.com/q */ 
+.clearfix:before, .clearfix:after { content: ""; display: table; }
+.clearfix:after { clear: both; }
+.clearfix { zoom: 1; }
+
+
+
+/* ==|== media queries ======================================================
+   PLACEHOLDER Media Queries for Responsive Design.
+   These override the primary ('mobile first') styles
+   Modify as content requires.
+   ========================================================================== */
+
+@media only screen and (min-width: 480px) {
+  /* Style adjustments for viewports 480px and over go here */
+
+}
+
+@media only screen and (min-width: 768px) {
+  /* Style adjustments for viewports 768px and over go here */
+
+}
+
+
+
+/* ==|== print styles =======================================================
+   Print styles.
+   Inlined to avoid required HTTP connection: h5bp.com/r
+   ========================================================================== */
+ 
+@media print {
+  * { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; } /* Black prints faster: h5bp.com/s */
+  a, a:visited { text-decoration: underline; }
+  a[href]:after { content: " (" attr(href) ")"; }
+  abbr[title]:after { content: " (" attr(title) ")"; }
+  .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }  /* Don't show links for images, or javascript/internal links */
+  pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
+  thead { display: table-header-group; } /* h5bp.com/t */
+  tr, img { page-break-inside: avoid; }
+  img { max-width: 100% !important; }
+  @page { margin: 0.5cm; }
+  p, h2, h3 { orphans: 3; widows: 3; }
+  h2, h3 { page-break-after: avoid; }
+}

+ 406 - 0
sites/all/themes/figureslibres/clameurs/css/normalize.css

@@ -0,0 +1,406 @@
+/*! normalize.css v2.1.3 | MIT License | git.io/normalize */
+
+/* ==========================================================================
+   HTML5 display definitions
+   ========================================================================== */
+
+/**
+ * Correct `block` display not defined in IE 8/9.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+    display: block;
+}
+
+/**
+ * Correct `inline-block` display not defined in IE 8/9.
+ */
+
+audio,
+canvas,
+video {
+    display: inline-block;
+}
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+    display: none;
+    height: 0;
+}
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9.
+ * Hide the `template` element in IE, Safari, and Firefox < 22.
+ */
+
+[hidden],
+template {
+    display: none;
+}
+
+/* ==========================================================================
+   Base
+   ========================================================================== */
+
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
+ *    user zoom.
+ */
+
+html {
+    font-family: sans-serif; /* 1 */
+    -ms-text-size-adjust: 100%; /* 2 */
+    -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/**
+ * Remove default margin.
+ */
+
+body {
+    margin: 0;
+}
+
+/* ==========================================================================
+   Links
+   ========================================================================== */
+
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+
+a {
+    background: transparent;
+}
+
+/**
+ * Address `outline` inconsistency between Chrome and other browsers.
+ */
+
+a:focus {
+    outline: thin dotted;
+}
+
+/**
+ * Improve readability when focused and also mouse hovered in all browsers.
+ */
+
+a:active,
+a:hover {
+    outline: 0;
+}
+
+/* ==========================================================================
+   Typography
+   ========================================================================== */
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari 5, and Chrome.
+ */
+
+h1 {
+    font-size: 2em;
+    margin: 0.67em 0;
+}
+
+/**
+ * Address styling not present in IE 8/9, Safari 5, and Chrome.
+ */
+
+abbr[title] {
+    border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
+ */
+
+b,
+strong {
+    font-weight: bold;
+}
+
+/**
+ * Address styling not present in Safari 5 and Chrome.
+ */
+
+dfn {
+    font-style: italic;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+
+hr {
+    -moz-box-sizing: content-box;
+    box-sizing: content-box;
+    height: 0;
+}
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+
+mark {
+    background: #ff0;
+    color: #000;
+}
+
+/**
+ * Correct font family set oddly in Safari 5 and Chrome.
+ */
+
+code,
+kbd,
+pre,
+samp {
+    font-family: monospace, serif;
+    font-size: 1em;
+}
+
+/**
+ * Improve readability of pre-formatted text in all browsers.
+ */
+
+pre {
+    white-space: pre-wrap;
+}
+
+/**
+ * Set consistent quote types.
+ */
+
+q {
+    quotes: "\201C" "\201D" "\2018" "\2019";
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+
+small {
+    font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+    font-size: 75%;
+    line-height: 0;
+    position: relative;
+    vertical-align: baseline;
+}
+
+sup {
+    top: -0.5em;
+}
+
+sub {
+    bottom: -0.25em;
+}
+
+/* ==========================================================================
+   Embedded content
+   ========================================================================== */
+
+/**
+ * Remove border when inside `a` element in IE 8/9.
+ */
+
+img {
+    border: 0;
+}
+
+/**
+ * Correct overflow displayed oddly in IE 9.
+ */
+
+svg:not(:root) {
+    overflow: hidden;
+}
+
+/* ==========================================================================
+   Figures
+   ========================================================================== */
+
+/**
+ * Address margin not present in IE 8/9 and Safari 5.
+ */
+
+figure {
+    margin: 0;
+}
+
+/* ==========================================================================
+   Forms
+   ========================================================================== */
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+    border: 1px solid #c0c0c0;
+    margin: 0 2px;
+    padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+
+legend {
+    border: 0; /* 1 */
+    padding: 0; /* 2 */
+}
+
+/**
+ * 1. Correct font family not being inherited in all browsers.
+ * 2. Correct font size not being inherited in all browsers.
+ * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.
+ */
+
+button,
+input,
+select,
+textarea {
+    font-family: inherit; /* 1 */
+    font-size: 100%; /* 2 */
+    margin: 0; /* 3 */
+}
+
+/**
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+
+button,
+input {
+    line-height: normal;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.
+ * Correct `select` style inheritance in Firefox 4+ and Opera.
+ */
+
+button,
+select {
+    text-transform: none;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ *    and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ *    `input` and others.
+ */
+
+button,
+html input[type="button"], /* 1 */
+input[type="reset"],
+input[type="submit"] {
+    -webkit-appearance: button; /* 2 */
+    cursor: pointer; /* 3 */
+}
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+html input[disabled] {
+    cursor: default;
+}
+
+/**
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
+ * 2. Remove excess padding in IE 8/9/10.
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+    box-sizing: border-box; /* 1 */
+    padding: 0; /* 2 */
+}
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
+ *    (include `-moz` to future-proof).
+ */
+
+input[type="search"] {
+    -webkit-appearance: textfield; /* 1 */
+    -moz-box-sizing: content-box;
+    -webkit-box-sizing: content-box; /* 2 */
+    box-sizing: content-box;
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari 5 and Chrome
+ * on OS X.
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+    -webkit-appearance: none;
+}
+
+/**
+ * Remove inner padding and border in Firefox 4+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+    border: 0;
+    padding: 0;
+}
+
+/**
+ * 1. Remove default vertical scrollbar in IE 8/9.
+ * 2. Improve readability and alignment in all browsers.
+ */
+
+textarea {
+    overflow: auto; /* 1 */
+    vertical-align: top; /* 2 */
+}
+
+/* ==========================================================================
+   Tables
+   ========================================================================== */
+
+/**
+ * Remove most spacing between table cells.
+ */
+
+table {
+    border-collapse: collapse;
+    border-spacing: 0;
+}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
sites/all/themes/figureslibres/clameurs/css/styles.css


BIN
sites/all/themes/figureslibres/clameurs/icon.png


+ 0 - 0
sites/all/themes/gui/jee/inc/template.custom-functions.inc → sites/all/themes/figureslibres/clameurs/inc/template.custom-functions.inc


+ 215 - 0
sites/all/themes/figureslibres/clameurs/inc/template.theme-overrides.inc

@@ -0,0 +1,215 @@
+<?php
+
+
+/**
+ * Allow themable wrapping of all comments (from garland).
+ */
+function clameurs_comment_wrapper($content, $node) {
+  if (!$content || $node->type == 'forum') {
+    return '<div id="comments">'. $content .'</div>';
+  }
+  else {
+    return '<div id="comments"><h2 class="comments">'. t('Comments :') .'</h2>'. $content .'</div>';
+  }
+}
+
+/**
+ * Theme output of user signature.
+ *
+ * @ingroup themeable
+ */
+function clameurs_user_signature($signature) {
+  return '<div class="user-signature">'.$signature.'</div>';
+}
+
+/**
+ * Returns a formatted list of recent comments to be displayed in the comment block.
+ *
+ * @return
+ *   The comment list HTML.
+ * @ingroup themeable
+ */
+function clameurs_comment_block() {
+  $items = array();
+  foreach (comment_get_recent() as $comment) {
+    $items[] = l($comment->subject, 'node/'. $comment->nid, array('fragment' => 'comment-'. $comment->cid)) .'<br />'. t('@time ago', array('@time' => format_interval(time() - $comment->timestamp)));
+  }
+  if ($items) {
+    return theme('item_list', $items);
+  }
+}
+
+/**
+ * Themes a single comment and related items.
+ *
+ * @param $comment
+ *   The comment object.
+ * @param $node
+ *   The comment node.
+ * @param $links
+ *   An associative array containing control links suitable for passing into
+ *   theme_links(). These are generated by modules implementing hook_link() with
+ *   $type='comment'. Typical examples are links for editing and deleting
+ *   comments.
+ * @param $visible
+ *   Switches between folded/unfolded view. If TRUE the comments are visible, if
+ *   FALSE the comments are folded.
+ * @ingroup themeable
+ */
+function clameurs_comment_view($comment, $node, $links = array(), $visible = TRUE) {
+  static $first_new = TRUE;
+
+  $output = '';
+  $comment->new = node_mark($comment->nid, $comment->timestamp);
+  if ($first_new && $comment->new != MARK_READ) {
+    // Assign the anchor only for the first new comment. This avoids duplicate
+    // id attributes on a page.
+    $first_new = FALSE;
+    $output .= "<a id=\"new\"></a>\n";
+  }
+
+  $output .= "<a id=\"comment-$comment->cid\"></a>\n";
+
+  // Switch to folded/unfolded view of the comment
+  if ($visible) {
+    $comment->comment = check_markup($comment->comment, $comment->format, FALSE);
+
+    // Comment API hook
+    comment_invoke_comment($comment, 'view');
+
+    $output .= theme('comment', $comment, $node, $links);
+  }
+  else {
+    $output .= theme('comment_folded', $comment);
+  }
+
+  return $output;
+}
+
+
+/**
+ * Theme comment controls box where the user can change the default display mode and display order of comments.
+ *
+ * @param $form
+ *   The form structure.
+ * @ingroup themeable
+ */
+function clameurs_comment_controls($form) {
+  $output = '<div class="container-inline">';
+  $output .=  drupal_render($form);
+  $output .= '</div>';
+  $output .= '<div class="description">'. t('Select your preferred way to display the comments and click "Save settings" to activate your changes.') .'</div>';
+  return theme('box', t('Comment viewing options'), $output);
+}
+
+/**
+ * Theme comment flat collapsed view.
+ *
+ * @param $comment
+ *   The comment to be themed.
+ * @param $node
+ *   The comment node.
+ * @ingroup themeable
+ */
+function clameurs_comment_flat_collapsed($comment, $node) {
+  return theme('comment_view', $comment, $node, '', 0);
+}
+
+/**
+ * Theme comment flat expanded view.
+ *
+ * @param $comment
+ *   The comment to be themed.
+ * @param $node
+ *   The comment node.
+ * @ingroup themeable
+ */
+function clameurs_comment_flat_expanded($comment, $node) {
+  $links = module_invoke_all('link', 'comment', $comment, 0);
+  drupal_alter('link', $links, $node, $comment);
+  return theme('comment_view', $comment, $node, $links);
+}
+
+/**
+ * Theme comment thread collapsed view.
+ *
+ * @param $comment
+ *   The comment to be themed.
+ * @param $node
+ *   The comment node.
+ * @ingroup themeable
+ */
+function clameurs_comment_thread_collapsed($comment, $node) {
+  return theme('comment_view', $comment, $node, '', 0);
+}
+
+/**
+ * Theme comment thread expanded view.
+ *
+ * @param $comment
+ *   The comment to be themed.
+ * @param $node
+ *   The comment node.
+ * @ingroup themeable
+ */
+function clameurs_comment_thread_expanded($comment, $node) {
+  $links = module_invoke_all('link', 'comment', $comment, 0);
+  drupal_alter('link', $links, $node, $comment);
+  return theme('comment_view', $comment, $node, $links);
+}
+
+/**
+ * Theme a "you can't post comments" notice.
+ *
+ * @param $node
+ *   The comment node.
+ * @ingroup themeable
+ */
+function clameurs_comment_post_forbidden($node) {
+  global $user;
+  static $authenticated_post_comments;
+
+  if (!$user->uid) {
+    if (!isset($authenticated_post_comments)) {
+      // We only output any link if we are certain, that users get permission
+      // to post comments by logging in. We also locally cache this information.
+      $authenticated_post_comments = array_key_exists(DRUPAL_AUTHENTICATED_RID, user_roles(TRUE, 'post comments') + user_roles(TRUE, 'post comments without approval'));
+    }
+
+    if ($authenticated_post_comments) {
+      // We cannot use drupal_get_destination() because these links
+      // sometimes appear on /node and taxonomy listing pages.
+      if (variable_get('comment_form_location_'. $node->type, COMMENT_FORM_SEPARATE_PAGE) == COMMENT_FORM_SEPARATE_PAGE) {
+        $destination = 'destination='. rawurlencode("comment/reply/$node->nid#comment-form");
+      }
+      else {
+        $destination = 'destination='. rawurlencode("node/$node->nid#comment-form");
+      }
+
+      if (variable_get('user_register', 1)) {
+        // Users can register themselves.
+        return t('<a href="@login">Login</a> or <a href="@register">register</a> to post comments', array('@login' => url('user/login', array('query' => $destination)), '@register' => url('user/register', array('query' => $destination))));
+      }
+      else {
+        // Only admins can add new users, no public registration.
+        return t('<a href="@login">Login</a> to post comments', array('@login' => url('user/login', array('query' => $destination))));
+      }
+    }
+  }
+}
+
+
+/**
+ * Theme a "Submitted by ..." notice.
+ *
+ * @param $comment
+ *   The comment.
+ * @ingroup themeable
+ */
+function clameurs_comment_submitted($comment) {
+  return t('Submitted by !username on @datetime.',
+    array(
+      '!username' => theme('username', $comment),
+      '@datetime' => format_date($comment->timestamp)
+    ));
+}

+ 1104 - 0
sites/all/themes/figureslibres/clameurs/js/libs/iscroll.js

@@ -0,0 +1,1104 @@
+/*!
+ * iScroll v4.2.5 ~ Copyright (c) 2012 Matteo Spinelli, http://cubiq.org
+ * Released under MIT license, http://cubiq.org/license
+ */
+(function(window, doc){
+var m = Math,
+	dummyStyle = doc.createElement('div').style,
+	vendor = (function () {
+		var vendors = 't,webkitT,MozT,msT,OT'.split(','),
+			t,
+			i = 0,
+			l = vendors.length;
+
+		for ( ; i < l; i++ ) {
+			t = vendors[i] + 'ransform';
+			if ( t in dummyStyle ) {
+				return vendors[i].substr(0, vendors[i].length - 1);
+			}
+		}
+
+		return false;
+	})(),
+	cssVendor = vendor ? '-' + vendor.toLowerCase() + '-' : '',
+
+	// Style properties
+	transform = prefixStyle('transform'),
+	transitionProperty = prefixStyle('transitionProperty'),
+	transitionDuration = prefixStyle('transitionDuration'),
+	transformOrigin = prefixStyle('transformOrigin'),
+	transitionTimingFunction = prefixStyle('transitionTimingFunction'),
+	transitionDelay = prefixStyle('transitionDelay'),
+
+    // Browser capabilities
+	isAndroid = (/android/gi).test(navigator.appVersion),
+	isIDevice = (/iphone|ipad/gi).test(navigator.appVersion),
+	isTouchPad = (/hp-tablet/gi).test(navigator.appVersion),
+
+    has3d = prefixStyle('perspective') in dummyStyle,
+    hasTouch = 'ontouchstart' in window && !isTouchPad,
+    hasTransform = vendor !== false,
+    hasTransitionEnd = prefixStyle('transition') in dummyStyle,
+
+	RESIZE_EV = 'onorientationchange' in window ? 'orientationchange' : 'resize',
+	START_EV = hasTouch ? 'touchstart' : 'mousedown',
+	MOVE_EV = hasTouch ? 'touchmove' : 'mousemove',
+	END_EV = hasTouch ? 'touchend' : 'mouseup',
+	CANCEL_EV = hasTouch ? 'touchcancel' : 'mouseup',
+	TRNEND_EV = (function () {
+		if ( vendor === false ) return false;
+
+		var transitionEnd = {
+				''			: 'transitionend',
+				'webkit'	: 'webkitTransitionEnd',
+				'Moz'		: 'transitionend',
+				'O'			: 'otransitionend',
+				'ms'		: 'MSTransitionEnd'
+			};
+
+		return transitionEnd[vendor];
+	})(),
+
+	nextFrame = (function() {
+		return window.requestAnimationFrame ||
+			window.webkitRequestAnimationFrame ||
+			window.mozRequestAnimationFrame ||
+			window.oRequestAnimationFrame ||
+			window.msRequestAnimationFrame ||
+			function(callback) { return setTimeout(callback, 1); };
+	})(),
+	cancelFrame = (function () {
+		return window.cancelRequestAnimationFrame ||
+			window.webkitCancelAnimationFrame ||
+			window.webkitCancelRequestAnimationFrame ||
+			window.mozCancelRequestAnimationFrame ||
+			window.oCancelRequestAnimationFrame ||
+			window.msCancelRequestAnimationFrame ||
+			clearTimeout;
+	})(),
+
+	// Helpers
+	translateZ = has3d ? ' translateZ(0)' : '',
+
+	// Constructor
+	iScroll = function (el, options) {
+		var that = this,
+			i;
+
+		that.wrapper = typeof el == 'object' ? el : doc.getElementById(el);
+		that.wrapper.style.overflow = 'hidden';
+		that.scroller = that.wrapper.children[0];
+
+		// Default options
+		that.options = {
+			hScroll: true,
+			vScroll: true,
+			x: 0,
+			y: 0,
+			bounce: true,
+			bounceLock: false,
+			momentum: true,
+			lockDirection: true,
+			useTransform: true,
+			useTransition: false,
+			topOffset: 0,
+			checkDOMChanges: false,		// Experimental
+			handleClick: true,
+
+			// Scrollbar
+			hScrollbar: true,
+			vScrollbar: true,
+			fixedScrollbar: isAndroid,
+			hideScrollbar: isIDevice,
+			fadeScrollbar: isIDevice && has3d,
+			scrollbarClass: '',
+
+			// Zoom
+			zoom: false,
+			zoomMin: 1,
+			zoomMax: 4,
+			doubleTapZoom: 2,
+			wheelAction: 'scroll',
+
+			// Snap
+			snap: false,
+			snapThreshold: 1,
+
+			// Events
+			onRefresh: null,
+			onBeforeScrollStart: function (e) { e.preventDefault(); },
+			onScrollStart: null,
+			onBeforeScrollMove: null,
+			onScrollMove: null,
+			onBeforeScrollEnd: null,
+			onScrollEnd: null,
+			onTouchEnd: null,
+			onDestroy: null,
+			onZoomStart: null,
+			onZoom: null,
+			onZoomEnd: null
+		};
+
+		// User defined options
+		for (i in options) that.options[i] = options[i];
+		
+		// Set starting position
+		that.x = that.options.x;
+		that.y = that.options.y;
+
+		// Normalize options
+		that.options.useTransform = hasTransform && that.options.useTransform;
+		that.options.hScrollbar = that.options.hScroll && that.options.hScrollbar;
+		that.options.vScrollbar = that.options.vScroll && that.options.vScrollbar;
+		that.options.zoom = that.options.useTransform && that.options.zoom;
+		that.options.useTransition = hasTransitionEnd && that.options.useTransition;
+
+		// Helpers FIX ANDROID BUG!
+		// translate3d and scale doesn't work together!
+		// Ignoring 3d ONLY WHEN YOU SET that.options.zoom
+		if ( that.options.zoom && isAndroid ){
+			translateZ = '';
+		}
+		
+		// Set some default styles
+		that.scroller.style[transitionProperty] = that.options.useTransform ? cssVendor + 'transform' : 'top left';
+		that.scroller.style[transitionDuration] = '0';
+		that.scroller.style[transformOrigin] = '0 0';
+		if (that.options.useTransition) that.scroller.style[transitionTimingFunction] = 'cubic-bezier(0.33,0.66,0.66,1)';
+		
+		if (that.options.useTransform) that.scroller.style[transform] = 'translate(' + that.x + 'px,' + that.y + 'px)' + translateZ;
+		else that.scroller.style.cssText += ';position:absolute;top:' + that.y + 'px;left:' + that.x + 'px';
+
+		if (that.options.useTransition) that.options.fixedScrollbar = true;
+
+		that.refresh();
+
+		that._bind(RESIZE_EV, window);
+		that._bind(START_EV);
+		if (!hasTouch) {
+			if (that.options.wheelAction != 'none') {
+				that._bind('DOMMouseScroll');
+				that._bind('mousewheel');
+			}
+		}
+
+		if (that.options.checkDOMChanges) that.checkDOMTime = setInterval(function () {
+			that._checkDOMChanges();
+		}, 500);
+	};
+
+// Prototype
+iScroll.prototype = {
+	enabled: true,
+	x: 0,
+	y: 0,
+	steps: [],
+	scale: 1,
+	currPageX: 0, currPageY: 0,
+	pagesX: [], pagesY: [],
+	aniTime: null,
+	wheelZoomCount: 0,
+	
+	handleEvent: function (e) {
+		var that = this;
+		switch(e.type) {
+			case START_EV:
+				if (!hasTouch && e.button !== 0) return;
+				that._start(e);
+				break;
+			case MOVE_EV: that._move(e); break;
+			case END_EV:
+			case CANCEL_EV: that._end(e); break;
+			case RESIZE_EV: that._resize(); break;
+			case 'DOMMouseScroll': case 'mousewheel': that._wheel(e); break;
+			case TRNEND_EV: that._transitionEnd(e); break;
+		}
+	},
+	
+	_checkDOMChanges: function () {
+		if (this.moved || this.zoomed || this.animating ||
+			(this.scrollerW == this.scroller.offsetWidth * this.scale && this.scrollerH == this.scroller.offsetHeight * this.scale)) return;
+
+		this.refresh();
+	},
+	
+	_scrollbar: function (dir) {
+		var that = this,
+			bar;
+
+		if (!that[dir + 'Scrollbar']) {
+			if (that[dir + 'ScrollbarWrapper']) {
+				if (hasTransform) that[dir + 'ScrollbarIndicator'].style[transform] = '';
+				that[dir + 'ScrollbarWrapper'].parentNode.removeChild(that[dir + 'ScrollbarWrapper']);
+				that[dir + 'ScrollbarWrapper'] = null;
+				that[dir + 'ScrollbarIndicator'] = null;
+			}
+
+			return;
+		}
+
+		if (!that[dir + 'ScrollbarWrapper']) {
+			// Create the scrollbar wrapper
+			bar = doc.createElement('div');
+
+			if (that.options.scrollbarClass) bar.className = that.options.scrollbarClass + dir.toUpperCase();
+			else bar.style.cssText = 'position:absolute;z-index:100;' + (dir == 'h' ? 'height:7px;bottom:1px;left:2px;right:' + (that.vScrollbar ? '7' : '2') + 'px' : 'width:7px;bottom:' + (that.hScrollbar ? '7' : '2') + 'px;top:2px;right:1px');
+
+			bar.style.cssText += ';pointer-events:none;' + cssVendor + 'transition-property:opacity;' + cssVendor + 'transition-duration:' + (that.options.fadeScrollbar ? '350ms' : '0') + ';overflow:hidden;opacity:' + (that.options.hideScrollbar ? '0' : '1');
+
+			that.wrapper.appendChild(bar);
+			that[dir + 'ScrollbarWrapper'] = bar;
+
+			// Create the scrollbar indicator
+			bar = doc.createElement('div');
+			if (!that.options.scrollbarClass) {
+				bar.style.cssText = 'position:absolute;z-index:100;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);' + cssVendor + 'background-clip:padding-box;' + cssVendor + 'box-sizing:border-box;' + (dir == 'h' ? 'height:100%' : 'width:100%') + ';' + cssVendor + 'border-radius:3px;border-radius:3px';
+			}
+			bar.style.cssText += ';pointer-events:none;' + cssVendor + 'transition-property:' + cssVendor + 'transform;' + cssVendor + 'transition-timing-function:cubic-bezier(0.33,0.66,0.66,1);' + cssVendor + 'transition-duration:0;' + cssVendor + 'transform: translate(0,0)' + translateZ;
+			if (that.options.useTransition) bar.style.cssText += ';' + cssVendor + 'transition-timing-function:cubic-bezier(0.33,0.66,0.66,1)';
+
+			that[dir + 'ScrollbarWrapper'].appendChild(bar);
+			that[dir + 'ScrollbarIndicator'] = bar;
+		}
+
+		if (dir == 'h') {
+			that.hScrollbarSize = that.hScrollbarWrapper.clientWidth;
+			that.hScrollbarIndicatorSize = m.max(m.round(that.hScrollbarSize * that.hScrollbarSize / that.scrollerW), 8);
+			that.hScrollbarIndicator.style.width = that.hScrollbarIndicatorSize + 'px';
+			that.hScrollbarMaxScroll = that.hScrollbarSize - that.hScrollbarIndicatorSize;
+			that.hScrollbarProp = that.hScrollbarMaxScroll / that.maxScrollX;
+		} else {
+			that.vScrollbarSize = that.vScrollbarWrapper.clientHeight;
+			that.vScrollbarIndicatorSize = m.max(m.round(that.vScrollbarSize * that.vScrollbarSize / that.scrollerH), 8);
+			that.vScrollbarIndicator.style.height = that.vScrollbarIndicatorSize + 'px';
+			that.vScrollbarMaxScroll = that.vScrollbarSize - that.vScrollbarIndicatorSize;
+			that.vScrollbarProp = that.vScrollbarMaxScroll / that.maxScrollY;
+		}
+
+		// Reset position
+		that._scrollbarPos(dir, true);
+	},
+	
+	_resize: function () {
+		var that = this;
+		setTimeout(function () { that.refresh(); }, isAndroid ? 200 : 0);
+	},
+	
+	_pos: function (x, y) {
+		if (this.zoomed) return;
+
+		x = this.hScroll ? x : 0;
+		y = this.vScroll ? y : 0;
+
+		if (this.options.useTransform) {
+			this.scroller.style[transform] = 'translate(' + x + 'px,' + y + 'px) scale(' + this.scale + ')' + translateZ;
+		} else {
+			x = m.round(x);
+			y = m.round(y);
+			this.scroller.style.left = x + 'px';
+			this.scroller.style.top = y + 'px';
+		}
+
+		this.x = x;
+		this.y = y;
+
+		this._scrollbarPos('h');
+		this._scrollbarPos('v');
+	},
+
+	_scrollbarPos: function (dir, hidden) {
+		var that = this,
+			pos = dir == 'h' ? that.x : that.y,
+			size;
+
+		if (!that[dir + 'Scrollbar']) return;
+
+		pos = that[dir + 'ScrollbarProp'] * pos;
+
+		if (pos < 0) {
+			if (!that.options.fixedScrollbar) {
+				size = that[dir + 'ScrollbarIndicatorSize'] + m.round(pos * 3);
+				if (size < 8) size = 8;
+				that[dir + 'ScrollbarIndicator'].style[dir == 'h' ? 'width' : 'height'] = size + 'px';
+			}
+			pos = 0;
+		} else if (pos > that[dir + 'ScrollbarMaxScroll']) {
+			if (!that.options.fixedScrollbar) {
+				size = that[dir + 'ScrollbarIndicatorSize'] - m.round((pos - that[dir + 'ScrollbarMaxScroll']) * 3);
+				if (size < 8) size = 8;
+				that[dir + 'ScrollbarIndicator'].style[dir == 'h' ? 'width' : 'height'] = size + 'px';
+				pos = that[dir + 'ScrollbarMaxScroll'] + (that[dir + 'ScrollbarIndicatorSize'] - size);
+			} else {
+				pos = that[dir + 'ScrollbarMaxScroll'];
+			}
+		}
+
+		that[dir + 'ScrollbarWrapper'].style[transitionDelay] = '0';
+		that[dir + 'ScrollbarWrapper'].style.opacity = hidden && that.options.hideScrollbar ? '0' : '1';
+		that[dir + 'ScrollbarIndicator'].style[transform] = 'translate(' + (dir == 'h' ? pos + 'px,0)' : '0,' + pos + 'px)') + translateZ;
+	},
+	
+	_start: function (e) {
+		var that = this,
+			point = hasTouch ? e.touches[0] : e,
+			matrix, x, y,
+			c1, c2;
+
+		if (!that.enabled) return;
+
+		if (that.options.onBeforeScrollStart) that.options.onBeforeScrollStart.call(that, e);
+
+		if (that.options.useTransition || that.options.zoom) that._transitionTime(0);
+
+		that.moved = false;
+		that.animating = false;
+		that.zoomed = false;
+		that.distX = 0;
+		that.distY = 0;
+		that.absDistX = 0;
+		that.absDistY = 0;
+		that.dirX = 0;
+		that.dirY = 0;
+
+		// Gesture start
+		if (that.options.zoom && hasTouch && e.touches.length > 1) {
+			c1 = m.abs(e.touches[0].pageX-e.touches[1].pageX);
+			c2 = m.abs(e.touches[0].pageY-e.touches[1].pageY);
+			that.touchesDistStart = m.sqrt(c1 * c1 + c2 * c2);
+
+			that.originX = m.abs(e.touches[0].pageX + e.touches[1].pageX - that.wrapperOffsetLeft * 2) / 2 - that.x;
+			that.originY = m.abs(e.touches[0].pageY + e.touches[1].pageY - that.wrapperOffsetTop * 2) / 2 - that.y;
+
+			if (that.options.onZoomStart) that.options.onZoomStart.call(that, e);
+		}
+
+		if (that.options.momentum) {
+			if (that.options.useTransform) {
+				// Very lame general purpose alternative to CSSMatrix
+				matrix = getComputedStyle(that.scroller, null)[transform].replace(/[^0-9\-.,]/g, '').split(',');
+				x = +(matrix[12] || matrix[4]);
+				y = +(matrix[13] || matrix[5]);
+			} else {
+				x = +getComputedStyle(that.scroller, null).left.replace(/[^0-9-]/g, '');
+				y = +getComputedStyle(that.scroller, null).top.replace(/[^0-9-]/g, '');
+			}
+			
+			if (x != that.x || y != that.y) {
+				if (that.options.useTransition) that._unbind(TRNEND_EV);
+				else cancelFrame(that.aniTime);
+				that.steps = [];
+				that._pos(x, y);
+				if (that.options.onScrollEnd) that.options.onScrollEnd.call(that);
+			}
+		}
+
+		that.absStartX = that.x;	// Needed by snap threshold
+		that.absStartY = that.y;
+
+		that.startX = that.x;
+		that.startY = that.y;
+		that.pointX = point.pageX;
+		that.pointY = point.pageY;
+
+		that.startTime = e.timeStamp || Date.now();
+
+		if (that.options.onScrollStart) that.options.onScrollStart.call(that, e);
+
+		that._bind(MOVE_EV, window);
+		that._bind(END_EV, window);
+		that._bind(CANCEL_EV, window);
+	},
+	
+	_move: function (e) {
+		var that = this,
+			point = hasTouch ? e.touches[0] : e,
+			deltaX = point.pageX - that.pointX,
+			deltaY = point.pageY - that.pointY,
+			newX = that.x + deltaX,
+			newY = that.y + deltaY,
+			c1, c2, scale,
+			timestamp = e.timeStamp || Date.now();
+
+		if (that.options.onBeforeScrollMove) that.options.onBeforeScrollMove.call(that, e);
+
+		// Zoom
+		if (that.options.zoom && hasTouch && e.touches.length > 1) {
+			c1 = m.abs(e.touches[0].pageX - e.touches[1].pageX);
+			c2 = m.abs(e.touches[0].pageY - e.touches[1].pageY);
+			that.touchesDist = m.sqrt(c1*c1+c2*c2);
+
+			that.zoomed = true;
+
+			scale = 1 / that.touchesDistStart * that.touchesDist * this.scale;
+
+			if (scale < that.options.zoomMin) scale = 0.5 * that.options.zoomMin * Math.pow(2.0, scale / that.options.zoomMin);
+			else if (scale > that.options.zoomMax) scale = 2.0 * that.options.zoomMax * Math.pow(0.5, that.options.zoomMax / scale);
+
+			that.lastScale = scale / this.scale;
+
+			newX = this.originX - this.originX * that.lastScale + this.x,
+			newY = this.originY - this.originY * that.lastScale + this.y;
+
+			this.scroller.style[transform] = 'translate(' + newX + 'px,' + newY + 'px) scale(' + scale + ')' + translateZ;
+
+			if (that.options.onZoom) that.options.onZoom.call(that, e);
+			return;
+		}
+
+		that.pointX = point.pageX;
+		that.pointY = point.pageY;
+
+		// Slow down if outside of the boundaries
+		if (newX > 0 || newX < that.maxScrollX) {
+			newX = that.options.bounce ? that.x + (deltaX / 2) : newX >= 0 || that.maxScrollX >= 0 ? 0 : that.maxScrollX;
+		}
+		if (newY > that.minScrollY || newY < that.maxScrollY) {
+			newY = that.options.bounce ? that.y + (deltaY / 2) : newY >= that.minScrollY || that.maxScrollY >= 0 ? that.minScrollY : that.maxScrollY;
+		}
+
+		that.distX += deltaX;
+		that.distY += deltaY;
+		that.absDistX = m.abs(that.distX);
+		that.absDistY = m.abs(that.distY);
+
+		if (that.absDistX < 6 && that.absDistY < 6) {
+			return;
+		}
+
+		// Lock direction
+		if (that.options.lockDirection) {
+			if (that.absDistX > that.absDistY + 5) {
+				newY = that.y;
+				deltaY = 0;
+			} else if (that.absDistY > that.absDistX + 5) {
+				newX = that.x;
+				deltaX = 0;
+			}
+		}
+
+		that.moved = true;
+		that._pos(newX, newY);
+		that.dirX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0;
+		that.dirY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0;
+
+		if (timestamp - that.startTime > 300) {
+			that.startTime = timestamp;
+			that.startX = that.x;
+			that.startY = that.y;
+		}
+		
+		if (that.options.onScrollMove) that.options.onScrollMove.call(that, e);
+	},
+	
+	_end: function (e) {
+		if (hasTouch && e.touches.length !== 0) return;
+
+		var that = this,
+			point = hasTouch ? e.changedTouches[0] : e,
+			target, ev,
+			momentumX = { dist:0, time:0 },
+			momentumY = { dist:0, time:0 },
+			duration = (e.timeStamp || Date.now()) - that.startTime,
+			newPosX = that.x,
+			newPosY = that.y,
+			distX, distY,
+			newDuration,
+			snap,
+			scale;
+
+		that._unbind(MOVE_EV, window);
+		that._unbind(END_EV, window);
+		that._unbind(CANCEL_EV, window);
+
+		if (that.options.onBeforeScrollEnd) that.options.onBeforeScrollEnd.call(that, e);
+
+		if (that.zoomed) {
+			scale = that.scale * that.lastScale;
+			scale = Math.max(that.options.zoomMin, scale);
+			scale = Math.min(that.options.zoomMax, scale);
+			that.lastScale = scale / that.scale;
+			that.scale = scale;
+
+			that.x = that.originX - that.originX * that.lastScale + that.x;
+			that.y = that.originY - that.originY * that.lastScale + that.y;
+			
+			that.scroller.style[transitionDuration] = '200ms';
+			that.scroller.style[transform] = 'translate(' + that.x + 'px,' + that.y + 'px) scale(' + that.scale + ')' + translateZ;
+			
+			that.zoomed = false;
+			that.refresh();
+
+			if (that.options.onZoomEnd) that.options.onZoomEnd.call(that, e);
+			return;
+		}
+
+		if (!that.moved) {
+			if (hasTouch) {
+				if (that.doubleTapTimer && that.options.zoom) {
+					// Double tapped
+					clearTimeout(that.doubleTapTimer);
+					that.doubleTapTimer = null;
+					if (that.options.onZoomStart) that.options.onZoomStart.call(that, e);
+					that.zoom(that.pointX, that.pointY, that.scale == 1 ? that.options.doubleTapZoom : 1);
+					if (that.options.onZoomEnd) {
+						setTimeout(function() {
+							that.options.onZoomEnd.call(that, e);
+						}, 200); // 200 is default zoom duration
+					}
+				} else if (this.options.handleClick) {
+					that.doubleTapTimer = setTimeout(function () {
+						that.doubleTapTimer = null;
+
+						// Find the last touched element
+						target = point.target;
+						while (target.nodeType != 1) target = target.parentNode;
+
+						if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA') {
+							ev = doc.createEvent('MouseEvents');
+							ev.initMouseEvent('click', true, true, e.view, 1,
+								point.screenX, point.screenY, point.clientX, point.clientY,
+								e.ctrlKey, e.altKey, e.shiftKey, e.metaKey,
+								0, null);
+							ev._fake = true;
+							target.dispatchEvent(ev);
+						}
+					}, that.options.zoom ? 250 : 0);
+				}
+			}
+
+			that._resetPos(400);
+
+			if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e);
+			return;
+		}
+
+		if (duration < 300 && that.options.momentum) {
+			momentumX = newPosX ? that._momentum(newPosX - that.startX, duration, -that.x, that.scrollerW - that.wrapperW + that.x, that.options.bounce ? that.wrapperW : 0) : momentumX;
+			momentumY = newPosY ? that._momentum(newPosY - that.startY, duration, -that.y, (that.maxScrollY < 0 ? that.scrollerH - that.wrapperH + that.y - that.minScrollY : 0), that.options.bounce ? that.wrapperH : 0) : momentumY;
+
+			newPosX = that.x + momentumX.dist;
+			newPosY = that.y + momentumY.dist;
+
+			if ((that.x > 0 && newPosX > 0) || (that.x < that.maxScrollX && newPosX < that.maxScrollX)) momentumX = { dist:0, time:0 };
+			if ((that.y > that.minScrollY && newPosY > that.minScrollY) || (that.y < that.maxScrollY && newPosY < that.maxScrollY)) momentumY = { dist:0, time:0 };
+		}
+
+		if (momentumX.dist || momentumY.dist) {
+			newDuration = m.max(m.max(momentumX.time, momentumY.time), 10);
+
+			// Do we need to snap?
+			if (that.options.snap) {
+				distX = newPosX - that.absStartX;
+				distY = newPosY - that.absStartY;
+				if (m.abs(distX) < that.options.snapThreshold && m.abs(distY) < that.options.snapThreshold) { that.scrollTo(that.absStartX, that.absStartY, 200); }
+				else {
+					snap = that._snap(newPosX, newPosY);
+					newPosX = snap.x;
+					newPosY = snap.y;
+					newDuration = m.max(snap.time, newDuration);
+				}
+			}
+
+			that.scrollTo(m.round(newPosX), m.round(newPosY), newDuration);
+
+			if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e);
+			return;
+		}
+
+		// Do we need to snap?
+		if (that.options.snap) {
+			distX = newPosX - that.absStartX;
+			distY = newPosY - that.absStartY;
+			if (m.abs(distX) < that.options.snapThreshold && m.abs(distY) < that.options.snapThreshold) that.scrollTo(that.absStartX, that.absStartY, 200);
+			else {
+				snap = that._snap(that.x, that.y);
+				if (snap.x != that.x || snap.y != that.y) that.scrollTo(snap.x, snap.y, snap.time);
+			}
+
+			if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e);
+			return;
+		}
+
+		that._resetPos(200);
+		if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e);
+	},
+	
+	_resetPos: function (time) {
+		var that = this,
+			resetX = that.x >= 0 ? 0 : that.x < that.maxScrollX ? that.maxScrollX : that.x,
+			resetY = that.y >= that.minScrollY || that.maxScrollY > 0 ? that.minScrollY : that.y < that.maxScrollY ? that.maxScrollY : that.y;
+
+		if (resetX == that.x && resetY == that.y) {
+			if (that.moved) {
+				that.moved = false;
+				if (that.options.onScrollEnd) that.options.onScrollEnd.call(that);		// Execute custom code on scroll end
+			}
+
+			if (that.hScrollbar && that.options.hideScrollbar) {
+				if (vendor == 'webkit') that.hScrollbarWrapper.style[transitionDelay] = '300ms';
+				that.hScrollbarWrapper.style.opacity = '0';
+			}
+			if (that.vScrollbar && that.options.hideScrollbar) {
+				if (vendor == 'webkit') that.vScrollbarWrapper.style[transitionDelay] = '300ms';
+				that.vScrollbarWrapper.style.opacity = '0';
+			}
+
+			return;
+		}
+
+		that.scrollTo(resetX, resetY, time || 0);
+	},
+
+	_wheel: function (e) {
+		var that = this,
+			wheelDeltaX, wheelDeltaY,
+			deltaX, deltaY,
+			deltaScale;
+
+		if ('wheelDeltaX' in e) {
+			wheelDeltaX = e.wheelDeltaX / 12;
+			wheelDeltaY = e.wheelDeltaY / 12;
+		} else if('wheelDelta' in e) {
+			wheelDeltaX = wheelDeltaY = e.wheelDelta / 12;
+		} else if ('detail' in e) {
+			wheelDeltaX = wheelDeltaY = -e.detail * 3;
+		} else {
+			return;
+		}
+		
+		if (that.options.wheelAction == 'zoom') {
+			deltaScale = that.scale * Math.pow(2, 1/3 * (wheelDeltaY ? wheelDeltaY / Math.abs(wheelDeltaY) : 0));
+			if (deltaScale < that.options.zoomMin) deltaScale = that.options.zoomMin;
+			if (deltaScale > that.options.zoomMax) deltaScale = that.options.zoomMax;
+			
+			if (deltaScale != that.scale) {
+				if (!that.wheelZoomCount && that.options.onZoomStart) that.options.onZoomStart.call(that, e);
+				that.wheelZoomCount++;
+				
+				that.zoom(e.pageX, e.pageY, deltaScale, 400);
+				
+				setTimeout(function() {
+					that.wheelZoomCount--;
+					if (!that.wheelZoomCount && that.options.onZoomEnd) that.options.onZoomEnd.call(that, e);
+				}, 400);
+			}
+			
+			return;
+		}
+		
+		deltaX = that.x + wheelDeltaX;
+		deltaY = that.y + wheelDeltaY;
+
+		if (deltaX > 0) deltaX = 0;
+		else if (deltaX < that.maxScrollX) deltaX = that.maxScrollX;
+
+		if (deltaY > that.minScrollY) deltaY = that.minScrollY;
+		else if (deltaY < that.maxScrollY) deltaY = that.maxScrollY;
+    
+		if (that.maxScrollY < 0) {
+			that.scrollTo(deltaX, deltaY, 0);
+		}
+	},
+	
+	_transitionEnd: function (e) {
+		var that = this;
+
+		if (e.target != that.scroller) return;
+
+		that._unbind(TRNEND_EV);
+		
+		that._startAni();
+	},
+
+
+	/**
+	*
+	* Utilities
+	*
+	*/
+	_startAni: function () {
+		var that = this,
+			startX = that.x, startY = that.y,
+			startTime = Date.now(),
+			step, easeOut,
+			animate;
+
+		if (that.animating) return;
+		
+		if (!that.steps.length) {
+			that._resetPos(400);
+			return;
+		}
+		
+		step = that.steps.shift();
+		
+		if (step.x == startX && step.y == startY) step.time = 0;
+
+		that.animating = true;
+		that.moved = true;
+		
+		if (that.options.useTransition) {
+			that._transitionTime(step.time);
+			that._pos(step.x, step.y);
+			that.animating = false;
+			if (step.time) that._bind(TRNEND_EV);
+			else that._resetPos(0);
+			return;
+		}
+
+		animate = function () {
+			var now = Date.now(),
+				newX, newY;
+
+			if (now >= startTime + step.time) {
+				that._pos(step.x, step.y);
+				that.animating = false;
+				if (that.options.onAnimationEnd) that.options.onAnimationEnd.call(that);			// Execute custom code on animation end
+				that._startAni();
+				return;
+			}
+
+			now = (now - startTime) / step.time - 1;
+			easeOut = m.sqrt(1 - now * now);
+			newX = (step.x - startX) * easeOut + startX;
+			newY = (step.y - startY) * easeOut + startY;
+			that._pos(newX, newY);
+			if (that.animating) that.aniTime = nextFrame(animate);
+		};
+
+		animate();
+	},
+
+	_transitionTime: function (time) {
+		time += 'ms';
+		this.scroller.style[transitionDuration] = time;
+		if (this.hScrollbar) this.hScrollbarIndicator.style[transitionDuration] = time;
+		if (this.vScrollbar) this.vScrollbarIndicator.style[transitionDuration] = time;
+	},
+
+	_momentum: function (dist, time, maxDistUpper, maxDistLower, size) {
+		var deceleration = 0.0006,
+			speed = m.abs(dist) / time,
+			newDist = (speed * speed) / (2 * deceleration),
+			newTime = 0, outsideDist = 0;
+
+		// Proportinally reduce speed if we are outside of the boundaries
+		if (dist > 0 && newDist > maxDistUpper) {
+			outsideDist = size / (6 / (newDist / speed * deceleration));
+			maxDistUpper = maxDistUpper + outsideDist;
+			speed = speed * maxDistUpper / newDist;
+			newDist = maxDistUpper;
+		} else if (dist < 0 && newDist > maxDistLower) {
+			outsideDist = size / (6 / (newDist / speed * deceleration));
+			maxDistLower = maxDistLower + outsideDist;
+			speed = speed * maxDistLower / newDist;
+			newDist = maxDistLower;
+		}
+
+		newDist = newDist * (dist < 0 ? -1 : 1);
+		newTime = speed / deceleration;
+
+		return { dist: newDist, time: m.round(newTime) };
+	},
+
+	_offset: function (el) {
+		var left = -el.offsetLeft,
+			top = -el.offsetTop;
+			
+		while (el = el.offsetParent) {
+			left -= el.offsetLeft;
+			top -= el.offsetTop;
+		}
+		
+		if (el != this.wrapper) {
+			left *= this.scale;
+			top *= this.scale;
+		}
+
+		return { left: left, top: top };
+	},
+
+	_snap: function (x, y) {
+		var that = this,
+			i, l,
+			page, time,
+			sizeX, sizeY;
+
+		// Check page X
+		page = that.pagesX.length - 1;
+		for (i=0, l=that.pagesX.length; i<l; i++) {
+			if (x >= that.pagesX[i]) {
+				page = i;
+				break;
+			}
+		}
+		if (page == that.currPageX && page > 0 && that.dirX < 0) page--;
+		x = that.pagesX[page];
+		sizeX = m.abs(x - that.pagesX[that.currPageX]);
+		sizeX = sizeX ? m.abs(that.x - x) / sizeX * 500 : 0;
+		that.currPageX = page;
+
+		// Check page Y
+		page = that.pagesY.length-1;
+		for (i=0; i<page; i++) {
+			if (y >= that.pagesY[i]) {
+				page = i;
+				break;
+			}
+		}
+		if (page == that.currPageY && page > 0 && that.dirY < 0) page--;
+		y = that.pagesY[page];
+		sizeY = m.abs(y - that.pagesY[that.currPageY]);
+		sizeY = sizeY ? m.abs(that.y - y) / sizeY * 500 : 0;
+		that.currPageY = page;
+
+		// Snap with constant speed (proportional duration)
+		time = m.round(m.max(sizeX, sizeY)) || 200;
+
+		return { x: x, y: y, time: time };
+	},
+
+	_bind: function (type, el, bubble) {
+		(el || this.scroller).addEventListener(type, this, !!bubble);
+	},
+
+	_unbind: function (type, el, bubble) {
+		(el || this.scroller).removeEventListener(type, this, !!bubble);
+	},
+
+
+	/**
+	*
+	* Public methods
+	*
+	*/
+	destroy: function () {
+		var that = this;
+
+		that.scroller.style[transform] = '';
+
+		// Remove the scrollbars
+		that.hScrollbar = false;
+		that.vScrollbar = false;
+		that._scrollbar('h');
+		that._scrollbar('v');
+
+		// Remove the event listeners
+		that._unbind(RESIZE_EV, window);
+		that._unbind(START_EV);
+		that._unbind(MOVE_EV, window);
+		that._unbind(END_EV, window);
+		that._unbind(CANCEL_EV, window);
+		
+		if (!that.options.hasTouch) {
+			that._unbind('DOMMouseScroll');
+			that._unbind('mousewheel');
+		}
+		
+		if (that.options.useTransition) that._unbind(TRNEND_EV);
+		
+		if (that.options.checkDOMChanges) clearInterval(that.checkDOMTime);
+		
+		if (that.options.onDestroy) that.options.onDestroy.call(that);
+	},
+
+	refresh: function () {
+		var that = this,
+			offset,
+			i, l,
+			els,
+			pos = 0,
+			page = 0;
+
+		if (that.scale < that.options.zoomMin) that.scale = that.options.zoomMin;
+		that.wrapperW = that.wrapper.clientWidth || 1;
+		that.wrapperH = that.wrapper.clientHeight || 1;
+
+		that.minScrollY = -that.options.topOffset || 0;
+		that.scrollerW = m.round(that.scroller.offsetWidth * that.scale);
+		that.scrollerH = m.round((that.scroller.offsetHeight + that.minScrollY) * that.scale);
+		that.maxScrollX = that.wrapperW - that.scrollerW;
+		that.maxScrollY = that.wrapperH - that.scrollerH + that.minScrollY;
+		that.dirX = 0;
+		that.dirY = 0;
+
+		if (that.options.onRefresh) that.options.onRefresh.call(that);
+
+		that.hScroll = that.options.hScroll && that.maxScrollX < 0;
+		that.vScroll = that.options.vScroll && (!that.options.bounceLock && !that.hScroll || that.scrollerH > that.wrapperH);
+
+		that.hScrollbar = that.hScroll && that.options.hScrollbar;
+		that.vScrollbar = that.vScroll && that.options.vScrollbar && that.scrollerH > that.wrapperH;
+
+		offset = that._offset(that.wrapper);
+		that.wrapperOffsetLeft = -offset.left;
+		that.wrapperOffsetTop = -offset.top;
+
+		// Prepare snap
+		if (typeof that.options.snap == 'string') {
+			that.pagesX = [];
+			that.pagesY = [];
+			els = that.scroller.querySelectorAll(that.options.snap);
+			for (i=0, l=els.length; i<l; i++) {
+				pos = that._offset(els[i]);
+				pos.left += that.wrapperOffsetLeft;
+				pos.top += that.wrapperOffsetTop;
+				that.pagesX[i] = pos.left < that.maxScrollX ? that.maxScrollX : pos.left * that.scale;
+				that.pagesY[i] = pos.top < that.maxScrollY ? that.maxScrollY : pos.top * that.scale;
+			}
+		} else if (that.options.snap) {
+			that.pagesX = [];
+			while (pos >= that.maxScrollX) {
+				that.pagesX[page] = pos;
+				pos = pos - that.wrapperW;
+				page++;
+			}
+			if (that.maxScrollX%that.wrapperW) that.pagesX[that.pagesX.length] = that.maxScrollX - that.pagesX[that.pagesX.length-1] + that.pagesX[that.pagesX.length-1];
+
+			pos = 0;
+			page = 0;
+			that.pagesY = [];
+			while (pos >= that.maxScrollY) {
+				that.pagesY[page] = pos;
+				pos = pos - that.wrapperH;
+				page++;
+			}
+			if (that.maxScrollY%that.wrapperH) that.pagesY[that.pagesY.length] = that.maxScrollY - that.pagesY[that.pagesY.length-1] + that.pagesY[that.pagesY.length-1];
+		}
+
+		// Prepare the scrollbars
+		that._scrollbar('h');
+		that._scrollbar('v');
+
+		if (!that.zoomed) {
+			that.scroller.style[transitionDuration] = '0';
+			that._resetPos(400);
+		}
+	},
+
+	scrollTo: function (x, y, time, relative) {
+		var that = this,
+			step = x,
+			i, l;
+
+		that.stop();
+
+		if (!step.length) step = [{ x: x, y: y, time: time, relative: relative }];
+		
+		for (i=0, l=step.length; i<l; i++) {
+			if (step[i].relative) { step[i].x = that.x - step[i].x; step[i].y = that.y - step[i].y; }
+			that.steps.push({ x: step[i].x, y: step[i].y, time: step[i].time || 0 });
+		}
+
+		that._startAni();
+	},
+
+	scrollToElement: function (el, time) {
+		var that = this, pos;
+		el = el.nodeType ? el : that.scroller.querySelector(el);
+		if (!el) return;
+
+		pos = that._offset(el);
+		pos.left += that.wrapperOffsetLeft;
+		pos.top += that.wrapperOffsetTop;
+
+		pos.left = pos.left > 0 ? 0 : pos.left < that.maxScrollX ? that.maxScrollX : pos.left;
+		pos.top = pos.top > that.minScrollY ? that.minScrollY : pos.top < that.maxScrollY ? that.maxScrollY : pos.top;
+		time = time === undefined ? m.max(m.abs(pos.left)*2, m.abs(pos.top)*2) : time;
+
+		that.scrollTo(pos.left, pos.top, time);
+	},
+
+	scrollToPage: function (pageX, pageY, time) {
+		var that = this, x, y;
+		
+		time = time === undefined ? 400 : time;
+
+		if (that.options.onScrollStart) that.options.onScrollStart.call(that);
+
+		if (that.options.snap) {
+			pageX = pageX == 'next' ? that.currPageX+1 : pageX == 'prev' ? that.currPageX-1 : pageX;
+			pageY = pageY == 'next' ? that.currPageY+1 : pageY == 'prev' ? that.currPageY-1 : pageY;
+
+			pageX = pageX < 0 ? 0 : pageX > that.pagesX.length-1 ? that.pagesX.length-1 : pageX;
+			pageY = pageY < 0 ? 0 : pageY > that.pagesY.length-1 ? that.pagesY.length-1 : pageY;
+
+			that.currPageX = pageX;
+			that.currPageY = pageY;
+			x = that.pagesX[pageX];
+			y = that.pagesY[pageY];
+		} else {
+			x = -that.wrapperW * pageX;
+			y = -that.wrapperH * pageY;
+			if (x < that.maxScrollX) x = that.maxScrollX;
+			if (y < that.maxScrollY) y = that.maxScrollY;
+		}
+
+		that.scrollTo(x, y, time);
+	},
+
+	disable: function () {
+		this.stop();
+		this._resetPos(0);
+		this.enabled = false;
+
+		// If disabled after touchstart we make sure that there are no left over events
+		this._unbind(MOVE_EV, window);
+		this._unbind(END_EV, window);
+		this._unbind(CANCEL_EV, window);
+	},
+	
+	enable: function () {
+		this.enabled = true;
+	},
+	
+	stop: function () {
+		if (this.options.useTransition) this._unbind(TRNEND_EV);
+		else cancelFrame(this.aniTime);
+		this.steps = [];
+		this.moved = false;
+		this.animating = false;
+	},
+	
+	zoom: function (x, y, scale, time) {
+		var that = this,
+			relScale = scale / that.scale;
+
+		if (!that.options.useTransform) return;
+
+		that.zoomed = true;
+		time = time === undefined ? 200 : time;
+		x = x - that.wrapperOffsetLeft - that.x;
+		y = y - that.wrapperOffsetTop - that.y;
+		that.x = x - x * relScale + that.x;
+		that.y = y - y * relScale + that.y;
+
+		that.scale = scale;
+		that.refresh();
+
+		that.x = that.x > 0 ? 0 : that.x < that.maxScrollX ? that.maxScrollX : that.x;
+		that.y = that.y > that.minScrollY ? that.minScrollY : that.y < that.maxScrollY ? that.maxScrollY : that.y;
+
+		that.scroller.style[transitionDuration] = time + 'ms';
+		that.scroller.style[transform] = 'translate(' + that.x + 'px,' + that.y + 'px) scale(' + scale + ')' + translateZ;
+		that.zoomed = false;
+	},
+	
+	isReady: function () {
+		return !this.moved && !this.zoomed && !this.animating;
+	}
+};
+
+function prefixStyle (style) {
+	if ( vendor === '' ) return style;
+
+	style = style.charAt(0).toUpperCase() + style.substr(1);
+	return vendor + style;
+}
+
+dummyStyle = null;	// for the sake of it
+
+if (typeof exports !== 'undefined') exports.iScroll = iScroll;
+else window.iScroll = iScroll;
+
+})(window, document);

+ 120 - 0
sites/all/themes/figureslibres/clameurs/js/libs/jquery.jscrollpane.css

@@ -0,0 +1,120 @@
+/*
+ * CSS Styles that are needed by jScrollPane for it to operate correctly.
+ *
+ * Include this stylesheet in your site or copy and paste the styles below into your stylesheet - jScrollPane
+ * may not operate correctly without them.
+ */
+
+.jspContainer
+{
+	overflow: hidden;
+	position: relative;
+}
+
+.jspPane
+{
+	position: absolute;
+}
+
+.jspVerticalBar
+{
+	position: absolute;
+	top: 0;
+	right: 0;
+	width: 16px;
+	height: 100%;
+	background: red;
+}
+
+.jspHorizontalBar
+{
+	position: absolute;
+	bottom: 0;
+	left: 0;
+	width: 100%;
+	height: 16px;
+	background: red;
+}
+
+.jspVerticalBar *,
+.jspHorizontalBar *
+{
+	margin: 0;
+	padding: 0;
+}
+
+.jspCap
+{
+	display: none;
+}
+
+.jspHorizontalBar .jspCap
+{
+	float: left;
+}
+
+.jspTrack
+{
+	background: #dde;
+	position: relative;
+}
+
+.jspDrag
+{
+	background: #bbd;
+	position: relative;
+	top: 0;
+	left: 0;
+	cursor: pointer;
+}
+
+.jspHorizontalBar .jspTrack,
+.jspHorizontalBar .jspDrag
+{
+	float: left;
+	height: 100%;
+}
+
+.jspArrow
+{
+	background: #50506d;
+	text-indent: -20000px;
+	display: block;
+	cursor: pointer;
+}
+
+.jspArrow.jspDisabled
+{
+	cursor: default;
+	background: #80808d;
+}
+
+.jspVerticalBar .jspArrow
+{
+	height: 16px;
+}
+
+.jspHorizontalBar .jspArrow
+{
+	width: 16px;
+	float: left;
+	height: 100%;
+}
+
+.jspVerticalBar .jspArrow:focus
+{
+	outline: none;
+}
+
+.jspCorner
+{
+	background: #eeeef4;
+	float: left;
+	height: 100%;
+}
+
+/* Yuk! CSS Hack for IE6 3 pixel bug :( */
+* html .jspCorner
+{
+	margin: 0 -3px 0 0;
+}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 7 - 0
sites/all/themes/figureslibres/clameurs/js/libs/jquery.jscrollpane.min.js


+ 84 - 0
sites/all/themes/figureslibres/clameurs/js/libs/jquery.mousewheel.js

@@ -0,0 +1,84 @@
+/*! Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net)
+ * Licensed under the MIT License (LICENSE.txt).
+ *
+ * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
+ * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
+ * Thanks to: Seamus Leahy for adding deltaX and deltaY
+ *
+ * Version: 3.0.6
+ * 
+ * Requires: 1.2.2+
+ */
+
+(function($) {
+
+var types = ['DOMMouseScroll', 'mousewheel'];
+
+if ($.event.fixHooks) {
+    for ( var i=types.length; i; ) {
+        $.event.fixHooks[ types[--i] ] = $.event.mouseHooks;
+    }
+}
+
+$.event.special.mousewheel = {
+    setup: function() {
+        if ( this.addEventListener ) {
+            for ( var i=types.length; i; ) {
+                this.addEventListener( types[--i], handler, false );
+            }
+        } else {
+            this.onmousewheel = handler;
+        }
+    },
+    
+    teardown: function() {
+        if ( this.removeEventListener ) {
+            for ( var i=types.length; i; ) {
+                this.removeEventListener( types[--i], handler, false );
+            }
+        } else {
+            this.onmousewheel = null;
+        }
+    }
+};
+
+$.fn.extend({
+    mousewheel: function(fn) {
+        return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
+    },
+    
+    unmousewheel: function(fn) {
+        return this.unbind("mousewheel", fn);
+    }
+});
+
+
+function handler(event) {
+    var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true, deltaX = 0, deltaY = 0;
+    event = $.event.fix(orgEvent);
+    event.type = "mousewheel";
+    
+    // Old school scrollwheel delta
+    if ( orgEvent.wheelDelta ) { delta = orgEvent.wheelDelta/120; }
+    if ( orgEvent.detail     ) { delta = -orgEvent.detail/3; }
+    
+    // New school multidimensional scroll (touchpads) deltas
+    deltaY = delta;
+    
+    // Gecko
+    if ( orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
+        deltaY = 0;
+        deltaX = -1*delta;
+    }
+    
+    // Webkit
+    if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY/120; }
+    if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = -1*orgEvent.wheelDeltaX/120; }
+    
+    // Add event and delta to the front of the arguments
+    args.unshift(event, delta, deltaX, deltaY);
+    
+    return ($.event.dispatch || $.event.handle).apply(this, args);
+}
+
+})(jQuery);

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1 - 0
sites/all/themes/figureslibres/clameurs/js/libs/modernizr-2.6.1.min.js


+ 76 - 0
sites/all/themes/figureslibres/clameurs/js/libs/mwheelIntent.js

@@ -0,0 +1,76 @@
+/**
+ * @author trixta
+ * @version 1.2
+ */
+(function($){
+
+var mwheelI = {
+			pos: [-260, -260]
+		},
+	minDif 	= 3,
+	doc 	= document,
+	root 	= doc.documentElement,
+	body 	= doc.body,
+	longDelay, shortDelay
+;
+
+function unsetPos(){
+	if(this === mwheelI.elem){
+		mwheelI.pos = [-260, -260];
+		mwheelI.elem = false;
+		minDif = 3;
+	}
+}
+
+$.event.special.mwheelIntent = {
+	setup: function(){
+		var jElm = $(this).bind('mousewheel', $.event.special.mwheelIntent.handler);
+		if( this !== doc && this !== root && this !== body ){
+			jElm.bind('mouseleave', unsetPos);
+		}
+		jElm = null;
+        return true;
+    },
+	teardown: function(){
+        $(this)
+			.unbind('mousewheel', $.event.special.mwheelIntent.handler)
+			.unbind('mouseleave', unsetPos)
+		;
+        return true;
+    },
+    handler: function(e, d){
+		var pos = [e.clientX, e.clientY];
+		if( this === mwheelI.elem || Math.abs(mwheelI.pos[0] - pos[0]) > minDif || Math.abs(mwheelI.pos[1] - pos[1]) > minDif ){
+            mwheelI.elem = this;
+			mwheelI.pos = pos;
+			minDif = 250;
+			
+			clearTimeout(shortDelay);
+			shortDelay = setTimeout(function(){
+				minDif = 10;
+			}, 200);
+			clearTimeout(longDelay);
+			longDelay = setTimeout(function(){
+				minDif = 3;
+			}, 1500);
+			e = $.extend({}, e, {type: 'mwheelIntent'});
+            return $.event.handle.apply(this, arguments);
+		}
+    }
+};
+$.fn.extend({
+	mwheelIntent: function(fn) {
+		return fn ? this.bind("mwheelIntent", fn) : this.trigger("mwheelIntent");
+	},
+	
+	unmwheelIntent: function(fn) {
+		return this.unbind("mwheelIntent", fn);
+	}
+});
+
+$(function(){
+	body = doc.body;
+	//assume that document is always scrollable, doesn't hurt if not
+	$(doc).bind('mwheelIntent.mwheelIntentDefault', $.noop);
+});
+})(jQuery);

+ 3 - 6
sites/all/themes/gui/jee/js/jee.js → sites/all/themes/figureslibres/clameurs/js/script.js

@@ -1,4 +1,7 @@
 
+// @codekit-prepend "gui.js"
+
+
 Drupal.behaviors.init_theme = function (context) {
   // Growl-style system messages
   $('#messages-and-help > div.messages:not(.processed)')
@@ -22,9 +25,3 @@ Drupal.behaviors.init_theme = function (context) {
       }
     });
 };
-
-
-jQuery(document).ready(function($) {
-  console.log('Hello Jee');
-
-});

+ 254 - 0
sites/all/themes/figureslibres/clameurs/less/styles.less

@@ -0,0 +1,254 @@
+/** 
+ * Primary Drupal Styles
+ * Author: g-u-i.net
+ */
+
+@import "gui.less";
+
+
+body{font-size:16px; font-family: Arial, "MS Trebuchet", sans-serif;}
+
+
+a{color: #007BC2; text-decoration: none;}
+
+
+h1{font-size:1.6em;}
+h2{font-size:1.5em;}
+h3{font-size:1.4em;}
+h4{font-size:1.3em;}
+h5{font-size:1.2em;}
+h6{font-size:1.1em;}
+
+input{font-family: Arial, "MS Trebuchet", sans-serif; font-size:0.8em;}
+
+
+
+/** layout */
+#center, #sidebar-first, #sidebar-second, .footer-block .region, .header-block{ display:inline-block; vertical-align: top;}
+
+body.two-sidebars #center { width: 54%; }
+body.sidebar-first #center { width: 73%; }
+body.sidebar-second #center { width: 80%; }
+body.no-sidebars #center { width: 100%; }
+
+#sidebar-first { width: 24%; }
+#sidebar-second { width: 18%; }
+
+#header, #main, #footer{ padding:1em; }
+
+body{background-color: #DFDFDF;}
+
+#container{width:1024px; margin:0 auto; background-color: #FFF;}
+
+#header, #footer{background-color: #535353; color:#fff;}
+
+.block, .panel-pane{
+	border: 1px solid #D1D1D1;  padding:0.5em; margin:0.5em;
+	-moz-border-radius: 5px;
+	-webkit-border-radius: 5px;
+	border-radius: 5px;
+	background-color: #EAEAEA;
+}
+
+.footer-block .block{
+	background-color: #353535; border: 1px solid #1a1a1a;
+}
+#footer-bottom{ text-align: center;}
+#footer-bottom .block{ background-color: transparent; border: 0 solid #999; font-size:0.7em;}
+
+#content{padding:1em;}
+
+.logo h1, h1.page-title{font-size:2em;}
+
+#header ul.menu li, 
+#content-top ul.menu li, 
+#content-bottom ul.menu li, 
+#footer ul.menu li{display:inline-block; vertical-align:top; }
+
+.views-row{margin-bottom:1em;}
+
+.views-field-title{font-size:1.1em; font-weight:bold;}
+.views-field-title a{color: #444444; text-decoration:none;}
+
+li, .item-list ul li{list-style: none inside url(); margin-left:0;}
+
+/** Messages. */
+
+div.messages {
+  padding: 9px;
+  margin: 0.5em 0 0;
+  color: #036;
+  background: #bdf;
+  border: 1px solid #ace;
+	-moz-border-radius: 5px;
+		-webkit-border-radius: 5px;
+		border-radius: 5px;
+		
+}
+
+div.warning {
+  color: #840;
+  background: #fe6;
+  border-color: #ed5;
+}
+
+div.error {
+  color: #fff;
+  background: #e63;
+  border-color: #d52;
+}
+
+div.error p.error {
+  color: #333;
+}
+
+div.status {
+  color: #360;
+  background: #cf8;
+  border-color: #be7;
+}
+
+
+
+/** Tab navigation */
+
+ul.primary, .views-admin-links ul {
+	font:13px/1.231 sans-serif; *font-size:small;	
+  border-collapse: collapse;
+  padding: 0 0 0 1em; /* LTR */
+  white-space: nowrap;
+  list-style: none;
+  margin: 5px;
+  height: auto;
+  line-height: normal;
+  border-bottom: 1px solid #bbb;
+}
+ul.primary li, .views-admin-links li{
+  display: inline;
+		
+}
+ul.primary li a, .views-admin-links li a {
+  background-color: #ddd;
+  border-color: #bbb;
+  border-width: 1px;
+  border-style: solid solid none solid;
+  height: auto;
+  margin-right: 0.5em; /* LTR */
+  padding: 0 1em;
+  text-decoration: none;
+	-moz-border-radius-topleft: 5px;
+		-webkit-border-top-left-radius: 5px;
+		border-top-left-radius: 5px;
+	-moz-border-radius-topright: 5px;
+		-webkit-border-top-right-radius: 5px;
+		border-top-right-radius: 5px;
+}
+ul.primary li.active a {
+  background-color: #fff;
+  border: 1px solid #bbb;
+  border-bottom: #fff 1px solid;
+}
+ul.primary li a:hover, .views-admin-links li a:hover{
+  background-color: #eee;
+  border-color: #ccc;
+  border-bottom-color: #eee;
+}
+
+ul.secondary {
+  border-bottom: 1px solid #bbb;
+  padding: 0.5em 1em;
+  margin: 5px;
+}
+ul.secondary li {
+  display: inline;
+  padding: 0 1em;
+  border-right: 1px solid #ccc; /* LTR */
+}
+ul.secondary a {
+  padding: 0;
+  text-decoration: none;
+}
+ul.secondary a.active {
+  border-bottom: 4px solid #999;
+}
+
+
+/** Form */
+
+#node-form .form-region-main{border-right: 1px solid #BFBFBF; padding-right:10px; width:68%;}
+#node-form .form-region-main label{float:left; min-width:25%;}
+#node-form .form-region-main input.form-text{width:40%;}
+
+#node-form .form-region-right{padding-left:5px;}
+#node-form .form-region-right label{float:left; min-width:35%;}
+#node-form .form-region-right input.form-text{width:60%;}
+
+#node-form .form-region-main label.option, #node-form .form-region-right label.option{float: none;}
+
+
+form:not(	#views-ui-config-item-form ) .form-item {
+    position:relative;
+/*    padding:9px;*/
+    }
+
+	form:not(	#views-ui-config-item-form ) .form-item .description{
+	  position:absolute;
+	  bottom:140%;
+/*	  right:-15px;*/
+	  z-index:5;
+		left:50%;
+	  color:#1A1A1A;
+		line-height:1.1;
+	  background:url(../images/popup.png) 50% 100% no-repeat;
+	  width:240px;
+	  margin:0px 0px -15px;
+	  padding:9px 10px 20px;
+	  display:none;
+		border-top: 1px solid #9F9F9F;
+	  }
+ form:not(	#views-ui-config-item-form )  .form-item:hover {
+    z-index:1;
+    height:auto; /* Fix for flicker in IE7 */
+    }
+ form:not(	#views-ui-config-item-form )  .form-item:hover > .description { display:block; }
+
+
+fieldset{
+	border: 1px solid #D4D4D4;
+	padding:10px;
+	margin-bottom:1em;
+	-moz-border-radius: 5px;
+		-webkit-border-radius: 5px;
+		border-radius: 5px;
+}
+
+fieldset legend{
+	font-size:1.6em;
+}
+
+input.form-text{max-width:95%;}
+
+/** TABLE */
+
+table{width:100%; 
+	-moz-border-radius: 5px;
+	-webkit-border-radius: 5px;
+	border-radius: 5px;
+}
+table thead th{
+	background-color: #CCC;
+	padding:0.5em 1em;
+	text-align: left;
+}
+table tbody tr.even, table tbody tr.odd{
+	border-bottom: 0 solid #CCCCCC;
+	padding: 0.1em 0.6em;
+}
+table tbody tr.even{background-color: #EEE;}
+table tbody tr.odd{background-color: #E5E5E5;}
+
+table tbody td{
+	padding:0.5em 1em;
+	text-align: left;
+}
+td.active {background-color: transparent;}

+ 21 - 32
sites/all/themes/gui/jee/css/wysiwyg.scss → sites/all/themes/figureslibres/clameurs/less/wysiwyg.less

@@ -1,7 +1,5 @@
 /* LISIBILITY */
-@import "communs.scss";
-@import "fonts.scss";
-
+@import "fonts.less";
 
 *{font-size:14px;}
 div{border: 1px dashed #D4D4D4;}
@@ -11,36 +9,27 @@ h1:before, h2:before, h3:before, h4:before, h5:before, h6:before{
 	 color:blue; font-weight: normal; font-size:10px; vertical-align: super;
 }
 
-h2{
-	// font-size:24px;
-	&:before{content:"h2 ";}
-}
-h3{
-	// font-size:18px;
-	&:before{content:"h3 ";}
-}
-h4{
-	// font-size:16px;
-	&:before{content:"h4 ";}
-}
-h5{
-	// font-size:14px;
-	&:before{content:"h5 ";}
-}
-h6{
-	// font-size:12px;
-	&:before{content:"h6 ";}
-}
+h1:before{content:"h1 ";}
+h2:before{content:"h2 ";}
+h3:before{content:"h3 ";}
+h4:before{content:"h4 ";}
+h5:before{content:"h5 ";}
+h6:before{content:"h6 ";}
 
-br:after{content:"·"; color:red; border: 1px solid #999;}
 
-img{height:auto; margin:0.5em 0; max-width:99%;}
-p{ border: 1px dashed #848484; }
-div{border: 1px solid #1A1A1A;}
+h2{font-size:24px; .h2;}
+h3{font-size:18px; .h3;}
+h4{font-size:16px; .h4;}
+h5{font-size:14px; .h5;}
+h6{font-size:12px; .h6;}
+
+
+.side-note-4{.h4;}
+.side-note-5{.h5;}
 
+br:after{content:"·"; color:red; border: 1px solid #999;}
 
 /* LAYOUT AND GRAPHICS */
-/*
 #full{ width:99%; }
 #demi{ width:47%; }
 #tiers{ width:29%; }
@@ -51,13 +40,12 @@ div{border: 1px solid #1A1A1A;}
 
 
 img{height:auto; margin:0.5em 0;}
-p{ border: 1px dashed #848484; }
+p{ .p; border: 1px dashed #848484; }
 div{border: 1px solid #1A1A1A;}
 
-
 img,p,div{ position:relative;
 	&:before{font-size:10px; color:red; background-color: #1A1A1A; position:absolute; top:0; z-index:3000;}
-
+		
 	&.full{#full; &:before{content:" full ";}}
 	&.demi{ #demi; margin-right:2%; &:before{content:" demi "; right:0;}}
 	&.tiers{ #tiers; margin-right:2%; &:before{content:" tiers "; right:0;}}
@@ -74,6 +62,7 @@ img,p,div{ position:relative;
 	&.quart-left{ #quart; #left;  &:before{content:" quart-left "; left:0;}}
 	&.quart-right{ #quart; #right;  &:before{content:" quart-right "; right:0;}}
 	&.quart-center{ #quart; #center;  &:before{content:" quart-center "; right:0;}}
+	
 
+	
 }
-*/

BIN
sites/all/themes/figureslibres/clameurs/logo-lite-alpha.png


BIN
sites/all/themes/figureslibres/clameurs/logo-lite.png


BIN
sites/all/themes/figureslibres/clameurs/logo.png


+ 0 - 0
sites/all/themes/gui/jee/maintenance-page.tpl.php → sites/all/themes/figureslibres/clameurs/maintenance-page.tpl.php


+ 0 - 0
sites/all/themes/gui/jee/plugins/layouts/html5-2-col/html5-2-col.css → sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-2-col/html5-2-col.css


+ 0 - 0
sites/all/themes/gui/jee/plugins/layouts/html5-2-col/html5-2-col.inc → sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-2-col/html5-2-col.inc


+ 0 - 0
sites/all/themes/gui/jee/plugins/layouts/html5-2-col/html5-2-col.png → sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-2-col/html5-2-col.png


+ 0 - 0
sites/all/themes/gui/jee/plugins/layouts/html5-2-col/panels-html5-2-col.tpl.php → sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-2-col/panels-html5-2-col.tpl.php


+ 0 - 0
sites/all/themes/gui/jee/plugins/layouts/html5-basic/html5-basic.css → sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-basic/html5-basic.css


+ 0 - 0
sites/all/themes/gui/jee/plugins/layouts/html5-basic/html5-basic.inc → sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-basic/html5-basic.inc


+ 0 - 0
sites/all/themes/gui/jee/plugins/layouts/html5-basic/html5-basic.png → sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-basic/html5-basic.png


+ 0 - 0
sites/all/themes/gui/jee/plugins/layouts/html5-basic/panels-html5-basic.tpl.php → sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-basic/panels-html5-basic.tpl.php


+ 0 - 0
sites/all/themes/gui/jee/plugins/layouts/html5-custom-2/html5-custom-2.css → sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-custom-2/html5-custom-2.css


+ 0 - 0
sites/all/themes/gui/jee/plugins/layouts/html5-custom-2/html5-custom-2.inc → sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-custom-2/html5-custom-2.inc


+ 0 - 0
sites/all/themes/gui/jee/plugins/layouts/html5-custom-2/html5-custom-2.png → sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-custom-2/html5-custom-2.png


+ 0 - 0
sites/all/themes/gui/jee/plugins/layouts/html5-custom-2/panels-html5-custom-2.tpl.php → sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-custom-2/panels-html5-custom-2.tpl.php


+ 0 - 0
sites/all/themes/gui/jee/plugins/layouts/html5-custom/html5-custom.css → sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-custom/html5-custom.css


+ 0 - 0
sites/all/themes/gui/jee/plugins/layouts/html5-custom/html5-custom.inc → sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-custom/html5-custom.inc


+ 0 - 0
sites/all/themes/gui/jee/plugins/layouts/html5-custom/html5-custom.png → sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-custom/html5-custom.png


+ 0 - 0
sites/all/themes/gui/jee/plugins/layouts/html5-custom/panels-html5-custom.tpl.php → sites/all/themes/figureslibres/clameurs/plugins/layouts/html5-custom/panels-html5-custom.tpl.php


+ 0 - 0
sites/all/themes/gui/jee/plugins/styles/minimum.inc → sites/all/themes/figureslibres/clameurs/plugins/styles/minimum.inc


+ 0 - 0
sites/all/themes/gui/jee/preprocess/block.pre.php → sites/all/themes/figureslibres/clameurs/preprocess/block.pre.php


+ 0 - 0
sites/all/themes/gui/jee/preprocess/comment-wrapper.pre.php → sites/all/themes/figureslibres/clameurs/preprocess/comment-wrapper.pre.php


+ 0 - 0
sites/all/themes/gui/jee/preprocess/field.pre.php → sites/all/themes/figureslibres/clameurs/preprocess/field.pre.php


+ 27 - 29
sites/all/themes/gui/jee/preprocess/html.pre.php → sites/all/themes/figureslibres/clameurs/preprocess/html.pre.php

@@ -1,4 +1,4 @@
-<?php
+<?php 
 
 if (module_exists('rdf')) {
   $vars['doctype'] = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML+RDFa 1.1//EN">' . "\n";
@@ -16,7 +16,7 @@ $heads = array();
 $heads['HandheldFriendly'] = array(
   '#tag' => 'meta',
   '#attributes' => array(
-    'name' => 'HandheldFriendly',
+    'name' => 'HandheldFriendly', 
     'content' => 'true',
   ),
 );
@@ -24,7 +24,7 @@ $heads['HandheldFriendly'] = array(
 
 
 #  Mobile Viewport Fix
-# j.mp/mobileviewport & davidbcalhoun.com/2010/viewport-metatag
+# j.mp/mobileviewport & davidbcalhoun.com/2010/viewport-metatag 
 # device-width : Occupy full width of the screen in its current orientation
 # initial-scale = 1.0 retains dimensions instead of zooming out if page height > device height
 # maximum-scale = 1.0 retains dimensions instead of zooming in if page width < device width
@@ -32,7 +32,7 @@ $heads['HandheldFriendly'] = array(
 $heads['viewport'] = array(
   '#tag' => 'meta',
   '#attributes' => array(
-    'name' => 'viewport',
+    'name' => 'viewport', 
     'content' => 'width=device-width,initial-scale=1',
   ),
 );
@@ -48,7 +48,7 @@ $heads['viewport'] = array(
 $heads['icon'] = array(
   '#tag' => 'link',
   '#attributes' => array(
-    'href' => base_path() . path_to_theme() .'/icon.png',
+    'href' => base_path() . path_to_theme() .'/icon.png', 
     'rel' => 'shortcut icon',
     'type' => 'image/png',
   ),
@@ -57,7 +57,7 @@ $heads['icon'] = array(
 $heads['apple-touch-icon'] = array(
   '#tag' => 'link',
   '#attributes' => array(
-    'href' => base_path() . path_to_theme() .'/apple-touch-icon.png',
+    'href' => base_path() . path_to_theme() .'/apple-touch-icon.png', 
     'rel' => 'apple-touch-icon',
   ),
 );
@@ -72,39 +72,37 @@ foreach ($heads as $type=>$head)
 
 # add body classes
 if(isset($vars['node'])){
-
+	
 	# from taxonomy
 	foreach ($vars['node']->taxonomy as $tid => $term) {
 		$vars['classes_array'][] = 'term-vid-'. $term->vid .' term-tid-'. $tid;
 	}
-
+	
 	# from menu
 	$mlid = db_result(db_query("SELECT mlid FROM {menu_links} WHERE link_path = '%s'", 'node/'. $vars['node']->nid));
-      // Now get the menu related information.
-      if (!empty($mlid) || !empty($node->menu['mlid']) || !empty($node->menu['plid'])) {
-        $menu_link = menu_link_load($mlid);
-        // krumo($menu_link);
-	 $vars['classes_array'][] = ' mlid-'. $menu_link['mlid'] .' plid-'. $menu_link['plid'];
+  // Now get the menu related information.
+  if (!empty($mlid) || !empty($node->menu['mlid']) || !empty($node->menu['plid'])) {
+    $menu_link = menu_link_load($mlid);
+		// krumo($menu_link);
+		$vars['classes_array'][] = ' mlid-'. $menu_link['mlid'] .' plid-'. $menu_link['plid'];
 	}
 }
 
 
 # theme layout settings
 
-// if(isset($vars['page']['sidebar_first']) && isset($vars['page']['sidebar_second'])){
-// 	$layout = 'two-sidebars';
-// }else if(isset($vars['page']['sidebar_first']) || isset($vars['page']['sidebar_second'])){
-// 	$layout = isset($vars['page']['sidebar_first']) ? 'sidebar-first' : 'sidebar-second';
-// }else{
-// 	$layout = 'no-sidebar';
-// }
-// $vars['classes_array'][] = $layout;
-
-// if (theme_get_setting('layout_enable_settings') == 'on') {
-//   $method = theme_get_setting('layout_method');
-// 	$vars['method'] = $method;
-// 	$vars['classes_array'][] .= ' layout-method-'.$method;
-
-// }
+if(isset($vars['page']['sidebar_first']) && isset($vars['page']['sidebar_second'])){
+	$layout = 'two-sidebars';	
+}else if(isset($vars['page']['sidebar_first']) || isset($vars['page']['sidebar_second'])){
+	$layout = isset($vars['page']['sidebar_first']) ? 'sidebar-first' : 'sidebar-second';
+}else{
+	$layout = 'no-sidebar';
+}
+$vars['classes_array'][] = $layout;
 
-// $vars['off_canvas_menu'] = block_get_blocks_by_region('off_canvas_menu');
+if (theme_get_setting('layout_enable_settings') == 'on') {
+  $method = theme_get_setting('layout_method');	
+	$vars['method'] = $method;
+	$vars['classes_array'][] .= ' layout-method-'.$method;
+	
+}

+ 7 - 0
sites/all/themes/figureslibres/clameurs/preprocess/node.pre.php

@@ -0,0 +1,7 @@
+<?php 
+
+//dsm($vars);
+
+$vars['theme_hook_suggestions'][] = 'node__'.$vars['view_mode'];
+$vars['theme_hook_suggestions'][] = 'node__' . $vars['type'] . '__' . $vars['view_mode'];
+

+ 2 - 6
sites/all/themes/gui/jee/preprocess/page.pre.php → sites/all/themes/figureslibres/clameurs/preprocess/page.pre.php

@@ -1,4 +1,4 @@
-<?php
+<?php 
 
 /**
  * @file template.preprocess-page.inc
@@ -25,7 +25,7 @@ if ($vars['site_name']) {
 //   $site_fields[] = check_plain($vars['site_slogan']);
 // }
 
-$vars['site_title'] = '<h1 id="site-name"><a href="'.$vars["front_page"].'">'. implode(' ', $site_fields) .'</a></h1>';
+$vars['site_title'] = '<h1>'. implode(' ', $site_fields) .'</h1>';
 
 
 
@@ -35,7 +35,3 @@ if (theme_get_setting('layout_enable_settings') == 'on')
 
 $vars['primary_local_tasks'] = menu_primary_local_tasks();
 $vars['secondary_local_tasks'] = menu_secondary_local_tasks();
-
-
-if($vars['is_front'])
-  $vars['title'] = false;

+ 0 - 0
sites/all/themes/gui/jee/preprocess/region.pre.php → sites/all/themes/figureslibres/clameurs/preprocess/region.pre.php


+ 0 - 0
sites/all/themes/gui/jee/readme.txt → sites/all/themes/figureslibres/clameurs/readme.txt


BIN
sites/all/themes/figureslibres/clameurs/screenshot.png


+ 61 - 0
sites/all/themes/figureslibres/clameurs/template.php

@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * @file template.php
+ *
+ */
+
+/**
+ * Implementation of hook_theme
+ */
+function clameurs_theme() {
+	$path = drupal_get_path('theme', 'clameurs');
+	# Register theme function for the system_settings_form.
+  return array(
+    'system_settings_form' => array(
+      'arguments' => array('form' => NULL, 'key' => 'clameurs'),
+    ),
+  );
+
+  # Include the theme settings.
+  include($path .'/inc/template.theme-settings.inc');
+}
+
+/**
+ * Implementation of hook_preprocess()
+ *
+ * This function checks to see if a hook has a preprocess file associated with
+ * it, and if so, loads it.
+ *
+ * @param $vars
+ *   An array of variables to pass to the theme template.
+ * @param $hook
+ *   The name of the template being rendered.
+ */
+function clameurs_preprocess(&$vars, $hook) {
+	global $theme, $theme_info, $user, $language;
+
+  $vars['is_admin'] = in_array('admin', $user->roles);
+  $vars['logged_in'] = ($user->uid > 0) ? TRUE : FALSE;
+  $vars['theme_path'] = base_path() . path_to_theme() .'/';
+
+	// $vars['classes_array'][] = $hook.' '.$hook.'-'.$vars['zebra'];
+
+  # Include preprocess functions if and when required.
+	$path = drupal_get_path('theme', 'clameurs');
+	$file = $path .'/preprocess/'. str_replace('_', '-', $hook) .'.pre.php';
+  if (is_file($file)) {
+    include($file);
+  }
+}
+
+$path = drupal_get_path('theme', 'clameurs');
+
+# Include custom functions.
+include_once($path .'/inc/template.custom-functions.inc');
+
+# Include theme overrides.
+include_once($path .'/inc/template.theme-overrides.inc');
+
+# Include some jQuery.
+//  include_once(drupal_get_path('theme', 'clameurs') .'/inc/template.theme-js.inc');

+ 0 - 0
sites/all/themes/gui/jee/templates/field.tpl.php → sites/all/themes/figureslibres/clameurs/templates/field.tpl.php


+ 18 - 20
sites/all/themes/gui/jee/templates/html.tpl.php → sites/all/themes/figureslibres/clameurs/templates/html.tpl.php

@@ -1,4 +1,4 @@
-<?php
+<?php 
 /**
  * @file
  * Default theme implementation to display the basic html structure of a single
@@ -55,44 +55,42 @@
 		<!-- remove the no-js as fast as possible -->
 		<script>(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement)</script>
 
-		<!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame
+		<!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame 
 		     Remove this if you use the .htaccess -->
 		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
 
 		<?php print $head; ?>
-
+		
 		<title><?php print $head_title; ?></title>
 		<?php print $styles; ?>
 
-
+	  
 	  <!-- All JavaScript at the bottom, except for Modernizr / Respond.
 	       Modernizr enables HTML5 elements & feature detects; Respond is a polyfill for min/max-width CSS3 Media Queries
 	       For optimal performance, use a custom Modernizr build: www.modernizr.com/download/ -->
-	  <script src="<?php print $theme_path ?>/bower_components/modernizr/modernizr.js" type="text/javascript"></script>
+	  <script src="<?php print $theme_path ?>/js/libs/modernizr-2.6.1.min.js" type="text/javascript"></script>
 
 
 		<!--[if lt IE 9]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
 	</head>
-
+	
 	<body class="<?php print $classes; ?>"<?php print $attributes; ?>>
 	  <div id="skip-link">
 	    <a href="#main-content" class="element-invisible element-focusable"><?php print t('Skip to main content'); ?></a>
 	  </div>
 
+    <div id="container">		 		
+	
+		  <?php print $page_top; ?>
+		  <?php print $page; ?>
+		  <?php print $page_bottom; ?>
+	
+    </div> 
+    <!-- /container -->
 
-        <div id="root">
-          <?php print $page_top; ?>
-          <?php print $page; ?>
-          <?php print $page_bottom; ?>
-        </div>
-
-        <div id="main-bg-wrapper">
-          <div id="main-bg"></div>
-        </div>
-
-        <!-- Javascript at the bottom for fast page loading -->
-        <?php print $scripts; ?>
-
+		<!-- Javascript at the bottom for fast page loading -->
+		<?php print $scripts; ?>
+		
 
 	  <!-- Prompt IE 6 users to install Chrome Frame. Remove this if you want to support IE 6.
 	       chromium.org/developers/how-tos/chrome-frame-getting-started -->
@@ -102,5 +100,5 @@
 	  <![endif]-->
 
 	</body>
-
+	
 </html>

+ 175 - 0
sites/all/themes/figureslibres/clameurs/templates/page.tpl.php

@@ -0,0 +1,175 @@
+<?php
+
+/**
+ * @file
+ * Default theme implementation to display a single Drupal page.
+ *
+ * Available variables:
+ *
+ * General utility variables:
+ * - $base_path: The base URL path of the Drupal installation. At the very
+ *   least, this will always default to /.
+ * - $directory: The directory the template is located in, e.g. modules/system
+ *   or themes/bartik.
+ * - $is_front: TRUE if the current page is the front page.
+ * - $logged_in: TRUE if the user is registered and signed in.
+ * - $is_admin: TRUE if the user has permission to access administration pages.
+ *
+ * Site identity:
+ * - $front_page: The URL of the front page. Use this instead of $base_path,
+ *   when linking to the front page. This includes the language domain or
+ *   prefix.
+ * - $logo: The path to the logo image, as defined in theme configuration.
+ * - $site_name: The name of the site, empty when display has been disabled
+ *   in theme settings.
+ * - $site_slogan: The slogan of the site, empty when display has been disabled
+ *   in theme settings.
+ *
+ * Navigation:
+ * - $main_menu (array): An array containing the Main menu links for the
+ *   site, if they have been configured.
+ * - $secondary_menu (array): An array containing the Secondary menu links for
+ *   the site, if they have been configured.
+ * - $breadcrumb: The breadcrumb trail for the current page.
+ *
+ * Page content (in order of occurrence in the default page.tpl.php):
+ * - $title_prefix (array): An array containing additional output populated by
+ *   modules, intended to be displayed in front of the main title tag that
+ *   appears in the template.
+ * - $title: The page title, for use in the actual HTML content.
+ * - $title_suffix (array): An array containing additional output populated by
+ *   modules, intended to be displayed after the main title tag that appears in
+ *   the template.
+ * - $messages: HTML for status and error messages. Should be displayed
+ *   prominently.
+ * - $tabs (array): Tabs linking to any sub-pages beneath the current page
+ *   (e.g., the view and edit tabs when displaying a node).
+ * - $action_links (array): Actions local to the page, such as 'Add menu' on the
+ *   menu administration interface.
+ * - $feed_icons: A string of all feed icons for the current page.
+ * - $node: The node object, if there is an automatically-loaded node
+ *   associated with the page, and the node ID is the second argument
+ *   in the page's path (e.g. node/12345 and node/12345/revisions, but not
+ *   comment/reply/12345).
+ *
+ * Regions:
+ * - $page['help']: Dynamic help text, mostly for admin pages.
+ * - $page['highlighted']: Items for the highlighted content region.
+ * - $page['content']: The main content of the current page.
+ * - $page['sidebar_first']: Items for the first sidebar.
+ * - $page['sidebar_second']: Items for the second sidebar.
+ * - $page['header']: Items for the header region.
+ * - $page['footer']: Items for the footer region.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_page()
+ * @see template_process()
+ */
+?>
+<header id="header">
+  <hgroup class="logo">
+  <?php
+	if ($site_title) {
+  	print $site_title;
+	}
+  ?>
+  </hgroup>		
+
+	<?php if ($page['headerblock_left'] || $page['headerblock_middle'] || $page['headerblock_right']): ?>
+		<div id="header-blocks">
+			<?php print render($page['headerblock_left']); ?>
+			<?php print render($page['headerblock_middle']); ?>
+			<?php print render($page['headerblock_right']); ?>
+    </div>
+	<?php endif; ?>
+	
+	<?php if ($breadcrumb): ?>
+    <section id="breadcrumb"><?php print $breadcrumb; ?></section>
+  <?php endif; ?>
+  
+	
+</header> 
+<!-- /header -->		 		
+
+
+
+<div id="main">
+      
+
+    <?php if ($method == 0 || $method == 2): ?>
+      <?php print render($page['sidebar_first']); ?>	       	
+    <?php endif; ?>	 					
+
+    <?php if ($method == 2): ?>
+      <?php print render($page['sidebar_second']) ?>
+    <?php endif; ?>
+
+		<?php if(isset($page['sidebar_first']) || isset($page['sidebar_second'])): ?>
+		<section id="center">	
+		<?php endif; ?>
+
+				<?php if ($primary_local_tasks || $secondary_local_tasks || $action_links): ?>
+          <div id="tasks">
+            <?php if ($primary_local_tasks): ?>
+              <ul class="tabs primary"><?php print render($primary_local_tasks); ?></ul>
+            <?php endif; ?>
+            <?php if ($secondary_local_tasks): ?>
+              <ul class="tabs secondary"><?php print render($secondary_local_tasks); ?></ul>
+            <?php endif; ?>
+            <?php if ($action_links = render($action_links)): ?>
+              <ul class="action-links"><?php print $action_links; ?></ul>
+            <?php endif; ?>
+          </div>
+        <?php endif; ?>
+
+				<?php if ($show_messages && $messages): print $messages; endif; ?>
+
+
+				<?php print render($page['help']); ?>
+
+				<?php print render($page['content_top']); ?>
+
+				<section id="content">
+					<?php if($title): ?><h1 class="page-title"><?php print $title ?></h1><?php endif; ?>
+					<?php print render($page['content']); ?>
+				</section>
+
+				<?php print render($page['content_bottom']); ?>
+				
+
+		<?php if(isset($page['sidebar_first']) || isset($page['sidebar_second'])): ?>
+		</section>
+		<?php endif; ?>
+		    <!-- /center -->					
+         
+         
+    <?php if ($method == 1): ?>
+      <?php print render($page['sidebar_first']); ?>
+    <?php endif; ?>	 					
+         
+    <?php if ($method == 0 || $method == 1): ?>
+      <?php print render($page['sidebar_second']) ?>
+    <?php endif; ?>
+          
+</div><!-- /main -->	
+    		 			
+		
+<footer id="footer">
+		
+		<?php print render($page['footer_top']); ?>
+
+		<?php if ($page['footer_left'] || $page['footer_middle_left'] || $page['footer_middle_right'] || $page['footer_right']): ?> 	        
+      <div class="footer-block">					
+				
+				<?php print render($page['footer_left']); ?>
+				<?php print render($page['footer_middle-left']); ?>
+				<?php print render($page['footer_midle-right']); ?>
+				<?php print render($page['footer_right']); ?>
+
+      </div>
+		<?php endif; ?>
+
+		<?php print render($page['footer_bottom']); ?> 		
+</footer> 
+<!-- /footer -->	
+

+ 0 - 0
sites/all/themes/gui/jee/templates/template-suggestions.pdf → sites/all/themes/figureslibres/clameurs/templates/template-suggestions.pdf


+ 35 - 0
sites/all/themes/figureslibres/clameurs/theme-settings.php

@@ -0,0 +1,35 @@
+<?php
+
+function clameurs_form_system_theme_settings_alter(&$form, $form_state) {
+
+  if (theme_get_setting('layout_enable_settings') == 'on') {
+    $form['clameurs']['page_layout'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Page Layout'),
+      '#description' => t('Use these settings to set the width of the page, each sidebar, and to set the position of sidebars.'),
+    );
+
+    if (theme_get_setting('layout_enable_method') == 'on') {
+      $form['at']['page_layout']['select_method'] = array(
+        '#type' => 'fieldset',
+        '#title' => t('Sidebar Position'),
+        '#collapsible' => FALSE,
+        '#collapsed' => FALSE,
+      );
+      $form['at']['page_layout']['select_method']['layout_method'] = array(
+        '#type' => 'radios',
+        '#description' => t('The sidebar layout descriptions are for LTR (left to right languages), these will flip in RTL mode.'),
+        '#default_value' => theme_get_setting('layout_method'),
+        '#options' => array(
+          0 => t('<strong>Layout #1</strong> <span class="layout-type-0">Standard three column layout — Sidebar first | Content | Sidebar last</span>'),
+          1 => t('<strong>Layout #2</strong> <span class="layout-type-1">Two columns on the right — Content | Sidebar first | Sidebar last</span>'),
+          2 => t('<strong>Layout #3</strong> <span class="layout-type-2">Two columns on the left — Sidebar first | Sidebar last | Content</span>'),
+        ),
+      );
+      $form['at']['page_layout']['layout_enable_settings'] = array(
+        '#type' => 'hidden',
+        '#value' => theme_get_setting('layout_enable_settings'),
+      );
+    } // endif layout method
+  } // endif layout settings
+}

BIN
sites/all/themes/figureslibres/inifig/apple-touch-icon-precomposed.png


BIN
sites/all/themes/figureslibres/inifig/apple-touch-icon.png


+ 23 - 0
sites/all/themes/figureslibres/inifig/css/maintenance.css

@@ -0,0 +1,23 @@
+/* $Id: maintenance.css,v 1.1 2007/11/30 12:19:10 goba Exp $ */
+
+/* Update styles */
+#update-results {
+  margin-top: 3em;
+  padding: 0.25em;
+  border: 1px solid #ccc;
+  background: #eee;
+  font-size: smaller;
+}
+#update-results h2 {
+  margin-top: 0.25em;
+}
+#update-results h4 {
+  margin-bottom: 0.25em;
+}
+#update-results li.none {
+  color: #888;
+  font-style: italic;
+}
+#update-results li.failure strong {
+  color: #b63300;
+}

+ 64 - 0
sites/all/themes/figureslibres/inifig/css/nonsemantic.css

@@ -0,0 +1,64 @@
+/* ==|== non-semantic helper classes ========================================
+   Please define your styles before this section.
+   ========================================================================== */
+
+/* For image replacement */
+.ir { display: block; border: 0; text-indent: -999em; overflow: hidden; background-color: transparent; background-repeat: no-repeat; text-align: left; direction: ltr; }
+.ir br { display: none; }
+
+/* Hide from both screenreaders and browsers: h5bp.com/u */
+.hidden { display: none !important; visibility: hidden; }
+
+/* Hide only visually, but have it available for screenreaders: h5bp.com/v */
+.visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
+
+/* Extends the .visuallyhidden class to allow the element to be focusable when navigated to via the keyboard: h5bp.com/p */
+.visuallyhidden.focusable:active, .visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; }
+
+/* Hide visually and from screenreaders, but maintain layout */
+.invisible { visibility: hidden; }
+
+/* Contain floats: h5bp.com/q */ 
+.clearfix:before, .clearfix:after { content: ""; display: table; }
+.clearfix:after { clear: both; }
+.clearfix { zoom: 1; }
+
+
+
+/* ==|== media queries ======================================================
+   PLACEHOLDER Media Queries for Responsive Design.
+   These override the primary ('mobile first') styles
+   Modify as content requires.
+   ========================================================================== */
+
+@media only screen and (min-width: 480px) {
+  /* Style adjustments for viewports 480px and over go here */
+
+}
+
+@media only screen and (min-width: 768px) {
+  /* Style adjustments for viewports 768px and over go here */
+
+}
+
+
+
+/* ==|== print styles =======================================================
+   Print styles.
+   Inlined to avoid required HTTP connection: h5bp.com/r
+   ========================================================================== */
+ 
+@media print {
+  * { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; } /* Black prints faster: h5bp.com/s */
+  a, a:visited { text-decoration: underline; }
+  a[href]:after { content: " (" attr(href) ")"; }
+  abbr[title]:after { content: " (" attr(title) ")"; }
+  .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }  /* Don't show links for images, or javascript/internal links */
+  pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
+  thead { display: table-header-group; } /* h5bp.com/t */
+  tr, img { page-break-inside: avoid; }
+  img { max-width: 100% !important; }
+  @page { margin: 0.5cm; }
+  p, h2, h3 { orphans: 3; widows: 3; }
+  h2, h3 { page-break-after: avoid; }
+}

+ 406 - 0
sites/all/themes/figureslibres/inifig/css/normalize.css

@@ -0,0 +1,406 @@
+/*! normalize.css v2.1.3 | MIT License | git.io/normalize */
+
+/* ==========================================================================
+   HTML5 display definitions
+   ========================================================================== */
+
+/**
+ * Correct `block` display not defined in IE 8/9.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+    display: block;
+}
+
+/**
+ * Correct `inline-block` display not defined in IE 8/9.
+ */
+
+audio,
+canvas,
+video {
+    display: inline-block;
+}
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+    display: none;
+    height: 0;
+}
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9.
+ * Hide the `template` element in IE, Safari, and Firefox < 22.
+ */
+
+[hidden],
+template {
+    display: none;
+}
+
+/* ==========================================================================
+   Base
+   ========================================================================== */
+
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
+ *    user zoom.
+ */
+
+html {
+    font-family: sans-serif; /* 1 */
+    -ms-text-size-adjust: 100%; /* 2 */
+    -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/**
+ * Remove default margin.
+ */
+
+body {
+    margin: 0;
+}
+
+/* ==========================================================================
+   Links
+   ========================================================================== */
+
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+
+a {
+    background: transparent;
+}
+
+/**
+ * Address `outline` inconsistency between Chrome and other browsers.
+ */
+
+a:focus {
+    outline: thin dotted;
+}
+
+/**
+ * Improve readability when focused and also mouse hovered in all browsers.
+ */
+
+a:active,
+a:hover {
+    outline: 0;
+}
+
+/* ==========================================================================
+   Typography
+   ========================================================================== */
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari 5, and Chrome.
+ */
+
+h1 {
+    font-size: 2em;
+    margin: 0.67em 0;
+}
+
+/**
+ * Address styling not present in IE 8/9, Safari 5, and Chrome.
+ */
+
+abbr[title] {
+    border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
+ */
+
+b,
+strong {
+    font-weight: bold;
+}
+
+/**
+ * Address styling not present in Safari 5 and Chrome.
+ */
+
+dfn {
+    font-style: italic;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+
+hr {
+    -moz-box-sizing: content-box;
+    box-sizing: content-box;
+    height: 0;
+}
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+
+mark {
+    background: #ff0;
+    color: #000;
+}
+
+/**
+ * Correct font family set oddly in Safari 5 and Chrome.
+ */
+
+code,
+kbd,
+pre,
+samp {
+    font-family: monospace, serif;
+    font-size: 1em;
+}
+
+/**
+ * Improve readability of pre-formatted text in all browsers.
+ */
+
+pre {
+    white-space: pre-wrap;
+}
+
+/**
+ * Set consistent quote types.
+ */
+
+q {
+    quotes: "\201C" "\201D" "\2018" "\2019";
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+
+small {
+    font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+    font-size: 75%;
+    line-height: 0;
+    position: relative;
+    vertical-align: baseline;
+}
+
+sup {
+    top: -0.5em;
+}
+
+sub {
+    bottom: -0.25em;
+}
+
+/* ==========================================================================
+   Embedded content
+   ========================================================================== */
+
+/**
+ * Remove border when inside `a` element in IE 8/9.
+ */
+
+img {
+    border: 0;
+}
+
+/**
+ * Correct overflow displayed oddly in IE 9.
+ */
+
+svg:not(:root) {
+    overflow: hidden;
+}
+
+/* ==========================================================================
+   Figures
+   ========================================================================== */
+
+/**
+ * Address margin not present in IE 8/9 and Safari 5.
+ */
+
+figure {
+    margin: 0;
+}
+
+/* ==========================================================================
+   Forms
+   ========================================================================== */
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+    border: 1px solid #c0c0c0;
+    margin: 0 2px;
+    padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+
+legend {
+    border: 0; /* 1 */
+    padding: 0; /* 2 */
+}
+
+/**
+ * 1. Correct font family not being inherited in all browsers.
+ * 2. Correct font size not being inherited in all browsers.
+ * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.
+ */
+
+button,
+input,
+select,
+textarea {
+    font-family: inherit; /* 1 */
+    font-size: 100%; /* 2 */
+    margin: 0; /* 3 */
+}
+
+/**
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+
+button,
+input {
+    line-height: normal;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.
+ * Correct `select` style inheritance in Firefox 4+ and Opera.
+ */
+
+button,
+select {
+    text-transform: none;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ *    and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ *    `input` and others.
+ */
+
+button,
+html input[type="button"], /* 1 */
+input[type="reset"],
+input[type="submit"] {
+    -webkit-appearance: button; /* 2 */
+    cursor: pointer; /* 3 */
+}
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+html input[disabled] {
+    cursor: default;
+}
+
+/**
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
+ * 2. Remove excess padding in IE 8/9/10.
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+    box-sizing: border-box; /* 1 */
+    padding: 0; /* 2 */
+}
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
+ *    (include `-moz` to future-proof).
+ */
+
+input[type="search"] {
+    -webkit-appearance: textfield; /* 1 */
+    -moz-box-sizing: content-box;
+    -webkit-box-sizing: content-box; /* 2 */
+    box-sizing: content-box;
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari 5 and Chrome
+ * on OS X.
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+    -webkit-appearance: none;
+}
+
+/**
+ * Remove inner padding and border in Firefox 4+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+    border: 0;
+    padding: 0;
+}
+
+/**
+ * 1. Remove default vertical scrollbar in IE 8/9.
+ * 2. Improve readability and alignment in all browsers.
+ */
+
+textarea {
+    overflow: auto; /* 1 */
+    vertical-align: top; /* 2 */
+}
+
+/* ==========================================================================
+   Tables
+   ========================================================================== */
+
+/**
+ * Remove most spacing between table cells.
+ */
+
+table {
+    border-collapse: collapse;
+    border-spacing: 0;
+}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
sites/all/themes/figureslibres/inifig/css/styles.css


BIN
sites/all/themes/figureslibres/inifig/icon.png


+ 0 - 0
sites/all/themes/figureslibres/inifig/inc/template.custom-functions.inc


+ 215 - 0
sites/all/themes/figureslibres/inifig/inc/template.theme-overrides.inc

@@ -0,0 +1,215 @@
+<?php
+
+
+/**
+ * Allow themable wrapping of all comments (from garland).
+ */
+function inifig_comment_wrapper($content, $node) {
+  if (!$content || $node->type == 'forum') {
+    return '<div id="comments">'. $content .'</div>';
+  }
+  else {
+    return '<div id="comments"><h2 class="comments">'. t('Comments :') .'</h2>'. $content .'</div>';
+  }
+}
+
+/**
+ * Theme output of user signature.
+ *
+ * @ingroup themeable
+ */
+function inifig_user_signature($signature) {
+  return '<div class="user-signature">'.$signature.'</div>';
+}
+
+/**
+ * Returns a formatted list of recent comments to be displayed in the comment block.
+ *
+ * @return
+ *   The comment list HTML.
+ * @ingroup themeable
+ */
+function inifig_comment_block() {
+  $items = array();
+  foreach (comment_get_recent() as $comment) {
+    $items[] = l($comment->subject, 'node/'. $comment->nid, array('fragment' => 'comment-'. $comment->cid)) .'<br />'. t('@time ago', array('@time' => format_interval(time() - $comment->timestamp)));
+  }
+  if ($items) {
+    return theme('item_list', $items);
+  }
+}
+
+/**
+ * Themes a single comment and related items.
+ *
+ * @param $comment
+ *   The comment object.
+ * @param $node
+ *   The comment node.
+ * @param $links
+ *   An associative array containing control links suitable for passing into
+ *   theme_links(). These are generated by modules implementing hook_link() with
+ *   $type='comment'. Typical examples are links for editing and deleting
+ *   comments.
+ * @param $visible
+ *   Switches between folded/unfolded view. If TRUE the comments are visible, if
+ *   FALSE the comments are folded.
+ * @ingroup themeable
+ */
+function inifig_comment_view($comment, $node, $links = array(), $visible = TRUE) {
+  static $first_new = TRUE;
+
+  $output = '';
+  $comment->new = node_mark($comment->nid, $comment->timestamp);
+  if ($first_new && $comment->new != MARK_READ) {
+    // Assign the anchor only for the first new comment. This avoids duplicate
+    // id attributes on a page.
+    $first_new = FALSE;
+    $output .= "<a id=\"new\"></a>\n";
+  }
+
+  $output .= "<a id=\"comment-$comment->cid\"></a>\n";
+
+  // Switch to folded/unfolded view of the comment
+  if ($visible) {
+    $comment->comment = check_markup($comment->comment, $comment->format, FALSE);
+
+    // Comment API hook
+    comment_invoke_comment($comment, 'view');
+
+    $output .= theme('comment', $comment, $node, $links);
+  }
+  else {
+    $output .= theme('comment_folded', $comment);
+  }
+
+  return $output;
+}
+
+
+/**
+ * Theme comment controls box where the user can change the default display mode and display order of comments.
+ *
+ * @param $form
+ *   The form structure.
+ * @ingroup themeable
+ */
+function inifig_comment_controls($form) {
+  $output = '<div class="container-inline">';
+  $output .=  drupal_render($form);
+  $output .= '</div>';
+  $output .= '<div class="description">'. t('Select your preferred way to display the comments and click "Save settings" to activate your changes.') .'</div>';
+  return theme('box', t('Comment viewing options'), $output);
+}
+
+/**
+ * Theme comment flat collapsed view.
+ *
+ * @param $comment
+ *   The comment to be themed.
+ * @param $node
+ *   The comment node.
+ * @ingroup themeable
+ */
+function inifig_comment_flat_collapsed($comment, $node) {
+  return theme('comment_view', $comment, $node, '', 0);
+}
+
+/**
+ * Theme comment flat expanded view.
+ *
+ * @param $comment
+ *   The comment to be themed.
+ * @param $node
+ *   The comment node.
+ * @ingroup themeable
+ */
+function inifig_comment_flat_expanded($comment, $node) {
+  $links = module_invoke_all('link', 'comment', $comment, 0);
+  drupal_alter('link', $links, $node, $comment);
+  return theme('comment_view', $comment, $node, $links);
+}
+
+/**
+ * Theme comment thread collapsed view.
+ *
+ * @param $comment
+ *   The comment to be themed.
+ * @param $node
+ *   The comment node.
+ * @ingroup themeable
+ */
+function inifig_comment_thread_collapsed($comment, $node) {
+  return theme('comment_view', $comment, $node, '', 0);
+}
+
+/**
+ * Theme comment thread expanded view.
+ *
+ * @param $comment
+ *   The comment to be themed.
+ * @param $node
+ *   The comment node.
+ * @ingroup themeable
+ */
+function inifig_comment_thread_expanded($comment, $node) {
+  $links = module_invoke_all('link', 'comment', $comment, 0);
+  drupal_alter('link', $links, $node, $comment);
+  return theme('comment_view', $comment, $node, $links);
+}
+
+/**
+ * Theme a "you can't post comments" notice.
+ *
+ * @param $node
+ *   The comment node.
+ * @ingroup themeable
+ */
+function inifig_comment_post_forbidden($node) {
+  global $user;
+  static $authenticated_post_comments;
+
+  if (!$user->uid) {
+    if (!isset($authenticated_post_comments)) {
+      // We only output any link if we are certain, that users get permission
+      // to post comments by logging in. We also locally cache this information.
+      $authenticated_post_comments = array_key_exists(DRUPAL_AUTHENTICATED_RID, user_roles(TRUE, 'post comments') + user_roles(TRUE, 'post comments without approval'));
+    }
+
+    if ($authenticated_post_comments) {
+      // We cannot use drupal_get_destination() because these links
+      // sometimes appear on /node and taxonomy listing pages.
+      if (variable_get('comment_form_location_'. $node->type, COMMENT_FORM_SEPARATE_PAGE) == COMMENT_FORM_SEPARATE_PAGE) {
+        $destination = 'destination='. rawurlencode("comment/reply/$node->nid#comment-form");
+      }
+      else {
+        $destination = 'destination='. rawurlencode("node/$node->nid#comment-form");
+      }
+
+      if (variable_get('user_register', 1)) {
+        // Users can register themselves.
+        return t('<a href="@login">Login</a> or <a href="@register">register</a> to post comments', array('@login' => url('user/login', array('query' => $destination)), '@register' => url('user/register', array('query' => $destination))));
+      }
+      else {
+        // Only admins can add new users, no public registration.
+        return t('<a href="@login">Login</a> to post comments', array('@login' => url('user/login', array('query' => $destination))));
+      }
+    }
+  }
+}
+
+
+/**
+ * Theme a "Submitted by ..." notice.
+ *
+ * @param $comment
+ *   The comment.
+ * @ingroup themeable
+ */
+function inifig_comment_submitted($comment) {
+  return t('Submitted by !username on @datetime.',
+    array(
+      '!username' => theme('username', $comment),
+      '@datetime' => format_date($comment->timestamp)
+    ));
+}

+ 72 - 0
sites/all/themes/figureslibres/inifig/inifig.info

@@ -0,0 +1,72 @@
+;----------// Theme informations
+
+name = "Inifig"
+description = "html5 strater theme by <a href="http://www.figureslibres.graphics">figureslibres.graphics</a> inspired by <a href="http://html5boilerplate.com/">html5boilerplate.com</a>"
+version = "7.x-0.1"
+core = "7.x"
+engine = "phptemplate"
+
+
+
+;----------// Styles
+stylesheets[all][] = "css/normalize.css"
+stylesheets[all][] = "css/styles.css"
+; non-semantic helper classes
+; Please define your styles before this section.
+stylesheets[all][] = "css/nonsemantic.css"
+
+
+
+
+;----------// Scripts
+
+scripts[] = "js/script.js"
+
+;----------// Regions
+
+regions[header] = Header
+regions[headerblock_left] = Headerblock left
+regions[headerblock_middle] = Headerblock middle
+regions[headerblock_right] = Headerblock right
+
+regions[help] = Help
+regions[highlighted] = Highlighted
+
+regions[sidebar_first] = First sidebar
+regions[content_top] = Top content
+regions[content] = Content
+regions[content_bottom] = Bottom content
+regions[sidebar_second] = Second sidebar
+
+regions[footer_top] = Footer top
+regions[footer_left] = Footer left
+regions[footer_middle_left] = Footer middle left
+regions[footer_middle_right] = Footer middle right
+regions[footer_right] = Footer right
+regions[footer_bottom] = Footer bottom
+
+
+
+;----------// Features
+
+features[] = logo
+features[] = favicon
+features[] = name
+features[] = slogan
+features[] = search
+features[] = comment_user_picture
+features[] = main_menu
+features[] = secondary_menu
+
+
+;----------// Panels
+; Panels layouts. You can place multiple layouts under the "layouts" folder.
+
+plugins[panels][layouts] = layouts
+
+
+;----------// Theme Setting Defaults
+
+settings[layout_method]                     = '0'
+settings[layout_enable_settings]            = 'on'
+settings[layout_enable_method]              = 'on'

+ 1104 - 0
sites/all/themes/figureslibres/inifig/js/libs/iscroll.js

@@ -0,0 +1,1104 @@
+/*!
+ * iScroll v4.2.5 ~ Copyright (c) 2012 Matteo Spinelli, http://cubiq.org
+ * Released under MIT license, http://cubiq.org/license
+ */
+(function(window, doc){
+var m = Math,
+	dummyStyle = doc.createElement('div').style,
+	vendor = (function () {
+		var vendors = 't,webkitT,MozT,msT,OT'.split(','),
+			t,
+			i = 0,
+			l = vendors.length;
+
+		for ( ; i < l; i++ ) {
+			t = vendors[i] + 'ransform';
+			if ( t in dummyStyle ) {
+				return vendors[i].substr(0, vendors[i].length - 1);
+			}
+		}
+
+		return false;
+	})(),
+	cssVendor = vendor ? '-' + vendor.toLowerCase() + '-' : '',
+
+	// Style properties
+	transform = prefixStyle('transform'),
+	transitionProperty = prefixStyle('transitionProperty'),
+	transitionDuration = prefixStyle('transitionDuration'),
+	transformOrigin = prefixStyle('transformOrigin'),
+	transitionTimingFunction = prefixStyle('transitionTimingFunction'),
+	transitionDelay = prefixStyle('transitionDelay'),
+
+    // Browser capabilities
+	isAndroid = (/android/gi).test(navigator.appVersion),
+	isIDevice = (/iphone|ipad/gi).test(navigator.appVersion),
+	isTouchPad = (/hp-tablet/gi).test(navigator.appVersion),
+
+    has3d = prefixStyle('perspective') in dummyStyle,
+    hasTouch = 'ontouchstart' in window && !isTouchPad,
+    hasTransform = vendor !== false,
+    hasTransitionEnd = prefixStyle('transition') in dummyStyle,
+
+	RESIZE_EV = 'onorientationchange' in window ? 'orientationchange' : 'resize',
+	START_EV = hasTouch ? 'touchstart' : 'mousedown',
+	MOVE_EV = hasTouch ? 'touchmove' : 'mousemove',
+	END_EV = hasTouch ? 'touchend' : 'mouseup',
+	CANCEL_EV = hasTouch ? 'touchcancel' : 'mouseup',
+	TRNEND_EV = (function () {
+		if ( vendor === false ) return false;
+
+		var transitionEnd = {
+				''			: 'transitionend',
+				'webkit'	: 'webkitTransitionEnd',
+				'Moz'		: 'transitionend',
+				'O'			: 'otransitionend',
+				'ms'		: 'MSTransitionEnd'
+			};
+
+		return transitionEnd[vendor];
+	})(),
+
+	nextFrame = (function() {
+		return window.requestAnimationFrame ||
+			window.webkitRequestAnimationFrame ||
+			window.mozRequestAnimationFrame ||
+			window.oRequestAnimationFrame ||
+			window.msRequestAnimationFrame ||
+			function(callback) { return setTimeout(callback, 1); };
+	})(),
+	cancelFrame = (function () {
+		return window.cancelRequestAnimationFrame ||
+			window.webkitCancelAnimationFrame ||
+			window.webkitCancelRequestAnimationFrame ||
+			window.mozCancelRequestAnimationFrame ||
+			window.oCancelRequestAnimationFrame ||
+			window.msCancelRequestAnimationFrame ||
+			clearTimeout;
+	})(),
+
+	// Helpers
+	translateZ = has3d ? ' translateZ(0)' : '',
+
+	// Constructor
+	iScroll = function (el, options) {
+		var that = this,
+			i;
+
+		that.wrapper = typeof el == 'object' ? el : doc.getElementById(el);
+		that.wrapper.style.overflow = 'hidden';
+		that.scroller = that.wrapper.children[0];
+
+		// Default options
+		that.options = {
+			hScroll: true,
+			vScroll: true,
+			x: 0,
+			y: 0,
+			bounce: true,
+			bounceLock: false,
+			momentum: true,
+			lockDirection: true,
+			useTransform: true,
+			useTransition: false,
+			topOffset: 0,
+			checkDOMChanges: false,		// Experimental
+			handleClick: true,
+
+			// Scrollbar
+			hScrollbar: true,
+			vScrollbar: true,
+			fixedScrollbar: isAndroid,
+			hideScrollbar: isIDevice,
+			fadeScrollbar: isIDevice && has3d,
+			scrollbarClass: '',
+
+			// Zoom
+			zoom: false,
+			zoomMin: 1,
+			zoomMax: 4,
+			doubleTapZoom: 2,
+			wheelAction: 'scroll',
+
+			// Snap
+			snap: false,
+			snapThreshold: 1,
+
+			// Events
+			onRefresh: null,
+			onBeforeScrollStart: function (e) { e.preventDefault(); },
+			onScrollStart: null,
+			onBeforeScrollMove: null,
+			onScrollMove: null,
+			onBeforeScrollEnd: null,
+			onScrollEnd: null,
+			onTouchEnd: null,
+			onDestroy: null,
+			onZoomStart: null,
+			onZoom: null,
+			onZoomEnd: null
+		};
+
+		// User defined options
+		for (i in options) that.options[i] = options[i];
+		
+		// Set starting position
+		that.x = that.options.x;
+		that.y = that.options.y;
+
+		// Normalize options
+		that.options.useTransform = hasTransform && that.options.useTransform;
+		that.options.hScrollbar = that.options.hScroll && that.options.hScrollbar;
+		that.options.vScrollbar = that.options.vScroll && that.options.vScrollbar;
+		that.options.zoom = that.options.useTransform && that.options.zoom;
+		that.options.useTransition = hasTransitionEnd && that.options.useTransition;
+
+		// Helpers FIX ANDROID BUG!
+		// translate3d and scale doesn't work together!
+		// Ignoring 3d ONLY WHEN YOU SET that.options.zoom
+		if ( that.options.zoom && isAndroid ){
+			translateZ = '';
+		}
+		
+		// Set some default styles
+		that.scroller.style[transitionProperty] = that.options.useTransform ? cssVendor + 'transform' : 'top left';
+		that.scroller.style[transitionDuration] = '0';
+		that.scroller.style[transformOrigin] = '0 0';
+		if (that.options.useTransition) that.scroller.style[transitionTimingFunction] = 'cubic-bezier(0.33,0.66,0.66,1)';
+		
+		if (that.options.useTransform) that.scroller.style[transform] = 'translate(' + that.x + 'px,' + that.y + 'px)' + translateZ;
+		else that.scroller.style.cssText += ';position:absolute;top:' + that.y + 'px;left:' + that.x + 'px';
+
+		if (that.options.useTransition) that.options.fixedScrollbar = true;
+
+		that.refresh();
+
+		that._bind(RESIZE_EV, window);
+		that._bind(START_EV);
+		if (!hasTouch) {
+			if (that.options.wheelAction != 'none') {
+				that._bind('DOMMouseScroll');
+				that._bind('mousewheel');
+			}
+		}
+
+		if (that.options.checkDOMChanges) that.checkDOMTime = setInterval(function () {
+			that._checkDOMChanges();
+		}, 500);
+	};
+
+// Prototype
+iScroll.prototype = {
+	enabled: true,
+	x: 0,
+	y: 0,
+	steps: [],
+	scale: 1,
+	currPageX: 0, currPageY: 0,
+	pagesX: [], pagesY: [],
+	aniTime: null,
+	wheelZoomCount: 0,
+	
+	handleEvent: function (e) {
+		var that = this;
+		switch(e.type) {
+			case START_EV:
+				if (!hasTouch && e.button !== 0) return;
+				that._start(e);
+				break;
+			case MOVE_EV: that._move(e); break;
+			case END_EV:
+			case CANCEL_EV: that._end(e); break;
+			case RESIZE_EV: that._resize(); break;
+			case 'DOMMouseScroll': case 'mousewheel': that._wheel(e); break;
+			case TRNEND_EV: that._transitionEnd(e); break;
+		}
+	},
+	
+	_checkDOMChanges: function () {
+		if (this.moved || this.zoomed || this.animating ||
+			(this.scrollerW == this.scroller.offsetWidth * this.scale && this.scrollerH == this.scroller.offsetHeight * this.scale)) return;
+
+		this.refresh();
+	},
+	
+	_scrollbar: function (dir) {
+		var that = this,
+			bar;
+
+		if (!that[dir + 'Scrollbar']) {
+			if (that[dir + 'ScrollbarWrapper']) {
+				if (hasTransform) that[dir + 'ScrollbarIndicator'].style[transform] = '';
+				that[dir + 'ScrollbarWrapper'].parentNode.removeChild(that[dir + 'ScrollbarWrapper']);
+				that[dir + 'ScrollbarWrapper'] = null;
+				that[dir + 'ScrollbarIndicator'] = null;
+			}
+
+			return;
+		}
+
+		if (!that[dir + 'ScrollbarWrapper']) {
+			// Create the scrollbar wrapper
+			bar = doc.createElement('div');
+
+			if (that.options.scrollbarClass) bar.className = that.options.scrollbarClass + dir.toUpperCase();
+			else bar.style.cssText = 'position:absolute;z-index:100;' + (dir == 'h' ? 'height:7px;bottom:1px;left:2px;right:' + (that.vScrollbar ? '7' : '2') + 'px' : 'width:7px;bottom:' + (that.hScrollbar ? '7' : '2') + 'px;top:2px;right:1px');
+
+			bar.style.cssText += ';pointer-events:none;' + cssVendor + 'transition-property:opacity;' + cssVendor + 'transition-duration:' + (that.options.fadeScrollbar ? '350ms' : '0') + ';overflow:hidden;opacity:' + (that.options.hideScrollbar ? '0' : '1');
+
+			that.wrapper.appendChild(bar);
+			that[dir + 'ScrollbarWrapper'] = bar;
+
+			// Create the scrollbar indicator
+			bar = doc.createElement('div');
+			if (!that.options.scrollbarClass) {
+				bar.style.cssText = 'position:absolute;z-index:100;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);' + cssVendor + 'background-clip:padding-box;' + cssVendor + 'box-sizing:border-box;' + (dir == 'h' ? 'height:100%' : 'width:100%') + ';' + cssVendor + 'border-radius:3px;border-radius:3px';
+			}
+			bar.style.cssText += ';pointer-events:none;' + cssVendor + 'transition-property:' + cssVendor + 'transform;' + cssVendor + 'transition-timing-function:cubic-bezier(0.33,0.66,0.66,1);' + cssVendor + 'transition-duration:0;' + cssVendor + 'transform: translate(0,0)' + translateZ;
+			if (that.options.useTransition) bar.style.cssText += ';' + cssVendor + 'transition-timing-function:cubic-bezier(0.33,0.66,0.66,1)';
+
+			that[dir + 'ScrollbarWrapper'].appendChild(bar);
+			that[dir + 'ScrollbarIndicator'] = bar;
+		}
+
+		if (dir == 'h') {
+			that.hScrollbarSize = that.hScrollbarWrapper.clientWidth;
+			that.hScrollbarIndicatorSize = m.max(m.round(that.hScrollbarSize * that.hScrollbarSize / that.scrollerW), 8);
+			that.hScrollbarIndicator.style.width = that.hScrollbarIndicatorSize + 'px';
+			that.hScrollbarMaxScroll = that.hScrollbarSize - that.hScrollbarIndicatorSize;
+			that.hScrollbarProp = that.hScrollbarMaxScroll / that.maxScrollX;
+		} else {
+			that.vScrollbarSize = that.vScrollbarWrapper.clientHeight;
+			that.vScrollbarIndicatorSize = m.max(m.round(that.vScrollbarSize * that.vScrollbarSize / that.scrollerH), 8);
+			that.vScrollbarIndicator.style.height = that.vScrollbarIndicatorSize + 'px';
+			that.vScrollbarMaxScroll = that.vScrollbarSize - that.vScrollbarIndicatorSize;
+			that.vScrollbarProp = that.vScrollbarMaxScroll / that.maxScrollY;
+		}
+
+		// Reset position
+		that._scrollbarPos(dir, true);
+	},
+	
+	_resize: function () {
+		var that = this;
+		setTimeout(function () { that.refresh(); }, isAndroid ? 200 : 0);
+	},
+	
+	_pos: function (x, y) {
+		if (this.zoomed) return;
+
+		x = this.hScroll ? x : 0;
+		y = this.vScroll ? y : 0;
+
+		if (this.options.useTransform) {
+			this.scroller.style[transform] = 'translate(' + x + 'px,' + y + 'px) scale(' + this.scale + ')' + translateZ;
+		} else {
+			x = m.round(x);
+			y = m.round(y);
+			this.scroller.style.left = x + 'px';
+			this.scroller.style.top = y + 'px';
+		}
+
+		this.x = x;
+		this.y = y;
+
+		this._scrollbarPos('h');
+		this._scrollbarPos('v');
+	},
+
+	_scrollbarPos: function (dir, hidden) {
+		var that = this,
+			pos = dir == 'h' ? that.x : that.y,
+			size;
+
+		if (!that[dir + 'Scrollbar']) return;
+
+		pos = that[dir + 'ScrollbarProp'] * pos;
+
+		if (pos < 0) {
+			if (!that.options.fixedScrollbar) {
+				size = that[dir + 'ScrollbarIndicatorSize'] + m.round(pos * 3);
+				if (size < 8) size = 8;
+				that[dir + 'ScrollbarIndicator'].style[dir == 'h' ? 'width' : 'height'] = size + 'px';
+			}
+			pos = 0;
+		} else if (pos > that[dir + 'ScrollbarMaxScroll']) {
+			if (!that.options.fixedScrollbar) {
+				size = that[dir + 'ScrollbarIndicatorSize'] - m.round((pos - that[dir + 'ScrollbarMaxScroll']) * 3);
+				if (size < 8) size = 8;
+				that[dir + 'ScrollbarIndicator'].style[dir == 'h' ? 'width' : 'height'] = size + 'px';
+				pos = that[dir + 'ScrollbarMaxScroll'] + (that[dir + 'ScrollbarIndicatorSize'] - size);
+			} else {
+				pos = that[dir + 'ScrollbarMaxScroll'];
+			}
+		}
+
+		that[dir + 'ScrollbarWrapper'].style[transitionDelay] = '0';
+		that[dir + 'ScrollbarWrapper'].style.opacity = hidden && that.options.hideScrollbar ? '0' : '1';
+		that[dir + 'ScrollbarIndicator'].style[transform] = 'translate(' + (dir == 'h' ? pos + 'px,0)' : '0,' + pos + 'px)') + translateZ;
+	},
+	
+	_start: function (e) {
+		var that = this,
+			point = hasTouch ? e.touches[0] : e,
+			matrix, x, y,
+			c1, c2;
+
+		if (!that.enabled) return;
+
+		if (that.options.onBeforeScrollStart) that.options.onBeforeScrollStart.call(that, e);
+
+		if (that.options.useTransition || that.options.zoom) that._transitionTime(0);
+
+		that.moved = false;
+		that.animating = false;
+		that.zoomed = false;
+		that.distX = 0;
+		that.distY = 0;
+		that.absDistX = 0;
+		that.absDistY = 0;
+		that.dirX = 0;
+		that.dirY = 0;
+
+		// Gesture start
+		if (that.options.zoom && hasTouch && e.touches.length > 1) {
+			c1 = m.abs(e.touches[0].pageX-e.touches[1].pageX);
+			c2 = m.abs(e.touches[0].pageY-e.touches[1].pageY);
+			that.touchesDistStart = m.sqrt(c1 * c1 + c2 * c2);
+
+			that.originX = m.abs(e.touches[0].pageX + e.touches[1].pageX - that.wrapperOffsetLeft * 2) / 2 - that.x;
+			that.originY = m.abs(e.touches[0].pageY + e.touches[1].pageY - that.wrapperOffsetTop * 2) / 2 - that.y;
+
+			if (that.options.onZoomStart) that.options.onZoomStart.call(that, e);
+		}
+
+		if (that.options.momentum) {
+			if (that.options.useTransform) {
+				// Very lame general purpose alternative to CSSMatrix
+				matrix = getComputedStyle(that.scroller, null)[transform].replace(/[^0-9\-.,]/g, '').split(',');
+				x = +(matrix[12] || matrix[4]);
+				y = +(matrix[13] || matrix[5]);
+			} else {
+				x = +getComputedStyle(that.scroller, null).left.replace(/[^0-9-]/g, '');
+				y = +getComputedStyle(that.scroller, null).top.replace(/[^0-9-]/g, '');
+			}
+			
+			if (x != that.x || y != that.y) {
+				if (that.options.useTransition) that._unbind(TRNEND_EV);
+				else cancelFrame(that.aniTime);
+				that.steps = [];
+				that._pos(x, y);
+				if (that.options.onScrollEnd) that.options.onScrollEnd.call(that);
+			}
+		}
+
+		that.absStartX = that.x;	// Needed by snap threshold
+		that.absStartY = that.y;
+
+		that.startX = that.x;
+		that.startY = that.y;
+		that.pointX = point.pageX;
+		that.pointY = point.pageY;
+
+		that.startTime = e.timeStamp || Date.now();
+
+		if (that.options.onScrollStart) that.options.onScrollStart.call(that, e);
+
+		that._bind(MOVE_EV, window);
+		that._bind(END_EV, window);
+		that._bind(CANCEL_EV, window);
+	},
+	
+	_move: function (e) {
+		var that = this,
+			point = hasTouch ? e.touches[0] : e,
+			deltaX = point.pageX - that.pointX,
+			deltaY = point.pageY - that.pointY,
+			newX = that.x + deltaX,
+			newY = that.y + deltaY,
+			c1, c2, scale,
+			timestamp = e.timeStamp || Date.now();
+
+		if (that.options.onBeforeScrollMove) that.options.onBeforeScrollMove.call(that, e);
+
+		// Zoom
+		if (that.options.zoom && hasTouch && e.touches.length > 1) {
+			c1 = m.abs(e.touches[0].pageX - e.touches[1].pageX);
+			c2 = m.abs(e.touches[0].pageY - e.touches[1].pageY);
+			that.touchesDist = m.sqrt(c1*c1+c2*c2);
+
+			that.zoomed = true;
+
+			scale = 1 / that.touchesDistStart * that.touchesDist * this.scale;
+
+			if (scale < that.options.zoomMin) scale = 0.5 * that.options.zoomMin * Math.pow(2.0, scale / that.options.zoomMin);
+			else if (scale > that.options.zoomMax) scale = 2.0 * that.options.zoomMax * Math.pow(0.5, that.options.zoomMax / scale);
+
+			that.lastScale = scale / this.scale;
+
+			newX = this.originX - this.originX * that.lastScale + this.x,
+			newY = this.originY - this.originY * that.lastScale + this.y;
+
+			this.scroller.style[transform] = 'translate(' + newX + 'px,' + newY + 'px) scale(' + scale + ')' + translateZ;
+
+			if (that.options.onZoom) that.options.onZoom.call(that, e);
+			return;
+		}
+
+		that.pointX = point.pageX;
+		that.pointY = point.pageY;
+
+		// Slow down if outside of the boundaries
+		if (newX > 0 || newX < that.maxScrollX) {
+			newX = that.options.bounce ? that.x + (deltaX / 2) : newX >= 0 || that.maxScrollX >= 0 ? 0 : that.maxScrollX;
+		}
+		if (newY > that.minScrollY || newY < that.maxScrollY) {
+			newY = that.options.bounce ? that.y + (deltaY / 2) : newY >= that.minScrollY || that.maxScrollY >= 0 ? that.minScrollY : that.maxScrollY;
+		}
+
+		that.distX += deltaX;
+		that.distY += deltaY;
+		that.absDistX = m.abs(that.distX);
+		that.absDistY = m.abs(that.distY);
+
+		if (that.absDistX < 6 && that.absDistY < 6) {
+			return;
+		}
+
+		// Lock direction
+		if (that.options.lockDirection) {
+			if (that.absDistX > that.absDistY + 5) {
+				newY = that.y;
+				deltaY = 0;
+			} else if (that.absDistY > that.absDistX + 5) {
+				newX = that.x;
+				deltaX = 0;
+			}
+		}
+
+		that.moved = true;
+		that._pos(newX, newY);
+		that.dirX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0;
+		that.dirY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0;
+
+		if (timestamp - that.startTime > 300) {
+			that.startTime = timestamp;
+			that.startX = that.x;
+			that.startY = that.y;
+		}
+		
+		if (that.options.onScrollMove) that.options.onScrollMove.call(that, e);
+	},
+	
+	_end: function (e) {
+		if (hasTouch && e.touches.length !== 0) return;
+
+		var that = this,
+			point = hasTouch ? e.changedTouches[0] : e,
+			target, ev,
+			momentumX = { dist:0, time:0 },
+			momentumY = { dist:0, time:0 },
+			duration = (e.timeStamp || Date.now()) - that.startTime,
+			newPosX = that.x,
+			newPosY = that.y,
+			distX, distY,
+			newDuration,
+			snap,
+			scale;
+
+		that._unbind(MOVE_EV, window);
+		that._unbind(END_EV, window);
+		that._unbind(CANCEL_EV, window);
+
+		if (that.options.onBeforeScrollEnd) that.options.onBeforeScrollEnd.call(that, e);
+
+		if (that.zoomed) {
+			scale = that.scale * that.lastScale;
+			scale = Math.max(that.options.zoomMin, scale);
+			scale = Math.min(that.options.zoomMax, scale);
+			that.lastScale = scale / that.scale;
+			that.scale = scale;
+
+			that.x = that.originX - that.originX * that.lastScale + that.x;
+			that.y = that.originY - that.originY * that.lastScale + that.y;
+			
+			that.scroller.style[transitionDuration] = '200ms';
+			that.scroller.style[transform] = 'translate(' + that.x + 'px,' + that.y + 'px) scale(' + that.scale + ')' + translateZ;
+			
+			that.zoomed = false;
+			that.refresh();
+
+			if (that.options.onZoomEnd) that.options.onZoomEnd.call(that, e);
+			return;
+		}
+
+		if (!that.moved) {
+			if (hasTouch) {
+				if (that.doubleTapTimer && that.options.zoom) {
+					// Double tapped
+					clearTimeout(that.doubleTapTimer);
+					that.doubleTapTimer = null;
+					if (that.options.onZoomStart) that.options.onZoomStart.call(that, e);
+					that.zoom(that.pointX, that.pointY, that.scale == 1 ? that.options.doubleTapZoom : 1);
+					if (that.options.onZoomEnd) {
+						setTimeout(function() {
+							that.options.onZoomEnd.call(that, e);
+						}, 200); // 200 is default zoom duration
+					}
+				} else if (this.options.handleClick) {
+					that.doubleTapTimer = setTimeout(function () {
+						that.doubleTapTimer = null;
+
+						// Find the last touched element
+						target = point.target;
+						while (target.nodeType != 1) target = target.parentNode;
+
+						if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA') {
+							ev = doc.createEvent('MouseEvents');
+							ev.initMouseEvent('click', true, true, e.view, 1,
+								point.screenX, point.screenY, point.clientX, point.clientY,
+								e.ctrlKey, e.altKey, e.shiftKey, e.metaKey,
+								0, null);
+							ev._fake = true;
+							target.dispatchEvent(ev);
+						}
+					}, that.options.zoom ? 250 : 0);
+				}
+			}
+
+			that._resetPos(400);
+
+			if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e);
+			return;
+		}
+
+		if (duration < 300 && that.options.momentum) {
+			momentumX = newPosX ? that._momentum(newPosX - that.startX, duration, -that.x, that.scrollerW - that.wrapperW + that.x, that.options.bounce ? that.wrapperW : 0) : momentumX;
+			momentumY = newPosY ? that._momentum(newPosY - that.startY, duration, -that.y, (that.maxScrollY < 0 ? that.scrollerH - that.wrapperH + that.y - that.minScrollY : 0), that.options.bounce ? that.wrapperH : 0) : momentumY;
+
+			newPosX = that.x + momentumX.dist;
+			newPosY = that.y + momentumY.dist;
+
+			if ((that.x > 0 && newPosX > 0) || (that.x < that.maxScrollX && newPosX < that.maxScrollX)) momentumX = { dist:0, time:0 };
+			if ((that.y > that.minScrollY && newPosY > that.minScrollY) || (that.y < that.maxScrollY && newPosY < that.maxScrollY)) momentumY = { dist:0, time:0 };
+		}
+
+		if (momentumX.dist || momentumY.dist) {
+			newDuration = m.max(m.max(momentumX.time, momentumY.time), 10);
+
+			// Do we need to snap?
+			if (that.options.snap) {
+				distX = newPosX - that.absStartX;
+				distY = newPosY - that.absStartY;
+				if (m.abs(distX) < that.options.snapThreshold && m.abs(distY) < that.options.snapThreshold) { that.scrollTo(that.absStartX, that.absStartY, 200); }
+				else {
+					snap = that._snap(newPosX, newPosY);
+					newPosX = snap.x;
+					newPosY = snap.y;
+					newDuration = m.max(snap.time, newDuration);
+				}
+			}
+
+			that.scrollTo(m.round(newPosX), m.round(newPosY), newDuration);
+
+			if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e);
+			return;
+		}
+
+		// Do we need to snap?
+		if (that.options.snap) {
+			distX = newPosX - that.absStartX;
+			distY = newPosY - that.absStartY;
+			if (m.abs(distX) < that.options.snapThreshold && m.abs(distY) < that.options.snapThreshold) that.scrollTo(that.absStartX, that.absStartY, 200);
+			else {
+				snap = that._snap(that.x, that.y);
+				if (snap.x != that.x || snap.y != that.y) that.scrollTo(snap.x, snap.y, snap.time);
+			}
+
+			if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e);
+			return;
+		}
+
+		that._resetPos(200);
+		if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e);
+	},
+	
+	_resetPos: function (time) {
+		var that = this,
+			resetX = that.x >= 0 ? 0 : that.x < that.maxScrollX ? that.maxScrollX : that.x,
+			resetY = that.y >= that.minScrollY || that.maxScrollY > 0 ? that.minScrollY : that.y < that.maxScrollY ? that.maxScrollY : that.y;
+
+		if (resetX == that.x && resetY == that.y) {
+			if (that.moved) {
+				that.moved = false;
+				if (that.options.onScrollEnd) that.options.onScrollEnd.call(that);		// Execute custom code on scroll end
+			}
+
+			if (that.hScrollbar && that.options.hideScrollbar) {
+				if (vendor == 'webkit') that.hScrollbarWrapper.style[transitionDelay] = '300ms';
+				that.hScrollbarWrapper.style.opacity = '0';
+			}
+			if (that.vScrollbar && that.options.hideScrollbar) {
+				if (vendor == 'webkit') that.vScrollbarWrapper.style[transitionDelay] = '300ms';
+				that.vScrollbarWrapper.style.opacity = '0';
+			}
+
+			return;
+		}
+
+		that.scrollTo(resetX, resetY, time || 0);
+	},
+
+	_wheel: function (e) {
+		var that = this,
+			wheelDeltaX, wheelDeltaY,
+			deltaX, deltaY,
+			deltaScale;
+
+		if ('wheelDeltaX' in e) {
+			wheelDeltaX = e.wheelDeltaX / 12;
+			wheelDeltaY = e.wheelDeltaY / 12;
+		} else if('wheelDelta' in e) {
+			wheelDeltaX = wheelDeltaY = e.wheelDelta / 12;
+		} else if ('detail' in e) {
+			wheelDeltaX = wheelDeltaY = -e.detail * 3;
+		} else {
+			return;
+		}
+		
+		if (that.options.wheelAction == 'zoom') {
+			deltaScale = that.scale * Math.pow(2, 1/3 * (wheelDeltaY ? wheelDeltaY / Math.abs(wheelDeltaY) : 0));
+			if (deltaScale < that.options.zoomMin) deltaScale = that.options.zoomMin;
+			if (deltaScale > that.options.zoomMax) deltaScale = that.options.zoomMax;
+			
+			if (deltaScale != that.scale) {
+				if (!that.wheelZoomCount && that.options.onZoomStart) that.options.onZoomStart.call(that, e);
+				that.wheelZoomCount++;
+				
+				that.zoom(e.pageX, e.pageY, deltaScale, 400);
+				
+				setTimeout(function() {
+					that.wheelZoomCount--;
+					if (!that.wheelZoomCount && that.options.onZoomEnd) that.options.onZoomEnd.call(that, e);
+				}, 400);
+			}
+			
+			return;
+		}
+		
+		deltaX = that.x + wheelDeltaX;
+		deltaY = that.y + wheelDeltaY;
+
+		if (deltaX > 0) deltaX = 0;
+		else if (deltaX < that.maxScrollX) deltaX = that.maxScrollX;
+
+		if (deltaY > that.minScrollY) deltaY = that.minScrollY;
+		else if (deltaY < that.maxScrollY) deltaY = that.maxScrollY;
+    
+		if (that.maxScrollY < 0) {
+			that.scrollTo(deltaX, deltaY, 0);
+		}
+	},
+	
+	_transitionEnd: function (e) {
+		var that = this;
+
+		if (e.target != that.scroller) return;
+
+		that._unbind(TRNEND_EV);
+		
+		that._startAni();
+	},
+
+
+	/**
+	*
+	* Utilities
+	*
+	*/
+	_startAni: function () {
+		var that = this,
+			startX = that.x, startY = that.y,
+			startTime = Date.now(),
+			step, easeOut,
+			animate;
+
+		if (that.animating) return;
+		
+		if (!that.steps.length) {
+			that._resetPos(400);
+			return;
+		}
+		
+		step = that.steps.shift();
+		
+		if (step.x == startX && step.y == startY) step.time = 0;
+
+		that.animating = true;
+		that.moved = true;
+		
+		if (that.options.useTransition) {
+			that._transitionTime(step.time);
+			that._pos(step.x, step.y);
+			that.animating = false;
+			if (step.time) that._bind(TRNEND_EV);
+			else that._resetPos(0);
+			return;
+		}
+
+		animate = function () {
+			var now = Date.now(),
+				newX, newY;
+
+			if (now >= startTime + step.time) {
+				that._pos(step.x, step.y);
+				that.animating = false;
+				if (that.options.onAnimationEnd) that.options.onAnimationEnd.call(that);			// Execute custom code on animation end
+				that._startAni();
+				return;
+			}
+
+			now = (now - startTime) / step.time - 1;
+			easeOut = m.sqrt(1 - now * now);
+			newX = (step.x - startX) * easeOut + startX;
+			newY = (step.y - startY) * easeOut + startY;
+			that._pos(newX, newY);
+			if (that.animating) that.aniTime = nextFrame(animate);
+		};
+
+		animate();
+	},
+
+	_transitionTime: function (time) {
+		time += 'ms';
+		this.scroller.style[transitionDuration] = time;
+		if (this.hScrollbar) this.hScrollbarIndicator.style[transitionDuration] = time;
+		if (this.vScrollbar) this.vScrollbarIndicator.style[transitionDuration] = time;
+	},
+
+	_momentum: function (dist, time, maxDistUpper, maxDistLower, size) {
+		var deceleration = 0.0006,
+			speed = m.abs(dist) / time,
+			newDist = (speed * speed) / (2 * deceleration),
+			newTime = 0, outsideDist = 0;
+
+		// Proportinally reduce speed if we are outside of the boundaries
+		if (dist > 0 && newDist > maxDistUpper) {
+			outsideDist = size / (6 / (newDist / speed * deceleration));
+			maxDistUpper = maxDistUpper + outsideDist;
+			speed = speed * maxDistUpper / newDist;
+			newDist = maxDistUpper;
+		} else if (dist < 0 && newDist > maxDistLower) {
+			outsideDist = size / (6 / (newDist / speed * deceleration));
+			maxDistLower = maxDistLower + outsideDist;
+			speed = speed * maxDistLower / newDist;
+			newDist = maxDistLower;
+		}
+
+		newDist = newDist * (dist < 0 ? -1 : 1);
+		newTime = speed / deceleration;
+
+		return { dist: newDist, time: m.round(newTime) };
+	},
+
+	_offset: function (el) {
+		var left = -el.offsetLeft,
+			top = -el.offsetTop;
+			
+		while (el = el.offsetParent) {
+			left -= el.offsetLeft;
+			top -= el.offsetTop;
+		}
+		
+		if (el != this.wrapper) {
+			left *= this.scale;
+			top *= this.scale;
+		}
+
+		return { left: left, top: top };
+	},
+
+	_snap: function (x, y) {
+		var that = this,
+			i, l,
+			page, time,
+			sizeX, sizeY;
+
+		// Check page X
+		page = that.pagesX.length - 1;
+		for (i=0, l=that.pagesX.length; i<l; i++) {
+			if (x >= that.pagesX[i]) {
+				page = i;
+				break;
+			}
+		}
+		if (page == that.currPageX && page > 0 && that.dirX < 0) page--;
+		x = that.pagesX[page];
+		sizeX = m.abs(x - that.pagesX[that.currPageX]);
+		sizeX = sizeX ? m.abs(that.x - x) / sizeX * 500 : 0;
+		that.currPageX = page;
+
+		// Check page Y
+		page = that.pagesY.length-1;
+		for (i=0; i<page; i++) {
+			if (y >= that.pagesY[i]) {
+				page = i;
+				break;
+			}
+		}
+		if (page == that.currPageY && page > 0 && that.dirY < 0) page--;
+		y = that.pagesY[page];
+		sizeY = m.abs(y - that.pagesY[that.currPageY]);
+		sizeY = sizeY ? m.abs(that.y - y) / sizeY * 500 : 0;
+		that.currPageY = page;
+
+		// Snap with constant speed (proportional duration)
+		time = m.round(m.max(sizeX, sizeY)) || 200;
+
+		return { x: x, y: y, time: time };
+	},
+
+	_bind: function (type, el, bubble) {
+		(el || this.scroller).addEventListener(type, this, !!bubble);
+	},
+
+	_unbind: function (type, el, bubble) {
+		(el || this.scroller).removeEventListener(type, this, !!bubble);
+	},
+
+
+	/**
+	*
+	* Public methods
+	*
+	*/
+	destroy: function () {
+		var that = this;
+
+		that.scroller.style[transform] = '';
+
+		// Remove the scrollbars
+		that.hScrollbar = false;
+		that.vScrollbar = false;
+		that._scrollbar('h');
+		that._scrollbar('v');
+
+		// Remove the event listeners
+		that._unbind(RESIZE_EV, window);
+		that._unbind(START_EV);
+		that._unbind(MOVE_EV, window);
+		that._unbind(END_EV, window);
+		that._unbind(CANCEL_EV, window);
+		
+		if (!that.options.hasTouch) {
+			that._unbind('DOMMouseScroll');
+			that._unbind('mousewheel');
+		}
+		
+		if (that.options.useTransition) that._unbind(TRNEND_EV);
+		
+		if (that.options.checkDOMChanges) clearInterval(that.checkDOMTime);
+		
+		if (that.options.onDestroy) that.options.onDestroy.call(that);
+	},
+
+	refresh: function () {
+		var that = this,
+			offset,
+			i, l,
+			els,
+			pos = 0,
+			page = 0;
+
+		if (that.scale < that.options.zoomMin) that.scale = that.options.zoomMin;
+		that.wrapperW = that.wrapper.clientWidth || 1;
+		that.wrapperH = that.wrapper.clientHeight || 1;
+
+		that.minScrollY = -that.options.topOffset || 0;
+		that.scrollerW = m.round(that.scroller.offsetWidth * that.scale);
+		that.scrollerH = m.round((that.scroller.offsetHeight + that.minScrollY) * that.scale);
+		that.maxScrollX = that.wrapperW - that.scrollerW;
+		that.maxScrollY = that.wrapperH - that.scrollerH + that.minScrollY;
+		that.dirX = 0;
+		that.dirY = 0;
+
+		if (that.options.onRefresh) that.options.onRefresh.call(that);
+
+		that.hScroll = that.options.hScroll && that.maxScrollX < 0;
+		that.vScroll = that.options.vScroll && (!that.options.bounceLock && !that.hScroll || that.scrollerH > that.wrapperH);
+
+		that.hScrollbar = that.hScroll && that.options.hScrollbar;
+		that.vScrollbar = that.vScroll && that.options.vScrollbar && that.scrollerH > that.wrapperH;
+
+		offset = that._offset(that.wrapper);
+		that.wrapperOffsetLeft = -offset.left;
+		that.wrapperOffsetTop = -offset.top;
+
+		// Prepare snap
+		if (typeof that.options.snap == 'string') {
+			that.pagesX = [];
+			that.pagesY = [];
+			els = that.scroller.querySelectorAll(that.options.snap);
+			for (i=0, l=els.length; i<l; i++) {
+				pos = that._offset(els[i]);
+				pos.left += that.wrapperOffsetLeft;
+				pos.top += that.wrapperOffsetTop;
+				that.pagesX[i] = pos.left < that.maxScrollX ? that.maxScrollX : pos.left * that.scale;
+				that.pagesY[i] = pos.top < that.maxScrollY ? that.maxScrollY : pos.top * that.scale;
+			}
+		} else if (that.options.snap) {
+			that.pagesX = [];
+			while (pos >= that.maxScrollX) {
+				that.pagesX[page] = pos;
+				pos = pos - that.wrapperW;
+				page++;
+			}
+			if (that.maxScrollX%that.wrapperW) that.pagesX[that.pagesX.length] = that.maxScrollX - that.pagesX[that.pagesX.length-1] + that.pagesX[that.pagesX.length-1];
+
+			pos = 0;
+			page = 0;
+			that.pagesY = [];
+			while (pos >= that.maxScrollY) {
+				that.pagesY[page] = pos;
+				pos = pos - that.wrapperH;
+				page++;
+			}
+			if (that.maxScrollY%that.wrapperH) that.pagesY[that.pagesY.length] = that.maxScrollY - that.pagesY[that.pagesY.length-1] + that.pagesY[that.pagesY.length-1];
+		}
+
+		// Prepare the scrollbars
+		that._scrollbar('h');
+		that._scrollbar('v');
+
+		if (!that.zoomed) {
+			that.scroller.style[transitionDuration] = '0';
+			that._resetPos(400);
+		}
+	},
+
+	scrollTo: function (x, y, time, relative) {
+		var that = this,
+			step = x,
+			i, l;
+
+		that.stop();
+
+		if (!step.length) step = [{ x: x, y: y, time: time, relative: relative }];
+		
+		for (i=0, l=step.length; i<l; i++) {
+			if (step[i].relative) { step[i].x = that.x - step[i].x; step[i].y = that.y - step[i].y; }
+			that.steps.push({ x: step[i].x, y: step[i].y, time: step[i].time || 0 });
+		}
+
+		that._startAni();
+	},
+
+	scrollToElement: function (el, time) {
+		var that = this, pos;
+		el = el.nodeType ? el : that.scroller.querySelector(el);
+		if (!el) return;
+
+		pos = that._offset(el);
+		pos.left += that.wrapperOffsetLeft;
+		pos.top += that.wrapperOffsetTop;
+
+		pos.left = pos.left > 0 ? 0 : pos.left < that.maxScrollX ? that.maxScrollX : pos.left;
+		pos.top = pos.top > that.minScrollY ? that.minScrollY : pos.top < that.maxScrollY ? that.maxScrollY : pos.top;
+		time = time === undefined ? m.max(m.abs(pos.left)*2, m.abs(pos.top)*2) : time;
+
+		that.scrollTo(pos.left, pos.top, time);
+	},
+
+	scrollToPage: function (pageX, pageY, time) {
+		var that = this, x, y;
+		
+		time = time === undefined ? 400 : time;
+
+		if (that.options.onScrollStart) that.options.onScrollStart.call(that);
+
+		if (that.options.snap) {
+			pageX = pageX == 'next' ? that.currPageX+1 : pageX == 'prev' ? that.currPageX-1 : pageX;
+			pageY = pageY == 'next' ? that.currPageY+1 : pageY == 'prev' ? that.currPageY-1 : pageY;
+
+			pageX = pageX < 0 ? 0 : pageX > that.pagesX.length-1 ? that.pagesX.length-1 : pageX;
+			pageY = pageY < 0 ? 0 : pageY > that.pagesY.length-1 ? that.pagesY.length-1 : pageY;
+
+			that.currPageX = pageX;
+			that.currPageY = pageY;
+			x = that.pagesX[pageX];
+			y = that.pagesY[pageY];
+		} else {
+			x = -that.wrapperW * pageX;
+			y = -that.wrapperH * pageY;
+			if (x < that.maxScrollX) x = that.maxScrollX;
+			if (y < that.maxScrollY) y = that.maxScrollY;
+		}
+
+		that.scrollTo(x, y, time);
+	},
+
+	disable: function () {
+		this.stop();
+		this._resetPos(0);
+		this.enabled = false;
+
+		// If disabled after touchstart we make sure that there are no left over events
+		this._unbind(MOVE_EV, window);
+		this._unbind(END_EV, window);
+		this._unbind(CANCEL_EV, window);
+	},
+	
+	enable: function () {
+		this.enabled = true;
+	},
+	
+	stop: function () {
+		if (this.options.useTransition) this._unbind(TRNEND_EV);
+		else cancelFrame(this.aniTime);
+		this.steps = [];
+		this.moved = false;
+		this.animating = false;
+	},
+	
+	zoom: function (x, y, scale, time) {
+		var that = this,
+			relScale = scale / that.scale;
+
+		if (!that.options.useTransform) return;
+
+		that.zoomed = true;
+		time = time === undefined ? 200 : time;
+		x = x - that.wrapperOffsetLeft - that.x;
+		y = y - that.wrapperOffsetTop - that.y;
+		that.x = x - x * relScale + that.x;
+		that.y = y - y * relScale + that.y;
+
+		that.scale = scale;
+		that.refresh();
+
+		that.x = that.x > 0 ? 0 : that.x < that.maxScrollX ? that.maxScrollX : that.x;
+		that.y = that.y > that.minScrollY ? that.minScrollY : that.y < that.maxScrollY ? that.maxScrollY : that.y;
+
+		that.scroller.style[transitionDuration] = time + 'ms';
+		that.scroller.style[transform] = 'translate(' + that.x + 'px,' + that.y + 'px) scale(' + scale + ')' + translateZ;
+		that.zoomed = false;
+	},
+	
+	isReady: function () {
+		return !this.moved && !this.zoomed && !this.animating;
+	}
+};
+
+function prefixStyle (style) {
+	if ( vendor === '' ) return style;
+
+	style = style.charAt(0).toUpperCase() + style.substr(1);
+	return vendor + style;
+}
+
+dummyStyle = null;	// for the sake of it
+
+if (typeof exports !== 'undefined') exports.iScroll = iScroll;
+else window.iScroll = iScroll;
+
+})(window, document);

+ 120 - 0
sites/all/themes/figureslibres/inifig/js/libs/jquery.jscrollpane.css

@@ -0,0 +1,120 @@
+/*
+ * CSS Styles that are needed by jScrollPane for it to operate correctly.
+ *
+ * Include this stylesheet in your site or copy and paste the styles below into your stylesheet - jScrollPane
+ * may not operate correctly without them.
+ */
+
+.jspContainer
+{
+	overflow: hidden;
+	position: relative;
+}
+
+.jspPane
+{
+	position: absolute;
+}
+
+.jspVerticalBar
+{
+	position: absolute;
+	top: 0;
+	right: 0;
+	width: 16px;
+	height: 100%;
+	background: red;
+}
+
+.jspHorizontalBar
+{
+	position: absolute;
+	bottom: 0;
+	left: 0;
+	width: 100%;
+	height: 16px;
+	background: red;
+}
+
+.jspVerticalBar *,
+.jspHorizontalBar *
+{
+	margin: 0;
+	padding: 0;
+}
+
+.jspCap
+{
+	display: none;
+}
+
+.jspHorizontalBar .jspCap
+{
+	float: left;
+}
+
+.jspTrack
+{
+	background: #dde;
+	position: relative;
+}
+
+.jspDrag
+{
+	background: #bbd;
+	position: relative;
+	top: 0;
+	left: 0;
+	cursor: pointer;
+}
+
+.jspHorizontalBar .jspTrack,
+.jspHorizontalBar .jspDrag
+{
+	float: left;
+	height: 100%;
+}
+
+.jspArrow
+{
+	background: #50506d;
+	text-indent: -20000px;
+	display: block;
+	cursor: pointer;
+}
+
+.jspArrow.jspDisabled
+{
+	cursor: default;
+	background: #80808d;
+}
+
+.jspVerticalBar .jspArrow
+{
+	height: 16px;
+}
+
+.jspHorizontalBar .jspArrow
+{
+	width: 16px;
+	float: left;
+	height: 100%;
+}
+
+.jspVerticalBar .jspArrow:focus
+{
+	outline: none;
+}
+
+.jspCorner
+{
+	background: #eeeef4;
+	float: left;
+	height: 100%;
+}
+
+/* Yuk! CSS Hack for IE6 3 pixel bug :( */
+* html .jspCorner
+{
+	margin: 0 -3px 0 0;
+}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 7 - 0
sites/all/themes/figureslibres/inifig/js/libs/jquery.jscrollpane.min.js


+ 84 - 0
sites/all/themes/figureslibres/inifig/js/libs/jquery.mousewheel.js

@@ -0,0 +1,84 @@
+/*! Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net)
+ * Licensed under the MIT License (LICENSE.txt).
+ *
+ * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
+ * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
+ * Thanks to: Seamus Leahy for adding deltaX and deltaY
+ *
+ * Version: 3.0.6
+ * 
+ * Requires: 1.2.2+
+ */
+
+(function($) {
+
+var types = ['DOMMouseScroll', 'mousewheel'];
+
+if ($.event.fixHooks) {
+    for ( var i=types.length; i; ) {
+        $.event.fixHooks[ types[--i] ] = $.event.mouseHooks;
+    }
+}
+
+$.event.special.mousewheel = {
+    setup: function() {
+        if ( this.addEventListener ) {
+            for ( var i=types.length; i; ) {
+                this.addEventListener( types[--i], handler, false );
+            }
+        } else {
+            this.onmousewheel = handler;
+        }
+    },
+    
+    teardown: function() {
+        if ( this.removeEventListener ) {
+            for ( var i=types.length; i; ) {
+                this.removeEventListener( types[--i], handler, false );
+            }
+        } else {
+            this.onmousewheel = null;
+        }
+    }
+};
+
+$.fn.extend({
+    mousewheel: function(fn) {
+        return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
+    },
+    
+    unmousewheel: function(fn) {
+        return this.unbind("mousewheel", fn);
+    }
+});
+
+
+function handler(event) {
+    var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true, deltaX = 0, deltaY = 0;
+    event = $.event.fix(orgEvent);
+    event.type = "mousewheel";
+    
+    // Old school scrollwheel delta
+    if ( orgEvent.wheelDelta ) { delta = orgEvent.wheelDelta/120; }
+    if ( orgEvent.detail     ) { delta = -orgEvent.detail/3; }
+    
+    // New school multidimensional scroll (touchpads) deltas
+    deltaY = delta;
+    
+    // Gecko
+    if ( orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
+        deltaY = 0;
+        deltaX = -1*delta;
+    }
+    
+    // Webkit
+    if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY/120; }
+    if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = -1*orgEvent.wheelDeltaX/120; }
+    
+    // Add event and delta to the front of the arguments
+    args.unshift(event, delta, deltaX, deltaY);
+    
+    return ($.event.dispatch || $.event.handle).apply(this, args);
+}
+
+})(jQuery);

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1 - 0
sites/all/themes/figureslibres/inifig/js/libs/modernizr-2.6.1.min.js


+ 76 - 0
sites/all/themes/figureslibres/inifig/js/libs/mwheelIntent.js

@@ -0,0 +1,76 @@
+/**
+ * @author trixta
+ * @version 1.2
+ */
+(function($){
+
+var mwheelI = {
+			pos: [-260, -260]
+		},
+	minDif 	= 3,
+	doc 	= document,
+	root 	= doc.documentElement,
+	body 	= doc.body,
+	longDelay, shortDelay
+;
+
+function unsetPos(){
+	if(this === mwheelI.elem){
+		mwheelI.pos = [-260, -260];
+		mwheelI.elem = false;
+		minDif = 3;
+	}
+}
+
+$.event.special.mwheelIntent = {
+	setup: function(){
+		var jElm = $(this).bind('mousewheel', $.event.special.mwheelIntent.handler);
+		if( this !== doc && this !== root && this !== body ){
+			jElm.bind('mouseleave', unsetPos);
+		}
+		jElm = null;
+        return true;
+    },
+	teardown: function(){
+        $(this)
+			.unbind('mousewheel', $.event.special.mwheelIntent.handler)
+			.unbind('mouseleave', unsetPos)
+		;
+        return true;
+    },
+    handler: function(e, d){
+		var pos = [e.clientX, e.clientY];
+		if( this === mwheelI.elem || Math.abs(mwheelI.pos[0] - pos[0]) > minDif || Math.abs(mwheelI.pos[1] - pos[1]) > minDif ){
+            mwheelI.elem = this;
+			mwheelI.pos = pos;
+			minDif = 250;
+			
+			clearTimeout(shortDelay);
+			shortDelay = setTimeout(function(){
+				minDif = 10;
+			}, 200);
+			clearTimeout(longDelay);
+			longDelay = setTimeout(function(){
+				minDif = 3;
+			}, 1500);
+			e = $.extend({}, e, {type: 'mwheelIntent'});
+            return $.event.handle.apply(this, arguments);
+		}
+    }
+};
+$.fn.extend({
+	mwheelIntent: function(fn) {
+		return fn ? this.bind("mwheelIntent", fn) : this.trigger("mwheelIntent");
+	},
+	
+	unmwheelIntent: function(fn) {
+		return this.unbind("mwheelIntent", fn);
+	}
+});
+
+$(function(){
+	body = doc.body;
+	//assume that document is always scrollable, doesn't hurt if not
+	$(doc).bind('mwheelIntent.mwheelIntentDefault', $.noop);
+});
+})(jQuery);

+ 27 - 0
sites/all/themes/figureslibres/inifig/js/script.js

@@ -0,0 +1,27 @@
+
+// @codekit-prepend "gui.js"
+
+
+Drupal.behaviors.init_theme = function (context) {
+  // Growl-style system messages
+  $('#messages-and-help > div.messages:not(.processed)')
+    .addClass('processed')
+    .each(function() {
+      // If a message meets these criteria, we don't autoclose
+      // - contains a link
+      // - is an error or warning
+      // - contains a lenghthy amount of text
+      if ($('a', this).size() || $(this).is('.error') || $(this).is('.warning') || $(this).text().length > 100) {
+        $(this).prepend("<span class='close'>X</span>");
+        $('span.close', this).click(function() {
+          $(this).parent().slideUp('fast');
+        });
+      }
+      else {
+        // This essentially adds a 3 second pause before hiding the message.
+        $(this).animate({opacity:1}, 5000, 'linear', function() {
+          $(this).slideUp('fast');
+        });
+      }
+    });
+};

+ 254 - 0
sites/all/themes/figureslibres/inifig/less/styles.less

@@ -0,0 +1,254 @@
+/** 
+ * Primary Drupal Styles
+ * Author: g-u-i.net
+ */
+
+@import "gui.less";
+
+
+body{font-size:16px; font-family: Arial, "MS Trebuchet", sans-serif;}
+
+
+a{color: #007BC2; text-decoration: none;}
+
+
+h1{font-size:1.6em;}
+h2{font-size:1.5em;}
+h3{font-size:1.4em;}
+h4{font-size:1.3em;}
+h5{font-size:1.2em;}
+h6{font-size:1.1em;}
+
+input{font-family: Arial, "MS Trebuchet", sans-serif; font-size:0.8em;}
+
+
+
+/** layout */
+#center, #sidebar-first, #sidebar-second, .footer-block .region, .header-block{ display:inline-block; vertical-align: top;}
+
+body.two-sidebars #center { width: 54%; }
+body.sidebar-first #center { width: 73%; }
+body.sidebar-second #center { width: 80%; }
+body.no-sidebars #center { width: 100%; }
+
+#sidebar-first { width: 24%; }
+#sidebar-second { width: 18%; }
+
+#header, #main, #footer{ padding:1em; }
+
+body{background-color: #DFDFDF;}
+
+#container{width:1024px; margin:0 auto; background-color: #FFF;}
+
+#header, #footer{background-color: #535353; color:#fff;}
+
+.block, .panel-pane{
+	border: 1px solid #D1D1D1;  padding:0.5em; margin:0.5em;
+	-moz-border-radius: 5px;
+	-webkit-border-radius: 5px;
+	border-radius: 5px;
+	background-color: #EAEAEA;
+}
+
+.footer-block .block{
+	background-color: #353535; border: 1px solid #1a1a1a;
+}
+#footer-bottom{ text-align: center;}
+#footer-bottom .block{ background-color: transparent; border: 0 solid #999; font-size:0.7em;}
+
+#content{padding:1em;}
+
+.logo h1, h1.page-title{font-size:2em;}
+
+#header ul.menu li, 
+#content-top ul.menu li, 
+#content-bottom ul.menu li, 
+#footer ul.menu li{display:inline-block; vertical-align:top; }
+
+.views-row{margin-bottom:1em;}
+
+.views-field-title{font-size:1.1em; font-weight:bold;}
+.views-field-title a{color: #444444; text-decoration:none;}
+
+li, .item-list ul li{list-style: none inside url(); margin-left:0;}
+
+/** Messages. */
+
+div.messages {
+  padding: 9px;
+  margin: 0.5em 0 0;
+  color: #036;
+  background: #bdf;
+  border: 1px solid #ace;
+	-moz-border-radius: 5px;
+		-webkit-border-radius: 5px;
+		border-radius: 5px;
+		
+}
+
+div.warning {
+  color: #840;
+  background: #fe6;
+  border-color: #ed5;
+}
+
+div.error {
+  color: #fff;
+  background: #e63;
+  border-color: #d52;
+}
+
+div.error p.error {
+  color: #333;
+}
+
+div.status {
+  color: #360;
+  background: #cf8;
+  border-color: #be7;
+}
+
+
+
+/** Tab navigation */
+
+ul.primary, .views-admin-links ul {
+	font:13px/1.231 sans-serif; *font-size:small;	
+  border-collapse: collapse;
+  padding: 0 0 0 1em; /* LTR */
+  white-space: nowrap;
+  list-style: none;
+  margin: 5px;
+  height: auto;
+  line-height: normal;
+  border-bottom: 1px solid #bbb;
+}
+ul.primary li, .views-admin-links li{
+  display: inline;
+		
+}
+ul.primary li a, .views-admin-links li a {
+  background-color: #ddd;
+  border-color: #bbb;
+  border-width: 1px;
+  border-style: solid solid none solid;
+  height: auto;
+  margin-right: 0.5em; /* LTR */
+  padding: 0 1em;
+  text-decoration: none;
+	-moz-border-radius-topleft: 5px;
+		-webkit-border-top-left-radius: 5px;
+		border-top-left-radius: 5px;
+	-moz-border-radius-topright: 5px;
+		-webkit-border-top-right-radius: 5px;
+		border-top-right-radius: 5px;
+}
+ul.primary li.active a {
+  background-color: #fff;
+  border: 1px solid #bbb;
+  border-bottom: #fff 1px solid;
+}
+ul.primary li a:hover, .views-admin-links li a:hover{
+  background-color: #eee;
+  border-color: #ccc;
+  border-bottom-color: #eee;
+}
+
+ul.secondary {
+  border-bottom: 1px solid #bbb;
+  padding: 0.5em 1em;
+  margin: 5px;
+}
+ul.secondary li {
+  display: inline;
+  padding: 0 1em;
+  border-right: 1px solid #ccc; /* LTR */
+}
+ul.secondary a {
+  padding: 0;
+  text-decoration: none;
+}
+ul.secondary a.active {
+  border-bottom: 4px solid #999;
+}
+
+
+/** Form */
+
+#node-form .form-region-main{border-right: 1px solid #BFBFBF; padding-right:10px; width:68%;}
+#node-form .form-region-main label{float:left; min-width:25%;}
+#node-form .form-region-main input.form-text{width:40%;}
+
+#node-form .form-region-right{padding-left:5px;}
+#node-form .form-region-right label{float:left; min-width:35%;}
+#node-form .form-region-right input.form-text{width:60%;}
+
+#node-form .form-region-main label.option, #node-form .form-region-right label.option{float: none;}
+
+
+form:not(	#views-ui-config-item-form ) .form-item {
+    position:relative;
+/*    padding:9px;*/
+    }
+
+	form:not(	#views-ui-config-item-form ) .form-item .description{
+	  position:absolute;
+	  bottom:140%;
+/*	  right:-15px;*/
+	  z-index:5;
+		left:50%;
+	  color:#1A1A1A;
+		line-height:1.1;
+	  background:url(../images/popup.png) 50% 100% no-repeat;
+	  width:240px;
+	  margin:0px 0px -15px;
+	  padding:9px 10px 20px;
+	  display:none;
+		border-top: 1px solid #9F9F9F;
+	  }
+ form:not(	#views-ui-config-item-form )  .form-item:hover {
+    z-index:1;
+    height:auto; /* Fix for flicker in IE7 */
+    }
+ form:not(	#views-ui-config-item-form )  .form-item:hover > .description { display:block; }
+
+
+fieldset{
+	border: 1px solid #D4D4D4;
+	padding:10px;
+	margin-bottom:1em;
+	-moz-border-radius: 5px;
+		-webkit-border-radius: 5px;
+		border-radius: 5px;
+}
+
+fieldset legend{
+	font-size:1.6em;
+}
+
+input.form-text{max-width:95%;}
+
+/** TABLE */
+
+table{width:100%; 
+	-moz-border-radius: 5px;
+	-webkit-border-radius: 5px;
+	border-radius: 5px;
+}
+table thead th{
+	background-color: #CCC;
+	padding:0.5em 1em;
+	text-align: left;
+}
+table tbody tr.even, table tbody tr.odd{
+	border-bottom: 0 solid #CCCCCC;
+	padding: 0.1em 0.6em;
+}
+table tbody tr.even{background-color: #EEE;}
+table tbody tr.odd{background-color: #E5E5E5;}
+
+table tbody td{
+	padding:0.5em 1em;
+	text-align: left;
+}
+td.active {background-color: transparent;}

+ 68 - 0
sites/all/themes/figureslibres/inifig/less/wysiwyg.less

@@ -0,0 +1,68 @@
+/* LISIBILITY */
+@import "fonts.less";
+
+*{font-size:14px;}
+div{border: 1px dashed #D4D4D4;}
+p:after, ul:after{content:"¬"; color:red;}
+
+h1:before, h2:before, h3:before, h4:before, h5:before, h6:before{
+	 color:blue; font-weight: normal; font-size:10px; vertical-align: super;
+}
+
+h1:before{content:"h1 ";}
+h2:before{content:"h2 ";}
+h3:before{content:"h3 ";}
+h4:before{content:"h4 ";}
+h5:before{content:"h5 ";}
+h6:before{content:"h6 ";}
+
+
+h2{font-size:24px; .h2;}
+h3{font-size:18px; .h3;}
+h4{font-size:16px; .h4;}
+h5{font-size:14px; .h5;}
+h6{font-size:12px; .h6;}
+
+
+.side-note-4{.h4;}
+.side-note-5{.h5;}
+
+br:after{content:"·"; color:red; border: 1px solid #999;}
+
+/* LAYOUT AND GRAPHICS */
+#full{ width:99%; }
+#demi{ width:47%; }
+#tiers{ width:29%; }
+#quart{ width:23%; }
+#right{ float:right; margin-left:2%; }
+#left{ float:left; margin-right:2%; }
+#center{ display:block; margin:0 auto; }
+
+
+img{height:auto; margin:0.5em 0;}
+p{ .p; border: 1px dashed #848484; }
+div{border: 1px solid #1A1A1A;}
+
+img,p,div{ position:relative;
+	&:before{font-size:10px; color:red; background-color: #1A1A1A; position:absolute; top:0; z-index:3000;}
+		
+	&.full{#full; &:before{content:" full ";}}
+	&.demi{ #demi; margin-right:2%; &:before{content:" demi "; right:0;}}
+	&.tiers{ #tiers; margin-right:2%; &:before{content:" tiers "; right:0;}}
+	&.quart{ #quart; margin-right:2%; &:before{content:" quart "; right:0;}}
+
+	&.demi-left{ #demi; #left; &:before{content:" demi-left "; left:0;}}
+	&.demi-right{ #demi; #right;  &:before{content:" demi-right "; right:0;}}
+	&.demi-center{ #demi; #center;  &:before{content:" demi-denter "; right:0;}}
+
+	&.tiers-left{ #tiers; #left;  &:before{content:" tiers-left "; left:0;}}
+	&.tiers-right{ #tiers; #right;  &:before{content:" tiers-right "; right:0;}}
+	&.tiers-center{ #tiers; #center;  &:before{content:" tiers-center "; right:0;}}
+
+	&.quart-left{ #quart; #left;  &:before{content:" quart-left "; left:0;}}
+	&.quart-right{ #quart; #right;  &:before{content:" quart-right "; right:0;}}
+	&.quart-center{ #quart; #center;  &:before{content:" quart-center "; right:0;}}
+	
+
+	
+}

BIN
sites/all/themes/figureslibres/inifig/logo-lite-alpha.png


BIN
sites/all/themes/figureslibres/inifig/logo-lite.png


BIN
sites/all/themes/figureslibres/inifig/logo.png


+ 214 - 0
sites/all/themes/figureslibres/inifig/maintenance-page.tpl.php

@@ -0,0 +1,214 @@
+<!doctype html>
+
+<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ --> 
+<!--[if lt IE 7 ]> <html lang="<?php print $language->language ?>" class="no-js ie6"> <![endif]-->
+<!--[if IE 7 ]>    <html lang="<?php print $language->language ?>" class="no-js ie7"> <![endif]-->
+<!--[if IE 8 ]>    <html lang="<?php print $language->language ?>" class="no-js ie8"> <![endif]-->
+<!--[if IE 9 ]>    <html lang="<?php print $language->language ?>" class="no-js ie9"> <![endif]-->
+<!--[if (gt IE 9)|!(IE)]><!--> <html lang="<?php print $language->language ?>" class="no-js"> <!--<![endif]-->
+
+
+  <head>  
+	
+	  <!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame 
+	       Remove this if you use the .htaccess -->
+	  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+	
+    <title>
+      <?php print $head_title; ?>
+    </title> 
+
+    <?php print $head; ?>  
+
+		<meta charset="utf-8">
+		
+		
+		<!--  Mobile Viewport Fix
+	        j.mp/mobileviewport & davidbcalhoun.com/2010/viewport-metatag 
+	  device-width : Occupy full width of the screen in its current orientation
+	  initial-scale = 1.0 retains dimensions instead of zooming out if page height > device height
+	  maximum-scale = 1.0 retains dimensions instead of zooming in if page width < device width
+	  -->
+	  <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0;">
+	  
+
+	  <!-- Place favicon.ico and apple-touch-icon.png in the root of your domain and delete these references -->
+	  <link rel="shortcut icon" href="<?php print $base_path . path_to_theme() ?>/favicon.ico">
+	  <link rel="apple-touch-icon" href="<?php print $base_path . path_to_theme() ?>/apple-touch-icon.png">
+
+		
+		<?php print $styles; ?>
+    
+
+	  <!-- For the less-enabled mobile browsers like Opera Mini -->
+	  <link rel="stylesheet" media="handheld" href="<?php print $base_path . path_to_theme() ?>/css/handheld.css?v=1">
+
+
+	  <!-- All JavaScript at the bottom, except for Modernizr which enables HTML5 elements & feature detects -->
+	  <script src="<?php print $base_path . path_to_theme() ?>/js/modernizr-1.6.min.js"></script>    
+  </head>
+
+	<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
+
+		<body class="<?php print $body_classes; ?>">
+    
+    <?php if ($header): print '<div id="header-region-wrapper"><div id="header-region">'.$header.'</div></div>'; endif; ?>
+    
+    <div id="container">		 		
+      
+      <header id="header">
+        <div class="region-content">
+        <?php
+				if ($logo || $site_title) {
+        	print '<h1><a href="'. check_url($front_page) .'" title="'. $site_title .'">';
+        	if ($logo) {
+          	print '<img src="'. check_url($logo) .'" alt="'. $site_title .'" id="logo" title="Home" />';
+        	}
+        	print ($logo ? '' : $site_title_html) .'</a></h1>';
+      	}
+        ?>
+        </div>		
+
+				<?php if ($headerblock_left || $headerblock_middle || $headerblock_right): ?>
+					<div id="header-blocks">
+	          <?php if ($headerblock_left): ?>
+	            <div id="headerblock-left" class="headerblock-block">
+	              <?php print $headerblock_left ?>
+	            </div>
+	          <?php endif; ?>
+
+	          <?php if ($headerblock_middle): ?>
+	            <div id="headerblock-middle" class="headerblock-block">
+	              <?php print $headerblock_middle?>
+	            </div>
+	          <?php endif; ?>
+
+	          <?php if ($headerblock_right): ?>
+	            <div id="headerblock-right" class="headerblock-block">
+	              <?php print $headerblock_right ?>
+	            </div>
+	          <?php endif; ?>
+	        </div>
+				<?php endif; ?>
+				
+      </header> 
+      <!-- /header -->		 		
+
+
+       <main id="main">
+          
+         <section id="center">	
+
+           <?php if ($tabs) { ?><div class="tabs"><?php print $tabs ?></div><?php } ?>
+           <?php if ($show_messages && $messages): print $messages; endif; ?>
+           <?php if ($help): print $help; endif; ?>
+           
+						<?php if ($content_top): ?>
+            <section id="content-top">				
+             <?php print $content_bottom; ?>
+            </section>	
+						<?php endif; ?>
+						
+						<section id="content">
+             <?php if ($title) { ?><h1 class="pagetitle"><?php print $title ?></h1><?php } ?>
+             <?php print $content; ?>
+						</section>
+
+						<?php if ($content_bottom): ?>
+            <section id="content-bottom">				
+             <?php print $content_bottom; ?>
+            </section>	
+						<?php endif; ?>
+
+         </section>
+         <!-- /center -->					
+              
+              
+         <?php if ($left): ?>	        
+         <section id="sidebar-left" class="sidebar">
+           <?php print $left ?>	       	
+         </section> 
+         <!-- /sidebar-left -->	      	
+         <?php endif; ?>	 					
+              
+         <?php if ($right): ?> 	        
+         <section id="sidebar-right" class="sidebar">	          
+           <?php if ($search_box): ?><div class="block block-theme" id="searchbox"><?php print $search_box ?></div><?php endif; ?>
+           <?php print $right ?>	        
+         </section> 
+         <!-- /sidebar-right -->	      	
+         <?php endif; ?>
+              
+       </div><!-- /main -->	
+        		 			
+  	 		
+      <footer id="footer">
+      
+         		<?php if ($footer_top): ?> 	        
+                <div id="footer-top-wrapper">
+                  <div id="footer-top">	          
+                    <?php print $footer_top ?>	        
+                  </div>
+                </div>     	
+            <?php endif; ?>	 	
+            	
+						<?php if ($footer_left || $footer_middle_left || $footer_middle_right || $footer_right): ?> 	        
+	            <div class="footer-block">					
+              
+	              <?php if ($footer_left): ?> 	        
+	                <div id="footer-left" class="footer-block">	          
+	                  <?php print $footer_left ?>	        
+	                </div>
+	              <?php endif; ?>	 	
+              
+	              <?php if ($footer_middle_left): ?> 	        
+	                <div id="footer-middle-left" class="footer-block">	          
+	                  <?php print $footer_middle_left ?>	        
+	                </div>
+	              <?php endif; ?>
+              
+	              <?php if ($footer_middle_right): ?> 	        
+	                <div id="footer-middle-right" class="footer-block">	          
+	                  <?php print $footer_middle_right ?>	        
+	                </div>
+	              <?php endif; ?>
+              
+	              <?php if ($footer_right): ?> 	        
+	                <div id="footer-right" class="footer-block">	          
+	                  <?php print $footer_right ?>	        
+	                </div>
+	              <?php endif; ?>
+              </div>
+						<?php endif; ?>
+						
+						<?php if($footer_message): ?>
+            <div id="footer-message">
+            	<p><?php print $footer_message ?></p>
+            </div>
+            <?php endif; ?>
+      </footer> 
+      <!-- /footer -->	
+    
+    </div> 
+    <!-- /container -->	
+		
+	  <!-- Javascript at the bottom for fast page loading -->
+
+    <?php print $scripts; ?>
+
+
+	  <!-- yui profiler and profileviewer - remove for production -->
+	  <script src="<?php print $base_path . path_to_theme() ?>/js/profiling/yahoo-profiling.min.js?v=1"></script>
+	  <script src="<?php print $base_path . path_to_theme() ?>/js/profiling/config.js?v=1"></script>
+	  <!-- end profiling code -->
+
+
+	  <!--[if lt IE 7 ]>
+	    <script src="<?php print $base_path . path_to_theme() ?>/js/libs/dd_belatedpng.js"></script>
+	    <script> DD_belatedPNG.fix('img, .png_bg'); //fix any <img> or .png_bg background-images </script>
+	  <![endif]-->
+
+
+    <?php print $closure ?>
+  </body>
+</html>

+ 4 - 0
sites/all/themes/figureslibres/inifig/plugins/layouts/html5-2-col/html5-2-col.css

@@ -0,0 +1,4 @@
+.panel-html5-2col{width:100%;}
+.panel-html5-2col>*{float:left;width:50%;}
+.panel-html5-2col>.article{clear:both;}
+.clear-after:after{clear:both;content:'';display:block;height:0px;overflow:hidden;visibility:hidden;width:0px;}

+ 14 - 0
sites/all/themes/figureslibres/inifig/plugins/layouts/html5-2-col/html5-2-col.inc

@@ -0,0 +1,14 @@
+<?php
+
+// Plugin definition
+$plugin = array(
+	'title' => t('[Article] [Aside]'),
+	'category' => t('Columns: 2'),
+	'icon' => 'html5-2-col.png',
+	'theme' => 'panels_html5_2_col',
+	'css' => 'html5-2-col.css',
+	'regions' => array(
+		'article' => t('Article'),
+		'aside' => t('Aside'),
+	),
+);

BIN
sites/all/themes/figureslibres/inifig/plugins/layouts/html5-2-col/html5-2-col.png


+ 4 - 0
sites/all/themes/figureslibres/inifig/plugins/layouts/html5-2-col/panels-html5-2-col.tpl.php

@@ -0,0 +1,4 @@
+<div class="panel panel-html5-2col clear-after" <?php if (!empty($css_id)) { print "id=\"$css_id\""; } ?>>
+	<article class="article clear-after"><?php print $content['article']; ?></article>
+	<aside class="aside clear-after"><?php print $content['aside']; ?></aside>
+</div>

+ 2 - 0
sites/all/themes/figureslibres/inifig/plugins/layouts/html5-basic/html5-basic.css

@@ -0,0 +1,2 @@
+.panel-html5-basic{width:100%;}
+.clear-after:after{clear:both;content:'';display:block;height:0px;overflow:hidden;visibility:hidden;width:0px;}

+ 15 - 0
sites/all/themes/figureslibres/inifig/plugins/layouts/html5-basic/html5-basic.inc

@@ -0,0 +1,15 @@
+<?php
+
+// Plugin definition
+$plugin = array(
+	'title' => t('[Header] [Nav] [Section]'),
+	'category' => t('Columns: 1'),
+	'icon' => 'html5-basic.png',
+	'theme' => 'panels_html5_basic',
+	'css' => 'html5-basic.css',
+	'regions' => array(
+		'header' => t('Header'),
+		'nav' => t('Nav'),
+		'section' => t('Section'),
+	),
+);

BIN
sites/all/themes/figureslibres/inifig/plugins/layouts/html5-basic/html5-basic.png


+ 5 - 0
sites/all/themes/figureslibres/inifig/plugins/layouts/html5-basic/panels-html5-basic.tpl.php

@@ -0,0 +1,5 @@
+<div class="panel-html5-basic clear-after" <?php if (!empty($css_id)) { print "id=\"$css_id\""; } ?>>
+	<header class="header clear-after"><?php print $content['header']; ?></header>
+	<nav class="nav clear-after"><?php print $content['nav']; ?></nav>
+	<section class="section clear-after"><?php print $content['section']; ?></section>
+</div>

+ 2 - 0
sites/all/themes/figureslibres/inifig/plugins/layouts/html5-custom-2/html5-custom-2.css

@@ -0,0 +1,2 @@
+.panel-html5-custom-2{width:100%;}
+.clear-after:after{clear:both;content:'';display:block;height:0px;overflow:hidden;visibility:hidden;width:0px;}

+ 15 - 0
sites/all/themes/figureslibres/inifig/plugins/layouts/html5-custom-2/html5-custom-2.inc

@@ -0,0 +1,15 @@
+<?php
+
+// Plugin definition
+$plugin = array(
+	'title' => t('[Article] [Nav] [Aside]'),
+	'category' => t('Columns: 1'),
+	'icon' => 'html5-custom-2.png',
+	'theme' => 'panels_html5_custom_2',
+	'css' => 'html5-custom-2.css',
+	'regions' => array(
+		'article' => t('Article'),
+		'nav' => t('Nav'),
+		'aside' => t('Aside'),
+	),
+);

BIN
sites/all/themes/figureslibres/inifig/plugins/layouts/html5-custom-2/html5-custom-2.png


+ 5 - 0
sites/all/themes/figureslibres/inifig/plugins/layouts/html5-custom-2/panels-html5-custom-2.tpl.php

@@ -0,0 +1,5 @@
+<div class="panel panel-html5-custom2 clear-after" <?php if (!empty($css_id)) { print "id=\"$css_id\""; } ?>>
+	<article class="article clear-after"><?php print $content['article']; ?></article>
+	<nav class="nav clear-after"><?php print $content['nav']; ?></nav>
+	<aside class="aside clear-after"><?php print $content['aside']; ?></aside>
+</div>

+ 5 - 0
sites/all/themes/figureslibres/inifig/plugins/layouts/html5-custom/html5-custom.css

@@ -0,0 +1,5 @@
+.panel-html5-custom{width:100%;}
+.panel-html5-custom .nav{ float:left; width:100%; }
+.panel-html5-custom .article{ clear:both; float:left; width:50%; }
+.panel-html5-custom .aside{ float:right; width:50%; }
+.clear-after:after{clear:both;content:'';display:block;height:0px;overflow:hidden;visibility:hidden;width:0px;}

+ 16 - 0
sites/all/themes/figureslibres/inifig/plugins/layouts/html5-custom/html5-custom.inc

@@ -0,0 +1,16 @@
+<?php
+
+// Plugin definition
+$plugin = array(
+	'title' => t('[Nav] [Article] [Aside]'),
+	'category' => t('Columns: 2'),
+	'icon' => 'html5-custom.png',
+	'theme' => 'panels_html5_custom',
+	'css' => 'html5-custom.css',
+	'regions' => array(
+		'nav' => t('Nav'),
+		'article' => t('Article'),
+		'aside-nav' => t('Aside >  Nav'),
+		'aside-content' => t('Aside > Content'),
+	),
+);

BIN
sites/all/themes/figureslibres/inifig/plugins/layouts/html5-custom/html5-custom.png


+ 9 - 0
sites/all/themes/figureslibres/inifig/plugins/layouts/html5-custom/panels-html5-custom.tpl.php

@@ -0,0 +1,9 @@
+<div class="panel panel-html5-custom clear-after" <?php if (!empty($css_id)) { print "id=\"$css_id\""; } ?>>
+	<nav class="nav clear-after"><?php print $content['nav']; ?></nav>
+	<article class="article clear-after"><?php print $content['article']; ?></article>
+	<aside class="aside clear-after">
+		
+		<?php if($content['aside-nav']): ?><nav class="aside-nav clear-after"><?php print $content['aside-nav']; ?></nav><?php endif; ?>
+		<?php print $content['aside-content']; ?>
+	</aside>
+</div>

+ 29 - 0
sites/all/themes/figureslibres/inifig/plugins/styles/minimum.inc

@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * @file
+ * Definition of the 'default' panel style.
+ */
+
+// Plugin definition
+$plugin = array(
+  'title' => t('Minimum HTML'),
+  'description' => t('The default panel rendering style; without separator.'),
+  'render pane' => 'panels_minimum_style_render_pane',
+  'render region' => 'panels_minimum_style_render_region',
+);
+
+/**
+ * Render callback.
+ *
+ * @ingroup themeable
+ */
+function theme_panels_minimum_style_render_pane($vars) {
+	return render($vars['content']->content);
+}
+
+
+function theme_panels_minimum_style_render_region($vars) {
+	return implode($vars['panes']);
+}
+

+ 6 - 0
sites/all/themes/figureslibres/inifig/preprocess/block.pre.php

@@ -0,0 +1,6 @@
+<?php 
+
+// 
+
+	$vars['attributes']['class']='block block-'. $vars['block']->module .' '. (isset($vars['skinr']) ? $vars['skinr'] : '');
+	$vars['attributes']['id'] = 'block-'. $vars['block']->module .'-'. $vars['block']->delta;

+ 17 - 0
sites/all/themes/figureslibres/inifig/preprocess/comment-wrapper.pre.php

@@ -0,0 +1,17 @@
+<?php
+
+/**
+ * @file template.preprocess-comment-wrapper.inc
+ */
+
+global $theme;
+
+$classes = array();
+
+# Add support for Skinr module classes http://drupal.org/project/skinr
+if (function_exists('node_skinr_data') && !empty($vars['skinr'])) {
+  $classes[] = $vars['skinr'];
+}
+ 
+# Class for content types: "forum-comments", "blog-comments", etc.
+$vars['classes'] .= ' '. $vars['node']->type .'-comments';

+ 8 - 0
sites/all/themes/figureslibres/inifig/preprocess/field.pre.php

@@ -0,0 +1,8 @@
+<?php 
+
+//dsm($vars);
+
+$vars['theme_hook_suggestions'][] = 'field__' . $vars['element']['#view_mode'];
+$vars['theme_hook_suggestions'][] = 'field__' . $vars['element']['#field_type'] . '__' . $vars['element']['#view_mode'];
+$vars['theme_hook_suggestions'][] = 'field__' . $vars['element']['#field_name'] . '__' . $vars['element']['#view_mode'];
+

+ 108 - 0
sites/all/themes/figureslibres/inifig/preprocess/html.pre.php

@@ -0,0 +1,108 @@
+<?php 
+
+if (module_exists('rdf')) {
+  $vars['doctype'] = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML+RDFa 1.1//EN">' . "\n";
+  $vars['rdf_profile'] = ' profile="' . $vars['grddl_profile'] . '"';
+}
+else {
+  $vars['doctype'] = '<!DOCTYPE html>' . "\n";
+  $vars['rdf_profile'] = '';
+}
+
+
+# Add mobile meta tags to $head ADD this to your subtheme
+$heads = array();
+
+$heads['HandheldFriendly'] = array(
+  '#tag' => 'meta',
+  '#attributes' => array(
+    'name' => 'HandheldFriendly', 
+    'content' => 'true',
+  ),
+);
+
+
+
+#  Mobile Viewport Fix
+# j.mp/mobileviewport & davidbcalhoun.com/2010/viewport-metatag 
+# device-width : Occupy full width of the screen in its current orientation
+# initial-scale = 1.0 retains dimensions instead of zooming out if page height > device height
+# maximum-scale = 1.0 retains dimensions instead of zooming in if page width < device width
+
+$heads['viewport'] = array(
+  '#tag' => 'meta',
+  '#attributes' => array(
+    'name' => 'viewport', 
+    'content' => 'width=device-width,initial-scale=1',
+  ),
+);
+
+
+
+# Add these icons links to your sub theme
+# or Place favicon.ico and apple-touch-icon.png in the root of your domain and delete these references
+
+// $head[] = '<link rel="apple-touch-icon" sizes="72x72" href="'. base_path() . path_to_theme() .'/touch-icon-ipad.png'.'"/>' . "\n";
+// $head[] = '<link rel="apple-touch-icon" sizes="114x114" href="'. base_path() . path_to_theme() .'/touch-icon-iphone4.png'.'"/>' . "\n";
+
+$heads['icon'] = array(
+  '#tag' => 'link',
+  '#attributes' => array(
+    'href' => base_path() . path_to_theme() .'/icon.png', 
+    'rel' => 'shortcut icon',
+    'type' => 'image/png',
+  ),
+);
+
+$heads['apple-touch-icon'] = array(
+  '#tag' => 'link',
+  '#attributes' => array(
+    'href' => base_path() . path_to_theme() .'/apple-touch-icon.png', 
+    'rel' => 'apple-touch-icon',
+  ),
+);
+
+foreach ($heads as $type=>$head)
+	drupal_add_html_head($head, $type);
+
+
+
+// $vars['head'] = implode('', $head);
+
+
+# add body classes
+if(isset($vars['node'])){
+	
+	# from taxonomy
+	foreach ($vars['node']->taxonomy as $tid => $term) {
+		$vars['classes_array'][] = 'term-vid-'. $term->vid .' term-tid-'. $tid;
+	}
+	
+	# from menu
+	$mlid = db_result(db_query("SELECT mlid FROM {menu_links} WHERE link_path = '%s'", 'node/'. $vars['node']->nid));
+  // Now get the menu related information.
+  if (!empty($mlid) || !empty($node->menu['mlid']) || !empty($node->menu['plid'])) {
+    $menu_link = menu_link_load($mlid);
+		// krumo($menu_link);
+		$vars['classes_array'][] = ' mlid-'. $menu_link['mlid'] .' plid-'. $menu_link['plid'];
+	}
+}
+
+
+# theme layout settings
+
+if(isset($vars['page']['sidebar_first']) && isset($vars['page']['sidebar_second'])){
+	$layout = 'two-sidebars';	
+}else if(isset($vars['page']['sidebar_first']) || isset($vars['page']['sidebar_second'])){
+	$layout = isset($vars['page']['sidebar_first']) ? 'sidebar-first' : 'sidebar-second';
+}else{
+	$layout = 'no-sidebar';
+}
+$vars['classes_array'][] = $layout;
+
+if (theme_get_setting('layout_enable_settings') == 'on') {
+  $method = theme_get_setting('layout_method');	
+	$vars['method'] = $method;
+	$vars['classes_array'][] .= ' layout-method-'.$method;
+	
+}

+ 7 - 0
sites/all/themes/figureslibres/inifig/preprocess/node.pre.php

@@ -0,0 +1,7 @@
+<?php 
+
+//dsm($vars);
+
+$vars['theme_hook_suggestions'][] = 'node__'.$vars['view_mode'];
+$vars['theme_hook_suggestions'][] = 'node__' . $vars['type'] . '__' . $vars['view_mode'];
+

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác