Scott Main | e4d8f1b | 2012-06-21 18:03:05 -0700 | [diff] [blame^] | 1 | /*
|
| 2 | * Release: 1.3.1 2009-04-26
|
| 3 | */
|
| 4 | /*
|
| 5 | * Copyright (c) Andr?e Hansson (peolanha AT gmail DOT com)
|
| 6 | * MIT License - http://www.opensource.org/licenses/mit-license.php
|
| 7 | * Idea loosely based on JASH, http://billyreisinger.com/jash/
|
| 8 | *
|
| 9 | * Website: http://gridder.andreehansson.se/
|
| 10 | *
|
| 11 | * Changelog:
|
| 12 | * - New GUI! The new GUI should be less obtrusive and has been repositioned.
|
| 13 | * It is also featuring a slight delay on inputs so that you'll have a chance
|
| 14 | * to change the settings before it is re-rendering the grid
|
| 15 | * - Due to a lot of inquries regarding affiliation with jQuery the filenames has
|
| 16 | * been changed, I'm very sorry for the inconvenience!
|
| 17 | * - CSS issues with the GUI should also be fixed in more websites, please report
|
| 18 | * in any issue you stumble upon
|
| 19 | * - A small bug in IE that made the paragraph lines not position correctly has been
|
| 20 | * fixed
|
| 21 | * - A dropdown box has replaced the columns input box, 960 Gridder calculates the
|
| 22 | * proper number of columns that can be used with the specified grid width
|
| 23 | * - The 960 Gridder is now displaying perfectly (into the very pixels) in all
|
| 24 | * A-grade browsers (according to browsershots.org)
|
| 25 | * - An option to invert the gutters has been added, set this to 'true' if
|
| 26 | * you want to use it, OR use the shortcut CTRL+ALT+A
|
| 27 | * - Some other minor changes...
|
| 28 | */
|
| 29 | function Grid() {
|
| 30 | var c = this;
|
| 31 | c.settingsDef = {
|
| 32 | urlBase: "http://gridder.andreehansson.se/releases/1.3.1/",
|
| 33 | gColor: "#EEEEEE",
|
| 34 | gColumns: 12,
|
| 35 | gOpacity: 0.45,
|
| 36 | gWidth: 10,
|
| 37 | pColor: "#C0C0C0",
|
| 38 | pHeight: 15,
|
| 39 | pOffset: 0,
|
| 40 | pOpacity: 0.55,
|
| 41 | center: true,
|
| 42 | invert: false,
|
| 43 | gEnabled: true,
|
| 44 | pEnabled: true,
|
| 45 | size: 960,
|
| 46 | fixFlash: true,
|
| 47 | setupEnabled: true,
|
| 48 | pressedKeys: [],
|
| 49 | delayTimer: ""
|
| 50 | };
|
| 51 | c.settings = (typeof (window.gOverride) === "undefined") ? {} : window.gOverride;
|
| 52 | for (var a in c.settingsDef) {
|
| 53 | if (typeof (c.settings[a]) === "undefined") {
|
| 54 | c.settings[a] = c.settingsDef[a];
|
| 55 | }
|
| 56 | }
|
| 57 | if (typeof (window.jQuery) === "undefined" || jQuery().jquery.match(/^1\.3/) === null) {
|
| 58 | window.jQuery = undefined;
|
| 59 | var b = document.createElement("script");
|
| 60 | b.type = "text/javascript";
|
| 61 | b.src = c.settings.urlBase + "jquery.js";
|
| 62 | document.body.appendChild(b);
|
| 63 | }
|
| 64 | c._createEntity = function (e, d) {
|
| 65 | jQuery('<div class="g-' + e + '"> </div>').appendTo("#g-grid").css(d);
|
| 66 | };
|
| 67 | c._setVariable = function (d, e) {
|
| 68 | d = d.replace(/g-setup-/, "");
|
| 69 | if (isNaN(parseInt(e, 10)) || parseInt(e, 10) === 0) {
|
| 70 | c.settings[d] = e;
|
| 71 | } else {
|
| 72 | c.settings[d] = parseInt(e, 10);
|
| 73 | }
|
| 74 | if (e === true) {
|
| 75 | jQuery("#g-setup-" + d).attr("checked", "checked");
|
| 76 | } else {
|
| 77 | if (e === false) {
|
| 78 | jQuery("#g-setup-" + d).removeAttr("checked");
|
| 79 | } else {
|
| 80 | jQuery("#g-setup-" + d).val(e);
|
| 81 | }
|
| 82 | }
|
| 83 | };
|
| 84 | c.setupWindow = function () {
|
| 85 | jQuery('<style type"text/css">#g-setup{position:absolute;top:150px;left:-310px;padding:6px;margin:0;list-style:none;width:320px!important;background-color:#d1cfe6;border:2px solid #a19bd1;z-index:2100; display:none;}#g-setup *{background:transparent!important;border:0!important;color:#58517c!important;font-family:Verdana,Geneva,sans-serif!important;font-size:10px!important;font-weight:normal!important;letter-spacing:normal!important;line-height:1!important;list-style-type:none!important;margin:0!important;padding:0!important;text-decoration:none!important;text-indent:0!important;text-transform:none!important;word-spacing:0!important;z-index:2100!important;}#g-setup .head{font-weight:bold!important;text-align:center;border-bottom:1px solid #7cb267!important;}#g-setup ul{width:150px;float:left!important;}#g-setup li{clear:left;padding:5px!important;}* html #g-setup li{clear:none!important;padding:4px!important;}#g-setup span{float:left!important;width:50px;padding:1px 4px 0 0!important;text-align:right!important;line-height:1.5!important;}#g-setup input,#g-setup select{float:left!important;width:70px;border:1px solid #a19bd1!important;background-color:#e7e6ee!important;padding:2px!important;}#g-setup select{width:77px;padding:0!important;}#g-setup-misc{margin-top:5px!important;clear:left;float:none!important;width:300px!important;border-top:1px solid #7cb267!important;}#g-setup-misc span{line-height:1.1!important;width:200px;}#g-setup-misc input{width:15px;padding:0!important;height:15px;}#g-setup-tab{width:26px;overflow:hidden;position:absolute;top:0;left:100%;margin-left:-26px!important;z-index:2100!important;}#g-setup-tab img{left:0;position:relative;}#g-grid{left:0;position:absolute;z-index:500;top:0;}#g-grid .g-vertical,#g-grid .g-horizontal{position:absolute;z-index:1000;}*:first-child+html #g-grid .g-horizontal,*:first-child+html #g-grid .g-vertical{margin-left:-1px;}#g-grid .g-horizontal{min-height:1px;height:1px;font-size:0;line-height:0;}</style>').appendTo("head");
|
| 86 | c.settings.height = jQuery(document).height();
|
| 87 | if (c.settings.setupEnabled) {
|
| 88 | jQuery('<div id="g-setup"><ul><li class="head">Vertical</li><li><span>Color</span><input id="g-setup-gColor" /></li><li><span>Opacity</span><input id="g-setup-gOpacity" /></li><li><span>Width</span><input id="g-setup-gWidth" /></li><li><span>Columns</span><select id="g-setup-gColumns"></select></li></ul><ul><li class="head">Horizontal</li><li><span>Color</span><input id="g-setup-pColor" /></li><li><span>Opacity</span><input id="g-setup-pOpacity" /></li><li><span>Height</span><input id="g-setup-pHeight" /></li><li><span>Offset</span><input id="g-setup-pOffset" /></li></ul><ul id="g-setup-misc"><li><span>Enable vertical (gutters)</span><input id="g-setup-gEnabled" type="checkbox" /></li><li><span>Enable horizontal (paragraphs)</span><input id="g-setup-pEnabled" type="checkbox" /></li><li><span>Invert vertical</span><input id="g-setup-invert" type="checkbox" /></li><li><span>Center grid</span><input id="g-setup-center" type="checkbox" /></li></ul><div style="clear: left;"></div><div id="g-setup-tab"><a href="javascript:;"><img src="http://gridder.andreehansson.se/releases/1.3.1/logo-sprite.png" alt="" /></a></div></div>').appendTo("body");
|
| 89 | for (var d = 2; d < 48; d++) {
|
| 90 | if (Math.round((c.settings.size / d)) === (c.settings.size / d)) {
|
| 91 | jQuery('<option value="' + d + '">' + d + "</option>").appendTo("#g-setup-gColumns");
|
| 92 | }
|
| 93 | }
|
| 94 | for (var d in c.settings) {
|
| 95 | if (jQuery("#g-setup-" + d).length !== 0) {
|
| 96 | if (jQuery("#g-setup-" + d).parent().parent().is("#g-setup-misc") && c.settings[d]) {
|
| 97 | jQuery("#g-setup-" + d).attr("checked", "checked");
|
| 98 | } else {
|
| 99 | jQuery("#g-setup-" + d).val(c.settings[d]);
|
| 100 | }
|
| 101 | }
|
| 102 | }
|
| 103 | jQuery("#g-setup").css("top", jQuery(window).scrollTop() + 150);
|
| 104 | jQuery("#g-setup-tab a").click(function () {
|
| 105 | c.toggleSetupWindow();
|
| 106 | });
|
| 107 | jQuery("#g-setup input").keyup(function () {
|
| 108 | var e = this;
|
| 109 | clearTimeout(c.settings.delayTimer);
|
| 110 | c.settings.delayTimer = setTimeout(function () {
|
| 111 | c.setVariable(jQuery(e).attr("id"), jQuery(e).val());
|
| 112 | }, 700);
|
| 113 | });
|
| 114 | jQuery("#g-setup-gColumns").change(function () {
|
| 115 | c.setVariable("gColumns", $(this).val());
|
| 116 | });
|
| 117 | jQuery("#g-setup-misc input").click(function () {
|
| 118 | c.setVariable(jQuery(this).attr("id"), jQuery(this).attr("checked"));
|
| 119 | });
|
| 120 | jQuery().keydown(function (f) {
|
| 121 | if (jQuery.inArray(f.which, c.settings.pressedKeys) === -1) {
|
| 122 | c.settings.pressedKeys.push(f.which);
|
| 123 | }
|
| 124 | });
|
| 125 | jQuery(window).scroll(function () {
|
| 126 | jQuery("#g-setup").css("top", jQuery().scrollTop() + 150);
|
| 127 | });
|
| 128 | }
|
| 129 | jQuery().keyup(function (g) {
|
| 130 | if (jQuery.inArray(17, c.settings.pressedKeys) !== -1 && jQuery.inArray(18, c.settings.pressedKeys) !== -1) {
|
| 131 | if (jQuery.inArray(90, c.settings.pressedKeys) !== -1) {
|
| 132 | c.setVariable("gEnabled", !c.settings.gEnabled);
|
| 133 | } else {
|
| 134 | if (jQuery.inArray(88, c.settings.pressedKeys) !== -1) {
|
| 135 | c.setVariable("pEnabled", !c.settings.pEnabled);
|
| 136 | } else {
|
| 137 | if (jQuery.inArray(65, c.settings.pressedKeys) !== -1) {
|
| 138 | c.setVariable("invert", !c.settings.invert);
|
| 139 | } else {
|
| 140 | if (jQuery.inArray(67, c.settings.pressedKeys) !== -1) {
|
| 141 | c.setVariable({
|
| 142 | gEnabled: !c.settings.gEnabled,
|
| 143 | pEnabled: !c.settings.pEnabled
|
| 144 | });
|
| 145 | }
|
| 146 | }
|
| 147 | }
|
| 148 | }
|
| 149 | }
|
| 150 | var f = jQuery.inArray(g.which, c.settings.pressedKeys);
|
| 151 | c.settings.pressedKeys.splice(f, f);
|
| 152 | });
|
| 153 | };
|
| 154 | c.setVariable = function () {
|
| 155 | if (typeof (arguments[0]) === "object") {
|
| 156 | for (var d in arguments[0]) {
|
| 157 | c._setVariable(d, arguments[0][d]);
|
| 158 | }
|
| 159 | } else {
|
| 160 | c._setVariable(arguments[0], arguments[1]);
|
| 161 | }
|
| 162 | c.createGrid();
|
| 163 | };
|
| 164 | c.toggleSetupWindow = function () {
|
| 165 | var d = jQuery("#g-setup-tab img");
|
| 166 | d.css("left", d.position().left === 0 ? -26 : 0);
|
| 167 | if (parseInt(jQuery("#g-setup").css("left"), 10) === 0) {
|
| 168 | jQuery("#g-setup").animate({
|
| 169 | left: -310
|
| 170 | }, 200);
|
| 171 | } else {
|
| 172 | jQuery("#g-setup").animate({
|
| 173 | left: 0
|
| 174 | }, 200);
|
| 175 | }
|
| 176 | };
|
| 177 | c.createGrid = function () {
|
| 178 | jQuery("embed").each(function () {
|
| 179 | if (c.settings.fixFlash) {
|
| 180 | jQuery(this).attr("wmode", "transparent");
|
| 181 | } else {
|
| 182 | jQuery(this).removeAttr("wmode");
|
| 183 | }
|
| 184 | var i = jQuery(this).wrap("<div></div>").parent().html();
|
| 185 | jQuery(this).parent().replaceWith(i);
|
| 186 | jQuery(this).remove();
|
| 187 | });
|
| 188 | jQuery("#g-grid").remove();
|
| 189 | jQuery('<div id="g-grid"></div>').appendTo("body").css("width", c.settings.size);
|
| 190 | if (c.settings.center) {
|
| 191 | jQuery("#g-grid").css({
|
| 192 | left: "50%",
|
| 193 | marginLeft: -((c.settings.size / 2) + c.settings.gWidth)
|
| 194 | });
|
| 195 | }
|
| 196 | if (c.settings.gEnabled && c.settings.gColumns > 0) {
|
| 197 | if (c.settings.invert) {
|
| 198 | jQuery().css("overflow-x", "hidden");
|
| 199 | var e = (jQuery(window).width() - c.settings.size) / 2;
|
| 200 | c._createEntity("vertical", {
|
| 201 | left: -e,
|
| 202 | width: e,
|
| 203 | height: c.settings.height,
|
| 204 | backgroundColor: c.settings.gColor,
|
| 205 | opacity: c.settings.gOpacity
|
| 206 | });
|
| 207 | for (var g = 0; g < c.settings.gColumns; g++) {
|
| 208 | var f = (c.settings.size / c.settings.gColumns) - (c.settings.gWidth * 2);
|
| 209 | var h = (c.settings.gWidth * 2);
|
| 210 | c._createEntity("vertical", {
|
| 211 | left: ((f + h) * g) + h,
|
| 212 | width: f + "px",
|
| 213 | height: c.settings.height,
|
| 214 | backgroundColor: c.settings.gColor,
|
| 215 | opacity: c.settings.gOpacity
|
| 216 | });
|
| 217 | }
|
| 218 | if ((c.settings.height + 10) > jQuery(window).height()) {
|
| 219 | e -= 10;
|
| 220 | }
|
| 221 | c._createEntity("vertical", {
|
| 222 | left: "100%",
|
| 223 | marginLeft: 20,
|
| 224 | width: e,
|
| 225 | height: c.settings.height,
|
| 226 | backgroundColor: c.settings.gColor,
|
| 227 | opacity: c.settings.gOpacity
|
| 228 | });
|
| 229 | } else {
|
| 230 | for (var g = 0; g <= c.settings.gColumns; g++) {
|
| 231 | c._createEntity("vertical", {
|
| 232 | left: ((c.settings.size / c.settings.gColumns) * g),
|
| 233 | width: (c.settings.gWidth * 2),
|
| 234 | height: c.settings.height,
|
| 235 | backgroundColor: c.settings.gColor,
|
| 236 | opacity: c.settings.gOpacity
|
| 237 | });
|
| 238 | }
|
| 239 | }
|
| 240 | }
|
| 241 | if (c.settings.pEnabled && c.settings.pHeight > 1) {
|
| 242 | var d = ((c.settings.height - c.settings.pOffset) / c.settings.pHeight);
|
| 243 | for (g = 0; g <= d; g++) {
|
| 244 | c._createEntity("horizontal", {
|
| 245 | top: ((c.settings.height / d) * g) + c.settings.pOffset,
|
| 246 | left: "50%",
|
| 247 | marginLeft: -(c.settings.size / 2),
|
| 248 | width: (c.settings.size + (c.settings.gWidth * 2)),
|
| 249 | backgroundColor: c.settings.pColor,
|
| 250 | opacity: c.settings.pOpacity
|
| 251 | });
|
| 252 | }
|
| 253 | }
|
| 254 | };
|
| 255 | }
|
| 256 | var checkJQuery = function () {
|
| 257 | if (typeof (window.jQuery) === "undefined") {
|
| 258 | setTimeout(function () {
|
| 259 | checkJQuery();
|
| 260 | }, 10);
|
| 261 | } else {
|
| 262 | window.grid.setupWindow();
|
| 263 | window.grid.createGrid();
|
| 264 | }
|
| 265 | };
|
| 266 | if (typeof (window.grid) === "undefined") {
|
| 267 | window.grid = new Grid();
|
| 268 | checkJQuery();
|
| 269 | } else {
|
| 270 | window.grid.toggleSetupWindow();
|
| 271 | } |