summaryrefslogtreecommitdiff
path: root/MobileCydia.app/menes
diff options
context:
space:
mode:
authorJay Freeman (saurik) <saurik@saurik.com>2010-10-28 02:25:18 -0700
committerJay Freeman (saurik) <saurik@saurik.com>2010-11-01 22:56:25 -0700
commite17a8c4f2ae16f8daab460936a9b130d024173dd (patch)
tree1544816ffb283219f2de45b0a8e99d6f7ebe24f6 /MobileCydia.app/menes
parent6067f1b8116d8fb2502359f430b9d958e10807b9 (diff)
Rename Cydia.* to MobileCydia.* and add Cydia.frappliance.
Diffstat (limited to 'MobileCydia.app/menes')
-rw-r--r--MobileCydia.app/menes/chevron.pngbin0 -> 289 bytes
-rw-r--r--MobileCydia.app/menes/chevron@2x.pngbin0 -> 415 bytes
-rw-r--r--MobileCydia.app/menes/indicator-c7ced5-4d4d70.gifbin0 -> 1849 bytes
-rw-r--r--MobileCydia.app/menes/menes.js575
-rw-r--r--MobileCydia.app/menes/style.css885
5 files changed, 1460 insertions, 0 deletions
diff --git a/MobileCydia.app/menes/chevron.png b/MobileCydia.app/menes/chevron.png
new file mode 100644
index 0000000..6ff8205
--- /dev/null
+++ b/MobileCydia.app/menes/chevron.png
Binary files differ
diff --git a/MobileCydia.app/menes/chevron@2x.png b/MobileCydia.app/menes/chevron@2x.png
new file mode 100644
index 0000000..9905c17
--- /dev/null
+++ b/MobileCydia.app/menes/chevron@2x.png
Binary files differ
diff --git a/MobileCydia.app/menes/indicator-c7ced5-4d4d70.gif b/MobileCydia.app/menes/indicator-c7ced5-4d4d70.gif
new file mode 100644
index 0000000..e41bb96
--- /dev/null
+++ b/MobileCydia.app/menes/indicator-c7ced5-4d4d70.gif
Binary files differ
diff --git a/MobileCydia.app/menes/menes.js b/MobileCydia.app/menes/menes.js
new file mode 100644
index 0000000..dc210bb
--- /dev/null
+++ b/MobileCydia.app/menes/menes.js
@@ -0,0 +1,575 @@
+/* XXX: this message is ultra-lame */
+var _assert = function (expr, value) {
+ if (!expr) {
+ var message = "_assert(" + value + ")";
+ console.log(message);
+ throw message;
+ }
+}
+
+// Compatibility {{{
+if (typeof Array.prototype.push != "function")
+ Array.prototype.push = function (value) {
+ this[this.length] = value;
+ };
+// }}}
+
+var $ = function (arg, doc) {
+ if (this.magic_ != $.prototype.magic_)
+ return new $(arg);
+
+ if (arg == null)
+ arg = [];
+
+ var type = $.type(arg);
+
+ if (type == "function")
+ $.ready(arg);
+ else if (type == "string") {
+ if (typeof doc == 'undefined')
+ doc = document;
+ if (arg.charAt(0) == '#') {
+ /* XXX: this is somewhat incorrect-a-porter */
+ var element = doc.getElementById(arg.substring(1));
+ return $(element == null ? [] : [element]);
+ } else if (arg.charAt(0) == '.')
+ return $(doc.getElementsByClassName(arg.substring(1)));
+ else
+ return $([doc]).descendants(arg);
+ } else if (typeof arg.length != 'undefined') {
+ _assert(typeof doc == 'undefined', "non-query with document to $");
+ this.set(arg);
+ return this;
+ } else _assert(false, "unknown argument to $: " + typeof arg);
+};
+
+$.xml = function (value) {
+ return value
+ .replace(/&/, "&amp;")
+ .replace(/</, "&lt;")
+ .replace(/>/, "&gt;")
+ .replace(/"/, "&quot;")
+ .replace(/'/, "&apos;")
+ ;
+}
+
+$.type = function (value) {
+ var type = typeof value;
+
+ if ((type == "function" || type == "object") && value.toString != null) {
+ var string = value.toString();
+ if (string.substring(0, 8) == "[object ")
+ return string.substring(8, string.length - 1);
+ }
+
+ return type;
+};
+
+(function () {
+ var ready_ = null;
+
+ $.ready = function (_function) {
+ if (ready_ == null) {
+ ready_ = [];
+
+ document.addEventListener("DOMContentLoaded", function () {
+ for (var i = 0; i != ready_.length; ++i)
+ ready_[i]();
+ }, false);
+ }
+
+ ready_.push(_function);
+ };
+})();
+
+/* XXX: verify arg3 overflow */
+$.each = function (values, _function, arg0, arg1, arg2) {
+ for (var i = 0, e = values.length; i != e; ++i)
+ _function(values[i], arg0, arg1, arg2);
+};
+
+/* XXX: verify arg3 overflow */
+$.map = function (values, _function, arg0, arg1, arg2) {
+ var mapped = [];
+ for (var i = 0, e = values.length; i != e; ++i)
+ mapped.push(_function(values[i], arg0, arg1, arg2));
+ return mapped;
+};
+
+$.array = function (values) {
+ if (values.constructor == Array)
+ return values;
+ _assert(typeof values.length != 'undefined', "$.array on underlying non-array");
+ var array = [];
+ for (var i = 0; i != values.length; ++i)
+ array.push(values[i]);
+ return array;
+};
+
+$.document = function (node) {
+ for (;;) {
+ var parent = node.parentNode;
+ if (parent == null)
+ return node;
+ node = parent;
+ }
+};
+
+$.reclass = function (_class) {
+ return new RegExp('(\\s|^)' + _class + '(\\s|$)');
+};
+
+$.prototype = {
+ magic_: 2041085062,
+
+ add: function (nodes) {
+ Array.prototype.push.apply(this, $.array(nodes));
+ },
+
+ at: function (name, value) {
+ if (typeof value == 'undefined')
+ return $.map(this, function (node) {
+ return node.getAttribute(name);
+ });
+ else if (value == null)
+ $.each(this, function (node) {
+ node.removeAttribute();
+ });
+ else
+ $.each(this, function (node) {
+ node.setAttribute(name, value);
+ });
+ },
+
+ set: function (nodes) {
+ this.length = 0;
+ this.add(nodes);
+ },
+
+ /* XXX: verify arg3 overflow */
+ each: function (_function, arg0, arg1, arg2) {
+ $.each(this, function (node) {
+ _function($([node]), arg0, arg1, arg2);
+ });
+ },
+
+ css: function (name, value) {
+ $.each(this, function (node) {
+ node.style[name] = value;
+ });
+ },
+
+ addClass: function (_class) {
+ $.each(this, function (node) {
+ if (!$([node]).hasClass(_class)[0])
+ node.className += " " + _class;
+ });
+ },
+
+ blur: function () {
+ $.each(this, function (node) {
+ node.blur();
+ });
+ },
+
+ focus: function () {
+ $.each(this, function (node) {
+ node.focus();
+ });
+ },
+
+ removeClass: function (_class) {
+ $.each(this, function (node) {
+ node.className = node.className.replace($.reclass(_class), ' ');
+ });
+ },
+
+ hasClass: function (_class) {
+ return $.map(this, function (node) {
+ return node.className.match($.reclass(_class));
+ });
+ },
+
+ append: function (children) {
+ if ($.type(children) == "string")
+ $.each(this, function (node) {
+ var doc = $.document(node);
+
+ // XXX: implement wrapper system
+ var div = doc.createElement("div");
+ div.innerHTML = children;
+
+ while (div.childNodes.length != 0) {
+ var child = div.childNodes[0];
+ node.appendChild(child);
+ }
+ });
+ else
+ $.each(this, function (node) {
+ $.each(children, function (child) {
+ node.appendChild(child);
+ });
+ });
+ },
+
+ xpath: function (expression) {
+ var value = $([]);
+
+ $.each(this, function (node) {
+ var doc = $.document(node);
+ var results = doc.evaluate(expression, node, null, XPathResult.ANY_TYPE, null);
+ var result;
+ while (result = results.iterateNext())
+ value.add([result]);
+ });
+
+ return value;
+ },
+
+ clone: function (deep) {
+ return $($.map(this, function (node) {
+ return node.cloneNode(deep);
+ }));
+ },
+
+ descendants: function (expression) {
+ var descendants = $([]);
+
+ $.each(this, function (node) {
+ var nodes = node.getElementsByTagName(expression);
+ descendants.add(nodes);
+ });
+
+ return descendants;
+ },
+
+ remove: function () {
+ $.each(this, function (node) {
+ node.parentNode.removeChild(node);
+ });
+ }
+};
+
+$.scroll = function (x, y) {
+ window.scrollTo(x, y);
+};
+
+// XXX: document.all?
+$.all = function (doc) {
+ if (typeof doc == 'undefined')
+ doc = document;
+ return $(doc.getElementsByTagName("*"));
+};
+
+$.inject = function (a, b) {
+ if ($.type(a) == "string") {
+ $.prototype[a] = function (value) {
+ if (typeof value == 'undefined')
+ return $.map(this, function (node) {
+ return b.get(node);
+ });
+ else
+ $.each(this, function (node, value) {
+ b.set(node, value);
+ }, value);
+ };
+ } else for (var name in a)
+ $.inject(name, a[name]);
+};
+
+$.inject({
+ _default: {
+ get: function (node) {
+ return node.style.defaultValue;
+ },
+ set: function (node, value) {
+ node.style.defaultValue = value;
+ }
+ },
+
+ height: {
+ get: function (node) {
+ return node.height;
+ },
+ set: function (node, value) {
+ node.height = value;
+ }
+ },
+
+ html: {
+ get: function (node) {
+ return node.innerHTML;
+ },
+ set: function (node, value) {
+ node.innerHTML = value;
+ }
+ },
+
+ href: {
+ get: function (node) {
+ return node.href;
+ },
+ set: function (node, value) {
+ node.href = value;
+ }
+ },
+
+ name: {
+ get: function (node) {
+ return node.name;
+ },
+ set: function (node, value) {
+ node.name = value;
+ }
+ },
+
+ parent: {
+ get: function (node) {
+ return node.parentNode;
+ }
+ },
+
+ src: {
+ get: function (node) {
+ return node.src;
+ },
+ set: function (node, value) {
+ node.src = value;
+ }
+ },
+
+ type: {
+ get: function (node) {
+ return node.localName;
+ }
+ },
+
+ value: {
+ get: function (node) {
+ return node.value;
+ },
+ set: function (node, value) {
+ // XXX: do I really need this?
+ if (true || node.localName != "select")
+ node.value = value;
+ else {
+ var options = node.options;
+ for (var i = 0, e = options.length; i != e; ++i)
+ if (options[i].value == value) {
+ if (node.selectedIndex != i)
+ node.selectedIndex = i;
+ break;
+ }
+ }
+ }
+ },
+
+ width: {
+ get: function (node) {
+ return node.offsetWidth;
+ }
+ }
+});
+
+// Query String Parsing {{{
+$.query = function () {
+ var args = {};
+
+ var search = location.search;
+ if (search != null) {
+ _assert(search[0] == "?", "query string without ?");
+
+ var values = search.substring(1).split("&");
+ for (var index in values) {
+ var value = values[index]
+ var equal = value.indexOf("=");
+ var name;
+
+ if (equal == -1) {
+ name = value;
+ value = null;
+ } else {
+ name = value.substring(0, equal);
+ value = value.substring(equal + 1);
+ value = decodeURIComponent(value);
+ }
+
+ name = decodeURIComponent(name);
+ if (typeof args[name] == "undefined")
+ args[name] = [];
+ if (value != null)
+ args[name].push(value);
+ }
+ }
+
+ return args;
+};
+// }}}
+// Event Registration {{{
+// XXX: unable to remove registration
+$.prototype.event = function (event, _function) {
+ $.each(this, function (node) {
+ // XXX: smooth over this pointer ugliness
+ if (node.addEventListener)
+ node.addEventListener(event, _function, false);
+ else if (node.attachEvent)
+ node.attachEvent("on" + event, _function);
+ else
+ // XXX: multiple registration SNAFU
+ node["on" + event] = _function;
+ });
+};
+
+$.each([
+ "click", "load", "submit"
+], function (event) {
+ $.prototype[event] = function (_function) {
+ if (typeof _function == 'undefined')
+ _assert(false, "undefined function to $.[event]");
+ else
+ this.event(event, _function);
+ };
+});
+// }}}
+// Timed Animation {{{
+$.interpolate = function (duration, event) {
+ var start = new Date();
+
+ var next = function () {
+ setTimeout(update, 0);
+ };
+
+ var update = function () {
+ var time = new Date() - start;
+
+ if (time >= duration)
+ event(1);
+ else {
+ event(time / duration);
+ next();
+ }
+ };
+
+ next();
+};
+// }}}
+// AJAX Requests {{{
+// XXX: abstract and implement other cases
+$.xhr = function (url, method, headers, data, events) {
+ var xhr = new XMLHttpRequest();
+ xhr.open(method, url, true);
+
+ for (var name in headers)
+ xhr.setRequestHeader(name.replace(/_/, "-"), headers[name]);
+
+ if (events == null)
+ events = {};
+
+ xhr.onreadystatechange = function () {
+ if (xhr.readyState == 4) {
+ var status = xhr.status;
+ var text = xhr.responseText;
+ if (events.response != null)
+ events.response(status, text);
+ if (status == 200) {
+ if (events.success != null)
+ events.success(text);
+ } else {
+ if (events.failure != null)
+ events.failure(status);
+ }
+ }
+ };
+
+ xhr.send(data);
+};
+
+$.call = function (url, post, onsuccess) {
+ var events = {};
+
+ if (onsuccess != null)
+ events.complete = function (text) {
+ onsuccess(eval(text));
+ };
+
+ if (post == null)
+ $.xhr(url, "POST", null, null, events);
+ else
+ $.xhr(url, "POST", {
+ Content_Type: "application/json"
+ }, $.json(post), events);
+};
+// }}}
+// WWW Form URL Encoder {{{
+$.form = function (parameters) {
+ var data = "";
+
+ var ampersand = false;
+ for (var name in parameters) {
+ if (!ampersand)
+ ampersand = true;
+ else
+ data += "&";
+
+ var value = parameters[name];
+
+ data += escape(name);
+ data += "=";
+ data += escape(value);
+ }
+
+ return data;
+};
+// }}}
+// JSON Serializer {{{
+$.json = function (value) {
+ if (value == null)
+ return "null";
+
+ var type = $.type(value);
+
+ if (type == "number")
+ return value;
+ else if (type == "string")
+ return "\"" + value
+ .replace(/\\/, "\\\\")
+ .replace(/\t/, "\\t")
+ .replace(/\r/, "\\r")
+ .replace(/\n/, "\\n")
+ .replace(/"/, "\\\"")
+ + "\"";
+ else if (value.constructor == Array) {
+ var json = "[";
+ var comma = false;
+
+ for (var i = 0; i != value.length; ++i) {
+ if (!comma)
+ comma = true;
+ else
+ json += ",";
+
+ json += $.json(value[i]);
+ }
+
+ return json + "]";
+ } else if (
+ value.constructor == Object &&
+ value.toString() == "[object Object]"
+ ) {
+ var json = "{";
+ var comma = false;
+
+ for (var name in value) {
+ if (!comma)
+ comma = true;
+ else
+ json += ",";
+
+ json += name + ":" + $.json(value[name]);
+ }
+ return json + "}";
+ } else {
+ return value;
+ }
+};
+// }}}
diff --git a/MobileCydia.app/menes/style.css b/MobileCydia.app/menes/style.css
new file mode 100644
index 0000000..677a2fc
--- /dev/null
+++ b/MobileCydia.app/menes/style.css
@@ -0,0 +1,885 @@
+/* iPhone.css - iPhone Interface Cascading Style Sheet
+ * Copyright (C) 2007-2008 Jay Freeman (saurik)
+*/
+
+/*
+ * Redistribution and use in source and binary
+ * forms, with or without modification, are permitted
+ * provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the
+ * above copyright notice, this list of conditions
+ * and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the
+ * above copyright notice, this list of conditions
+ * and the following disclaimer in the documentation
+ * and/or other materials provided with the
+ * distribution.
+ * 3. The name of the author may not be used to endorse
+ * or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/* .clearfix {{{ */
+.clearfix:after {
+ content: ".";
+ display: block;
+ clear: both;
+ visibility: hidden;
+ line-height: 0;
+ height: 0;
+}
+
+.clearfix {
+ display: block;
+}
+/* }}} */
+
+* {
+ border: 0;
+ -moz-border-radius: 0;
+ -webkit-border-radius: 0;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ -ms-box-sizing: border-box;
+ -webkit-box-sizing: border-box;
+ /*font-family: inherit;*/
+ font-size: 100%;
+ font-style: inherit;
+ font-weight: inherit;
+ margin: 0;
+ outline: 0;
+ padding: 0;
+ text-decoration: none;
+ vertical-align: baseline;
+}
+
+a {
+ color: inherit;
+}
+
+sup {
+ font-size: smaller;
+ margin-top: -6px;
+ position: relative;
+ top: -6px;
+}
+
+select {
+ border: 1px solid #999999;
+}
+
+panel {
+ display: block;
+ width: 320px;
+}
+
+body {
+ font-family: Helvetica, Arial;
+ -webkit-text-size-adjust: none;
+ -webkit-user-select: none;
+ margin: 0 auto;
+ width: 320px;
+}
+
+body.white {
+ background-color: #ffffff;
+}
+
+body.pinstripe {
+ background: #c7ced5 url(cydia://uikit-image/UIPinstripe.png);
+ background-size: 7px 1px;
+}
+
+dialog {
+ display: block;
+ position: absolute;
+ width: 100%;
+}
+
+dialog > panel {
+ display: block;
+}
+
+a {
+ color: blue;
+ text-underline-style: dotted;
+}
+
+strong {
+ font-weight: bold
+}
+
+pre, tt {
+ font-family: monospace;
+}
+
+pre {
+ letter-spacing: -2px;
+}
+
+em {
+ font-style: italic;
+}
+
+.default {
+ color: #aaaabb;
+}
+
+.deleted {
+ display: none;
+}
+
+/* #toolbar {{{ */
+dialog > toolbar {
+ background: url(toolbar.png) #6d84a2 repeat-x;
+ border-bottom: 1px solid #2d3642;
+ height: 45px;
+ padding: 10px;
+}
+
+dialog > toolbar > h1 {
+ color: #ffffff;
+ font-size: 20px;
+ font-weight: bold;
+ height: 100%;
+ margin: 1px auto 0 auto;
+ text-shadow: rgba(0, 0, 0, 0.4) 0px -1px 0;
+ text-align: center;
+ white-space: nowrap;
+}
+/* }}} */
+/* (back|forward)-button {{{ */
+dialog > toolbar > a.back-button,
+dialog > toolbar > a.forward-button {
+ color: #ffffff;
+ font-size: 12px;
+ font-weight: bold;
+ height: 30px;
+ line-height: 30px;
+ margin-top: -28px;
+ padding: 0 3px;
+ text-decoration: none;
+ text-shadow: rgba(0, 0, 0, 0.6) 0px -1px 0;
+ white-space: nowrap;
+}
+
+dialog > toolbar > a.back-button {
+ -webkit-border-image: url(backButton.png) 0 8 0 14;
+ border-width: 0 8px 0 14px;
+ float: left;
+}
+
+dialog > toolbar > a.forward-button {
+ -webkit-border-image: url(toolButton.png) 0 5 0 5;
+ border-width: 0 5px;
+ float: right;
+}
+/* }}} */
+
+panel > block {
+ /*background-color: #ccd1d5;*/
+ /*background-color: white;*/
+ /*background-color: #c7ced5;*/
+ background-color: transparent;
+ //background-color: #ffffff;
+ border-bottom: 1px solid #999999;
+ border-top: 1px solid #999999;
+ border-left: 1px dotted #999999;
+ border-right: 1px dotted #999999;
+ -moz-border-radius: 9px;
+ -webkit-border-radius: 9px;
+ //border: 1px solid #999999;
+ display: block;
+ font-size: 16px;
+ margin: 9px;
+ padding: 0 10px;
+}
+
+panel > fieldset > div > hr,
+panel > block > hr {
+ border-top: 1px dashed #999999;
+}
+
+panel > fieldset {
+ background-color: #ffffff;
+ border: 1px solid #999999;
+ -moz-border-radius: 9px;
+ -webkit-border-radius: 9px;
+ font-size: 16px;
+ margin: 9px;
+}
+
+panel > input[type="submit"] {
+ /*-webkit-border-image: url(whiteButton.png) 0 12 0 12;
+ -moz-border-radius: 0;
+ -webkit-border-radius: 0;
+ border-width: 0px 12px;*/
+ border: none;
+ color: #000000;
+ display: block;
+ font-size: 20px;
+ font-weight: bold;
+ margin: 9px;
+ height: 44px;
+ padding: 10px;
+ text-align: center;
+ width: 302px;
+}
+
+list > label {
+ background: #a7b3bc url(cydia://uikit-image/UISectionListHeaderBackground.png);
+ background-repeat: repeat-x no-repeat-y;
+ margin-bottom: 0px;
+ padding: 4px 15px 1px 15px;
+ display: block;
+ color: white;
+ font-size: inherit;
+ font-weight: bold;
+ text-shadow: rgba(0, 0, 0, 0.5) 0px 1px 0;
+}
+
+panel > label {
+ display: block;
+ margin: 13px 0 -4px 24px;
+ line-height: 24px;
+ font-size: inherit;
+ font-weight: bold;
+ color: #4d4d70;
+ text-shadow: rgba(255, 255, 255, 0.75) 1px 1px 0;
+}
+
+panel > fieldset > a,
+panel > fieldset > div,
+panel > fieldset > textarea {
+ border-top: 1px solid #999999;
+}
+
+/* XXX: should be a.left:nth-last-child(2) */
+panel > fieldset > a.left,
+panel > fieldset > a.middle,
+panel > fieldset > a:first-child,
+panel > fieldset > div:first-child,
+panel > fieldset > textarea:first-child {
+ border-top: 0;
+}
+
+list > fieldset > a,
+list > fieldset > div,
+list > fieldset > textarea {
+ border-bottom: 1px solid #e0e0e0;
+}
+
+fieldset > a:not([type="ad"]),
+fieldset > div,
+fieldset > textarea {
+ /* XXX: small differences due to font bugs */
+ padding: 12px 14px 10px 14px;
+}
+
+/*fieldset > a:not([type="ad"]):last-child,
+fieldset > div:last-child {
+ padding-bottom: 10px;
+}*/
+
+fieldset > a[type="ad"] {
+ /* XXX: small differences due to font bugs */
+ padding: 4px 4px 2px 5px;
+}
+
+panel > fieldset > a[type="ad"]:first-child > div:first-child,
+panel > fieldset > a[type="comment"]:first-child > div:first-child,
+panel > fieldset > a[type="profile"]:first-child > div:first-child,
+panel > fieldset > a[type="thumb"]:first-child > div:first-child {
+ -moz-border-radius-topleft: 9px;
+ -webkit-border-top-left-radius: 9px;
+}
+
+panel > fieldset > a[type="ad"]:last-child > div:first-child,
+panel > fieldset > a[type="comment"]:last-child > div:first-child,
+panel > fieldset > a[type="profile"]:last-child > div:first-child,
+panel > fieldset > a[type="thumb"]:last-child > div:first-child {
+ -moz-border-radius-bottomleft: 9px;
+ -webkit-border-bottom-left-radius: 9px;
+}
+
+fieldset > a[type="ad"] > div:first-child {
+ border: 1px solid #999999;
+}
+
+list > fieldset > a[type="comment"] > div:first-child,
+list > fieldset > a[type="profile"] > div:first-child,
+list > fieldset > a[type="thumb"] > div:first-child {
+ border: 1px solid #e0e0e0;
+}
+
+panel > fieldset > a[type="comment"] > div:first-child {
+ border: 1px solid #999999;
+ border-bottom-style: dashed;
+}
+
+panel > fieldset > a[type="profile"] > div:first-child,
+panel > fieldset:not(.header) > a[type="thumb"] > div:first-child {
+ border: 1px solid #999999;
+}
+
+div[tile] {
+ float: right;
+ height: 30px;
+ width: 30px;
+}
+
+div[tile="app"] { background-image: url(http://cache.saurik.com/cydia/tile/app.png); }
+div[tile="call"] { background-image: url(http://cache.saurik.com/cydia/tile/call.png); }
+div[tile="map"] { background-image: url(http://cache.saurik.com/cydia/tile/map.png); }
+div[tile="media"] { background-image: url(http://cache.saurik.com/cydia/tile/media.png); }
+div[tile="music"] { background-image: url(http://cache.saurik.com/cydia/tile/video.png); }
+div[tile="site"] { background-image: url(http://cache.saurik.com/cydia/tile/site.png); }
+
+fieldset > a[type="ad"] > div:first-child {
+ background-repeat: no-repeat;
+ background-position: center center;
+ border-right: none;
+ display: inline-block;
+ height: 40px;
+ line-height: 38px;
+ /* XXX: small differences due to font bugs */
+ /* XXX: 1px difference due to border stupidity */
+ margin: -5px 5px -3px -6px;
+ width: 40px;
+}
+
+panel > fieldset > a[type="comment"] {
+ border-bottom-style: dashed;
+}
+
+fieldset > a[type="comment"] > div:first-child {
+ -webkit-background-size: 44px;
+ height: 44px;
+ width: 44px;
+}
+
+fieldset > a[type="header"] > div:first-child {
+ height: 64px;
+ width: 64px;
+}
+
+fieldset > a[type="profile"] > div:first-child {
+ -webkit-background-size: 50px;
+ height: 50px;
+ width: 50px;
+}
+
+fieldset > a[type="thumb"] > div:first-child {
+ height: 64px;
+ width: 64px;
+}
+
+fieldset > a[type="comment"] > div:first-child,
+fieldset > a[type="header"] > div:first-child,
+fieldset > a[type="profile"] > div:first-child,
+fieldset > a[type="thumb"] > div:first-child {
+ background-repeat: no-repeat;
+ background-position: center center;
+ display: inline-block;
+ /* XXX: small differences due to font bugs */
+ /* XXX: 1px difference due to border stupidity */
+ margin: -13px 7px -11px -15px;
+}
+
+fieldset > a > img.icon,
+fieldset > div > img.icon {
+ height: auto;
+ /* XXX: small differences due to font bugs */
+ margin: -7px 6px -9px -8px;
+ max-height: 30px;
+ min-width: 30px;
+ width: 30px;
+}
+
+fieldset > a.sixth > img.icon {
+ position: relative;
+ left: 7px;
+}
+
+panel > block > p,
+fieldset > div > p,
+panel > block > ul,
+fieldset > div > ul {
+ margin: 10px 0;
+}
+
+panel > block > ul,
+fieldset > div > ul {
+ margin-left: 13px;
+}
+
+panel > block > p,
+fieldset > div > p {
+ text-align: center;
+}
+
+fieldset > div > p:first-child,
+fieldset > div > ul:first-child {
+ margin-top: 0;
+}
+
+fieldset > div > p:last-child,
+fieldset > div > ul:last-child {
+ margin-bottom: 0;
+}
+
+fieldset > a {
+ color: inherit;
+ display: block;
+}
+
+fieldset > textarea,
+fieldset > div > input:not([type="checkbox"]),
+fieldset > div > select,
+fieldset > div > div > select {
+ background: none;
+ -webkit-box-shadow: none;
+ -webkit-appearance: none;
+}
+
+/* Chevrons {{{ */
+
+fieldset > a[href]:not([type="ad"]),
+fieldset > div > select,
+fieldset > div > div > select {
+ background-repeat: no-repeat;
+ background-image: url(chevron.png);
+}
+
+@media screen and (-webkit-min-device-pixel-ratio: 2) {
+fieldset > a[href]:not([type="ad"]),
+fieldset > div > select,
+fieldset > div > div > select {
+ background-image: url(chevron@2x.png);
+ background-size: 10px 13px;
+} }
+
+/* Horizontal */
+
+list > fieldset > a[href] {
+ background-position: 295px center;
+}
+
+panel > fieldset > a[href] {
+ background-position: 275px center;
+}
+
+panel > fieldset > a[href].half {
+ background-position: 125px center;
+}
+
+panel > fieldset > a[href].third {
+ background-position: 75px center;
+}
+
+panel > fieldset > a[href].sixth {
+ background: none;
+}
+
+list > fieldset > a:not([href]) > select,
+list > fieldset > div > select,
+list > fieldset > div > div > select {
+ background-position: 183px center;
+}
+
+panel > fieldset > a:not([href]) > select,
+panel > fieldset > div > select,
+panel > fieldset > div > div > select {
+ background-position: 163px center;
+}
+
+/* }}} */
+
+fieldset > textarea,
+fieldset > div > input,
+fieldset > div > select,
+fieldset > div > div > select,
+fieldset > a > div > label + label,
+fieldset > div > div > label + label {
+ color: #193250;
+}
+
+fieldset > textarea,
+fieldset > div > input,
+fieldset > div > select,
+fieldset > div > div > select {
+ font-size: 16px;
+}
+
+fieldset > div > input {
+ padding-left: 7px;
+ padding-right: 14px;
+}
+
+fieldset > div > input[type="checkbox"] {
+ border: 1px solid #999999;
+ -moz-border-radius: 7px;
+ -webkit-border-radius: 7px;
+ float: right;
+ margin: -7px -8px;
+ height: 30px;
+ width: 30px;
+}
+
+fieldset > div > select,
+fieldset > div > div > select,
+fieldset > div > input:not([type="checkbox"]) {
+ border: none;
+ float: right;
+ height: 40px;
+ margin: -11px -13px -11px -14px;
+}
+
+panel > fieldset > div > select,
+panel > fieldset > div > div > select,
+panel > fieldset > div > input:not([type="checkbox"]) {
+ width: 187px;
+}
+
+list > fieldset > div > select,
+list > fieldset > div > div > select,
+list > fieldset > div > input:not([type="checkbox"]) {
+ width: 207px;
+}
+
+fieldset > textarea {
+ padding: 10px;
+ width: 320px;
+}
+
+fieldset > div > div,
+fieldset > a > div {
+ display: inline-block;
+}
+
+fieldset > div > div {
+ width: 273px;
+}
+
+fieldset > a[type="ad"] > div:nth-child(2) {
+ width: 218px;
+}
+
+fieldset > a:not([type]) > div {
+ width: 250px;
+}
+
+fieldset > a:not([href]) > img.icon + div,
+fieldset > div > img.icon + div {
+ width: 244px;
+}
+
+fieldset > a[href] > img.icon + div {
+ width: 221px;
+}
+
+fieldset > a[type="profile"] > div:nth-child(2) > label:nth-child(1).unknown {
+ color: #aaaabb;
+}
+
+fieldset > a[type="profile"] > div:nth-child(2) > label:only-child {
+ left: 4px;
+ position: relative;
+ top: 3px;
+}
+
+fieldset > a[type="thumb"] > div:nth-child(2) > label:only-child {
+ position: relative;
+ top: 10px;
+}
+
+fieldset > a[type="profile"] > div:nth-child(2) > label + label {
+ display: block;
+ font-size: 13px;
+ margin-top: 2px;
+}
+
+fieldset > a[type="thumb"] > div:nth-child(2) > label + label {
+ display: block;
+ margin-top: 2px;
+}
+
+fieldset > a[type="profile"] > div:nth-child(2) {
+ width: 207px;
+}
+
+fieldset > a[type="thumb"] > div:nth-child(2) {
+ width: 193px;
+}
+
+fieldset > a[type="profile"] > div:nth-child(2) {
+ margin: -5px 0;
+}
+
+fieldset > a[type="profile"] > div:nth-child(2),
+fieldset > a[type="thumb"] > div:nth-child(2) {
+ vertical-align: top;
+}
+
+fieldset > a > label:first-child,
+fieldset > a > div > label:first-child,
+fieldset > div > label:first-child,
+fieldset > div > div > label:first-child {
+ font-weight: bold;
+}
+
+/* XXX: this doesn't handle icon offsets */
+list > fieldset > a:not([type]) > div > label + label,
+list > fieldset > div > div > label + label {
+ margin-left: 94px;
+}
+
+panel > fieldset > a:not([type]) > div > label + label,
+panel > fieldset > div > div > label + label {
+ float: right;
+ text-align: right;
+}
+
+panel > img {
+ display: block;
+ margin: 9px auto 4px auto;
+ height: auto;
+ width: 300px;
+}
+
+fieldset > a[type="ad"] {
+}
+
+fieldset > a[type="ad"] > div:nth-child(2) {
+ position: relative;
+ vertical-align: top;
+}
+
+fieldset > a[type="ad"] > div > label:first-child {
+ color: #2d2d50;
+ font-size: 13px;
+ font-weight: bold;
+ line-height: 15px;
+}
+
+fieldset > a[type="ad"] > div > label + label {
+ position: absolute;
+ top: 17px;
+ left: 156px;
+ font-size: 9.5px;
+ font-weight: normal;
+}
+
+panel > fieldset > a.middle,
+panel > fieldset > a.right {
+ border-left: 1px solid #999999;
+}
+
+panel > fieldset > a.half {
+ display: inline-block;
+ width: 150px;
+}
+
+panel > fieldset > a.third {
+ display: inline-block;
+ width: 100px;
+}
+
+panel > fieldset > a.sixth {
+ display: inline-block;
+ width: 50px;
+}
+
+fieldset.half > a {
+ background: none;
+ background-position: 120px center;
+}
+
+fieldset.half > a > img.icon + div {
+ width: 65px;
+}
+
+fieldset.right {
+ float: right;
+ margin-left: 10px;
+}
+
+block + fieldset.right,
+fieldset + fieldset.right {
+ margin-top: 0;
+}
+
+fieldset.half {
+ width: 146px;
+}
+
+panel > fieldset.dashed > a,
+panel > fieldset.dashed > div,
+panel > fieldset.dashed > textarea,
+list > fieldset.dashed > a,
+list > fieldset.dashed > div,
+list > fieldset.dashed > textarea {
+ border-style: dashed;
+}
+
+fieldset > a[type="thumb"]:first-child > back {
+ -moz-border-radius-topright: 9px;
+ -webkit-border-top-right-radius: 9px;
+}
+
+fieldset > a[type="thumb"]:last-child > back {
+ -moz-border-radius-bottomright: 9px;
+ -webkit-border-bottom-right-radius: 9px;
+}
+
+fieldset > a[type="thumb"] > back {
+ background-repeat: no-repeat;
+ border: 1px solid #999999;
+ display: block;
+ height: 64px;
+ left: 62px;
+ position: absolute;
+ opacity: 0.2;
+ top: -1px;
+ width: 237px;
+}
+
+.mm {
+ border: 1px solid #999999;
+ -moz-border-radius: 9px;
+ -webkit-border-radius: 9px;
+}
+
+a.mm {
+ display: block;
+ margin: 9px;
+}
+
+div.mm img {
+ height: auto;
+ width: 300px;
+}
+
+fieldset > a.small {
+ font-size: 12px;
+ padding-top: 9px;
+}
+
+fieldset > a.small label {
+ display: inline-block;
+ position: relative;
+ top: 1px;
+}
+
+fieldset > a.small > img.icon {
+ max-height: 22px;
+ min-width: 22px;
+ width: 22px;
+}
+
+fieldset > a.small.half > img.icon + div {
+ width: 79px;
+}
+
+fieldset > a.small.third > img.icon + div {
+ width: 50px;
+}
+
+fieldset > a.small.sixth > img.icon + div {
+ width: 0px;
+}
+
+panel.centered > label {
+ margin-left: 0px;
+ margin-right: 0px;
+ text-align: center;
+}
+
+panel > iframe {
+ margin: -9px 0;
+}
+
+panel > iframe:first-child,
+panel > iframe + iframe {
+ margin-top: 0;
+}
+
+/* Rating Stars {{{ */
+.ratings {
+ margin: -2px 0;
+ text-align: center;
+}
+
+.rated {
+ display: inline-block;
+}
+
+.rated.left {
+ margin-right: 9px;
+}
+
+.rated label {
+ font-weight: bold;
+ margin-right: 3px;
+ position: relative;
+ top: -3px;
+}
+
+.rating {
+ display: inline-block;
+ width: 80px;
+}
+
+.rating .back,
+.rating .fore,
+.rating .star {
+ background: url(http://cache.saurik.com/crystal/16x16/actions/knewstuff.png);
+ height: 16px;
+}
+
+.rating .back,
+.rating .fore {
+ width: 80px;
+}
+
+.rating .star {
+ display: inline-block;
+ width: 16px;
+}
+
+.rating .back {
+ opacity: 0.2;
+}
+
+.rating .fore {
+ /*border-right: 1px solid #999999;*/
+ position: absolute;
+}
+/* }}} */
+
+panel > fieldset.header {
+ background-color: transparent;
+ border: none;
+ margin: -5px 9px -11px 9px;
+}
+
+panel > fieldset.header > a > div > label {
+ color: #4d4d70;
+ text-shadow: rgba(255, 255, 255, 0.75) 1px 1px 0;
+}